summaryrefslogtreecommitdiff
path: root/spec/ruby/library/matrix/hash_spec.rb
blob: 7dabcd3737cf3f1ab96948e2d15bb17edf7bd714 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
require_relative '../../spec_helper'
require 'matrix'

describe "Matrix#hash" do

  it "returns an Integer" do
    Matrix[ [1,2] ].hash.should be_an_instance_of(Integer)
  end

  it "returns the same value for the same matrix" do
    data = [ [40,5], [2,7] ]
    Matrix[ *data ].hash.should == Matrix[ *data ].hash
  end

end
/> -rw-r--r--.editorconfig16
-rw-r--r--.gdbinit882
-rw-r--r--.gitignore137
-rw-r--r--.indent.pro21
-rw-r--r--.travis.yml86
-rw-r--r--BSDL22
-rw-r--r--COPYING56
-rw-r--r--COPYING.ja51
-rw-r--r--ChangeLog20426
-rw-r--r--GPL339
-rw-r--r--KNOWNBUGS.rb5
-rw-r--r--LEGAL533
-rw-r--r--MANIFEST156
-rw-r--r--Makefile.in645
-rw-r--r--NEWS380
-rw-r--r--README197
-rw-r--r--README.EXT1975
-rw-r--r--README.EXT.ja1650
-rw-r--r--README.ja192
-rw-r--r--README.jp159
-rw-r--r--ToDo7
-rw-r--r--addr2line.c1082
-rw-r--r--addr2line.h21
-rw-r--r--array.c5957
-rw-r--r--benchmark/bm_app_answer.rb15
-rw-r--r--benchmark/bm_app_aobench.rb292
-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_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_hash_flatten.rb9
-rw-r--r--benchmark/bm_hash_keys.rb9
-rw-r--r--benchmark/bm_hash_shift.rb10
-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_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_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.rb10
-rw-r--r--benchmark/bm_vm1_gc_wb_obj.rb13
-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_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_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_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
-rwxr-xr-xbenchmark/bm_vm3_gc.rb7
-rw-r--r--benchmark/bm_vm_thread_alive_check1.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.rb301
-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_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.c7596
-rwxr-xr-xbin/erb155
-rwxr-xr-xbin/gem25
-rwxr-xr-xbin/irb11
-rwxr-xr-xbin/rake33
-rwxr-xr-xbin/rdoc44
-rwxr-xr-xbin/ri12
-rwxr-xr-xbin/testrb3
-rw-r--r--bootstraptest/pending.rb39
-rwxr-xr-xbootstraptest/runner.rb485
-rw-r--r--bootstraptest/test_attr.rb36
-rw-r--r--bootstraptest/test_autoload.rb70
-rw-r--r--bootstraptest/test_block.rb599
-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.rb69
-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.rb1220
-rw-r--r--bootstraptest/test_objectspace.rb46
-rw-r--r--bootstraptest/test_proc.rb483
-rw-r--r--bootstraptest/test_struct.rb5
-rw-r--r--bootstraptest/test_syntax.rb902
-rw-r--r--bootstraptest/test_thread.rb464
-rw-r--r--class.c2030
-rw-r--r--common.mk1104
-rw-r--r--compar.c247
-rw-r--r--compile.c5951
-rw-r--r--complex.c2211
-rw-r--r--config.dj35
-rwxr-xr-xconfig.guess568
-rwxr-xr-xconfig.sub922
-rw-r--r--configure.bat5
-rw-r--r--configure.in4095
-rw-r--r--constant.h36
-rw-r--r--cont.c1696
-rw-r--r--cygwin/GNUmakefile.in109
-rw-r--r--debug.c162
-rw-r--r--defines.h36
-rw-r--r--defs/default_gems5
-rw-r--r--defs/gmake.mk29
-rw-r--r--defs/id.def105
-rw-r--r--defs/keywords53
-rw-r--r--defs/known_errors.def145
-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.c2288
-rw-r--r--dln.c820
-rw-r--r--dln.h45
-rw-r--r--dln_find.c294
-rw-r--r--dmydln.c9
-rw-r--r--dmyext.c7
-rw-r--r--doc/.document4
-rw-r--r--doc/ChangeLog-1.8.024350
-rw-r--r--doc/ChangeLog-1.9.392772
-rw-r--r--doc/ChangeLog-2.0.024015
-rw-r--r--doc/ChangeLog-YARV6917
-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/contributing.rdoc459
-rw-r--r--doc/contributors.rdoc778
-rw-r--r--doc/dtrace_probes.rdoc178
-rw-r--r--doc/etc.rd.ja75
-rw-r--r--doc/forwardable.rd.ja80
-rw-r--r--doc/globals.rdoc69
-rw-r--r--doc/images/boottime-classes.pngbin0 -> 28677 bytes-rw-r--r--doc/irb/irb-tools.rd.ja184
-rw-r--r--doc/irb/irb.rd.ja412
-rw-r--r--doc/maintainers.rdoc322
-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.rdoc685
-rw-r--r--doc/security.rdoc144
-rw-r--r--doc/shell.rd.ja335
-rw-r--r--doc/standard_library.rdoc125
-rw-r--r--doc/syntax.rdoc34
-rw-r--r--doc/syntax/assignment.rdoc455
-rw-r--r--doc/syntax/calling_methods.rdoc349
-rw-r--r--doc/syntax/control_expressions.rdoc500
-rw-r--r--doc/syntax/exceptions.rdoc96
-rw-r--r--doc/syntax/literals.rdoc307
-rw-r--r--doc/syntax/methods.rdoc414
-rw-r--r--doc/syntax/miscellaneous.rdoc107
-rw-r--r--doc/syntax/modules_and_classes.rdoc345
-rw-r--r--doc/syntax/precedence.rdoc60
-rw-r--r--doc/syntax/refinements.rdoc266
-rw-r--r--enc/Makefile.in82
-rw-r--r--enc/ascii.c96
-rw-r--r--enc/big5.c373
-rw-r--r--enc/cp949.c221
-rw-r--r--enc/depend160
-rw-r--r--enc/emacs_mule.c341
-rw-r--r--enc/encdb.c31
-rw-r--r--enc/encinit.c.erb26
-rw-r--r--enc/euc_jp.c644
-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.c289
-rw-r--r--enc/iso_8859_10.c246
-rw-r--r--enc/iso_8859_11.c113
-rw-r--r--enc/iso_8859_13.c245
-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.c254
-rw-r--r--enc/iso_8859_3.c242
-rw-r--r--enc/iso_8859_4.c244
-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/koi8_r.c221
-rw-r--r--enc/koi8_u.c223
-rwxr-xr-xenc/make_encmake.rb136
-rw-r--r--enc/mktable.c1162
-rw-r--r--enc/prelude.rb6
-rw-r--r--enc/shift_jis.c614
-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.src127
-rw-r--r--enc/trans/JIS/JISX0208@1990%UCS.src6972
-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.src6167
-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.src127
-rw-r--r--enc/trans/JIS/UCS%JISX0208@1990.src6974
-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.src6170
-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/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.c680
-rw-r--r--enc/unicode/casefold.h2238
-rw-r--r--enc/unicode/name2ctype.h28722
-rw-r--r--enc/unicode/name2ctype.h.blt28722
-rw-r--r--enc/unicode/name2ctype.kwd26550
-rw-r--r--enc/unicode/name2ctype.src26550
-rw-r--r--enc/us_ascii.c33
-rw-r--r--enc/utf_16_32.h5
-rw-r--r--enc/utf_16be.c258
-rw-r--r--enc/utf_16le.c250
-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.c457
-rw-r--r--enc/windows_1251.c210
-rw-r--r--enc/windows_31j.c80
-rw-r--r--enc/x_emoji.h26
-rw-r--r--encoding.c1950
-rw-r--r--enum.c2900
-rw-r--r--enumerator.c2087
-rw-r--r--env.h49
-rw-r--r--error.c2574
-rw-r--r--eval.c5344
-rw-r--r--eval_error.c304
-rw-r--r--eval_intern.h270
-rw-r--r--eval_jump.c142
-rw-r--r--ext/-test-/array/resize/extconf.rb1
-rw-r--r--ext/-test-/array/resize/resize.c14
-rw-r--r--ext/-test-/bignum/big2str.c54
-rw-r--r--ext/-test-/bignum/bigzero.c26
-rw-r--r--ext/-test-/bignum/depend7
-rw-r--r--ext/-test-/bignum/div.c36
-rw-r--r--ext/-test-/bignum/extconf.rb7
-rw-r--r--ext/-test-/bignum/init.c11
-rw-r--r--ext/-test-/bignum/intpack.c88
-rw-r--r--ext/-test-/bignum/mul.c66
-rw-r--r--ext/-test-/bignum/str2big.c39
-rw-r--r--ext/-test-/bug-3571/bug.c23
-rw-r--r--ext/-test-/bug-3571/extconf.rb1
-rw-r--r--ext/-test-/bug-3662/bug.c16
-rw-r--r--ext/-test-/bug-3662/extconf.rb1
-rw-r--r--ext/-test-/bug-5832/bug.c14
-rw-r--r--ext/-test-/bug-5832/extconf.rb1
-rw-r--r--ext/-test-/bug_reporter/bug_reporter.c24
-rw-r--r--ext/-test-/bug_reporter/extconf.rb1
-rw-r--r--ext/-test-/class/class2name.c14
-rw-r--r--ext/-test-/class/extconf.rb7
-rw-r--r--ext/-test-/class/init.c11
-rw-r--r--ext/-test-/debug/depend3
-rw-r--r--ext/-test-/debug/extconf.rb6
-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-/exception/dataerror.c31
-rw-r--r--ext/-test-/exception/depend3
-rw-r--r--ext/-test-/exception/enc_raise.c15
-rw-r--r--ext/-test-/exception/ensured.c25
-rw-r--r--ext/-test-/exception/extconf.rb6
-rw-r--r--ext/-test-/exception/init.c11
-rw-r--r--ext/-test-/fatal/extconf.rb1
-rw-r--r--ext/-test-/fatal/rb_fatal.c19
-rw-r--r--ext/-test-/file/depend2
-rw-r--r--ext/-test-/file/extconf.rb7
-rw-r--r--ext/-test-/file/init.c11
-rw-r--r--ext/-test-/file/stat.c27
-rw-r--r--ext/-test-/funcall/extconf.rb2
-rw-r--r--ext/-test-/funcall/passing_block.c30
-rw-r--r--ext/-test-/iter/break.c25
-rw-r--r--ext/-test-/iter/extconf.rb7
-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.rb1
-rw-r--r--ext/-test-/marshal/compat/extconf.rb1
-rw-r--r--ext/-test-/marshal/compat/usrcompat.c32
-rw-r--r--ext/-test-/marshal/usr/extconf.rb1
-rw-r--r--ext/-test-/marshal/usr/usrmarshal.c35
-rw-r--r--ext/-test-/method/arity.c22
-rw-r--r--ext/-test-/method/extconf.rb6
-rw-r--r--ext/-test-/method/init.c11
-rw-r--r--ext/-test-/num2int/extconf.rb1
-rw-r--r--ext/-test-/num2int/num2int.c136
-rw-r--r--ext/-test-/old_thread_select/depend4
-rw-r--r--ext/-test-/old_thread_select/extconf.rb4
-rw-r--r--ext/-test-/old_thread_select/old_thread_select.c75
-rw-r--r--ext/-test-/path_to_class/extconf.rb6
-rw-r--r--ext/-test-/path_to_class/path_to_class.c15
-rw-r--r--ext/-test-/postponed_job/depend1
-rw-r--r--ext/-test-/postponed_job/extconf.rb1
-rw-r--r--ext/-test-/postponed_job/postponed_job.c53
-rw-r--r--ext/-test-/printf/depend3
-rw-r--r--ext/-test-/printf/extconf.rb1
-rw-r--r--ext/-test-/printf/printf.c110
-rw-r--r--ext/-test-/rational/depend3
-rw-r--r--ext/-test-/rational/extconf.rb7
-rw-r--r--ext/-test-/rational/rat.c38
-rw-r--r--ext/-test-/recursion/extconf.rb2
-rw-r--r--ext/-test-/recursion/recursion.c28
-rw-r--r--ext/-test-/st/numhash/extconf.rb1
-rw-r--r--ext/-test-/st/numhash/numhash.c120
-rw-r--r--ext/-test-/st/update/extconf.rb1
-rw-r--r--ext/-test-/st/update/update.c34
-rw-r--r--ext/-test-/string/coderange.c30
-rw-r--r--ext/-test-/string/cstr.c26
-rw-r--r--ext/-test-/string/depend5
-rw-r--r--ext/-test-/string/ellipsize.c13
-rw-r--r--ext/-test-/string/enc_associate.c14
-rw-r--r--ext/-test-/string/enc_str_buf_cat.c14
-rw-r--r--ext/-test-/string/extconf.rb7
-rw-r--r--ext/-test-/string/init.c11
-rw-r--r--ext/-test-/string/modify.c22
-rw-r--r--ext/-test-/string/normalize.c18
-rw-r--r--ext/-test-/string/qsort.c61
-rw-r--r--ext/-test-/string/set_len.c14
-rw-r--r--ext/-test-/struct/extconf.rb7
-rw-r--r--ext/-test-/struct/init.c11
-rw-r--r--ext/-test-/struct/member.c18
-rw-r--r--ext/-test-/symbol/extconf.rb6
-rw-r--r--ext/-test-/symbol/init.c11
-rw-r--r--ext/-test-/symbol/intern.c14
-rw-r--r--ext/-test-/symbol/type.c50
-rw-r--r--ext/-test-/tracepoint/depend1
-rw-r--r--ext/-test-/tracepoint/extconf.rb1
-rw-r--r--ext/-test-/tracepoint/gc_hook.c80
-rw-r--r--ext/-test-/tracepoint/tracepoint.c96
-rw-r--r--ext/-test-/typeddata/extconf.rb1
-rw-r--r--ext/-test-/typeddata/typeddata.c20
-rw-r--r--ext/-test-/wait_for_single_fd/depend4
-rw-r--r--ext/-test-/wait_for_single_fd/extconf.rb1
-rw-r--r--ext/-test-/wait_for_single_fd/wait_for_single_fd.c30
-rw-r--r--ext/-test-/win32/dln/dlntest.c17
-rw-r--r--ext/-test-/win32/dln/empty/empty.c4
-rw-r--r--ext/-test-/win32/dln/empty/extconf.rb3
-rw-r--r--ext/-test-/win32/dln/extconf.rb37
-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/depend2
-rw-r--r--ext/-test-/win32/fd_setsize/extconf.rb3
-rw-r--r--ext/-test-/win32/fd_setsize/fd_setsize.c55
-rw-r--r--ext/.document103
-rw-r--r--ext/Setup28
-rw-r--r--ext/Setup.atheos30
-rw-r--r--ext/Setup.dj8
-rw-r--r--ext/Setup.emx32
-rw-r--r--ext/Setup.nacl48
-rw-r--r--ext/Setup.nt31
-rw-r--r--ext/bigdecimal/README60
-rw-r--r--ext/bigdecimal/bigdecimal.c6248
-rw-r--r--ext/bigdecimal/bigdecimal.gemspec31
-rw-r--r--ext/bigdecimal/bigdecimal.h321
-rw-r--r--ext/bigdecimal/depend1
-rw-r--r--ext/bigdecimal/extconf.rb6
-rw-r--r--ext/bigdecimal/lib/bigdecimal/jacobian.rb87
-rw-r--r--ext/bigdecimal/lib/bigdecimal/ludcmp.rb88
-rw-r--r--ext/bigdecimal/lib/bigdecimal/math.rb231
-rw-r--r--ext/bigdecimal/lib/bigdecimal/newton.rb79
-rw-r--r--ext/bigdecimal/lib/bigdecimal/util.rb127
-rw-r--r--ext/bigdecimal/sample/linear.rb72
-rw-r--r--ext/bigdecimal/sample/nlsolve.rb38
-rw-r--r--ext/bigdecimal/sample/pi.rb20
-rw-r--r--ext/continuation/continuation.c8
-rw-r--r--ext/continuation/extconf.rb3
-rw-r--r--ext/coverage/coverage.c109
-rw-r--r--ext/coverage/depend11
-rw-r--r--ext/coverage/extconf.rb4
-rw-r--r--ext/date/date_core.c9541
-rw-r--r--ext/date/date_parse.c3128
-rw-r--r--ext/date/date_strftime.c633
-rw-r--r--ext/date/date_strptime.c699
-rw-r--r--ext/date/date_tmx.h56
-rw-r--r--ext/date/depend7
-rw-r--r--ext/date/extconf.rb2
-rw-r--r--ext/date/lib/date.rb61
-rw-r--r--ext/date/lib/date/format.rb1
-rw-r--r--ext/dbm/MANIFEST4
-rw-r--r--ext/dbm/dbm.c1043
-rw-r--r--ext/dbm/depend1
-rw-r--r--ext/dbm/extconf.rb272
-rw-r--r--ext/digest/bubblebabble/bubblebabble.c146
-rw-r--r--ext/digest/bubblebabble/depend1
-rw-r--r--ext/digest/bubblebabble/extconf.rb6
-rw-r--r--ext/digest/defs.h19
-rw-r--r--ext/digest/depend1
-rw-r--r--ext/digest/digest.c725
-rw-r--r--ext/digest/digest.h32
-rw-r--r--ext/digest/extconf.rb10
-rw-r--r--ext/digest/lib/digest.rb90
-rw-r--r--ext/digest/lib/digest/hmac.rb302
-rw-r--r--ext/digest/md5/depend3
-rw-r--r--ext/digest/md5/extconf.rb28
-rw-r--r--ext/digest/md5/md5.c422
-rw-r--r--ext/digest/md5/md5.h80
-rw-r--r--ext/digest/md5/md5init.c43
-rw-r--r--ext/digest/md5/md5ossl.c9
-rw-r--r--ext/digest/md5/md5ossl.h13
-rw-r--r--ext/digest/rmd160/depend3
-rw-r--r--ext/digest/rmd160/extconf.rb27
-rw-r--r--ext/digest/rmd160/rmd160.c461
-rw-r--r--ext/digest/rmd160/rmd160.h56
-rw-r--r--ext/digest/rmd160/rmd160init.c43
-rw-r--r--ext/digest/rmd160/rmd160ossl.c8
-rw-r--r--ext/digest/rmd160/rmd160ossl.h19
-rw-r--r--ext/digest/sha1/depend3
-rw-r--r--ext/digest/sha1/extconf.rb27
-rw-r--r--ext/digest/sha1/sha1.c269
-rw-r--r--ext/digest/sha1/sha1.h39
-rw-r--r--ext/digest/sha1/sha1init.c43
-rw-r--r--ext/digest/sha1/sha1ossl.c10
-rw-r--r--ext/digest/sha1/sha1ossl.h20
-rw-r--r--ext/digest/sha2/depend3
-rw-r--r--ext/digest/sha2/extconf.rb33
-rw-r--r--ext/digest/sha2/lib/sha2.rb107
-rw-r--r--ext/digest/sha2/sha2.c1075
-rw-r--r--ext/digest/sha2/sha2.h225
-rw-r--r--ext/digest/sha2/sha2init.c56
-rw-r--r--ext/digest/sha2/sha2ossl.c13
-rw-r--r--ext/digest/sha2/sha2ossl.h17
-rw-r--r--ext/digest/test.sh30
-rw-r--r--ext/dl/callback/depend15
-rw-r--r--ext/dl/callback/extconf.rb14
-rw-r--r--ext/dl/callback/mkcallback.rb242
-rw-r--r--ext/dl/cfunc.c677
-rw-r--r--ext/dl/cptr.c669
-rw-r--r--ext/dl/depend14
-rw-r--r--ext/dl/dl.c569
-rw-r--r--ext/dl/dl.h217
-rw-r--r--ext/dl/extconf.rb48
-rw-r--r--ext/dl/handle.c431
-rw-r--r--ext/dl/lib/dl.rb15
-rw-r--r--ext/dl/lib/dl/callback.rb112
-rw-r--r--ext/dl/lib/dl/cparser.rb156
-rw-r--r--ext/dl/lib/dl/func.rb251
-rw-r--r--ext/dl/lib/dl/import.rb268
-rw-r--r--ext/dl/lib/dl/pack.rb128
-rw-r--r--ext/dl/lib/dl/stack.rb116
-rw-r--r--ext/dl/lib/dl/struct.rb236
-rw-r--r--ext/dl/lib/dl/types.rb71
-rw-r--r--ext/dl/lib/dl/value.rb114
-rw-r--r--ext/etc/MANIFEST5
-rw-r--r--ext/etc/depend4
-rw-r--r--ext/etc/etc.c777
-rw-r--r--ext/etc/etc.doc73
-rw-r--r--ext/etc/extconf.rb25
-rwxr-xr-xext/extmk.rb731
-rw-r--r--ext/extmk.rb.in419
-rw-r--r--ext/fcntl/extconf.rb2
-rw-r--r--ext/fcntl/fcntl.c245
-rw-r--r--ext/fiber/extconf.rb3
-rw-r--r--ext/fiber/fiber.c8
-rw-r--r--ext/fiddle/closure.c316
-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/depend4
-rw-r--r--ext/fiddle/extconf.rb60
-rw-r--r--ext/fiddle/fiddle.c454
-rw-r--r--ext/fiddle/fiddle.h143
-rw-r--r--ext/fiddle/function.c254
-rw-r--r--ext/fiddle/function.h8
-rw-r--r--ext/fiddle/handle.c478
-rw-r--r--ext/fiddle/lib/fiddle.rb55
-rw-r--r--ext/fiddle/lib/fiddle/closure.rb48
-rw-r--r--ext/fiddle/lib/fiddle/cparser.rb176
-rw-r--r--ext/fiddle/lib/fiddle/function.rb17
-rw-r--r--ext/fiddle/lib/fiddle/import.rb314
-rw-r--r--ext/fiddle/lib/fiddle/pack.rb128
-rw-r--r--ext/fiddle/lib/fiddle/struct.rb243
-rw-r--r--ext/fiddle/lib/fiddle/types.rb71
-rw-r--r--ext/fiddle/lib/fiddle/value.rb112
-rw-r--r--ext/fiddle/pointer.c712
-rw-r--r--ext/gdbm/README1
-rw-r--r--ext/gdbm/extconf.rb7
-rw-r--r--ext/gdbm/gdbm.c1286
-rw-r--r--ext/io/console/console.c798
-rw-r--r--ext/io/console/depend4
-rw-r--r--ext/io/console/extconf.rb26
-rw-r--r--ext/io/console/io-console.gemspec21
-rw-r--r--ext/io/console/lib/console/size.rb22
-rw-r--r--ext/io/nonblock/depend4
-rw-r--r--ext/io/nonblock/extconf.rb8
-rw-r--r--ext/io/nonblock/nonblock.c135
-rw-r--r--ext/io/wait/depend4
-rw-r--r--ext/io/wait/extconf.rb18
-rw-r--r--ext/io/wait/wait.c187
-rw-r--r--ext/json/extconf.rb3
-rw-r--r--ext/json/fbuffer/fbuffer.h181
-rw-r--r--ext/json/generator/depend2
-rw-r--r--ext/json/generator/extconf.rb4
-rw-r--r--ext/json/generator/generator.c1436
-rw-r--r--ext/json/generator/generator.h148
-rw-r--r--ext/json/lib/json.rb62
-rw-r--r--ext/json/lib/json/add/bigdecimal.rb28
-rw-r--r--ext/json/lib/json/add/complex.rb22
-rw-r--r--ext/json/lib/json/add/core.rb11
-rw-r--r--ext/json/lib/json/add/date.rb34
-rw-r--r--ext/json/lib/json/add/date_time.rb50
-rw-r--r--ext/json/lib/json/add/exception.rb31
-rw-r--r--ext/json/lib/json/add/ostruct.rb31
-rw-r--r--ext/json/lib/json/add/range.rb29
-rw-r--r--ext/json/lib/json/add/rational.rb22
-rw-r--r--ext/json/lib/json/add/regexp.rb30
-rw-r--r--ext/json/lib/json/add/struct.rb30
-rw-r--r--ext/json/lib/json/add/symbol.rb25
-rw-r--r--ext/json/lib/json/add/time.rb38
-rw-r--r--ext/json/lib/json/common.rb484
-rw-r--r--ext/json/lib/json/ext.rb21
-rw-r--r--ext/json/lib/json/generic_object.rb70
-rw-r--r--ext/json/lib/json/version.rb8
-rw-r--r--ext/json/parser/depend2
-rw-r--r--ext/json/parser/extconf.rb3
-rw-r--r--ext/json/parser/parser.c2204
-rw-r--r--ext/json/parser/parser.h77
-rw-r--r--ext/json/parser/parser.rl927
-rw-r--r--ext/json/parser/prereq.mk10
-rw-r--r--ext/kconv/MANIFEST2
-rw-r--r--ext/kconv/kconv.c1934
-rw-r--r--ext/marshal/MANIFEST5
-rw-r--r--ext/marshal/depend2
-rw-r--r--ext/marshal/extconf.rb2
-rw-r--r--ext/marshal/marshal.c758
-rw-r--r--ext/marshal/marshal.doc48
-rw-r--r--ext/mathn/complex/complex.c7
-rw-r--r--ext/mathn/complex/extconf.rb3
-rw-r--r--ext/mathn/rational/extconf.rb3
-rw-r--r--ext/mathn/rational/rational.c7
-rw-r--r--ext/md5/MANIFEST6
-rw-r--r--ext/md5/depend2
-rw-r--r--ext/md5/md5.doc36
-rw-r--r--ext/md5/md5.h86
-rw-r--r--ext/md5/md5c.c337
-rw-r--r--ext/md5/md5init.c90
-rw-r--r--ext/nkf/depend6
-rw-r--r--ext/nkf/extconf.rb2
-rw-r--r--ext/nkf/lib/kconv.rb282
-rw-r--r--ext/nkf/nkf-utf8/config.h51
-rw-r--r--ext/nkf/nkf-utf8/nkf.c7191
-rw-r--r--ext/nkf/nkf-utf8/nkf.h189
-rw-r--r--ext/nkf/nkf-utf8/utf8tbl.c14628
-rw-r--r--ext/nkf/nkf-utf8/utf8tbl.h72
-rw-r--r--ext/nkf/nkf.c507
-rw-r--r--ext/objspace/depend14
-rw-r--r--ext/objspace/extconf.rb2
-rw-r--r--ext/objspace/object_tracing.c490
-rw-r--r--ext/objspace/objspace.c775
-rw-r--r--ext/objspace/objspace.h20
-rw-r--r--ext/objspace/objspace_dump.c432
-rw-r--r--ext/openssl/depend6
-rw-r--r--ext/openssl/deprecation.rb21
-rw-r--r--ext/openssl/extconf.rb160
-rw-r--r--ext/openssl/lib/openssl.rb24
-rw-r--r--ext/openssl/lib/openssl/bn.rb38
-rw-r--r--ext/openssl/lib/openssl/buffering.rb457
-rw-r--r--ext/openssl/lib/openssl/cipher.rb65
-rw-r--r--ext/openssl/lib/openssl/config.rb472
-rw-r--r--ext/openssl/lib/openssl/digest.rb88
-rw-r--r--ext/openssl/lib/openssl/ssl.rb250
-rw-r--r--ext/openssl/lib/openssl/x509.rb162
-rw-r--r--ext/openssl/openssl_missing.c356
-rw-r--r--ext/openssl/openssl_missing.h198
-rw-r--r--ext/openssl/ossl.c1167
-rw-r--r--ext/openssl/ossl.h247
-rw-r--r--ext/openssl/ossl_asn1.c1997
-rw-r--r--ext/openssl/ossl_asn1.h59
-rw-r--r--ext/openssl/ossl_bio.c87
-rw-r--r--ext/openssl/ossl_bio.h21
-rw-r--r--ext/openssl/ossl_bn.c898
-rw-r--r--ext/openssl/ossl_bn.h25
-rw-r--r--ext/openssl/ossl_cipher.c970
-rw-r--r--ext/openssl/ossl_cipher.h22
-rw-r--r--ext/openssl/ossl_config.c83
-rw-r--r--ext/openssl/ossl_config.h22
-rw-r--r--ext/openssl/ossl_digest.c438
-rw-r--r--ext/openssl/ossl_digest.h22
-rw-r--r--ext/openssl/ossl_engine.c591
-rw-r--r--ext/openssl/ossl_engine.h20
-rw-r--r--ext/openssl/ossl_hmac.c364
-rw-r--r--ext/openssl/ossl_hmac.h19
-rw-r--r--ext/openssl/ossl_ns_spki.c389
-rw-r--r--ext/openssl/ossl_ns_spki.h21
-rw-r--r--ext/openssl/ossl_ocsp.c786
-rw-r--r--ext/openssl/ossl_ocsp.h24
-rw-r--r--ext/openssl/ossl_pkcs12.c212
-rw-r--r--ext/openssl/ossl_pkcs12.h15
-rw-r--r--ext/openssl/ossl_pkcs5.c189
-rw-r--r--ext/openssl/ossl_pkcs5.h6
-rw-r--r--ext/openssl/ossl_pkcs7.c1046
-rw-r--r--ext/openssl/ossl_pkcs7.h22
-rw-r--r--ext/openssl/ossl_pkey.c439
-rw-r--r--ext/openssl/ossl_pkey.h151
-rw-r--r--ext/openssl/ossl_pkey_dh.c666
-rw-r--r--ext/openssl/ossl_pkey_dsa.c623
-rw-r--r--ext/openssl/ossl_pkey_ec.c1683
-rw-r--r--ext/openssl/ossl_pkey_rsa.c701
-rw-r--r--ext/openssl/ossl_rand.c202
-rw-r--r--ext/openssl/ossl_rand.h20
-rw-r--r--ext/openssl/ossl_ssl.c2273
-rw-r--r--ext/openssl/ossl_ssl.h36
-rw-r--r--ext/openssl/ossl_ssl_session.c323
-rw-r--r--ext/openssl/ossl_version.h16
-rw-r--r--ext/openssl/ossl_x509.c104
-rw-r--r--ext/openssl/ossl_x509.h114
-rw-r--r--ext/openssl/ossl_x509attr.c275
-rw-r--r--ext/openssl/ossl_x509cert.c866
-rw-r--r--ext/openssl/ossl_x509crl.c537
-rw-r--r--ext/openssl/ossl_x509ext.c471
-rw-r--r--ext/openssl/ossl_x509name.c509
-rw-r--r--ext/openssl/ossl_x509req.c468
-rw-r--r--ext/openssl/ossl_x509revoked.c229
-rw-r--r--ext/openssl/ossl_x509store.c677
-rw-r--r--ext/openssl/ruby_missing.h28
-rw-r--r--ext/pathname/depend3
-rw-r--r--ext/pathname/extconf.rb2
-rw-r--r--ext/pathname/lib/pathname.rb574
-rw-r--r--ext/pathname/pathname.c1442
-rw-r--r--ext/psych/.gitignore11
-rw-r--r--ext/psych/depend3
-rw-r--r--ext/psych/extconf.rb38
-rw-r--r--ext/psych/lib/psych.rb498
-rw-r--r--ext/psych/lib/psych/class_loader.rb101
-rw-r--r--ext/psych/lib/psych/coder.rb94
-rw-r--r--ext/psych/lib/psych/core_ext.rb35
-rw-r--r--ext/psych/lib/psych/deprecated.rb85
-rw-r--r--ext/psych/lib/psych/exception.rb13
-rw-r--r--ext/psych/lib/psych/handler.rb249
-rw-r--r--ext/psych/lib/psych/handlers/document_stream.rb22
-rw-r--r--ext/psych/lib/psych/handlers/recorder.rb39
-rw-r--r--ext/psych/lib/psych/json/ruby_events.rb19
-rw-r--r--ext/psych/lib/psych/json/stream.rb16
-rw-r--r--ext/psych/lib/psych/json/tree_builder.rb12
-rw-r--r--ext/psych/lib/psych/json/yaml_events.rb29
-rw-r--r--ext/psych/lib/psych/nodes.rb77
-rw-r--r--ext/psych/lib/psych/nodes/alias.rb18
-rw-r--r--ext/psych/lib/psych/nodes/document.rb60
-rw-r--r--ext/psych/lib/psych/nodes/mapping.rb56
-rw-r--r--ext/psych/lib/psych/nodes/node.rb55
-rw-r--r--ext/psych/lib/psych/nodes/scalar.rb67
-rw-r--r--ext/psych/lib/psych/nodes/sequence.rb81
-rw-r--r--ext/psych/lib/psych/nodes/stream.rb37
-rw-r--r--ext/psych/lib/psych/omap.rb4
-rw-r--r--ext/psych/lib/psych/parser.rb51
-rw-r--r--ext/psych/lib/psych/scalar_scanner.rb149
-rw-r--r--ext/psych/lib/psych/set.rb4
-rw-r--r--ext/psych/lib/psych/stream.rb37
-rw-r--r--ext/psych/lib/psych/streaming.rb27
-rw-r--r--ext/psych/lib/psych/syntax_error.rb21
-rw-r--r--ext/psych/lib/psych/tree_builder.rb96
-rw-r--r--ext/psych/lib/psych/visitors.rb6
-rw-r--r--ext/psych/lib/psych/visitors/depth_first.rb26
-rw-r--r--ext/psych/lib/psych/visitors/emitter.rb51
-rw-r--r--ext/psych/lib/psych/visitors/json_tree.rb24
-rw-r--r--ext/psych/lib/psych/visitors/to_ruby.rb370
-rw-r--r--ext/psych/lib/psych/visitors/visitor.rb19
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb521
-rw-r--r--ext/psych/lib/psych/y.rb9
-rw-r--r--ext/psych/psych.c34
-rw-r--r--ext/psych/psych.gemspec23
-rw-r--r--ext/psych/psych.h20
-rw-r--r--ext/psych/psych_emitter.c538
-rw-r--r--ext/psych/psych_emitter.h8
-rw-r--r--ext/psych/psych_parser.c579
-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.c3583
-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/depend6
-rw-r--r--ext/pty/extconf.rb19
-rw-r--r--ext/pty/lib/expect.rb71
-rw-r--r--ext/pty/pty.c754
-rw-r--r--ext/racc/cparse/README11
-rw-r--r--ext/racc/cparse/cparse.c831
-rw-r--r--ext/racc/cparse/extconf.rb5
-rw-r--r--ext/rbconfig/sizeof/depend3
-rw-r--r--ext/rbconfig/sizeof/extconf.rb2
-rw-r--r--ext/readline/README10
-rw-r--r--ext/readline/README.ja386
-rw-r--r--ext/readline/depend5
-rw-r--r--ext/readline/extconf.rb105
-rw-r--r--ext/readline/readline.c1988
-rw-r--r--ext/ripper/README30
-rw-r--r--ext/ripper/depend56
-rw-r--r--ext/ripper/eventids2.c293
-rw-r--r--ext/ripper/extconf.rb21
-rw-r--r--ext/ripper/lib/ripper.rb73
-rw-r--r--ext/ripper/lib/ripper/core.rb70
-rw-r--r--ext/ripper/lib/ripper/filter.rb77
-rw-r--r--ext/ripper/lib/ripper/lexer.rb186
-rw-r--r--ext/ripper/lib/ripper/sexp.rb114
-rwxr-xr-xext/ripper/tools/generate-param-macros.rb14
-rwxr-xr-xext/ripper/tools/generate.rb154
-rwxr-xr-xext/ripper/tools/preproc.rb91
-rwxr-xr-xext/ripper/tools/strip.rb12
-rw-r--r--ext/sdbm/_sdbm.c953
-rw-r--r--ext/sdbm/depend2
-rw-r--r--ext/sdbm/extconf.rb4
-rw-r--r--ext/sdbm/init.c1045
-rw-r--r--ext/sdbm/sdbm.h86
-rw-r--r--ext/socket/.document17
-rw-r--r--ext/socket/MANIFEST4
-rw-r--r--ext/socket/addrinfo.h189
-rw-r--r--ext/socket/ancdata.c1832
-rw-r--r--ext/socket/basicsocket.c776
-rw-r--r--ext/socket/constants.c145
-rw-r--r--ext/socket/depend30
-rw-r--r--ext/socket/extconf.rb641
-rw-r--r--ext/socket/getaddrinfo.c678
-rw-r--r--ext/socket/getnameinfo.c261
-rw-r--r--ext/socket/ifaddr.c457
-rw-r--r--ext/socket/init.c636
-rw-r--r--ext/socket/ipsocket.c334
-rw-r--r--ext/socket/lib/socket.rb871
-rw-r--r--ext/socket/mkconstants.rb773
-rw-r--r--ext/socket/option.c1127
-rw-r--r--ext/socket/raddrinfo.c2574
-rw-r--r--ext/socket/rubysocket.h395
-rw-r--r--ext/socket/socket.c2762
-rw-r--r--ext/socket/sockport.h116
-rw-r--r--ext/socket/sockssocket.c71
-rw-r--r--ext/socket/tcpserver.c178
-rw-r--r--ext/socket/tcpsocket.c82
-rw-r--r--ext/socket/udpsocket.c266
-rw-r--r--ext/socket/unixserver.c155
-rw-r--r--ext/socket/unixsocket.c525
-rw-r--r--ext/stringio/README18
-rw-r--r--ext/stringio/depend4
-rw-r--r--ext/stringio/extconf.rb2
-rw-r--r--ext/stringio/stringio.c1611
-rw-r--r--ext/strscan/depend7
-rw-r--r--ext/strscan/extconf.rb3
-rw-r--r--ext/strscan/strscan.c1405
-rw-r--r--ext/syslog/depend2
-rw-r--r--ext/syslog/extconf.rb10
-rw-r--r--ext/syslog/lib/syslog/logger.rb208
-rw-r--r--ext/syslog/syslog.c592
-rw-r--r--ext/syslog/syslog.txt124
-rw-r--r--ext/thread/extconf.rb3
-rw-r--r--ext/thread/thread.c638
-rw-r--r--ext/tk/ChangeLog.tkextlib949
-rw-r--r--ext/tk/MANUAL_tcltklib.eng473
-rw-r--r--ext/tk/MANUAL_tcltklib.ja584
-rw-r--r--ext/tk/README.1st19
-rw-r--r--ext/tk/README.ActiveTcl62
-rw-r--r--ext/tk/README.fork34
-rw-r--r--ext/tk/README.macosx-aqua67
-rw-r--r--ext/tk/README.tcltklib152
-rw-r--r--ext/tk/config_list.in41
-rw-r--r--ext/tk/depend2
-rw-r--r--ext/tk/extconf.rb2094
-rw-r--r--ext/tk/lib/README30
-rw-r--r--ext/tk/lib/multi-tk.rb3754
-rw-r--r--ext/tk/lib/remote-tk.rb530
-rw-r--r--ext/tk/lib/tcltk.rb367
-rw-r--r--ext/tk/lib/tk.rb5761
-rw-r--r--ext/tk/lib/tk/after.rb6
-rw-r--r--ext/tk/lib/tk/autoload.rb760
-rw-r--r--ext/tk/lib/tk/bgerror.rb29
-rw-r--r--ext/tk/lib/tk/bindtag.rb138
-rw-r--r--ext/tk/lib/tk/busy.rb118
-rw-r--r--ext/tk/lib/tk/button.rb31
-rw-r--r--ext/tk/lib/tk/canvas.rb846
-rw-r--r--ext/tk/lib/tk/canvastag.rb459
-rw-r--r--ext/tk/lib/tk/checkbutton.rb32
-rw-r--r--ext/tk/lib/tk/clipboard.rb75
-rw-r--r--ext/tk/lib/tk/clock.rb71
-rw-r--r--ext/tk/lib/tk/composite.rb484
-rw-r--r--ext/tk/lib/tk/console.rb52
-rw-r--r--ext/tk/lib/tk/dialog.rb326
-rw-r--r--ext/tk/lib/tk/encodedstr.rb187
-rw-r--r--ext/tk/lib/tk/entry.rb120
-rw-r--r--ext/tk/lib/tk/event.rb562
-rw-r--r--ext/tk/lib/tk/font.rb2351
-rw-r--r--ext/tk/lib/tk/fontchooser.rb176
-rw-r--r--ext/tk/lib/tk/frame.rb132
-rw-r--r--ext/tk/lib/tk/grid.rb279
-rw-r--r--ext/tk/lib/tk/image.rb395
-rw-r--r--ext/tk/lib/tk/itemconfig.rb1222
-rw-r--r--ext/tk/lib/tk/itemfont.rb327
-rw-r--r--ext/tk/lib/tk/kinput.rb71
-rw-r--r--ext/tk/lib/tk/label.rb22
-rw-r--r--ext/tk/lib/tk/labelframe.rb31
-rw-r--r--ext/tk/lib/tk/listbox.rb284
-rw-r--r--ext/tk/lib/tk/macpkg.rb80
-rw-r--r--ext/tk/lib/tk/menu.rb718
-rw-r--r--ext/tk/lib/tk/menubar.rb137
-rw-r--r--ext/tk/lib/tk/menuspec.rb456
-rw-r--r--ext/tk/lib/tk/message.rb24
-rw-r--r--ext/tk/lib/tk/mngfocus.rb33
-rw-r--r--ext/tk/lib/tk/msgcat.rb299
-rw-r--r--ext/tk/lib/tk/namespace.rb546
-rw-r--r--ext/tk/lib/tk/optiondb.rb377
-rw-r--r--ext/tk/lib/tk/optionobj.rb212
-rw-r--r--ext/tk/lib/tk/pack.rb107
-rw-r--r--ext/tk/lib/tk/package.rb143
-rw-r--r--ext/tk/lib/tk/palette.rb55
-rw-r--r--ext/tk/lib/tk/panedwindow.rb260
-rw-r--r--ext/tk/lib/tk/place.rb128
-rw-r--r--ext/tk/lib/tk/radiobutton.rb73
-rw-r--r--ext/tk/lib/tk/root.rb95
-rw-r--r--ext/tk/lib/tk/scale.rb112
-rw-r--r--ext/tk/lib/tk/scrollable.rb82
-rw-r--r--ext/tk/lib/tk/scrollbar.rb183
-rw-r--r--ext/tk/lib/tk/scrollbox.rb39
-rw-r--r--ext/tk/lib/tk/selection.rb86
-rw-r--r--ext/tk/lib/tk/spinbox.rb144
-rw-r--r--ext/tk/lib/tk/tagfont.rb43
-rw-r--r--ext/tk/lib/tk/text.rb1604
-rw-r--r--ext/tk/lib/tk/textimage.rb88
-rw-r--r--ext/tk/lib/tk/textmark.rb204
-rw-r--r--ext/tk/lib/tk/texttag.rb321
-rw-r--r--ext/tk/lib/tk/textwindow.rb154
-rw-r--r--ext/tk/lib/tk/timer.rb669
-rw-r--r--ext/tk/lib/tk/toplevel.rb264
-rw-r--r--ext/tk/lib/tk/ttk_selector.rb98
-rw-r--r--ext/tk/lib/tk/txtwin_abst.rb39
-rw-r--r--ext/tk/lib/tk/validation.rb397
-rw-r--r--ext/tk/lib/tk/variable.rb1799
-rw-r--r--ext/tk/lib/tk/virtevent.rb139
-rw-r--r--ext/tk/lib/tk/winfo.rb392
-rw-r--r--ext/tk/lib/tk/winpkg.rb156
-rw-r--r--ext/tk/lib/tk/wm.rb552
-rw-r--r--ext/tk/lib/tk/xim.rb122
-rw-r--r--ext/tk/lib/tkafter.rb4
-rw-r--r--ext/tk/lib/tkbgerror.rb4
-rw-r--r--ext/tk/lib/tkcanvas.rb4
-rw-r--r--ext/tk/lib/tkclass.rb47
-rw-r--r--ext/tk/lib/tkconsole.rb4
-rw-r--r--ext/tk/lib/tkdialog.rb4
-rw-r--r--ext/tk/lib/tkentry.rb4
-rw-r--r--ext/tk/lib/tkextlib/ICONS.rb13
-rw-r--r--ext/tk/lib/tkextlib/ICONS/icons.rb129
-rw-r--r--ext/tk/lib/tkextlib/ICONS/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/SUPPORT_STATUS193
-rw-r--r--ext/tk/lib/tkextlib/blt.rb189
-rw-r--r--ext/tk/lib/tkextlib/blt/barchart.rb79
-rw-r--r--ext/tk/lib/tkextlib/blt/bitmap.rb112
-rw-r--r--ext/tk/lib/tkextlib/blt/busy.rb83
-rw-r--r--ext/tk/lib/tkextlib/blt/component.rb2218
-rw-r--r--ext/tk/lib/tkextlib/blt/container.rb28
-rw-r--r--ext/tk/lib/tkextlib/blt/cutbuffer.rb23
-rw-r--r--ext/tk/lib/tkextlib/blt/dragdrop.rb269
-rw-r--r--ext/tk/lib/tkextlib/blt/eps.rb32
-rw-r--r--ext/tk/lib/tkextlib/blt/graph.rb67
-rw-r--r--ext/tk/lib/tkextlib/blt/htext.rb112
-rw-r--r--ext/tk/lib/tkextlib/blt/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/blt/spline.rb23
-rw-r--r--ext/tk/lib/tkextlib/blt/stripchart.rb74
-rw-r--r--ext/tk/lib/tkextlib/blt/table.rb412
-rw-r--r--ext/tk/lib/tkextlib/blt/tabnotebook.rb110
-rw-r--r--ext/tk/lib/tkextlib/blt/tabset.rb504
-rw-r--r--ext/tk/lib/tkextlib/blt/ted.rb68
-rw-r--r--ext/tk/lib/tkextlib/blt/tile.rb25
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/button.rb16
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/checkbutton.rb17
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/frame.rb16
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/label.rb16
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/radiobutton.rb17
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/scrollbar.rb16
-rw-r--r--ext/tk/lib/tkextlib/blt/tile/toplevel.rb16
-rw-r--r--ext/tk/lib/tkextlib/blt/tree.rb1058
-rw-r--r--ext/tk/lib/tkextlib/blt/treeview.rb1287
-rw-r--r--ext/tk/lib/tkextlib/blt/unix_dnd.rb141
-rw-r--r--ext/tk/lib/tkextlib/blt/vector.rb256
-rw-r--r--ext/tk/lib/tkextlib/blt/watch.rb175
-rw-r--r--ext/tk/lib/tkextlib/blt/win_printer.rb61
-rw-r--r--ext/tk/lib/tkextlib/blt/winop.rb107
-rw-r--r--ext/tk/lib/tkextlib/bwidget.rb153
-rw-r--r--ext/tk/lib/tkextlib/bwidget/arrowbutton.rb21
-rw-r--r--ext/tk/lib/tkextlib/bwidget/bitmap.rb21
-rw-r--r--ext/tk/lib/tkextlib/bwidget/button.rb31
-rw-r--r--ext/tk/lib/tkextlib/bwidget/buttonbox.rb90
-rw-r--r--ext/tk/lib/tkextlib/bwidget/combobox.rb62
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dialog.rb194
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dragsite.rb31
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dropsite.rb39
-rw-r--r--ext/tk/lib/tkextlib/bwidget/dynamichelp.rb63
-rw-r--r--ext/tk/lib/tkextlib/bwidget/entry.rb43
-rw-r--r--ext/tk/lib/tkextlib/bwidget/label.rb41
-rw-r--r--ext/tk/lib/tkextlib/bwidget/labelentry.rb80
-rw-r--r--ext/tk/lib/tkextlib/bwidget/labelframe.rb52
-rw-r--r--ext/tk/lib/tkextlib/bwidget/listbox.rb361
-rw-r--r--ext/tk/lib/tkextlib/bwidget/mainframe.rb132
-rw-r--r--ext/tk/lib/tkextlib/bwidget/messagedlg.rb192
-rw-r--r--ext/tk/lib/tkextlib/bwidget/notebook.rb166
-rw-r--r--ext/tk/lib/tkextlib/bwidget/pagesmanager.rb73
-rw-r--r--ext/tk/lib/tkextlib/bwidget/panedwindow.rb42
-rw-r--r--ext/tk/lib/tkextlib/bwidget/panelframe.rb67
-rw-r--r--ext/tk/lib/tkextlib/bwidget/passwddlg.rb44
-rw-r--r--ext/tk/lib/tkextlib/bwidget/progressbar.rb20
-rw-r--r--ext/tk/lib/tkextlib/bwidget/progressdlg.rb58
-rw-r--r--ext/tk/lib/tkextlib/bwidget/scrollableframe.rb40
-rw-r--r--ext/tk/lib/tkextlib/bwidget/scrolledwindow.rb48
-rw-r--r--ext/tk/lib/tkextlib/bwidget/scrollview.rb25
-rw-r--r--ext/tk/lib/tkextlib/bwidget/selectcolor.rb73
-rw-r--r--ext/tk/lib/tkextlib/bwidget/selectfont.rb91
-rw-r--r--ext/tk/lib/tkextlib/bwidget/separator.rb20
-rw-r--r--ext/tk/lib/tkextlib/bwidget/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/bwidget/spinbox.rb98
-rw-r--r--ext/tk/lib/tkextlib/bwidget/statusbar.rb62
-rw-r--r--ext/tk/lib/tkextlib/bwidget/titleframe.rb33
-rw-r--r--ext/tk/lib/tkextlib/bwidget/tree.rb500
-rw-r--r--ext/tk/lib/tkextlib/bwidget/widget.rb129
-rw-r--r--ext/tk/lib/tkextlib/itcl.rb13
-rw-r--r--ext/tk/lib/tkextlib/itcl/incr_tcl.rb178
-rw-r--r--ext/tk/lib/tkextlib/itcl/setup.rb13
-rw-r--r--ext/tk/lib/tkextlib/itk.rb13
-rw-r--r--ext/tk/lib/tkextlib/itk/incr_tk.rb446
-rw-r--r--ext/tk/lib/tkextlib/itk/setup.rb13
-rw-r--r--ext/tk/lib/tkextlib/iwidgets.rb94
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/buttonbox.rb121
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/calendar.rb125
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/canvasprintbox.rb53
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/canvasprintdialog.rb38
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/checkbox.rb130
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/combobox.rb104
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/dateentry.rb20
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/datefield.rb58
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/dialog.rb20
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/dialogshell.rb121
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/disjointlistbox.rb50
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/entryfield.rb185
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/extbutton.rb40
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/extfileselectionbox.rb46
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/extfileselectiondialog.rb33
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/feedback.rb35
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/fileselectionbox.rb46
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/fileselectiondialog.rb33
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/finddialog.rb42
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/hierarchy.rb365
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/hyperhelp.rb50
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/labeledframe.rb39
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/labeledwidget.rb45
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/mainwindow.rb67
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/menubar.rb212
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/messagebox.rb93
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/messagedialog.rb20
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/notebook.rb175
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/optionmenu.rb92
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/panedwindow.rb134
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/promptdialog.rb131
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/pushbutton.rb35
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/radiobox.rb121
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scopedobject.rb24
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb353
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledframe.rb59
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledhtml.rb58
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb207
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb568
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledwidget.rb20
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/selectionbox.rb102
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/selectiondialog.rb92
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/shell.rb38
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spindate.rb48
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spinint.rb30
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spinner.rb169
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/spintime.rb48
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/tabnotebook.rb181
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/tabset.rb145
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/timeentry.rb25
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/timefield.rb58
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/toolbar.rb112
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/watch.rb56
-rwxr-xr-xext/tk/lib/tkextlib/pkg_checker.rb184
-rw-r--r--ext/tk/lib/tkextlib/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/tcllib.rb105
-rw-r--r--ext/tk/lib/tkextlib/tcllib/README135
-rw-r--r--ext/tk/lib/tkextlib/tcllib/autoscroll.rb158
-rw-r--r--ext/tk/lib/tkextlib/tcllib/calendar.rb55
-rw-r--r--ext/tk/lib/tkextlib/tcllib/canvas_sqmap.rb36
-rw-r--r--ext/tk/lib/tkextlib/tcllib/canvas_zoom.rb21
-rw-r--r--ext/tk/lib/tkextlib/tcllib/chatwidget.rb151
-rw-r--r--ext/tk/lib/tkextlib/tcllib/crosshair.rb117
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ctext.rb160
-rw-r--r--ext/tk/lib/tkextlib/tcllib/cursor.rb97
-rw-r--r--ext/tk/lib/tkextlib/tcllib/dateentry.rb62
-rw-r--r--ext/tk/lib/tkextlib/tcllib/datefield.rb57
-rw-r--r--ext/tk/lib/tkextlib/tcllib/diagrams.rb224
-rw-r--r--ext/tk/lib/tkextlib/tcllib/dialog.rb84
-rw-r--r--ext/tk/lib/tkextlib/tcllib/getstring.rb134
-rw-r--r--ext/tk/lib/tkextlib/tcllib/history.rb73
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ico.rb146
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ip_entry.rb75
-rw-r--r--ext/tk/lib/tkextlib/tcllib/khim.rb68
-rw-r--r--ext/tk/lib/tkextlib/tcllib/menuentry.rb47
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ntext.rb146
-rw-r--r--ext/tk/lib/tkextlib/tcllib/panelframe.rb78
-rw-r--r--ext/tk/lib/tkextlib/tcllib/plotchart.rb1404
-rw-r--r--ext/tk/lib/tkextlib/tcllib/ruler.rb65
-rw-r--r--ext/tk/lib/tkextlib/tcllib/screenruler.rb68
-rw-r--r--ext/tk/lib/tkextlib/tcllib/scrolledwindow.rb57
-rw-r--r--ext/tk/lib/tkextlib/tcllib/scrollwin.rb61
-rw-r--r--ext/tk/lib/tkextlib/tcllib/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/tcllib/statusbar.rb79
-rw-r--r--ext/tk/lib/tkextlib/tcllib/style.rb61
-rw-r--r--ext/tk/lib/tkextlib/tcllib/superframe.rb51
-rw-r--r--ext/tk/lib/tkextlib/tcllib/swaplist.rb150
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tablelist.rb28
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tablelist_core.rb1072
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tablelist_tile.rb43
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tkpiechart.rb314
-rw-r--r--ext/tk/lib/tkextlib/tcllib/toolbar.rb175
-rw-r--r--ext/tk/lib/tkextlib/tcllib/tooltip.rb104
-rw-r--r--ext/tk/lib/tkextlib/tcllib/widget.rb82
-rw-r--r--ext/tk/lib/tkextlib/tclx.rb13
-rw-r--r--ext/tk/lib/tkextlib/tclx/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/tclx/tclx.rb74
-rw-r--r--ext/tk/lib/tkextlib/tile.rb449
-rw-r--r--ext/tk/lib/tkextlib/tile/dialog.rb102
-rw-r--r--ext/tk/lib/tkextlib/tile/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/tile/sizegrip.rb32
-rw-r--r--ext/tk/lib/tkextlib/tile/style.rb336
-rw-r--r--ext/tk/lib/tkextlib/tile/tbutton.rb34
-rw-r--r--ext/tk/lib/tkextlib/tile/tcheckbutton.rb38
-rw-r--r--ext/tk/lib/tkextlib/tile/tcombobox.rb55
-rw-r--r--ext/tk/lib/tkextlib/tile/tentry.rb49
-rw-r--r--ext/tk/lib/tkextlib/tile/tframe.rb34
-rw-r--r--ext/tk/lib/tkextlib/tile/tlabel.rb34
-rw-r--r--ext/tk/lib/tkextlib/tile/tlabelframe.rb38
-rw-r--r--ext/tk/lib/tkextlib/tile/tmenubutton.rb38
-rw-r--r--ext/tk/lib/tkextlib/tile/tnotebook.rb147
-rw-r--r--ext/tk/lib/tkextlib/tile/tpaned.rb245
-rw-r--r--ext/tk/lib/tkextlib/tile/tprogressbar.rb57
-rw-r--r--ext/tk/lib/tkextlib/tile/tradiobutton.rb38
-rw-r--r--ext/tk/lib/tkextlib/tile/treeview.rb1306
-rw-r--r--ext/tk/lib/tkextlib/tile/tscale.rb56
-rw-r--r--ext/tk/lib/tkextlib/tile/tscrollbar.rb63
-rw-r--r--ext/tk/lib/tkextlib/tile/tseparator.rb34
-rw-r--r--ext/tk/lib/tkextlib/tile/tspinbox.rb107
-rw-r--r--ext/tk/lib/tkextlib/tile/tsquare.rb30
-rw-r--r--ext/tk/lib/tkextlib/tkDND.rb18
-rw-r--r--ext/tk/lib/tkextlib/tkDND/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/tkDND/shape.rb125
-rw-r--r--ext/tk/lib/tkextlib/tkDND/tkdnd.rb182
-rw-r--r--ext/tk/lib/tkextlib/tkHTML.rb13
-rw-r--r--ext/tk/lib/tkextlib/tkHTML/htmlwidget.rb453
-rw-r--r--ext/tk/lib/tkextlib/tkHTML/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/tkimg.rb36
-rw-r--r--ext/tk/lib/tkextlib/tkimg/README26
-rw-r--r--ext/tk/lib/tkextlib/tkimg/bmp.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/gif.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/ico.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/jpeg.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/pcx.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/pixmap.rb44
-rw-r--r--ext/tk/lib/tkextlib/tkimg/png.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/ppm.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/ps.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/tkimg/sgi.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/sun.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/tga.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/tiff.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/window.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/xbm.rb33
-rw-r--r--ext/tk/lib/tkextlib/tkimg/xpm.rb33
-rw-r--r--ext/tk/lib/tkextlib/tktable.rb14
-rw-r--r--ext/tk/lib/tkextlib/tktable/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/tktable/tktable.rb966
-rw-r--r--ext/tk/lib/tkextlib/tktrans.rb14
-rw-r--r--ext/tk/lib/tkextlib/tktrans/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/tktrans/tktrans.rb64
-rw-r--r--ext/tk/lib/tkextlib/treectrl.rb13
-rw-r--r--ext/tk/lib/tkextlib/treectrl/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/treectrl/tktreectrl.rb2522
-rw-r--r--ext/tk/lib/tkextlib/trofs.rb13
-rw-r--r--ext/tk/lib/tkextlib/trofs/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/trofs/trofs.rb51
-rw-r--r--ext/tk/lib/tkextlib/version.rb6
-rw-r--r--ext/tk/lib/tkextlib/vu.rb48
-rw-r--r--ext/tk/lib/tkextlib/vu/bargraph.rb61
-rw-r--r--ext/tk/lib/tkextlib/vu/charts.rb53
-rw-r--r--ext/tk/lib/tkextlib/vu/dial.rb102
-rw-r--r--ext/tk/lib/tkextlib/vu/pie.rb286
-rw-r--r--ext/tk/lib/tkextlib/vu/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/vu/spinbox.rb22
-rw-r--r--ext/tk/lib/tkextlib/winico.rb14
-rw-r--r--ext/tk/lib/tkextlib/winico/setup.rb8
-rw-r--r--ext/tk/lib/tkextlib/winico/winico.rb224
-rw-r--r--ext/tk/lib/tkfont.rb4
-rw-r--r--ext/tk/lib/tkmacpkg.rb4
-rw-r--r--ext/tk/lib/tkmenubar.rb4
-rw-r--r--ext/tk/lib/tkmngfocus.rb4
-rw-r--r--ext/tk/lib/tkpalette.rb4
-rw-r--r--ext/tk/lib/tkscrollbox.rb4
-rw-r--r--ext/tk/lib/tktext.rb4
-rw-r--r--ext/tk/lib/tkvirtevent.rb4
-rw-r--r--ext/tk/lib/tkwinpkg.rb4
-rw-r--r--ext/tk/old-README.tcltklib.ja159
-rw-r--r--ext/tk/old-extconf.rb440
-rw-r--r--ext/tk/sample/24hr_clock.rb286
-rw-r--r--ext/tk/sample/binding_sample.rb87
-rw-r--r--ext/tk/sample/bindtag_sample.rb127
-rw-r--r--ext/tk/sample/binstr_usage.rb45
-rw-r--r--ext/tk/sample/btn_with_frame.rb20
-rw-r--r--ext/tk/sample/cd_timer.rb81
-rw-r--r--ext/tk/sample/cmd_res_test.rb17
-rw-r--r--ext/tk/sample/cmd_resource5
-rw-r--r--ext/tk/sample/demos-en/ChangeLog64
-rw-r--r--ext/tk/sample/demos-en/ChangeLog.prev9
-rw-r--r--ext/tk/sample/demos-en/README138
-rw-r--r--ext/tk/sample/demos-en/README.1st18
-rw-r--r--ext/tk/sample/demos-en/README.tkencoding29
-rw-r--r--ext/tk/sample/demos-en/anilabel.rb174
-rw-r--r--ext/tk/sample/demos-en/aniwave.rb118
-rw-r--r--ext/tk/sample/demos-en/arrow.rb249
-rw-r--r--ext/tk/sample/demos-en/bind.rb127
-rw-r--r--ext/tk/sample/demos-en/bitmap.rb75
-rw-r--r--ext/tk/sample/demos-en/browse163
-rw-r--r--ext/tk/sample/demos-en/browse282
-rw-r--r--ext/tk/sample/demos-en/button.rb84
-rw-r--r--ext/tk/sample/demos-en/check.rb72
-rw-r--r--ext/tk/sample/demos-en/check2.rb109
-rw-r--r--ext/tk/sample/demos-en/clrpick.rb87
-rw-r--r--ext/tk/sample/demos-en/colors.rb158
-rw-r--r--ext/tk/sample/demos-en/combo.rb96
-rw-r--r--ext/tk/sample/demos-en/cscroll.rb136
-rw-r--r--ext/tk/sample/demos-en/ctext.rb207
-rw-r--r--ext/tk/sample/demos-en/dialog1.rb38
-rw-r--r--ext/tk/sample/demos-en/dialog2.rb41
-rw-r--r--ext/tk/sample/demos-en/doc.org/README7
-rw-r--r--ext/tk/sample/demos-en/doc.org/README.JP14
-rw-r--r--ext/tk/sample/demos-en/doc.org/README.tk8046
-rw-r--r--ext/tk/sample/demos-en/doc.org/license.terms39
-rw-r--r--ext/tk/sample/demos-en/doc.org/license.terms.tk8039
-rw-r--r--ext/tk/sample/demos-en/entry1.rb58
-rw-r--r--ext/tk/sample/demos-en/entry2.rb93
-rw-r--r--ext/tk/sample/demos-en/entry3.rb220
-rw-r--r--ext/tk/sample/demos-en/filebox.rb102
-rw-r--r--ext/tk/sample/demos-en/floor.rb1723
-rw-r--r--ext/tk/sample/demos-en/floor2.rb1722
-rw-r--r--ext/tk/sample/demos-en/form.rb64
-rw-r--r--ext/tk/sample/demos-en/goldberg.rb2006
-rw-r--r--ext/tk/sample/demos-en/hello14
-rw-r--r--ext/tk/sample/demos-en/hscale.rb75
-rw-r--r--ext/tk/sample/demos-en/icon.rb105
-rw-r--r--ext/tk/sample/demos-en/image1.rb65
-rw-r--r--ext/tk/sample/demos-en/image2.rb107
-rw-r--r--ext/tk/sample/demos-en/image3.rb125
-rw-r--r--ext/tk/sample/demos-en/items.rb381
-rw-r--r--ext/tk/sample/demos-en/ixset333
-rw-r--r--ext/tk/sample/demos-en/ixset2367
-rw-r--r--ext/tk/sample/demos-en/knightstour.rb271
-rw-r--r--ext/tk/sample/demos-en/label.rb72
-rw-r--r--ext/tk/sample/demos-en/labelframe.rb95
-rw-r--r--ext/tk/sample/demos-en/mclist.rb117
-rw-r--r--ext/tk/sample/demos-en/menu.rb196
-rw-r--r--ext/tk/sample/demos-en/menu84.rb215
-rw-r--r--ext/tk/sample/demos-en/menubu.rb237
-rw-r--r--ext/tk/sample/demos-en/msgbox.rb90
-rw-r--r--ext/tk/sample/demos-en/msgbox2.rb91
-rw-r--r--ext/tk/sample/demos-en/paned1.rb47
-rw-r--r--ext/tk/sample/demos-en/paned2.rb94
-rw-r--r--ext/tk/sample/demos-en/pendulum.rb240
-rw-r--r--ext/tk/sample/demos-en/plot.rb124
-rw-r--r--ext/tk/sample/demos-en/puzzle.rb134
-rw-r--r--ext/tk/sample/demos-en/radio.rb86
-rw-r--r--ext/tk/sample/demos-en/radio2.rb109
-rw-r--r--ext/tk/sample/demos-en/radio3.rb117
-rw-r--r--ext/tk/sample/demos-en/rmt268
-rw-r--r--ext/tk/sample/demos-en/rolodex320
-rw-r--r--ext/tk/sample/demos-en/ruler.rb205
-rw-r--r--ext/tk/sample/demos-en/sayings.rb106
-rw-r--r--ext/tk/sample/demos-en/search.rb187
-rw-r--r--ext/tk/sample/demos-en/spin.rb65
-rw-r--r--ext/tk/sample/demos-en/square81
-rw-r--r--ext/tk/sample/demos-en/states.rb80
-rw-r--r--ext/tk/sample/demos-en/style.rb231
-rw-r--r--ext/tk/sample/demos-en/tcolor526
-rw-r--r--ext/tk/sample/demos-en/text.rb128
-rw-r--r--ext/tk/sample/demos-en/textpeer.rb76
-rw-r--r--ext/tk/sample/demos-en/timer136
-rw-r--r--ext/tk/sample/demos-en/tkencoding.rb42
-rw-r--r--ext/tk/sample/demos-en/toolbar.rb130
-rw-r--r--ext/tk/sample/demos-en/tree.rb119
-rw-r--r--ext/tk/sample/demos-en/ttkbut.rb139
-rw-r--r--ext/tk/sample/demos-en/ttkmenu.rb85
-rw-r--r--ext/tk/sample/demos-en/ttknote.rb89
-rw-r--r--ext/tk/sample/demos-en/ttkpane.rb213
-rw-r--r--ext/tk/sample/demos-en/ttkprogress.rb66
-rw-r--r--ext/tk/sample/demos-en/twind.rb291
-rw-r--r--ext/tk/sample/demos-en/twind2.rb384
-rw-r--r--ext/tk/sample/demos-en/unicodeout.rb114
-rw-r--r--ext/tk/sample/demos-en/vscale.rb79
-rw-r--r--ext/tk/sample/demos-en/widget1087
-rw-r--r--ext/tk/sample/demos-jp/README54
-rw-r--r--ext/tk/sample/demos-jp/README.1st20
-rw-r--r--ext/tk/sample/demos-jp/anilabel.rb177
-rw-r--r--ext/tk/sample/demos-jp/aniwave.rb120
-rw-r--r--ext/tk/sample/demos-jp/arrow.rb247
-rw-r--r--ext/tk/sample/demos-jp/bind.rb125
-rw-r--r--ext/tk/sample/demos-jp/bitmap.rb74
-rw-r--r--ext/tk/sample/demos-jp/browse163
-rw-r--r--ext/tk/sample/demos-jp/browse282
-rw-r--r--ext/tk/sample/demos-jp/button.rb83
-rw-r--r--ext/tk/sample/demos-jp/check.rb70
-rw-r--r--ext/tk/sample/demos-jp/check2.rb110
-rw-r--r--ext/tk/sample/demos-jp/clrpick.rb84
-rw-r--r--ext/tk/sample/demos-jp/colors.rb155
-rw-r--r--ext/tk/sample/demos-jp/combo.rb98
-rw-r--r--ext/tk/sample/demos-jp/cscroll.rb134
-rw-r--r--ext/tk/sample/demos-jp/ctext.rb204
-rw-r--r--ext/tk/sample/demos-jp/dialog1.rb39
-rw-r--r--ext/tk/sample/demos-jp/dialog2.rb43
-rw-r--r--ext/tk/sample/demos-jp/doc.org/README7
-rw-r--r--ext/tk/sample/demos-jp/doc.org/README.JP14
-rw-r--r--ext/tk/sample/demos-jp/doc.org/README.tk8046
-rw-r--r--ext/tk/sample/demos-jp/doc.org/license.terms39
-rw-r--r--ext/tk/sample/demos-jp/doc.org/license.terms.tk8039
-rw-r--r--ext/tk/sample/demos-jp/entry1.rb60
-rw-r--r--ext/tk/sample/demos-jp/entry2.rb91
-rw-r--r--ext/tk/sample/demos-jp/entry3.rb225
-rw-r--r--ext/tk/sample/demos-jp/filebox.rb102
-rw-r--r--ext/tk/sample/demos-jp/floor.rb1721
-rw-r--r--ext/tk/sample/demos-jp/floor2.rb1719
-rw-r--r--ext/tk/sample/demos-jp/form.rb66
-rw-r--r--ext/tk/sample/demos-jp/goldberg.rb2011
-rw-r--r--ext/tk/sample/demos-jp/hello10
-rw-r--r--ext/tk/sample/demos-jp/hscale.rb78
-rw-r--r--ext/tk/sample/demos-jp/icon.rb103
-rw-r--r--ext/tk/sample/demos-jp/image1.rb64
-rw-r--r--ext/tk/sample/demos-jp/image2.rb106
-rw-r--r--ext/tk/sample/demos-jp/image3.rb127
-rw-r--r--ext/tk/sample/demos-jp/items.rb379
-rw-r--r--ext/tk/sample/demos-jp/ixset333
-rw-r--r--ext/tk/sample/demos-jp/ixset2369
-rw-r--r--ext/tk/sample/demos-jp/knightstour.rb273
-rw-r--r--ext/tk/sample/demos-jp/label.rb69
-rw-r--r--ext/tk/sample/demos-jp/labelframe.rb102
-rw-r--r--ext/tk/sample/demos-jp/mclist.rb121
-rw-r--r--ext/tk/sample/demos-jp/menu.rb201
-rw-r--r--ext/tk/sample/demos-jp/menu84.rb213
-rw-r--r--ext/tk/sample/demos-jp/menu8x.rb233
-rw-r--r--ext/tk/sample/demos-jp/menubu.rb238
-rw-r--r--ext/tk/sample/demos-jp/msgbox.rb89
-rw-r--r--ext/tk/sample/demos-jp/msgbox2.rb90
-rw-r--r--ext/tk/sample/demos-jp/paned1.rb52
-rw-r--r--ext/tk/sample/demos-jp/paned2.rb100
-rw-r--r--ext/tk/sample/demos-jp/pendulum.rb242
-rw-r--r--ext/tk/sample/demos-jp/plot.rb126
-rw-r--r--ext/tk/sample/demos-jp/puzzle.rb131
-rw-r--r--ext/tk/sample/demos-jp/radio.rb84
-rw-r--r--ext/tk/sample/demos-jp/radio2.rb112
-rw-r--r--ext/tk/sample/demos-jp/radio3.rb119
-rw-r--r--ext/tk/sample/demos-jp/rmt268
-rw-r--r--ext/tk/sample/demos-jp/rolodex320
-rw-r--r--ext/tk/sample/demos-jp/rolodex-j300
-rw-r--r--ext/tk/sample/demos-jp/ruler.rb203
-rw-r--r--ext/tk/sample/demos-jp/sayings.rb103
-rw-r--r--ext/tk/sample/demos-jp/search.rb184
-rw-r--r--ext/tk/sample/demos-jp/spin.rb71
-rw-r--r--ext/tk/sample/demos-jp/square81
-rw-r--r--ext/tk/sample/demos-jp/states.rb74
-rw-r--r--ext/tk/sample/demos-jp/style.rb270
-rw-r--r--ext/tk/sample/demos-jp/tcolor534
-rw-r--r--ext/tk/sample/demos-jp/text.rb120
-rw-r--r--ext/tk/sample/demos-jp/textpeer.rb82
-rw-r--r--ext/tk/sample/demos-jp/timer136
-rw-r--r--ext/tk/sample/demos-jp/toolbar.rb136
-rw-r--r--ext/tk/sample/demos-jp/tree.rb120
-rw-r--r--ext/tk/sample/demos-jp/ttkbut.rb145
-rw-r--r--ext/tk/sample/demos-jp/ttkmenu.rb91
-rw-r--r--ext/tk/sample/demos-jp/ttknote.rb97
-rw-r--r--ext/tk/sample/demos-jp/ttkpane.rb216
-rw-r--r--ext/tk/sample/demos-jp/ttkprogress.rb71
-rw-r--r--ext/tk/sample/demos-jp/twind.rb292
-rw-r--r--ext/tk/sample/demos-jp/twind2.rb384
-rw-r--r--ext/tk/sample/demos-jp/unicodeout.rb119
-rw-r--r--ext/tk/sample/demos-jp/vscale.rb80
-rw-r--r--ext/tk/sample/demos-jp/widget1122
-rw-r--r--ext/tk/sample/editable_listbox.rb148
-rw-r--r--ext/tk/sample/encstr_usage.rb30
-rw-r--r--ext/tk/sample/figmemo_sample.rb456
-rw-r--r--ext/tk/sample/images/earth.gifbin0 -> 51712 bytes-rw-r--r--ext/tk/sample/images/earthris.gifbin0 -> 6343 bytes-rw-r--r--ext/tk/sample/images/face.xbm173
-rw-r--r--ext/tk/sample/images/flagdown.xbm27
-rw-r--r--ext/tk/sample/images/flagup.xbm27
-rw-r--r--ext/tk/sample/images/gray25.xbm6
-rw-r--r--ext/tk/sample/images/grey.256
-rw-r--r--ext/tk/sample/images/grey.56
-rw-r--r--ext/tk/sample/images/letters.xbm27
-rw-r--r--ext/tk/sample/images/noletter.xbm27
-rw-r--r--ext/tk/sample/images/pattern.xbm6
-rw-r--r--ext/tk/sample/images/tcllogo.gifbin0 -> 2341 bytes-rw-r--r--ext/tk/sample/images/teapot.ppm31
-rw-r--r--ext/tk/sample/irbtk.rb30
-rw-r--r--ext/tk/sample/irbtkw.rbw156
-rw-r--r--ext/tk/sample/iso2022-kr.txt2
-rw-r--r--ext/tk/sample/menubar1.rb51
-rw-r--r--ext/tk/sample/menubar2.rb56
-rw-r--r--ext/tk/sample/menubar3.rb72
-rw-r--r--ext/tk/sample/msgs_rb/README3
-rw-r--r--ext/tk/sample/msgs_rb/cs.msg84
-rw-r--r--ext/tk/sample/msgs_rb/de.msg88
-rw-r--r--ext/tk/sample/msgs_rb/el.msg98
-rw-r--r--ext/tk/sample/msgs_rb/en.msg83
-rw-r--r--ext/tk/sample/msgs_rb/en_gb.msg7
-rw-r--r--ext/tk/sample/msgs_rb/eo.msg87
-rw-r--r--ext/tk/sample/msgs_rb/es.msg84
-rw-r--r--ext/tk/sample/msgs_rb/fr.msg84
-rw-r--r--ext/tk/sample/msgs_rb/it.msg84
-rw-r--r--ext/tk/sample/msgs_rb/ja.msg13
-rw-r--r--ext/tk/sample/msgs_rb/nl.msg123
-rw-r--r--ext/tk/sample/msgs_rb/pl.msg87
-rw-r--r--ext/tk/sample/msgs_rb/ru.msg87
-rw-r--r--ext/tk/sample/msgs_rb2/README5
-rw-r--r--ext/tk/sample/msgs_rb2/de.msg88
-rw-r--r--ext/tk/sample/msgs_rb2/ja.msg85
-rw-r--r--ext/tk/sample/msgs_tk/README4
-rw-r--r--ext/tk/sample/msgs_tk/cs.msg84
-rw-r--r--ext/tk/sample/msgs_tk/de.msg88
-rw-r--r--ext/tk/sample/msgs_tk/el.msg103
-rw-r--r--ext/tk/sample/msgs_tk/en.msg83
-rw-r--r--ext/tk/sample/msgs_tk/en_gb.msg7
-rw-r--r--ext/tk/sample/msgs_tk/eo.msg87
-rw-r--r--ext/tk/sample/msgs_tk/es.msg84
-rw-r--r--ext/tk/sample/msgs_tk/fr.msg84
-rw-r--r--ext/tk/sample/msgs_tk/it.msg84
-rw-r--r--ext/tk/sample/msgs_tk/ja.msg13
-rw-r--r--ext/tk/sample/msgs_tk/license.terms39
-rw-r--r--ext/tk/sample/msgs_tk/nl.msg123
-rw-r--r--ext/tk/sample/msgs_tk/pl.msg87
-rw-r--r--ext/tk/sample/msgs_tk/ru.msg87
-rw-r--r--ext/tk/sample/multi-ip_sample.rb103
-rw-r--r--ext/tk/sample/multi-ip_sample2.rb29
-rw-r--r--ext/tk/sample/optobj_sample.rb67
-rw-r--r--ext/tk/sample/propagate.rb30
-rw-r--r--ext/tk/sample/remote-ip_sample.rb33
-rw-r--r--ext/tk/sample/remote-ip_sample2.rb56
-rw-r--r--ext/tk/sample/resource.en13
-rw-r--r--ext/tk/sample/resource.ja13
-rw-r--r--ext/tk/sample/safe-tk.rb134
-rw-r--r--ext/tk/sample/scrollframe.rb249
-rw-r--r--ext/tk/sample/tcltklib/batsu.gifbin0 -> 538 bytes-rw-r--r--ext/tk/sample/tcltklib/lines0.tcl42
-rw-r--r--ext/tk/sample/tcltklib/lines1.rb50
-rw-r--r--ext/tk/sample/tcltklib/lines2.rb54
-rw-r--r--ext/tk/sample/tcltklib/lines3.rb54
-rw-r--r--ext/tk/sample/tcltklib/lines4.rb54
-rw-r--r--ext/tk/sample/tcltklib/maru.gifbin0 -> 481 bytes-rw-r--r--ext/tk/sample/tcltklib/safeTk.rb22
-rw-r--r--ext/tk/sample/tcltklib/sample0.rb39
-rw-r--r--ext/tk/sample/tcltklib/sample1.rb634
-rw-r--r--ext/tk/sample/tcltklib/sample2.rb451
-rw-r--r--ext/tk/sample/tkalignbox.rb235
-rw-r--r--ext/tk/sample/tkballoonhelp.rb220
-rw-r--r--ext/tk/sample/tkbiff.rb155
-rw-r--r--ext/tk/sample/tkbrowse.rb79
-rw-r--r--ext/tk/sample/tkcombobox.rb497
-rw-r--r--ext/tk/sample/tkdialog.rb61
-rw-r--r--ext/tk/sample/tkextlib/ICONS/Orig_LICENSE.txt61
-rw-r--r--ext/tk/sample/tkextlib/ICONS/tkIcons195
-rw-r--r--ext/tk/sample/tkextlib/ICONS/tkIcons-sample.kde658
-rw-r--r--ext/tk/sample/tkextlib/ICONS/tkIcons.kde195
-rw-r--r--ext/tk/sample/tkextlib/ICONS/viewIcons.rb329
-rw-r--r--ext/tk/sample/tkextlib/blt/barchart5.rb101
-rw-r--r--ext/tk/sample/tkextlib/blt/calendar.rb117
-rw-r--r--ext/tk/sample/tkextlib/blt/graph6.rb2222
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7.rb40
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7a.rb63
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7b.rb41
-rw-r--r--ext/tk/sample/tkextlib/blt/graph7c.rb45
-rw-r--r--ext/tk/sample/tkextlib/blt/images/buckskin.gifbin0 -> 7561 bytes-rw-r--r--ext/tk/sample/tkextlib/blt/images/chalk.gifbin0 -> 4378 bytes-rw-r--r--ext/tk/sample/tkextlib/blt/images/qv100.t.gifbin0 -> 2694 bytes-rw-r--r--ext/tk/sample/tkextlib/blt/images/rain.gifbin0 -> 3785 bytes-rw-r--r--ext/tk/sample/tkextlib/blt/images/sample.gifbin0 -> 186103 bytes-rw-r--r--ext/tk/sample/tkextlib/blt/pareto.rb90
-rw-r--r--ext/tk/sample/tkextlib/blt/plot1.rb9
-rw-r--r--ext/tk/sample/tkextlib/blt/plot1b.rb10
-rw-r--r--ext/tk/sample/tkextlib/blt/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/blt/scripts/stipples.rb156
-rw-r--r--ext/tk/sample/tkextlib/blt/winop1.rb40
-rw-r--r--ext/tk/sample/tkextlib/blt/winop2.rb28
-rw-r--r--ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt53
-rw-r--r--ext/tk/sample/tkextlib/bwidget/basic.rb198
-rw-r--r--ext/tk/sample/tkextlib/bwidget/bwidget.xbm46
-rw-r--r--ext/tk/sample/tkextlib/bwidget/demo.rb243
-rw-r--r--ext/tk/sample/tkextlib/bwidget/dnd.rb46
-rw-r--r--ext/tk/sample/tkextlib/bwidget/manager.rb150
-rw-r--r--ext/tk/sample/tkextlib/bwidget/select.rb82
-rw-r--r--ext/tk/sample/tkextlib/bwidget/tmpldlg.rb221
-rw-r--r--ext/tk/sample/tkextlib/bwidget/tree.rb289
-rw-r--r--ext/tk/sample/tkextlib/bwidget/x1.xbm2258
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt42
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/clear.gifbin0 -> 279 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/close.gifbin0 -> 249 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/copy.gifbin0 -> 269 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/cut.gifbin0 -> 179 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/exit.gifbin0 -> 396 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/find.gifbin0 -> 386 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/help.gifbin0 -> 591 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/mag.gifbin0 -> 183 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/new.gifbin0 -> 212 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/open.gifbin0 -> 258 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/paste.gifbin0 -> 376 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/poly.gifbin0 -> 141 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/print.gifbin0 -> 263 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gifbin0 -> 174 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/save.gifbin0 -> 270 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/select.gifbin0 -> 124 bytes-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/buttonbox.rb22
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/calendar.rb10
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/canvasprintbox.rb8
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb8
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/checkbox.rb12
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/combobox.rb32
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/dateentry.rb7
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/datefield.rb8
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/dialog.rb20
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/dialogshell.rb14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/disjointlistbox.rb16
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/entryfield-1.rb39
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/entryfield-2.rb44
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/entryfield-3.rb40
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/extbutton.rb20
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb8
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb29
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/feedback.rb10
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/fileselectionbox.rb8
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb28
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/finddialog.rb15
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/hierarchy.rb25
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/hyperhelp.rb14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/labeledframe.rb14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/labeledwidget.rb13
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/mainwindow.rb64
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/menubar.rb124
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/menubar2.rb44
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/messagebox1.rb19
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/messagebox2.rb19
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/messagedialog.rb44
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb30
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb30
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/optionmenu.rb14
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/panedwindow.rb22
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/panedwindow2.rb22
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/promptdialog.rb17
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/pushbutton.rb9
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/radiobox.rb13
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb13
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledframe.rb18
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledhtml.rb15
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb22
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/scrolledtext.rb11
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/selectionbox.rb19
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/selectiondialog.rb12
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/shell.rb17
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spindate.rb7
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spinint.rb10
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spinner.rb33
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/spintime.rb7
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook.rb26
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/tabnotebook2.rb30
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/tabset.rb34
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/timeentry.rb7
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/timefield.rb8
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/toolbar.rb152
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/watch.rb18
-rw-r--r--ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt46
-rw-r--r--ext/tk/sample/tkextlib/tcllib/datefield.rb29
-rw-r--r--ext/tk/sample/tkextlib/tcllib/plotdemos1.rb158
-rw-r--r--ext/tk/sample/tkextlib/tcllib/plotdemos2.rb71
-rw-r--r--ext/tk/sample/tkextlib/tcllib/plotdemos3.rb83
-rw-r--r--ext/tk/sample/tkextlib/tcllib/xyplot.rb17
-rw-r--r--ext/tk/sample/tkextlib/tile/Orig_LICENSE.txt30
-rw-r--r--ext/tk/sample/tkextlib/tile/demo.rb983
-rw-r--r--ext/tk/sample/tkextlib/tile/iconlib.tcl110
-rw-r--r--ext/tk/sample/tkextlib/tile/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/tile/repeater.tcl117
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue.tcl149
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gifbin0 -> 315 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gifbin0 -> 312 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowdown.gifbin0 -> 313 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gifbin0 -> 329 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gifbin0 -> 327 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowleft.gifbin0 -> 323 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gifbin0 -> 330 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gifbin0 -> 327 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowright.gifbin0 -> 324 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gifbin0 -> 309 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gifbin0 -> 313 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/arrowup.gifbin0 -> 314 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/button-h.gifbin0 -> 696 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.gifbin0 -> 770 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/button-n.xcfbin0 -> 1942 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/button-p.gifbin0 -> 769 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hc.gifbin0 -> 254 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/check-hu.gifbin0 -> 234 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nc.gifbin0 -> 249 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/check-nu.gifbin0 -> 229 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hc.gifbin0 -> 1098 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-hu.gifbin0 -> 626 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nc.gifbin0 -> 389 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/radio-nu.gifbin0 -> 401 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gifbin0 -> 343 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gifbin0 -> 316 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gifbin0 -> 333 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gifbin0 -> 308 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/slider-p.gifbin0 -> 182 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/slider.gifbin0 -> 182 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider-p.gifbin0 -> 183 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/blue/vslider.gifbin0 -> 283 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/blue/pkgIndex.tcl6
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik.tcl194
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gifbin0 -> 273 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gifbin0 -> 258 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gifbin0 -> 292 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gifbin0 -> 272 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gifbin0 -> 274 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gifbin0 -> 258 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gifbin0 -> 286 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gifbin0 -> 271 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-d.gifbin0 -> 1266 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-h.gifbin0 -> 896 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-n.gifbin0 -> 881 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-p.gifbin0 -> 625 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/button-s.gifbin0 -> 859 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-c.gifbin0 -> 434 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/check-u.gifbin0 -> 423 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gifbin0 -> 401 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gifbin0 -> 395 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gifbin0 -> 592 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gifbin0 -> 1116 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gifbin0 -> 61 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gifbin0 -> 1057 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gifbin0 -> 1095 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gifbin0 -> 695 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gifbin0 -> 686 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gifbin0 -> 383 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gifbin0 -> 878 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gifbin0 -> 907 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gifbin0 -> 238 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gifbin0 -> 927 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gifbin0 -> 405 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gifbin0 -> 399 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gifbin0 -> 587 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl15
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc.rb226
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc.tcl163
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-h.gifbin0 -> 522 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-n.gifbin0 -> 554 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/button-p.gifbin0 -> 548 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gifbin0 -> 281 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gifbin0 -> 273 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gifbin0 -> 303 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gifbin0 -> 294 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gifbin0 -> 652 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gifbin0 -> 644 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gifbin0 -> 632 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gifbin0 -> 621 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl15
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl16
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik.tcl125
-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gifbin0 -> 362 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gifbin0 -> 250 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gifbin0 -> 378 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gifbin0 -> 267 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gifbin0 -> 379 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gifbin0 -> 266 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gifbin0 -> 363 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gifbin0 -> 251 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-h.gifbin0 -> 439 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-n.gifbin0 -> 443 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/button-p.gifbin0 -> 302 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gifbin0 -> 169 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gifbin0 -> 170 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gifbin0 -> 235 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gifbin0 -> 226 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gifbin0 -> 169 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gifbin0 -> 269 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gifbin0 -> 342 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gifbin0 -> 178 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gifbin0 -> 179 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gifbin0 -> 236 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gifbin0 -> 178 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gifbin0 -> 178 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gifbin0 -> 366 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gifbin0 -> 336 bytes-rw-r--r--ext/tk/sample/tkextlib/tile/toolbutton.tcl152
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt12
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/README12
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/hv.rb313
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image1bin0 -> 8995 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image10bin0 -> 3095 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image11bin0 -> 1425 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image12bin0 -> 2468 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image13bin0 -> 4073 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image14bin0 -> 53 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image2bin0 -> 42 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image3bin0 -> 3473 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image4bin0 -> 1988 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image5bin0 -> 973 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image6bin0 -> 2184 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image7bin0 -> 2022 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image8bin0 -> 1186 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/image9bin0 -> 139 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/index.html115
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image1bin0 -> 1966 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image10bin0 -> 255 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image11bin0 -> 590 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image12bin0 -> 254 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image13bin0 -> 493 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image14bin0 -> 195 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image15bin0 -> 68 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image16bin0 -> 157 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image17bin0 -> 81 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image18bin0 -> 545 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image19bin0 -> 53 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image2bin0 -> 49 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image20bin0 -> 533 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image21bin0 -> 564 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image22bin0 -> 81 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image23bin0 -> 539 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image24bin0 -> 151 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image25bin0 -> 453 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image26bin0 -> 520 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image27bin0 -> 565 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image28bin0 -> 416 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image29bin0 -> 121 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image3bin0 -> 10835 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image30bin0 -> 663 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image31bin0 -> 78 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image32bin0 -> 556 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image33bin0 -> 598 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image34bin0 -> 496 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image35bin0 -> 724 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image36bin0 -> 404 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image37bin0 -> 124 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image38bin0 -> 8330 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image39bin0 -> 369 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image4bin0 -> 268 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image5bin0 -> 492 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image6bin0 -> 246 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image7bin0 -> 551 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image8bin0 -> 497 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/image9bin0 -> 492 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page2/index.html433
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image1bin0 -> 113 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image10bin0 -> 5088 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image11bin0 -> 4485 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image12bin0 -> 3579 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image13bin0 -> 5119 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image14bin0 -> 3603 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image2bin0 -> 74 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image3bin0 -> 681 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image4bin0 -> 3056 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image5bin0 -> 2297 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image6bin0 -> 79 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image7bin0 -> 1613 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image8bin0 -> 864 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/image9bin0 -> 2379 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page3/index.html2787
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image1bin0 -> 42 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image2bin0 -> 14343 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image3bin0 -> 17750 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image4bin0 -> 61 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image5bin0 -> 201 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image6bin0 -> 214 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image7bin0 -> 149 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image8bin0 -> 203 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/image9bin0 -> 1504 bytes-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page4/index.html768
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/ss.rb436
-rw-r--r--ext/tk/sample/tkextlib/tkimg/demo.rb1478
-rw-r--r--ext/tk/sample/tkextlib/tkimg/license_terms_of_Img_extension41
-rw-r--r--ext/tk/sample/tkextlib/tkimg/readme.txt3
-rw-r--r--ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt52
-rw-r--r--ext/tk/sample/tkextlib/tktable/basic.rb60
-rw-r--r--ext/tk/sample/tkextlib/tktable/buttons.rb76
-rw-r--r--ext/tk/sample/tkextlib/tktable/command.rb89
-rw-r--r--ext/tk/sample/tkextlib/tktable/debug.rb101
-rw-r--r--ext/tk/sample/tkextlib/tktable/dynarows.rb99
-rw-r--r--ext/tk/sample/tkextlib/tktable/maxsize.rb67
-rw-r--r--ext/tk/sample/tkextlib/tktable/spreadsheet.rb137
-rw-r--r--ext/tk/sample/tkextlib/tktable/tcllogo.gifbin0 -> 2341 bytes-rw-r--r--ext/tk/sample/tkextlib/tktable/valid.rb88
-rw-r--r--ext/tk/sample/tkextlib/treectrl/bitmaps.rb76
-rw-r--r--ext/tk/sample/tkextlib/treectrl/demo.rb1305
-rw-r--r--ext/tk/sample/tkextlib/treectrl/explorer.rb430
-rw-r--r--ext/tk/sample/tkextlib/treectrl/help.rb404
-rw-r--r--ext/tk/sample/tkextlib/treectrl/imovie.rb130
-rw-r--r--ext/tk/sample/tkextlib/treectrl/layout.rb159
-rw-r--r--ext/tk/sample/tkextlib/treectrl/mailwasher.rb269
-rw-r--r--ext/tk/sample/tkextlib/treectrl/outlook-folders.rb124
-rw-r--r--ext/tk/sample/tkextlib/treectrl/outlook-newgroup.rb448
-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/big-dll.gifbin0 -> 437 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/big-exe.gifbin0 -> 368 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/big-file.gifbin0 -> 466 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/big-folder.gifbin0 -> 459 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/big-txt.gifbin0 -> 392 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/checked.gifbin0 -> 78 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/file.gifbin0 -> 279 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/folder-closed.gifbin0 -> 111 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/folder-open.gifbin0 -> 120 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/help-book-closed.gifbin0 -> 115 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/help-book-open.gifbin0 -> 128 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/help-page.gifbin0 -> 132 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-01.gifbin0 -> 5406 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-02.gifbin0 -> 5912 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-03.gifbin0 -> 4696 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-04.gifbin0 -> 5783 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-05.gifbin0 -> 3238 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-06.gifbin0 -> 3509 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/imovie-07.gifbin0 -> 2091 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-check-off.gifbin0 -> 70 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-check-on.gifbin0 -> 76 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-print.gifbin0 -> 124 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-radio-off.gifbin0 -> 68 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-radio-on.gifbin0 -> 71 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-search.gifbin0 -> 114 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/internet-security.gifbin0 -> 108 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/mac-collapse.gifbin0 -> 275 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/mac-expand.gifbin0 -> 277 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-arrow.gifbin0 -> 73 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-clip.gifbin0 -> 73 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-deleted.gifbin0 -> 138 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-draft.gifbin0 -> 134 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-folder.gifbin0 -> 133 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-group.gifbin0 -> 144 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-inbox.gifbin0 -> 133 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-local.gifbin0 -> 146 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-main.gifbin0 -> 174 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-outbox.gifbin0 -> 136 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-read-2.gifbin0 -> 343 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-read.gifbin0 -> 304 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-sent.gifbin0 -> 132 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-server.gifbin0 -> 163 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-unread.gifbin0 -> 303 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/outlook-watch.gifbin0 -> 98 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/sky.gifbin0 -> 6454 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/small-dll.gifbin0 -> 311 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/small-exe.gifbin0 -> 115 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/small-file.gifbin0 -> 338 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/small-folder.gifbin0 -> 307 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/small-txt.gifbin0 -> 302 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/pics/unchecked.gifbin0 -> 72 bytes-rw-r--r--ext/tk/sample/tkextlib/treectrl/random.rb508
-rw-r--r--ext/tk/sample/tkextlib/treectrl/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/treectrl/www-options.rb303
-rw-r--r--ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt51
-rw-r--r--ext/tk/sample/tkextlib/vu/README.txt50
-rw-r--r--ext/tk/sample/tkextlib/vu/canvItems.rb90
-rw-r--r--ext/tk/sample/tkextlib/vu/canvSticker.rb82
-rw-r--r--ext/tk/sample/tkextlib/vu/canvSticker2.rb101
-rw-r--r--ext/tk/sample/tkextlib/vu/dial_demo.rb113
-rw-r--r--ext/tk/sample/tkextlib/vu/m128_000.xbm174
-rw-r--r--ext/tk/sample/tkextlib/vu/oscilloscope.rb68
-rw-r--r--ext/tk/sample/tkextlib/vu/pie.rb56
-rw-r--r--ext/tk/sample/tkextlib/vu/vu_demo.rb67
-rw-r--r--ext/tk/sample/tkfrom.rb132
-rw-r--r--ext/tk/sample/tkhello.rb10
-rw-r--r--ext/tk/sample/tkline.rb47
-rw-r--r--ext/tk/sample/tkmenubutton.rb135
-rw-r--r--ext/tk/sample/tkmsgcat-load_rb.rb102
-rw-r--r--ext/tk/sample/tkmsgcat-load_rb2.rb102
-rw-r--r--ext/tk/sample/tkmsgcat-load_tk.rb118
-rw-r--r--ext/tk/sample/tkmulticolumnlist.rb743
-rw-r--r--ext/tk/sample/tkmultilistbox.rb654
-rw-r--r--ext/tk/sample/tkmultilistframe.rb940
-rw-r--r--ext/tk/sample/tkoptdb-safeTk.rb73
-rw-r--r--ext/tk/sample/tkoptdb.rb106
-rw-r--r--ext/tk/sample/tkrttimer.rb77
-rw-r--r--ext/tk/sample/tksleep_sample.rb29
-rw-r--r--ext/tk/sample/tktextframe.rb281
-rw-r--r--ext/tk/sample/tktextio.rb1060
-rw-r--r--ext/tk/sample/tktimer.rb50
-rw-r--r--ext/tk/sample/tktimer2.rb47
-rw-r--r--ext/tk/sample/tktimer3.rb59
-rw-r--r--ext/tk/sample/tktree.rb103
-rw-r--r--ext/tk/sample/tktree.tcl305
-rw-r--r--ext/tk/sample/ttk_wrapper.rb154
-rw-r--r--ext/tk/stubs.c594
-rw-r--r--ext/tk/stubs.h33
-rw-r--r--ext/tk/tcltklib.c11058
-rw-r--r--ext/tk/tkutil/depend1
-rw-r--r--ext/tk/tkutil/extconf.rb18
-rw-r--r--ext/tk/tkutil/tkutil.c1866
-rw-r--r--ext/tkutil/MANIFEST3
-rw-r--r--ext/tkutil/depend1
-rw-r--r--ext/tkutil/tkutil.c53
-rw-r--r--ext/win32/extconf.rb3
-rw-r--r--ext/win32/lib/Win32API.rb31
-rw-r--r--ext/win32/lib/win32/importer.rb14
-rw-r--r--ext/win32/lib/win32/registry.rb898
-rw-r--r--ext/win32/lib/win32/resolv.rb378
-rw-r--r--ext/win32/lib/win32/sspi.rb330
-rw-r--r--ext/win32ole/depend1
-rw-r--r--ext/win32ole/extconf.rb44
-rw-r--r--ext/win32ole/lib/win32ole/property.rb16
-rw-r--r--ext/win32ole/sample/excel1.rb33
-rw-r--r--ext/win32ole/sample/excel2.rb30
-rw-r--r--ext/win32ole/sample/excel3.rb13
-rw-r--r--ext/win32ole/sample/ie.rb11
-rw-r--r--ext/win32ole/sample/ieconst.rb32
-rw-r--r--ext/win32ole/sample/ienavi.rb40
-rw-r--r--ext/win32ole/sample/ienavi2.rb40
-rw-r--r--ext/win32ole/sample/oledirs.rb23
-rw-r--r--ext/win32ole/sample/olegen.rb347
-rw-r--r--ext/win32ole/sample/xml.rb7306
-rw-r--r--ext/win32ole/win32ole.c9358
-rw-r--r--ext/zlib/depend5
-rw-r--r--ext/zlib/extconf.rb64
-rw-r--r--ext/zlib/zlib.c4618
-rw-r--r--file.c5962
-rw-r--r--fnmatch.c190
-rw-r--r--fnmatch.h36
-rw-r--r--gc.c7765
-rw-r--r--gc.h101
-rw-r--r--gem_prelude.rb1
-rw-r--r--glob.c568
-rw-r--r--golf_prelude.rb123
-rw-r--r--goruby.c58
-rw-r--r--hash.c3942
-rw-r--r--ia64.s42
-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.h52
-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.h324
-rw-r--r--include/ruby/encoding.h363
-rw-r--r--include/ruby/intern.h959
-rw-r--r--include/ruby/io.h214
-rw-r--r--include/ruby/missing.h244
-rw-r--r--include/ruby/oniguruma.h837
-rw-r--r--include/ruby/re.h71
-rw-r--r--include/ruby/regex.h46
-rw-r--r--include/ruby/ruby.h1872
-rw-r--r--include/ruby/st.h154
-rw-r--r--include/ruby/subst.h19
-rw-r--r--include/ruby/thread.h45
-rw-r--r--include/ruby/util.h95
-rw-r--r--include/ruby/version.h74
-rw-r--r--include/ruby/vm.h64
-rw-r--r--include/ruby/win32.h837
-rw-r--r--inits.c92
-rw-r--r--insns.def2173
-rwxr-xr-xinstall-sh238
-rw-r--r--internal.h892
-rw-r--r--io.c12544
-rw-r--r--io.h50
-rw-r--r--iseq.c2322
-rw-r--r--iseq.h136
-rw-r--r--lex.c.blt219
-rw-r--r--lib/English.rb185
-rwxr-xr-xlib/abbrev.rb136
-rw-r--r--lib/base64.rb138
-rw-r--r--lib/benchmark.rb568
-rw-r--r--lib/cgi-lib.rb56
-rw-r--r--lib/cgi.rb297
-rw-r--r--lib/cgi/cookie.rb170
-rw-r--r--lib/cgi/core.rb859
-rw-r--r--lib/cgi/html.rb1034
-rw-r--r--lib/cgi/session.rb531
-rw-r--r--lib/cgi/session/pstore.rb111
-rw-r--r--lib/cgi/util.rb202
-rw-r--r--lib/cmath.rb400
-rw-r--r--lib/complex.rb492
-rw-r--r--lib/csv.rb2323
-rw-r--r--lib/debug.rb1087
-rw-r--r--lib/delegate.rb445
-rw-r--r--lib/drb.rb2
-rw-r--r--lib/drb/acl.rb250
-rw-r--r--lib/drb/drb.rb1833
-rw-r--r--lib/drb/eq.rb14
-rw-r--r--lib/drb/extserv.rb73
-rw-r--r--lib/drb/extservm.rb93
-rw-r--r--lib/drb/gw.rb160
-rw-r--r--lib/drb/invokemethod.rb34
-rw-r--r--lib/drb/observer.rb25
-rw-r--r--lib/drb/ssl.rb344
-rw-r--r--lib/drb/timeridconv.rb101
-rw-r--r--lib/drb/unix.rb115
-rw-r--r--lib/e2mmap.rb176
-rw-r--r--lib/erb.rb1009
-rw-r--r--lib/fileutils.rb1770
-rw-r--r--lib/find.rb101
-rw-r--r--lib/forwardable.rb289
-rw-r--r--lib/getoptlong.rb612
-rw-r--r--lib/getopts.rb142
-rw-r--r--lib/gserver.rb310
-rw-r--r--lib/ipaddr.rb935
-rw-r--r--lib/irb.rb704
-rw-r--r--lib/irb/cmd/chws.rb33
-rw-r--r--lib/irb/cmd/fork.rb39
-rw-r--r--lib/irb/cmd/help.rb41
-rw-r--r--lib/irb/cmd/load.rb68
-rw-r--r--lib/irb/cmd/nop.rb39
-rw-r--r--lib/irb/cmd/pushws.rb40
-rw-r--r--lib/irb/cmd/subirb.rb42
-rw-r--r--lib/irb/completion.rb235
-rw-r--r--lib/irb/context.rb422
-rw-r--r--lib/irb/ext/change-ws.rb69
-rw-r--r--lib/irb/ext/history.rb120
-rw-r--r--lib/irb/ext/loader.rb130
-rw-r--r--lib/irb/ext/math-mode.rb47
-rw-r--r--lib/irb/ext/multi-irb.rb286
-rw-r--r--lib/irb/ext/save-history.rb120
-rw-r--r--lib/irb/ext/tracer.rb71
-rw-r--r--lib/irb/ext/use-loader.rb73
-rw-r--r--lib/irb/ext/workspaces.rb66
-rw-r--r--lib/irb/extend-command.rb322
-rw-r--r--lib/irb/frame.rb80
-rw-r--r--lib/irb/help.rb36
-rw-r--r--lib/irb/init.rb310
-rw-r--r--lib/irb/input-method.rb193
-rw-r--r--lib/irb/inspector.rb145
-rw-r--r--lib/irb/lc/.document4
-rw-r--r--lib/irb/lc/error.rb31
-rw-r--r--lib/irb/lc/help-message50
-rw-r--r--lib/irb/lc/ja/encoding_aliases.rb10
-rw-r--r--lib/irb/lc/ja/error.rb30
-rw-r--r--lib/irb/lc/ja/help-message53
-rw-r--r--lib/irb/locale.rb182
-rw-r--r--lib/irb/magic-file.rb37
-rw-r--r--lib/irb/notifier.rb231
-rw-r--r--lib/irb/output-method.rb91
-rw-r--r--lib/irb/ruby-lex.rb1211
-rw-r--r--lib/irb/ruby-token.rb267
-rw-r--r--lib/irb/slex.rb284
-rw-r--r--lib/irb/src_encoding.rb4
-rw-r--r--lib/irb/version.rb15
-rw-r--r--lib/irb/workspace.rb114
-rw-r--r--lib/irb/ws-for-case-2.rb14
-rw-r--r--lib/irb/xmp.rb173
-rw-r--r--lib/jcode.rb174
-rw-r--r--lib/logger.rb844
-rw-r--r--lib/mailread.rb48
-rw-r--r--lib/mathn.rb445
-rw-r--r--lib/matrix.rb1881
-rw-r--r--lib/matrix/eigenvalue_decomposition.rb882
-rw-r--r--lib/matrix/lup_decomposition.rb218
-rw-r--r--lib/minitest/.document2
-rw-r--r--lib/minitest/README.txt457
-rw-r--r--lib/minitest/autorun.rb19
-rw-r--r--lib/minitest/benchmark.rb423
-rw-r--r--lib/minitest/hell.rb20
-rw-r--r--lib/minitest/mock.rb200
-rw-r--r--lib/minitest/parallel_each.rb80
-rw-r--r--lib/minitest/pride.rb119
-rw-r--r--lib/minitest/spec.rb551
-rw-r--r--lib/minitest/unit.rb1422
-rw-r--r--lib/mkmf.rb2627
-rw-r--r--lib/monitor.rb300
-rw-r--r--lib/mutex_m.rb111
-rw-r--r--lib/net/ftp.rb1126
-rw-r--r--lib/net/http.rb1556
-rw-r--r--lib/net/http/backward.rb25
-rw-r--r--lib/net/http/exceptions.rb25
-rw-r--r--lib/net/http/generic_request.rb329
-rw-r--r--lib/net/http/header.rb452
-rw-r--r--lib/net/http/proxy_delta.rb16
-rw-r--r--lib/net/http/request.rb20
-rw-r--r--lib/net/http/requests.rb122
-rw-r--r--lib/net/http/response.rb405
-rw-r--r--lib/net/http/responses.rb271
-rw-r--r--lib/net/https.rb22
-rw-r--r--lib/net/imap.rb3770
-rw-r--r--lib/net/pop.rb1021
-rw-r--r--lib/net/protocol.rb420
-rw-r--r--lib/net/smtp.rb1066
-rw-r--r--lib/net/telnet.rb763
-rw-r--r--lib/observer.rb197
-rw-r--r--lib/open-uri.rb789
-rw-r--r--lib/open3.rb663
-rw-r--r--lib/optparse.rb1956
-rw-r--r--lib/optparse/ac.rb50
-rw-r--r--lib/optparse/date.rb17
-rw-r--r--lib/optparse/shellwords.rb6
-rw-r--r--lib/optparse/time.rb10
-rw-r--r--lib/optparse/uri.rb6
-rw-r--r--lib/optparse/version.rb70
-rw-r--r--lib/ostruct.rb286
-rw-r--r--lib/parsearg.rb84
-rw-r--r--lib/parsedate.rb42
-rw-r--r--lib/pp.rb544
-rw-r--r--lib/prettyprint.rb576
-rw-r--r--lib/prime.rb490
-rw-r--r--lib/profile.rb10
-rw-r--r--lib/profiler.rb148
-rw-r--r--lib/pstore.rb506
-rw-r--r--lib/racc/parser.rb624
-rw-r--r--lib/racc/rdoc/grammar.en.rdoc219
-rw-r--r--lib/rake.rb73
-rw-r--r--lib/rake/alt_system.rb108
-rw-r--r--lib/rake/application.rb728
-rw-r--r--lib/rake/backtrace.rb20
-rw-r--r--lib/rake/clean.rb55
-rw-r--r--lib/rake/cloneable.rb16
-rw-r--r--lib/rake/contrib/compositepublisher.rb21
-rw-r--r--lib/rake/contrib/ftptools.rb139
-rw-r--r--lib/rake/contrib/publisher.rb73
-rw-r--r--lib/rake/contrib/rubyforgepublisher.rb16
-rw-r--r--lib/rake/contrib/sshpublisher.rb50
-rw-r--r--lib/rake/contrib/sys.rb2
-rw-r--r--lib/rake/default_loader.rb10
-rw-r--r--lib/rake/dsl_definition.rb157
-rw-r--r--lib/rake/early_time.rb18
-rw-r--r--lib/rake/ext/core.rb28
-rw-r--r--lib/rake/ext/module.rb1
-rw-r--r--lib/rake/ext/string.rb166
-rw-r--r--lib/rake/ext/time.rb15
-rw-r--r--lib/rake/file_creation_task.rb24
-rw-r--r--lib/rake/file_list.rb416
-rw-r--r--lib/rake/file_task.rb46
-rw-r--r--lib/rake/file_utils.rb116
-rw-r--r--lib/rake/file_utils_ext.rb144
-rw-r--r--lib/rake/gempackagetask.rb2
-rw-r--r--lib/rake/invocation_chain.rb57
-rw-r--r--lib/rake/invocation_exception_mixin.rb16
-rw-r--r--lib/rake/lib/.document1
-rw-r--r--lib/rake/lib/project.rake21
-rw-r--r--lib/rake/linked_list.rb103
-rw-r--r--lib/rake/loaders/makefile.rb40
-rw-r--r--lib/rake/multi_task.rb13
-rw-r--r--lib/rake/name_space.rb25
-rw-r--r--lib/rake/packagetask.rb190
-rw-r--r--lib/rake/pathmap.rb1
-rw-r--r--lib/rake/phony.rb15
-rw-r--r--lib/rake/private_reader.rb20
-rw-r--r--lib/rake/promise.rb99
-rw-r--r--lib/rake/pseudo_status.rb29
-rw-r--r--lib/rake/rake_module.rb37
-rw-r--r--lib/rake/rake_test_loader.rb22
-rw-r--r--lib/rake/rdoctask.rb2
-rw-r--r--lib/rake/ruby182_test_unit_fix.rb27
-rw-r--r--lib/rake/rule_recursion_overflow_error.rb20
-rw-r--r--lib/rake/runtest.rb22
-rw-r--r--lib/rake/scope.rb42
-rw-r--r--lib/rake/task.rb378
-rw-r--r--lib/rake/task_argument_error.rb7
-rw-r--r--lib/rake/task_arguments.rb89
-rw-r--r--lib/rake/task_manager.rb297
-rw-r--r--lib/rake/tasklib.rb22
-rw-r--r--lib/rake/testtask.rb201
-rw-r--r--lib/rake/thread_history_display.rb48
-rw-r--r--lib/rake/thread_pool.rb161
-rw-r--r--lib/rake/trace_output.rb22
-rw-r--r--lib/rake/version.rb9
-rw-r--r--lib/rake/win32.rb56
-rw-r--r--lib/rational.rb366
-rw-r--r--lib/rbconfig/.document1
-rw-r--r--lib/rbconfig/datadir.rb13
-rw-r--r--lib/rbconfig/obsolete.rb38
-rw-r--r--lib/rdoc.rb183
-rw-r--r--lib/rdoc/alias.rb111
-rw-r--r--lib/rdoc/anon_class.rb10
-rw-r--r--lib/rdoc/any_method.rb308
-rw-r--r--lib/rdoc/attr.rb175
-rw-r--r--lib/rdoc/class_module.rb799
-rw-r--r--lib/rdoc/code_object.rb429
-rw-r--r--lib/rdoc/code_objects.rb5
-rw-r--r--lib/rdoc/comment.rb229
-rw-r--r--lib/rdoc/constant.rb186
-rw-r--r--lib/rdoc/context.rb1208
-rw-r--r--lib/rdoc/context/section.rb238
-rw-r--r--lib/rdoc/cross_reference.rb183
-rw-r--r--lib/rdoc/encoding.rb97
-rw-r--r--lib/rdoc/erb_partial.rb18
-rw-r--r--lib/rdoc/erbio.rb37
-rw-r--r--lib/rdoc/extend.rb9
-rw-r--r--lib/rdoc/generator.rb50
-rw-r--r--lib/rdoc/generator/darkfish.rb759
-rw-r--r--lib/rdoc/generator/json_index.rb248
-rw-r--r--lib/rdoc/generator/markup.rb169
-rw-r--r--lib/rdoc/generator/ri.rb30
-rw-r--r--lib/rdoc/generator/template/darkfish/.document0
-rw-r--r--lib/rdoc/generator/template/darkfish/_footer.rhtml5
-rw-r--r--lib/rdoc/generator/template/darkfish/_head.rhtml22
-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/fonts.css167
-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttfbin0 -> 94668 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttfbin0 -> 94196 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttfbin0 -> 96184 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttfbin0 -> 95316 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttfbin0 -> 71200 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttfbin0 -> 71692 bytes-rwxr-xr-xlib/rdoc/generator/template/darkfish/images/add.pngbin0 -> 733 bytes-rwxr-xr-xlib/rdoc/generator/template/darkfish/images/arrow_up.pngbin0 -> 372 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/brick.pngbin0 -> 452 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/brick_link.pngbin0 -> 764 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/bug.pngbin0 -> 774 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/bullet_black.pngbin0 -> 211 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.pngbin0 -> 207 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.pngbin0 -> 209 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/date.pngbin0 -> 626 bytes-rwxr-xr-xlib/rdoc/generator/template/darkfish/images/delete.pngbin0 -> 715 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/find.pngbin0 -> 659 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/loadingAnimation.gifbin0 -> 5886 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/macFFBgHack.pngbin0 -> 207 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/package.pngbin0 -> 853 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/page_green.pngbin0 -> 621 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/page_white_text.pngbin0 -> 342 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/page_white_width.pngbin0 -> 309 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/plugin.pngbin0 -> 591 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/ruby.pngbin0 -> 592 bytes-rwxr-xr-xlib/rdoc/generator/template/darkfish/images/tag_blue.pngbin0 -> 1880 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/tag_green.pngbin0 -> 613 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/transparent.pngbin0 -> 97 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/wrench.pngbin0 -> 610 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/wrench_orange.pngbin0 -> 584 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/zoom.pngbin0 -> 692 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/index.rhtml23
-rw-r--r--lib/rdoc/generator/template/darkfish/js/darkfish.js140
-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/rdoc.css580
-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/ghost_method.rb6
-rw-r--r--lib/rdoc/include.rb9
-rw-r--r--lib/rdoc/known_classes.rb73
-rw-r--r--lib/rdoc/markdown.rb15961
-rw-r--r--lib/rdoc/markdown/entities.rb2131
-rw-r--r--lib/rdoc/markdown/literals_1_9.rb420
-rw-r--r--lib/rdoc/markup.rb869
-rw-r--r--lib/rdoc/markup/attr_changer.rb22
-rw-r--r--lib/rdoc/markup/attr_span.rb29
-rw-r--r--lib/rdoc/markup/attribute_manager.rb343
-rw-r--r--lib/rdoc/markup/attributes.rb70
-rw-r--r--lib/rdoc/markup/blank_line.rb27
-rw-r--r--lib/rdoc/markup/block_quote.rb14
-rw-r--r--lib/rdoc/markup/document.rb164
-rw-r--r--lib/rdoc/markup/formatter.rb264
-rw-r--r--lib/rdoc/markup/formatter_test_case.rb767
-rw-r--r--lib/rdoc/markup/hard_break.rb31
-rw-r--r--lib/rdoc/markup/heading.rb78
-rw-r--r--lib/rdoc/markup/include.rb42
-rw-r--r--lib/rdoc/markup/indented_paragraph.rb47
-rw-r--r--lib/rdoc/markup/inline.rb1
-rw-r--r--lib/rdoc/markup/list.rb101
-rw-r--r--lib/rdoc/markup/list_item.rb99
-rw-r--r--lib/rdoc/markup/paragraph.rb28
-rw-r--r--lib/rdoc/markup/parser.rb558
-rw-r--r--lib/rdoc/markup/pre_process.rb293
-rw-r--r--lib/rdoc/markup/raw.rb69
-rw-r--r--lib/rdoc/markup/rule.rb20
-rw-r--r--lib/rdoc/markup/special.rb40
-rw-r--r--lib/rdoc/markup/text_formatter_test_case.rb114
-rw-r--r--lib/rdoc/markup/to_ansi.rb93
-rw-r--r--lib/rdoc/markup/to_bs.rb78
-rw-r--r--lib/rdoc/markup/to_html.rb397
-rw-r--r--lib/rdoc/markup/to_html_crossref.rb160
-rw-r--r--lib/rdoc/markup/to_html_snippet.rb284
-rw-r--r--lib/rdoc/markup/to_joined_paragraph.rb71
-rw-r--r--lib/rdoc/markup/to_label.rb74
-rw-r--r--lib/rdoc/markup/to_markdown.rb191
-rw-r--r--lib/rdoc/markup/to_rdoc.rb333
-rw-r--r--lib/rdoc/markup/to_table_of_contents.rb87
-rw-r--r--lib/rdoc/markup/to_test.rb69
-rw-r--r--lib/rdoc/markup/to_tt_only.rb120
-rw-r--r--lib/rdoc/markup/verbatim.rb83
-rw-r--r--lib/rdoc/meta_method.rb6
-rw-r--r--lib/rdoc/method_attr.rb410
-rw-r--r--lib/rdoc/mixin.rb120
-rw-r--r--lib/rdoc/normal_class.rb92
-rw-r--r--lib/rdoc/normal_module.rb73
-rw-r--r--lib/rdoc/options.rb1199
-rw-r--r--lib/rdoc/parser.rb310
-rw-r--r--lib/rdoc/parser/c.rb1229
-rw-r--r--lib/rdoc/parser/changelog.rb194
-rw-r--r--lib/rdoc/parser/markdown.rb23
-rw-r--r--lib/rdoc/parser/rd.rb22
-rw-r--r--lib/rdoc/parser/ruby.rb2160
-rw-r--r--lib/rdoc/parser/ruby_tools.rb167
-rw-r--r--lib/rdoc/parser/simple.rb61
-rw-r--r--lib/rdoc/parser/text.rb11
-rw-r--r--lib/rdoc/rd.rb99
-rw-r--r--lib/rdoc/rd/block_parser.rb1055
-rw-r--r--lib/rdoc/rd/inline.rb71
-rw-r--r--lib/rdoc/rd/inline_parser.rb1207
-rw-r--r--lib/rdoc/rdoc.rb568
-rw-r--r--lib/rdoc/require.rb51
-rw-r--r--lib/rdoc/ri.rb20
-rw-r--r--lib/rdoc/ri/driver.rb1497
-rw-r--r--lib/rdoc/ri/formatter.rb5
-rw-r--r--lib/rdoc/ri/paths.rb187
-rw-r--r--lib/rdoc/ri/store.rb6
-rw-r--r--lib/rdoc/ruby_lex.rb1377
-rw-r--r--lib/rdoc/ruby_token.rb460
-rw-r--r--lib/rdoc/rubygems_hook.rb247
-rw-r--r--lib/rdoc/servlet.rb441
-rw-r--r--lib/rdoc/single_class.rb21
-rw-r--r--lib/rdoc/stats.rb457
-rw-r--r--lib/rdoc/stats/normal.rb48
-rw-r--r--lib/rdoc/stats/quiet.rb59
-rw-r--r--lib/rdoc/stats/verbose.rb45
-rw-r--r--lib/rdoc/store.rb979
-rw-r--r--lib/rdoc/task.rb330
-rw-r--r--lib/rdoc/test_case.rb217
-rw-r--r--lib/rdoc/text.rb315
-rw-r--r--lib/rdoc/token_stream.rb95
-rw-r--r--lib/rdoc/tom_doc.rb257
-rw-r--r--lib/rdoc/top_level.rb282
-rw-r--r--lib/resolv-replace.rb74
-rw-r--r--lib/resolv.rb2832
-rw-r--r--lib/rexml/attlistdecl.rb62
-rw-r--r--lib/rexml/attribute.rb191
-rw-r--r--lib/rexml/cdata.rb67
-rw-r--r--lib/rexml/child.rb96
-rw-r--r--lib/rexml/comment.rb80
-rw-r--r--lib/rexml/doctype.rb269
-rw-r--r--lib/rexml/document.rb286
-rw-r--r--lib/rexml/dtd/attlistdecl.rb10
-rw-r--r--lib/rexml/dtd/dtd.rb51
-rw-r--r--lib/rexml/dtd/elementdecl.rb17
-rw-r--r--lib/rexml/dtd/entitydecl.rb56
-rw-r--r--lib/rexml/dtd/notationdecl.rb39
-rw-r--r--lib/rexml/element.rb1242
-rw-r--r--lib/rexml/encoding.rb50
-rw-r--r--lib/rexml/entity.rb172
-rw-r--r--lib/rexml/formatters/default.rb111
-rw-r--r--lib/rexml/formatters/pretty.rb141
-rw-r--r--lib/rexml/formatters/transitive.rb57
-rw-r--r--lib/rexml/functions.rb394
-rw-r--r--lib/rexml/instruction.rb70
-rw-r--r--lib/rexml/light/node.rb195
-rw-r--r--lib/rexml/namespace.rb47
-rw-r--r--lib/rexml/node.rb75
-rw-r--r--lib/rexml/output.rb29
-rw-r--r--lib/rexml/parent.rb167
-rw-r--r--lib/rexml/parseexception.rb51
-rw-r--r--lib/rexml/parsers/baseparser.rb532
-rw-r--r--lib/rexml/parsers/lightparser.rb58
-rw-r--r--lib/rexml/parsers/pullparser.rb196
-rw-r--r--lib/rexml/parsers/sax2parser.rb273
-rw-r--r--lib/rexml/parsers/streamparser.rb52
-rw-r--r--lib/rexml/parsers/treeparser.rb100
-rw-r--r--lib/rexml/parsers/ultralightparser.rb56
-rw-r--r--lib/rexml/parsers/xpathparser.rb697
-rw-r--r--lib/rexml/quickpath.rb265
-rw-r--r--lib/rexml/rexml.rb31
-rw-r--r--lib/rexml/sax2listener.rb97
-rw-r--r--lib/rexml/security.rb27
-rw-r--r--lib/rexml/source.rb296
-rw-r--r--lib/rexml/streamlistener.rb92
-rw-r--r--lib/rexml/syncenumerator.rb32
-rw-r--r--lib/rexml/text.rb425
-rw-r--r--lib/rexml/undefinednamespaceexception.rb8
-rw-r--r--lib/rexml/validation/relaxng.rb559
-rw-r--r--lib/rexml/validation/validation.rb155
-rw-r--r--lib/rexml/validation/validationexception.rb9
-rw-r--r--lib/rexml/xmldecl.rb115
-rw-r--r--lib/rexml/xmltokens.rb18
-rw-r--r--lib/rexml/xpath.rb80
-rw-r--r--lib/rexml/xpath_parser.rb803
-rw-r--r--lib/rinda/rinda.rb327
-rw-r--r--lib/rinda/ring.rb498
-rw-r--r--lib/rinda/tuplespace.rb642
-rw-r--r--lib/rss.rb91
-rw-r--r--lib/rss/0.9.rb461
-rw-r--r--lib/rss/1.0.rb484
-rw-r--r--lib/rss/2.0.rb142
-rw-r--r--lib/rss/atom.rb839
-rw-r--r--lib/rss/content.rb33
-rw-r--r--lib/rss/content/1.0.rb9
-rw-r--r--lib/rss/content/2.0.rb11
-rw-r--r--lib/rss/converter.rb170
-rw-r--r--lib/rss/dublincore.rb163
-rw-r--r--lib/rss/dublincore/1.0.rb12
-rw-r--r--lib/rss/dublincore/2.0.rb12
-rw-r--r--lib/rss/dublincore/atom.rb16
-rw-r--r--lib/rss/image.rb197
-rw-r--r--lib/rss/itunes.rb412
-rw-r--r--lib/rss/maker.rb78
-rw-r--r--lib/rss/maker/0.9.rb508
-rw-r--r--lib/rss/maker/1.0.rb435
-rw-r--r--lib/rss/maker/2.0.rb223
-rw-r--r--lib/rss/maker/atom.rb172
-rw-r--r--lib/rss/maker/base.rb944
-rw-r--r--lib/rss/maker/content.rb21
-rw-r--r--lib/rss/maker/dublincore.rb121
-rw-r--r--lib/rss/maker/entry.rb163
-rw-r--r--lib/rss/maker/feed.rb426
-rw-r--r--lib/rss/maker/image.rb111
-rw-r--r--lib/rss/maker/itunes.rb242
-rw-r--r--lib/rss/maker/slash.rb33
-rw-r--r--lib/rss/maker/syndication.rb18
-rw-r--r--lib/rss/maker/taxonomy.rb118
-rw-r--r--lib/rss/maker/trackback.rb61
-rw-r--r--lib/rss/parser.rb570
-rw-r--r--lib/rss/rexmlparser.rb49
-rw-r--r--lib/rss/rss.rb1352
-rw-r--r--lib/rss/slash.rb51
-rw-r--r--lib/rss/syndication.rb68
-rw-r--r--lib/rss/taxonomy.rb147
-rw-r--r--lib/rss/trackback.rb290
-rw-r--r--lib/rss/utils.rb199
-rw-r--r--lib/rss/xml-stylesheet.rb105
-rw-r--r--lib/rss/xml.rb71
-rw-r--r--lib/rss/xmlparser.rb94
-rw-r--r--lib/rss/xmlscanner.rb121
-rw-r--r--lib/rubygems.rb1217
-rw-r--r--lib/rubygems/LICENSE.txt54
-rw-r--r--lib/rubygems/available_set.rb164
-rw-r--r--lib/rubygems/basic_specification.rb250
-rw-r--r--lib/rubygems/command.rb579
-rw-r--r--lib/rubygems/command_manager.rb217
-rw-r--r--lib/rubygems/commands/build_command.rb60
-rw-r--r--lib/rubygems/commands/cert_command.rb278
-rw-r--r--lib/rubygems/commands/check_command.rb93
-rw-r--r--lib/rubygems/commands/cleanup_command.rb165
-rw-r--r--lib/rubygems/commands/contents_command.rb170
-rw-r--r--lib/rubygems/commands/dependency_command.rb207
-rw-r--r--lib/rubygems/commands/environment_command.rb155
-rw-r--r--lib/rubygems/commands/fetch_command.rb77
-rw-r--r--lib/rubygems/commands/generate_index_command.rb84
-rw-r--r--lib/rubygems/commands/help_command.rb205
-rw-r--r--lib/rubygems/commands/install_command.rb309
-rw-r--r--lib/rubygems/commands/list_command.rb40
-rw-r--r--lib/rubygems/commands/lock_command.rb110
-rw-r--r--lib/rubygems/commands/mirror_command.rb23
-rw-r--r--lib/rubygems/commands/outdated_command.rb32
-rw-r--r--lib/rubygems/commands/owner_command.rb97
-rw-r--r--lib/rubygems/commands/pristine_command.rb151
-rw-r--r--lib/rubygems/commands/push_command.rb98
-rw-r--r--lib/rubygems/commands/query_command.rb343
-rw-r--r--lib/rubygems/commands/rdoc_command.rb96
-rw-r--r--lib/rubygems/commands/search_command.rb40
-rw-r--r--lib/rubygems/commands/server_command.rb86
-rw-r--r--lib/rubygems/commands/setup_command.rb483
-rw-r--r--lib/rubygems/commands/sources_command.rb210
-rw-r--r--lib/rubygems/commands/specification_command.rb145
-rw-r--r--lib/rubygems/commands/stale_command.rb38
-rw-r--r--lib/rubygems/commands/uninstall_command.rb152
-rw-r--r--lib/rubygems/commands/unpack_command.rb182
-rw-r--r--lib/rubygems/commands/update_command.rb275
-rw-r--r--lib/rubygems/commands/which_command.rb90
-rw-r--r--lib/rubygems/commands/yank_command.rb112
-rw-r--r--lib/rubygems/compatibility.rb60
-rw-r--r--lib/rubygems/config_file.rb472
-rw-r--r--lib/rubygems/core_ext/kernel_gem.rb59
-rwxr-xr-xlib/rubygems/core_ext/kernel_require.rb149
-rw-r--r--lib/rubygems/defaults.rb163
-rw-r--r--lib/rubygems/dependency.rb313
-rw-r--r--lib/rubygems/dependency_installer.rb441
-rw-r--r--lib/rubygems/dependency_list.rb244
-rw-r--r--lib/rubygems/deprecate.rb70
-rw-r--r--lib/rubygems/doctor.rb131
-rw-r--r--lib/rubygems/errors.rb107
-rw-r--r--lib/rubygems/exceptions.rb250
-rw-r--r--lib/rubygems/ext.rb18
-rw-r--r--lib/rubygems/ext/build_error.rb6
-rw-r--r--lib/rubygems/ext/builder.rb218
-rw-r--r--lib/rubygems/ext/cmake_builder.rb16
-rw-r--r--lib/rubygems/ext/configure_builder.rb23
-rw-r--r--lib/rubygems/ext/ext_conf_builder.rb76
-rw-r--r--lib/rubygems/ext/rake_builder.rb36
-rw-r--r--lib/rubygems/gem_runner.rb81
-rw-r--r--lib/rubygems/gemcutter_utilities.rb154
-rw-r--r--lib/rubygems/indexer.rb498
-rw-r--r--lib/rubygems/install_default_message.rb12
-rw-r--r--lib/rubygems/install_message.rb12
-rw-r--r--lib/rubygems/install_update_options.rb169
-rw-r--r--lib/rubygems/installer.rb794
-rw-r--r--lib/rubygems/installer_test_case.rb191
-rw-r--r--lib/rubygems/local_remote_options.rb148
-rw-r--r--lib/rubygems/mock_gem_ui.rb88
-rw-r--r--lib/rubygems/name_tuple.rb121
-rw-r--r--lib/rubygems/package.rb600
-rw-r--r--lib/rubygems/package/digest_io.rb64
-rw-r--r--lib/rubygems/package/old.rb178
-rw-r--r--lib/rubygems/package/tar_header.rb229
-rw-r--r--lib/rubygems/package/tar_reader.rb123
-rw-r--r--lib/rubygems/package/tar_reader/entry.rb145
-rw-r--r--lib/rubygems/package/tar_test_case.rb137
-rw-r--r--lib/rubygems/package/tar_writer.rb320
-rw-r--r--lib/rubygems/package_task.rb128
-rw-r--r--lib/rubygems/path_support.rb87
-rw-r--r--lib/rubygems/platform.rb203
-rw-r--r--lib/rubygems/psych_additions.rb9
-rw-r--r--lib/rubygems/psych_tree.rb31
-rw-r--r--lib/rubygems/rdoc.rb336
-rw-r--r--lib/rubygems/remote_fetcher.rb347
-rw-r--r--lib/rubygems/request.rb274
-rw-r--r--lib/rubygems/request_set.rb304
-rw-r--r--lib/rubygems/request_set/gem_dependency_api.rb521
-rw-r--r--lib/rubygems/request_set/lockfile.rb584
-rw-r--r--lib/rubygems/requirement.rb270
-rw-r--r--lib/rubygems/resolver.rb452
-rw-r--r--lib/rubygems/resolver/activation_request.rb165
-rw-r--r--lib/rubygems/resolver/api_set.rb115
-rw-r--r--lib/rubygems/resolver/api_specification.rb79
-rw-r--r--lib/rubygems/resolver/best_set.rb50
-rw-r--r--lib/rubygems/resolver/composed_set.rb50
-rw-r--r--lib/rubygems/resolver/conflict.rb122
-rw-r--r--lib/rubygems/resolver/current_set.rb13
-rw-r--r--lib/rubygems/resolver/dependency_request.rb97
-rw-r--r--lib/rubygems/resolver/git_set.rb122
-rw-r--r--lib/rubygems/resolver/git_specification.rb35
-rw-r--r--lib/rubygems/resolver/index_set.rb78
-rw-r--r--lib/rubygems/resolver/index_specification.rb69
-rw-r--r--lib/rubygems/resolver/installed_specification.rb40
-rw-r--r--lib/rubygems/resolver/installer_set.rb138
-rw-r--r--lib/rubygems/resolver/local_specification.rb16
-rw-r--r--lib/rubygems/resolver/lock_set.rb80
-rw-r--r--lib/rubygems/resolver/lock_specification.rb58
-rw-r--r--lib/rubygems/resolver/requirement_list.rb81
-rw-r--r--lib/rubygems/resolver/set.rb44
-rw-r--r--lib/rubygems/resolver/spec_specification.rb58
-rw-r--r--lib/rubygems/resolver/specification.rb89
-rw-r--r--lib/rubygems/resolver/stats.rb44
-rw-r--r--lib/rubygems/resolver/vendor_set.rb85
-rw-r--r--lib/rubygems/resolver/vendor_specification.rb24
-rw-r--r--lib/rubygems/security.rb595
-rw-r--r--lib/rubygems/security/policies.rb115
-rw-r--r--lib/rubygems/security/policy.rb294
-rw-r--r--lib/rubygems/security/signer.rb154
-rw-r--r--lib/rubygems/security/trust_dir.rb118
-rw-r--r--lib/rubygems/server.rb833
-rw-r--r--lib/rubygems/source.rb222
-rw-r--r--lib/rubygems/source/git.rb232
-rw-r--r--lib/rubygems/source/installed.rb35
-rw-r--r--lib/rubygems/source/local.rb129
-rw-r--r--lib/rubygems/source/lock.rb48
-rw-r--r--lib/rubygems/source/specific_file.rb67
-rw-r--r--lib/rubygems/source/vendor.rb27
-rw-r--r--lib/rubygems/source_list.rb149
-rw-r--r--lib/rubygems/source_local.rb5
-rw-r--r--lib/rubygems/source_specific_file.rb4
-rw-r--r--lib/rubygems/spec_fetcher.rb276
-rw-r--r--lib/rubygems/specification.rb2757
-rw-r--r--lib/rubygems/ssl_certs/.document1
-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.rb176
-rw-r--r--lib/rubygems/syck_hack.rb76
-rw-r--r--lib/rubygems/test_case.rb1393
-rw-r--r--lib/rubygems/test_utilities.rb381
-rw-r--r--lib/rubygems/text.rb65
-rw-r--r--lib/rubygems/uninstaller.rb342
-rw-r--r--lib/rubygems/uri_formatter.rb49
-rw-r--r--lib/rubygems/user_interaction.rb694
-rw-r--r--lib/rubygems/util.rb121
-rw-r--r--lib/rubygems/util/list.rb48
-rw-r--r--lib/rubygems/util/stringio.rb34
-rw-r--r--lib/rubygems/validator.rb165
-rw-r--r--lib/rubygems/version.rb352
-rw-r--r--lib/rubygems/version_option.rb71
-rw-r--r--lib/safe.rb78
-rw-r--r--lib/scanf.rb776
-rw-r--r--lib/securerandom.rb260
-rw-r--r--lib/set.rb767
-rw-r--r--lib/shell.rb427
-rw-r--r--lib/shell/builtin-command.rb160
-rw-r--r--lib/shell/command-processor.rb670
-rw-r--r--lib/shell/error.rb25
-rw-r--r--lib/shell/filter.rb137
-rw-r--r--lib/shell/process-controller.rb319
-rw-r--r--lib/shell/system-command.rb159
-rw-r--r--lib/shell/version.rb15
-rw-r--r--lib/shellwords.rb215
-rw-r--r--lib/singleton.rb172
-rw-r--r--lib/sync.rb328
-rw-r--r--lib/tempfile.rb389
-rw-r--r--lib/test/unit.rb876
-rw-r--r--lib/test/unit/assertions.rb403
-rw-r--r--lib/test/unit/parallel.rb189
-rw-r--r--lib/test/unit/test-unit.gemspec14
-rw-r--r--lib/test/unit/testcase.rb34
-rw-r--r--lib/thread.rb153
-rw-r--r--lib/thwait.rb142
-rw-r--r--lib/time.rb638
-rw-r--r--lib/timeout.rb132
-rw-r--r--lib/tk.rb766
-rw-r--r--lib/tkcanvas.rb321
-rw-r--r--lib/tkclass.rb36
-rw-r--r--lib/tkcore.rb521
-rw-r--r--lib/tkentry.rb74
-rw-r--r--lib/tkscrollbox.rb27
-rw-r--r--lib/tktext.rb160
-rw-r--r--lib/tkthcore.rb546
-rw-r--r--lib/tmpdir.rb152
-rw-r--r--lib/tracer.rb286
-rw-r--r--lib/tsort.rb448
-rw-r--r--lib/ubygems.rb10
-rw-r--r--lib/un.rb375
-rw-r--r--lib/uri.rb111
-rw-r--r--lib/uri/common.rb1239
-rw-r--r--lib/uri/ftp.rb259
-rw-r--r--lib/uri/generic.rb1675
-rw-r--r--lib/uri/http.rb106
-rw-r--r--lib/uri/https.rb22
-rw-r--r--lib/uri/ldap.rb260
-rw-r--r--lib/uri/ldaps.rb20
-rw-r--r--lib/uri/mailto.rb280
-rw-r--r--lib/weakref.rb117
-rw-r--r--lib/webrick.rb226
-rw-r--r--lib/webrick/accesslog.rb158
-rw-r--r--lib/webrick/cgi.rb308
-rw-r--r--lib/webrick/compat.rb35
-rw-r--r--lib/webrick/config.rb151
-rw-r--r--lib/webrick/cookie.rb171
-rw-r--r--lib/webrick/htmlutils.rb29
-rw-r--r--lib/webrick/httpauth.rb95
-rw-r--r--lib/webrick/httpauth/authenticator.rb116
-rw-r--r--lib/webrick/httpauth/basicauth.rb108
-rw-r--r--lib/webrick/httpauth/digestauth.rb408
-rw-r--r--lib/webrick/httpauth/htdigest.rb131
-rw-r--r--lib/webrick/httpauth/htgroup.rb93
-rw-r--r--lib/webrick/httpauth/htpasswd.rb124
-rw-r--r--lib/webrick/httpauth/userdb.rb52
-rw-r--r--lib/webrick/httpproxy.rb339
-rw-r--r--lib/webrick/httprequest.rb584
-rw-r--r--lib/webrick/httpresponse.rb466
-rw-r--r--lib/webrick/https.rb86
-rw-r--r--lib/webrick/httpserver.rb278
-rw-r--r--lib/webrick/httpservlet.rb22
-rw-r--r--lib/webrick/httpservlet/abstract.rb153
-rw-r--r--lib/webrick/httpservlet/cgi_runner.rb46
-rw-r--r--lib/webrick/httpservlet/cgihandler.rb123
-rw-r--r--lib/webrick/httpservlet/erbhandler.rb87
-rw-r--r--lib/webrick/httpservlet/filehandler.rb520
-rw-r--r--lib/webrick/httpservlet/prochandler.rb46
-rw-r--r--lib/webrick/httpstatus.rb194
-rw-r--r--lib/webrick/httputils.rb509
-rw-r--r--lib/webrick/httpversion.rb75
-rw-r--r--lib/webrick/log.rb155
-rw-r--r--lib/webrick/server.rb325
-rw-r--r--lib/webrick/ssl.rb195
-rw-r--r--lib/webrick/utils.rb233
-rw-r--r--lib/webrick/version.rb17
-rw-r--r--lib/xmlrpc.rb301
-rw-r--r--lib/xmlrpc/base64.rb62
-rw-r--r--lib/xmlrpc/client.rb614
-rw-r--r--lib/xmlrpc/config.rb42
-rw-r--r--lib/xmlrpc/create.rb286
-rw-r--r--lib/xmlrpc/datetime.rb129
-rw-r--r--lib/xmlrpc/httpserver.rb173
-rw-r--r--lib/xmlrpc/marshal.rb66
-rw-r--r--lib/xmlrpc/parser.rb838
-rw-r--r--lib/xmlrpc/server.rb707
-rw-r--r--lib/xmlrpc/utils.rb171
-rw-r--r--lib/yaml.rb89
-rw-r--r--lib/yaml/dbm.rb279
-rw-r--r--lib/yaml/store.rb81
-rw-r--r--load.c1190
-rw-r--r--loadpath.c92
-rw-r--r--localeinit.c65
-rw-r--r--main.c40
-rw-r--r--man/erb.1157
-rw-r--r--man/goruby.139
-rw-r--r--man/irb.1173
-rw-r--r--man/rake.1205
-rw-r--r--man/ri.1181
-rw-r--r--man/ruby.1516
-rw-r--r--marshal.c2153
-rw-r--r--math.c981
-rw-r--r--method.h142
-rw-r--r--miniinit.c30
-rw-r--r--misc/README12
-rw-r--r--misc/inf-ruby.el418
-rw-r--r--misc/rb_optparse.bash20
-rwxr-xr-xmisc/rb_optparse.zsh38
-rw-r--r--misc/rdoc-mode.el132
-rw-r--r--misc/ruby-additional.el113
-rw-r--r--misc/ruby-electric.el475
-rw-r--r--misc/ruby-mode.el1584
-rw-r--r--misc/ruby-style.el79
-rw-r--r--misc/rubydb2x.el104
-rw-r--r--misc/rubydb3x.el115
-rw-r--r--missing/acosh.c93
-rw-r--r--missing/alloca.c18
-rw-r--r--missing/cbrt.c11
-rw-r--r--missing/close.c72
-rw-r--r--missing/crt_externs.h8
-rw-r--r--missing/crypt.c1185
-rw-r--r--missing/dup2.c68
-rw-r--r--missing/erf.c89
-rw-r--r--missing/ffs.c49
-rw-r--r--missing/file.h22
-rw-r--r--missing/fileblocks.c1
-rw-r--r--missing/finite.c9
-rw-r--r--missing/flock.c84
-rw-r--r--missing/hypot.c17
-rw-r--r--missing/isinf.c69
-rw-r--r--missing/isnan.c32
-rw-r--r--missing/langinfo.c148
-rw-r--r--missing/lgamma_r.c80
-rw-r--r--missing/memcmp.c18
-rw-r--r--missing/memmove.c38
-rw-r--r--missing/mkdir.c103
-rw-r--r--missing/nt.c1732
-rw-r--r--missing/nt.h246
-rw-r--r--missing/os2.c138
-rw-r--r--missing/setenv.c73
-rw-r--r--missing/setproctitle.c170
-rw-r--r--missing/signbit.c19
-rw-r--r--missing/strchr.c32
-rw-r--r--missing/strdup.c25
-rw-r--r--missing/strerror.c13
-rw-r--r--missing/strftime.c889
-rw-r--r--missing/strlcat.c74
-rw-r--r--missing/strlcpy.c70
-rw-r--r--missing/strstr.c82
-rw-r--r--missing/strtol.c87
-rw-r--r--missing/strtoul.c184
-rw-r--r--missing/tgamma.c92
-rw-r--r--missing/x86_64-chkstk.s10
-rw-r--r--nacl/GNUmakefile.in87
-rw-r--r--nacl/README.nacl34
-rw-r--r--nacl/create_nmf.rb70
-rw-r--r--nacl/dirent.h15
-rw-r--r--nacl/example.html150
-rw-r--r--nacl/ioctl.h7
-rw-r--r--nacl/nacl-config.rb61
-rw-r--r--nacl/package.rb109
-rw-r--r--nacl/pepper_main.c870
-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.c904
-rw-r--r--node.h504
-rw-r--r--numeric.c4377
-rw-r--r--object.c3570
-rw-r--r--pack.c2042
-rw-r--r--parse.y12047
-rw-r--r--prelude.rb15
-rw-r--r--probes.d234
-rw-r--r--probes_helper.h67
-rw-r--r--proc.c2725
-rw-r--r--process.c7856
-rw-r--r--random.c1400
-rw-r--r--range.c1386
-rw-r--r--rational.c2606
-rw-r--r--re.c3714
-rw-r--r--re.h35
-rw-r--r--regcomp.c6698
-rw-r--r--regenc.c955
-rw-r--r--regenc.h223
-rw-r--r--regerror.c404
-rw-r--r--regex.c2700
-rw-r--r--regex.h287
-rw-r--r--regexec.c4370
-rw-r--r--regint.h911
-rw-r--r--regparse.c6323
-rw-r--r--regparse.h363
-rw-r--r--regsyntax.c387
-rw-r--r--ruby.c2071
-rw-r--r--ruby.h361
-rw-r--r--ruby_atomic.h170
-rw-r--r--safe.c143
-rw-r--r--sample/README45
-rw-r--r--sample/biorhythm.rb269
-rw-r--r--sample/cal.rb166
-rw-r--r--sample/cbreak.rb4
-rw-r--r--sample/clnt.rb12
-rw-r--r--sample/coverage.rb62
-rw-r--r--sample/dbm.rb14
-rw-r--r--sample/dir.rb6
-rw-r--r--sample/drb/README.ja.rdoc59
-rw-r--r--sample/drb/README.rdoc56
-rw-r--r--sample/drb/darray.rb12
-rw-r--r--sample/drb/darrayc.rb47
-rw-r--r--sample/drb/dbiff.rb51
-rw-r--r--sample/drb/dcdbiff.rb43
-rw-r--r--sample/drb/dchatc.rb41
-rw-r--r--sample/drb/dchats.rb70
-rw-r--r--sample/drb/dhasen.rb42
-rw-r--r--sample/drb/dhasenc.rb14
-rw-r--r--sample/drb/dlogc.rb16
-rw-r--r--sample/drb/dlogd.rb39
-rw-r--r--sample/drb/dqin.rb13
-rw-r--r--sample/drb/dqlib.rb14
-rw-r--r--sample/drb/dqout.rb14
-rw-r--r--sample/drb/dqueue.rb12
-rw-r--r--sample/drb/drbc.rb45
-rw-r--r--sample/drb/drbch.rb48
-rw-r--r--sample/drb/drbm.rb60
-rw-r--r--sample/drb/drbmc.rb22
-rw-r--r--sample/drb/drbs-acl.rb51
-rw-r--r--sample/drb/drbs.rb64
-rw-r--r--sample/drb/drbssl_c.rb19
-rw-r--r--sample/drb/drbssl_s.rb31
-rw-r--r--sample/drb/extserv_test.rb80
-rw-r--r--sample/drb/gw_ct.rb29
-rw-r--r--sample/drb/gw_cu.rb28
-rw-r--r--sample/drb/gw_s.rb10
-rw-r--r--sample/drb/holderc.rb22
-rw-r--r--sample/drb/holders.rb63
-rw-r--r--sample/drb/http0.rb77
-rw-r--r--sample/drb/http0serv.rb119
-rw-r--r--sample/drb/name.rb117
-rw-r--r--sample/drb/namec.rb36
-rw-r--r--sample/drb/old_tuplespace.rb214
-rw-r--r--sample/drb/rinda_ts.rb7
-rw-r--r--sample/drb/rindac.rb17
-rw-r--r--sample/drb/rindas.rb18
-rw-r--r--sample/drb/ring_echo.rb30
-rw-r--r--sample/drb/ring_inspect.rb30
-rw-r--r--sample/drb/ring_place.rb25
-rw-r--r--sample/drb/simpletuple.rb91
-rw-r--r--sample/drb/speedc.rb21
-rw-r--r--sample/drb/speeds.rb31
-rw-r--r--sample/dualstack-fetch.rb48
-rw-r--r--sample/dualstack-httpd.rb55
-rw-r--r--sample/eval.rb22
-rw-r--r--sample/export.rb4
-rw-r--r--sample/exyacc.rb32
-rw-r--r--sample/fact.rb9
-rw-r--r--sample/fib.awk8
-rw-r--r--sample/fib.pl19
-rw-r--r--sample/fib.py10
-rw-r--r--sample/fib.scm8
-rw-r--r--sample/freq.rb15
-rw-r--r--[-rwxr-xr-x]sample/from.rb161
-rw-r--r--sample/fullpath.rb16
-rwxr-xr-xsample/getopts.test36
-rw-r--r--sample/io.rb44
-rw-r--r--[-rwxr-xr-x]sample/less.rb0
-rw-r--r--sample/list.rb17
-rw-r--r--sample/list2.rb2
-rw-r--r--sample/list3.rb2
-rw-r--r--sample/logger/app.rb46
-rw-r--r--sample/logger/log.rb27
-rw-r--r--sample/logger/shifting.rb26
-rw-r--r--sample/marshal.rb13
-rwxr-xr-xsample/mine.rb176
-rw-r--r--sample/mkproto.rb30
-rw-r--r--[-rwxr-xr-x]sample/mpart.rb2
-rw-r--r--sample/observ.rb19
-rw-r--r--sample/occur.pl8
-rw-r--r--sample/occur.rb14
-rw-r--r--sample/occur2.rb13
-rw-r--r--sample/openssl/c_rehash.rb174
-rw-r--r--sample/openssl/cert2text.rb23
-rw-r--r--sample/openssl/certstore.rb161
-rw-r--r--sample/openssl/cipher.rb54
-rw-r--r--sample/openssl/crlstore.rb122
-rw-r--r--sample/openssl/echo_cli.rb44
-rw-r--r--sample/openssl/echo_svr.rb65
-rw-r--r--sample/openssl/gen_csr.rb51
-rw-r--r--sample/openssl/smime_read.rb23
-rw-r--r--sample/openssl/smime_write.rb23
-rw-r--r--sample/openssl/wget.rb34
-rwxr-xr-xsample/optparse/opttest.rb125
-rwxr-xr-xsample/optparse/subcommand.rb19
-rw-r--r--sample/philos.rb8
-rw-r--r--sample/pi.rb2
-rw-r--r--sample/pty/expect_sample.rb48
-rw-r--r--sample/pty/script.rb37
-rw-r--r--sample/pty/shl.rb92
-rw-r--r--sample/rcs.awk54
-rw-r--r--sample/rcs.rb30
-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/ripper/ruby2html.rb112
-rw-r--r--sample/ripper/strip-comment.rb19
-rwxr-xr-xsample/rss/blend.rb79
-rwxr-xr-xsample/rss/convert.rb69
-rwxr-xr-xsample/rss/list_description.rb91
-rwxr-xr-xsample/rss/re_read.rb64
-rwxr-xr-xsample/rss/rss_recent.rb85
-rw-r--r--sample/ruby-mode.el532
-rw-r--r--sample/sieve.rb22
-rw-r--r--sample/svr.rb16
-rwxr-xr-x[-rw-r--r--]sample/test.rb2276
-rw-r--r--sample/testunit/adder.rb13
-rw-r--r--sample/testunit/subtracter.rb12
-rw-r--r--sample/testunit/tc_adder.rb18
-rw-r--r--sample/testunit/tc_subtracter.rb18
-rw-r--r--sample/testunit/ts_examples.rb7
-rw-r--r--[-rwxr-xr-x]sample/time.rb16
-rw-r--r--sample/timeout.rb42
-rw-r--r--sample/tkbiff.rb149
-rw-r--r--sample/tkbrowse.rb69
-rw-r--r--sample/tkdialog.rb62
-rw-r--r--sample/tkfrom.rb116
-rw-r--r--sample/tkhello.rb13
-rw-r--r--sample/tkline.rb46
-rw-r--r--sample/tktimer.rb49
-rw-r--r--sample/trick2013/README.md13
-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.mp4bin0 -> 580724 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/trojan.rb11
-rw-r--r--sample/tsvr.rb17
-rw-r--r--[-rwxr-xr-x]sample/uumerge.rb46
-rw-r--r--sample/webrick/demo-app.rb66
-rw-r--r--sample/webrick/demo-multipart.cgi12
-rw-r--r--sample/webrick/demo-servlet.rb6
-rw-r--r--sample/webrick/demo-urlencoded.cgi12
-rw-r--r--sample/webrick/hello.cgi11
-rw-r--r--sample/webrick/hello.rb8
-rw-r--r--sample/webrick/httpd.rb23
-rw-r--r--sample/webrick/httpproxy.rb25
-rw-r--r--sample/webrick/httpsd.rb33
-rw-r--r--sig.h52
-rw-r--r--signal.c1382
-rw-r--r--siphash.c483
-rw-r--r--siphash.h48
-rw-r--r--sparc.c40
-rw-r--r--spec/README31
-rw-r--r--spec/default.mspec21
-rw-r--r--sprintf.c1349
-rw-r--r--st.c1753
-rw-r--r--st.h51
-rw-r--r--strftime.c1163
-rw-r--r--string.c9430
-rw-r--r--struct.c1204
-rw-r--r--symbian/README.SYMBIAN93
-rw-r--r--symbian/configure.bat123
-rw-r--r--symbian/missing-aeabi.c18
-rw-r--r--symbian/missing-pips.c65
-rw-r--r--symbian/pre-build83
-rw-r--r--symbian/setup440
-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.in47
-rw-r--r--template/id.c.tmpl27
-rw-r--r--template/id.h.tmpl111
-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/ruby.pc.in56
-rw-r--r--template/sizes.c.tmpl30
-rw-r--r--template/transdb.h.tmpl59
-rw-r--r--template/verconf.h.in61
-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.rb29
-rw-r--r--test/-ext-/bignum/test_big2str.rb29
-rw-r--r--test/-ext-/bignum/test_bigzero.rb13
-rw-r--r--test/-ext-/bignum/test_div.rb28
-rw-r--r--test/-ext-/bignum/test_mul.rb137
-rw-r--r--test/-ext-/bignum/test_pack.rb374
-rw-r--r--test/-ext-/bignum/test_str2big.rb37
-rw-r--r--test/-ext-/bug_reporter/test_bug_reporter.rb17
-rw-r--r--test/-ext-/class/test_class2name.rb18
-rw-r--r--test/-ext-/debug/test_debug.rb58
-rw-r--r--test/-ext-/debug/test_profile_frames.rb104
-rw-r--r--test/-ext-/exception/test_data_error.rb14
-rw-r--r--test/-ext-/exception/test_enc_raise.rb15
-rw-r--r--test/-ext-/exception/test_ensured.rb32
-rw-r--r--test/-ext-/file/test_stat.rb14
-rw-r--r--test/-ext-/funcall/test_passing_block.rb22
-rw-r--r--test/-ext-/iter/test_iter_break.rb15
-rw-r--r--test/-ext-/iter/test_yield_block.rb21
-rw-r--r--test/-ext-/load/test_dot_dot.rb10
-rw-r--r--test/-ext-/marshal/test_usrmarshal.rb33
-rw-r--r--test/-ext-/method/test_arity.rb37
-rw-r--r--test/-ext-/num2int/test_num2int.rb267
-rw-r--r--test/-ext-/old_thread_select/test_old_thread_select.rb103
-rw-r--r--test/-ext-/path_to_class/test_path_to_class.rb12
-rw-r--r--test/-ext-/postponed_job/test_postponed_job.rb28
-rw-r--r--test/-ext-/rational/test_rat.rb31
-rw-r--r--test/-ext-/st/test_numhash.rb49
-rw-r--r--test/-ext-/st/test_update.rb50
-rw-r--r--test/-ext-/string/test_cstr.rb42
-rw-r--r--test/-ext-/string/test_ellipsize.rb46
-rw-r--r--test/-ext-/string/test_enc_associate.rb12
-rw-r--r--test/-ext-/string/test_enc_str_buf_cat.rb15
-rw-r--r--test/-ext-/string/test_modify_expand.rb15
-rw-r--r--test/-ext-/string/test_normalize.rb106
-rw-r--r--test/-ext-/string/test_qsort.rb19
-rw-r--r--test/-ext-/string/test_set_len.rb25
-rw-r--r--test/-ext-/struct/test_member.rb16
-rw-r--r--test/-ext-/symbol/test_inadvertent_creation.rb266
-rw-r--r--test/-ext-/symbol/test_type.rb120
-rw-r--r--test/-ext-/test_bug-3571.rb21
-rw-r--r--test/-ext-/test_bug-3662.rb10
-rw-r--r--test/-ext-/test_bug-5832.rb21
-rw-r--r--test/-ext-/test_printf.rb190
-rw-r--r--test/-ext-/test_recursion.rb36
-rw-r--r--test/-ext-/tracepoint/test_tracepoint.rb80
-rw-r--r--test/-ext-/typeddata/test_typeddata.rb16
-rw-r--r--test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb45
-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.rb100
-rw-r--r--test/benchmark/test_benchmark.rb169
-rw-r--r--test/bigdecimal/test_bigdecimal.rb1550
-rw-r--r--test/bigdecimal/test_bigdecimal_util.rb50
-rw-r--r--test/bigdecimal/test_bigmath.rb63
-rw-r--r--test/bigdecimal/testbase.rb27
-rw-r--r--test/cgi/test_cgi_cookie.rb110
-rw-r--r--test/cgi/test_cgi_core.rb373
-rw-r--r--test/cgi/test_cgi_header.rb185
-rw-r--r--test/cgi/test_cgi_modruby.rb146
-rw-r--r--test/cgi/test_cgi_multipart.rb370
-rw-r--r--test/cgi/test_cgi_session.rb172
-rw-r--r--test/cgi/test_cgi_tag_helper.rb355
-rw-r--r--test/cgi/test_cgi_util.rb89
-rw-r--r--test/cgi/testdata/file1.html10
-rw-r--r--test/cgi/testdata/large.pngbin0 -> 156414 bytes-rw-r--r--test/cgi/testdata/small.pngbin0 -> 82 bytes-rw-r--r--test/coverage/test_coverage.rb64
-rw-r--r--test/csv/base.rb8
-rw-r--r--test/csv/line_endings.gzbin0 -> 59 bytes-rwxr-xr-xtest/csv/test_csv_parsing.rb221
-rwxr-xr-xtest/csv/test_csv_writing.rb97
-rwxr-xr-xtest/csv/test_data_converters.rb263
-rwxr-xr-xtest/csv/test_encodings.rb347
-rwxr-xr-xtest/csv/test_features.rb325
-rwxr-xr-xtest/csv/test_headers.rb289
-rwxr-xr-xtest/csv/test_interface.rb362
-rwxr-xr-xtest/csv/test_row.rb349
-rwxr-xr-xtest/csv/test_table.rb420
-rw-r--r--test/csv/ts_all.rb20
-rw-r--r--test/date/test_date.rb153
-rw-r--r--test/date/test_date_arith.rb286
-rw-r--r--test/date/test_date_attr.rb112
-rw-r--r--test/date/test_date_base.rb442
-rw-r--r--test/date/test_date_compat.rb21
-rw-r--r--test/date/test_date_conv.rb137
-rw-r--r--test/date/test_date_marshal.rb41
-rw-r--r--test/date/test_date_new.rb271
-rw-r--r--test/date/test_date_parse.rb1137
-rw-r--r--test/date/test_date_strftime.rb422
-rw-r--r--test/date/test_date_strptime.rb492
-rw-r--r--test/date/test_switch_hitter.rb664
-rw-r--r--test/dbm/test_dbm.rb627
-rwxr-xr-xtest/digest/test_digest.rb201
-rw-r--r--test/digest/test_digest_extend.rb158
-rw-r--r--test/digest/test_digest_hmac.rb2
-rw-r--r--test/dl/test_base.rb146
-rw-r--r--test/dl/test_c_struct_entry.rb55
-rw-r--r--test/dl/test_c_union_entity.rb31
-rw-r--r--test/dl/test_callback.rb72
-rw-r--r--test/dl/test_cfunc.rb80
-rw-r--r--test/dl/test_cparser.rb33
-rw-r--r--test/dl/test_cptr.rb226
-rw-r--r--test/dl/test_dl2.rb140
-rw-r--r--test/dl/test_func.rb184
-rw-r--r--test/dl/test_handle.rb191
-rw-r--r--test/dl/test_import.rb165
-rw-r--r--test/dl/test_win32.rb54
-rw-r--r--test/drb/drbtest.rb362
-rw-r--r--test/drb/ignore_test_drb.rb10
-rw-r--r--test/drb/test_acl.rb195
-rw-r--r--test/drb/test_drb.rb322
-rw-r--r--test/drb/test_drbssl.rb62
-rw-r--r--test/drb/test_drbunix.rb46
-rw-r--r--test/drb/ut_array.rb15
-rw-r--r--test/drb/ut_array_drbssl.rb35
-rw-r--r--test/drb/ut_array_drbunix.rb15
-rw-r--r--test/drb/ut_drb.rb163
-rw-r--r--test/drb/ut_drb_drbssl.rb36
-rw-r--r--test/drb/ut_drb_drbunix.rb16
-rw-r--r--test/drb/ut_eq.rb30
-rw-r--r--test/drb/ut_eval.rb31
-rw-r--r--test/drb/ut_large.rb38
-rw-r--r--test/drb/ut_port.rb14
-rw-r--r--test/drb/ut_safe1.rb15
-rw-r--r--test/drb/ut_timerholder.rb49
-rw-r--r--test/dtrace/dummy.rb1
-rw-r--r--test/dtrace/helper.rb51
-rw-r--r--test/dtrace/test_array_create.rb35
-rw-r--r--test/dtrace/test_cmethod.rb49
-rw-r--r--test/dtrace/test_function_entry.rb87
-rw-r--r--test/dtrace/test_gc.rb26
-rw-r--r--test/dtrace/test_hash_create.rb52
-rw-r--r--test/dtrace/test_load.rb52
-rw-r--r--test/dtrace/test_method_cache.rb28
-rw-r--r--test/dtrace/test_object_create_start.rb35
-rw-r--r--test/dtrace/test_raise.rb29
-rw-r--r--test/dtrace/test_require.rb34
-rw-r--r--test/dtrace/test_singleton_function.rb55
-rw-r--r--test/dtrace/test_string.rb27
-rw-r--r--test/erb/hello.erb4
-rw-r--r--test/erb/test_erb.rb485
-rw-r--r--test/erb/test_erb_m17n.rb123
-rw-r--r--test/etc/test_etc.rb115
-rw-r--r--test/fiddle/helper.rb125
-rw-r--r--test/fiddle/test_c_struct_entry.rb76
-rw-r--r--test/fiddle/test_c_union_entity.rb34
-rw-r--r--test/fiddle/test_closure.rb84
-rw-r--r--test/fiddle/test_cparser.rb35
-rw-r--r--test/fiddle/test_fiddle.rb16
-rw-r--r--test/fiddle/test_func.rb92
-rw-r--r--test/fiddle/test_function.rb74
-rw-r--r--test/fiddle/test_handle.rb196
-rw-r--r--test/fiddle/test_import.rb149
-rw-r--r--test/fiddle/test_pointer.rb238
-rw-r--r--test/fileutils/clobber.rb91
-rw-r--r--test/fileutils/fileasserts.rb93
-rw-r--r--test/fileutils/test_dryrun.rb17
-rw-r--r--test/fileutils/test_fileutils.rb1303
-rw-r--r--test/fileutils/test_nowrite.rb17
-rw-r--r--test/fileutils/test_verbose.rb17
-rw-r--r--test/fileutils/visibility_tests.rb41
-rw-r--r--test/gdbm/test_gdbm.rb720
-rw-r--r--test/inlinetest.rb55
-rw-r--r--test/io/console/test_io_console.rb302
-rw-r--r--test/io/nonblock/test_flush.rb46
-rw-r--r--test/io/wait/test_io_wait.rb108
-rw-r--r--test/irb/test_completion.rb22
-rw-r--r--test/irb/test_option.rb12
-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.rb11
-rwxr-xr-xtest/json/test_json.rb545
-rwxr-xr-xtest/json/test_json_addition.rb196
-rw-r--r--test/json/test_json_encoding.rb65
-rwxr-xr-xtest/json/test_json_fixtures.rb35
-rwxr-xr-xtest/json/test_json_generate.rb323
-rw-r--r--test/json/test_json_generic_object.rb75
-rw-r--r--test/json/test_json_string_matching.rb39
-rwxr-xr-xtest/json/test_json_unicode.rb72
-rw-r--r--test/logger/test_logger.rb648
-rw-r--r--test/matrix/test_matrix.rb426
-rw-r--r--test/matrix/test_vector.rb154
-rw-r--r--test/minitest/metametameta.rb74
-rw-r--r--test/minitest/test_minitest_benchmark.rb135
-rw-r--r--test/minitest/test_minitest_mock.rb412
-rw-r--r--test/minitest/test_minitest_spec.rb811
-rw-r--r--test/minitest/test_minitest_unit.rb1863
-rw-r--r--test/misc/test_ruby_mode.rb181
-rw-r--r--test/mkmf/base.rb129
-rw-r--r--test/mkmf/test_config.rb17
-rw-r--r--test/mkmf/test_constant.rb37
-rw-r--r--test/mkmf/test_convertible.rb34
-rw-r--r--test/mkmf/test_find_executable.rb50
-rw-r--r--test/mkmf/test_flags.rb35
-rw-r--r--test/mkmf/test_framework.rb46
-rw-r--r--test/mkmf/test_have_func.rb14
-rw-r--r--test/mkmf/test_have_library.rb55
-rw-r--r--test/mkmf/test_have_macro.rb35
-rw-r--r--test/mkmf/test_libs.rb86
-rw-r--r--test/mkmf/test_signedness.rb29
-rw-r--r--test/mkmf/test_sizeof.rb47
-rw-r--r--test/monitor/test_monitor.rb190
-rw-r--r--test/net/ftp/test_buffered_socket.rb40
-rw-r--r--test/net/ftp/test_ftp.rb813
-rw-r--r--test/net/http/test_buffered_io.rb17
-rw-r--r--test/net/http/test_http.rb918
-rw-r--r--test/net/http/test_http_request.rb79
-rw-r--r--test/net/http/test_httpheader.rb334
-rw-r--r--test/net/http/test_httpresponse.rb254
-rw-r--r--test/net/http/test_httpresponses.rb24
-rw-r--r--test/net/http/test_https.rb153
-rw-r--r--test/net/http/test_https_proxy.rb43
-rw-r--r--test/net/http/utils.rb117
-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.rb536
-rw-r--r--test/net/imap/test_imap_response_parser.rb261
-rw-r--r--test/net/pop/test_pop.rb132
-rw-r--r--test/net/protocol/test_protocol.rb28
-rw-r--r--test/net/smtp/test_response.rb99
-rw-r--r--test/net/smtp/test_smtp.rb54
-rw-r--r--test/net/smtp/test_ssl_socket.rb91
-rw-r--r--test/nkf/test_kconv.rb81
-rw-r--r--test/nkf/test_nkf.rb22
-rw-r--r--test/objspace/test_objspace.rb279
-rw-r--r--test/open-uri/test_open-uri.rb716
-rw-r--r--test/open-uri/test_ssl.rb325
-rw-r--r--test/openssl/ssl_server.rb81
-rw-r--r--test/openssl/test_asn1.rb609
-rw-r--r--test/openssl/test_bn.rb52
-rw-r--r--test/openssl/test_buffering.rb87
-rw-r--r--test/openssl/test_cipher.rb255
-rw-r--r--test/openssl/test_config.rb297
-rw-r--r--test/openssl/test_digest.rb126
-rw-r--r--test/openssl/test_engine.rb75
-rw-r--r--test/openssl/test_fips.rb14
-rw-r--r--test/openssl/test_hmac.rb32
-rw-r--r--test/openssl/test_ns_spki.rb51
-rw-r--r--test/openssl/test_ocsp.rb47
-rw-r--r--test/openssl/test_pair.rb357
-rw-r--r--test/openssl/test_pkcs12.rb209
-rw-r--r--test/openssl/test_pkcs5.rb97
-rw-r--r--test/openssl/test_pkcs7.rb156
-rw-r--r--test/openssl/test_pkey_dh.rb82
-rw-r--r--test/openssl/test_pkey_dsa.rb240
-rw-r--r--test/openssl/test_pkey_ec.rb211
-rw-r--r--test/openssl/test_pkey_rsa.rb313
-rw-r--r--test/openssl/test_ssl.rb689
-rw-r--r--test/openssl/test_ssl_session.rb367
-rw-r--r--test/openssl/test_x509cert.rb226
-rw-r--r--test/openssl/test_x509crl.rb220
-rw-r--r--test/openssl/test_x509ext.rb69
-rw-r--r--test/openssl/test_x509name.rb367
-rw-r--r--test/openssl/test_x509req.rb158
-rw-r--r--test/openssl/test_x509store.rb232
-rw-r--r--test/openssl/utils.rb331
-rw-r--r--test/optparse/test_acceptable.rb195
-rw-r--r--test/optparse/test_autoconf.rb63
-rw-r--r--test/optparse/test_bash_completion.rb42
-rw-r--r--test/optparse/test_getopts.rb34
-rw-r--r--test/optparse/test_noarg.rb57
-rw-r--r--test/optparse/test_optarg.rb46
-rw-r--r--test/optparse/test_optparse.rb66
-rw-r--r--test/optparse/test_placearg.rb56
-rw-r--r--test/optparse/test_reqarg.rb77
-rw-r--r--test/optparse/test_summary.rb46
-rw-r--r--test/optparse/test_zsh_completion.rb22
-rw-r--r--test/ostruct/test_ostruct.rb138
-rw-r--r--test/pathname/test_pathname.rb1338
-rw-r--r--test/profile_test_all.rb90
-rw-r--r--test/psych/handlers/test_recorder.rb25
-rw-r--r--test/psych/helper.rb114
-rw-r--r--test/psych/json/test_stream.rb109
-rw-r--r--test/psych/nodes/test_enumerable.rb43
-rw-r--r--test/psych/test_alias_and_anchor.rb96
-rw-r--r--test/psych/test_array.rb57
-rw-r--r--test/psych/test_boolean.rb36
-rw-r--r--test/psych/test_class.rb36
-rw-r--r--test/psych/test_coder.rb184
-rw-r--r--test/psych/test_date_time.rb38
-rw-r--r--test/psych/test_deprecated.rb214
-rw-r--r--test/psych/test_document.rb46
-rw-r--r--test/psych/test_emitter.rb94
-rw-r--r--test/psych/test_encoding.rb259
-rw-r--r--test/psych/test_engine_manager.rb47
-rw-r--r--test/psych/test_exception.rb151
-rw-r--r--test/psych/test_hash.rb44
-rw-r--r--test/psych/test_json_tree.rb65
-rw-r--r--test/psych/test_merge_keys.rb150
-rw-r--r--test/psych/test_nil.rb18
-rw-r--r--test/psych/test_null.rb19
-rw-r--r--test/psych/test_numeric.rb45
-rw-r--r--test/psych/test_object.rb44
-rw-r--r--test/psych/test_object_references.rb67
-rw-r--r--test/psych/test_omap.rb75
-rw-r--r--test/psych/test_parser.rb339
-rw-r--r--test/psych/test_psych.rb168
-rw-r--r--test/psych/test_safe_load.rb97
-rw-r--r--test/psych/test_scalar.rb11
-rw-r--r--test/psych/test_scalar_scanner.rb106
-rw-r--r--test/psych/test_serialize_subclasses.rb38
-rw-r--r--test/psych/test_set.rb49
-rw-r--r--test/psych/test_stream.rb93
-rw-r--r--test/psych/test_string.rb162
-rw-r--r--test/psych/test_struct.rb49
-rw-r--r--test/psych/test_symbol.rb17
-rw-r--r--test/psych/test_tainted.rb130
-rw-r--r--test/psych/test_to_yaml_properties.rb63
-rw-r--r--test/psych/test_tree_builder.rb79
-rw-r--r--test/psych/test_yaml.rb1289
-rw-r--r--test/psych/test_yamldbm.rb197
-rw-r--r--test/psych/test_yamlstore.rb87
-rw-r--r--test/psych/visitors/test_depth_first.rb49
-rw-r--r--test/psych/visitors/test_emitter.rb144
-rw-r--r--test/psych/visitors/test_to_ruby.rb326
-rw-r--r--test/psych/visitors/test_yaml_tree.rb173
-rw-r--r--test/rake/file_creation.rb34
-rw-r--r--test/rake/helper.rb128
-rw-r--r--test/rake/support/rakefile_definitions.rb444
-rw-r--r--test/rake/support/ruby_runner.rb33
-rw-r--r--test/rake/test_private_reader.rb42
-rw-r--r--test/rake/test_rake.rb40
-rw-r--r--test/rake/test_rake_application.rb517
-rw-r--r--test/rake/test_rake_application_options.rb457
-rw-r--r--test/rake/test_rake_backtrace.rb113
-rw-r--r--test/rake/test_rake_clean.rb52
-rw-r--r--test/rake/test_rake_definitions.rb79
-rw-r--r--test/rake/test_rake_directory_task.rb57
-rw-r--r--test/rake/test_rake_dsl.rb40
-rw-r--r--test/rake/test_rake_early_time.rb31
-rw-r--r--test/rake/test_rake_extension.rb59
-rw-r--r--test/rake/test_rake_file_creation_task.rb56
-rw-r--r--test/rake/test_rake_file_list.rb627
-rw-r--r--test/rake/test_rake_file_list_path_map.rb8
-rw-r--r--test/rake/test_rake_file_task.rb122
-rw-r--r--test/rake/test_rake_file_utils.rb309
-rw-r--r--test/rake/test_rake_ftp_file.rb74
-rw-r--r--test/rake/test_rake_functional.rb466
-rw-r--r--test/rake/test_rake_invocation_chain.rb64
-rw-r--r--test/rake/test_rake_linked_list.rb84
-rw-r--r--test/rake/test_rake_makefile_loader.rb46
-rw-r--r--test/rake/test_rake_multi_task.rb58
-rw-r--r--test/rake/test_rake_name_space.rb43
-rw-r--r--test/rake/test_rake_package_task.rb79
-rw-r--r--test/rake/test_rake_path_map.rb168
-rw-r--r--test/rake/test_rake_path_map_explode.rb34
-rw-r--r--test/rake/test_rake_path_map_partial.rb18
-rw-r--r--test/rake/test_rake_pseudo_status.rb21
-rw-r--r--test/rake/test_rake_rake_test_loader.rb20
-rw-r--r--test/rake/test_rake_reduce_compat.rb26
-rw-r--r--test/rake/test_rake_require.rb40
-rw-r--r--test/rake/test_rake_rules.rb362
-rw-r--r--test/rake/test_rake_scope.rb44
-rw-r--r--test/rake/test_rake_task.rb376
-rw-r--r--test/rake/test_rake_task_argument_parsing.rb103
-rw-r--r--test/rake/test_rake_task_arguments.rb121
-rw-r--r--test/rake/test_rake_task_lib.rb9
-rw-r--r--test/rake/test_rake_task_manager.rb158
-rw-r--r--test/rake/test_rake_task_manager_argument_resolution.rb19
-rw-r--r--test/rake/test_rake_task_with_arguments.rb171
-rw-r--r--test/rake/test_rake_test_task.rb119
-rw-r--r--test/rake/test_rake_thread_pool.rb142
-rw-r--r--test/rake/test_rake_top_level_functions.rb71
-rw-r--r--test/rake/test_rake_win32.rb72
-rw-r--r--test/rake/test_thread_history_display.rb101
-rw-r--r--test/rake/test_trace_output.rb52
-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.datbin0 -> 1024 bytes-rw-r--r--test/rdoc/hidden.zip.txt1
-rw-r--r--test/rdoc/test.ja.large.rdoc3
-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_attribute_manager.rb120
-rw-r--r--test/rdoc/test_rdoc_alias.rb13
-rw-r--r--test/rdoc/test_rdoc_any_method.rb431
-rw-r--r--test/rdoc/test_rdoc_attr.rb190
-rw-r--r--test/rdoc/test_rdoc_class_module.rb1492
-rw-r--r--test/rdoc/test_rdoc_code_object.rb450
-rw-r--r--test/rdoc/test_rdoc_comment.rb504
-rw-r--r--test/rdoc/test_rdoc_constant.rb151
-rw-r--r--test/rdoc/test_rdoc_context.rb899
-rw-r--r--test/rdoc/test_rdoc_context_section.rb130
-rw-r--r--test/rdoc/test_rdoc_cross_reference.rb192
-rw-r--r--test/rdoc/test_rdoc_encoding.rb204
-rw-r--r--test/rdoc/test_rdoc_extend.rb94
-rw-r--r--test/rdoc/test_rdoc_generator_darkfish.rb229
-rw-r--r--test/rdoc/test_rdoc_generator_json_index.rb264
-rw-r--r--test/rdoc/test_rdoc_generator_markup.rb59
-rw-r--r--test/rdoc/test_rdoc_generator_ri.rb78
-rw-r--r--test/rdoc/test_rdoc_include.rb108
-rw-r--r--test/rdoc/test_rdoc_markdown.rb980
-rw-r--r--test/rdoc/test_rdoc_markdown_test.rb1884
-rw-r--r--test/rdoc/test_rdoc_markup.rb95
-rw-r--r--test/rdoc/test_rdoc_markup_attribute_manager.rb358
-rw-r--r--test/rdoc/test_rdoc_markup_attributes.rb39
-rw-r--r--test/rdoc/test_rdoc_markup_document.rb207
-rw-r--r--test/rdoc/test_rdoc_markup_formatter.rb175
-rw-r--r--test/rdoc/test_rdoc_markup_hard_break.rb31
-rw-r--r--test/rdoc/test_rdoc_markup_heading.rb29
-rw-r--r--test/rdoc/test_rdoc_markup_include.rb19
-rw-r--r--test/rdoc/test_rdoc_markup_indented_paragraph.rb53
-rw-r--r--test/rdoc/test_rdoc_markup_paragraph.rb32
-rw-r--r--test/rdoc/test_rdoc_markup_parser.rb1680
-rw-r--r--test/rdoc/test_rdoc_markup_pre_process.rb473
-rw-r--r--test/rdoc/test_rdoc_markup_raw.rb22
-rw-r--r--test/rdoc/test_rdoc_markup_to_ansi.rb369
-rw-r--r--test/rdoc/test_rdoc_markup_to_bs.rb366
-rw-r--r--test/rdoc/test_rdoc_markup_to_html.rb643
-rw-r--r--test/rdoc/test_rdoc_markup_to_html_crossref.rb225
-rw-r--r--test/rdoc/test_rdoc_markup_to_html_snippet.rb710
-rw-r--r--test/rdoc/test_rdoc_markup_to_joined_paragraph.rb32
-rw-r--r--test/rdoc/test_rdoc_markup_to_label.rb112
-rw-r--r--test/rdoc/test_rdoc_markup_to_markdown.rb389
-rw-r--r--test/rdoc/test_rdoc_markup_to_rdoc.rb377
-rw-r--r--test/rdoc/test_rdoc_markup_to_table_of_contents.rb126
-rw-r--r--test/rdoc/test_rdoc_markup_to_tt_only.rb246
-rw-r--r--test/rdoc/test_rdoc_markup_verbatim.rb29
-rw-r--r--test/rdoc/test_rdoc_method_attr.rb163
-rw-r--r--test/rdoc/test_rdoc_normal_class.rb47
-rw-r--r--test/rdoc/test_rdoc_normal_module.rb42
-rw-r--r--test/rdoc/test_rdoc_options.rb747
-rw-r--r--test/rdoc/test_rdoc_parser.rb312
-rw-r--r--test/rdoc/test_rdoc_parser_c.rb1825
-rw-r--r--test/rdoc/test_rdoc_parser_changelog.rb315
-rw-r--r--test/rdoc/test_rdoc_parser_markdown.rb61
-rw-r--r--test/rdoc/test_rdoc_parser_rd.rb55
-rw-r--r--test/rdoc/test_rdoc_parser_ruby.rb3310
-rw-r--r--test/rdoc/test_rdoc_parser_simple.rb115
-rw-r--r--test/rdoc/test_rdoc_rd.rb30
-rw-r--r--test/rdoc/test_rdoc_rd_block_parser.rb533
-rw-r--r--test/rdoc/test_rdoc_rd_inline.rb63
-rw-r--r--test/rdoc/test_rdoc_rd_inline_parser.rb177
-rw-r--r--test/rdoc/test_rdoc_rdoc.rb434
-rw-r--r--test/rdoc/test_rdoc_require.rb25
-rw-r--r--test/rdoc/test_rdoc_ri_driver.rb1436
-rw-r--r--test/rdoc/test_rdoc_ri_paths.rb155
-rw-r--r--test/rdoc/test_rdoc_ruby_lex.rb410
-rw-r--r--test/rdoc/test_rdoc_ruby_token.rb19
-rw-r--r--test/rdoc/test_rdoc_rubygems_hook.rb254
-rw-r--r--test/rdoc/test_rdoc_servlet.rb535
-rw-r--r--test/rdoc/test_rdoc_single_class.rb12
-rw-r--r--test/rdoc/test_rdoc_stats.rb667
-rw-r--r--test/rdoc/test_rdoc_store.rb993
-rw-r--r--test/rdoc/test_rdoc_task.rb120
-rw-r--r--test/rdoc/test_rdoc_text.rb554
-rw-r--r--test/rdoc/test_rdoc_token_stream.rb42
-rw-r--r--test/rdoc/test_rdoc_tom_doc.rb520
-rw-r--r--test/rdoc/test_rdoc_top_level.rb287
-rw-r--r--test/rdoc/xref_data.rb76
-rw-r--r--test/rdoc/xref_test_case.rb67
-rw-r--r--test/readline/test_readline.rb518
-rw-r--r--test/readline/test_readline_history.rb292
-rw-r--r--test/resolv/test_addr.rb28
-rw-r--r--test/resolv/test_dns.rb164
-rw-r--r--test/rexml/data/LostineRiver.kml.gzbin0 -> 50154 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.xmlbin0 -> 161690 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_110_utf16.xmlbin0 -> 207464 bytes-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/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.rb50
-rw-r--r--test/rexml/parse/test_document_type_declaration.rb47
-rw-r--r--test/rexml/parse/test_notation_declaration.rb97
-rw-r--r--test/rexml/parser/test_sax2.rb200
-rw-r--r--test/rexml/parser/test_tree.rb40
-rw-r--r--test/rexml/parser/test_ultra_light.rb67
-rw-r--r--test/rexml/rexml_test_utils.rb6
-rw-r--r--test/rexml/test_attributes.rb220
-rw-r--r--test/rexml/test_attributes_mixin.rb29
-rw-r--r--test/rexml/test_changing_encoding.rb43
-rw-r--r--test/rexml/test_comment.rb25
-rw-r--r--test/rexml/test_contrib.rb581
-rw-r--r--test/rexml/test_core.rb1462
-rw-r--r--test/rexml/test_doctype.rb104
-rw-r--r--test/rexml/test_document.rb346
-rw-r--r--test/rexml/test_elements.rb116
-rw-r--r--test/rexml/test_encoding.rb94
-rw-r--r--test/rexml/test_encoding_2.rb59
-rw-r--r--test/rexml/test_entity.rb203
-rw-r--r--test/rexml/test_functions.rb223
-rw-r--r--test/rexml/test_functions_number.rb32
-rw-r--r--test/rexml/test_jaxen.rb126
-rw-r--r--test/rexml/test_light.rb104
-rw-r--r--test/rexml/test_lightparser.rb12
-rw-r--r--test/rexml/test_listener.rb129
-rw-r--r--test/rexml/test_martin_fowler.rb37
-rw-r--r--test/rexml/test_namespace.rb38
-rw-r--r--test/rexml/test_order.rb105
-rw-r--r--test/rexml/test_preceding_sibling.rb38
-rw-r--r--test/rexml/test_pullparser.rb100
-rw-r--r--test/rexml/test_rexml_issuezilla.rb14
-rw-r--r--test/rexml/test_sax.rb279
-rw-r--r--test/rexml/test_stream.rb127
-rw-r--r--test/rexml/test_text.rb19
-rw-r--r--test/rexml/test_ticket_80.rb56
-rw-r--r--test/rexml/test_validation_rng.rb790
-rw-r--r--test/rexml/test_xml_declaration.rb33
-rw-r--r--test/rexml/test_xpath.rb1079
-rw-r--r--test/rexml/test_xpath_attribute_query.rb89
-rw-r--r--test/rexml/test_xpath_msw.rb38
-rw-r--r--test/rexml/test_xpath_pred.rb80
-rw-r--r--test/rexml/test_xpathtext.rb72
-rw-r--r--test/rinda/test_rinda.rb781
-rw-r--r--test/rinda/test_tuplebag.rb172
-rw-r--r--test/ripper/dummyparser.rb216
-rw-r--r--test/ripper/test_files.rb24
-rw-r--r--test/ripper/test_filter.rb83
-rw-r--r--test/ripper/test_parser_events.rb1190
-rw-r--r--test/ripper/test_ripper.rb49
-rw-r--r--test/ripper/test_scanner_events.rb892
-rw-r--r--test/rss/dot.pngbin0 -> 111 bytes-rw-r--r--test/rss/rss-assertions.rb2090
-rw-r--r--test/rss/rss-testcase.rb478
-rw-r--r--test/rss/test_1.0.rb307
-rw-r--r--test/rss/test_2.0.rb411
-rw-r--r--test/rss/test_accessor.rb103
-rw-r--r--test/rss/test_atom.rb683
-rw-r--r--test/rss/test_content.rb104
-rw-r--r--test/rss/test_dublincore.rb269
-rw-r--r--test/rss/test_image.rb214
-rw-r--r--test/rss/test_inherit.rb40
-rw-r--r--test/rss/test_itunes.rb347
-rw-r--r--test/rss/test_maker_0.9.rb474
-rw-r--r--test/rss/test_maker_1.0.rb516
-rw-r--r--test/rss/test_maker_2.0.rb757
-rw-r--r--test/rss/test_maker_atom_entry.rb393
-rw-r--r--test/rss/test_maker_atom_feed.rb454
-rw-r--r--test/rss/test_maker_content.rb47
-rw-r--r--test/rss/test_maker_dc.rb149
-rw-r--r--test/rss/test_maker_image.rb62
-rw-r--r--test/rss/test_maker_itunes.rb471
-rw-r--r--test/rss/test_maker_slash.rb37
-rw-r--r--test/rss/test_maker_sy.rb44
-rw-r--r--test/rss/test_maker_taxo.rb81
-rw-r--r--test/rss/test_maker_trackback.rb41
-rw-r--r--test/rss/test_maker_xml-stylesheet.rb83
-rw-r--r--test/rss/test_parser.rb64
-rw-r--r--test/rss/test_parser_1.0.rb528
-rw-r--r--test/rss/test_parser_2.0.rb122
-rw-r--r--test/rss/test_parser_atom_entry.rb163
-rw-r--r--test/rss/test_parser_atom_feed.rb276
-rw-r--r--test/rss/test_setup_maker_0.9.rb246
-rw-r--r--test/rss/test_setup_maker_1.0.rb550
-rw-r--r--test/rss/test_setup_maker_2.0.rb308
-rw-r--r--test/rss/test_setup_maker_atom_entry.rb409
-rw-r--r--test/rss/test_setup_maker_atom_feed.rb445
-rw-r--r--test/rss/test_setup_maker_itunes.rb144
-rw-r--r--test/rss/test_setup_maker_slash.rb38
-rw-r--r--test/rss/test_slash.rb64
-rw-r--r--test/rss/test_syndication.rb125
-rw-r--r--test/rss/test_taxonomy.rb172
-rw-r--r--test/rss/test_to_s.rb670
-rw-r--r--test/rss/test_trackback.rb135
-rw-r--r--test/rss/test_version.rb9
-rw-r--r--test/rss/test_xml-stylesheet.rb108
-rw-r--r--test/ruby/allpairs.rb102
-rw-r--r--test/ruby/beginmainend.rb80
-rw-r--r--test/ruby/enc/test_big5.rb28
-rw-r--r--test/ruby/enc/test_cp949.rb28
-rw-r--r--test/ruby/enc/test_emoji.rb442
-rw-r--r--test/ruby/enc/test_euc_jp.rb24
-rw-r--r--test/ruby/enc/test_euc_kr.rb36
-rw-r--r--test/ruby/enc/test_euc_tw.rb28
-rw-r--r--test/ruby/enc/test_gb18030.rb126
-rw-r--r--test/ruby/enc/test_gbk.rb28
-rw-r--r--test/ruby/enc/test_iso_8859.rb163
-rw-r--r--test/ruby/enc/test_koi8.rb22
-rw-r--r--test/ruby/enc/test_shift_jis.rb27
-rw-r--r--test/ruby/enc/test_utf16.rb384
-rw-r--r--test/ruby/enc/test_utf32.rb93
-rw-r--r--test/ruby/enc/test_windows_1251.rb16
-rw-r--r--test/ruby/endblockwarn_rb12
-rw-r--r--test/ruby/envutil.rb479
-rw-r--r--test/ruby/lbtest.rb49
-rw-r--r--test/ruby/marshaltestlib.rb436
-rw-r--r--test/ruby/memory_status.rb127
-rw-r--r--test/ruby/sentence.rb668
-rw-r--r--test/ruby/test_alias.rb197
-rw-r--r--test/ruby/test_argf.rb853
-rw-r--r--test/ruby/test_arity.rb69
-rw-r--r--test/ruby/test_array.rb2480
-rw-r--r--test/ruby/test_assignment.rb695
-rw-r--r--test/ruby/test_autoload.rb176
-rw-r--r--test/ruby/test_backtrace.rb244
-rw-r--r--test/ruby/test_basicinstructions.rb700
-rw-r--r--test/ruby/test_beginendblock.rb188
-rw-r--r--test/ruby/test_bignum.rb711
-rw-r--r--test/ruby/test_call.rb34
-rw-r--r--test/ruby/test_case.rb125
-rw-r--r--test/ruby/test_class.rb381
-rw-r--r--test/ruby/test_clone.rb28
-rw-r--r--test/ruby/test_comparable.rb86
-rw-r--r--test/ruby/test_complex.rb1163
-rw-r--r--test/ruby/test_complex2.rb735
-rw-r--r--test/ruby/test_complexrational.rb407
-rw-r--r--test/ruby/test_condition.rb16
-rw-r--r--test/ruby/test_const.rb66
-rw-r--r--test/ruby/test_continuation.rb135
-rw-r--r--test/ruby/test_defined.rb212
-rw-r--r--test/ruby/test_dir.rb269
-rw-r--r--test/ruby/test_dir_m17n.rb331
-rw-r--r--test/ruby/test_econv.rb924
-rw-r--r--test/ruby/test_encoding.rb120
-rw-r--r--test/ruby/test_enum.rb454
-rw-r--r--test/ruby/test_enumerator.rb629
-rw-r--r--test/ruby/test_env.rb535
-rw-r--r--test/ruby/test_eval.rb502
-rw-r--r--test/ruby/test_exception.rb553
-rw-r--r--test/ruby/test_fiber.rb348
-rw-r--r--test/ruby/test_file.rb386
-rw-r--r--test/ruby/test_file_exhaustive.rb1203
-rw-r--r--test/ruby/test_fixnum.rb308
-rw-r--r--test/ruby/test_flip.rb42
-rw-r--r--test/ruby/test_float.rb622
-rw-r--r--test/ruby/test_fnmatch.rb132
-rw-r--r--test/ruby/test_gc.rb309
-rw-r--r--test/ruby/test_hash.rb1281
-rw-r--r--test/ruby/test_ifunless.rb14
-rw-r--r--test/ruby/test_integer.rb280
-rw-r--r--test/ruby/test_integer_comb.rb631
-rw-r--r--test/ruby/test_io.rb3007
-rw-r--r--test/ruby/test_io_m17n.rb2538
-rw-r--r--test/ruby/test_iseq.rb127
-rw-r--r--test/ruby/test_iterator.rb497
-rw-r--r--test/ruby/test_keyword.rb523
-rw-r--r--test/ruby/test_lambda.rb136
-rw-r--r--test/ruby/test_lazy_enumerator.rb493
-rw-r--r--test/ruby/test_literal.rb437
-rw-r--r--test/ruby/test_m17n.rb1572
-rw-r--r--test/ruby/test_m17n_comb.rb1609
-rw-r--r--test/ruby/test_marshal.rb598
-rw-r--r--test/ruby/test_math.rb284
-rw-r--r--test/ruby/test_metaclass.rb167
-rw-r--r--test/ruby/test_method.rb758
-rw-r--r--test/ruby/test_mixed_unicode_escapes.rb25
-rw-r--r--test/ruby/test_module.rb1996
-rw-r--r--test/ruby/test_not.rb12
-rw-r--r--test/ruby/test_notimp.rb84
-rw-r--r--test/ruby/test_numeric.rb332
-rw-r--r--test/ruby/test_object.rb827
-rw-r--r--test/ruby/test_objectspace.rb101
-rw-r--r--test/ruby/test_optimization.rb203
-rw-r--r--test/ruby/test_pack.rb712
-rw-r--r--test/ruby/test_parse.rb855
-rw-r--r--test/ruby/test_path.rb259
-rw-r--r--test/ruby/test_pipe.rb29
-rw-r--r--test/ruby/test_primitive.rb423
-rw-r--r--test/ruby/test_proc.rb1281
-rw-r--r--test/ruby/test_process.rb1888
-rw-r--r--test/ruby/test_rand.rb527
-rw-r--r--test/ruby/test_range.rb570
-rw-r--r--test/ruby/test_rational.rb1169
-rw-r--r--test/ruby/test_rational2.rb1386
-rw-r--r--test/ruby/test_readpartial.rb72
-rw-r--r--test/ruby/test_refinement.rb1175
-rw-r--r--test/ruby/test_regexp.rb1082
-rw-r--r--test/ruby/test_require.rb668
-rw-r--r--test/ruby/test_rubyoptions.rb682
-rw-r--r--test/ruby/test_rubyvm.rb16
-rw-r--r--test/ruby/test_settracefunc.rb1351
-rw-r--r--test/ruby/test_signal.rb294
-rw-r--r--test/ruby/test_sleep.rb22
-rw-r--r--test/ruby/test_sprintf.rb380
-rw-r--r--test/ruby/test_sprintf_comb.rb553
-rw-r--r--test/ruby/test_string.rb2245
-rw-r--r--test/ruby/test_stringchar.rb181
-rw-r--r--test/ruby/test_struct.rb325
-rw-r--r--test/ruby/test_super.rb512
-rw-r--r--test/ruby/test_symbol.rb209
-rw-r--r--test/ruby/test_syntax.rb448
-rw-r--r--test/ruby/test_system.rb163
-rw-r--r--test/ruby/test_thread.rb1011
-rw-r--r--test/ruby/test_threadgroup.rb55
-rw-r--r--test/ruby/test_time.rb1020
-rw-r--r--test/ruby/test_time_tz.rb406
-rw-r--r--test/ruby/test_trace.rb61
-rw-r--r--test/ruby/test_transcode.rb2094
-rw-r--r--test/ruby/test_undef.rb37
-rw-r--r--test/ruby/test_unicode_escape.rb271
-rw-r--r--test/ruby/test_variable.rb109
-rw-r--r--test/ruby/test_weakmap.rb134
-rw-r--r--test/ruby/test_whileuntil.rb83
-rw-r--r--test/ruby/test_yield.rb393
-rw-r--r--test/ruby/ut_eof.rb128
-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.rb1
-rw-r--r--test/rubygems/bogussources.rb8
-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.rzbin0 -> 554 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.rb7
-rw-r--r--test/rubygems/fix_openssl_warnings.rb12
-rw-r--r--test/rubygems/foo/discover.rb0
-rw-r--r--test/rubygems/future_cert.pem18
-rw-r--r--test/rubygems/future_cert_32.pem18
-rw-r--r--test/rubygems/good_rake.rb1
-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.rb2
-rw-r--r--test/rubygems/plugin/load/rubygems_plugin.rb3
-rw-r--r--test/rubygems/plugin/standarderror/rubygems_plugin.rb2
-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.rb5
-rw-r--r--test/rubygems/rubygems_plugin.rb21
-rw-r--r--test/rubygems/sff/discover.rb0
-rw-r--r--test/rubygems/simple_gem.rb66
-rw-r--r--test/rubygems/specifications/bar-0.0.2.gemspec9
-rw-r--r--test/rubygems/specifications/foo-0.0.1.gemspecbin0 -> 269 bytes-rw-r--r--test/rubygems/ssl_cert.pem19
-rw-r--r--test/rubygems/ssl_key.pem15
-rw-r--r--test/rubygems/test_bundled_ca.rb60
-rw-r--r--test/rubygems/test_config.rb14
-rw-r--r--test/rubygems/test_deprecate.rb76
-rw-r--r--test/rubygems/test_gem.rb1415
-rw-r--r--test/rubygems/test_gem_available_set.rb125
-rw-r--r--test/rubygems/test_gem_command.rb188
-rw-r--r--test/rubygems/test_gem_command_manager.rb263
-rw-r--r--test/rubygems/test_gem_commands_build_command.rb110
-rw-r--r--test/rubygems/test_gem_commands_cert_command.rb669
-rw-r--r--test/rubygems/test_gem_commands_check_command.rb68
-rw-r--r--test/rubygems/test_gem_commands_cleanup_command.rb167
-rw-r--r--test/rubygems/test_gem_commands_contents_command.rb196
-rw-r--r--test/rubygems/test_gem_commands_dependency_command.rb221
-rw-r--r--test/rubygems/test_gem_commands_environment_command.rb152
-rw-r--r--test/rubygems/test_gem_commands_fetch_command.rb126
-rw-r--r--test/rubygems/test_gem_commands_generate_index_command.rb50
-rw-r--r--test/rubygems/test_gem_commands_help_command.rb67
-rw-r--r--test/rubygems/test_gem_commands_install_command.rb898
-rw-r--r--test/rubygems/test_gem_commands_list_command.rb33
-rw-r--r--test/rubygems/test_gem_commands_lock_command.rb68
-rw-r--r--test/rubygems/test_gem_commands_mirror.rb32
-rw-r--r--test/rubygems/test_gem_commands_outdated_command.rb33
-rw-r--r--test/rubygems/test_gem_commands_owner_command.rb204
-rw-r--r--test/rubygems/test_gem_commands_pristine_command.rb370
-rw-r--r--test/rubygems/test_gem_commands_push_command.rb262
-rw-r--r--test/rubygems/test_gem_commands_query_command.rb668
-rw-r--r--test/rubygems/test_gem_commands_search_command.rb17
-rw-r--r--test/rubygems/test_gem_commands_server_command.rb59
-rw-r--r--test/rubygems/test_gem_commands_setup_command.rb129
-rw-r--r--test/rubygems/test_gem_commands_sources_command.rb248
-rw-r--r--test/rubygems/test_gem_commands_specification_command.rb250
-rw-r--r--test/rubygems/test_gem_commands_stale_command.rb40
-rw-r--r--test/rubygems/test_gem_commands_uninstall_command.rb245
-rw-r--r--test/rubygems/test_gem_commands_unpack_command.rb210
-rw-r--r--test/rubygems/test_gem_commands_update_command.rb467
-rw-r--r--test/rubygems/test_gem_commands_which_command.rb85
-rw-r--r--test/rubygems/test_gem_commands_yank_command.rb97
-rw-r--r--test/rubygems/test_gem_config_file.rb455
-rw-r--r--test/rubygems/test_gem_dependency.rb223
-rw-r--r--test/rubygems/test_gem_dependency_installer.rb1298
-rw-r--r--test/rubygems/test_gem_dependency_list.rb259
-rw-r--r--test/rubygems/test_gem_dependency_resolution_error.rb28
-rw-r--r--test/rubygems/test_gem_doctor.rb168
-rw-r--r--test/rubygems/test_gem_ext_builder.rb323
-rw-r--r--test/rubygems/test_gem_ext_cmake_builder.rb84
-rw-r--r--test/rubygems/test_gem_ext_configure_builder.rb82
-rw-r--r--test/rubygems/test_gem_ext_ext_conf_builder.rb206
-rw-r--r--test/rubygems/test_gem_ext_rake_builder.rb64
-rw-r--r--test/rubygems/test_gem_gem_runner.rb68
-rw-r--r--test/rubygems/test_gem_gemcutter_utilities.rb225
-rw-r--r--test/rubygems/test_gem_impossible_dependencies_error.rb45
-rw-r--r--test/rubygems/test_gem_indexer.rb366
-rw-r--r--test/rubygems/test_gem_install_update_options.rb150
-rw-r--r--test/rubygems/test_gem_installer.rb1452
-rw-r--r--test/rubygems/test_gem_local_remote_options.rb120
-rw-r--r--test/rubygems/test_gem_name_tuple.rb37
-rw-r--r--test/rubygems/test_gem_package.rb805
-rw-r--r--test/rubygems/test_gem_package_old.rb89
-rw-r--r--test/rubygems/test_gem_package_tar_header.rb144
-rw-r--r--test/rubygems/test_gem_package_tar_reader.rb79
-rw-r--r--test/rubygems/test_gem_package_tar_reader_entry.rb119
-rw-r--r--test/rubygems/test_gem_package_tar_writer.rb249
-rw-r--r--test/rubygems/test_gem_package_task.rb80
-rw-r--r--test/rubygems/test_gem_path_support.rb84
-rw-r--r--test/rubygems/test_gem_platform.rb296
-rw-r--r--test/rubygems/test_gem_rdoc.rb269
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb827
-rw-r--r--test/rubygems/test_gem_request.rb348
-rw-r--r--test/rubygems/test_gem_request_set.rb353
-rw-r--r--test/rubygems/test_gem_request_set_gem_dependency_api.rb684
-rw-r--r--test/rubygems/test_gem_request_set_lockfile.rb857
-rw-r--r--test/rubygems/test_gem_requirement.rb363
-rw-r--r--test/rubygems/test_gem_resolver.rb605
-rw-r--r--test/rubygems/test_gem_resolver_activation_request.rb63
-rw-r--r--test/rubygems/test_gem_resolver_api_set.rb208
-rw-r--r--test/rubygems/test_gem_resolver_api_specification.rb104
-rw-r--r--test/rubygems/test_gem_resolver_best_set.rb80
-rw-r--r--test/rubygems/test_gem_resolver_composed_set.rb18
-rw-r--r--test/rubygems/test_gem_resolver_conflict.rb75
-rw-r--r--test/rubygems/test_gem_resolver_dependency_request.rb20
-rw-r--r--test/rubygems/test_gem_resolver_git_set.rb163
-rw-r--r--test/rubygems/test_gem_resolver_git_specification.rb100
-rw-r--r--test/rubygems/test_gem_resolver_index_set.rb63
-rw-r--r--test/rubygems/test_gem_resolver_index_specification.rb89
-rw-r--r--test/rubygems/test_gem_resolver_installed_specification.rb49
-rw-r--r--test/rubygems/test_gem_resolver_installer_set.rb92
-rw-r--r--test/rubygems/test_gem_resolver_local_specification.rb45
-rw-r--r--test/rubygems/test_gem_resolver_lock_set.rb57
-rw-r--r--test/rubygems/test_gem_resolver_lock_specification.rb87
-rw-r--r--test/rubygems/test_gem_resolver_requirement_list.rb20
-rw-r--r--test/rubygems/test_gem_resolver_specification.rb32
-rw-r--r--test/rubygems/test_gem_resolver_vendor_set.rb67
-rw-r--r--test/rubygems/test_gem_resolver_vendor_specification.rb83
-rw-r--r--test/rubygems/test_gem_security.rb306
-rw-r--r--test/rubygems/test_gem_security_policy.rb540
-rw-r--r--test/rubygems/test_gem_security_signer.rb208
-rw-r--r--test/rubygems/test_gem_security_trust_dir.rb98
-rw-r--r--test/rubygems/test_gem_server.rb339
-rw-r--r--test/rubygems/test_gem_silent_ui.rb111
-rw-r--r--test/rubygems/test_gem_source.rb211
-rw-r--r--test/rubygems/test_gem_source_fetch_problem.rb19
-rw-r--r--test/rubygems/test_gem_source_git.rb274
-rw-r--r--test/rubygems/test_gem_source_installed.rb28
-rw-r--r--test/rubygems/test_gem_source_list.rb111
-rw-r--r--test/rubygems/test_gem_source_local.rb106
-rw-r--r--test/rubygems/test_gem_source_lock.rb114
-rw-r--r--test/rubygems/test_gem_source_specific_file.rb71
-rw-r--r--test/rubygems/test_gem_source_vendor.rb27
-rw-r--r--test/rubygems/test_gem_spec_fetcher.rb310
-rw-r--r--test/rubygems/test_gem_specification.rb2998
-rw-r--r--test/rubygems/test_gem_stream_ui.rb238
-rw-r--r--test/rubygems/test_gem_stub_specification.rb143
-rw-r--r--test/rubygems/test_gem_text.rb58
-rw-r--r--test/rubygems/test_gem_uninstaller.rb460
-rw-r--r--test/rubygems/test_gem_uri_formatter.rb28
-rw-r--r--test/rubygems/test_gem_util.rb31
-rw-r--r--test/rubygems/test_gem_validator.rb45
-rw-r--r--test/rubygems/test_gem_version.rb213
-rw-r--r--test/rubygems/test_gem_version_option.rb151
-rw-r--r--test/rubygems/test_kernel.rb55
-rw-r--r--test/rubygems/test_require.rb215
-rw-r--r--test/rubygems/wrong_key_cert.pem18
-rw-r--r--test/rubygems/wrong_key_cert_32.pem18
-rw-r--r--test/runner.rb35
-rw-r--r--test/scanf/data.txt6
-rw-r--r--test/scanf/test_scanf.rb325
-rw-r--r--test/scanf/test_scanfblocks.rb81
-rw-r--r--test/scanf/test_scanfio.rb20
-rw-r--r--test/sdbm/test_sdbm.rb542
-rw-r--r--test/shell/test_command_processor.rb69
-rw-r--r--test/socket/test_addrinfo.rb640
-rw-r--r--test/socket/test_ancdata.rb66
-rw-r--r--test/socket/test_basicsocket.rb88
-rw-r--r--test/socket/test_nonblock.rb297
-rw-r--r--test/socket/test_socket.rb648
-rw-r--r--test/socket/test_sockopt.rb51
-rw-r--r--test/socket/test_tcp.rb80
-rw-r--r--test/socket/test_udp.rb72
-rw-r--r--test/socket/test_unix.rb629
-rw-r--r--test/stringio/test_stringio.rb589
-rw-r--r--test/strscan/test_stringscanner.rb719
-rw-r--r--test/syslog/test_syslog_logger.rb572
-rw-r--r--test/test_abbrev.rb54
-rw-r--r--test/test_cmath.rb16
-rw-r--r--test/test_delegate.rb240
-rw-r--r--test/test_find.rb260
-rw-r--r--test/test_ipaddr.rb3
-rw-r--r--test/test_mathn.rb118
-rw-r--r--test/test_mutex_m.rb26
-rw-r--r--test/test_open3.rb243
-rw-r--r--test/test_pp.rb187
-rw-r--r--test/test_prettyprint.rb519
-rw-r--r--test/test_prime.rb174
-rw-r--r--test/test_pstore.rb137
-rw-r--r--test/test_pty.rb220
-rw-r--r--test/test_rbconfig.rb53
-rw-r--r--test/test_securerandom.rb185
-rw-r--r--test/test_set.rb718
-rw-r--r--test/test_shellwords.rb61
-rw-r--r--test/test_singleton.rb103
-rw-r--r--test/test_syslog.rb185
-rw-r--r--test/test_tempfile.rb343
-rw-r--r--test/test_time.rb416
-rw-r--r--test/test_timeout.rb83
-rw-r--r--test/test_tmpdir.rb33
-rw-r--r--test/test_tracer.rb61
-rw-r--r--test/test_tsort.rb100
-rw-r--r--test/test_weakref.rb64
-rw-r--r--test/testunit/test4test_hideskip.rb7
-rw-r--r--test/testunit/test4test_redefinition.rb11
-rw-r--r--test/testunit/test4test_sorting.rb15
-rw-r--r--test/testunit/test_assertion.rb8
-rw-r--r--test/testunit/test_hideskip.rb16
-rw-r--r--test/testunit/test_parallel.rb189
-rw-r--r--test/testunit/test_rake_integration.rb35
-rw-r--r--test/testunit/test_redefinition.rb15
-rw-r--r--test/testunit/test_sorting.rb17
-rw-r--r--test/testunit/tests_for_parallel/ptest_first.rb7
-rw-r--r--test/testunit/tests_for_parallel/ptest_forth.rb29
-rw-r--r--test/testunit/tests_for_parallel/ptest_second.rb11
-rw-r--r--test/testunit/tests_for_parallel/ptest_third.rb10
-rw-r--r--test/testunit/tests_for_parallel/runner.rb10
-rw-r--r--test/thread/test_cv.rb212
-rw-r--r--test/thread/test_queue.rb242
-rw-r--r--test/thread/test_sync.rb57
-rw-r--r--test/uri/test_common.rb167
-rw-r--r--test/uri/test_ftp.rb66
-rw-r--r--test/uri/test_generic.rb816
-rw-r--r--test/uri/test_http.rb64
-rw-r--r--test/uri/test_ldap.rb100
-rw-r--r--test/uri/test_mailto.rb132
-rw-r--r--test/uri/test_parser.rb41
-rw-r--r--test/webrick/.htaccess1
-rw-r--r--test/webrick/test_cgi.rb140
-rw-r--r--test/webrick/test_cookie.rb131
-rw-r--r--test/webrick/test_filehandler.rb285
-rw-r--r--test/webrick/test_htmlutils.rb20
-rw-r--r--test/webrick/test_httpauth.rb169
-rw-r--r--test/webrick/test_httpproxy.rb284
-rw-r--r--test/webrick/test_httprequest.rb411
-rw-r--r--test/webrick/test_httpresponse.rb141
-rw-r--r--test/webrick/test_httpserver.rb369
-rw-r--r--test/webrick/test_httputils.rb100
-rw-r--r--test/webrick/test_httpversion.rb40
-rw-r--r--test/webrick/test_server.rb92
-rw-r--r--test/webrick/test_utils.rb64
-rw-r--r--test/webrick/utils.rb64
-rw-r--r--test/webrick/webrick.cgi36
-rw-r--r--test/webrick/webrick_long_filename.cgi36
-rw-r--r--test/win32ole/err_in_callback.rb9
-rw-r--r--test/win32ole/orig_data.csv5
-rw-r--r--test/win32ole/test_err_in_callback.rb55
-rw-r--r--test/win32ole/test_folderitem2_invokeverb.rb65
-rw-r--r--test/win32ole/test_nil2vtempty.rb36
-rw-r--r--test/win32ole/test_ole_methods.rb36
-rw-r--r--test/win32ole/test_propertyputref.rb30
-rw-r--r--test/win32ole/test_thread.rb33
-rw-r--r--test/win32ole/test_win32ole.rb524
-rw-r--r--test/win32ole/test_win32ole_event.rb334
-rw-r--r--test/win32ole/test_win32ole_method.rb146
-rw-r--r--test/win32ole/test_win32ole_param.rb106
-rw-r--r--test/win32ole/test_win32ole_type.rb249
-rw-r--r--test/win32ole/test_win32ole_typelib.rb116
-rw-r--r--test/win32ole/test_win32ole_variable.rb61
-rw-r--r--test/win32ole/test_win32ole_variant.rb656
-rw-r--r--test/win32ole/test_win32ole_variant_m.rb35
-rw-r--r--test/win32ole/test_win32ole_variant_outarg.rb68
-rw-r--r--test/win32ole/test_word.rb72
-rw-r--r--test/with_different_ofs.rb17
-rw-r--r--test/xmlrpc/data/blog.xml18
-rw-r--r--test/xmlrpc/data/bug_bool.expected3
-rw-r--r--test/xmlrpc/data/bug_bool.xml8
-rw-r--r--test/xmlrpc/data/bug_cdata.expected3
-rw-r--r--test/xmlrpc/data/bug_cdata.xml8
-rw-r--r--test/xmlrpc/data/bug_covert.expected10
-rw-r--r--test/xmlrpc/data/bug_covert.xml6
-rw-r--r--test/xmlrpc/data/datetime_iso8601.xml8
-rw-r--r--test/xmlrpc/data/fault.xml16
-rw-r--r--test/xmlrpc/data/value.expected7
-rw-r--r--test/xmlrpc/data/value.xml22
-rw-r--r--test/xmlrpc/data/xml1.expected243
-rw-r--r--test/xmlrpc/data/xml1.xml1
-rw-r--r--test/xmlrpc/htpasswd2
-rw-r--r--test/xmlrpc/test_client.rb316
-rw-r--r--test/xmlrpc/test_cookie.rb97
-rw-r--r--test/xmlrpc/test_datetime.rb161
-rw-r--r--test/xmlrpc/test_features.rb50
-rw-r--r--test/xmlrpc/test_marshal.rb110
-rw-r--r--test/xmlrpc/test_parser.rb93
-rw-r--r--test/xmlrpc/test_webrick_server.rb135
-rw-r--r--test/xmlrpc/webrick_testing.rb48
-rw-r--r--test/zlib/test_zlib.rb1096
-rw-r--r--thread.c5339
-rw-r--r--thread_native.h23
-rw-r--r--thread_pthread.c1620
-rw-r--r--thread_pthread.h56
-rw-r--r--thread_win32.c794
-rw-r--r--thread_win32.h45
-rw-r--r--time.c5186
-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
-rw-r--r--tool/compile_prelude.rb198
-rw-r--r--tool/config_files.rb8
-rw-r--r--tool/enc-emoji-citrus-gen.rb131
-rw-r--r--tool/enc-emoji4unicode.rb133
-rwxr-xr-xtool/enc-unicode.rb365
-rw-r--r--tool/eval.rb159
-rwxr-xr-xtool/file2lastrev.rb68
-rwxr-xr-xtool/gen_dummy_probes.rb28
-rwxr-xr-xtool/gen_ruby_tapset.rb105
-rw-r--r--tool/generic_erb.rb42
-rwxr-xr-xtool/get-config_files7
-rwxr-xr-xtool/id2token.rb24
-rwxr-xr-xtool/ifchange61
-rwxr-xr-xtool/insns2vm.rb15
-rw-r--r--tool/install-sh17
-rwxr-xr-xtool/instruction.rb1343
-rw-r--r--tool/jisx0208.rb84
-rwxr-xr-xtool/make-snapshot303
-rwxr-xr-xtool/mdoc2man.rb465
-rwxr-xr-xtool/merger.rb242
-rwxr-xr-xtool/mkconfig.rb283
-rwxr-xr-xtool/mkrunnable.rb116
-rwxr-xr-xtool/node_name.rb6
-rw-r--r--tool/parse.rb13
-rw-r--r--tool/probes_to_wiki.rb16
-rwxr-xr-xtool/rbinstall.rb795
-rwxr-xr-xtool/rbuninstall.rb67
-rwxr-xr-xtool/rmdirs11
-rwxr-xr-xtool/rubytest.rb30
-rwxr-xr-xtool/runruby.rb99
-rwxr-xr-xtool/strip-rdoc.rb23
-rw-r--r--tool/test/test_jisx0208.rb40
-rw-r--r--tool/transcode-tblgen.rb1074
-rwxr-xr-xtool/update-deps157
-rw-r--r--tool/vcs.rb114
-rw-r--r--tool/vpath.rb82
-rw-r--r--tool/vtlh.rb15
-rwxr-xr-xtool/ytab.sed37
-rw-r--r--top.sed37
-rw-r--r--transcode.c4550
-rw-r--r--transcode_data.h123
-rw-r--r--util.c3921
-rw-r--r--util.h18
-rw-r--r--variable.c2724
-rw-r--r--version.c85
-rw-r--r--version.h54
-rw-r--r--vm.c3084
-rw-r--r--vm_backtrace.c1382
-rw-r--r--vm_core.h1055
-rw-r--r--vm_debug.h37
-rw-r--r--vm_dump.c812
-rw-r--r--vm_eval.c1998
-rw-r--r--vm_exec.c158
-rw-r--r--vm_exec.h182
-rw-r--r--vm_insnhelper.c2402
-rw-r--r--vm_insnhelper.h273
-rw-r--r--vm_method.c1745
-rw-r--r--vm_opts.h56
-rw-r--r--vm_trace.c1538
-rw-r--r--vsnprintf.c1339
-rw-r--r--win32/Makefile.sub1156
-rw-r--r--win32/README.win32141
-rwxr-xr-xwin32/configure.bat211
-rw-r--r--win32/dir.h45
-rw-r--r--win32/enc-setup.mak10
-rw-r--r--win32/file.c706
-rwxr-xr-xwin32/ifchange.bat95
-rwxr-xr-xwin32/makedirs.bat3
-rwxr-xr-xwin32/mkexports.rb172
-rwxr-xr-xwin32/resource.rb97
-rwxr-xr-xwin32/rm.bat18
-rwxr-xr-xwin32/rmall.bat6
-rwxr-xr-xwin32/rmdirs.bat29
-rw-r--r--win32/rtname.cmd18
-rw-r--r--win32/setup.mak214
-rw-r--r--win32/stub.c42
-rw-r--r--win32/win32.c7163
-rw-r--r--win32/winmain.c10
4300 files changed, 1699633 insertions, 43066 deletions
diff --git a/.document b/.document
new file mode 100644
index 0000000000..9a5067bc52
--- /dev/null
+++ b/.document
@@ -0,0 +1,28 @@
+# This file determines which files in the
+# Ruby hierarchy will be processed by the RDoc
+# tool when it is given the top-level directory
+# as an argument
+
+# 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
+
+NEWS
+
+README
+README.EXT
+README.EXT.ja
+README.ja
+
+doc
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000000..67abf4b978
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,16 @@
+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
new file mode 100644
index 0000000000..17be7d8779
--- /dev/null
+++ b/.gdbinit
@@ -0,0 +1,882 @@
+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)
+ 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 RBasic *)($arg0)
+ 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_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
+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
+ rb_numtable_entry global_symbols.id_str $id
+ if $rb_numtable_rec
+ rp_string $rb_numtable_rec
+ 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 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 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[$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 *)$rb_method_entry_klass->ptr->super
+ 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 = ((struct RClass *)($rb_ancestors_module))->ptr.super
+ 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_threads = (st_table*)$ps_vm->living_threads
+ if $ps_threads->entries_packed
+ set $ps_threads_i = 0
+ while $ps_threads_i < $ps_threads->num_entries
+ set $ps_threads_key = (st_data_t)$ps_threads->as.packed.entries[$ps_threads_i].key
+ set $ps_threads_val = (st_data_t)$ps_threads->as.packed.entries[$ps_threads_i].val
+ rb_ps_thread $ps_threads_key $ps_threads_val
+ set $ps_threads_i = $ps_threads_i + 1
+ end
+ else
+ set $ps_threads_ptr = (st_table_entry*)$ps_threads->head
+ while $ps_threads_ptr
+ set $ps_threads_key = (st_data_t)$ps_threads_ptr->key
+ set $ps_threads_val = (st_data_t)$ps_threads_ptr->record
+ rb_ps_thread $ps_threads_key $ps_threads_val
+ set $ps_threads_ptr = (st_table_entry*)$ps_threads_ptr->fore
+ end
+ 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_id = $arg1
+ print $ps_thread_th = (rb_thread_t*)$ps_thread->data
+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
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..dee365b3c6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,137 @@
+*-*-*.def
+*.a
+*.bak
+*.dSYM
+*.dmyh
+*.dylib
+*.elc
+*.inc
+*.log
+*.o
+*.orig
+*.rej
+*.sav
+*.swp
+*~
+.*-*
+.*.list
+.*.time
+.DS_Store
+.ccmalloc
+.ext
+.pc
+.ppack
+.svn
+Makefile
+Makefile.old
+extconf.h
+y.output
+y.tab.c
+
+# /
+/*.pc
+/*_prelude.c
+/COPYING.LIB
+/ChangeLog-1.8.0
+/ChangeLog.pre-alpha
+/ChangeLog.pre1_1
+/Doxyfile
+/GNUmakefile
+/GNUmakefile.old
+/README.atheos
+/README.fat-patch
+/README.v6
+/TAGS
+/archive
+/autom4te*.cache
+/automake
+/beos
+/breakpoints.gdb
+/config.cache
+/config.h
+/config.h.in
+/config.status
+/config.status.lineno
+/configure
+/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-man.rd.gz
+/sizes.c
+/test.rb
+/tmp
+/transdb.h
+/uncommon.mk
+/verconf.h
+/web
+/yasmdata.rb
+
+# /benchmark/
+/benchmark/bmx_*.rb
+
+# /enc/trans/
+/enc/trans/*.c
+
+# /ext/
+/ext/extinit.c
+
+# /ext/dl/callback/
+/ext/dl/callback/callback-*.c
+/ext/dl/callback/callback.c
+
+# /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
+
+# /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
new file mode 100644
index 0000000000..6a207a0554
--- /dev/null
+++ b/.indent.pro
@@ -0,0 +1,21 @@
+-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
new file mode 100644
index 0000000000..8db00587d6
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,86 @@
+# 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
+
+# Compilers. Several compilers are provided in Travis, so we try them all.
+# The value set here is visible via $CC environment variable.
+compiler:
+ - gcc
+ - clang
+
+# 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:
+ - "sudo apt-get -qq update"
+ - "sudo apt-get -qq install $CC" # upgrade if any
+install: "sudo apt-get -qq build-dep ruby1.9.1 2>/dev/null"
+
+# 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:
+ - "make -f common.mk BASERUBY=ruby srcdir=. update-config_files"
+ - "autoconf"
+ - "mkdir config_1st config_2nd"
+ - "./configure -C --with-gcc=$CC"
+ - "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 -sj encs"
+ - "make -sj exts"
+script:
+ - "make test OPTS=-v"
+# - "make test-all TESTS='-v'"
+
+# Branch matrix. Not all branches are Travis-ready so we limit branches here.
+branches:
+ only:
+ - trunk
+ - ruby_1_9_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: change # [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
+
+# 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
new file mode 100644
index 0000000000..a009caefea
--- /dev/null
+++ b/BSDL
@@ -0,0 +1,22 @@
+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/COPYING b/COPYING
new file mode 100644
index 0000000000..a1f19ff99d
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,56 @@
+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:
+
+ 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
+ original copyright notices and associated disclaimers.
+
+ 2. You may modify your copy of the software in any way, provided that
+ you do at least ONE of the following:
+
+ a) place your modifications in the Public Domain or otherwise
+ make them Freely Available, such as by posting said
+ modifications to Usenet or an equivalent medium, or by allowing
+ the author to include your modifications in the software.
+
+ b) use the modified software only within your corporation or
+ organization.
+
+ c) give non-standard binaries non-standard names, with
+ instructions on where to get the original software distribution.
+
+ d) make other distribution arrangements with the author.
+
+ 3. You may distribute the software in object code or binary form,
+ provided that you do at least ONE of the following:
+
+ a) distribute the binaries and library files of the software,
+ together with instructions (in the manual page or equivalent)
+ on where to get the original distribution.
+
+ b) accompany the distribution with the machine-readable source of
+ the software.
+
+ c) give non-standard binaries non-standard names, with
+ instructions on where to get the original software distribution.
+
+ d) make other distribution arrangements with the author.
+
+ 4. You may modify and include the part of the software into any other
+ software (possibly commercial). But some files in the distribution
+ are not written by the author, so that they are not under these terms.
+
+ For the list of those files and their copying conditions, see the
+ file LEGAL.
+
+ 5. The scripts and library files supplied as input to or produced as
+ output from the software do not automatically fall under the
+ copyright of the software, but belong to whomever generated them,
+ and may be sold commercially, and may be aggregated with this
+ software.
+
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
diff --git a/COPYING.ja b/COPYING.ja
new file mode 100644
index 0000000000..e50d01c8d1
--- /dev/null
+++ b/COPYING.ja
@@ -0,0 +1,51 @@
+本プログラムはフリーソフトウェアです.2-clause BSDL
+または以下に示す条件で本プログラムを再配布できます
+2-clause BSDLについてはBSDLファイルを参照して下さい.
+
+ 1. 複製は制限なく自由です.
+
+ 2. 以下の条件のいずれかを満たす時に本プログラムのソースを
+ 自由に変更できます.
+
+ (a) ネットニューズにポストしたり,作者に変更を送付する
+ などの方法で,変更を公開する.
+
+ (b) 変更した本プログラムを自分の所属する組織内部だけで
+ 使う.
+
+ (c) 変更点を明示したうえ,ソフトウェアの名前を変更する.
+ そのソフトウェアを配布する時には変更前の本プログラ
+ ムも同時に配布する.または変更前の本プログラムのソー
+ スの入手法を明示する.
+
+ (d) その他の変更条件を作者と合意する.
+
+ 3. 以下の条件のいずれかを満たす時に本プログラムをコンパイ
+ ルしたオブジェクトコードや実行形式でも配布できます.
+
+ (a) バイナリを受け取った人がソースを入手できるように,
+ ソースの入手法を明示する.
+
+ (b) 機械可読なソースコードを添付する.
+
+ (c) 変更を行ったバイナリは名前を変更したうえ,オリジナ
+ ルのソースコードの入手法を明示する.
+
+ (d) その他の配布条件を作者と合意する.
+
+ 4. 他のプログラムへの引用はいかなる目的であれ自由です.た
+ だし,本プログラムに含まれる他の作者によるコードは,そ
+ れぞれの作者の意向による制限が加えられる場合があります.
+
+ それらファイルの一覧とそれぞれの配布条件などに付いては
+ LEGALファイルを参照してください.
+
+ 5. 本プログラムへの入力となるスクリプトおよび,本プログラ
+ ムからの出力の権利は本プログラムの作者ではなく,それぞ
+ れの入出力を生成した人に属します.また,本プログラムに
+ 組み込まれるための拡張ライブラリについても同様です.
+
+ 6. 本プログラムは無保証です.作者は本プログラムをサポート
+ する意志はありますが,プログラム自身のバグあるいは本プ
+ ログラムの実行などから発生するいかなる損害に対しても責
+ 任を持ちません.
diff --git a/ChangeLog b/ChangeLog
index 78867f67d9..19dbbd025e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,2996 +1,20038 @@
-Tue Dec 24 15:20:58 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Oct 27 20:20:14 2014 NAKAMURA Usaku <usa@ruby-lang.org>
- * version 0.99.4-961224
+ * lib/rexml/entity.rb: keep the entity size within the limitation.
+ reported by Willis Vandevanter <will@silentrobots.com> and
+ patched by nahi.
- * configure.in: charunsignedɤå
+Sun Oct 26 03:31:46 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * regex.c (SIGN_EXTEND_CHAR): __CHAR_UNSIGNED__ˤб
+ * vm_method.c (rb_method_entry_make): warn redefinition only for
+ already defined methods, but not for undefined methods.
+ [ruby-dev:48691] [Bug #10421]
- * pack.c (pack_unpack): Ūsigned charꡥ
+Sun Oct 26 03:21:30 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 23 14:41:23 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * class.c (unknown_keyword_error): delete expected keywords
+ directly from raw table, so that the given block is not called.
+ [ruby-core:65837] [Bug #10413]
- * ruby.c (load_file): ɸϤΥץȤǰեȤ
- ʤ褦
+Wed Oct 22 23:02:49 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
- * object.c (f_integer): `0x', `0'ʤɤbase᤹褦ˡ
+ * ext/openssl/lib/openssl/ssl.rb (DEFAULT_PARAMS): override
+ options even if OpenSSL::SSL::OP_NO_SSLv3 is not defined.
+ this is pointed out by Stephen Touset. [ruby-core:65711] [Bug #9424]
-Fri Dec 20 01:44:39 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Oct 22 23:02:49 2014 Martin Bosslet <Martin.Bosslet@gmail.com>
- * Makefile.in (flock.o): flockб
+ * test/openssl/test_ssl.rb: Reuse TLS default options from
+ OpenSSL::SSL::SSLContext::DEFAULT_PARAMS.
-Thu Dec 19 20:13:32 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Oct 22 23:02:49 2014 Martin Bosslet <Martin.Bosslet@gmail.com>
- * version 0.99.4-961219
+ * lib/openssl/ssl.rb: Explicitly whitelist the default
+ SSL/TLS ciphers. Forbid SSLv2 and SSLv3, disable
+ compression by default.
+ Reported by Jeff Hodges.
+ [ruby-core:59829] [Bug #9424]
-Wed Dec 18 00:06:48 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sun Oct 19 03:22:53 2014 Kazuki Tsujimoto <kazuki@callcc.net>
- * glob.c (glob_filename): strrchrޥξб
+ * vm_core.h, vm.c, proc.c: fix GC mark miss on bindings.
+ [ruby-dev:48616] [Bug #10368]
- * configure.in: <sys/select.h>å
+ * test/ruby/test_eval.rb: add a test code.
- * ext/kconv/kconv.c: 1.62١
+Sun Oct 19 03:13:38 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/kconv/kconv.c: Kconv⥸塼
+ * parse.y (parser_here_document): do not append already appended
+ and disposed code fragment. [ruby-dev:48647] [Bug #10392]
- * string.c (str_substr): lenʸĹб
+Thu Oct 16 22:10:11 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (iterator): $bar do .. endפʤɤϵʤ褦
+ * ext/stringio/stringio.c (strio_write): ASCII-8BIT StringIO
+ should be writable any encoding strings, without conversion.
+ [ruby-core:65240] [Bug #10285]
- * parse.y (iterator): FID(foo!,foo?)doΥƥ졼ˤǤ롥
+Thu Oct 16 22:06:03 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * missing/flock.c (flock): lockf()Ȥä
+ * vm_eval.c (eval_string_with_cref): fix super from eval with
+ scope. set klass in the current control frame to the class of
+ the receiver in the context to be evaluated, this class/module
+ must match the actual receiver to call super.
+ [ruby-core:65122] [Bug #10263]
- * file.c (file_flock): flock
+Thu Oct 16 00:30:30 2014 Tanaka Akira <akr@fsij.org>
-Tue Dec 17 12:13:38 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/find.rb (Find.find): Call to_path for arguments to obtain
+ strings.
+ [ruby-core:63713] [Bug #10035] Reported by Herwin.
- * version 0.99.4-961217
+Thu Oct 16 00:20:12 2014 Eric Wong <e@80x24.org>
-Fri Dec 13 02:05:03 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * object.c (rb_class_real): do not dereference 0 VALUE
- * configure.in: RUBYLIBΥȤ(@mix/awk offline)
+ * test/ruby/test_module.rb (test_inspect_segfault):
+ Test case and bug report by Thomas Stratmann.
+ [ruby-core:65214] [Bug #10282]
- * dln.c: AIXб(@mix/awk offline)
+Thu Oct 16 00:10:45 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (thread_schedule): critical sectionǤŪʥƥ
- ȥåϵʤȤޤ
+ * signal.c (rb_f_kill): get rid of deadlock as unhandled and
+ discarded signals do not make interrupt_cond signaled.
+ based on the patch by Kazuki Tsujimoto at [ruby-dev:48606].
+ [Bug #9820]
- * re.c (reg_search): match˼Ԥ$~nilˡ
+Thu Oct 16 00:10:45 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * re.c (reg_search): match褦
+ * signal.c (rb_f_kill): should not ignore signal unless the
+ default handler is registered. [ruby-dev:48592] [Bug #9820]
-Thu Dec 12 17:03:30 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Oct 15 23:58:13 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
- * numeric.c (flo_to_s): 2.0.to_s -> 2.0
+ merge r47598 partially. extracted commits are as follows. [Bug #9728]
+ https://github.com/k-takata/Onigmo/commit/15ddec6d18e27fdc1988236764e766fd5892ecf5
- * eval.c (thread_save_context): $_, $~thread¸
+Wed Oct 15 23:50:33 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
- * eval.c (thread_kill): main threadǤexit(0)
+ * lib/fileutils.rb: handle ENOENT error with symlink targeted to
+ non-exists file. [ruby-dev:45933] [Bug #6716]
- * string.c (str_split_method): ְä̤֤Ƥ
+Wed Oct 15 23:25:24 2014 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Dec 12 15:32:48 1996 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+ * configure.in: NetBSD's ksh, used by configure, needs escapes.
- * dir.c: CYGWIN32б
+Wed Oct 15 23:13:43 2014 Eric Wong <e@80x24.org>
- * ext/socket/socket.c: CYGWIN32б
+ * array.c (ary_recycle_hash): add RB_GC_GUARD
+ (rb_ary_diff): remove volatile
+ [Bug #10369]
- * io.c: CYGWIN32б
+Wed Oct 15 23:10:07 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Dec 12 14:43:51 1996 Jun Kuroda <j_kuro@pluto.ai.kutech.ac.jp>
+ * dir.c (dir_s_aref): fix rdoc. `Dir.glob` allows an array but
+ `Dir[]` not. the former accepts an optional parameter `flags`,
+ while the latter accepts arbitrary number of arguments but no
+ `flags`. [ruby-core:65265] [Bug #10294]
- * lib/tk.rb: wish4.2õ˴ޤ
+Wed Oct 15 23:08:02 2014 Rei Odaira <Rei.Odaira@gmail.com>
- * config.guess: JCCб
+ * configure.in: Fix typo. [Bug #9914]
-Thu Dec 12 00:41:17 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Oct 15 22:46:52 2014 NAKAMURA Usaku <usa@ruby-lang.org>
- * version 0.99.4-961212
+ * error.c: update exception tree. [DOC]
+ reported by @hemge via twitter.
- * parse.y (parse_string): """..."""ϤϤ̵Ȥˤ
+Wed Sep 24 02:30:55 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (parse_regx): %r|...|terminator \ ǥפǤ
- 褦
+ * parse.y (parse_ident): just after a label, new expression should
+ start, cannot be a modifier. [ruby-core:65211] [Bug #10279]
- * signal.c (posix_signal): sigactionȤsignal
+Wed Sep 24 02:21:41 2014 NAKAMURA Usaku <usa@ruby-lang.org>
- * configure.in: posix signal/bsd signalθ
+ * win32/Makefile.sub (VCSUP): nothing to do if this worktree is not
+ under any VCS (it means that the worktree may be from the release
+ package).
-Wed Dec 11 17:47:35 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Sep 24 02:06:33 2014 Tanaka Akira <akr@fsij.org>
- * eval.c (thread_schedule): critical sectionǤϥƥȥ
- ʤ褦
+ * test/ruby/test_time_tz.rb: Fix test error with tzdata-2014g.
+ [ruby-core:65058] [Bug #10245] Reported by Vit Ondruch.
- * lib/thread.rb: SharedMutex饹
+Wed Sep 24 02:06:33 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
- * lib/jcode.rb: String#scanȤ褦
+ * test/minitest/test_minitest_unit.rb: removed obsoleted condition
+ for Ruby 1.8.
+ * test/ruby/test_time_tz.rb: ditto.
-Tue Dec 10 12:21:28 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Sep 24 01:43:13 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
- * version 0.99.3-961210
+ * version.h (RUBY_VERSION): bump RUBY_VERSION to 2.1.4.
- * string.c (str_split_method): ɽ()ޤ˥Х
+Fri Sep 19 00:58:34 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
- * lib/jcode.rb: äȤޤˤʤä
+ * version.h (RUBY_VERSION): bump RUBY_VERSION to 2.1.3.
- * string.c (tr_setup_table): ִʸû(2ʸ)ΤȤΥХ
+Mon Sep 15 23:12:47 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 9 11:38:04 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * signal.c (check_stack_overflow): drop the last tag too close to
+ the fault page, to get rid of stack overflow deadlock.
+ [Bug #9971]
- * string.c (str_scan): ʸΥޥåԤƥ졼ȤƤư
- 
+Mon Sep 15 22:34:39 2014 Natalie Weizenbaum <nweiz@google.com>
- * regex.c (re_copy_registers): allocatedƤʤä
+ * ext/pathname/lib/pathname.rb (SAME_PATHS):
+ Pathname#relative_path_from uses String#casecmp to compare strings
+ on case-insensitive filesystem platforms (e.g., Windows). This can
+ return nil for strings with different encodings, and the code
+ previously assumed that it always returned a Fixnum. [Fix GH-713]
- * re.c (match_to_s): $~ʸ
+Mon Sep 15 22:31:33 2014 Sho Hashimoto <sho.hsmt@gmail.com>
- * re.c (match_to_a): $~󲽤Ǥ褦
+ * ext/fiddle/lib/fiddle/import.rb (Fiddle::Importer#sizeof): fix typo,
+ SIZEOF_LONG_LON. [Fix GH-714]
- * re.c (match_getter): 쥸Ƥʤä
+Mon Sep 15 11:08:23 2014 Shota Fukumori <her@sorah.jp>
-Thu Dec 5 11:06:10 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/mkmf.rb (configuration): Make CXXFLAGS customizable.
+ Patch by Kohei Suzuki (eagletmt). [Fixes GH-492]
- * string.c (str_split_method): ޥåʤä̤϶ʸ
- push٤ǤϤʤ
+Mon Sep 15 01:06:35 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (str_succ): ե٥åȤޤޤʤʸб
+ * lib/mkmf.rb (MakeMakefile#pkg_config): append --cflags to also
+ $CXXFLAGS, as they are often used by C++ compiler.
+ [ruby-core:54532] [Bug #8315]
-Wed Dec 4 10:48:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Sep 15 00:02:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * version 0.99.3-961204
+ * lib/csv.rb (CSV#<<): honor explicitly given encoding. based on
+ the patch by DAISUKE TANIWAKI <daisuketaniwaki AT gmail.com> at
+ [ruby-core:62113]. [Bug #9766]
- * io.c (io_binmode): DJGPPǤbinmodeб
+Wed Sep 10 23:36:38 2014 Koichi Sasada <ko1@atdot.net>
- * sprintf.c (f_sprintf): intϰϤοͤľsprintfѴ
+ * test/ruby/test_object.rb: extend timeout.
- * sprintf.c (f_sprintf): "%02s"ʤ
+Wed Sep 10 23:36:38 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * re.c (reg_search): indexSEGV
+ * object.c (rb_obj_copy_ivar): allocate no memory for empty
+ instance variables. [ruby-core:64700] [Bug #10191]
-Tue Dec 3 10:09:36 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Sep 10 23:36:38 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * version 0.99.3-961203
+ * object.c (rb_obj_copy_ivar): extract function to copy instance
+ variables only for T_OBJECT from init_copy.
- * ext/extmk.rb.in (install): INSTALL_DATAINSTALLѹ
+Wed Sep 10 23:14:42 2014 NARUSE, Yui <naruse@ruby-lang.org>
- * dln.c: hpuxб
+ merge r46831 partially. extracted commits are as follows. [Bug #9344]
+ https://github.com/k-takata/Onigmo/commit/bdfc1997aa15b6baddaf9a482c6610b32504bd86
- * string.c (str_aset_method): ͤޤϰϤǤ㳰򵯤ʤ
+ * regcomp.c: Merge Onigmo 5.14.1 25a8a69fc05ae3b56a09.
+ this includes Support for Unicode 7.0 [Bug #9092].
- * array.c (ary_replace): ͤޤϰϤǤ㳰򵯤ʤ
+Wed Sep 10 22:58:25 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * array.c (beg_len): beg==endλĹ0
+ * common.mk (Doxyfile): revert r43888, not to require preinstalled
+ ruby. [ruby-core:64488] [Bug #10161]
-Mon Dec 2 14:07:12 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Sep 10 03:29:48 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in: HP shlб
+ * io.c (io_close): ignore only "closed stream" IOError and
+ NoMethodError, do not swallow other exceptions at the end of
+ block. [ruby-core:64463] [Bug #10153]
- * string.c (str_upto): beg > endλ̵¥롼פΤߤ᤿
+Wed Sep 10 03:17:13 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * range.c (range_each): String#upto줿б
+ * enc/trans/euckr-tbl.rb (EUCKR_TO_UCS_TBL): add missing euro and
+ registered signs. [ruby-core:64452] [Bug #10149]
- * string.c (str_split_method): "ABC".split(/(B)/)ư
+Wed Sep 10 03:01:31 2014 Eric Wong <e@80x24.org>
-Sat Nov 30 01:43:52 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * time.c (time_timespec): fix tv_nsec overflow
+ [Bug #10144]
- * eval.c (rb_eval): undefSEGV
+Wed Sep 10 02:51:38 2014 Koichi Sasada <ko1@atdot.net>
-Fri Nov 29 12:17:59 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * iseq.c (rb_iseq_clone): Should not insert write barrier from
+ non-RVALUE data (to non-RVALUE data, of course).
- * sample/ruby-mode.el (ruby-parse-region): %Q#..#ʤɤб
- ڤʸ黻ҤǹˤˤбǤʤä
+ Ruby 2.1 also has a same problem.
- * re.c (reg_raise): 㳰Ǥ⥹å򥨥
+Wed Sep 10 02:33:08 2014 Koichi Sasada <ko1@atdot.net>
- * re.c (reg_inspect): å򥨥
+ * parse.y (setup_fake_str): fake strings should not set class by
+ RBASIC_SET_CLASS() because it insert write barriers to fake
+ (non-RVALUE) structure.
- * parse.y (parse_string): `%[QqXxRr](.)..\1'ʤʸ(ƥ
- )
+ It can cause unexpected behaviour.
- * parse.y (parse_qstring): '''...'''η
+Fri Sep 5 17:01:38 2014 Zachary Scott <e@zzak.io>
- * ext/dbm/dbm.c (Init_dbm): Ҹkey?,value?ɲ
+ * lib/rdoc/generator/template/darkfish/js/jquery.js: Backport
+ rdoc/rdoc@74f60fcb04fee1778fe2694d1a0ea6513f8e67b7
- * ext/dbm/dbm.c (Init_dbm): includes->include?
+Sat Sep 6 00:57:07 2014 Eric Wong <e@80x24.org>
- * hash.c (Init_Hash): Ҹkey?,value?,include?ɲ
+ * ext/zlib/zlib.c (gzfile_reset): preserve ZSTREAM_FLAG_GZFILE
+ [Bug #10101]
- * eval.c (rb_eval): else᤬¹Ԥʤ()
+ * test/zlib/test_zlib.rb (test_rewind): test each_byte
- * string.c (str_sub_iter_s): ƥ졼֥åǥޥåԤ
- Ȱ֤(̵¥롼פ)
+Sat Sep 6 00:47:32 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (str_resize): len0λsizeĴԤʤä
+ * configure.in (rb_cv_broken_backtrace): exit with failure
+ normally, no needs to abort. [ruby-core:63678] [Bug #10008]
-Thu Nov 28 00:59:54 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Sep 6 00:05:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * version 0.99.3-961128
+ * include/ruby/win32.h, win32/win32.c (rb_w32_inet_pton): add a
+ wrapper function for inet_pton minimum supported client is
+ Vista, as well as inet_ntop.
- * parse.y (parse_string): 3-quote styleʸ(:"""abc"d"e""")
+Sat Sep 6 00:05:02 2014 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * configure.in (EXTSTATIC): extŪ˥󥯤ˤrubydll
- Ȥ褦
+ * ext/socket/raddrinfo.c (rb_getaddrinfo): second argument of
+ MEMZERO is type. Coverity Scan found this bug.
- * io.c (Init_IO): getsΰְäƤ
+Sat Sep 6 00:05:02 2014 Tanaka Akira <akr@fsij.org>
- * string.c (str_each_line): RSŪ˻Ǥ褦
+ * ext/socket/raddrinfo.c (numeric_getaddrinfo): Use xcalloc.
+ Suggested by Eric Wong.
+ https://bugs.ruby-lang.org/issues/9525#note-14
-Wed Nov 27 12:37:46 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Sep 6 00:05:02 2014 Tanaka Akira <akr@fsij.org>
- * version 0.99.3-961127
+ * ext/socket: Bypass getaddrinfo() if node and serv are numeric.
+ Reporeted by Naotoshi Seo. [ruby-core:60801] [Bug #9525]
- * eval.c (rb_eval): iver defined? selfꤹΤ˺줿
+ * ext/socket/extconf.rb: Detect struct sockaddr_in6.sin6_len.
- * io.c: getsRSŪ˻Ǥ褦
+ * ext/socket/sockport.h (SET_SIN6_LEN): New macro.
+ (INIT_SOCKADDR_IN6): Ditto.
- * ext/extmk.rb.in (install): static link˼
+ * ext/socket/rubysocket.h (struct rb_addrinfo): Add
+ allocated_by_malloc field.
-Tue Nov 26 10:33:04 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/socket/raddrinfo.c (numeric_getaddrinfo): New function.
+ (rb_getaddrinfo): Call numeric_getaddrinfo at first.
+ (rb_freeaddrinfo): Free struct addrinfo properly when it is
+ allocated by numeric_getaddrinfo.
- * version 0.99.3-961126
+Sat Sep 6 00:05:02 2014 Tanaka Akira <akr@fsij.org>
- * string.c (str_sub_s): ִʸĹְäƤ
+ * ext/socket: Wrap struct addrinfo by struct rb_addrinfo.
-Mon Nov 25 09:11:22 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Thu Sep 4 00:31:23 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * numeric.c (fix_rshift): 32ʾαեȤ0֤褦(C
- rshift(x>>(y%32))֤Ƥ)
+ * ext/thread/thread.c (get_array): check instance variables are
+ initialized properly. [ruby-core:63826][Bug #10062]
- * string.c (str_gsub): ִԤʤ礬ä
+Thu Sep 4 00:29:10 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (str_resize): ɬפʻrealloc
+ * io.c (rb_io_initialize): [DOC] fix rdoc of append mode. it does
+ not move the pointer at open. [ruby-core:63747] [Bug #10039]
-Thu Nov 21 04:13:21 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Thu Sep 4 00:23:15 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in (EXTSTATIC): --with-static-linked-extƤΥ⥸塼
- Ū󥯤褦
+ * sprintf.c (GETASTER): should not use the numbered argument to be
+ formatted, raise ArgumentError instead.
+ [ruby-dev:48330] [Bug #9982]
- * pack.c (pack_unpack): βԤʤˤå򥹥
- פ褦
+Thu Sep 4 00:21:05 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
-Wed Nov 20 96 21:42:51 1996 Yasuo OHBA <jammy@shljapan.co.jp>
+ * test/openssl/test_pkey_rsa.rb (OpenSSL#test_sign_verify_memory_leak):
+ added timeout into testcase for low performance environment.
+ [Bug #9984][ruby-core:63367]
- * configure.in: freebsdб
+Tue Sep 2 02:21:58 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Nov 20 10:24:24 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * hash.c (env_aset, env_has_key, env_assoc, env_has_value),
+ (env_rassoc, env_key): prohibit tainted strings if $SAFE is
+ non-zero. [Bug #9976]
- * ext/extmk.rb.in (install): ̾ѤLDFLAGSȥʥߥå
- ѤDLDFALGSʬΥ
+Tue Sep 2 02:08:12 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/extmk.rb.in (install): ѥΤŪ
- ΥꥹȤɲä
+ * signal.c (rb_f_kill): directly enqueue an ignored signal to self,
+ except for SIGSEGV and SIGBUS. [ruby-dev:48203] [Bug #9820]
- * eval.c (f_missing): ֥ȤʸɽĹХåե
- ٤Ƥ
+Sun Aug 31 01:13:21 2014 Koichi Sasada <ko1@atdot.net>
- * process.c (proc_exec_v): fork㳰ȯƤϤʤ
+ * gc.c: change full GC timing to keep lower memory usage.
-Tue Nov 19 13:28:15 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ Extend heap only at
+ (1) after major GC
+ or
+ (2) after several (two times, at current) minor GC
- * version 0.99.3-961119
+ Details in https://bugs.ruby-lang.org/issues/9607#note-9
+ [Bug #9607]
- * eval.c (mod_method_defined): Module#method_defined? ɲ
+Sun Aug 31 01:07:05 2014 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * parse.y (call_args): ͣΥޥɥǤΥХ(
- ͤŸƤޤ)
+ * ext/win32ole/win32ole.c (ole_create_dcom): use the converted
+ result if the argument can be converted to a string, to get rid
+ of invalid access. Thanks to nobu. [ruby-dev:48467] [Bug #10127]
-Mon Nov 18 13:28:18 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sun Aug 31 00:54:47 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (str_sub): Ԥnil֤Ƥ
+ * process.c (open): use UTF-8 version function to support
+ non-ascii path properly. [ruby-core:63185] [Bug #9946]
- * string.c (str_split_method): ϰ֤ưƤʤä
+Tue Aug 26 00:08:40 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/socket.c (sock_s_getservbyaname): ޤְäƤ
+ * configure.in (RUBY_SETJMP_TYPE): check for setjmp type after
+ CCDLFLAGS is appended to CFLAGS, since __builtin_setjmp can be
+ affected. [ruby-core:62469] [Bug #9818]
- * version 0.99.3-961118
+Tue Aug 26 00:07:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (str_sub_s): ʸִΤߤ᤿
+ * configure.in: get rid of __builtin_setjmp/__builtin_longjmp on
+ x64-mingw, which causes SEGV with callcc.
+ [ruby-core:61887] [Bug #9710]
- * pack.c (encodes): ΰ賰򥢥Ƥ
+Tue Aug 26 00:06:05 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 15 17:10:35 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * configure.in (ac_cv_func___builtin_setjmp): should not skip
+ flags restoration in RUBY_WERROR_FLAG by `break`.
+ [ruby-dev:48086] [Bug #9698]
- * bignum.c (big_divmod): Bignumξб˺
+Tue Aug 26 00:02:51 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * sample/ruby-mode.el (ruby-expr-beg): word?ؤбԴ
+ * configure.in (ac_cv_func___builtin_setjmp): __builtin_longjmp()
+ in Apple LLVM 5.1 (LLVM 3.4svn) uses `void**`, not `jmp_buf`.
+ [Bug #9692]
-Wed Nov 13 15:42:40 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Tue Aug 26 00:02:51 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (str_tr_s_bang): tr_strԤƤʤä
+ * configure.in (ac_cv_func___builtin_setjmp): gcc 4.9 disallows a
+ variable as the second argument of __builtin_longjmp().
+ [ruby-core:61800] [Bug #9692]
- * eval.c (rb_eval): autoload饹Υå
+Mon Aug 25 00:36:56 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (f_sub): subsub!ƱưˤʤäƤ
+ * parse.y (parser_yylex): fix invalid char in eval, should raise
+ an syntax error too, as well as directly coded.
+ [ruby-core:64243] [Bug #10117]
- * eval.c (thread_sleep): stopsleepʬΥ
+Mon Aug 25 00:26:12 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Nov 11 13:53:19 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * parse.y (parser_yyerror): preserve source code encoding in
+ syntax error messages. [ruby-core:64228] [Bug #10114]
- * version 0.99.3-961111
+Sat Aug 23 02:39:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * numeric.c (fix_step): to, stepʳξб
+ * vm_insnhelper.c (vm_call_method): unusable super class should cause
+ method missing when BasicObject is refined but not been using.
+ [ruby-core:64166] [Bug #10106]
- * eval.c (rb_call): dynamic vardynamic scopingˤʤäƤ(
- Ϥޤ)
+Sat Aug 23 02:22:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (str_chop_bang): Ĺ0ʸchopǡΰ賰Υ
- ȯƤ
+ * string.c (rb_str_count): fix wrong single-byte optimization.
+ 7bit ascii can be a trailing byte in Shift_JIS.
+ [ruby-dev:48442] [Bug #10078]
- * parse.y (yyerror): Ƥΰ賰򥢥Ƥ
+Thu Aug 21 01:44:46 2014 Tanaka Akira <akr@fsij.org>
-Fri Nov 8 11:54:46 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (mark_current_machine_context): Call SET_STACK_END.
+ This reverts a hunk of r40703 by ko1.
+ This fixes [ruby-dev:48098] [Bug #9717].
- * eval.c (thread_yield): scopeheap˥ԡ
+Thu Aug 21 01:41:09 2014 Tanaka Akira <akr@fsij.org>
-Thu Nov 7 09:56:53 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/time.rb (Time.parse): [DOC] Fix an example in the documentation
+ to use EST.
+ Reported by Marcus Stollsteimer.
+ [ruby-core:60778] [Bug #9521] and [ruby-core:61718] [Bug #9682]
- * numeric.c (num_coerce): ȤꤢξդFloatѴ뤳Ȥ
+Thu Aug 21 01:41:09 2014 Zachary Scott <e@zzak.io>
-Wed Nov 6 10:45:13 1996 Yasuo OHBA <jammy@shljapan.co.jp>
+ * lib/time.rb: [DOC] Fix timezone in example of Time.parse [Bug #9521]
+ Based on patch by @stomar
- * lib/parsearg.rb: 2ѹ
+Tue Aug 19 23:31:48 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
-Tue Nov 5 14:21:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ merge r46831 partially. extracted commits are as follows.
+ https://github.com/k-takata/Onigmo/commit/b9fba1dc63ccb42a86e934011b468e6022fabb74
+ https://github.com/k-takata/Onigmo/commit/c1fc76b9bd463948ffc5058bc352bf93732f0314
+ https://github.com/k-takata/Onigmo/commit/a0efc0a200f7108ca3d5ac3039c8f952e0051619
+ https://github.com/k-takata/Onigmo/commit/c7cda4ed5676167b0d01bb5555724f6164fbdb13
+ [Bug #8716]
- * version 0.99.3-961105
+ * include/ruby/oniguruma.h (ONIG_MAX_CAPTURE_GROUP_NUM,
+ ONIGERR_TOO_MANY_CAPTURE_GROUPS): add cheking the number of capture
+ groups.
-Sat Nov 2 01:11:40 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * regerror.c (onig_error_code_to_format): ditto.
- * bignum.c (big_pow): typo (dy -> dx)
+ * regparse.c (scan_env_add_mem_entry): ditto.
- * bignum.c (big_divmod): ΤʤfloatѴƤߤ
+ * regexec.c (onig_region_copy, match_at): fix: segmation fault occurs
+ when many groups are used.
- * numeric.c (fix_lshift): ΥХ(ˤʤäƤ)
+Mon Aug 18 23:38:21 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * bignum.c (big_pow): ̵̤floatؤѴʤ
+ * encoding.c (enc_find): [DOC] never accepted a symbol.
+ [ruby-dev:48308] [Bug #9966]
- * math.c (math_atan2): typo(x -> y)
+Mon Aug 18 23:22:03 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 1 15:30:59 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * string.c (rb_str_resize): update capa only when buffer get
+ reallocated.
+ http://d.hatena.ne.jp/nagachika/20140613/ruby_trunk_changes_46413_46420#r46413
- * ext/socket/socket.c (sock_gethostname): gethostnameʤˤ
- unameȤäƥۥ̾
+Mon Aug 18 23:22:03 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/etc/etc.c (etc_getlogin): getloginNULL֤ƤĶѿ
- Ĵ٤褦
+ * string.c (rb_str_resize): should consider the capacity instead
+ of the old length, as pointed out by nagachika.
- * object.c (krn_clone): ֥ȤΥե饰⥳ԡ
+Mon Aug 18 23:22:03 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * hash.c (rb_cmp): ϥåӤ`=='Ǥʤ`eql?'ѹ
+ * file.c (expand_path): shrink expanded path which no longer needs
+ rooms to append. [ruby-core:63114] [Bug #9934]
- * math.c (Need_Float): Float()ȤäѴ
+Mon Aug 11 23:55:32 2014 Mark Lorenz <mlorenz@covermymeds.com>
- * compar.c (cmp_gt): αդ֤ͤ̾ĤĤäƤ
+ * lib/erb.rb (result): [DOC] no longer accepts a Proc, as
+ Kernel.eval does not. [fix GH-619]
-Thu Oct 31 12:55:51 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Aug 11 23:38:20 2014 Tanaka Akira <akr@fsij.org>
- * version 0.99.3-961031
+ * io.c (rb_io_autoclose_p): Don't raise on frozen IO.
- * numeric.c (Init_Numeric): typo
+Mon Aug 11 23:38:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (error_print): Ĺtrace backά
+ * io.c (rb_io_fileno, rb_io_inspect): non-modification does not
+ error on frozen IO. [ruby-dev:48241] [Bug #9865]
- * regex.c (re_compile_pattern): Ѥrangeб
+Mon Aug 11 22:34:47 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Oct 30 03:03:18 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * configure.in (posix_fadvise): disable use of posix_fadvise
+ itself on 32-bit AIX. [ruby-core:62968] [Bug #9914]
- * version 0.99.3-961030
+Mon Aug 11 22:34:47 2014 <kanemoto@ruby-lang.org>
- * io.c (f_ungetc): ؿɲ
+ * io.c (rb_io_advise): AIX currently does not support a 32-bit call to
+ posix_fadvise() if _LARGE_FILES is defined. Patch by Rei Odaira.
+ [ruby-core:62968] [Bug #9914]
- * eval.c (dyna_var_asgn): return˺
+Mon Aug 11 22:14:28 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Oct 29 10:05:28 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * vm_insnhelper.c (vm_callee_setup_keyword_arg): adjust VM stack
+ pointer to get rid of overwriting splat arguments by arguments
+ for `to_hash` conversion. [ruby-core:63593] [Bug #10016]
- * string.c (f_split): ؿsplitɲ
+Fri Aug 8 23:36:01 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (rb_call): ͥȤ¦Υ饹/⥸塼򻲾
- Ǥ褦
+ * ext/stringio/stringio.c (strio_write): use rb_str_append to
+ reuse coderange bits other than ASCII-8BIT, and keep
+ taintedness. [ruby-dev:48118] [Bug #9769]
-Mon Oct 28 09:51:03 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Aug 4 01:29:57 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (str_sub): offsetʸˤΥå
+ * hash.c (env_shift): fix memory leak on Windows, free environment
+ strings block always. [ruby-dev:48332] [Bug #9983]
- * regex.c (re_match): Ƥ쥸ο1¿ä
+Mon Aug 4 01:26:46 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * io.c (io_gets): $/ = ""ưperl˹碌(awkȤϤäȰ
- 餷)
+ * hash.c (env_select): fix memory leak and crash on Windows, make
+ keys array first instead of iterating on environ directly.
+ [ruby-dev:48325] [Bug #9978]
- * io.c (io_gets): $/ = nilλ®
+Mon Aug 4 01:24:09 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (str_split_method): ̤null˥ޥåˤ̵뤷
- ʤ褦
+ * hash.c (ruby_setenv): fix memory leak on Windows, free
+ environment strings block after check for the size.
+ [ruby-dev:48323] [Bug #9977]
- * string.c (str_split_method): ̤˥ޥåʬlimitο˴ޤ
- ʤ褦ˡ
+Mon Aug 4 01:11:07 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * numeric.c (num_coerce_bin): coerceѹ2Ǥ
- [x,y]֤褦
+ * re.c (match_aref, rb_reg_regsub): consider encoding of captured
+ names, encoding-incompatible should not match.
+ [ruby-dev:48278] [Bug #9903]
- * sample/ruby-mode.el (ruby-calculate-indent): "do |aa|"б
-
+Mon Aug 4 00:52:42 2014 Koichi Sasada <ko1@atdot.net>
-Sat Oct 26 01:43:51 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * vm_eval.c (rb_catch_protect): fix same problem of [Bug #9961].
- * ext/marshal/marshal.c (w_object): ӥȥ󥯥饹Υ֥饹
- Ǥ褦
+ * vm_eval.c (rb_iterate): ditto.
- * ext/marshal/marshal.c (w_object): 桼dumpͥ
+Mon Aug 4 00:52:42 2014 Koichi Sasada <ko1@atdot.net>
- * numeric.c (flo_coerce): Float()Ȥä
+ * vm.c (rb_vm_rewind_cfp): add new function to rewind specified cfp
+ with invoking RUBY_EVENT_C_RETURN.
+ [Bug #9961]
- * numeric.c (Init_Numeric): NumericnewundefϤޤ
+ * vm_core.h: ditto.
- * ext/marshal/marshal.c (w_symbol): ܥ(ʸ)ϰ٤
- ե˽񤭽Фʤ
+ * eval.c (rb_protect): use it.
- * sample/ruby-mode.el (ruby-parse-region): if/whileҤб
- ʤʤäƤ
+ * eval.c (rb_rescue2): ditto.
- * bignum.c (Init_Bignum): Bignum.new
+ * vm_eval.c (rb_iterate): ditto.
- * eval.c (rb_eval): ɾ˥ե̾ȹֹ
+ * test/ruby/test_settracefunc.rb: add a test.
- * numeric.c (flo_div): typo
+ * vm_core.h (rb_vm_rewind_cfp): add the prototype declaration.
- * sample/ruby-mode.el (ruby-parse-region): def /, def `б
+Sun Aug 3 00:06:10 2014 Charlie Somerville <charliesome@ruby-lang.org>
-Fri Oct 25 09:26:29 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * node.c (dump_node): handle nd_value == (NODE *)-1 to mean this
+ keyword argument is required
- * sample/ruby-mode.el (ruby-calculate-indent): "do |aa|"б
+Thu Jul 31 01:56:11 2014 Koichi Sasada <ko1@atdot.net>
- * array.c (ary_aset): indexfixnumξäȹ®
+ * compile.c (rb_iseq_compile_node): put start label of block after
+ trace (b_call).
+ [Bug #9964]
- * eval.c (thread_fd_writable): 񤭹selectå
+ * test/ruby/test_settracefunc.rb: add a test.
- * array.c (ary_assoc): ̵¥롼פ
+ added assert_consistent_call_return() method check call/return
+ consistency.
- * eval.c (thread_wait_for): select顼λlinuxʳ
- ưʤä
+Thu Jul 31 01:22:43 2014 Koichi Sasada <ko1@atdot.net>
-Thu Oct 24 08:26:48 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * vm.c (invoke_block_from_c): move call/return event timing for
+ bmethod. It can invoke inconsistent call event if this call raises
+ argument error.
+ [Bug #9959]
- * eval.c (backtrace): `$@'ʸ󤫤ѹ
+ * vm_insnhelper.c (vm_call_bmethod_body): ditto.
- * eval.c (eval): eval㳰ȯ֤¸
+ * test/ruby/test_settracefunc.rb: add a test.
- * bignum.c (bigsub): ڥɤ羮Ӥμ
+Thu Jul 31 01:12:55 2014 Koichi Sasada <ko1@atdot.net>
- * re.c (reg_search): ľܻȤʤˤ`$~'åȤ褦
+ * vm_core.h: add VM_FRAME_MAGIC_RESCUE to recognize normal block or
+ rescue clause.
-Wed Oct 23 10:40:10 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * vm.c (vm_exec): use VM_FRAME_MAGIC_RESCUE on at rescue/ensure.
- * version 0.99.2-961023
+ * test/ruby/test_settracefunc.rb: should not invoke b_return at rescue
+ clause.
+ [Bug #9957]
- * ext/marshal/marshal.c (r_bytes): mallocᡤallocaȤ
+ * vm_dump.c (control_frame_dump): check VM_FRAME_MAGIC_RESCUE.
- * sample/ruby-mode.el (ruby-calculate-indent): ̤бѹ
- ()ǤϥǥȤ٥碌褦
+ * vm_dump.c (vm_stack_dump_each): ditto.
-Tue Oct 22 12:59:11 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Thu Jul 31 00:44:34 2014 Koichi Sasada <ko1@atdot.net>
- * hash.c (hash_s_new): sizeǤ褦
+ * vm_trace.c: clear and restore recursive checking thread local data
+ to avoid unexpected throw from TracePoint.
+ [Bug #9940]
- * ext/marshal/marshal.c (w_object): dump뿼¤Ǥ
-
+ * test/ruby/test_settracefunc.rb: add a test.
- * array.c (ary_s_new): sizeꤷν˺
+ * thread.c: added
+ * rb_threadptr_reset_recursive_data(rb_thread_t *th);
+ * rb_threadptr_restore_recursive_data(rb_thread_t *th, VALUE old);
- * object.c (f_float): big2dbl˺졥
+ * vm_core.h: ditto.
- * bignum.c (bigsub): 礭ζᤤBignumƱΤα黻Ƿ̤ˤʤ
- ˴ְ㤤ä
+Wed Jul 23 23:49:59 2014 Hiroshi Shirosaki <h.shirosaki@gmail.com>
- * array.c (ary_aset): ִִƱĹλƤ
- shift(memmove)ʤ褦ˡ
+ * lib/test/unit/parallel.rb: fix test-all parallel failure if a test
+ is skipped after raise.
+ DL::TestFunc#test_sinf is skipped after raise on mingw ruby.
+ But it causes Marshal.load failure due to undefined class/module
+ DL::DLError when doing test-all parallel and test-all doesn't
+ complete. We create new MiniTest::Skip object to avoid Marshal.load
+ failure.
+ [ruby-core:62133] [Bug #9767]
- * ext/marshal/marshal.c (marshal_dump): եեޥåȤ˥С
- 褦
+ * test/testunit/test_parallel.rb (TestParallel): add a test.
- * ext/marshal/marshal.c (tmpnam): linux-aout-dlnѤ
+ * test/testunit/tests_for_parallel/ptest_forth.rb: ditto.
-Mon Oct 21 08:40:20 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Jul 23 23:11:28 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
- * ext/socket/socket.c (sock_s_gethostbyname): hostent¤Τξ
- ֤
- (sock_s_gethostbyaddr): IPɥ쥹hostent¤Τ
- (sock_s_getservbyaname): getservbyname(3)
+ * test/socket/test_socket.rb: unix socket is required by test case.
-Fri Oct 18 10:37:36 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Jul 23 23:11:28 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
- * sample/ruby-mode.el (ruby-indent-to): ư襫बˤʤХ
+ * test/socket/test_addrinfo.rb: remove unused variables.
+ * test/socket/test_nonblock.rb: ditto.
+ * test/socket/test_socket.rb: ditto.
+ * test/socket/test_unix.rb: ditto.
+ * test/testunit/test_parallel.rb: ditto.
+ * test/webrick/test_filehandler.rb: ditto.
+ * test/xmlrpc/test_features.rb: ditto.
+ * test/zlib/test_zlib.rb: ditto.
- * eval.c (compile): evalǸιֹǥ顼ɽ
+Wed Jul 23 23:05:19 2014 Tanaka Akira <akr@fsij.org>
-Thu Oct 17 09:52:28 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/pathname/lib/pathname.rb (cleanpath_aggressive): make all
+ separators File::SEPARATOR from File::ALT_SEPARATOR.
+ Reported by Daniel Rikowski.
+ Fixed by Nobuyoshi Nakada. [Bug #9618]
- * eval.c (eval): evalʸˡ顼äSEGV
+ * ext/pathname/lib/pathname.rb (cleanpath_conservative): ditto.
- * lib/safe.rb: Restricted.eval¤ä롥
+Wed Jul 23 22:51:34 2014 Naohisa Goto <ngotogenome@gmail.com>
- * eval.c (error_print): Хåȥ졼νϡcaller㳰ȯ
- Ĵ꤬Ф(ʤȤ򤷤ʤɤΤ)
+ * lib/fileutils.rb (rmdir): rescue Errno::EEXIST in addition to
+ ENOTEMPTY (and ENOENT), because SUSv3 describes that "If the
+ directory is not an empty directory, rmdir() shall fail and set
+ errno to [EEXIST] or [ENOTEMPTY]" and Solaris uses EEXIST.
+ [Bug #9571] [ruby-dev:48017]
- * eval.c (make_backtrace): Хåȥ졼
+Wed Jul 23 22:43:50 2014 Tanaka Akira <akr@fsij.org>
-Wed Oct 16 12:56:22 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/resolv.rb (bind_random_port): Rescue EPERM for FreeBSD which
+ security.mac.portacl.port_high is changed.
+ See mac_portacl(4) for details.
+ Reported by Jakub Szafranski. [ruby-core:60917] [Bug #9544]
- * ruby-man-0.99.2-jp/index.html: ܸǥɥȤδ(Ĺä)
+Wed Jul 23 22:24:26 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
- * re.c (reg_regcomp): $=nilλν
+ * test/openssl/test_x509cert.rb: split assertions into algorithms.
+ CentOS 7 seems finish MD5 support
+ http://chkbuild005.hsbt.org/chkbuild/ruby-trunk/log/20140722T140010Z.fail.html.gz
- * string.c (f_chop): $_Фchop
+ * test/openssl/test_x509req.rb: ditto.
-Tue Oct 15 11:04:23 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Jul 19 01:44:34 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * version 0.99.2-961015
+ * re.c (match_aref): should not ignore name after NUL byte.
+ [ruby-dev:48275] [Bug #9902]
-Mon Oct 14 18:22:38 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sun Jul 13 23:28:41 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
- * eval.c (thread_schedule): BOWбselect-1֤˥Х(
- do .. whilecontinueƬ˥פȻפǤ
- ľäΤ ^^);;;;;
+ * test/test_timeout.rb (test_timeout): inverted test condition.
+ [Bug #8523]
- * sample/ruby-mode.el (ruby-mode-syntax-table): ?syntax"/"Ǥ
- ޤ餷
+Sun Jul 13 23:18:11 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * hash.c (rb_hash): name conflict
+ * ext/digest/digest.c (rb_digest_instance_equal): no need to call
+ `to_s` twice. [Bug #9913]
-Fri Oct 11 00:23:05 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sun Jul 13 23:18:11 2014 Benoit Daloze <eregontp@gmail.com>
- * version 0.99.2-961011
+ * ext/digest/digest.c (rb_digest_instance_equal):
+ fix #== for non-string arguments. [ruby-core:62967] [Bug #9913]
- * ext/marshal/marshal.c (w_object): ưƤʤä۴ĥ֥
- б򳰤
+ * test/digest/test_digest.rb: add test for above.
- * hash.c (rb_hash): Fixnumʸι®
+Sun Jul 13 23:10:03 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/marshal/marshal.c (w_object): ̵̤ʥǡκ(եޥ
- Ȥߴ)
+ * array.c (yield_indexed_values): extract from permute0(),
+ rpermute0(), and rcombinate0().
- * io.c (io_readline): ͤ
+Sun Jul 13 23:02:36 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/marshal/marshal.c (marshal_dumps): MSDOSб
+ * array.c (rb_ary_permutation): `p` is the array of size `r`, as
+ commented at permute0(). since `n >= r` here, buffer overflow
+ never happened, just reduce unnecessary allocation though.
- * ruby.c (load_file): MSDOSб
+Sun Jul 13 22:52:43 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Oct 9 17:46:27 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * pack.c (encodes): fix buffer overrun by tail_lf. Thanks to
+ Mamoru Tasaka and Tomas Hoger. [ruby-core:63604] [Bug #10019]
- * ext/extmk.rb.in (install): ̵̤ʥԡ򤱤
+Sun Jul 13 22:44:05 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (str_sub_method): ޥåʤäString#subͤ
- äƤ
+ * ext/thread/thread.c (undumpable): ConditionVariable and Queue
+ are not dumpable. [ruby-core:61677] [Bug #9674]
- * eval.c (obj_extend): extendobject_extendedƤ֤褦
+Fri Jul 11 23:07:09 2014 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-Tue Oct 8 00:55:38 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/matrix.rb: Fix sign for cross_product [#9499]
- * eval.c (thread_alloc): ʿѲ
+Sun Jul 6 23:16:30 2014 Masaya Tarui <tarui@ruby-lang.org>
- * eval.c (thread_schedule): joinΥХ
+ * st.c (st_foreach_check): change start point of search at check
+ from top to current. [ruby-dev:48047] [Bug #9646]
- * eval.c (thread_wait_for): selectؤγߤʤɤб
+Sun Jul 6 22:56:03 2014 Zachary Scott <e@zzak.io>
- * eval.c (thread_select): linuxselectεưб(timeoutѲ
- )
+ * lib/gserver.rb: [DOC] Fixed typo in example by @stomar [Bug #9543]
-Mon Oct 7 09:47:19 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Jul 4 00:46:03 2014 Zachary Scott <e@zzak.io>
- * version 0.99.2-961007
+ * enumerator.c: [DOC] Fix example to show Enumerator#peek behavior
+ Patch by Erik Hollembeak [Bug #9814]
- * eval.c (PUSH_BLOCK): the_class¸˺Ƥ
+Fri Jul 4 00:44:43 2014 Zachary Scott <e@zzak.io>
- * ext/dbm/dbm.c (fdbm_store): size¸ְ꤬äƤ
+ * enum.c: [DOC] Use #find in example to clarify alias by @rachellogie
+ Patch submitted via documenting-ruby/ruby#34
- * ext/socket/socket.c (s_accept): threadбƤʤä
+Fri Jul 4 00:42:57 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
-Sat Oct 5 01:32:27 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * man/ruby.1: remove deadlink. [ruby-core:62145][Bug #9773]
- * io.c (io_readchar): EOF㳰ȯ
+Fri Jul 4 00:25:16 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Oct 4 11:59:54 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * struct.c (not_a_member): extract name error and use same error
+ messages. based on the patch by Marcus Stollsteimer <sto.mar AT
+ web.de> at [ruby-core:61721]. [Bug #9684]
- * ext/marshal/marshal.c (w_object): HashObjectɬפʥϥ
- ơ֥뤬ϤƤʤä
+Thu Jul 3 01:19:50 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
- * variable.c (rb_path2class): 桼饹˼ԤƤ
+ * numeric.c (num_step_scan_args): table argument of rb_get_kwargs() is
+ array of IDs, not Symbols. [ruby-dev:48353] [Bug #9811]
- * variable.c (rb_path2class): 饹¸ߤʤΥ顼Fatal
- NameErrorء
+Thu Jul 3 01:19:50 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * range.c (range_s_new): first,lastξNumericλ顼ˤʤä
-
+ * numeric.c (num_step_scan_args): check keyword arguments and fail
+ if they conflict with positional arguments.
+ [ruby-dev:48177] [Bug #9811]
- * range.c: start->first, end->last
+Tue Jul 1 03:05:22 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Oct 2 02:02:46 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * io.c (read_all): truncate the buffer before appending read data,
+ instead of truncating before reading.
+ [ruby-core:55951] [Bug #8625]
- * file.c: DJGPPchmod,chownȤ褦(äDOSchownΤ?)
+Tue Jul 1 03:05:22 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * class.c (rb_singleton_class): ӥȥ󥯥饹extendð
- ᥽åɤɲäǤ褦
+ * io.c (io_setstrbuf, io_read): should not shorten the given buffer until
+ read succeeds. [ruby-core:55951] [Bug #8625]
- * variable.c (rb_set_class_path): 桼Υȥåץ٥륯饹
- pathꤷʤ
+Mon Jun 30 03:15:59 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (eval): 㳰RuntimeError˲Ƥ
+ * vm.c (core_hash_merge_kwd): should return the result hash, which
+ may be converted from and differ from the given argument.
+ [ruby-core:62921] [Bug #9898]
- * eval.c (eval): eval㳰ɽβ
+Mon Jun 30 03:07:22 2014 Shugo Maeda <shugo@ruby-lang.org>
- * eval.c (eval): eval_with_bindingȤΰܲ
+ * lib/net/ftp.rb (gets, readline): read lines without LF properly.
+ [ruby-core:63205] [Bug #9949]
- * eval.c (rb_eval): 饹/⥸塼椫Υ饹/
- 塼뤬ȤǤ褦
+ * test/net/ftp/test_buffered_socket.rb: related test.
-Tue Oct 1 01:40:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Jun 30 02:59:08 2014 Shugo Maeda <shugo@ruby-lang.org>
- * version 0.99.2-961001
+ * lib/net/imap.rb (body_type_1part): Gmail IMAP reports a body
+ type as "MIXED" followed immediately by params
+ [ruby-core:62864] [Bug #9885]
+ Patch by @rayners (David Raynes). [Fixes GH-622]
+ https://github.com/ruby/ruby/pull/622
- * parse.y: cur_cref2Ƥ
+Mon Jun 30 02:46:44 2014 Rei Odaira <Rei.Odaira@gmail.com>
- * signal.c (trap): SIGSEGVSIGBUSΤʤб
+ * signal.c (ruby_signal): should return either `old.sa_sigaction`
+ or `old.sa_handler`, depending on whether `SA_SIGINFO` is set in
+ `old.sa_flags`, because they may not be a union.
+ [ruby-core:62836] [Bug #9878]
- * io.c (Init_IO): פλְ㤤
+Mon Jun 30 02:36:08 2014 Eric Wong <e@80x24.org>
-Mon Sep 30 15:28:00 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * process.c (proc_getgroups, proc_setgroups): use ALLOCV_N
+ [Bug #9856]
- * version 0.99.2-960930
+Mon Jun 30 02:28:10 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * config.guess,config.sub: $host_osꤵʤ
+ * io.c (io_setstrbuf): always check if the buffer is modifiable.
+ [ruby-core:62643] [Bug #9847]
- * eval.c (rb_eval): yieldʤselfꤵƤ
+Mon Jun 30 02:25:00 2014 Tanaka Akira <akr@fsij.org>
- * eval.c (ruby_run): toplevel㳰ΥХ
-
-Mon Sep 30 09:13:26 1996 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+ * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#accept):
+ Consider Socket#accept as well as TCPServer#accept.
+ Reported by Sam Stelfox. [ruby-core:62064] [Bug #9750]
- * djgppб
+Mon Jun 30 02:18:47 2014 Eric Wong <e@80x24.org>
-Sat Sep 28 02:45:10 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * complex.c (parse_comp): replace ALLOCA_N with ALLOCV_N/ALLOCV_END
+ [Bug #9608]
+ * rational.c (read_digits): ditto
- * version 0.99.2-960928
+Mon Jun 30 02:10:34 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * sample/ruby-mode.el (ruby-beginning-of-block): ֥åƬ
- ư(ǥȤƤʤưʤ)
- (ruby-end-of-block): Ʊ
+ * vsnprintf.c (BSD_vfprintf): fix string width when precision is
+ given. as the result of `memchr` is NULL or its offset from the
+ start cannot exceed the size, the comparison was always false.
+ [ruby-core:62737] [Bug #9861]
- * eval.c (class_s_new): Class#newƥ졼ȤƸƤФ줿
- initialize⥤ƥ졼ȤƸƤФ褦
+Mon Jun 30 01:46:19 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * signal.c (sigsegv): SEGVbacktraceɽ褦
+ * ext/fiddle/extconf.rb: supply 0 to fill RUBY_LIBFFI_MODVERSION
+ with 3-digit. libffi 3.1 returns just 2-digit.
+ [ruby-core:62920] [Bug #9897]
-Fri Sep 27 09:51:07 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Jun 30 00:57:05 2014 Koichi Sasada <ko1@atdot.net>
- * version 0.99.2-960927
+ * vm.c (rb_vm_pop_cfunc_frame): added. It cares c_return event.
+ The patch base by drkaes (Stefan Kaes).
+ [Bug #9321]
- * eval.c (error_print): Τʤraiseǥåɽ
- 褦ˡ
+ * variable.c (rb_mod_const_missing): use rb_vm_pop_cfunc_frame()
+ instead of rb_frame_pop().
- * eval.c (rb_longjmp): mesgnilλRuntimeError롥
+ * vm_eval.c (raise_method_missing): ditto.
- * eval.c (f_raise): ʤб
+ * vm_eval.c (rb_iterate): ditto.
- * eval.c (thread_mark): stackˤʤǡΥɥ쥹ѴԤä
-
+ * internal.h (rb_vm_pop_cfunc_frame): add decl.
- * eval.c (Init_Thread): ߤδֳ֤1äĹ
+ * test/ruby/test_settracefunc.rb: add tests.
+ provided by drkaes (Stefan Kaes).
-Thu Sep 26 16:02:45 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * vm.c, eval.c, include/ruby/intern.h (rb_frame_pop):
+ move definition of rb_frame_pop() and deprecate it.
+ It doesn't care about `return' events.
- * eval.c (thread_schedule): ٥ڥǥ󥰤ˤʤȥե饰ꥢ
- Ƥʤä
+Sun Jun 29 01:34:06 2014 Tanaka Akira <akr@fsij.org>
- * process.c (rb_proc_exec): system/execΰʸǤä
- 硤㳰ȯ٤ä
+ * lib/webrick/utils.rb (create_listeners): Close socket objects.
- * config.sub/config.guess: Τ֤
+Sat Jun 28 16:35:51 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Sep 26 15:41:35 1996 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+ * string.c (rb_str_substr): need to reset code range for shared
+ string too, not only copied string.
+ [ruby-core:62842] [Bug #9882]
- * io.c (next_argv): -i.bakBOWDOSб
+Sat Jun 28 14:37:17 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Sep 26 01:31:43 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * parse.y (local_tbl_gen): remove local variables duplicated with
+ arguments.
+ [ruby-core:60501] [Bug #9486]
- * io.c (io_sysread): EOF㳰
+Tue Jun 24 00:21:58 2014 Koichi Sasada <ko1@atdot.net>
- * io.c (f_readline): EOF㳰ȯ褦ˡgetsϸߴΤ
- nil֤ޤޤˤ
+ * eval.c (rb_using_refinement): add write-barriers for
+ cref->nd_refinements.
- * eval.c (proc_call): lambdareturnIN_BLOCKե饰Ωä
- ޤä
+Tue Jun 24 00:14:20 2014 Tanaka Akira <akr@fsij.org>
- * eval.c (PUSH_BLOCK2): threadб뤿Blockstack˥ԡ
+ * lib/net/ftp.rb (transfercmd): Close TCP server socket even if an
+ exception occur.
-Wed Sep 25 11:54:11 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Tue Jun 24 00:06:41 2014 Hiroshi Shirosaki <h.shirosaki@gmail.com>
- * parse.y (method_call): Const::method()Ȥ褦ˤƤߤ
- ̤ϾάǤʤ
+ * thread_win32.c (rb_w32_stack_overflow_handler): use Structured
+ Exception Handling by AddVectoredExceptionHandler() for machine
+ stack overflow on mingw.
+ This would be equivalent to the handling using __try and __except
+ on mswin introduced by r43748.
- * sample/test.rb: Process.kill¸ߤΤƤƥȤԤ
+Mon Jun 23 23:56:54 2014 Eric Wong <e@80x24.org>
- * eval.c (eval_with_binding): 2Ȥbinding(ޤlambda)
- ͿȤδĶeval¹Ԥ褦ˤ
+ * signal.c (signal_exec): ignore immediate cmd for SIG_IGN
+ * signal.c (trap_handler): set cmd to true for SIG_IGN
+ * signal.c (trap): handle nil and true values for oldcmd
+ [Bug #9835]
- * eval.c (f_binding): ߤbinding֤ؿ
+Mon Jun 23 02:46:14 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c: block¤Τthe_class¸Фɲ
+ * class.c (rb_mod_init_copy): always clear instance variable,
+ constant and method tables first, regardless the source tables.
+ [ruby-dev:48182] [Bug #9813]
- * process.c (Init_process): kill,wait,waitpidProcess˰ư
+Mon Jun 23 02:36:04 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Sep 24 02:44:43 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * thread.c (thread_start_func_2): stop if forked in a sub-thread,
+ the thread has become the main thread.
+ [ruby-core:62070] [Bug #9751]
- * sample/ruby-mode.el: ꤬¿Τǰι®˴
- ̤ΥץȤä
+Mon Jun 23 01:53:18 2014 Josh Goebel <dreamer3@gmail.com>
- * lib/tk.rb (Tk.pack): ʣΥɥդpack
+ * net/protocol.rb (using_each_crlf_line): fix SMTP dot-stuffing
+ for messages not ending with a new-line.
+ [ruby-core:61441] [Bug #9627] [fix GH-616]
-Sat Sep 21 11:08:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Jun 20 00:40:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (exprs): ʸդ褦ʸˡѹޤǤϲ
- Ϣ³Ƥ
+ * thread_pthread.c (ruby_init_stack, ruby_stack_overflowed_p):
+ place get_stack above others to get stack boundary information.
+ [ruby-core:60113] [Bug #9454]
-Fri Sep 20 11:39:18 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Jun 20 00:40:06 2014 NARUSE, Yui <naruse@ruby-lang.org>
- * FailȾ̾Ĥ㳰ѹ
+ * thread_pthread.c: rlimit is only available on Linux.
+ At least r44712 breaks FreeBSD.
+ [ruby-core:60113] [Bug #9454]
- * re.c (Init_Regexp): ̾Ĥ㳰Ƴ
+Fri Jun 20 00:40:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (f_missing): Objectinspectʤ
+ * thread_pthread.c: get current main thread stack size, which may
+ be expanded than allocated size at initialization, by rlimit().
+ [ruby-core:60113] [Bug #9454]
- * object.c (inspect_i): Object#inspectloopб
+Fri Jun 20 00:20:02 2014 Hiroshi Shirosaki <h.shirosaki@gmail.com>
- * regex.c (re_search): /^$/""˥ޥåʤä
+ * configure.in: enable SSE2 on mingw. target='i386-pc-mingw32'.
+ [ruby-core:62095] [Bug #8358]
-Thu Sep 19 19:25:12 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Tue Jun 17 00:45:44 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * regex.c (re_search): /^$/Ԥ˥ޥåƤ
+ * compile.c (compile_array_): make copy a first hash not to modify
+ the argument itself. keyword splat should be non-destructive.
+ [ruby-core:62161] [Bug #9776]
-Tue Sep 17 10:28:11 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Tue Jun 17 00:37:15 2014 Bugra Barin <bugrabarin@hotmail.com>
- * version 0.99.2-960917
+ * dln.c (dln_load): use wchar version to load a library in
+ non-ascii path on Windows. based on the patch by Bugra Barin
+ <bugrabarin AT hotmail.com> in [ruby-core:61845]. [Bug #9699]
-Mon Sep 16 10:47:56 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Tue Jun 17 00:26:59 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * sample/ruby-mode.el (ruby-calculate-indent): 黻ҷ³ξ
- ʸȽΥХ
+ * process.c (obj2uid, obj2gid): now getpwnam_r() and getgrnam_r()
+ may need larger buffers than sysconf values, so retry with
+ expanding the buffer when ERANGE is returned.
+ [ruby-core:61325] [Bug #9600]
- * sample/ruby-mode.el (ruby-calculate-indent): elseʤɤμιԤ
- ǥȷ׻
+Wed Jun 11 22:58:30 2014 Eric Wong <e@80x24.org>
-Sat Sep 14 08:37:19 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (ruby_gc_set_params): simplify condition
- * version 0.99.2-960914
+Wed Jun 11 22:58:30 2014 Eric Wong <e@80x24.org>
-Fri Sep 13 08:06:03 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (ruby_gc_set_params): fix building without RGenGC
- * ext/socket/socket.c (tcpaddr): portֹntohsĤ˺
+Wed Jun 11 02:43:32 2014 Kazuki Tsujimoto <kazuki@callcc.net>
- * dln.c (link_undef): ơ֥μबְäƤ
+ * test/objspace/test_objspace.rb (TestObjSpace#test_dump_uninitialized_file):
+ remove dependency on json library.
- * bignum.c (bigadd): ȯ˷׻㤤Ƥ
+Wed Jun 11 02:43:32 2014 Scott Francis <scott.francis@shopify.com>
- * parse.y (iter_do_block): do..endǤdynamic variable
+ * ext/objspace/objspace_dump.c: Check fptr before trying to dump RFILE
+ object fd. [GH-562]
- * bignum.c (big_pow): Τʷ׻(ƱΤǤfloatѴ
- )
+ * test/objspace/test_objspace.rb: add test
-Thu Sep 12 13:11:55 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Jun 11 02:27:55 2014 Akinori MUSHA <knu@iDaemons.org>
- * variable.c (rb_set_class_path): String饹
- StringäƤȹߥ饹ˤpathϤʤ
+ * configure.in: Fix a build problem with clang and --with-opt-dir.
+ If ruby is configured with --with-opt-dir=dir when using clang
+ as compiler, a warning `clang: warning: argument unused during
+ compilation: '-I dir'` is emitted almost every time clang
+ compiles a file. Unfortunately, RUBY_CHECK_PRINTF_PREFIX takes
+ any output from the compiler as fatal error, and the check thus
+ fails due to the warning. This is an attempt to fix the problem
+ by adding a flag -Qunused-arguments to CFLAGS locally in the
+ function to suppress the warning. [ruby-dev:48062] [Bug #9658]
+ [Fixes GH-571] https://github.com/ruby/ruby/pull/571
- * parse.y (yylex): 0.10ˤʤäƤ
+Wed Jun 11 02:18:34 2014 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * parse.y (yylex): ֹ
+ * numeric.c: Fix Numeric#step with 0 unit [Bug #9575]
- * gc.c (oblist_live_obj): ƤΥ֥Ȥ֤
- ƥ졼Υ饹(ޤϥ֥饹)Υ󥹥󥹤
- each_object_of
+Wed Jun 11 00:36:05 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
- * class.c (rb_define_class_id): ̵̤ʥ饹ƤƤ
- Ȥ̤Υ饹֥Ȥ¸ߤƤ
+ * test/ruby/test_string (test_LSHIFT_neary_long_max): extend timeout.
+ this test fails on some CI environment by timeout.
-Wed Sep 11 00:56:23 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Jun 7 01:17:16 2014 Tanaka Akira <akr@fsij.org>
- * parse.y (yylex): octalθФΤ(090ϥ顼Ȥ)
+ * signal.c (check_stack_overflow): Don't use ucontext_t if ucontext.h
+ is not available.
+ Fixes build on Android (x86).
- * bignum.c (big_minus): yx礭˥顼
+Tue Jun 3 00:38:33 2014 Eric Wong <e@80x24.org>
- * parse.y (yylex): 顼ֹɽΤ
+ * class.c (rb_class_subclass_add): use xmalloc
+ * class.c (rb_module_add_to_subclasses_list): ditto
+ * class.c (rb_class_remove_from_super_subclasses): use xfree
+ * class.c (rb_class_remove_from_module_subclasses): ditto
+ [Bug #9616]
- * sample/ruby-mode.el (ruby-expr-beg): ѿ̾1ʸλư
-
+Mon Jun 2 02:19:30 2014 NAKAMURA Usaku <usa@ruby-lang.org>
- * sample/ruby-mode.el (ruby-calculate-indent): ?/ǥ롼פ
- Х
+ * win32/win32.c (rb_w32_accept, open_ifs_socket, socketpair_internal):
+ reset inherit flag of socket to avoid unintentional inheritance of
+ socket. note that the return value of SetHandleInformation() is not
+ verified intentionally because old Windows may return an error.
+ [Bug #9688] [ruby-core:61754]
- * enum.c (enum_min,enum_max): sortΤ褦˥ƥ졼ȤƤư
- 褦ˡ
+Mon Jun 2 02:12:10 2014 Eric Wong <e@80x24.org>
- * enum.c (enum_find_all): typo
+ * time.c (time_mload): freeze and preserve marshal-loaded time zone
+ * test/ruby/test_time.rb: add test for GC on loaded object
+ [Bug #9652]
-Tue Sep 10 12:07:12 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Jun 2 01:57:59 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * node.h (nd_line): NODElineflags˲ƥ֥ȥ
- 򾮤:32bit intΥޥξ硤եιԿ
- 32767ۤɽʤ
+ * vm_insnhelper.c (vm_callee_setup_arg): turn a macro into an
+ inline function.
- * st.c: hashcompareδؿФ¤Τ˥ѥå饹ŪʻȤ
- Ԥ1 table4 byte
+Mon Jun 2 01:46:43 2014 Eric Wong <e@80x24.org>
-Mon Sep 9 16:35:54 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * variable.c (rb_const_set): delete existing entry on redefinition
+ [Bug #9645]
+ * test/ruby/test_const.rb (test_redefinition): test for leak
- * file.c (file_truncate): 󶡤ʤˤ̤㳰ȯ
- ˡ
+Fri May 30 00:13:19 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (Init_Proc): Ŭڤʰ֤local-jump㳰ˡ
+ * eval.c (setup_exception): preserve errinfo across calling #to_s
+ method on the exception. [ruby-core:61091] [Bug #9568]
-Sat Sep 7 17:06:15 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Thu May 29 20:57:59 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (proc_call): ޤפåˤˤ϶ɽæ
- ͭˤ롥ǡproccall뤳Ȥϡפæ
- Фʤ¤ꡤyieldƱ̣ĤȤˤʤ롥
+ * numeric.c (ruby_num_interval_step_size): check signs and get rid
+ of implementation dependent behavior of negative division.
+ [ruby-core:61106] [Bug #9570]
-Fri Sep 6 13:30:59 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed May 28 23:47:22 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * sample/ruby-mode.el (ruby-indent-to): ǥȤѤʤ
- ϥХåեѹʤ
- (ruby-calculate-indent): ޤʸȽǤƤ顤ι
- ѡԤdefun礭ʤäι®
- (ruby-in-string-p): ʸɤȽǤؿ(
- parseʬΥ)
- (ruby-parse-region): ʸФϤ
- (ruby-beginning-of-block): ֥åƬ
- (ruby-end-of-block): ֥å(٤)
+ * configure.in (rb_cv_func___builtin_unreachable): try with an
+ external variable not only by a warning, which might not be
+ shown due to the optimization. [ruby-core:61647] [Bug #9665]
-Thu Sep 5 14:23:07 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed May 28 23:40:57 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * file.c (file_s_split): [dirname,basename]split롥
+ * ext/openssl/ossl_asn1.c (ossl_asn1_initialize): SYMID on a value
+ other than Symbol is an undefined behavior. fix up r31699.
+ [ruby-core:62142] [Bug #9771]
- * eval.c (rb_eval): evalǤͤʤ褦ˡ
- ˴ؤƤŪʥפݾڤ褦ˤʤä
+Wed May 28 23:37:32 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * st.c (rehash): ϥåηϿ21.79ˡ任ɤ
- ֤褦ˡ
+ * ext/stringio/stringio.c (strio_putc): fix for non-ascii
+ encoding, like as IO#putc. [ruby-dev:48114] [Bug #9765]
-Thu Sep 5 00:32:07 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed May 28 01:05:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (class_superclass) 饹Υѡ饹֤᥽åɡ
+ * lib/fileutils.rb (FileUtils#copy_entry): update rdoc about
+ preserve option and permissions, following r31123.
+ [ruby-core:62065] [Bug #9748]
-Wed Sep 4 16:54:56 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed May 28 00:57:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * random.c (f_rand): BignumlongϰϤۤFloatФ
- ȯǤ褦ˡ
+ * proc.c (umethod_bind): use the ancestor iclass instead of new
+ iclass to get rid of infinite recursion, if the defined module
+ is already included. [ruby-core:62014] [Bug #9721]
- * struct.c (struct_alloc): FatalǤϤʤ㳰ȯ褦(
- λѤȯ)
+Wed May 28 00:57:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * struct.c (struct_s_members): Structðۥ᥽åɤǤϤʤ
- 줿Struct饹ðۥ᥽åɤˤ
+ * proc.c (rb_method_call_with_block, umethod_bind): call with
+ IClass including the module for a module instance method.
+ [ruby-core:61936] [Bug #9721]
- * st.c (st_init_table): rubyѤ˥ѥ᥿ˤ(
- ä)
+ * vm_insnhelper.c (vm_search_super_method): allow bound
+ UnboundMethod case.
-Mon Sep 2 11:37:59 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed May 28 00:38:37 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * array.c (ary_shift): capaޤˤ礭ˤΰREALLOC
- (ary_pop): Ʊ
+ * array.c (ary_reject): may be turned into a shared array during
+ the given block. [ruby-dev:48101] [Bug #9727]
- * string.c (str_inspect): multibyte character б˥ߥ
- (str_inspect): unsigned charˤʤŸƤޤ
+Wed May 28 00:29:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (primary): `::'primary˰ư Foo::Bar.Baz顼ˤ
- ʤ褦ˡ
-
- * parse.y (primary): ڥ졼ðۥ᥽åɤǤʤ
+ * string.c (str_buf_cat): should round up the capacity by 4KiB,
+ but not number of rooms. [ruby-core:61886] [Bug #9709]
- * random.c (f_rand): max0λб
+Wed May 28 00:23:11 2014 NARUSE, Yui <naruse@ruby-lang.org>
- * io.c (io_printf): ؿƤ󥿥ץ꥿ϿƤ
- ä
+ * lib/xmlrpc/client.rb (do_rpc): don't check body length.
+ If HTTP content-encoding is used, the length may be different.
+ [Bug #8182] [ruby-core:53811]
- * file.c (file_s_basename): 2̵˥顼
+Wed May 28 00:18:29 2014 Tadayoshi Funaba <tadf@dotrb.org>
-Thu Aug 29 10:49:40 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/date/date_core.c (d_lite_cmp): should compare with #<.
- * parse.y (expr): ƥ졼οˡmethod do .. end׷
- ѤΤηͭ
+Fri May 23 00:04:13 2014 Tanaka Akira <akr@fsij.org>
- * sample/ruby-mode.el (ruby-calculate-indent): endο¿
- ˤ⥨顼򵯤ʤ褦ˡ
+ * ext/socket/socket.c (sock_s_getnameinfo): Save errno for EAI_SYSTEM.
+ Reported by Saravana kumar. [ruby-core:61820] [Bug #9697]
+ Fixed by Heesob Park. [ruby-core:61868]
-Wed Aug 28 09:41:36 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri May 23 00:04:13 2014 Tanaka Akira <akr@fsij.org>
- * numeric.c (upto,downto,step,times): оݤfixnumϰϤۤƤ
- ư褦ˡ
+ * ext/socket: Wrap struct addrinfo by struct rb_addrinfo.
-Mon Aug 26 10:04:37 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri May 23 00:04:13 2014 Tanaka Akira <akr@fsij.org>
- * missing/setenv.c (envix): typo(missing `== 0' for memcmp)
+ * ext/socket/ipsocket.c (ip_s_getaddress): Don't access freed memory.
- * dir.c (dir_foreach): foreach(dir open -> read loop -> closeޤ)
+Mon May 19 00:47:00 2014 Koichi Sasada <ko1@atdot.net>
- * io.c (io_foreach): foreach(file open -> read loop -> closeޤ)
+ * test/ruby/test_array.rb: remove useless `assert'.
- * FatalΤªǽʤĤ㳰ˡ
+Mon May 19 00:47:00 2014 Koichi Sasada <ko1@atdot.net>
-Sat Aug 24 23:56:37 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * array.c (rb_ary_modify): remember shared array owner if a shared
+ array owner is promoted and a shared array is not promoted.
- * bignum.c (bigdivmod): FIX2INT -> INT2FIX ְ㤤
+ Now, shared array is WB-unprotected so that shared arrays are not
+ promoted. All objects referred from shared array should be marked
+ correctly.
-Fri Aug 23 18:13:03 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ [ruby-core:61919] [ruby-trunk - Bug #9718]
- * regex.c (re_free_registers): allocateƤʤˤ free
- ƤϤʤ
+ * test/ruby/test_array.rb: add a test for above.
-Thu Aug 22 01:20:35 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon May 19 00:26:53 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (thread_create): ¦鶯λ줿thread
- cleanupɬפ̵
+ * parse.y (parser_yylex): only a newline after label should be
+ significant. [ruby-core:61658] [Bug #9669]
-Wed Aug 21 09:57:28 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon May 19 00:26:53 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (thread_create): threadλæФξ
- main_threadϤ褦ˡ
+ * parse.y (lex_state_e, parser_params, f_arglist, parser_yylex):
+ separate EXPR_LABELARG from EXPR_BEG and let newline significant,
+ so that required keyword argument can place at the end of
+ argument list without parentheses. [ruby-core:61658] [Bug #9669]
- * parse.y (call_args): ǽ˳̤ά᥽åɸƽФ
- 褦(: print foo bar, baz == print(foo(bar,baz)))
+Fri May 16 00:27:02 2014 James Edward Gray II <james@graysoftinc.com>
-Tue Aug 20 13:37:16 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/csv.rb: Fixed a broken regular expression that was causing
+ CSV to miss escaping some special meaning characters when used
+ in parsing.
+ Reported by David Unric
+ [ruby-core:54986] [Bug #8405]
- * eval.c (masign): ¿restư碌ƶ
- 褦ˡ
+Fri May 16 00:14:25 2014 Kohei Suzuki <eagletmt@gmail.com>
- * parse.y (arg): defined?ζ٤⤦äȶ
+ * vm_method.c (rb_method_entry_get_without_cache): me->klass is 0
+ for a method aliased in a module. [ruby-core:61636] [Bug #9663]
- * eval.c (error_print): -w㳰̾ɽ褦
+Fri May 16 00:14:25 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (rb_eval): ʸб
- (handle_rescue): ª㳰 kind_of? Ʊ
+ * vm_method.c (rb_method_entry_get_without_cache): get rid of
+ infinite recursion at aliases in a subclass and a superclass.
+ return actually defined class for other than singleton class.
+ [ruby-core:60431] [Bug #9475]
- * parse.y (primary): rescueιʸѹ(Ʊɲáʣrescue)
+Mon May 12 22:53:08 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * Fail()ΤʤŬ㳰Ȥ褦
+ * parse.y (primary): flush cmdarg flags inside left-paren in a
+ command argument, to allow parenthesed do-block as an argument
+ without arguments parentheses. [ruby-core:61950] [Bug #9726]
- * eval.c (thread_interrupt): Interrupt(non-local jump)
- main-thread褦ˡ
+Mon May 12 22:22:43 2014 Koichi Sasada <ko1@atdot.net>
- * eval.c (rb_longjmp): $! Ƥʸ󤫤㳰饹ѹ
- (rb_raise): rb_fail ̾ѹ
- (rb_interrupt): 㳰
- (rb_exit): 㳰
+ * vm.c (invoke_block_from_c): add VM_FRAME_FLAG_BMETHOD to record
+ it is bmethod frame.
- * error.c (Init_Exception): 㳰饹ο(ʸΥ֥饹)
+ * vm.c (vm_exec): invoke RUBY_EVENT_RETURN event if rollbacked frame
+ is VM_FRAME_FLAG_BMETHOD.
+ [Bug #9759]
-Mon Aug 19 19:40:52 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/ruby/test_settracefunc.rb: add a test for TracePoint/set_trace_func.
- * signal.c (trap): Ťϥɥ֤褦ˡ
+ * vm_core.h: rename rb_thread_t::passed_me to
+ rb_thread_t::passed_bmethod_me to clarify the usage.
-Wed Aug 14 00:07:18 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * vm_insnhelper.c (vm_call_bmethod_body): use renamed member.
- * eval.c (rb_trap_eval): ϥɥΤthreadfork뤳Ȥ
- ᤿
+Mon May 12 22:11:47 2014 Shota Fukumori <her@sorah.jp>
- * eval.c (thread_mark): thread $!, $@ ޡ˺
+ * vm_eval.c (eval_string_with_cref): Unify to use NIL_P.
- * ext/dbm/dbm.c (fdbm_delete): ƥ졼ȤƸƤФ줿硤
- ̵Х֥åɾ롥
+Mon May 12 22:11:47 2014 Shota Fukumori <her@sorah.jp>
- * hash.c (hash_delete): ƥ졼ȤƸƤФ줿硤Ǥ̵
- Х֥åɾ롥
+ * vm_eval.c (eval_string_with_cref): Use file path even if scope is
+ given. Related to [ruby-core:56099] [Bug #8662] and r42103.
- * array.c (ary_delete): ƥ졼ȤƸƤФ줿硤Ǥ̵
- Х֥åɾ롥
+Thu May 8 01:13:10 2014 NARUSE, Yui <naruse@ruby-lang.org>
- * eval.c (rb_interrupt): SIGINTΥǥեȤexit̤æ
- ФˡϤޤ줿֤ɽ̵Τϼ䤷Τǡ
+ * configure.in: correct pthread_setname_np's prototype on NetBSD.
+ [Bug #9586]
-Tue Aug 13 01:34:00 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Tue May 6 00:54:56 2014 Narihiro Nakamura <authornari@gmail.com>
- * eval.c (rb_exit): sub-threadǤexitstatus¸褦
- (thread_create): threadexitб
+ * gc.c (gc_after_sweep): suppress unnecessary expanding heap.
+ Tomb heap pages are freed pages here, so expanding heap is
+ not required.
- * signal.c (sighandle): SIGINTΥǥեȥϥɥexit褦
- (㳰ȯƤ)
+Mon May 5 02:35:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 㳰ΰFatalˡ
+ * ext/openssl/ossl_pkey.c (ossl_pkey_verify): as EVP_VerifyFinal()
+ finalizes only a copy of the digest context, the context must be
+ cleaned up after initialization by EVP_MD_CTX_cleanup() or a
+ memory leak will occur. [ruby-core:62038] [Bug #9743]
- * string.c (str_aset): ʸִоݤʬʸǤʤä
- 㳰ȯʤ褦
+Mon May 5 02:21:48 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (proc_call): Proc椫break/next̤¾ΤΤ̤
- ʤ褦
+ * ext/dl/cptr.c (dlptr_free), ext/dl/handle.c (dlhandle_free),
+ ext/fiddle/handle.c (fiddle_handle_free),
+ ext/fiddle/pointer.c (fiddle_ptr_free): fix memory leak.
+ based on the patch Heesob Park at [ruby-dev:48021] [Bug #9599].
-Mon Aug 12 14:15:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon May 5 01:20:27 2014 Eric Wong <e@80x24.org>
- * object.c (krn_type): ʸ֤
+ * gc.c (rb_gc_writebarrier): drop special case for big hash/array
+ [Bug #9518]
- * eval.c (thread_create): sub-threadǤexitб
+Mon May 5 01:13:00 2014 Koichi Sasada <ko1@atdot.net>
- * numeric.c (fix_type): ʸ֤
+ * gc.c (gc_before_sweep): cap `malloc_limit' to
+ gc_params.malloc_limit_max. It can grow and grow with such case:
+ `loop{"a" * (1024 ** 2)}'
+ [Bug #9687]
- * io.c (f_p): ǥХåѥǡɽ᥽å
+ This issue is pointed by Tim Robertson.
+ http://www.omniref.com/blog/blog/2014/03/27/ruby-garbage-collection-still-not-ready-for-production/
- * eval.c (f_missing): nil/TRUE/FALSḚ
+Mon May 5 00:52:18 2014 Kenta Murata <mrkn@mrkn.jp>
- * string.c (str_inspect): ĹʸûɽinspectƯ
- human readable string(re-generatable string
- ̵ʤä)
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_initialize): Insert GC guard.
-Sat Aug 10 16:54:21 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_global_new): ditto.
- * object.c (Init_Object): kernel/nil/false/trueΥ饹̾ѹ(
- ʸ)rubyץȤ饢Ǥʤ褦ˡ
+Mon May 5 00:42:35 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
- * eval.c (rb_eval): CONSTANTΥñ㲽crefȤʤ
+ * ext/psych/psych.gemspec: update gemspec for psych-2.0.5
- * eval.c (f_eval): ðۥ᥽åǤͤʤ褦
+Mon May 5 00:42:35 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
-Fri Aug 9 12:23:17 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/psych/lib/psych.rb: Merge psych-2.0.5. bump version to
+ libyaml-0.1.6 for CVE-2014-2525.
+ * ext/psych/yaml/config.h: ditto.
+ * ext/psych/yaml/scanner.c: ditto.
+ * ext/psych/yaml/yaml_private.h: ditto.
- * array.c (ary_concat): append -> concat String˹碌
+Mon May 5 00:35:20 2014 Aaron Patterson <aaron@tenderlovemaking.com>
- * parse.y (yylex): `$;'Ȥʤä
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: support dumping Encoding
+ objects.
- * array.c (ary_push_method): ʣդ褦ˡ
- (ary_unshift): ʣդ褦ˡ
+ * ext/psych/lib/psych/visitors/to_ruby.rb: support loading Encoding
+ objects.
- * io.c (io_popen): IO.popencommand pipe褦ˡ
+ * test/psych/test_encoding.rb: add test
- * object.c (Init_Object): KernelNilruby script饢Ǥ
- ʤ褦ˡ
+ * ext/psych/lib/psych.rb: add version
-Thu Aug 8 01:21:47 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon May 5 00:16:35 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
- * object.c (f_integer): ؤѴؿ
- (f_float): ¿ؤѴؿ
- (f_string): ʸؤѴؿ
- (f_array): ؤѴؿ
+ * gc.c: Fix up default GC params by @csfrancis [fix GH-556]
- * bignum.c (big_to_i): FIXNUMϰϤǤʤBignumΤޤ֤褦
- ѹ
+Fri May 2 00:19:36 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Aug 7 09:28:38 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/openssl/ossl.c (ossl_make_error): check NULL for unknown
+ error reasons with old OpenSSL, and insert a colon iff formatted
+ message is not empty.
- * version 0.99.1-960807
+Thu May 1 20:56:56 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (mlhs): *foo = 1,2,3ץפ¿ǽˡ
+ * ext/readline/extconf.rb (rl_hook_func_t): check pointer type.
+ [ruby-dev:48089] [Bug #9702]
- * object.c (Init_Object): 饹True/Falseruby script饢
- Ǥʤ褦ˡ
+Thu May 1 20:47:08 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * object.c (nil_inspect): inspectɽ"nil"
+ * ext/readline/extconf.rb: fix typo, `$defs` not `$DEFS`.
+ [ruby-core:61756] [Bug #9578]
- * io.c (io_print): nilprintnilˡ
+Thu May 1 20:47:08 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * object.c (nil_to_s): nilʸɽ""ˡ
+ * ext/readline/extconf.rb (rl_hook_func_t): define as Function for
+ very old readline versions. [ruby-core:61209] [Bug #9578]
-Tue Aug 6 01:12:32 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Thu May 1 20:47:08 2014 Tanaka Akira <akr@fsij.org>
- * dir.c (dir_s_open): file descripter­ʤˤgcƤ
- openƤߤ롥
+ * ext/readline/readline.c (Init_readline): Use rl_hook_func_t instead
+ of Function to support readline-6.3. (rl_hook_func_t is available
+ since readline-4.2.)
+ Reported by Dmitry Medvinsky. [ruby-core:61141] [Bug #9578]
- * io.c (rb_fopen): ٤Ƥfopen()ˤĤfile descripter­
- ˤgcƤ⤦openƤߤ롥
+Sat Mar 1 21:00:27 2014 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * ext/socket/socket.c (Init_socket): ɲá
+ * proc.c: Having optional keyword arguments makes maximum arity +1,
+ not unlimited [#8072]
- * sample/ruby-mode.el (ruby-indent-to): ǥȸΥ
- Ĵ
+Sat Mar 1 17:25:12 2014 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * gc.c (gc): ߥåԤʤ(Cɤǰ¿
- malloc()ȤʤʤΤ)
+ * proc.c: Having any mandatory keyword argument increases min arity
+ [#9299]
- * st.c (call_hash_func): signalthreadˤߤб
+Mon Feb 24 14:56:41 2014 WATANABE Hirofumi <eban@ruby-lang.org>
- * sig.h (DEFER_INTS): ߶ػ߶֤λ
+ * tool/make-snapshot: needs CXXFLAGS. [ruby-core:59393][Bug #9320]
- * eval.c (f_require): threadˤrequireζб(ǽ
- requireλޤ¾threadԤ)
+Mon Feb 24 14:56:41 2014 NAKAMURA Usaku <usa@ruby-lang.org>
- * bignum.c (str2inum): 0x80000000ͤˤʤäƤ
+ * tool/make-snapshot: support new version scheme.
- * sprintf.c (f_sprintf): ʸñȤ`%'б
+Mon Feb 24 13:05:48 2014 Aaron Patterson <aaron@tenderlovemaking.com>
- * bignum.c (big_cmp): Ӥη̤դˤʤä
+ * ext/psych/lib/psych.rb: New release of psych.
+ * ext/psych/psych.gemspec: ditto
-Mon Aug 5 10:58:13 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Feb 24 13:05:48 2014 Aaron Patterson <aaron@tenderlovemaking.com>
- * process.c (proc_exec_v): 㳰Υåʬ䤹
+ * ext/psych/yaml/emitter.c: merge libyaml 0.1.5
+ * ext/psych/yaml/loader.c: ditto
+ * ext/psych/yaml/parser.c: ditto
+ * ext/psych/yaml/reader.c: ditto
+ * ext/psych/yaml/scanner.c: ditto
+ * ext/psych/yaml/writer.c: ditto
+ * ext/psych/yaml/yaml_private.h: ditto
- * ext/dbm/dbm.c (fdbm_store): nilǼǤκˤʤ
+Sat Feb 22 22:26:43 2014 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/dbm/dbm.c: 򥭥å塥
+ * ext/io/console/console.c (console_dev): need read access for conout$
+ because some functions need it. [Bug#9554]
-Sat Aug 3 01:52:52 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Feb 22 21:56:26 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (rb_fail): `fail'̵ǸƤФ줿`$@'
- ¸褦ˡ
+ * compile.c (iseq_set_arguments): set arg_keyword_check from
+ nd_cflag, which is set by parser. internal ID is used for
+ unnamed keyword rest argument, which should be separated from no
+ keyword check.
- * eval.c (f_fail): frameĴ
+ * iseq.c (rb_iseq_parameters): if no keyword check, keyword rest is
+ present.
-Fri Aug 2 11:26:21 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * parse.y (new_args_tail_gen): set keywords check to nd_cflag, which
+ equals to that keyword rest is not present.
- * ext/socket/socket.c (bsock_setopt): valȤTRUE/FALSE/Fixnum
- դ褦ˡ
+Sat Feb 22 21:56:26 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/socket.c (Init_socket): SO_REUSEADDRɲ
+ * iseq.c (rb_iseq_parameters): push argument type symbol only for
+ unnamed rest keywords argument.
- * ext/md5/md5init.c: md5⥸塼(ʣե뤫ʤ⥸塼
- Ǥ⤢)
+Sat Feb 22 21:56:26 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ruby.h (Make_Data_Struct): Data: objectinstanceѿ˳Ǽ ->
- DataObject(Dir,Time,Proc,Thread,DBM)
+ * proc.c (rb_iseq_min_max_arity): maximum argument is unlimited if
+ having rest keywords argument. [ruby-core:53298] [Bug #8072]
-Thu Aug 1 11:38:44 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Feb 22 18:55:08 2014 Shugo Maeda <shugo@ruby-lang.org>
- * ext/dbm/dbm.c (fdbm_store): valueʸ̵б
+ * ext/socket/init.c (wait_connectable): break if the socket is
+ writable to avoid infinite loops on FreeBSD and other platforms
+ which conforms to SUSv3. This problem cannot be reproduced with
+ loopback interfaces, so it's hard to write test code.
+ rsock_connect() and wait_connectable() are overly complicated, so
+ they should be refactored, but I commit this fix as a workaround
+ for the release of Ruby 1.9.3 scheduled on Feb 24.
+ [ruby-core:60940] [Bug #9547]
-Wed Jul 31 10:53:42 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Feb 22 18:48:57 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/socket.c (open_inet): htonsɬפǤä
- (tcpaddr): ntohlѴ
+ * class.c (rb_mod_init_copy): do nothing if copying self.
+ [ruby-dev:47989] [Bug #9535]
- * process.c (rb_proc_exec): execvp -> execv
+ * hash.c (rb_hash_initialize_copy): ditto.
-Tue Jul 30 17:48:33 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Feb 22 18:20:58 2014 Masaki Matsushita <glass.saga@gmail.com>
- * eval.c: `$?'thread local
+ * hash.c (rb_hash_flatten): fix behavior of flatten(-1).
+ [ruby-dev:47988] [Bug #9533]
- * Makefile.in (install): installstripԤ
+ * test/ruby/test_array.rb: test for above.
- * configure.in: installstripθ
+Sat Feb 22 17:46:32 2014 Tanaka Akira <akr@fsij.org>
- * configure.in: NEXTSTEPб
+ * lib/open-uri.rb: Make proxy disabling working again.
+ Fixed by Christophe Philemotte. [ruby-core:59650] [Bug #9385]
- * version 0.99.1-960730
+Sat Feb 22 17:33:39 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Jul 30 16:40:35 1996 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
+ * eval.c (rb_mod_s_constants): return its own constants for other
+ than Module itself. [ruby-core:59763] [Bug #9413]
- * dln.c (dln_load): NeXT dln(mach-o)бconfigure̤б
+Sat Feb 22 16:51:36 2014 Eric Wong <e@80x24.org>
-Tue Jul 30 09:46:51 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/json/generator/depend: add build dependencies for json extension
+ [Bug #9374] [ruby-core:59609]
+ * ext/json/parser/depend: ditto
- * process.c (f_system): ʣȤ褦
+Sat Feb 22 16:34:12 2014 Yusuke Endoh <mame@tsg.ne.jp>
- * process.c (f_exec): ʣȤ褦
+ * ext/fiddle/closure.c: use sizeof(*pcl) for correct sizeof value.
+ [ruby-core:57599] [Bug #8978].
- * array.c (ary_append): (ޤEnum)Ǥ˲Ūɲ
+Sat Feb 22 16:34:12 2014 Aaron Patterson <aaron@tenderlovemaking.com>
- * array.c (ary_plus): EnumϤǤɲ
+ * ext/fiddle/closure.c: use sizeof(*pcl) for correct sizeof value.
+ [ruby-core:57599] [Bug #8978]. Thanks mame!
- * file.c (file_s_open): File.openɲ
+Sat Feb 22 16:17:54 2014 Eric Wong <e@80x24.org>
- * struct.c (struct_new): FIX2INT˺Ƥ
+ * ext/socket/ancdata.c (bsock_sendmsg_internal): only retry on error
+ (bsock_recvmsg_internal): ditto
+ * test/socket/test_unix.rb: test above for infinite loop
- * file.c (Init_File): exists? -> exist?
+Sat Feb 22 15:56:53 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * object.c (obj_is_kind_of): is_kind_of? -> kind_of?, is_a?
+ * thread_pthread.c (rb_thread_create_timer_thread): fix for platforms
+ where PTHREAD_STACK_MIN is a dynamic value and not a compile-time
+ constant. [ruby-dev:47911] [Bug #9436]
- * object.c (obj_is_instance_of): is_instance_of? -> instance_of?
+Sat Feb 22 15:56:53 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Jul 29 16:40:02 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * thread_pthread.c (rb_thread_create_timer_thread): expand timer
+ thread stack size to get rid of segfault on FreeBSD/powerpc64.
+ based on the patch by Steve Wills at [ruby-core:59923].
+ [ruby-core:56590] [Bug #8783]
- * parse.y (parse_regx): ŸԤä硤casefold꤬Ǥ
- ʤä
+Sat Feb 22 15:13:38 2014 Benoit Daloze <eregontp@gmail.com>
- * object.c (true_type): TRUE/FALSEtype
+ * range.c (Range#size): [DOC] improve description and add examples.
+ Patch by @skade. [Fixes GH-501]
- * parse.y (read_escape): 3ʸoctalб(\0Ȥ)
+Sat Feb 22 15:07:58 2014 Zachary Scott <e@zzak.io>
-Fri Jul 26 00:31:45 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/racc/rdoc/grammar.en.rdoc: [DOC] Correct grammar and typos
+ Patch by Giorgos Tsiftsis [Bug #9429] [ci skip]
- * array.c (ary_reverse_bang): in-placeȿž
- (ary_sort_bang): in-placesort
- (ary_sort): sort֤褦
- (ary_delete_at): ꤷ֤Ǥ
+Sat Feb 22 15:06:32 2014 Zachary Scott <e@zzak.io>
- * eval.c (rb_call): stackåϹԤʤ褦
+ * lib/open-uri.rb: [DOC] use lower case version of core classes, same
+ as commit r44878, based on patch by Jonathan Jackson [Bug #9483]
- * error.c (Warning): ¹warningɽƤʤä
+Sat Feb 22 15:06:32 2014 Zachary Scott <e@zzak.io>
- * eval.c (compile): 㳰ȯʬΥ
+ * ext/ripper/lib/ripper/lexer.rb: [DOC] use lower case version of core
+ classes when referring to return value, since we aren't directly
+ talking about the class. Patch by Jonathan Jackson [Bug #9483]
- * eval.c (f_eval): ѿrb_in_eval褦
+Sat Feb 22 15:03:05 2014 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
- * ext/dbm/dbm.c (fdbm_store): ǼkeyʸѴ
+ * variable.c: adding extra example in docs.
+ patched by Steve Klabnik. [Bug #9210]
- * eval.c (rb_call): ̵ºƵΥåæФԤC methodˤ
- бthreadstackå롼ήѡ
+Sat Feb 22 15:01:21 2014 Tanaka Akira <akr@fsij.org>
- * parse.y (yylex): 1unary -/+Ƚְ꤬äƤ
+ * lib/resolv.rb (Resolv::DNS::Resource::TXT#data): Return concatenated
+ string.
+ Patch by Ryan Brunner. [ruby-core:58220] [Bug #9093]
- * parse.y (yylex): unary +ǿ;פɤǤ(ex. +5 -> 55)
+Sat Feb 22 14:52:55 2014 Zachary Scott <e@zzak.io>
-Thu Jul 25 12:15:04 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/openssl/ossl_pkey_dh.c: Fixed typo by Sandor Szuecs [Bug #9243]
- * parse.y (yylex): ۣǤʤФƷٹФƤ
+Sat Feb 22 14:45:36 2014 Zachary Scott <e@zzak.io>
- * eval.c (iterator_p): ǸƤǤ̤֤褦ˡ
+ * lib/xmlrpc/client.rb: [DOC] Remove note about SSL package on RAA
+ Since RAA has been deprecated, and the SSL package has been replaced
+ with net/https this statement is entirely false and should be
+ deleted. [Bug #9152]
- * parse.y: break/next/redo/retryΥ᥽åɲ
+Sat Feb 22 14:31:23 2014 Zachary Scott <e@zzak.io>
- * sample/ruby-mode.el (ruby-calculate-indent): nestΥåߥ
+ * lib/net/smtp.rb: [DOC] Remove dead link to RAA by Giorgos Tsiftsis
+ Fixes the following bugs: [Bug #9152] [Bug #9268] [Bug #9394]
+ * lib/open-uri.rb: ditto
- * sample/ruby-mode.el (ruby-parse-region): ͽΥå򶯲
+Sat Feb 22 14:18:35 2014 Tanaka Akira <akr@fsij.org>
- * parse.y (primary): unless/until
+ * lib/resolv.rb: Ignore name servers which cause EAFNOSUPPORT on
+ socket creation.
+ Reported by Bjoern Rennhak. [ruby-core:60442] [Bug #9477]
-Tue Jul 23 18:50:10 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Feb 22 14:07:04 2014 Tanaka Akira <akr@fsij.org>
- * array.c (Array#empty?), Hash.c (Hash#empty?), ext/dbm/dbm.c (DBM#empty?):
- ȽҸ
+ * lib/resolv.rb (Resolv::DNS::Message::MessageDecoder): Raise
+ DecodeError if no data before the limit.
+ Reported by Will Bryant. [ruby-core:60557] [Bug #9498]
- * eval.c (f_unless): ifεդ򤹤륤ƥ졼
+Sat Feb 22 13:49:30 2014 Shugo Maeda <shugo@ruby-lang.org>
- * eval.c (f_until): whileεդ򤹤륤ƥ졼
+ * vm_insnhelper.c (vm_call_method): should check ci->me->flag of
+ a refining method in case the method is private.
+ [ruby-core:60111] [Bug #9452]
- * parse.y: not̤ͥand/or⤯
+ * vm_method.c (make_method_entry_refined): set me->flag of a refined
+ method entry to NOEX_PUBLIC in case the original method is private
+ and it is refined as a public method. The original flag is stored
+ in me->def->body.orig_me, so it's OK to make a refined method
+ entry public. [ruby-core:60111] [Bug #9452]
- * parse.y (expr): `!'̤άcallǤͭ
+ * test/ruby/test_refinement.rb: related tests.
-Mon Jul 22 10:15:38 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Feb 22 13:26:57 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * version 0.99-960722
+ * iseq.c (iseq_load): keep type_map to get rid of memory leak.
+ based on a patch by Eric Wong at [ruby-core:59699]. [Bug #9399]
- * array.c (ary_print_on): OFSNILåԴ
+Sat Feb 22 13:17:32 2014 Masaki Matsushita <glass.saga@gmail.com>
- * ruby.c (load_file): ɸϤΥץȤλб
+ * ext/thread/thread.c (rb_szqueue_clear): notify SZQUEUE_WAITERS
+ on SizedQueue#clear. [ruby-core:59462] [Bug #9342]
- * ruby.c (proc_options): -wǤϰ̵λˤɸϤ饹
- ץȤȤ(-vǤϤ˽λ)
+ * test/thread/test_queue.rb: add test. the patch is from
+ Justin Collins.
- * array.c (ary_compact): nilǤ᥽å
+Sat Feb 22 01:35:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * array.c (ary_nitems): nilǤʤǤ᥽å
+ * configure.in: check if pthread_setname_np is available.
-Sun Jul 20 00:51:53 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * thread_pthread.c: pthread_setname_np is not available on old
+ Darwins. [ruby-core:60524] [Bug #9492]
- * ruby.c (proc_options): -w optionɲ
+Sat Feb 22 00:21:50 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y: {}ĤƤʤˤŸʤʸ
+ * parse.y (local_push_gen, local_pop_gen): save cmdarg_stack to
+ isolate command argument state from outer scope.
+ [ruby-core:59342] [Bug #9308]
-Fri Jul 19 16:16:05 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Feb 21 23:51:38 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * version 0.99-960719
+ * encoding.c (must_encindex, rb_enc_from_index, rb_obj_encoding): mask
+ encoding index and ignore dummy flags. [ruby-core:59354] [Bug #9314]
- * lib/find.rb: (pruneγĥդ)
+Fri Feb 21 23:10:12 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * file.c (test_l): lstatĴ٤ʤȤ͡
+ * lib/mkmf.rb (RbConfig): expand RUBY_SO_NAME for extensions
+ backward compatibility. [ruby-core:59426] [Bug #9329]
- * eval.c (f_throw): 2άǽˡ
+Fri Feb 21 23:07:56 2014 Akio Tajima <artonx@yahoo.co.jp>
- * parse.y (str_extend): {}ΥͥȤб
+ * win32/Makefile.sub: remove HAVE_FSEEKO because fseeko removed from win32/win32.c
+ Fixed [Bug #9333].
-Thu Jul 18 18:25:46 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Feb 21 23:00:34 2014 Aaron Patterson <aaron@tenderlovemaking.com>
- * version 0.99-960718
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: dumping strings with
+ quotes should not have changed. [ruby-core:59316] [Bug #9300]
- * parse.y (str_extend): ʸμŸ \" ' ` / ޤǤ
- 褦ˡ
+ * ext/psych/lib/psych.rb: fixed missing require.
-Tue Jul 16 15:55:31 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/psych/test_string.rb: test
- * sample/ruby-mode.el (ruby-parse-region): ɽΥ
- б
+Sun Feb 2 05:48:42 2014 Eric Wong <e@80x24.org>
- * version 0.99-960716
+ * io.c (rb_io_syswrite): add RB_GC_GUARD
+ [Bug #9472][ruby-core:60407]
-Fri Jul 12 10:06:19 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Feb 21 17:42:42 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * io.c (f_select): close check.
+ * lib/resolv.rb (Resolv::Hosts#lazy_initialize): should not
+ consider encodings in hosts file. [ruby-core:59239] [Bug #9273]
- * ruby.c (load_file): #!Ԥΰå1˸(¤򤤤
- DOSк)
+ * lib/resolv.rb (Resolv::Config.parse_resolv_conf): ditto.
-Wed Jul 10 17:18:35 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Feb 21 16:47:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * version 0.99-960710
+ * string.c (get_encoding): respect BOM on pseudo encodings.
+ [ruby-dev:47895] [Bug #9415]
- * time.c (time_s_timegm/time_s_timelocal): ֤᥽å
+Fri Feb 21 16:47:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Jun 17 15:59:20 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * string.c (get_actual_encoding): get actual encoding according to
+ the BOM if exists.
- * version 0.99-960617
+ * string.c (rb_str_inspect): use according encoding, instead of
+ pseudo encodings, UTF-{16,32}. [ruby-core:59757] [Bug #8940]
- * parse.y (yyerror): 顼ɽδά
+Fri Feb 21 13:39:21 2014 Charlie Somerville <charliesome@ruby-lang.org>
-Wed Jun 12 14:11:01 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * compile.c (iseq_build_from_ary_body): Use :blockptr instead of :block
+ as hash key when loading serialized instruction sequences from arrays.
+ [Bug #9455] [ruby-core:60146]
- * signal.c (rb_trap_exit): trap 0thread˽롥
+Thu Feb 20 12:58:45 2014 Tanaka Akira <akr@fsij.org>
-Fri Jun 7 10:17:01 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * process.c (READ_FROM_CHILD): Apply the last hunk of
+ 0001-process.c-avoid-EINTR-from-Process.spawn.patch written by
+ Eric Wong in [Bug #8770].
- * array.c/hash.c (indexes): 1Υѥ̵
- `*ary'ȤäƤ餪
+Thu Feb 20 12:58:45 2014 Eric Wong <normalperson@yhbt.net>
- * eval.c (thread_wait_threads): main_threadλ¾
- threadԤ(ŪˤϽλʤ)
- (ruby_run): ¾threadԤäƤ֤˥ʥ뤬褿顤thread
- λ롥
+ * process.c (send_child_error): retry write on EINTR to fix
+ occasional Errno::EINTR from Process.spawn.
- * eval.c (rb_fail): ᥽å̾`$!'ࡥ
+ * process.c (recv_child_error): retry read on EINTR to fix
+ occasional Errno::EINTR from Process.spawn.
- * eval.c (thread_create): main_threadΥƥȤ֤
- 礬ä
+Thu Feb 20 12:24:59 2014 Eric Hodel <drbrain@segment7.net>
- * process.c (f_sleep): ֤ꤻthreadҤȤĤʤ
- ˤб
+ * lib/rinda/ring.rb (Rinda::RingFinger#make_socket): Use
+ ipv4_multicast_ttl option for portability.
- * eval.c (thread_create): create塤fnƤӽФcontext switch
- Ȱ㤦contextfn¹ԤƤޤХ
+Thu Feb 20 10:19:40 2014 Tanaka Akira <akr@fsij.org>
-Mon Jun 3 08:03:17 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/socket/option.c: IP_MULTICAST_LOOP and IP_MULTICAST_TTL socket
+ option takes a byte on OpenBSD.
+ Fixed by Jeremy Evans. [ruby-core:59496] [Bug #9350]
- * struct.c (struct_s_def): Фλʸ󡤥ܥ(FIXNUM)
- Dzǽˤ
+Wed Feb 19 15:25:13 2014 Koichi Sasada <ko1@atdot.net>
- * ext/etc/etc.c (Init_etc): ¤Υ֥ȤGCݸ
+ * gc.c (ruby_gc_set_params): don't show obsolete warnings for
+ RUBY_FREE_MIN/RUBY_HEAP_MIN_SLOTS if
+ RUBY_GC_HEAP_FREE_SLOTS/RUBY_GC_HEAP_INIT_SLOTS are given.
+ [Bug #9276]
- * error.c (rb_sys_fail): nil/FALSEȤƼդ褦ˡ
+Wed Feb 19 14:25:55 2014 Koichi Sasada <ko1@atdot.net>
-Thu May 30 16:19:08 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/ruby/test_gc.rb: ignore warning messages for running with -w
+ option such as chkbuild.
- * eval.c (thread_select): EINTRб
+Wed Feb 19 14:25:55 2014 Koichi Sasada <ko1@atdot.net>
-Wed May 29 11:04:51 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (get_envparam_double): fix a warning message.
- * eval.c (f_catch): catch/throw
+Wed Feb 19 14:25:55 2014 Koichi Sasada <ko1@atdot.net>
-Tue May 28 13:30:52 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c: introduce new environment variable
+ "RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR" to control major/minor GC
+ frequency.
- * version 0.99-960528
+ Do full GC when the number of old objects is more than R * N
+ where R is this factor and
+ N is the number of old objects just after last full GC.
- * eval.c (thread_cleanup): main threadλ¾thread⽪λ
- 뤳Ȥβ
+ * test/ruby/test_gc.rb: add a test.
- * signal.c (trap): SIGINTΥǥեȤߥ(SIG_DFLǤ
- ޤä)rubyǤϤȥϥɥ뤷ʤȡ
+Wed Feb 19 07:51:02 2014 Eric Hodel <drbrain@segment7.net>
- * eval.c (thread_interrupt): SIGINTmain_thread㳰ȯ
- 褦ˡ
+ * lib/rinda/ring.rb (Rinda::RingFinger#make_socket): Use
+ ipv4_multicast_loop option for portability. Patch by Jeremy Evans.
+ [ruby-trunk - Bug #9351]
-Mon May 27 15:13:31 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Feb 17 05:43:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (thread_status): threadξ֤֤᥽åɡthreadνλ
- Ԥʤ
+ * configure.in: reset LDFLAGS and DLDFLAGS for opt-dir again after
+ LIBPATHFLAG and RPATHFLAG are set. [ruby-dev:47868] [Bug #9317]
- * eval.c (thread_value): promise뤿Υ᥽åɡ
+Sun Feb 16 07:13:36 2014 Tanaka Akira <akr@fsij.org>
- * eval.c (thread_join): ԤäƤthread㳰򵯤ˤϡ
- join㳰ȯ褦ˡ
+ * configure.in: Fix compilation error.
+ https://bugs.ruby-lang.org/issues/8358#note-16
- * eval.c (thread_create): threadǤ㳰propagateʤ褦ˡ
+Sun Feb 16 07:13:36 2014 Vit Ondruch <vondruch@redhat.com>
-Fri May 24 10:47:53 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * configure.in: add qouting brackets and append wildcard for the
+ rest after target_cpu, to properly detect platform for SSE2
+ instructions. [ruby-core:60576] [Bug #8358]
- * enum.c (Init_Enumerable): `size' as alias to the `length'
+Sun Feb 16 07:13:36 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (thread_save_context): `$@', `$!'򥹥å˥֡
+ * configure.in: -mstackrealign is necessary for -msse2 working.
+ [ruby-core:54716] [Bug #8349]
- * eval.c (superclass): 顼ɽڤˡ
+Sun Feb 16 07:13:36 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu May 23 10:38:41 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * configure.in: -mstackrealign is necessary for -msse2 working.
+ [ruby-core:54716] [Bug #8349]
- * version 0.99-960523
+ * configure.in: use SSE2 instructions to drop unexpected precisions on
+ other than mingw. [ruby-core:59472] [Bug #8358]
- * eval.c (superclass): 顼˥ѡ饹̾(ʬ)ɽ
- 褦ˡ
+Sun Feb 16 07:13:36 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed May 22 19:48:42 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * configure.in: use SSE2 instructions for drop unexpected
+ precisions. [ruby-core:54738] [Bug #8358]
- * parse.y (superclass): ѡ饹λҤ`:'`<'ѹ
+Fri Feb 7 04:19:19 2014 Koichi Sasada <ko1@atdot.net>
-Tue May 21 09:27:59 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (get_envparam_int): correct warning messsages.
- * lib/thread.rb: thread򥵥ݡȤ륯饹(Mutex, Queue)
+ * gc.c (get_envparam_double): ditto.
-Mon May 20 09:39:49 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Feb 7 04:19:19 2014 Koichi Sasada <ko1@atdot.net>
- * time.c (time_cmp): ưⰷ褦ˡ
- (time_minus): Time - Timeư֤褦ˡ
+ * gc.c (get_envparam_int): don't accept a value equals to lowerbound
+ (changed by last commit) because "" or "foo" (not a number) strings
+ are parsed as 0. They should be rejected.
-Fri May 17 15:40:10 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (get_envparam_double): ditto.
- * process.c (rb_proc_exec): Threadбexecľ
- ITIMER_VIRTUALꥻåȤ롥
+Thu Feb 6 08:23:28 2014 Eric Wong <e@80x24.org>
-Tue May 14 02:12:44 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/thread/thread.c (rb_szqueue_max_set): use correct queue and
+ limit wakeups. [Bug #9343][ruby-core:60517]
+ * test/thread/test_queue.rb (test_sized_queue_assign_max):
+ test for bug
- * signal.c (sighandle): SIGINTФƥǥեȤ㳰ȯ
- Τᡤstatus 130exit褦ˤ
+Thu Feb 6 11:27:39 2014 Eric Hodel <drbrain@segment7.net>
- * eval.c (thread_schedule): ThreadΥХϤۤȤɤȤ줿褦
+ * lib/rubygems: RubyGems 2.2.2 which contains the following bug fixes:
+ http://rubygems.rubyforge.org/rubygems-update/History_txt.html#label-2.2.2+%2F+2014-02-05
+ https://bugs.ruby-lang.org/issues/9489
-Fri May 10 11:21:08 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Thu Feb 6 11:23:59 2014 Koichi Sasada <ko1@atdot.net>
- * eval.c (thread_schedule): 桼٥ThreadǽΨϤȤ⤫
- ܿϤ롥塤thread֤̿ǽͽꡥ
+ * gc.c (ruby_gc_set_params): if RUBY_GC_OLDMALLOC_LIMIT is provided,
+ then set objspace->rgengc.oldmalloc_increase_limit.
+ Without this fix, the env variable RUBY_GC_OLDMALLOC_LIMIT
+ does not work.
-Thu May 2 21:22:31 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (get_envparam_int): accept a value equals to lowerbound.
- * time.c (time_timeval): struct timevalľ֤褦(staticѿ
- Ȥʤ)
+ * gc.c (get_envparam_double): ditto.
-Wed May 1 17:27:32 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Feb 5 23:57:05 2014 Charlie Somerville <charliesome@ruby-lang.org>
- * process.c (f_sleep): ʳtimeǤ褦ˡ
+ * ext/thread/thread.c (rb_szqueue_push): check GET_SZQUEUE_WAITERS
+ instead of GET_QUEUE_WAITERS to prevent deadlock. Patch by Eric Wong.
+ [Bug #9302] [ruby-core:59324]
-Thu Apr 25 08:19:15 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/thread/test_queue.rb: add test
- * file.c (file_s_dirname): ե̾"/"ޤޤʤ"."֤
- 褦(GNU dirnameλ)
+Wed Feb 5 23:43:30 2014 NAKAMURA Usaku <usa@ruby-lang.org>
- * file.c (file_s_basename): ޤnil0ƱƤ륽Ĥä
-
+ * hash.c (rb_objid_hash): should return `long'. brushup r44534.
- * parse.y (exprs): 顼ꥫХɲá
+ * object.c (rb_obj_hash): follow above change.
-Wed Apr 24 15:51:05 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Feb 5 23:43:30 2014 NAKAMURA Usaku <usa@ruby-lang.org>
- * string.c (str_chop_bang): CRLFξ2 byteschop!褦ˡ
+ * hash.c (rb_any_hash): should treat the return value of rb_objid_hash()
+ as `long', because ruby assumes the hash value of the object id of
+ an object is `long'.
+ this fixes test failures on mswin64 introduced at r44525.
- * ext/socket/socket.c (tcp_svr_s_open): ޤnil0ƱƤ륽
- ĤäƤ
+Wed Feb 5 23:43:30 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Apr 23 18:14:25 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * hash.c (rb_objid_hash): return hash value from object ID with a
+ salt, extract from rb_any_hash().
- * pack.c (pack_pack): "A/a"ΥХ;פpaddingäƤ
+ * object.c (rb_obj_hash): return same value as rb_any_hash().
+ fix r44125. [ruby-core:59638] [Bug #9381]
-Thu Apr 18 13:02:11 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Feb 5 22:28:41 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in: ƥ¸̥ǥ쥯ȥ˥󥹥ȡ
- 褦ˡ
+ * vm_insnhelper.c (vm_search_super_method): allow bound method from a
+ module, yet another method transplanting.
- * parse.y (yyerror): 顼ȯ˥顼ԤȤΰ֤ɽ
- ˡ
+Wed Feb 5 22:28:41 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Apr 17 14:22:42 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * vm_insnhelper.c (vm_search_super_method): when super called in a
+ bound UnboundMethod generated from a module, no superclass is
+ found since the current defined class is the module, then call
+ method_missing in that case. [ruby-core:59619] [Bug #9377]
- * defines.h: SAFE_SIGHANDLE̵ϤǤʤ褦ˡ
+Wed Feb 5 21:57:40 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * io.c (io_ungetc): ǽ
+ * ext/socket/socket.c (rsock_syserr_fail_host_port): add errno
+ argument version anduse rb_syserr_fail_str() instead of
+ rb_sys_fail_str() with restoring errno.
- * ruby.c (load_file): ե뤫ɤ߹ѤäΤб
+ * ext/socket/socket.c (rsock_syserr_fail_path): ditto, and
+ rb_syserr_fail().
- * parse.y (compile_file): ե뤫Ϥɤ߹Τ
- ߤơgetsȤȤˤ
+ * ext/socket/socket.c (rsock_sys_fail_sockaddr): ditto, use
+ rsock_syserr_fail_raddrinfo().
-Wed Apr 10 17:40:11 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/socket/socket.c (rsock_sys_fail_raddrinfo): ditto.
- * version 0.98
+ * ext/socket/socket.c (setup_domain_and_type): ditto.
-Tue Apr 9 09:54:30 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Feb 5 21:57:40 2014 Eric Wong <normalperson@yhbt.net>
- * parse.y (iter_block): ƥ졼֥åλ᥽åɸƤӽФ
- ˸ꡥʸˡβ
+ * ext/socket/socket.c (rsock_sys_fail_host_port): save and restore errno
+ before calling rb_sys_fail_str to prevent [BUG] errno == 0.
+ Patch by Eric Wong. [ruby-core:59498] [Bug #9352]
- * eval.c (rb_eval): PɽӤinline
+ * ext/socket/socket.c (rsock_sys_fail_path): ditto
+ * ext/socket/socket.c (rsock_sys_fail_sockaddr): ditto
+ * ext/socket/socket.c (rsock_sys_fail_raddrinfo): ditto
+ * ext/socket/socket.c (rsock_sys_fail_raddrinfo_or_sockaddr): ditto
- * eval.c (rb_eval): defined? ()ʸ֤
+Wed Feb 5 21:12:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * node.h: NODE_BEGIN -> NODE_RESCUE, NODE_ENSUREʬΥ
+ * lib/timeout.rb (Timeout::ExitException.catch): pass arguments
+ for new instance.
- * eval.c (rb_eval): option -n/-pΥȥåץ٥롼פinlineŸ
+ * lib/timeout.rb (Timeout::ExitException#exception): fallback to
+ Timeout::Error if couldn't throw. [ruby-dev:47872] [Bug #9380]
- * parse.y (cond0): PʸӤоݤȤʤ
+ * lib/timeout.rb (Timeout#timeout): initialize ExitException with
+ message for the fallback case.
-Wed Mar 27 12:33:54 1996 Tairo Nomura <tairo@hucom.tp.titech.ac.jp>
+Wed Feb 5 21:12:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * defines.h: NeXTб
+ * lib/timeout.rb (Timeout#timeout): should not rescue ordinarily
+ raised ExitException, which should not be thrown.
-Wed Mar 27 10:02:44 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/timeout.rb (Timeout::ExitException.catch): set @thread only if
+ it ought to be caught.
- * parse.y: ͽѹ continue -> next
+ * lib/timeout.rb (Timeout#timeout): when a custom exception is given,
+ no instance is needed to be caught, so defer creating new instance
+ until it is raised. [ruby-core:59511] [Bug #9354]
-Mon Mar 25 07:34:37 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Feb 5 17:55:28 2014 Aman Gupta <ruby@tmm1.net>
- * parse.y (parse_regx): o(once)ץɲá
+ * array.c (ary_add_hash): Fix consistency issue between Array#uniq and
+ Array#uniq! [Bug #9340] [ruby-core:59457]
+ * test/ruby/test_array.rb (class TestArray): regression test for above.
-Fri Mar 22 14:25:35 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Feb 5 11:48:42 2014 Charlie Somerville <charliesome@ruby-lang.org>
- * version 0.97d
+ * struct.c (rb_struct_set): return assigned value from setter method
+ rather than struct object. [Bug #9353] [ruby-core:59509]
- * eval.c (dyna_var_defined): ưŪѿåѥ롼
-
+ * test/ruby/test_struct.rb (test_setter_method_returns_value): add test
- * parse.y (gettable): eval()ǤưŪѿ(ͤ
- Ƥ)θФ˼ԤƤ
+Wed Feb 5 11:13:21 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 19 10:46:47 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * string.c (rb_str_modify_expand): enable capacity and disable
+ assocation with packed objects when setting capa, so that
+ pack("p") string fails to unpack properly after modified.
- * version 0.97c
+Sun Feb 2 22:39:28 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * re.c (reg_s_new): compilesegmentation fault
+ * lib/delegate.rb (Delegator): keep source information methods
+ which start and end with '__'. [ruby-core:59718] [Bug #9403]
- * parse.y (str_extend): Ĥeval褦ˡ
+Fri Jan 31 12:10:16 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Mar 13 11:00:42 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * proc.c (mnew_from_me): keep iclass as-is, to make inheritance
+ chain consistent. [ruby-core:59358] [Bug #9315]
- * parse.y (str_extend): ʸμŸ̵
+ * proc.c (method_owner): return the original defined_class from
+ prepended iclass, instead.
- * parse.y: ʥ顼ꥫХ򳰤
+Fri Jan 31 12:05:59 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 12 12:30:20 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * configure.in: let mingw do something black-magic, and check if
+ _gmtime64_s() is available actually.
- * eval.c (rescue): ְäensureǤ㳰ªƤ
+ * win32/win32.c (gmtime_s, localtime_s): use _gmtime64_s() and
+ _localtime64_s() if available, not depending on very confusing
+ mingw variants macros. based on the patch by phasis68 (Heesob
+ Park) at [ruby-core:58764]. [ruby-core:58391] [Bug #9119]
-Wed Mar 6 12:11:03 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Thu Jan 30 15:02:35 2014 Shugo Maeda <shugo@ruby-lang.org>
- * parse.y (var_extend): ѿŸ"#{}"ǡǤդμ񤱤褦ˤ
- ǡѿŸǤ̵ʤääʤ
+ * configure.in: use $@ instead of $(.TARGET) because .TARGET is not
+ supported by GNU make.
- * regex.c (init_syntax_once): `_'wordɲá
+Mon Jan 27 16:49:52 2014 Kenta Murata <mrkn@mrkn.jp>
- * regex.c (re_compile_pattern): `\w',`\W'Ƚsyntax table
- 褦ˡ
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_divide): Add an additional
+ digit for the quotient to be compatible with bigdecimal 1.2.1 and
+ the former. [ruby-core:59365] [#9316] [#9305]
-Tue Feb 27 10:15:32 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/bigdecimal/test_bigdecimal.rb: tests for the above change.
- * object.c (obj_inspect): ɽ륤󥹥ѿ̵ˤϡ
- to_sȤ
+ * ext/bigdecimal/bigdecimal.gemspec: bigdecimal version 1.2.4.
- * configure.in: dlnθФưŪˡ
+Mon Jan 27 16:45:34 2014 Yamashita Yuu <yamashita@geishatokyo.com>
-Mon Feb 26 19:55:33 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/openssl/ossl_ssl.c (Init_ossl_ssl): Declare a constant
+ `OP_MSIE_SSLV2_RSA_PADDING` only if the macro is defined. The
+ `SSL_OP_MSIE_SSLV2_RSA_PADDING` has been removed from latest
+ snapshot of OpenSSL 1.0.1. [Fixes GH-488]
- * ruby.c (readin): read(2)ǰ٤˥ե뤬ɤ߹ʤб
+Thu Jan 23 10:37:24 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Feb 24 14:47:18 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * hash.c (HAS_EXTRA_STATES): warn extra states only when something
+ differ. [ruby-core:59254] [Bug #9275]
- * version 0.97b
+Thu Jan 9 14:05:24 2014 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Feb 23 11:26:02 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * win32/{setup.mak,Makefile.sub}: update fake.rb like
+ template/fake.rb.in.
- * class.c (rb_define_module): C줿⥸塼PATH
- ˺졥ʸ󲽤core dump
+Thu Jan 9 14:05:24 2014 NAKAMURA Usaku <usa@ruby-lang.org>
- * eval.c (mod_include): ͤnilˡ
+ * win32/Makefile.sub (fake.rb): should depend on version.h because
+ if RUBY_VERSION is updated, fake.rb need to say the new version
+ to avoid install error in rbconfig.rb.
- * version 0.97a
+Thu Jan 9 08:21:00 2014 Aman Gupta <ruby@tmm1.net>
-Thu Feb 22 21:03:42 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/net/imap/cacert.pem: generate new CA cert, since the last one
+ expired. [Bug #9341] [ruby-core:59459]
+ * test/net/imap/server.crt: new server cert signed with updated CA.
+ * test/net/imap/Makefile: add `make regen_certs` to automate this
+ process.
- * array.c (ary_times): *ʸפjoinƱƯ򤹤褦ˡ
+Thu Dec 26 03:28:11 2013 Koichi Sasada <ko1@atdot.net>
-Wed Feb 21 11:18:09 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * vm_insnhelper.c (argument_error): insert dummy frame to make
+ a backtrace object intead of modify backtrace string array.
+ [Bug #9295]
- * configure.in : fileCountcache
+ * test/ruby/test_backtrace.rb: add a test for this patch.
+ fix test to compare a result of Exception#backtrace with
+ a result of Exception#backtrace_locations.
- * configure.in : LinuxELFĶưŪ˸ФǤ褦
+Wed Dec 25 16:58:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Feb 20 11:18:09 1996 Mitsuhide Satou <mit-sato@aries.bekkoame.or.jp>
+ * proc.c (rb_mod_define_method): consider visibility only if self
+ in the caller is same as the receiver, otherwise make public as
+ well as old behavior. [ruby-core:57747] [Bug #9005]
+ [ruby-core:58497] [Bug #9141]
- * FreeBSD dynamic linkб
+ * vm.c (rb_vm_cref_in_context): return ruby level cref if self is
+ same.
-Fri Feb 16 08:50:01 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Dec 25 16:35:34 2013 Yusuke Endoh <mame@tsg.ne.jp>
- * object.c (obj_inspect): 󥹥ѿʤ֥Ȥ
- ɽ褦ˡ
+ * sample/trick2013/: added the award-winning entries of TRICK 2013.
+ See https://github.com/tric/trick2013 for the contest outline.
+ (Matz has approved the attachment.)
-Wed Feb 14 16:56:44 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Tue Dec 24 23:47:50 2013 Koichi Sasada <ko1@atdot.net>
- * eval.c (rb_eval): P`2..2'ʤɺΩľ˱դΩ
- ѥ˥Х
+ * README.EXT: add a refer to URL.
-Tue Feb 13 18:22:22 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Tue Dec 24 23:47:50 2013 Koichi Sasada <ko1@atdot.net>
- * version 0.97
+ * README.EXT: add a document about RGenGC.
+ Reviewed by havenwood.
+ [misc #8962]
-Fri Feb 9 21:32:55 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * README.EXT.ja: ditto.
- * lib/tkscrollbox.rb: tclԤruby<->wish
- פ̵̿
+Mon Dec 23 19:00:00 2013 Eric Hodel <drbrain@segment7.net>
-Wed Feb 7 10:26:52 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/rubygems/test_gem_ext_builder.rb: Fix warning due to ambiguous
+ expression.
- * string.c (str_aref): indexunsigned intǤȤäƤ
+Mon Dec 23 16:13:10 2013 Eric Hodel <drbrain@segment7.net>
- * string.c (str_aref): ϰϳindexФnil֤
+ * lib/rubygems/commands/install_command.rb: Restore gem install
+ --ignore-dependencies for remote gems
+ * test/rubygems/test_gem_commands_install_command.rb: Test for the
+ above.
- * parse.y (special_local_set): `$_'̵˻Ȥ줿б
- ؿvariable.cư
+Mon Dec 23 16:12:24 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * string.c (str_sub): ִϰְ֤äƤ
+ * array.c: Have to_h raise on elements that are not key-value pairs
+ [#9239]
-Tue Feb 6 16:17:31 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * enum.c: ditto
- * sample/ruby-mode.el (ruby-parse-region): ȤɤФ
- Х
+Sun Dec 22 19:22:52 2013 Eric Hodel <drbrain@segment7.net>
-Fri Feb 2 18:35:28 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/rdoc.rb: Set RDoc to release version.
- * variable.c (lastline_get): `$_'`$~'Ʊ褦SCOPE
- ѿˤ
+Sun Dec 22 19:22:31 2013 Eric Hodel <drbrain@segment7.net>
-Thu Feb 1 14:14:07 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/rubygems.rb: Set RubyGems to release version.
- * file.c: statcache᤿
+Sun Dec 22 19:22:01 2013 Eric Hodel <drbrain@segment7.net>
-Wed Jan 31 07:13:08 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/rubygems.rb (module Gem): Fix comment for
+ Gem::load_path_insert_index.
- * eval.c (proc_s_new): procyieldƤФ줿core dump
- Ȥꤢ㳰ȯ롥
+Sun Dec 22 18:08:42 2013 NAKAMURA Usaku <usa@ruby-lang.org>
- * variable.c (rb_class2path): singleton classб
+ * win32/Makefile.sub (fake.rb): fixed wrong RUBY_PLATFORM, to correctly
+ install win32.h.
+ [ruby-core:58801][Bug #9199] reported by arton.
- * ext/etc/etc.c (Init_etc): struct_defineΥߥ͡nilä
- (0ǤʤФʤʤ)
+Fri Dec 20 17:52:50 2013 Koichi Sasada <ko1@atdot.net>
- * ext/marshal/marshal.c: TRUE/FALSEǤФ褦ˡ
+ * vm_method.c: check definition of
+ GLOBAL_METHOD_CACHE_SIZE and GLOBAL_METHOD_CACHE_MASK.
- * eval.c (rb_get_method_body): åaliasбޤޤǤ
- aliasϥåäƤʤä
+Fri Dec 20 17:03:10 2013 Koichi Sasada <ko1@atdot.net>
-Tue Jan 30 09:55:13 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * include/ruby/ruby.h: rename OBJ_WRITE and OBJ_WRITTEN into
+ RB_OBJ_WRITE and RB_OBJ_WRITTEN.
- * eval.c (rb_eval): NODE_BLOCK - tail recursive(ȤۤɤǤʤ
- )
+ * array.c, class.c, compile.c, hash.c, internal.h, iseq.c,
+ proc.c, process.c, re.c, string.c, variable.c, vm.c,
+ vm_eval.c, vm_insnhelper.c, vm_insnhelper.h,
+ vm_method.c: catch up this change.
- * io.c (io_pipe): pipe(2)
+Fri Dec 20 16:01:35 2013 Koichi Sasada <ko1@atdot.net>
- * eval.c (rb_eval): Qselfʤthreadбؤ⡥ϱ
- ġ
+ * include/ruby/ruby.h: add a comment for WB interfaces.
- * eval.c (proc_call): procǤreturnprocνλ̣褦
- ˡprocyieldǤreturn㳰ȯ롥
+Fri Dec 20 16:00:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Jan 24 11:33:48 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * configure.in: DLDFLAGS is defined in --with-opt-dir handler, so
+ ${DLDFLAGS=} does not work now. use RUBY_APPEND_OPTIONS instead.
+ [ruby-dev:47855] [Bug #9256]
- * version 0.96a
+Fri Dec 20 14:19:12 2013 NARUSE, Yui <naruse@ruby-lang.org>
- * dir.c (dir_each): `$_'ͤѹΤ᤿
+ * configure.in (AC_ARG_WITH): use withval directly.
+ fix failure on FreeBSD.
+ http://fb32.rubyci.org/~chkbuild/ruby-trunk/log/20131217T070301Z.diff.html.gz
- * io.c (f_readlines): nilFALSEʬΥΤ̵¥롼פ
-
+Fri Dec 20 14:00:01 2013 Aman Gupta <ruby@tmm1.net>
- * ruby.c (ruby_options): $0ߥ
+ * include/ruby/ruby.h (struct RClass): add super, remove iv_index_tbl.
+ since RCLASS_SUPER() is commonly used inside while loops, we move it
+ back inside struct RClass to improve cache hits. this provides a
+ small improvement (1%) in hotspots like rb_obj_is_kind_of()
+ * internal.h (struct rb_classext_struct): remove super, add
+ iv_index_table
+ * internal.h (RCLASS_SUPER): update for new location
+ * internal.h (RCLASS_SET_SUPER): ditto
+ * internal.h (RCLASS_IV_INDEX_TBL): ditto
+ * object.c (rb_class_get_superclass): ditto
+ * include/ruby/backward/classext.h (RCLASS_SUPER): ditto
-Tue Jan 23 15:28:21 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Dec 20 07:07:35 2013 Eric Hodel <drbrain@segment7.net>
- * eval.c (rb_eval): ``ʸȤ᥽å(`)ƤӽФΥ
- 󥿥å奬ǤȤ
+ * lib/rubygems: Update to RubyGems master 03d6ae7. Changes include:
- * ruby.c (addpath): `-I'ץǥǥ쥯ȥ꤬ˡɲä
- 褦ѹ
+ * Fixed typos.
-Fri Jan 19 11:23:12 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * Relaxed Gem.ruby test for ruby packagers that do not use `ruby`.
- * dln.c (load_1): N_INDRб(褿褦ʵ)
+ * test/rubygems: ditto.
-Thu Jan 18 18:14:20 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Thu Dec 19 14:03:04 2013 Koichi Sasada <ko1@atdot.net>
- * ruby.texi: FALSEnilʬΥȿǤ
+ * gc.c (heap_get_freeobj): improve hot path performance.
-Tue Jan 16 17:39:23 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (heap_get_freeobj_from_next_freepage): replace with
+ heap_get_freepage(). It returns freeobj instead of freepage.
+ This is not on hot path.
- * version 0.96 - ȤꤢnilFALSE̤
+Thu Dec 19 12:05:17 2013 Eric Hodel <drbrain@segment7.net>
-Wed Jan 10 15:31:48 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/rubygems: Update to RubyGems master af60443. Changes include:
- * re.c (reg_match): ޥåʤäͤFALSE
+ * Improved speed of `gem install --ignore-dependencies`.
- * object.c (rb_equal): `0 == nil'TRUEˤʤХ
+ * Open read-write for exclusive flock. [ruby-trunk - Bug #9257]
-Tue Jan 9 00:44:58 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * Remove specification before install to prevent infinite loop.
- * nilFALSEʬΥǽѹ
+Thu Dec 19 11:23:49 2013 Aman Gupta <ruby@tmm1.net>
- * nilFALSE0ζ̤̩ˡ
+ * vm_insnhelper.c (vm_call_iseq_setup_normal): simple for loop
+ condition optimization. this area shows up as a hotspot in VM
+ profiles.
- * struct.c (struct_new): 0ǽɬפ̵ʤä
+Thu Dec 19 10:50:13 2013 Koichi Sasada <ko1@atdot.net>
- * object.c (inspect_i): ֥ȤΥåΥХ(Fixnumcore
- dumpƤ)
+ * gc.c (newobj_of): don't need to RBASIC_SET_CLASS() which includes WB
+ here because created obj is always YOUNG/INFANT.
- * range.c (range_to_s): Rangeɽ
+Thu Dec 19 10:48:37 2013 Koichi Sasada <ko1@atdot.net>
- * object.c (true_inspect): TRUEɽ`TRUE'ˡ
+ * benchmark/gc/gcbench.rb: check GC::OPTS availability
+ for not MRI 2.1.0.
-Mon Jan 8 15:02:33 1996 Yukihiro Matsumoto <matz@caelum.co.jp>
+Thu Dec 19 03:10:30 2013 Aman Gupta <ruby@tmm1.net>
- * numeric.c (fix_mul): divide by zero errorȯ(Сե
- ФΥХ)
+ * gc.c (heap_get_freeobj): remove redundant assignment. heap->freelist
+ is set after the while() loop already.
- * texinfo.texѥå˴ޤ᤿
+Thu Dec 19 01:54:30 2013 Koichi Sasada <ko1@atdot.net>
-Sun Dec 31 00:08:49 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/runner.rb: fix commit miss on r44278.
- * eval.c (rb_eval): `::'ǤϡΥ饹줿򻲾Ȥ
- 褦ѹ
+Thu Dec 19 00:26:11 2013 Koichi Sasada <ko1@atdot.net>
- * string.c (Init_String): eacheach_lineᤷ
+ * gc.c (garbage_collect_body): lazy_sweep setting should work
+ without USE_RGENGC.
-Thu Dec 28 12:31:55 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Dec 18 23:31:04 2013 Koichi Sasada <ko1@atdot.net>
- * eval.c (rb_eval): caseα黻Ҥ`=~'`==='ˡ
+ * gc.c (gc_profile_dump_major_reason): fix this function because major_reason
+ can be OR of multiple reasons.
- * variable.c (rb_const_set): 饹κ(Ʊ饹
- Բ)ٹϽФ
+ * gc.c (gc_profile_dump_on): ditto.
-Wed Dec 27 13:27:52 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Dec 18 17:03:00 2013 Koichi Sasada <ko1@atdot.net>
- * version 0.95c
+ * gc.c (gc_profile_record_get): should return an empty array
+ when profiling is active.
- * ext/tkutil/tkutil.c: wishäƤʤƤѥ
- 褦ˡ
+Wed Dec 18 16:49:40 2013 Koichi Sasada <ko1@atdot.net>
- * lib/tk.rb: ĶѿPATH{wish|wish4.0}õ褦ˡ
+ * gc.c (gc_profile_clear, gc_profile_enable): remove rest_sweep().
-Tue Dec 26 01:03:42 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c: check objspace->profile.current_record before inserting
+ profiling record by new macro gc_prof_enabled().
- * sample/ruby-mode.el (ruby-parse-region): ɽθж
+Wed Dec 18 14:32:06 2013 Koichi Sasada <ko1@atdot.net>
- * numeric.c (fix_mul): 軻ΥСեХ르ꥺΥХ
+ * vm_exec.h (VM_DEBUG_STACKOVERFLOW): added.
+ disable stack overflow check for every stack pushing as default.
- * ext/extmk.rb.in: ./install-shȤPATHĴ
+ * vm_exec.c (vm_stack_overflow_for_insn): ditto.
- * Makefile.in (install): lib/*.rbĤĥ󥹥ȡ롥
+Wed Dec 18 10:00:22 2013 Eric Hodel <drbrain@segment7.net>
- * io.c (io_each_line): ƥ졼ͤnil졥
+ * lib/rubygems: Update to RubyGems master d8f12e2. This increases the
+ speed of `gem install --ignore-dependencies` which helps bundler
+ tests.
+ * test/rubygems: ditto.
-Fri Dec 22 10:34:32 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Dec 18 09:00:17 2013 Koichi Sasada <ko1@atdot.net>
- * version 0.95b
+ * test/ruby/test_gc.rb (test_expand_heap): allow +/-1 diff.
- * variable.c (f_untrace_var): 2ꤹtrace
- Ǥ褦ˡ
+Tue Dec 17 23:44:15 2013 Kazuki Tsujimoto <kazuki@callcc.net>
- * variable.c (f_trace_var): 2nilλtrace롥
+ * test/ruby/test_io.rb: fix duplicated test name.
- * lib/tk.rb (file_readable/file_writable): 2nilˤ뤳
- ˤevent handlerκ
+Tue Dec 17 20:15:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (variable): ɥȤ`__FILE__'`__LINE__'Ĥä
- `caller(0)'ѤϤäΤˡ
+ * hash.c (rb_hash_reject): revert to deprecated behavior, with
+ warnings, due to compatibility for HashWithDifferentAccess.
+ [ruby-core:59154] [Bug #9223]
- * eval.c (f_eval): $!Υꥻåȡ
+Tue Dec 17 17:30:56 2013 Akinori MUSHA <knu@iDaemons.org>
- * error.c (err_sprintf): "\n"ղäΤߤ᤿
+ * misc/ruby-electric.el: Import version 2.1.1 from
+ https://github.com/knu/ruby-electric.el.
- * parse.y (f_arglist): ꥹľif/whileɤߴְ㤤
- lex_stateͤꤵƤʤä
+ * ruby-electric-delete-backward-char: Enable support for number
+ prefix.
-Thu Dec 21 00:56:57 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ruby-electric-curlies: Fix electric operation after an open
+ curly.
- * version 0.95a - ^^;;;
+Tue Dec 17 16:19:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/tkscrollbox.rb: ѥåäƤʤä
+ * vm_trace.c (rb_postponed_job_flush): isolate exceptions in
+ postponed jobs and restore outer ones. based on a patch by
+ tarui. [ruby-core:58652] [Bug #9168]
- * configure.in: FILE structureΥå˥Х
+Tue Dec 17 10:48:04 2013 Aman Gupta <ruby@tmm1.net>
- * Makefile.in (clean): extʲinstallƤ
+ * configure.in (RUBY_DTRACE_POSTPROCESS): Fix compatibility with
+ systemtap on linux. stap requires `dtrace -G` post-processing, but
+ the dtrace compatibility wrapper is very strict about probes.d
+ syntax.
- * ext/socket/extconf.rb: Solarisˤ-lnlsΥå
+Tue Dec 17 05:18:17 2013 Eric Hodel <drbrain@segment7.net>
- * array.c (beg_len): Хäġᤷ
+ * lib/rubygems: Update to RubyGems master 1c5f4b3. Allows rubygems
+ repackagers to disable backward-compatible shared gem directory
+ behavior.
+ * test/rubygems: ditto.
- * version 0.95 - fj.sources
+Tue Dec 17 05:14:35 2013 Eric Hodel <drbrain@segment7.net>
- * eval.c (rb_eval): rescueΥårb_rescue()˰층
+ * NEWS (RDoc): Update version number so I don't have to change it
+ for the final release.
-Wed Dec 20 19:30:58 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Dec 16 19:19:19 2013 Koichi Sasada <ko1@atdot.net>
- * Makefile.in: פʥѥβ(괰)
+ * gc.c (rb_objspace_markable_object_p): should check special_const_p
+ first (by is_markable_object()).
- * class.c (singleton_class_new): `single'->`singleton'
+Mon Dec 16 19:12:54 2013 Koichi Sasada <ko1@atdot.net>
-Tue Dec 19 07:14:33 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/objspace/objspace.c (reachable_object_from_root_i): use
+ compare_by_identity hash to avoid hash modify problem
+ during iteration.
+ [Bug #9252]
- * io.c (closed?): IOcloseƤ뤫ɤΤҸ졥
+ * ext/objspace/objspace.c (reachable_objects_from_root): ditto.
- * parse.y (primary): ðۥ᥽åɤΰlex_stateŬڡ
+Mon Dec 16 18:16:28 2013 Koichi Sasada <ko1@atdot.net>
- * lib/tk.rb: tcl->rubyѴؿѰա
+ * gc.c (gc_verify_internal_consistency): should not use
+ rb_objspace_each_objects() because it call rest_sweep().
- * ext/extmk.rb.in (install): install2ťѥβ
+Mon Dec 16 18:07:30 2013 Koichi Sasada <ko1@atdot.net>
- * array.c (range_beg_len): rangeŬڤʥ顼
+ * gc.c (rb_objspace_markable_object_p): fix last commit (build error).
- * string.c (str_aref): rangeΥХ
+Mon Dec 16 18:04:28 2013 Koichi Sasada <ko1@atdot.net>
- * lib/tk.rb (tk_split_list): TclΥꥹȤб
+ * gc.c (rb_objspace_markable_object_p): it should be live objects.
-Mon Dec 18 09:58:12 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Dec 16 18:00:51 2013 Koichi Sasada <ko1@atdot.net>
- * version 0.94
+ * gc.c (rb_objspace_each_objects): should not clear dont_lazy_sweep
+ flag in nested case.
- * dln.c (dln_load): HPб(̤ǧ)
+Mon Dec 16 16:40:35 2013 Koichi Sasada <ko1@atdot.net>
- * eval.c (Init_Proc): BlockProc˲̾
+ * vm_method.c (rb_method_entry_make): fix WB miss.
+ Note that rb_method_entry_t::klass is not constified.
+ We may constify this field.
-Sat Dec 16 13:46:14 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/ruby/test_alias.rb: add a test.
- * eval.c (rb_eval): retryǥƥ졼κƼ¹ԤǤ褦ˡ
+Mon Dec 16 14:14:22 2013 Koichi Sasada <ko1@atdot.net>
-Fri Dec 15 17:14:30 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c: use gc_verify_internal_consistency() instead of
+ gc_check_before_marks_i() for check consistency
+ on RGENGC_CHECK_MODE >= 2.
- * eval.c: proc:lambdaοƤߤ䤹̾
+Mon Dec 16 14:01:48 2013 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Dec 14 17:21:55 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * process.c (make_clock_result): add :second as a unit for
+ Process.clock_gettime.
- * eval.c (dyna_var_asgn): ƥ졼֥åǺǽ˽줿
- ѿͭϰϤ򤽤Υ֥å˸ꡥlambdaȸƤ
- ʤȤϤʤ
+Mon Dec 16 13:10:54 2013 Koichi Sasada <ko1@atdot.net>
-Wed Dec 13 02:30:58 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c: introduce GC.verify_internal_consistency method to verify GC
+ internal data structure.
- * gc.c: autoloadΥޡߥ
+ Now this method only checks generation (old/young) consistency.
- * lib/tk.rb: wishʣԤͤб
+Mon Dec 16 11:49:26 2013 Aman Gupta <ruby@tmm1.net>
- * lib/tkcomposite.rb: ʣwidget
+ * gc.c (gc_info_decode): Fix build errors when compiled with
+ RGENGC_ESTIMATE_OLDMALLOC=0
+ * gc.c (objspace_malloc_increase): ditto
- * variable.c (rb_class2path): ICLASSбƤʤä
+Sun Dec 15 13:38:29 2013 Koichi Sasada <ko1@atdot.net>
- * eval.c (ruby_run): exit(0)ΥХ
+ * ext/objspace/objspace.c (reachable_object_from_root_i):
+ reachable objects should not include categories and
+ category_objects because it is noisy information.
-Sat Dec 9 01:21:24 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ In fact, objects created after calling
+ ObjectSpace.reachable_objects_from_root should not be included
+ as a returning hash objects. Currently, mswin64 platform has a
+ problem because of this behavior. Should we trace new objects?
- * ext/marshal/marshal.c (dumps|load): ʸФϤǽ
- (¤ϥեͳʤΤ)
+Sun Dec 15 07:09:28 2013 Eric Hodel <drbrain@segment7.net>
-Fri Dec 8 18:29:11 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/rdoc: Update to RDoc master 263a9e5. This improves the
+ accessibility of the search box.
- * ext/marshal/marshal.c: ܥ٤롥
+Sat Dec 14 17:39:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Dec 7 07:58:50 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * vm_insnhelper.c (vm_callee_setup_arg_complex): count post
+ arguments as mandatory arguments. [ruby-core:57706] [Bug #8993]
- * parse.y (yylex): 1ɽǧ˥顼äƱ
- ֿ򸺤餷
+ * vm_insnhelper.c (vm_yield_setup_block_args): ditto.
- * string.c (str_sub): ִǥå礭
+Sat Dec 14 16:26:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Dec 6 15:14:23 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * configure.in (rubylibprefix): replace exec_prefix as well as
+ bindir and libdir. a patch by kimuraw (Wataru Kimura) at
+ [ruby-dev:47852]. [Bug #9160]
- * string.c (str_sub_method): sub/gsub(!ʤ)ִԤʤʤ
- ִʸ֤
+Sat Dec 14 14:42:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Dec 5 00:55:15 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/logger.rb (lock_shift_log): no need to rotate the log file
+ if it has been rotated by another process. based on the patch
+ by no6v (Nobuhiro IMAI) in [ruby-core:58620]. [Bug #9133]
- * parse.y (yylex): ̤άΰŸ`*'б
+Sat Dec 14 13:01:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (ruby_run): EXITϥɥǤ㳰б
+ * proc.c (mnew_from_me): method by respond_to_missing? should be
+ owned by the original class.
- * bignum.c (big_cmp): BignumFixnumӤ롥
+Sat Dec 14 11:55:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 4 14:21:18 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/scanf.rb (IO#scanf): fix mistaken use of rescue modifier.
+ a patch by Mon_Ouie at [ruby-core:52813]. [Bug #7940]
- * parse.y (call_op): ѥŸ᤿ϫ¿
- Ʊ׾ʤȽǤΤǡ
+Sat Dec 14 11:44:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Nov 30 01:35:15 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * util.c (ruby_qsort): fix potential stack overflow on a large
+ machine. based on the patch by Conrad Irwin <conrad.irwin AT
+ gmail.com> at [ruby-core:51816]. [Bug #7772]
- * lib/tk.rb: {Radio,Check}Buttonvariableμ
+Sat Dec 14 11:25:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (rb_yield_0): Block.callͥȤΥХ
+ * object.c (rb_mod_const_defined): support nested class path as
+ well as const_get. [Feature #7414]
- * io.c (f_select): 3Ĥդ֤褦
+Sat Dec 14 01:31:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/tk.rb: fileeventruby¦Ǽ
+ * eval.c (rb_rescue2): reuse tags pushed for body proc to protect
+ rescue proc too.
-Wed Nov 29 17:53:23 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Dec 14 01:15:51 2013 Masaya Tarui <tarui@ruby-lang.org>
- * variable.c (rb_ivar_get): self˻ꤹ褦ˡ
+ * gc.c (wmap_final_func): Bugfix. Should update *value to new pointer.
-Tue Nov 14 00:07:29 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Dec 14 01:05:46 2013 Tanaka Akira <akr@fsij.org>
- * lib/tk.rb: Tk4.0б
+ * ext/socket/lib/socket.rb: Don't test $! in "ensure" clause because
+ it may be set before the body.
+ Reported by ko1 and mrkn. [ruby-core:59088] [Bug #9247]
-Mon Nov 13 16:23:32 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/cgi/core.rb: Ditto.
- * version 0.93
+ * lib/drb/ssl.rb: Ditto.
-Thu Nov 9 23:26:01 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Dec 14 00:34:31 2013 Naohisa Goto <ngotogenome@gmail.com>
- * gc.c (gc_mark): ⥸塼MixinΥޡ˺졥
+ * internal.h (ruby_sized_xrealloc2): fix typo introduced in r44117,
+ which cause compile error on Solaris.
- * parse.y (f_arglist): ᥽åΰ̤dzʤƤɤ
- 褦ˤ
+Sat Dec 14 00:22:16 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Nov 8 00:17:51 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * thread.c: (exec_recursive): use rb_catch_protect() instead of
+ rb_catch_obj() and PUSH_TAG(), and reduce pushing tags and
+ machine stack usage.
- * eval.c (rb_yield_0): ̤Υѿä
+Sat Dec 14 00:18:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (rb_eval): pendig signalΥåeval¹Ը˹Ԥ褦
- ˤǤʤȥʥȯȸФΥƤޤ롥
+ * proc.c (mnew_from_me): achieve the original defined_class from
+ prepended iclass, to fix inherited owner.
- * parse.y: classʸsuperclass鼰˳ĥ
+ * proc.c (method_owner): return the defined class, but not the
+ class which the method object is created from.
- * lib/tk.rb: TkΤۤɥ饹бХȥƥ
- ȾΥ֥ȤĤäƤ롥
+Fri Dec 13 22:29:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Nov 7 08:18:37 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * proc.c (method_owner): return the class where alias is defined, not
+ the class original method is defined.
- * signal.c (trap): ֥åǤ褦ˡ
+ * vm_method.c (rb_method_entry_make, rb_alias): store the originally
+ defined class in me. [Bug #7993] [Bug #7842] [Bug #9236]
-Mon Nov 6 16:44:00 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * vm_method.c (rb_method_entry_get_without_cache): cache included
+ module but not iclass.
- * eval.c (f_caller): ƽиξ롥
+Fri Dec 13 16:27:17 2013 Aman Gupta <ruby@tmm1.net>
- * ext/tkutil/tkutil.c: wishstderrϤƻ뤹뤳Ȥǡ顼
- Ԥ
+ * gc.c (gc_info_decode): Use :major_by=>:nofree as fallback reason
+ when other trigger conditions are present.
- * ext/tkutil/tkutil.c: wishȤ̿Cǵҡ
+Fri Dec 13 13:25:30 2013 Koichi Sasada <ko1@atdot.net>
-Sat Nov 4 01:12:59 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * error.c: add Exception#backtrace_locations.
+ Now, there are no setter and independent from Exception#backtrace.
+ [Feature #8960]
- * sample/ruby-mode.el (ruby-calculate-indent): ǥȤη׻
- ⤦ޡȤˤ(ɽΥå³ԤΥå)
+ * eval.c (setup_exception): set backtrace locations for `bt_location'
+ special attribute.
- * eval.c (rb_call): ̵ºƵ򤱤뤿ᡤؿΥͥȥ٥
- Ԥʤ
+ * vm_backtrace.c (rb_backtrace_to_location_ary): added.
- * lib/tk.rb: Tk󥿡եޤԴ
+ * internal.h: ditto.
- * eval.c (rb_yield_0): BlockΥХ
+ * test/ruby/test_backtrace.rb: add a test for
+ Exception#backtrace_locations.
- * sample/ruby-mode.el (ruby-calculate-indent): α黻Ҥˤ
- Է³б
+Fri Dec 13 12:01:07 2013 Koichi Sasada <ko1@atdot.net>
-Fri Nov 3 12:56:21 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (garbage_collect_body): use rb_bug() and explicit error message
+ instead of using assert().
+ [Bug #9222]
- * eval.c (rb_call): Τδؿμ¹Ԥ˥Х
+Fri Dec 13 11:52:41 2013 Koichi Sasada <ko1@atdot.net>
- * parse.y (var_extend): ʸѿŸΥХ
+ * array.c: fix comment to remove the word "shady".
- * variable.c (rb_gvar_set): traceɾˤѿͤͿ褦ˡ
+ * variable.c: ditto.
- * eval.c (f_require): ruby scriptrequirebug
+Fri Dec 13 11:33:55 2013 Koichi Sasada <ko1@atdot.net>
- * variable.c (rb_const_get): ⥸塼includeк
+ * gc.c: rename *shady* func/macros.
+ * RVALUE_RAW_SHADY() -> RVALUE_WB_PROTECTED_RAW()
+ * RVALUE_SHADY() -> RVALUE_RAW_SHADY()
+ * rgengc_check_shady() -> rgengc_check_relation().
+ And fix some messages using "shady" to "non-WB-protected".
-Thu Oct 19 13:56:06 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Dec 13 10:04:23 2013 Eric Hodel <drbrain@segment7.net>
- * dln.c (dln_load): HPбǤtypo.
+ * lib/rubygems/request_set/lockfile.rb: Import RubyGems master a8d0669
+ with a 1.8.7 compatibility fix.
+ * test/rubygems/test_gem_request_set_lockfile.rb: ditto.
-Wed Oct 18 17:39:39 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Dec 13 09:50:49 2013 Eric Hodel <drbrain@segment7.net>
- * version 0.92
+ * lib/rubygems: Update to RubyGems master ddac51f. Changes:
- * object.c (krn_type): ֥ȤưŪʷ֤᥽åɡ
+ * Allow override for the shared gem installation directory for
+ rubygems packagers.
-Tue Oct 17 00:48:18 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * Lock gem cache files for read and write to improve thread safety.
- * ruby.c (proc_options): -X ץchdirԤ
+ * Use io/console when available.
- * re.c (reg_search): ɤѹǤ褦ˡѥ
- Υɤѹ줿ˤϥޥåľɽκƥѥ
- ԤKCODEѿ$KCODEء
+ * Minor cleanup.
- * parse.y: ()Τʤcompexpr
+ * test/rubygems: ditto.
- * re.c (reg_search): ꡼ľ
+Fri Dec 13 08:15:31 2013 Aman Gupta <ruby@tmm1.net>
-Fri Oct 13 13:19:19 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * class.c (include_modules_at): use RCLASS_M_TBL_WRAPPER for
+ equality checks. this avoids an unnecessary deference inside a tight
+ loop, fixing a performance regression from r43973.
+ * object.c (rb_obj_is_kind_of): ditto.
+ * object.c (rb_class_inherited_p): ditto.
- * string.c (str_sub): ʸִ˥Х
+Wed Dec 13 02:00:00 2013 Kenta Murata <mrkn@mrkn.jp>
- * string.c (str_strip_bang): ʸθĹĴԤƤ
- ʤä
+ * ext/bigdecimal/bigdecimal.c (VpSetPTR): fix for limitation of the resulting
+ precision.
+ [ruby-core:50269] [Bug #7458]
- * re.c (reg_search): $&, $1...ϥ«褦ˤʤä
- ӽФ᥽åɤǤΥޥåϸפ$&ʤɤͤ˱ƶʤ
- ޥåξ򥹥׳Ȥˤ$~Ȥä«
- Фɬפ롥
+ * test/bigdecimal/test_bigdecimal.rb (test_limit): add tests for the above
+ change.
-Thu Oct 12 00:33:33 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Wed Dec 13 01:56:00 2013 Kenta Murata <mrkn@mrkn.jp>
- * re.c (reg_search): String:split, String:indexǤ$&, $1...Ѳ
- ʤ褦ˤ
+ * ext/bigdecimal/bigdecimal.c (VpAddAbs): put out a conditional branch from
+ the inside of while-loop.
- * io.c (rb_str_setter): setterλͤѹˤʤäƤ
+ * ext/bigdecimal/bigdecimal.c (VpSubAbs): ditto.
- * variable.c (f_trace_var): 2άƥƥ졼ȤƸƤ
- 褦ˡ
+Wed Dec 13 01:53:00 2013 Kenta Murata <mrkn@mrkn.jp>
-Wed Oct 11 11:50:59 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/bigdecimal/bigdecimal.c (VPrint): be a static function, support another
+ dump formats, and add more information of the given bigdecimal.
- * version 0.91
+ * ext/bigdecimal/bigdecimal.h: ditto.
- * variable.c (var_setter): ְäƤ̿ŪХ
+Wed Dec 11 16:45:58 2013 Koichi Sasada <ko1@atdot.net>
- * io.c (pipe_open): $stderrͤѹƤˤϤ
- ҥץstderrꤹ롥
+ * eval.c (rb_raise_jump): call c_return hook immediately after
+ popping `raise' frame.
+ Patches by deivid (David Rodriguez). [Bug #8886]
-Mon Oct 9 13:06:33 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/ruby/test_settracefunc.rb: catch up this fix.
- * object.c (mod_to_s): ⥸塼Υ⥸塼`::'Ȥäɽ
- ɽ褦ˡ
+Wed Dec 11 16:01:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * variable.c (rb_gvar_set): ˤ롼פȯʤ褦ˡ
- traceǤǤtraceɾʤ
+ * hash.c (rb_hash_reject): return a plain hash, without copying
+ the class, default value, instance variables, and taintedness.
+ they had been copied just by accident.
+ [ruby-core:59045] [Bug #9223]
- * struct.c (struct_equal): structequalȽ˥饹ΰפޤ᤿
+Wed Dec 11 15:36:15 2013 Aman Gupta <ruby@tmm1.net>
-Sat Oct 7 00:18:32 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * compile.c (iseq_specialized_instruction): emit opt_aset instruction
+ to optimize Hash#[]= and Array#[]= when called with Fixnum argument.
+ [Bug #9227] [ruby-core:58956]
- * eval.c (rb_eval): defined?εǽĥ(yieldΥåsuper
- ¸ߤʤ)
+Wed Dec 11 04:54:03 2013 Eric Hodel <drbrain@segment7.net>
-Fri Oct 6 12:06:47 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/rubygems: Update to RubyGems master ec8ed22. Notable changes
+ include:
- * version 0.90
+ * Renamed extension_install_dir to extension_dir (backwards
+ compatible).
- * st.c (st_foreach): ǤǿѲƤʤä
+ * Fixed creation of gem.deps.rb.lock file from
+ TestGemRequestSet#test_install_from_gemdeps_install_dir
- * hash.c (hash_values): Хkeys֤Ƥġ
+ * Fixed a typo and some documentation.
- * parse.y (call_op): defined? ΰǤξ߹ߤԤʤ
- (å˥ѥ륨顼ˤʤäƤϺ)
+ * test/rubygems: ditto.
- * ΰľ
+Wed Dec 11 03:18:08 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-Thu Oct 5 00:29:43 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * insns.def: Fix optimization bug of Float#/ [Bug #9238]
- * ؿȥ饹̿̾§ѹؿ̾ѿ̾̽񤭴
+Tue Dec 10 23:58:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (looks_pointerp): ҡץåι®
+ * ext/date/date_strptime.c (date__strptime_internal): unset
+ case-insensitive flag for [:alpha:], which already implies both
+ cases, to get rid of backtrack explosion. [ruby-core:58984]
+ [Bug #9221]
- * struct.c (Fstruct_aset): ¤ΤФ`[]='
- (struct_set): ¤ΥФФ
+Tue Dec 10 23:44:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Oct 4 09:54:07 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * array.c (rb_ary_hash): add salt to differentiate false and empty
+ array. [ruby-core:58993] [Bug #9231]
- * version 0.89
+ * hash.c (rb_any_hash, rb_hash_hash): ditto.
- * eval.c (Frequire): ʥߥåɤΥ顼å򸷤
+Tue Dec 10 18:16:09 2013 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
- * struct.c: structι¤˽񤭴Ͻդ
- id->valueϢǤä٤Ϲ¤˿饹
- 褦ˤ
+ * man/ruby.1: [DOC] Use www.ruby-toolbox.com instead of RAA.
- * parse.y: `::'ΰ̣Assoc饯饹(⥸塼)
- ѹ
+Tue Dec 10 17:21:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * assoc.c: ʤ
+ * gc.c (wmap_finalize, wmap_aset_update): use simple malloced array
+ instead of T_ARRAY, to reduce GC pressure.
-Tue Oct 3 13:31:08 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Tue Dec 10 15:56:48 2013 Aman Gupta <ruby@tmm1.net>
- * variable.c (Ftrace_var): trace_var, ѿؤν񤭹hook
- ꤹ롥
+ * gc.c (reflist_add): revert changes from r44109. it is unnecessary
+ after r44113
+ * gc.c (allrefs_i): fix whitespace
+ * gc.c (allrefs_roots_i): fix whitespace
- * variable.c: global_entryι񤭴trace_var
- Ǥ롥
+Tue Dec 10 15:46:03 2013 Koichi Sasada <ko1@atdot.net>
- * file.c (Ffile_stat): "&"ľfstatη̤⻲ȤǤ褦ˡ
+ * gc.c (allrefs_add): push obj only if allrefs table doesn't have
+ obj.
-Fri Sep 29 14:15:13 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (allrefs_roots_i): ditto.
- * version 0.88
+Tue Dec 10 15:28:10 2013 Koichi Sasada <ko1@atdot.net>
- * dln.c (dln_load): AIXHPбɤ줿(ư̤ǧ)
+ * gc.c (RGENGC_CHECK_MODE): separate checkers to different modes.
+ * 2: enable generational bits check (for debugging)
+ * 3: enable livness check
+ * 4: show all references
- * ext/extmk.rb.in: ɬפ˱ơEXTLIB褦ˡ
+Tue Dec 10 15:15:37 2013 Koichi Sasada <ko1@atdot.net>
- * dln.c (dln_load): dlnΩ˽񤭴롥γĥѡ
- (load_1): dln_a_outˤƥɤǥ饤֥Ū˥
- ɤɬפʤ褦ѹ
+ * gc.c (gc_marks_check): disable GC during checking and
+ restore malloc_increase info.
-Thu Sep 28 13:31:37 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Tue Dec 10 14:41:53 2013 Aman Gupta <ruby@tmm1.net>
- * sample/ruby-mode.el: äȤޤhilit19б(ɽ)
+ * gc.c (reflist_add): return 0 if reference already exists
+ * gc.c (allrefs_add): return 1 on newly added references
+ * gc.c (allrefs_i): follow references to construct complete object
+ graph. before this patch, RGENGC_CHECK could fail to verify some WB
+ miss issues. [Bug #9226] [ruby-core:58959]
-Wed Sep 27 04:12:44 1995 Takahasi Mamoru <taka@soum.co.jp>
+Tue Dec 10 11:20:56 2013 Aman Gupta <ruby@tmm1.net>
- * sample/test.rb: echo-nȤʤ褦(SysVк)
+ * ext/objspace/objspace_dump.c (dump_object): include fstring flag on
+ strings. include gc flags (old, remembered, wb_protected) on all objects.
+ * ext/objspace/objspace_dump.c (Init_objspace_dump): initialize lazy
+ IDs before first use.
+ * gc.c (rb_obj_gc_flags): new function to retrieve object flags
+ * internal.h (RB_OBJ_GC_FLAGS_MAX): maximum flags allowed for one obj
+ * test/objspace/test_objspace.rb (test_dump_flags): test for above
+ * test/objspace/test_objspace.rb (test_trace_object_allocations):
+ resolve name before dump (for rb_class_path_cached)
- * ext/extmk.rb.in: sub -> sub!
+Tue Dec 10 07:48:29 2013 Aman Gupta <ruby@tmm1.net>
-Tue Sep 26 19:12:42 1995 Yasuo OHBA <jammy@csg.mes.co.jp>
+ * vm_method.c (rb_clear_method_cache_by_class): fire
+ ruby::method-cache-clear probe on global or klass-level method cache
+ clear [Bug #9190]
+ * probes.d (provider ruby): new dtrace probe
+ * doc/dtrace_probes.rdoc: docs for new probe
+ * test/dtrace/test_method_cache.rb: test for new probe
- * dln.c (dln_find_1): `.', `..'Ϥޤѥб.
+Tue Dec 10 06:14:11 2013 Eric Hodel <drbrain@segment7.net>
-Mon Sep 25 12:33:03 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/.document: Remove curses from documentable directories.
- * version 0.87
+Tue Dec 10 04:55:36 2013 Zachary Scott <e@zzak.io>
-Sat Sep 23 10:00:18 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/openssl/lib/openssl/digest.rb: Deprecate OpenSSL::Digest::Digest
+ [Fixes GH-446] https://github.com/ruby/ruby/pull/446
- * eval.c (Fmod_modfunc): ᥽åɤprivateˤƱðۥ᥽å
- ᥽åɡѥåŪȤΥ⥸塼ѡ
+Tue Dec 10 00:41:42 2013 Kazuki Tsujimoto <kazuki@callcc.net>
-Fri Sep 22 11:02:44 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/thread/thread.c: [DOC] add call-seq alias for Queue#enq, #<<, etc.
- * lib/find.rb: find󶡤饤֥
+ * ext/thread/thread.c (Init_thread): use rb_define_alias instead of
+ rb_alias to document alias.
- * variable.c (rb_define_variable): hookʬΥ
- (add_hook): 1ѿФʣhookǤ褦ˡ
+Mon Dec 9 20:00:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
-Thu Sep 21 00:22:11 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * internal.h (RCLASS_SERIAL): Add RCLASS_SERIAL as a convenience
+ accessor for RCLASS_EXT(klass)->class_serial.
- * string.c (Fstr_frozen): ʸ󤬹ԲĤɤå
- ᥽åɡ
+ * class.c, vm_insnhelper.c, vm_method.c: Use RCLASS_SERIAL
- * hash.c (Fhash_aset): keyʸλƤѲʤ褦
- ˡdupfreeze롥
+Mon Dec 9 19:50:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
-Wed Sep 20 16:12:44 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * compile.c, insns.def, test/ruby/test_rubyvm.rb, vm.c, vm_core.h,
+ vm_insnhelper.c, vm_insnhelper.h, vm_method.c: Rename method_serial
+ to global_method_state and constant_serial to global_constant_state
+ after discussion with ko1.
- * version 0.86
+Mon Dec 9 18:50:43 2013 Aman Gupta <ruby@tmm1.net>
- * ext/extmk.rb.in (have_header): å˥Х
+ * hash.c (rb_hash_replace): fix segv on `{}.replace({})` introduced
+ in r44060 [Bug #9230] [ruby-core:58991]
+ * test/ruby/test_hash.rb: regression test for above
- * ext/extmk.rb.in (have_library): νѤä
+Mon Dec 9 18:10:10 2013 Koichi Sasada <ko1@atdot.net>
-Thu Sep 14 18:00:59 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * vm.c (vm_stat): renamed from ruby_vm_stat.
+ Should not use ruby_ prefix here.
- * object.c (obj_is_instance_of): is_member_of̾ѹ
+Mon Dec 9 16:13:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- Wed Sep 13 15:44:35 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (wmap_size): add ObjectSpace::WeakMap#size and #length.
- * string.c (Fstr_tr_bang): ϰϳʸФѴХ
+Mon Dec 9 15:26:17 2013 Shugo Maeda <shugo@ruby-lang.org>
-Tue Sep 12 14:27:58 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/test_curses.rb: removed.
- * file.c (Sfile_expand_path): expand_file_name -> expand_path̾
- ѹ
+Mon Dec 9 13:36:55 2013 Shugo Maeda <shugo@ruby-lang.org>
- * enum.c (Fenum_member): includes? -> member? ̾ѹ
+ * ext/curses, sample/curses: removed curses.
- * string.c (Fstr_each_byte): StringByteArrayǤȤܤ
- ơeacheach_byteѹޤǤeacheach_lineǥ
- Ǥ롥
+ * NEWS: added an entry for the above change.
-Mon Sep 11 18:31:17 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Dec 9 12:26:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * file.c (cache_stat): ե̾Ȥ"&"ꤹľ
- stat(2)η̤Ѥ褦ˡ
+ * ext/objspace/object_tracing.c (newobj_i): use cached class path
+ only to get rid object allocation during NEWOBJ hook.
+ [ruby-core:58853] [Bug #9212]
-Fri Sep 8 14:18:51 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * variable.c (rb_class_path_cached): returns cached class path
+ only, without searching and allocating new class path string.
- * ruby.texi: `!', `?'бƥåץǡȡ
+Mon Dec 9 11:14:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y: defined -> defined?
+ * ext/date/date_parse.c (parse_time): unset case-insensitive flag
+ for [:alpha:], which already implies both cases, to get rid of
+ backtrack explosion. [ruby-core:58876] [Bug #9221]
- * file.c: FileOpΰʸ᥽åɤʤʸƥȤtest᥽
- ɤˤޤ롥
+Mon Dec 9 08:40:40 2013 Eric Hodel <drbrain@segment7.net>
- * parse.y (yylex): ѿ̾θ`?'Ҹ᥽åɤθ
- `?'ɲä롥
+ * lib/rubygems: Update to RubyGems master bf37240. Fixes useless
+ error message with `gem install -g` with no gem dependencies file.
+ * test/rubygems: ditto.
-Thu Sep 7 20:01:33 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Mon Dec 9 04:52:25 2013 Eric Hodel <drbrain@segment7.net>
- * string.c: ʸȤ򹹿᥽åɤ̾ν`!'ղá
- `!'̵СѰդ
+ * NEWS: Update RubyGems entry with notable features.
- * parse.y: ѿ̾θ`!'
+Mon Dec 9 04:43:54 2013 Eric Hodel <drbrain@segment7.net>
-Wed Sep 6 14:12:19 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * ext/.document: Add syslog/lib and thread/thread.c to documentable
+ items. [ruby-trunk - Bug #9228]
- * version 0.85
+Mon Dec 9 04:28:50 2013 Eric Hodel <drbrain@segment7.net>
- * string.c (Fstr_dup): ʸʣ
- (Fstr_freeze): ʸιԲ°Ǥ褦ˡ
- (Fsub/Fgsub): $_ƤdupƤִԤ褦ˡ
+ * lib/rubygems: Update to RubyGems master 096db36. Changes include
+ support for PATH in Gemfile.lock and a typo fix from Akira Matsuda.
+ * test/rubygems: ditto.
- * ruby.h (CLONESETUP): flagsξ֤⥳ԡ
+Mon Dec 9 02:10:32 2013 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Sep 5 01:27:50 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/net/http/responses.rb:
+ Add `HTTPIMUsed`, as it is also supported by rack/rails.
+ RFC - http://tools.ietf.org/html/rfc3229
+ by Vipul A M <vipulnsward@gmail.com>
+ https://github.com/ruby/ruby/pull/447 fix GH-447
- * sample/test.rb: ԤθФ򸷤
+Sun Dec 8 20:47:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Aug 25 14:31:02 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * class.c (rb_get_kwargs): when values is non-null, remove
+ extracted keywords from the rest keyword argument.
- * process.c (Ffork): ƥ졼ȤƤư褦ˡ
+Sun Dec 8 20:26:54 2013 Yutaka Kanemoto <kanemoto@ruby-lang.org>
- * version 0.84
+ * common.mk (ruby.imp): avoid circular dependency on AIX
- * signal.c (sig_beg): ϥɥ餬ꤵƤˤϺꤷʤ
+Sun Dec 8 20:21:00 2013 Kenta Murata <mrkn@mrkn.jp>
- * ext/extmk.rb.in (create_makefile): shared objectΥ󥯤κݤ
- `-l'ץꤹ褦ˡ
+ * bigdecimal.c (BigDecimal_coerce): convert a Float to a BigDecimal instead
+ of converting the receiver to a Float. The reason is there are BigDecimal
+ instances with precisions that is smaller than the Float's precision.
+ [ruby-core:58756] [Bug #9192]
- * signal.c (trap): `EXIT'ǽλԤ꤬롥
+ * test/bigdecimal/test_bigdecimal.rb: add tests for the above change.
-Wed Aug 16 00:13:22 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sun Dec 8 18:28:20 2013 Kazuki Tsujimoto <kazuki@callcc.net>
- * signal.c (sig_beg): ǥեȤǤbeginǤSIGINTª
- 褦ѹ
+ * NEWS: [DOC] update NEWS about GC.
- * io.c (io_ctl): fcntlʤƥˤб
+Sun Dec 8 17:52:24 2013 Kazuki Tsujimoto <kazuki@callcc.net>
- * ƥǥ쥯ȥʬƤMANIFESTޤȤ᤿ĥ⥸塼
- ˤɬס
+ * object.c: [DOC] document Module#singleton_class?.
- * string.c (Sstr_new,str_sub,Fstr_crypt): ưŪʸ
- 褦ˡ
+Sun Dec 8 16:19:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Aug 12 00:44:02 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * class.c (rb_get_kwargs): if optional is negative, unknown
+ keywords are allowed.
- * string.c (Fstr_crypt): PD cryptѰդ
+ * vm_insnhelper.c (vm_callee_setup_keyword_arg): check unknown
+ keywords.
-Fri Aug 11 14:37:03 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sun Dec 8 14:55:12 2013 Kazuki Tsujimoto <kazuki@callcc.net>
- * assoc.c (Fassoc_clone): assoccloneǤ褦ˡ
+ * array.c (rb_ary_shuffle_bang, rb_ary_sample): rename local variables.
- * io.c: ޥREAD_DATA_PENDINGѹ(Linuxб)
+Sun Dec 8 13:59:38 2013 Kazuki Tsujimoto <kazuki@callcc.net>
- * io.c (io_fptr_finalize): fptrγνǤ褦ˡ
+ * array.c (rb_ary_shuffle_bang, rb_ary_sample): check
+ unknown keywords.
-Wed Aug 9 16:52:41 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/ruby/test_array.rb (test_shuffle, test_sample): tests for
+ the above.
- * eval.c (rb_provided): ʣfeatureɤ̵¥롼פ
- Ȥñ()ߥ
+Sun Dec 8 13:01:11 2013 Aman Gupta <ruby@tmm1.net>
- * ext/extmk.rb.in (install): dlopenбԤäޤdlnˤ
- ʬбƤʤä
+ * vm.c (ruby_vm_stat): add RubyVM.stat() for access to internal cache
+ counters. this methods behaves like GC.stat, accepting an optional
+ hash or symbol argument. [Bug #9190] [ruby-core:58750]
+ * test/ruby/test_rubyvm.rb: test for new method
-Tue Aug 8 14:17:06 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sun Dec 8 11:59:40 2013 Aman Gupta <ruby@tmm1.net>
- * version 0.83
+ * hash.c (rb_hash_replace): add a write barrier to fix GC mark miss on
+ hashes using Hash#replace [Bug #9226] [ruby-core:58948]
-Mon Aug 7 12:47:41 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sun Dec 8 11:21:00 2013 Aman Gupta <ruby@tmm1.net>
- * parse.y: resque -> rescueѤtypoĤƤ櫓ˤ
- ʤʤʤǺޤǵĤʤäΤġ
+ * include/ruby/ruby.h: add RGENGC_WB_PROTECTED_NODE_CREF setting
+ In a large app, this reduces the size of
+ remembered_shady_object_count by 80%. [Bug #9225] [ruby-core:58947]
+ * gc.c (rb_node_newnode): add FL_WB_PROTECTED flag to NODE_CREF
+ * class.c (rewrite_cref_stack): insert OBJ_WRITE for NODE_CREF
+ * iseq.c (set_relation): ditto
+ * iseq.c (rb_iseq_clone): ditto
+ * vm_eval.c (rb_yield_refine_block): ditto
+ * vm_insnhelper.c (vm_cref_push): ditto
+ * vm_insnhelper.h (COPY_CREF): ditto
-Thu Aug 3 18:18:05 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sun Dec 8 10:45:05 2013 Aman Gupta <ruby@tmm1.net>
- * missing/nt.c: NTܿѤδؿޤȤ᤿
+ * hash.c (hash_aset_str): revert r43870 due to performance issue
+ [Bug #9188] [ruby-core:58730]
+ * parse.y (assoc): convert literal string hash keys to fstrings
+ * test/ruby/test_hash.rb (class TestHash): expand test
- * variable.c (rb_const_get): ޤ㳰ȯ褦ˤdefined
- ʾ㳰ȯʤͳʤΤ(㳰ȯ
- ץߥθФʤɤͭ)
+Sun Dec 8 10:22:38 2013 Aman Gupta <ruby@tmm1.net>
- * variable.c (Fautoload): autoload٤ϻȤ뤫
+ * parse.y (register_symid_str): use fstrings in symbol table
+ [Bug #9171] [ruby-core:58656]
+ * parse.y (rb_id2str): ditto
+ * string.c (rb_fstring): create frozen_strings on first usage. this
+ allows rb_fstring() calls from the parser (before cString is created)
+ * string.c (fstring_set_class_i): set klass on fstrings generated
+ before cString was defined
+ * string.c (Init_String): convert frozen_strings table to String
+ objects after boot
+ * ext/-test-/symbol/type.c (bug_sym_id2str): expose rb_id2str()
+ * test/-ext-/symbol/test_type.rb (module Test_Symbol): verify symbol
+ table entries are fstrings
-Mon Jul 31 15:44:21 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sun Dec 8 10:24:20 2013 Eric Hodel <drbrain@segment7.net>
- * parse.y (arg_ambiguous): 1Τޤٹ(-vץ
- ͭ)
+ * lib/rubygems.rb: Update version for upcoming ruby 2.1.0 RC.
- * eval.c (rb_eval): `-v'ץĤ`def'ƤФɬ
- ʥ顼åФ
+Sun Dec 8 10:21:36 2013 Eric Hodel <drbrain@segment7.net>
- * parse.y (yylex): ᥽åɤ1Ƚ⤦äȸ
+ * lib/rubygems: Update to RubyGems master 14749ce. This fixes bugs
+ handling of gem dependencies lockfiles (Gemfile.lock).
-Fri Jul 28 19:04:43 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/rubygems: ditto.
- * parse.y (yylex): `+/-/['ľ˶뤫ɤưѹ
- (ΤȤ?)
+Sun Dec 8 09:40:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
-Wed Jul 26 09:21:23 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * array.c (rb_ary_or): use RHASH_TBL_RAW instead of RHASH_TBL
- * version 0.82a
+ * process.c (rb_execarg_fixup): use RHASH_TBL_RAW and insert write
+ barriers where appropriate
- * sprintf.c (Fsprintf): `%s''\0'ޤʸб
+ * vm.c (kwmerge_i): use RHASH_TBL_RAW
- * pack.c (Fpck_pack): packdzݤΥХ
+ * vm.c (HASH_ASET): use rb_hash_aset instead of calling directly into
+ st_insert
- * eval.c (Floop): ̵¥롼פΥƥ졼
+Sat Dec 7 11:15:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * io.c (next_argv): ¸ߤʤե̾ꤵ줿Υ顼
- ԤƤʤä
+ * hash.c (rb_hash_reject): copy unrejected elements only to new hash,
+ so that the change on the original receiver can affect.
+ [ruby-core:58914] [Bug #9223]
-Mon Jul 24 17:37:34 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Sat Dec 7 08:25:00 2013 Richo Healey <richo@psych0tik.net>
- * version 0.82
+ * test/ruby/test_struct.rb: Add regression test for question marks and
+ bangs in struct members. [Closes GH-468]
- * ext/extmk.rb.in (install): ĥ⥸塼static link
- Υ⥸塼뤬require줿ΤƱ褦featureꤹ롥
- dzĥ⥸塼εǽɬפʻˤ(static linkƤ뤫
- ɤˤ餺)requireФ褯ʤ롥
+Fri Dec 6 19:33:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (Frequire): `$"'˳ǼʸեѥǤʤե
- ̾Ȥ롥rubyץȤɤˤ`.rb'֥Ȥ
- ɤˤ`.o'ե̾ղä롥lisprequire
- provideƯ()ᤤ
+ * class.c (rb_extract_keywords, rb_get_kwargs): move from
+ vm_insnhelper.c.
-Thu Jul 20 12:50:05 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Dec 6 19:18:02 2013 Koichi Sasada <ko1@atdot.net>
- * Makefile.in (test): make testǤ褦ˡ
+ * gc.c: change oldmalloc meaning.
+ Increase oldmalloc_increase with malloc_increase
+ instead of using obj_memsize_of().
- * struct.c (struct_new): typo.
+ This change will avoid the danger of memory full without major GC.
- * eval.c (rb_eval): `defined'ɲá᥽å/ѿ/
- Τ롥
+Fri Dec 6 19:08:48 2013 Koichi Sasada <ko1@atdot.net>
-Wed Jul 19 18:04:01 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (atomic_sub_nounderflow): not 0 but val itself.
- * version 0.81
+Fri Dec 6 18:37:11 2013 Koichi Sasada <ko1@atdot.net>
-Mon Jul 17 14:53:51 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (rb_objspace_alloc, Init_heap): initialize
+ oldmalloc_increase_limit at Init_heap.
- * variable.c (rb_const_get): ̤CONSTANTͤnilˤ
- ޤ㳰᤹ǽϤ롥פoptionalʥ饹/⥸塼
- 뤬¸ߤ뤫åʤʡ
-
- * st.c (int): grow_factorˤ(褵Υޥб)
+ rb_objspace_alloc() is not called on some platforms.
-Fri Jul 14 00:48:40 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Dec 6 18:33:39 2013 Koichi Sasada <ko1@atdot.net>
- * ext/extmk.rb.in: åΥХ
+ * gc.c (garbage_collect_body): bug fix.
+ initialize after recording.
- * parse.y (var_extend): #{$}б
+Fri Dec 6 17:49:46 2013 Koichi Sasada <ko1@atdot.net>
- * dln.c (dln_load_1): `Init_FILENAME'ͭˡ`init_*'Ϻ
- ¹Ԥʤ
+ * gc.c (atomic_sub_nounderflow): added to simplify atomic sub with
+ care about underflow.
- * ext/etc/etc.c : Etc⥸塼ĥ⥸塼ȤʬΥ¤NT
- бؤФäꤹ뤫⤷ʤ
+ * gc.c (objspace_malloc_increase): use it.
-Tue Jul 11 17:12:48 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Fri Dec 6 17:10:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gcc -WallǽФwarning򸵤˥ѹ
+ * vm_insnhelper.c (rb_get_kwargs): get keyword argument values from an
+ option hash, not only checking keys.
- * signal.c (trap): typo.
+ * dir.c (dir_initialize): use rb_get_kwargs.
-Fri Jul 7 10:08:51 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (gc_start_internal): ditto.
- * version 0.80
+Fri Dec 6 16:47:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ruby.texi: texinfo document󶡡specruby.1̵ʤä
+ * misc/ruby-mode.el (ruby-brace-to-do-end): split single line block.
- * signal.c (Ftrap): ߶ػ㳰ȯб
+ * misc/ruby-mode.el (ruby-do-end-to-brace): shrink single line block
+ to one line.
- * eval.c (Flambda): Block֥Ȥ֤Block.newƱ
+Fri Dec 6 16:16:30 2013 Koichi Sasada <ko1@atdot.net>
-Thu Jul 6 00:35:03 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (gc_start_internal): do not use rb_gc_start() and rb_gc().
- * signal.c (Ftrap): SIG_DFLνѹSIGINTؤΥǥեȥϥ
- ɥѰ(㳰ȯ)
+Fri Dec 6 15:24:30 2013 Koichi Sasada <ko1@atdot.net>
- * file.c (Sfile_expand_fname): ѥ̾ХѥŸ᥽åɡ
- (Sfile_basename): basename᥽åɡĥҤ⳰롥
- (Sfile_dirname): basenameȿС
+ * gc.c (gc_start_internal, rb_gc): do not need
+ heap_pages_free_unused_pages() here.
+ It was done in after_sweep().
- * eval.c (rb_call): argumentɾ㳰ȯб
+ * gc.c (rb_gc): The reason is now GPR_FLAG_CAPI.
- * file.c (Ftest): `M', `A', `C'ɲ.
+Fri Dec 6 14:05:19 2013 Aman Gupta <ruby@tmm1.net>
-Tue Jul 4 12:36:33 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * gc.c (gc_start_internal): GC.start() now accepts two optional
+ keyword arguments. These can be used to disable full_mark (minor
+ mark only) or disable immediate_sweep (use lazy sweep). These new
+ options are useful for benchmarking GC behavior, or performing minor
+ GC out-of-band.
+ * test/ruby/test_gc.rb (class TestGc): tests for new options.
- * file.c (Ftest): եƥѥ᥽åɡ
+Fri Dec 6 11:51:28 2013 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
- * ruby.c (proc_options): `-r'ץɲá
+ * lib/erb.rb: [DOC] fix broken link, Use rubygems.org and www.ruby-toolbox.com instead of RAA.
+ [Bug #9197]
- * parse.y (f_args): ǥեȰɲá
+Fri Dec 6 10:50:54 2013 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
- * eval.c (rb_call): ̵restͤnilˡ
+ * lib/webrick/httprequest.rb: [DOC] Fix broken link of CGI specification by @udzura [fix GH-466]
- * numeric.c (num_equal): ͰʳȤӤ㳰ȯƤ
- FALSE֤褦ˡ
+Thu Dec 6 01:27:00 2013 Kenta Murata <mrkn@mrkn.jp>
- * eval.c (masign): ¿restưä
+ * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec):
+ treat 0.0 and -0.0 of floating-point numbers specially for an optimization
+ and to correctly propagate its signbit to the result.
+ [Bug #9214] [ruby-core:58858]
-Sat Jun 17 01:03:16 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * test/bigdecimal/test_bigdecimal.rb: add tests case for the above change.
- * parse.y (gettable): ̤Υѿλ(Ω̻)
- ˥᥽åɸƤӽФȤ
+ * test/bigdecimal/test_bigdecimal_util.rb: ditto.
- * parse.y (read_escape): tokenbufȤʤ褦˽ˤȤ
- ʤ`\C-x',`\M-x'ʤɤΥɽ补ǥɥ
- ȤȼºݤνϤפ
+Thu Dec 5 22:18:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jun 15 15:42:00 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * lib/mkmf.rb (configuration): strip destdir part from prefix to get
+ rid of duplication. a patch by arton at [ruby-core:58859].
+ [ruby-core:58856] [Bug #9213]
- * re.c (re_regcomp): cacheΥå
+Thu Dec 5 21:53:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Jun 12 18:50:51 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+ * array.c (rb_ary_or): lhs elements are preferred, so should not
+ replace with rhs elements.
- * version 0.79
+ * test/ruby/test_array.rb (test_OR_in_order): import the test failed
+ by r43969 from rubyspec/core/array/union_spec.rb.
-Sat Jun 10 00:25:01 1995 Yukihiro Matsumoto <matz@caelum.co.jp>
+Thu Dec 5 21:05:42 2013 Koichi Sasada <ko1@atdot.net>
- * re.c (re_regcomp): cacheȽ`$='ͤȿǤ
+ * gc.c (gc_info_decode): fix to avoid syntax error on VS2012.
- * sample/test.rb: test suite
+Thu Dec 5 19:35:35 2013 Martin Duerst <duerst@it.aoyama.ac.jp>
-Fri Jun 9 15:58:34 1995 Yukihiro Matsumoto <matz@ix-02>
+ * st.c: tweaked comment
- * re.c (re_regcomp): cacheȽְ꤬äƤ
+Thu Dec 5 19:21:10 2013 Aman Gupta <ruby@tmm1.net>
-Fri Jun 9 00:01:35 1995 Yukihiro Matsumoto (matz@dyna)
+ * gc.c (struct rb_objspace): rename internal last_collection_flags to
+ latest_gc_info
+ * gc.c (gc_latest_collection_info): add GC.latest_gc_info() with similar
+ behavior to GC.stat()
+ * gc.c (rb_gc_latest_gc_info): new c-api for above
+ * gc.c (gc_stat_internal): remove :last_collection_flags from GC.stat
+ * gc.c (gc_profile_decode_flags): remove GC::Profiler.decode_flags
+ * include/ruby/intern.h (rb_gc_latest_gc_info): export new c-api
+ * test/ruby/test_gc.rb (class TestGc): test for new behavior
+ * NEWS: note about new api
- * eval.c (rb_yield): block¤Τ˽Ƥʤ(iter)
- Τǥƥ졼ΥͥȤưʤä
+ * gc.c (gc_stat_internal): raise TypeError on wrong type
+ * gc.c (gc_stat): fix error message
-Thu Jun 8 00:59:03 1995 Yukihiro Matsumoto (matz@dyna)
+Thu Dec 5 18:18:08 2013 Aman Gupta <ruby@tmm1.net>
- * re.c (=~): StringʳȤӤFALSE֤褦(㳰ȯ
- )
+ * ext/objspace/gc_hook.c: remove this file
+ * ext/-test-/tracepoint/gc_hook.c: new filename for above
+ * ext/objspace/objspace.c: remove ObjectSpace.after_gc_start_hook=
+ * test/objspace/test_objspace.rb: remove test
+ * test/-ext-/tracepoint/test_tracepoint.rb: add above test for
+ tracepoint re-entry
- * extmk.rb.in: Ƚꤷͤե˥å夹褦ˤ
+Thu Dec 5 17:44:53 2013 Koichi Sasada <ko1@atdot.net>
- * assoc.c (to_a): to_a᥽åɤƤʤä
-
- * eval.c (rb_eval): ƤʤѿؤΥ
- ̵᥽åɸƤӽФȲ᤹롥(Ǥ)᥽åɤ
- Ƥʤ硤顼ˤѿ̤waringФ
- nil֤Ƥ롥ruby -pe printפʤɤ¹ԤǤȤ̣
- Ϥ꤬λͤϡθƤɬפǤ롥-- ᥽
- ɸƤӽФȤΤߤ뤫(λ)Ĥ᥽åɸƤӽФ
- Ȥ(̤ʤХ顼)λͤǹԤ
+ * gc.c: change function names vm_ prefix to objspace_ prefix.
+ They are objspace_ functionality.
- * eval.c (rb_eval): ƤʤѿؤΥ
- (evalʤɤ)줿ʬäˤϰʸ줿
- ѿȤߤʤ
+Thu Dec 5 16:11:04 2013 Aman Gupta <ruby@tmm1.net>
-Wed Jun 7 11:58:12 1995 Yukihiro Matsumoto <matz@ix-02>
+ * include/ruby/intern.h: add rb_gc_stat() for access to GC.stat
+ variables from c-api
+ * gc.c (rb_gc_stat): new c-api method. accepts either VALUE hash like
+ GC.stat, or VALUE symbol key and returns size_t directly. the second
+ form is useful to avoid allocations, i.e. for usage inside
+ INTERNAL_EVENT_GC tracepoints.
+ * gc.c (gc_stat): add GC.stat(:key) to return single value instead of hash
+ * gc.c (gc_stat_internal): helper method to retrieve single or all stat values
+ * test/ruby/test_gc.rb (class TestGc): test for new behavior
+ * NEWS: note about this new api
- * eval.c (rb_fail): 㳰`$!'򥯥ꥢʤ褦ˡ
- (rb_fail): `$!'ѿ˺Ǹ˲Ԥɲäʤ
+Thu Dec 5 14:40:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * io.c (Fprint): private᥽åɤѹʤư
- (`$_'Ϥ)
- (Fio_print): print᥽åɡ
- (Fio_printf): printf᥽åɡ
+ * hash.c (rb_hash): revert r43981 and bail out to the outermost frame
+ when recursion is detected.
- * parse.y: not黻Ҥɲá̤ͥ㤤`!'黻ҡ
+Thu Dec 5 13:47:15 2013 Koichi Sasada <ko1@atdot.net>
-Mon Jun 5 19:00:55 1995 Yukihiro Matsumoto <matz@ix-02>
+ * gc.c (vm_malloc_size): added.
+ return malloc_usable_size() if possible.
- * version 0.78
+ * gc.c (MALLOC_ALLOCATED_SIZE): add new setting macro to enable
+ GC.allocated_size.
+ If platform supports `malloc_usable_size()' (or similar one),
+ GC.allocated_size can be implemented with this function.
+ Default is 0.
-Fri Jun 2 17:52:03 1995 Yukihiro Matsumoto <matz@ix-02>
+ * gc.c (vm_xmalloc, vm_xrealloc, vm_xfree): use vm_malloc_size()
+ to detect collect allocated size.
- * ruby.c (proc_options): -Iץ`$:'ؤɲä֤
-
+ * gc.c (vm_malloc_increase): refactoring.
-Fri Jun 2 00:36:34 1995 Yukihiro Matsumoto (matz@dyna)
+Thu Dec 5 13:19:03 2013 Aman Gupta <ruby@tmm1.net>
- * parse.y: whileҤư̾whileƱˤ
- beginؤwhileҤdo..whileΥ롼פȤʤ롥
+ * include/ruby/ruby.h: remove INTERNAL_EVENT_GC_END and replace with
+ two new events: GC_END_MARK and GC_END_SWEEP
+ * gc.c (gc_after_sweep): emit GC_END_SWEEP after lazy sweep is done
+ * gc.c (gc_marks_body): emit GC_END_MARK at end of minor/major mark
+ * ext/-test-/tracepoint/tracepoint.c (struct tracepoint_track): tests
+ for new events.
+ * test/-ext-/tracepoint/test_tracepoint.rb (class TestTracepointObj):
+ ditto.
+ * NEWS: remove ObjectSpace.after_gc_*_hook. These are only a sample,
+ and will be removed before ruby 2.1.
+ * ext/objspace/gc_hook.c: remove ObjectSpace.after_gc_end_hook=
-Wed May 31 18:36:30 1995 Yukihiro Matsumoto <matz@ix-02>
+Thu Dec 5 10:47:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * version 0.77
+ * ruby_atomic.h (ATOMIC_PTR_EXCHANGE): atomic exchange function for
+ a generic pointer.
-Mon May 29 18:39:37 1995 Yukihiro Matsumoto <matz@ix-02>
+Thu Dec 5 10:47:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/extmk.rb.in (install): ĥ⥸塼⥤󥹥ȡǤ
- ˡ
+ * gc.c (finalize_deferred): flush all deferred finalizers while other
+ finalizers can get ready to run newly by lazy sweep.
+ [ruby-core:58833] [Bug #9205]
-Fri May 26 14:43:01 1995 Yukihiro Matsumoto <matz@ix-02>
+Thu Dec 5 09:07:59 2013 Aman Gupta <ruby@tmm1.net>
- * process.c (Fsystem): ͤ򥵥֥ץμ/ɽ
- ˤλơ`$?'롥
+ * gc.c (ruby_gc_set_params): Accept safe_level argument so GC tuning
+ settings can be applied before rb_safe_level() is available.
+ * internal.h (rb_gc_set_params): ditto.
+ * ruby.c (process_options): Apply GC tuning early during boot process
+ so boot-time allocations can benefit. This also benefits any code
+ loaded in via `ruby -r`.
-Tue May 23 10:58:11 1995 Yukihiro Matsumoto <matz@ix-02>
+Wed Dec 4 13:02:13 2013 Aman Gupta <ruby@tmm1.net>
- * string.c (Fstr_upto): ̵¥롼פ˴٤ʤ褦ˡ
+ * vm_trace.c (rb_suppress_tracing): Fix initialization of stack
+ allocated rb_trace_arg_t structure. Without this patch, sometimes
+ INTERNAL_EVENT_GC would be skipped accidentally inside
+ rb_threadptr_exec_event_hooks_orig().
- * parse.y (cond): `||'ʤɤαդ漰񤱤褦ˡP
- ʤ餺ͤʤƤɤ褦ˤ
+Wed Dec 4 12:57:24 2013 Aman Gupta <ruby@tmm1.net>
- * ext/marshal/marshal.c: ֥Ȥɤ߽񤭤᥽åɤκ
- ǥȥǤ褦ˡ󥹥󥹤`_dump_to'Ȥ᥽
- ɤƤϤȤ褦ˡ
+ * string.c (fstr_update_callback): Improve implementation in r43968
+ based on feedback from @nagachika. In the existing case, we can
+ return ST_STOP to prevent any hash modification. In the !existing
+ case, set both key and value to the fstr.
- * ext/extmk.rb.in: static linkǤ褦ʻͤˤ
- ext/SetupȤե˥ǥ쥯ȥ̾򵭽ҤȤΥǥ쥯
- ȥ¸ߤ⥸塼static link(Ϥ)
+Wed Dec 4 12:47:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c (rb_eval): `..'ʸˡȤ߹ߡ`..'`...'ưperl
- ˹碌
+ * lib/delegate.rb (Delegator#method_missing): ignore the target if not
+ set, and delegate to global methods. [ruby-core:58572] [Bug #9155]
-Sat May 20 01:22:48 1995 Yukihiro Matsumoto (matz@dyna)
+ * lib/delegate.rb (Delegator#respond_to_missing): ditto.
- * io.c (select): timeoutȳ߻ưβ
+ * lib/delegate.rb (SimpleDelegator#__getobj__): yield and return if
+ not delegated but a block is given, like as Hash#fetch.
-Fri May 19 15:33:23 1995 Yukihiro Matsumoto <matz@ix-02>
+ * lib/delegate.rb (DelegateClass#__getobj__): ditto.
- * version 0.76
+Tue Dec 3 23:48:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri May 19 00:48:08 1995 Yukihiro Matsumoto (matz@dyna)
+ * configure.in: check malloc_size() availability.
- * string.c (Fstr_each): ƥ졼֥åʸѹԤ
- ɤåݥ󥿤ͤѤäƤ㳰ȯ롥
+ * gc.c: use malloc_size() with malloc/malloc.h if available.
- * ruby-mode.el: ruby-electric-braceοߡ
+Tue Dec 3 23:06:20 2013 Narihiro Nakamura <authornari@gmail.com>
-Thu May 18 12:27:23 1995 Yukihiro Matsumoto <matz@ix-02>
+ * object.c (rb_obj_clone): don't copy FL_WB_PROTECTED of a
+ original object.
- * string.c (Fstr_tr): trִоݤ`\0'ޤִԤ
- ʤХäִʸASCII˻ꤷʤư
- ⤢ä̤Ȥtr񤭴Τǡcopyright
- ̵ʤä(Ȼפ)
+Tue Dec 3 22:32:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (gc): the_scopeޡƤʤäΤǡѿλ
- Ƥ륪֥ȤְäƳ礬ä
+ * hash.c (rb_hash_recursive): make similar (recursive) constructs
+ return same hash value. execute recursively, and rewind to the
+ topmost frame with an object which .eql? to the recursive
+ object, if recursion is detected.
- * gc.c (mark_locations_array): 㴳ι®
+ * hash.c (rb_hash): detect recursion for all `hash' methods. each
+ `hash' methods no longer need to use rb_exec_recursive().
-Mon May 15 11:43:49 1995 Yukihiro Matsumoto <matz@ix-02>
+Tue Dec 3 21:53:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/extmk.rb.in: Dynamic Load⥸塼Υѥѥå
- Ԥruby scriptautoconf˶ᤤФǻȤ롥⥸塼
- 󶡤ͤextβ˥ǥ쥯ȥɤɬܤΥե
- ϥե̾ΰϿ`MANIFEST'ȤեΤߡɬ
- פ˱`depend'(եΰ¸ط򵭽Ҥե gcc -MM
- ν)`extconf.rb'(ѥѤ˥饤֥ȴؿ¸ߥ
- ե)ѰդǤ롥
+ * vm_eval.c (rb_catch_protect): new function similar to
+ rb_catch_obj(), but protect from all global jumps like as
+ rb_load_protect(), rb_protect(), etc.
- * eval.c (rb_call): ruby᥽åɤΰå̤
- jmp_bufѤƤ
+Tue Dec 3 20:18:46 2013 Narihiro Nakamura <authornari@gmail.com>
- * parse.y: `or'`and'̤ͥƱˤ
+ * object.c (rb_obj_clone): Protect FL_PROMOTED and FL_WB_PROTECTED
+ flags of a destination object.
-Wed May 3 18:21:36 1995 Yukihiro Matsumoto (matz@dyna)
+Tue Dec 3 20:16:38 2013 Masaki Matsushita <glass.saga@gmail.com>
- * dln.c: LinuxǤ`__.SYMDEF/'Ǥä
+ * array.c (rb_hash_rehash): use hash_alloc() instead of rb_hash_new(),
+ to hide temporary object from ObjectSpace. [Bug #9187]
- * dln.c: system callΥ顼å˺Ƥ
+Tue Dec 3 17:11:47 2013 Aman Gupta <ruby@tmm1.net>
-Wed Apr 26 09:50:56 1995 Yukihiro Matsumoto (matz@ix-02)
+ * load.c (features_index_add_single): Move loaded_features_index array values off
+ the ruby heap. [Bug #9201] [ruby-core:58805]
+ * load.c (loaded_features_index_clear_i): Clean up off-heap array structure.
+ * vm.c (rb_vm_mark): Remove unnecessary mark_tbl for loaded_features_index.
+ This improves minor GC time by 15% in a large application.
- * parse.y: ƥ졼֥åѿ`|'dz褦ˤ
- ǥƥ졼ѿʤΤΤάǤ롥ʸˡѹ
- פ֤
+Tue Dec 3 17:01:45 2013 Aman Gupta <ruby@tmm1.net>
-Tue Apr 25 12:04:17 1995 Yukihiro Matsumoto (matz@ix-02)
+ * include/ruby/ruby.h (struct RClass): Add wrapper struct around
+ RClass->m_tbl with serial. This prevents double marking method
+ tables, since many classes/modules can share the same method table.
+ This improves minor mark time in a large application by 30%.
+ * internal.h (struct method_table_wrapper): Define new
+ wrapper struct with additional serial.
+ * internal.h (RCLASS_M_TBL_INIT): New macro for initializing method
+ table wrapper and st_table.
+ * method.h (void rb_sweep_method_entry): Rename rb_free_m_table to
+ rb_free_m_tbl for consistency
+ * .gdbinit (define rb_method_entry): Update rb_method_entry gdb helper
+ for new method table structure.
+ * class.c: Use RCLASS_M_TBL_WRAPPER and
+ RCLASS_M_TBL_INIT macros.
+ * class.c (rb_include_class_new): Share WRAPPER between module and
+ iclass, so serial can prevent double marking.
+ * eval.c (rb_prepend_module): ditto.
+ * eval.c (rb_using_refinement): ditto.
+ * gc.c: Mark and free new wrapper struct.
+ * gc.c (obj_memsize_of): Count size of additional wrapper struct.
- * eval.c(require): loadʥߥåɤεǽܤƤ
- ˳ĥҤ䴰ǽɲäƥ桼dln/dlopenκռ
- ɬפΤʤ褦ˤ
+Tue Dec 3 14:05:49 2013 Masaki Matsushita <glass.saga@gmail.com>
- * string.c(sub,sub): ƥ졼ȤƤư褦ˡ
+ * array.c (rb_ary_uniq_bang): remove duplicate code.
- * object.c: init_object -> initialize.
+Tue Dec 3 13:40:42 2013 Masaki Matsushita <glass.saga@gmail.com>
-Mon Apr 24 14:22:39 1995 Yukihiro Matsumoto (matz@ix-02)
+ * array.c (ary_add_hash): set and return values because string keys
+ will be frozen. [ruby-core:58809] [Bug #9202]
- * NEWS-OS 3.4б
+ * array.c (rb_ary_uniq_bang): ditto.
- * io.c: Solarisstdioư㤦褦signalEOF֤Ƥ
- ġperlǤƱ꤬ͤ롥
+ * array.c (rb_ary_or): ditto.
-Fri Apr 21 20:04:39 1995 Yukihiro Matsumoto (matz@ix-02)
+ * array.c (rb_ary_uniq): ditto.
- * version 0.75
+ * test/ruby/test_array.rb: tests for above.
- * signal.c: trapʤʤäƤࡥ
+ The patch is from normalperson (Eric Wong).
- * configure: Solaris 2.3б
+Tue Dec 3 12:20:21 2013 Aman Gupta <ruby@tmm1.net>
- * io.c: #elifΤʤcpp⤢롥
+ * string.c (rb_fstring): Use st_update instead of st_lookup +
+ st_insert.
+ * string.c (fstr_update_callback): New callback for st_update.
- * dir.c: autoconf 2.xؤбԽʬ
+Tue Dec 3 12:17:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Apr 20 12:31:24 1995 Yukihiro Matsumoto (matz@ix-02)
+ * lib/rdoc/constant.rb (RDoc::Constant#documented?): workaround for
+ NoMethodError when the original of alias is not found.
- * version 0.74
+Tue Dec 3 10:43:58 2013 Eric Hodel <drbrain@segment7.net>
- * env.h, gc.c, regex.c: IRIXؤΰܿб
+ * ext/openssl/lib/openssl/buffering.rb: Return ASCII-8BIT strings from
+ SSLSocket methods. [ruby-trunk - Bug #9028]
+ * test/openssl/test_ssl.rb: Test for the above.
- * configure: dlopenѤpicoptionθФΤᡤƥॿ
- פå褦ˡ
+Tue Dec 3 09:42:27 2013 Eric Hodel <drbrain@segment7.net>
-Tue Apr 18 19:08:17 1995 Yukihiro Matsumoto (matz@ix-02)
+ * lib/rdoc: Update to RDoc master 900de99. Changes include:
- * gc.c(xrealloc): ptr=nilλmalloc()ƱƯ
+ Fixed documentation display of constants
- * array.c(astore): 0ܤǤsize=0
- realloc()ƤǤ
+ Fixed handling of unknown parsers
- * configure, glob.c: Solaris 2.xǥѥǤ褦
+ * test/rdoc: ditto.
-Mon Apr 10 18:36:06 1995 Yukihiro Matsumoto (matz@ix-02)
+Mon Dec 2 22:30:10 2013 NAKAMURA Usaku <usa@ruby-lang.org>
- * version 0.73
+ * hash.c (getenv): fixed test failures introduced by r43950.
+ [ruby-core:58774] [Bug #9195] reported by phasis68 (Heesob Park).
-Fri Apr 7 13:51:08 1995 Yukihiro Matsumoto (matz@ix-02)
+Mon Dec 2 21:49:19 2013 Masaki Matsushita <glass.saga@gmail.com>
- * cons.c->assoc.c: cons;פʵǽϳpairȤƤεǽ
- ĤEnumerableincludeΤ᤿
+ * hash.c (rb_hash_rehash): make temporary st_table under the control
+ of GC. [Bug #9187]
- * string.c(esub): ʸִƥ졼perls///e롥
+ * test/ruby/test_hash.rb: add a test for above.
-Wed Apr 5 11:35:21 1995 Yukihiro Matsumoto (matz@ix-02)
+Mon Dec 2 17:23:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
- * version 0.72
+ * variable.c (rb_mod_constants): when calling Module#constants with
+ inherit=false, there is no need to use a hashtable to deduplicate
+ constant names. [Feature #9196] [ruby-core:58786]
- * EWS4800б
+Mon Dec 2 14:16:52 2013 Eric Hodel <drbrain@segment7.net>
- * file.c: utimesʤutimeȤ褦ˡ
+ * lib/net/smtp.rb (Net::SMTP#critical): Always return a
+ Net::SMTP::Response. Patch by Pawel Veselov.
+ [ruby-trunk - Bug #9125]
+ * test/net/smtp/test_smtp.rb: Test for the above.
-Mon Apr 3 15:19:41 1995 Yukihiro Matsumoto (matz@ix-02)
+Mon Dec 2 05:52:33 2013 Eric Hodel <drbrain@segment7.net>
- * version 0.71
+ * lib/rubygems: Update to RubyGems master baa965b. Notable changes:
- * regexp.c(re_match): Хämatch_2enbug
- Τä
+ Copy directories to lib/ when installing extensions. This completes
+ the fix for [ruby-trunk - Bug #9106]
-Mon Mar 27 15:41:43 1995 Yukihiro Matsumoto (matz@ix-02)
+ * test/rubygems: ditto.
- * dict.c: Dict->HashŪ˰ܹԡ
+Mon Dec 2 02:03:47 2013 Shota Fukumori <her@sorah.jp>
-Thu Mar 23 20:30:00 1995 Yukihiro Matsumoto (matz@ix-02)
+ * test/ruby/test_case.rb (test_nomethoderror):
+ Add test related to r43913, r43914
- * dbm.c,socket.c: extǥ쥯ȥʬΥ
+Mon Dec 2 00:53:01 2013 NAKAMURA Usaku <usa@ruby-lang.org>
- * configure: dlnΥåζ
+ * hash.c (getenv): use ANSI codepage version of getenv() for miniruby
+ on Windows.
+ [ruby-core:58732] [Bug #9189] reported by phasis68 (Heesob Park).
- * dln.c: initθƤӽФdlopen()Ǥ˹碌
+Sun Dec 1 22:14:27 2013 Zachary Scott <e@zzak.io>
-Mon Mar 20 17:45:08 1995 Yukihiro Matsumoto (matz@ix-02)
+ * doc/contributors.rdoc: [DOC] Import contributors from redmine wiki
+ Many wiki pages have become outdated and spam-ridden, we will import
+ these to trunk and begin maintaining them in ruby-trunk. This will
+ also allow new contributors to easily contribute patches to update
+ these pages, where previously a redmine account with wiki access was
+ required. Another bonus is having a contributors file to show thanks
+ to all of the people who have submitted a patch to Ruby.
- * configure: autoconf 2.2б()
+Sun Dec 1 18:03:26 2013 Zachary Scott <e@zzak.io>
-Fri Mar 17 15:56:44 1995 Yukihiro Matsumoto (matz@ix-02)
+ * doc/maintainers.rdoc: [DOC] Current maintainers of Ruby
- * dln.c: dlopenΤޥǤϤȤ褦ˡ
- ưƤ뤫ɤϼʤ
+Sun Dec 1 17:17:36 2013 Zachary Scott <e@zzak.io>
- * regex.c: virtual concatination᤿
+ * doc/contributing.rdoc: [DOC] Current branch maintainers
-Thu Mar 16 11:32:57 1995 Yukihiro Matsumoto (matz@ix-02)
+Sun Dec 1 17:16:36 2013 Zachary Scott <e@zzak.io>
- * version 0.70
+ * doc/contributing.rdoc: [DOC] Reporting other (ruby-lang.org) issues
- * eval.c,regex.c: gccǤΥѥ륨顼
+Sun Dec 1 17:15:51 2013 Zachary Scott <e@zzak.io>
- * io.c: inplace-editdzĥҤꤵʤ硤ȤΥե
- 롥
+ * doc/contributing.rdoc: [DOC] Current platform maintainers
-Wed Mar 15 14:59:18 1995 Yukihiro Matsumoto (matz@ix-02)
+Sun Dec 1 17:14:55 2013 Zachary Scott <e@zzak.io>
- * version 0.69
+ * doc/contributing.rdoc: [DOC] Reporting downstream distro issues
- * eval.c(method_missing): unknown̾ѹ
+Sun Dec 1 14:37:20 2013 Masaki Matsushita <glass.saga@gmail.com>
- * eval.c(single_method_added): ðۥ᥽åɤ줿˸ƤФ
- ᥽åɡhookȤƻȤ롥ºݤľ˸ƤФ롥
+ * hash.c (rb_hash_to_a): specify array capa.
-Tue Mar 14 14:46:44 1995 Yukihiro Matsumoto (matz@ix-02)
+Sun Dec 1 14:15:36 2013 Masaki Matsushita <glass.saga@gmail.com>
- * ruby.c(proc_options): βϤʬǤ뤳Ȥˤ
- ˡperl˶դgetopt_longϤ⤦Ȥʤ
+ * hash.c (rb_hash_rehash): fix to free new st_table when exception
+ is raised in do_hash(). [Bug #9187]
- * dir.c(glob): `{}'ΥͥȤ褦ˤ
+Sun Dec 1 11:57:59 2013 Zachary Scott <e@zzak.io>
-Mon Mar 13 17:56:25 1995 Yukihiro Matsumoto (matz@ix-02)
+ * ext/openssl/lib/openssl/buffering.rb: Fix warning in copyright
- * glob.c: Glob(磻ɥɥ֥)Ϥʤʤä磻ɥ
- ɤŸDir.glob(ʸ)Ȥ磻ɥɤΥޥåɽ
- ѡ
+Sun Dec 1 08:27:28 2013 Eric Hodel <drbrain@segment7.net>
-Fri Mar 10 18:35:46 1995 Yukihiro Matsumoto (matz@ix-02)
+ * lib/rubygems: Update to RubyGems master 66e5c39. Notable changes:
- * eval.c: MathΤ褦ʥ⥸塼ϼʬȤextend롥
+ Implement gem.deps.rb (Gemfile) .lock support
- * eval.c: 饹⥸塼Ʊ̾ΤΤ
- Ȥʤ褦ˡsuper饹ΰ㤤ʤɤϥå롥
+ Fixed `gem uninstall` for a relative directory in GEM_HOME.
- * regex.c: debug.
+ * test/rubygems: ditto.
- * math.c: PIE
+Sun Dec 1 06:00:49 2013 Aman Gupta <ruby@tmm1.net>
-Thu Mar 9 21:35:12 1995 Yukihiro Matsumoto (matz@ix-02)
+ * test/ruby/test_gc.rb (test_gc_reason): Force minor GC by consuming
+ free slots to fix test.
- * regex.c: EUC,SJIS⡼ɤǤ0x80ʾ8ʡ16ʥƥػߡ
+Sat Nov 30 21:22:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * regex.c: 饹Ǥͥƥ롦ʸ饹Ȥ褦
+ * dir.c (dir_initialize): check unknown keywords. [ruby-dev:47152]
+ [Bug #8060]
-Wed Mar 8 17:39:05 1995 Yukihiro Matsumoto (matz@ix-02)
+Sat Nov 30 18:05:38 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * regex.c: \200ʤɳ̤οʾɽ8ʥƥȲ᤹롥
- \1\9ޤǤ㳰
+ * ext/win32ole/win32ole.c (hash2named_arg): correct declaration to fix
+ build failure. a patch by phasis68 (Heesob Park) at
+ [ruby-core:58710]. [Bug #9184]
- * regex.c: \9ʾΥե󥹤ͭˤ
+Sat Nov 30 17:46:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 7 14:26:01 1995 Yukihiro Matsumoto (matz@ix-02)
+ * eval.c (ruby_cleanup): determine exit status and signal to terminate
+ before finalization, to get rid of access destroyed T_DATA exception
+ object. [ruby-core:58643] [Bug #9167]
- * eval.c(public/private): ᥽åɤ̾ѹŪʥ
- 褦ˤƤߤԺѡ
+Sat Nov 30 16:25:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Mar 6 19:34:32 1995 Yukihiro Matsumoto (matz@ix-02)
+ * enumerator.c (enumerator_with_index): should not store local variable
+ address to memoize the arguments. it is invalidated after the return.
+ [ruby-core:58692] [Bug #9178]
- * eval.c(inlcude): ᥽åɲưŪ˥⥸塼򥤥󥯥롼ɤǤ
- 褦ˡǤդΥ֥Ȥˤ⥸塼򥤥󥯥롼ɤ
- ᥽å `extend'Ѱդ
+Sat Nov 30 13:28:13 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y: ʸˡinclude᥽åɲ
+ * siphash.c (sip_hash24): fix for aligned word access little endian
+ platforms. [ruby-core:58658] [Bug #9172]
-Tue Feb 28 15:35:10 1995 Yukihiro Matsumoto (matz@ix-02)
+Sat Nov 30 13:21:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y: ϢκǸ`,'򤪤褦ˡ
+ * vm_eval.c (rb_yield_block): implement non-nil block argument.
-Fri Feb 24 13:15:43 1995 Yukihiro Matsumoto (matz@ix-02)
+Fri Nov 29 20:59:39 2013 Masaya Tarui <tarui@ruby-lang.org>
- * version 0.68
+ * vm_dump.c (rb_vmdebug_debug_print_pre): Bugfix. Get PC directly.
+ PC is cached into local stack and cfp->pc is incorrect at next of
+ branch or jump.
+ * vm_exec.h (DEBUG_ENTER_INSN): catch up this change.
+ * vm_core.h: update signature of rb_vmdebug_debug_print_pre.
-Thu Feb 23 11:19:19 1995 Yukihiro Matsumoto (matz@ix-02)
+Fri Nov 29 20:43:57 2013 Masaya Tarui <tarui@ruby-lang.org>
- * eval.c: resqueselfְͤäƤ
+ * compile.c: Bugsfix for dump_disasm_list.
+ rb_inspect denies a hidden object. So, insert wrapper that creates
+ the unhidden one.
+ adjust->label is null sometimes.
+ insn_data_line_no makes no sense at all.
- * eval.c(rb_clear_cache): åΥꥢ˺줬ä
+Fri Nov 29 18:06:45 2013 Shota Fukumori <her@sorah.jp>
- * eval.c: Υפ򥯥饹Ūפѹ
- äơðۥ᥽åɤ黲Ȥϡ쥷ФΥ饹ǤϤ
- 줿פΥ饹Ȥʤ롥
+ * test/ruby/test_case.rb (test_method_missing): Test for r43913.
-Wed Feb 22 00:51:38 1995 Yukihiro Matsumoto (matz@dyna)
+Fri Nov 29 17:53:22 2013 Shota Fukumori <her@sorah.jp>
- * regex.c: ignorecaseɽΥѥ˻ꤷʤ
- ưʤ
+ * vm_insnhelper.c (check_match): Fix SEGV with VM_CHECKMATCH_TYPE_CASE
+ and class of `pattern` has `method_missing`
+ [Bug #8872] [ruby-core:58606]
- * string.c(toupper,tolower): bug fix.
+Fri Nov 29 17:06:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ENV,VERSION: readonlyѿء
+ * vm_eval.c (rb_yield_block): yield block with rb_block_call_func
+ arguments.
-Tue Feb 21 18:56:56 1995 Yukihiro Matsumoto (matz@ix-02)
+ * range.c (range_each): use rb_yield_block.
- * io.c(STDIN, STDOUT, STDERR): Ȥ
+ * include/ruby/ruby.h (RB_BLOCK_CALL_FUNC_ARGLIST): constify argv.
- * io.c(select): bug fix.
+ * enum.c (rb_enum_values_pack): ditto.
- * version 0.67
+ * vm_eval.c (rb_block_call, rb_check_block_call): ditto.
-Mon Feb 20 16:10:14 1995 Yukihiro Matsumoto (matz@ix-02)
+ * include/ruby/ruby.h (RB_BLOCK_CALL_FUNC_ARGLIST): for declaration
+ argument list of rb_block_call_func.
- * parse.y(yylex): `%̻'顤1ʸʸμ̻Ҥ
- ˤȤʤ饹Ȥʤä
+Fri Nov 29 11:26:43 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c: 饹self饹the_classä
+ * include/ruby/ruby.h (rb_block_call_func): add blockarg. block
+ function can take block argument, e.g., proc {|&blockarg| ...}.
- * variable.c(rb_name_class): 饹̾򥤥󥹥ѿ˳Ǽ롥
+Thu Nov 28 21:43:48 2013 Zachary Scott <e@zzak.io>
-Thu Feb 16 15:36:17 1995 Yukihiro Matsumoto (matz@ix-02)
+ * doc/dtrace_probes.rdoc: [DOC] Import dtrace probes doc from wiki
- * parse.y: BLOCKbraceɽʸˡѹΤäƤߤ롥
- ML󼨤Ƥߤ뤬ȿʤ
+Thu Nov 28 21:17:32 2013 Zachary Scott <e@zzak.io>
- * object.c(do,forever): ʤ
+ * doc/contributing.rdoc: [DOC] Add heading above ChangeLog tips to
+ setup entry for commits, its not required. Actually easier if
+ contributors don't include a ChangeLog entry.
-Wed Feb 15 13:20:49 1995 Yukihiro Matsumoto (matz@ix-02)
+Thu Nov 28 21:16:18 2013 Zachary Scott <e@zzak.io>
- * re.c(new): 2ͿơnilǤʤȤꤹ
- (nilλˤԤʤäƤ)
+ * doc/contributing.rdoc: [DOC] Add coding style heading for patch
+ rules
- * parse.y(parse_regexp): ɽƥʸʸ̵뤹
- ɤǤ褦ˡ
+Thu Nov 28 21:15:45 2013 Zachary Scott <e@zzak.io>
-Tue Feb 14 00:55:33 1995 Yukihiro Matsumoto (matz@dyna)
+ * doc/contributing.rdoc: [DOC] Add notes about deciding what to patch
- * parse.y: (compexpr) -> (expr).
+Thu Nov 28 19:43:45 2013 Masaki Matsushita <glass.saga@gmail.com>
-Fri Feb 10 16:30:00 1995 Yukihiro Matsumoto (matz@ix-02)
+ * benchmark/bm_hash_flatten.rb: added. r43896 is about 4 times faster
+ than 2.0.0p353.
- * ruby.c(load_file): scriptɤ߹"#!"βϤԤ褦ˡ
+ * benchmark/bm_hash_keys.rb: added. r43896 is about 5 times faster
+ than 2.0.0p353.
- * ruby.c(readin): եɤ߹߻Ƭ"#!"ꡤιԤ
- "ruby"Ȥʸޤruby˰ͿƤСΰ
- ͭˤʤ롥
+ * benchmark/bm_hash_values.rb: added. r43896 is about 5 times faster
+ than 2.0.0p353.
- * parse.y(yylex): ȹԤν꤬`\'ǤäιԤ˷³
- ƤȤߤʤ褦ˤ
+Thu Nov 28 19:29:04 2013 Zachary Scott <e@zzak.io>
-Thu Feb 9 16:18:37 1995 Yukihiro Matsumoto (matz@ix-02)
+ * doc/contributing.rdoc: [DOC] Add notes about slideshow proposals
+ from wiki page: HowToRequestFeatures
- * version 0.66
+Thu Nov 28 17:34:42 2013 Masaki Matsushita <glass.saga@gmail.com>
- * parse.y: protectbeginѹbegin..end㳰Ǥʤ
- ʸ̤ȤƤƯȤˤʤä
+ * st.c: add st_values() and st_values_check().
-Wed Feb 1 19:48:24 1995 Yukihiro Matsumoto (matz@ix-02)
+ * include/ruby/st.h: add prototypes for above.
- * version 0.65
+ * hash.c (rb_hash_values): use st_values_check() for performance
+ improvement if VALUE and st_data_t are compatible.
- * string.c(str_replace): ֤ʸĹꥳ
- ԡ򤷤ʤ
+Thu Nov 28 17:14:14 2013 Masaki Matsushita <glass.saga@gmail.com>
- * string.c(rindex): Х
+ * st.c (st_keys): fix not to use Qundef in st.c.
-Mon Jan 30 11:23:05 1995 Yukihiro Matsumoto (matz@ix-02)
+ * include/ruby/st.h: define modified prototype.
- * parse.y(value_expr): ifΥåɲá
+ * hash.c (rb_hash_keys): use modified st_keys().
- * gc.c(gc_mark): free cellΰ˥Х
+Thu Nov 28 16:34:43 2013 Aman Gupta <ruby@tmm1.net>
- * parse.y: ʸˡѹ(ꥷץ)㳰򸺤餷
+ * gc.c: Expose details about last garbage collection via GC.stat.
+ * gc.c (gc_stat): Add :last_collection_flags for reason/trigger/type of
+ last GC run.
+ * gc.c (gc_prof_sweep_timer_stop): Record HAVE_FINALIZE GPR even
+ without GC_PROFILE_MORE_DETAIL.
+ * gc.c (gc_profile_flags): Add GC::Profiler.decode_flags to make sense
+ of GC.stat[:last_collection_flags]
+ * test/ruby/test_gc.rb (class TestGc): Test for above.
-Thu Jan 26 00:52:55 1995 Yukihiro Matsumoto (matz@dyna)
+Thu Nov 28 16:15:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y: ȤϢ֤ȤǤ褦ˡξ硤
- Ϣƥ뤬ǽȤʤ롥
+ * win32/win32.c (rb_w32_dup2): extract from rb_cloexec_dup2() and
+ redirect_dup2().
- * parse.y: 󻲾Ȥ`[]'⤬Ǥ褤Ȥˤ
+Tue Nov 28 14:40:00 2013 Akira Matsuda <ronnie@dio.jp>
-Tue Jan 24 14:45:15 1995 Yukihiro Matsumoto (matz@ix-02)
+ * lib/drb/ssl.rb: [Doc] Fix typo
- * class.c(rb_include_module): `-v'ꤷˤinclude⥸塼
- ȥ饹ͤƤʤå롥
+Thu Nov 28 13:56:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Jan 23 10:42:09 1995 Yukihiro Matsumoto (matz@ix-02)
+ * common.mk (Doxyfile): tool/file2lastrev.rb needs running with
+ BASERUBY since r43617. [ruby-dev:47823] [Bug #9169]
- * parse.y(rb_class2name): ᥿饹˴ؤbug fix.
+Thu Nov 28 09:18:39 2013 Koichi Sasada <ko1@atdot.net>
- * dict.c: Dict[..]Ǽ褦ˡ
+ * string.c (rb_fstring): fstrings should be ELTS_SHARED.
+ If we resurrect dying objects (non-marked, but not swept yet),
+ pointing shared string can be collected.
+ To avoid such issue, fstrings (recorded to fstring_table)
+ should not be ELTS_SHARED (should not have a shared string).
- * array.c: Array[..]褦ˡ
+Thu Nov 28 01:35:08 2013 Masaki Matsushita <glass.saga@gmail.com>
- * parse.y: ɽȤ{a,b,..}Ȥ褦ˡ
+ * st.c (st_keys): fix to use st_index_t for size of hash.
-Fri Jan 20 10:28:38 1995 Yukihiro Matsumoto (matz@ix-02)
+Thu Nov 28 00:36:52 2013 Masaki Matsushita <glass.saga@gmail.com>
- * re.c(Regexp.quote): ɽ򥨥פ᥽åɡ
+ * st.c (st_keys): define st_keys(). it writes each key to buffer.
- * ̵̤rb_intern()򸺤餷
+ * hash.c (rb_hash_keys): use st_keys() for performance improvement
+ if st_data_t and VALUE are compatible.
- * parse.y: `!', `!=', `!~'ü黻Ҥˤ롥äƤϺ
- Ǥʤʤä
+ * include/ruby/st.h: define macro ST_DATA_COMPATIBLE_P() to predicate
+ whether st_data_t and passed type are compatible.
-Wed Jan 18 13:20:41 1995 Yukihiro Matsumoto (matz@ix-02)
+ * configure.in: check existence of builtin function to use in
+ ST_DATA_COMPATIBLE_P().
- * parse.y: ʸˡ(unless,untilʤ)
+Thu Nov 28 00:07:28 2013 Masaki Matsushita <glass.saga@gmail.com>
-Tue Jan 17 11:11:27 1995 Yukihiro Matsumoto (matz@ix-02)
+ * ruby_atomic.h: remove duplicate definitions between ATOMIC_XXX
+ and ATOMIC_SIZE_XXX.
- * eval.c: defǥ᥽åɺˤϥѡ饹Υ᥽åɤβĻ
- Ѿ롥ǽλϺޤǤƱǥե(ȥåץ
- ǴؿŪ饹̾᥽å)
+Wed Nov 27 23:55:50 2013 Masaki Matsushita <glass.saga@gmail.com>
- * object.c(Class#new): ֥Ȥ˴ؿŪ᥽å
- init_objectɬƤФ褦ѹ
+ * ruby_atomic.h: define ATOMIC_SIZE_CAS() with
+ __atomic_compare_exchange_n() and refactoring.
- * eval.c: ̤Υ᥽åɤФunknown᥽åɤƤФ褦
- ʤä顼ɽޤǤƱˤʤ褦envĴᤷƤ롥
+Tue Nov 27 21:43:00 2013 Akira Matsuda <ronnie@dio.jp>
-Fri Jan 13 14:40:30 1995 Yukihiro Matsumoto (matz@ix-02)
+ * lib/irb/notifier.rb: [Doc] Fix typo
+ * ext/json/lib/json/common.rb: Ditto.
- * gc.c: gc㴳񤭴ޤѲϤʤä褦
+Tue Nov 27 18:04:57 2013 Akira Matsuda <ronnie@dio.jp>
- * parse.y(yylex): symbol\sym:symѹ
+ * lib/irb/notifier.rb: Fix typo
-Thu Jan 12 01:39:28 1995 Yukihiro Matsumoto (matz@dyna)
+Wed Nov 27 17:54:57 2013 Koichi Sasada <ko1@atdot.net>
- * eval.c: ؿ rb_eval_string()
+ * gc.c (gc_mark_stacked_objects): check only when check_mode > 0.
- * gc.c: gc_mark()Ƶ
+Wed Nov 27 16:07:19 2013 Aman Gupta <ruby@tmm1.net>
- * variable.c(rb_ivar_{get,set}): 󥹥ѿΥ
- å­ʤä
+ * test/ruby/test_gc.rb (class TestGc): Fix warning in
+ test_expand_heap.
- * variable.c: 饹ȥ󥹥ѿǥϥåơ֥ͭ
- 褦ˤ
+Wed Nov 27 15:55:52 2013 Aman Gupta <ruby@tmm1.net>
- * ruby.h: iv_tblRBasicRObjectRClassذưˤꡤ
- ObjectClass,Module󥹥ѿƤʤʤ롥
- Ψϼ㴳夹롥
+ * gc.c (Init_GC): Add new GC::INTERNAL_CONSTANTS for information about
+ GC heap/page/slot sizing.
+ * test/ruby/test_gc.rb (class TestGc): test for above.
-Tue Jan 10 00:58:20 1995 Yukihiro Matsumoto (matz@dyna)
+Wed Nov 27 15:21:17 2013 Aman Gupta <ruby@tmm1.net>
- * 0.64 released
+ * gc.c (gc_page_sweep): Fix compile warning from last commit.
+ * hash.c (hash_aset_str): Re-use existing variable to avoid
+ unnecessary pointer dereferencing.
- * eval.c: 쥷ФȰϾiterǤϤʤ
+Wed Nov 27 15:12:55 2013 Koichi Sasada <ko1@atdot.net>
- * cons.c(aref,aset): negative offsetб
+ * gc.c (gc_page_sweep): disable debug print.
-Mon Jan 9 14:40:39 1995 Yukihiro Matsumoto (matz@ix-02)
+Wed Nov 27 15:05:59 2013 Koichi Sasada <ko1@atdot.net>
- * parse.y: foo{..}ηˤơfooѿ䥯饹̾Ǥ
- ʤʤδؿ᥽åɸƤӽФȤߤʤ褦ˤ
+ * gc.c (gc_stat): add new information heap_eden_page_length and
+ heap_tomb_page_length.
- * list.c -> cons.c: ̾ѹ(饹̾)
+ * test/ruby/test_gc.rb: fix to use GC.stat[:heap_eden_page_length]
+ instead of GC.stat[:heap_length].
+ This test expects `heap_eden_page_length' (used pages size).
- * list.c: a::b::c::nilꥹ(a b c)Ȥߤʤlisp顤a::b::c
- ꥹ(a b c)Ȥߤʤrubyѹ[], []=, each⤽˲
- ͤȤ롥
+Wed Nov 27 15:02:53 2013 Aman Gupta <ruby@tmm1.net>
- * list.c: consڥȤƤεǽĴѹ
+ * test/ruby/test_eval.rb (class TestEval): Use assert_same instead of
+ assert_equal.
+ * test/ruby/test_hash.rb (class TestHash): ditto.
+ * test/ruby/test_iseq.rb (class TestISeq): ditto.
-Sat Jan 7 01:26:26 1995 Yukihiro Matsumoto (matz@dyna)
+Wed Nov 27 14:50:02 2013 Eric Hodel <drbrain@segment7.net>
- * eval.c: Զ罤
+ * lib/rinda/ring.rb: Announce RingServer for the same process.
+ [ruby-trunk - Bug #9163]
+ * test/rinda/test_rinda.rb: Tests for the above.
- * eval.c(masign): ¿ꥹȤȤ褦ˤ
+Wed Nov 27 14:37:33 2013 Aman Gupta <ruby@tmm1.net>
- * list.c: assoc2Ǥ󤫤List(CONSڥ)ѹ
+ * test/ruby/test_eval.rb (class TestEval): Add test for shared eval
+ filenames via rb_fstring().
+ * test/ruby/test_iseq.rb (class TestISeq): Add test for shared
+ iseq labels via rb_fstring(). [Bug #9159]
-Fri Jan 6 13:42:12 1995 Yukihiro Matsumoto (matz@ix-02)
+Wed Nov 27 14:24:55 2013 Aman Gupta <ruby@tmm1.net>
- * parse.y: a[b]+=ca.b+=cʤɤμǡab2ɾ
- ʤä
+ * hash.c (hash_aset_str): Use rb_fstring() to de-duplicate hash string
+ keys. Patch by Eric Wong. [Bug #8998] [ruby-core:57727]
+ * test/ruby/test_hash.rb (class TestHash): test for above.
- * eval.c: iteratorΥХեå
+Wed Nov 27 10:39:39 2013 Aman Gupta <ruby@tmm1.net>
- * list.c: List饹ߡ
+ * gc.c: Rename rb_heap_t members:
+ used -> page_length
+ limit -> total_slots
-Thu Jan 5 13:55:00 1995 Yukihiro Matsumoto (matz@ix-02)
+Wed Nov 27 08:24:49 2013 Aman Gupta <ruby@tmm1.net>
- * parse.y: SCOPEΥ꡼ʤ
+ * compile.c: Use rb_fstring() to de-duplicate string literals in code.
+ [ruby-core:58599] [Bug #9159] [ruby-core:54405]
+ * iseq.c (prepare_iseq_build): De-duplicate iseq labels and source
+ locations.
+ * re.c (rb_reg_initialize): Use rb_fstring() for regex string.
+ * string.c (rb_fstring): Handle non-string and already-fstr arguments.
+ * vm_eval.c (eval_string_with_cref): De-duplicate eval source
+ filename.
- * eval.c: built-in᥽åɤؤΰΰϤѹơ
- 򸺤餷
+Wed Nov 27 07:13:54 2013 Aaron Patterson <aaron@tenderlovemaking.com>
- * re.c: match-data뤳Ȥ᤿`$~'򥢥
- on-demand롥
+ * ext/psych/lib/psych.rb: psych version 2.0.2
+ * ext/psych/psych.gemspec: ditto
- * string.c etc: ɬפmemmovememcpyִ
+Wed Nov 27 06:40:18 2013 Aaron Patterson <aaron@tenderlovemaking.com>
- * parse.y: =~, !~ѤΤǥѥŸǤʤ
+ * ext/psych/lib/psych/scalar_scanner.rb: fix support for negative
+ years.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto
+ * test/psych/test_date_time.rb: test for change.
+ Fixes: https://github.com/tenderlove/psych/issues/168
-Tue Jan 3 02:04:36 1995 Yukihiro Matsumoto (matz@dyna)
+Wed Nov 27 04:46:55 2013 Aaron Patterson <aaron@tenderlovemaking.com>
- * eval.c: restbug fix.
+ * ext/psych/lib/psych/scalar_scanner.rb: fix regexp for matching TIME
+ strings.
+ * test/psych/test_date_time.rb: test for change.
+ Fixes: https://github.com/tenderlove/psych/issues/171
- * eval.c,gc.c: scope򥪥֥Ȥˤ
+Wed Nov 27 02:26:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c: envscopeΰѹ
+ * string.c (str_new4): copy the original capacity so that memsize of
+ frozen shared string returns correct size.
-Wed Dec 28 09:46:57 1994 Yukihiro Matsumoto (matz@ix-02)
+Wed Nov 27 02:20:13 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y: evalǥѿɲä줿б
+ * array.c (rb_ary_hash): should not ignore the rest of recursive
+ constructs.
- * parse.y: 黻Ҥޤaliasbug fix.
+ * hash.c (rb_hash_hash): ditto.
-Tue Dec 27 16:45:20 1994 Yukihiro Matsumoto (matz@ix-02)
+ * range.c (range_hash): ditto.
- * parse.y: def A Balias A Bѹ
+ * struct.c (rb_struct_hash): ditto.
- * eval.c: aliasطbugnode򥪥֥Ȳenbug
- 褦
+ * test/-ext-/test_recursion.rb (TestRecursion): separate from
+ test/ruby/test_thread.rb.
- * signal.c: ƥॳκߤ᤿
+Tue Nov 26 22:43:36 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * io.c(select): write/exceptΥե饰˥Х
+ * hash.c (rb_hash): cut off if recursion detected to get rid of stack
+ overflow. [ruby-core:58567] [Bug #9151]
- * Makefile.in: static linkѥץMakeѿȤΩ
+Tue Nov 26 20:02:39 2013 Koichi Sasada <ko1@atdot.net>
-Tue Dec 20 00:46:19 1994 Yukihiro Matsumoto (matz@dyna)
+ * test/ruby/test_settracefunc.rb: add tests for a_call/a_return
+ by Brandur <brandur@mutelight.org> [Feature #9120]
- * 0.63 released
+Tue Nov 26 19:29:52 2013 Koichi Sasada <ko1@atdot.net>
- * eval.c(rb_call): superθƤӽФ롥argc, argv˺
- Ƥ
+ * common.mk: add useful config "set breakpoint pending on"
+ for run.gdb.
- * parse.y(read_escape): Ÿ顼
+Tue Nov 26 19:17:47 2013 Koichi Sasada <ko1@atdot.net>
- * variable.c: Ѥߤѿhookѹʤ褦ˡ
+ * ext/objspace/object_tracing.c (newobj_i): skip class_path if class
+ is frozen.
-Mon Dec 19 12:01:10 1994 Yukihiro Matsumoto (matz@ix-02)
+ rb_class_path() can modify frozen classes (and causes errors).
+ This patch is temporary. We need no-modification/no-allocation
+ class path function.
- * parse.y(cond): P֤줿硤`-v'ץǷ
- 𤬽Ф褦ˡ
+Tue Nov 26 18:12:13 2013 Koichi Sasada <ko1@atdot.net>
- * parse.y(**): Ѿ黻`**'̤ͥñ黻Ҥ⤯
+ * vm_trace.c: skip "exception check" and "reentrant check (only normal
+ events) for internal events.
- * parse.y(and,or): ̤ͥ㤤黻`and', `or'.
+ Reentrant check for internal events are remaining.
- * 0.62 released.
+Tue Nov 26 17:38:16 2013 Koichi Sasada <ko1@atdot.net>
- * eval.c: ɬפˤʤäPUSH_ENV, POP_ENV򸺤餷
+ * vm_trace.c: prohibit to specify normal events and internal events
+ simultaneously.
+ I will introduce special care for internal events later.
- * env.h: ENVIONselfϤPUSH_ENVsuperνΤ
- Ѥ뤳Ȥˤ
+ * ext/-test-/tracepoint/tracepoint.c: test this behavior.
- * eval.c: Υ֥Ȳ٤ʤä¹®٤Ȥᤷ
+ * test/-ext-/tracepoint/test_tracepoint.rb: ditto.
-Mon Dec 17 23:01:10 1994 Yukihiro Matsumoto (matz@ix-02)
+Tue Nov 26 16:30:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c: env.{argv,argc}scope.local_varsΥ֥Ȳ
+ * file.c (rb_readlink): fix buffer overflow on a long symlink. since
+ rb_str_modify_expand() expands from its length but not its capacity,
+ need to set the length properly for each expansion.
+ [ruby-core:58592] [Bug #9157]
- * eval.c: 1ʣBlockȤΥХ
+Tue Nov 26 14:23:17 2013 Aman Gupta <ruby@tmm1.net>
-Fri Dec 16 15:52:06 1994 Yukihiro Matsumoto (matz@ix-02)
+ * ext/objspace/objspace_dump.c (dump_append_string_value): Escape
+ control characters for strict json parsers.
+ * ext/objspace/objspace_dump.c (objspace_dump): Document File/IO
+ output option.
- * parse.y: `&&'`||'ξդϤĤǤPȤ
+Tue Nov 26 11:43:19 2013 Masaki Matsushita <glass.saga@gmail.com>
-Thu Dec 15 00:16:04 1994 Yukihiro Matsumoto (matz@dyna)
+ * ruby_atomic.h: use __atomic builtin functions supported by GCC.
+ __sync family are legacy functions now and it is recommended
+ that new code use the __atomic functions.
+ http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
- * eval.c(Block): Block֥Ȥ¸
+ * configure.in: check existence of __atomic functions.
- * node.h: NODE_QLISTϤʤʤä
+Tue Nov 26 10:57:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval.c(rb_call): ؤ̾ǰĤΤơ
- ٤˥ԡ褦ˤ
+ * ext/bigdecimal/bigdecimal.gemspec: revert Gem::Specification#date
+ for snapshot/release tarballs.
- * eval.c(rb_call): rubyǵҤ줿᥽åɤؤΰϤinline
+Tue Nov 26 06:42:50 2013 Aman Gupta <ruby@tmm1.net>
- * eval.c: ƥ졼Ƚ̽񤭴Ŭڤʥƥ졼Ƥ
- Фʤ㤨С[foo(),bar()]{i|baz(i)}פfoobar⥤
- ƥ졼ȤƸƤӽФ*ʤ*
+ * NEWS: Add ObjectSpace.after_gc_{start,end}_hook=
+ * ext/objspace/objspace_dump.c: [DOC] catch up dump/dump_all to r43679
- * eval.c(rb_call): SCOPEinline᥽åɸƤӽФμ㴳ι
- ®
+Tue Nov 26 04:12:10 2013 Eric Hodel <drbrain@segment7.net>
-Wed Dec 14 18:09:33 1994 Yukihiro Matsumoto (matz@ix-02)
+ * lib/rubygems: Update to RubyGems master 612f85a. Notable changes:
- * node.h: node⥪֥Ȥˤ롥äGCDz롥
+ Fixed installation and activation of git: and path: gems via
+ Gem.use_gemdeps
-Thu Dec 8 14:17:29 1994 Yukihiro Matsumoto (matz@ix-02)
+ Improved documentation coverage
- * 0.60 released - alpha test baseline.
+ * test/rubygems: ditto.
+
+Mon Nov 25 22:23:03 2013 Zachary Scott <e@zzak.io>
+
+ * lib/xmlrpc.rb: [DOC] Fix link to xmlrpc4r site [Bug #9148]
+ Patch by Giorgos Tsiftsis
+
+Mon Nov 25 19:48:10 2013 Zachary Scott <e@zzak.io>
+
+ * lib/uri/common.rb: [DOC] typo fixes by @vipulnsward [Fixes GH-456]
+ https://github.com/ruby/ruby/pull/456
+ * lib/uri/generic.rb: [DOC] ditto.
+
+Mon Nov 25 14:34:42 2013 Zachary Scott <e@zzak.io>
+
+ * ext/bigdecimal/bigdecimal.gemspec: bump BigDecimal to 1.2.3 for
+ proper release date in RubyGems
+
+Mon Nov 25 14:25:08 2013 Zachary Scott <e@zzak.io>
+
+ * ext/bigdecimal/bigdecimal.gemspec: Remove Gem::Specification#date
+ We should rely on rubygems to create the date the gem was released
+ for each version.
+
+Mon Nov 25 06:53:30 2013 Koichi Sasada <ko1@atdot.net>
+
+ * internal.h: do not use ruby_sized_xrealloc() and ruby_sized_xfree()
+ if HAVE_MALLOC_USABLE_SIZE (or _WIN32) is defined.
+
+ We don't need these function if malloc_usable_size() is available.
+
+ * gc.c: catch up this change.
+
+ * gc.c: define HAVE_MALLOC_USABLE_SIZE on _WIN32.
+
+ * array.c (ary_resize_capa): do not use ruby_sized_xfree() with
+ local variable to avoid "unused local variable" warning.
+ This change only has few impact.
+
+ * string.c (rb_str_resize): ditto.
+
+Mon Nov 25 05:05:04 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/-ext-/tracepoint/test_tracepoint.rb: catch up GC.stat changes
+ at r43835.
+
+Mon Nov 25 04:45:59 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: continue to change OLDSPACE -> OLDMALLOC.
+ RGENGC_ESTIMATE_OLDSPACE -> RGENGC_ESTIMATE_OLDMALLOC.
+
+ * gc.c: add a new major GC reason GPR_FLAG_MAJOR_BY_OLDMALLOC.
+
+Mon Nov 25 04:16:09 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: change terminology "..._num" to "..._slots" about slot operation.
+ * final_num -> final_slots
+ * objspace_live_num() -> objspace_live_slots()
+ * objspace_limit_num() -> objspace_limit_slots()
+ * objspace_free_num() -> objspace_free_slots()
+
+Mon Nov 25 04:03:12 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_stat): add internal information.
+ * heap_swept_slot
+ * malloc_increase
+ * malloc_limit
+ * remembered_shady_object
+ * remembered_shady_object_limit
+ * old_object
+ * old_object_limit
+ * oldmalloc_increase
+ * oldmalloc_limit
+
+ * gc.c (gc_stat): rename names.
+ * heap_live_num -> heap_live_slot
+ * heap_free_num -> heap_free_slot
+ * heap_final_slot -> heap_final_slot
+
+ Quote from RDoc of GC.stat():
+ "The contents of the hash are implementation specific and may
+ be changed in the future."
+
+ * test/ruby/test_gc.rb: catch up this change.
+
+Mon Nov 25 03:59:45 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/ruby/test_gc.rb: catch up last commit.
+ Now RUBY_GC_OLDSPACE_LIMIT(...) is RUBY_GC_OLDMALLOC_LIMIT(...).
+
+Mon Nov 25 03:10:46 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: change terminology OLDSPACE -> OLDMALLOC.
+ (oldspace -> oldmalloc for variable names)
+
+ OLDSPACE is confusing because it is not includes slots.
+ To more clearly, rename such as (oldspace_limit -> oldmalloc_limit).
+ It is clear that it measures (estimates) malloc()'ed size.
+
+Mon Nov 25 00:50:03 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * internal.h: use __builtin_bswap16() if possible.
+
+ * configure.in: check existence of __builtin_bswap16().
+
+Sun Nov 24 22:24:19 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigxor_int): Apply BIGLO for long in a BDIGIT expression.
+ (bigor_int): Ditto.
+ (bigand_int): Ditto.
+
+Sun Nov 24 18:13:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/defines.h (SIZEOF_ACTUAL_BDIGIT): Defined.
+
+ * include/ruby/ruby.h (RBIGNUM_EMBED_LEN_MAX): Use
+ SIZEOF_ACTUAL_BDIGIT instead of SIZEOF_BDIGITS.
+ SIZEOF_BDIGITS can be different to sizeof(BDIGIT).
+
+Sun Nov 24 13:49:08 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/defines.h: Don't use int128_t for Bignum.
+ It's not always faster.
+
+ * bignum.c: Ditto.
+
+Sun Nov 24 10:18:15 2013 Aman Gupta <ruby@tmm1.net>
+
+ * NEWS: Add details about new debugging features and APIs.
+
+Sun Nov 24 09:37:20 2013 Andrew Vit <andrew@avit.ca>
+
+ * lib/csv.rb: Optimize header hashes by freezing string keys.
+ [ruby-core:58510]
+
+Sun Nov 24 09:18:06 2013 Aman Gupta <ruby@tmm1.net>
+
+ * ext/objspace/objspace_dump.c (dump_object): Use PRIuSIZE to print
+ size_t for better win32 compatibility.
+ * test/objspace/test_objspace.rb (test_dump_all): Hold reference to
+ test string to avoid failure due to GC. Reduce size of failure message
+ using grep(/TEST STRING/).
+
+Sun Nov 24 08:38:00 2013 Kyle Stevens <kstevens715@gmail.com>
+
+ * lib/csv.rb: If skip_lines is set to a String, convert it to a Regexp
+ to prevent the alternative, which is that each line in the CSV gets
+ converted to a Regexp when calling skip_lines#match.
+
+Sun Nov 24 01:03:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_power): Use FIX2LONG instead
+ of FIX2INT to avoid conversion error.
+
+Sun Nov 24 00:44:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (RBIGNUM_EMBED_LEN_MAX): define by macros
+ defined in defines.h, instead of complex and repeated expression.
+
+Sat Nov 23 22:22:26 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (RBIGNUM_EMBED_LEN_MAX): Limit the value to
+ less than 8.
+
+Sat Nov 23 19:52:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb (BigMath.E): Use BigMath.exp.
+ [Feature #6857] [ruby-core:47130]
+
+Sat Nov 23 19:46:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): Optimize the
+ calculation algorithm to reduce the number of divisions.
+ This optimization was proposed by Rafal Michalski.
+ [Feature #6857] [ruby-core:47130]
+
+Sat Nov 23 19:20:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_div2): The signature was
+ changed to allow us to pass arguments directly.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_div3): Added for the role of
+ the old BigDecimal_div2.
+
+Sat Nov 23 12:31:00 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: fix global variable name.
+ Now we have following environments (and related variable names).
+
+ * RUBY_GC_HEAP_INIT_SLOTS
+ * RUBY_GC_HEAP_FREE_SLOTS
+ * RUBY_GC_HEAP_GROWTH_FACTOR (new from 2.1)
+ * RUBY_GC_HEAP_GROWTH_MAX_SLOTS (new from 2.1)
+
+ * obsolete
+ * RUBY_FREE_MIN -> RUBY_GC_HEAP_FREE_SLOTS (from 2.1)
+ * RUBY_HEAP_MIN_SLOTS -> RUBY_GC_HEAP_INIT_SLOTS (from 2.1)
+
+ * RUBY_GC_MALLOC_LIMIT
+ * RUBY_GC_MALLOC_LIMIT_MAX (new from 2.1)
+ * RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR (new from 2.1)
+
+ * RUBY_GC_OLDSPACE_LIMIT (new from 2.1)
+ * RUBY_GC_OLDSPACE_LIMIT_MAX (new from 2.1)
+ * RUBY_GC_OLDSPACE_LIMIT_GROWTH_FACTOR (new from 2.1)
+
+ * test/ruby/test_gc.rb: catch up this change.
+
+Sat Nov 23 09:45:49 2013 Aman Gupta <ruby@tmm1.net>
+
+ * marshal.c (w_object): Use HASH_PROC_DEFAULT directly from internal.h
+
+Sat Nov 23 08:43:23 2013 Aman Gupta <ruby@tmm1.net>
+
+ * gc.c: Rename heap_pages_swept_num to heap_pages_swept_slots to
+ clarify meaning (number of slots, not pages).
+
+Sat Nov 23 08:23:23 2013 Aman Gupta <ruby@tmm1.net>
+
+ * lib/set.rb (class SortedSet): Fix source_location for methods
+ defined via eval.
+
+Sat Nov 23 03:44:03 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master dcce4ff. Important changes
+ in this commit:
+
+ Remove automatic detection of gem dependencies files. This prevents a
+ security hole as described in [ruby-core:58490]
+
+ Fixed bugs for installing git gems.
+
+ * test/rubygems: ditto.
+
+Fri Nov 22 22:30:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_power):
+ Round the result value only if the precision is given.
+
+Fri Nov 22 17:20:50 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (str_transcode0): don't scrub invalid chars if
+ str.encode doesn't have explicit invalid: :replace.
+ workaround fix for see #8995
+
+Fri Nov 22 17:11:26 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * include/ruby/intern.h, internal.h: Expose rb_gc_count().
+
+Fri Nov 22 17:07:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.gemspec: version 1.2.2.
+
+Fri Nov 22 17:04:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_data_type):
+ Use RUBY_TYPED_FREE_IMMEDIATELY only if it is available.
+
+Fri Nov 22 16:49:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_power): Round the result value.
+ [Bug #8818] [ruby-core:56802]
+
+ * test/bigdecimal/test_bigdecimal.rb: Add a test for the above fix.
+
+Fri Nov 22 16:25:43 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (heap_set_increment): accept minimum additional page number.
+
+ * gc.c (gc_after_sweep): allocate pages to allocate at least
+ RUBY_HEAP_MIN_SLOTS.
+ [Bug #9137]
+
+Fri Nov 22 16:19:52 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * include/ruby/intern.h (rb_gc_set_params): Deprecate
+ rb_gc_set_params because it's only used in ruby internal.
+
+ * internal.h (ruby_gc_set_params): Declare rb_gc_set_params's
+ alias function.
+
+ * gc.c: ditto.
+
+ * ruby.c: use ruby_gc_set_params.
+
+Fri Nov 22 14:55:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): Insert rb_thread_check_ints.
+
+Fri Nov 22 14:35:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): Fix the inserting points
+ of RB_GC_GUARDs.
+
+Fri Nov 22 14:31:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c: Fix indentation.
+
+Fri Nov 22 14:03:00 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf: merge nkf 2.1.3 2a2f2c5.
+
+Fri Nov 22 12:43:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_strtod): ignore too long fraction part, which does not
+ affect the result.
+
+Fri Nov 22 12:17:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/lib/openssl/buffering.rb (OpenSSL::Buffering#initialize):
+ initialize of a module should pass arguments to super.
+
+Fri Nov 22 12:02:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_settracefunc.rb: Ignore events from other threads.
+
+Fri Nov 22 10:35:57 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (ruby_vm_destruct): do not use ruby_xfree() after freeing
+ objspace.
+
+ * gc.c (ruby_mimfree): added. It is similar to ruby_mimmalloc().
+
+ * internal.h: ditto.
+
+Fri Nov 22 09:42:35 2013 Zachary Scott <e@zzak.io>
+
+ * test/digest/test_digest.rb: Reverse order of assert_equal
+ Reported by @splattael
+
+Fri Nov 22 09:03:16 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * gc.c: fix build failure on FreeBSD introduced by r43763.
+ malloc_usable_size() is defined by malloc_np.h on FreeBSD.
+
+ * configure.in: check malloc.h and malloc_np.h.
+
+Fri Nov 22 08:27:13 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master 50a8210. Important changes
+ in this commit:
+
+ RubyGems now automatically checks for gem.deps.rb or Gemfile when
+ running ruby executables. This behavior is similar to `bundle exec
+ rake`. This change may be reverted before Ruby 2.1.0 if too many bugs
+ are found.
+
+ * test/rubygems: ditto.
+
+Thu Nov 21 22:33:59 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: RGENGC_CHECK_MODE should be 0.
+
+Thu Nov 21 21:40:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (VpAlloc): Fix the expr to adjust the size
+ of the digit array.
+
+Thu Nov 21 21:36:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_sqrt): Fix the precision of
+ the result BigDecimal of sqrt.
+ [Bug #5266] [ruby-dev:44450]
+
+ * test/bigdecimal/test_bigdecimal.rb: add tests for the above changes.
+
+Thu Nov 21 18:49:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (vm_xrealloc, vm_xfree): use malloc_usable_size() to obtain old
+ size if available.
+
+Thu Nov 21 18:47:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/delegate.rb (SimpleDelegator#__getobj__): target object must be set.
+
+ * lib/delegate.rb (DelegateClass#__getobj__): ditto.
+
+Thu Nov 21 18:28:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#initialize): use class method to get rid
+ of warnings when $VERBOSE.
+
+Thu Nov 21 17:43:29 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: rename initial_xxx variables to gc_params.xxx.
+ They are not only used initial values.
+
+ Chikanaga-san: Congratulations on RubyPrize!
+
+Thu Nov 21 17:16:00 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: enable "RGENGC_ESTIMATE_OLDSPACE" option as default.
+ Without this option, some application consumes huge memory.
+ (and there are only a few performance down)
+
+ Introduced new environment variables:
+ * RUBY_GC_HEAP_OLDSPACE (default 16MB)
+ * RUBY_GC_HEAP_OLDSPACE_MAX (default 128 MB)
+ * RUBY_GC_HEAP_OLDSPACE_GROWTH_FACTOR (default 1.2)
+
+ * gc.c (initial_malloc_limit): rename to initial_malloc_limit_min.
+
+Thu Nov 21 16:51:34 2013 Zachary Scott <e@zzak.io>
+
+ * ext/digest/bubblebabble/bubblebabble.c: Teach RDoc digest/bubblebabble
+
+Thu Nov 21 16:50:16 2013 Zachary Scott <e@zzak.io>
+
+ * test/digest/test_digest.rb: Add more tests for digest/bubblebabble
+
+Thu Nov 21 16:32:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator#method_missing): try private methods defined in
+ Kernel after the target. [Fixes GH-449]
+
+Thu Nov 21 16:25:08 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * test/uri/test_generic.rb (URI#test_merge): Test uri + URI(path)
+ in addition to uri + path.
+
+Thu Nov 21 15:36:08 2013 Zachary Scott <e@zzak.io>
+
+ * ext/openssl/lib/openssl/buffering.rb: [DOC] Fix HEREDOC comment for
+ OpenSSL::Buffering which breaks overview because of RDoc bug
+
+Thu Nov 21 14:46:57 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * eval_intern.h (SAVE_ROOT_JMPBUF): workaround for the failure of
+ test/ruby/test_exception.rb on Windows.
+ wrap by __try and __exception statements on mswin to raise SIGSEGV
+ when EXCEPTION_STACK_OVERFLOW is occurred, because MSVCRT doesn't
+ handle the exception.
+ however, (1) mingw-gcc doesn't support __try and __exception
+ statements, and (2) we cannot retry SystemStackError after this
+ change yet (maybe crashed) because SEH and longjmp() are too
+ uncongenial.
+
+ * signal.c (check_stack_overflow, CHECK_STACK_OVERFLOW): now defined on
+ Windows, too.
+
+ * thread_win32.c (ruby_stack_overflowed_p): ditto.
+
+Thu Nov 21 14:18:24 2013 Zachary Scott <e@zzak.io>
+
+ * object.c: [DOC] Clarify Object#dup vs #clone [Bug #9128]
+ Moving existing doc for this comparison to separate section of #dup
+ Adding examples to document behavior of #dup with Module#extend.
+ Based on a patch by stevegoobermanhill
+
+Thu Nov 21 14:06:02 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_marks_check): do not dump all refs.
+
+ * gc.c (allrefs_dump_i): fix output format.
+
+Thu Nov 21 13:43:07 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: change RGENGC_CHECK_MODE (>= 2) logic.
+ Basically, make an object graph of all of living objects before and
+ after marking and check status.
+
+ [Before marking: check WB sanity]
+ If there is a non-old object `obj' pointed from old object
+ (`parent') then `parent' or `obj' should be remembered.
+
+ [After marking: check marking miss]
+ Traversible objects with the object graph should be marked.
+ (However, this alert about objects pointed by machine context
+ can be false positive. We only display alert.)
+
+ [Implementation memo]
+ objspace_allrefs() creates an object graph.
+ The object graph is represented by st_table, key is object (VALUE)
+ and value is referring objects. Referring objects are stored by
+ "struct reflist".
+
+ * gc.c (init_mark_stack): do not use push_mark_stack_chunk() at init.
+ This pre-allocation causes failure on is_mark_stack_empty()
+ without any pushing.
+
+Thu Nov 21 13:40:20 2013 Zachary Scott <e@zzak.io>
+
+ * lib/observer.rb: [DOC] Clarify default observer method.
+ By @edward [Fixes GH-450] https://github.com/ruby/ruby/pull/450
+
+Thu Nov 21 13:32:53 2013 Zachary Scott <e@zzak.io>
+
+ * ext/openssl/ossl_engine.c: [DOC] Documentation for OpenSSL::Engine
+ This patch is based off work by @vbatts in GH-436 completing the
+ documentation for this class and its methods.
+ https://github.com/ruby/ruby/pull/436
+
+Thu Nov 21 10:45:22 2013 Zachary Scott <e@zzak.io>
+
+ * ext/openssl/lib/openssl/buffering.rb: Remove unused arguments from
+ OpenSSL::Buffering.new [Fixes GH-445]
+
+Thu Nov 21 10:30:47 2013 Zachary Scott <e@zzak.io>
+
+ * test/digest/test_digest.rb: Add test for Digest::SHA256.bubblebabble
+
+Wed Nov 20 20:54:01 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * tool/instruction.rb : fix typo.
+
+Wed Nov 20 19:45:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (rand_init): Make it possible to specify arbitrary array
+ for init_genrand().
+
+Wed Nov 20 17:34:13 2013 Koichi Sasada <ko1@atdot.net>
+
+ * parse.y (rb_gc_mark_symbols): set global_symbols.minor_marked only
+ when full_mark is 0.
+ rb_gc_mark_symbols() (with full_mark == 1) can be called by other
+ than GC (such as rb_objspace_reachable_objects_from_root()).
+
+Wed Nov 20 11:46:38 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json: merge JSON 1.8.1.
+ https://github.com/nurse/json/compare/002ac2771ce32776b32ccd2d06e5604de6c36dcd...e09ffc0d7da25d0393873936c118c188c78dbac3
+ * Remove Rubinius exception since transcoding should be working now.
+ * Fix https://github.com/flori/json/issues/162 reported by Marc-Andre
+ Lafortune <github_rocks@marc-andre.ca>. Thanks!
+ * Applied patches by Yui NARUSE <naruse@airemix.jp> to suppress
+ warning with -Wchar-subscripts and better validate UTF-8 strings.
+ * Applied patch by ginriki@github to remove unnecessary if.
+ * Add load/dump interface to JSON::GenericObject to make
+ serialize :some_attribute, JSON::GenericObject
+ work in Rails active models for convenient
+ SomeModel#some_attribute.foo.bar access to serialised JSON data.
+
+Wed Nov 20 01:39:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/constant.rb (RDoc::Constant#documented?): workaround for
+ NoMethodError when the original of alias is not found.
+
+Tue Nov 19 23:38:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (--with-os-version-style): option to transform target
+ OS version string.
+
+Tue Nov 19 21:27:33 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/net/http/utils.rb (spawn_server): Specify zero for port to
+ avoid reusing an allocated port.
+
+ * test/net/http/test_http.rb: Don't specify port here.
+
+ * test/net/http/test_https.rb: Ditto.
+
+Tue Nov 19 18:52:10 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (heap_is_swept_object): use heap_page::before_sweep flag.
+
+Tue Nov 19 18:49:32 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_objspace_reachable_objects_from_root): do major marking.
+
+Tue Nov 19 18:45:40 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_gc_resurrect): added.
+ rb_fstring() used rb_gc_mark() to avoid freeing used string.
+ However, rb_gc_mark() set mark bit *and* pushes mark_stack.
+ rb_gc_resurrect() does only set mark bit if it is before sweeping.
+
+ * string.c (rb_fstring): use rb_gc_resurrect.
+
+ * internal.h: add decl.
+
+Tue Nov 19 09:47:02 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Update to RDoc master a1195ce. Changes include:
+
+ Improved accessibility of the main sidebar navigation.
+
+ Fixed handling of regexp options in HTML source highlighting.
+
+ * test/rdoc: ditto.
+
+Tue Nov 19 09:33:52 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master 6a3d9f9. Changes include:
+
+ Compatibly renamed Gem::DependencyResolver to Gem::Resolver.
+
+ Added support for git gems in gem.deps.rb and Gemfile.
+
+ Fixed resolver bugs.
+
+ * test/rubygems: ditto.
+
+ * lib/rubygems/LICENSE.txt: Updated to license from RubyGems trunk.
+ [ruby-trunk - Bug #9086]
+
+ * lib/rubygems/commands/which_command.rb: RubyGems now indicates
+ failure when any file is missing. [ruby-trunk - Bug #9004]
+
+ * lib/rubygems/ext/builder: Extensions are now installed into the
+ extension install directory and the first directory in the require
+ path from the gem. This allows backwards compatibility with msgpack
+ and other gems that calculate full require paths.
+ [ruby-trunk - Bug #9106]
+
+
+Tue Nov 19 07:21:56 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in (LOCALTIME_OVERFLOW_PROBLEM): Define it for cross
+ compiling.
+ [ruby-core:58391] [Bug #9119] Reported by Luis Lavena.
+ Analyzed by Heesob Park.
+
+Tue Nov 19 05:55:05 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/rubygems_hook.rb: Remove debugging puts committed by
+ accident.
+
+Mon Nov 18 22:47:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_intern.h (TH_PUSH_TAG, TH_EXEC_TAG): refine stack overflow
+ detection. chain local tag after setjmp() successed on it, because
+ calling setjmp() also can overflow the stack.
+ [ruby-dev:47804] [Bug #9109]
+
+ * vm_eval.c (rb_catch_obj): now th->tag points previous tag until
+ TH_EXEC_TAG().
+
+ * thread_pthread.c (ruby_init_stack): set stack_start properly by
+ get_main_stack() if possible.
+
+Mon Nov 18 22:45:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_jump.c (rb_exec_end_proc): unlink and free procs data before
+ calling for each procs. [Bug #9110]
+
+Sun Nov 17 06:33:32 2013 Shota Fukumori <her@sorah.jp>
+
+ * configure.in: Use $LIBS for base of $SOLIBS, also in darwin.
+ By this fix, environment that libgmp is located in $LIBS can build
+ ruby.
+
+Sun Nov 17 01:56:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * thread_pthread.c (rb_thread_create_timer_thread): Show error
+ message instead of error number.
+ (thread_create_core): Ditto.
+
+ * cont.c (fiber_machine_stack_alloc): Ditto.
+
+Sat Nov 16 18:28:08 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/ultralightparser.rb
+ (REXML::Parsers::UltraLightParser#parse): Fix wrong :start_doctype
+ position.
+ [Bug #9061] [ruby-dev:47778]
+ Patch by Ippei Obayashi. Thanks!!!
+
+ * test/rexml/parser/test_ultra_light.rb: Add a test for this case.
+
+Sat Nov 16 02:13:56 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * cont.c : Introduce ensure rollback mechanism. Please see below.
+
+ * internal.h (ruby_register_rollback_func_for_ensure): catch up above change.
+ Add rollback mechanism API.
+
+ * vm_core.h (typedef struct rb_vm_struct): catch up above change.
+ Introduce ensure-rollback relation table.
+
+ * vm_core.h (typedef struct rb_thread_struct): catch up above change.
+ Introduce ensure stack.
+
+ * eval.c (rb_ensure): catch up above change.
+ Introduce ensure stack.
+
+ * hash.c : New function for rollback ensure, and register it to
+ ensure-rollback relation table. [ruby-dev:47803] [Bug #9105]
+
+ Ensure Rollback Mechanism:
+ A rollback's function is a function to rollback a state before ensure's
+ function execution.
+ When the jump of callcc is across the scope of rb_ensure,
+ ensure's functions and rollback's functions are executed appropriately
+ for keeping consistency.
+
+ Current API is unstable, and only internal use.
+
+ ruby_register_rollback_func_for_ensure(ensure_func,rollback_func)
+ This API create relation ensure's function to rollback's function.
+ By registered rollback's function, it is executed When jumping into
+ corresponding rb_ensure scope.
+
+Sat Nov 16 00:18:36 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * eval_jump.c (rb_exec_end_proc): fix double free or corruption error
+ when reentering by callcc. [ruby-core:58329] [Bug #9110]
+
+ * test/ruby/test_beginendblock.rb: test for above.
+
+Fri Nov 15 01:06:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/objspace/objspace_dump.c (dump_output): allow IO object as
+ output, and use Tempfile.create and return open file instead of
+ mkstemp() and path name for :file output.
+ [ruby-core:58266] [Bug #9102]
+
+ * test/objspace/test_objspace.rb (TestObjSpace#dump_my_heap_please):
+ remove temporary output file.
+
+Thu Nov 14 23:39:00 2013 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+
+ * ext/bigdecimal/lib/bigdecimal/util.rb: [DOC] remove example of
+ Rational#to_d without argument. [Bug #8958]
+
+Thu Nov 14 20:24:15 2013 Naohisa Goto <ngotogenome@gmail.com>
+
+ * ruby_atomic.h (ATOMIC_SIZE_CAS): fix compile error on Solaris
+ since r43460.
+
+Thu Nov 14 19:53:00 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/openssl/test_cipher.rb (test_aes_gcm_wrong_tag): Don't use
+ String#succ because it can make modified (wrong) auth_tag longer
+ than 16 bytes. The longer auth_tag makes that
+ EVP_CIPHER_CTX_ctrl (and internally aes_gcm_ctrl) fail.
+ [ruby-core:55143] [Bug #8439] reported by Vit Ondruch.
+
+Thu Nov 14 11:33:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (foreach_safe_i, hash_foreach_iter): deal with error detected
+ by ST_CHECK.
+
+ * st.c (st_foreach_check): call with non-error argument in normal case.
+
+Thu Nov 14 02:37:14 2013 Zachary Scott <e@zzak.io>
+
+ * ext/thread/thread.c: [DOC] This patch accomplishes the following:
+
+ - Teach RDoc about ConditionVariable
+ - Teach RDoc about Queue
+ - Teach RDoc about SizedQueue
+ - Use fully-qualified namespace for Document-method
+ This is necessary to separate definitions between classes
+ - Fix rdoc bug in call_seq vs. call-seq
+ - Correct doc for SizedQueue#pop patch by @jackdanger [Bug #8988]
+
+Thu Nov 14 01:11:54 2013 Zachary Scott <e@zzak.io>
+
+ * ext/bigdecimal/lib/bigdecimal/util.rb: [DOC] +precision+ is required
+
+Wed Nov 13 19:21:36 2013 Zachary Scott <e@zzak.io>
+
+ * ext/bigdecimal/lib/bigdecimal/util.rb: [DOC] Document the required
+ +precision+ argument for Rational#to_d [Bug #8958]
+
+Wed Nov 13 19:02:05 2013 Zachary Scott <e@zzak.io>
+
+ * ext/digest/*: [DOC] Fix several typos and broken http links.
+ Improved examples for Digest overview and fixed a broken example in
+ Digest::HMAC overview. This patch also adds a description of
+ Digest::SHA256.bubblebabble to the Digest overview.
+
+ Patched by @stomar [Bug #9027]
+
+Wed Nov 13 18:32:12 2013 Zachary Scott <e@zzak.io>
+
+ * ext/openssl/ossl_config.c: [DOC] Document the following:
+
+ - OpenSSL::ConfigError
+ - OpenSSL::Config::DEFAULT_CONFIG_FILE
+
+ Patched by @vbatts via GH-436
+ https://github.com/ruby/ruby/pull/436
+
+Wed Nov 13 18:03:00 2013 Zachary Scott <e@zzak.io>
+
+ * ext/openssl/ossl_asn1.c: [DOC] Document parts of
+ OpenSSL::ASN1::ObjectId included a fix for the class overview, which
+ previously showed the documentation for Constructive due to missing
+ ObjectId overview. This patch also includes a note for Primitive.
+
+ Based on a patch by @vbatts via GH-436
+ https://github.com/ruby/ruby/pull/436
+
+Wed Nov 13 17:19:36 2013 Zachary Scott <e@zzak.io>
+
+ * ext/openssl/lib/openssl/config.rb: In #parse use +string+ for +str+
+
+Wed Nov 13 17:09:45 2013 Zachary Scott <e@zzak.io>
+
+ * ext/openssl/lib/openssl/*.rb: [DOC] Document the following:
+
+ - Integer#to_bn
+ - OpenSSL::Buffering module
+ - Deprecated OpenSSL::Digest::Digest compatibility class
+ - OpenSSL::Config
+
+ These changes were based on a patch by @vbatts via GH-436
+ https://github.com/ruby/ruby/pull/436
+
+Wed Nov 13 10:55:43 2013 Zachary Scott <e@zzak.io>
+
+ * doc/regexp.rdoc: [DOC] Fix typo in Special global variables section.
+ Reported by Alex Johnson on ruby-doc.org
+
+Wed Nov 13 10:43:19 2013 Zachary Scott <e@zzak.io>
+
+ * hash.c: [DOC] Adds an example for Hash#store
+
+Wed Nov 13 09:03:40 2013 Zachary Scott <e@zzak.io>
+
+ * doc/regexp.rdoc: [DOC] add note about Bug #4044 as suggested by
+ duerst-san in [ruby-core:43612] [Fixes GH-443] Patched by @rosenfeld
+ https://github.com/ruby/ruby/pull/443
+
+Tue Nov 12 10:15:14 2013 Eric Hodel <drbrain@segment7.net>
+
+ * test/rubygems/insure_session.rb: Remove unused test file.
+
+Tue Nov 12 09:16:24 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master b9213d7. Changes include:
+
+ Fixed tests on Windows (I hope) by forcing platform for
+ platform-dependent tests.
+
+ Fixed File.exists? warnings.
+
+ Improved testing infrastructure.
+
+ * test/rubygems: ditto.
+
+ * test/rdoc/test_rdoc_rubygems_hook.rb: Switch to util_spec like
+ RubyGems.
+
+Mon Nov 11 18:31:12 2013 Aman Gupta <ruby@tmm1.net>
+
+ * internal.h: move common string/hash flags to include file.
+ * ext/objspace/objspace_dump.c: remove flags shared above.
+ * hash.c: ditto.
+ * string.c: ditto.
+
+Mon Nov 11 04:36:14 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/specification.rb: Include 2.2.0.preview.2 when checking
+ if extensions should be built. Fixes a ruby-ci failure.
+ * test/rubygems/test_gem_specification.rb: Test for the above.
+
+Mon Nov 11 03:15:56 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_trace.c (symbol2event_flag): add secret feature.
+ add a_call/a_return events.
+ a_call is call | b_call | c_call, and same as a_return.
+
+Mon Nov 11 02:51:17 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master 4bdc4f2. Important changes
+ in this commit:
+
+ RubyGems now chooses the test server port reliably. Patch by akr.
+
+ Partial implementation of bundler's Gemfile format.
+
+ Refactorings to improve the new resolver.
+
+ Fixes bugs in the resolver.
+
+ * test/rubygems: Tests for the above.
+
+Mon Nov 11 01:02:06 2013 Zachary Scott <e@zzak.io>
+
+ * lib/timeout.rb: [DOC] Add note about change from #8730 [Fixes GH-440]
+ * NEWS: [DOC] Improve grammar on change to Timeout
+ Patched by @srawlins in https://github.com/ruby/ruby/pull/440
+
+Sun Nov 10 23:47:05 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * gc.c (rb_gcdebug_print_obj_condition): catch up recent changes
+ to compile on GC_DEBUG.
+
+Sun Nov 10 22:16:19 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (exc_cause): captured previous exception.
+
+ * eval.c (make_exception): capture previous exception automagically.
+ [Feature #8257]
+
+Sun Nov 10 08:37:20 2013 Zachary Scott <e@zzak.io>
+
+ * thread.c: [DOC] Remove duplicate reference
+
+Sun Nov 10 08:09:29 2013 Zachary Scott <e@zzak.io>
+
+ * lib/drb/drb.rb: [DOC] promote better windows-safe filename regular
+ expression in DRb Logger example. Reported by Chris Pheonix
+ [Bug #9074]
+
+Sun Nov 10 08:03:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_define_finalizer, rb_undefine_finalizer): rename and export
+ finalizer functions.
+
+Sun Nov 10 07:41:22 2013 Zachary Scott <e@zzak.io>
+
+ * lib/weakref.rb: [DOC] fix typos by @xaviershay [Fixes GH-439]
+ https://github.com/ruby/ruby/pull/439
+
+Sun Nov 10 06:14:39 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): emit opt_str_freeze if the #freeze
+ method is called on a static string literal with no arguments.
+
+ * defs/id.def (firstline): add freeze so idFreeze is available
+
+ * insns.def (opt_str_freeze): add opt_str_freeze instruction which
+ pushes a frozen string literal without allocating a new object if
+ String#freeze is not overridden
+
+ * string.c (Init_String): define String#freeze
+
+ * vm.c (vm_init_redefined_flag): define BOP_FREEZE on String class as
+ a basic operation
+
+ * vm_insnhelper.h: ditto
+
+ [Feature #8992] [ruby-core:57705]
+
+Sun Nov 10 01:34:14 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (vm_malloc_increase): sweep immediately on GC due to malloc().
+ To reduce memory usage, sweep as soon as possible.
+ This behavior is same as Ruby 2.0.0 and before.
+
+Sun Nov 10 00:39:26 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/gc/gcbench.rb: output version description and GC::OPTS.
+
+Sun Nov 10 00:36:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (should_be_callable): allow private call since rb_eval_cmd
+ calls even private methods.
+
+Sun Nov 10 00:33:17 2013 Zachary Scott <e@zzak.io>
+
+ * lib/racc/rdoc/grammar.en.rdoc: [DOC] fix typo by Tsuyoshi Sawada
+ [Bug #9077]
+
+Sat Nov 9 22:35:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb (Gem::Specification.load): obtain spec date from
+ VCS for the case using git, RUBY_RELEASE_DATE is the last resort.
+ probably fixes [Bug #9085].
+
+Sat Nov 9 20:56:12 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * ext/objspace/object_tracing.c: use declarations in internal.h.
+
+ * ext/objspace/objspace.c: ditto
+
+Sat Nov 9 20:32:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/objspace/test_objspace.rb (test_dump_all): Make the test string
+ shorter to be an embedded string on 32bit environment as well as
+ 64bit environment.
+
+Sat Nov 9 15:00:16 2013 Zachary Scott <e@zzak.io>
+
+ * io.c: [DOC] ARGF.gets may return nil [Bug #9029] patch by znz
+
+Sat Nov 9 14:54:52 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rss/*: [DOC] document various constants @steveklabnik [Bug #8812]
+
+Sat Nov 9 14:50:09 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rss/rss.rb: [DOC] document Time#w3cdtf by @steveklabnik
+ [Bug #8821]
+
+Sat Nov 9 14:29:04 2013 Zachary Scott <e@zzak.io>
+
+ * ext/dl/cfunc.c: [DOC] fix typo in example [Bug #8944]
+ Patched by Heesob Park
+
+Sat Nov 9 13:59:58 2013 Zachary Scott <e@zzak.io>
+
+ * lib/test/unit/assertions.rb: [DOC] better example for assert_send()
+ Patch by Andrew Grimm [Bug #8975]
+
+Sat Nov 9 12:45:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * insns.def: unify ic_constant_serial and ic_class_serial into one field
+ ic_serial. This is possible because these fields are only ever used
+ exclusively with each other.
+
+ * insns.def: ditto
+ * vm_core.h: ditto
+ * vm_insnhelper.c: ditto
+
+Sat Nov 9 12:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * class.c: unify names of vm state version counters to 'serial'.
+ This includes renaming 'vm_state_version_t' to 'rb_serial_t',
+ 'method_state' to 'method_serial', 'seq' to 'class_serial',
+ 'vmstat' to 'constant_serial', etc.
+
+ * insns.def: ditto
+ * internal.h: ditto
+ * vm.c: ditto
+ * vm_core.h: ditto
+ * vm_insnhelper.c: ditto
+ * vm_insnhelper.h: ditto
+ * vm_method.c: ditto
+
+Sat Nov 9 09:22:29 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (gc_page_sweep, rgengc_rememberset_mark): Refactoring.
+ Get bitmaps directly.
+
+Sat Nov 9 09:16:36 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (RVALUE_PROMOTE_INFANT): Refactoring. Remove duplicated nonsense
+ code.
+
+Sat Nov 9 09:04:48 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (gc_marks_test): Bugfix. Fix a struct member name for build
+ with RGENGC_CHECK_MODE.
+
+Sat Nov 9 08:58:23 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c : Add GC_PROFILE_DETAIL_MEMORY option.
+ If GC_PROFILE_MORE_DETAIL && GC_PROFILE_DETAIL_MEMORY,
+ maxrss, minflt and majflt are added to each profile record.
+
+Sat Nov 9 07:41:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * internal.h (rb_vm_backtrace_object, rb_gc_count): make prototype
+ declarations, not old-K&R style.
+
+Sat Nov 9 06:11:14 2013 vo.x (Vit Ondruch) <vondruch@redhat.com>
+
+ * tool/rbinstall.rb (Gem::Specification#collect): make stable
+ Gem::Specification.files in default .gemspecs the different order of
+ "files" in .gemspec files makes them different therefore possibly
+ conflicting in multilib scenario. patch by vo.x (Vit Ondruch) at
+ [ruby-core:57544] [Bug #8623].
+
+Sat Nov 9 01:59:18 2013 Aman Gupta <ruby@tmm1.net>
+
+ * ext/objspace/objspace_dump.c: Add experimental methods to
+ dump objectspace as json: ObjectSpace.dump_all and
+ ObjectSpace.dump(obj). These methods are useful for debugging
+ reference leaks and memory growth in large ruby applications.
+ [Bug #9026] [ruby-core:57893] [Fixes GH-423]
+ * test/objspace/test_objspace.rb: tests for above.
+
+Sat Nov 9 00:26:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (GetLastError): already defined in windows.h on nowadays
+ cygwin, and caused the confliction with the system provided
+ definition on cygwin64. by @kou1okada [Fixes GH-433].
+
+Fri Nov 8 18:35:31 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * lib/open3.rb: receive arguments as keyword arguments.
+
+Fri Nov 8 13:19:26 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * io.c (rb_io_open_with_args): use RARRAY_CONST_PTR().
+
+ * io.c (rb_scan_open_args): use const qualifier for above.
+
+ * io.c (rb_open_file): ditto.
+
+ * io.c (rb_io_open_with_args): ditto.
+
+Fri Nov 8 11:35:06 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * dir.c, pack.c, ruby.c, struct.c, vm_eval.c: use RARRAY_CONST_PTR().
+
+Fri Nov 8 10:58:02 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * compile.c (iseq_build_from_ary_exception): use RARRAY_CONST_PTR().
+
+ * compile.c (iseq_build_from_ary_body): ditto.
+
+Fri Nov 8 10:49:34 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * enumerator.c (append_method): use RARRAY_CONST_PTR().
+
+ * enumerator.c (lazy_init_iterator): ditto.
+
+Fri Nov 8 02:44:29 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (vm_malloc_increase): check GVL before gc_rest_sweep().
+ vm_malloc_increase() can be called without GVL.
+ However, gc_rest_sweep() assumes acquiring GVL.
+ To avoid this problem, check GVL before gc_rest_sweep().
+ [Bug #9090]
+
+ This workaround introduces possibility to set malloc_limit as
+ wrong value (*1). However, this may be rare case. So I commit it.
+
+ *1: Without rest_sweep() here, gc_rest_sweep() can decrease
+ malloc_increase due to ruby_sized_xfree().
+
+Fri Nov 8 02:50:25 2013 Zachary Scott <e@zzak.io>
+
+ * lib/securerandom.rb: [DOC] specify arguments passed to ::random_bytes
+ By @chastell [Fixes GH-412] https://github.com/ruby/ruby/pull/412
+
+Fri Nov 8 02:43:01 2013 Zachary Scott <e@zzak.io>
+
+ * ext/objspace/object_tracing.c: [DOC] trace_object_allocations_stop
+ By @srawlins [Fixes GH-421] https://github.com/ruby/ruby/pull/421
+
+Fri Nov 8 02:34:20 2013 Zachary Scott <e@zzak.io>
+
+ * lib/net/ftp.rb: [DOC] Document Net::FTP.mdtm and .set_socket and fix
+ spelling typo, based on patch by @artfuldodger [Fixes GH-426]
+ https://github.com/ruby/ruby/pull/426
+
+Fri Nov 8 02:14:37 2013 Zachary Scott <e@zzak.io>
+
+ * array.c: [DOC] Add note about negative indices in Array overview
+ By @ckaenzig [Fixes GH-427] https://github.com/ruby/ruby/pull/427
+
+Fri Nov 8 02:09:12 2013 Zachary Scott <e@zzak.io>
+
+ * lib/csv.rb: [DOC] Fix typo in CSV.parse_line by @funky-bibimbap
+ [Fixes GH-430] https://github.com/ruby/ruby/pull/430
+
+Fri Nov 8 01:01:54 2013 Zachary Scott <e@zzak.io>
+
+ * golf_prelude.rb: syntax formatting for whitespace [Fixes GH-425]
+ Patch by @edward https://github.com/ruby/ruby/pull/425
+
+Thu Nov 7 19:36:09 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: modify malloc_limit strategy.
+
+ * fix default values:
+ GC_MALLOC_LIMIT_GROWTH_FACTOR
+ GC_MALLOC_LIMIT: 8MB -> 16MB
+ GC_MALLOC_LIMIT_MAX: 384MB -> 32MB
+
+ * algorithm of malloc_limit increment.
+ if (malloc_increase < malloc_limit) {
+ next_malloc_limit = malloc_limit * factor
+ if (malloc_limit > malloc_limit_max) {
+ malloc_limit = malloc_increase
+ }
+ }
+ This algorithm change malloc_limit from
+ 16MB -> 32MB slowly.
+ If malloc_limit exceeds malloc_limit_max, then
+ increase with malloc_increase.
+
+Thu Nov 7 11:06:05 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_shuffle_bang): use RARRAY_PTR_USE() without WB
+ because there are not new relations.
+
+Thu Nov 7 10:34:12 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_sample): use rb_ary_dup().
+
+Thu Nov 7 09:39:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_trace.c (rb_threadptr_exec_event_hooks_orig): errinfo should not
+ be propagated to trace blocks so that no argument raise does not
+ throw internal objects. [ruby-dev:47793] [Bug #9088]
+
+Wed Nov 6 21:30:55 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (gc_before_sweep): Change algorithm of malloc_limit to
+ conservative for closing to memory consumption of ruby 2.0.
+
+ * gc.c (GC_MALLOC_LIMIT, GC_MALLOC_LIMIT_GROWTH_FACTOR):
+ Adjust parameters for new algorithm.
+
+Wed Nov 6 21:16:51 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_shift_m): use RARRAY_PTR_USE() without WB because
+ there are not new relations.
+
+Wed Nov 6 21:05:20 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_reverse): use RARRAY_PTR_USE().
+
+Wed Nov 6 19:30:44 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * common.mk (help): add texts about gcbench.
+
+Wed Nov 6 16:32:32 2013 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * lib/open3.rb: tweaked grammar in comments
+
+Wed Nov 6 11:46:36 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_sample): use RARRAY_AREF() and RARRAY_PTR_USE()
+ instead of RARRAY_PTR().
+
+Wed Nov 6 10:37:07 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_and): defer hash creation and some refactoring.
+
+Wed Nov 6 09:14:31 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/bm_vm1_gc_short_lived.rb: added.
+ These GC benchmarks do not reflect practical applications.
+ They are only for tuning.
+
+ * benchmark/bm_vm1_gc_short_with_complex_long.rb: added.
+
+ * benchmark/bm_vm1_gc_short_with_long.rb: added.
+
+ * benchmark/bm_vm1_gc_short_with_symbol.rb: added.
+
+ * benchmark/bm_vm1_gc_wb_ary.rb: added.
+
+ * benchmark/bm_vm1_gc_wb_obj.rb: added.
+
+ * benchmark/bm_vm_thread_queue.rb: added.
+ This benchmark is added to know how fast C version of thread.so.
+
+Wed Nov 6 09:13:32 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: define RGENGC_ESTIMATE_OLDSPACE == 0 if USE_RGENGC is 0.
+
+Wed Nov 6 07:13:18 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (Init_GC): add GC::OPTS to show options.
+
+Wed Nov 6 07:12:17 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/gc/gcbench.rb: add some options to make quiet.
+
+Wed Nov 6 04:14:25 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: process merge keys before
+ reviving objects. Fixes GH psych #168
+ * test/psych/test_merge_keys.rb: test for change
+ https://github.com/tenderlove/psych/issues/168
+
+Tue Nov 5 21:21:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_thread.rb (test_thread_join_in_trap):
+ Run the test in a different process.
+
+Tue Nov 5 20:14:32 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (is_live_object): A hidden object may be a live object.
+ [ruby-dev:47788] [Bug #9072]
+
+Tue Nov 5 13:37:19 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: add support to estimate increase of oldspace memory usage.
+ This is another approach to solve an issue discussed at r43530.
+ This feature is disabled as default.
+
+ This feature measures an increment of memory consumption by oldgen
+ objects. It measures memory consumption for each objects when
+ the object is promoted. However, measurement of memory consumption
+ is not accurate now. So that this measurement is `estimation'.
+
+ To implement this feature, move memsize_of() function from
+ ext/objspace/objspace.c and expose rb_obj_memsize_of().
+
+ Some memsize() functions for T_DATA (T_TYPEDDATA) have problem to
+ measure memory size, so that we ignores T_DATA objects now.
+ For example, some functions skip NULL check for pointer.
+
+ The macro RGENGC_ESTIMATE_OLDSPACE enables/disables this feature,
+ and turned off as default.
+
+ We need to compare 3gen GC and this feature carefully.
+ (it is possible to enable both feature)
+ We need a help to compare them.
+
+ * internal.h: expose rb_obj_memsize_of().
+
+ * ext/objspace/objspace.c: use rb_obj_memsize_of() function.
+
+ * cont.c (fiber_memsize): fix to check NULL.
+
+ * variable.c (autoload_memsize): ditto.
+
+ * vm.c (vm_memsize): ditto.
+
+Tue Nov 5 04:03:07 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (GC_MALLOC_LIMIT_MAX): fix default value 512MB -> 384MB.
+ 512MB is huge.
+
+Tue Nov 5 03:31:23 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: add 3gen GC patch, but disabled as default.
+
+ RGenGC is designed as 2 generational GC, young and old generation.
+ Young objects will be promoted to old objects after one GC.
+ Old objects are not collect until major (full) GC.
+
+ The issue of this approach is some objects can promoted as old
+ objects accidentally and not freed until major GC.
+ Major GC is not frequently so short-lived but accidentally becoming
+ old objects are not freed.
+
+ For example, the program "loop{Array.new(1_000_000)}" consumes huge
+ memories because short lived objects (an array which has 1M
+ elements) are promoted while GC and they are not freed before major
+ GC.
+
+ To solve this problem, generational GC with more generations
+ technique is known. This patch implements three generations gen GC.
+
+ At first, newly created objects are "Infant" objects.
+ After surviving one GC, "Infant" objects are promoted to "Young"
+ objects.
+ "Young" objects are promoted to "Old" objects after surviving
+ next GC.
+ "Infant" and "Young" objects are collected if it is not marked
+ while minor GC. So that this technique solves this problem.
+
+ Representation of generations:
+ * Infant: !FL_PROMOTED and !oldgen_bitmap [00]
+ * Young : FL_PROMOTED and !oldgen_bitmap [10]
+ * Old : FL_PROMOTED and oldgen_bitmap [11]
+
+ The macro "RGENGC_THREEGEN" enables/disables this feature, and
+ turned off as default because there are several problems.
+ (1) Failed sometimes (Heisenbugs).
+ (2) Performance down.
+ Especially on write barriers. We need to detect Young or Old
+ object by oldgen_bitmap. It is slower than checking flags.
+
+ To evaluate this feature on more applications, I commit this patch.
+ Reports are very welcome.
+
+ This patch includes some refactoring (renaming names, etc).
+
+ * include/ruby/ruby.h: catch up 3gen GC.
+
+ * .gdbinit: fix to show a prompt "[PROMOTED]" for promoted objects.
+
+Tue Nov 5 00:05:51 2013 Koichi Sasada <ko1@atdot.net>
+
+ * node.h: catch up comments for last commit.
+
+Tue Nov 5 00:02:00 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: rename FL_OLDGEN to FL_PROMOTED.
+ This flag represents that "this object is promoted at least once."
+
+ * gc.c, debug.c, object.c: catch up this change.
+
+Mon Nov 4 22:20:16 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/xmlrpc: Don't use fixed ports: 8070 and 8071.
+
+Mon Nov 4 15:25:52 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/xmlrpc/webrick_testing.rb (start_server): Initialize the server
+ at main thread to fail early.
+
+Mon Nov 4 10:08:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_intern.h (TH_EXEC_TAG, TH_JUMP_TAG): get rid of undefined
+ behavior of setjmp() in rhs of assignment expression.
+ [ISO/IEC 9899:1999] 7.13.1.1
+
+Sun Nov 3 23:06:51 2013 Tanaka Akira <akr@fsij.org>
+
+ * sample/test.rb: Make temporary file names unique.
+
+Sun Nov 3 20:41:17 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/xmlrpc: Wrap definitions by TestXMLRPC module.
+
+Sun Nov 3 20:23:38 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/xmlrpc/webrick_testing.rb (stop_server): Don't try to shutdown
+ the server if the server is not started.
+
+Sun Nov 3 09:35:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_feature_p): deal with default loadable suffixes.
+
+ * load.c (load_lock): initialize statically linked extensions.
+
+ * load.c (search_required, rb_require_safe): deal with statically
+ linked extensions.
+
+ * load.c (ruby_init_ext): defer initialization of statically linked
+ extensions until required actually. [Bug #8883]
+
+Sat Nov 2 15:14:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/logger.rb (Logger::LogDevice::LogDeviceMutex#lock_shift_log):
+ open file can't be removed or renamed on Windows. [ruby-dev:47790]
+ [Bug #9046]
+
+ * test/logger/test_logger.rb (TestLogDevice#run_children): don't use
+ fork.
+
+Sat Nov 2 07:08:43 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/logger.rb: Inter-process locking for log rotation
+ Current implementation fails log rotation on multi process env.
+ by sonots <sonots@gmail.com>
+ https://github.com/ruby/ruby/pull/428 fix GH-428 [Bug #9046]
+
+Fri Nov 1 23:24:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (wmap_mark_map): mark live objects only, but delete zombies.
+ [ruby-dev:47787] [Bug #9069]
+
+Fri Nov 1 22:45:54 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (struct heap_page, gc_page_sweep, gc_sweep): Refactoring for
+ performance. Add before_sweep condition to heap_page structure.
+
+ * gc.c (rb_gc_force_recycle): Use before_sweep member.
+
+ * gc.c (heap_is_before_sweep, is_before_sweep): Remove. They have not
+ already been used.
+
+Fri Nov 1 22:20:28 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (make_deferred): Refactoring. Collect codes which should be
+ atomic.
+
+ * gc.c (make_io_deferred, obj_free, rb_objspace_call_finalizer,
+ gc_page_sweep): Correspond to the above.
+
+Fri Nov 1 21:40:35 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (typedef struct rb_objspace): Refactoring. Move some members
+ into profile member.
+
+ * gc.c (newobj_of): Correspond to the above.
+
+ * gc.c (finalize_list): Ditto.
+
+ * gc.c (objspace_live_num): Ditto.
+
+ * gc.c (gc_page_sweep): Ditto.
+
+ * gc.c (rb_gc_force_recycle): Ditto.
+
+ * gc.c (garbage_collect_body): Ditto.
+
+ * gc.c (rb_gc_count): Ditto.
+
+ * gc.c (gc_stat): Ditto.
+
+ * gc.c (gc_prof_set_heap_info): Ditto.
+
+ * gc.c (gc_profile_dump_on): Ditto.
+
+Fri Nov 1 20:53:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_scrub): fix typo, should yield invalid byte
+ sequence to be scrubbed. reported by znz at IRC.
+
+Fri Nov 1 17:25:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (is_live_object): finalizer may not run because of lazy-sweep.
+ [ruby-dev:47786] [Bug #9069]
+
+Fri Nov 1 16:55:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_scrub): export with fixed length arguments, and
+ allow nil as replacement string instead of omitting.
+
+Fri Nov 1 06:20:44 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_mutex_struct): reduce rb_mutex_t size by 8 bytes
+ on 64bit platform. Patch by Eric Wong. [Feature #9068][ruby-core:58114]
+
+Fri Nov 1 01:08:33 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/gc/gcbench.rb: print HWM (high water mark) if possible.
+
+Thu Oct 31 21:48:31 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/streamparser.rb: Add dependency file require.
+ [Bug #9062] [ruby-dev:47779]
+ Reported by Ippei Obayashi. Thanks!!!
+
+Thu Oct 31 14:09:32 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_method.c (rb_method_entry_make): fix to pass an ISeq value.
+ OBJ_WRITTEN() accepts only VALUE.
+
+Wed Oct 30 19:07:57 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-additional.el (ruby-brace-to-do-end)
+ (ruby-do-end-to-brace, ruby-toggle-block): Remove functions that
+ are already in the latest released version of Emacs (24.3).
+ [Bug #7565]
+
+Wed Oct 30 12:44:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (config.status): add missing variables,
+ PLATFORM_DIR and THREAD_MODEL.
+
+Wed Oct 30 12:20:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * time.c (v2w): Normalize a rational value to an integer if possible.
+ [ruby-core:58070] [Bug #9059] reported by Isaac Schwabacher.
+
+Wed Oct 30 12:08:41 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_uniq_bang): use rb_ary_modify_check() instead of
+ rb_ary_modify() because the array will be unshared soon.
+
+Wed Oct 30 03:25:10 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: make less garbage when
+ testing if a string is binary.
+
+Wed Oct 30 03:08:24 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: string subclasses should
+ not be considered to be binary. Fixes Psych / GH 166
+ https://github.com/tenderlove/psych/issues/166
+
+ * test/psych/test_string.rb: test for fix
+
+Tue Oct 29 23:01:18 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_zip): some refactoring.
+
+Tue Oct 29 22:11:37 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_uniq_bang): use st_foreach() instead of for loop.
+
+Tue Oct 29 20:01:58 2013 Koichi Sasada <ko1@atdot.net>
+
+ * add RUBY_TYPED_FREE_IMMEDIATELY to data types which only use
+ safe functions during garbage collection such as xfree().
+
+ On default, T_DATA objects are freed at same points as finalizers.
+ This approach protects issues such as reported by [ruby-dev:35578].
+ However, freeing T_DATA objects immediately helps heap usage.
+
+ Most of T_DATA (in other words, most of dfree functions) are safe.
+ However, we turned off RUBY_TYPED_FREE_IMMEDIATELY by default
+ for safety.
+
+ * cont.c: ditto.
+
+ * dir.c: ditto.
+
+ * encoding.c: ditto.
+
+ * enumerator.c: ditto.
+
+ * error.c: ditto.
+
+ * file.c: ditto.
+
+ * gc.c: ditto.
+
+ * io.c: ditto.
+
+ * iseq.c: ditto.
+
+ * marshal.c: ditto.
+
+ * parse.y: ditto.
+
+ * proc.c: ditto.
+
+ * process.c: ditto.
+
+ * random.c: ditto.
+
+ * thread.c: ditto.
+
+ * time.c: ditto.
+
+ * transcode.c: ditto.
+
+ * variable.c: ditto.
+
+ * vm.c: ditto.
+
+ * vm_backtrace.c: ditto.
+
+ * vm_trace.c: ditto.
+
+ * ext/bigdecimal/bigdecimal.c: ditto.
+
+ * ext/objspace/objspace.c: ditto.
+
+ * ext/stringio/stringio.c: ditto.
+
+ * ext/strscan/strscan.c: ditto.
+
+Tue Oct 29 19:48:33 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: fix typo (FL_WB_PROTECT -> FL_WB_PROTECTED).
+
+Tue Oct 29 18:45:08 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_trace.c (tp_free): removed because empty free function.
+ Use RUBY_TYPED_NEVER_FREE instead.
+
+Tue Oct 29 18:37:33 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: introduce new flags for T_TYPEDDATA.
+ * RUBY_TYPED_FREE_IMMEDIATELY: free the data given by DATA_PTR()
+ with dfree function immediately. Otherwise (default), the data
+ freed at finalization point.
+ * RUBY_TYPED_WB_PROTECTED: make this object with FL_WB_PROTECT
+ (not shady).
+
+ * gc.c (obj_free): support RUBY_TYPED_FREE_IMMEDIATELY.
+
+Tue Oct 29 16:49:03 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (vm_malloc_increase): decrease it more carefully.
+
+Tue Oct 29 16:24:52 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (heap_page_resurrect): return a page in tomb heap even if
+ freelist is NULL.
+
+Tue Oct 29 15:46:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby_atomic.h (ATOMIC_SIZE_CAS): new macro, compare and swap size_t.
+
+Tue Oct 29 12:08:05 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/readline/readline.c (readline_getc): Consider
+ NULL as input.
+
+Tue Oct 29 11:10:08 2013 Aman Gupta <ruby@tmm1.net>
+
+ * gc.c (gc_profile_total_time): fix off-by-one error in
+ GC::Profiler.total_time.
+ * test/ruby/test_gc.rb (class TestGc): test for above.
+
+Tue Oct 29 09:53:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * insns.def, vm.c, vm_insnhelper.c, vm_insnhelper.h, vm_method.c: split
+ ruby_vm_global_state_version into two separate counters - one for the
+ global method state and one for the global constant state. This means
+ changes to constants do not affect method caches, and changes to
+ methods do not affect constant caches. In particular, this means
+ inclusions of modules containing constants no longer globally
+ invalidate the method cache.
+
+ * class.c, eval.c, include/ruby/intern.h, insns.def, vm.c, vm_method.c:
+ rename rb_clear_cache_by_class to rb_clear_method_cache_by_class
+
+ * class.c, include/ruby/intern.h, variable.c, vm_method.c: add
+ rb_clear_constant_cache
+
+ * compile.c, vm_core.h, vm_insnhelper.c: rename vmstat field in
+ rb_call_info_struct to method_state
+
+ * vm_method.c: rename vmstat field in struct cache_entry to method_state
+
+Mon Oct 28 23:26:04 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/readline/test_readline.rb (teardown): Clear Readline.input and
+ Readline.output.
+
+Mon Oct 28 21:35:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/-test-/file/depend, ext/-test-/postponed_job/depend,
+ ext/-test-/tracepoint/depend: New files for dependencies.
+
+Mon Oct 28 15:32:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/depend (ossl.o): work around of dependency of
+ thread_native.h, which depends on headers by THREAD_MODEL.
+ [ruby-dev:47777]
+
+ * ext/openssl/extconf.rb: need THREAD_MODEL.
+
+Mon Oct 28 14:57:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (ruby_init_ext): share feature names between frame name and
+ provided features.
+
+Mon Oct 28 14:41:27 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el: Import ruby-electric.el 2.1 from
+ https://github.com/knu/ruby-electric.el.
+
+ * Hitting the newline-and-indent key within a comment fires
+ comment-indent-new-line.
+
+ * Introduce a new feature
+ `ruby-electric-autoindent-on-closing-char`.
+
+ * Fix fallback behavior of ruby-electric-space/return that
+ caused error with auto-complete.
+
+Mon Oct 28 13:17:17 2013 Or Cohen <orc@fewbytes.com>
+
+ * error.c (name_err_to_s): remove no longer needed overriding, since
+ r30455 which made exc_to_s almost same. Fixes [GH-413].
+
+Mon Oct 28 12:42:11 2013 Tanaka Akira <akr@fsij.org>
+
+ * common.mk, ext/objspace/depend, ext/coverage/depend,
+ ext/-test-/debug/depend, ext/date/depend: Update dependencies.
+
+Mon Oct 28 09:29:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * vm.c: vm_clear_all_cache is not necessary now we use a 64 bit counter
+ for global state version.
+
+ * vm_insnhelper.h: ruby_vm_global_state_version overflow is unnecessary
+
+Mon Oct 28 07:47:32 2013 Aman Gupta <ruby@tmm1.net>
+
+ * vm_backtrace.c (rb_profile_frame_classpath): do not use rb_inspect
+ directly, since it might have a custom implementation or show ivars.
+
+Mon Oct 28 04:10:41 2013 Aman Gupta <ruby@tmm1.net>
+
+ * vm_backtrace.c (rb_profile_frame_classpath): handle singleton
+ methods defined directly on an object.
+ * test/-ext-/debug/test_profile_frames.rb: test for above.
+
+Mon Oct 28 00:52:36 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * struct.c (new_struct): fix warning message, class name and encoding.
+
+Sun Oct 27 20:53:08 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/readline/readline.c: Include ruby/thread.h for
+ rb_thread_call_without_gvl2.
+ (readline_rl_instream, readline_rl_outstream): Record FILE
+ structures allocated by this extension.
+ (getc_body): New function extracted from readline_getc.
+ (getc_func): New function.
+ (readline_getc): Use rb_thread_call_without_gvl2 to invoke getc_func.
+ [ruby-dev:47033] [Bug #8749]
+ (clear_rl_instream, clear_rl_outstream): Close FILE structure
+ allocated by this extension reliably. [ruby-core:57951] [Bug #9040]
+ (readline_readline): Use clear_rl_instream and clear_rl_outstream.
+ (readline_s_set_input): Set readline_rl_instream.
+ (readline_s_set_output): Set readline_rl_outstream.
+ (Init_readline): Don't call readline_s_set_input because
+ readline_getc doesn't block other threads for any FILE structure now.
+
+ [ruby-dev:47033] [Bug #8749] reported by Nobuhiro IMAI.
+ [ruby-core:57951] [Bug #9040] reported by Eamonn Webster.
+
+Sat Oct 26 19:31:28 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * gc.c: catch up recent changes to compile on GC_DEBUG,
+ RGENGC_CHECK_MODE.
+
+Sat Oct 26 19:08:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * range.c (range_initialize_copy): disallow to modify after
+ initialized.
+
+Sat Oct 26 17:48:54 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb (meta_add_field): : Re-implemented.
+ [ruby-core:58017] [Bug #9051] patch by Eamonn Webster.
+
+Sat Oct 26 14:35:09 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_profile_dump_on): use "Page" terminology.
+
+Sat Oct 26 13:25:45 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_sweep, gc_heap_lazy_sweep): fix measurement code.
+ We only need one sweep time measurement without lazy sweep.
+
+Sat Oct 26 11:59:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * addr2line.c: Include ELF header after system headers (especially
+ sys/types.h) to avoid compilation failure,
+ "usr/include/sh3/elf_machdep.h:4:2: error: #error Define _BYTE_ORDER!",
+ on NetBSD/sh3 (dreamcast, hpcsh, landisk, mmeye).
+
+Sat Oct 26 11:35:22 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: tuning parameters.
+
+ * gc.c (GC_MALLOC_LIMIT): change default value to 16MB.
+
+ * gc.c (GC_MALLOC_LIMIT_GROWTH_FACTOR): change default value to 2.0.
+
+ * gc.c (gc_before_sweep): change decrease ratio of `malloc_limit'
+ from 1/4 to 1/10.
+
+Sat Oct 26 11:30:07 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (vm_malloc_increase): do gc_rest_sweep() before GC.
+ gc_rest_sweep() can reduce malloc_increase, so try it before GC.
+ Otherwise, malloc_increase can be less than malloc_limit at
+ gc_before_sweep(). This means that re-calculation of malloc_limit
+ may be wrong value.
+
+Sat Oct 26 06:35:41 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (gc_before_heap_sweep): Restructure code to mean clearly.
+ heap->freelist is connected to end of list.
+
+Sat Oct 26 04:01:35 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_before_heap_sweep): fix freelist management.
+ After rb_gc_force_recycle() for a object belonging to heap->freelist,
+ `heap->using_page->freelist' is not null.
+
+Thu Oct 24 21:57:24 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * parse.y: Remove +(binary) and -(binary) special cases
+ [Feature #9048]
+
+Thu Oct 24 12:45:53 2013 Zachary Scott <e@zzak.io>
+
+ * object.c: [DOC] Document first argument also takes string for:
+
+ rb_mod_const_get, rb_mod_const_set, rb_mod_const_defined
+
+ Also added note about NameError exception for invalid constant name
+
+Thu Oct 24 12:23:58 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_thread_terminate_all): add a comment why we need
+ state check and call terminate_i again.
+
+Thu Oct 24 12:15:02 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_thread_terminate_all): add a comment why infinite
+ sleep is safe.
+
+Thu Oct 24 07:41:42 2013 Aman Gupta <ruby@tmm1.net>
+
+ * gc.c: add new initial_growth_max tuning parameter.
+ [ruby-core:57928] [Bug #9035]
+ * gc.c (heap_set_increment): when initial_growth_max is set,
+ do not grow number of slots by more than growth_max at a time.
+ * gc.c (rb_gc_set_params): load optional new tuning value from
+ RUBY_HEAP_SLOTS_GROWTH_MAX environment variable.
+ * test/ruby/test_gc.rb (class TestGc): test for above.
+
+Thu Oct 24 01:34:12 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/win32.h (rb_infinity_float): suppress overflow in
+ constant arithmetic warnings. [ruby-core:57981] [Bug #9044]
+
+Thu Oct 24 00:11:24 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/ostruct.rb: raise NoMethodError with a #name and #args.
+ Raise RuntimeError when modifying frozen instances
+ instead of TypeError.
+ (OpenStruct#each_pair): Return an enumerator with size
+ (OpenStruct#delete): Use the converted argument.
+ Patches by Kenichi Kamiya. [Fixes GH-383]
+
+ * test/ostruct/test_ostruct.rb: Added tests for above.
+
+Thu Oct 24 00:10:22 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * array.c: Add Array#to_h [Feature #7292]
+
+ * enum.c: Add Enumerable#to_h
+
+Wed Oct 23 23:48:28 2013 Aman Gupta <ruby@tmm1.net>
+
+ * gc.c: Rename free_min to min_free_slots and free_min_page to
+ max_free_slots. The algorithm for heap growth is:
+ if (swept_slots < min_free_slots) pages++
+ if (swept_slots > max_free_slots) pages--
+
+Wed Oct 23 22:51:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): VC 2013 supports C99 mathematics
+ functions. [ruby-core:57981] [Bug #9044]
+
+Wed Oct 23 19:13:18 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: move increment from heap to heap_pages.
+ Share `increment' information with heaps.
+
+ * gc.c: change ratio of heap_pages_free_min_page
+ to 0.80.
+ This change means slow down page freeing speed.
+
+Wed Oct 23 17:52:03 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (heap_pages_free_unused_pages): cast to (int) for size_t
+ variable `i'.
+
+Wed Oct 23 17:39:35 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: introduce tomb heap.
+ Tomb heap is where zombie objects and ghost (freed slot) lived in.
+ Separate from other heaps (now there is only eden heap) at sweeping
+ helps freeing pages more efficiently.
+ Before this patch, even if there is an empty page at former phase
+ of sweeping, we can't free it.
+
+ Algorithm:
+ (1) Sweeping all pages in a heap and move empty pages from the
+ heap to tomb_heap.
+ (2) Check all existing pages and free a page
+ if all slots of this page are empty and
+ there is enough empty slots (checking by swept_num)
+
+ To introduce this patch, there are several tuning of GC parameters.
+
+Wed Oct 23 14:20:56 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_prof_sweep_timer_stop): catch up recent changes
+ to compile on GC_PROFILE_MORE_DETAIL=1.
+
+Wed Oct 23 11:43:27 2013 Zachary Scott <e@zzak.io>
+
+ * file.c: [DOC] fix rdoc format of File#expand_path from r43386
+
+Tue Oct 22 21:58:28 2013 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * vm_core.h (enum): avoid syntax error.
+
+ * method.h: ditto.
+
+ * internal.h: ditto.
+
+Tue Oct 22 19:53:16 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (Init_heap): move logics from heap_pages_init() and remove
+ heap_pages_init().
+
+Tue Oct 22 19:19:05 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: allow multiple heaps.
+ Now, objects are managed by page. And a set of pages is called heap.
+ This commit supports multiple heaps in the object space.
+
+ * Functions heap_* and rb_heap_t manages heap data structure.
+ * Functions heap_page_* and struct heap_page manage page data
+ structure.
+ * Functions heap_pages_* and struct rb_objspace_t::heap_pages
+ maintains all pages.
+ For example, pages are allocated from the heap_pages.
+
+ See https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/GC_design
+ and https://bugs.ruby-lang.org/attachments/4015/data-heap_structure_with_multiple_heaps.png
+ for more details.
+
+ Now, there is only one heap called `eden', which is a space for all
+ new generated objects.
+
+Tue Oct 22 18:26:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/pp.rb (object_address_group): Use Kernel#to_s to obtain the class
+ name and object address.
+ This fix a problem caused by %p in C generates variable length
+ address.
+ Reported by ko1 via IRC.
+
+Tue Oct 22 16:57:48 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * file.c (File#expand_path): [DOC] improve documentation of File#expand_path.
+ Based on patch by Prathamesh Sonpatki. [ruby-core:57734] [Bug #9002]
+
+Tue Oct 22 15:59:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (glob_helper): don't skip current directories if FNM_DOTMATCH
+ is given. [ruby-core:53108] [Bug #8006]
+
+Tue Oct 22 14:53:11 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_trace.c: exterminate Zombies.
+ There is a bug that T_ZOMBIE objects are not collected.
+ Because there is a pass to miss finalizer postponed job
+ with multi-threading. This patch solve this issue.
+
+ * vm_trace.c (rb_postponed_job_register_one): set
+ RUBY_VM_SET_POSTPONED_JOB_INTERRUPT(th) if another same job
+ is registered.
+ There is a possibility to remain a postponed job without
+ interrupt flag.
+
+ * vm_trace.c (rb_postponed_job_register_one): check interrupt
+ carefully.
+
+ * vm_trace.c (rb_postponed_job_register_one): use additional space
+ to avoid buffer full.
+
+ * gc.c (gc_finalize_deferred_register): check failure.
+
+ * thread.c (rb_threadptr_execute_interrupts): check
+ `postponed_job_interrupt' immediately. There is a possibility
+ to miss this flag.
+
+Tue Oct 22 12:11:16 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: check if the given CFLAGS and LDFLAGS are working, and
+ bail out early if not.
+
+Tue Oct 22 00:06:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_exists_p): warn deprecated name. [Bug #9041]
+
+Mon Oct 21 23:57:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (load_encoding): should preserve outer errinfo, so that
+ expected exception may not be lost. [ruby-core:57949] [Bug #9038]
+
+Sun Oct 20 15:41:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_reopen): create a new, temporary FD via rb_sysopen and
+ call rb_cloexec_dup2 on it to atomically replace the file fptr->fd
+ points to. This leaves no possible window where fptr->fd is invalid
+ to userspace (even for any threads running w/o GVL). based on the
+ patch by Eric Wong <normalperson@yhbt.net> at [ruby-core:57943].
+ [Bug #9036]
+
+Sun Oct 20 15:29:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_syserr_fail_path_in): new function split from
+ rb_sys_fail_path_in to raise SystemCallError without errno.
+
+ * internal.h (rb_syserr_fail_path): like rb_sys_fail_path but without
+ errno.
+
+Sun Oct 20 13:58:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_obj_wb_unprotect, rb_obj_written),
+ (rb_obj_write): suppress unused-parameter warnings.
+
+Sun Oct 20 10:32:48 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update RubyGems to master 0886307. This commit
+ improves documentation and should bring ruby above 75% documented on
+ rubyci.
+
+Sun Oct 20 09:30:56 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master 3de7e0f. Changes:
+
+ Only attempt to build extensions for newly-installed gems. This
+ prevents compilation attempts at gem activation time for gems that
+ already have extensions built.
+
+ Fix crash in the dependency resolver for dependencies that cannot be
+ resolved.
+
+ * test/rubygems: ditto.
+
+Sun Oct 20 05:24:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_class2name): should return real class name, not
+ singleton class or iclass.
+
+Sun Oct 20 04:18:48 2013 Aman Gupta <ruby@tmm1.net>
+
+ * variable.c (rb_class2name): call rb_tmp_class_path() directly to
+ avoid extra rb_str_dup() from rb_class_name().
+
+Sat Oct 19 19:59:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/file.c (code_page): use simple array instead of st_table.
+
+ * encoding.c (rb_locale_encindex): defer initialization of win32 code
+ page table until encoding db loaded.
+
+Sat Oct 19 08:25:05 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: fix rb_objspace_t.
+ * make "struct heap" and move most of variables
+ in rb_objspace_t::heap.
+ * rename rb_objspace_t::heap::sorted to
+ rb_objspace_t::heap_sorted_pages
+ and make a macro heap_sorted_pages.
+ * rename rb_objspace_t::heap::range to
+ rb_objspace_t::heap_range and rename macros
+ lomem/himem to heap_lomem/heap_himem.
+
+Sat Oct 19 07:14:40 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master 42543b6. Changes:
+
+ Fix `gem update` for gems with multiple platforms.
+
+ * test/rubygems: ditto.
+
+Sat Oct 19 06:55:52 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master 0a3814b. Changes:
+
+ Fixed extension directory in Gem::Specification#require_paths.
+
+ Allow installation of gems when $HOME is nonexistent or unwritable.
+
+ Use proper API in InstallCommand.
+
+ Improve support for path option in gem dependency files.
+
+ Remove warnings.
+
+ * test/rubygems: ditto.
+
+Fri Oct 18 15:23:34 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: change terminology of heap.
+ Change "slot" to "page". "Slot" is a space of RVALUE.
+ 1. "Heap" consists of a set of "heap_page"s (pages).
+ 2. Each "heap_page" has "heap_page_body".
+ 3. "heap_page_body" has RVALUE (a.k.a. "slot") spaces.
+ 4. "sorted" is a sorted array of "heap_page"s, sorted
+ by address of heap_page_body (for "is_pointer_to_heap").
+
+ See https://bugs.ruby-lang.org/attachments/4008/data-heap_structure.png.
+
+Fri Oct 18 09:40:43 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master cee6788. Changes:
+
+ Fix test failure on vc10-x64 Server on rubyci.org due to attempting
+ to File.chmod where it is not supported.
+
+ Continuing work on improved gem dependencies file (Gemfile) support.
+
+ * test: ditto.
+
+Fri Oct 18 06:02:49 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master f738c67. Changes:
+
+ Fixed test bug for ruby with ENABLE_SHARED = no
+
+ * test/rubygems: ditto.
+
+Fri Oct 18 00:57:07 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/tsort.rb (TSort.tsort): Extracted from TSort#tsort.
+ (TSort.tsort_each): Extracted from TSort#tsort_each.
+ (TSort.strongly_connected_components): Extracted from
+ TSort#strongly_connected_components.
+ (TSort.each_strongly_connected_component): Extracted from
+ TSort#each_strongly_connected_component.
+
+Thu Oct 17 18:50:08 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (CALC_EXACT_MALLOC_SIZE_CHECK_OLD_SIZE): introduced.
+ This macro enable checker compare with allocated memory and
+ declared old_size of sized_xfree and sized_xrealloc.
+
+Thu Oct 17 18:45:41 2013 Koichi Sasada <ko1@atdot.net>
+
+ * string.c (STR_HEAP_SIZE): includes TERM_LEN(str).
+
+ * string.c (rb_str_memsize): use STR_HEAP_SIZE().
+
+Thu Oct 17 17:43:00 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_call_method): set ci->me to 0 when the
+ original method of a refined method is undef to avoid SEGV.
+
+ * vm_method.c (rb_method_entry_without_refinements): return 0 when
+ the original method of a refined method is undef to avoid SEGV.
+
+ * test/ruby/test_refinement.rb: related test.
+
+Thu Oct 17 17:38:36 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c, internal.h: rename ruby_xsizefree/realloc to
+ rb_sized_free/realloc.
+
+ * array.c: catch up these changes.
+
+ * string.c: ditto.
+
+Thu Oct 17 17:32:51 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c, string.c: use ruby_xsizedfree() and ruby_xsizedrealloc().
+
+ * internal.h (SIZED_REALLOC_N): define a macro as REALLOC_N().
+
+Thu Oct 17 17:11:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (console_emulator_p): check by comparison between
+ module handle of WriteConsoleW and kernel32.dll.
+
+ * configure.in, win32/Makefile.sub, win32/setup.mak: no longer need
+ psapi.lib.
+
+Thu Oct 17 16:53:30 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c, internal.h: add new internal memory management functions.
+ * void *ruby_xsizedrealloc(void *ptr, size_t new_size, size_t old_size)
+ * void ruby_xsizedfree(void *x, size_t size)
+ These functions accept additional size parameter to calculate more
+ accurate malloc_increase parameter which control GC timing.
+ [Feature #8985]
+
+Thu Oct 17 14:21:34 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/file.c (rb_file_expand_path_internal): fix memory leaks at
+ a non-absolute home exception.
+
+Thu Oct 17 14:06:39 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/object_tracing.c (newobj_i): fix memory leak.
+ There is possibility to remain info due to missing FREEOBJ event.
+ FREEOBJ events are skipped while suppress_tracing state, for example,
+ during trace events are invoking.
+
+Thu Oct 17 12:30:16 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/tsort.rb (TSort.each_strongly_connected_component_from):
+ Extracted from TSort#each_strongly_connected_component_from.
+
+Thu Oct 17 11:07:06 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master 941c21a. Changes:
+
+ Restored method bundler wants to remove for compatibility.
+
+ Improvements to Gemfile compatibility.
+
+ * test/rubygems: ditto.
+
+Thu Oct 17 08:08:11 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/object_tracing.c (newobj_i): add workaround.
+ some bugs hits this check.
+
+ * ext/objspace/object_tracing.c (object_allocations_reporter_i): cast as pointer.
+
+Thu Oct 17 07:36:53 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master 2abce58. Changes:
+
+ Fixed documentation generation when sdoc and json are installed as
+ gems.
+
+ Added some missing documentation.
+
+Thu Oct 17 07:10:26 2013 Zachary Scott <e@zzak.io>
+
+ * ext/curses/curses.c: [DOC] Cleaned up formatting consistency of rdoc
+ comments for Curses, including period spacing and column width.
+
+ This patch also fixed some typos. Thanks to @postmodern for the patch!
+ [Fixes GH-420] https://github.com/ruby/ruby/pull/420
+
+Thu Oct 17 06:58:42 2013 Zachary Scott <e@zzak.io>
+
+ * ext/date/date_core.c: [DOC] plural grammar fixed by @scott113341
+ Contributed via documenting-ruby.org: documenting-ruby/ruby#16
+ https://github.com/documenting-ruby/ruby/pull/16
+
+Thu Oct 17 05:52:31 2013 Zachary Scott <e@zzak.io>
+
+ * ext/io/nonblock/nonblock.c: [DOC] Document io/nonblock by reprah
+ [Fixes GH-418] https://github.com/ruby/ruby/pull/418 based on the
+ original discussion from documenting-ruby/ruby#18
+
+Thu Oct 17 05:40:33 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (objspace_each_objects): do not skip empty RVALUEs.
+
+Thu Oct 17 05:31:31 2013 Koichi Sasada <ko1@atdot.net>
+
+ * error.c (rb_bug_reporter_add): return simply 0 if failed.
+ Please check return value.
+
+Thu Oct 17 05:17:33 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/object_tracing.c: add new method
+ ObjectSpace.trace_object_allocations_debug_start for GC debugging.
+ If you encounter the BUG "... is T_NONE" (and so on) on your
+ application, please try this method at the beginning of your app.
+
+Wed Oct 16 22:35:27 2013 Zachary Scott <e@zzak.io>
+
+ * ext/io/nonblock/nonblock.c: use rb_cIO instead of VALUE
+
+Wed Oct 16 17:45:13 2013 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/runner.rb: check nil before calling `signal?'
+ for a process status.
+
+Wed Oct 16 17:37:17 2013 Koichi Sasada <ko1@atdot.net>
+
+ * error.c, internal.h (rb_bug_reporter_add): add a new C-API.
+ rb_bug_reporter_add() allows to register a function which
+ is called at rb_bug() called.
+
+ * ext/-test-/bug_reporter/bug_reporter.c: add a test for this C-API.
+
+ * ext/-test-/bug_reporter/extconf.rb: ditto.
+
+ * test/-ext-/bug_reporter/test_bug_reporter.rb: ditto.
+
+Wed Oct 16 15:14:21 2013 Koichi Sasada <ko1@atdot.net>
+
+ * NEWS: add a line into NEWS for last commit.
+
+Wed Oct 16 15:09:14 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/objspace.c: add a new method `reachable_objects_from_root'.
+ ObjectSpace.reachable_objects_from_root returns all objects referred
+ from root (called "root objects").
+ This feature is for deep object analysis.
+
+ * test/objspace/test_objspace.rb: add a test.
+
+Wed Oct 16 15:00:21 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master b955554. Changes:
+
+ Fixed NameError for Gem::Ext due to re-entering file lookup in
+ RubyGems' overridden require. Bug by Koichi Sasada.
+
+ Fixed possible circular require warning in tests.
+
+ Used existing constant for `gem install -g` dependency file list.
+
+ * test/rubygems: ditto.
+
+Wed Oct 16 09:42:42 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master 278d00d. Changes:
+
+ Fixes building extensions without a "clean" make rule
+
+ Adds gem dependency file autodetection to "gem install -g"
+
+ * test/rubygems: Tests for the above.
+
+Wed Oct 16 09:12:23 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems master commit 2a74263. This fixes
+ several bugs in RubyGems 2.2.0.preview.1.
+
+ * test/rubygems: ditto.
+
+Wed Oct 16 07:25:02 2013 Aman Gupta <ruby@tmm1.net>
+
+ * gc.c (gc_mark_roots): rename roots to be categories
+ instead of function names.
+
+Tue Oct 15 19:18:13 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.h (rb_objspace_reachable_objects_from_root): added.
+ This API provides information which objects are root objects.
+ `category' shows what kind of root objects.
+
+ * gc.c (gc_mark_roots): separate from gc_marks_body().
+
+Tue Oct 15 17:47:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c: Fix a typo. MacOS X doesn't have ENOTSUPP.
+
+Mon Oct 14 12:32:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): load statically linked extensions before
+ rubygems, because of ext/thread.
+
+ * ruby.c (process_options): use gem_prelude instead of requiring
+ rubygems directly when --enable=gems is given.
+
+ * Makefile.in (DEFAULT_PRELUDES): always use gem_prelude regardless of
+ --disable-rubygems.
+
+Mon Oct 14 11:07:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (have_framework): should append framework options to
+ $LIBS, not $LDFLAGS. The former is propagated to exts.mk when
+ enable-static-linked-ext.
+
+ * lib/mkmf.rb (create_makefile): ranlib on static library, not DLLIB.
+
+Sun Oct 13 23:53:40 2013 Andrew Grimm <andrew.j.grimm@gmail.com>
+
+ * vsnprintf.c: Fix spelling from compliment to complement.
+ Patch by @agrimm.
+
+ * include/ruby/ruby.h: ditto
+
+Sun Oct 13 20:59:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (Init_BareVM): initialize defined_module_hash here,
+ Init_top_self() is too late to register core classes/modules.
+
+ * compile.c (compile_array_): no hash to merge if it is empty.
+
+ * vm.c (m_core_hash_merge_kwd): just check keys if only one argument
+ is given, without merging.
+
+Sat Oct 12 06:35:01 2013-10-11 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rake: Update to rake 10.1.0
+ * bin/rake: ditto.
+ * test/rake: ditto.
+
+ * NEWS: Update NEWS to include rake 10.1.0 and links to release notes.
+
+Sat Oct 12 03:26:04 2013 Koichi Sasada <ko1@atdot.net>
+
+ * class.c, variable.c, gc.c (rb_class_tbl): removed.
+
+ * vm.c, vm_core.h (rb_vm_add_root_module): added to register as a
+ defined root module or class.
+ This guard helps mark miss from defined classes/modules they are
+ only referred from C's global variables in C-exts.
+ Basically, it is extension's bug.
+ Register to hash object VM has.
+ Marking a hash objects allows generational GC supports.
+
+ * gc.c (RGENGC_PRINT_TICK): disable (revert).
+
+Sat Oct 12 03:24:49 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_method.c (rb_gc_mark_unlinked_live_method_entries):
+ revert last commit to introduce debug prints.
+
+Fri Oct 11 21:05:19 2013 Koichi Sasada <ko1@atdot.net>
+
+ * internal.h, parse.y: use `full_mark' instead of `full_marking'.
+
+Fri Oct 11 20:58:16 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: use terminology `full_mark' instead of `minor_gc'
+ in mark functions.
+
+Fri Oct 11 20:46:09 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: use __GNUC__ instead of __GCC__.
+
+Fri Oct 11 20:35:59 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c, parse.y: support generational Symbol related marking.
+ Each symbols has String objects respectively to represent
+ Symbols.
+ These objects are marked only when:
+ * full marking
+ * new symbols are added
+ This hack reduce symbols (related strings) marking time.
+ For example, on my Linux environment, the following code
+ "20_000_000.times{''}"
+ with 40k symbols (similar symbol number on Rails 3.2.14 app,
+ @jugyo tells me) boosts, from 7.3sec to 4.2sec.
+
+ * internal.h: change prototype of rb_gc_mark_symbols().
+
+Fri Oct 11 19:27:22 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el: Import ruby-electric.el 2.0.1 which fixes
+ a bug and a flaw with auto-end introduced in the revamp.
+
+ * ruby-forward-sexp is inappropriate here because it moves the
+ cursor past the keyword.
+
+ * Fix a reversed looking-back check in
+ ruby-electric--block-beg-keyword-at-point-p.
+
+ * Do not add end again if space or return is hit repeatedly
+ after a block beginning keyword.
+
+Fri Oct 11 18:12:47 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/gc_hook.c: prohibit reentrant.
+
+Fri Oct 11 18:11:34 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_trace.c (rb_postponed_job_flush): fix bit operation.
+
+Fri Oct 11 17:33:24 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el: Import ruby-electric.el 2.0 from
+ https://github.com/knu/ruby-electric.el which integrates changes
+ from another fork by @qoobaa.
+
+ * Allow ruby-electric-mode to be disabled by introducing a
+ dedicated key map. Electric key bindings are now defined in
+ ruby-electric-mode-map instead of overwriting ruby-mode-map.
+
+ * Add ruby-electric-mode-hook.
+
+ * Use a remap in binding ruby-electric-delete-backward-char.
+
+ * Totally revamp electric keywords and then introduce electric
+ return. Modifier keywords are now properly detected making
+ use of ruby-mode's indentation level calculator, and
+
+ * block-mid keywords (then, else, elsif, when, rescue and
+ ensure) also become electric with automatic reindentation.
+
+ * Add standardized comments for ELPA integration.
+
+ * Fix interaction with smartparens-mode by disabling its end
+ keyword completion, since ruby-electric has become more clever
+ at it.
+
+ * The custom variable `ruby-electric-keywords` is changed to
+ `ruby-electric-keywords-alist`, allowing user to fine-grained
+ configuration.
+
+Fri Oct 11 16:53:28 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_trace.c (rb_postponed_job_flush): simplify.
+
+Fri Oct 11 03:36:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_threadptr_execute_interrupts): flush postponed job only
+ once at last.
+
+ * vm_trace.c (rb_postponed_job_flush): defer calling postponed jobs
+ registered while flushing to get rid of infinite reentrance of
+ ObjectSpace.after_gc_start_hook. [ruby-dev:47400] [Bug #8492]
+
+Thu Oct 10 23:04:00 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_or): remove unused variables.
+
+Thu Oct 10 23:01:16 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_or): use rb_hash_keys().
+
+Thu Oct 10 21:36:16 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_compact_bang): use ary_resize_smaller().
+
+Thu Oct 10 17:25:28 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (vm_exec): support :b_return event for "lambda{return}.call".
+ [Bug #8622]
+
+ * test/ruby/test_settracefunc.rb: add a test.
+
+Thu Oct 10 13:52:37 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_trace.c (postponed_job): use preallocated buffer.
+ Pre-allocate MAX_POSTPONED_JOB (1024) sized buffer
+ and use it.
+ If rb_postponed_job_register() cause overflow, simply it
+ fails and returns 0.
+ And maybe rb_postponed_job_register() is signal safe.
+
+ * vm_core.h: change data structure.
+
+Thu Oct 10 11:11:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (Init_VM): hide also the singleton class of frozen-core, not
+ only frozen-core itself.
+
+Thu Oct 10 06:02:08 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/ruby/test_rand.rb: fix r43224. local variable `e' is
+ no longer available.
+
+Thu Oct 10 00:02:35 2013 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * numeric.c (fix_aref): avoid a possible undefined behavior.
+ 1L << 63 on 64-bit platform is undefined, at least, according to
+ ISO/IEC 9899 (C99) 6.5.7.
+
+Wed Oct 9 23:57:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (id_for_attr): avoid inadvertent symbol creation.
+
+Wed Oct 9 18:03:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_attr): preserve encoding of the attribute ID in
+ error message.
+
+Wed Oct 9 17:40:16 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_fstring): because of lazy sweep, str may be unmarked
+ already and swept at next time, so mark it for the time being.
+ [ruby-core:57756]
+
+Wed Oct 9 13:53:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compar.c (cmp_eq): fail if recursion. [ruby-core:57736] [Bug #9003]
+
+ * thread.c (rb_exec_recursive_paired_outer): new function which is
+ combination of paired and outer variants.
+
+Wed Oct 9 09:18:14 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/debug.h,
+ vm_backtrace.c (rb_profile_frame_full_label): add new C API
+ rb_profile_frame_full_label() which returns label with
+ qualified method name.
+ Note that in future version of Ruby label() may return
+ same return value of full_label().
+
+ * ext/-test-/debug/profile_frames.c,
+ test/-ext-/debug/test_profile_frames.rb: fix a test for this change.
+
+
+Wed Oct 9 00:55:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (load_lock): display backtrace to $stderr at circular
+ require.
+
+ * vm_backtrace.c (rb_backtrace_print_to): new function to print
+ backtrace to the given output.
+
+Tue Oct 8 21:03:35 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_backtrace.c, include/ruby/debug.h: add new APIs
+ * VALUE rb_profile_frame_method_name(VALUE frame)
+ * VALUE rb_profile_frame_qualified_method_name(VALUE frame)
+
+ * iseq.c (rb_iseq_klass), internal.h: add new internal function
+ rb_iseq_method_name().
+
+ * ext/-test-/debug/profile_frames.c (profile_frames),
+ test/-ext-/debug/test_profile_frames.rb: add a test.
+
+Tue Oct 8 16:11:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_uniq): use rb_hash_values(), as well as the case no
+ block is given.
+
+ * internal.h: define rb_hash_values() as internal API.
+
+Tue Oct 8 13:53:21 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_uniq): use rb_hash_keys().
+
+ * internal.h: define rb_hash_keys() as internal API.
+
+ * hash.c (rb_hash_keys): ditto.
+
+Tue Oct 8 10:56:39 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * cont.c: disable FIBER_USE_NATIVE on GNU/Hurd because it doesn't
+ support a combination getcontext() and threads. Patch by
+ Gabriele Giacone (1o5g4r8o@gmail.com). [Bug #8990][ruby-core:57685]
+
+Tue Oct 8 05:58:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time.strptime): Time.strptime('0', '%s') returns local
+ time Time object as Ruby 2.0 and before.
+
+Tue Oct 8 05:40:37 2013 Eric Hodel <drbrain@segment7.net>
+
+ * .travis.yml: Rebuild Travis CI's "ruby-head" version on successful
+ build. Patch by Konstantin Haase. [Fixes GH-417]
+ https://github.com/ruby/ruby/pull/417
+
+Tue Oct 8 04:28:25 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-mode.el: Use preceding-char/following-char
+ (returning 0 at BOF/EOF) instead of char-before/char-after
+ (returning nil at BOF/EOF) to avoid error from char-syntax when
+ at BOF/EOF.
+
+Tue Oct 8 04:12:45 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-additional.el (ruby-mode-set-encoding): Add a missing
+ else clause to unbreak with `cp932`, etc.
+
+ * misc/ruby-mode.el (ruby-mode-set-encoding): Ditto.
+
+Tue Oct 8 03:57:34 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-additional.el (ruby-mode-set-encoding): Use
+ `default-buffer-file-coding-system` if the :prefer-utf-8
+ property is not available.
+
+ * misc/ruby-mode.el (ruby-mode-set-encoding): Ditto.
+
+ * misc/ruby-additional.el (ruby-encoding-map): Override the
+ default value.
+
+Tue Oct 8 03:19:19 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-additional.el (ruby-mode-set-encoding): Add support
+ for `prefer-utf-8` which was introduced in Emacs trunk.
+
+ * misc/ruby-additional.el (ruby-encoding-map): Add a mapping from
+ `japanese-cp932` to `cp932` to fix the problem where saving a
+ source file written in Shift_JIS twice would end up having
+ `coding: japanese-cp932` which Ruby could not recognize.
+
+ * misc/ruby-additional.el (ruby-mode-set-encoding): Add support
+ for encodings mapped to nil in `ruby-encoding-map`.
+
+ * misc/ruby-additional.el (ruby-encoding-map): Map `us-ascii` and
+ `utf-8` to nil by default, meaning they need not be explicitly
+ declared in magic comment.
+
+ * misc/ruby-additional.el (ruby-encoding-map): Add type
+ declaration for better customize UI.
+
+ * misc/ruby-mode.el: Ditto for the above.
+
+Tue Oct 8 00:14:53 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-additional.el: Add a standard header and footer,
+ including (provide 'ruby-additional).
+
+Mon Oct 7 22:52:45 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el (ruby-electric-space-can-be-expanded-p):
+ Return nil to avoid "end" insertion when in smartparens-mode
+ that is configured to insert "end" for the same keyword.
+
+ * misc/ruby-electric.el (ruby-electric-keywords): New custom
+ variable to replace `ruby-electric-simple-keywords-re` with.
+
+Mon Oct 7 22:52:16 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-additional.el: Use preceding-char/following-char
+ (returning 0 at BOF/EOF) instead of char-before/char-after
+ (returning nil at BOF/EOF) to avoid error from char-syntax when
+ at BOF/EOF.
+
+Mon Oct 7 22:45:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (FIBER_USE_NATIVE): split long conditions.
+
+Mon Oct 7 20:29:31 2013 Zachary Scott <e@zzak.io>
+
+ * lib/time.rb: [DOC] typo in Time.rb overview by @srt32 [Fixes GH-416]
+ https://github.com/ruby/ruby/pull/416
+
+Mon Oct 7 20:07:20 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time.strptime): Use :offset.
+ Patch by Felipe Contreras. [ruby-core:57694]
+
+Mon Oct 7 16:47:27 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/-ext-/debug/test_profile_frames.rb: rename class C to
+ something long name because one test depends on absence of
+ class ::C.
+
+Mon Oct 7 16:33:10 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/-test-/debug/profile_frames.c:
+ test/-ext-/debug/test_profile_frames.rb: add a test for new C-APIs.
+
+Mon Oct 7 16:12:36 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/debug.h: add backtrace collecting APIs for profiler.
+ * int rb_profile_frames(int start, int limit, VALUE *buff, int *lines);
+ Collect information of frame information.
+
+ * VALUE rb_profile_frame_path(VALUE frame);
+ * VALUE rb_profile_frame_absolute_path(VALUE frame);
+ * VALUE rb_profile_frame_label(VALUE frame);
+ * VALUE rb_profile_frame_base_label(VALUE frame);
+ * VALUE rb_profile_frame_first_lineno(VALUE frame);
+ * VALUE rb_profile_frame_classpath(VALUE frame);
+ * VALUE rb_profile_frame_singleton_method_p(VALUE frame);
+ Get information about each frame.
+
+ These APIs are designed for profilers, for example, no object allocation,
+ and enough information for profilers.
+ In this version, this API collects only Ruby level frames.
+ This issue will be fixed after Ruby 2.1.
+
+ * vm_backtrace.c: implement above APIs.
+
+ * iseq.c (rb_iseq_klass): return local_iseq's class.
+
+Mon Oct 7 14:26:01 2013 Koichi Sasada <ko1@atdot.net>
+
+ * proc.c: catch up last commit.
+ Type of return value of rb_iseq_first_lineno() is now VALUE.
+
+ * vm_insnhelper.c (argument_error): ditto.
+
+ * vm_method.c (rb_method_entry_make): ditto.
+
+Mon Oct 7 14:07:45 2013 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c, internal.h: change to public (but internal) functions
+ * VALUE rb_iseq_path(VALUE iseqval);
+ * VALUE rb_iseq_absolute_path(VALUE iseqval);
+ * VALUE rb_iseq_label(VALUE iseqval);
+ * VALUE rb_iseq_base_label(VALUE iseqval);
+ * VALUE rb_iseq_first_lineno(VALUE iseqval);
+ And new (temporary) function:
+ * VALUE rb_iseq_klass(VALUE iseqval);
+
+ * iseq.c. vm_core.h (int rb_iseq_first_lineno): remove
+ function `int rb_iseq_first_lineno(const rb_iseq_t *iseq)'.
+ Use `VALUE rb_iseq_first_lineno(VALUE iseqval)' instead.
+
+ * proc.c. vm_insnhelper.c, vm_method.c: catch up this change.
+
+Sun Oct 6 08:37:39 2013 Zachary Scott <e@zzak.io>
+
+ * lib/webrick.rb: [DOC] fix grammar in WEBrick overview [Fixes GH-413]
+ Based on patch by @chastell https://github.com/ruby/ruby/pull/413
+
+Sat Oct 5 11:21:01 2013 Aaron Pfeifer <aaron.pfeifer@gmail.com>
+
+ * thread.c (terminate_atfork_i): fix locking mutexes not unlocked in
+ forks when not tracked in thread. [ruby-core:55102] [Bug #8433]
+
+Fri Oct 4 19:54:09 2013 Zachary Scott <e@zzak.io>
+
+ * ext/dbm/dbm.c: [DOC] Fix wrong constant name in DBM by @edward
+ [Fixes GH-409] https://github.com/ruby/ruby/pull/409
+
+Fri Oct 4 19:49:42 2013 Aman Gupta <ruby@tmm1.net>
+
+ * gc.c: rename heap.free_num as heap.swept_num to clarify meaning and
+ avoid confusion with objspace_free_num().
+
+Fri Oct 4 19:02:01 2013 Aman Gupta <ruby@tmm1.net>
+
+ * gc.c (objspace_free_num): new method for available/free slots on
+ heap. [ruby-core:57633] [Bug #8983]
+ * gc.c (gc_stat): change heap_free_num definition to use new method.
+ * test/ruby/test_gc.rb: test for above.
+
+Fri Oct 4 18:53:42 2013 Aman Gupta <ruby@tmm1.net>
+
+ * gc.c: add rb_objspace.limit to keep accurate count of total heap
+ slots [ruby-core:57633] [Bug #8983]
+
+Fri Oct 4 09:32:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/csv.rb (CSV.foreach): support enumerator. based on a patch by
+ Hanmac (Hans Mackowiak) at [ruby-core:57643]. [ruby-core:57283]
+ [Feature #8929]
+
+Thu Oct 3 18:20:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (console_emulator_p, constat_handle): disable built-in
+ console colorizing when console-emulator-like DLL is injected.
+ [Feature #8201]
+
+Thu Oct 3 18:01:44 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: define gc_profile_record::allocated_size if
+ CALC_EXACT_MALLOC_SIZE is true.
+
+Thu Oct 3 13:42:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (yes-test-sample): use RUNRUBY instead of MINIRUBY to set
+ runtime library path and run the built ruby. [Bug #8971]
+
+Thu Oct 3 00:17:15 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-additional.el: Properly quote the body. An unquoted
+ body given to eval-after-load is evaluated immediately!
+
+Wed Oct 2 21:38:30 2013 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/socket/ifaddr.c (rsock_getifaddrs): fix possible memory leak.
+ When a system had no interface, this function used xmalloc for root
+ but did not return any reference to it. This patch fixes it by
+ immediately returning an empty array if no interface is found.
+ Coverity Scan found this bug.
+
+Wed Oct 2 21:37:04 2013 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * random.c (make_seed_value): a local array declaration was accessed
+ out of scope. Coverity Scan found this bug.
+
+Wed Oct 2 18:52:40 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: relax GC condition due to malloc_limit.
+
+ * gc.c (GC_MALLOC_LIMIT_MAX): change default value
+ (256MB -> 512MB) and permit zero to ignore max value.
+
+ * gc.c (vm_malloc_increase, vm_xrealloc): do not cause GC on realloc.
+
+ * gc.c (gc_before_sweep): change debug messages.
+
+Wed Oct 2 16:26:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_close_read): duplex IO should wait its child process
+ even after close_read.
+
+Wed Oct 2 15:39:13 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_core.h: use __has_attribute() instead of __clang__major__ because
+ clang says "Note that marketing version numbers should not be used
+ to check for language features, as different vendors use different
+ numbering schemes. Instead, use the Feature Checking Macros."
+ http://clang.llvm.org/docs/LanguageExtensions.html
+
+Wed Oct 2 14:19:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_close_write): detach tied IO for writing before closing
+ to get rid of race condition. [ruby-list:49598]
+
+ * io.c (rb_io_close_read): keep fptr in write_io to be discarded, to
+ fix freed pointer access when it is in use by other threads, and get
+ rid of potential memory/fd leak.
+
+Tue Oct 1 23:44:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * vm_core.h: use __attribute__((unused)) in UNINITIALIZED_VAR on clang
+ 4.0+ instead of just on 4.2. Clang has supported the unused attribute
+ since before version 4, so this should be safe.
+
+Tue Oct 1 22:03:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#unlink): finalizer is no longer needed
+ after unlinking. patched by by normalperson (Eric Wong) at
+ [ruby-core:56521] [Bug #8768]
+
+Tue Oct 1 20:54:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (stat_new_0): constify.
+
+ * file.c (rb_stat_new): constify and export. based on a patch by
+ Hanmac (Hans Mackowiak) at [ruby-core:53225]. [Feature #8050]
+
+Tue Oct 1 16:03:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (ruby_safe_level_4_warning): needed by extension
+ libraries which check safe level 4. [ruby-dev:47517] [Bug #8652]
+
+Mon Sep 30 23:14:36 2013 Zachary Scott <e@zzak.io>
+
+ * ext/objspace/objspace.c: [DOC] Cleaned up many rdoc formatting
+ issues and several duplicate grammar bugs.
+
+Mon Sep 30 23:01:01 2013 Zachary Scott <e@zzak.io>
+
+ * ext/objspace/object_tracing.c: [DOC] Adjust rdoc formatting and fix
+ small grammar typo
+
+Mon Sep 30 17:28:39 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/object_tracing.c: [DOC] add some notes for
+ ObjectSpace::trace_object_allocations.
+
+Mon Sep 30 16:46:58 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/object_tracing.c: add new 3 methods to control tracing.
+ * ObjectSpace::trace_object_allocations_start
+ * ObjectSpace::trace_object_allocations_stop
+ * ObjectSpace::trace_object_allocations_clear
+ And some refactoring.
+
+ * test/objspace/test_objspace.rb: add a test for new methods.
+
+ * NEWS: add a description for new methods.
+
+Mon Sep 30 11:18:04 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_gc_disable): do rest_sweep() before disable GC.
+ This fix may solve a failure of
+ TestTracepointObj#test_tracks_objspace_events
+ [test/-ext-/tracepoint/test_tracepoint.rb:43].
+
+Mon Sep 30 10:40:20 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_method.c (rb_undef): raise a NameError if the original method
+ of a refined method is not defined.
+
+ * vm_insnhelper.c (rb_method_entry_eq): added NULL check to avoid SEGV.
+
+ * test/ruby/test_refinement.rb: related test.
+
+Sun Sep 29 23:45:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_id_attrset, intern_str): allow junk attrset ID for
+ Struct.
+
+ * parse.y (rb_id_attrset): fix inconsistency with literals, allow
+ ID_ATTRSET and return it itself, but ID_JUNK cannot make ID_ATTRSET.
+ and raise a NameError instead of rb_bug() for invalid argument.
+
+Sun Sep 29 18:45:05 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * vm_insnhelper.c (vm_callee_setup_arg_complex, vm_yield_setup_block_args):
+ clear keyword arguments to prevent GC bug which occurs
+ while marking VM stack.
+ [ruby-dev:47729] [Bug #8964]
+
+ * test/ruby/test_keyword.rb: tests for the above.
+
+Sat Sep 28 23:25:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * math.c (math_log, math_log2, math_log10): fix for Bignum argument.
+ numbits should be add only when right shifted.
+
+Sat Sep 28 14:30:29 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/dl/test_base.rb: {libc, libm} detection now handle GNU/Hurd
+ correctly. Patch by Gabriele Giacone (1o5g4r8o@gmail.com).
+ [Bug #8937][ruby-core:57311]
+ * test/fiddle/helper.rb: ditto.
+
+Sat Sep 28 00:19:41 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * ext/curses/extconf.rb: check the size of chtype.
+
+ * ext/curses/curses.c (NUM2CH, CH2NUM): use proper macros for
+ the size of chtype.
+
+ [ruby-core:56090] [Bug #8659]
+
+Fri Sep 27 18:33:23 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: add two GC tuning environment variables.
+ RUBY_GC_MALLOC_LIMIT_MAX and RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR.
+ See r43067 for details.
+
+ * gc.c (rb_gc_set_params): refactoring. And change verbose notation.
+ Mostly duplicated functions get_envparam_int/double is not cool.
+ Please rewrite it.
+
+ * test/ruby/test_gc.rb: fix a test for this change.
+
+Fri Sep 27 17:44:41 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (GC_MALLOC_LIMIT): 8,000,000 -> 8 * 1,024 * 1,024.
+
+Fri Sep 27 17:19:39 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_before_sweep): cast to size_t to suppress warnings.
+
+Fri Sep 27 17:07:55 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: add some fine-grained profiling codes to tuning marking phase.
+ If you enable RGENGC_PRINT_TICK to 1, then profiling results by RDTSC
+ (on x86/amd64 environment) are printed at last.
+ Thanks Yoshii-san.
+
+Fri Sep 27 16:32:27 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: simplify threshold of GC caused by malloc_increase.
+ Now, malloc_limit is increased/decreased by mysterious logic.
+ This fix simplify malloc_limit increase/decrease logic such as:
+ if (malloc_increase > malloc_limit) /* so many malloc */
+ malloc_limit += malloc_limit * (GC_MALLOC_LIMIT_FACTOR-1);
+ else
+ malloc_limit -= malloc_limit * (GC_MALLOC_LIMIT_FACTOR-1)/4;
+ Default value of GC_MALLOC_LIMIT_FACTOR is 1.8.
+ malloc_limit is bounded by GC_MALLOC_LIMIT_MAX (256MB by default).
+ This logic runs at gc_before_sweep(). So there are no effect from
+ caused by lazy sweep. And we can remove malloc_increase2.
+
+ * gc.c (HEAP_MIN_SLOTS, FREE_MIN, HEAP_GROWTH_FACTOR): rename to
+ GC_HEAP_MIN_SLOTS, GC_FREE_MIN, GC_HEAP_GROWTH_FACTOR respectively.
+ Check them by `#ifndef' so you can specify these values outside gc.c.
+
+ * gc.c (ruby_gc_params_t): add initial_malloc_limit_factor and
+ initial_malloc_limit_max.
+
+ * gc.c (vm_malloc_prepare, vm_xrealloc): use vm_malloc_increase to
+ add and check malloc_increase.
+
+Fri Sep 27 01:05:00 2013 Zachary Scott <e@zzak.io>
+
+ * re.c: [DOC] arguments of Regexp::union receive #to_regexp [Bug #8205]
+
+Fri Sep 27 00:39:27 2013 Zachary Scott <e@zzak.io>
+
+ * struct.c: [DOC] grammar of ArgumentError in Struct.new [Bug #8936]
+ Patch by Prathamesh Sonpatki
+
+Thu Sep 26 22:11:56 2013 Zachary Scott <e@zzak.io>
+
+ * ext/bigdecimal/bigdecimal.c: [DOC] several fixes by @chastell
+ This includes fixing the capitalization of Infinity, return value of
+ example "BigDecimal.new('NaN') == 0.0", and code style in example.
+ [Fixes GH-398] https://github.com/ruby/ruby/pull/398
+
+Thu Sep 26 22:08:11 2013 Zachary Scott <e@zzak.io>
+
+ * lib/observer.rb: [DOC] syntax improvement in example by @chastell
+ [Fixes GH-400] https://github.com/ruby/ruby/pull/400
+
+Thu Sep 26 22:03:15 2013 Zachary Scott <e@zzak.io>
+
+ * ext/digest/digest.c: [DOC] typo in overview by @chastell
+ [Fixes GH-399] https://github.com/ruby/ruby/pull/399
+
+Thu Sep 26 22:00:42 2013 Zachary Scott <e@zzak.io>
+
+ * ext/openssl/ossl.c: [DOC] typo in example by @zoranzaric
+ [Fixes GH-401] https://github.com/ruby/ruby/pull/401
+
+Thu Sep 26 21:07:49 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el (ruby-electric-delete-backward-char): Add
+ support for smartparens-mode.
+
+ * misc/ruby-electric.el (ruby-electric-cua-replace-region-maybe)
+ (ruby-electric-cua-delete-region-maybe): New functions that
+ combine `ruby-electric-cua-*-region` with
+ `ruby-electric-cua-*-region-p`, using a slightly better way to
+ detect if it is in cua-mode.
+
+Thu Sep 26 16:51:00 2013 Shota Fukumori <her@sorah.jp>
+
+ * insns.def (opt_regexpmatch2): Check String#=~ hasn't overridden
+ before calling rb_reg_match().
+
+ * test/ruby/test_string.rb: Test for above.
+
+ * vm.c (vm_init_redefined_flag): Add BOP flag for String#=~
+
+ [ruby-core:57385] [Bug #8953]
+
+Thu Sep 26 16:43:42 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el: Avoid use of the interactive function
+ `self-insert-command` which fires `post-self-insert-hook` and
+ `post-command-hook`, to make the ruby-electric commands work
+ nicely with those minor modes that make use of them to do
+ similar input assistance, such as electric-pair-mode,
+ autopair-mode and smartparens-mode.
+
+Thu Sep 26 16:24:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * insns.def (opt_regexpmatch1): check Regexp#=~ is not defined before
+ calling rb_reg_match()
+
+ * test/ruby/test_regexp.rb: add test
+
+ * vm.c (ruby_vm_redefined_flag): change type to short[]
+
+ * vm.c (vm_redefinition_check_flag): return REGEXP_REDEFINED_OP_FLAG if
+ klass == rb_cRegexp
+
+ * vm.c (vm_init_redefined_flag): setup BOP flag for Regexp#=~
+
+ * vm_insnhelper.h: add REGEXP_REDEFINED_OP_FLAG
+
+ [ruby-core:57385] [Bug #8953]
+
+Thu Sep 26 14:46:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (mark_locations_array): disable AddressSanitizer. based on a
+ patch by halfie (Ruby Guy) at [ruby-core:57372].
+ [ruby-core:56155] [Bug #8680]
+
+Wed Sep 25 17:41:29 2013 Koichi Sasada <ko1@atdot.net>
+
+ * README.EXT, README.EXT.ja: remove description of RARRAY_PTR()
+ and add a caution of accessing internal data structure directly.
+ Also add a description of rb_ary_store().
+ [Bug #8399]
+
+Wed Sep 25 17:12:08 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: rename RARRAY_RAWPTR() to RARRAY_CONST_PTR().
+ RARRAY_RAWPTR(ary) returns (const VALUE *) type pointer and
+ usecase of this macro is not acquire raw pointer, but acquire
+ read-only pointer. So we rename to better name.
+ RSTRUCT_RAWPTR() is also renamed to RSTRUCT_CONST_PTR()
+ (I expect that nobody use it).
+
+ * array.c, compile.c, cont.c, enumerator.c, gc.c, proc.c, random.c,
+ string.c, struct.c, thread.c, vm_eval.c, vm_insnhelper.c:
+ catch up this change.
+
+Wed Sep 25 16:58:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * internal.h (rb_float_value, rb_float_new): move inline functions
+ from ruby/ruby.h.
+
+ * numeric.c (rb_float_value, rb_float_new): define external functions
+ for extension libraries.
+
+Wed Sep 25 15:37:02 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/rdoc/test_rdoc_generator_darkfish.rb: add a guard for windows.
+
+Wed Sep 25 09:53:11 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Fix CVE-2013-4363. Miscellaneous minor improvements.
+
+ * test/rubygems: Tests for the above.
+
+Tue Sep 24 17:38:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_inspect): get rid of out-of-bound access.
+
+ * string.c (rb_str_inspect): when a UTF-16/32 string doesn't have a
+ BOM, inspect as a dummy encoding string.
+
+Tue Sep 24 17:15:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/encdb.c (ENC_DUMMY_UNICODE): make BOM-encodings dummy.
+
+ * encoding.c (enc_autoload): keep dummy encodings dummy.
+
+Tue Sep 24 16:41:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/win32/lib/win32/registry.rb (Win32::Registry#write): data size
+ is in bytes, not chars. terminators should be placed automatically.
+
+Tue Sep 24 16:39:36 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/win32/lib/win32/registry.rb (Win32::Registry#each_value): encode
+ name.
+
+ * ext/win32/lib/win32/registry.rb (Win32::Registry#each_key): ditto.
+
+ * ext/win32/lib/win32/registry.rb (Win32::Registry#export_string):
+ encode to locale encoding if default internal is not set.
+
+Tue Sep 24 16:35:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/win32/lib/win32/registry.rb (Win32::Registry::API#EnumKey):
+ size of the name is in WCHARs, not in bytes.
+
+Tue Sep 24 14:07:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * gc.c (free_method_cache_entry_i): unused function
+
+ * gc.c (rb_free_mc_table): ditto
+
+ * internal.h (method_cache_entry_t): unused struct
+
+ * vm_method.c (verify_method_cache): remove unused variable
+
+ * vm_method.c (rb_method_entry): ditto
+
+Tue Sep 24 14:01:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * class.c (class_alloc): remove mc_tbl
+
+ * gc.c (obj_free): ditto
+
+ * internal.h (struct rb_classext_struct): ditto
+
+ * method.h (rb_method_entry): remove ent param
+
+ * vm_method.c: restore the global method cache. Per class cache tables
+ turned out to be far too slow.
+
+ [ruby-core:57289] [Bug #8930]
+
+Tue Sep 24 12:51:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/win32/lib/win32/registry.rb (Win32::Registry::API): need
+ Constants.
+
+ * ext/win32/lib/win32/registry.rb (Win32::Registry::API#EnumValue):
+ size of the name is in WCHARs, not in bytes.
+
+Mon Sep 23 22:16:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/encdb.c, enc/utf_16_32.h (ENC_DUMMY_UNICODE): Unicode with BOM
+ must be based on big endian variants, so that actual encodings would
+ work. [ruby-core:57318] [Bug #8940]
+
+Mon Sep 23 12:11:26 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (env_each_pair): do not call rb_assoc_new() if
+ it isn't needed.
+
+Mon Sep 23 10:42:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_module.rb (TestModule#test_include_toplevel): test
+ for top level main.include. based on a part of the patch by
+ kyrylo at [GH-395].
+
+Mon Sep 23 05:07:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_ary_cat): move from internal.h, since it
+ is described in README.EXT.
+
+Sun Sep 22 20:55:20 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * vm_insnhelper.c (vm_make_proc_with_iseq): fix bug message.
+ This is follow up to changes in r42637.
+
+Sun Sep 22 20:35:38 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * ext/-test-/tracepoint/tracepoint.c (Init_tracepoint): prevent from GC.
+
+Sun Sep 22 19:00:28 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * benchmark/bm_app_answer.rb: revert r42990, benchmark scripts should
+ be self-contained and avoid dependencies, especially such small one.
+ See https://github.com/ruby/ruby/pull/393#issuecomment-24861301.
+
+Sat Sep 21 20:11:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_fork_internal): remove cloexec setting on pipes
+ created by rb_cloexec_pipe. patch by normalperson (Eric Wong) at
+ [ruby-core:56523]. [Bug #8769]
+
+Sat Sep 21 01:04:25 2013 Zachary Scott <e@zzak.io>
+
+ * lib/benchmark.rb: [DOC] grammar of Benchmark#bm [Bug #8888]
+ Patch by Prathamesh Sonpatki
+
+Sat Sep 21 00:50:02 2013 Zachary Scott <e@zzak.io>
+
+ * enumerator.c: [DOC] Enumerator#each arguments documentation [GH-388]
+ Patch by @kachick https://github.com/ruby/ruby/pull/388
+
+Sat Sep 21 00:49:16 2013 Zachary Scott <e@zzak.io>
+
+ * enum.c: [DOC] Enumerable#to_a accepts arguments [GH-388]
+ Patch by @kachick https://github.com/ruby/ruby/pull/388
+
+Sat Sep 21 00:47:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_conv_enc_opts): make sure to scan coderange to get
+ rid of unnecessary conversion.
+
+Sat Sep 21 00:21:08 2013 Zachary Scott <e@zzak.io>
+
+ * ext/openssl/lib/openssl/ssl.rb: [DOC] Document OpenSSL::SSLServer
+ Based on a patch by Rafal Lisowski [Bug #8758]
+
+Fri Sep 20 23:54:03 2013 Zachary Scott <e@zzak.io>
+
+ * lib/gserver.rb: [DOC] correct gserver.rb license [Bug #8913]
+
+Fri Sep 20 23:48:34 2013 Zachary Scott <e@zzak.io>
+
+ * ext/psych/yaml/yaml.h: [DOC] merge upstream typo fix by @GreenGeorge
+ https://github.com/tenderlove/psych/pull/161
+
+Fri Sep 20 23:37:40 2013 Zachary Scott <e@zzak.io>
+
+ * lib/securerandom.rb: [DOC] SecureRandom.hex length argument
+ [Fixes GH-394] Patch by @avdi https://github.com/ruby/ruby/pull/394
+
+Fri Sep 20 23:34:48 2013 Zachary Scott <e@zzak.io>
+
+ * benchmark/bm_app_answer.rb: removed duplicate code [Fixes GH-393]
+ Patch by @gouravtiwari https://github.com/ruby/ruby/pull/393
+
+Fri Sep 20 23:24:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (btest, btest-ruby, test-knownbug): add $(RUN_OPTS) to
+ ruby to be run, so that tests are runnable before making exts.
+
+ * common.mk (test-sample): ditto, and use $(MINIRUBY) as rubytest.rb
+ does not need extension libraries.
+
+ * tool/rubytest.rb: pass $(RUN_OPTS) to testing ruby using --run-opt.
+
+Fri Sep 20 15:01:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (intern_str): sigil only names are junk, at least one
+ identifier character is needed. [ruby-dev:47723] [Bug #8928]
+
+ * parse.y (rb_enc_symname_type): fix out of bound access.
+
+Fri Sep 20 14:14:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/-test-/printf/printf.c (printf_test_call): Fix an end of buffer
+ argument.
+
+Thu Sep 19 16:59:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (lambda): adjust position to the beginning of the block.
+
+Thu Sep 19 16:25:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vsnprintf.c (BSD_vfprintf): initialize cp so that size is 0 in the
+ commented case. fix an accidental bug at r16716.
+
+Thu Sep 19 14:33:14 2013 Koichi Sasada <ko1@atdot.net>
+
+ * NEWS: add a news for r42974.
+
+Thu Sep 19 14:12:02 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: make Symbol objects frozen.
+ [Feature #8906]
+ I want to freeze this good day, too.
+
+ * test/ruby/test_eval.rb: catch up this change.
+
+ * test/ruby/test_symbol.rb: add a test to check frozen symbols.
+
+Thu Sep 19 09:11:33 2013 Eric Hodel <drbrain@segment7.net>
+
+ * NEWS: Update for RDoc 4.1.0.preview.1 and RubyGems 2.2.0.preview.1
+
+Thu Sep 19 08:59:41 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/markdown/literals_1_9.rb: Fix trailing whitespace.
+
+ Previously kpeg (which generates this file) added trailing
+ whitespace, but this bug is now fixed.
+
+ * lib/rdoc/markdown.rb: ditto.
+
+Thu Sep 19 08:33:14 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Update to RDoc 4.1.0.preview.1
+
+ RDoc 4.1.0 contains a number of enhancements including a new default
+ style and accessibility support. You can see the changelog here:
+
+ https://github.com/rdoc/rdoc/blob/v4.1.0.preview.1/History.rdoc
+
+ * test/rdoc: ditto.
+
+Thu Sep 19 07:16:26 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych.rb: updating Psych version
+
+ * ext/psych/psych.gemspec: ditto
+
+Thu Sep 19 06:39:40 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/dependency_resolver.rb: Switch the iterative resolver
+ algorithm from recursive to iterative to avoid possible
+ SystemStackError.
+
+Thu Sep 19 06:29:30 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems 2.2.0.preview.1
+
+ This brings several new features to RubyGems summarized here:
+
+ https://github.com/rubygems/rubygems/blob/v2.2.0.preview.1/History.txt
+
+ * test/rubygems: ditto.
+
+Wed Sep 18 23:14:58 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * string.c (rb_str_enumerate_lines): make String#each_line and
+ #lines not raise invalid byte sequence error when it is called
+ with an argument. The patch also causes performance improvement.
+ [ruby-dev:47549] [Bug #8698]
+
+ * test/ruby/test_m17n_comb.rb (test_str_each_line): remove
+ assertions which check that String#each_line and #lines will
+ raise an error if the receiver includes invalid byte sequence.
+
+Wed Sep 18 16:32:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (mnew_from_me): allocate structs after allocated wrapper
+ object successfully, to get rid of potential memory leak.
+
+Tue Sep 17 15:54:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/shell/command-processor.rb (Shell::CommandProcessor#find_system_command):
+ return executable file only, should ignore directories and
+ unexecutable files. [ruby-core:57235] [Bug #8918]
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert_throw):
+ assertion for throw. MiniTest::Assertions#assert_throws discards
+ the caught value.
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert_nothing_thrown):
+ returns the result of the given block.
+
+Tue Sep 17 12:55:58 2013 Eric Hodel <drbrain@segment7.net>
+
+ * doc/regexp.rdoc: [DOC] Replace paragraphs in verbatim sections with
+ plain paragraphs to improve readability as ri and HTML.
+
+Mon Sep 16 07:32:35 2013 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: removed meaningless lines.
+ * rational.c: ditto.
+
+Mon Sep 16 00:44:23 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * ext/socket/mkconstants.rb: define MSG_FASTOPEN.
+ [ruby-core:57138] [Feature #8897]
+
+Sun Sep 15 13:31:23 2013 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_div): reverted r28844, r28886 and r28887.
+ REASON: Nobuyoshi Nakada <nobu@ruby-lang.org>'s commits are buggy.
+ So Rational#/ may produce exact number with inexact number.
+ Moreover, without reducing.
+ REALLY NONSENSE COMMITS.
+ A bug report by me [ruby-dev:44710] is also caused by this behavior.
+ Kenta Murata <mrkn@mrkn.jp> patched it up.
+ But he did not fix the origin.
+ Today, the bug is still alive in ruby 1.9.3 and 2.0.0.
+
+Sat Sep 14 06:08:10 2013 Eric Hodel <drbrain@segment7.net>
+
+ * dir.c (dir_s_glob): [DOC] Improve wording and layout.
+
+ * dir.c (file_s_fnmatch): ditto.
+
+ * dir.c (Init_Dir): [DOC] Document File::Constants::FNM_XXX
+ constants. (These won't show up in RDoc until a new RDoc is
+ imported.)
+
+Thu Sep 12 14:58:58 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/generic.rb (URI::Generic.find_proxy): return nil if
+ http_proxy environment variable is empty string.
+ [ruby-core:57140] [Bug #8898]
+
+Fri Sep 13 10:40:28 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems 2.1.3
+
+ Fixed installing platform gems
+
+ Restored concurrent requires
+
+ Fixed installing gems with extensions with --install-dir
+
+ Fixed `gem fetch -v` to install the latest version
+
+ Fixed installing gems with "./" in their files entries
+
+ * test/rubygems/test_gem_package.rb: Tests for the above.
+
+ * NEWS: Updated for RubyGems 2.1.3
+
+Thu Sep 12 22:40:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_CHECK_SIGNEDNESS): macro to check signedness of a
+ type.
+
+ * configure.in (size_t): must be unsigned.
+ [ruby-core:57149] [Feature #8890]
+
+Thu Sep 12 22:37:08 2013 Anton Ovchinnikov <revolver112@gmail.com>
+
+ * ext/bigdecimal/bigdecimal.c, ext/digest/md5/md5.c,
+ ext/json/fbuffer/fbuffer.h, ext/json/generator/generator.c:
+ Eliminate less-than-zero checks for unsigned variables.
+ According to section 4.1.5 of C89 standard, size_t is an unsigned
+ type. These checks were found with 'cppcheck' static analysis tool.
+ [ruby-core:57117] [Feature #8890]
+
+Thu Sep 12 21:35:46 2013 Naohisa Goto <ngotogenome@gmail.com>
+
+ * Makefile.in (libruby-static.a): change LDFLAGS order. LDFLAGS may
+ include library path that should be specified before LIBS.
+ [ruby-dev:47707] [Bug #8901]
+
+Thu Sep 12 20:07:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vsnprintf.c (MAXEXP, MAXFRACT): calculate depending on constants in
+ float.h.
+
+ * vsnprintf.c (BSD_vfprintf): limit length for cvt() to get rid of
+ buffer overflow. [ruby-core:57023] [Bug #8864]
+
+ * vsnprintf.c (exponent): make expbuf size more precise.
+
+Wed Sep 11 17:30:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUNRUBY): append -- only after runruby.rb, not
+ cross-compiling baseruby, so that $(RUN_OPT) can be command line
+ options. [ruby-dev:47703] [Bug #8893]
+
+Wed Sep 11 07:55:17 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_mutex_unlock): Mutex#unlock no longer raise
+ an exception even if uses on trap. [Bug #8891]
+
+Tue Sep 10 14:37:01 2013 Shota Fukumori <sorah@tubusu.net>
+
+ * vm_backtrace.c (vm_backtrace_to_ary): Ignore the second argument if
+ it is nil. [Bug #8884] [ruby-core:57094]
+
+ * test/ruby/test_backtrace.rb (test_caller_with_nil_length):
+ Test for above.
+
+Tue Sep 10 12:39:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (method_entry_i): should exclude refined methods from
+ instance method list. [ruby-core:57080] [Bug #8881]
+
+Tue Sep 10 12:05:04 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * io.c (rb_f_printf): [DOC] add missing parenthesis in rdoc.
+
+Tue Sep 10 10:08:00 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: Update RubyGems note.
+
+Tue Sep 10 09:51:22 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems 2.1.0. Fixes CVE-2013-4287.
+
+ See http://rubygems.rubyforge.org/rubygems-update/CVE-2013-4287_txt.html
+ for CVE information.
+
+ See http://rubygems.rubyforge.org/rubygems-update/History_txt.html#label-2.1.0+%2F+2013-09-09
+ for release notes.
+
+ * test/rubygems: Tests for the above.
+
+Mon Sep 9 21:31:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c: Remove spaces between SI prefix and unit to follow
+ SI brochure.
+ http://www.bipm.org/en/si/si_brochure/
+ https://www.nmij.jp/library/units/si/
+
+ * time.c: Ditto.
+
+ * ext/socket/ancdata.c: Ditto.
+
+Mon Sep 9 16:55:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_add_refined_method_entry): clear cache in the
+ refined class since refining a method entry is modifying the class.
+ [ruby-core:57079] [Bug #8880]
+
+Mon Sep 9 09:14:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb (Gem::Specification#initialize): default date to
+ RUBY_RELEASE_DATE. [ruby-core:57072] [Bug #8878]
+
+ * tool/rbinstall.rb (Gem::Specification#to_ruby): add date.
+
+Sun Sep 8 16:01:54 2013 Tanaka Akira <akr@fsij.org>
+
+ * rational.c (f_gcd): Relax the condition to use GMP.
+
+Sun Sep 8 13:56:38 2013 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (folevariant_initialize): check type of
+ element of array.
+
+ * test/win32ole/test_win32ole_variant.rb (test_s_new_ary): ditto.
+
+Sat Sep 7 21:33:10 2013 Tanaka Akira <akr@fsij.org>
+
+ * math.c (math_log): Test the sign for bignums.
+ (math_log2): Ditto.
+ (math_log10): Ditto.
+
+Sat Sep 7 20:25:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * math.c (math_log): Support bignums bigger than 2**1024.
+ (math_log2): Ditto.
+ (math_log10): Ditto.
+
+Sat Sep 7 15:36:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * vm_eval.c (vm_call0): fix prototype, the id parameter should be of
+ type ID, not VALUE
+
+ * vm_insnhelper.c (check_match): the rb_funcall family of functions
+ does not care about refinements. We need to use
+ rb_method_entry_with_refinements instead to call === with
+ refinements. Thanks to Jon Conley for reporting this bug.
+ [ruby-core:57051] [Bug #8872]
+
+ * test/ruby/test_refinement.rb: add test
+
+Sat Sep 7 13:49:40 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * variable.c (classname): the name of class that has
+ non class id should not be nil. This bug was introduced
+ in r36577.
+
+ * test/thread/test_cv.rb: test for change.
+
+Sat Sep 7 13:29:22 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * lib/find.rb (Find.find): respect the encodings of arguments.
+ [ruby-dev:47530] [Feature #8657]
+
+ * test/test_find.rb: add tests.
+
+Sat Sep 7 10:40:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb (TCP_FASTOPEN): Defined for TCP fast open.
+ [ruby-core:57048] [Feature #8871] patch by Masaki Matsushita.
+
+Fri Sep 6 23:53:31 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * common.mk: use RUNRUBY instead of MINIRUBY because MINIRUBY can't
+ require extension libraries. The patch is from nobu
+ (Nobuyoshi Nakada).
+
+ * ext/thread/extconf.rb: for build ext/thread/thread.c.
+
+ * include/ruby/intern.h: ditto.
+
+ * thread.c: ditto.
+
+ * lib/thread.rb: removed and replaced by ext/thread/thread.c.
+
+ * ext/thread/thread.c: Queue, SizedQueue and ConditionVariable
+ implementations in C. This patch is based on patches from panaggio
+ (Ricardo Panaggio) and funny_falcon (Yura Sokolov) and ko1
+ (Koichi Sasada). [ruby-core:31513] [Feature #3620]
+
+ * test/thread/test_queue.rb (test_queue_thread_raise): add a test for
+ ensuring that killed thread should be removed from waiting threads.
+ It is based on a code by ko1 (Koichi Sasada). [ruby-core:45950]
+
+Fri Sep 6 22:47:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Define ac_cv_func_clock_getres to yes for mingw*.
+
+Fri Sep 6 21:04:10 2013 Tanaka Akira <akr@fsij.org>
+
+ * rational.c: Include gmp.h if GMP is used.
+ (GMP_GCD_DIGITS): New macro.
+ (rb_gcd_gmp): New function.
+ (f_gcd_normal): Renamed from f_gcd.
+ (rb_gcd_normal): New function.
+ (f_gcd): Invoke rb_gcd_gmp or f_gcd_normal.
+
+ * internal.h (rb_gcd_normal): Declared.
+ (rb_gcd_gmp): Ditto.
+
+ * ext/-test-/rational: New directory.
+
+ * test/-ext-/rational: New directory.
+
+Fri Sep 6 14:23:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (clock_getres): required as well as clock_gettime().
+ [ruby-dev:47699] [Bug #8869]
+
+Fri Sep 6 11:45:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (rb_econv_append): new function to append a string data
+ with converting its encoding. split from rb_econv_substr_append.
+
+Fri Sep 6 02:37:22 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: use double quotes when
+ strings start with special characters.
+ https://github.com/tenderlove/psych/issues/157
+
+ * test/psych/test_string.rb: test for change.
+
+Fri Sep 6 00:05:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (rewrite_cref_stack): remove recursion.
+
+Thu Sep 5 18:05:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * string.c (fstring_cmp): take string encoding into account when
+ comparing fstrings [ruby-core:57037] [Bug #8866]
+
+ * test/ruby/test_string.rb: add test
+
+Thu Sep 5 17:25:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_fstring, rb_str_free): use st_data_t instead of VALUE.
+
+ * string.c (rb_fstring): get rid of duplicating already frozen object.
+
+Thu Sep 5 14:01:22 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/optparse.rb: The Integer acceptable now allows binary and
+ hexadecimal numbers per the documentation. [ruby-trunk - Bug #8865]
+
+ DecimalInteger, OctalInteger, DecimalNumeric now validate their input
+ before converting to a number. [ruby-trunk - Bug #8865]
+
+ * test/optparse/test_acceptable.rb: Tests for the above, tests for all
+ numeric acceptables for existing behavior.
+
+Thu Sep 5 13:49:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * include/ruby/ruby.h: add RSTRING_FSTR flag
+
+ * internal.h: add rb_fstring() prototype
+
+ * string.c (rb_fstring): deduplicate frozen string literals
+
+ * string.c (rb_str_free): delete fstrings from frozen_strings table when
+ they are GC'd
+
+ * string.c (Init_String): initialize frozen_strings table
+
+Thu Sep 5 12:48:00 2013 Kenta Murata <mrkn@cookpad.com>
+
+ * configure.in (with_gmp): set with_gmp no if it is empty.
+
+Thu Sep 5 10:41:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_getivar): use class sequence to check class
+ identity, instead of pointer + vm state
+
+ * vm_insnhelper.c (vm_setivar): ditto
+
+Thu Sep 5 08:20:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (GMP_DIV_DIGITS): New macro.
+ (bary_divmod_gmp): New function.
+ (rb_big_divrem_gmp): Ditto.
+ (bary_divmod_branch): Ditto.
+ (bary_divmod): Use bary_divmod_branch.
+ (bigdivrem): Ditto.
+
+ * internal.h (rb_big_divrem_gmp): Declared.
+
+Thu Sep 5 06:22:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_divmod_normal): Reduce temporary array allocations.
+
+Thu Sep 5 02:17:06 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_divrem_normal): Add GC guards.
+
+Thu Sep 5 00:38:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_divrem_normal): New function.
+
+ * internal.h (rb_big_divrem_normal): Declared.
+
+ * ext/-test-/bignum/div.c: New file.
+
+ * test/-ext-/bignum/test_div.rb: New file.
+
+Thu Sep 5 00:08:44 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem_normal): Removed.
+ (bary_divmod_normal): New function.
+ (bary_divmod): Use bary_divmod_normal.
+ (bigdivrem): Use bary_divmod_normal.
+
+Wed Sep 4 23:02:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem): Useless declaration removed.
+
+Wed Sep 4 22:56:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (NUM_STEP_GET_INF): split from NUM_STEP_SCAN_ARGS(), since
+ inf is not used in num_step_size().
+
+Wed Sep 4 20:22:43 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem_normal): Add assertions.
+
+Wed Sep 4 19:18:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * internal.h (vm_state_version_t): prefer LONG_LONG to uint64_t.
+
+Wed Sep 4 16:28:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * internal.h (vm_state_version_t): use uint64_t when it is larger than
+ LONG_LONG, and fallback to unsigned long.
+
+Wed Sep 4 15:37:05 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/utf8_mac-tbl.rb: fix r42789.
+ Fix conversion table and logic. [ruby-dev:47680]
+
+Wed Sep 4 14:08:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * class.c, compile.c, eval.c, gc.h, insns.def, internal.h, method.h,
+ variable.c, vm.c, vm_core.c, vm_insnhelper.c, vm_insnhelper.h,
+ vm_method.c: Implement class hierarchy method cache invalidation.
+
+ [ruby-core:55053] [Feature #8426] [GH-387]
+
+Wed Sep 4 11:13:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_gsub): use BEG(0) for whole matched position not
+ return value from rb_reg_search(), for \K matching.
+ [ruby-dev:47694] [Bug #8856]
+
+Wed Sep 4 11:11:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (SOLIBS): LIBRUBY_SO also needs linking with gmp, to
+ run worker processes in test-all on non-ELF platforms.
+
+Tue Sep 3 23:01:41 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/parser/test_tree.rb
+ (TestTreeParser::TestInvalid#test_unmatched_close_tag):
+ Compute expected value from test value.
+
+Tue Sep 3 22:59:58 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/treeparser.rb (REXML::Parsers::TreeParser#parse):
+ Add source information to parse exception on no close tag error.
+ [Bug #8844] [ruby-dev:47672]
+ Patch by Ippei Obayashi. Thanks!!!
+ * test/rexml/parser/test_tree.rb: Add a test for the above case.
+
+Tue Sep 3 22:57:57 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/parser/test_tree.rb: Fix test name to describe test
+ content.
+
+Tue Sep 3 22:54:46 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/treeparser.rb (REXML::Parsers::TreeParser#parse):
+ Remove needless nested parse exception information.
+ [Bug #8844] [ruby-dev:47672]
+ Reported by Ippei Obayashi. Thanks!!!
+ * test/rexml/parser/test_tree.rb: Add a test for the above case.
+
+Tue Sep 3 22:03:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_enc_str_new_cstr): new function to create a string from
+ the C-string pointer with the specified encoding.
+
+Tue Sep 3 21:41:37 2013 Akira Matsuda <ronnie@dio.jp>
+
+ * eval.c (Init_eval): Make Module#include and Module#prepend public
+ [Feature #8846]
+
+ * test/ruby/test_module.rb (class TestModule): Test for above
+
+Tue Sep 3 21:35:19 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (sys/dyntune.h): for gettune().
+
+ * thread_pthread.c (hpux_attr_getstackaddr): fix missing *.
+ [ruby-core:56983] [Feature #8793]
+
+Tue Sep 3 20:12:46 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (GMP_STR2BIG_DIGITS): New macro.
+ (str2big_gmp): New function.
+ (rb_cstr_to_inum): Use str2big_gmp for big bignums.
+ (rb_str2big_gmp): New function.
+
+ * internal.h (rb_str2big_gmp): Declared.
+
+Tue Sep 3 19:44:40 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/win32/lib/win32/registry.rb (Win32::Registry#values): added.
+ [Feature #7763] [ruby-core:51783]
+
+Tue Sep 3 18:26:00 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/inf-ruby.el (inf-ruby-keys, run-ruby): Add magic autoload
+ comments.
+
+ * misc/rdoc-mode.el (rdoc-mode): Ditto.
+
+ * misc/ruby-electric.el (ruby-electric-mode): Ditto.
+
+ * misc/ruby-style.el (ruby-style-c-mode): Ditto.
+
+Tue Sep 3 17:06:15 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_rubyoptions.rb
+ (TestRubyOptions::SEGVTest::ExpectedStderr): the URL was changed at
+ r42800.
+
+Tue Sep 3 14:48:25 2013 Zachary Scott <e@zzak.io>
+
+ * lib/thread.rb: [DOC] CV#wait typo by @avdi [Fixes GH-386]
+ https://github.com/ruby/ruby/pull/386
+
+Tue Sep 3 14:37:53 2013 Zachary Scott <e@zzak.io>
+
+ * error.c: [DOC] Update bug tracker url by @ScotterC [Fixes GH-390]
+ https://github.com/ruby/ruby/pull/390
+
+Tue Sep 3 12:45:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_str2big_poweroftwo): New function.
+ (rb_str2big_normal): Ditto.
+ (rb_str2big_karatsuba): Ditto.
+
+ * internal.h (rb_str2big_poweroftwo): Declared.
+ (rb_str2big_normal): Ditto.
+ (rb_str2big_karatsuba): Ditto.
+
+ * ext/-test-/bignum/str2big.c: New file.
+
+ * test/-ext-/bignum/test_str2big.rb: New file.
+
+ * ext/-test-/bignum/depend: Add the dependency for str2big.c.
+
+Tue Sep 3 12:09:08 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_clock_gettime): Support times() based monotonic clock.
+ (rb_clock_getres): Ditto.
+
+Tue Sep 3 12:03:02 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (str2big_scan_digits): Extracted from rb_cstr_to_inum.
+
+Tue Sep 3 11:23:57 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_select_with_thread): rounding up the fraction of
+ tv_usec instead of rounding down.
+ this change is an experiment to get rid of failures on vc10-x64 CI.
+
+Tue Sep 3 11:00:28 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (do_select): constify timeout.
+
+ * win32/win32.c (rb_w32_select_with_thread): constify 10ms wait and
+ 0ms wait structs.
+
+Tue Sep 3 10:03:42 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/openssl/test_pair.rb
+ (OpenSSL::TestPair#test_write_nonblock_no_exceptions): on some CIs
+ such as Debian 6.0, Ubuntu 10.04, CentOS and vc10-x64 (maybe depend
+ on OpenSSL version), writing to SSLSocket after SSL_ERROR_WANT_WRITE
+ causes SSL_ERROR_SSL "bad write retry".
+
+Tue Sep 3 08:20:46 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/utf8_mac-tbl.rb: update conversion table to recent OS X.
+ Previous table is used on Mac OS X 10.1 or prior.
+ This table is used on 10.2 or later. [ruby-dev:47680]
+
+Tue Sep 3 07:49:25 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * numeric.c (NUM_STEP_SCAN_ARGS): On second thought, keep
+ Numeric#step backward compatible in that it raises TypeError
+ when nil is given as second argument.
+
+ * test/ruby/test_float.rb (TestFloat#test_num2dbl): Revert.
+
+ * test/ruby/test_numeric.rb (TestNumeric#test_step): Fix test
+ cases for the above change.
+
+Tue Sep 3 07:39:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bytes_2comp): Define it only for little endian
+ environment.
+
+Tue Sep 3 07:31:29 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * numeric.c (NUM_STEP_SCAN_ARGS): Numeric#step should raise
+ TypeError if a non-numeric parameter is given.
+
+ * test/ruby/test_float.rb (TestFloat#test_num2dbl): Allow nil as
+ step, as with the keyword argument.
+
+ * test/ruby/test_numeric.rb (TestNumeric#test_step): Add tests for
+ nil as step or limit.
+
+Tue Sep 3 07:28:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (bit_length): Add casts to fix compilation error with
+ clang 3.0 -Werror,-Wshorten-64-to-32.
+ [ruby-dev:47687] reported by SASADA Koichi.
+
+Tue Sep 3 03:17:26 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_search_super_method): use ci->argc instead of
+ ci->orig_argc. ci->argc can be changed by splat arguments.
+ [ruby-list:49575]
+ This fix should be applied to Ruby 2.0.0 series.
+
+ * test/ruby/test_super.rb: add a test for above.
+
+Mon Sep 2 23:46:29 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * numeric.c (num_step): Default the limit argument to infinity and
+ allow it to be omitted. Keyword arguments (by: and to:) are
+ introduced for ease of use. [Feature #8838] [ruby-dev:47662]
+ [ruby-dev:42194]
+
+ * numeric.c (num_step): Optimize for infinite loop.
+
+Mon Sep 2 22:55:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (ISDIGIT): Unused macro removed.
+
+Mon Sep 2 22:49:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (str2big_poweroftwo): Extracted from rb_cstr_to_inum.
+ (str2big_normal): Ditto.
+ (str2big_karatsuba): Ditto.
+
+Mon Sep 2 14:39:29 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * ruby.c (Process#setproctitle): [DOC] Fix and improve rdoc.
+
+ * ruby.c (Process#argv0): [DOC] Improve rdoc.
+
+Mon Sep 2 14:15:00 2013 Kenta Murata <mrkn@cookpad.com>
+
+ * NEWS: fix description of number literal suffixes.
+
+Mon Sep 2 14:01:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * test/rake/test_rake_rules.rb: add space after string literal to
+ prevent conflict with string options syntax "foo"opts
+
+ * test/rss/rss-assertions.rb: ditto
+
+Mon Sep 2 12:28:38 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_bignum.rb (test_interrupt_during_to_s): Disable it
+ when GMP is used.
+
+Mon Sep 2 07:02:10 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (Init_Bignum): Define Bignum::GMP_VERSION when GMP is used.
+
+Mon Sep 2 01:46:14 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_generic): Reduce arguments.
+ (big2str_gmp): Ditto.
+ (rb_big2str1): Follow the above change.
+
+Mon Sep 2 00:08:08 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (get_mach_timebase_info): Extracted from rb_clock_gettime.
+ (rb_clock_gettime): Use get_mach_timebase_info.
+ (rb_clock_getres): Support MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC.
+
+Sun Sep 1 23:30:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (GMP_BIG2STR_DIGITS): New constant.
+ (big2str_gmp): New function.
+ (rb_big2str1): Use big2str_gmp for big bignums.
+
+ * internal.h (rb_big2str_gmp): Declared.
+
+ * ext/-test-/bignum/big2str.c (big2str_gmp): New method.
+
+Sun Sep 1 22:37:51 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul_gmp): Use mpz_init and mpz_clear instead of
+ mpz_inits and mpz_clears.
+ Older GMP don't have them.
+
+Sun Sep 1 21:17:54 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/net/http/test_http.rb (test_bind_to_local_port): Choose an open
+ port more reliably.
+
+Sun Sep 1 20:32:40 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_base_poweroftwo): Renamed from
+ big2str_base_powerof2.
+ (rb_big2str_poweroftwo): New function for test.
+ (big2str_generic): Extracted from rb_big2str1.
+ (rb_big2str_generic): New function for test.
+
+ * internal.h (rb_big2str_poweroftwo): Declared.
+ (rb_big2str_generic): Ditto.
+
+ * ext/-test-/bignum/big2str.c: New file.
+
+ * test/-ext-/bignum/test_big2str.rb: New file.
+
+Sun Sep 1 15:21:21 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_2bdigits): Renamed from big2str_orig.
+
+Sun Sep 1 13:02:24 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: Remove BITSPERDIG >= INT_MAX test. The static assertion,
+ SIZEOF_BDIGITS <= sizeof(BDIGIT) is enough.
+
+Sun Sep 1 11:38:26 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (maxpow_in_bdigit): Removed.
+
+Sun Sep 1 10:30:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (rb_fix_bit_length): Moved from bignum.c.
+
+Sun Sep 1 09:55:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (bit_length): Moved from bignum.c.
+ (nlz_int): Ditto.
+ (nlz_long): Ditto.
+ (nlz_long_long): Ditto.
+ (nlz_int128): Ditto.
+
+Sun Sep 1 03:32:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bit_length): Renamed from bitsize.
+
+Sun Sep 1 00:07:09 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_bit_length): New method.
+ (rb_fix_bit_length): Ditto.
+ [ruby-core:56247] [Feature #8700]
+
+Sat Aug 31 22:18:29 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_clock_getres): New method.
+ (timetick2dblnum_reciprocal): New function.
+
+ * configure.in: Check clock_getres.
+
+ [ruby-core:56780] [Feature #8809] accepted as a CRuby feature at
+ DevelopersMeeting20130831Japan
+ https://bugs.ruby-lang.org/projects/ruby/wiki/DevelopersMeeting20130831Japan
+
+Sat Aug 31 21:02:07 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: Use GMP to accelerate big Bignum multiplication.
+ (bary_mul_gmp): New function.
+ (bary_mul): Use bary_mul_gmp.
+ (bigsq): Use different threshold with GMP.
+
+ * configure.in: Detect GMP.
+
+ [ruby-core:56658] [Feature #8796]
+
+Sat Aug 31 15:03:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * compile.c (NODE_MATCH3): pass CALL_INFO to opt_regexpmatch2
+
+ * insns.def (opt_regexpmatch2): use CALL_SIMPLE_METHOD to call =~ if
+ the receiver is not a T_STRING [Bug #8847] [ruby-core:56916]
+
+Sat Aug 31 14:07:11 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/securerandom.rb (random_bytes): Use Process.clock_gettime.
+
+Sat Aug 31 00:25:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/encoding.h (rb_{ascii8bit,utf8,usascii}_encindex): get
+ rid of conflict with macros defined in internal.h.
+
+Fri Aug 30 22:37:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (native_thread_init_stack): wait the creator thread
+ to fill machine stack info, if get_stack_of() is available.
+
+ * thread_pthread.c (native_thread_create): fill the created thread
+ stack info after starting, if get_stack_of() is available.
+
+ * thread_pthread.c (native_thread_create): define attr only if it is
+ used, and merge pthread_create() calls.
+
+ * thread_pthread.c (get_main_stack): separate function to get stack of
+ main thread.
+
+Thu Aug 29 18:05:33 2013 Koichi Sasada <ko1@atdot.net>
+
+ * struct.c (rb_struct_define_without_accessor_under): added.
+ This function is similar to rb_define_class_under() against
+ rb_define_class().
+
+ * include/ruby/intern.h: add a declaration of this function.
+
+Thu Aug 29 17:03:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_call_method): a method entry refers the based
+ class/module, so should search superclass from the origin i-class
+ where the entry belongs to, to get rid of infinite loop when zsuper
+ in a prepended class/module. [ruby-core:54105] [Bug #8238]
+
+Thu Aug 29 05:35:58 2013 Eric Hodel <drbrain@segment7.net>
+
+ * ext/zlib/zlib.c (zstream_run): Fix handling of deflate streams that
+ need a dictionary but are being decompressed by Zlib::Inflate.inflate
+ (which has no option to set a dictionary). Now Zlib::NeedDict is
+ raised instead of crashing. [ruby-trunk - Bug #8829]
+ * test/zlib/test_zlib.rb (TestZlibInflate): Test for the above.
+
+Thu Aug 29 02:40:45 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/scalar_scanner.rb: invalid floats should be
+ treated as strings.
+ https://github.com/tenderlove/psych/issues/156
+
+ * test/psych/test_string.rb: test for change
+
+Wed Aug 28 17:20:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (hpux_attr_getstackaddr): basic support for the
+ get_stack() under HP-UX. based on the patch by michal@rokos.cz
+ (Michal Rokos) at [ruby-core:56645]. [Feature #8793]
+
+Wed Aug 28 11:24:20 2013 Michal Rokos <michal@rokos.cz>
+
+ * configure.in (sys/pstat.h): fix missing header check for
+ missing/setproctitle.c on HP-UX. [ruby-core:56644] [Bug #8792]
+
+Wed Aug 28 04:54:33 2013 Eric Hodel <drbrain@segment7.net>
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_read): Replace duplicate
+ wait_writable with wait_readable.
+
+Tue Aug 27 17:18:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/timeout.rb (Timeout#timeout): skip rescue clause only when no
+ exception class is given.
+
+Tue Aug 27 17:02:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (copy_stream_body): should write in binary mode. based on a
+ patch by godfat (Lin Jen-Shin) at [ruby-core:56556].
+ [ruby-core:56518] [Bug #8767]
+
+Tue Aug 27 17:02:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (copy_stream_body): move common open flags.
+
+Tue Aug 27 16:56:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enumerator.c (enumerator_size): use rb_check_funcall() instead of
+ respond_to? and call.
+
+ * enumerator.c (enumerator_each): ensure that argument array size
+ does not overflow at appending.
+
+Tue Aug 27 16:46:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_index, rb_ary_rindex): use optimized equality to
+ improve performance. [Feature #8820]
+
+ * vm_insnhelper.c (rb_equal_opt): optimized equality function.
+
+Tue Aug 27 16:11:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (opt_eq_func): use RBASIC_CLASS() instead of HEAP_CLASS_OF().
+
+ * insns.def (opt_plus, opt_minus, opt_mult, opt_div, opt_mod, opt_lt),
+ (opt_gt, opt_ltlt, opt_aref, opt_aset, opt_length, opt_size),
+ (opt_empty_p, opt_succ): ditto.
+
+Tue Aug 27 16:08:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (rb_check_funcall, rb_check_funcall_with_hook): constify
+ argv.
+
+Tue Aug 27 13:03:33 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/stringio/stringio.c (strio_read_nonblock): declare local
+ variables at the first of function.
+
+Tue Aug 27 11:51:37 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * enumerator.c: Allow Enumerator size argument to be any callable.
+ Patch by Avdi Grimm. [bug #8641] [ruby-core:56032] [fix GH-362]
+
+ * test/ruby/test_enumerator.rb: Test for above
+
+Tue Aug 27 11:46:31 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_profile_clear): do rest_sweep() before clearing
+ profile.current_record.
+
+Tue Aug 27 07:35:05 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * io.c (io_read_nonblock): support non-blocking reads without raising
+ exceptions. As in: `io.read_nonblock(size, exception: false)`
+ [ruby-core:38666] [Feature #5138]
+ * ext/openssl/ossl_ssl.c (ossl_ssl_read_internal): ditto
+ * ext/stringio/stringio.c (strio_sysread): ditto
+ * io.c (rb_io_write_nonblock): support non-blocking writes without
+ raising an exception.
+ * ext/openssl/ossl_ssl.c (ossl_ssl_write_internal): ditto
+ * test/openssl/test_pair.rb (class OpenSSL): tests
+ * test/ruby/test_io.rb (class TestIO): ditto
+ * test/socket/test_nonblock.rb (class TestSocketNonblock): ditto
+ * test/stringio/test_stringio.rb (class TestStringIO): ditto
+
+Tue Aug 27 05:24:34 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Import RubyGems 2.1.0 Release Candidate
+ * test/rubygems: ditto.
+
+Mon Aug 26 16:24:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_nextc): warn carriage return in middle of line.
+ [ruby-core:56240] [Feature #8699]
+
+Mon Aug 26 15:27:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/timeout.rb (Timeout#timeout): should not be caught by rescue
+ clause. [Bug #8730]
+
+Mon Aug 26 14:44:26 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (rb_ary_splice): use RARRAY_PTR_USE() without WB because
+ there are not new relations.
+
+ * enum.c (enum_sort_by): ditto.
+
+ * struct.c (setup_struct): use RARRAY_RAWPTR().
+
+ * vm_eval.c (yield_under): ditto.
+
+ * ext/pathname/pathname.c (path_entries): use RARRAY_AREF().
+
+ * ext/pathname/pathname.c (path_s_glob): ditto.
+
+Mon Aug 26 13:11:10 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * array.c (ary_ensure_room_for_push): fix typo in r42658.
+
+Mon Aug 26 12:37:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/sizes.c.tmpl: generate automatically by extracting
+ RUBY_CHECK_SIZEOF from configure.in.
+
+Mon Aug 26 10:16:59 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * process.c (gcd_timetick_int): Renamed from gcd_timtick_int.
+
+Sun Aug 25 21:02:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * sizes.c (Init_sizes): Define the size of clock_t.
+
+Sun Aug 25 01:47:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (BARY_SHORT_MUL): Renamed from BARY_MUL1.
+ (bary_short_mul): Renamed from bary_mul1.
+
+Sat Aug 24 10:35:09 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_clock_gettime): The emulated clock names changed.
+
+Fri Aug 23 22:22:07 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_clock_gettime): Add a cast to fix compile error by
+ -Werror,-Wshorten-64-to-32.
+
+Fri Aug 23 22:12:13 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_intern): no symbol cache while initialization.
+
+Fri Aug 23 22:07:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (clock_t): needs time.h.
+
+Fri Aug 23 21:37:28 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (reduce_factors): New function.
+ (timetick2dblnum): Use reduce_factors.
+ (timetick2integer): Ditto.
+ (make_clock_result): Follow the above change.
+ (rb_clock_gettime): Ditto.
+
+Fri Aug 23 21:00:55 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (timetick_int_t): Renamed from timetick_giga_count_t.
+ (gcd_timtick_int): Renamed from gcd_ul and make the arguments
+ timetick_giga_count_t.
+ (reduce_fraction): Make the arguments timetick_int_t.
+ (timetick2integer): Ditto.
+ (make_clock_result): Ditto.
+ (timetick2dblnum): Fix the return type.
+ (rb_clock_gettime): Use timetick_int_t.
+
+Fri Aug 23 20:50:40 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (gcd_ul): New function.
+ (reduce_fraction): Ditto.
+ (reduce_fraction): Ditto.
+ (timetick2dblnum): Ditto.
+ (timetick2integer): Ditto.
+ (make_clock_result): Use timetick2dblnum and timetick2integer.
+ (rb_clock_gettime): Follow the make_clock_result change.
+
+Fri Aug 23 18:39:04 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (ary_make_shared): shared ary as shady. Need more effort to
+ make it normal object.
+
+ * array.c (rb_ary_modify): use RARRAY_PTR_USE() without WB because
+ there are not new relations.
+
+ * array.c (ary_ensure_room_for_unshift): use RARRAY_RAWPTR() because
+ there are not new relations.
+
+Fri Aug 23 11:25:57 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c: introduce ARY_SHARED_OCCUPIED(shared).
+
+Fri Aug 23 11:07:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): now SIZEOF_CLOCK_T is needed for
+ unsigned_clock_t.
+
+Thu Aug 22 22:01:04 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_clock_gettime): Strip "s" from unit names.
+
+Thu Aug 22 20:14:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (unsigned_clock_t): Defined.
+ (rb_clock_gettime): Consider clock_t overflow for
+ ISO_C_CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID.
+
+ * configure.in: Check the size of clock_t.
+
+Thu Aug 22 16:22:48 2013 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (build_postexe_iseq): fix to setup the local table.
+
+Thu Aug 22 15:42:43 2013 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (rb_iseq_compile_node): accept NODE_IFUNC to support
+ custom compilation.
+
+ * compile.c (NODE_POSTEXE): compile to
+ "ONCE{ VMFrozenCore::core#set_postexe{...} }" with a new custom
+ compiler `build_postexe_iseq()'.
+
+ * vm.c (m_core_set_postexe): remove parameters (passed by a block).
+
+Thu Aug 22 06:54:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_clock_gettime): Change emulation symbols for
+ Process.clock_gettime.
+
+Thu Aug 22 06:24:54 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (make_clock_result): Extracted from rb_clock_gettime.
+
+Wed Aug 21 22:30:51 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_clock_gettime): clock() based CLOCK_PROCESS_CPUTIME_ID
+ emulation implemented.
+
+Wed Aug 21 21:02:37 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_proc_times): Use RB_GC_GUARD to guard objects from GC.
+
+Wed Aug 21 20:33:01 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (get_clk_tck): Extracted from rb_proc_times.
+ (rb_clock_gettime): times() based CLOCK_PROCESS_CPUTIME_ID emulation
+ is implemented.
+
+Wed Aug 21 19:31:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c: POSIX_GETTIMEOFDAY_CLOCK_REALTIME is renamed to
+ SUS_GETTIMEOFDAY_CLOCK_REALTIME.
+
+Wed Aug 21 19:17:46 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_clock_gettime): CLOCK_PROCESS_CPUTIME_ID emulation
+ using getrusage is implemented.
+
+Wed Aug 21 17:34:27 2013 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (getrusage_time): Fallback clock_gettime to getrusage when
+ clock_gettime fails.
+ Reported by Eric Saxby. [ruby-core:56762] [Bug #8805]
+
+Wed Aug 21 02:32:32 2013 Koichi Sasada <ko1@atdot.net>
+
+ * insns.def: fix regexp's once option behavior.
+ fix [ruby-trunk - Bug #6701]
+
+ * insns.def: remove `onceinlinecache' and introduce `once' instruction.
+ `once' doesn't use `setinlinecache' insn any more.
+
+ * vm_core.h: `union iseq_inline_storage_entry' to store once data.
+
+ * compile.c: catch up above changes.
+
+ * iseq.c: ditto.
+
+ * vm.c, vm_insnhelper.c: ditto. fix `m_core_set_postexe()' which
+ is depend on `onceinlinecache' insn.
+
+ * test/ruby/test_regexp.rb: add tests.
+
+ * iseq.c: ISEQ_MINOR_VERSION to 1 (should increment major?)
+
+Wed Aug 21 02:30:15 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_gcdebug_print_obj_condition): add printing information.
+
+Tue Aug 20 13:38:00 2013 Naohisa Goto <ngotogenome@gmail.com>
+
+ * test/gdbm/test_gdbm.rb: skip TestGDBM#test_s_open_lock on Solaris.
+ On Solaris (and platforms which do not have flock and have lockf),
+ with GDBM 1.10, gdbm_open(3) blocks when opening already locked
+ gdbm file. [Bug #8790] [ruby-dev:47631]
+
+Tue Aug 20 02:32:52 2013 Zachary Scott <e@zzak.io>
+
+ * lib/test/: [DOC] Document Test::Unit, hide most submodules and
+ classes from rdoc. Since lib/test is only present as a compatibility
+ layer with the legacy test suite many test/unit users will be using
+ minitest or the test/unit gem instead. It is recommended to use one
+ of these alternatives for writing new tests.
+
+ This patch was based on a patch submitted by Steve Klabnik.
+ [ruby-core:56694] [Bug #8778]
+
+Tue Aug 20 02:10:19 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rss/rss.rb: [DOC] Document for constants by Steve Klabnik
+ [ruby-core:56705] [Bug #8798]
+
+Tue Aug 20 02:01:10 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rss/xmlparser.rb: [DOC] Hide legacy constant from rdoc
+ Patch by Steve Klabnik [ruby-core:56708] [Bug #8799]
+
+Tue Aug 20 01:52:05 2013 Zachary Scott <e@zzak.io>
+
+ * ext/socket/unixserver.c: [DOC] Document #accept
+ * ext/socket/tcpserver.c: ditto
+ * ext/socket/udpsocket.c: [DOC] Fix indentation of documentation
+ * ext/socket/socket.c: ditto
+ Patches by David Rodr'iguez [ruby-core:56734] [Bug #8802]
+
+Tue Aug 20 01:19:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Define ac_cv_func_clock_gettime to yes for mingw*.
+
+Mon Aug 19 21:31:35 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/defines.h: Fix a compilation error with
+ i586-mingw32msvc-gcc of gcc-mingw32 package on Debian squeeze.
+ ruby/missing.h should be included before include/ruby/win32.h
+ because struct timespec, used in the clock_gettime declaration in
+ include/ruby/win32.h, is defined in ruby/missing.h instead of
+ system headers.
+
+Mon Aug 19 20:55:12 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: fix around GC_DEBUG.
+
+ * gc.c (RVALUE::line): should be VALUE. On some environment
+ (such as mswin64), `int' introduces alignment mismatch.
+
+ * gc.c (newobj_of): add an assertion to check VALUE alignment.
+
+ * gc.c (aligned_malloc): `&' is low priority than `=='.
+
+ * gc.c: define GC_DEBUG everytime and use it as value 0 or 1.
+
+Mon Aug 19 17:43:44 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/ruby/test_fiber.rb: collect garbage fibers immediately.
+
+Mon Aug 19 17:41:49 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/profile_test_all.rb: add `failed?' information.
+
+Mon Aug 19 17:00:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (retry_fork): retry with GC if ENOMEM occurred, to free
+ swap/kernel space.
+
+Mon Aug 19 13:28:47 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h (CLOCK_MONOTONIC): typo.
+
+ * win32/win32.c: removed duplicated declarations.
+
+Mon Aug 19 13:03:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (clock_gettime): should not overwrite cache variable
+ with different condition. otherwise -lrt is not linked and the link
+ fails, after reconfig.
+
+Mon Aug 19 12:56:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (Init_process): Add constants: CLOCK_REALTIME_ALARM and
+ CLOCK_BOOTTIME_ALARM.
+
+Sun Aug 18 20:17:41 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * variable.c, vm_method.c: remove dead code.
+
+ * test/ruby/test_fiber.rb, test/ruby/test_thread.rb:
+ change accordingly.
+
+Sun Aug 18 19:32:26 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * error.c, file.c, gc.c, hash.c, thread.c, variable.c, vm_eval.c, bin/erb:
+ $SAFE=4 is obsolete.
+
+Sun Aug 18 14:30:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_clock_gettime): Rename POSIX_TIME_CLOCK_REALTIME to
+ ISO_C_TIME_CLOCK_REALTIME.
+
+Sun Aug 18 14:22:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Revert r42604. It causes linking librt on systems
+ with newer glibc uselessly.
+
+Sun Aug 18 13:18:38 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (Init_process): Add constants: CLOCK_REALTIME_COARSE,
+ CLOCK_MONOTONIC_COARSE and CLOCK_BOOTTIME.
+
+Sun Aug 18 12:41:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (clock_gettime): need to check with -lrt prior to check
+ for the function only. otherwise -lrt is not linked and the link
+ fails, when ac_cv_func_clock_gettime is cached as yes.
+
+Sun Aug 18 10:05:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big2str1): Make an expression more explicit.
+
+Sun Aug 18 03:18:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big2str1): Use power_level instead of bitsize(xn).
+
+Sun Aug 18 00:44:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (BIGDIVREM_EXTRA_WORDS): Redefine to 1.
+ (bigdivrem_num_extra_words): Removed.
+ (bigdivrem_normal): Simplified.
+ (big2str_karatsuba): Ditto.
+
+Sat Aug 17 23:25:19 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * test/ruby/test_time.rb: use the in_timezone() helper
+ and define it at the top with other helpers.
+
+Sat Aug 17 22:20:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (time_mload): ignore auxiliary data, offset and zone, if
+ invalid. [ruby-core:56648] [Bug #8795]
+
+Sat Aug 17 20:11:49 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * process.c: [DOC] MACH_ABSOLUTE_TIME_CLOCK_MONOTONIC is an
+ available emulation for a monotonic clock on Darwin.
+ https://developer.apple.com/library/mac/qa/qa1398/_index.html
+
+Fri Aug 16 18:12:05 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/profile_test_all.rb: fix typo.
+
+Fri Aug 16 18:09:20 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/profile_test_all.rb: remove space characters from test names.
+
+Fri Aug 16 17:32:02 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/profile_test_all.rb: refactoring memory profiling tool for
+ test-all.
+ Add profiling targets /proc/meminfo and /proc/self/status.
+
+ * test/runner.rb: accept other than 'true'.
+
+Fri Aug 16 11:23:35 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (rb_file_size, rb_file_flock): improve performance of Windows.
+
+ * file.c (rb_file_truncate): removed unnecessary #ifdef.
+
+ * test/test_file.rb (TestFile#test_truncate_size): added an assertion
+ for File#size.
+
+Fri Aug 16 10:07:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem_single1): Renamed from bigdivrem_single. Add
+ x_higher_bdigit argument.
+ (bigdivrem_single): Just call bigdivrem_single1.
+ (bigdivrem_restoring): Use bigdivrem_single1 to avoid memmove.
+
+Fri Aug 16 09:17:00 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_small_rshift): Specify the higher BDIGIT instead of
+ sign bit.
+ (big_shift3): Follow the above change.
+
+Fri Aug 16 02:20:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul_toom3): Reduce a branch.
+
+Fri Aug 16 02:14:09 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * process.c (rb_clock_gettime): add CLOCK_MONOTONIC support on OS X.
+ http://developer.apple.com/library/mac/qa/qa1398/_index.html
+ [Feature #8658]
+
+Fri Aug 16 01:37:43 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem_single): Use shift when y is a power of two.
+
+Fri Aug 16 01:09:33 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem_restoring): Use bigdivrem_single if non-topmost
+ BDIGITs of y are zero.
+
+Fri Aug 16 00:33:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big2str1): Truncate topmost zeros of x.
+
+Fri Aug 16 00:00:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_divmod): Simplify an expression.
+
+Thu Aug 15 23:26:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem_normal): Remove a local variable.
+
+Thu Aug 15 23:08:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_karatsuba): Use bigdivrem_restoring directly to
+ reduce working buffer and memory copy.
+ (rb_big2str1): Allocate working buffer for big2str_karatsuba here.
+
+Thu Aug 15 20:51:29 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c, internal.h (rb_io_flush_raw): new function to select calling
+ fsync() (on Windows).
+
+ * io.c (rb_io_flush_raw): use above function.
+
+ * file.c (rb_file_truncate): use above function.
+
+ * test/ruby/test_file.rb (TestFile#test_truncate_size): test for
+ above changes.
+
+Thu Aug 15 18:39:31 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (clock_gettime): improve precision when freq is less
+ than and nearly equals 10**9.
+
+Thu Aug 15 17:43:15 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_lazy_sweep): remove heap_increment() here because heap_inc
+ may be 0.
+
+Thu Aug 15 16:59:56 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (rb_io_rewind): remove fsync() for Windows to improve the
+ performance.
+
+Thu Aug 15 16:30:23 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/fileutils/test_fileutils.rb (TestFileUtils#test_rmdir):
+ FileUtils.rmdir ignores Errno::ENOTEMPTY, so, in such cases, this
+ assertion is nonsense.
+
+Thu Aug 15 15:49:35 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_clock_gettime): [DOC] FreeBSD 7.1 supports
+ CLOCK_THREAD_CPUTIME_ID.
+ http://www.freebsd.org/releases/7.1R/relnotes.html
+
+Thu Aug 15 14:30:23 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h, win32/Makefile.sub, win32/win32.c
+ (clock_gettime): [experimental] emulates clock_gettime(2) of posix.
+
+Thu Aug 15 02:32:40 2013 Zachary Scott <e@zzak.io>
+
+ * hash.c (rb_hash_aset): [DOC] Document key dup patch by @kachick
+ [Fixes GH-382] https://github.com/ruby/ruby/pull/382
+
+Wed Aug 14 14:28:39 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * proc.c (rb_mod_define_method): now they return the symbols of the
+ defined methods, not the methods/procs themselves.
+ [ruby-dev:42151] [Feature #3753]
+
+ * NEWS: documents about above change and def-expr (see r42337).
+
+ * test/ruby/test_module.rb: tests about above change.
+
+Wed Aug 14 00:51:14 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem_restoring): xn argument removed.
+ (bigdivrem_normal): Follow the above change.
+
+Wed Aug 14 00:18:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big_div_struct): Remove xn and j field. Add zn field.
+ (bigdivrem1): Follow the above change.
+ (bigdivrem_restoring): Ditto.
+
+Tue Aug 13 23:38:17 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big_div_struct): ynzero field removed.
+ (bigdivrem1): Follow the above change.
+ (bigdivrem_restoring): Ditto.
+
+Tue Aug 13 23:01:16 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem_restoring): Extracted from bigdivrem_normal.
+
+Tue Aug 13 22:12:59 2013 Kenichi Kamiya <kachick1@gmail.com>
+
+ * random.c (rb_random_ulong_limited): coerce before check negative.
+ [Fixes GH-379]
+
+Tue Aug 13 21:52:15 2013 Kenichi Kamiya <kachick1@gmail.com>
+
+ * object.c (Init_Object): undef Module#prepend_features on Class, as
+ well as Module#append_features. [Fixes GH-376]
+
+ * test_class.rb: Added test for above. And ensure type checking
+ on similar methods as module_function.
+
+Tue Aug 13 08:52:18 2013 Zachary Scott <e@zzak.io>
+
+ * doc/syntax/literals.rdoc: [DOC] String literal concat by @cknadler
+ [Fixes GH-380] https://github.com/ruby/ruby/pull/380
+
+Mon Aug 12 23:07:21 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (gc_marks_test): inhibit gc for st's operation.
+
+Mon Aug 12 15:59:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_whole_match_p): treat CR in middle of a line as a
+ mere whitespace.
+
+Mon Aug 12 15:16:58 2013 Koichi Sasada <ko1@atdot.net>
+
+ * class.c (rb_prepend_module): make T_ICLASS object shady because
+ this T_ICLASS object seems to share method table with other class
+ objects. It was causes WB miss.
+ TODO: need to know the data structure.
+
+ * test/ruby/test_module.rb: add a test for WB miss.
+
+Mon Aug 12 13:47:54 2013 Zachary Scott <e@zzak.io>
+
+ * process.c: [DOC] RDoc formatting of Process.clock_gettime
+
+Mon Aug 12 13:29:09 2013 Zachary Scott <e@zzak.io>
+
+ * lib/yaml/dbm.rb: [DOC] Document call-seq for YAML::DBM
+
+Mon Aug 12 12:57:26 2013 Zachary Scott <e@zzak.io>
+
+ * ext/dbm/extconf.rb: [DOC] Hide from RDoc
+ Some libraries might want to document extconf.rb so RDoc treats it
+ like any other ruby program. However, DBM users shouldn't care about
+ these methods.
+
+Mon Aug 12 12:53:39 2013 Zachary Scott <e@zzak.io>
+
+ * ext/dbm/dbm.c: [DOC] Reformat headings of DBM class
+
+Mon Aug 12 12:46:31 2013 Zachary Scott <e@zzak.io>
+
+ * lib/yaml.rb, lib/yaml/: [DOC] Document YAML::DBM#key and add
+ references to similar methods with more detail. This patch brings
+ lib/yaml to 100% documentation coverage.
+
+Mon Aug 12 02:51:32 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_s_set_input): on OS X with editline,
+ Readline.readline doesn't work because readline_get doesn't use
+ rl_getc. The difference is introduced by r42402 [ruby-dev:47509]
+ [Bug #8644]. Before it rb_io_stdio_file set ifp->stdio_file.
+ Therefore add manually setting the value.
+
+ * ext/readline/readline.c (readline_s_set_output): ditto.
+
+Sun Aug 11 23:27:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_str_encode_ospath): OS path encoding on Mac OS X is also
+ fixed.
+
+Sun Aug 11 22:57:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_require.rb (assert_require_nonascii_path): OS path
+ encoding on Windows is fixed, so encoding of __FILE__ should be it.
+ [ruby-core:56498] [Bug #8764]
+
+Sun Aug 11 19:11:45 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/parser/test_sax2.rb: Expand abbreviated class name.
+
+Sun Aug 11 19:06:03 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/sax2listener.rb (REXML::SAX2Listener#notationdecl): Fix
+ wrong number of arguments in the template listener.
+ [Bug #8731] [ruby-dev:47582]
+ Reported by Ippei Obayashi.
+ * test/rexml/parser/test_sax2.rb: Add tests for parsing notation
+ declarations with SAX2 API.
+
+Sun Aug 11 18:44:04 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/sax2listener.rb (REXML::SAX2Listener#elementdecl): Fix wrong
+ examples. [Bug #8731] [ruby-dev:47582]
+ Reported by Ippei Obayashi.
+
+Sun Aug 11 18:42:13 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/sax2parser.rb
+ (REXML::Parsers::SAX2Parser#handle_entitydecl): Extract.
+
+Sun Aug 11 18:40:25 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/sax2parser.rb (REXML::Parsers::SAX2Parser#parse):
+ Fix wrong "%" position in parameter entity declaration event argument.
+ * test/rexml/parser/test_sax2.rb: Add tests for the above case.
+
+Sun Aug 11 18:08:40 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/sax2parser.rb (REXML::Parsers::SAX2Parser#parse):
+ Support NDATA in external ID entity declaration.
+ * test/rexml/parser/test_sax2.rb: Add tests for the above case.
+
+Sun Aug 11 18:07:39 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/baseparser.rb
+ (REXML::Parsers::BaseParser#pull_event): Support optional NDATA
+ in external ID entity declaration.
+
+Sun Aug 11 17:54:07 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * NEWS (REXML::Parsers::SAX2Parser): Add about this change.
+ * lib/rexml/parsers/sax2parser.rb (REXML::Parsers::SAX2Parser#parse):
+ Fix wrong number of arguments. Document says "an array of the
+ entity declaration" but it passes two or more arguments.
+ This is a bug but it break backward compatibility.
+ Reported by Ippei Obayashi. [Bug #8731] [ruby-dev:47582]
+ * lib/rexml/sax2listener.rb (REXML::SAX2Listener#entitydecl): ditto.
+ The listener template accepted two arguments.
+ * test/rexml/parser/test_sax2.rb: Add tests for external ID case.
+
+Sun Aug 11 17:41:41 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/parser/test_sax2.rb: Add SAX2 API test.
+
+Sun Aug 11 15:10:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_enc_symname_type): allow ID_ATTRSET for ID_INSTANCE,
+ ID_GLOBAL, ID_CLASS, ID_JUNK too. [Bug #8756]
+
+Sun Aug 11 13:17:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * include/ruby/encoding.h: Reduce ENCODING_INLINE_MAX to 127 as this
+ should be sufficient to represent all the encodings Ruby supports.
+
+Sun Aug 11 11:54:38 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_clock_gettime): New method.
+ This is accepted in the meeting:
+ https://bugs.ruby-lang.org/projects/ruby/wiki/DevelopersMeeting20130809
+ This method is accepted as a CRuby feature.
+ I.e. Other Ruby implementations don't need to implement it.
+ [ruby-core:56087] [Feature #8658]
+
+Sun Aug 11 10:40:48 2013 Zachary Scott <e@zzak.io>
+
+ * lib/time.rb: [DOC] Correcting rdoc visibility of time.rb constants
+ Reported by Tanaka Akira [ruby-core:56517]
+
+Sun Aug 11 04:48:14 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (rb_str_normalize_ospath):
+ HFS Plus (Mac OS Extended) uses a variant of Normal Form D in which
+ U+2000 through U+2FFF, U+F900 through U+FAFF, and U+2F800 through
+ U+2FAFF are not decomposed (this avoids problems with round trip
+ conversions from old Mac text encodings).
+ http://developer.apple.com/library/mac/qa/qa1173/_index.html
+ Therefore fix r42457 to exclude the range.
+
+Sun Aug 11 03:26:07 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bitsize): Fix a conditional expression.
+
+Sun Aug 11 02:44:03 2013 Zachary Scott <e@zzak.io>
+
+ * lib/time.rb: [DOC] Document constants by @markijbema [Fixes GH-377]
+ https://github.com/ruby/ruby/pull/377
+
+Sun Aug 11 01:28:52 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Revert r42458.
+ It removes the HAVE_CLOCK_GETTIME from config.h.
+ http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20130809T044800Z.diff.html.gz
+
+Sat Aug 10 13:53:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_id_attrset): allow other than ID_ATTRSET.
+
+ * parse.y (intern_str): ditto. try stem ID for ID_INSTANCE,
+ ID_GLOBAL, ID_CLASS, ID_JUNK too. [Bug #8756]
+
+Sat Aug 10 12:49:50 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/baseparser.rb
+ (REXML::Parsers::BaseParser::CDATA_END): Use "\A" instead of "^".
+ It is not an used constant but I fix it. (Or should I remove it?)
+
+Sat Aug 10 12:47:19 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser):
+ Fix wrong constant name. "]>" pattern match is the same but
+ it is used for "<!DOCTYPE" end mark not "<![CDATA[" end mark.
+
+Sat Aug 10 12:43:15 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser):
+ Use "\A" instead of "^" in document type declaration patterns
+ because they are used as the head match in content not the head
+ match in line. They don't cause any problems in the current code
+ but it should be fixed.
+
+Sat Aug 10 12:39:00 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/parse/test_document_type_declaration.rb: Add tests for
+ parsing document type declaration.
+
+Sat Aug 10 12:00:45 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser::SYSTEM):
+ Fix loose "head" match regular expression. It doesn't cause any
+ problem in the current code but it should be fixed because readers
+ may confuse it.
+ Patch by Ippei Obayashi. Thanks!!!
+
+Sat Aug 10 11:58:24 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/parse/test_notation_declaration.rb (#test_system_public):
+ Add a test for PUBLIC notation and SYSTEM notation order case.
+
+Sat Aug 10 11:31:35 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser::PUBLIC):
+ Fix loose "head" match regular expression.
+ [Bug #8701] [ruby-dev:47551]
+ Patch by Ippei Obayashi. Thanks!!!
+ * test/rexml/parse/test_notation_declaration.rb (#test_system_public):
+ Add a test for the above case.
+
+Sat Aug 10 09:20:21 2013 Zachary Scott <e@zzak.io>
+
+ * NEWS: [DOC] typo in example reported by @moretea
+ https://github.com/ruby/ruby/commit/a39e724#commitcomment-3831489
+
+Sat Aug 10 09:19:04 2013 Zachary Scott <e@zzak.io>
+
+ * proc.c: [DOC] rdoc code formatting
+
+Sat Aug 10 09:12:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_id_attrset): check if the argument is valid type as an
+ attribute.
+
+Sat Aug 10 05:44:08 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rss/trackback.rb: [DOC] Hide RSS::Trackback from rdoc
+ Patch by Steve Klabnik [Bug #8755] [ruby-core:56456]
+
+Sat Aug 10 04:52:21 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big_div_struct): Use size_t.
+ (bigdivrem1): Ditto.
+ (bigdivrem_num_extra_words): Ditto.
+ (bigdivrem_single): Ditto.
+ (bigdivrem_normal): Ditto.
+ (bary_divmod): Ditto.
+
+Fri Aug 9 23:47:15 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rexmlparser.rb: Remove needless REXML version check.
+ Both RSS Parser and REXML are bundled in Ruby. RSS Parser can
+ always use the latest REXML. [Bug #8754] [ruby-core:56454]
+ Patch by Steve Klabnik. Thanks!!!
+
+Fri Aug 9 22:51:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (XLDFLAGS, LIBRUBYARG_STATIC): CoreFoundation framework
+ option is now needed always, regardless enable-shared.
+ [ruby-core:56467] [Bug #8759]
+
+Fri Aug 9 22:20:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (load_file_internal): use rb_parser_compile_string_path and
+ rb_parser_compile_file_path, String path name versions. [Bug #8753]
+
+Fri Aug 9 07:16:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * ext/io/console/console.c: delete redefinition of rb_cloexec_open.
+ drop support for 1.8 and 1.9 from the next release of io-console gem.
+
+Fri Aug 9 19:13:54 2013 Koichi Sasada <ko1@atdot.net>
+
+ * NEWS: update about new methods for Binding.
+
+Fri Aug 9 18:48:09 2013 Koichi Sasada <ko1@atdot.net>
+
+ * proc.c: add Binding#local_variable_get/set/defined?
+ to access local variables which a binding contains.
+ Most part of implementation by nobu.
+
+ * test/ruby/test_proc.rb: add a tests for above.
+
+ * vm.c, vm_core.h (rb_binding_add_dynavars): add a new function
+ to add a new environment to create space for new local variables.
+
+Fri Aug 9 14:02:01 2013 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+
+ * tool/make-snapshot: Fix order of priority for option parameter.
+
+Fri Aug 9 12:06:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_str_normalize_ospath): normalize to Normalization Form C
+ using CFString.
+
+Fri Aug 9 10:53:57 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * time.c (get_timeval, get_new_timeval): use rb_obj_class()
+ instead of CLASS_OF() because CLASS_OF() may return
+ a singleton class.
+
+Fri Aug 9 10:42:11 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * vm_insnhelper.c (vm_invoke_block): returning from lambda proc
+ now always exits from the Proc. [ruby-core:56193] [Feature #8693]
+
+ * NEWS, test/ruby/test_lambda.rb: ditto. Patch by nobu.
+
+Fri Aug 9 00:10:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enumerator.c (lazy_zip_func): fix non-single argument. fix
+ out-of-bound access and pack multiple yielded values.
+ [ruby-core:56383] [Bug #8735]
+
+Thu Aug 8 23:01:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_mod_singleton_p): new method Module#singleton_class? to
+ return whether the receiver is a singleton class or not.
+ [ruby-core:51087] [Feature #7609]
+
+Thu Aug 8 21:56:44 2013 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_overflow_p): Avoid signed integer overflow.
+ (rb_time_new): Fix overflow condition.
+
+Thu Aug 8 19:58:02 2013 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_threadptr_pending_interrupt_check_mask):
+ use RARRAY_RAWPTR() instead of RARRAY_PTR() because
+ there is no new reference.
+
+Thu Aug 8 19:56:52 2013 Koichi Sasada <ko1@atdot.net>
+
+ * string.c (rb_str_format_m): use RARRAY_RAWPTR() instead of
+ RARRAY_PTR() because there is no new reference.
+
+Thu Aug 8 19:55:51 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: define USE_RGENGC_LOGGING_WB_UNPROTECT.
+
+Thu Aug 8 16:44:25 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: add old macro name `RUBY_EVENT_SWITCH'.
+ This macro name is obsolete because it is renamed to
+ RUBY_INTERNAL_EVENT_SWITCH, but it has compatibility problem
+ using this macro name like ruby-prof.
+ I want to remove this macro after ruby 2.1.
+
+Thu Aug 8 15:37:53 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/coverage/test_coverage.rb (TestCoverage#test_big_code): use `1'
+ instead of `p' to get rid of a side effect.
+ Kernel#p without any argument seems to do nothing, but flushes stdout.
+ and, if stdout is redirected to file, fsync() will be called on
+ Windows. so, when running test-all on Windows with redirection, such
+ as CI environment, this test took a lot of time.
+
+Thu Aug 8 14:54:18 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * NEWS: add description of incompatibility introduced by r42396.
+ [ruby-core:56329] [Bug #8722]
+
+Thu Aug 8 14:50:36 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk (mini): portable target to build miniruby
+
+ * common.mk (bisect): run git-bisect with miniruby
+
+ * common.mk (bisect-ruby): run git-bisect with ruby
+
+ * tool/bisect.sh: script for git-bisect
+
+Thu Aug 8 12:11:43 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/webrick/test_httpresponse.rb (test_send_body_*_chunked): these
+ expectations assumes that the IOs are binmode. fixed test failures
+ introduced at r42427 on Windows.
+
+Thu Aug 8 10:27:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * range.c (range_last): revert r42400. [Bug #8739]
+
+Thu Aug 8 10:26:25 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_str_normalize_ospath): extract and move from dir.c.
+
+Thu Aug 8 05:59:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * test/openssl/test_ssl.rb: Fix test for CVE-2013-4073.
+ Patch by Antonio Terceiro. [Bug #8750] [ruby-core:56437]
+
+Thu Aug 8 03:37:38 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/webrick/httpresponse.rb: Allow #body to be an IO-like object
+ that responds to #readpartial and #read.
+ [ruby-trunk - Feature #8155]
+ * NEWS: NEWS for above
+ * test/webrick/test_httpresponse.rb: Tests for above.
+
+Wed Aug 7 23:06:26 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * ruby.c (Process.argv0): New method to return the original value
+ of $0. [Feature #8696]
+
+Wed Aug 7 23:05:55 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * ruby.c (Process.setproctitle): New method to change the title of
+ the running process that is shown in ps(1). [Feature #8696]
+
+Wed Aug 7 20:05:38 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_odd_p): Check the bignum length.
+ (rb_big_even_p): Ditto.
+
+Wed Aug 7 19:29:26 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (dbl2big): A condition simplified.
+
+Wed Aug 7 16:34:30 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/webrick/test_cgi.rb (TestWEBrickCGI#{start_cgi_server,test_cgi}):
+ mswin is not only mswin32 but also mswin64. [Bug #8746]
+
+Wed Aug 7 16:19:12 2013 Koichi Sasada <ko1@atdot.net>
+
+ * cont.c (rb_fiber_start): use RARRAY_RAWPTR() instead of
+ RARRAY_PTR() because there is no new reference.
+
+ * proc.c (curry): ditto.
+
+ * proc.c (rb_proc_call): remove line break.
+
+Wed Aug 7 13:20:12 2013 Koichi Sasada <ko1@atdot.net>
+
+ * random.c (random_load): use RARRAY_RAWPTR() instead of
+ RARRAY_PTR() because there is no new reference.
+
+Wed Aug 7 12:58:23 2013 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (thread_start_func_2): use RARRAY_RAWPTR() instead of
+ RARRAY_PTR() because there is no new reference.
+
+Wed Aug 7 09:00:24 2013 Zachary Scott <e@zzak.io>
+
+ * string.c: [DOC] Description of rb_str_equal [Fixes GH-375]
+ Based on a patch by @markijbema
+ https://github.com/ruby/ruby/pull/375
+
+Wed Aug 7 08:30:38 2013 Zachary Scott <e@zzak.io>
+
+ * ext/openssl/ossl_hmac.c: [DOC] Documentation for OpenSSL::HMAC
+ based on a patch by @repah documenting-ruby/ruby#14
+ https://github.com/documenting-ruby/ruby/pull/14
+
+Wed Aug 7 07:46:23 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rss/utils.rb: [DOC] RSS::Utils by Steve Klabnik [Bug #8745]
+
+Wed Aug 7 07:38:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (nlz16): Removed.
+ (nlz32): Ditto.
+ (nlz64): Ditto.
+ (nlz128): Ditto.
+ (nlz_int): New function.
+ (nlz_long): New function.
+ (nlz_long_long): New function.
+ (nlz_int128): New function.
+ (nlz): Follow above changes.
+ (bitsize): Follow above changes.
+
+Tue Aug 6 22:38:15 2013 Zachary Scott <e@zzak.io>
+
+ * time.c: [DOC] Typo in Time overview by @sparr [Fixes GH-374]
+ https://github.com/ruby/ruby/pull/374
+
+Tue Aug 6 22:35:32 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rss/1.0.rb: [DOC] Document RSS10 by Steve Klabnik [Bug #8740]
+
+Tue Aug 6 22:14:11 2013 Kouji Takao <kouji.takao@gmail.com>
+
+ * ext/readline/readline.c (readline_s_delete_text): remove
+ checking "$SAFE == 4".
+
+ * ext/readline/readline.c: fix rdoc, remove "Raises SecurityError"
+ and add "Raises NotImplementedError".
+
+Tue Aug 6 22:04:38 2013 Kouji Takao <kouji.takao@gmail.com>
+
+ * ext/readline/readline.c, test/readline/test_readline.rb: fix
+ indent.
+
+Tue Aug 6 21:59:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * range.c (range_last): return nil for empty range, or in the case the
+ predecessor is smaller than the begin. [Bug #8739]
+
+Tue Aug 6 21:48:31 2013 Kouji Takao <kouji.takao@gmail.com>
+
+ * ext/readline/readline.c (readline_s_set_point, Init_readline):
+ add Readline.point=(pos). Patched by naruse. [ruby-dev:47535]
+ [Feature #8675]
+
+Tue Aug 6 21:14:11 2013 Kouji Takao <kouji.takao@gmail.com>
+
+ * ext/readline/readline.c (Init_readline, readline_s_set_output)
+ (clear_rl_outstream, readline_s_set_input, clear_rl_instream)
+ (readline_readline): fix causing SEGV if closed IO object that is
+ set Readline.input or Readline.output. Patched by akr
+ [ruby-dev:47509] [Bug #8644]
+
+Tue Aug 6 17:56:40 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_push_frame): change type of stack_max to size_t.
+
+Tue Aug 6 17:42:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * range.c (range_last): exclude the last number of the exclusive range
+ if the end is Numeric. [ruby-dev:47587] [Bug #8739]
+
+Tue Aug 6 17:42:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_conv_from_wchar): converted string to CP_UTF8
+ should have UTF-8 encoding. otherwise no conversion takes place
+ later.
+
+Tue Aug 6 17:21:38 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_push_frame): fix stack overflow check codes.
+ Stack overflow check should be done *after* pushing a stack frame.
+ However, some stack overflow checking codes checked *before*
+ pushing a stack frame with iseq->stack_max.
+ To solve this problem, add a new parameter `stack_max' to specify
+ a possible consuming stack size.
+
+ * vm_core.h (CHECK_VM_STACK_OVERFLOW0): add to share the stack overflow
+ checking code.
+
+ * insns.def: catch up this change.
+
+ * vm.c, vm_eval.c: ditto.
+
+ * test/ruby/test_exception.rb: add a stack overflow test.
+ This code is reported by nobu.
+
+Tue Aug 6 17:02:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_conv_from_wchar): use WideCharToMultiByte(),
+ as like as mbstr_to_wstr(), in the first step of the conversion from
+ WCHAR.
+
+Tue Aug 6 16:14:32 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_eval.c (eval_string_with_cref): copy cref to limit the scope of
+ refinements in the eval string. [ruby-core:56329] [Bug #8722]
+
+ * test/ruby/test_refinement.rb: related test.
+
+Tue Aug 6 12:23:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_realloc): Use VALGRIND_MAKE_MEM_UNDEFINED to
+ declare undefined memory area.
+ (bignew_1): Ditto.
+
+ * internal.h (VALGRIND_MAKE_MEM_DEFINED): Moved from gc.c
+ (VALGRIND_MAKE_MEM_UNDEFINED): Ditto.
+
+Tue Aug 6 01:40:37 2013 Zachary Scott <e@zzak.io>
+
+ * process.c: [DOC] Document caveats of command form of Process.spawn
+ with regard to the shell and OS. Patched by Steve Klabnik [Bug #8550]
+
+Tue Aug 6 01:28:35 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rss/0.9.rb: [DOC] Typo in example [Bug #8732]
+
+Tue Aug 6 01:22:37 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rss/2.0.rb: [DOC] Document RSS::Rss by Steve Klabnik #8740
+ * lib/rss/atom.rb: [DOC] Typo in rdoc by Steve Klabnik
+
+Mon Aug 5 23:47:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: Rename local variables.
+
+Mon Aug 5 22:23:59 2013 Zachary Scott <e@zzak.io>
+
+ * vm_trace.c: [DOC] Fix TracePoint return values in examples
+ Based on a patch by @sho-h [Fixes GH-373]
+ https://github.com/ruby/ruby/pull/373
+
+Mon Aug 5 17:38:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_write_console): use MultiByteToWideChar() for
+ the last step of conversion to WCHAR, to get rid of warnings from
+ rb_enc_find() in miniruby. [ruby-dev:47584] [Bug #8733]
+
+ * win32/win32.c (wstr_to_mbstr, mbstr_to_wstr): fix wrong trimming.
+ WideCharToMultiByte() and MultiByteToWideChar() do not count
+ NUL-terminator in the size for conversion result, unless the input
+ length is -1.
+
+Mon Aug 5 11:51:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * include/ruby/encoding.h: document which user flags are used by
+ ENCODING_MASK for better greppability
+
+Mon Aug 5 10:01:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * object.c (rb_class_inherited_p): allow iclasses to be tested for
+ inheritance. [Bug #8686] [ruby-core:56174]
+
+ * test/ruby/test_method.rb: add test
+
+Mon Aug 5 06:13:48 2013 Zachary Scott <e@zzak.io>
+
+ * enumerator.c: [DOC] Remove reference to Enumerator::Lazy#cycle
+ Patch by @kachick [Fixes GH-372]
+ https://github.com/ruby/ruby/pull/372
+
+Mon Aug 5 03:57:16 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rss/0.9.rb: [DOC] Document RSS09 by Steve Klabnik [Bug #8732]
+
+Mon Aug 5 03:35:11 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rexml/attribute.rb: [DOC] Update example for #namespace
+ Patch by Ippei Obayashi [Bug #8685] [ruby-core:56173]
+
+Sun Aug 4 21:08:29 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_zip): performance implement by using
+ ALLOCA_N() to allocate tmp buffer.
+
+Sun Aug 4 07:14:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * README.EXT, README.EXT.ja: Mention rb_integer_pack and
+ rb_integer_unpack.
+
+Sun Aug 4 01:54:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (BARY_TRUNC): New macro.
+ (bary_cmp): Use BARY_TRUNC.
+ (bary_mul_toom3): Ditto.
+ (bary_divmod): Ditto.
+ (abs2twocomp): Ditto.
+ (bigfixize): Ditto.
+ (rb_cstr_to_inum): Ditto.
+ (big2str_karatsuba): Ditto.
+ (bigdivrem): Ditto.
+
+Sun Aug 4 00:57:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_karatsuba): Don't allocate new temporary buffer
+ if the buffer is enough for current invocation.
+
+Sun Aug 4 00:22:34 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary2bdigitdbl): New function.
+ (bdigitdbl2bary): Ditto.
+ (bary_mul_single): Use bdigitdbl2bary.
+ (power_cache_get_power): Ditto.
+ (bary_divmod): Use bary2bdigitdbl.
+ (big2str_orig): Ditto.
+ (bigdivrem): Ditto.
+
+Sat Aug 3 22:47:11 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: The branch condition of selecting multiplication
+ algorithms should check smaller argument because Karatsuba and Toom3
+ is effective only if both arguments are big.
+ (bary_mul_toom3_branch): Compare the smaller argument to
+ TOOM3_MUL_DIGITS.
+ (bary_mul): Compare the smaller argument to KARATSUBA_MUL_DIGITS.
+
+Sat Aug 3 22:23:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_orig): Receive the number to stringize as
+ BDIGIT array and size.
+ (big2str_karatsuba): Receive the number to stringize as BDIGIT array
+ and size. Use an temporary array of BDIGIT.
+ (rb_big2str1): Follow the above change.
+
+Sat Aug 3 13:30:04 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (MAX_BASE36_POWER_TABLE_ENTRIES): Renamed from
+ MAX_BIG2STR_TABLE_ENTRIES.
+ (base36_power_cache): Renamed from big2str_power_cache.
+ (base36_numdigits_cache): Renamed from big2str_numdigits_cache.
+
+Sat Aug 3 10:33:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_set_integer_literal): use rb_rational_raw1() for
+ integral rational because no reduction is needed with 1.
+
+Sat Aug 3 09:46:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/etc/etc.c (setup_passwd, setup_group): set proper encodings to
+ string members.
+
+Sat Aug 3 09:30:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * struct.c (rb_struct_define_under): new function to define Struct
+ under the given namespace, not under Struct. [Feature #8264]
+
+ * ext/etc/etc.c: use rb_struct_define_under.
+
+Sat Aug 3 06:55:29 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y (value_expr_gen): now NODE_DEFN and NODE_DEFS are not void
+ value expressions. get rid of wrong warning with -w, and make to
+ pass tests with chkbuild. ref. [Feature #3753]
+
+Sat Aug 3 04:23:48 2013 Eric Hodel <drbrain@segment7.net>
+
+ * doc/syntax/refinements.rdoc: Remove mention of instance_eval and
+ module_eval from scope section per:
+ http://twitter.com/shugomaeda/status/363219951336693761
+
+Sat Aug 3 02:22:05 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_orig): Refactored.
+
+Sat Aug 3 01:20:19 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigadd_core): Removed.
+ (bigadd): Use bary_add instead of bigadd_core.
+
+Sat Aug 3 00:52:43 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big2str1): Simplify power_level calculation.
+
+Sat Aug 3 00:34:20 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_zip): use rb_ary_new2() to create buffer
+ if rb_block_arity() > 1.
+
+Sat Aug 3 00:12:00 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * NEWS: Add the description that IO#seek supports SEEK_DATA
+ and SEEK_HOLE.
+
+Fri Aug 2 23:57:57 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vm.c (m_core_define_method, m_core_define_singleton_method): now
+ the value of def-expr is the Symbol of the name of the method, not
+ nil.
+ ref. [ruby-dev:42151] [Feature #3753]
+
+ * test/ruby/test_syntax.rb (TestSyntax#test_value_of_def): test for
+ above changes.
+
+Fri Aug 2 23:54:11 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_zip): performance improvement by avoiding
+ array creation if rb_block_arity() > 1.
+
+Fri Aug 2 23:50:53 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (power_cache_get_power): Apply bigtrunc to the result of
+ bigsq.
+ (big2str_karatsuba): Fix number of leading zero characters.
+
+Fri Aug 2 23:48:36 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): calculate denominator directly as powers of
+ ten, not parsing string.
+
+ * parse.y (parser_number_literal_suffix): return bit set of found
+ suffixes.
+
+ * parse.y (parser_set_number_literal, parser_set_integer_literal):
+ split from parser_number_literal_suffix to set yylval.
+
+ * parse.y (parser_yylex): parse rational number literal with decimal
+ point precisely.
+
+ * parse.y (simple_numeric): integrate numeric literals and simplify
+ numeric rules.
+
+ * ext/ripper/eventids2.c (ripper_init_eventids2): ripper support for
+ new literals, tRATIONAL and tIMAGINARY.
+
+Fri Aug 2 18:33:28 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_karatsuba): Reduce power_level more than one at
+ recursion, if possible.
+ (rb_big2str1): Follow the above change.
+
+Fri Aug 2 12:25:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul): Swap x and y for bary_mul1 if x is longer than y.
+ [ruby-dev:47565] [Bug #8719] Reported by Narihiro Nakamura.
+
+Fri Aug 2 10:39:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * parse.y (negate_lit): add T_RATIONAL and T_COMPLEX to the switch
+ statement, and call rb_bug() if an unknown type is passed to
+ negate_lit(). [ruby-core:56316] [Bug #8717]
+
+ * bootstraptest/test_literal_suffix.rb (assert_equal): add test
+
+Fri Aug 2 09:14:47 2013 Eric Hodel <drbrain@segment7.net>
+
+ * doc/syntax/refinements.rdoc: Improve description of where you may
+ activate refinements.
+
+Fri Aug 2 07:45:55 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_orig): Remove len argument.
+ (big2str_karatsuba): Ditto.
+ (rb_big2str1): Follow above change.
+
+Thu Aug 2 02:32:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * NEWS: Add the description of number literal suffixes.
+
+Thu Aug 2 00:02:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * bootstraptest/test_literal_suffix.rb: add two test cases to
+ examine that "1if true" and "1rescue nil" are recognized as 1.
+
+Thu Aug 1 23:45:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * rational.c (rb_flt_rationalize_with_prec): new public C function
+ to rationalize a Float instance with a precision.
+
+ * rational.c (rb_flt_rationalize): new public C function to
+ rationalize a Float instance. A precision is calculated from
+ the given float number.
+
+ * include/ruby/intern.h: Add rb_flt_rationalize_with_prec and
+ rb_flt_rationalize.
+
+ * parse.y: implement number literal suffixes, 'r' and 'i'.
+ [ruby-core:55096] [Feature #8430]
+
+ * bootstraptest/test_literal_suffix.rb: add tests for parser to scan
+ number literals with the above tsuffixes.
+
+Thu Aug 1 23:55:08 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big2str1): Remove a local variable.
+
+Thu Aug 1 23:33:01 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_cstr_to_inum): Use power_cache_get_power.
+
+Thu Aug 1 21:02:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big2str1): Raise an error for too big number.
+
+Thu Aug 1 20:46:29 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (power_cache_get_power): Hide cached Bignum objects.
+
+Thu Aug 1 19:15:05 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big2str1): Remove non-trim mode.
+ (rb_big2str0): Non-trim mode implemented here.
+ (big2str_find_n1): Change the result type to long again.
+ (big2str_base_powerof2): Don't take arguments: len and trim.
+ (rb_big2str): Follow above change.
+
+Thu Aug 1 12:37:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_alloc): New function to allocate the result string.
+ It is called after actual length is calculated.
+ (big2str_struct): Add fields: negative, result and ptr.
+ (big2str_orig): Write out the result via b2s->ptr.
+ (big2str_orig): Ditto.
+ (rb_big2str1): Don't allocate the result string at beginning.
+
+Thu Aug 1 07:36:27 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_orig): Use temporary buffer when trim mode.
+
+Thu Aug 1 06:28:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_orig): Simplified because RBIGNUM_LEN(x) <= 2 now.
+ (big2str_struct): Two fields added: hbase2, hbase2_numdigits.
+ (rb_big2str1): Initialize above fields.
+
+Thu Aug 1 04:06:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/options.rb (RDoc#finish): include root path in include
+ paths, to work in another directory than the source directory.
+ [ruby-core:56282] [Bug #8712]
+
+ * test/test_rdoc_markup_pre_process.rb (TestRDocMarkupPreProcess#setup):
+ fix input_file_name, as the test script is not pre-processed.
+
+Thu Aug 1 01:45:18 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_karatsuba): Fix a condition of power_level.
+
+Thu Aug 1 01:09:02 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (LOG2_KARATSUBA_BIG2STR_DIGITS): Removed.
+ (KARATSUBA_BIG2STR_DIGITS): Removed.
+ (big2str_numdigits_cache): New variable.
+ (power_cache_get_power): Merged with power_cache_get_power0.
+ This function returns maxpow_in_bdigit_dbl(base)**(2**power_level).
+ (rb_big2str1): use power_cache_get_power.
+
+Wed Jul 31 23:59:28 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_find_n1): Change the return type to size_t.
+ (big2str_orig): Ditto.
+ (big2str_karatsuba): Ditto.
+ (rb_big2str1): Follow the above changes.
+
+Wed Jul 31 23:19:06 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (power_cache_get_power): Change numdigits_ret to size_t *.
+ (big2str_orig): Change len argument to size_t.
+ (big2str_karatsuba): Ditto.
+ (rb_big2str1): Follow the above changes.
+
+Wed Jul 31 22:59:47 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/parse/test_notation_declaration.rb: Change class
+ name to follow file name change.
+
+Wed Jul 31 22:57:50 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_notationdecl_parsetest.rb: Rename to ...
+ * test/rexml/parse/test_notation_declaration.rb: ... this.
+
+Wed Jul 31 22:54:39 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_notationdecl_mixin.rb: Remove duplicated tests.
+
+Wed Jul 31 22:52:55 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_notationdecl_parsetest.rb: Fix typos in expected
+ value.
+ pubilc ->
+ public
+ ^^
+
+Wed Jul 31 22:50:51 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_notationdecl_parsetest.rb: Add tests that focus
+ system literal in external ID system notation declaration.
+
+Wed Jul 31 22:36:21 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_cmp): Extracted from rb_big_cmp.
+ (power_cache_get_power): Change n1 argument (number of digits) to
+ power_level which is just passed to power_cache_get_power0.
+ (big2str_karatsuba): Ditto.
+ (rb_big2str1): Calculate the initial power_level.
+
+Wed Jul 31 22:04:36 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_notationdecl_parsetest.rb: Fix a typo.
+ Extern ID ->
+ ExternalID
+ ^^
+
+Wed Jul 31 22:01:36 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_notationdecl_parsetest.rb: Add tests that focus
+ public ID in external ID notation declaration.
+
+Wed Jul 31 22:01:24 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * parse.y: fix build error with bison-3.0.
+
+Wed Jul 31 21:58:53 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_notationdecl_parsetest.rb: Split test patterns.
+
+Wed Jul 31 21:42:33 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_notationdecl_parsetest.rb: Group tests.
+
+Wed Jul 31 21:37:51 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_notationdecl_mixin.rb (TestNotationDecl#test_name):
+ Move to ...
+ * test/rexml/test_notationdecl_parsetest.rb
+ (TestNotationDecl#test_name): ... here.
+
+Wed Jul 31 21:37:47 2013 Kouhei Sutou <kou@cozmixng.org>
+
+Wed Jul 31 21:31:49 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_notationdecl_parsetest.rb: Remove setup because it
+ doesn't share anything with other tests.
+
+Wed Jul 31 21:24:55 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_attributes_mixin.rb: Remove a needless shebang.
+ * test/rexml/test_notationdecl_mixin.rb: ditto.
+ * test/rexml/test_doctype.rb: ditto.
+ * test/rexml/test_xml_declaration.rb: ditto.
+ * test/rexml/test_changing_encoding.rb: ditto.
+
+Wed Jul 31 21:20:08 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_notationdecl_parsetest.rb: remove a needless shebang.
+
+Wed Jul 31 20:11:01 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * string.c (rb_str_rindex): fix bug introduced in r42269.
+ "".rindex("") should return 0.
+ (str_rindex): ditto.
+
+Wed Jul 31 19:55:33 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (MAX_BIG2STR_TABLE_ENTRIES): Use SIZEOF_SIZE_T.
+ (power_cache_get_power0): Add rb_bug call for too bit i argument.
+ (power_cache_get_power): Simplified.
+
+Wed Jul 31 18:32:25 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/uri/common.rb (URI.decode_www_form_component): Use String#b.
+
+Wed Jul 31 18:24:02 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * eval.c (rb_mod_refine, mod_using, top_using): don't show
+ warnings because Refinements are no longer experimental.
+ [ruby-core:55993] [Feature #8632]
+
+ * test/ruby/test_refinement.rb: related test.
+
+ * NEWS: fixes for the above change.
+
+Wed Jul 31 17:55:55 2013 Shota Fukumori <her@sorah.jp>
+
+ * lib/uri/common.rb (URI.decode_www_form_component):
+ Don't raise error when str includes multibyte characters.
+
+Wed Jul 31 17:45:39 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * string.c (rb_str_rindex): performance improvement by using
+ memrchr(3).
+
+Wed Jul 31 16:43:30 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * string.c (rb_str_rindex): refactoring and avoid to call str_nth() if
+ pos == 0.
+
+Wed Jul 31 14:41:36 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb: [DOC] Add a couple of notes on Hash as storage.
+ ref. [Feature #6589]
+
+Wed Jul 31 14:38:52 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb: [DOC] Fix example result. Hash is now ordered.
+
+Wed Jul 31 14:38:10 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb: [DOC] Use the term "sorted" instead of "ordered"
+ when mentioning SortSet.
+
+Wed Jul 31 12:18:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_struct): New structure.
+ (big2str_orig): Use big2str_struct.
+ (big2str_karatsuba): Ditto.
+ (rb_big2str1): Ditto.
+
+Wed Jul 31 12:02:16 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rubygems.rb: [DOC] typo in url patch by @Red54 [Fixes #369]
+ https://github.com/ruby/ruby/pull/369
+
+Wed Jul 31 07:09:07 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Import RubyGems from master as of commit 523551c
+ * test/rubygems: ditto.
+
+Tue Jul 30 22:21:54 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * test/ruby/test_hash.rb: add a test for enumeration order of Hash.
+
+Tue Jul 30 18:52:27 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#intersect?, Set#disjoint?): Add new methods for
+ testing if two sets have any element in common.
+ [ruby-core:45641] [Feature #6588] Based on the code by marcandre.
+
+Tue Jul 30 17:16:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (ruby__sfvextra): add QUOTE flag to escape unprintable
+ characters.
+
+Tue Jul 30 11:00:52 2013 Zachary Scott <e@zzak.io>
+
+ * ext/curses/extconf.rb: [DOC] nodoc to reduce Object pollution
+
+Tue Jul 30 08:19:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * sizes.c (Init_sizes): Define sizes only if the type actually exists.
+
+Mon Jul 29 22:55:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sizes.c (Init_sizes): define RbConfig::SIZEOF. [Feature #8568]
+
+Mon Jul 29 22:25:20 2013 Zachary Scott <e@zzak.io>
+
+ * ext/curses/curses.c: [DOC] Update location of samples
+ * samples/curses/*: Move Curses samples and refactor from mixin
+ The samples are included in rdoc for module and use of mixin is
+ confusing
+
+Mon Jul 29 22:16:11 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (LOG2_KARATSUBA_BIG2STR_DIGITS): Renamed from
+ LOG2_KARATSUBA_DIGITS.
+ (KARATSUBA_BIG2STR_DIGITS): Renamed from KARATSUBA_DIGITS.
+
+Mon Jul 29 22:04:45 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_compare_by_id): add function prototype.
+
+Mon Jul 29 21:53:41 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_compare_by_id): don't call rb_hash_rehash()
+ if self.compare_by_identity? == true.
+
+Mon Jul 29 21:29:48 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_assoc): performance improvement by replacing
+ compare function in RHASH(hash)->ntbl->type temporarily like r42224.
+ it falls back to rb_hash_foreach() if st_lookup() doesn't find the key.
+
+ * test/ruby/test_hash.rb: add a test for above.
+
+Mon Jul 29 21:15:30 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * test/ruby/test_lazy_enumerator.rb
+ (TestLazyEnumerator#test_initialize): Make sure
+ Enumerator::Lazy#initialize raises error if the object is
+ frozen. The check was performed by rb_ivar_set() before
+ rb_check_frozen() was added to enumerator_init().
+
+Mon Jul 29 21:06:42 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (enumerator_init): Add a frozenness check to
+ prevent a frozen Enumerator object from being reinitialized with
+ a different enumerable object. This is the least we should do,
+ and more fixes will follow. [Fixes GH-368] Patch by Kenichi
+ Kamiya.
+
+ * enumerator.c (generator_init): Ditto.
+
+Mon Jul 29 20:14:24 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_assoc): revert r42224. table->type->compare is
+ called only if hashes are matched.
+
+ * test/ruby/test_hash.rb: add a test to check using #== to compare.
+
+Mon Jul 29 17:00:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (yycompile): store file name as String to keep the encoding.
+
+ * parse.y (rb_parser_compile_string_path, rb_parser_compile_file_path):
+ new functions to pass file name as a String.
+
+ * parse.y (gettable_gen): return a copy of the original file name, not
+ a copy in filesystem encoding.
+
+ * vm_eval.c (eval_string_with_cref): use Qundef instead of "(eval)".
+
+Mon Jul 29 16:53:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_hash_initialize_copy): copy st_table type even if empty.
+ [ruby-core:56256] [Bug #8703]
+
+Mon Jul 29 16:34:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_hash_initialize_copy): clear old table before copy new
+ table.
+
+Mon Jul 29 16:34:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_hash_assoc): aggregate object can be initialized only
+ with link time constants.
+
+Mon Jul 29 14:54:44 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_assoc): performance improvement by replacing
+ compare function in RHASH(hash)->ntbl->type temporarily.
+
+Mon Jul 29 14:52:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (xsystem): expand environment variable in all macros not
+ expanded with RbConfig. [Bug #8702]
+
+ * test/mkmf/test_framework.rb (create_framework): replace all $@ not
+ only once.
+
+Mon Jul 29 06:54:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_pipe): use enum for compile time constants,
+ instead of const int for debugging.
+
+Mon Jul 29 00:11:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem): Specialized implementation added for
+ nx == 2 && ny == 2
+
+Sun Jul 28 20:28:41 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * io.c (io_getpartial): use rb_str_locktmp_ensure().
+ [ruby-core:56121] [Bug #8669]
+
+ * io.c (rb_io_sysread): ditto.
+
+ * test/ruby/test_io.rb: add tests for above.
+
+Sun Jul 28 20:10:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): should make static libraries for extensions
+ to be statically linked. [Bug #7948]
+
+Sun Jul 28 17:38:32 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * string.c: add internal API rb_str_locktmp_ensure().
+
+ * io.c (io_fread): use rb_str_locktmp_ensure().
+ [ruby-core:56121] [Bug #8669]
+
+ * test/ruby/test_io.rb: add a test for above.
+
+Sun Jul 28 13:04:39 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * io.c (interpret_seek_whence): support SEEK_DATA and SEEK_HOLE.
+ These are whences for lseek(2) supported by Linux since version 3.1.
+ [ruby-core:56123] [Feature #8671]
+
+ * test/ruby/test_io.rb: Add tests for above.
+
+Sun Jul 28 12:41:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (absint_numwords_generic): The char_bit variable changed
+ to static constant.
+
+Sun Jul 28 12:03:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: Constify bary_* functions.
+
+Sun Jul 28 11:12:07 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_absint_size): Declaration moved from
+ internal.h to calculate required buffer size to pack integers.
+ (rb_absint_numwords): Ditto.
+ (rb_absint_singlebit_p): Ditto.
+ [ruby-core:42813] [Feature #6065]
+
+Sun Jul 28 10:54:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_pipe): fix pipe name formatting. as "%x" may
+ not contain '0' at all, fill at fixed position instead.
+
+Sun Jul 28 00:35:14 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_size): Return the bignum "bytewise" size.
+ [ruby-core:55578] [Feature #8553]
+ This is accepted by matz on DevelopersMeeting20130727Japan.
+
+Sun Jul 28 00:07:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_integer_pack): Declaration moved from
+ internal.h.
+ (rb_integer_unpack): Ditto.
+ [ruby-core:42813] [Feature #6065]
+
+Fri Jul 26 23:18:13 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * NEWS: Add a new feature that REXML::Parsers::StreamParser
+ supports "entity" event.
+
+Fri Jul 26 23:14:31 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/streamparser.rb
+ (REXML::Parsers::StreamParser#parse): Add "entity" event support to
+ listener. [Bug #8689] [ruby-dev:47542]
+ Reported by Ippei Obayashi.
+ * test/rexml/test_stream.rb (StreamTester#entity): Add a test for
+ the above case.
+
+Fri Jul 26 23:05:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): separate numeric literal from succeeding
+ token, and treat 'e' as floating point number only if followed by
+ exponent part.
+
+Fri Jul 26 22:14:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_exec.h (CHECK_VM_STACK_OVERFLOW_FOR_INSN): surround with
+ do/while (0), and remove unnecessary casts.
+
+Fri Jul 26 20:12:07 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/syslog/lib/syslog/logger.rb (Syslog::Logger): Add facility
+ to Syslog::Logger. [Fixes GH-305] patch by Max Shytikov
+ https://github.com/ruby/ruby/pull/305
+
+Fri Jul 26 19:25:17 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_exec.h, tool/instruction.rb: not an error, but a BUG if stack
+ overflow checking failed just before/after the beginning of an
+ instruction. It should be treated as a BUG.
+ Please tell us if your code cause BUG with this problem.
+ This check will removed soon (for performance).
+
+Fri Jul 26 18:30:14 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (ary_memcpy): cast to int to suppress a warning.
+
+Fri Jul 26 18:21:58 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (ary_memcpy): try to enable optimization.
+ At least on my environments, I don't see any errors
+ with many trials. Please tell us if you find any GC bugs.
+
+Fri Jul 26 17:49:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/file.c (fix_string_encoding): fix target encoding. the
+ parameter `encoding' is not the target encoding but the original
+ encoding.
+
+Fri Jul 26 14:05:19 2013 Zachary Scott <e@zzak.io>
+
+ * ext/fiddle/*: [DOC] More doc on dlopen and RTLD_DEFAULT from r42184
+
+Fri Jul 26 13:08:53 2013 Zachary Scott <e@zzak.io>
+
+ * ext/fiddle/lib/fiddle.rb: [DOC] Document Fiddle.dlopen(nil)
+ * ext/fiddle/handle.c: [DOC] Document Fiddle::Handle.new(nil)
+
+Fri Jul 26 13:04:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_load_internal): use rb_load_file_str() to keep path
+ encoding.
+
+ * load.c (rb_require_safe): search in OS path encoding for Windows.
+
+ * ruby.c (rb_load_file_str): load file with keeping path encoding.
+
+ * win32/file.c (rb_file_load_ok): use WCHAR type API assuming incoming
+ path is encoded in UTF-8. [ruby-core:56136] [Bug #8676]
+
+ * file.c (rb_str_encode_ospath): simplify using rb_str_conv_enc().
+
+ * win32/file.c (fix_string_encoding): simplify with rb_str_conv_enc().
+
+ * win32/file.c (convert_mb_to_wchar): use bare pointer instead of
+ VALUE, and remove useless argument.
+
+Fri Jul 26 11:42:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * rational.c (f_round_common): Rational is expected to be returned by
+ Rational#*, but mathn.rb breaks that assumption. [ruby-core:56177]
+ [Bug #8687]
+
+Fri Jul 26 01:37:45 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/ruby.h: check defined(USE_RGENGC_LOGGING_WB_UNPROTECT)
+
+Fri Jul 26 01:21:41 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (rb_file_expand_path_internal): fix r42160; skip '~'.
+
+Thu Jul 25 17:53:18 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTP#connect): disable Nagle's algorithm on
+ HTTP connection. [ruby-core:56158] [Feature #8681]
+
+Thu Jul 25 17:49:42 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_to_s): convert closing parenthesis to the target encoding
+ if it is ASCII incompatible encoding. [ruby-core:56063] [Bug #8650]
+
+Thu Jul 25 17:21:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (is_obj_encoding): new macro to check if obj is an
+ Encoding. obj can be any type while is_data_encoding expects T_DATA
+ only.
+
+Thu Jul 25 17:17:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_expand_path_internal): should clear coderange after
+ copying user name as binary data.
+
+Thu Jul 25 16:17:55 2013 Koichi Sasada <ko1@atdot.net>
+
+ * encoding.c (check_encoding): Check T_DATA or not.
+ is_data_encoding(obj) assumes that `obj' is T_DATA.
+
+Thu Jul 25 13:06:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (dir_s_home): use rb_home_dir_of and rb_default_home_dir.
+
+ * file.c (rb_home_dir_of): split from rb_home_dir() for the home
+ directry of the given user, and the user name is a VALUE, not a bare
+ pointer. should raise if the user does not exist.
+
+ * file.c (rb_default_home_dir): split from rb_home_dir() for the home
+ directry of the current user.
+
+Thu Jul 25 12:32:11 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/openssl/ossl.c: support additional three thread synchronization
+ functions. [ruby-trunk - Bug #8386]
+
+Thu Jul 25 07:15:58 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Import RubyGems from master as of commit 4ff70cc
+ * test/rubygems: ditto.
+
+Wed Jul 24 20:57:44 2013 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_set_arguments): use RARRAY_RAWPTR() instead of
+ RARRAY_PTR() because there is no new reference.
+
+ * compile.c (iseq_set_exception_table): ditto.
+
+Wed Jul 24 19:49:54 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/generic.rb (find_proxy): raise BadURIError if the URI is
+ a relative URI. [Bug #8645]
+
+Wed Jul 24 18:56:06 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_expandarray): use RARRAY_RAWPTR() instead of
+ RARRAY_PTR() because there is no new reference.
+
+ * vm_insnhelper.c (vm_caller_setup_args): ditto.
+
+ * vm_insnhelper.c (vm_yield_setup_block_args): ditto.
+
+Wed Jul 24 18:40:11 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c, gc.c: move ary_unprotect_logging() into
+ rb_gc_unprotect_logging() which is general version
+
+ * include/ruby/ruby.h: add USE_RGENGC_LOGGING_WB_UNPROTECT
+ to enable.
+
+Wed Jul 24 17:37:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_expand_path_internal): preserve the file name
+ encoding in an exception message.
+
+Wed Jul 24 08:04:49 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/-ext-/tracepoint/test_tracepoint.rb: add GC on/off to count
+ GC events strictly.
+
+Tue Jul 23 23:19:24 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/extconf.rb (CRYPTO_THREADID): check exist or not.
+
+ * ext/openssl/ossl.c (ossl_thread_id): use rb_nativethread_self()
+ implemented at r42137 to allow threads which doesn't associated with
+ Ruby thread to use openssl functions.
+
+ * ext/openssl/ossl.c (Init_ossl_locks): If CRYPTO_THREADID is defined
+ (OpenSSL 1.0.0 or later has it) use CRYPTO_THREADID_set_callback()
+ instead of CRYPTO_set_id_callback() because its argument is
+ unsigned long; it may cause id collision on mswin64
+ whose sizeof(unsigned long) < sizeof(void*).
+ http://www.openssl.org/docs/crypto/threads.html
+
+ * ext/openssl/ossl.c (ossl_threadid_func): defined for above.
+
+Tue Jul 23 20:47:36 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: Move functions.
+
+Tue Jul 23 20:14:55 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_divmod): Add special cases for x < y easily detected
+ and nx == 2 && ny == 2.
+
+Tue Jul 23 19:48:38 2013 Koichi Sasada <ko1@atdot.net>
+
+ * thread_(pthread|win32).h: rename rb_thread_cond_t to
+ rb_nativethread_cond_t.
+
+ * thread.c, thread_pthread.c, thread_win32.c, vm_core.h: catch up
+ renaming.
+
+Tue Jul 23 19:44:32 2013 Koichi Sasada <ko1@atdot.net>
+
+ * thread_native.h: add rb_nativethread_self() which returns
+ current running native thread identifier.
+
+ * thread_[pthread|win32].c: implement rb_nativethread_self().
+
+Tue Jul 23 19:34:11 2013 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.h, thread_win32.h: rename rb_thread_id_t to
+ rb_nativethread_id_t.
+
+ * thread_pthread.c, vm_core.h: use rb_nativethread_id_t.
+
+Tue Jul 23 18:56:11 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/openssl/ossl.c: use system native (system provided)
+ thread locking APIs added by last commit.
+ This patch fixes [Bug #8386].
+ "rb_mutex_*" APIs control only "Ruby" threads.
+ Not for native threads.
+
+Tue Jul 23 18:44:15 2013 Koichi Sasada <ko1@atdot.net>
+
+ * thread_native.h: added.
+ Move native thread related lines from vm_core.h.
+ And declare several functions "rb_nativethread_lock_*",
+ manipulate locking.
+
+ * common.mk: add thread_native.h.
+
+ * thread.c: add functions "rb_nativethread_lock_*".
+
+ * thread.c, thread_[pthread,win32].[ch]: rename rb_thread_lock_t
+ to rb_nativethread_lock_t to make it clear that this lock is for
+ native threads, not for ruby threads.
+
+Tue Jul 23 16:14:57 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_before_sweep): fix spacing.
+
+Tue Jul 23 15:57:11 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (heap_get_freeobj): clear slot->freelist here.
+ This means that this slot doesn't have any free objects.
+ And store this slot with objspace->heap.using_slot.
+
+ * gc.c (gc_before_sweep): restore objspace->freelist
+ into objspace->heap.using_slot->freelist.
+ This means that using_slot has free objects which are
+ pointed from objspace->freelist.
+
+ * gc.c (gc_slot_sweep): do not need to clear slot->freelist.
+
+Tue Jul 23 09:34:49 2013 Zachary Scott <e@zzak.io>
+
+ * sample/drb/README*.rdoc: [DOC] migrate DRb sample READMEs to rdoc
+
+Tue Jul 23 09:28:05 2013 Zachary Scott <e@zzak.io>
+
+ * lib/drb/invokemethod.rb: [DOC] nodoc InvokeMethod18Mixin
+
+Tue Jul 23 08:44:37 2013 Eric Hodel <drbrain@segment7.net>
+
+ * ext/openssl/ossl_asn1.c (asn1time_to_time): Implement YYMMDDhhmmZ
+ format for ASN.1 UTCTime. [ruby-trunk - Bug #8664]
+ * test/openssl/test_asn1.rb: Test for the above.
+
+Tue Jul 23 08:11:32 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rexml/streamlistener.rb: [DOC] Fix examples in
+ REXML::StreamListener#entitydecl patch by Ippei Obayashi [Bug #8665]
+
+Tue Jul 23 07:44:59 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Import RubyGems from master as of commit b165260
+ * test/rubygems: ditto.
+
+Tue Jul 23 07:14:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mulsub_1xN): New function.
+ (bary_mul_toom3): Use bary_mulsub_1xN.
+
+Tue Jul 23 03:32:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (KARATSUBA_BALANCED): New macro.
+ (TOOM3_BALANCED): Ditto.
+ (bary_mul_balance_with_mulfunc): Use KARATSUBA_BALANCED and
+ TOOM3_BALANCED.
+ (rb_big_mul_balance): Relax a condition.
+ (rb_big_mul_karatsuba): Use KARATSUBA_BALANCED.
+ (rb_big_mul_toom3): Use TOOM3_BALANCED.
+ (bary_mul_karatsuba_branch): Use KARATSUBA_BALANCED.
+ (bary_mul_toom3_branch): Use TOOM3_BALANCED.
+
+Tue Jul 23 01:34:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem_mulsub): Extracted from bigdivrem1.
+ (bigdivrem1): Use bary_add.
+
+Mon Jul 22 18:39:52 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * string.c (rb_str_enumerate_chars): specify array capa
+ with str_strlen().
+
+ * string.c (rb_str_enumerate_codepoints): ditto.
+
+Mon Jul 22 18:01:33 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * string.c (rb_str_enumerate_chars): specify array capa.
+
+Mon Jul 22 17:24:14 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * string.c (rb_str_each_char_size): performance improvement by
+ using rb_str_length().
+
+Mon Jul 22 16:32:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (eval_string_with_cref): check by Check_TypedStruct
+ instead of rb_obj_is_kind_of.
+
+Mon Jul 22 13:19:22 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (ary_resize_capa): use RARRAY_RAWPTR() because
+ this code creates no new references.
+
+Mon Jul 22 12:58:18 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (ary_memfill): added.
+
+ * array.c (rb_ary_initialize): use ary_memfill().
+
+ * array.c (rb_ary_fill): ditto.
+
+ * array.c (rb_ary_slice_bang): use RARRAY_RAWPTR() because
+ this code creates no new references.
+
+Mon Jul 22 10:09:46 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_slot_sweep): need to add empty RVALUE as freeobj.
+
+Mon Jul 22 09:48:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (eval_string_with_cref): use the given file name unless
+ eval even if scope is given. additional fix for [Bug #8436].
+ based on the patch by srawlins at [ruby-core:56099] [Bug #8662].
+
+Mon Jul 22 09:24:19 2013 Kouji Takao <kouji@takao7.net>
+
+ * ext/readline/readline.c (Init_readline): added
+ Readline.delete_text. [ruby-dev:45789] [Feature #6626]
+ * ext/readline/extconf.rb: check for rl_delete_text() in Readline library.
+
+ Thanks, Nobuyoshi Nakada, for the patch.
+
+Mon Jul 22 03:15:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/date/date_parse.c (rfc2822_cb): check if wday is given, since it
+ can be omitted.
+
+Mon Jul 22 00:15:20 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_sq_fast): Refine expressions.
+
+Sun Jul 21 21:08:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul): Use simple multiplication if yl is small.
+ (rb_cstr_to_inum): Invoke bigsq instead of bigmul0.
+ (bigsq): Re-implemented.
+ (bigmul0): Invoke bigsq if two arguments are identical.
+
+Sun Jul 21 09:58:19 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul_toom3): New function based on bigmul1_toom3.
+ (bary_mul_toom3_branch): Call bary_mul_toom3.
+ (rb_big_mul_toom3): Ditto.
+ (bigmul1_toom3): Removed.
+ (big_real_len): Ditto.
+ (big_split): Ditto.
+ (big_split3): Ditto.
+
+Sun Jul 21 08:12:16 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * proc.c (proc_to_s): use PRIsVALUE to preserve the result encoding.
+
+Sun Jul 21 03:36:18 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * hash.c (rb_hash_flatten): use NUM2INT to raise TypeError on 32bit
+ platform. it's introduced by r42039
+
+Sun Jul 21 01:07:45 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * common.mk (help): Fix environment variable name and argument.
+ Actually it can also be a directory or any argument for
+ test/unit runner. [Fixes GH-363]
+
+Sat Jul 20 22:44:50 2013 Zachary Scott <e@zzak.io>
+
+ * common.mk: Document running a single test [Fixes GH-363]
+ Patch by Avdi Grimm https://github.com/ruby/ruby/pull/363
+
+Sat Jul 20 22:39:56 2013 Zachary Scott <e@zzak.io>
+
+ * sample/*: whitespace patch by Sergio Campama [Fixes GH-364]
+ https://github.com/ruby/ruby/pull/364
+
+Sat Jul 20 22:33:13 2013 Zachary Scott <e@zzak.io>
+
+ * doc/regexp.rdoc: [DOC] Fix typo in example [Fixes GH-365]
+ Patch by Juanito Fatas https://github.com/ruby/ruby/pull/365
+
+Sat Jul 20 17:46:03 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_succ): add missing case NEIGHBOR_WRAPPED.
+ r42078 caused buggy behavior like "\xFF".b -> "\x01\xFF".b
+
+Sat Jul 20 15:22:38 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (rb_ary_resize): use simple memcpy because there are no new
+ references.
+
+Sat Jul 20 15:02:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * safe.c (ruby_safe_level_4_warning): define for old extension
+ libraries. [Bug #8652]
+
+Sat Jul 20 14:38:00 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (ary_make_shared): make shared array shady.
+ Making non-shady shared array causes SEGV (see rubyci).
+ It seems a bug around shared array.
+
+Sat Jul 20 12:14:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (enc_succ_char, enc_pred_char): consider wchar case.
+ [ruby-core:56071] [Bug #8653]
+
+ * string.c (rb_str_succ): do not replace with invalid char.
+
+ * encoding.c (rb_enc_code_to_mbclen): add new function which returns
+ mbclen from codepoint like as rb_enc_codelen() but 0 for invalid
+ char.
+
+ * include/ruby/encoding.h (rb_enc_code_to_mbclen): declaration and
+ shortcut macro.
+
+Fri Jul 19 21:59:12 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: declare type_name() at the beginning of file.
+
+Fri Jul 19 21:35:09 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c: reduce shady operations.
+
+ * array.c (rb_ary_modify, ary_make_partial, rb_ary_splice,
+ rb_ary_replace, rb_ary_eql, rb_ary_compact_bang):
+ use RARRAY_RAWPTR() instead of RARRAY_PTR().
+
+ * array.c (rb_ary_shift): use RARRAY_PTR_USE() without WB because
+ there are not new relations.
+
+ * array.c (ary_ensure_room_for_unshift): ditto.
+
+ * array.c (rb_ary_sort_bang): ditto.
+
+ * array.c (rb_ary_delete_at): ditto.
+
+ * array.c (rb_ary_reverse_m): use RARRAY_RAWPTR() because
+ there are not new relations.
+
+Fri Jul 19 20:58:20 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c: reduce shade operations.
+
+ * array.c (rb_ary_modify): use RARRAY_RAWPTR().
+
+ * array.c (ary_make_substitution, rb_ary_s_create, ary_make_partial,
+ rb_ary_splice, rb_ary_resize, rb_ary_rotate_m, rb_ary_times):
+ use ary_memcpy().
+
+Fri Jul 19 19:55:28 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (ary_mem_clear): added. This operation doesn't need WB
+ because this operation creates a reference to Qnil.
+
+ * array.c (ary_make_shared, rb_ary_store, rb_ary_shift_m,
+ rb_ary_splice, rb_ary_resize, rb_ary_fill): use ary_mem_clear()
+ instead of rb_mem_clear().
+
+ * array.c (ary_make_shared): use RARRAY_RAWPTR() instead of RARRAY_PTR().
+
+Fri Jul 19 19:18:51 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c: fix commit miss.
+ RGENGC_UNPROTECT_LOGGING should be 0.
+
+Fri Jul 19 19:15:30 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (rb_ary_resurrect): use RARRAY_RAWPTR() because there is no
+ writing.
+
+ * array.c (rb_ary_new_from_values): use ary_memcpy().
+
+Fri Jul 19 19:07:31 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (ary_memcpy): add a function to copy VALUEs into ary
+ with write barrier. If ary is promoted, use write barrier correctly.
+
+ * array.c (rb_ary_cat, rb_ary_unshift_m, rb_ary_dup,
+ rb_ary_sort_bang, rb_ary_replace, rb_ary_plus): use ary_memcpy().
+
+Fri Jul 19 15:32:57 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (rb_ary_store): use RARRAY_PTR_USE() instead of RARRAY_PTR().
+ Clearing memory space doesn't need WBs.
+
+Fri Jul 19 15:19:37 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (ary_ensure_room_for_push): use RARRAY_RAWPTR() instead of
+ RARRAY_PTR. In this code, there are no "write" operation.
+
+ * array.c (rb_ary_equal): ditto.
+
+ * array.c (recursive_equal): ditto.
+
+Fri Jul 19 15:09:22 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c, internal.h (rb_gc_writebarrier_remember_promoted): add a new
+ function to remember an specified object. This api is only
+ experimental (strongly depend on WB/rgengc strategy).
+
+Fri Jul 19 14:56:00 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (ary_unprotect_logging): use (void *) for first parameter
+ because VALUE is not defined before including ruby/ruby.h.
+
+Fri Jul 19 14:19:48 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * ext/pathname/pathname.c (path_inspect): use PRIsVALUE to preserve
+ the result encoding.
+
+Fri Jul 19 12:35:41 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/socket/test_tcp.rb (test_initialize_failure): Use EADDRNOTAVAIL
+ to test an error message generated by bind() failure.
+
+Fri Jul 19 11:27:38 2013 Zachary Scott <e@zzak.io>
+
+ * lib/racc/parser.rb: [DOC] Capitalize "Ruby" in documentation
+ Patch by Dave Worth https://github.com/ruby/ruby/pull/341
+
+Fri Jul 19 11:26:28 2013 Zachary Scott <e@zzak.io>
+
+ * ext/psych/lib/psych*: [DOC] Capitalize "Ruby" in documentation
+ Patch by Dave Worth https://github.com/ruby/ruby/pull/341
+
+Fri Jul 19 11:25:12 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rdoc/*: [DOC] Capitalize "Ruby" in documentation
+ Patch by Dave Worth https://github.com/ruby/ruby/pull/341
+
+Fri Jul 19 11:23:55 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rubygems*: [DOC] Capitalize "Ruby" in documentation
+ Patch by Dave Worth https://github.com/ruby/ruby/pull/341
+
+Fri Jul 19 11:16:54 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#to_set): Define Set#to_set so that aSet.to_set
+ returns self. [Fixes GH-359]
+
+Fri Jul 19 11:10:23 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rake/*: [DOC] Capitalize "Ruby" in documentation
+ Patch by Dave Worth https://github.com/ruby/ruby/pull/341
+
+Fri Jul 19 01:04:14 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/-test-/bignum/intpack.c: Renamed from ext/-test-/bignum/pack.c.
+ (Init_intpack): Renamed from Init_pack.
+ Reported by Naohisa Goto. [ruby-dev:47526] [Bug #8655]
+
+Fri Jul 19 00:54:27 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * test/ruby/test_array.rb (test_count): add a test case for #count
+ with an argument. See Bug #8654.
+
+Thu Jul 18 23:45:06 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_eql): compare RARRAY_PTR() for performance
+ improvement in case of that self and other are shared.
+
+Thu Jul 18 22:46:42 2013 Zachary Scott <e@zzak.io>
+
+ * lib/cgi.rb: [DOC] Capitalize "Ruby" in documentation [Fixes GH-341]
+ Patch by Dave Worth https://github.com/ruby/ruby/pull/341
+ * lib/webrick.rb: ditto
+ * lib/scanf.rb: ditto
+ * lib/xmlrpc/config.rb: ditto
+ * lib/resolv.rb: ditto
+ * lib/e2mmap.rb: ditto
+ * lib/fileutils.rb: ditto
+ * lib/mkmf.rb: ditto
+ * lib/cgi/session.rb: ditto
+ * lib/yaml.rb: ditto
+ * lib/erb.rb: ditto
+ * lib/irb.rb: ditto
+ * lib/tracer.rb: ditto
+ * lib/net/http.rb: ditto
+ * ext/syslog/lib/syslog/logger.rb: ditto
+ * sample/pty/expect_sample.rb: ditto
+
+Thu Jul 18 21:30:50 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_sq_fast): Specialize the last iteration of the
+ outer loop.
+ (bigfixize): A condition simplified.
+
+Thu Jul 18 21:15:41 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_equal): compare RARRAY_PTR() for performance
+ improvement in case of that self and other are shared.
+
+Thu Jul 18 20:44:51 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_fill): use memfill().
+
+Thu Jul 18 20:35:14 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * array.c (rb_ary_count): check length to avoid SEGV
+ while iterating. Remove other pointer loop when arg is given.
+
+ * test/ruby/test_array.rb (test_count): add test for bug.
+ [ruby-core:56072] [Bug #8654]
+
+Thu Jul 18 18:14:36 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * array.c (rb_ary_count): iterate items appropriately.
+ [Bug #8654]
+
+Thu Jul 18 17:35:41 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_flatten): performance improvement by not using
+ rb_hash_to_a() to avoid array creation with rb_assoc_new().
+
+Thu Jul 18 16:16:17 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c: add logging feature for RGenGC's write barrier unprotect
+ event.
+
+Thu Jul 18 15:45:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (RUBY_SAFE_LEVEL_CHECK): make only
+ rb_set_safe_level(4) an error always but make rb_secure(4) an error
+ only in the core. [ruby-dev:47517] [Bug #8652]
+
+Thu Jul 18 15:42:01 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: fix spell miss.
+
+Thu Jul 18 15:11:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (ruby_safe_level_4): get rid of special
+ character. [ruby-dev:47512] [misc #8646]
+
+Thu Jul 18 14:51:39 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (ary_alloc): slim setup process.
+
+Thu Jul 18 14:37:57 2013 Koichi Sasada <ko1@atdot.net>
+
+ * string.c (str_alloc): no need to clear RString (already cleared).
+
+Thu Jul 18 12:57:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (BDIGITS_ZERO): Defined.
+ (bary_pack): Use BDIGITS_ZERO.
+ (bary_unpack): Ditto.
+ (bary_mul_single): Ditto.
+ (bary_mul_normal): Ditto.
+ (bary_sq_fast): Ditto.
+ (bary_mul_balance_with_mulfunc): Ditto.
+ (bary_mul_precheck): Ditto.
+ (bary_mul_toom3_branch): Ditto.
+ (rb_cstr_to_inum): Ditto.
+ (big_shift3): Ditto.
+ (bigmul1_toom3): Ditto.
+ (bary_divmod): Ditto.
+
+Thu Jul 18 06:30:02 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: rename gc related functions with prefix "gc_".
+ * before_gc_sweep() -> gc_before_sweep().
+ * after_gc_sweep() -> gc_after_sweep().
+ * lazy_sweep() -> gc_lazy_sweep().
+ * rest_sweep() -> gc_rest_sweep().
+ * slot_sweep() -> gc_slot_sweep().
+
+ * gc.c: rename a heap management function with prefix "heap_".
+ * get_freeobj() -> heap_get_freeobj().
+
+ * gc.c: rename markable_object_p() to is_markable_object().
+
+Wed Jul 17 22:57:40 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (delete_if_i): use ST_DELETE.
+
+Wed Jul 17 22:34:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: An static assertion for relation of SIZEOF_LONG and
+ SIZEOF_BDIGITS is added.
+ (bary_mul_precheck): Reduce comparisons.
+ (bary_mul): Invoke bary_sq_fast or bary_mul1 if the bignum size is
+ small.
+ (bigfixize): Resize the argument bignum here.
+ (bignorm): Don't call bigtrunc after bigfixize.
+
+Wed Jul 17 22:13:26 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_replace): performance improvement by using
+ st_copy().
+
+Wed Jul 17 17:19:54 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: rename heap management functions with prefix "heap_".
+ * allocate_sorted_array() -> heap_allocate_sorted_array().
+ * slot_add_freeobj() -> heap_slot_add_freeobj().
+ * assign_heap_slot() -> heap_assign_slot().
+ * add_heap_slots() -> heap_add_slots().
+ * init_heap() -> heap_init().
+ * set_heap_increment() -> heap_set_increment().
+
+ * gc.c (initial_expand_heap): inlined in rb_gc_set_params().
+
+Wed Jul 17 17:12:23 2013 Matthew M. Boedicker <matthewm@boedicker.org>
+
+ * hash.c (env_fetch): Add key name to message on ENV.fetch KeyError,
+ as well as Hash#fetch. [ruby-core:56062] [Feature #8649]
+
+Wed Jul 17 15:59:33 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: catch up last changes for debugging/checking mode.
+
+Wed Jul 17 15:50:10 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_objspace_free): free slot itself.
+
+ * gc.c (objspace_each_objects): fix condition.
+ Use slot->body instead of slot.
+
+ * gc.c (count_objects): use "slot" variable.
+
+Wed Jul 17 15:21:10 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (unlink_heap_slot): fix memory leak.
+ free slot itself at free_heap_slot().
+
+ Reproduce-able code is here:
+ N1 = 100_000; N2 = 1_000_000
+ N1.times{ary = []; N2.times{ary << ''}}
+ Maybe this problem is remaining in Ruby 2.0.0.
+
+ * gc.c (unlink_heap_slot): remove not working code.
+
+Wed Jul 17 14:31:13 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: re-design the heap structure.
+
+ (1) The heap is consists of a set of slots.
+ (2) Each "slot" has a "slot_body".
+ slot::start and slot::limit specify RVALUE beginning address
+ and number of RVALUE in a "slot_body".
+ (3) "slot_body" contains a pointer to slot (slot_body::header::slot)
+ and an array of RVALUE.
+ (4) heap::sorted is an array of "slots", sorted by an address of
+ slot::body.
+
+ See https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/GC_design
+ for more details (figure).
+
+ * gc.c: Avoid "heaps" terminology. It is ambiguous.
+
+Wed Jul 17 13:29:16 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: fix heaps_header and heaps_slot to reduce memory consumption.
+ (1) move heaps_header::start and limit to heaps_slot.
+ (2) remove heaps_header::end which can be calculated by start+limit.
+
+ * gc.c: catch up above change.
+
+Wed Jul 17 12:30:05 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/st.h (st_strcasecmp): Macro defined for compatibility.
+ (st_strncasecmp): Ditto.
+
+Wed Jul 17 11:57:45 2013 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/util.rb (CGI::Util#escape, unescape): Avoid use of regexp
+ special global variable. [Feature #8648] Thanks to fotos.
+
+Wed Jul 17 11:57:10 2013 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/erb.rb (ERB::Util#url_encode): Avoid use of regexp special global
+ variable. [Feature #8648] Thanks to fotos.
+
+Wed Jul 17 08:12:41 2013 Tanaka Akira <akr@fsij.org>
+
+ * st.c (st_locale_insensitive_strcasecmp): Renamed from st_strcasecmp.
+ (st_locale_insensitive_strncasecmp): Renamed from st_strncasecmp.
+
+ * include/ruby/st.h: Follow above changes.
+
+ * include/ruby/ruby.h: Ditto.
+
+Wed Jul 17 00:14:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigmul1_toom3): Use bigdivrem_single instead of bigdivrem.
+ (big_three): Removed.
+ (Init_Bignum): Don't initialize big_three.
+
+Tue Jul 16 21:46:03 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * configure.in: revert r42008. strcasecmp() uses the current locale.
+
+ * include/ruby/ruby.h: ditto.
+
+ * st.c (st_strcasecmp): ditto.
+
+Tue Jul 16 21:07:04 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * configure.in: check strcasecmp().
+
+ * include/ruby/ruby.h: use strcasecmp() as st_strcasecmp() if it
+ exists.
+
+ * st.c (st_strcasecmp): define the function only if strcasecmp()
+ doesn't exist.
+
+Tue Jul 16 20:21:28 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigsq): Renamed from bigsqr.
+
+Tue Jul 16 19:42:08 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (USHORT): Unused macro removed.
+
+Tue Jul 16 19:18:51 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: slim a path of newobj_of().
+
+ * gc.c (objspace): add a new field objspace::freelist, which contains
+ available RVALUEs.
+
+ * gc.c (newobj_of): simply call new function `get_freeobj()'.
+ get_freeobj() returns objspace::freelist. If objspace::freelist
+ is not available, refill objspace::freelist with a slot pointed by
+ objspace::heap::free_slots.
+
+ * gc.c (before_gc_sweep): clear objspace::freelist.
+
+ * gc.c (slot_sweep): clear slot::freelist.
+
+ * gc.c (heaps_prepare_freeslot): renamed to heaps_prepare_freeslot.
+
+ * gc.c (unlink_free_heap_slot): remove unused function.
+
+ * gc.c (rb_free_const_table): remove unused function.
+
+Tue Jul 16 19:05:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big_shift3): Big shift width is not a problem for right
+ shift.
+
+Tue Jul 16 18:50:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_count): [DOC] fix typo. Array#count uses ==, not
+ ===. a question at asakusa.rb ML.
+
+Tue Jul 16 18:35:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul_karatsuba): Avoid duplicate calculation when
+ squaring.
+ (bary_mul_toom3_branch): Ditto.
+
+Tue Jul 16 17:43:22 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (link_free_heap_slot): removed.
+
+ * gc.c (slot_sweep): use `heaps_add_freeslot' instead of
+ `link_free_heap_slot'.
+
+ * gc.c (assign_heap_slot): use local variable `slot' instead of
+ `heaps'.
+
+Tue Jul 16 17:21:39 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (assign_heap_slot): refactoring variable names.
+
+ * gc.c (slot_add_freeobj): added.
+
+ * gc.c (heaps_add_freeslot): added.
+
+ * gc.c (finalize_list, rb_gc_force_recycle, slot_sweep): use
+ `slot_add_freeobj' instead of modifying linked list directly.
+
+Tue Jul 16 16:30:58 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (lazy_sweep): refactoring.
+
+Tue Jul 16 13:32:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (enc_set_index): since r41967, old terminator is dealt
+ with in str_fill_term(). should not consider it here because this
+ function is called before any encoding is set.
+
+Tue Jul 16 11:12:03 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * proc.c (rb_block_arity): raise ArgumentError if no block given.
+
+Tue Jul 16 08:15:22 2013 Zachary Scott <e@zzak.io>
+
+ * ext/bigdecimal/lib/bigdecimal/util.rb: [DOC] document top-level
+ classes from BigDecimal utils native extensions
+
+Tue Jul 16 03:23:03 2013 Zachary Scott <e@zzak.io>
+
+ * numeric.c: [DOC] improve rdoc formatting for parameters and links
+
+Mon Jul 15 14:40:00 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_big2str0): Deprecated.
+
+ * bignum.c (rb_big2str1): Renamed from rb_big2str0.
+ (rb_big2str0): Deprecated wrapper for rb_big2str1.
+ (rb_big2str): Invoke rb_big2str1 instead of rb_big2str0.
+
+Mon Jul 15 14:13:02 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * struct.c (rb_struct_each_pair): use rb_yield_values(2, key, value)
+ instead of rb_yield(rb_assoc_new(key, value)) if rb_block_arity()
+ is greater than 1.
+
+Mon Jul 15 13:46:26 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: Add static assertions.
+
+Mon Jul 15 13:36:02 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_each_pair): performance improvement by using
+ rb_block_arity().
+
+Mon Jul 15 13:15:37 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * proc.c (rb_block_arity): create internal API rb_block_arity().
+ it returns arity of given block.
+
+Mon Jul 15 13:07:27 2013 Yuki Yugui Sonoda <yugui@yugui.jp>
+
+ * lib/prime.rb (Prime::EratosthenesGenerator,
+ Prime::EratosthenesSieve): New implementation by
+ robertjlooby <robertjlooby AT gmail.com>.
+
+ * test/test_prime.rb: updated with new method name
+
+Mon Jul 15 11:32:46 2013 Zachary Scott <e@zzak.io>
+
+ * numeric.c (rb_cNumeric): [DOC] Added comment for Numeric to fix doc
+
+Mon Jul 15 11:24:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (maxpow_in_bdigit_dbl): Useless #if removed.
+
+Mon Jul 15 11:10:46 2013 Zachary Scott <e@zzak.io>
+
+ * bignum.c (rb_big_coerce): [DOC] Add docs for Bignum#coerce
+ Based on patch by Juanito Fatas [Fixes GH-360]
+ https://github.com/ruby/ruby/pull/360
+
+Mon Jul 15 10:56:01 2013 Zachary Scott <e@zzak.io>
+
+ * thread.c (mutex_sleep): [DOC] Awake thread will reacquire lock
+ By Tim Abdulla [Fixes GH-342] https://github.com/ruby/ruby/pull/342
+
+Mon Jul 15 10:45:09 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (nlz16): Use __builtin_clz if possible.
+ (nlz32): Use __builtin_clz or __builtin_clzl if possible.
+ (nlz64): Use __builtin_clzl or __builtin_clzll if possible.
+ (nlz128): Use __builtin_clzll if possible.
+
+ * configure.in: Check __builtin_clz, __builtin_clzl and
+ __builtin_clzll.
+
+Mon Jul 15 09:39:07 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (power_cache_get_power): Use bitsize instead of ceil_log2.
+ (ones): Removed.
+ (next_pow2): Removed.
+ (floor_log2): Removed.
+ (ceil_log2): Removed.
+
+ * configure.in (__builtin_popcountl): Don't check.
+
+Mon Jul 15 02:47:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * localeinit.c (rb_locale_charmap, Init_enc_set_filesystem_encoding):
+ move from encoding.c.
+
+ * miniinit.c (rb_locale_charmap, Init_enc_set_filesystem_encoding):
+ define miniruby specific functions only.
+
+Mon Jul 15 02:32:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_init): no longer needs NO_PRESERVED_ENCODING.
+
+ * encoding.c (enc_inspect): defer loading autoloaded encoding.
+
+ * encoding.c (enc_check_encoding): use is_data_encoding() to check
+ type consistently.
+
+ * encoding.c (must_encoding): return rb_encoding* instead of encoding
+ index.
+
+ * encoding.c (enc_check_encoding): use is_data_encoding() to check
+ type consistently.
+
+ * encoding.c (must_encoding): return rb_encoding* instead of encoding
+ index.
+
+Mon Jul 15 02:21:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_fill_term): consider old terminator length, and should
+ not use rb_enc_ascget since it depends on the current encoding which
+ may not be compatible with the new terminator. [Bug #8634]
+
+ * encoding.c (enc_inspect): use PRIsVALUE to preserve the result
+ encoding.
+
+Sun Jul 14 23:21:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Check __builtin_popcountl, __builtin_bswap32 and
+ __builtin_bswap64.
+
+ * internal.h (swap32): Use the configure result for the condition to
+ use __builtin_bswap32.
+ (swap64): Use the configure result for the condition to use
+ __builtin_bswap64.
+
+ * bignum.c (ones): Use the configure result for the condition to use
+ __builtin_popcountl.
+ (bary_unpack_internal): Use appropriate types for swap argument.
+
+Sun Jul 14 22:21:11 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_subb): Support xn < yn.
+ (bigsub_core): Removed.
+ (bigsub): Don't compare before subtraction. Just subtract and
+ get the two's complement if the subtraction causes a borrow.
+
+Sun Jul 14 00:36:03 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (DIGSPERLONG): Unused macro removed.
+ (DIGSPERLL): Ditto.
+
+Sun Jul 14 00:32:51 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_aref): Less scan when the number is negative.
+
+Sun Jul 14 00:17:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big_shift): Avoid signed integer overflow.
+
+Sun Jul 14 00:14:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul_precheck): Use bary_small_lshift or
+ bary_mul_normal if xl is 1.
+
+Sat Jul 13 22:58:16 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big_shift3): New function.
+ big_lshift and big_rshift are merged.
+ (big_shift2): New function.
+ (big_lshift): Use big_shift3.
+ (big_rshift): Ditto.
+ (check_shiftdown): Removed.
+ (rb_big_lshift): Use big_shift2 and big_shift3.
+ (rb_big_rshift): Ditto.
+ (big_lshift): Removed.
+ (big_rshift): Ditto.
+
+Sat Jul 13 15:51:38 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_small_lshift): Use size_t instead of long.
+ (bary_small_rshift): Ditto.
+
+Sat Jul 13 15:33:33 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_small_lshift): Functions moved to remove
+ declaration.
+ (bary_small_rshift): Ditto.
+
+Sat Jul 13 12:27:34 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_associate_index): fill new terminator length, not
+ old one.
+
+Sat Jul 13 12:24:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/win32: move from ext/dl and ext/fiddle. since ext/extmk.rb
+ builds extensions in alphabetical order, compiled?('fiddle') under
+ ext/dl makes no sense.
+
+Sat Jul 13 09:26:09 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (biglsh_bang): Removed.
+ (bigrsh_bang): Ditto.
+ (bigmul1_toom3): Use bary_small_lshift and bary_small_rshift.
+
+Sat Jul 13 01:04:43 2013 Zachary Scott <e@zzak.io>
+
+ * lib/rubygems/psych_additions.rb: Ignore Psych docs here
+
+Fri Jul 12 18:10:46 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/fiddle/win32/lib/win32/registry.rb
+ (Win32::Registry::API#make_wstr): same as r41922.
+
+Fri Jul 12 16:28:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_associate_index): refill the terminator if it
+ becomes longer than before. [ruby-dev:47500] [Bug #8624]
+
+ * string.c (str_null_char, str_fill_term): get rid of out of bound
+ access.
+
+ * string.c (rb_str_fill_terminator): add a parameter for the length of
+ new terminator.
+
+Fri Jul 12 11:26:25 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_reject_bang): do not call rb_hash_foreach() if RHash
+ has ntbl and it is empty.
+
+Fri Jul 12 11:17:41 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (recursive_hash): use RHASH_SIZE() to check hash size.
+
+Fri Jul 12 00:20:00 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_size): use RHASH_SIZE().
+
+Fri Jul 12 00:08:24 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_values): set array capa to RHASH_SIZE().
+
+Thu Jul 11 23:54:45 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * hash.c (rb_hash_keys): set array capa to RHASH_SIZE().
+
+Thu Jul 11 21:30:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_pow): undef pow to get rid of infinite
+ recursive call. re-fix [Bug #8495]. [ruby-core:55923] [Bug #8621]
+
+Thu Jul 11 20:18:13 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/win32/lib/win32/registry.rb (Win32::Registry::API#make_wstr):
+ remove workaround to append WCHAR terminator.
+
+ * transcode.c (str_encode_associate): fill terminator after conversion.
+
+ * string.c (rb_enc_str_new, rb_str_set_len, rb_str_resize): fill
+ minimum length of the encoding as the terminator.
+
+ * string.c (str_buf_cat, rb_str_buf_append, rb_str_splice_0): ditto.
+
+ * string.c (str_make_independent_expand, rb_str_modify_expand): make
+ the capacity enough for multi-byte terminator.
+
+ * string.c (rb_string_value_cstr): fill minimum length of the encoding
+ as the terminator.
+
+ * string.c (rb_string_value_cstr): check null char in char, not in
+ byte.
+
+Thu Jul 11 14:48:35 2013 Zachary Scott <e@zzak.io>
+
+ * array.c: Replace confusing example for #reverse_each in overview
+ Patch by Earl St Sauver [Fixes documenting-ruby/ruby-12]
+ https://github.com/documenting-ruby/ruby/pull/12
+
+Thu Jul 11 14:22:37 2013 Zachary Scott <e@zzak.io>
+
+ * test/drb/ut_eq.rb: Use localhost for drb tests [Bug #7311]
+ Patch by Vit Ondruch [ruby-core:49101]
+ * test/drb/ut_array.rb: ditto
+ * test/drb/ut_array_drbssl.rb: ditto
+
+Thu Jul 11 13:48:03 2013 Zachary Scott <e@zzak.io>
+
+ * sprintf.c: Fix typo patch by @hynkle [Fixes GH-357]
+ https://github.com/ruby/ruby/pull/357
+
+Thu Jul 11 13:00:34 2013 Zachary Scott <e@zzak.io>
+
+ * lib/securerandom.rb: Refactor conditions by Rafal Chmiel
+ [Fixes GH-326] https://github.com/ruby/ruby/pull/326
+
+Thu Jul 11 12:04:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: Don't use toom3 after once karatsuba is chosen.
+ (mulfunc_t): New type.
+ (bary_mul_toom3_start): Renamed from bary_mul.
+ (bary_mul_karatsuba_start): Renamed from bary_mul.
+ (bary_mul_balance_with_mulfunc): Renamed from bary_mul_balance and
+ new argument, mulfunc, is added.
+ (rb_big_mul_balance): Invoke bary_mul_balance_with_mulfunc with
+ bary_mul_toom3_start.
+ (bary_mul_karatsuba): Invoke bary_mul_karatsuba_start instead of
+ bary_mul.
+ (bary_mul_precheck): Extracted from bary_mul.
+ (bary_mul_karatsuba_branch): Extracted from bary_mul.
+ (bary_mul_karatsuba_start): New function to call bary_mul_precheck
+ and bary_mul_karatsuba_branch.
+ (bary_mul_toom3_branch): Extracted from bary_mul.
+ (bary_mul_toom3_start): New function to call bary_mul_precheck and
+ bary_mul_toom3_branch.
+ (bary_mul): Just call bary_mul_toom3_start.
+ Arguments for work memory are removed.
+ (rb_cstr_to_inum): Follow the bary_mul change.
+ (bigmul0): Ditto.
+
+Thu Jul 11 10:46:38 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/probes_to_wiki.rb: fix usage comment. use Enumerable#grep
+ which yields each elements to reduce unnecessary array.
+
+Thu Jul 11 10:09:18 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * process.c (rb_daemon): daemon(3) is implemented with fork(2).
+ Therefore it needs rb_thread_atfork(). (and revert r41903)
+
+Thu Jul 11 03:22:10 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * tool/probes_to_wiki.rb: adding a script to convert probes.d to wiki
+ format for easy wiki updates.
+
+Thu Jul 11 00:54:07 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * man/ri.1: Incorrect use of .Dd macro [Bug #8620] by Tristan Hill
+
+Thu Jul 11 00:48:29 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/delegate.rb: Add example for __setobj__ and __getobj__
+ [Bug #8615] Patch by Caleb Thompson
+
+Wed Jul 10 23:29:22 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/logger.rb: Use :call-seq: for method signature rdoc
+
+Wed Jul 10 23:23:18 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/logger.rb (#add): Remove incorrect rdoc for return value
+ [Bug #8567] Reported by Tim Pease.
+
+Wed Jul 10 23:12:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_subpos): make public function.
+
+Wed Jul 10 22:44:19 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: Add a static assertion for RBIGNUM_EMBED_LEN_MAX.
+
+Wed Jul 10 22:31:25 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * string.c (rb_str_index): cache single byte flag and some
+ cosmetic changes.
+
+Wed Jul 10 22:03:27 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_2comp): Don't use bary_plus_one.
+ (bary_add_one): Replaced by the implementation of bary_plus_one.
+
+Wed Jul 10 20:48:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (sizeof_bdigit_dbl): check sizeof(BDIGIT_DBL).
+
+ * internal.h (STATIC_ASSERT): move from enum.c.
+
+Wed Jul 10 20:08:21 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (SIZEOF_BDIGIT_DBL): Add a ifdef guard for test.
+
+Wed Jul 10 14:18:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (fork_daemon): kill the other threads all and abandon the
+ kept mutexes.
+
+Wed Jul 10 11:35:36 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/net/http/test_http.rb (TestNetHTTP_v1_2#test_get,
+ TestNetHTTP_v1_2_chunked#test_get): shouldn't check
+ HttpResponse#decode_content if Zlib is not available.
+ ko1 complained via IRC.
+
+Wed Jul 10 10:20:07 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/rbinstall.rb: always require rubygems to stabilize rubygems
+ related status like whether Gem::Specification is defined or not.
+
+ * tool/rbinstall.rb (Gem::Specification.unresolved_deps): define stub.
+
+Wed Jul 10 08:21:15 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Import RubyGems 2.1
+ * test/rubygems: Ditto.
+
+Wed Jul 10 07:34:34 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/ext/ext_conf_builder.rb: Remove siteconf file after
+ building the gem.
+ * test/rubygems/test_gem_ext_ext_conf_builder.rb: Test for the above.
+
+ * lib/rubygems/psych_tree.rb (module Gem): Add backward compatibility
+ for r41148
+
+ * test/rubygems/test_gem_package.rb: Add backward compatibility for
+ double-slash elimination.
+
+Wed Jul 10 06:22:27 2013 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_parse.c (date_zone_to_diff): [ruby-core:55831].
+
+Wed Jul 10 00:41:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul): x*1 is x.
+
+Tue Jul 9 22:24:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul1): No need to invoke MEMZERO at last.
+ (bary_mul_single): Invoke MEMZERO here.
+
+Tue Jul 9 21:40:01 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_text.rb: Add missing tests for Text#<<.
+ Reported by nagachika. Thanks!!!
+
+Tue Jul 9 18:02:38 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/fileutils.rb (FileUtils#chown_R): Do not skip traversal even
+ if user and group are both nil, to be consistent with #chown and
+ other commands.
+
+Tue Jul 9 17:58:26 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * test/fileutils/test_fileutils.rb
+ (TestFileUtils#assert_output_lines): New utility assertion
+ method for testing verbose output.
+
+Tue Jul 9 17:43:57 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/test_tracer.rb: catch up recent rubygems changes.
+
+Tue Jul 9 16:58:30 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/{dl,fiddle}/win32/lib/win32/registry.rb: hope that the final
+ resolution to fix the failure of test-all. and includes Win64
+ support (fixed a potential bug).
+
+Tue Jul 9 15:57:20 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * object.c: Fix rdoc for Kernel#<=>. [Fixes GH-352]
+
+Tue Jul 9 15:53:51 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/fileutils.rb (FileUtils#mode_to_s): Define mode_to_s() also
+ as singleton method, or FileUtils.chmod fails in verbose mode.
+
+Tue Jul 9 15:16:02 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * test/fileutils/fileasserts.rb
+ (Test::Unit::FileAssertions#assert_not_symlink): Add a missing
+ optional argument "message".
+
+Tue Jul 9 15:03:24 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/fileutils.rb (FileUtils#chown, FileUtils#chown_R): If user
+ and group are both nil, print ":".
+
+Tue Jul 9 12:47:08 2013 Masaki Matsushita <glass.saga@gmail.com>
+
+ * io.c (appendline): use READ_CHAR_PENDING_XXX macros and
+ RSTRING_END().
+
+ * io.c (rb_io_getline_1): rewrite nested if statement into one
+ statement.
+
+Tue Jul 9 11:04:35 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/{dl,fiddle}/win32/lib/win32/registry.rb (Win32::Registry#check):
+ should report the position of the error.
+
+ * ext/{dl,fiddle}/win32/lib/win32/registry.rb
+ (Win32::Registry#QueryValue): workaround for test-all crash.
+
+Tue Jul 9 10:27:56 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/{dl,fiddle}/win32/lib/win32/registry.rb
+ (Win32::Registry.expand_environ): use suitable encoding for the
+ string.
+
+ * ext/{dl,fiddle}/win32/lib/win32/registry.rb (Win32::Registry#read):
+ should return REG_SZ, REG_EXPAND_SZ and REG_MULTI_SZ values with
+ the expected encoding -- assumed as the same encoding of name.
+
+Tue Jul 9 10:02:45 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/{dl,fiddle}/win32/lib/win32/registry.rb
+ (Win32::Registry::Error#initialize): use suitable encoding for the
+ string.
+
+Tue Jul 9 09:46:53 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/win32/lib/win32/registry.rb (Win32::Registry.expand_environ):
+ use suitable encoding for the string. fixed a test-all error of
+ r41838.
+
+ * ext/fiddle/win32/lib/win32/registry.rb: same changes of r41838 and
+ this revision of dl's win32/registry.rb.
+
+Tue Jul 9 07:39:45 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems 2.0.4. See
+ https://github.com/rubygems/rubygems/blob/2.0/History.txt for changes
+
+Tue Jul 9 01:47:16 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (biglsh_bang): Don't shift a BDIGIT with BITSPERDIG bits.
+ (bigrsh_bang): Ditto.
+
+Tue Jul 9 01:17:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigrsh_bang): Fix bignum digits overrun.
+
+Tue Jul 9 00:46:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (biglsh_bang): Fix bignum digits under-run.
+
+Mon Jul 8 23:36:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/win32/lib/win32/registry.rb (Error, API): use WCHAR
+ interfaces. c.f. [Bug #8508]
+
+Mon Jul 8 23:13:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_pow): move from win32.h and disable strict
+ ANSI mode macro to let _controlfp() stuff defined.
+ [ruby-core:55312] [Bug #8495]
+
+ * numeric.c (finite): add declaration for strict ANSI.
+ [ruby-core:55312] [Bug #8495]
+
+ * thread_win32.c (w32_thread_start_func, thread_start_func_1),
+ (timer_thread_func): use __stdcall instead of _stdcall which is
+ unavailable in strict ANSI mode. [ruby-core:55312] [Bug #8495]
+
+ * win32/win32.c (gettimeofday): use __cdecl instead of _cdecl.
+
+Mon Jul 8 22:41:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul): Arguments for work memory added.
+ (bary_mul_balance): Ditto.
+ (bary_mul_karatsuba): Ditto.
+
+Mon Jul 8 22:03:30 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_sq_fast): New function for testing.
+ (rb_big_mul_toom3): Ditto.
+
+ * internal.h (rb_big_sq_fast): Declared.
+ (rb_big_mul_toom3): Ditto.
+
+Mon Jul 8 21:59:34 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul_balance): Initialize a local variable to suppress
+ a warning.
+
+Mon Jul 8 20:55:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul_balance): Reduce work memory.
+
+Mon Jul 8 08:26:15 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+
+ * test/openssl/test_pkey_ec.rb: Skip tests for "Oakley" curves as
+ they are not suitable for ECDSA.
+ [ruby-core:54881] [Bug #8384]
+
+Mon Jul 8 08:03:01 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul): Add a RB_GC_GUARD.
+
+Sun Jul 7 23:56:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul_karatsuba): Unreachable code removed. Remove
+ several branches.
+
+Sun Jul 7 22:59:06 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (rb_big_mul_normal): Declared.
+ (rb_big_mul_balance): Ditto.
+ (rb_big_mul_karatsuba): Ditto.
+
+ * bignum.c (rb_big_mul_normal): New function for tests.
+ (rb_big_mul_balance): Ditto.
+ (rb_big_mul_karatsuba): Ditto.
+
+Sun Jul 7 19:21:30 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: Reorder functions to decrease forward reference.
+
+Sun Jul 7 14:41:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: (bigsub_core): Use bary_sub.
+ (bary_sub): Returns a borrow flag. Use bary_subb.
+ (bary_subb): New function for actually calculating subtraction with
+ borrow.
+ (bary_sub_one): New function.
+ (bigadd_core): Use bary_add.
+ (bary_add): Returns a carry flag. Use bary_addc.
+ (bary_addc): New function for actually calculating addition with
+ carry.
+ (bary_add_one): New function.
+ (bary_muladd_1xN): Extracted from bary_mul_normal.
+ (bigmul1_normal): Removed.
+ (bary_mul_karatsuba): New function.
+ (bary_mul1): Invoke rb_thread_check_ints after bary_mul_normal.
+ (bary_mul): Remove most and least significant zeros before actual
+ multiplication. Use bary_sq_fast, bary_mul_balance,
+ bary_mul_karatsuba and bigmul1_toom3 as bigmul0.
+ (bigmul1_balance): Removed.
+ (bigmul1_karatsuba): Removed.
+ (bigsqr_fast): Removed.
+ (bary_sparse_p): Extracted from big_sparse_p.
+ (big_sparse_p): Removed.
+ (bigmul0): Use bary_mul.
+
+Sun Jul 7 11:54:33 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * NEWS: Add REXML::Text#<< related updates.
+
+Sun Jul 7 11:49:19 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/text.rb (REXML::Text#<<): Support appending in not
+ "raw" mode. [Bug #8602] [ruby-dev:47482]
+ Reported by Ippei Obayashi. Thanks!!!
+
+Sun Jul 7 11:43:13 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/text.rb (REXML::Text#<<): Support method chain use by "<<"
+ like other objects.
+
+Sun Jul 7 11:34:18 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/text.rb (REXML::Text#clear_cache): Extract common
+ cache clear code.
+
+Sun Jul 7 11:01:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_DTRACE_POSTPROCESS): dtrace version SUN D 1.11
+ introduces a check in the dtrace compiler to ensure that probes
+ actually exist. If there are no probes, then the -G step will
+ fail. As this test is only being used to determine whether -G is
+ necessary (for instance, on OSX it is not), adding a real probe to
+ the conftest allows it to succeed on newer versions of dtrace.
+ Patch by Eric Saxby <sax AT livinginthepast.org> at
+ [ruby-core:55826]. [Fixes GH-351], [Bug #8606].
+
+Sun Jul 7 10:07:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_sq_fast): Extracted from bigsqr_fast and
+ ensure not to access zds[2*xn].
+ (bigsqr_fast): Allocate the result bignum with 2*xn words.
+
+Sat Jul 6 07:37:43 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+
+ * ext/openssl/ossl_pkey_ec.c: Ensure compatibility to builds of
+ OpenSSL with OPENSSL_NO_EC2M defined, but OPENSSL_NO_EC not
+ defined.
+ * test/openssl/test_pkey_ec.rb: Iterate over built-in curves
+ (and assert their non-emptiness!) instead of hard-coding them, as
+ this may cause problems with respect to the different availability
+ of individual curves in individual OpenSSL builds.
+ [ruby-core:54881] [Bug #8384]
+
+ Thanks to Vit Ondruch for providing the patch!
+
+Sat Jul 6 07:12:39 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+
+ * test/openssl/test_x509crl.rb: Remove unused variable.
+ [ruby-core:53501] [Bug #8114]
+
+ Thanks, Vipul Amler, for pointing this out!
+
+Sat Jul 6 06:37:10 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+
+ * ext/openssl/ossl.c: Provide CRYPTO_set_locking_callback() and
+ CRYPTO_set_id_callback() callback functions ossl_thread_id and
+ ossl_lock_callback to ensure the OpenSSL extension is usable in
+ multi-threaded environments.
+ [ruby-core:54900] [Bug #8386]
+
+ Thanks, Dirkjan Bussink, for the patch!
+
+Sat Jul 6 06:06:16 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+
+ * lib/openssl/ssl.rb: Fix SSL client connection crash for SAN marked
+ critical.
+ The patch for CVE-2013-4073 caused SSL crash when a SSL server returns
+ the certificate that has critical SAN value. X509 extension could
+ include 2 or 3 elements in it:
+
+ [id, criticality, octet_string] if critical,
+ [id, octet_string] if not.
+
+ Making sure to pick the last element of X509 extension and use it as
+ SAN value.
+ [ruby-core:55685] [Bug #8575]
+
+ Thank you @nahi for providing the patch!
+
+Sat Jul 6 04:49:38 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: register time objects so
+ they are referenced as ids during output.
+ * test/psych/test_date_time.rb: corresponding test.
+
+Fri Jul 5 20:46:39 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_unicode_escape.rb (TestUnicodeEscape#test_basic): this
+ assertion doesn't seems to be checking the unicode string on command
+ line, but seems to be checking how to treat the unicode string from
+ stdin. so, should escape '\' before 'u'. this fixes a test failure
+ on Windows.
+
+Fri Jul 5 19:05:40 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/fileutils.rb (FileUtils#chown, FileUtils#chown_R): Fix the
+ wrong output message when user is nil, which should be "chown
+ :group file" instead of "chown group file".
+
+Fri Jul 5 16:21:56 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * test/ruby/test_regexp.rb
+ (TestRegexp#test_options_in_look_behind)
+ (TestRegexp#assert_match_at): Add tests for another problem
+ fixed in Onigmo 5.13.5. Previously Onigmo did not allow option
+ enclosures in look-behind, which makes it impossible to
+ interpolate a regexp into another in the middle of a look-behind
+ pattern. cf. https://github.com/k-takata/Onigmo/pull/17
+
+ * test/ruby/test_regexp.rb
+ (TestRegexp#test_options_in_look_behind)
+ (TestRegexp#assert_match_at): Parse regexps in run time rather
+ than in compile time.
+
+Fri Jul 5 12:14:40 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_notfound): after
+ r41710, the path of command uses backslash as the separator on
+ Windows.
+
+Fri Jul 5 11:29:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (assert_raise_with_message): move from
+ test/fileutils/test_fileutils.rb. this is still experimental and
+ the interface may be changed.
+
+Fri Jul 5 11:08:00 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (w32_spawn): r41710 made that if the command starts with
+ a quote and includes slash, removed the top quote and NOT removed the
+ last quote.
+ this fixes test failures on test/ruby/test_process.rb and
+ test/webrick.
+
+Fri Jul 5 09:53:15 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/mkmf.rb (CONFIG['CPPOUTFILE']): fix r41769; CONFIG['CPPOUTFILE']
+ may be nil.
+
+Fri Jul 5 05:39:53 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (BARY_MUL1): Renamed from BARY_MUL.
+ (bary_mul1): Renamed from bary_mul.
+ (bary_mul): Renamed from bary_mul2.
+
+Fri Jul 5 04:58:05 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul_balance): Extracted from bigmul1_balance and
+ use bary_mul2 and bary_add to decrease allocations.
+
+Fri Jul 5 02:14:00 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/fileutils.rb (FileUtils#symbolic_modes_to_i): Fix the wrong
+ character class [+-=], which happened to match all desired
+ characters but also match undesired characters.
+
+ * lib/fileutils.rb (FileUtils.chmod{,_R}): Enhance the symbolic
+ mode parser to support the permission symbols u/g/o and multiple
+ actions as defined in SUS, so that chmod("g=o+w", file) works as
+ expected. Invalid symbolic modes are now rejected with
+ ArgumentError.
+
+Fri Jul 5 00:25:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (have_framework): allow header file to check.
+ [ruby-core:55745] [Bug #8593]
+
+Thu Jul 4 22:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * object.c (rb_obj_equal): Fixed an rb_obj_equal documentation typo
+ where "a" was used instead of "obj".
+ Fixes GH-349. Patch by @adnandoric
+
+Thu Jul 4 20:39:20 2013 Tanaka Akira <akr@fsij.org>
+
+ * tool/make-snapshot: Exit with EXIT_FAILURE when it fails.
+
+Thu Jul 4 20:20:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (maxpow_in_bdigit_dbl): Use tables if available.
+ (maxpow_in_bdigit): Ditto.
+ (U16): New macro.
+ (U32): Ditto.
+ (U64): Ditto.
+ (U128): Ditto.
+ (maxpow16_exp): New table.
+ (maxpow16_num): New table.
+ (maxpow32_exp): New table.
+ (maxpow32_num): New table.
+ (maxpow64_exp): New table.
+ (maxpow64_num): New table.
+ (maxpow128_exp): New table.
+ (maxpow128_num): New table.
+
+Thu Jul 4 18:25:25 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_cstr_to_inum): Avoid temporary buffer allocation except
+ very big base non-power-of-2 numbers.
+
+Thu Jul 4 15:51:56 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_succ): use ONIGENC_MBCLEN_CHARFOUND_P correctly.
+
+ * string.c (rb_str_dump): ditto.
+
+Thu Jul 4 10:04:11 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regcomp.c (): Merge Onigmo 5.13.5 23b523076d6f1161.
+
+ * [bug] (thanks Akinori MUSHA and Ippei Obayashi)
+ Fix a renumbering bug in condition regexp with a named
+ capture. [Bug #8583]
+ * [spec] (thanks Akinori MUSHA)
+ Allow ENCLOSE_OPTION in look-behind.
+
+Thu Jul 4 00:36:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * internal.h (SIGNED_INTEGER_MAX): suppress warning C4146 on VC6.
+ seems a logical ORed expression becomes unsigned.
+
+Thu Jul 4 00:13:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby_atomic.h (rb_w32_atomic_cas): call InterlockedCompareExchange
+ directly.
+
+ * ruby_atomic.h (ATOMIC_CAS): fix missing function call.
+
+Wed Jul 3 23:47:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby_atomic.h (ATOMIC_CAS): suppress C4022 and C4047 warnings in
+ VC6. only InterlockedCompareExchange is declared using PVOID.
+
+Wed Jul 3 22:29:20 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (ruby_digit36_to_number_table): Declared.
+
+ * util.c (ruby_digit36_to_number_table): Moved from scan_digits.
+
+ * bignum.c (conv_digit): Use ruby_digit36_to_number_table.
+
+ * pack.c (hex2num): Ditto.
+
+Wed Jul 3 18:12:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (install_dirs): revert DESTDIR prefix by r39841, since
+ it is fixed by r41648. [ruby-core:55760] [Bug #8115]
+
+Wed Jul 3 14:15:25 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (do_stat): use rb_w32_ustati64() in win32.c to get rid of
+ mysterious behavior of FindFirstFile() Windows API which treat "<"
+ and ">" like as wildcard characters. [ruby-core:55764] [Bug #8597]
+
+Wed Jul 3 12:06:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (maxpow_in_bdigit): Renamed from calc_hbase and return
+ maxpow.
+
+Tue Jul 2 23:47:50 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (roomof): Cast to long.
+ (rb_ull2big): Fix bignew arguments.
+
+Tue Jul 2 21:17:37 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_cstr_to_inum): Merge two temporary buffers.
+
+Tue Jul 2 20:25:04 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_cstr_to_inum): Use BDIGIT_DBL to collect adjacent digits.
+ (BDIGIT_DBL_MAX): New macro.
+ (maxpow_in_bdigit_dbl): New function.
+
+Tue Jul 2 17:23:33 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * doc/syntax/refinements.rdoc: add description of Module#using and
+ refinement inheritance by module inclusion.
+
+Tue Jul 2 17:22:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * internal.h: add EUC-JP and Windows-31J.
+
+ * re.c (rb_char_to_option_kcode): use built-in encoding indexes in
+ internal.h.
+
+ * internal.h: add UTF8-MAC.
+
+ * dir.c (rb_utf8mac_encoding): use built-in encoding indexes in
+ internal.h.
+
+ * internal.h: add UTF-{16,32} dummy encodings.
+
+ * string.c (rb_str_inspect, str_scrub0): use built-in encoding indexes
+ in internal.h.
+
+ * internal.h: add UTF-{16,32}{BE,LE}.
+
+ * io.c (io_strip_bom): use built-in encoding indexes in internal.h.
+
+ * internal.h (rb_{ascii8bit,utf8,usascii}_encindex): use built-in
+ encoding indexes for optimization.
+
+ * encoding.c (enc_inspect, rb_locale_encindex),
+ (enc_set_filesystem_encoding, rb_filesystem_encindex): use built-in
+ encoding indexes directly.
+
+ * encoding.c (rb_enc_set_index, rb_enc_associate_index): validate
+ argument encoding index.
+
+ * include/ruby/encoding.h (ENCODING_SET): use rb_enc_set_index()
+ instead of setting inlined bits directly.
+
+ * encoding.c (rb_enc_init): register preserved indexes.
+
+ * internal.h (ruby_preserved_encindex): move from encoding.c.
+
+Tue Jul 2 11:14:36 2013 Shota Fukumori <sorah@cookpad.com>
+
+ * lib/mkmf.rb (try_config): Fix to not replace $LDFLAGS with $libs
+ (1.9.3 behavior) [ruby-core:55752] [Bug #8595]
+
+Tue Jul 2 00:39:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ipsocket.c (init_inetsock_internal): Don't try mismatched
+ address family if already failed.
+
+Mon Jul 1 23:07:38 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * template/encdb.h.tmpl: define encoding index macros to use the index
+ statically from C source.
+
+Mon Jul 1 22:57:19 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul2): New function.
+ (rb_cstr_to_inum): Use a better algorithm to compose the result
+ if input length is very long.
+
+Mon Jul 1 20:22:00 2013 Kenta Murata <mrkn@cookpad.com>
+
+ * ext/bigdecimal/bigdecimal.h (RB_UNUSED_VAR, UNREACHABLE):
+ import macros from ruby.h for 1.9.3.
+ [Bug #8588] [ruby-core:55730]
+
+ * ext/bigdecimal/bigdecimal.gemspec: Bump version to 1.2.1.
+
+Mon Jul 1 20:03:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ipsocket.c (init_inetsock_internal): Use an address
+ family for local address which is different to the remote
+ address if no other choice.
+
+Mon Jul 1 15:05:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/csv.rb (CSV#<<): use StringIO#set_encoding instead of creating
+ new StringIO instance with String#force_encoding, forcing encoding
+ discards the cached coderange bits and can make further operations
+ very slow. [ruby-core:55714] [Bug #8585]
+
+ * ext/stringio/stringio.c (strio_write): keep coderange of
+ ptr->string.
+
+ * string.c (rb_enc_cr_str_buf_cat, rb_str_append): consider an empty
+ string 7bit-clean and should not discard cached coderange of string
+ to be appended.
+
+Mon Jul 1 12:56:41 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * eval.c (rb_using_module): activate refinements in the ancestors of
+ the argument module to support refinement inheritance by
+ Module#include. [ruby-core:55671] [Feature #8571]
+
+ * test/ruby/test_refinement.rb: related test.
+
+Mon Jul 1 12:02:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_cstr_to_inum): Skip leading zeros.
+
+Mon Jul 1 00:59:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (nlz16): New function.
+ (nlz32): Ditto.
+ (nlz64): Ditto.
+ (nlz128): Ditto.
+ (nlz): Redefined using an above function.
+ (bitsize): New macro.
+ (rb_cstr_to_inum): Use bitsize instead of nlz.
+
+Sun Jun 30 22:40:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * lib/prime.rb: Corrected a few comments. Patch by @Nullset14.
+ Fixes GH-346.
+
+Sun Jun 30 21:53:38 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_cstr_to_inum): Use rb_integer_unpack if base is a power
+ of 2.
+
+Sun Jun 30 10:59:23 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (join_argv): use backslash instead of slash in program
+ path, otherwise cannot invoke "./c\u{1ee7}a.exe" for some reason.
+ [ruby-core:24309] [Bug #1771]
+
+ * io.c (spawnv, spawn): use UTF-8 spawn family. [Bug #1771]
+
+ * process.c (proc_exec_sh, proc_spawn_cmd, proc_spawn_sh): ditto.
+
+ * win32/win32.c (translate_char, join_argv, has_redirection): make
+ codepage aware.
+
+ * win32/win32.c (rb_w32_udln_find_exe_r, rb_w32_udln_find_file_r):
+ codepage independent versions.
+
+ * win32/win32.c (w32_spawn): extract codepage aware code from
+ rb_w32_spawn().
+
+ * win32/win32.c (rb_w32_uspawn): add UTF-8 version function.
+
+ * win32/win32.c (w32_aspawn_flags): extract codepage aware code from
+ rb_w32_aspawn_flags().
+
+ * win32/win32.c (rb_w32_uaspawn_flags, rb_w32_uaspawn_flags): add
+ UTF-8 version functions.
+
+ * win32/win32.c (w32_getenv): extract codepage aware code from
+ rb_w32_ugetenv() and rb_w32_getenv().
+
+ * win32/win32.c (w32_stati64): extract codepage aware code from
+ rb_w32_ustati64() and rb_w32_stati64().
+
+ * dln.h (DLN_FIND_EXTRA_ARG, DLN_FIND_EXTRA_ARG_DECL): allow extra
+ arguments to dln_find_{exe,file}_r().
+
+ * dln_find.c (dln_find_exe_r, dln_find_file_r): add extract arguments.
+
+ * process.c (EXPORT_STR, EXPORT_DUP): convert to default process
+ encoding if defined.
+
+ * process.c (check_exec_env_i): convert environment variables too.
+
+ * process.c (rb_exec_fillarg): convert program path and arguments too.
+
+Sun Jun 30 01:57:08 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big_rshift): Use abs2twocomp and twocomp2abs_bang.
+
+Sun Jun 30 00:14:20 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (RBIGNUM_SET_NEGATIVE_SIGN): New macro.
+ (RBIGNUM_SET_POSITIVE_SIGN): Ditto.
+ (rb_big_neg): Inline get2comp to avoid double negation.
+
+Sat Jun 29 23:26:41 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_neg): Extracted from bary_2comp.
+ (bary_plus_one): Extracted from bary_2comp.
+ (bary_2comp): Use bary_neg and bary_plus_one.
+ (big_extend_carry): Extracted from get2comp.
+ (get2comp): Use big_extend_carry.
+ (rb_integer_unpack): Use big_extend_carry.
+ (rb_big_neg): Use bary_neg.
+
+Sat Jun 29 22:31:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_2comp): Simplified.
+
+Sat Jun 29 09:33:53 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigor_int): Return -1 if y == -1.
+
+Sat Jun 29 09:07:16 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigor_int): Use RB_GC_GUARD.
+ (bigxor_int): Take xn and hibitsx arguments. Use twocomp2abs_bang.
+ (rb_big_xor): Use abs2twocomp and twocomp2abs_bang.
+
+Sat Jun 29 08:19:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigand_int): Don't apply bitwise and for BDIGIT and long.
+ (bigor_int): Take xn and hibitsx arguments. Use twocomp2abs_bang.
+ (rb_big_or): Use abs2twocomp and twocomp2abs_bang.
+
+Fri Jun 29 01:08:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * numeric.c (fix_mul): remove FIT_SQRT_LONG test as it was causing
+ fix_mul to return an incorrect result for -2147483648*-2147483648
+ on 64 bit platforms
+
+ * test/ruby/test_integer_comb.rb (class TestIntegerComb): add test case
+
+Fri Jun 28 12:26:53 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_and): Allocate new bignum with same size to shorter
+ argument if it's high bits are zero.
+
+Fri Jun 28 12:14:04 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ipsocket.c (init_inetsock_internal): Don't use local
+ addresses which address family is different to remote address.
+
+Fri Jun 28 08:06:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigand_int): Add arguments, xn and hibitsx.
+ Use twocomp2abs_bang.
+
+Thu Jun 27 23:58:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (abs2twocomp_bang): Removed.
+ (abs2twocomp): Take n_ret argument to return actual length.
+ (rb_big_and): Follow above change.
+
+Thu Jun 27 22:52:19 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (get2comp): Use bary_2comp.
+ (abs2twocomp_bang): New function.
+ (abs2twocomp): New function.
+ (twocomp2abs_bang): New function.
+ (rb_big_and): Use abs2twocomp and twocomp2abs_bang.
+
+Thu Jun 27 20:03:13 2013 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+
+ * ext/openssl/lib/openssl/ssl.rb (verify_certificate_identity): fix
+ hostname verification. Patched by nahi.
+
+ * test/openssl/test_ssl.rb (test_verify_certificate_identity): test for
+ above.
+
+
+Thu Jun 27 00:23:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_pow): Retry if y is a Bignum and it is
+ representable as a Fixnum.
+ Use rb_absint_numwords.
+
+Wed Jun 26 23:53:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_save_rounding_mode): fix typo.
+ Fixes GH-343. Patch by @jgarber.
+
+Wed Jun 26 23:22:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enumerator.c (rb_enumeratorize_with_size): use strict definition
+ rb_enumerator_size_func.
+
+Wed Jun 26 23:11:14 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * gc.c (is_before_sweep): Add a missing space before a parenthesis.
+ * gc.c (rb_gc_force_recycle): Add a missing space around a parenthesis.
+
+Wed Jun 26 22:44:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_enumeratorize_with_size): cast for
+ backward compatibility.
+
+ * include/ruby/intern.h (rb_enumerator_size_func): define strict
+ function declaration for rb_enumeratorize_with_size().
+
+Wed Jun 26 21:01:22 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * test/ruby/test_io.rb (TestIO#test_write_32bit_boundary): skip if
+ writing a file is slow.
+ [ruby-core:55541] [Bug #8519]
+
+Wed Jun 26 16:42:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb: should use expanded values for header directories
+ unless extmk. patch by vo.x (Vit Ondruch) at [ruby-core:55653]
+ [Bug #8115], rhbz#921650.
+
+Wed Jun 26 12:48:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigxor_int): Fix a buffer over read.
+
+Wed Jun 26 12:13:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigand_int): Consider negative values.
+ (bigor_int): The allocated bignum should have enough size
+ to store long.
+ This fixes (bignum fits in a BDIGIT) | (fixnum bigger than BDIGIT)
+ on platforms which SIZEOF_BDIGITS < SIZEOF_LONG,
+ such as LP64 with 32bit BDIGIT (no int128).
+
+Wed Jun 26 12:08:51 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/socket/test_udp.rb: Close sockets explicitly.
+ Don't use fixed port number.
+
+Wed Jun 26 07:27:17 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigand_int): Fix a buffer over read.
+
+Wed Jun 26 06:48:07 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigadd_int): Fix a buffer over read.
+
+Wed Jun 26 01:18:13 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (is_before_sweep): Add new helper function that check the object
+ is before sweep?
+ * gc.c (rb_gc_force_recycle): Have to clear mark bit if object's slot
+ already ready to minor sweep.
+
+Wed Jun 26 01:17:29 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigsub_int): Fix a buffer over read.
+
+Tue Jun 25 22:45:43 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_absint_singlebit_p): Use POW2_P.
+ (bary_pack): Ditto.
+ (rb_big2str0): Ditto.
+ (POW2_P): Moved to top.
+
+Tue Jun 25 22:28:07 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/rubygems/ext/builder.rb (Gem::Ext::Builder.make): Pass
+ DESTDIR via command line to override what's in MAKEFLAGS. This
+ fixes an installation problem under a package building
+ environment where DESTDIR is specified in the (parent) command
+ line. [Fixes GH-327]
+
+Tue Jun 25 21:43:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2dbl): Use (BDIGIT)1 instead of 1UL.
+ (bary_mul_normal): Remove a useless cast.
+
+Tue Jun 25 21:26:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): Fix for the cases when
+ the argument x is not a BigDecimal.
+ This change is based on the patch made by Heesob Park and Garth Snyder.
+ [Bug #6862] [ruby-core:47145]
+ [Fixes GH-332] https://github.com/ruby/ruby/pull/332
+
+Tue Jun 25 20:36:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2ulong): "check" argument removed.
+ (rb_big2ulong): Follow above change.
+ (rb_big2long): Ditto.
+ (rb_big_rshift): Ditto.
+ (rb_big_aref): Ditto.
+
+Tue Jun 25 20:08:29 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big2ulong_pack): Use rb_integer_pack.
+ (rb_big_aref): Call big2ulong with TRUE for "check" argument.
+ It should be non-effective.
+
+Tue Jun 25 19:07:33 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (LSHIFTX): Revert r41611.
+ The redundant expression suppresses a warning, C4293, by Visual
+ Studio.
+ http://ruby-mswin.cloudapp.net/vc10-x64/ruby-trunk/log/20130625T072854Z.log.html.gz#miniruby
+
+Tue Jun 25 19:03:00 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2ulong): Add a cast.
+ (big2ull): Add a specialized code for SIZEOF_LONG_LONG <=
+ SIZEOF_BDIGITS.
+
+Tue Jun 25 12:42:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (integer_unpack_single_bdigit): Use "1 + ~u" instead of
+ "-u" to suppress warning (C4146) by Visual Studio.
+ Reported by ko1 via IRC.
+
+Tue Jun 25 12:28:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2ulong): Add code specialized for SIZEOF_LONG <=
+ SIZEOF_BDIGITS.
+ This prevents shift width warning from "num <<= BITSPERDIG".
+
+Tue Jun 25 12:23:30 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: fix oldgen/remembered_shady counting algorithm.
+
+ * gc.c (rgengc_check_shady): increment
+ `objspace->rgengc.remembered_shady_object_count' here.
+
+ * gc.c (rgengc_remember): return FALSE if obj is already remembered.
+
+ * gc.c (rgengc_rememberset_mark): make it void.
+
+ * gc.c (gc_mark_children): fix to double counting oldgen_object_count
+ at minor GC.
+
+Tue Jun 25 12:07:18 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (MSB): Removed.
+ (BDIGIT_MSB): Defined using BIGRAD_HALF.
+ (bary_2comp): Apply BIGLO after possible over flow of BDIGIT.
+ (get2comp): Ditto.
+ (bary_unpack_internal): Use BDIGIT_MSB.
+ Apply BIGLO after possible over flow of BDIGIT.
+ (rb_integer_unpack): Use BDIGIT_MSB.
+ (calc_hbase): Use BDIGMAX.
+ (big2dbl): Use BDIGMAX.
+ Apply BIGLO after possible over flow of BDIGIT.
+ (rb_big_neg): Apply BIGLO after possible over flow of BDIGIT.
+ (biglsh_bang): Ditto.
+ (bigrsh_bang): Ditto.
+ (bary_divmod): Use BDIGIT_MSB.
+ (bigdivrem): Ditto.
+ (bigxor_int): Apply BIGLO after possible over flow of BDIGIT.
+
+ * marshal.c (shortlen): Use SIZEOF_BDIGITS instead of sizeof(BDIGIT).
+
+ * ext/openssl/ossl_bn.c (ossl_bn_initialize): Use SIZEOF_BDIGITS
+ instead of sizeof(BDIGIT).
+
+Tue Jun 25 11:40:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (big2ulong): suppress shorten-64-to-32 warning. BDIGIT can
+ be bigger than long now.
+
+ * bignum.c (LSHIFTX): remove redundant never-true expression.
+
+Tue Jun 25 00:55:54 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (typedef struct rb_objspace): Change members for monitor objects.
+ * gc.c (gc_marks_test): Check all WriteBarrier Errors and track them in obj-tree.
+ * gc.c (rgengc_check_shady): Ditto.
+ * gc.c (gc_marks): Move 2 function calls to gc_marks_test for test initialize.
+
+Mon Jun 24 23:30:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (integer_unpack_single_bdigit): Refine code to filling
+ higher bits and use BIGLO.
+
+Mon Jun 24 22:26:31 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * test/rinda/test_rinda.rb (RingIPv6#prepare_ipv6):
+ ifindex() function may not be implemented on Windows. We use another
+ check for the case.
+
+Mon Jun 24 22:11:37 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * test/gdbm/test_gdbm.rb (TestGDBM#test_s_open_nolock):
+ skip a failing test on Windows because flock() implementation is
+ different from Unix.
+
+Mon Jun 24 22:06:14 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * test/rubygems/test_gem_installer.rb (test_install_extension_flat):
+ use ruby in build directory in case ruby is not installed.
+ [ruby-core:53265] [Bug #8058]
+
+Mon Jun 24 22:04:02 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * ext/dl/cfunc.c (rb_dlcfunc_call): fix conversion from Bignum to
+ pointer. sizeof(DLSTACK_TYPE) is larger than sizeof(long) on
+ Windows x64 and higher bits over sizeof(long) of DLSTACK_TYPE was
+ zero even if a pointer value was over 32 bits which causes SEGV on
+ DL::TestCPtr#test_to_ptr_io. Adding a cast solves the bug.
+
+Mon Jun 24 22:04:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * eval_error.c (warn_printf): use rb_vsprintf instead so ruby specific
+ extensions like PRIsVALUE can be used in format strings
+ * eval_error.c (error_print): use warn_print_str (alias for
+ rb_write_error_str) to print a string value instead of using
+ RSTRING_PTR and RSTRING_LEN manually
+ * eval.c (setup_exception): use PRIsVALUE instead of %s and RSTRING_PTR
+
+Mon Jun 24 20:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * compile.c (make_name_for_block): use PRIsVALUE in format string
+ instead of %s and RSTRING_PTR to protect objects from being garbage
+ collected too soon
+ * encoding.c (str_to_encindex): ditto
+ * hash.c (rb_hash_fetch_m): ditto
+ * io.c (rb_io_reopen): ditto
+ * parse.y (reg_fragment_check_gen): ditto
+ * parse.y (reg_compile_gen): ditto
+ * parse.y (ripper_assert_Qundef): ditto
+ * re.c (rb_reg_raise): ditto
+ * ruby.c (set_option_encoding_once): ditto
+ * vm_eval.c (rb_throw_obj): ditto
+
+Mon Jun 24 07:57:18 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (after_gc_sweep): Have to record malloc info before reset.
+ * gc.c (gc_prof_timer_start): Pick out part of new record creation as gc_prof_setup_new_record.
+ * gc.c (gc_prof_set_malloc_info): Move point of recording allocation size to front of mark.
+
+Mon Jun 24 02:53:09 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * array.c: Return value in Array overview example found by @PragTob
+ [Fixes GH-336] https://github.com/ruby/ruby/pull/336
+
+Mon Jun 24 02:45:51 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * array.c (rb_ary_zip): typo by @PragTob [Fixes GH-337]
+ https://github.com/ruby/ruby/pull/337
+
+Mon Jun 24 02:42:01 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * win32/README.win32: grammar typo by @blankenshipz [Fixes GH-334]
+ https://github.com/ruby/ruby/pull/334
+
+Mon Jun 24 00:59:35 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (BIGUP): Use LSHIFTX and avoid cast to consider the type
+ of x is bigger than BDIGIT_DBL.
+ (big2ulong): Use unsigned long to store the result.
+ (big2ull): Use unsigned LONG_LONG to store the result.
+ (bigand_int): Use long for num to avoid data loss.
+ (bigor_int): Ditto.
+ (bigxor_int): Ditto.
+
+Sun Jun 23 23:05:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/defines.h (BDIGIT): Define it only if it is not defined
+ yet. This eases tests and debug.
+ (SIZEOF_BDIGITS): Ditto.
+ (BDIGIT_DBL): Ditto.
+ (BDIGIT_DBL_SIGNED): Ditto.
+ (PRI_BDIGIT_PREFIX): Ditto.
+ (PRI_BDIGIT_DBL_PREFIX): Ditto.
+ (PRIdBDIGIT): Define it only if PRI_BDIGIT_PREFIX is defined.
+ (PRIiBDIGIT): Ditto.
+ (PRIoBDIGIT): Ditto.
+ (PRIuBDIGIT): Ditto.
+ (PRIxBDIGIT): Ditto.
+ (PRIXBDIGIT): Ditto.
+ (PRIdBDIGIT_DBL): Ditto.
+ (PRIiBDIGIT_DBL): Ditto.
+ (PRIoBDIGIT_DBL): Ditto.
+ (PRIuBDIGIT_DBL): Ditto.
+ (PRIxBDIGIT_DBL): Ditto.
+ (PRIXBDIGIT_DBL): Ditto.
+
+ * include/ruby/ruby.h (RBIGNUM_EMBED_LEN_MAX): Define it only if it is
+ not defined yet.
+
+Sun Jun 23 17:29:51 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (integer_unpack_single_bdigit): Use a cast.
+
+Sun Jun 23 15:38:07 2013 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_thread.rb: rescue resource limitation errors.
+
+Sun Jun 23 08:19:27 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (integer_unpack_single_bdigit): Extracted from
+ bary_unpack_internal.
+
+Sun Jun 23 07:41:52 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_unpack_internal): Suppress warnings (C4146) on Visual Studio.
+ Reported by ko1 via IRC.
+
+Sun Jun 23 06:49:28 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h, gc.c: rename macros and functions:
+ OBJ_WB_GIVEUP() -> OBJ_WB_UNPROTECT(),
+ rb_obj_wb_giveup() -> rb_obj_wb_unprotect(),
+ rb_gc_giveup_promoted_writebarrier() ->
+ rb_gc_writebarrier_unprotect_promoted(),
+
+ * class.c, eval.c, hash.c: use OBJ_WB_UNPROTECT().
+
+Sun Jun 23 05:41:32 2013 Koichi Sasada <ko1@atdot.net>
+
+ * class.c (rb_include_class_new), eval.c (rb_using_refinement):
+ make classes/modules (who share method table) shady.
+ If module `a' and `b' shares method table m_tbl and new method
+ with iseq is added, then write barrier is applied only `a' or `b'.
+ To avoid this issue, shade such classes/modules.
+
+ * vm_method.c (rb_method_entry_make): add write barriers.
+
+Sun Jun 23 01:27:54 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bytes_zero_p): Removed.
+ (bary_pack): Don't call bytes_zero_p.
+
+Sun Jun 23 00:51:29 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bytes_zero_p): Extracted from bary_pack.
+ (bary_pack): Use bytes_zero_p.
+
+Sun Jun 23 00:16:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (MSB): New macro.
+ (bary_unpack_internal): Use MSB.
+ (bary_divmod): Ditto.
+ (bigdivrem): Ditto.
+
+Sat Jun 22 23:45:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_swap): New function.
+ (bary_pack): Use bary_swap.
+ (bary_unpack_internal): Ditto.
+
+Sat Jun 22 23:18:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bytes_2comp): Renamed from quad_buf_complement.
+ (bary_pack): Use bytes_2comp.
+ (rb_quad_pack): Use rb_integer_pack.
+ (rb_quad_unpack): Use rb_integer_unpack.
+
+Sat Jun 22 21:46:18 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_integer_unpack): Don't allocate a Bignum if possible.
+
+Sat Jun 22 21:03:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (pack_unpack): Remove specialized unpackers for integers.
+
+Sat Jun 22 20:36:50 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_unpack_internal): Specialized unpacker implemented.
+ (bary_unpack): Support INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION.
+ (rb_integer_unpack): Support INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION.
+
+Sat Jun 22 18:53:10 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_pack): Support
+ INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION flag.
+ Fix byte order and word order handling in code specialized for
+ wordsize % SIZEOF_BDIGITS == 0.
+
+ * internal.h (INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION): Defined.
+
+Sat Jun 22 15:41:25 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rgengc_check_shady): add new WB miss checking
+ on RGENGC_CHECK_MODE >= 2.
+
+ (1) Save bitmaps before marking
+ (2) Run full marking
+ (3) On each traceable object,
+ (a) object was not oldgen (== newly or shady object) &&
+ (b) parent object was oldgen &&
+ (c) parent object was not remembered &&
+ (d) object was not remembered
+ then, it should be WB miss.
+
+ This idea of this checker is by Masaya Tarui <tarui@ruby-lang.org>.
+
+Sat Jun 22 15:25:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * ext/etc/etc.c (setup_passwd): revert r41560, unnecessary
+
+Sat Jun 22 14:39:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * ext/etc/etc.c (Init_etc): omit 'passwd' from definition of Etc::Passwd
+ if HAVE_STRUCT_PASSWD_PW_PASSWD is not defined to prevent mismatch of
+ fields and values in setup_passwd
+
+Sat Jun 22 14:35:40 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/dl/cfunc.c (rb_dlcfunc_call): Use rb_big_pack instead of
+ rb_big2ulong_pack and rb_big2ull.
+
+ * include/ruby/intern.h (rb_big2ulong_pack): Deprecated.
+
+Sat Jun 22 14:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * ext/etc/etc.c (setup_passwd): pass 0 as VALUE to rb_struct_new to
+ prevent segfault if the compiler passes it as a 32 bit integer on
+ a 64 bit ruby
+
+Sat Jun 22 13:47:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_pack): MEMZERO can be used even if nails is not zero.
+
+Sat Jun 22 13:43:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * ext/etc/etc.c (etc_getpwnam): use PRIsVALUE in format string instead
+ of %s and RSTRING_PTR
+
+ * ext/etc/etc.c (etc_getgrnam): ditto
+
+Sat Jun 22 13:07:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (CLEAR_LOWBITS): Rewritten without RSHIFTX.
+ (RSHIFTX): Removed.
+
+Sat Jun 22 10:38:03 2013 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (num2i32): Removed.
+ (pack_pack): Don't use num2i32.
+
+Sat Jun 22 09:55:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (LSHIFTX): Defined to suppress a warning.
+ (RSHIFTX): Ditto.
+ (CLEAR_LOWBITS): Use LSHIFTX and RSHIFTX.
+ (FILL_LOWBITS): Use LSHIFTX.
+ Reported by ko1 via IRC.
+
+Sat Jun 22 09:11:33 2013 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*: Imported minitest 4.7.5 (r8724)
+ * test/minitest/*: ditto
+
+Sat Jun 22 07:20:30 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_prof_set_heap_info, after_gc_sweep): call
+ gc_prof_set_heap_info() just after sweeping to calculate
+ live object number correctly.
+ (live object number = total generated number (before marking) -
+ total freed number (after sweeping))
+
+ * gc.c (gc_marks): record `oldgen_object_count' into current profile`
+ record directly.
+
+ * gc.c (rgengc_rememberset_mark): same for remembered_normal_objects
+ and remembered_shady_objects.
+
+Sat Jun 22 06:46:04 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_objspace::profile): rename rb_objspace::profile::record to
+ records (because it points a set of records) and add a field
+ rb_objspace::profile::current_record to point a current profiling
+ record.
+
+ * gc.c: use above fields.
+
+Sat Jun 22 06:05:36 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_gc_giveup_promoted_writebarrier): remove `rest_sweep()'
+ because all of remembered objects are called for gc_mark_children().
+
+Sat Jun 22 05:08:03 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rgengc_rememberset_mark): call gc_mark_children() for
+ remembered objects directly instead of pushing on the mark stack.
+
+Sat Jun 22 04:48:53 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h (OBJ_WRITE): cast to (VALUE *) for second
+ parameter `slot'. You don't need to write a cast (VALUE *) any more.
+
+ * class.c, compile.c, hash.c, iseq.c, proc.c, re.c, variable.c,
+ vm.c, vm_method.c: remove cast expressions for OBJ_WRITE().
+
+Sat Jun 22 04:37:08 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (slot_sweep_body): rename to slot_sweep().
+ No need to separate major/minor GC.
+
+ * gc.c (gc_setup_mark_bits): remove gc_clear_mark_bits() and unify to
+ this function.
+
+Sat Jun 22 04:20:21 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (check_bitmap_consistency): add to check flag and bitmap consistency.
+ Use this function in several places.
+
+Sat Jun 22 02:18:07 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_pack): Specialized packers implemented.
+ (HOST_BIGENDIAN_P): New macro.
+ (ALIGNOF): New macro.
+ (CLEAR_LOWBITS): New macro.
+ (FILL_LOWBITS): New macro.
+ (swap_bdigit): New macro.
+ (bary_2comp): Returns an int.
+
+ * internal.h (swap16): Moved from pack.c
+ (swap32): Ditto.
+ (swap64): Ditto.
+
+Fri Jun 21 21:29:49 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (typedef enum): Introduce flags of major gc reason.
+ * gc.c (garbage_collect_body): Ditto.
+ * gc.c (gc_profile_flags): Ditto.
+ * gc.c (gc_profile_dump_on): Ditto.
+
+Fri Jun 21 21:11:53 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (allocate_sorted_heaps): remove unused variable `add'.
+
+Fri Jun 21 20:50:32 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: constify RArray::as::ary and RArray::heap::ptr.
+ Use RARRAY_ASET() or RARRAY_PTR_USE() to modify Array objects.
+
+ * array.c, gc.c: catch up above changes.
+
+Fri Jun 21 20:32:13 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_eval.c (eval_string_with_cref): fix WB miss.
+
+Fri Jun 21 20:15:49 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: support write barrier protection for T_STRUCT.
+ Introduce the following C APIs:
+ * RSTRUCT_RAWPTR(st) returns pointer (do WB on your risk).
+ The type of returned pointer is (const VALUE *).
+ * RSTRUCT_GET(st, idx) returns idx-th value of struct.
+ * RSTRUCT_SET(st, idx, v) set idx-th value by v with WB.
+ And
+ * RSTRUCT_PTR(st) returns pointer with shady operation.
+ The type of returned pointer is (VALUE *).
+
+ * struct.c, re.c, gc.c, marshal.c: rewrite with above APIs.
+
+Fri Jun 21 19:38:37 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (BDIGMAX): Use BIGRAD.
+ (BIGLO): Use BDIGMAX.
+ (bigdivrem1): Ditto.
+ (bigor_int): Ditto.
+ (rb_big_or): Ditto.
+
+Fri Jun 21 19:18:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (pack_pack): Move the implementation for 'c' directive after
+ pack_integer label.
+
+Fri Jun 21 19:11:56 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h, re.c: support write barrier for T_REGEXP.
+
+ Note: T_MATCH object is also easy to support write barriers.
+ However, most of T_MATCH objects are short-lived objects.
+ So I skipped to support non-shady T_MATCH.
+
+Fri Jun 21 18:56:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigsub_int): Use bdigit_roomof.
+ (bigadd_int): Ditto.
+ (bigand_int): Ditto.
+ (bigor_int): Ditto.
+ (bigxor_int): Ditto.
+
+Fri Jun 21 17:56:25 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/gc/gcbench.rb: fix summary of benchmark result notation.
+
+Fri Jun 21 16:38:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * ext/openssl/ossl_x509attr.c: change OSSL_X509ATTR_IS_SINGLE and
+ OSSL_X509ATTR_SET_SINGLE macros to use ->value.set rather than
+ ->set to fix compile failure
+
+Fri Jun 21 15:26:45 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_sweep): profile sweep time correctly when LAZY_SWEEP is
+ disabled.
+
+ * gc.c (gc_marks_test): store oldgen count and shady count
+ before test marking and restore them after marking.
+
+Fri Jun 21 15:07:42 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: enable lazy sweep (commit miss).
+
+Fri Jun 21 14:31:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (ruby_setenv): refine error message so include the variable
+ name.
+
+Fri Jun 21 14:15:08 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: fix to use total_allocated_object_num and heaps_used
+ at the GC time for profiler.
+
+Fri Jun 21 12:35:35 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: RGENGC_CHECK_MODE should be 0.
+
+Fri Jun 21 11:18:25 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_marks_body): fix to get `th' in this function.
+
+Fri Jun 21 10:21:44 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (heaps_header/heaps_slot): embed bitmaps into heaps_slot.
+ no need to maintain allocation/free bitmaps.
+
+Fri Jun 21 09:22:16 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (slot_sweep_body): add counters at a time.
+
+ * gc.c (gc_profile_dump_on): fix line break position.
+
+Fri Jun 21 08:14:00 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c: refactoring bitmaps. introduce bits_t type and some Consts.
+
+Fri Jun 21 08:04:32 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: fix to support USE_RGENGC == 0 (disable RGenGC).
+ If USE_RGENGC==0, it caused compilation error.
+
+Fri Jun 21 08:08:11 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (lazy_sweep): Use is_lazy_sweeping()
+ * gc.c (rest_sweep): Ditto.
+ * gc.c (gc_prepare_free_objects): Ditto.
+
+Fri Jun 21 07:34:47 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_profile_record::oldgen_objects): added.
+
+ * gc.c (gc_profile_dump_on): print the following information:
+ * Living object counts
+ * Free object counts
+ If RGENGC_PROFILE > 0 then
+ * Oldgen object counts
+ * Remembered normal object counts
+ * Remembered shady object counts
+
+Fri Jun 21 06:43:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_ull2big): Refactored.
+ (rb_uint2big): Useless code removed.
+
+Fri Jun 21 05:37:39 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_prof_sweep_timer_stop): accumulate sweep time only when
+ record->gc_time > 0.
+
+Fri Jun 21 00:37:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/bigdecimal: Workaround fix for bigdecimal test failures caused
+ by [ruby-dev:47413] [Feature #8509]
+
+ * ext/bigdecimal/bigdecimal.h (BDIGIT): Make it independent from the
+ definition for bignum.c.
+ (SIZEOF_BDIGITS): Ditto.
+ (BDIGIT_DBL): Ditto.
+ (BDIGIT_DBL_SIGNED): Ditto.
+ (PRI_BDIGIT_PREFIX): Undefine the definition.
+ (PRI_BDIGIT_DBL_PREFIX): Ditto.
+
+ * ext/bigdecimal/bigdecimal.c (RBIGNUM_ZERO_P): Use rb_bigzero_p.
+ (bigzero_p): Removed.
+ (is_even): Use rb_big_pack.
+
+Thu Jun 20 22:52:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigmul1_toom3): Don't call bignorm twice.
+
+Thu Jun 20 22:49:27 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bignorm): Don't call bigtrunc if the result is a fixnum.
+
+Thu Jun 20 22:29:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_uint2big): Refactored.
+
+Thu Jun 20 22:24:41 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (dump_bignum): Use SIZEOF_BDIGITS.
+
+Thu Jun 20 22:22:46 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2ulong): Change the return type to unsigned long.
+ (rb_big2ulong_pack): Follow the above change.
+ (rb_big2long): Ditto.
+ (rb_big_lshift): Ditto.
+ (rb_big_rshift): Ditto.
+ (rb_big_aref): Ditto.
+
+Thu Jun 20 22:02:46 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_unpack_internal): Return -2 when negative overflow.
+ (bary_unpack): Set the overflowed bit if an extra BDIGIT exists.
+ (rb_integer_unpack): Set the overflowed bit.
+
+Thu Jun 20 21:17:19 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rgengc_rememberset_mark): record
+ (1) normal objects count in remember set
+ (2) shady objects count in remember set
+ each GC timing.
+
+ * gc.c (gc_profile_record_get): enable to access above information
+ and REMOVING_OBJECTS, EMPTY_OBJECTS.
+
+Thu Jun 20 18:29:26 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/gc/gcbench.rb: Do not use GC::Profiler::disable because
+ GC::Profiler::disable prohibit to access profiling data. It should
+ be spec bug.
+
+ Skip GC::Profiler::report if RUBY_VERSION < '2.0.0'
+
+Thu Jun 20 17:59:08 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/gc/gcbench.rb: stop GC::Profiler before output results.
+ Generating GC::Profiler result under profiling causes infinite loop.
+
+Thu Jun 20 17:24:24 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/gc/gcbench.rb: don't use __dir__ to make compatible
+ with ruby 1.9.3.
+
+Thu Jun 20 16:57:19 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/bm_app_aobench.rb: use attr_accessor/reader instead of
+ defining methods.
+
+Thu Jun 20 16:46:46 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/bm_app_aobench.rb: added.
+
+ * benchmark/gc/aobench.rb: added.
+
+Thu Jun 20 16:28:33 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/bm_so_binary_trees.rb: disable `puts' method
+ and change iteration parameter to increase execution time.
+
+ * benchmark/gc/binarytree.rb: added.
+
+Thu Jun 20 16:06:37 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/gc/pentomino.rb: added.
+ Simply load pentomino puzzle in the benchmark/ directory.
+
+Thu Jun 20 15:32:56 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/gc/redblack.rb: import red black tree benchmark from
+ https://github.com/jruby/rubybench/blob/master/time/bench_red_black.rb
+
+ * benchmark/gc/ring.rb: add a benchmark. This benchmark create many
+ old objects.
+
+Thu Jun 20 15:14:00 2013 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/gc: create a directory to store GC related benchmark.
+
+ * benchmark/gc/gcbench.rb: moved from tool/gcbench.rb.
+
+ * benchmark/gc/hash(1|2).rb: ditto.
+
+ * benchmark/gc/rdoc.rb: ditto.
+
+ * benchmark/gc/null.rb: added.
+
+ * common.mk: fix rule.
+
+Thu Jun 20 14:09:54 2013 Koichi Sasada <ko1@atdot.net>
+
+ * tool/hashbench1.rb: fix parameter too. Increase temporary objects.
+
+Thu Jun 20 14:01:35 2013 Koichi Sasada <ko1@atdot.net>
+
+ * tool/hashbench1.rb: fix parameters.
+
+Thu Jun 20 14:00:34 2013 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk: remove dependency from ruby.
+
+Thu Jun 20 13:14:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_check_backtrace): evaluate RARRAY_AREF only once.
+ the first argument of RB_TYPE_P is expanded twice for non-immediate
+ types.
+
+Thu Jun 20 08:09:29 2013 Koichi Sasada <ko1@atdot.net>
+
+ * tool/gcbench.rb: Summary in one line.
+
+ * common.mk: separate gcbench-hash to gcbench-hash1 and gcbench-hash2.
+
+Thu Jun 20 08:07:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (BIGSIZE): New macro.
+ (bigfixize): Use BIGSIZE.
+ (big2ulong): Ditto.
+ (check_shiftdown): Ditto.
+ (rb_big_aref): Ditto.
+
+Thu Jun 20 07:46:48 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (rb_gc_writebarrier): give up rescan A and register B directly
+ if A has huge number of children.
+
+Thu Jun 20 07:30:35 2013 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk: add new rules `gcbench-rdoc', `gcbench-hash'.
+
+ * tool/gcbench.rb: separate GC bench framework and process.
+
+ * tool/hashbench1.rb, tool/hashbench2.rb: add two types GC bench.
+ hashbench1: many temporal objects (GC by newobj)
+ hashbench2: hash size becomes bigger and bigger (GC by malloc)
+ Two benches are executed by `gcbench-hash' rule.
+
+ * tool/rdocbench.rb: separated.
+
+Thu Jun 20 06:25:39 2013 Koichi Sasada <ko1@atdot.net>
+
+ * tool/rdocbench.rb: add summary.
+
+Thu Jun 20 06:18:01 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_profile_total_time): check objspace->profile.next_index > 0.
+
+Thu Jun 20 05:47:41 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_prof_sweep_timer_start): fix merge miss.
+
+ * gc.c (GC_PROFILE_MORE_DETAIL): set it 0.
+
+Thu Jun 20 05:38:56 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: Accumulate sweep time to GC time.
+ Now [GC time] is [mark time] + [sweep time] + [misc].
+ ([GC time] >= [mark time] + [sweep time])
+
+ * gc.c (gc_prof_sweep_slot_timer_start/stop): rename to
+ gc_prof_sweep_timer_start/stop and locate at lazy_sweep().
+
+ * gc.c (elapsed_time_from): add a utility function.
+
+Thu Jun 20 05:08:53 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_marks): fix wrong option. FALSE means major/full GC.
+ It should be TRUE (minor marking).
+
+Thu Jun 20 02:44:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (waitpid): should not return 0 but wait until exit
+ unless WNOHANG is given. waiting huge process may return while
+ active, for some reason.
+
+Thu Jun 20 01:34:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bdigit_roomof): Use SIZEOF_BDIGITS.
+ (bigfixize): Refine an ifdef condition.
+ (rb_absint_size): Use bdigit_roomof.
+ (rb_absint_singlebit_p): Ditto.
+ (rb_integer_pack): Ditto.
+ (integer_pack_fill_dd): Use BITSPERDIG.
+ (integer_unpack_push_bits): Use BITSPERDIG, BIGLO and BIGDN.
+
+Thu Jun 20 01:07:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (MARKED_IN_BITMAP, FL_TEST2): return boolean value since always
+ used as boolean value.
+
+ * gc.c (MARK_IN_BITMAP, CLEAR_IN_BITMAP): evaluate bits once.
+
+Thu Jun 20 00:05:07 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (RVALUE_PROMOTED): fix type.
+
+Wed Jun 19 23:39:01 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_marks_test): rewrite checking code.
+ When RGENGC_CHECK_MODE >= 2, all minor marking, run normal minor
+ marking *and* major/full marking. After that, compare the results
+ and shows BUG if a object living with major/full marking but dead
+ with minor marking.
+ After detecting bugs, print references information.
+ (RGENGC_CHECK_MODE == 2, show references to dead object)
+ (RGENGC_CHECK_MODE == 3, show all references)
+
+Wed Jun 19 23:51:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigfixize): Use rb_absint_size.
+ (check_shiftdown): Ditto.
+ (big2ulong): Use bdigit_roomof.
+
+Wed Jun 19 23:32:23 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (RVALUE_PROMOTED): check consistency between oldgen flag and
+ oldgen bitmap if RGENGC_CHECK_MODE > 0.
+
+Wed Jun 19 23:29:29 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_gc_force_recycle): clear oldgen bitmap, too.
+
+Wed Jun 19 21:02:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_uint2big): Consider environments BDIGIT is bigger than
+ long.
+ (big2ulong): Ditto.
+ (rb_big_aref): Ditto.
+ (rb_big_pack): Just call rb_integer_pack.
+ (rb_big_unpack): Just call rb_integer_unpack.
+
+Wed Jun 19 20:51:21 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * gc.c (gc_stress_get): GC.stress can be Fixnum.
+
+Wed Jun 19 19:31:30 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (DIGSPERLONG): Don't define if BDIGIT is bigger than long.
+ (DIGSPERLL): Don't define if BDIGIT is bigger than LONG_LONG
+ (rb_absint_size): Consider environments BDIGIT is bigger than long.
+ Use BIGLO and BIGDN.
+ (rb_absint_singlebit_p): Ditto.
+ (rb_integer_pack): Ditto.
+ (bigsub_int): Consider environments BDIGIT is bigger than long.
+ Use SIZEOF_BDIGITS instead of sizeof(BDIGIT).
+ (bigadd_int): Ditto.
+ (bigand_int): Ditto.
+ (bigor_int): Ditto.
+ (bigxor_int): Ditto.
+
+Wed Jun 19 15:14:30 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h (struct rb_data_type_struct), gc.c: add
+ rb_data_type_struct::flags. Now, this flags is passed
+ at T_DATA object creation. You can specify FL_WB_PROTECTED
+ on this flag.
+
+ * iseq.c: making non-shady iseq objects.
+
+ * class.c, compile.c, proc.c, vm.c: add WB for iseq objects.
+
+ * vm_core.h, iseq.h: constify fields to detect WB insertion.
+
+Wed Jun 19 15:11:13 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (gc_mark_children): show more info for broken object.
+
+Wed Jun 19 14:04:41 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/envutil.rb (EnvUtil#rubybin): remove unnecessary
+ unless expression.
+
+Wed Jun 19 07:47:48 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (garbage_collect_body): use FIX2INT for ruby_gc_stress.
+
+Wed Jun 19 07:44:31 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_objspace::gc_stress): int -> VALUE to store Fixnum object.
+
+Wed Jun 19 07:25:35 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (make_deferred): clear flags to T_ZOMBIE.
+
+ * gc.c (slot_sweep_body): fix indent.
+
+Wed Jun 19 07:18:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_aref): Apply BIGLO to ~xds[i] for environment which
+ BDIGIT is 16bit.
+
+Wed Jun 19 07:09:26 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rgengc_remember): fix output level.
+
+ * gc.c (rgengc_rememberset_mark): fix to output clear count.
+ (shady_object_count + clear_count = count of remembered objects)
+
+Wed Jun 19 07:06:21 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rgengc_remember): check T_NONE and T_ZOMBIE
+ if RGENGC_CHECK_MODE > 0.
+
+Wed Jun 19 07:02:19 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (RGENGC_CHECK_MODE): add new check mode `3'.
+ In this mode, show all references if there is
+ a miss-corrected object.
+
+Wed Jun 19 06:31:08 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_stress_set): add special option of GC.stress.
+ `GC.stress=(flag)' accepts integer to control behavior of GC.
+ See code for details. Of course, this feature is only for MRI.
+
+ You can debug RGenGC (WB) using `GC.stress = 1'.
+ Using this option, do minor marking at all possible places.
+
+ GC::STRESS_MINOR_MARK = 1 and GC::STRESS_LAZY_SWEEP = 2
+ seem good to add.
+
+Wed Jun 19 06:29:31 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (kwmerge_i): add WB.
+
+Wed Jun 19 06:26:49 2013 Koichi Sasada <ko1@atdot.net>
+
+ * hash.c: `st_update()' also has same issue of last fix.
+ write barriers at callback function are too early.
+ All write barriers are executed after `st_update()'
+
+Wed Jun 19 04:33:22 2013 Koichi Sasada <ko1@atdot.net>
+
+ * variable.c (rb_const_set): fix WB miss.
+
+ WBs had located before creating reference between a klass
+ and constant value. It causes GC bug.
+
+ # pseudo code:
+ WB(klass, value); # WB and remember klass
+ st_insert(klass->const_table, const_id, value);
+
+ `st_insert()' can cause GC before inserting `value' and
+ forget `klass' from the remember set. After that, relationship
+ between `klass' and `value' are created with constant table.
+ Now, `value' can be young (shady) object and `klass' can be old
+ object, without remembering `klass' object.
+ At the next GC, old `klass' object will be skipped and
+ young (shady) `value' will be miss-collected. -> GC bug
+
+ Lesson: The place of a WB is important.
+
+Tue Jun 18 22:01:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_call_method): ensure methods of type
+ VM_METHOD_TYPE_ATTR_SET are called with 1 argument
+
+ * test/ruby/test_module.rb
+ (TestModule#test_attr_writer_with_no_arguments): add test
+ [ruby-core:55543] [Bug #8540]
+
+Tue Jun 18 22:36:23 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (gc_profile_record_flag): fix typo.
+
+Tue Jun 18 22:08:53 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/objspace/object_tracing.c: Return for ::allocation_generation
+
+Tue Jun 18 22:04:35 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/objspace/object_tracing.c: Document object_tracing methods.
+
+Tue Jun 18 21:58:17 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * gc.c: Rename rb_mObSpace -> rb_mObjSpace
+
+Tue Jun 18 20:55:05 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/objspace/objspace.c: Document ObjectSpace::InternalObjectWrapper.
+
+Tue Jun 18 20:39:04 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/objspace/object_tracing.c: Teach rdoc object_tracing.c [Bug #8537]
+
+Tue Jun 18 20:29:47 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/.document: add object_tracing.c to document file
+
+Tue Jun 18 20:20:27 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/objspace/objspace.c: rdoc on require to overview from r41355
+
+Tue Jun 18 18:39:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Check __int128.
+
+ * include/ruby/defines.h (BDIGIT_DBL): Use uint128_t if it is available.
+ (BDIGIT): Use uint64_t if uint128_t is available.
+ (SIZEOF_BDIGITS): Defined for above case.
+ (BDIGIT_DBL_SIGNED): Ditto.
+ (PRI_BDIGIT_PREFIX): Ditto.
+
+ * include/ruby/ruby.h (PRI_64_PREFIX): Defined.
+
+ * bignum.c (rb_big_pow): Don't use BITSPERDIG for the condition which
+ rb_big_pow returns Float or Bignum.
+
+ [ruby-dev:47413] [Feature #8509]
+
+Tue Jun 18 16:43:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_heredoc_restore): clear lex_strterm always to get
+ rid of marking recycled node. this bug is revealed by r41372 with
+ GC.stress=true.
+
+Tue Jun 18 12:53:25 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (nlz): Cast the result explicitly.
+ (big2dbl): Don't assign BDIGIT values to int variable.
+
+Tue Jun 18 12:25:16 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_xor): Non-effective code removed.
+
+Tue Jun 18 11:26:05 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_stat): add `generated_normal_object_count_types' for
+ RGENGC_PROFILE >= 2.
+
+Tue Jun 18 11:02:18 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_mark_maybe): check to skip T_NONE.
+
+ * gc.c (markable_object_p): do not need to check (flags == 0) here.
+
+Tue Jun 18 10:17:37 2013 Koichi Sasada <ko1@atdot.net>
+
+ * variable.c (rb_autoload): fix WB miss.
+
+Tue Jun 18 04:20:18 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_mark_children): don't need to care about T_ZOMBIE here.
+
+Mon Jun 17 22:16:02 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * test/ruby/test_proc.rb (TestProc#test_block_given_method_to_proc):
+ run test for r41359.
+
+Mon Jun 17 21:42:18 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * include/ruby/ruby.h, vm_eval.c (rb_funcall_with_block):
+ new function to invoke a method with a block passed
+ as an argument.
+
+ * string.c (sym_call): use the above function to avoid
+ a block sharing. [ruby-dev:47438] [Bug #8531]
+
+ * vm_insnhelper.c (vm_yield_with_cfunc): don't set block
+ in the frame.
+
+ * test/ruby/test_symbol.rb (TestSymbol#test_block_given_to_proc):
+ run related tests.
+
+Mon Jun 17 21:33:27 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * include/ruby/intern.h, proc.c (rb_method_call_with_block):
+ new function to invoke a Method object with a block passed
+ as an argument.
+
+ * proc.c (bmcall): use the above function to avoid a block sharing.
+ [ruby-core:54626] [Bug #8341]
+
+ * test/ruby/test_proc.rb (TestProc#test_block_persist_between_calls):
+ run related tests.
+
+Mon Jun 17 20:53:21 2013 Tanaka Akira <akr@fsij.org>
+
+ * loadpath.c (RUBY_REVISION): Defined to suppress revision.h
+ inclusion actually. r41352 removes the dependency.
+
+Mon Jun 17 18:15:57 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * ext/objspace/objspace.c: let rdoc know about objspace methods.
+ Specify 'objspace' should be required. See #8537.
+
+Mon Jun 17 17:44:31 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * gc.c (ObjectSpace): is a module not a class.
+
+ * ext/objspace/objspace.c: try to include overview in rdoc,
+ see #8537.
+
+Mon Jun 17 17:38:24 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * gc.c: fix example of ObjectSpace.define_finalizer in overview
+
+Mon Jun 17 16:59:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/tk/tkutil/tkutil.c: use rb_sprintf(), rb_id2str(), and
+ rb_intern_str() instead of rb_intern() and RSTRING_PTR() with
+ RB_GC_GUARD(), to prevent temporary objects from GC.
+ [ruby-core:39000] [Bug #5199]
+
+Mon Jun 17 14:27:54 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * vm_backtrace.c: Update rdoc for Backtrace#label with @_ko1
+
+Mon Jun 17 13:04:01 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * tool/ifchange (until): Fix the condition, although harmless in
+ this case.
+
+Mon Jun 17 11:50:29 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_mark_maybe): added. check `is_pointer_to_heap()' and
+ type is not T_ZOMBIE.
+
+ * gc.c: use `gc_mark_maybe()'. T_ZOMBIE objects should not be pushed
+ to the mark stack.
+
+Mon Jun 17 07:56:24 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_small_lshift): Renamed from bdigs_small_lshift.
+ (bary_small_rshift): Renamed from bdigs_small_rshift.
+
+Mon Jun 17 07:38:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (absint_numwords_bytes): Removed.
+ (rb_absint_numwords): Don't call absint_numwords_bytes.
+
+Sun Jun 16 23:14:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (BARY_ADD): New macro.
+ (BARY_SUB): Ditto.
+ (BARY_MUL): Ditto.
+ (BARY_DIVMOD): Ditto.
+ (BARY_ZERO_P): Ditto.
+ (absint_numwords_generic): Use these macros.
+
+Sun Jun 16 21:41:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_2comp): Extracted from get2comp.
+ (integer_unpack_num_bdigits): Extracted from
+ rb_integer_unpack_internal.
+ (bary_unpack_internal): Renamed from bary_unpack and support
+ INTEGER_PACK_2COMP.
+ (bary_unpack): New function to validate arguments and invoke
+ bary_unpack_internal.
+ (rb_integer_unpack_internal): Removed.
+ (rb_integer_unpack): Invoke bary_unpack_internal.
+ (rb_integer_unpack_2comp): Removed.
+
+ * internal.h (rb_integer_unpack_2comp): Removed.
+
+ * pack.c: Follow the above change.
+
+Sun Jun 16 18:41:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (INTEGER_PACK_2COMP): Defined.
+ (rb_integer_pack_2comp): Removed.
+
+ * bignum.c (bary_pack): Support INTEGER_PACK_2COMP.
+ (rb_integer_pack): Invoke bary_pack directly.
+ (rb_integer_pack_2comp): Removed.
+ (rb_integer_pack_internal): Ditto.
+ (absint_numwords_generic): Follow the above change.
+
+ * pack.c (pack_pack): Ditto.
+
+ * sprintf.c (rb_str_format): Ditto.
+
+Sun Jun 16 17:48:14 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (absint_numwords_generic): rb_funcall invocations removed.
+
+Sun Jun 16 16:04:38 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/config_files.rb: use URI.read to allow it runs with Ruby 1.8.5.
+
+Sun Jun 16 14:32:25 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_pack) Extracted from rb_integer_pack_internal.
+ (absint_numwords_generic): Use bary_pack.
+
+Sun Jun 16 11:01:57 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * NEWS (XMLRPC::Client#http): Add.
+ [ruby-core:55197] [Feature #8461]
+
+Sun Jun 16 10:38:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_add): New function.
+ (bary_zero_p): Extracted from bigzero_p.
+ (absint_numwords_generic): Use bary_zero_p and bary_add.
+ (bary_mul): Fix an argument for bary_mul_single.
+ (bary_divmod): Use size_t for arguments.
+
+Sun Jun 16 08:55:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem): Use a BDIGIT variable to store the return
+ value of bigdivrem_single.
+
+Sun Jun 16 08:43:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_divmod): New function.
+ (absint_numwords_generic): Use bary_divmod.
+ (bigdivrem_num_extra_words): Extracted from bigdivrem.
+ (bigdivrem_single): Ditto.
+ (bigdivrem_normal): Ditto.
+ (BIGDIVREM_EXTRA_WORDS): Defined.
+
+Sun Jun 16 05:51:51 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c: Fixup around GC by MALLOC.
+ Add allocate size to malloc_increase before GC
+ for updating limit in after_gc_sweep.
+ Reset malloc_increase into garbage_collect()
+ for preventing GC again soon.
+
+Sun Jun 16 05:15:36 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c: Add some columns to more detail profile.
+ new columns: Allocated size, Prepare Time, Removing Objects, Empty Objects
+
+Sun Jun 16 02:04:40 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (gc_prof_timer_stop): Merge function codes of GC_PROFILE_MORE_DETAIL and !GC_PROFILE_MORE_DETAIL.
+ * gc.c (gc_prof_mark_timer_start): Ditto.
+ * gc.c (gc_prof_mark_timer_stop): Ditto.
+ * gc.c (gc_prof_sweep_slot_timer_start): Ditto.
+ * gc.c (gc_prof_sweep_slot_timer_stop): Ditto.
+ * gc.c (gc_prof_set_malloc_info): Ditto.
+ * gc.c (gc_prof_set_heap_info): Ditto.
+
+Sat Jun 15 23:50:24 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_sub): New function.
+ (absint_numwords_generic): Use bary_sub.
+ (bigsub_core): Skip unnecessary copy.
+
+Sat Jun 15 22:05:30 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_mul): New function.
+ (absint_numwords_generic): Use bary_mul.
+ (bary_mul_single): Extracted from bigmul1_single.
+ (bary_mul_normal): Extracted from bigmul1_normal.
+
+Sat Jun 15 20:13:46 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bary_unpack): Extracted from rb_integer_unpack_internal.
+ (absint_numwords_generic): Use bary_unpack.
+ (roomof): Defined.
+ (bdigit_roomof): Defined.
+ (BARY_ARGS): Defined.
+ (bary_unpack): Declared.
+
+Sat Jun 15 19:35:04 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (absint_numwords_bytes): Make it static.
+ (absint_numwords_small): Ditto.
+ (absint_numwords_generic): Ditto.
+
+Sat Jun 15 17:14:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigmul1_normal): Shrink the result Bignum length.
+
+Sat Jun 15 10:19:42 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/bigdecimal/bigdecimal.c: Update overview formatting of headers
+
+Sat Jun 15 10:19:06 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/bigdecimal/bigdecimal.gemspec: Update authors
+
+Sat Jun 15 10:02:26 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bdigs_small_rshift): Extracted from big_rshift.
+ (bigdivrem): Use bdigs_small_rshift.
+
+Sat Jun 15 08:37:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (eval_string_with_cref): propagate absolute path from the
+ binding if it is given explicitly. patch by Gat (Dawid Janczak) at
+ [ruby-core:55123]. [Bug #8436]
+
+Sat Jun 15 02:40:18 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bdigs_small_lshift): Extracted from big_lshift.
+ (bigdivrem): Use bdigs_small_lshift.
+
+Fri Jun 14 20:47:41 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem): Reduce number of digits before bignew() for div.
+
+Fri Jun 14 20:12:37 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem): Use bignew when ny == 1.
+
+Fri Jun 14 18:52:51 2013 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (rb_iseq_compile_node): fix location of a `trace'
+ instruction (b_return event).
+ [ruby-core:55305] [ruby-trunk - Bug #8489]
+ (need a backport to 2.0.0?)
+
+ * test/ruby/test_settracefunc.rb: add a test.
+
+Fri Jun 14 18:18:07 2013 Koichi Sasada <ko1@atdot.net>
+
+ * class.c, include/ruby/ruby.h: add write barriers for T_CLASS,
+ T_MODULE, T_ICLASS.
+
+ * constant.h: constify rb_const_entry_t::value and file to detect
+ assignment.
+
+ * variable.c, internal.h (rb_st_insert_id_and_value, rb_st_copy):
+ added. update table with write barrier.
+
+ * method.h: constify some variables to detect assignment.
+
+ * object.c (init_copy): add WBs.
+
+ * variable.c: ditto.
+
+ * vm_method.c (rb_add_method): ditto.
+
+Fri Jun 14 14:33:47 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * NEWS: add a note for Module#using.
+
+Fri Jun 14 13:40:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * .travis.yml (before_script): update config files.
+
+ * common.mk ($(srcdir)/tool/config.{guess,sub}): use get-config_files.
+
+ * tool/config_files.rb: split get-config_files.
+
+ * common.mk (update-config_files): rule to download config files.
+
+ * tool/config.guess, tool/config.sub: remove and download from the
+ upstream.
+
+ * tool/config_files.rb: download config files from GNU.
+
+Fri Jun 14 12:21:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (RUBY_SAFE_LEVEL_CHECK): suppress warnings
+ "left-hand operand of comma expression has no effect", on gcc 4.4.
+
+Fri Jun 14 09:48:48 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * NEWS: add notes for $SAFE.
+
+ * doc/security.rdoc: remove the description of $SAFE=4.
+
+Fri Jun 14 00:14:29 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem): Zero test condition simplified.
+
+Thu Jun 13 23:43:11 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/bigdecimal/*: improve documentation, nodoc samples with @mrkn
+
+Thu Jun 13 23:02:14 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/xmlrpc/client.rb (XMLRPC::Client#http): Add reader for raw
+ Net::HTTP. [ruby-core:55197] [Feature #8461]
+ Reported by Herwin Weststrate. Thanks!!!
+
+Thu Jun 13 22:44:52 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/xmlrpc/client.rb (XMLRPC::Client#parse_set_cookies): Support
+ multiple names in a response. [ruby-core:41711] [Bug #5774]
+ Reported by Roman Riha. Thanks!!!
+ * test/xmlrpc/test_client.rb (XMLRPC::ClientTest#test_cookie_override):
+ Add a test of the above case.
+
+Thu Jun 13 22:35:50 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/xmlrpc/client.rb (XMLRPC::Client#parse_set_cookies): Use
+ guard style.
+
+Thu Jun 13 22:12:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/fileutils.rb (FileUtils#rmdir): fix traversal loop, not trying
+ remove same directory only.
+
+Thu Jun 13 21:30:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (opt-dir), tool/ifchange: get rid of "alternate value"
+ expansion for legacy sh. [ruby-dev:47420] [Bug #8524]
+
+Thu Jun 13 21:24:09 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem): Refactored to use ALLOCV_N for temporary
+ buffers.
+
+Thu Jun 13 18:54:11 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bignum.c (integer_unpack_num_bdigits_generic): reorder terms (but not
+ changed the intention of the expression) because VC++ reports a
+ warning for it. reported by ko1 via IRC.
+
+Thu Jun 13 18:53:14 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_thread.rb (test_thread_local_security): Don't create
+ an unused thread.
+
+Thu Jun 13 18:34:20 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigdivrem): Use nlz.
+
+Thu Jun 13 14:51:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (RUBY_SAFE_LEVEL_CHECK): check constant safe
+ level at compile time.
+
+Thu Jun 13 14:39:08 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * test/-ext-/test_printf.rb, test/rss/test_parser.rb,
+ test/ruby/test_array.rb, test/ruby/test_hash.rb,
+ test/ruby/test_m17n.rb, test/ruby/test_marshal.rb,
+ test/ruby/test_object.rb, test/ruby/test_string.rb: don't use
+ untrusted?, untrust, and trust to avoid warnings in case $VERBOSE is
+ true.
+
+Thu Jun 13 10:47:16 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * bootstraptest/test_autoload.rb, bootstraptest/test_method.rb:
+ remove tests for $SAFE=4.
+
+ * lib/pp.rb: use taint instead of untrust to avoid warnings when
+ $VERBOSE is set to true.
+
+Thu Jun 13 06:12:18 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (integer_unpack_num_bdigits_small): Fix a compile error on
+ clang -Werror,-Wshorten-64-to-32
+ Reported by Eric Hodel. [ruby-core:55467] [Bug #8522]
+
+Thu Jun 13 05:32:13 2013 Eric Hodel <drbrain@segment7.net>
+
+ * ext/socket/extconf.rb: Enable RFC 3542 IPV6 socket options for OS X
+ 10.7+. [ruby-trunk - Bug #8517]
+
+Thu Jun 13 00:17:18 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_integer_unpack_2comp): New function.
+ (rb_integer_unpack_internal): Extracted from rb_integer_unpack and
+ nlp_bits_ret argument added.
+ (integer_unpack_num_bdigits_small): nlp_bits_ret argument added to
+ return number of leading padding bits.
+ (integer_unpack_num_bdigits_generic): Ditto.
+
+ * internal.h (rb_integer_unpack_2comp): Declared.
+
+ * pack.c (pack_unpack): Use rb_integer_unpack_2comp and
+ rb_integer_unpack.
+
+Wed Jun 12 23:27:03 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * eval.c (mod_using): new method Module#using, which activates
+ refinements of the specified module only in the current class or
+ module definition. [ruby-core:55273] [Feature #8481]
+
+ * test/ruby/test_refinement.rb: related test.
+
+Wed Jun 12 22:58:48 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * safe.c (rb_set_safe_level, safe_setter): raise an ArgumentError
+ when $SAFE is set to 4. $SAFE=4 is now obsolete.
+ [ruby-core:55222] [Feature #8468]
+
+ * object.c (rb_obj_untrusted, rb_obj_untrust, rb_obj_trust):
+ Kernel#untrusted?, untrust, and trust are now deprecated.
+ Their behavior is same as tainted?, taint, and untaint,
+ respectively.
+
+ * include/ruby/ruby.h (OBJ_UNTRUSTED, OBJ_UNTRUST): OBJ_UNTRUSTED()
+ and OBJ_UNTRUST() are aliases of OBJ_TAINTED() and OBJ_TAINT(),
+ respectively.
+
+ * array.c, class.c, debug.c, dir.c, encoding.c, error.c, eval.c,
+ ext/curses/curses.c, ext/dbm/dbm.c, ext/dl/cfunc.c,
+ ext/dl/cptr.c, ext/dl/dl.c, ext/etc/etc.c, ext/fiddle/fiddle.c,
+ ext/fiddle/pointer.c, ext/gdbm/gdbm.c, ext/readline/readline.c,
+ ext/sdbm/init.c, ext/socket/ancdata.c, ext/socket/basicsocket.c,
+ ext/socket/socket.c, ext/socket/udpsocket.c,
+ ext/stringio/stringio.c, ext/syslog/syslog.c, ext/tk/tcltklib.c,
+ ext/win32ole/win32ole.c, file.c, gc.c, hash.c, io.c, iseq.c,
+ load.c, marshal.c, object.c, proc.c, process.c, random.c, re.c,
+ safe.c, string.c, thread.c, transcode.c, variable.c,
+ vm_insnhelper.c, vm_method.c, vm_trace.c: remove code for
+ $SAFE=4.
+
+ * test/dl/test_dl2.rb, test/erb/test_erb.rb,
+ test/readline/test_readline.rb,
+ test/readline/test_readline_history.rb, test/ruby/test_alias.rb,
+ test/ruby/test_array.rb, test/ruby/test_dir.rb,
+ test/ruby/test_encoding.rb, test/ruby/test_env.rb,
+ test/ruby/test_eval.rb, test/ruby/test_exception.rb,
+ test/ruby/test_file_exhaustive.rb, test/ruby/test_hash.rb,
+ test/ruby/test_io.rb, test/ruby/test_method.rb,
+ test/ruby/test_module.rb, test/ruby/test_object.rb,
+ test/ruby/test_pack.rb, test/ruby/test_rand.rb,
+ test/ruby/test_regexp.rb, test/ruby/test_settracefunc.rb,
+ test/ruby/test_struct.rb, test/ruby/test_thread.rb,
+ test/ruby/test_time.rb: remove tests for $SAFE=4.
+
+Wed Jun 12 22:18:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (integer_unpack_num_bdigits_generic): Rewritten without
+ rb_funcall.
+ (integer_unpack_num_bdigits_bytes): Removed.
+ (rb_integer_unpack): integer_unpack_num_bdigits_bytes invocation
+ removed.
+
+Wed Jun 12 20:18:03 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/xmlrpc/client.rb (XMLRPC::Client#parse_set_cookies): Extract.
+
+Wed Jun 12 18:19:41 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (validate_integer_pack_format): supported_flags argument
+ added and validate given flags.
+ (rb_integer_pack_internal): Specify supported_flags.
+ (rb_integer_unpack): Ditto.
+
+Wed Jun 12 16:41:38 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_sort_bang): remove duplicated assertions.
+ ARY_HEAP_PTR() implies ary not to be embedded. [ruby-dev:47419]
+ [Bug #8518]
+
+Wed Jun 12 12:44:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_getc): fix 7bit coderange condition, check if ascii read
+ data instead of read length. [ruby-core:55444] [Bug #8516]
+
+Wed Jun 12 12:35:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (pack_pack): Use rb_integer_pack_2comp.
+
+Wed Jun 12 12:07:04 2013 Tanaka Akira <akr@fsij.org>
+
+ * sprintf.c (rb_str_format): Fix a dynamic format string.
+
+Wed Jun 12 12:04:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_uniq_bang): must not be modified once frozen even in
+ a callback method.
+
+Wed Jun 12 12:03:43 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_sort_bang): must not be modified once frozen even in
+ a callback method.
+
+Wed Jun 12 12:00:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (FL_SET_EMBED): shared object is frozen even when get
+ unshared.
+
+ * array.c (rb_ary_modify): ARY_SET_CAPA needs unshared array.
+
+Wed Jun 12 07:32:01 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (rand_int): Use rb_big_uminus.
+
+Wed Jun 12 07:12:54 2013 Eric Hodel <drbrain@segment7.net>
+
+ * struct.c: Improve documentation: replace "instance variable" with
+ "member", recommend the use of a block to customize structs, note
+ that member accessors are created, general cleanup.
+
+Wed Jun 12 06:35:01 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (INTEGER_PACK_NEGATIVE): Defined.
+ (rb_integer_unpack): sign argument removed.
+
+ * bignum.c (rb_integer_unpack): sign argument removed.
+ Non-negative integers generated by default.
+ INTEGER_PACK_NEGATIVE flag is used to generate non-positive integers.
+
+ * pack.c (pack_unpack): Follow the above change.
+
+ * random.c (int_pair_to_real_inclusive): Ditto.
+ (make_seed_value): Ditto.
+ (mt_state): Ditto.
+ (limited_big_rand): Ditto.
+
+ * marshal.c (r_object0): Ditto.
+
+Wed Jun 12 00:07:46 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/xmlrpc/test_client.rb (XMLRPC::ClientTest#test_cookie_simple):
+ Add a test for the extracted method.
+
+Tue Jun 11 23:56:24 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/xmlrpc/test_client.rb (XMLRPC::ClientTest::Fake::HTTP#started):
+ Add a missing empty line.
+
+Tue Jun 11 23:37:19 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (validate_integer_pack_format): Don't require a word order
+ flag if numwords is 1 or less.
+ (absint_numwords_generic): Don't specify a word order for
+ rb_integer_pack.
+
+ * hash.c (rb_hash): Ditto.
+
+ * time.c (v2w_bignum): Ditto.
+
+Tue Jun 11 23:01:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (validate_integer_pack_format): Refine error messages.
+
+Tue Jun 11 22:25:04 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (validate_integer_pack_format): numwords argument added.
+ Move a varidation from rb_integer_pack_internal and rb_integer_unpack.
+ (rb_integer_pack_internal): Follow above change.
+ (rb_integer_unpack): Ditto.
+
+Tue Jun 11 20:52:43 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_integer_pack_internal): Renamed from rb_integer_pack
+ and overflow_2comp argument added.
+ (rb_integer_pack): Just call rb_integer_pack_internal.
+ (rb_integer_pack_2comp): New function.
+
+ * internal.h (rb_integer_pack_2comp): Declared.
+
+ * sprintf.c (rb_str_format): Use rb_integer_pack and
+ rb_integer_pack_2comp to format binary/octal/hexadecimal integers.
+ (ruby_digitmap): Declared.
+ (remove_sign_bits): Removed.
+ (BITSPERDIG): Ditto.
+ (EXTENDSIGN): Ditto.
+
+Tue Jun 11 16:15:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (ary_shrink_capa): shrink the capacity so it fits just with
+ the length.
+
+ * array.c (ary_make_shared): release never used elements from frozen
+ array to be shared. [ruby-dev:47416] [Bug #8510]
+
+Tue Jun 11 12:49:01 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * doc/re.rdoc: Rename to doc/regexp.rdoc
+ * re.c: Update rdoc include for rename of file
+
+Tue Jun 11 07:13:13 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * eval_error.c (error_print): keep that errat is non-shady object.
+ and guard errat from GC.
+
+Tue Jun 11 05:04:25 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * ext/racc/cparse/cparse.c: use rb_ary_entry() and
+ rb_ary_subseq() instead of RARRAY_PTR.
+ Based on a patch by Dirkjan Bussink. See Bug #8399.
+
+Mon Jun 10 23:51:51 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * array.c (rb_ary_new_from_values): fix a typo. pointed out by
+ nagachika.
+ http://d.hatena.ne.jp/nagachika/20130610/ruby_trunk_changes_41199_41220
+
+Mon Jun 10 21:51:03 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * ext/socket/raddrinfo.c (nogvl_getaddrinfo): Fix indent.
+
+Mon Jun 10 21:49:43 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * ext/socket/raddrinfo.c (nogvl_getaddrinfo): Add missing return
+ value assignment.
+
+Mon Jun 10 20:58:11 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/socket/raddrinfo.c (nogvl_getaddrinfo): work around for Ubuntu
+ 13.04's getaddrinfo issue with mdns4. [ruby-list:49420]
+
+Mon Jun 10 19:34:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_integer_pack): Returns sign instead of words.
+ (absint_numwords_generic): Follow the above change.
+ (big2str_base_powerof2): Follow the above change.
+
+ * internal.h: Ditto.
+
+ * hash.c (rb_hash): Ditto.
+
+ * pack.c (pack_pack): Ditto.
+
+ * random.c (int_pair_to_real_inclusive): Ditto.
+ (rand_init): Ditto.
+ (random_load): Ditto.
+ (limited_big_rand): Ditto.
+
+ * time.c (v2w_bignum): Ditto.
+
+Mon Jun 10 17:20:01 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rgengc_remember): permit promoted object.
+ (rb_gc_writebarrier -> remember)
+
+Mon Jun 10 17:14:01 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (RVALUE_PROMOTE): fix parameter name (`x' to `obj')
+ and make it inline function (like RVALUE_PROMOTE).
+
+Mon Jun 10 16:22:50 2013 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (rb_ary_new_from_values): add assertion
+ (ary should be young object).
+
+Mon Jun 10 16:05:59 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (wmap_mark): check allocation of `w->obj2wmap'.
+ (no-allocation `w->obj2wmap' will be NULL pointer reference)
+
+Mon Jun 10 15:36:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_error.c (error_print): use checking functions instead of
+ catching exceptions.
+
+ * eval_error.c (error_print): restore errinfo for the case new
+ exception raised while printing the message. [ruby-core:55365]
+ [Bug #8501]
+
+ * eval_error.c (error_print): reduce calling setjmp.
+
+Mon Jun 10 12:10:06 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (integer_unpack_num_bdigits_small: Extracted from
+ rb_integer_unpack.
+ (integer_unpack_num_bdigits_generic): Ditto.
+ (integer_unpack_num_bdigits_bytes): New function.
+ (rb_integer_unpack): Use above functions.
+ Return a Bignum for INTEGER_PACK_FORCE_BIGNUM even when the result
+ is zero.
+
+Mon Jun 10 05:38:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (absint_numwords_small): New function.
+ (absint_numwords_generic): Use absint_numwords_small if possible.
+
+Mon Jun 10 01:07:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (absint_numwords_bytes): New function.
+ (absint_numwords_generic): Extracted from rb_absint_numwords.
+ (rb_absint_numwords): Use absint_numwords_bytes if possible.
+
+Sun Jun 9 21:33:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_absint_numwords): Return (size_t)-1 when overflow.
+ Refine variable names.
+ (rb_absint_size): Refine variable names.
+
+ * internal.h (rb_absint_size): Refine an argument name.
+ (rb_absint_numwords): Ditto.
+
+Sun Jun 9 16:51:41 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_absint_numwords): Renamed from rb_absint_size_in_word.
+
+ * internal.h (rb_absint_numwords): Follow the above change.
+
+ * pack.c (pack_pack): Ditto.
+
+ * random.c (rand_init): Ditto.
+ (limited_big_rand): Ditto.
+
+Sun Jun 9 14:41:05 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_integer_pack): numwords_allocated argument removed.
+
+ * internal.h (rb_integer_pack): Follow the above change.
+
+ * hash.c (rb_hash): Ditto.
+
+ * time.c (v2w_bignum): Ditto.
+
+ * pack.c (pack_pack): Ditto.
+
+ * random.c (int_pair_to_real_inclusive): Ditto.
+ (rand_init): Ditto.
+ (random_load): Ditto.
+ (limited_big_rand): Ditto.
+
+Sun Jun 9 09:34:44 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big2str_base_powerof2): New function.
+ (rb_big2str0): Use big2str_base_powerof2 if base is 2, 4, 8, 16 or 32.
+
+Sun Jun 9 00:59:04 2013 Tanaka Akira <akr@fsij.org>
+
+ * hash.c (rb_hash): Use rb_integer_pack to obtain least significant
+ long integer.
+
+Sat Jun 8 23:56:00 2013 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (rb_num_to_uint): Use rb_absint_size instead of
+ RBIGNUM_LEN.
+
+Sat Jun 8 22:53:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * marshal.c (r_object0): Use rb_integer_unpack.
+
+Sat Jun 8 22:18:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * time.c (v2w): Use rb_absint_size instead of RBIGNUM_LEN.
+
+Sat Jun 8 21:47:33 2013 Tanaka Akira <akr@fsij.org>
+
+ * time.c (v2w_bignum): Simplified using rb_integer_pack.
+ (rb_big_abs_find_maxbit): Removed.
+
+Sat Jun 8 21:03:40 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_absint_singlebit_p): New function.
+
+ * internal.h (rb_absint_singlebit_p): Declared.
+
+ * time.c (v2w_bignum): Use rb_absint_singlebit_p instead of
+ rb_big_abs_find_minbit.
+ (rb_big_abs_find_minbit): Removed.
+
+Sat Jun 8 20:24:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * time.c (rb_big_abs_find_maxbit): Use rb_absint_size.
+ (bdigit_find_maxbit): Removed.
+
+Sat Jun 8 19:47:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * class.c (include_modules_at): invalidate method cache if included
+ module contains constants
+
+ * test/ruby/test_module.rb: add test
+
+Sat Jun 8 19:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * random.c (limited_big_rand): declare rnd, lim and mask as uint32_t
+ to avoid 64 bit to 32 bit shorten warnings.
+
+Sat Jun 8 19:23:53 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * win32/Makefile.sub: r41163 changed win32/win32.c and configure.in
+ but it didn't treat about mswin32/mswin64, so fix it.
+ NOTE: this needs a review by usa whether additional condition is
+ required or not.
+
+Sat Jun 8 19:06:26 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c: Unused RBignum internal accessing macros removed.
+
+Sat Jun 8 19:04:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (limited_big_rand): The argument, limit, is changed to
+ VALUE. Use rb_integer_pack and rb_integer_unpack.
+
+Sat Jun 8 17:15:18 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (make_seed_value): Fix the length given for
+ rb_integer_unpack.
+
+Sat Jun 8 16:38:02 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_integer_unpack): Don't use rb_funcall if possible.
+
+ * random.c: Use uint32_t for elements of seed.
+ (make_seed_value): Use rb_integer_unpack.
+
+Sat Jun 8 15:58:18 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (rand_init): Add a cast to fix clang compile error:
+ random.c:410:32: error: implicit conversion loses integer precision:
+ 'size_t' (aka 'unsigned long') to 'int' [-Werror,-Wshorten-64-to-32]
+ This cast doesn't cause a problem because len is not bigger than
+ MT_MAX_STATE.
+
+Sat Jun 8 15:30:03 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (rand_init): Use rb_integer_pack.
+ (roomof): Removed.
+
+Sat Jun 8 14:58:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (INTEGER_PACK_FORCE_BIGNUM): New flag constant.
+
+ * bignum.c (rb_integer_unpack): Support INTEGER_PACK_FORCE_BIGNUM.
+
+ * random.c (int_pair_to_real_inclusive): Use
+ INTEGER_PACK_FORCE_BIGNUM to use rb_big_mul instead of rb_funcall.
+
+Sat Jun 8 14:17:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: check for NET_LUID. header macro varies across
+ compiler versions.
+
+ * win32/win32.c: use configured macro.
+
+Sat Jun 8 11:59:55 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (int_pair_to_real_inclusive): Use rb_funcall instead of
+ rb_big_mul because rb_integer_unpack can return a Fixnum.
+
+Sat Jun 8 11:17:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (int_pair_to_real_inclusive): Use rb_integer_pack.
+
+Sat Jun 8 09:49:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (int_pair_to_real_inclusive): Use rb_integer_unpack.
+
+Sat Jun 8 08:12:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (random_load): Use rb_integer_pack.
+
+Sat Jun 8 06:15:46 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (numberof): Removed.
+
+Sat Jun 8 06:00:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c: include internal.h.
+ (mt_state): Use rb_integer_unpack.
+
+Sat Jun 8 00:55:51 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (integer_pack_loop_setup): word_num_nailbytes_ret argument
+ removed.
+ (rb_integer_pack): Follow the above change.
+ (rb_integer_unpack): Follow the above change.
+
+Sat Jun 8 00:37:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (validate_integer_pack_format): Renamed from
+ validate_integer_format.
+ (integer_pack_loop_setup): Renamed from integer_format_loop_setup.
+ (integer_pack_fill_dd): Renamed from int_export_fill_dd.
+ (integer_pack_take_lowbits): Renamed from int_export_take_lowbits.
+ (integer_unpack_push_bits): Renamed from int_import_push_bits.
+
+Fri Jun 7 23:58:06 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_integer_pack): Arguments changed. Use flags to
+ specify word order and byte order.
+ (rb_integer_unpack): Ditto.
+ (validate_integer_format): Follow the above change.
+ (integer_format_loop_setup): Ditto.
+
+ * pack.c: Ditto.
+
+ * internal.h: Ditto.
+ (INTEGER_PACK_MSWORD_FIRST): Defined.
+ (INTEGER_PACK_LSWORD_FIRST): Ditto.
+ (INTEGER_PACK_MSBYTE_FIRST): Ditto.
+ (INTEGER_PACK_LSBYTE_FIRST): Ditto.
+ (INTEGER_PACK_NATIVE_BYTE_ORDER): Ditto.
+ (INTEGER_PACK_LITTLE_ENDIAN): Ditto.
+ (INTEGER_PACK_BIG_ENDIAN): Ditto.
+
+Fri Jun 7 22:10:50 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rubygems/specification.rb (Gem::Specification#to_yaml):
+ use Gem::NoAliasYAMLTree.create instead of Gem::NoAliasYAMLTree.new
+ to suppress deprecated warnings.
+
+Fri Jun 7 21:39:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_integer_pack): Renamed from rb_int_export.
+ (rb_integer_unpack): Renamed from rb_int_import.
+
+ * internal.h, pack.c: Follow the above change.
+
+Fri Jun 7 21:05:26 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (integer_format_loop_setup): Extracted from rb_int_export
+ and rb_int_import.
+
+Fri Jun 7 19:48:38 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (validate_integer_format): Extracted from rb_int_export and
+ rb_int_import.
+
+Fri Jun 7 19:23:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_absint_size): Use numberof.
+ (rb_int_export): Ditto.
+
+Fri Jun 7 18:58:56 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (numberof): Gathered from various files.
+
+ * array.c, math.c, thread_pthread.c, iseq.c, enum.c, string.c, io.c,
+ load.c, compile.c, struct.c, eval.c, gc.c, parse.y, process.c,
+ error.c, ruby.c: Remove the definitions of numberof.
+
+Fri Jun 7 18:24:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_absint_size): Declare a variable, i, just before used
+ to suppress a warning.
+ (rb_int_export): Ditto.
+
+Fri Jun 7 17:41:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * bignum.c (rb_absint_size): explicit cast to BDIGIT to avoid implicit
+ 64 bit to 32 bit shortening warning
+ * bignum.c (rb_int_export): ditto
+ * bignum.c (int_import_push_bits): ditto
+
+Fri Jun 7 17:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * internal.h (RCLASS_SUPER): use descriptive variable name
+ * internal.h (RCLASS_SET_SUPER): ditto
+
+Fri Jun 7 13:25:27 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/fbuffer/fbuffer.h (fbuffer_append_str): change the place of
+ RB_GC_GUARD. it should be after the object is used.
+
+Fri Jun 7 13:22:43 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * gc.c (before_gc_sweep): noinline can also avoid the segv instead of
+ -O0 of r41084. this way is expected less slow.
+
+Fri Jun 7 11:45:42 2013 Kenta Murata <mrkn@cookpad.com>
+
+ * rational.c (numeric_quo): move num_quo in numeric.c to numeric_quo
+ in rational.c to refer canonicalization state for mathn support.
+ [ruby-core:41575] [Bug #5736]
+
+ * numeric.c (num_quo): ditto.
+
+ * test/test_mathn.rb: add a test for the change at r41109.
+
+Fri Jun 7 11:41:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: revert r41106. size_t may not be unsigned
+
+ * bignum.c (rb_absint_size_in_word, rb_int_export, rb_int_import): use
+ NUM2SIZET() and SIZET2NUM() already defined in ruby/ruby.h.
+
+Fri Jun 7 11:28:37 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c: use oldgen bitmap as initial mark bitmap when major gc.
+ so can skip oldgen bitmap check around mark & sweep.
+ * gc.c (slot_sweep_body): change scan algorithm for performance:
+ from object's pointer base to bitmap one.
+
+Fri Jun 7 11:25:56 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c: introduce oldgen bitmap for preparing performance tuning.
+
+Fri Jun 7 11:20:57 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (MARKED_IN_BITMAP, MARK_IN_BITMAP, CLEAR_IN_BITMAP): bring
+ bitmap macros in one place, and introduce BITMAP_BIT.
+
+Fri Jun 7 11:18:35 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * array.c (ary_new): change order of allocation in order
+ to remove FL_OLDGEN operation.
+
+Fri Jun 7 11:16:28 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * tool/rdocbench.rb: add gc total time information.
+
+Fri Jun 7 10:12:01 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: remove "Sunny" terminology.
+ "Sunny" doesn't mean antonym of "Shady" (questionable, doubtful, etc).
+ Instead of "Sunny", use "non-shady" or "normal".
+
+Fri Jun 7 09:29:33 2013 Kenta Murata <mrkn@cookpad.com>
+
+ * bignum.c (rb_int_import): explicitly casting BDIGIT_DBL to BDIGIT
+ to prevent warning.
+
+Fri Jun 7 07:29:33 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (rb_int_export): countp argument is split into
+ wordcount_allocated and wordcount.
+
+ * bignum.c (rb_int_export): Follow the above change.
+
+ * pack.c (pack_pack): Ditto.
+
+Fri Jun 7 07:17:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * NEWS: describe a compatibility issue of Numeric#quo
+ introduced at r41109.
+
+Fri Jun 7 07:15:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * NEWS: fix style.
+
+Fri Jun 7 06:48:17 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * numeric.c: remove unused ID id_to_r introduced in r41109.
+
+Fri Jun 7 06:15:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_int_import): New function.
+ (int_import_push_bits): Ditto.
+
+ * internal.h (rb_int_import): Declared.
+
+ * pack.c (pack_unpack): Use rb_int_import for BER compressed integer.
+
+Thu Jun 6 22:24:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * numeric.c (num_quo): Use to_r method to convert the receiver to
+ rational. [ruby-core:41575] [Bug #5736]
+
+ * test/ruby/test_numeric.rb: add a test for the above change.
+
+Thu Jun 6 20:40:17 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Invoke RUBY_REPLACE_TYPE for size_t.
+ Don't invoke RUBY_CHECK_PRINTF_PREFIX for size_t to avoid conflict
+ with RUBY_REPLACE_TYPE.
+
+ * internal.h (rb_absint_size): Declared.
+ (rb_absint_size_in_word): Ditto.
+ (rb_int_export): Ditto.
+
+ * bignum.c (rb_absint_size): New function.
+ (rb_absint_size_in_word): Ditto.
+ (int_export_fill_dd): Ditto.
+ (int_export_take_lowbits): Ditto.
+ (rb_int_export): Ditto.
+
+ * pack.c (pack_pack): Use rb_int_export for BER compressed integer.
+
+Thu Jun 6 19:31:33 2013 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: fixed coding error [ruby-core:55337].
+ reported by Riley Lynch.
+
+Thu Jun 6 14:16:37 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * ext/objspace/object_tracing.c: rename allocation_info to
+ lookup_allocation_info. At times I confused "struct
+ allocation_info" with "function allocation_info".
+
+Thu Jun 6 13:57:06 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * ext/objspace/object_tracing.c: allocation_info function isn't
+ called by any other file.
+
+Thu Jun 6 09:41:00 2013 Kenta Murata <mrkn@cookpad.com>
+
+ * numeric.c (num_quo): should return a Float for a Float argument.
+ [ruby-dev:44710] [Bug #5515]
+
+ * test/ruby/test_fixnum.rb: Add an assertion for the above change.
+
+ * test/ruby/test_bignum.rb: ditto.
+
+Thu Jun 6 00:59:44 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (gc_mark): get rid of pushing useless objects.
+ * gc.c (rgengc_rememberset_mark): bypass gc_mark() in order to push
+ sunny old object at minor gc.
+ * gc.c (gc_mark_children): move sunny old check to gc_mark().
+ * gc.c (rgengc_check_shady): remove DEMOTE that already unnecessary.
+ * gc.c (rb_gc_writebarrier): ditto.
+
+ change sunny old check point in order to save mark stack and
+ remove unnatural rest_sweep & demote.
+
+Thu Jun 6 00:52:42 2013 Masaya Tarui <tarui@ruby-lang.org>
+
+ * gc.c (rgengc_rememberset_mark): change scan algorithm for performance:
+ from object's pointer base to bitmap one.
+
+Thu Jun 6 00:30:04 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * win32/win32.c (NET_LUID): define it on MinGW32.
+ mingw-w64 has NET_LUID but mingw32 (mingw.org) still doesn't have
+ NET_LUID. reported by taco on IRC
+
+Thu Jun 6 00:05:08 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * string.c (String#b): Allow code range scan to happen later so
+ ascii_only? on a result string returns the correct value.
+ [ruby-core:55315] [Bug #8496]
+
+Wed Jun 5 22:40:42 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (capability_response): should ignore trailing
+ spaces. Thanks, Peter Kovacs. [ruby-core:55024] [Bug #8415]
+
+ * test/net/imap/test_imap_response_parser.rb: related test.
+
+Wed Jun 5 21:17:08 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (big_fdiv): Use nlz() instead of bdigbitsize().
+ (bdigbitsize): Removed.
+
+Wed Jun 5 20:32:00 2013 Kenta Murata <mrkn@cookpad.com>
+
+ * include/ruby/ruby.h: fix alignment in comment.
+
+Wed Jun 5 20:05:29 2013 Tanaka Akira <akr@fsij.org>
+
+ * random.c (int_pair_to_real_inclusive): Add a cast to BDIGIT.
+ (random_load): Fix shift width for fixnums.
+ Re-implement bignum extraction without ifdefs.
+
+Wed Jun 5 15:26:10 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * gc.c (before_gc_sweep): don't optimize it to avoid segv on Ubuntu
+ 10.04 gcc 4.4.
+ http://u32.rubyci.org/~chkbuild/ruby-trunk/log/20130527T190301Z.diff.html.gz
+
+Wed Jun 5 09:46:46 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/fileutils/test_fileutils.rb (TestFileUtils#test_mkdir): add
+ EACCES for Windows.
+
+Wed Jun 5 08:13:37 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_pow): Don't need to multiply SIZEOF_BDIGITS.
+ Use nlz instead of bitlength_bdigit.
+ (bitlength_bdigit): Removed.
+
+Wed Jun 5 07:14:18 2013 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (d_lite_cmp, d_lite_equal): simplified.
+
+Wed Jun 5 07:07:01 2013 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: fixed a bug [ruby-core:55295]. reported
+ by Riley Lynch.
+
+Wed Jun 5 06:44:08 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems 2.0.3
+
+ * test/rubygems: Tests for the above.
+
+ * NEWS: Added RubyGems 2.0.3 note.
+
+Wed Jun 5 06:35:15 2013 Eric Hodel <drbrain@segment7.net>
+
+ * doc/marshal.rdoc: Add description of Marshal format.
+
+Wed Jun 5 01:16:09 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * array.c (Array#+): fix documentation example.
+ Patch by Logan Serman. [Fixes GH-324]
+
+Wed Jun 5 00:21:54 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * lib/irb/lc/ja/help-message: update help messages.
+ following r41028. [ruby-dev:46707] [Feature #7510]
+
+Wed Jun 5 00:09:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * marshal.c (r_object0): Generalize a round up expression.
+ Use BDIGIT instead of int.
+
+Tue Jun 4 23:44:02 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * object.c (rb_Hash): fix docs. patched by Stefan Sch"ussler.
+ [ruby-core:55299] [Bug #8487]
+
+Tue Jun 4 23:16:49 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * lib/irb/completion.rb: Use %w literal construction for long lists.
+ Patch by Dave Goodchild. [Fixes GH-299]
+
+Tue Jun 4 23:08:42 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * ext/objspace/objspace.c: improve wording and remove duplicated comment.
+ Based on a patch by Dave Goodchild. [Fixes GH-299]
+
+Tue Jun 4 18:41:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bitlength_bdigit): Fix an off-by-one error.
+
+Tue Jun 4 15:30:00 2013 Kenta Murata <mrkn@cookpad.com>
+
+ * ext/bigdecimal/lib/bigdecimal/util.rb (Float#to_d): fix the number
+ of figures. Patch by Vipul A M <vipulnsward@gmail.com>.
+ https://github.com/ruby/ruby/pull/323 fix GH-323
+
+ * test/bigdecimal/test_bigdecimal_util.rb: fix for the above change.
+
+Tue Jun 4 00:44:27 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/fileutils/test_fileutils.rb (TestFileUtils#test_mkdir): add
+ EEXIST for Linux. (suggested by nurse)
+
+Mon Jun 3 23:58:19 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * lib/fileutils.rb (FileUtils.rmdir): use remove_tailing_slash.
+ * test/fileutils/test_fileutils.rb: test for above.
+
+Mon Jun 3 23:47:55 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bitlength_bdigit): New function.
+ (rb_big_pow): Use bitlength_bdigit instead of ffs.
+
+Mon Jun 3 23:11:19 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * lib/fileutils.rb: fix behavior when mkdir/mkdir_p accepted "/".
+ * test/fileutils/test_fileutils.rb: add test for above change.
+ Patched by Mitsunori Komatsu. [GH-319]
+
+Mon Jun 3 19:02:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (is_hfs): use the file descriptor instead of a path.
+
+Mon Jun 3 07:15:17 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: removes AC_CHECK_FUNCS(readdir_r). readdir_r()
+ is only used from dir.c and it doesn't need readdir_r().
+ * configure.in (SIZEOF_STRUCT_DIRENT_TOO_SMALL): removed. It is
+ only used for readdir_r.
+ * dir.c: removes NAME_MAX_FOR_STRUCT_DIRENT. It is not right way
+ to detect maximum length of path len. POSIX require to use
+ fpathconf(). IOW, it might have lead to make a vulnerability
+ using stack smashing. Moreover, readdir() works enough for our
+ usage.
+ * dir.c (READDIR): removes an implementation which uses
+ readdir_r() and parenthesize in a macro body correctly.
+ * dir.c (dir_read): removes IF_HAVE_READDIR_R(DEFINE_STRUCT_DIRENT
+ entry), it is used only for readdir_r().
+ * dir.c (dir_each): ditto.
+ * dir.c (glob_helper): ditto.
+
+ * dir.c (READDIR): removes entry and dp argument.
+ * dir.c (dir_read): adjust for the above change.
+ * dir.c (dir_each): ditto.
+ * dir.c (glob_helper): ditto.
+
+Mon Jun 3 03:40:29 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_yield_setup_block_args): partially revert r41019.
+ The code is not useless.
+
+Mon Jun 3 01:25:25 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * test/socket/test_sockopt.rb: change test name. follow r41037.
+
+Mon Jun 3 01:08:43 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * test/rinda/test_rinda.rb: rename functions introduced in r41009.
+
+Sun Jun 2 23:33:42 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * enc/trans/japanese_euc.trans, test/ruby/test_transcode.rb,
+ tool/transcode-tblgen.rb: change EUC-JP-2004 to EUC-JIS-2004.
+ This is follow up to changes in r41024.
+
+Sun Jun 2 22:44:42 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/socket/option.c: rename functions introduced in r41009
+ s/ip/ipv4/g because they are ipv4 functions.
+ (there's a policy that the name "ip" is for methods which supports
+ both ipv4 and ipv6)
+
+Sun Jun 2 16:15:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln_find.c (dln_find_exe, dln_find_file): remove deprecated
+ non-reentrant functions.
+
+Sun Jun 2 15:04:35 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/cgi/util.rb, lib/erb.rb: Use String#b [Feature #8394] by znz
+
+Sun Jun 2 14:10:21 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/irb/lc/help-message: Apply english updates for irb --help #7510
+
+Sun Jun 2 12:03:58 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * range.c: Fix rdoc on Range#bsearch [Bug #8242] [ruby-core:54143]
+
+Sun Jun 2 02:08:37 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/euc_jp.c: fix typo: the name of EUC-JIS-2004.
+
+Sat Jun 1 23:17:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * vm_eval.c (rb_mod_module_eval): mention in docs that arguments passed
+ to the method are passed to the block
+
+Sat Jun 1 17:58:13 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#freeze, taint, untaint): Save a "self" by
+ utilizing super returning self, and add tests while at it.
+
+Sat Jun 1 17:24:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_set_arguments): not a simple single argument if any
+ keyword arguments exist. [ruby-core:55203] [Bug #8463]
+
+ * vm_insnhelper.c (vm_yield_setup_block_args): split single parameter
+ if any keyword arguments exist, and then extract keyword arguments.
+ [ruby-core:55203] [Bug #8463]
+
+Sat Jun 1 11:16:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_exc_new_cstr): rename from rb_exc_new2.
+
+ * error.c (rb_exc_new_str): rename from rb_exc_new3.
+
+Sat Jun 1 10:13:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_new[2-5], rb_{tainted,usascii}_str_new2),
+ (rb_str_buf_new2): remove old interfaces.
+
+Sat Jun 1 08:00:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/zlib/zlib.c (gzfile_read, gzfile_read_all, gzfile_getc),
+ (gzreader_gets): check EOF. [ruby-core:55220] [Bug #8467]
+
+Sat Jun 1 07:32:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: Use BDIGIT type for hbase.
+
+Sat Jun 1 02:37:35 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/socket/option.c (sockopt_s_byte): constructor of the sockopt
+ whose value's is byte.
+
+ * ext/socket/option.c (sockopt_byte): getter for above.
+
+ * ext/socket/option.c (inspect_byte): inspect for above.
+
+ * ext/socket/option.c (sockopt_s_ip_multicast_loop): constructor of
+ the sockopt whose optname is IP_MULTICAST_LOOP.
+
+ * ext/socket/option.c (sockopt_ip_multicast_loop): getter for above.
+
+ * ext/socket/option.c (sockopt_s_ip_multicast_ttl): constructor of
+ the sockopt whose optname is IP_MULTICAST_TTL.
+
+ * ext/socket/option.c (sockopt_ip_multicast_ttl): getter for above.
+
+ * ext/socket/option.c (sockopt_inspect): use above.
+
+Sat Jun 01 01:50:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_power): use rb_dbl2big
+ to convert a double value to a Bignum.
+
+Sat Jun 1 00:19:50 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (calc_hbase): Make hbase the maximum power of base
+ representable in BDIGIT.
+
+Fri May 31 23:56:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (calc_hbase): Extracted from rb_big2str0.
+
+Fri May 31 23:22:24 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: Don't hard code SIZEOF_BDIGITS for log_base(hbase).
+ (big2str_orig): hbase_numdigits argument added.
+ (big2str_karatsuba): Ditto.
+ (rb_big2str0): Calculate hbase_numdigits.
+
+Fri May 31 17:57:21 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * process.c: Improve Process::exec documentation
+
+Fri May 31 17:26:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (rb_funcallv): add better names of rb_funcall2.
+
+ * vm_eval.c (rb_funcallv_public): ditto for rb_funcall3.
+
+Fri May 31 17:04:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_new_capa): add better names of rb_ary_new2.
+
+ * array.c (rb_ary_new_from_args): ditto for rb_ary_new3.
+
+ * array.c (rb_ary_new_from_values): ditto for rb_ary_new4.
+
+Fri May 31 16:35:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (HAVE_ATTRIBUTE_FUNCTION_ALIAS): define to tell if
+ alias attribute is available.
+
+Fri May 31 16:03:23 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * object.c, proc.c: s/call_seq/call-seq in rdoc. [Fixes GH-322]
+
+Fri May 31 15:56:36 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/openssl/ossl_ssl.c: Add missing paren in rdoc [Fixes GH-321]
+
+Fri May 31 11:58:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (set_visibility): extract from rb_mod_public(),
+ rb_mod_protected() and rb_mod_private().
+
+Thu May 30 19:47:42 2013 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_insnhelper.c (vm_callee_setup_keyword_arg,
+ vm_callee_setup_arg_complex): consider a hash argument for keyword
+ only when the number of arguments is more than the expected
+ mandatory parameters. [ruby-core:53199] [ruby-trunk - Bug #8040]
+
+ * test/ruby/test_keyword.rb: update a test for above.
+
+Thu May 30 17:55:04 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * process.c: RDoc on Process.spawn
+
+Thu May 30 00:08:14 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_profile_enable): rest_sweep() to finish last GC.
+ Profiling record is allocated at first of marking phase.
+ Enable at lazy sweeping may cause an error (SEGV).
+
+Wed May 29 10:33:27 2013 Koichi Sasada <ko1@atdot.net>
+
+ * hash.c: fix WB bug.
+ (1) Hash's key also needs WB.
+ (2) callback parameter *key and *value of st_update() is not a
+ storage of st_table itself (only local variable). So that
+ OBJ_WRITE() is not suitable, especially for `!existing'.
+ OBJ_WRITTEN() is used instead of OBJ_WRITE().
+
+Tue May 28 12:31:21 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/object_tracing.c: fix a bug reported at
+ "[ruby-core:55182] [ruby-trunk - Bug #8456][Open] Sugfault in Ruby Head"
+ Care about the case TracePoint#path #=> `nil'.
+
+ * ext/objspace/object_tracing.c: add two new methods:
+ * ObjectSpace.allocation_class_path(o)
+ * ObjectSpace.allocation_method_id(o)
+ They are not useful for Object.new because they are always
+ "Class" and :new.
+ To trace more useful information, we need to maintain call-tree
+ using call/return hooks, which is implemented by
+ ll-prof <http://sunagae.net/wiki/doku.php?id=software:llprof>
+
+ * test/objspace/test_objspace.rb: add a test.
+
+Tue May 28 11:30:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): leave makefiles untouched if the content is
+ not changed, to get rid of unnecessary re-linking.
+
+Tue May 28 03:11:02 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/gc_hook.c, ext/objspace/objspace.c: add new methods to
+ hook GC invocation.
+ * ObjectSpace.after_gc_start_hook=(proc)
+ * ObjectSpace.after_gc_end_hook=(proc)
+
+ Note that hooks are not kicked immediately. Procs are kicked
+ at postponed_job.
+
+ This feature is a sample of new internal event and
+ rb_postponed_job API.
+
+Tue May 28 02:56:15 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_stat): remove wrong rest_sweep().
+
+Tue May 28 02:44:23 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (garbage_collect_body): fix GC_ENABLE_LAZY_SWEEP condition.
+
+ * gc.c (GC_NOTIFY): move debug print location and use stderr instead
+ of stdout.
+
+Tue May 28 02:07:21 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_trace.c (rb_postponed_job_register_one): fix iteration bug.
+
+ * ext/-test-/postponed_job/postponed_job.c,
+ test/-ext-/postponed_job/test_postponed_job.rb: add a test.
+
+Tue May 28 00:34:23 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h, gc.c: add new internal event
+ RUBY_INTERNAL_EVENT_GC_END. This event invokes at the end of
+ after_sweep().
+ Time chart with lazy sweep is:
+ (1) Kick RUBY_INTERNAL_EVENT_GC_START
+ (2) [gc_marks()]
+ (3) [lazy_sweep()]
+ (4) [... run Ruby program (mutator) with lazy_sweep() ...]
+ (5) [after_sweep()]
+ (6) Kick RUBY_INTERNAL_EVENT_GC_END
+ (7) [... run Ruby program (mutator), and go to (1) ...]
+ Time chart without lazy sweep (GC.start, etc) is:
+ (1) Kick RUBY_INTERNAL_EVENT_GC_START
+ (2) [gc_marks()]
+ (3) [gc_sweep()]
+ (4) [after_sweep()]
+ (5) Kick RUBY_INTERNAL_EVENT_GC_END
+ (6) [... run Ruby program (mutator), and go to (1) ...]
+
+ * ext/-test-/tracepoint/tracepoint.c,
+ test/-ext-/tracepoint/test_tracepoint.rb: modify a test.
+
+Tue May 28 00:18:57 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_trace.c (rb_postponed_job_flush): remove a wrong comment.
+
+Mon May 27 22:09:33 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (RHASH_SIZE): Add a cast to suppress a
+ warning, comparison between signed and unsigned integer
+ expressions [-Wsign-compare], on ILP32.
+
+Mon May 27 19:25:47 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: rename RUBY_INTERNAL_EVENT_FREE to
+ RUBY_INTERNAL_EVENT_FREEOBJ.
+
+ * ext/-test-/tracepoint/tracepoint.c,
+ ext/objspace/object_tracing.c,
+ gc.c, vm_trace.c: catch up this change.
+
+Mon May 27 18:57:28 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/objspace.c: support ObjectSpace.trace_object_allocations.
+ Read the following test to know HOWTO.
+ This feature is a sample of RUBY_INTERNAL_EVENT.
+
+ * test/objspace/test_objspace.rb: add a test.
+
+ * ext/objspace/object_tracing.c: ditto.
+
+ * gc.c (rb_gc_count): add. This function returns GC count.
+
+ * internal.h: add decl. of rb_gc_count(). Same as `GC.count'.
+
+Mon May 27 17:33:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb (install_recursive): add maxdepth option.
+
+ * tool/rbinstall.rb (bin-comm): limit depth of bindir and reject empty
+ files. [ruby-core:55101] [Bug #8432]
+
+Mon May 27 16:16:18 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_trace.c (rb_postponed_job_flush, rb_postponed_job_register): use
+ ruby_xmalloc/xfree. It is safe during GC.
+
+Mon May 27 09:24:03 2013 Koichi Sasada <ko1@atdot.net>
+
+ * test/-ext-/postponed_job/test_postponed_job.rb: fix typo and class name.
+
+Mon May 27 09:05:17 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h, gc.c, vm_trace.c: add internal events.
+ * RUBY_INTERNAL_EVENT_NEWOBJ: object created.
+ * RUBY_INTERNAL_EVENT_FREE: object freed.
+ * RUBY_INTERNAL_EVENT_GC_START: GC started.
+ And rename `RUBY_EVENT_SWITCH' to `RUBY_INTERNAL_EVENT_SWITCH'.
+
+ Internal events can not invoke any Ruby program because the tracing
+ timing may be critical (under huge restriction).
+ These events can be hooked only by C-extensions.
+ We recommend to use rb_postponed_job_register() API to call Ruby
+ program safely.
+
+ This change is mostly written by Aman Gupta (tmm1).
+ https://bugs.ruby-lang.org/issues/8107#note-12
+ [Feature #8107]
+
+ * include/ruby/debug.h, vm_trace.c: added two new APIs.
+ * rb_tracearg_event_flag() returns rb_event_flag_t of this event.
+ * rb_tracearg_object() returns created/freed object.
+
+ * ext/-test-/tracepoint/extconf.rb,
+ ext/-test-/tracepoint/tracepoint.c,
+ test/-ext-/tracepoint/test_tracepoint.rb: add a test.
+
+Mon May 27 08:38:21 2013 Koichi Sasada <ko1@atdot.net>
+
+ * ext/-test-/postponed_job/postponed_job.c: fix `init' function name.
+
+Mon May 27 06:22:41 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/debug.h, vm_trace.c: add rb_postponed_job API.
+ Postponed jobs are registered with this API. Registered jobs
+ are invoked at `ruby-running-safe-point' as soon as possible.
+ This timing is completely same as finalizer timing.
+
+ There are two APIs:
+ * rb_postponed_job_register(flags, func, data): register a
+ postponed job with data. flags are reserved.
+ * rb_postponed_job_register_one(flags, func, data): same as
+ `rb_postponed_job_register', but only one `func' job is
+ registered (skip if `func' is already registered).
+
+ This change is mostly written by Aman Gupta (tmm1).
+ https://bugs.ruby-lang.org/issues/8107#note-15
+ [Feature #8107]
+
+ * gc.c: use postponed job API for finalizer.
+
+ * common.mk: add dependency from vm_trace.c to debug.h.
+
+ * ext/-test-/postponed_job/extconf.rb, postponed_job.c,
+ test/-ext-/postponed_job/test_postponed_job.rb: add a test.
+
+ * thread.c: implement postponed API.
+
+ * vm_core.h: ditto.
+
+Mon May 27 02:26:02 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_stat): collect promote_operation_count and
+ types (RGENGC_PROFILE >= 2).
+
+Mon May 27 01:40:58 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_stat): collect shade_operation_count,
+ remembered_sunny_object_count and remembered_shady_object_count
+ for each types when RGENGC_PROFILE >= 2.
+ They are informative for optimization.
+
+Mon May 27 01:15:22 2013 Koichi Sasada <ko1@atdot.net>
+
+ * hash.c (rb_hash_tbl_raw), internal.h: added.
+ Returns st_table without shading hash.
+
+ * array.c: use rb_hash_tbl_raw() for read-only purpose.
+
+ * compile.c (iseq_compile_each): ditto.
+
+ * gc.c (count_objects): ditto.
+
+ * insns.def: ditto.
+
+ * process.c: ditto.
+
+ * thread.c (clear_coverage): ditto.
+
+ * vm_insnhelper.c: ditto.
+
+Mon May 27 00:31:09 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/make-snapshot: use ENV["AUTOCONF"] instead of directly using
+ literal "autoconf".
+
+Sun May 26 21:31:46 2013 Koichi Sasada <ko1@atdot.net>
+
+ * hash.c, include/ruby/ruby.h: support WB protected hash.
+ * constify RHash::ifnone and make new macro RHASH_SET_IFNONE().
+ * insert write barrier for st_update().
+
+ * include/ruby/intern.h: declare rb_hash_set_ifnone(hash, ifnone).
+
+ * marshal.c (r_object0): use RHASH_SET_IFNONE().
+
+ * ext/openssl/ossl_x509name.c (Init_ossl_x509name): ditto.
+
+Sat May 25 23:22:38 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * test/fiddle/test_c_struct_entry.rb,
+ test/fiddle/test_c_union_entity.rb,
+ test/fiddle/test_cparser.rb, test/fiddle/test_func.rb,
+ test/fiddle/test_handle.rb, test/fiddle/test_import.rb,
+ test/fiddle/test_pointer.rb: don't run test if the system
+ don't support fiddle.
+
+Sat May 25 21:29:34 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/pty/pty.c (get_device_once): FreeBSD 10-current and 9-stable
+ added O_CLOEXEC support to posix_openpt, so assume FreeBSD 9.2 or
+ later supports it.
+ http://www.freebsd.org/cgi/query-pr.cgi?pr=162374
+
+Sat May 25 18:46:23 2013 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * proc.c (rb_method_entry_min_max_arity): fix missing break in switch.
+ This was introduced in r38236, which is not intentional apparently.
+ This has caused no actual harm because VM_METHOD_TYPE_OPTIMIZED is
+ not used except for OPTIMIZED_METHOD_TYPE_SEND, but may do in
+ future. Coverity Scan found this inadequacy.
+
+Sat May 25 18:08:06 2013 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * dir.c (bracket): fix copy-paste error. When the first and last
+ characters of fnmatch range have different length, fnmatch may
+ have wrongly matched a path that does not really match.
+ Coverity Scan found this bug.
+
+Sat May 25 17:06:25 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (after_gc_sweep): reduce full GC timing.
+
+Sat May 25 11:28:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (set_const_visibility): return without clearing method
+ cache if no arguments.
+
+ * vm_method.c (set_method_visibility): ditto.
+
+Sat May 25 11:27:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (set_method_visibility): quote unprintable method name.
+
+Sat May 25 11:24:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_frame_callee): returns the called name of the current
+ frame, not the previous frame.
+
+ * eval.c (prev_frame_callee, prev_frame_func): rename and make static,
+ as these are used by rb_f_method_name() and rb_f_callee_name() only.
+
+ * variable.c (set_const_visibility): use the called name.
+
+Sat May 25 08:58:23 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_quote_unprintable): check if argument is a string.
+
+Fri May 24 19:32:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * variable.c (set_const_visibility): use rb_frame_this_func() instead
+ of rb_frame_callee() for getting the name of the called method
+
+ * test/ruby/test_module.rb: add test for private_constant with no args
+
+Fri May 24 18:53:10 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: do major/full GC when:
+ * number of oldgen object is bigger than twice of
+ number of oldgen object at last full GC.
+ * number of remembered shady object is bigger than twice of
+ number of remembered shady object at last full GC.
+ * number of oldgen object and remembered shady object is bigger
+ than half of total object space.
+ (please fix my English!)
+
+Fri May 24 17:07:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+
+ * intern.h: remove dangling rb_class_init_copy declaration
+ [ruby-core:55120] [Bug #8434]
+
+Fri May 24 16:31:23 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/strscan/strscan.c (strscan_aref): raise error if given
+ name reference is not found.
+
+Fri May 24 15:48:18 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (after_gc_sweep, garbage_collect_body): do major GC (full GC)
+ before extending heaps.
+ TODO: do major GC when there are many old (promoted) objects.
+
+ * gc.c (after_gc_sweep): remove TODO comments.
+
+Fri May 24 11:04:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (LIBRUBY_RPATHFLAGS): do not append -L option with
+ runtime library directory if cross compiling, but only -R option.
+ runtime path makes no sense on the host system. [ruby-dev:47363]
+ [Bug #8443]
+
+Fri May 24 02:57:17 2013 Koichi Sasada <ko1@atdot.net>
+
+ * object.c (rb_obj_clone): should not propagate OLDGEN status.
+ This propagation had caused WB miss for class.
+
+Thu May 23 17:35:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (loaded_feature_path): fix invalid read by index underflow.
+ the beginning of name is also a boundary as well as just after '/'.
+
+Thu May 23 17:21:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (gc_profile_dump_on): revert r40898. ok to show the record
+ accumulating while lazy_sweep().
+
+Wed May 22 16:50:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (gc_profile_dump_on): use size_t to get rid of overflow and
+ show the header when next_index > 0, instead of next_index != 1.
+
+Wed May 22 15:18:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (setup_overlapped): check the error code in addition
+ to the result of SetFilePointer() to determine if an error occurred,
+ because INVALID_SET_FILE_POINTER is a valid value.
+ [ruby-core:55098] [Bug #8431]
+
+ * win32/win32.c (setup_overlapped, finish_overlapped): extract from
+ rb_w32_read() and rb_w32_write().
+
+Wed May 22 14:19:56 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_prepare_free_objects, rest_sweep, lazy_sweep): fix position
+ of `during_gc' setting.
+
+Wed May 22 07:36:08 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (garbage_collect): all GC is start from garbage_collect()
+ (or garbage_collect_body()). `garbage_collect()' accept additional
+ two parameters `full_mark' and `immediate_sweep'.
+ If `full_mark' is TRUE, then force it full gc (major gc), otherwise,
+ it depends on status of object space. Now, it will be minor gc.
+ If `immediate_sweep' is TRUE, then disable lazy sweep.
+ To allocate free memory, `full_mark' and `immediate_sweep' should be
+ TRUE. Otherwise, they should be FALSE.
+
+ * gc.c (gc_prepare_free_objects): use `garbage_collect_body()'.
+
+ * gc.c (slot_sweep, before_gc_sweep, after_gc_sweep): add logging code.
+
+Tue May 21 22:47:06 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/strscan/strscan.c (strscan_aref): support named captures.
+ patched by Konstantin Haase [ruby-core:54664] [Feature #8343]
+
+Tue May 21 21:48:44 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/ruby/test_dir_m17n.rb (TestDir_M17N#test_entries_compose):
+ Use #each instead of #map just for iteration.
+
+Tue May 21 19:57:22 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/lib/digest.rb (Digest::Class.file): Take optional
+ arguments that are passed to the constructor of the digest
+ class.
+
+Tue May 21 17:21:12 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: remove gc_profile_record::is_marked. always true.
+
+Tue May 21 17:13:40 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: fix to collect additional information for GC::Profiler.
+ * major/minor GC
+ * trigger reason of GC
+
+ * gc.c (gc_profile_dump_on): change reporting format with
+ added information.
+
+ * gc.c (gc_profile_record_get): return added information by
+ :GC_FLAGS => array.
+
+Tue May 21 16:45:31 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: GC::Profiler's sweeping time is accumulated all slot
+ sweeping time. At lazy GC, GC::Profiler makes new record entry
+ for each lazy_sweep(). In this change, accumulating all
+ slot_sweep() time.
+ And change indentation.
+
+Tue May 21 16:29:09 2013 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk (rdoc-bench): add a benchmark rule
+ using RDoc. Generate all rdoc related files
+ (same as `make rdoc') in temporary directory
+ and remove them. Execution time, GC::Profiler
+ and results of GC.stat are printed.
+
+ * tool/rdocbench.rb: added for `rdoc-bench'.
+
+Tue May 21 16:25:05 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_profile_dump_on): `count' should be (int) because it
+ can be negative number.
+ And use pointer for `record' (don't copy).
+
+Tue May 21 03:11:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (dir_each): compose HFS file names from
+ UTF8-MAC. [ruby-core:48745] [Bug #7267]
+
+Tue May 21 03:08:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/envutil.rb (assert_separately): require envutil in the
+ child process too.
+
+Tue May 21 03:07:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_conv_enc_opts): should infect.
+
+Mon May 20 22:24:45 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#delete_if, Set#keep_if): Avoid blockless call of
+ proc, which is not portable to JRuby. Replace &method() with
+ faster and simpler literal blocks while at it.
+
+Mon May 20 22:00:31 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/e2mmap.rb: Format of E2MM documentation
+
+Mon May 20 21:41:15 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/extmk.rb: nodoc this file
+
+Mon May 20 20:43:32 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/cmath.rb: Remove duplicate RDoc heading from overview
+
+Mon May 20 20:36:19 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/securerandom.rb: Update position of overview for RDoc
+
+Mon May 20 19:33:55 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * math.c: improve and fix documentation of sin, tan and log
+
+Mon May 20 19:31:49 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * lib/logger.rb (Logger::Application): show namespace in documentation
+
+Mon May 20 11:50:12 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/pp.rb: Revert part of r40834 and nodoc PP::ObjectMixin
+ [ruby-core:55068]
+
+Mon May 20 10:40:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/webrick/htmlutils.rb (WEBrick::HTMLUtils#escape): replace HTML
+ meta chars even in non-ascii string. [Bug #8425] [ruby-core:55052]
+
+ * lib/webrick/httputils.rb (WEBrick::HTTPUtils#{_escape,_unescape}):
+ fix %-escape encodings. [Bug #8425] [ruby-core:55052]
+
+ * lib/webrick/httpservlet/filehandler.rb (set_dir_list): revert r20152
+ partially and fix misuse of bytesize and regexp repetition operator.
+
+Mon May 20 08:03:51 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/profiler.rb: Document Profiler__ methods
+
+Mon May 20 08:02:13 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/tempfile.rb: nodoc Tempfile#inspect
+
+Mon May 20 07:48:24 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/stringio/stringio.c: Correct position of method rdoc
+
+Mon May 20 07:27:41 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * math.c: RDoc formatting of Math core docs with domains and codomains
+ Patch by @eLobato [Fixes GH-309]
+
+Mon May 20 05:58:12 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/bigdecimal/bigdecimal.c: Formatting for BigMath [Fixes GH-306]
+ Based on a patch by @eLobato.
+ * ext/bigdecimal/lib/bigdecimal/math.rb: ditto
+
+Mon May 20 04:56:59 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/forwardable.rb: Forwardable examples in overview were broken
+ Based on patch by @joem [Fixes GH-303] [Bug #8392]
+
+Mon May 20 03:35:26 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/optparse.rb: nodoc OptionParser::Version and SPLAT_PROC
+
+Mon May 20 03:16:52 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/pp.rb: Document PP::ObjectMixin [Fixes GH-312]
+
+Sun May 19 23:52:22 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * test/webrick/test_htmlutils.rb: add test for WEBrick::HTMLUtils.
+
+Sun May 19 23:12:07 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * encoding.c: document fix, change default script encoding.
+ patched by @windwiny [Fixes GH-310]
+
+Sun May 19 17:29:07 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#delete_if, Set#keep_if): Add comments.
+
+Sun May 19 11:37:36 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * ext/fiddle/extconf.rb: ignore rc version of libffi to fix build failure.
+
+Sun May 19 10:38:50 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el (ruby-electric-delete-backward-char): Use
+ delete-char instead of delete-backward-char, which is an
+ interactive function.
+
+Sun May 19 03:59:29 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (str_scrub0): added for refactoring.
+
+Sun May 19 03:48:26 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (URI.decode_www_form): scrub string if decoded
+ bytes are invalid for the encoding.
+
+Sun May 19 02:46:32 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#delete_if, Set#keep_if): Make Set#delete_if and
+ Set#keep_if more space and time efficient by avoiding to_a.
+
+Sun May 19 02:33:09 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el (ruby-electric-setup-keymap): Make
+ backquotes electric as well. It was listed in
+ ruby-electric-expand-delimiters-list but not activated.
+
+ * misc/ruby-electric.el (ruby-electric-delete-backward-char):
+ Introduce electric DEL that deletes what the previous electric
+ command has input.
+
+ * misc/ruby-electric.el (ruby-electric-matching-char): Make
+ electric quotes work again at the end of buffer.
+
+Sun May 19 01:39:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (setjmp-type): check if setjmpex() is really available.
+ workaround for i686-w64-mingw32 which declares it but lacks its
+ definition.
+
+ * include/ruby/defines.h: include setjmpex.h only if also setjmpex()
+ is available.
+
+Sat May 18 23:57:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (setjmp-type): use setjmpex() on w64-mingw32 to get rid
+ of -Wclobbered warnings.
+
+ * include/ruby/defines.h: include setjmpex.h here becase setjmp.h is
+ included from win32.h via intrin.h, winnt.h, and so on.
+
+Sat May 18 20:28:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb (INTEGER2NUM): Make less comparisons.
+
+Sat May 18 20:15:28 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (str_scrub_bang): add String#scrub!. [Feature #8414]
+
+Sat May 18 16:59:52 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb (INTEGER2NUM): Renamed from INTEGER2VALUE.
+
+Sat May 18 16:57:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb (INTEGER2VALUE): Suppress a warning:
+ comparison between signed and unsigned integer expressions
+
+Sat May 18 16:38:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): forward anonymous and first keyword
+ rest argument one. [ruby-core:55033] [Bug #8416].
+
+Sat May 18 15:49:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (rb_vm_tag): move jmpbuf between tag and prev so ensure to
+ be accessible.
+
+Sat May 18 11:05:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enumerator.c (inspect_enumerator): use VALUE instead of mere char*
+ by using rb_sprintf() and rb_id2str().
+
+ * enumerator.c (append_method): extract from inspect_enumerator().
+
+Sat May 18 09:00:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb (INTEGER2VALUE): Use LONG2FIX if possible.
+
+Sat May 18 00:38:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: Convert integer constants bigger than int
+ correctly.
+
+Fri May 17 22:02:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ifaddr.c: Use unsigned LONG_LONG to represent flags
+ because SunOS 5.11 (OpenIndiana) defines ifa_flags as uint64_t.
+
+Fri May 17 21:47:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * cont.c: Typo in constant MAX_MACHINE_STACK_CACHE from '..MAHINE..'
+ patch by @schmurfy [Fixes GH-307]
+
+Fri May 17 19:18:24 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el (ruby-electric-matching-char): Do not put
+ a closing quote when the quote typed does not start a string, as
+ in $', ?\' or ?\".
+
+Fri May 17 18:06:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Consider error messages to find out version option of
+ C compiler.
+ The C compiler of Sun Studio C emits "Warning: Option -qversion
+ passed to ld, if ld is invoked, ignored otherwise" and exit
+ successfully.
+
+Fri May 17 17:34:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_gc_guarded_ptr): unoptimize on other compilers than gcc and
+ msvc.
+
+Fri May 17 11:06:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_intern.h (TH_PUSH_TAG): ensure jmpbuf to be accessible before
+ pushing tag to get rid of unaccessible tag by stack overflow.
+
+Thu May 16 17:15:32 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_eval.c (rb_catch_obj): add volatile to tag to prevent crash
+ experimentally.
+ http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20130515T133500Z.log.html.gz
+
+Thu May 16 16:19:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (verconf.in): no longer used.
+
+ * win32/Makefile.sub (config.status): fix typo.
+
+ * configure.in, template/verconf.h.in (RUBY_EXEC_PREFIX): fix for
+ default prefix.
+
+Thu May 16 13:12:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/verconf.h.in: generate verconf.h from the template and
+ rbconfig.rb.
+
+Thu May 16 05:47:18 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: fix syntax error.
+ Thanks @spastorino! [ruby-core:55011]
+
+Thu May 16 03:05:45 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_node_newnode): use newobj_of() instead of rb_newobj().
+
+Thu May 16 02:03:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/depend: Add a dependency for ifaddr.o.
+
+Thu May 16 01:44:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (verconf.h): $< cannot be used in explicit rules with
+ nmake.
+
+ * win32/Makefile.sub (CONFIG_H): create verconf.in instead of
+ verconf.h.
+
+Thu May 16 01:25:07 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: only emit warnings when
+ -w is enabled.
+
+Wed May 15 18:58:17 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (newobj): rename to `newobj_of' and accept additional
+ three parameters v1, v2, v3. newobj_of() do OBJSETUP() and
+ fill values with v1, v2, v3.
+
+ * gc.c (rb_data_object_alloc, rb_data_typed_object_alloc):
+ use newobj_of().
+
+Wed May 15 17:55:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_PLATFORM): move to config.h as needed by
+ version.c.
+
+Wed May 15 17:04:11 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: add an additional RGENGC_PROFILE mode (2).
+ Profiling result can be check by GC.stat.
+
+ * gc.c (type_name): separate from obj_type_name().
+
+Wed May 15 16:58:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: save configured load path values into verconf.in.
+
+ * common.mk (verconf.h): create from verconf.in with shvar_to_cpp.rb.
+
+ * tool/shvar_to_cpp.rb: turn shell variables into C macros.
+ [Bug #7959]
+
+ * loadpath.c: split load path staffs from version.c.
+
+ * dmyloadpath.c: miniruby has no builtin load paths, so verconf.h is
+ not needed.
+
+Wed May 15 03:56:09 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: adding backwards
+ compatible YAMLTree.new method
+
+Wed May 15 02:22:16 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych.rb: Adding Psych.safe_load for loading a user
+ defined, restricted subset of Ruby object types.
+ * ext/psych/lib/psych/class_loader.rb: A class loader for
+ encapsulating the logic for which objects are allowed to be
+ deserialized.
+ * ext/psych/lib/psych/deprecated.rb: Changes to use the class loader
+ * ext/psych/lib/psych/exception.rb: ditto
+ * ext/psych/lib/psych/json/stream.rb: ditto
+ * ext/psych/lib/psych/nodes/node.rb: ditto
+ * ext/psych/lib/psych/scalar_scanner.rb: ditto
+ * ext/psych/lib/psych/stream.rb: ditto
+ * ext/psych/lib/psych/streaming.rb: ditto
+ * ext/psych/lib/psych/visitors/json_tree.rb: ditto
+ * ext/psych/lib/psych/visitors/to_ruby.rb: ditto
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto
+ * ext/psych/psych_to_ruby.c: ditto
+ * test/psych/helper.rb: ditto
+ * test/psych/test_safe_load.rb: tests for restricted subset.
+ * test/psych/test_scalar_scanner.rb: ditto
+ * test/psych/visitors/test_to_ruby.rb: ditto
+ * test/psych/visitors/test_yaml_tree.rb: ditto
+
+Wed May 15 02:06:35 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * test/psych/helper.rb: envutil is not available outside Ruby, so
+ port the functions from envutil to the test helper.
+
+ * test/psych/test_deprecated.rb: ditto
+
+ * test/psych/test_encoding.rb: ditto
+
+Wed May 15 00:42:54 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * signal.c: need to include unistd.h for write(2).
+ unistd.h is now included via ruby/defines.h, but should explicitly
+ include here. (suggested by kosaki)
+
+Tue May 14 23:43:05 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/.document: Add ifaddr.c.
+
+Tue May 14 23:24:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/extconf.rb: check for if_nametoindex() for
+ i686-w64-mingw32, and check for declarations of if_indextoname() and
+ if_nametoindex().
+
+ * ext/socket/ifaddr.c (ifaddr_ifindex): not-implement unless
+ if_nametoindex() is available.
+
+ * ext/socket/rubysocket.h: declare if_indextoname() and
+ if_nametoindex() if available but not declared.
+
+Tue May 14 19:58:17 2013 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+
+ * ext/dl/lib/dl/func.rb (DL::Function#call): check tainted when
+ $SAFE > 0.
+ * ext/fiddle/function.c (function_call): check tainted when $SAFE > 0.
+ * test/fiddle/test_func.rb (module Fiddle): add test for above.
+
+
+Tue May 14 14:51:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/win32.h (INTPTR_MAX, INTPTR_MIN, UINTPTR_MAX): split
+ from intptr_t and uintptr_t, since VC9 defines the latter only in
+ crtdefs.h.
+
+Tue May 14 12:21:28 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (NET_LUID): mingw may have NET_LUID and not defined
+ _IFDEF_.
+
+Tue May 14 03:33:17 2013 Koichi Sasada <ko1@atdot.net>
+
+ * string.c (rb_str_new_frozen): remove debug print.
+
+Tue May 14 03:22:51 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: enable to generate write barrier protected
+ arrays (T_ARRAY).
+
+Tue May 14 03:21:42 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: enable to generate write barrier protected
+ strings (T_STRING).
+
+Tue May 14 03:19:59 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: enable to generate write barrier protected
+ objects (T_OBJECT).
+
+Tue May 14 03:17:15 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: enable to generate write barrier protected
+ objects for numeric types (Float, Complex, Rational, Bignum).
+
+Tue May 14 03:10:59 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: enable RGENGC (USE_RGENGC)
+ but no type creates write protected (sunny) objects
+ (RGENGC_WB_PROTECTED_* == 0).
+
+Tue May 14 02:47:30 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: support RGENGC. [ruby-trunk - Feature #8339]
+ See this ticket about RGENGC.
+
+ * gc.c: Add several flags:
+ * RGENGC_DEBUG: if >0, then prints debug information.
+ * RGENGC_CHECK_MODE: if >0, add assertions.
+ * RGENGC_PROFILE: if >0, add profiling features.
+ check GC.stat and GC::Profiler.
+
+ * include/ruby/ruby.h: disable RGENGC by default (USE_RGENGC == 0).
+
+ * array.c: add write barriers for T_ARRAY and generate sunny objects.
+
+ * include/ruby/ruby.h (RARRAY_PTR_USE): added. Use this macro if
+ you want to access raw pointers. If you modify the contents which
+ pointer pointed, then you need to care write barrier.
+
+ * bignum.c, marshal.c, random.c: generate T_BIGNUM sunny objects.
+
+ * complex.c, include/ruby/ruby.h: add write barriers for T_COMPLEX
+ and generate sunny objects.
+
+ * rational.c (nurat_s_new_internal), include/ruby/ruby.h: add write
+ barriers for T_RATIONAL and generate sunny objects.
+
+ * internal.h: add write barriers for RBasic::klass.
+
+ * numeric.c (rb_float_new_in_heap): generate sunny T_FLOAT objects.
+
+ * object.c (rb_class_allocate_instance), range.c:
+ generate sunny T_OBJECT objects.
+
+ * string.c: add write barriers for T_STRING and generate sunny objects.
+
+ * variable.c: add write barriers for ivars.
+
+ * vm_insnhelper.c (vm_setivar): ditto.
+
+ * include/ruby/ruby.h, debug.c: use two flags
+ FL_WB_PROTECTED and FL_OLDGEN.
+
+ * node.h (NODE_FL_CREF_PUSHED_BY_EVAL, NODE_FL_CREF_OMOD_SHARED):
+ move flag bits.
+
+Tue May 14 01:54:48 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: remove rb_objspace_t::marked_num.
+ We can use `objspace_live_num()' instead of removed `marked_num'
+ if it is after `after_gc_sweep()' function call.
+
+ * gc.c (after_gc_sweep): use objspace_live_num() instead of removed
+ rb_objspace_t::marked_num.
+
+ * gc.c (gc_mark_ptr, gc_marks): remove rb_objspace_t::marked_num code.
+
+ * gc.c (gc_prepare_free_objects): do not call set_heaps_increment()
+ with checking objspace->heap.marked_num. At this point, we only
+ need to check availability of free-cell.
+
+ * gc.c (lazy_sweep): call after_gc_sweep() if there are no sweep_able entry.
+
+ * gc.c (rest_sweep, gc_prepare_free_objects): remove after_gc_sweep() call.
+
+Tue May 14 01:50:41 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: disable GC_PROFILE_MORE_DETAIL (fix last commit).
+
+ * gc.c (gc_prof_set_malloc_info): fix "objspace->heap.live_num" to
+ "objspace_live_num(objspace)". There is no such member variable.
+
+Tue May 14 01:25:55 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: refactoring GC::Profiler.
+
+ * gc.c (gc_prof_sweep_timer_start/stop): removed because
+ they doesn't support lazy sweep.
+
+ * gc.c (gc_prof_sweep_slot_timer_start/stop): added.
+ redefine `sweeping time' to accumulated time of all of
+ slot_sweep().
+
+ * gc.c (rb_objspace_t::profile::count): renamed to
+ rb_objspace_t::profile::next_index. `counter' seems ambiguous.
+ increment it when next record is acquired.
+
+Tue May 14 00:48:55 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: constify RRational::(num,den) and
+ RComplex::(real,imag).
+ Add macro to set these values:
+ * RRATIONAL_SET_NUM()
+ * RRATIONAL_SET_DEN()
+ * RCOMPLEX_SET_REAL()
+ * RCOMPLEX_SET_IMAG()
+ This change is a part of RGENGC branch [ruby-trunk - Feature #8339].
+
+ TODO: API design. RRATIONAL_SET(rat,num,den) is enough?
+ TODO: Setting constify variable with cast has same issue of r40691.
+
+ * complex.c, rational.c: use above macros.
+
+Mon May 13 21:49:17 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Check socketpair again.
+ It is required on Unix.
+
+Mon May 13 21:20:32 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (getipaddrs): use alternative interface name if
+ available, because if_nametoindex() requires them.
+
+Mon May 13 20:23:24 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c, include/ruby/win32.h (getipaddrs): [experimental]
+ emulate getipaddrs(3) on Unix.
+
+ * win32/Makefile.sub, configure.in (LIBS): need iphlpapi.lib for above
+ function.
+
+ * include/ruby/win32.h (socketpair): rb_w32_socketpair() doesn't
+ substitute for any function, so use non-prefixed name.
+
+ * ext/socket/extconf.rb (socketpair); follow above change.
+
+Mon May 13 20:11:06 2013 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c (prepare_iseq_build): remove additional line break.
+
+Mon May 13 19:29:54 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: constify RBasic::klass and add
+ RBASIC_CLASS(obj) macro which returns a class of `obj'.
+ This change is a part of RGENGC branch [ruby-trunk - Feature #8339].
+
+ * object.c: add new function rb_obj_reveal().
+ This function reveal internal (hidden) object by rb_obj_hide().
+ Note that do not change class before and after hiding.
+ Only permitted example is:
+ klass = RBASIC_CLASS(obj);
+ rb_obj_hide(obj);
+ ....
+ rb_obj_reveal(obj, klass);
+
+ TODO: API design. rb_obj_reveal() should be replaced with others.
+
+ TODO: modify constified variables using cast may be harmful for
+ compiler's analysis and optimization.
+ Any idea to prohibit inserting RBasic::klass directly?
+ If rename RBasic::klass and force to use RBASIC_CLASS(obj),
+ then all codes such as `RBASIC(obj)->klass' will be
+ compilation error. Is it acceptable? (We have similar
+ experience at Ruby 1.9,
+ for example "RARRAY(ary)->ptr" to "RARRAY_PTR(ary)".
+
+ * internal.h: add some macros.
+ * RBASIC_CLEAR_CLASS(obj) clear RBasic::klass to make it internal
+ object.
+ * RBASIC_SET_CLASS(obj, cls) set RBasic::klass.
+ * RBASIC_SET_CLASS_RAW(obj, cls) same as RBASIC_SET_CLASS
+ without write barrier (planned).
+ * RCLASS_SET_SUPER(a, b) set super class of a.
+
+ * array.c, class.c, compile.c, encoding.c, enum.c, error.c, eval.c,
+ file.c, gc.c, hash.c, io.c, iseq.c, marshal.c, object.c,
+ parse.y, proc.c, process.c, random.c, ruby.c, sprintf.c,
+ string.c, thread.c, transcode.c, vm.c, vm_eval.c, win32/file.c:
+ Use above macros and functions to access RBasic::klass.
+
+ * ext/coverage/coverage.c, ext/readline/readline.c,
+ ext/socket/ancdata.c, ext/socket/init.c,
+ * ext/zlib/zlib.c: ditto.
+
+Mon May 13 18:44:14 2013 Koichi Sasada <ko1@atdot.net>
+
+ * *.c, parse.y, insns.def: use RARRAY_AREF/ASET macro
+ instead of using RARRAY_PTR().
+
+Mon May 13 16:53:53 2013 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: add new utility macros to access
+ Array's element.
+ * RARRAY_AREF(a, i) returns i-th element of an array `a'
+ * RARRAY_ASET(a, i, v) set i-th element of `a' to `v'
+ This change is a part of RGENGC branch [ruby-trunk - Feature #8339].
+
+Mon May 13 15:31:10 2013 Koichi Sasada <ko1@atdot.net>
+
+ * object.c (rb_obj_setup): added.
+
+ * include/ruby/ruby.h (OBJSETUP): use rb_obj_setup() instead of
+ a macro.
+
+Mon May 13 15:24:16 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_data_object_alloc): check klass only if klass is not 0.
+ klass==0 means internal object.
+
+Mon May 13 14:57:28 2013 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_data_object_alloc, rb_data_typed_object_alloc):
+ use NEWOBJ_OF() instead of NEWOBJ().
+
+Mon May 13 14:51:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (rb_obj_singleton_method): new method Kernel#singleton_method
+ which returns a Method object of the singleton method.
+ non-singleton method causes NameError, but not aliased or zsuper
+ method, right now.
+ [ruby-core:54914] [Feature #8391]
+
+ * vm_method.c (rb_method_entry_at): return the method entry for id at
+ klass, without ancestors.
+
+ * class.c (rb_singleton_class_get): get the singleton class if exists,
+ or nil.
+
+Mon May 13 10:20:59 2013 Yuki Yugui Sonoda <yugui@google.com>
+
+ * ext/openssl/ossl_ssl.c: Disabled OpenSSL::SSL::SSLSocket if
+ defined(OPENSSL_NO_SOCK).
+
+ This fixes a linkage error on platforms which do not have socket.
+ OpenSSL itself is still useful as a set of cryptographic functions
+ even on such platforms.
+
+Mon May 13 10:30:04 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * hash.c: Hash[] and {} are not equivalent by @eam [Fixes GH-301]
+
+Mon May 13 10:04:22 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * random.c: Document Random::DEFAULT by @eLobato [Fixes GH-304]
+
+Sun May 12 21:12:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (OFFT2NUM): RUBY_REPLACE_TYPE also defines macro
+ to convert int type to VALUE if found.
+
+Wed May 8 13:46:52 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/intern.h (rb_iv_set, rb_iv_get): removed. Because
+ ruby.h has a declaration for that.
+
+Wed May 8 13:49:06 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/intern.h (rb_uint2big, rb_int2big, rb_uint2inum)
+ (rb_int2inum, rb_ll2inum, rb_ull2inum): removed because ruby.h
+ has a declaration for these.
+
+Sun May 12 17:52:23 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: removes 'ac_cv_func_fseeko=yes' form MinGW
+ specific definitions.
+
+Sun May 12 17:25:46 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * file.c (rb_file_s_truncate): use correct type. chsize takes
+ a long.
+
+Sun May 12 17:18:46 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c: move '#define HAVE_SPAWNV 1' to win32/Makefile.sub.
+ * win32/Makefile.sub: see above.
+
+Sun May 12 17:13:32 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: removes AC_CHECK_FUNCS(setitimer) because it's
+ unused.
+
+Sun May 12 17:08:16 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: removes AC_CHECK_FUNCS(pause) because it's unused.
+
+Sun May 12 17:05:18 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * signal.c (rb_f_kill): fixes typo. s/HAS_KILLPG/HAVE_KILLPG/.
+
+Sun May 12 17:03:27 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: abort if gettimeofday doesn't exist.
+
+Sun May 12 16:31:27 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: adds RUBY_REPLACE_TYPE(off_t) for creating
+ NUM2OFFT.
+ * file.c (rb_file_truncate): use correct type. chsize() take
+ a long.
+ * include/ruby/ruby.h (NUM2OFFT): use a definition created by
+ a configure script by default.
+
+Sun May 12 16:03:41 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: removes AC_CHECK_FUNC(fseeko, fseeko64, ftello,
+ ftello64). They are not used from anywhere.
+
+ * win32/win32.c (fseeko): removes.
+ * win32/win32.c (rb_w32_ftello): removes.
+ * include/ruby/win32.h: removes declarations of rb_w32_ftello and
+ rb_w32_fseeko.
+ * win32/Makefile.sub: removes '#define HAVE_FTELLO 1'.
+
+Sun May 12 15:51:47 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: remove AC_CHECK_FUNC(close). It is not used from
+ anywhere.
+
+Sun May 12 15:50:45 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: adds comments for setjmp check.
+
+Sun May 12 15:38:09 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: move clock_gettime() check into regular place.
+
+Wed May 8 13:45:53 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: add getenv() declaration check.
+ * dln_find.c: add HAVE_DECL_GETENV test.
+
+Sun May 12 15:33:18 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: sorts AC_CHECK_FUNCS()s as alphabetical order.
+
+Wed May 8 13:41:57 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * bignum.c: remove redundant decl for big_lshift() big_rshift().
+
+Sun May 12 16:06:43 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/socket/rubysocket.h (rsock_inspect_sockaddr): as r40646
+ check HAVE_TYPE_STRUCT_SOCKADDR_DL.
+
+Sat May 11 23:01:58 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/socket/rubysocket.h (HAVE_TYPE_STRUCT_SOCKADDR_DL):
+ MSVC has struct sockaddr_dl, but its content is broken.
+ http://ruby-mswin.cloudapp.net/vc10-x64/ruby-trunk/log/20130511T103938Z.log.html.gz
+
+Sat May 11 22:07:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/rinda/test_rinda.rb: Socket.getifaddrs may returns an interface
+ which #addr method returns nil for venet0 in OpenVZ.
+
+Sat May 11 21:56:34 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (rsock_inspect_sockaddr): Add casts to
+ suppress warnings.
+
+Sat May 11 17:28:51 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket: New method, Socket.getifaddrs, implemented.
+ [ruby-core:54777] [Feature #8368]
+
+Sat May 11 00:47:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * gc.h (SET_MACHINE_STACK_END): Add !defined(_ILP32) to a defining
+ condition to avoid compilation error on x32.
+ https://sites.google.com/site/x32abi/
+
+Fri May 10 23:56:34 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_peek_variable_name): treat invalid global, class,
+ and instance variable names as mere strings rather than errors.
+ [ruby-core:54885] [Bug #8375]
+
+Fri May 10 20:22:40 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Move library checks into "Checks for libraries." part.
+
+Fri May 10 19:32:01 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Reformat arguments of AC_CHECK_HEADERS and
+ AC_CHECK_FUNCS to track modifications easily.
+
+Fri May 10 12:01:36 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Don't link librt if clock_gettime is available in
+ the main C library.
+ glibc 2.17 moves clock_* from librt to the main C library.
+ http://sourceware.org/ml/libc-announce/2012/msg00001.html
+
+Thu May 9 22:00:35 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_sendmsg_internal): controls_num should
+ not be negative.
+
+Thu May 9 21:09:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * file.c, ext/etc/etc.c, ext/socket/unixsocket.c,
+ ext/openssl/ossl.h, ext/openssl/openssl_missing.c: Use
+ HAVE_AGGREGATE_MEMBER instead of HAVE_ST_MEMBER.
+
+Thu May 9 20:43:41 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_sendmsg_internal): Always set
+ controls_num to raise NotImplementedError appropriately.
+ (bsock_recvmsg_internal): Raise NotImplementedError if
+ :scm_rights=>true is given on platforms which don't have
+ 4.4BSD style control message.
+
+Thu May 9 12:06:07 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h, ext/socket/unixsocket.c,
+ ext/socket/ancdata.c: Use HAVE_STRUCT_MSGHDR_MSG_CONTROL instead
+ of HAVE_ST_MSG_CONTROL.
+
+Thu May 9 11:30:02 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * string.c: Add call-seq alias for String#=== [Bug #8381]
+
+Thu May 9 11:14:18 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * doc/contributing.rdoc: Add guide for contributing to CRuby
+
+Thu May 9 04:55:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Check socket library again. shutdown() is used in
+ io.c.
+
+Thu May 9 01:52:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Don't check socketpair. socketpair is not used in
+ ruby command itself.
+
+Thu May 9 01:05:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (rb_mod_included_modules): should not include non-modules.
+ [ruby-core:53158] [Bug #8025]
+
+Wed May 8 22:46:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (rb_mod_included_modules): should not include the original
+ module itself. [ruby-core:53158] [Bug #8025]
+
+Wed May 8 17:43:55 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_io_ext_int_to_encs): ignore internal encoding if external
+ encoding is ASCII-8BIT. [Bug #8342]
+
+Wed May 8 13:49:38 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/generator/generator.c (isArrayOrObject): cast char to
+ unsigned char. [Bug #8378]
+
+Wed May 8 13:46:10 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/generator/depend: fix dependencies [Bug #8379]
+
+ * ext/json/parser/depend: ditto.
+
+Wed May 8 13:07:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): fail if $, @, @@ are not followed by a valid
+ name character. [ruby-core:54846] [Bug #8375].
+
+Wed May 8 13:06:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (ISGRAPH): add missing macro.
+
+Wed May 8 06:42:56 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/socket/socket.c (socket_s_ip_address_list): fix wrongly filled
+ sin6_scope_id on KAME introduced by r40593 for OpenIndiana.
+ KAME uses fe80:<scope_id>::<interface id> for link-local address
+ internally.
+ Setting sin6_scope_id causes it leaked.
+ see also comments of sockaddr_obj().
+
+Tue May 7 22:12:34 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/readline/readline.c (insert_ignore_escape): Add a cast to
+ unsigned char * before dereference.
+ This suppress a warning on Cygwin.
+
+Tue May 7 12:15:24 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): Add a cast to
+ suppress warning.
+ Bionic defines socklen_t as int.
+ Bionic defines msg_controllen as unsigned int (__kernel_size_t)
+ instead of socklen_t as POSIX.
+
+Tue May 7 12:12:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_inspect): Don't call
+ anc_inspect_ipv6_pktinfo if !HAVE_TYPE_STRUCT_IN6_PKTINFO.
+ anc_inspect_ipv6_pktinfo is not defined in the case.
+
+Tue May 7 12:10:52 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (socket_s_ip_address_list): Cast EXTRA_SPACE as
+ int. This suppress a warning.
+
+Tue May 7 12:09:29 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Set close_fds false for Cygwin.
+ Cygwin doesn't support fd passing.
+ This enables socket extension library cross-compilable by default.
+
+Tue May 7 12:07:35 2013 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (swap32): Don't redefine it if it is already defined.
+ Bionic defines it.
+ (swap64): Ditto.
+
+Mon May 6 20:50:37 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (socket_s_ip_address_list): Fill sin6_scope_id
+ if getifaddrs() returns an IPv6 link local address which
+ sin6_scope_id is zero, such as on OpenIndiana SunOS 5.11.
+
+Sun May 5 18:56:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * insns.def (defined): use vm_search_superclass() like as normal super
+ call. based on a patch <https://gist.github.com/wanabe/5520026> by
+ wanabe.
+
+ * vm_insnhelper.c (vm_search_superclass): return error but not raise
+ exceptions.
+
+ * vm_insnhelper.c (vm_search_super_method): check the result of
+ vm_search_superclass and raise exceptions on error.
+
+Sun May 5 16:29:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * insns.def (defined): get method entry from the method top level
+ frame, not block frame. [ruby-core:54769] [Bug #8367]
+
+Sun May 5 13:28:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/ruby.pc.in (Cflags): use rubyarchhdrdir for multiarch.
+ [Bug #7874]
+
+Sat May 4 07:20:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * doc/security.rdoc: Add note about reporting security vulns
+
+Sat May 4 04:13:27 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/defines.h (RUBY_ATTR_ALLOC_SIZE): New for
+ attribute((alloc_size(params))).
+
+ * include/ruby/defines.h (xmalloc, xmalloc2, xcalloc)
+ (xrealloc, xrealloc2): Annotated by RUBY_ATTR_ALLOC_SIZE.
+ * include/ruby/ruby.h (rb_alloc_tmp_buffer): ditto.
+
+Fri May 3 19:32:13 2013 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/util.rb: All class methods modulized.
+ We can use these methods like a function when "include CGI::Util".
+ [Feature #8354]
+
+Fri May 3 14:09:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Make default_ipv6 true for Cygwin.
+ Cygwin supports IPv6 since Cygwin 1.7.1 (2009-12).
+ http://cygwin.com/ml/cygwin-announce/2009-12/msg00027.html
+
+Fri May 3 13:35:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/{getaddrinfo,getnameinfo}.c: define socklen_t if not
+ defined, e.g., older VC.
+
+Fri May 3 13:29:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/win32.h (INTPTR_MAX, INTPTR_MIN, UINTPTR_MAX): also
+ should be defined when defining intptr_t and uintptr_t.
+ bigdecimal.c requires the former two now.
+
+Fri May 3 13:22:12 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (poll_child_status): fix build error on older mingw.
+
+Fri May 3 00:15:58 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * common.mk: remove timestamps in distclean-ext realclean-ext.
+
+Thu May 2 23:23:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_obj_is_kind_of): skip prepending modules.
+ [ruby-core:54742] [Bug #8357]
+
+ * object.c (rb_class_inherited_p): ditto.
+ [ruby-core:54736] [Bug #8357]
+
+Thu May 2 22:11:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bin/irb: remove dead code from sample/irb.rb.
+
+Thu May 2 17:32:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (copy_ivar_i): get rid of overwriting already copied
+ instance variables. c.f. [Bug #8276]
+
+Thu May 2 16:55:43 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (id_locals): use cached ID.
+
+ * vm.c (ruby_thread_init): ditto.
+
+ * defs/id.def: add more predefined IDs used in core.
+
+Thu May 2 13:42:42 2013 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*: Imported minitest 4.7.4 (r8483)
+ * test/minitest/*: ditto
+
+Thu May 2 11:32:22 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (poll_child_status): [experimental] set the cause of
+ a child's death to status if its exitcode seems to be an error.
+
+ * test/ruby/test_process.rb (TestProcess#test_no_curdir): maybe now
+ we can test it.
+
+ * test/ruby/test_thread.rb (TestThread#test_thread_timer_and_interrupt):
+ ditto.
+
+Thu May 2 11:24:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/yaml.rb: nodoc EngineManager, add History doc #8344
+
+Wed May 1 21:11:17 2013 Tanaka Akira <akr@fsij.org>
+
+ * time.c (localtime_with_gmtoff_zone): musl libc may return NULL for
+ tm_zone.
+
+Wed May 1 18:59:36 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * enum.c (Enumerable#chunk): fix grammar of error message
+ for symbols beginning with an underscore [Bug #8351]
+
+Wed May 1 16:47:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/curses/extconf.rb (curses_version): try once for each tests, a
+ function or a variable. fallback to variable for old SVR4.
+
+Wed May 1 16:17:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): extensions not to be installed should not
+ make static libraries, but make dynamic libraries always.
+
+Wed May 1 12:20:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/rake/version.rb: Fix RDoc warning with :include: [Bug #8347]
+
+Wed May 1 11:40:25 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * defs/id.def (predefined): add "idProc".
+
+ * eval.c (frame_func_id): use predefined IDs.
+
+ * proc.c (mnew, mproc, mlambda): use predefined IDs.
+
+ * vm.c (rb_vm_control_frame_id_and_class): ditto.
+
+ * vm.c (Init_VM): ditto.
+
+Tue Apr 30 23:18:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/benchmark.rb: Update Benchmark results on newer CPU
+
+Tue Apr 30 12:31:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (mproc, mlambda): use frozen core methods instead of plain
+ global methods, so that methods cannot be overridden.
+ [ruby-core:54687] [Bug #8345]
+
+ * vm.c (Init_VM): define proc and lambda on the frozen core object.
+
+ * include/ruby/intern.h (rb_block_lambda): add declaration instead of
+ deprecated rb_f_lambda.
+
+Mon Apr 29 17:02:30 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.h: Bionic libc doesn't have locale.
+ [Feature #8338]
+
+
+Mon Apr 29 06:58:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/ossl_bn.c (ossl_bn_initialize): no need of alloca for
+ small fixed size array.
+
+ * ext/openssl/ossl_bn.c (ossl_bn_initialize): check overflow first,
+ and use alloca for small size input.
+
+Mon Apr 29 00:40:13 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * lib/yaml.rb: Clarify documentation about YAML being always Psych.
+ Give a tip about using Syck. See #8344.
+
+Sun Apr 28 23:34:01 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * lib/yaml.rb: Use another trick to define the YAML module.
+ https://twitter.com/n0kada/status/328342207511801856
+
+Sun Apr 28 23:19:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/pp.rb: Update PP module overview by @geopet
+
+Sun Apr 28 22:04:37 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * ext/openssl/ossl_bn.c (ossl_bn_initialize): fix buffer overflow on
+ x64 Windows and memory leak when initializing with integer.
+ [ruby-core:54615] [Bug #8337]
+
+Sun Apr 28 12:38:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * README.EXT: correct method name to be used. [Bug #7982]
+
+ * README.EXT.ja: add notes too.
+
+Sun Apr 28 10:35:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * object.c: With feedback from Steve Klabnik, reverted a change to
+ #untrusted? and #tainted?. Also adjusted grammar for $SAFE levels
+
+Sun Apr 28 10:10:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/yaml.rb: Disable setting YAML const twice [ruby-core:54642]
+
+Sun Apr 28 09:50:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * object.c: Documentation for taint and trust [Bug #8162]
+
+Sun Apr 28 09:40:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * README.EXT: Copy note from r40505 for rb_sprintf() [Bug #7982]
+
+Sun Apr 28 08:28:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/curses/curses.c: Update Curses::Window example for nicer output
+ Patch by Michal Suchanek [Bug #8121] [ruby-core:53520]
+
+Sun Apr 28 08:10:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * README.EXT: Update note from r40504, by Jeremy Evans [Bug #7982]
+
+Sun Apr 28 08:02:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * README.EXT: Add note to warn use of %i in Exceptions [Bug #7982]
+
+Sun Apr 28 02:41:05 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Fix a typo. Should check endgrent() instead of
+ endgrnam().
+
+Sun Apr 28 00:35:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c (obj2gid): Don't call endgrent() if not exist.
+ Bionic (Android's libc) don't have endgrent().
+
+ * configure.in: Check endgrnam function.
+
+Sat Apr 27 23:53:00 2013 Charlie Somerville <charlie@charliesomerville.com>
+
+ * lib/yaml.rb: add security warning to YAML documentation
+
+Sat Apr 27 23:25:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/yaml.rb: Documentation for YAML module [Bug #8213]
+
+Sat Apr 27 20:19:21 2013 Tanaka Akira <akr@fsij.org>
+
+ * thread_pthread.c (ruby_init_stack): Add STACK_GROW_DIR_DETECTION.
+ This fixes a compilation failure while cross-compiling for Tensilica
+ Xtensa Processor.
+
+Sat Apr 27 19:32:44 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * thread.c: fix typos and documentation
+
+Sat Apr 27 19:04:55 2013 Tanaka Akira <akr@fsij.org>
+
+ * sparc.c: Use __asm__ instead of asm for gcc.
+ gcc doesn't provide asm keyword if -ansi option is given.
+ http://gcc.gnu.org/onlinedocs/gcc/Alternate-Keywords.html
+
+Sat Apr 27 17:22:50 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Redundant test removed.
+
+Sat Apr 27 16:00:10 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb (test_recvmsg_with_msg_peek_creates_fds):
+ Extracted.
+
+Sat Apr 27 15:50:40 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (SIGNED_INTEGER_TYPE_P): New macro.
+ (SIGNED_INTEGER_MAX): Ditto.
+ (SIGNED_INTEGER_MIN): Ditto.
+ (UNSIGNED_INTEGER_MAX): Ditto.
+ (TIMET_MAX): Use SIGNED_INTEGER_MAX and UNSIGNED_INTEGER_MAX.
+ (TIMET_MIN): Use SIGNED_INTEGER_MIN.
+
+ * thread.c (TIMEVAL_SEC_MAX): Use SIGNED_INTEGER_MAX.
+ (TIMEVAL_SEC_MIN): Use SIGNED_INTEGER_MIN.
+
+Sat Apr 27 10:52:52 2013 Tanaka Akira <akr@fsij.org>
+
+ * thread.c (TIMEVAL_SEC_MAX, TIMEVAL_SEC_MIN): Consider environments,
+ sizeof(time_t) is smaller than sizeof(tv_sec), such as
+ OpenBSD 5.2 (amd64).
+
+Fri Apr 26 23:34:59 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/text.rb (REXML::Text.normalize): Fix a bug that all
+ entity filters are ignored. [ruby-dev:47278] [Bug #8302]
+ Patch by Ippei Obayashi. Thanks!!!
+ * test/rexml/test_entity.rb (EntityTester#test_entity_filter): Add
+ a test of the above change.
+
+Fri Apr 26 22:53:55 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/element.rb (REXML::Attributes#to_a): Support
+ namespaced attributes. [ruby-dev:47277] [Bug #8301]
+ Patch by Ippei Obayashi. Thanks!!!
+ * test/rexml/test_attributes.rb
+ (AttributesTester#test_to_a_with_namespaces): Add a test of the
+ above change.
+
+Fri Apr 26 21:48:29 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/atom.rb (RSS::Atom::Entry): Fix indent of document comment.
+
+Fri Apr 26 21:21:17 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker.rb (RSS::Maker): Fix indent of document comment.
+
+Fri Apr 26 18:41:04 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Use a block of enable_config() for
+ --{enable,disable}-close-fds-by-recvmsg-with-peek configure option
+
+Fri Apr 26 18:08:08 2013 Tanaka Akira <akr@fsij.org>
+
+ * dir.c (dir_set_pos): Fix a compilation error when seekdir() is not
+ exist.
+
+Fri Apr 26 17:41:17 2013 Tanaka Akira <akr@fsij.org>
+
+ * thread_pthread.c (ruby_init_stack): Add STACK_GROW_DIR_DETECTION.
+ This fixes a compilation failure while cross-compiling for ARM.
+
+Fri Apr 26 14:35:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/rss/atom.rb: Documentation for RSS::Atom based on a patch by
+ Michael Denomy
+ * lib/rss/maker.rb: Documentation for RSS::Maker also by @mdenomy
+
+Fri Apr 26 12:41:22 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/curses/extconf.rb: Test linkability of curses_version at first.
+
+ * ext/socket/extconf.rb: Test the behavior of fd passing with MSG_PEEK
+ only if recvmsg(), msg_control member, AF_UNIX and SCM_RIGHTS are
+ available.
+
+Fri Apr 26 00:07:52 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * lib/rinda/ring.rb (Rinda::RingServer#initialize): accept array
+ arguments of address to specify multicast interface.
+
+ * lib/rinda/ring.rb (Rinda::RingServer#make_socket): add optional
+ arguments for multicast interface.
+
+ * test/rinda/test_rinda.rb
+ (TestRingFinger#test_ring_server_ipv4_multicast,
+ TestRingFinger#test_ring_server_ipv6_multicast): add tests for
+ above change.
+
+ * test/rinda/test_rinda.rb
+ (TestRingServer#test_make_socket_ipv4_multicast,
+ TestRingServer#test_make_socket_ipv6_multicast): change bound
+ interface address because multicast address is not allowed on Linux
+ or Windows.
+ [ruby-core:53692] [Bug #8159]
+
+Thu Apr 25 23:45:02 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * lib/rinda/ring.rb (Rinda::RingServer#initialize): add a socket
+ to @sockets in make_socket() to close sockets on shutdown even if
+ make_socket() is called after initialize.
+
+ * lib/rinda/ring.rb (Rinda::RingServer#make_socket): ditto.
+
+Thu Apr 25 23:39:42 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * test/rinda/test_rinda.rb (TupleSpaceProxyTest#test_take_bug_8215):
+ use KILL on Windows since TERM doen't work and ruby process remains
+ after test-all on Windows.
+
+Thu Apr 25 23:16:28 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/curses/extconf.rb: Implement
+ --with-curses-version={function,variable} configure option for
+ cross-compiling.
+
+Thu Apr 25 18:15:46 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Don't use WIDE getaddrinfo by default.
+
+Thu Apr 25 17:56:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Remove obsolete options: ---with-ipv6-lib and
+ --with-ipv6-libdir.
+
+Thu Apr 25 17:43:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Implement
+ --{enable,disable}-close-fds-by-recvmsg-with-peek configure option
+ for cross-compiling.
+ Make --{enable,disable}-wide-getaddrinfo configure option
+ cross-compiling friendly.
+
+Thu Apr 25 16:11:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_ext_int_to_encs, parse_mode_enc): bom-prefixed name is
+ not a real encoding name, just a fallback. so the proper conversion
+ should take place even if if the internal encoding is equal to the
+ bom-prefixed name, unless actual encoding is equal to the internal
+ encoding. [ruby-core:54563] [Bug #8323]
+
+ * io.c (io_set_encoding_by_bom): reset extenal encoding if no BOM
+ found. [ruby-core:54569]
+
+Thu Apr 25 14:35:01 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl_bn.c (ossl_bn_initialize): allow Fixnum and Bignum.
+ [ruby-core:53986] [Feature #8217]
+
+Thu Apr 25 14:26:32 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (URI.decode_www_form): follow current URL Standard.
+ It gets encoding argument to specify the character encoding.
+ It now allows loose percent encoded strings, but denies ;-separator.
+ [ruby-core:53475] [Bug #8103]
+
+ * lib/uri/common.rb (URI.decode_www_form): follow current URL Standard.
+ It gets encoding argument to convert before percent encode.
+ Now UTF-16 strings aren't converted to UTF-8 before percent encode
+ by default.
+
+Wed Apr 25 14:26:00 2013 Charlie Somerville <charlie@charliesomerville.com>
+
+ * benchmark/bm_hash_shift.rb: add benchmark for Hash#shift
+
+ * hash.c (rb_hash_shift): use st_shift if hash is not being iterated to
+ delete element without iterating the whole hash.
+
+ * hash.c (shift_i): remove function
+
+ * include/ruby/st.h (st_shift): add st_shift function
+
+ * st.c (st_shift): ditto
+
+ [Bug #8312] [ruby-core:54524] Patch by funny-falcon
+
+Thu Apr 25 12:03:38 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Extract C programs as toplevel constants.
+
+Thu Apr 25 02:23:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_RM_RECURSIVE): this hack is needed by only
+ autoconf 2.69 or earlier on darwin.
+
+Thu Apr 25 01:22:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tracer.rb (get_line): simply read by File.readlines.
+
+ * lib/debug.rb (script_lines): get source lines from SCRIPT_LINES__ or
+ read from the file.
+
+ * lib/debug.rb (display_list): use script_lines instead of recursion.
+ [Bug #8318]
+
+ * lib/debug.rb (line_at): use script_lines same as display_list.
+
+ * lib/debug.rb (display_list): Fix debug listing when called from the
+ same file it has been required. patch by Dario Bertini <berdario AT
+ gmail.com> [Bug #8318] [fix GH-280]
+
+Wed Apr 24 21:51:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: Check mblen().
+ mblen() is optional in uClibc.
+
+ * eval_intern.h (CharNext): Don't use mblen() is not available.
+
+Wed Apr 24 15:55:06 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_fd_fix_cloexec): use rb_update_max_fd().
+
+Wed Apr 24 14:08:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * numeric.c: Fix wiki link on Float imprecision in overview, patched
+ by Makoto Kishimoto [Bug #8304] [ruby-dev:47280]
+
+Wed Apr 24 14:03:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): disallow $- without following identifier
+ character. [ruby-talk:406969]
+
+ * parse.y (is_special_global_name): mere $- is not a valid global
+ variable name.
+
+Wed Apr 24 13:54:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * string.c: Document String#setbyte return value by @gjmurakami-10gen
+ [Fixes GH-294]
+
+Wed Apr 24 13:45:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * class.c: Example of Object#methods by @windwiny [Fixes GH-293]
+ * ruby.c: Document return values of Kernel #sub, #gsub, and #chop
+
+Wed Apr 24 12:54:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/socket/lib/socket.rb: Doc typos by @vipulnsward [Fixes GH-292]
+
+
+Wed Apr 24 12:54:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/socket/lib/socket.rb: Doc typos by @vipulnsward [Fixes GH-292]
+
+Wed Apr 24 12:27:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * array.c: Fix documentation for Array#index and #replace aliases
+ Based on a patch by @phiggins [Fixes GH-282]
+
+Tue Apr 23 21:14:38 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): refix r40413, on Ruby 1.9 usual character
+ escape uses hex/Unicode escapes, so fix to use Unicode escape on
+ Unicode strings and hex on others. [ruby-core:54458] [Bug #8290]
+
+Tue Apr 23 20:10:02 2013 Tanaka Akira <akr@fsij.org>
+
+ * missing/isnan.c (isnan): Don't define if isnan() macro is defined.
+ This fixes a compilation failure on uClibc based Gentoo system.
+
+Tue Apr 23 17:40:40 2013 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * lib/rexml/document.rb, lib/rexml/element.rb,
+ lib/rexml/formatters/pretty.rb: remove opinionated
+ language in documentation. [Bug #8309],
+ reported by Charles Beckmann
+
+Tue Apr 23 14:04:44 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (getacl_response): parse the mailbox of an ACL
+ response correctly. [ruby-core:54365] [Bug #8281]
+
+Tue Apr 23 11:58:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_scrub): fix for UTF-32. strlen() on strings
+ contain NUL returns wrong result, use sizeof operator instead.
+ [ruby-dev:45975] [Feature #6752]
+
+Tue Apr 23 10:26:50 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * test/ruby/test_module.rb
+ (TestModule#test_const_get_invalid_name)
+ (test_const_defined_invalid_name): Fix expected values.
+
+Tue Apr 23 09:51:26 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * string.c (rb_str_inspect): NUL should not be represented as "\0"
+ when octal digits may follow. [ruby-core:54458] [Bug #8290]
+
+Mon Apr 22 22:54:00 2013 Charlie Somerville <charlie@charliesomerville.com>
+
+ * insns.def (opt_mod): Use % operator if both operands are positive for
+ a significant performance improvement. Thanks to @samsaffron.
+
+Mon Apr 22 17:09:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (r_object0): copy all instance variables not only generic
+ ivars, before calling post proc. [ruby-core:51163] [Bug #7627]
+
+Mon Apr 22 10:25:21 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * util.c (ruby_hdtoa): revert r29729.
+ If you want ruby to behave as before on x86, specify to use SSE like
+ -msse2 -mfpmath=sse for gcc.
+
+Sun Apr 21 23:19:00 2013 Charlie Somerville <charlie@charliesomerville.com>
+
+ * configure.in: Revert using sigsetjmp by default due to performance
+ problems on some systems (eg. older Linux)
+
+Sun Apr 21 21:35:00 2013 Charlie Somerville <charlie@charliesomerville.com>
+
+ * configure.in: Use sigsetjmp by default so jumping out of signal
+ handlers properly restores the signal mask and SS_ONSTACK flag.
+ [ruby-core:54175] [Bug #8254]
+
+ * configure.in: Manually check for presence of sigsetjmp. It is not a
+ function on some systems, so AC_CHECK_FUNCS cannot be used.
+
+Sun Apr 21 08:00:55 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/csv/test_features.rb, test/logger/test_logger.rb
+ test/mkmf/test_have_macro.rb, test/net/http/test_http.rb,
+ test/openssl/test_config.rb, test/psych/test_encoding.rb,
+ test/psych/test_exception.rb, test/psych/test_psych.rb,
+ test/psych/test_tainted.rb, test/readline/test_readline.rb,
+ test/rexml/test_contrib.rb, test/ruby/test_autoload.rb,
+ test/ruby/test_beginendblock.rb, test/ruby/test_exception.rb,
+ test/ruby/test_file.rb, test/ruby/test_io.rb,
+ test/ruby/test_marshal.rb, test/ruby/test_process.rb,
+ test/ruby/test_require.rb, test/ruby/test_rubyoptions.rb,
+ test/syslog/test_syslog_logger.rb, test/webrick/test_httpauth.rb,
+ test/zlib/test_zlib.rb: Use Tempfile.create.
+
+Sun Apr 21 00:15:36 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/tempfile.rb (Tempfile.create): Close when the block exits.
+
+Sat Apr 20 23:38:14 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/webrick/httpauth/htpasswd.rb: Use Tempfile.create to avoid
+ unintentional unlink() by the finalizer.
+ lib/webrick/httpauth/htdigest.rb: Ditto.
+
+Sat Apr 20 22:47:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/tempfile.rb (Tempfile.create): New method.
+ The method name is proposed by Shugo Maeda. [ruby-dev:47220]
+ [ruby-core:41478] [Feature #5707]
+
+Sat Apr 20 14:22:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_object): dump no ivars to the original by marshal_dump.
+ [ruby-core:54334] [Bug #8276]
+
+ * marshal.c (r_object0): copy all ivars of marshal_dump data to the
+ result object instead. [ruby-core:51163] [Bug #7627]
+
+Sat Apr 20 02:33:27 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (str_scrub): add ruby method String#scrub which verify and
+ fix invalid byte sequence. [ruby-dev:45975] [Feature #6752]
+
+ * string.c (str_compat_and_valid): check given string is compatible
+ and valid with given encoding.
+
+ * transcode.c (str_transcode0): If invalid: :replace is specified for
+ String#encode, replace invalid byte sequence even if the destination
+ encoding equals to the source encoding.
+
+Fri Apr 19 21:55:40 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * README.EXT.ja (Data_Wrap_Struct): Remove a description about
+ orphan argument. Oh, I renamed the argument name without
+ changing description at r36180... Sorry....
+ Patch by Makoto Kishimoto. Thanks!!! [ruby-dev:47269] [Bug #8292]
+ * README.EXT.ja (Data_Make_Struct): Add a sample code that describes
+ how it works.
+ Patch by Makoto Kishimoto. Thanks!!! [ruby-dev:47269] [Bug #8292]
+
+Fri Apr 19 17:54:57 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (body_type_msg): should accept
+ message/delivery-status with extra data.
+ [ruby-core:53741] [Bug #8167]
+
+ * test/net/imap/test_imap_response_parser.rb: related test.
+
+Fri Apr 19 13:03:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_object): do not dump encoding which is dumped with
+ marshal_dump data. [ruby-core:54334] [Bug #8276]
+
+Fri Apr 19 11:36:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (stack_protector): control use of -fstack-protector.
+
+ * configure.in (debugflags): let -fstack-protector precede and disable
+ debugflags, because they can't work together on SmartOS. [Bug #8268]
+
+Fri Apr 19 07:43:52 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/openssl/test_cipher.rb: Correct a typo
+ by jgls <joerg@joergleis.com>
+ https://github.com/ruby/ruby/pull/291 fix GH-291
+
+Thu Apr 18 16:58:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_mod_public_method): fix visibility on anonymous
+ module. set visibility of singleton method, not method in base
+ class. [ruby-core:54404] [Bug #8284]
+
+Thu Apr 18 16:20:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (glob_helper): should skip dot directories only for recursion,
+ but should not if matching to the given pattern. [ruby-core:54387]
+ [Bug #8283]
+
+Thu Apr 18 16:20:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (pack_unpack): increase buffer size to fix buffer overflow,
+ and fix garbage just after unpacking without missing paddings.
+ [Bug #8286]
+
+Thu Apr 18 13:35:54 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * pack.c (pack_unpack): output characters even if the input doesn't
+ have paddings. [Bug #8286]
+
+Thu Apr 18 08:20:48 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk (clean-ext): remove timestamps.
+
+Wed Apr 17 22:07:50 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h (SOCKLEN_MAX): Expression simplified.
+
+Wed Apr 17 20:09:19 2013 Aman Gupta <ruby@tmm1.net>
+
+ * compile.c (iseq_add_mark_object): Use new rb_iseq_add_mark_object().
+
+ * insns.def (setinlinecache): Ditto.
+
+ * iseq.c (rb_iseq_add_mark_object): New function to allocate
+ iseq->mark_ary on demand. [Bug #8142]
+
+ * iseq.h (rb_iseq_add_mark_object): Ditto.
+
+ * iseq.c (prepare_iseq_build): Avoid allocating mark_ary until needed.
+
+ * iseq.c (rb_iseq_build_for_ruby2cext): Ditto.
+
+Wed Apr 17 20:00:18 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h (SOCKLEN_MAX): Defined.
+
+ * ext/socket/raddrinfo.c (ext/socket/raddrinfo.c): Reject too long
+ Linux abstract socket name.
+
+Wed Apr 17 19:45:27 2013 Aman Gupta <tmm1@ruby-lang.org>
+
+ * iseq.c (iseq_location_setup): re-use existing string when iseq has
+ the same path and absolute_path. [Bug #8149]
+
+Wed Apr 17 11:38:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ UNASSIGNED is not a valid message.
+
+Wed Apr 17 10:58:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (sleep_timeval): get rid of overflow on Windows where
+ timeval.tv_sec is not time_t but mere long.
+
+Tue Apr 16 23:07:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/unixsocket.c (unix_send_io): Suppress a warning by clang.
+ (unix_recv_io): Ditto.
+
+Tue Apr 16 12:27:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/sdbm/init.c: Fix comment indentation, by windwiny [Fixes GH-277]
+
+Tue Apr 16 12:25:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/socket/option.c: Document synonymous methods, by windwiny [GH-277]
+ * ext/stringio/stringio.c: ditto
+ * ext/io/wait/wait.c: ditto
+ * ext/gdbm/gdbm.c: ditto
+ * ext/dl/cfunc.c: ditto
+ * ext/zlib/zlib.c: ditto
+ * ext/win32ole/win32ole.c: ditto
+ * ext/dbm/dbm.c: ditto
+ * ext/json/generator/generator.c: ditto
+ * ext/date/date_core.c: ditto
+
+Tue Apr 16 11:23:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/openssl/*: Document synonymous methods, by windwiny [GH-277]
+
+Mon Apr 15 22:21:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/fiddle/depend: New file.
+
+Mon Apr 15 22:01:02 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el (ruby-electric-insert): Check
+ ruby-electric-is-last-command-char-expandable-punct-p here.
+
+ * misc/ruby-electric.el (ruby-electric-closing-char): New
+ interactive function bound to closing characters. Typing one of
+ those closing characters right after the matching counterpart
+ cancels the effect of automatic closing. For example, typing
+ "{" followed by "}" simply makes "{}" instead of "{ } }".
+
+Mon Apr 15 12:54:42 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+
+ * ext/openssl/ossl_ssl.c: Correct shutdown behavior w.r.t GC.
+
+ * test/openssl/test_ssl.rb: Add tests to verify correct behavior.
+
+ [Bug #8240] Patch provided by Shugo Maeda. Thanks!
+
+Mon Apr 15 10:23:39 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/coverage/depend: fix id.h place as r40283.
+
+ * ext/coverage/extconf.rb: add topdir and topsrcdir to VPATH.
+
+Sun Apr 14 19:46:14 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/-test-/debug/depend: New file.
+
+ * ext/-test-/exception/depend: Ditto.
+
+ * ext/-test-/printf/depend: Ditto.
+
+ * ext/-test-/string/depend: Ditto.
+
+ * ext/coverage/depend: Ditto.
+
+ * ext/io/console/depend: Ditto.
+
+ * ext/io/nonblock/depend: Ditto.
+
+ * ext/io/wait/depend: Ditto.
+
+ * ext/openssl/depend: Ditto.
+
+ * ext/pathname/depend: Ditto.
+
+ * ext/psych/depend: Ditto.
+
+ * ext/zlib/depend: Ditto.
+
+Sun Apr 14 02:46:50 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/mkmf.rb (MakeMakefile#create_makefile): remove {$(VPATH)} other
+ than nmake.
+
+ * ext/ripper/depend: use VPATH expecting removed by above.
+
+Sat Apr 13 23:06:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (timestamp_file): gather timestamp files in one
+ directory from each extension directories.
+
+Sat Apr 13 21:09:02 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (MakeMakefile#create_makefile): output new macro
+ disthdrdir to specify the path of id.h, parse.h and etc.
+
+ * ext/ripper/depend: use above macro.
+
+Sat Apr 13 20:28:08 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * Merge Onigmo 5.13.4 f22cf2e566712cace60d17f84d63119d7c5764ee.
+ [bug] fix problem with optimization of \z (Issue #16) [Bug #8210]
+
+Sat Apr 13 18:56:15 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/ripper/depend: parse.h and id.h may be created on topdir.
+
+Sat Apr 13 12:08:16 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Add Vector#cross_product, patch by Luis Ezcurdia
+ [fix GH-276] [rubyspec:81eec89a124]
+
+Sat Apr 13 10:20:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * struct.c (rb_struct_define_without_accessor, rb_struct_define),
+ (rb_struct_s_def): hide member names array.
+
+ * struct.c (anonymous_struct, new_struct, setup_struct): split
+ make_struct() for each purpose.
+
+Sat Apr 13 09:34:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/mkmf.rb: Add ruby/ruby.h, ruby/missing.h, ruby/intern.h,
+ ruby/st.h and ruby/subst.h for ruby_headers in generated Makefile.
+
+ * ext/-test-/old_thread_select/depend: Update dependencies.
+
+ * ext/-test-/wait_for_single_fd/depend: Ditto.
+
+ * ext/bigdecimal/depend: Ditto.
+
+ * ext/curses/depend: Ditto.
+
+ * ext/digest/bubblebabble/depend: Ditto.
+
+ * ext/digest/depend: Ditto.
+
+ * ext/digest/md5/depend: Ditto.
+
+ * ext/digest/rmd160/depend: Ditto.
+
+ * ext/digest/sha1/depend: Ditto.
+
+ * ext/digest/sha2/depend: Ditto.
+
+ * ext/dl/callback/depend: Ditto.
+
+ * ext/dl/depend: Ditto.
+
+ * ext/etc/depend: Ditto.
+
+ * ext/nkf/depend: Ditto.
+
+ * ext/objspace/depend: Ditto.
+
+ * ext/pty/depend: Ditto.
+
+ * ext/readline/depend: Ditto.
+
+ * ext/ripper/depend: Ditto.
+
+ * ext/sdbm/depend: Ditto.
+
+ * ext/socket/depend: Ditto.
+
+ * ext/stringio/depend: Ditto.
+
+ * ext/strscan/depend: Ditto.
+
+ * ext/syslog/depend: Ditto.
+
+ * ext/-test-/num2int/depend: Removed.
+
+ * ext/dbm/depend: Ditto.
+
+ * ext/fcntl/depend: Ditto.
+
+ * ext/gdbm/depend: Ditto.
+
+ * ext/racc/cparse/depend: Ditto.
+
+Sat Apr 13 00:15:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/etc/etc.c (Init_etc): move Passwd and Group under Etc namespace
+ as primary names.
+
+Fri Apr 12 21:06:55 2013 Tanaka Akira <akr@fsij.org>
+
+ * common.mk: pack.o depends on internal.h.
+
+Fri Apr 12 20:59:24 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (ones): Use __builtin_popcountl if available.
+
+ * internal.h (GCC_VERSION_SINCE): Macro moved from pack.c.
+
+ * pack.c: Include internal.h for GCC_VERSION_SINCE.
+
+Fri Apr 12 18:29:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * common.mk: version.o depends on $(srcdir)/include/ruby/version.h
+ instead of {$(VPATH)}version.h to avoid confusion by VPATH between
+ top level version.h and include/ruby/version.h for build in-place.
+ [ruby-dev:47249] [Bug #8256]
+
+Fri Apr 12 15:21:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_callee_setup_keyword_arg): non-symbol key is not
+ a keyword argument, keep it as a positional argument.
+
+Fri Apr 12 11:58:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * array.c: Document synonymous methods, by windwiny [GH-277]
+ * bignum.c: ditto
+ * complex.c: ditto
+ * dir.c: ditto
+ * encoding.c: ditto
+ * enumerator.c: ditto
+ * numeric.c: ditto
+ * proc.c: ditto
+ * re.c: ditto
+ * string.c: ditto
+
+Thu Apr 11 23:41:46 2013 Tanaka Akira <akr@fsij.org>
+
+ * common.mk: Add dependencies for include/ruby.h
+
+ * tool/update-deps: Use "make -p all miniruby ruby golf" to extract
+ dependencies in makefiles.
+
+Thu Apr 11 23:21:17 2013 Tanaka Akira <akr@fsij.org>
+
+ * tool/update-deps: Use "make -p all golf" to extract dependencies in
+ makefiles.
+
+Thu Apr 11 21:02:19 2013 Tanaka Akira <akr@fsij.org>
+
+ * common.mk: Dependency updated.
+
+ * tool/update-deps: Rewritten.
+
+Thu Apr 11 19:59:48 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk: partially revert r40183, which breaks building on
+ other than source directory. (its commit log also says the same
+ thing, but such failure is not reproducible on my environment
+ and the commit breaks build on my environment)
+
+Thu Apr 11 16:10:01 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/fiddle/closure.c (USE_FFI_CLOSURE_ALLOC): define 0 on
+ Mac OS X and Linux [Bug #3371]
+
+Thu Apr 11 13:19:22 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/drb/drbtest.rb (Drb{Core,Ary}#teardown): retry Process.kill
+ if it fails with Errno::EPERM on Windows (workaround).
+ [ruby-dev:47245] [Bug #8251]
+
+Thu Apr 11 11:11:38 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * dir.c: Fix a typo.
+
+Thu Apr 11 10:39:34 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/fiddle/closure.c (USE_FFI_CLOSURE_ALLOC): add missing case:
+ RUBY_LIBFFI_MODVERSION is not defined (usually on Windows).
+
+Thu Apr 11 09:27:04 2013 Konstantin Haase <me@rkh.im>
+
+ * dir.c (file_s_fnmatch): Document File::FNM_EXTGLOB flag.
+
+Thu Apr 11 09:17:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * README: Fix typo by Benjamin Winkler [Fixes GH-281]
+
+Thu Apr 11 06:15:51 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regint.h: fix typo: _M_AMD86 -> _M_AMD64.
+
+ * siphash.c: ditto.
+
+ * st.c: ditto.
+
+Thu Apr 11 06:09:57 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/fiddle/extconf.rb: define RUBY_LIBFFI_MODVERSION macro.
+
+ * ext/fiddle/closure.c (USE_FFI_CLOSURE_ALLOC): define 0 or 1
+ with platform and libffi's version. [Bug #3371]
+
+Thu Apr 11 05:30:43 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/mkmf.rb (pkg_config): Add optional argument "option".
+ If it is given, it returns the result of
+ `pkg-config --<option> <pkgname>`.
+
+Thu Apr 11 03:33:05 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/fiddle/closure.c (initialize): check mprotect's return value.
+ If mprotect is failed because of PaX or something, its function call
+ will cause SEGV.
+ http://c5664.rubyci.org/~chkbuild/ruby-trunk/log/20130401T210301Z.diff.html.gz
+
+Wed Apr 10 17:39:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/bigdecimal/bigdecimal.c (VpCtoV): Initialize a local variable
+ even when overflow.
+
+Wed Apr 10 12:32:37 2013 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_ll2big): Don't overflow on signed integer negation.
+
+ * ext/bigdecimal/bigdecimal.c (MUL_OVERFLOW_SIGNED_VALUE_P): New
+ macro.
+ (AddExponent): Don't overflow on signed integer multiplication.
+ (VpCtoV): Don't overflow on signed integer arithmetic.
+ (VpCtoV): Don't overflow on signed integer arithmetic.
+
+Wed Apr 10 06:32:12 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (MUL_OVERFLOW_INT_P): New macro.
+
+ * sprintf.c (GETNUM): Don't overflow on signed integer multiplication.
+
+Tue Apr 9 20:38:20 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (MUL_OVERFLOW_SIGNED_INTEGER_P): New macro.
+ (MUL_OVERFLOW_FIXNUM_P): Ditto.
+ (MUL_OVERFLOW_LONG_P): Ditto.
+
+ * array.c (rb_ary_product): Don't overflow on signed integer
+ multiplication.
+
+ * numeric.c (fix_mul): Ditto.
+ (int_pow): Ditto.
+
+ * rational.c (f_imul): Ditto.
+
+ * insns.def (opt_mult): Ditto.
+
+ * thread.c (sleep_timeval): Don't overflow on signed integer addition.
+
+ * bignum.c (rb_int2big): Don't overflow on signed integer negation.
+ (rb_big2ulong): Ditto.
+ (rb_big2long): Ditto.
+ (rb_big2ull): Ditto.
+ (rb_big2ll): Ditto.
+
+Tue Apr 9 19:45:44 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb: Support multiple fields with same field
+ name (like Set-Cookie).
+ (OpenURI::Meta#metas): New accessor to obtain fields as a Hash from
+ field name (string) to field values (array of strings).
+ [ruby-core:37734] [Bug #4964] reported by ren li.
+
+Tue Apr 9 15:26:12 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): append keyword hash to argument array
+ to splat if needed. [ruby-core:54094] [Bug #8236]
+
+Tue Apr 9 10:02:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (timestamp_file): gather timestamp files in one
+ directory from each extension directories, with considering
+ target_prefix.
+
+Tue Apr 9 04:57:59 JST 2013 Charles Oliver Nutter <headius@headius.com>
+
+ * error.c: Capture EAGAIN, EWOULDBLOCK, EINPROGRESS exceptions and
+ export them for use in WaitReadable/Writable exceptions.
+ * io.c: Create versions of EAGAIN, EWOULDBLOCK, EINPROGRESS that
+ include WaitReadable and WaitWritable. Add rb_readwrite_sys_fail
+ for nonblocking failures using those exceptions. Use that
+ function in io_getpartial and io_write_nonblock instead of
+ rb_mod_sys_fail
+ * ext/openssl/ossl_ssl.c: Add new SSLError subclasses that include
+ WaitReadable and WaitWritable. Use those classes for
+ write_would_block and read_would_block instead of rb_mod_sys_fail.
+ * ext/socket/ancdata.c: Use rb_readwrite_sys_fail instead of
+ rb_mod_sys_fail in bsock_sendmsg_internal and
+ bsock_recvmsg_internal.
+ * ext/socket/init.c: Use rb_readwrite_sys_fail instead of
+ rb_mod_sys_fail in rsock_s_recvfrom_nonblock and
+ rsock_s_connect_nonblock.
+ * ext/socket/socket.c: Use rb_readwrite_sys_fail instead of
+ rb_mod_sys_fail in sock_connect_nonblock.
+ * include/ruby/ruby.h: Export rb_readwrite_sys_fail for use instead
+ of rb_mod_sys_fail. Introduce new constants RB_IO_WAIT_READABLE and
+ RB_IO_WAIT_WRITABLE for first arg to rb_readwrite_sys_fail.
+
+Tue Apr 9 02:44:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/extconf.rb: $defs needs -D or -U. nothing is added
+ otherwize.
+
+ * ext/socket/extconf.rb: check struct in_addr6, which is defined in
+ VC6 instead of in6_addr.
+
+ * ext/socket/option.c (optname_to_sym): fix macro name.
+
+ * ext/socket/constants.c (rsock_cmsg_type_arg): fix macro name.
+
+Mon Apr 8 23:57:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (id_for_setter): extract common code from const, class
+ variable, instance variable setters.
+
+Mon Apr 8 23:55:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/depend (ENCOBJS, TRANSOBJS): use explicit path to ruby.h for
+ nmake.
+
+ * ext/depend (ENCOBJS, TRANSOBJS): fix header dependency, VPATH has
+ $(srcdir)/include/ruby but not $(srcdir)/include, so cannot find out
+ ruby/ruby.h. use ruby.h instead and ../ruby for include/ruby.h.
+
+Mon Apr 8 20:30:37 2013 Yuki Yugui Sonoda <yugui@google.com>
+
+ * ext/depend (ENCOBJS, TRANSOBJS): Add missing dependencies.
+
+Mon Apr 8 17:19:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/win32ole/win32ole.c (fole_missing): should check actual argument
+ count before accessing.
+
+Mon Apr 8 16:03:55 2013 Yuki Yugui Sonoda <yugui@google.com>
+
+ Fixes a build failure of ext/ripper/ripper.c on building out of place.
+ * common.mk (id.h, id.c): Always generated in $(srcdir).
+ (ext/ripper/ripper.c): Passes $(PATH_SEPARATOR) too to the sub make.
+
+Mon Apr 8 12:05:02 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * object.c (rb_obj_ivar_set): call to_str for string only once.
+ to_str was called from rb_is_const_name and rb_to_id before.
+
+ * object.c (rb_mod_const_set): ditto.
+
+ * object.c (rb_mod_cvar_set): ditto.
+
+Sun Apr 7 13:56:16 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_require.rb (TestRequire#test_require_nonascii_path):
+ RUBY_PLATFORM should escape as Regexp,
+ because RUBY_PLATFORM may contain '.'.
+
+Sun Apr 7 10:44:01 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/defines.h: Simplify the logic to include sys/select.h.
+ This fixes a compilation error on Haiku (gcc2 and gcc4).
+
+ * configure.in: Use shared linker as $(CC) for Haiku.
+ This fixes a build error on Haiku (gcc2).
+
+Sun Apr 7 10:41:30 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb (MDNSOneShot#sender): Delete an unused variable.
+
+Sun Apr 7 03:24:36 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c: use more generic type:
+ * u_char -> unsigned char
+ * u_short -> unsigned short
+ * u_int -> unsigned int
+ * u_long -> unsigned long
+ * quad_t -> int64_t
+ * u_quad_t -> uint64_t
+
+ * addr2line.c (imax): inline is defined by configure.
+
+Sun Apr 7 01:40:39 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el (ruby-electric-hash): New electric
+ function that expands a hash sign inside a string or regexp to
+ "#{}".
+
+ * misc/ruby-electric.el (ruby-electric-curlies): Do not insert
+ spaces inside when the curly brace is a delimiter of %r, %w,
+ etc.
+
+ * misc/ruby-electric.el (ruby-electric-curlies): Insert another
+ space before a closing curly brace when
+ ruby-electric-newline-before-closing-bracket is nil.
+
+Sun Apr 7 01:01:26 2013 Tanaka Akira <akr@fsij.org>
+
+ * strftime.c (rb_strftime_with_timespec): Test yday range.
+ [ruby-core:44088] [Bug #6247] reported by Ruby Submit.
+
+Sat Apr 6 23:46:54 2013 Naohisa Goto <ngotogenome@gmail.com>
+
+ * configure.in (AC_CHECK_HEADERS): atomic.h for Solaris atomic_ops.
+
+ * ruby_atomic.h: Skip using Solaris10 atomic_ops on Solaris 9 or
+ earlier if atomic.h is not available. [ruby-dev:47229] [Bug #8228]
+
+Sat Apr 6 23:40:40 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb: Support LOC resources.
+ [ruby-core:23361] [Feature #1436] by JB Smith.
+
+Sat Apr 6 23:38:09 2013 Naohisa Goto <ngotogenome@gmail.com>
+
+ * addr2line.c: quad_t and u_quad_t is not available on Solaris.
+ __inline is not available with old compilers on Solaris.
+ [ruby-dev:47229] [Bug #8227]
+
+Sat Apr 6 23:31:38 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb: Add one-shot multicast DNS support.
+ [ruby-core:53387] [Feature #8089] by Eric Hodel.
+
+Sat Apr 6 22:12:01 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb (Resolv::DNS.fetch_resource): New method to obtain
+ full result.
+ [ruby-dev:43587] [Feature #4788] proposed by Makoto Kishimoto.
+
+Sat Apr 6 20:17:51 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (rsock_sys_fail_raddrinfo): Renamed from
+ rsock_sys_fail_addrinfo.
+ (rsock_sys_fail_raddrinfo_or_sockaddr): Renamed from
+ rsock_sys_fail_addrinfo_or_sockaddr.
+
+ * ext/socket/rubysocket.h: Follow the above change.
+
+Sat Apr 6 19:24:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (rsock_sys_fail_sockaddr): Takes struct sockaddr
+ and socklen_t instead of String object.
+ (rsock_sys_fail_addrinfo_or_sockaddr): Follow the above change.
+
+ * ext/socket/rubysocket.h (rsock_sys_fail_sockaddr): Follow the above
+ change.
+
+Sat Apr 6 14:28:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h (SockAddrStringValueWithAddrinfo): New macro.
+ (rsock_sockaddr_string_value_with_addrinfo): New declaration.
+ (rsock_addrinfo_inspect_sockaddr): Ditto.
+ (rsock_sys_fail_addrinfo): Ditto.
+ (rsock_sys_fail_sockaddr_or_addrinfo): Ditto.
+
+ * ext/socket/raddrinfo.c (rsock_addrinfo_inspect_sockaddr): Renamed
+ from addrinfo_inspect_sockaddr and exported.
+ (rsock_sockaddr_string_value_with_addrinfo): New function to obtain
+ string and possibly addrinfo object.
+
+ * ext/socket/socket.c (rsock_sys_fail_sockaddr): Don't use
+ rsock_sys_fail_host_port which is IP dependent. Invoke
+ rsock_sys_fail_addrinfo.
+ (rsock_sys_fail_addrinfo): New function using
+ rsock_addrinfo_inspect_sockaddr.
+ (rsock_sys_fail_addrinfo_or_sockaddr): New function.
+ (sock_connect): Use SockAddrStringValueWithAddrinfo and
+ rsock_sys_fail_addrinfo_or_sockaddr.
+ (sock_connect_nonblock): Ditto.
+ (sock_bind): Ditto.
+
+Sat Apr 6 13:34:20 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (rsock_sys_fail_sockaddr): Delete 2nd argument.
+
+ * ext/socket/rubysocket.h (rsock_sys_fail_sockaddr): Follow above
+ change.
+
+Sat Apr 6 13:13:39 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (rsock_sys_fail_path): Use rb_str_inspect only
+ for String to avoid SEGV.
+
+Sat Apr 6 12:40:16 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h (rsock_sys_fail_host_port): Wrap by NORETURN.
+ (rsock_sys_fail_path): Ditto.
+ (rsock_sys_fail_sockaddr): Ditto.
+
+Sat Apr 6 11:49:35 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (rsock_sys_fail_path): Use rb_str_inspect if the
+ path contains a NUL.
+
+Sat Apr 6 11:39:19 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket: Improve socket exception message to show socket address.
+ [ruby-core:45617] [Feature #6583] proposed Eric Hodel.
+
+ * ext/socket/rubysocket.h (rsock_sys_fail_host_port): Declared.
+ (rsock_sys_fail_path): Ditto.
+ (rsock_sys_fail_sockaddr): Ditto.
+
+ * ext/socket/udpsocket.c (udp_connect): Use rsock_sys_fail_host_port.
+ (udp_bind): Ditto.
+ (udp_send): Ditto.
+
+ * ext/socket/init.c (rsock_init_sock): Specify a string for rb_sys_fail
+ argument.
+ (make_fd_nonblock): Ditto.
+ (rsock_s_accept): Ditto.
+
+ * ext/socket/ipsocket.c (init_inetsock_internal): Use
+ rsock_sys_fail_host_port.
+
+ * ext/socket/socket.c (rsock_sys_fail_host_port): Defined.
+ (rsock_sys_fail_path): Ditto.
+ (rsock_sys_fail_sockaddr): Ditto.
+ (setup_domain_and_type): Use rsock_sys_fail_sockaddr.
+ (sock_connect_nonblock): Ditto.
+ (sock_bind): Ditto.
+ (sock_gethostname): Specify a string for rb_sys_fail argument.
+ (socket_s_ip_address_list): Ditto.
+
+ * ext/socket/basicsocket.c (bsock_shutdown): Specify a string for
+ rb_sys_fail argument.
+ (bsock_setsockopt): Use rsock_sys_fail_path.
+ (bsock_getsockopt): Ditto.
+ (bsock_getpeereid): Refine the argument for rb_sys_fail.
+
+ * ext/socket/unixsocket.c (rsock_init_unixsock): Use
+ rsock_sys_fail_path.
+ (unix_path): Ditto.
+ (unix_send_io): Ditto.
+ (unix_recv_io): Ditto.
+ (unix_addr): Ditto.
+ (unix_peeraddr): Ditto.
+
+Sat Apr 6 11:23:18 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * test/ruby/test_require.rb (TestRequire#test_require_nonascii_path):
+ fix load path for encoding to run the test as stand-alone.
+
+Sat Apr 6 09:54:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (NATINT_LEN): fix definition order, must be after
+ NATINT_PACK.
+
+Sat Apr 6 03:11:07 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: fix symbol keys in coder
+ emission. Thanks @tjwallace
+ * test/psych/test_coder.rb: test for change
+
+Sat Apr 6 02:54:08 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/exception.rb: there should be only one exception
+ base class. Fixes tenderlove/psych #125
+ * ext/psych/lib/psych.rb: require the correct exception class
+ * ext/psych/lib/psych/syntax_error.rb: ditto
+ * ext/psych/lib/psych/visitors/to_ruby.rb: ditto
+
+Sat Apr 6 02:30:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (new_defined): remove all extra parentheses, and return
+ "nil" for defined? with empty expression.
+ [ruby-core:54024] [Bug #8224]
+
+Sat Apr 6 02:06:04 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: correctly register
+ self-referential strings. Fixes tenderlove/psych #135
+
+ * test/psych/test_string.rb: appropriate test.
+
+Sat Apr 6 01:21:56 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/init.c (cloexec_accept): Fix a compile error on
+ Debian GNU/kFreeBSD. Consider HAVE_ACCEPT4 is defined
+ but SOCK_CLOEXEC is not defined.
+
+Sat Apr 6 00:19:30 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * load.c (features_index_add): use rb_str_subseq() to specify C string
+ position properly to fix require non ascii path.
+ [ruby-core:53733] [Bug #8165]
+
+ * test/ruby/test_require.rb (TestRequire#test_require_nonascii_path):
+ a test for the above.
+
+Fri Apr 5 20:41:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/defines.h (HAVE_TRUE_LONG_LONG): Defined to distinguish
+ availability of long long and availability of 64bit integer type.
+
+ * pack.c: Use HAVE_TRUE_LONG_LONG to distinguish q! and Q! support.
+
+Fri Apr 5 20:19:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * addr2line.c: Include ruby/missing.h to fix compile error on Debian.
+
+Fri Apr 5 19:39:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): fix of defined? with empty
+ expression. [ruby-core:53999] [Bug #8220]
+
+Fri Apr 5 13:22:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/curses/curses.c (Init_curses): fix implementation function,
+ crmode should be same as cbreak. [ruby-core:54013] [Bug #8222]
+
+Fri Apr 5 12:06:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/curses/hello.rb: Typo in Curses example by Drew Blas
+ [Fixes GH-273]
+
+Thu Apr 4 23:45:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb (bind_random_port): Rescue EACCES for SunOS.
+ bind() on SunOS for port 2049 (nfs) and 4045 (lockd) causes
+ EACCES with unprivileged process. cf. PRIV_SYS_NFS in privileges(5)
+ [ruby-core:48064] [Bug #7183] reported by Frank Meier.
+
+Thu Apr 4 23:24:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Remove condition for bcc.
+
+Thu Apr 4 22:53:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (FIX2LONG): Parenthesize the macro body.
+
+Thu Apr 4 22:32:32 2013 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_strftime): Describe %L and %N truncates digits under
+ the specified length.
+ [ruby-core:52130] [Bug #7829]
+
+Thu Apr 4 22:08:46 2013 Tanaka Akira <akr@fsij.org>
+
+ * object.c (rb_mod_cvar_set): Reverted "avoid inadvertent
+ symbol creation" to avoid SEGV by
+ Class.new.class_variable_set(1, 2).
+
+Thu Apr 4 20:07:19 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_write): New method.
+ (path_binwrite): Ditto.
+ [ruby-core:49468] [Feature #7378]
+
+Thu Apr 4 16:51:29 2013 Yuki Yugui Sonoda <yugui@google.com>
+
+ * thread_pthread.c: Fixes wrong scopes of #if USE_SLEEPY_TIMER_THREAD
+ .. #endif sections. This fixes a build error on NativeClient.
+
+Wed Apr 3 17:25:31 2013 Yuki Yugui Sonoda <yugui@google.com>
+
+ * thread_pthread.c (ruby_init_stack): Avoid using uninitialized value.
+ stackaddr and size are not set if get_stack() fails.
+
+Thu Apr 4 16:55:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * struct.c (make_struct): avoid inadvertent symbol creation.
+ (rb_struct_aref): ditto.
+ (rb_struct_aset): ditto.
+
+Thu Apr 4 16:54:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_mod_const_set): avoid inadvertent symbol creation.
+ (rb_obj_ivar_set): ditto.
+ (rb_mod_cvar_set): ditto.
+
+Thu Apr 4 15:46:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enum.c (enum_inject): avoid inadvertent symbol creation.
+
+Thu Apr 4 14:37:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_aref): avoid inadvertent symbol creation.
+ (rb_thread_variable_get): ditto.
+ (rb_thread_key_p): ditto.
+ (rb_thread_variable_p): ditto.
+
+Thu Apr 4 11:33:57 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl_bn.c (ossl_bn_to_i): Use bn2hex to speed up.
+ In general, binary to/from decimal needs extra cost.
+
+Thu Apr 4 07:24:18 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Specify arguments to test functions.
+
+Thu Apr 4 03:25:09 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl_bn.c (ossl_bn_initialize): fix can't create from bn.
+
+Wed Apr 3 22:09:25 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: Test functions and libraries after headers.
+
+Wed Apr 3 21:23:29 2013 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_seek_m): Accept :CUR, :END, :SET as "whence" argument.
+ (interpret_seek_whence): New function.
+ [ruby-dev:45818] [Feature #6643]
+
+Wed Apr 3 20:52:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * process.c: Describe the behavior which Ruby invokes a commandline
+ directly without shell if the commandline is simple enough.
+ [ruby-core:50459] [Bug #7489]
+
+Wed Apr 3 20:27:37 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/extmk.rb (extmake): Invoke Logging::log_close in a ensure
+ clause.
+
+Wed Apr 3 18:53:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/extmk.rb (extmake): Use Logging.open to switch stdout and
+ stderr. Delay Logging::log_close until the failure message is
+ written. Write the failure message only if log file is opened.
+
+ * lib/mkmf.rb (Logging.log_opened?): New method.
+
+ [ruby-dev:47215] [Bug #8209]
+
+Wed Apr 3 17:11:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (constat_apply): pass through unknown sequence which
+ starts with ESC but is not followed by a bracket. [ruby-core:53879]
+ [Bug #8201]
+
+Wed Apr 3 16:35:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (rb_big_eq): hide intermediate Bignums not just freeing
+ memory. [ruby-core:53893] [Bug #8204]
+
+ * object.c (rb_obj_hide): hide an object by clearing klass.
+
+ * bignum.c (rb_big_eq): test as Fixnum if possible and get rid of zero
+ length Bignum. [ruby-core:53893] [Bug #8204]
+
+Tue Apr 2 23:56:03 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/securerandom.rb (SecureRandom.random_bytes): Use
+ OpenSSL::Random.random_add instead of OpenSSL::Random.seed and
+ specify 0.0 as the entropy.
+ [ruby-core:47308] [Bug #6928]
+
+Tue Apr 2 20:24:52 2013 Tanaka Akira <akr@fsij.org>
+
+ * pack.c: Support Q! and q! for long long.
+ (natstr): Moved to toplevel. Add q and Q if there is long long type.
+ (endstr): Moved to toplevel.
+ (NATINT_PACK): Consider long long.
+ (NATINT_LEN_Q): New macro.
+ (pack_pack): Support Q! and q!.
+ (pack_unpack): Ditto.
+ [ruby-dev:43970] [Feature #3946]
+
+Tue Apr 2 19:24:26 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/-test-/num2int/num2int.c: Define utility methods
+ as module methods of Num2int.
+
+ * test/-ext-/num2int/test_num2int.rb: Follow the above change.
+
+Tue Apr 2 18:49:01 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/securerandom.rb: Don't use Array#to_s.
+ [ruby-core:52058] [Bug #7811] fixed by zzak (Zachary Scott).
+
+Tue Apr 2 17:38:20 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_to_s): suppress duplicated charclass warning.
+ Regexp#to_s suppress extra its whole regexp options by calling
+ onig_new with its source, but it doesn't call rb_reg_preprocess.
+ Therefore its Unicode escapes (\u{XXXX}) are given as is,
+ and it may cause duplicated charclass warning for example
+ "[\u{33}]" (3 is duplicated) or "[\u{a}\u{b}]" (u is duplicated).
+ [ruby-core:53649] [Bug #8151]
+
+Tue Apr 2 16:00:06 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_dump.c (rb_print_backtrace): separate to ease showing C backtrace.
+
+ * internal.h (rb_print_backtrace): ditto.
+
+Tue Apr 2 15:22:09 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ruby/envutil.rb (assert_separately): stop_auto_run of
+ Test::Unit::Runner to prevent auto runner use ARGV.
+
+ * test/ruby/envutil.rb (assert_separately): add $: to separate process.
+
+ * test/ruby/envutil.rb (assert_separately): fail if stderr is not
+ empty and ignore_stderr is false.
+
+Tue Apr 2 06:46:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/-test-/num2int/num2int.c: Rename utility methods
+ to global functions to ease manual experiments.
+
+ * test/-ext-/num2int/test_num2int.rb: Follow the above change.
+
+Mon Apr 1 22:26:17 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/zlib/zlib.c (rb_gzfile_set_mtime): Use NUM2UINT.
+ The old logic doesn't work well on LP64 platforms as:
+ .. -2**63-1 => error,
+ -2**63 .. -2**62-1 => success,
+ -2**62 .. -2**31-1 => error,
+ -2**31 .. 2**31-1 => success,
+ 2**31 .. 2**62-1 => error,
+ 2**62 .. 2**64-1 => success,
+ 2**64 .. => error.
+
+Mon Apr 1 22:08:02 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * ext/zlib/zlib.c (Zlib::Inflate.new):
+ Fix documentation syntax and naming errors.
+ Based on patch by Robin Dupret. Fix GH-271.
+
+Mon Apr 1 21:22:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/-ext-/num2int/test_num2int.rb: Test small bignums.
+
+Mon Apr 1 21:10:56 2013 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (rb_num2ulong_internal): Don't cast a negative double value
+ into unsigned long, which is undefined behavior.
+ (rb_num2ull): Don't cast a value bigger than LLONG_MAX into
+ long long, which is undefined behavior.
+
+Mon Apr 1 20:57:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/-test-/num2int/num2int.c: Return string for result, instead of
+ printing.
+
+ * test/-ext-/num2int/test_num2int.rb: updated to follow above change.
+
+Mon Apr 1 20:08:07 2013 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (rb_num2long): Don't use SIGNED_VALUE uselessly.
+ (check_int): Ditto.
+ (check_short): Ditto.
+ (rb_num2fix): Ditto.
+ (rb_num2ulong_internal): Add a cast.
+
+Mon Apr 1 18:41:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: skip autoconf 2.64 and 2.66, 2.67 seems short-lived
+ but stick on it for Debian Squeeze.
+
+Mon Apr 1 14:22:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: check clang version by predefined macro values.
+ [Bug #8192]
+
+Mon Apr 1 12:05:15 2013 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (check_uint): Take the 1st argument as unsigned long,
+ instead of VALUE. Refine the validity test conditions.
+ (check_ushort): Ditto.
+
+Mon Apr 1 07:15:03 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * configure.in: use quadrigraph to put '[' or ']'. [Bug #8192]
+
+Mon Apr 1 04:16:41 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: kick old clang. [ruby-dev:47204] [Bug #8192]
+
+Mon Apr 1 01:12:46 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (FIX2ULONG): Make it consistent with NUM2ULONG.
+
+ * ext/-test-/num2int/num2int.c: Add utility methods for FIX2XXX tests.
+
+ * test/-ext-/num2int/test_num2int.rb: Add tests for FIX2XXX.
+
+Sun Mar 31 17:17:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (rb_mod_define_method): consider visibility in define_method.
+ patch by mashiro <mail AT mashiro.org>. fix GH-268.
+
+Sun Mar 31 15:40:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/configure.bat: try to fix option arguments split by commas and
+ equals here. this batch file no longer run with old command.com.
+
+ * tool/mkconfig.rb: no hacks for cmd.exe.
+
+Sun Mar 31 13:47:04 2013 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (rb_num2ulong_internal): New function similar to
+ rb_num2ulong but integer wrap around flag is also returned.
+ (rb_num2ulong): Use rb_num2ulong_internal.
+ (rb_num2uint): Use rb_num2ulong_internal and the wrap around flag is
+ used instead of negative_int_p(val).
+ (rb_num2ushort): ditto.
+
+Sun Mar 31 06:27:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (HAVE_METACLASS_P): should check FL_SINGLETON flag before get
+ instance variable to get rid of wrong warning about __attached__.
+ [ruby-core:53839] [Bug #8188]
+
+Sat Mar 30 14:11:28 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * bcc32: removed. agreed at
+ http://bugs.ruby-lang.org/projects/ruby/wiki/DevelopersMeeting20130223Japan
+
+Sat Mar 30 03:58:00 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/file.c (code_page): use cp1252 instead of cp20127 as US-ASCII.
+ fix [ruby-core:53079] [Bug #7996]
+ reported and patched by mmeltner (Michael Meltner).
+
+Sat Mar 30 03:49:21 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (wrename): use MoveFileExW instead of MoveFileW,
+ because the latter fails on cross device file move of some
+ environments.
+ fix [ruby-core:53492] [Bug #8109]
+ reported by mitchellh (Mitchell Hashimoto).
+
+Fri Mar 29 22:09:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_mutex_synchronize_m): yield no block params. patch by
+ splattael (Peter Suschlik) in [ruby-core:53773] [Bug #8097].
+ fix GH-266.
+
+Fri Mar 29 16:51:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_next_argv): set init flag if succeeded to forward, after
+ skipping.
+
+ * io.c (argf_block_call_i, argf_block_call): no more forwarding if
+ forwarded after skipping. [ruby-list:49185]
+
+ * io.c (argf_close): deal with init flag.
+
+ * io.c (argf_block_call_i, argf_block_call): forward next file if
+ skipped while iteration, to get rid of IOError. [ruby-list:49185]
+
+Fri Mar 29 11:09:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (configuration): not include all CFLAGS in CXXFLAGS, to
+ use different set than C for C++. [ruby-core:45273] [Bug #6504]
+
+Fri Mar 29 10:24:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/io.h: undef POSIX compliant names on AIX, which are no
+ longer needed. patch suggested by edelsohn (David Edelsohn) in
+ [ruby-core:53815]. [Bug #8174]
+
+Fri Mar 29 06:39:42 2013 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (rb_num2ull): Cast double to unsigned LONG_LONG via
+ LONG_LONG instead of double to unsigned LONG_LONG directly.
+ This is a challenge to fix a test_num2ull(TestNum2int)
+ failure (NUM2ULL(-1.0) should be "18446744073709551615" but was "0")
+ on Mac OS X with 32bit clang.
+ http://a.mrkn.jp/~mrkn/chkbuild/mountain_lion/ruby-trunk-m32-o0/log/20130328T191100Z.diff.html.gz
+
+Fri Mar 29 00:54:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (MAIN_DOES_NOTHING): ensure symbols for tests to be
+ preserved. [ruby-core:53745] [Bug #8169]
+
+Thu Mar 28 23:11:25 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb: Test Windows platform by detecting LoadError when
+ require 'win32/resolv' suggested by Nobuyoshi Nakada [ruby-core:53389].
+ [ruby-core:53388] [Feature #8090] Reported by Charles Nutter.
+
+Thu Mar 28 23:10:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/io.h: rename SVR3,4 member names as POSIX compliant,
+ to get rid of conflict on AIX. [ruby-core:53765] [Bug #8174]
+
+Thu Mar 28 18:22:21 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/-ext-/num2int/test_num2int.rb: extract
+ assert_num2i_success_internal and assert_num2i_error_internal and
+ provide assertion messages as "NUM2XXX(NNN)".
+
+Thu Mar 28 07:05:25 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h: Delete redundant inclusions caused by
+ AC_INCLUDES_DEFAULT in defines.h.
+
+ * include/ruby/defines.h: Ditto.
+
+ * include/ruby/ruby.h: Ditto.
+
+ * include/ruby/st.h: Ditto.
+
+Thu Mar 28 06:51:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/defines.h: Fix a compilation error on NetBSD,
+ "type of formal parameter 1 is incomplete" for the rb_thread_wait_for
+ invocation in rb_file_flock, by including header files as
+ AC_INCLUDES_DEFAULT of autoconf.
+
+Wed Mar 27 22:09:14 2013 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (LONG_MIN_MINUS_ONE_IS_LESS_THAN): New macro.
+ (LLONG_MIN_MINUS_ONE_IS_LESS_THAN): Ditto.
+ (rb_num2long): Use LONG_MIN_MINUS_ONE_IS_LESS_THAN.
+ (rb_num2ulong): Ditto.
+ (rb_num2ll): Use LLONG_MIN_MINUS_ONE_IS_LESS_THAN.
+ (rb_num2ull): Ditto.
+
+ * test/-ext-/num2int/test_num2int.rb (assert_num2i_success): Test the
+ value converted into a Float if Float can represent the value
+ exactly.
+ (assert_num2i_error): Ditto.
+
+Wed Mar 27 20:59:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/-ext-/num2int/test_num2int.rb (assert_num2i_success): New
+ utility method.
+ (assert_num2i_error): Ditto.
+
+Wed Mar 27 20:37:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * time.c (num_exact): Use to_r method only if to_int method is
+ available.
+ [ruby-core:53764] [Bug #8173] Reported by Hiro Asari.
+
+Wed Mar 27 12:07:40 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/-ext-/num2int/test_num2int.rb (test_num2ll): test LLONG_MIN,
+ not LONG_MIN.
+
+Wed Mar 27 12:02:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (TIMET_MAX_PLUS_ONE): definition simplified.
+
+Wed Mar 27 06:39:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (MAIN_DOES_NOTHING): force to refer symbols for tests
+ to be preserved. [ruby-core:53745] [Bug #8169]
+
+Wed Mar 27 05:15:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_REPLACE_TYPE): define SIGNEDNESS_OF_type same as
+ check_signedness of mkmf.rb.
+
+ * internal.h (TIMET_MAX, TIMET_MIN, TIMET_MAX_PLUS_ONE): use
+ SIGNEDNESS_OF_TIME_T.
+
+Wed Mar 27 00:28:45 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h (TIMET_MAX_PLUS_ONE): Defined.
+
+ * thread.c (double2timeval): Saturate out-of-range values.
+
+Tue Mar 26 23:41:18 2013 Tanaka Akira <akr@fsij.org>
+
+ * internal.h: Define TIMET_MAX and TIMET_MIN here.
+
+ * time.c: Remove TIMET_MAX and TIMET_MIN definitions.
+
+ * thread.c: Ditto.
+
+ * thread_pthread.c: Remove TIMET_MAX definition.
+
+ * thread_win32.c: Ditto.
+
+Tue Mar 26 22:31:10 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sockaddr_len): return the shortest length for
+ unknown socket address.
+
+Tue Mar 26 22:14:46 2013 Tanaka Akira <akr@fsij.org>
+
+ * thread.c (double2timeval): convert the infinity to TIME_MAX to avoid
+ SEGV by Thread.new {}.join(Float::INFINITY) on
+ Debian GNU/Linux (amd64).
+
+Mon Mar 25 07:09:20 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rinda/tuplespace.rb: Only return tuple entry once on move,
+ either through port or regular return, not both. This results in a
+ 120% speedup when combined with #8125. Patch by Joel VanderWerf.
+ [ruby-trunk - Feature #8119]
+
+Mon Mar 25 06:59:01 2013 Eric Hodel <drbrain@segment7.net>
+
+ * test/rinda/test_rinda.rb: Skip IPv6 tests if no IPv6 addresses
+ exist. Skip fork-dependent test if fork is not available.
+ [ruby-trunk - Bug #8159]
+
+Sun Mar 24 10:38:24 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * addr2line.c (putce): suppress unused return value warning.
+
+Mon Mar 25 02:01:03 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * proc.c (bm_free): need to clean up the mark flag of a free and
+ unlinked method entry. [Bug #8100] [ruby-core:53439]
+
+Sun Mar 24 22:13:51 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_rpartition): revert r39903, and convert byte offset
+ to char offset; the return value of rb_reg_search is byte offset,
+ but other than it of rb_str_rpartition expects char offset.
+ [Bug #8138] [ruby-dev:47183]
+
+Sun Mar 24 18:29:46 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * string.c (rb_str_rpartition): Fix String#rpartition(/re/)
+ against a multibyte string. [Bug #8138] [ruby-dev:47183]
+
+Sun Mar 24 13:42:24 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * gc.c (GC_ENABLE_LAZY_SWEEP): new macro to switch lazy sweeping
+ for debugging. [Feature #8024] [ruby-dev:47135]
+
+Sun Mar 24 12:55:47 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * gc.c: We have no chance to expand the heap when lazy sweeping is
+ restricted. So collecting is often invoked if there is not
+ enough free space in the heap. Try to expand heap when this is
+ the case.
+
+Sun Mar 24 11:03:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_require.rb: Remove temporally files in the tests.
+
+ * test/ruby/test_rubyoptions.rb: Ditto.
+
+ * test/logger/test_logger.rb: Ditto.
+
+ * test/psych/test_psych.rb: Ditto.
+
+ * test/readline/test_readline.rb: Ditto.
+
+ * test/syslog/test_syslog_logger.rb: Ditto.
+
+ * test/webrick/test_httpauth.rb: Ditto.
+
+ * test/zlib/test_zlib.rb: Ditto.
+
+Sun Mar 24 05:36:29 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rinda/ring.rb: Added documentation for multicast support.
+
+ * NEWS: Point to above documentation.
+
+Sun Mar 24 05:32:39 2013 Eric Hodel <drbrain@segment7.net>
+
+ * test/rinda/test_rinda.rb: Restore tests commented out while fixing
+ test slowdown bug before r39895.
+
+Sun Mar 24 05:03:36 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rinda/ring.rb: Add multicast support to Rinda::RingFinger and
+ Rinda::RingServer. [ruby-trunk - Bug #8073]
+ * test/rinda/test_rinda.rb: Test for the above.
+
+ * NEWS: Update with Rinda multicast support
+
+Sun Mar 24 04:13:27 2013 Eric Hodel <drbrain@segment7.net>
+
+ * test/rinda/test_rinda.rb: Fixed test failures in r39890 and r39891
+ due to stopping DRb service.
+
+Sun Mar 24 03:34:02 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rinda/rinda.rb: Fixed loss of tuple when remote is alive but the
+ call stack was unwound. Patch by Joel VanderWerf.
+ [ruby-trunk - Bug #8125]
+ * test/rinda/test_rinda.rb: Test for the above.
+
+Sun Mar 24 02:14:53 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/mkmf/test_have_macro.rb: remove temporally files in the tests.
+
+Sat Mar 23 23:50:04 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c (kprintf): added from FreeBSD libstand's printf.
+ this is consided as async signal safe function.
+
+ * addr2line.c (rb_dump_backtrace_with_lines): use kfprintf.
+ [Bug #8144] [ruby-core:53632]
+
+Sat Mar 23 23:28:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_divide): Use Qnil and NIL_P
+ instead of (VALUE)0 as a return value.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_div): ditto.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_divremain): ditto.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_remainder): ditto.
+
+Sat Mar 23 17:39:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (check_funcall_respond_to): preserve passed_block, which
+ is modified in vm_call0_body() via vm_call0(), and caused a bug of
+ rb_check_funcall() by false negative result of rb_block_given_p().
+ re-fix [ruby-core:53650] [Bug #8153].
+ [ruby-core:53653] [Bug #8154]
+
+Fri Mar 22 17:48:34 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/forwardable.rb (Forwardable::FILE_REGEXP): create regexp object
+ outside sources for eval, to reduce allocations in def_delegators
+ wrappers. //o option does not make each regexps shared. patch by
+ tmm1 (Aman Gupta) in [ruby-core:53620] [Bug #8143].
+
+Fri Mar 22 17:38:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_feature_p), vm_core.h (rb_vm_struct): turn
+ loaded_features_index into st_table. patches by tmm1 (Aman Gupta)
+ in [ruby-core:53251] and [ruby-core:53274] [Bug #8048]
+
+Fri Mar 22 10:29:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c: Fix style.
+
+Fri Mar 22 05:30:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (ambiguous_operator): refine warning message, since this
+ warning is shown after literal too.
+
+Fri Mar 22 04:51:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_callee_setup_keyword_arg): should check required
+ keyword arguments even if rest hash is defined. [ruby-core:53608]
+ [Bug #8139]
+
+Fri Mar 22 01:00:17 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * process.c (rb_execarg_addopt, run_exec_pgroup): use rb_pid_t
+ instead of pid_t.
+
+ * ext/pty/pty.c (raise_from_check, pty_check): ditto.
+
+Fri Mar 22 00:04:15 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c (rb_dump_backtrace_with_lines): output line at once.
+
+Thu Mar 21 23:17:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (ruby_kill): get rid of deadlock on signal 0.
+ [ruby-dev:47182] [Bug #8137]
+
+Thu Mar 21 22:39:46 2013 Naohisa Goto <ngotogenome@gmail.com>
+
+ * marshal.c (marshal_dump, marshal_load): workaround for segv on
+ Intel Solaris compiled with Oracle SolarisStudio 12.3.
+ Partly revert r38174. [ruby-core:52042] [Bug #7805]
+
+Thu Mar 21 16:48:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (simple_re_meta): escape all closing characters, not only
+ round parenthesis. [ruby-core:53578] [Bug #8133]
+
+Thu Mar 21 13:50:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (UNINITIALIZED_VAR): suppress warnings by clang 4.2.
+ [ruby-core:51742] [Bug #7756]
+
+Thu Mar 21 07:34:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/date/date_core.c: Typo in Date::MONTHNAMES by Matt Gauger
+ [GH fixes #261]
+
+Wed Mar 20 22:53:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (find_library): fix to format message.
+ [ruby-core:53568] [Bug #8130]
+
+Wed Mar 20 22:52:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (install_dirs, with_destdir): prefix with DESTDIR
+ directories to install only unless bundled extension libraries.
+ [ruby-core:53502] [Bug #8115]
+
+Wed Mar 20 17:47:53 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/win32ole/test_err_in_callback.rb (TestErrInCallBack#setup):
+ allow using different root for source and build directories.
+ this may fixes a minor problem of r39834.
+
+Wed Mar 20 16:40:48 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * test/ruby/test_signal.rb (test_hup_me): skip if HUP isn't supported.
+ On Windows this test causes ArgumentError.
+
+Wed Mar 20 16:24:12 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+
+ * test/rubygems/test_gem_installer.rb (test_install_extension_flat):
+ use ruby in build directory in case ruby is not installed.
+ [ruby-core:53265] [Bug #8058]
+
+Wed Mar 20 15:22:07 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/win32ole/test_err_in_callback.rb (TestErrInCallBack#setup): use
+ relative path to get rid of "too long commandline" error.
+
+Wed Mar 20 04:27:42 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * test/rinda/test_rinda.rb: remove unused variables.
+ patched by Vipul A M <vipulnsward@gmail.com>
+
+Wed Mar 20 04:15:32 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * ext/bigdecimal/bigdecimal.c: fixed typo.
+ patched by Vipul A M <vipulnsward@gmail.com>
+
+Sat Mar 16 03:40:49 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_signal.rb (test_hup_me): added a few comments.
+
+Sat Mar 16 03:39:38 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (ruby_kill): added a few comments.
+
+Sat Mar 16 03:36:56 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (ruby_kill): release GVL while waiting signal delivered.
+
+Tue Mar 19 19:50:48 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ruby_kill (internal.h, thread.c): use rb_pid_t instead of pid_t.
+ this fixes the build failure of mswin introduced at r39819.
+
+Tue Mar 19 17:09:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_conv_enc_opts): convert with one converter, instead
+ of re-creating converters for each buffer expansion.
+
+Tue Mar 19 17:06:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (glob_helper): compose HFS file names from UTF8-MAC.
+ [ruby-core:48745] [Bug #7267]
+
+Sat Mar 16 01:44:29 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * internal.h: added a declaration of ruby_kill().
+ * thread.c (ruby_kill): helper function of kill().
+
+ * signal.c (rb_f_kill): use ruby_kill() instead of kill().
+ * signal.c (rb_f_kill): call rb_thread_execute_interrupts()
+ to ensure that make SignalException if sent a signal
+ to myself. [Bug #7951] [ruby-core:52864]
+
+ * vm_core.h (typedef struct rb_thread_struct): added
+ th->interrupt_cond.
+ * thread.c (rb_threadptr_interrupt_common): added to
+ initialization of th->interrupt_cond.
+ * thread.c (thread_create_core): ditto.
+
+ * test/ruby/test_signal.rb (TestSignal#test_hup_me): test for
+ the above.
+
+Sat Mar 16 00:42:39 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (linux_iocparm_len): enable only exist _IOC_SIZE().
+ Because musl libc doesn't have it. [Bug #8051] [ruby-core:53229]
+
+Tue Mar 19 10:05:04 2013 Shota Fukumori <her@sorah.jp>
+
+ * ext/objspace/objspace.c: Fix typo in doc. Patch by Sho Hashimoto.
+ [Bug #8116] [ruby-dev:47177]
+
+Tue Mar 19 02:13:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * configure.in: set ac_cv_prog_cxx if CXX is supplied.
+
+Tue Mar 19 01:18:00 2013 Kenta Murata <mrkn@mrkn.jp>
+
+ * configure.in: Fix c++ compiler auto-selection not only for
+ Darwin 11.x, but also the other versions of Darwin.
+
+Tue Mar 19 00:26:22 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * gc.c: Improve accuracy of objspace_live_num() and
+ allocated/freed counters. patched by tmm1(Aman Gupta).
+ [Bug #8092] [ruby-core:53392]
+
+Mon Mar 18 21:42:48 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * gc.c: Avoid unnecessary heap growth. patched by tmm1(Aman Gupta).
+ [Bug #8093] [ruby-core:53393]
+
+Mon Mar 18 17:58:36 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * gc.c: Fix unlimited memory growth with large values of
+ RUBY_FREE_MIN. patched by tmm1(Aman Gupta).
+ [Bug #8095] [ruby-core:53405]
+
+Mon Mar 18 14:46:19 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/win32ole/test_err_in_callback.rb
+ (TestErrInCallBack#test_err_in_callback): shouldn't create a file in
+ the top of build directory.
+
+Mon Mar 18 13:29:52 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_dump.c (backtrace): on darwin use custom backtrace() to trace
+ beyond _sigtramp. darwin's backtrace can't trace beyond signal
+ trampoline with sigaltstack.
+
+ * configure.in: check execinfo.h on darwin.
+
+Mon Mar 18 11:03:23 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_exec.h (END_INSN): revert r39517 because the segv seems fixed by
+ r39806.
+
+Mon Mar 18 10:41:06 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_exec.c: Correct predefined macro name. This typo is introduced by
+ r36534 and should be backported to ruby_2_0_0.
+
+Mon Mar 18 03:18:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * array.c: Typo in Array#delete by Timo Sand [GH fixes #258]
+
+Mon Mar 18 01:14:56 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (io_fillbuf): show fd number on failure to debug.
+ http://c5632.rubyci.org/~chkbuild/ruby-trunk/log/20130316T050302Z.diff.html.gz
+
+Sun Mar 17 02:38:21 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/date/date_core.c: include sys/time.h for avoiding implicit
+ declaration of gettimeofday().
+
+Sun Mar 17 00:55:31 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/missing.h: removed __linux__. it's unnecessary.
+
+Fri Mar 15 14:57:16 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c: disabled _FORTIFY_SOURCE for avoid to hit glibc bug.
+ [Bug #8080] [ruby-core:53349]
+ * test/ruby/test_io.rb (TestIO#test_io_select_with_many_files):
+ test for the above.
+
+Wed Mar 13 15:16:35 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/missing.h (__syscall): moved to...
+ * io.c: here. because __syscall() is only used from io.c.
+
+ * include/ruby/missing.h: move "#include <sys/type.h>" to ....
+ * include/ruby/intern.h: here. because it was introduced for
+ fixing NFDBITS issue. [ruby-core:05179].
+
+Wed Mar 13 14:38:53 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/missing.h (struct timespec): include <sys/time.h>
+
+Wed Mar 13 13:54:45 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: check struct timeval exist or not.
+ * include/ruby/missing.h (struct timeval): check HAVE_STRUCT_TIMEVAL
+ properly. and don't include sys/time.h if struct timeval exist.
+
+ * file.c: include sys/time.h explicitly.
+ * random.c: ditto.
+ * thread_pthread.c: ditto.
+ * time.c: ditto.
+ * ext/date/date_strftime.c: ditto.
+
+Fri Mar 15 14:45:02 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in (_FORTIFY_SOURCE): added a few comments.
+
+Fri Mar 15 14:17:55 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (numberof): renamed from ARRAY_SIZE() because
+ other all files use numberof().
+
+Say Mar 15 01:33:00 2013 Charles Oliver Nutter <headius@headius.com>
+
+ * test/ruby/test_lazy_enumerator.rb (TestLazyEnumerator#test_drop_while):
+ Modify while condition to show dropping remains off after first false
+ value. This change was made in 39711.
+
+Fri Mar 15 23:06:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (GetTimeval): check if already initialized instance.
+
+ * time.c (GetNewTimeval): check if newly created instance.
+
+ * time.c (time_init_0, time_init_1, time_init_copy, time_mload): must
+ be newly created instance. [ruby-core:53436] [Bug #8099]
+
+Fri Mar 15 14:51:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_sys_fail_path_with_func): share same function, and path
+ may be nil.
+
+Fri Mar 15 08:24:51 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_sys_fail_path): define & use rb_sys_fail_path0 like r39752
+
+Fri Mar 15 04:08:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * proc.c: Typo in Proc.arity found by Jack Nagel [Bug #8094]
+
+Thu Mar 14 16:59:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rb_cv_function_name_string): macro for function name
+ string predefined identifier, __func__ in C99, or __FUNCTION__ in
+ gcc.
+
+ * file.c (rb_sys_fail_path): use RUBY_FUNCTION_NAME_STRING.
+
+Thu Mar 14 14:12:34 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (rb_sys_fail_path): use rb_sys_fail_path0 only on GCC.
+ __func__ is C99 feature.
+
+Thu Mar 14 12:59:59 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (rb_sys_fail_path0): add to append the name of called function
+ to ease debugging for example blow umask_spec failure.
+ http://fbsd.rubyci.org/~chkbuild/ruby-trunk/log/20130309T010202Z.diff.html.gz
+
+ * file.c (rb_sys_fail_path): use rb_sys_fail_path0.
+
+Thu Mar 14 12:53:15 2013 Luis Lavena <luislavena@gmail.com>
+
+ * win32/file.c (get_user_from_path): add internal function that retrieves
+ username from supplied path (refactored).
+ * win32/file.c (rb_file_expand_path_internal): refactor expansion of user
+ home to use get_user_from_path and cover dir_string corner cases.
+ [ruby-core:53168] [Bug #8034]
+
+Thu Mar 14 11:53:01 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * NEWS: describe RUBY_HEAP_SLOTS_GROWTH_FACTOR.
+
+Thu Mar 14 10:01:12 2013 Eric Hodel <drbrain@segment7.net>
+
+ * doc/globals.rdoc: $? is thread-local
+
+Wed Mar 13 23:25:59 2013 Narihiro Nakamura <authornari@gmail.com>
+
+ * gc.c: allow to tune growth of heap by environment variable
+ RUBY_HEAP_SLOTS_GROWTH_FACTOR. patched by tmm1(Aman Gupta).
+ [Feature #8015] [ruby-core:53131]
+
+Wed Mar 13 19:43:46 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * doc/irb/irb.rd.ja: fix typo
+
+ * ext/tk/MANUAL_tcltklib.eng: fix typos
+
+ * ext/tk/sample/tktextframe.rb (Tk#component_delegates): fix typo
+
+Wed Mar 13 15:13:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (rb_obj_singleton_methods): collect methods from the origin
+ class. [ruby-core:53207] [Bug #8044]
+
+Wed Mar 13 14:51:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_export_method): directly override the flag of method
+ defined in prepending class too, not adding zsuper entry.
+ [ruby-core:53106] [Bug #8005]
+
+Wed Mar 13 13:06:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rm, shvar_to_cpp, unexpand_shvar): local is not
+ available on old shells.
+
+ * configure.in (shvar_to_cpp): escape quotes for old shells.
+ [Bug #7959] [Bug #8071]
+
+Wed Mar 13 11:11:07 2013 Shugo Maeda <shugo@ruby-lang.org>
+
+ * object.c (Init_Object): remove Module#used, which has been
+ introduced in Ruby 2.0 by mistake. [Bug #7916] [ruby-core:52719]
+
+Wed Mar 13 05:49:29 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/irb.rb: Fix typo
+
+Tue Mar 12 22:20:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_set_arguments, iseq_compile_each): support required
+ keyword arguments. [ruby-core:51454] [Feature #7701]
+
+ * iseq.c (rb_iseq_parameters): ditto.
+
+ * parse.y (f_kw, f_block_kw): ditto. this syntax is still
+ experimental, the notation may change.
+
+ * vm_core.h (rb_iseq_struct): ditto.
+
+ * vm_insnhelper.c (vm_callee_setup_keyword_arg): ditto.
+
+Tue Mar 12 17:02:53 2013 TAKANO Mitsuhiro <tak@no32.tk>
+
+ * date_core.c: clearly specify operator precedence.
+
+Tue Mar 12 17:00:45 2013 TAKANO Mitsuhiro <tak@no32.tk>
+
+ * insns.def: fix condition.
+
+Tue Mar 12 16:48:19 2013 TAKANO Mitsuhiro <tak@no32.tk>
+
+ * rational.c: fix dangling if, else-if and else.
+
+Tue Mar 12 06:27:59 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/commands/setup_command.rb: Don't delete non-rubygems
+ files when installing RubyGems.
+ * test/rubygems/test_gem_commands_setup_command.rb: Test for the
+ above.
+
+ * lib/rubygems/ext/ext_conf_builder.rb: Use full path to siteconf.rb
+ in case the extconf.rb changes directories (like memcached does).
+
+ * lib/rubygems/package.rb: Remove double slash from path.
+ * test/rubygems/test_gem_package.rb: Test for the above.
+ * test/rubygems/test_gem_package_old.rb: ditto.
+
+ * lib/rubygems/source.rb: Revert automatic HTTPS upgrade
+ * lib/rubygems/spec_fetcher.rb: ditto.
+ * test/rubygems/test_gem_remote_fetcher.rb: ditto.
+ * test/rubygems/test_gem_source.rb: ditto.
+ * test/rubygems/test_gem_spec_fetcher.rb: ditto.
+
+Tue Mar 12 02:25:19 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/smtp.rb: Added Net::SMTP#rset method to implement the SMTP
+ RSET command. [ruby-trunk - Feature #5373]
+ * NEWS: ditto.
+ * test/net/smtp/test_smtp.rb: Test for the above.
+
+Mon Mar 11 22:44:57 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv-replace.rb (TCPSocket#initialize): resolve the 3rd
+ argument only if non-nil value is given.
+ [ruby-dev:47150] [ruby-trunk - Bug #8054] reported and analyzed by
+ mrkn.
+
+Mon Mar 11 19:22:54 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/mkmf/base.rb: class name conflict.
+
+Mon Mar 11 18:45:09 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enumerator.c (enumerator_with_index): try to convert given offset to
+ integer. fix bug introduced in r39594.
+
+Mon Mar 11 17:27:57 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ruby/envutil.rb (EnvUtil.with_default_external): add for
+ changing Encoding.default_external without warnings.
+
+ * test/ruby/envutil.rb (EnvUtil.with_default_internal): ditto.
+
+ * test/ruby/test_io_m17n.rb: use above with_default_external.
+
+Mon Mar 11 16:57:00 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (extract_binmode): raise error even if binmode and textmode
+ don't conflict. [Bug #5918] [ruby-core:42199]
+
+Mon Mar 11 12:25:12 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * Merge Onigmo d4bad41e16e3eccd97ccce6f1f96712e557c4518.
+ fix lookbehind assertion fails with /m mode enabled. [Bug #8023]
+ fix \Z matches where it shouldn't. [Bug #8001]
+
+Mon Mar 11 11:53:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (MakeMakefile#dir_config, MakeMakefile#_libdir_basename):
+ defer use of instance variable until needed. [Bug #8074]
+
+Thu Mar 7 10:42:28 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * lib/thread.rb (Queue#clear): return self.
+ Patch by Cubing Cube. Thank you! [Bug #7947] [ruby-dev:47098]
+ * lib/thread.rb (Queue#push): ditto.
+ * lib/thread.rb (SizedQueue#push): ditto.
+ * test/thread/test_queue.rb: add tests for the above.
+
+Thu Mar 7 10:40:49 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * tool/change_maker.rb (#diff2index): check Encoding::BINARY.
+ BASERUBY may still be 1.8.x.
+
+Thu Mar 7 08:47:42 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * NEWS (Mutex#owned?): no longer experimental.
+
+Sun Mar 10 23:38:15 2013 Luis Lavena <luislavena@gmail.com>
+
+ * win32/file.c (rb_file_expand_path_internal): Expand home directory when
+ used as second parameter (dir_string). [ruby-core:53168] [Bug #8034]
+ * test/ruby/test_file_exhaustive.rb: add test to verify.
+
+Sun Mar 10 23:27:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/ext/ext_conf_builder.rb (Gem::Ext::ExtConfBuilder.build):
+ it is impossible to predict which file will be installed to where,
+ by the arguments, so use intermediate destination directory always.
+ [Bug #7698]
+
+Sun Mar 10 17:00:22 2013 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: edited rdoc.
+ * rational.c: ditto.
+
+Sun Mar 10 15:02:39 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (setup_communication_pipe): remove unused function.
+ it was unintentionally added r39683.
+
+Wed Mar 6 00:30:40 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * tool/gen_ruby_tapset.rb: add tapset generator.
+
+Wed Mar 6 03:27:43 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * probes.d (symbol-create): change argument name `string' to
+ `str'. `string' is a keyword for systemtap.
+
+Tue Mar 5 22:23:01 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * probes.d: added argument name
+
+Thu Mar 7 01:17:00 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/thread/test_queue.rb (TestQueue#test_thr_kill): reduce
+ iterations from 2000 to 250. When running on uniprocessor
+ systems, every th.kill needs TIME_QUANTUM_USEC time (i.e.
+ 100msec on posix systems). Because, "r.read 1" is 3 steps
+ operations that 1) release GVL 2) read 3) acquire gvl and
+ (1) invoke context switch to main thread. and then, main
+ thread's th.kill resume (1), but not (2). Thus read interrupt
+ need TIME_QUANTUM_USEC. Then maximum iteration is 30sec/100msec
+ = 300.
+
+Thu Mar 7 00:14:51 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_update_max_fd): use ATOMIC_CAS because this function
+ is used from timer thread too.
+
+Wed Mar 6 23:30:21 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (ARRAY_SIZE): new.
+ * thread_pthread.c (gvl_acquire_common): use low priority
+ notification for avoiding timer thread interval confusion.
+ If we use timer_thread_pipe[1], every gvl_yield() request
+ one more gvl_yield(). It lead to thread starvation.
+ [Bug #7999] [ruby-core:53095]
+ * thread_pthread.c (rb_reserved_fd_p): adds timer_thread_pipe_low
+ to reserved fds.
+
+Wed Mar 6 22:36:19 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (rb_thread_wakeup_timer_thread_fd): add fd
+ argument and remove hardcoded dependency of timer_thread_pipe[1].
+ * thread_pthread.c (consume_communication_pipe): add fd argument.
+ * thread_pthread.c (close_communication_pipe): ditto.
+
+ * thread_pthread.c (timer_thread_sleep): adjust the above changes.
+
+ * thread_pthread.c (setup_communication_pipe_internal): factor
+ out pipe initialize logic.
+
+Wed Mar 6 22:56:14 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (ubf_select): add to small comments why we
+ need to call rb_thread_wakeup_timer_thread().
+
+Wed Mar 6 21:42:24 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (rb_thread_create_timer_thread): factor out
+ creating communication pipe logic into separate function.
+ * thread_pthread.c (setup_communication_pipe): new helper function.
+ * thread_pthread.c (set_nonblock): moves a definition before
+ setup_communication_pipe.
+
+Sun Mar 3 02:42:29 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (consume_communication_pipe): retry when
+ read returned CCP_READ_BUFF_SIZE.
+
+Wed Mar 6 21:31:35 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (timer_thread_sleep): use poll() instead of
+ select(). select doesn't work if timer_thread_pipe[0] is
+ greater than FD_SETSIZE.
+ * thread_pthread.c (USE_SLEEPY_TIMER_THREAD): add a dependency
+ against poll.
+
+Wed Mar 6 21:00:23 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (USE_SLEEPY_TIMER_THREAD): use more accurate
+ ifdef conditions.
+
+Sun Mar 3 02:30:36 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (set_nonblock): new helper function for set
+ O_NONBLOCK.
+ * thread_pthread.c (rb_thread_create_timer_thread): set O_NONBLOCK
+ to timer_thread_pipe[0] too.
+
+Sun Mar 10 09:12:51 2013 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: described syntax of string form.
+ * rational.c: ditto.
+
+Sat Mar 9 11:58:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_extended): check for prepended object.
+ [ruby-core:53206] [Bug #8043]
+
+Sat Mar 9 08:36:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (features_index_add_single, rb_feature_p): store single index
+ as Fixnum to reduce the number of arrays for the indexes. based on
+ the patch by tmm1 (Aman Gupta) in [ruby-core:53216] [Bug #8048].
+
+Sat Mar 9 00:25:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (r_object0): load prepended objects. treat the class of
+ extended object in the included modules as prepended singleton
+ class. [ruby-core:53202] [Bug #8041]
+
+Fri Mar 8 19:44:00 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * man/rake.1, man/ruby.1: Use the Pa macro to make URLs stand out.
+
+Fri Mar 8 13:20:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/pathname/pathname.c (path_f_pathname): rdoc for Pathname()
+
+Fri Mar 8 12:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * man/rake.1: Document ENVIRONMENT variables on RAKE(1) manpage
+
+Fri Mar 8 10:44:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/webrick/httpproxy.rb: Fix typos in HTTPProxyServer [Bug #8013]
+ Patch by Nobuhiro IMAI [ruby-core:53127]
+
+Fri Mar 8 03:16:15 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * class.c (rb_mod_ancestors): Include singleton_class in ancestors
+ list [Feature #8035]
+
+ * test/ruby/test_module.rb (class): test for above
+
+ * test/ruby/marshaltestlib.rb (module): adapt test
+
+ * NEWS: list change
+
+Thu Mar 7 14:21:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): pass keyword arguments to zsuper,
+ with current values. [ruby-core:53114] [Bug #8008]
+
+Thu Mar 7 12:53:47 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/commands/setup_command.rb: Install .pem files.
+ * test/rubygems/test_gem_commands_setup_command.rb: Test for the
+ above.
+
+ * lib/rubygems/spec_fetcher.rb: Test HTTPS upgrade with URI::HTTPS,
+ not URI::HTTP. Fixes bug in automatic HTTPS upgrade.
+ * test/rubygems/test_gem_spec_fetcher.rb: Test for the above.
+
+ * lib/rubygems.rb: Version 2.0.2
+
+ * lib/rubygems/test_utilities.rb: Ensure scheme and uri class match.
+
+Thu Mar 7 10:39:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb (gem): Gem.ensure_gem_subdirectories now has mode
+ option since r39607. refix of r38870.
+
+Wed Mar 6 13:14:28 2013 Eric Hodel <drbrain@segment7.net>
+
+ * test/rubygems/test_gem_spec_fetcher.rb: Removed unused variable.
+
+Wed Mar 6 08:10:15 2013 Eric Hodel <drbrain@segment7.net>
+
+ * test/rubygems/test_require.rb: Fix tests when 'a.rb' exists.
+ [ruby-trunk - Bug #7749]
+
+Wed Mar 6 08:00:59 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems.rb: Allow specification of directory permissions.
+ [ruby-trunk - Bug #7713]
+ * test/rubygems/test_gem.rb: Test for the above.
+
+Wed Mar 6 07:40:21 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/commands/query_command.rb: Only fetch remote specs when
+ showing details. [ruby-trunk - Bug #8019] RubyGems bug #487
+ * lib/rubygems/remote_fetcher.rb: ditto.
+ * lib/rubygems/security/policy.rb: ditto.
+ * test/rubygems/test_gem_commands_query_command.rb: Test for the
+ above.
+
+ * lib/rubygems/security.rb: Make OpenSSL optional for RubyGems.
+ * lib/rubygems/commands/cert_command.rb: ditto.
+
+ * lib/rubygems/config_file.rb: Display file with YAML error, not
+ ~/.gemrc
+
+ * lib/rubygems/remote_fetcher.rb: Only create gem subdirectories when
+ installing gems.
+ * lib/rubygems/dependency_resolver.rb: ditto.
+ * lib/rubygems/test_utilities.rb: ditto.
+ * test/rubygems/test_gem_commands_fetch_command.rb: Test for the
+ above.
+
+ * lib/rubygems/spec_fetcher.rb: Only try to upgrade
+ http://rubygems.org to HTTPS
+ * test/rubygems/test_gem_spec_fetcher.rb: Test for the above.
+
+ * lib/rubygems.rb: Update win_platform? check for JRuby compatibility.
+
+ * test/rubygems/test_gem_installer.rb: Update for Ruby 1.9.2
+ compatibility
+
+Wed Mar 6 01:19:28 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * enumerator.c (enumerator_with_index, lazy_take): use INT2FIX(0)
+ instead of INT2NUM(0).
+
+ * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): ditto.
+
+ * ext/fiddle/function.c (function_call): ditto.
+
+ * ext/openssl/ossl_x509store.c (ossl_x509store_initialize): ditto.
+
+ * process.c (proc_getsid): ditto.
+
+ * transcode.c (econv_finish): ditto.
+
+Tue Mar 5 21:36:43 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (rb_prepend_module): check redefinition of built-in optimized
+ methods. [ruby-dev:47124] [Bug #7983]
+
+ * vm.c (rb_vm_check_redefinition_by_prepend): ditto.
+
+Tue Mar 5 20:29:25 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (mnew): revert r39224. [ruby-core:53038] [Bug #7988]
+
+Tue Mar 5 20:23:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_check_arity): make a static inline
+ function so it can be used as an expression and argc would be
+ evaluated only once.
+
+Tue Mar 5 12:30:55 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems.rb: Bump version to 2.0.1 for upcoming bugfix release
+
+ * lib/rubygems/ext/ext_conf_builder.rb: Restore ruby 1.8 compatibility
+ for [Bug #7698]
+ * test/rubygems/test_gem_installer.rb: Ditto.
+
+ * lib/rubygems/package.rb: Restore ruby 1.8 compatibility.
+
+ * test/rubygems/test_gem_dependency_installer.rb: Fix warnings
+
+Tue Mar 5 12:24:23 2013 Eric Hodel <drbrain@segment7.net>
+
+ * enumerator.c (enumerator_with_index): Restore handling of a nil memo
+ from r39594.
+
+Tue Mar 5 10:40:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/objspace/objspace.c (count_nodes): count also newly added nodes,
+ and fix key for unknown node. patch by tmm1 (Aman Gupta) in
+ [ruby-core:53130] [Bug #8014]
+
+Tue Mar 5 10:20:16 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enumerator.c (enumerator_with_index_i): allow Bignum as offset, to
+ get rid of conversion exception and integer overflow.
+ [ruby-dev:47131] [Bug #8010]
+
+ * numeric.c (rb_int_succ, rb_int_pred): shortcut optimization for
+ Bignum.
+
+Tue Mar 5 10:02:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/ext/ext_conf_builder.rb (Gem::Ext::ExtConfBuilder.build):
+ clear DESTDIR so RUBYARCHDIR and RUBYLIBDIR are not be overridden.
+ [Bug #7698]
+
+Mon Mar 4 15:33:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/ext/ext_conf_builder.rb (Gem::Ext::ExtConfBuilder.build):
+ fix for unusual cases again. install to a temporary directory once
+ and move installed files to the destination directory, if it is same
+ as the current directory. [Bug #7698]
+
+Mon Mar 4 14:13:36 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (miniruby, ruby): move MAINLIBC because linker arguments
+ must appear after object files with newer versions of gcc. patch by
+ tmm1 (Aman Gupta) in [ruby-core:53121] [Bug #8009]
+
+Mon Mar 4 10:23:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * encoding.c: Typo in Encoding overview by Tom Wardrop [GH fixes #255]
+
+Sun Mar 3 12:35:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (MakeMakefile#libpath_env): set runtime library path for
+ the case rpath is disabled.
+
+Sun Mar 3 12:17:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/ext/ext_conf_builder.rb
+ (Gem::Ext::ExtConfBuilder.hack_for_obsolete_style_gems): remove
+ circular dependencies in install-so too. [ruby-core:52882]
+ [Bug #7698]
+
+Sun Mar 3 07:33:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/socket/tcpserver.c: Grammar for TCPServer.new from r39554
+
+Sun Mar 3 01:17:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/ext/ext_conf_builder.rb
+ (Gem::Ext::ExtConfBuilder.hack_for_obsolete_style_gems): remove
+ circular dependencies for old style gems which locate extconf.rb on
+ the toplevel. [ruby-core:53059] [ruby-trunk - Bug #7698]
+
+ * lib/rubygems/ext/ext_conf_builder.rb (Gem::Ext::ExtConfBuilder.build):
+ use RUBYOPT instead of -r option, and revert some tests. [Bug #7698]
+
+ * lib/rubygems/ext/ext_conf_builder.rb (Gem::Ext::ExtConfBuilder.build):
+ revert use of temporary directory for build, to work some buggy
+ extconf.rb which cannot build outside the source directory.
+ [ruby-core:53056] [Bug #7698]
+
+Sun Mar 3 00:04:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend (CPPFLAGS), lib/mkmf.rb (MakeMakefile#create_makefile):
+ define RUBY_EXPORT for static-linked-ext mswin. [Bug #7960]
+
+Sat Mar 2 22:49:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (ENCOBJS, EXTOBJS, config.h): definitions for
+ static-linked-ext. [Bug #7960]
+
+Sat Mar 2 17:34:19 2013 Tanaka Akira <akr@fsij.org>
+
+ * lib/webrick/utils.rb: use Socket.tcp_server_sockets to create server
+ sockets.
+ fix [Bug #7100] https://bugs.ruby-lang.org/issues/7100
+ reported by sho-h (Sho Hashimoto).
+
+Sat Mar 2 02:45:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * array.c: typo in comment patch by Nami-Doc [Github fixes #253]
+
+Sat Mar 2 01:33:17 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * Merge Onigmo 0fe387da2fee089254f6b04990541c731a26757f
+ v5.13.3 [Bug#7972] [Bug#7974]
+
+Fri Mar 1 11:09:06 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/fileutils.rb: Revert r34669 which altered the way
+ metaprogramming in FileUtils occurred. [ruby-trunk - Bug #7958]
+
+ * test/fileutils/visibility_tests.rb: Refactored tests of FileUtils
+ options modules to expose bug found in #7958
+ * test/fileutils/test_dryrun.rb: ditto.
+ * test/fileutils/test_nowrite.rb: ditto.
+ * test/fileutils/test_verbose.rb: ditto.
+
+Fri Mar 1 09:18:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/psych.rb: specify in rdoc what object is returned in parser
+ By Adam Stankiewicz [Github tenderlove/psych#133]
+
+Fri Mar 1 07:21:41 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/ext/builder.rb: Fix incompatibilities when installing
+ extensions. Patch by Nobu.
+ [ruby-trunk - Bug #7698] [ruby-trunk - Bug #7971]
+ * lib/rubygems/ext/ext_conf_builder.rb: ditto.
+ * lib/rubygems/installer.rb: ditto.
+ * test/rubygems/test_gem_ext_ext_conf_builder.rb: Test for the above.
+ * test/rubygems/test_gem_installer.rb: ditto.
+
+ * lib/rubygems/commands/sources_command.rb: Prefer HTTPS over HTTP.
+ * lib/rubygems/defaults.rb: ditto
+ * lib/rubygems/dependency_resolver.rb: Ditto.
+ * lib/rubygems/source.rb: ditto.
+ * lib/rubygems/spec_fetcher.rb: ditto.
+ * lib/rubygems/specification.rb: ditto.
+ * lib/rubygems/test_utilities.rb: ditto.
+ * test/rubygems/test_gem.rb: Test for the above.
+ * test/rubygems/test_gem_commands_sources_command.rb: ditto.
+ * test/rubygems/test_gem_dependency_resolver_api_set.rb: ditto.
+ * test/rubygems/test_gem_remote_fetcher.rb: ditto.
+ * test/rubygems/test_gem_source.rb: ditto.
+ * test/rubygems/test_gem_spec_fetcher.rb: ditto.
+
+Fri Mar 1 03:25:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/psych/lib/psych.rb: rdoc for Psych overview by Adam Stankiewicz
+ [Github tenderlove/psych#134]
+
+Thu Feb 28 22:57:48 2013 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): remove redundant trace(line)
+ instruction. for example, at the following script
+ def m()
+ p:xyzzy
+ 1
+ 2
+ end
+ compiler ignores `1' because there is no effect. However,
+ `trace(line)' instruction remains in bytecode.
+ This modification removes such redundant trace(line) instruction.
+
+ * test/ruby/test_iseq.rb: add a test.
+
+Thu Feb 28 22:23:27 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (inspect_sockaddr): don't show that Unix
+ domain socket filename is bigger than sizeof(sun_path).
+ This limit is not rigid on some platforms such as Darwin and SunOS.
+
+Thu Feb 28 21:33:01 2013 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in(AC_DISABLE_OPTION_CHECKING): avoid warning "WARNING:
+ Unrecognized options: --with-PACKAGE".
+
+Thu Feb 28 20:22:04 2013 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c (iseq_data_to_ary): fix condition.
+ r34303 introduces a bug to avoid all line information from
+ a result of ISeq#to_a. This is a regression problem from 2.0.0p0.
+
+ * test/ruby/test_iseq.rb: add a test of lines after ISeq#to_a.
+
+Thu Feb 28 08:20:33 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/available_set.rb: Undent for style
+
+ * lib/rubygems/dependency_installer.rb: Pick latest prerelease gem to
+ install. Fixes RubyGems bug #468.
+ * test/rubygems/test_gem_dependency_installer.rb: Test for the above.
+
+ * lib/rubygems/dependency_installer.rb: Don't display "Done installing
+ documentation" if documentation will not be installed.
+ * lib/rubygems/rdoc.rb: ditto
+
+ * lib/rubygems/dependency_list.rb: Use Array#concat for Ruby 1.x
+ performance.
+
+ * lib/rubygems/installer.rb: Use formatted program name when comparing
+ executables. RubyGems pull request #471
+ * test/rubygems/test_gem_installer.rb: Test for the above.
+
+ * lib/rubygems/package.rb: Use more explicit feature check to work
+ around JRuby bug #552
+
+ * lib/rubygems/ssl_certs/GeoTrust_Global_CA.pem: Added GeoTrust root
+ certificate.
+
+ * test/rubygems/test_gem_source_list.rb: Use "example" instead of real
+ hostname
+
+Thu Feb 28 05:57:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * thread.c: rdoc formatting for Thread, ThreadGroup, and ThreadError
+
+Thu Feb 28 02:42:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * vm.c: Typo in overview for example of Thread#status returning false
+ Reported by Lee Jarvis
+
+Wed Feb 27 22:54:27 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h (union_sockaddr): make it longer for SunOS
+ and Darwin.
+
+Wed Feb 27 21:14:34 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/security.rb (REXML::Security): create.
+ * lib/rexml/rexml.rb: move entity_expansion_limit and
+ entity_expansion_text_limit accessors to ...
+ * lib/rexml/security.rb: ... here.
+ * lib/rexml/document.rb: use REXML::Security.
+ * lib/rexml/text.rb: use REXML::Security.
+ * test/rexml/test_document.rb: use REXML::Security.
+
+Wed Feb 27 19:53:32 2013 Benoit Daloze <eregontp@gmail.com>
+
+ * vm.c (Thread): fix typos in overview
+
+Wed Feb 27 13:21:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * vm.c (Thread): Typo in overview, swap setting and getting
+
+Wed Feb 27 13:02:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * vm.c (Thread): Documentation overview of Thread class
+
+Wed Feb 27 12:57:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * thread.c (rb_thread_wakeup): rdoc formatting
+
+Wed Feb 27 12:53:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * thread.c (rb_thread_group): rdoc formatting
+
+Wed Feb 27 12:33:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/ostruct.rb: Typo in OpenStruct overview [Github Fixes #251]
+ Patch by Chun-wei Kuo
+
+Wed Feb 27 12:13:32 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_exec.h (END_INSN): llvm-gcc may optimize out reg_cfp and cause
+ Stack/cfp consistency error when the instruction doesn't use reg_cfp.
+ Usually instructions use PUSH() but for example trace doesn't.
+ This hack cause speed down but you shouldn't use llvm-gcc, use clang.
+ [Bug #7938]
+
+Wed Feb 27 10:23:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * thread.c (thread_raise_m): rdoc formatting
+
+Tue Feb 26 23:32:44 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/document.rb: move entity_expansion_limit accessor to ...
+ * lib/rexml/rexml.rb: ... here for consistency.
+ * lib/rexml/document.rb (REXML::Document.entity_expansion_limit):
+ deprecated.
+ * lib/rexml/document.rb (REXML::Document.entity_expansion_limit=):
+ deprecated.
+
+Tue Feb 26 23:26:13 2013 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/document.rb: move entity_expansion_text_limit accessor to ...
+ * lib/rexml/rexml.rb: ... here to make rexml/text independent from
+ REXML::Document. It causes circular require.
+ * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit):
+ deprecated.
+ * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit=):
+ deprecated.
+ * lib/rexml/text.rb: add missing require "rexml/rexml" for
+ REXML.entity_expansion_text_limit.
+ Reported by Robert Ulejczyk. Thanks!!! [ruby-core:52895] [Bug #7961]
+
+Tue Feb 26 15:12:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/mkconfig.rb: reconstruct comma separated list values. a
+ command line to Windows batch file is split not only by spaces
+ and equal signs but also by commas and semicolons.
+
+Tue Feb 26 15:04:19 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (unexpand_shvar): get rid of non-portable shell
+ behavior on OpenBSD, so no extra quotes. [Bug #7959]
+
+Tue Feb 26 10:24:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (IS_LABEL_POSSIBLE): allow labels for keyword arguments just
+ after method definition without a parenthesis. [ruby-core:52820]
+ [Bug #7942]
+
+Tue Feb 26 04:50:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * error.c: clarify reason for sleep in SignalException example
+
+Tue Feb 26 03:47:00 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * error.c: clarify a document of SignalException. Process.kill()
+ doesn't have any guarantee when signal will be delivered.
+ [Bug #7951] [ruby-core:52864]
+
+Mon Feb 25 23:51:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/version.h: bump RUBY_API_VERSION same as RUBY_VERSION.
+
+Mon Feb 25 21:03:34 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (str_byte_substr): don't set coderange if it's not known.
+ [Bug #7954] [ruby-dev:47108]
+
+Mon Feb 25 16:47:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (realclean-local): miniprelude.c is made by srcs, so it
+ should not removed by distclean but by realclean. [Bug #6807]
+
+Mon Feb 25 16:30:30 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/config_file.rb: Lazily load .gem/credentials to only
+ check permissions when necessary. RubyGems bug #465
+ * test/rubygems/test_gem_config_file.rb: Test for the above.
+
+ * test/rubygems/test_gem_commands_push_command.rb: Remove duplicated
+ test.
+
+Mon Feb 25 15:47:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend (ARFLAGS): VisualC++ linker does not allow spaces between
+ output option and the output file name. [Bug #7950]
+
+ * enc/depend (RANLIB): set default command to do nothing, or make the
+ entire line a label on Windows.
+
+Mon Feb 25 14:41:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (MakeMakefile#init_mkmf): default libdirname to libdir.
+
+ * tool/rbinstall.rb: ditto.
+
+Mon Feb 25 13:12:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (setup): find Setup file from target_os 1. by
+ suffix (e.g. Setup.nacl, Setup.atheos), 2. by "platform"
+ option (e.g. Setup.nt, Setup.emx), and 3. default Setup. And
+ Setup.dj had been removed.
+
+Mon Feb 25 12:48:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * thread.c: Document Thread::new, clean up ::fork and mention calling
+ super if subclassing Thread
+
+Mon Feb 25 12:38:50 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: don't test ss_family and ss_len member of
+ struct sockaddr_storage. They are not used now except SunOS
+ specific code.
+
+Mon Feb 25 11:03:38 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * configure.in (unexpand_shvar): Use the numeric comparison
+ operator instead of '==' which is a ksh extension. [Bug #7941]
+
+Mon Feb 25 02:37:56 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket: define and use union_sockaddr instead of struct
+ sockaddr_storage for less casts.
+
+ * ext/socket/rubysocket.h (union_sockaddr): defined.
+
+ * ext/socket/socket.c (sock_accept): use union_sockaddr.
+ (sock_accept_nonblock): ditto.
+ (sock_sysaccept): ditto.
+ (sock_s_getnameinfo): ditto.
+
+ * ext/socket/basicsocket.c (bsock_getsockname): ditto.
+ (bsock_getpeername): ditto.
+ (bsock_local_address): ditto.
+ (bsock_remote_address): ditto.
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): ditto.
+
+ * ext/socket/init.c (recvfrom_arg): ditto.
+ (recvfrom_blocking): ditto.
+ (rsock_s_recvfrom): ditto.
+ (rsock_s_recvfrom_nonblock): ditto.
+ (rsock_getfamily): ditto.
+
+ * ext/socket/raddrinfo.c (rb_addrinfo_t): ditto.
+ (ai_get_afamily): ditto.
+ (inspect_sockaddr): ditto.
+ (addrinfo_mdump): ditto.
+ (addrinfo_mload): ditto.
+ (addrinfo_getnameinfo): ditto.
+ (addrinfo_ip_port): ditto.
+ (extract_in_addr): ditto.
+ (addrinfo_ipv6_to_ipv4): ditto.
+ (addrinfo_unix_path): ditto.
+
+ * ext/socket/tcpserver.c (tcp_accept): ditto.
+ (tcp_accept_nonblock): ditto.
+ (tcp_sysaccept): ditto.
+
+ * ext/socket/ipsocket.c (ip_addr): ditto.
+ (ip_peeraddr): ditto.
+ (ip_s_getaddress): ditto.
+
+Sun Feb 24 21:15:05 2013 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: [ruby-core:52303]
+
+Sun Feb 24 15:33:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (rb_random_ulong_limited): limit is inclusive, but generic
+ rand method should return a number less than it, so increase for the
+ difference. [ruby-core:52779] [Bug #7935]
+
+Sun Feb 24 15:32:36 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (rb_random_ulong_limited): limit is inclusive, but generic
+ rand method should return a number less than it, so increase for the
+ difference. [ruby-core:52779] [Bug #7935]
+
+Sun Feb 24 15:14:43 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/http.rb: Removed duplicate Accept-Encoding in Net::HTTP#get.
+ [ruby-trunk - Bug #7924]
+ * test/net/http/test_http.rb: Test for the above.
+
+Wed Feb 20 14:28:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * thread.c: Document ThreadGroup::Default
+
+Wed Feb 20 14:23:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * thread.c: Grammar for #backtrace_locations and ::handle_interrupt
+
+Sun Feb 24 13:35:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_call_method): block level control frame does not
+ have method entry, so obtain the method entry from method top-level
+ control frame to be compared with refined method entry.
+ [ruby-core:52750] [Bug #7925]
+
+Wed Feb 20 13:23:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * object.c: Document methods receiving string and convert to symbol
+ Patch by Stefan Rusterholz
+ * vm_eval.c: ditto
+ * vm_method.c: ditto
+
+Wed Feb 20 07:20:56 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * signal.c (sigsegv): suppress unused result warning. Because
+ write(2) is marked __warn_unused_result__ on Linux glibc.
+
+Sun Feb 24 07:50:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_set_arguments): no keyword check if any keyword rest
+ argument exists, even unnamed. [ruby-core:52744] [Bug #7922]
+
+Sat Feb 23 16:51:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * thread.c: Documentation for Thread#backtrace_locations
+
+Sat Feb 23 16:05:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * vm.c: Typo in ObjectSpace::WeakMap overview
+
+Sat Feb 23 16:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * thread.c: Improved rdoc for ::handle_interrupt, ::pending_interrupt?
+ and #pending_interrupt?
+
+Sat Feb 23 12:26:43 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-electric.el (ruby-electric-curlies)
+ (ruby-electric-matching-char, ruby-electric-bar): Avoid electric
+ insertion when there is a prefix argument.
+
+ * misc/ruby-electric.el (ruby-electric-insert)
+ (ruby-electric-cua-replace-region-p)
+ (ruby-electric-cua-replace-region): Avoid electric insertion and
+ fall back when cua-mode is enabled and a region is active.
+
+Sat Feb 23 12:35:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * array.c: Document #<=> return values and formatting
+ * bignum.c: ditto
+ * file.c: ditto
+ * object.c: ditto
+ * numeric.c: ditto
+ * rational.c: ditto
+ * string.c: ditto
+ * time.c: ditto
+
+Sat Feb 23 10:50:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * array.c (rb_ary_diff, rb_ary_and, rb_ary_or): Document return order
+ [RubySpec #7803]
+
+Sat Feb 23 10:17:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * object.c (rb_obj_comp): Documenting Object#<=> return values
+ Patch by Stefan Rusterholz
+
+Sat Feb 23 09:48:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (file_s_fnmatch, fnmatch_brace): encoding-incompatible pattern
+ and string do not match, instead of exception. [ruby-dev:47069]
+ [Bug #7911]
+
+Sat Feb 23 08:57:46 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * doc/NEWS-*: Update NEWS from their respective branches
+
+Sat Feb 23 08:14:43 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * NEWS: many additions for Ruby 2.0.0
+
+ * object.c: Add doc for Module.prepended
+
+Sat Feb 23 07:52:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/ruby.pc.in: reorder library flags which may refer library
+ names. [Bug #7913]
+
+Fri Feb 22 23:46:20 2013 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+
+ * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit):
+ fix a typo in comment in r39384.
+
+Fri Feb 22 18:31:46 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit):
+ new attribute to read/write entity expansion text limit. the default
+ limit is 10Kb.
+
+ * lib/rexml/text.rb (REXML::Text.unnormalize): check above attribute.
+
+Fri Feb 22 17:36:23 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/test_rbconfig.rb (TestRbConfig): fix r39372.
+ It must see RbConfig::CONFIG instead of CONFIG.
+
+Fri Feb 22 14:55:41 2013 Naohisa Goto <ngotogenome@gmail.com>
+
+ * signal.c (ruby_abort): fix typo in r39354 [Bug #5014]
+
+Fri Feb 22 12:46:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (rb_random_ulong_limited): fix error message for negative
+ value. [ruby-dev:47061] [Bug #7903]
+
+Fri Feb 22 11:36:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/test_rbconfig.rb (TestRbConfig): skip user defined values by
+ configuration options. [Bug #7902]
+
+Fri Feb 22 11:33:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (MakeMakefile#init_mkmf): adjust default library path
+ for multiarch. [Bug #7874]
+
+Fri Feb 22 11:10:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * enum.c (Enumerable#chunk: Improved examples, grammar, and formatting
+ Patch by Dan Bernier and Rich Bruchal of newhaven.rb
+ [Github documenting-ruby/ruby#8]
+
+Fri Feb 22 11:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * numeric.c: Examples and formatting for Numeric and Float
+ Based on a patch by Zach Morek and Oren K of newhaven.rb
+ [Github documenting-ruby/ruby#5]
+
+Fri Feb 22 07:04:41 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/installer.rb (build_extensions): Create extension
+ install destination before building extension. Patch by Kenta Murata.
+ [ruby-trunk - Bug #7897]
+ * test/rubygems/test_gem_installer.rb: Test for the above.
+
+Fri Feb 22 06:30:57 2013 Eric Hodel <drbrain@segment7.net>
+
+ * doc/globals.rdoc: Document what setting $DEBUG does.
+
+ * doc/globals.rdoc: Added pointer to $-d for full documentation.
+
+Fri Feb 22 06:27:07 2013 Eric Hodel <drbrain@segment7.net>
+
+ * doc/globals.rdoc: Document what setting $VERBOSE does. [Bug #7899]
+
+ * doc/globals.rdoc: Added pointer to $-w and $-v for full
+ documentation.
+
+Fri Feb 22 02:33:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/abbrev.rb: Add words parameter to Abbrev::abbrev
+ Patch by Devin Weaver [Github documenting-ruby/ruby#7]
+
+Thu Feb 21 17:28:14 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/merger.rb: add interaction when only ChangeLog is modified.
+
+Thu Feb 21 16:34:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * signal.c (check_stack_overflow): extract duplicated code and get rid
+ of declaration-after-statement. [Bug #5014]
+
+Thu Feb 21 14:14:13 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * signal.c (sigsegv): avoid to use async signal unsafe functions
+ when nested sigsegv is happen.
+ [Bug #5014] [ruby-dev:44082]
+
+Thu Feb 21 13:47:59 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * file.c (rb_group_member): added an error check. SUS says,
+ getgroups(small_value) may return EINVAL.
+
+Thu Feb 21 13:37:07 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (RB_MAX_GROUPS): moved to
+ * internal.h (RB_MAX_GROUPS): here.
+
+ * file.c (rb_group_member): use RB_MAX_GROUPS instead of
+ RUBY_GROUP_MAX. They are the same.
+
+Thu Feb 21 13:15:40 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * file.c (access_internal): removed.
+ * file.c (rb_file_readable_real): use access() instead of
+ access_internal().
+ * file.c (rb_file_writable_real): ditto.
+ * file.c (rb_file_executable_real): ditto.
+
+Thu Feb 21 13:04:59 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * file.c (eaccess): use access() when not using setuid nor setgid.
+ This is minor optimization.
+
+Thu Feb 21 12:56:19 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * file.c (rb_group_member): get rid of NGROUPS dependency.
+ [Bug #7886] [ruby-core:52537]
+
+Thu Feb 21 12:45:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe): try two levels upper for stripping
+ libdir name. [Bug #7874]
+
+ * configure.in (libdir_basename): expand with multiarch in configure,
+ not to defer the expansion till ruby.pc.in and mkmf.rb. [Bug #7874]
+
+ * configure.in (libdir_basename): also -rpath and -install_name flags
+ are affected when libruby directory changes. [Bug #7874]
+
+Wed Feb 20 19:27:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (HAVE_RB_SCAN_ARGS_OPTIONAL_HASH): for
+ rb_scan_args() optional hash feature. [Bug #7861]
+
+Wed Feb 20 18:02:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (target_os): do not strip -gnu suffix on Linux if
+ --target is given explicitly. [Bug #7874]
+
+ * configure.in (libdirname): adjust library path name which libruby
+ files will be installed. [Bug #7874]
+
+ * tool/rbinstall.rb (libdir): ditto.
+
+Wed Feb 20 13:37:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/pty/pty.c: Documentation for the PTY module
+
+Wed Feb 20 12:18:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * object.c: Document Data class [Bug #7890] [ruby-core:52549]
+ Patch by Matthew Mongeau
+
+Wed Feb 20 11:50:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/mutex_m.rb: Add rdoc for Mutex_m module
+
+Wed Feb 20 09:34:43 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/commands/update_command.rb: Create the installer after
+ options are processed. [ruby-trunk - Bug #7779]
+ * test/rubygems/test_gem_commands_update_command.rb: Test for the
+ above.
+
+Wed Feb 20 07:51:19 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/installer.rb: Use gsub instead of gsub! to avoid
+ altering @bin_dir. Fixes tests on windows. [ruby-trunk - Bug #7885]
+
+Tue Feb 19 20:50:00 2013 Kenta MURATA <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.gemspec: bump to 1.2.0.
+ [ruby-core:51777] [Bug #7761]
+
+Tue Feb 19 13:07:25 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/syslog/syslog.c (Init_syslog): Define inspect as a singleton
+ method and remove it as an instance method. [Bug #6502]
+
+Tue Feb 19 12:30:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * object.c: rdoc formatting for Kernel#Array()
+ * array.c: Add rdoc for Array() method to Creating Arrays section
+
+Tue Feb 19 10:35:52 2013 Eric Hodel <drbrain@segment7.net>
+
+ * ext/openssl/ossl.c (class OpenSSL): Use only inner parenthesis in
+ create_extension examples.
+
+Tue Feb 19 10:27:12 2013 Eric Hodel <drbrain@segment7.net>
+
+ * ext/openssl/ossl.c (class OpenSSL): Fixed ExtensionFactory example.
+ Patch by Richard Bradley. [ruby-trunk - Bug #7551]
+
+Tue Feb 19 08:32:11 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm_eval.c (vm_call0_body): check interrupts after method dispatch
+ from C methods. [Bug #7878]
+
+Tue Feb 19 08:14:40 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/installer.rb: Fixed placement of executables with
+ --user-install. [ruby-trunk - Bug #7779]
+ * test/rubygems/test_gem_installer.rb: Test for above.
+
+Tue Feb 19 06:04:06 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_dump: FreeBSD ports' libexecinfo's backtrace(3) can't trace
+ beyond signal trampoline, and as described in r38342 it can't
+ trace on -O because it see stack frame pointers.
+ libunwind unw_backtrace see dwarf information in the binary
+ and it works with -O (without frame pointers).
+
+ * configure.in: remove r38342's hack and check libunwind.
+
+Tue Feb 19 04:26:29 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: check whether backtrace(3) works well or not.
+
+ * vm_dump.c: set HAVE_BACKTRACE 0 if BROKEN_BACKTRACE.
+
+Mon Feb 18 16:30:18 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/ipaddr.rb (IPAddr#in6_addr): Fix a typo with the closing
+ parenthesis.
+
+Mon Feb 18 12:32:24 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/ipaddr.rb (IPAddr#in6_addr): Fix the parser so that it can
+ recognize IPv6 addresses with only one edge 16-bit piece
+ compressed, like [::2:3:4:5:6:7:8] or [1:2:3:4:5:6:7::].
+ [Bug #7477]
+
+Mon Feb 18 10:09:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (unexpand_shvar): regularize a shell variable by
+ unexpanding shell variables in it.
+
+Sun Feb 17 20:55:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compar.c (rb_invcmp): compare by inversed comparison, with preventing
+ from infinite recursion. [ruby-core:52305] [Bug #7870]
+
+ * string.c (rb_str_cmp_m), time.c (time_cmp): get rid of infinite
+ recursion.
+
+Sun Feb 17 17:23:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb: remove extra topdir in VPATH, which was in
+ win32/Makefile.sub for some reason and moved from there.
+ [ruby-dev:46998] [Bug #7864]
+
+Sun Feb 17 01:19:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * ext/psych/lib/psych/y.rb: Document Kernel#y by Adam Stankiewicz
+ [Github tenderlove/psych#127]
+
+Sun Feb 17 00:52:14 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/mkconfig.rb: remove prefix from rubyarchdir.
+ r39267 expands variables, it changes expansion timing,
+ breaks RbConfig::CONFIG["includedir"] and building
+ extension libraries with installed ruby.
+
+Sat Feb 16 20:51:17 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * vm.c (ENV_IN_HEAP_P): fix off-by-one error.
+
+Sat Feb 16 20:47:16 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * configure.in (LIBRUBY_DLDFLAGS): Fix a bug where --with-opt-dir
+ options given were not reflected to LIBRUBY_DLDFLAGS on many
+ platforms including Linux and other GNU-based systems, NetBSD,
+ AIX and BeOS.
+
+Sat Feb 16 20:43:20 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (rsock_recvmsg): ignore truncated part of
+ socket address returned from recvmsg().
+
+ * ext/socket/init.c (recvfrom_blocking): ignore truncated part of
+ socket address returned from recvfrom().
+ (rsock_s_recvfrom_nonblock): ditto.
+
+Sat Feb 16 20:05:26 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+
+ * test/ruby/test_thread.rb: fixed typo
+ patched by Hiroki Matsue via https://github.com/ruby/ruby/pull/248
+
+Sat Feb 16 16:08:35 2013 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (rb_thread_mark): mark a working Proc of bmethod
+ (a method defined by define_method) even if the method was removed.
+ We could not trace working Proc object which represents the body
+ of bmethod if the method was removed (alias/undef/overridden).
+ Simply, it was mark miss.
+ This patch by Kazuki Tsujimoto. [Bug #7825]
+
+ NOTE: We can brush up this marking because we do not need to mark
+ `me' on each living control frame. We need to mark `me's
+ only if `me' was free'ed. This is future work after Ruby 2.0.0.
+
+ * test/ruby/test_method.rb: add a test.
+
+Sat Feb 16 15:45:56 2013 Koichi Sasada <ko1@atdot.net>
+
+ * proc.c (rb_binding_new_with_cfp): create binding object even if
+ the frame is IFUNC. But return a ruby-level binding to keep
+ compatibility.
+ This patch fix degradation introduced from r39067.
+ [Bug #7774] [ruby-dev:46960]
+
+ * test/ruby/test_settracefunc.rb: add a test.
+
+Sat Feb 16 13:40:13 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (shvar_to_cpp): do not substitute exec_prefix itself
+ with RUBY_EXEC_PREFIX, which cause recursive definition.
+ [ruby-core:52296] [Bug #7860]
+
+Sat Feb 16 13:13:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/console/io-console.gemspec: bump to 0.4.2. now explicitly
+ requires ruby 1.9.3 or later. [Bug #7847]
+
+ * ext/io/console/console.c (console_dev): compatibility with ruby 1.8.
+
+ * ext/io/console/console.c (rawmode_opt, console_dev): compatibility
+ with ruby 1.9. [ruby-core:52220] [Bug #7847]
+
+Sat Feb 16 12:45:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: unexpand arch sitearch and exec_prefix values, so
+ directly specified bindir, libdir, rubyprefix, etc can be properly
+ substituted. [ruby-core:52296] [Bug #7860]
+
+Sat Feb 16 12:15:20 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * parse.y: add dtrace probe for symbol create.
+
+ * probes.d: ditto
+
+Sat Feb 16 09:27:37 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: don't test sys/feature_tests.h which is not
+ used now.
+ It was included in r7901 as "bug of gcc 3.0 on Solaris 8 ?".
+
+Sat Feb 16 09:24:37 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: reorder header tests to consider inclusion
+ order in rubysocket.h.
+
+Sat Feb 16 08:42:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in, ext/socket/extconf.rb: test netinet/in_systm.h in
+ ext/socket/extconf.rb instead of configure.in.
+
+ Originally, netinet/in_systm.h is included for NextStep, OpenStep,
+ and Rhapsody. [ruby-core:1596]
+
+Sat Feb 16 07:55:40 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: don't test xti.h here.
+
+ * ext/socket/extconf.rb: test xti.h here.
+
+ Originally, xti.h is included for IRIX [ruby-core:14447].
+
+Sat Feb 16 07:16:49 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: test struct sockaddr_un and its member,
+ sun_len.
+
+ * ext/socket/sockport.h (INIT_SOCKADDR_UN): new macro defined.
+
+ * ext/socket/socket.c (sock_s_pack_sockaddr_un): use INIT_SOCKADDR_UN.
+
+ * ext/socket/unixsocket.c (rsock_init_unixsock): ditto.
+
+ * ext/socket/raddrinfo.c (init_unix_addrinfo): ditto.
+ (addrinfo_mload): ditto.
+
+Sat Feb 16 07:05:59 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/sockport.h (INIT_SOCKADDR_IN): don't need family
+ argument. it is always AF_INET.
+
+ * ext/socket/raddrinfo.c (make_inetaddr): follow INIT_SOCKADDR_IN
+ change.
+ (addrinfo_ipv6_to_ipv4): ditto.
+
+Sat Feb 16 04:21:07 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/extconf.rb: workaround for mswin/mingw build problem.
+ sendmsg emulation in win32/win32.c is not enough.
+
+Sat Feb 16 00:19:20 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: use all all tested available headers for
+ have_func.
+
+Fri Feb 15 22:21:37 2013 Akinori MUSHA <knu@iDaemons.org>
+
+ * configure.in: Fix a bug introduced in r38342 that the cflagspat
+ substitution is messed up by the way CFLAGS and optflags are
+ modified, which affected FreeBSD and NetBSD/amd64 when
+ configured to use libexecinfo. This bug resulted in CFLAGS and
+ CXXFLAGS in RbConfig::CONFIG having warnflags expanded in them,
+ forcing third-party C/C++ extensions to follow what warnflags
+ demands, like ANSI/ISO-C90 conformance. ref [Bug #7101]
+
+Fri Feb 15 20:29:11 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/sockport.h (SET_SIN_LEN): defined for strict-aliasing
+ rule.
+ (INIT_SOCKADDR_IN): ditto.
+
+ * ext/socket/raddrinfo.c (make_inetaddr): use INIT_SOCKADDR_IN.
+ (addrinfo_ipv6_to_ipv4): ditto.
+
+Fri Feb 15 18:24:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (MakeMakefile#try_run): bail out explicitly if cross
+ compiling, because it cannot work of course.
+
+Fri Feb 15 12:34:58 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: test struct sockaddr_storage directly.
+
+ * ext/socket/rubysocket.h: use HAVE_TYPE_STRUCT_SOCKADDR_STORAGE.
+
+Fri Feb 15 12:26:13 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/getaddrinfo.c (GET_AI): don't cast 1st argument for
+ INIT_SOCKADDR.
+
+Fri Feb 15 08:12:11 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/sockport.h (SET_SS_LEN): removed.
+ (SET_SIN_LEN): removed.
+ (INIT_SOCKADDR): new macro.
+
+ * ext/socket/ancdata.c (extract_ipv6_pktinfo): use INIT_SOCKADDR.
+
+ * ext/socket/raddrinfo.c (make_inetaddr): use INIT_SOCKADDR.
+ (addrinfo_ipv6_to_ipv4): ditto.
+
+ * ext/socket/getaddrinfo.c (GET_AI): use INIT_SOCKADDR.
+
+Fri Feb 15 07:49:27 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc.rb: Update to release version of 4.0.0
+
+ * lib/rubygems.rb: Update to release version of 2.0.0
+
+Fri Feb 15 07:07:27 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/sockport.h (SA_LEN): removed because unused now.
+ (SS_LEN): ditto.
+ (SIN_LEN): ditto.
+
+Thu Feb 14 10:45:31 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_process.rb (test_setsid): Added a workaround for
+ MacOS X. Patch by nagachika. [Bug #7826] [ruby-core:52126]
+
+Fri Feb 15 00:15:31 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/sockport.h (VALIDATE_SOCKLEN): new macro to validate
+ sa_len member of 4.4BSD socket address.
+
+ * ext/socket/getnameinfo.c (getnameinfo): use VALIDATE_SOCKLEN,
+ instead of SA_LEN.
+
+ * ext/socket/socket.c (sock_s_getnameinfo): use VALIDATE_SOCKLEN
+ instead of SS_LEN.
+
+Thu Feb 14 22:25:54 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sockaddr_len): extracted from sockaddr_obj.
+ (sockaddr_obj): add an argument to length of socket address.
+ (socket_s_ip_address_list): call sockaddr_obj with actual socket
+ address length if given, use sockaddr_len otherwise.
+
+Thu Feb 14 20:11:23 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket: always operate length of socket address companion with
+ socket address.
+
+ * ext/socket/rubysocket.h (rsock_make_ipaddr): add an argument for
+ socket address length.
+ (rsock_ipaddr): ditto.
+
+ * ext/socket/ipsocket.c (ip_addr): pass length to rsock_ipaddr.
+ (ip_peeraddr): ditto.
+ (ip_s_getaddress): pass length to rsock_make_ipaddr.
+
+ * ext/socket/socket.c (make_addrinfo): pass length to rsock_ipaddr.
+ (sock_s_getnameinfo): pass actual address length to rb_getnameinfo.
+ (sock_s_unpack_sockaddr_in): pass length to rsock_make_ipaddr.
+
+ * ext/socket/init.c (rsock_s_recvfrom): pass length to rsock_ipaddr.
+ (rsock_s_recvfrom_nonblock): ditto.
+
+ * ext/socket/tcpsocket.c (tcp_sockaddr): pass length to
+ rsock_make_ipaddr.
+
+ * ext/socket/raddrinfo.c (make_ipaddr0): add an argument for socket
+ address length. pass the length to rb_getnameinfo.
+ (rsock_ipaddr): ditto.
+ (rsock_make_ipaddr): add an argument for socket address length.
+ pass the length to make_ipaddr0.
+ (make_inetaddr): pass length to make_ipaddr0.
+ a local variable renamed.
+ (host_str): a local variable renamed.
+ (port_str): ditto.
+
+Thu Feb 14 14:31:43 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/http.rb: Removed OpenSSL dependency from Net::HTTP.
+
+ * test/net/http/test_http.rb: Remove Zlib dependency from tests.
+ * test/net/http/test_http_request.rb: ditto.
+
+Thu Feb 14 11:08:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (include_modules_at): detect cyclic prepend with original
+ method table. [ruby-core:52205] [Bug #7841]
+
+Thu Feb 14 10:30:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c: call method_removed hook on called class, not on
+ prepending iclass. [ruby-core:52207] [Bug #7843]
+
+Thu Feb 14 10:05:57 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/http: Do not handle Content-Encoding when the user sets
+ Accept-Encoding. This allows users to handle Content-Encoding for
+ themselves. This restores backwards-compatibility with Ruby 1.x.
+ [ruby-trunk - Bug #7831]
+ * lib/net/http/generic_request.rb: ditto.
+ * lib/net/http/response.rb: ditto
+ * test/net/http/test_http.rb: Test for the above.
+ * test/net/http/test_http_request.rb: ditto.
+ * test/net/http/test_httpresponse.rb: ditto.
+
+Thu Feb 14 08:18:47 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: don't define HAVE_SA_LEN and HAVE_SA_LEN.
+ use HAVE_STRUCT_SOCKADDR_SA_LEN and HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
+ instead.
+
+Wed Feb 13 20:59:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: don't define socklen_t here, just test.
+
+ * ext/socket/rubysocket.h: define socklen_t if not available.
+
+Wed Feb 13 18:37:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (mnew): skip prepending modules and return the method bound
+ on the given class. [ruby-core:52160] [Bug #7836]
+
+Wed Feb 13 18:11:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (method_original_name): new methods Method#original_name and
+ UnboundMethod#original_name. [ruby-core:52048] [Bug #7806]
+ [EXPERIMENTAL]
+
+ * proc.c (method_inspect): show the given name primarily, and
+ original_id if aliased. [ruby-core:52048] [Bug #7806]
+
+Wed Feb 13 17:56:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (warnflags): disable -Werror by default unless
+ development. [ruby-core:52131] [Bug #7830]
+
+Wed Feb 13 06:05:52 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems.rb: Return BINARY strings from Gem.gzip and Gem.gunzip.
+ Fixes intermittent test failures. RubyGems issue #450 by Jeremey
+ Kemper.
+ * test/rubygems/test_gem.rb: Test for the above.
+
+Wed Feb 13 05:49:21 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: test functions just after struct members.
+
+Tue Feb 12 12:02:35 2013 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json: merge JSON 1.7.7.
+ This includes security fix. [CVE-2013-0269]
+ https://github.com/flori/json/commit/d0a62f3ced7560daba2ad546d83f0479a5ae2cf2
+ https://groups.google.com/d/topic/rubyonrails-security/4_YvCpLzL58/discussion
+
+Mon Feb 11 23:08:48 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: enable rb_cv_page_size_log test for MirOS BSD.
+
+Mon Feb 11 20:06:38 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: use -pthread on mirbsd*.
+
+Mon Feb 11 16:07:09 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: add SOLIBS and LIBRUBY_SO definition for mirbsd*.
+
+Mon Feb 11 13:17:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rubysitearchprefix): sitearchdir and vendorarchdir
+ should use sitearch, not arch. [ruby-dev:46964] [Bug #7823]
+
+ * win32/Makefile.sub (config.status): site and vendor directories
+ should use sitearch, not arch. [ruby-dev:46964] [Bug #7823]
+
+Mon Feb 11 12:31:25 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: move OS specific header/function knowledge before
+ automatic header tests.
+
+Mon Feb 11 11:04:29 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: move the test for -march=i486 just after
+ RUBY_UNIVERSAL_ARCH/RUBY_DEFAULT_ARCH.
+
+Sun Feb 10 23:42:26 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: test structure members just after types test.
+
+Sun Feb 10 20:58:17 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: test types just after headers test.
+
+Sun Feb 10 16:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/rake/doc/MIT-LICENSE: Add license file from upstream
+ * lib/rake/doc/README.rdoc: Link to license file from Rake README
+ * lib/rake/version.rb: Include README rdoc for Rake module overview
+
+Sun Feb 10 15:26:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/rake/doc/*: Sync Rake rdoc files from upstream
+
+Sun Feb 10 15:50:02 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * vm_exec.h (DISPATCH_ARCH_DEPEND_WAY): use __asm__ __volatile__
+ instead of asm volatile.
+
+Sun Feb 10 15:50:02 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * gc.h (SET_MACHINE_STACK_END): use __volatile__ instead of volatile.
+
+Sun Feb 10 14:25:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * doc/rake/, lib/rake/doc/: Move Rake rdoc files to lib/rake
+
+Sun Feb 10 12:10:25 2013 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: test headers at first.
+
+Sun Feb 10 12:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * doc/rake/*: Removed stale Rake static files
+
+Sun Feb 10 09:10:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * lib/pp.rb, lib/prettyprint.rb: Documentation for PP and PrettyPrint
+ Based on a patch by Vincent Batts [ruby-core:51253] [Bug #7656]
+
+Sat Feb 9 21:11:21 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: move header files check to the beginning of
+ "header and library section".
+ test rlim_t with sys/types.h and sys/time.h for MirOS BSD.
+ sys/types.h and sys/time.h is guarded by #ifdef and the above
+ move is required for this change.
+
+Sat Feb 9 17:45:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, version.c: prevent duplicated load paths by empty
+ version string, it does not work right now.
+
+Sat Feb 9 17:38:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: fix arch parameters in help message. [Bug #7804]
+
+Sat Feb 9 13:13:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * vm_trace.c: Note about TracePoint events set, and comment on
+ Kernel#set_trace_func to prefer new TracePoint API
+
+Sat Feb 9 10:07:47 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+
+ * BSDL: update copyright notice for 2013.
+
+Sat Feb 9 09:24:38 2013 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/package/old.rb: Fix behavior only on ruby 1.8.
+
+ * lib/rubygems/package.rb: Include checksums.yaml.gz signatures for
+ verification.
+ * test/rubygems/test_gem_package.rb: Test for the above.
+
+Sat Feb 9 01:23:24 2013 Tanaka Akira <akr@fsij.org>
+
+ * test/fiddle/helper.rb: specify libc and libm locations for MirOS BSD.
+
+ * test/dl/test_base.rb: ditto.
+
+Fri Feb 8 23:25:33 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: change CFLAGS temporally to test
+ ARCH_FLAG="-march=i486".
+
+Fri Feb 8 21:19:41 2013 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: don't define ARCH_FLAG="-march=i486" if it causes
+ compilation problem.
+
+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))))
+ (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
new file mode 100644
index 0000000000..d159169d10
--- /dev/null
+++ b/GPL
@@ -0,0 +1,339 @@
+ 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
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+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
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, 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 or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+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
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+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 give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ 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
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) 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; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, 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 executable. However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 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
+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.
+
+ 5. 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 Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+ 7. 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 Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+ 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
+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.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the 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 Program
+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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+ 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
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. 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 PROGRAM 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 PROGRAM (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 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
+
+ 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
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. 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 program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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 of the License, 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.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+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
+Public License instead of this License.
diff --git a/KNOWNBUGS.rb b/KNOWNBUGS.rb
new file mode 100644
index 0000000000..b97a08d928
--- /dev/null
+++ b/KNOWNBUGS.rb
@@ -0,0 +1,5 @@
+#
+# This test file concludes tests which point out known bugs.
+# So all tests will cause failure.
+#
+
diff --git a/LEGAL b/LEGAL
new file mode 100644
index 0000000000..65706459cd
--- /dev/null
+++ b/LEGAL
@@ -0,0 +1,533 @@
+LEGAL NOTICE INFORMATION
+------------------------
+
+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.
+
+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.
+
+configure:
+
+ This file is free software.
+
+ Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+
+ 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:
+
+ As long as you distribute these files with the file configure, they
+ are covered under the Ruby's license.
+
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
+ Free Software Foundation, Inc.
+
+ This file 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 of the License, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception to the GNU General Public License, if you
+ distribute this file as part of a program that contains a
+ 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,
+ alternatively)
+
+ Copyright (c) 1993, Intergraph Corporation
+
+ 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.
+
+ A C-program for MT19937, with initialization improved 2002/2/10.
+ Coded by Takuji Nishimura and Makoto Matsumoto.
+ 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)
+ or init_by_array(init_key, key_length).
+
+ Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
+ 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 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
+ "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 COPYRIGHT OWNER 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.
+
+
+ Any feedback is very welcome.
+ http://www.math.keio.ac.jp/matumoto/emt.html
+ email: matumoto@math.keio.ac.jp
+
+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]:
+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/strchr.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:
+
+ This file is under the old-style BSD license. Note that the
+ paragraph 3 below is now null and void.
+
+ Copyright (c) 1989, 1993
+ The Regents of the University of California. All rights reserved.
+
+ This code is derived from software contributed to Berkeley by
+ Tom Truscott.
+
+ 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.
+
+missing/setproctitle.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.
+
+ 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.
+
+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.
+
+ext/digest/md5/md5.[ch]:
+
+ These files are under the following license. Ruby uses modified
+ versions of them.
+
+ Copyright (C) 1999, 2000 Aladdin Enterprises. All rights reserved.
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ L. Peter Deutsch
+ ghost@aladdin.com
+
+ext/digest/rmd160/rmd160.[ch]:
+
+ These files have the following copyright information, and by the
+ author we are allowed to use it under the new-style BSD license.
+
+ AUTHOR: Antoon Bosselaers, ESAT-COSIC
+ (Arranged for libc by Todd C. Miller)
+ DATE: 1 March 1996
+
+ Copyright (c) Katholieke Universiteit Leuven
+ 1996, All Rights Reserved
+
+ext/digest/sha2/sha2.[ch]:
+
+ These files are under the new-style BSD license.
+
+ Copyright 2000 Aaron D. Gifford. 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. Neither the name of the copyright holder nor the names of contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``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(S) OR CONTRIBUTOR(S) 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.
+
+ext/nkf/nkf-utf8/config.h:
+ext/nkf/nkf-utf8/nkf.c:
+ext/nkf/nkf-utf8/utf8tbl.c:
+
+ These files are under the following license. So to speak, it is
+ copyrighted semi-public-domain software.
+
+ Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA)
+ 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.
+ Binary distribution requires original version messages.
+ You don't have to ask before copying, redistribution or publishing.
+ THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE.
+
+ext/socket/addrinfo.h:
+ext/socket/getaddrinfo.c:
+ext/socket/getnameinfo.c:
+
+ These files are under the new-style BSD license.
+
+ Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
+ 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. Neither the name of the project 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 PROJECT 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 PROJECT 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.
+
+ext/win32ole/win32ole.c:
+
+ You can apply the Artistic License to this file. (or GPL,
+ alternatively)
+
+ (c) 1995 Microsoft Corporation. All rights reserved.
+ Developed by ActiveWare Internet Corp., http://www.ActiveWare.com
+
+ 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/MANIFEST b/MANIFEST
deleted file mode 100644
index 3b0ba3e0d0..0000000000
--- a/MANIFEST
+++ /dev/null
@@ -1,156 +0,0 @@
-ChangeLog
-MANIFEST
-Makefile.in
-README
-README.jp
-README.EXT
-ToDo
-array.c
-bignum.c
-class.c
-compar.c
-configure
-configure.bat
-configure.in
-config.dj
-config.guess
-config.sub
-defines.h
-dir.c
-dln.c
-dln.h
-dmyext.c
-enum.c
-env.h
-error.c
-eval.c
-file.c
-fnmatch.c
-fnmatch.h
-gc.c
-glob.c
-hash.c
-inits.c
-install-sh
-io.c
-io.h
-main.c
-math.c
-node.h
-numeric.c
-object.c
-pack.c
-parse.y
-process.c
-random.c
-range.c
-re.c
-re.h
-regex.c
-regex.h
-ruby.c
-ruby.h
-sig.h
-signal.c
-sprintf.c
-st.c
-st.h
-string.c
-struct.c
-time.c
-top.sed
-util.h
-util.c
-variable.c
-version.c
-version.h
-ext/Setup
-ext/Setup.dj
-ext/extmk.rb.in
-lib/base64.rb
-lib/cgi-lib.rb
-lib/complex.rb
-lib/find.rb
-lib/getopts.rb
-lib/jcode.rb
-lib/mailread.rb
-lib/mathn.rb
-lib/observer.rb
-lib/parsearg.rb
-lib/parsedate.rb
-lib/rational.rb
-lib/safe.rb
-lib/thread.rb
-lib/tk.rb
-lib/tkcore.rb
-lib/tkcanvas.rb
-lib/tkclass.rb
-lib/tkentry.rb
-lib/tkscrollbox.rb
-lib/tktext.rb
-lib/tkthcore.rb
-missing/alloca.c
-missing/crypt.c
-missing/dup2.c
-missing/flock.c
-missing/memmove.c
-missing/mkdir.c
-missing/nt.c
-missing/nt.h
-missing/setenv.c
-missing/strdup.c
-missing/strerror.c
-missing/strftime.c
-missing/strstr.c
-missing/strtol.c
-missing/strtoul.c
-sample/biorhythm.rb
-sample/cbreak.rb
-sample/clnt.rb
-sample/dbm.rb
-sample/dir.rb
-sample/eval.rb
-sample/export.rb
-sample/exyacc.rb
-sample/fact.rb
-sample/fib.awk
-sample/fib.pl
-sample/fib.rb
-sample/fib.scm
-sample/freq.rb
-sample/from.rb
-sample/fullpath.rb
-sample/getopts.test
-sample/io.rb
-sample/less.rb
-sample/list.rb
-sample/list2.rb
-sample/list3.rb
-sample/marshal.rb
-sample/mkproto.rb
-sample/mpart.rb
-sample/observ.rb
-sample/occur.pl
-sample/occur.rb
-sample/occur2.rb
-sample/philos.rb
-sample/pi.rb
-sample/rcs.awk
-sample/rcs.dat
-sample/rcs.rb
-sample/regx.rb
-sample/ruby-mode.el
-sample/sieve.rb
-sample/svr.rb
-sample/test.rb
-sample/time.rb
-sample/tkbiff.rb
-sample/tkbrowse.rb
-sample/tkdialog.rb
-sample/tkfrom.rb
-sample/tkhello.rb
-sample/tkline.rb
-sample/tktimer.rb
-sample/trojan.rb
-sample/tsvr.rb
-sample/uumerge.rb
diff --git a/Makefile.in b/Makefile.in
index aa018968ff..d3313bea2e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,199 +1,480 @@
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@
#### Start of system configuration section. ####
srcdir = @srcdir@
-VPATH = @srcdir@
+top_srcdir = $(srcdir)
+hdrdir = $(srcdir)/include
+PLATFORM_DIR = @PLATFORM_DIR@
CC = @CC@
-YACC = @YACC@
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-PURIFY=
+CPP = @CPP@
+LD = @LD@
+YACC = bison
+PURIFY =
+AUTOCONF = autoconf
@SET_MAKE@
-
-CFLAGS = @CFLAGS@ -I.
-STATIC = @STATIC@
-LDFLAGS = $(CFLAGS) @LDFLAGS@
-LIBS = -lm @LIBS@ $(EXTLIBS)
-MISSING = @LIBOBJS@ @ALLOCA@
+MKFILES = @MAKEFILES@
+BASERUBY = @BASERUBY@
+TEST_RUNNABLE = @TEST_RUNNABLE@
+CROSS_COMPILING = @CROSS_COMPILING@
+DOXYGEN = @DOXYGEN@
prefix = @prefix@
-binprefix =
exec_prefix = @exec_prefix@
-bindir = $(exec_prefix)/bin
-libdir = @prefix@/lib/ruby
+bindir = @bindir@
+sbindir = @sbindir@
+libdir = @libdir@
+libexecdir = @libexecdir@
+datarootdir = @datarootdir@
+datadir = @datadir@
+arch = @arch@
+sitearch = @sitearch@
+sitedir = @sitedir@
+archlibdir = @archlibdir@
+ruby_version = @ruby_version@
+
+TESTUI = console
+TESTS =
+INSTALLDOC = @INSTALLDOC@
+DOCTARGETS = @RDOCTARGET@ @CAPITARGET@
+
+EXTOUT = @EXTOUT@
+arch_hdrdir = $(EXTOUT)/include/$(arch)
+VPATH = $(arch_hdrdir)/ruby:$(hdrdir)/ruby:$(srcdir):$(srcdir)/enc:$(srcdir)/missing
+
+empty =
+CC_VERSION = @CC_VERSION@
+OUTFLAG = @OUTFLAG@$(empty)
+COUTFLAG = @COUTFLAG@$(empty)
+ARCH_FLAG = @ARCH_FLAG@
+CFLAGS = @CFLAGS@ $(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)
+LDFLAGS = @STATIC@ $(CFLAGS) @LDFLAGS@
+EXTLDFLAGS = @EXTLDFLAGS@
+XLDFLAGS = @XLDFLAGS@ $(EXTLDFLAGS)
+EXTLIBS =
+LIBS = @LIBS@ $(EXTLIBS)
+MISSING = @LIBOBJS@ @ALLOCA@
+LDSHARED = @LIBRUBY_LDSHARED@
+DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(XLDFLAGS) $(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@
+RUBY_INSTALL_NAME=@RUBY_INSTALL_NAME@
+RUBY_SO_NAME=@RUBY_SO_NAME@
+RUBY_RELEASE_DATE=@RUBY_RELEASE_DATE@
+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@
+
+DEFAULT_PRELUDES = $(GEM_PRELUDE)
#### End of system configuration section. ####
-EXTOBJS = dmyext.o
-
-OBJS = array.o \
- bignum.o \
- class.o \
- compar.o \
- dir.o \
- dln.o \
- enum.o \
- error.o \
- eval.o \
- file.o \
- fnmatch.o \
- gc.o \
- glob.o \
- hash.o \
- inits.o \
- io.o \
- main.o \
- math.o \
- numeric.o \
- object.o \
- pack.o \
- parse.o \
- process.o \
- random.o \
- range.o \
- re.o \
- regex.o \
- ruby.o \
- signal.o \
- sprintf.o \
- st.o \
- string.o \
- struct.o \
- time.o \
- util.o \
- variable.o \
- version.o \
- $(MISSING) \
- $(EXTOBJS)
-
-PROGRAM = miniruby
-
-all: extruby
-
-extruby: miniruby ext/Setup
- @if test -z "$$UNDER_EXTMAKE_RB"; \
- then echo "Compiling ext modules"; \
- UNDER_EXTMAKE_RB=yes; export UNDER_EXTMAKE_RB; \
- cd ext; ../miniruby ./extmk.rb @EXTSTATIC@; fi
-
-$(PROGRAM): $(OBJS)
- @rm -f $(PROGRAM)
- $(PURIFY) $(CC) $(STATIC) $(LDFLAGS) $(OBJS) $(LIBS) -o $(PROGRAM)
-
-install:; $(INSTALL_PROGRAM) ruby $(bindir)/ruby
- @-@STRIP@ $(bindir)/ruby
- @test -d $(libdir) || mkdir $(libdir)
- cd ext; ../miniruby ./extmk.rb install
- @for rb in `grep '^lib/' MANIFEST`; do \
- $(INSTALL_DATA) $$rb $(libdir); \
- done
-
-clean:; @rm -f $(OBJS)
- @rm -f ext/extinit.c ext/extinit.o
- cd ext; ../miniruby ./extmk.rb clean
-
-realclean: clean
- @rm -f Makefile ext/extmk.rb
- @rm -f config.cache config.h config.log config.status
- @rm -f core ruby miniruby *~
-
-test:; @-./ruby sample/test.rb > ./ruby_test 2>&1; \
- if grep '^end of test' ./ruby_test > /dev/null; then \
- echo "test succeeded"; \
- else \
- grep '^sample/test.rb' ./ruby_test; \
- grep '^not' ./ruby_test; \
- echo "test failed";\
- fi;\
- rm -f ./ruby_test
-
-.c.o:
- $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
-
-alloca.o: missing/alloca.c
- $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c missing/alloca.c
-
-crypt.o: missing/crypt.c
- $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c missing/crypt.c
-
-dup2.o: missing/dup2.c
- $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c missing/dup2.c
-
-flock.o: missing/flock.c
- $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c missing/flock.c
-
-memmove.o: missing/memmove.c
- $(CC) $(CFLAGS) $(CPPFLAGS) -c missing/memmove.c
-
-mkdir.o: missing/mkdir.c
- $(CC) $(CFLAGS) $(CPPFLAGS) -c missing/mkdir.c
-
-setenv.o: missing/setenv.c
- $(CC) $(CFLAGS) $(CPPFLAGS) -c missing/setenv.c
-
-strerror.o: missing/strerror.c
- $(CC) $(CFLAGS) $(CPPFLAGS) -c missing/strerror.c
-
-strdup.o: missing/strdup.c
- $(CC) $(CFLAGS) $(CPPFLAGS) -c missing/strdup.c
-
-strftime.o: missing/strftime.c
- $(CC) -I. $(CFLAGS) $(CPPFLAGS) -c missing/strftime.c
-
-strstr.o: missing/strstr.c
- $(CC) $(CFLAGS) $(CPPFLAGS) -c missing/strstr.c
-
-strtol.o: missing/strtol.c
- $(CC) $(CFLAGS) $(CPPFLAGS) -c missing/strtol.c
-
-strtoul.o: missing/strtoul.c
- $(CC) $(CFLAGS) $(CPPFLAGS) -c missing/strtoul.c
-
-nt.o: missing/nt.c
- $(CC) $(CFLAGS) $(CPPFLAGS) -c missing/nt.c
+MAJOR= @MAJOR@
+MINOR= @MINOR@
+TEENY= @TEENY@
+
+LIBRUBY_A = @LIBRUBY_A@
+LIBRUBY_SO = @LIBRUBY_SO@
+LIBRUBY_ALIASES= @LIBRUBY_ALIASES@
+LIBRUBY = @LIBRUBY@
+LIBRUBYARG = @LIBRUBYARG@
+LIBRUBYARG_STATIC = @LIBRUBYARG_STATIC@
+LIBRUBYARG_SHARED = @LIBRUBYARG_SHARED@
+LIBRUBY_RELATIVE = @LIBRUBY_RELATIVE@
+LIBRUBY_A_OBJS = @LIBRUBY_A_OBJS@
+
+THREAD_MODEL = @THREAD_MODEL@
+
+PREP = @PREP@
+ARCHFILE = @ARCHFILE@
+SETUP =
+EXTSTATIC = @EXTSTATIC@
+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_GLOMMED_OBJ = @DTRACE_GLOMMED_OBJ@
+
+OBJEXT = @OBJEXT@
+ASMEXT = S
+DLEXT = @DLEXT@
+MANTYPE = @MANTYPE@
+SYMBOL_PREFIX = @SYMBOL_PREFIX@
+
+INSTALLED_LIST= .installed.list
+
+MKMAIN_CMD = mkmain.sh
+
+NEWLINE_C = newline.c
+MINIPRELUDE_C = miniprelude.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
+
+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:
-###
-parse.o : parse.y ruby.h defines.h config.h env.h node.h st.h regex.h
-###
-array.o: array.c ruby.h config.h defines.h
-bignum.o: bignum.c ruby.h config.h defines.h
-class.o: class.c ruby.h config.h defines.h node.h st.h
-compar.o: compar.c ruby.h config.h defines.h
-dir.o: dir.c ruby.h config.h defines.h
-dln.o: dln.c config.h defines.h dln.h st.h
-dmyext.o: dmyext.c
-enum.o: enum.c ruby.h config.h defines.h
-error.o: error.c ruby.h config.h defines.h env.h
-eval.o: eval.c ruby.h config.h defines.h env.h node.h sig.h st.h dln.h
-file.o: file.c ruby.h config.h defines.h io.h sig.h
-fnmatch.o: fnmatch.c config.h fnmatch.h
-gc.o: gc.c ruby.h config.h defines.h env.h sig.h st.h node.h re.h regex.h
-glob.o: glob.c config.h fnmatch.h
-hash.o: hash.c ruby.h config.h defines.h st.h
-inits.o: inits.c ruby.h config.h defines.h
-io.o: io.c ruby.h config.h defines.h io.h sig.h
-main.o: main.c
-math.o: math.c ruby.h config.h defines.h
-numeric.o: numeric.c ruby.h config.h defines.h
-object.o: object.c ruby.h config.h defines.h st.h
-pack.o: pack.c ruby.h config.h defines.h
-process.o: process.c ruby.h config.h defines.h sig.h st.h
-random.o: random.c ruby.h config.h defines.h
-range.o: range.c ruby.h config.h defines.h
-re.o: re.c ruby.h config.h defines.h re.h regex.h
-regex.o: regex.c config.h defines.h regex.h util.h
-ruby.o: ruby.c ruby.h config.h defines.h re.h regex.h dln.h
-signal.o: signal.c ruby.h config.h defines.h sig.h
-sprintf.o: sprintf.c ruby.h config.h defines.h
-st.o: st.c config.h st.h
-string.o: string.c ruby.h config.h defines.h re.h regex.h
-struct.o: struct.c ruby.h config.h defines.h
-time.o: time.c ruby.h config.h defines.h
-util.o: util.c defines.h config.h util.h
-variable.o: variable.c ruby.h config.h defines.h env.h st.h
-version.o: version.c ruby.h config.h defines.h version.h
+
+miniruby$(EXEEXT):
+ @-if test -f $@; then $(MV) -f $@ $@.old; $(RM) $@.old; fi
+ $(ECHO) linking $@
+ $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(DMYEXT) $(DTRACE_OBJ) $(MAINLIBS) $(LIBS) $(OUTFLAG)$@
+
+$(PROGRAM):
+ @$(RM) $@
+ $(ECHO) linking $@
+ $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@
+ $(Q) $(POSTLINK)
+
+# 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) $(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) $(DTRACE_OBJ) $(SOLIBS) $(EXTSOLIBS) $(OUTFLAG)$@
+ -$(Q) $(OBJCOPY) -w -L '$(SYMBOL_PREFIX)Init_*' -L '$(SYMBOL_PREFIX)*_threadptr_*' $@
+ $(Q) $(POSTLINK)
+ @-$(MINIRUBY) -e 'ARGV.each{|link| File.delete link rescue nil; \
+ File.symlink "$(LIBRUBY_SO)", link}' \
+ $(LIBRUBY_ALIASES) || true
+$(arch)-fake.rb: config.status $(srcdir)/template/fake.rb.in
+ @./config.status --file=$@:$(srcdir)/template/fake.rb.in
+ @chmod +x $@
+
+ruby_pc = @ruby_pc@
+$(ruby_pc):
+ @./config.status --file=$@:$(srcdir)/template/ruby.pc.in
+
+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
+ @[ -f $@ ] && mv $@ $@.old
+ MAKE=$(MAKE) $(SHELL) ./config.status $@
+ @cmp $@ $@.old > /dev/null 2>&1 && echo $@ unchanged && exit 0; \
+ { \
+ 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 = exec 3>&1; exit `exec 4>&1; { "$$@" 3>&- 4>&-; echo $$? 1>&4; } | fgrep -v '(cached)' 1>&3`
+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
+ $(CHDIR) $(srcdir) && exec $(AUTOCONF)
+
+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 -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ $? > $@.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
+
+.c.@OBJEXT@:
+ @$(ECHO) compiling $<
+ $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -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/PROBES_H/g' -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.@OBJEXT@: $(srcdir)/probes.d
+ @$(ECHO) processing probes in object files
+ $(Q) stamp="$*.stamp"; \
+ if test -f "$$stamp" -o -f "$@"; then \
+ $(RM) $(DTRACE_DEPENDENT_OBJS) "$$stamp"; \
+ for o in $(DTRACE_DEPENDENT_OBJS); do \
+ echo "rebuilding $$o which was modified by \"dtrace -G\""; \
+ $(MAKE) "$$o"; \
+ done; \
+ fi; \
+ touch "$$stamp"
+ $(RM) $@
+ $(Q) $(DTRACE) -G -C $(INCFLAGS) -s $(srcdir)/probes.d -o $@ $(DTRACE_DEPENDENT_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) $(DTRACE_OBJ)
+
+clean-local::
+ $(Q)$(RM) ext/extinit.c ext/extinit.$(OBJEXT) ext/ripper/y.output \
+ enc/encinit.c enc/encinit.$(OBJEXT)
+ -$(Q)$(RM) $(pkgconfig_DATA)
+
+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 | sed 's:~$$::'; \
+ `; 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:
+ -$(Q)$(RMDIRS) $(EXTOUT) 2> /dev/null || true
+
+clean-enc distclean-enc realclean-enc:
+ @test -f "$(ENC_MK)" || exit 0; \
+ echo $(@:-enc=ing) encodings; \
+ exec $(MAKE) -f $(ENC_MK) $(MFLAGS) $(@:-enc=)
+
+clean-rdoc distclean-rdoc realclean-rdoc:
+ @echo $(@:-rdoc=ing) rdoc
+ $(Q)$(RMALL) $(RDOCOUT)
+clean-capi distclean-capi realclean-capi:
+ @echo $(@:-capi=ing) capi
+ $(Q)$(RMALL) $(CAPIOUT)
+
+clean-platform:
+ @$(RM) $(PLATFORM_D)
+ -$(Q) $(RMDIR) $(PLATFORM_DIR) 2> /dev/null || true
+
+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)
+
+up::
+ -$(Q)$(MAKE) $(MFLAGS) after-update
+
+after-update:: update-config_files
+
+update-mspec:
+ @$(CHDIR) $(srcdir); \
+ if [ -d spec/mspec ]; then \
+ cd spec/mspec; \
+ echo updating mspec ...; \
+ exec git pull; \
+ else \
+ echo retrieving mspec ...; \
+ exec git clone $(MSPEC_GIT_URL) spec/mspec; \
+ fi
+
+update-rubyspec: update-mspec
+ @$(CHDIR) $(srcdir); \
+ if [ -d spec/rubyspec ]; then \
+ cd spec/rubyspec; \
+ echo updating rubyspec ...; \
+ exec git pull; \
+ else \
+ echo retrieving rubyspec ...; \
+ 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
+
+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) $@
+
+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'
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000000..afd15faf3b
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,380 @@
+# -*- rdoc -*-
+
+= NEWS for Ruby 2.1.0
+
+This document is a list of user visible feature changes made between
+releases except for 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.
+
+== Changes since the 2.0.0 release
+
+=== Language changes
+
+* Now the default values of keyword arguments can be omitted. Those
+ "required keyword arguments" need giving explicitly at the call time.
+
+* Added suffixes for integer and float literals: 'r', 'i', and 'ri'.
+ * "42r" and "3.14r" are evaluated as Rational(42, 1) and 3.14.rationalize,
+ respectively. But exponential form with 'r' suffix like "6.022e+23r" is
+ not accepted because it is misleading.
+ * "42i" and "3.14i" are evaluated as Complex(0, 42) and Complex(0, 3.14),
+ respectively.
+ * "42ri" and "3.14ri" are evaluated as Complex(0, 42r) and Complex(0, 3.14r),
+ respectively.
+
+* def-expr now returns the symbol of its name instead of nil.
+
+=== Core classes updates (outstanding ones only)
+
+* Array
+ * New methods
+ * Array#to_h converts an array of key-value pairs into a Hash.
+
+* Binding
+ * New methods
+ * Binding#local_variable_get(symbol)
+ * Binding#local_variable_set(symbol, obj)
+ * Binding#local_variable_defined?(symbol)
+
+* Enumerable
+ * New methods
+ * Enumerable#to_h converts a list of key-value pairs into a Hash.
+
+* Exception
+ * New methods
+ * Exception#cause provides the previous exception which has been caught
+ at where raising the new exception.
+
+* GC
+ * improvements:
+ * introduced the generational GC a.k.a RGenGC.
+ * added environment variables:
+ * RUBY_GC_HEAP_INIT_SLOTS
+ * RUBY_GC_HEAP_FREE_SLOTS
+ * RUBY_GC_HEAP_GROWTH_FACTOR
+ * RUBY_GC_HEAP_GROWTH_MAX_SLOTS
+ * RUBY_GC_MALLOC_LIMIT_MAX
+ * RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR
+ * RUBY_GC_OLDMALLOC_LIMIT
+ * RUBY_GC_OLDMALLOC_LIMIT_MAX
+ * RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR
+ * obsoleted environment variables:
+ * RUBY_FREE_MIN (Use RUBY_GC_HEAP_FREE_SLOTS instead)
+ * RUBY_HEAP_MIN_SLOTS (Use RUBY_GC_HEAP_INIT_SLOTS instead)
+
+* Integer
+ * New methods
+ * Fixnum#bit_length
+ * Bignum#bit_length
+ * Bignum performance improvement
+ * Use GMP if available.
+ GMP is used only for several operations:
+ multiplication, division, radix conversion, GCD
+
+* IO
+ * extended methods:
+ * IO#seek supports SEEK_DATA and SEEK_HOLE as whence.
+ * IO#seek accepts symbols (:CUR, :END, :SET, :DATA, :HOLE) for 2nd argument.
+ * IO#read_nonblock accepts optional `exception: false` to return symbols
+ * IO#write_nonblock accepts optional `exception: false` to return symbols
+
+* Kernel
+ * New methods:
+ * Kernel#singleton_method
+
+* Module
+ * New methods:
+ * Module#using, which activates refinements of the specified module only
+ in the current class or module definition.
+ * Module#singleton_class? returns true if the receiver is a singleton class
+ or false if it is an ordinary class or module.
+ * extended methods:
+ * Module#refine is no longer experimental.
+ * Module#include and Module#prepend are now public methods.
+
+* Mutex
+ * misc
+ * Mutex#owned? is no longer experimental.
+
+* Numeric
+ * extended methods:
+ * Numeric#step allows the limit argument to be omitted, in which
+ case an infinite sequence of numbers is generated. Keyword
+ arguments `to` and `by` are introduced for ease of use.
+
+* Process
+ * New methods:
+ * alternative methods to $0/$0=:
+ * Process.argv0() returns the original value of $0.
+ * Process.setproctitle() sets the process title without affecting $0.
+ * Process.clock_gettime
+ * Process.clock_getres
+
+* String
+ * "literal".freeze is now optimized to return the same object
+ * New methods:
+ * String#scrub and String#scrub! verify and fix invalid byte sequence.
+ If you want to use this function with older Ruby,
+ consider to use string-scrub.gem.
+
+* Symbol
+ * All symbols are now frozen.
+
+* pack/unpack (Array/String)
+ * Q! and q! directives for long long type if platform has the type.
+
+* toplevel
+ * extended methods:
+ * main.using is no longer experimental. The method activates refinements
+ in the ancestors of the argument module to support refinement
+ inheritance by Module#include.
+
+=== Core classes compatibility issues (excluding feature bug fixes)
+
+* Dir
+ * incompatible changes:
+ * Dir#glob returns composed characters (previously Apple Modofied UTF-8).
+
+* Hash
+ * incompatible changes:
+ * Hash#reject will return plain Hash object in the future versions, that
+ is the original object's subclass, instance variables, default value,
+ and taintedness will be no longer copied, so now warnings are emitted
+ when called with such Hash.
+
+* IO
+ * incompatible changes:
+ * open ignore internal encoding if external encoding is ASCII-8BIT.
+
+* Kernel#eval, Kernel#instance_eval, and Module#module_eval.
+ * Copies the scope information of the original environment, which means
+ that private, protected, public, and module_function without arguments
+ do not affect the environment outside the eval string.
+ For example, `class Foo; eval "private"; def foo; end; end' doesn't make
+ Foo#foo private.
+
+* Kernel#untrusted?, untrust, and trust
+ * These methods are deprecated and their behavior is same as tainted?,
+ taint, and untaint, respectively. If $VERBOSE is true, they show warnings.
+
+* Module#ancestors
+ * The ancestors of a singleton class now include singleton classes,
+ in particular itself.
+
+* Module#define_method and Object#define_singleton_method
+ * Now they return the symbols of the defined methods, not the methods/procs
+ themselves.
+
+* Numeric#quo
+ * Raises TypeError instead of ArgumentError if the receiver doesn't have
+ to_r method.
+
+* Proc
+ * Returning from lambda proc now always exits from the Proc, not from the
+ method where the lambda is created. Returning from non-lambda proc exits
+ from the method, same as the former behavior.
+
+String
+ * If invalid: :replace is specified for String#encode, replace
+ invalid byte sequence even if the destination encoding equals to
+ the source encoding.
+
+=== Stdlib updates (outstanding ones only)
+
+* CGI::Util
+ * All class methods modulized.
+
+* Digest
+ * extended methods:
+ * Digest::Class.file takes optional arguments for its constructor
+
+* Matrix
+ * Added Vector#cross_product.
+
+* Net::SMTP
+ * Added Net::SMTP#rset to implement the RSET command
+
+* objspace
+ * new method:
+ * ObjectSpace.trace_object_allocations
+ * ObjectSpace.trace_object_allocations_start
+ * ObjectSpace.trace_object_allocations_stop
+ * ObjectSpace.trace_object_allocations_clear
+ * ObjectSpace.allocation_sourcefile
+ * ObjectSpace.allocation_sourceline
+ * ObjectSpace.allocation_class_path
+ * ObjectSpace.allocation_method_id
+ * ObjectSpace.allocation_generation
+ * ObjectSpace.reachable_objects_from_root
+ * ObjectSpace.dump
+ * ObjectSpace.dump_all
+
+* OpenSSL::BN
+ * extended methods:
+ * OpenSSL::BN.new allows Fixnum/Bignum argument.
+
+* open-uri
+ * Support multiple fields with same field name (like Set-Cookie).
+
+* Pathname
+ * New methods:
+ * Pathname#write
+ * Pathname#binwrite
+
+* rake
+ * Updated to 10.1.0. Major changes include removal of the class namespace,
+ Rake::DSL to hold the rake DSL methods and removal of support for legacy
+ rake features.
+
+ For a complete list of changes since rake 0.9.6 see:
+
+ http://rake.rubyforge.org/doc/release_notes/rake-10_1_0_rdoc.html
+
+ http://rake.rubyforge.org/doc/release_notes/rake-10_0_3_rdoc.html
+
+* RbConfig
+ * New constants:
+ * RbConfig::SIZEOF is added to provide the size of C types.
+
+* RDoc
+ * Updated to 4.1.0. Major enhancements include a modified default template
+ * and accessibility enhancements.
+
+ For a list of minor enhancements and bug fixes see:
+ https://github.com/rdoc/rdoc/blob/v4.1.0.preview.1/History.rdoc
+
+* Resolv
+ * New methods:
+ * Resolv::DNS.fetch_resource
+ * One-shot multicast DNS support
+ * Support LOC resources
+
+* REXML::Parsers::SAX2Parser
+ * Fixes wrong number of arguments of entitydecl event. Document of the event
+ says "an array of the entity declaration" but implementation passes two
+ or more arguments. It is an implementation bug but it breaks backward
+ compatibility.
+
+* REXML::Parsers::StreamParser
+ * Supports "entity" event.
+
+* REXML::Text
+ * REXML::Text#<< supports method chain like 'text << "XXX" << "YYY"'.
+ * REXML::Text#<< supports not "raw" mode.
+
+* Rinda::RingServer, Rinda::RingFinger
+ * Rinda now supports multicast sockets. See Rinda::RingServer and
+ Rinda::RingFinger for details.
+
+* RubyGems
+ * Updated to 2.2.0. Notable new features include:
+
+ * Gemfile or gem.deps.rb support including Gem.file.lock (experimental)
+ * Improved, iterative resolver (compared to RubyGems 2.1 and earlier)
+ * Support for a sharing a GEM_HOME across ruby platforms and versions
+
+ * Updated to 2.2.2. Fixes some minor bugs and performance regressions.
+
+ For a complete list of enhancements and bug fixes see:
+ https://github.com/rubygems/rubygems/tree/master/History.txt
+
+* Set
+ * New methods:
+ * Set#intersect?
+ * Set#disjoint?
+
+* Socket
+ * New methods:
+ * Socket.getifaddrs
+
+* StringScanner
+ * extended methods:
+ * StringScanner#[] supports named captures.
+
+* Syslog::Logger
+ * Added facility.
+
+* Tempfile
+ * New methods:
+ * Tempfile.create
+
+* Timeout
+ * The exception to terminate the given block can no longer be rescued
+ inside the block, by default, unless the exception class is given
+ explicitly.
+
+* TSort
+ * New methods:
+ * TSort.tsort
+ * TSort.tsort_each
+ * TSort.strongly_connected_components
+ * TSort.each_strongly_connected_component
+ * TSort.each_strongly_connected_component_from
+
+* WEBrick
+ * The body of a response may now be a StringIO or other IO-like that responds
+ to #readpartial and #read.
+
+* XMLRPC::Client
+ * New methods:
+ * XMLRPC::Client#http. It returns Net::HTTP for the client. Normally,
+ it is not needed. It is useful when you want to change minor HTTP client
+ options. You can change major HTTP client options by XMLRPC::Client
+ methods. You should use XMLRPC::Client methods for changing major
+ HTTP client options instead of XMLRPC::Client#http.
+
+=== Stdlib compatibility issues (excluding feature bug fixes)
+
+* Set
+ * incompatible changes:
+ * Set#to_set now returns self instead of generating a copy.
+
+* URI
+ * incompatible changes:
+ * URI.decode_www_form follows current WHATWG URL Standard.
+ It gets encoding argument to specify the character encoding.
+ It now allows loose percent encoded strings, but denies ;-separator.
+ * URI.encode_www_form follows current WHATWG URL Standard.
+ It gets encoding argument to convert before percent encode.
+ UTF-16 strings aren't converted to UTF-8 before percent encode by default.
+
+* curses
+ * Removed.
+ curses is now available as a gem.
+ See https://rubygems.org/gems/curses for details.
+
+=== Built-in global variables compatibility issues
+
+* $SAFE
+ * $SAFE=4 is obsolete. If $SAFE is set to 4 or larger, an ArgumentError
+ is raised.
+
+=== C API updates
+
+* rb_gc_set_params() is deprecated. This is only used in Ruby internal.
+
+* rb_gc_count() added. This returns the number of times GC occurred.
+
+* rb_gc_stat() added. This allows access to specific GC.stat() values from C
+ without any allocation overhead.
+
+* rb_gc_latest_gc_info() added. This allows access to GC.latest_gc_info().
+
+* rb_postponed_job_register() added. Takes a function callback which is invoked
+ when the VM is in a consistent state, i.e. to perform work from a C signal
+ handler.
+
+* rb_profile_frames() added. Provides low-cost access to the current ruby stack
+ for callstack profiling.
+
+* rb_tracepoint_new() supports new internal events accessible only from C:
+ * RUBY_INTERNAL_EVENT_NEWOBJ
+ * RUBY_INTERNAL_EVENT_FREEOBJ
+ * RUBY_INTERNAL_EVENT_GC_START
+ * RUBY_INTERNAL_EVENT_GC_END_MARK
+ * RUBY_INTERNAL_EVENT_GC_END_SWEEP
+ * Note that you *can not* specify "internal events" with normal events
+ (such as RUBY_EVENT_CALL, RUBY_EVENT_RETURN) simultaneously.
diff --git a/README b/README
index debf3e4b1c..3ffe3553a8 100644
--- a/README
+++ b/README
@@ -1,117 +1,166 @@
-* What's Ruby
+= 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.
+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)
+== Features of Ruby
-* How to get 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-like/POSIX compatible platforms
+ as well as Windows, Mac OS X, BeOS etc.)
+ cf. http://bugs.ruby-lang.org/projects/ruby-trunk/wiki/SupportedPlatforms
-** by ftp
-The ruby distribution can be found on
+== How to get Ruby
- ftp://ftp.caelum.co.jp/pub/lang/ruby/
+For a complete list of ways to install Ruby, including using third party
+tools like rvm, see:
-** by mail
+http://www.ruby-lang.org/en/downloads/
-Send the mail which subject is 'send' to the address below.
+The Ruby distribution files can be found in the following FTP site:
- ruby-archive@caelum.co.jp
+ftp://ftp.ruby-lang.org/pub/ruby/
-You will receive the uuencoded gzipped tar file of the newest ruby
-distribution.
+The trunk of the Ruby source tree can be checked out with the
+following command:
-* How to compile and install
+ $ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby
-This is what you need to do to compile and install ruby:
+Or if you are using git then use the following command:
- 1. Run ./configure, which will generate config.h and Makefile.
+ $ git clone git://github.com/ruby/ruby.git
- 2. Edit defines.h if you need. Probably this step will not need.
+There are some other branches under development. Try the following
+command and see the list of branches:
- 3. Remove comment mark(#) before the module names from ext/Setup, if
- you want to link modules statically.
+ $ svn ls http://svn.ruby-lang.org/repos/ruby/branches/
- If you want to link all the extension modules, remove comment
- mark from the line "#option nodynamic".
+Or if you are using git then use the following command:
- 4. Run make.
+ $ git ls-remote git://github.com/ruby/ruby.git
- 5. Optionally, run 'make test' to check that the compiled ruby
- interpreter works well. If you see the message "test succeeded",
- your ruby works as it should.
+== Ruby home-page
- 6. Run 'make install'
+The URL of the Ruby home-page is:
-If you fail to compile ruby, please send the detailed error report with
-the error log and machine/OS type, to help others.
+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 <mailto:ruby-talk-ctl@ruby-lang.org>.
+
+
+== How to compile and install
+
+This is what you need to do to compile and install Ruby:
+
+0. If you want to use Microsoft Visual C++ to compile ruby,
+ read win32/README.win32 instead of this document.
-* Copying
+1. If +./configure+ does not exist or is older than configure.in,
+ run autoconf to (re)generate configure.
-Ruby is copyrighted by Yukihiro Matsumoto <matz@caelum.co.jp>.
+2. Run +./configure+, which will generate config.h and Makefile.
-This source is distributed under the conditions blow:
+ Some C compiler flags may be added by default depending on your
+ environment. Specify <tt>optflags=..</tt> and <tt>warnflags=..</tt> as
+ necessary to override them.
- 1. You may make and give away verbatim copies of the source form of
- the software without restriction, provided that you do not modify
- the original distribution file.
+3. Edit +defines.h+ if you need. Usually this step will not be needed.
- If you want to distribute the modified version in any way, contact
- the author.
+4. Remove comment mark(<tt>#</tt>) before the module names from +ext/Setup+
+ (or add module names if not present), if you want to link modules
+ statically.
- 2. You may distribute the software in object code or executable
- form, provided that you distribute it with instructions on where
- to get the software.
+ 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 "<tt>#option nodynamic</tt>" in
+ +ext/Setup+.
- 3. You may modify the software in any way, provided that you do not
- distribute the modified version.
+ Usually this step will not be needed.
+
+5. Run +make+.
+
+6. Optionally, run '<tt>make check</tt>' to check whether the compiled Ruby
+ interpreter works well. If you see the message "<tt>check succeeded</tt>",
+ your ruby works as it should (hopefully).
+
+7. Run '<tt>make install</tt>'
+
+ This command will create following directories and install files
+ onto them.
+
+ * <tt>${DESTDIR}${prefix}/bin</tt>
+ * <tt>${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}</tt>
+ * <tt>${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}</tt>
+ * <tt>${DESTDIR}${prefix}/lib</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/site_ruby</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/vendor_ruby</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/gems/${MAJOR}.${MINOR}.${TEENY}</tt>
+ * <tt>${DESTDIR}${prefix}/share/man/man1</tt>
+ * <tt>${DESTDIR}${prefix}/share/ri/${MAJOR}.${MINOR}.${TEENY}/system</tt>
+
+ If Ruby's API version is '_x.y.z_', the <tt>${MAJOR}</tt> is '_x_', the
+ <tt>${MINOR}</tt> is '_y_', and the <tt>${TEENY}</tt> 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.
- 4. You may modify and include the part of the software into any other
- software (possibly commercial). But some files in the
- distribution are not written by the author, so that they are not
- under this terms. They are gc.c(partly)regex.[ch]fnmatch.[ch]
- glob.c, st.[ch] and somme files under ./missing directory. See
- each files for the condition.
+Some extension libraries may not get compiled because of lack of
+necessary external libraries and/or headers, then you will need to run
+'<tt>make distclean-ext</tt>' to remove old configuration after
+installing them in such case.
- 5. The scripts and library files supplied as input to or produced as
- output from the software do not automatically fall under the
- copyright of the software, but belong to whomever generated them,
- and may be sold commercially, and may be aggregated with this
- software.
+== Copying
- 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- PURPOSE.
+See the file +COPYING+.
-* ruby home-page
+== Feedback
- The URL of the ruby home-page is:
+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).
- http://www.caelum.co.jp/~matz/ruby/index-en.html
+Bug reports should be filed at http://bugs.ruby-lang.org
-* The Author
+== The Author
-Feel free to send comments and bug reports to the author. Here is the
-author's latest mail address:
+Ruby was originally designed and developed by Yukihiro Matsumoto (Matz) in 1995.
- matz@ruby.club.or.jp
+<mailto:matz@ruby-lang.org>
--------------------------------------------------------
-created at: Thu Aug 3 11:57:36 JST 1995
+--
Local variables:
-mode: indented-text
+mode: rdoc
end:
diff --git a/README.EXT b/README.EXT
index fdf8c96af7..6f7340ceda 100644
--- a/README.EXT
+++ b/README.EXT
@@ -1,1029 +1,1598 @@
-.\" README.EXT - -*- Text -*- created at: Mon Aug 7 16:45:54 JST 1995
+# README.EXT - -*- RDoc -*- created at: Mon Aug 7 16:45:54 JST 1995
-rubyγĥ⥸塼κޤ
+This document explains how to make extension libraries for Ruby.
-1μ
+= Basic Knowledge
-CѿˤϷꡤǡˤϷޤ󡥤Ǥ顤
-ȤХݥ󥿤intѿȡͤȤƼ
-갷ޤդrubyѿˤϷʤǡ˷
-ΰ㤤ΤᡤCrubyߤѴʤСߤ
-ǡ򥢥Ǥޤ
+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.
-rubyΥǡVALUEȤCηɽޤVALUEΥǡ
-ϤΥǡפʬΤäƤޤΥǡפ
-Τϥǡ(֥)μºݤι¤̣Ƥơruby
-Υ饹ȤϤޤäΤǤ
+Data in Ruby are represented by the C type `VALUE'. Each VALUE data
+has its data-type.
-VALUECˤȤäựΤǡФˤ
+To retrieve C data from a VALUE, you need to:
- (1) VALUEΥǡפΤ
- (2) VALUECΥǡѴ
+1. Identify the VALUE's data type
+2. Convert the VALUE into C data
-ξɬפǤ(1)˺ȴְäǡѴԤ
-ơǰץबcore dumpޤ
+Converting to the wrong data type may cause serious problems.
-1.1 ǡ
+== Data-Types
-rubyˤϥ桼ȤǽΤʲΥפޤ
+The Ruby interpreter has the following data types:
- 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_TRUE
- T_FALSE
- T_DATA ǡ
+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_HASH :: associative array
+T_STRUCT :: (Ruby) structure
+T_BIGNUM :: multi precision integer
+T_FIXNUM :: Fixnum(31bit or 63bit integer)
+T_COMPLEX :: complex number
+T_RATIONAL :: rational number
+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_VARMAP
- T_SCOPE
- T_NODE
+T_ICLASS :: included module
+T_MATCH :: MatchData object
+T_UNDEF :: undefined
+T_NODE :: syntax tree node
+T_ZOMBIE :: object awaiting finalization
-ĤΥפCι¤ΤǼƤޤ
+Most of the types are represented by C structures.
-1.2 VALUEΥǡפå
+== Check Data Type of the VALUE
-ruby.hǤTYPE()ȤޥƤơVALUEΥǡ
-פΤ뤳ȤޤTYPE()ޥϾǾҲ𤷤T_XXXX
-η֤ޤVALUEΥǡפ˱ƽ
-ˤϡTYPE()ͤʬ뤳Ȥˤʤޤ
+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:
- /* FIXNUMν */
+ /* process Fixnum */
break;
case T_STRING:
- /* ʸν */
+ /* process String */
break;
case T_ARRAY:
- /* ν */
+ /* process Array */
break;
default:
- /* 㳰ȯ */
- Fail("not valid value");
+ /* raise exception */
+ rb_raise(rb_eTypeError, "not valid value");
break;
}
-ȥǡפåơʤ㳰ȯ
-ؿѰդƤޤ
+There is the data-type check function
void Check_Type(VALUE value, int type)
-δؿvaluetype̵С㳰ȯޤ
-Ϳ줿VALUEΥǡפɤå
-뤿ˤϡδؿȤޤ
+which raises an exception if the VALUE does not have the type
+specified.
-1.3 VALUECΥǡѴ
+There are also faster check macros for fixnums and nil.
-ǡפT_NIL, T_FALSE, T_TRUEǤǡϤ줾
-nil, FALSE, TRUEǤΥǡפΥ֥ȤϤҤ
-ĤĤ¸ߤޤ
+ FIXNUM_P(obj)
+ NIL_P(obj)
-ǡפT_FIXNUMλ31bitΥ
-FIXNUMCѴ뤿ˤϥޥFIX2INT()פ
-ޤ줫顤FIXNUM˸¤餺rubyΥǡѴ
-NUM2INT()פȤޥޤΥޥϥǡ
-פΥå̵ǻȤޤ(ѴǤʤˤ㳰
-ȯ)
+== Convert VALUE into C Data
-ʳΥǡפбCι¤Τޤб
-빽¤ΤΤVALUEϤΤޤޥ㥹(Ѵ)й¤Τ
-ݥ󥿤ѴǤޤ
+The data for type T_NIL, T_FALSE, T_TRUE are nil, false, true
+respectively. They are singletons for the data type.
+The equivalent C constants are: Qnil, Qfalse, Qtrue.
+Note that Qfalse is false in C also (i.e. 0), but not Qnil.
-¤Τϡstruct RXxxxxפȤ̾ruby.hƤ
-㤨ʸϡstruct RStringפǤºݤ˻Ȥǽ
-Τʸ󤯤餤Ȼפޤ
+The T_FIXNUM data is a 31bit or 63bit length fixed integer.
+This size is depend on the size of long: if long is 32bit then
+T_FIXNUM is 31bit, if long is 64bit then T_FIXNUM is 63bit.
+T_FIXNUM can be converted to a C integer by using the
+FIX2INT() macro or FIX2LONG(). Though you have to check that the
+data is really FIXNUM before using them, they are faster. FIX2LONG()
+never raises exceptions, but FIX2INT() raises RangeError if the
+result is bigger or smaller than the size of int.
+There are also NUM2INT() and NUM2LONG() which converts any Ruby
+numbers into C integers. These macros 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.
-ruby.hǤϹ¤Τإ㥹ȤޥRXXXXX()(ʸ
-ˤ)Ȥ̾󶡤Ƥޤ(: RSTRING())
+You can use the 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.
-㤨СʸstrĹ뤿ˤϡRSTRING(str)->lenפ
-ʸstrchar*Ȥ뤿ˤϡRSTRING(str)->ptr
-Ȥޤξˤϡ줾RARRAT(str)->lenס
-RARRAT(str)->ptrפȤʤޤ
+You can also use the macro named StringValueCStr(). This is just
+like StringValuePtr(), but always add nul character at the end of
+the result. If the result contains nul character, this macro causes
+the ArgumentError exception.
+StringValuePtr() doesn't guarantee the existence of a nul at the end
+of the result, and the result may contain nul.
-rubyι¤Τľܥ˵ĤʤФʤʤ
-Ȥϡʸι¤ΤȤϻȤǡľѹ
-ʤȤǤľѹ硤֥ȤƤ
-Ȥʤʤäơפ̥Хθˤʤޤ
+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". However, we do not recommend
+to access RXXXX data directly because these data structure is complex.
+Use corresponding rb_xxx() functions to access internal struct.
+For example, to access an entry of array, use rb_ary_entry(ary, offset)
+and rb_ary_store(ary, offset, obj).
-1.4 CΥǡVALUEѴ
+There are some accessing macros for structure members, for example
+`RSTRING_LEN(str)' to get the size of the Ruby String object. The
+allocated region can be accessed by `RSTRING_PTR(str)'.
-VALUEμºݤι¤
+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.
- * FIXNUMξ
+== Convert C Data into VALUE
- 1bitեȤơLSBΩƤ롥
+To convert C data to Ruby values:
- * ¾Υݥ󥿤ξ
+FIXNUM ::
- ΤޤVALUE˥㥹Ȥ롥
+ left shift 1 bit, and turn on LSB.
-ȤʤäƤޤäơLSBåVALUEFIXNUM
-狼櫓Ǥ(ݥ󥿤LSBΩäƤʤȤꤷ
-)
+Other pointer values::
-Ǥ顤FIXNUMʳrubyΥ֥Ȥι¤ΤñVALUE
-˥㥹ȤVALUEѴޤǤդι¤
-ΤVALUE˥㥹Ƚ櫓ǤϤޤ󡥥㥹Ȥ
-rubyΤäƤ빽¤(ruby.hƤstruct RXxxx
-Τ)ˤƤƤ
+ cast to VALUE.
-FIXNUM˴ؤƤѴޥͳɬפޤC
-VALUEѴޥϰʲΤΤޤɬפ˱
-ƻȤʬƤ
+You can determine whether a VALUE is pointer or not by checking its LSB.
- INT2FIX() Ȥ31bit˼ޤ
- INT2NUM() ǤդVALUE
+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>.
-INT2NUM()FIXNUMϰϤ˼ޤʤ硤BignumѴ
-Ƥޤ(٤)
+To convert C numbers to Ruby values, use these macros.
-1.5 rubyΥǡ
+INT2FIX() :: for integers within 31bits.
+INT2NUM() :: for arbitrary sized integer.
-Ҥ٤̤ꡤrubyι¤Τ򥢥Ƥι
-ԤȤϴޤ󡥤ǡrubyΥǡˤ
-rubyѰդƤؿѤƤ
+INT2NUM() converts an integer into a Bignum if it is out of the FIXNUM
+range, but is a bit slower.
-ǤϤäȤȤǤʸ/
-ؿ򤢤ޤ(ǤϤʤǤ)
+== 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:
- str_new(char *ptr, int len)
+=== String Functions
- rubyʸ롥
+rb_str_new(const char *ptr, long len) ::
- str_new2(char *ptr)
+ Creates a new Ruby string.
- Cʸ󤫤rubyʸ롥δؿεǽ
- str_new(ptr, strlen(ptr))ƱǤ롥
+rb_str_new2(const char *ptr) ::
+rb_str_new_cstr(const char *ptr) ::
- str_cat(VALUE str, char *ptr, int len)
+ Creates a new Ruby string from a C string. This is equivalent to
+ rb_str_new(ptr, strlen(ptr)).
- rubyʸ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.
- ary_new()
+rb_tainted_str_new2(const char *ptr) ::
+rb_tainted_str_new_cstr(const char *ptr) ::
- Ǥ0롥
+ Creates a new tainted Ruby string from a C string.
- ary_new2(int len)
+rb_sprintf(const char *format, ...) ::
+rb_vsprintf(const char *format, va_list ap) ::
- Ǥ0롥lenʬΰ򤢤餫
- ƤƤ
+ Creates a new Ruby string with printf(3) format.
- ary_new3(int n, ...)
+ Note: In the format string, %i is used for Object#to_s (or Object#inspect if
+ '+' flag is set) output (and related argument must be a VALUE). For integers
+ in format strings, use %d.
- ǻꤷnǤޤ롥
+rb_str_cat(VALUE str, const char *ptr, long len) ::
- ary_new4(int n, VALUE elts[])
+ Appends len bytes of data from ptr to the Ruby string.
- ͿnǤ롥
+rb_str_cat2(VALUE str, const char* ptr) ::
- ary_push(VALUE ary)
- ary_pop(VALUE ary, VALUE val)
- ary_shift(VALUE ary)
- ary_unshift(VALUE ary, VALUE val)
- ary_entry(VALUE ary, int idx)
+ Appends C string ptr to Ruby string str. This function is
+ equivalent to rb_str_cat(str, ptr, strlen(ptr)).
- ArrayƱ̾Υ᥽åɤƱƯ򤹤ؿ1ɬ
- ǤʤФʤʤ
+rb_str_catf(VALUE str, const char* format, ...) ::
+rb_str_vcatf(VALUE str, const char* format, va_list ap) ::
-2rubyεǽȤ
+ Appends C string format and successive arguments to Ruby string
+ str according to a printf-like format. These functions are
+ equivalent to rb_str_cat2(str, rb_sprintf(format, ...)) and
+ rb_str_cat2(str, rb_vsprintf(format, ap)), respectively.
-Ūrubyǽ񤱤뤳ȤCǤ񤱤ޤrubyΤΤCǵ
-ҤƤǤ顤ȤʤǤɡ
-rubyγĥ˻ȤȤ¿ͽ¬뵡ǽ濴˾
-𤷤ޤ
+rb_enc_str_new(const char *ptr, long len, rb_encoding *enc) ::
+rb_enc_str_new_cstr(const char *ptr, rb_encoding *enc) ::
-2.1 ruby˵ǽɲä
+ Creates a new Ruby string with the specified encoding.
-ruby󶡤ƤؿȤruby󥿥ץ꥿˿ǽ
-ɲä뤳ȤǤޤrubyǤϰʲεǽɲäؿ
-󶡤Ƥޤ
+rb_usascii_str_new(const char *ptr, long len) ::
+rb_usascii_str_new_cstr(const char *ptr) ::
- * 饹⥸塼
- * ᥽åɡðۥ᥽åɤʤ
- *
+ Creates a new Ruby string with encoding US-ASCII.
-ǤϽ˾Ҳ𤷤ޤ
+rb_str_resize(VALUE str, long len) ::
-2.1.1 饹/⥸塼
+ Resizes Ruby string to len bytes. If str is not modifiable, this
+ function raises an exception. The length of str must be set in
+ advance. If len is less than the old length the content beyond
+ len bytes is discarded, else if len is greater than the old length
+ the content beyond the old length bytes will not be preserved but
+ will be garbage. Note that RSTRING_PTR(str) may change by calling
+ this function.
-饹⥸塼뤿ˤϡʲδؿȤޤ
+rb_str_set_len(VALUE str, long len) ::
- VALUE rb_define_class(char *name, VALUE super)
- VALUE rb_define_module(char *name)
+ Sets the length of Ruby string. If str is not modifiable, this
+ function raises an exception. This function preserves the content
+ upto len bytes, regardless RSTRING_LEN(str). len must not exceed
+ the capacity of str.
-δؿϿ줿饹⥸塼֤ޤ
-᥽åɤˤͤɬפʤΤǡۤȤɤξ
-ͤѿ˳ǼƤɬפǤ礦
+=== Array Functions
-2.1.2 ᥽å/ðۥ᥽å
+rb_ary_new() ::
-᥽åɤðۥ᥽åɤˤϰʲδؿȤޤ
+ Creates an array with no elements.
- void rb_define_method(VALUE class, char *name,
+rb_ary_new2(long len) ::
+rb_ary_new_capa(long len) ::
+
+ Creates an array with no elements, allocating internal buffer
+ for len elements.
+
+rb_ary_new3(long n, ...) ::
+rb_ary_new_from_args(long n, ...) ::
+
+ Creates an n-element array from the arguments.
+
+rb_ary_new4(long n, VALUE *elts) ::
+rb_ary_new_from_values(long n, VALUE *elts) ::
+
+ Creates an n-element array from a C array.
+
+rb_ary_to_ary(VALUE obj) ::
+
+ Converts the object into an array.
+ Equivalent to Object#to_ary.
+
+There are many functions to operate an array. They may dump core if other
+types are given.
+
+rb_ary_aref(argc, VALUE *argv, VALUE ary) ::
+
+ Equivalent to Array#[].
+
+rb_ary_entry(VALUE ary, long offset) ::
+
+ ary[offset]
+
+rb_ary_store(VALUE ary, long offset, VALUE obj) ::
+
+ ary[offset] = obj
+
+rb_ary_subseq(VALUE ary, long beg, long len) ::
+
+ ary[beg, len]
+
+rb_ary_push(VALUE ary, VALUE val) ::
+rb_ary_pop(VALUE ary) ::
+rb_ary_shift(VALUE ary) ::
+rb_ary_unshift(VALUE ary, VALUE val) ::
+
+rb_ary_cat(VALUE ary, const VALUE *ptr, long len) ::
+
+ Appends len elements of objects from ptr to the array.
+
+= Extending Ruby with C
+
+== Adding 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
+
+=== Class and 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)
+
+=== Method and 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_sigleton_method(VALUE object, 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.
-ǰΤȡðۥ᥽åɡפȤϡΥ֥
-ȤФƤͭʥ᥽åɤǤrubyǤϤ褯Smalltalkˤ
-륯饹᥽åɤȤơ饹Фðۥ᥽åɤȤ
+If `argc' is negative, it specifies the calling sequence, not number of
+the arguments.
-δؿ argcȤCδؿϤο(
-)ޤargcλϴؿ˰Ϥο̣
-ޤ16İʾΰϻȤޤ(פޤ͡
-ʤ)
+If argc is -1, the function will be called as:
-argcλϰοǤϤʤꤷȤˤʤޤ
-argc-1λϰϤޤargc-2λϰ
-rubyȤϤޤ
+ VALUE func(int argc, VALUE *argv, VALUE obj)
-᥽åɤؿϤ⤦ĤޤҤȤĤprivate
-åɤؿǡrb_define_method()ƱǤ
+where argc is the actual number of arguments, argv is the C array of
+the arguments, and obj is the receiver.
- void rb_define_private_method(VALUE class, char *name,
- VALUE (*func)(), int argc)
+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.
-private᥽åɤȤϴؿǤƤӽФȤνʤ᥽
-ɤǤ
+There are some more functions to define methods. One takes an ID
+as the name of method to be defined. See also ID or Symbol below.
+
+ void rb_define_method_id(VALUE klass, ID name,
+ VALUE (*func)(ANYARGS), int argc)
+
+There are two functions to define private/protected methods:
+
+ void rb_define_private_method(VALUE klass, const char *name,
+ VALUE (*func)(), int argc)
+ void rb_define_protected_method(VALUE klass, const char *name,
+ VALUE (*func)(), int argc)
-⤦ҤȤĤϥ⥸塼ؿΤǤ⥸塼ؿ
-Ȥϥ⥸塼ðۥ᥽åɤǤꡤƱprivate᥽åɤ
-⤢ΤǤ򤢤Math⥸塼sqrt()ʤɤ
-ޤΥ᥽åɤ
+At last, rb_define_module_function defines a 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)
+
+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 a reader/writer for an attribute,
+
+ void rb_define_attr(VALUE klass, const char *name, int read, int write)
+
+To define and undefine the `allocate' class method,
- void rb_define_module_method(VALUE module, char *name,
- VALUE (*func)(), int argc)
+ void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass));
+ void rb_undef_alloc_func(VALUE klass);
-2.1.3
+func has to take the klass as the argument and return a newly
+allocated instance. This instance should be as empty as possible,
+without any expensive (including external) resources.
-ĥ⥸塼뤬ɬפϤ餫Ƥɤ
-Ǥ礦ؿĤޤ
+=== Constant Definition
- void rb_define_const(VALUE class, char *name, VALUE val)
- void rb_define_global_const(char *name, VALUE val)
+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)
-2.2 rubyεǽCƤӽФ
+The former is to define a constant under specified class/module. The
+latter is to define a global constant.
-ˡ1.5 rubyΥǡ٤ǰҲ𤷤褦ʴؿ
-ȤСrubyεǽ¸ƤؿľܸƤӽФȤ
+== Use Ruby Features from C
-# Τ褦ʴؿΰɽϤޤΤȤޤ󡥥
-# 뤷ʤǤ͡
+There are several ways to invoke Ruby's features from C code.
-ʳˤrubyεǽƤӽФˡϤĤޤ
+=== Evaluate Ruby Programs in a String
-2.2.1 rubyΥץeval
+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:
-CrubyεǽƤӽФäȤñˡȤơʸ
-Ϳ줿rubyΥץɾؿޤ
+ VALUE rb_eval_string(const char *str)
- VALUE rb_eval_string(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.
-ɾϸߤδĶǹԤޤĤޤꡤߤΥѿ
-selfʤɤѤޤ
+Note that the evaluation can raise an exception. There is a safer
+function:
-2.2.2 IDޤϥܥ
+ VALUE rb_eval_string_protect(const char *str, int *state)
-CʸͳrubyΥ᥽åɤƤӽФȤǤ
-ˡruby󥿥ץ꥿ǥ᥽åɤѿ̾ꤹ
-˻ȤƤIDˤĤƤޤ礦
+It returns nil when an error occur. Moreover, *state is zero if str was
+successfully evaluated, or nonzero otherwise.
-IDȤѿ̾᥽å̾ɽǤrubyǤ
+=== 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:
-ǥǤޤC餳뤿ˤϴؿ
+ :Identifier
- rb_intern(char *name)
+or
-Ȥޤ
+ :"any kind of string"
-2.2.3 CrubyΥ᥽åɤƤӽФ
+You can get the ID value from a string within C code by using
-CʸͳrubyΥ᥽åɤƤӽФˤϰʲ
-δؿȤޤ
+ rb_intern(const char *name)
+ rb_intern_str(VALUE name)
+
+You can retrieve ID from Ruby object (Symbol or String) given as an
+argument by using
+
+ rb_to_id(VALUE symbol)
+ rb_check_id(volatile VALUE *name)
+ rb_check_id_cstr(const char *name, long len, rb_encoding *enc)
+
+These functions try to convert the argument to a String if it was not
+a Symbol nor a String. The second function stores the converted
+result into *name, and returns 0 if the string is not a known symbol.
+After this function returned a non-zero value, *name is always a
+Symbol or a String, otherwise it is a String if the result is 0.
+The third function takes NUL-terminated C string, not Ruby VALUE.
+
+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)
+
+=== Invoke Ruby Method from C
+
+To invoke methods directly, you can use the function below
VALUE rb_funcall(VALUE recv, ID mid, int argc, ...)
-δؿϥ֥recvmidǻꤵ᥽åɤƤӽ
+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
-CؿȤäƻȡǤΤϡ饹󥹥
-ѿǤѿϰΤΤCѿȤƥ
-Ǥޤѿ򻲾ȤˡϸƤޤ
+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_get(VALUE obj, ID id, VALUE val)
+ VALUE rb_ivar_set(VALUE obj, ID id, VALUE val)
-idrb_intern()ΤȤäƤ
+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)
-饹򿷤뤿ˤϡ2.1.3 ٤ǾҲ
-ƤؿȤäƤ
-
-3rubyCȤξͭ
+See also Constant Definition above.
-Crubyδ֤ǾͭˡˤĤƲ⤷ޤ
+= Information Sharing Between Ruby and C
-3.1 C黲ȤǤruby
+=== Ruby Constants That C Can Be Accessed From C
-ʲrubyCΥ٥뤫黲ȤǤ롥
+As stated in section 1.3,
+the following Ruby constants can be referred from C.
- TRUE
- FALSE
+ Qtrue
+ Qfalse
-͡FALSECǤ⵶Ȥߤʤ롥
+Boolean values. Qfalse is false in C also (i.e. 0).
Qnil
-C줫鸫nilס
+Ruby nil in C scope.
+
+== 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.
-3.2 CrubyǶͭѿ
+ void rb_define_readonly_variable(const char *name, VALUE *var)
-CrubyѿȤäƾͭǤޤͭǤ
-ѿˤϤĤμबޤΤʤǤäȤɤȤ
-ȻפΤrb_define_variable()Ǥ
+You can defined hooked variables. The accessor functions (getter and
+setter) are called on access to the hooked variables.
- void rb_define_variable(char *name, VALUE *var)
+ void rb_define_hooked_variable(const char *name, VALUE *var,
+ VALUE (*getter)(), void (*setter)())
-δؿrubyCȤǶͭѿޤѿ̾
-`$'ǻϤޤʤˤϼưŪɲäޤѿͤ
-ȼưŪrubyбѿͤѤޤ
+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().
-ޤruby¦ϹǤʤѿ⤢ޤread only
-ѿϰʲδؿޤ
+The prototypes of the getter and setter functions are as follows:
- void rb_define_readonly_variable(char *name, VALUE *var)
+ VALUE (*getter)(ID id, VALUE *var);
+ void (*setter)(VALUE val, ID id, VALUE *var);
-ѿ¾hookĤѿǤޤhookդ
-ѿϰʲδؿѤޤ
- void rb_define_hooked_variable(char *name, VALUE *var,
- VALUE (*getter)(), VALUE (*setter)())
+Also you can define a Ruby global variable without a corresponding C
+variable. The value of the variable will be set/get only by hooks.
-δؿCδؿˤähookΤĤ줿ѿ
-ѿȤ줿ˤϴؿgetterѿͤåȤ
-ˤϴؿsetterƤФޤhookꤷʤgetter
-setter0ꤷƤ
+ void rb_define_virtual_variable(const char *name,
+ VALUE (*getter)(), void (*setter)())
-# gettersetter0ʤrb_define_variable()ƱƯ
-# ޤ
+The prototypes of the getter and setter functions are as follows:
-줫顤CδؿˤäƼ¸rubyѿ
-ؿޤ
+ VALUE (*getter)(ID id);
+ void (*setter)(VALUE val, ID id);
- void rb_define_virtual_variable(char *name,
- VALUE (*getter)(), VALUE (*setter)())
-δؿˤä줿rubyѿȤ줿ˤ
-getterѿͤåȤ줿ˤsetterƤФޤ
+== Encapsulate C Data into a Ruby Object
-3.3 CΥǡruby֥Ȥˤ
+To wrap and objectify a C pointer as a Ruby object (so called
+DATA), use Data_Wrap_Struct().
-C줿ǡ(¤)rubyΥ֥ȤȤ
-갷礬ꤨޤΤ褦ʾˤϡDataȤ
-ruby֥ȤCι¤(ؤΥݥ)򤯤ळȤruby
-֥ȤȤƼ갷褦ˤʤޤ
+ Data_Wrap_Struct(klass, mark, free, sval)
-Data֥Ȥƹ¤Τruby֥Ȥ˥ץ
-뤿ˤϡʲΥޥȤޤ
+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.
- Make_Data_Struct(class, type, mark, free, sval)
+These mark / free functions are invoked during GC execution. No
+object allocations are allowed during it, so do not allocate ruby
+objects inside them.
-classϿ륤󥹥󥹤Υ饹type
-ץ벽CΥǡη(¤)ǤmarkϤι¤Τ
-rubyΥ֥ȤؤλȤ˻ȤؿǤΤ褦
-Ȥޤޤʤˤ0ꤷޤfreeϤι¤Τ⤦
-פˤʤä˸ƤФؿǤδؿ١쥯
-ƤФޤsvaltypeѿǡMake_Data_Struct
-Ȥޤ
+You can allocate and wrap the structure in one step.
-ޥMake_Data_StructData֥Ȥơ
-Ȥ֤ޤ
+ Data_Make_Struct(klass, type, mark, free, sval)
-ΥޥƤӽФsval˹¤Τmalloc()졤
-Ĥι¤Τ򥫥ץ벽Data֥Ȥ󥹥
-ѿȤobj˥åȤޤ
+This macro returns an allocated Data object, wrapping the pointer to
+the structure, which is also allocated. This macro works like:
-Data֥ȤCݥ󥿤ФˤϰʲΥޥ
-Ȥޤ
+ (sval = ALLOC(type), Data_Wrap_Struct(klass, mark, free, sval))
- Get_Data_Struct(obj, type, 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.
-Data֥ȤtypeCݥ󥿤Фơsval
+To retrieve the C pointer from the Data object, use the macro
+Data_Get_Struct().
-DataλȤϤäʬˤΤǡ
-򻲾ȤƤ
+ Data_Get_Struct(obj, type, sval)
-4 - dbmѥå
+A pointer to the structure will be assigned to the variable sval.
-ޤǤǤȤꤢĥ⥸塼ϺϤǤ
-rubyextǥ쥯ȥˤǤ˴ޤޤƤdbm⥸塼
-ʳŪޤ
+See the example below for details.
-(1) ǥ쥯ȥ
+= 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.
+
+== Make the Directory
% mkdir ext/dbm
-rubyŸǥ쥯ȥβextǥ쥯ȥ˳ĥ
-塼ѤΥǥ쥯ȥޤ̾Ŭǹ
-
-
-(2) MANIFESTե
-
- % cd ext/dbm
- % touch MANIFEST
-
-ĥ⥸塼Υǥ쥯ȥβˤMANIFESTȤե뤬
-ɬפʤΤǡȤꤢΥեäƤޤǤ
-եˤɬפʥե뤳Ȥˤʤޤ
-
-MANIFESTȤեϡmakeλ˥ǥ쥯ȥ꤬ĥ⥸塼
-ޤǤ뤫ɤȽꤹ뤿˻ȤƤޤ
-
-(3) ߷פ
-
-ޤʤǤɡɤǽ¸뤫ɤޤ
-פɬפޤɤʥ饹Ĥ뤫Υ饹ˤ
-ɤʥ᥽åɤ뤫饹󶡤ʤɤˤĤ߷
-ޤdbm饹ˤĤƤext/dbm.doc򻲾ȤƤ
-
-(4) Cɤ
-
-ĥ⥸塼ΤȤʤCΥ񤭤ޤCΥ
-ҤȤĤλˤϡ֥⥸塼̾.cפ֤ɤǤ礦C
-Υʣξˤϵդˡ֥⥸塼̾.cפȤե
-̾򤱤ɬפޤ֥ȥեȥ⥸塼
-Ū֥⥸塼̾.oפȤե
-Ȥͤ뤫Ǥ
-
-rubyϳĥ⥸塼ɤˡInit_⥸塼̾פ
-ؿưŪ˼¹Ԥޤdbm⥸塼ξInit_dbm
-Ǥδؿǥ饹⥸塼롤᥽åɡʤɤ
-Ԥޤdbm.cѤޤ
-
---
-Init_dbm()
-{
- /* DBM饹 */
- cDBM = rb_define_class("DBM", cObject);
- /* DBMEnumerate⥸塼򥤥󥯥롼ɤ */
- rb_include_module(cDBM, 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⥸塼dbmΥǡб륪֥ȤˤʤϤ
-顤Cdbmruby˼ɬפޤ
-
-dbm.cǤDBMΥǡǼ뤿˰ʲΤ褦ʹ¤ΤȤ
-Ƥޤ
-
-struct dbmdata {
- int di_size;
- DBM *di_dbm;
-};
-
-RubyDBM֥Ȥ뤿ˤϰʲΤ褦ʥɤ
-ȤäƤޤ
-
- obj = Make_Data_Struct(class,struct dbmdata,0,free_dbm,dbmp);
- dbmp->di_dbm = dbm;
- dbmp->di_size = -1;
-
-DBM֥ȤCDBMݥ󥿤ФˤϰʲΤ
-ʥޥȤäƤޤ
-
-#define GetDBM(obj, dbmp) {\
- Get_Data_Struct(obj, struct dbmdata, dbmp);\
- if (dbmp->di_dbm == 0) closeddbm();\
-}
-
-DBM饹ˤϤ᥽åɤޤʬह3
-μޤҤȤĤϰοΤΤǡ
-Ƥdelete᥽åɤޤdelete᥽åɤƤ
-fdbm_delete()ϤΤ褦ˤʤäƤޤ
-
---
-static VALUE
-fdbm_delete(obj, keystr)
- VALUE obj, keystr;
-{
- :
-}
---
-
-οΥפ1self2ʹߤ᥽å
-ΰȤʤޤ
-
-οΤΤCǼΤrubyǼ
-ΤȤޤdbm⥸塼ǡCǼ
-DBMΥ饹᥽åɤǤopen()ǤƤ
-fdbm_s_open()ϤʤäƤޤ
-
---
-static VALUE
-fdbm_s_open(argc, argv, class)
- int argc;
- VALUE *argv;
- VALUE class;
-{
- :
- if (rb_scan_args(argc, argv, "11", &file, &vmode) == 1) {
- mode = 0666; /* default value */
- }
- :
-}
---
-
-Υפδؿ1Ϳ줿ο2Ϳ
-줿äƤˤʤޤself3ȤͿ
-
-Ϳ줿Ϥ뤿δؿ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;
- struct RArray *args;
-{
- :
-}
---
-
-1self2rubyǤǤϥ㥹Ȥ
-餹 struct RArray* ǼƤޤVALUEǤƱ
-
-** ջ
-
-rubyȶͭϤʤrubyΥ֥ȤǼǽΤ
-CѿϰʲδؿȤäruby󥿥ץ꥿ѿ¸
-򶵤ƤƤǤʤGCǥȥ֥򵯤ǽ
+Make a directory for the extension library under ext directory.
+
+== Design the Library
+
+You need to design the library features, before making it.
+
+== Write the 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.
+Note that some functions in mkmf library described below generate
+a file ``conftest.c'' for checking with compilation. You shouldn't
+choose ``conftest.c'' as a name of a source file.
+
+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.
+
+ void
+ Init_dbm(void)
+ {
+ /* define DBM class */
+ cDBM = rb_define_class("DBM", rb_cObject);
+ /* DBM includes Enumerable 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(VALUE obj, VALUE 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(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. The third argument is a string that specifies how to
+capture method arguments and assign them to the following VALUE
+references.
+
+
+The following is an example of a method that takes arguments by Ruby's
+array:
+
+ static VALUE
+ thread_initialize(VALUE thread, VALUE 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)
-(5) extconf.rbѰդ
+== Prepare extconf.rb
-⤷ǥ쥯ȥˡextconf.rbפȤե뤬¸ߤС
-make˼¹ԤޤʤŬMakefileޤ
+If the file named extconf.rb exists, it will be executed to generate
+Makefile.
-extconf.rbϥ⥸塼ΥѥɬפʾΥåʤ
-ԤȤŪǤextconf.rbǤϰʲrubyؿȤ
-Ȥޤ
+extconf.rb is the file for checking compilation conditions etc. You
+need to put
- have_library(lib, func): 饤֥¸ߥå
- have_func(func): ؿ¸ߥå
- have_header(header): إåե¸ߥå
- create_makefile(target): Makefile
+ require 'mkmf'
-⥸塼򥳥ѥ뤹郎·ʤΥ⥸塼ϥ
-ѥ뤷ʤˤcreate_makefileƤФʤɤ
+at the top of the file. You can use the functions below to check
+various conditions.
-(6) dependѰդ
+ have_macro(macro[, headers[, opt]]): check whether macro is defined
+ have_library(lib[, func[, headers[, opt]]]): check whether library containing function exists
+ find_library(lib[, func, *paths]): find library from paths
+ have_func(func[, headers[, opt]): check whether function exists
+ have_var(var[, headers[, opt]]): check whether variable exists
+ have_header(header[, preheaders[, opt]]): check whether header file exists
+ find_header(header, *paths): find header from paths
+ have_framework(fw): check whether framework exists (for MacOS X)
+ have_struct_member(type, member[, headers[, opt]]): check whether struct has member
+ have_type(type[, headers[, opt]]): check whether type exists
+ find_type(type, opt, *headers): check whether type exists in headers
+ have_const(const[, headers[, opt]]): check whether constant is defined
+ check_sizeof(type[, headers[, opts]]): check size of type
+ check_signedness(type[, headers[, opts]]): check signedness of type
+ convertible_int(type[, headers[, opts]]): find convertible integer type
+ find_executable(bin[, path]): find executable file path
+ create_header(header): generate configured header
+ create_makefile(target[, target_prefix]): generate Makefile
-⤷ǥ쥯ȥdependȤե뤬¸ߤС
-Makefile¸طåƤޤ
+See MakeMakefile for full documentation of these functions.
- % gcc -MM *.c > depend
+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
-(7) MANIFESTե˥ե̾
+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.
- % ls > MANIFEST
- % vi MANIFEST
+If a compilation condition is not fulfilled, you should not call
+``create_makefile''. The Makefile will not be generated, compilation will
+not be done.
-*.o, *~ʤɬפʥեʳMANIFESTɲäƤޤ
-makeˤMANIFESTƤϻȤޤΤǡΤޤޤǤ
-ϵʤǤɡѥå󥰤λ˻Ȥ뤳Ȥ
-ɬפʥե̤ǤǡѰդƤɤ
-礦
+== Prepare Depend (Optional)
-(8) make
+If the file named depend exists, Makefile will include that file to
+check dependencies. You can make this file by invoking
-rubyΥǥ쥯ȥmake¹ԤMakefileƤ
-Makefileгĥ⥸塼Υǥ쥯ȥ
-make뤳ȤǤޤextconf.rb񤭴ʤɤ
-MakefileκɬפʻϤޤrubyǥ쥯ȥmakeƤ
-
+ % gcc -MM *.c > depend
-(9) ǥХå
+It's harmless. Prepare it.
-ޤǥХåʤưʤǤ礦͡ext/Setup˥ǥ
-ȥ̾񤯤Ū˥󥯤ΤǥǥХåȤ褦ˤ
-ޤʬѥ뤬٤ʤޤɡ
+== Generate Makefile
-(10) Ǥ
+Try generating the Makefile by:
-ϤäȤʤꡤʤꡤʤꡤͳˤ
-ȤrubyκԤϳĥ⥸塼˴ؤưڤθ
-ĥޤ
+ ruby extconf.rb
-Appendix A. rubyΥɤʬ
+If the library should be installed under vendor_ruby directory
+instead of site_ruby directory, use --vendor option as follows.
-rubyΥϤĤʬह뤳ȤޤΤ
-饤֥ʬϴŪ˳ĥ⥸塼Ʊˤʤ
-ƤޤΥϺޤǤǤۤȤǤ
-פޤ
+ ruby extconf.rb --vendor
-rubyΥ
+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.
- class.c
- error.c
- eval.c
- gc.c
- object.c
- parse.y
- variable.c
+== Run 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.
+
+== 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.
+
+== 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 :: classes and modules
+error.c :: exception classes and exception mechanism
+gc.c :: memory management
+load.c :: library loading
+object.c :: objects
+variable.c :: variables and constants
+
+== Ruby Syntax Parser
+
+parse.y :: grammar definition
+parse.c :: automatically generated from parse.y
+keywords :: reserved keywords
+lex.c :: automatically generated from keywords
+
+== Ruby Evaluator (a.k.a. YARV)
+
+ compile.c
+ eval.c
+ eval_error.c
+ eval_jump.c
+ eval_safe.c
+ insns.def : definition of VM instructions
+ iseq.c : implementation of VM::ISeq
+ thread.c : thread management and context switching
+ thread_win32.c : thread implementation
+ thread_pthread.c : ditto
+ vm.c
+ vm_dump.c
+ vm_eval.c
+ vm_exec.c
+ vm_insnhelper.c
+ vm_method.c
+
+ opt_insns_unif.def : instruction unification
+ opt_operand.def : definitions for optimization
+
+ -> insn*.inc : automatically generated
+ -> opt*.inc : automatically generated
+ -> vm.inc : automatically generated
+
+== Regular Expression Engine (Oniguruma)
- dln.c
- fnmatch.c
- glob.c
regex.c
- st.c
- util.c
+ regcomp.c
+ regenc.c
+ regerror.c
+ regexec.c
+ regparse.c
+ regsyntax.c
+
+== Utility Functions
-rubyޥɤμ
+debug.c :: debug symbols for C debugger
+dln.c :: dynamic loading
+st.c :: general purpose hash table
+strftime.c :: formatting times
+util.c :: misc utilities
+
+== Ruby Interpreter Implementation
dmyext.c
+ dmydln.c
+ dmyencoding.c
+ id.c
inits.c
main.c
ruby.c
version.c
-饹饤֥
+ gem_prelude.rb
+ prelude.rb
+
+== Class Library
+
+array.c :: Array
+bignum.c :: Bignum
+compar.c :: Comparable
+complex.c :: Complex
+cont.c :: Fiber, Continuation
+dir.c :: Dir
+enum.c :: Enumerable
+enumerator.c :: Enumerator
+file.c :: File
+hash.c :: Hash
+io.c :: IO
+marshal.c :: Marshal
+math.c :: Math
+numeric.c :: Numeric, Integer, Fixnum, Float
+pack.c :: Array#pack, String#unpack
+proc.c :: Binding, Proc
+process.c :: Process
+random.c :: random number
+range.c :: Range
+rational.c :: Rational
+re.c :: Regexp, MatchData
+signal.c :: Signal
+sprintf.c :: String#sprintf
+string.c :: String
+struct.c :: Struct
+time.c :: Time
+
+defs/known_errors.def :: Errno::* exception classes
+-> known_errors.inc :: automatically generated
+
+== Multilingualization
+
+encoding.c :: Encoding
+transcode.c :: Encoding::Converter
+enc/*.c :: encoding classes
+enc/trans/* :: codepoint mapping tables
+
+== goruby Interpreter Implementation
+
+ goruby.c
+ golf_prelude.rb : goruby specific libraries.
+ -> golf_prelude.c : automatically generated
+
+
+= 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::
+ nil object
+
+Qtrue::
+ true object (default true value)
+
+Qfalse::
+ 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) ::
+
+ Internal type (T_NIL, T_FIXNUM, etc.)
+
+FIXNUM_P(value) ::
+
+ Is +value+ a Fixnum?
+
+NIL_P(value) ::
+
+ Is +value+ nil?
+
+void Check_Type(VALUE value, int type) ::
+
+ Ensures +value+ is of the given internal +type+ or raises a TypeError
+
+SaveStringValue(value) ::
+
+ Checks that +value+ is a String and is not tainted
+
+== Data Type Conversion
+
+FIX2INT(value), INT2FIX(i) ::
+
+ Fixnum <-> integer
+
+FIX2LONG(value), LONG2FIX(l) ::
+
+ Fixnum <-> long
+
+NUM2INT(value), INT2NUM(i) ::
+
+ Numeric <-> integer
+
+NUM2UINT(value), UINT2NUM(ui) ::
+
+ Numeric <-> unsigned integer
+
+NUM2LONG(value), LONG2NUM(l) ::
+
+ Numeric <-> long
+
+NUM2ULONG(value), ULONG2NUM(ul) ::
+
+ Numeric <-> unsigned long
+
+NUM2LL(value), LL2NUM(ll) ::
+
+ Numeric <-> long long
+
+NUM2ULL(value), ULL2NUM(ull) ::
+
+ Numeric <-> unsigned long long
+
+NUM2OFFT(value), OFFT2NUM(off) ::
+
+ Numeric <-> off_t
+
+NUM2SIZET(value), SIZET2NUM(size) ::
+
+ Numeric <-> size_t
+
+NUM2SSIZET(value), SSIZET2NUM(ssize) ::
+
+ Numeric <-> ssize_t
+
+rb_integer_pack(value, words, numwords, wordsize, nails, flags), rb_integer_unpack(words, numwords, wordsize, nails, flags) ::
+
+ Numeric <-> Arbitrary size integer buffer
+
+NUM2DBL(value) ::
+
+ Numeric -> double
+
+rb_float_new(f) ::
+
+ double -> Float
+
+StringValue(value) ::
+
+ Object with #to_str -> String
+
+StringValuePtr(value) ::
+
+ Object with #to_str -> pointer to String data
+
+StringValueCStr(value) ::
+
+ Object with #to_str -> pointer to String data without NULL bytes
+
+rb_str_new2(s) ::
+
+ char * -> String
+
+== Defining Class and 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 and argv to given VALUE references
+ according to the format string. The format can be described in ABNF
+ as follows:
+
+ scan-arg-spec := param-arg-spec [option-hash-arg-spec] [block-arg-spec]
+
+ param-arg-spec := pre-arg-spec [post-arg-spec] / post-arg-spec /
+ pre-opt-post-arg-spec
+ pre-arg-spec := num-of-leading-mandatory-args [num-of-optional-args]
+ post-arg-spec := sym-for-variable-length-args
+ [num-of-trailing-mandatory-args]
+ pre-opt-post-arg-spec := num-of-leading-mandatory-args num-of-optional-args
+ num-of-trailing-mandatory-args
+ option-hash-arg-spec := sym-for-option-hash-arg
+ block-arg-spec := sym-for-block-arg
+
+ num-of-leading-mandatory-args := DIGIT ; The number of leading
+ ; mandatory arguments
+ num-of-optional-args := DIGIT ; The number of optional
+ ; arguments
+ sym-for-variable-length-args := "*" ; Indicates that variable
+ ; length arguments are
+ ; captured as a ruby array
+ num-of-trailing-mandatory-args := DIGIT ; The number of trailing
+ ; mandatory arguments
+ sym-for-option-hash-arg := ":" ; Indicates that an option
+ ; hash is captured if the last
+ ; argument is a hash or can be
+ ; converted to a hash with
+ ; #to_hash. When the last
+ ; argument is nil, it is
+ ; captured if it is not
+ ; ambiguous to take it as
+ ; empty option hash; i.e. '*'
+ ; is not specified and
+ ; arguments are given more
+ ; than sufficient.
+ sym-for-block-arg := "&" ; Indicates that an iterator
+ ; block should be captured if
+ ; given
+
+ For example, "12" means that the method requires at least one
+ argument, and at most receives three (1+2) arguments. So, the format
+ string must be followed by three variable references, which are to be
+ assigned to captured arguments. For omitted arguments, variables are
+ set to Qnil. NULL can be put in place of a variable reference, which
+ means the corresponding captured argument(s) should be just dropped.
+
+ The number of given arguments, excluding an option hash or iterator
+ block, is returned.
+
+== 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().
+ Able to call even private/protected methods.
+
+VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv) ::
+VALUE rb_funcallv(VALUE recv, ID mid, int argc, VALUE *argv) ::
+
+ Invokes a method, passing arguments as an array of values.
+ Able to call even private/protected methods.
+
+VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, VALUE *argv) ::
+
+ Invokes a method, passing arguments as an array of values.
+ Able to call only public methods.
+
+VALUE rb_eval_string(const char *str) ::
+
+ Compiles and executes the string as a Ruby program.
+
+ID rb_intern(const char *name) ::
- array.c
- bignum.c
- compar.c
- dir.c
- enum.c
- file.c
- hash.c
- io.c
- math.c
- numeric.c
- pack.c
- process.c
- random.c
- range.c
- re.c
- signal.c
- sprintf.c
- string.c
- struct.c
- time.c
+ Returns ID corresponding to the name.
-Appendix B. ĥѴؿե
+char *rb_id2name(ID id) ::
-C줫rubyεǽѤAPIϰʲ̤Ǥ롥
+ Returns the name corresponding ID.
-**
+char *rb_class2name(VALUE klass) ::
- VALUE
+ Returns the name of the class.
-ruby֥Ȥɽ뷿ɬפ˱ƥ㥹ȤѤ롥
-Ȥ߹߷ɽCηruby.h˵ҤƤRǻϤޤ빽¤
-ΤǤ롥VALUE򤳤˥㥹Ȥ뤿RǻϤޤ빽¤
-̾ʸˤ̾ΥޥѰդƤ롥
+int rb_respond_to(VALUE object, ID id) ::
-** ѿ
+ Returns true if the object responds to the message specified by id.
- Qnil
+== Instance Variables
-: nil֥
+VALUE rb_iv_get(VALUE obj, const char *name) ::
- TRUE
+ Retrieve the value of the instance variable. If the name is not
+ prefixed by `@', that variable shall be inaccessible from Ruby.
-: TRUE֥(Υǥե)
+VALUE rb_iv_set(VALUE obj, const char *name, VALUE val) ::
- FALSE
+ Sets the value of the instance variable.
-: FALSE֥
+== Control Structure
-** CǡΥץ벽
+VALUE rb_block_call(VALUE recv, ID mid, int argc, VALUE * argv, VALUE (*func) (ANYARGS), VALUE data2) ::
- VALUE data_new(void *sval, void (*mark)(), void (*free)())
+ Calls a method on the recv, with the method name specified by the
+ symbol mid, with argc arguments in argv, supplying func as the
+ block. When func is called as the block, it will receive the value
+ from yield as the first argument, and data2 as the second argument.
+ When yielded with multiple values (in C, rb_yield_values(),
+ rb_yield_values2() and rb_yield_splat()), data2 is packed as an Array,
+ whereas yielded values can be gotten via argc/argv of the third/fourth
+ arguments.
-CǤդΥݥ󥿤򥫥ץ벽ruby֥Ȥ֤
-Υݥ󥿤ruby饢ʤʤäfreeǻꤷ
-ؿƤФ롥ޤΥݥ󥿤λؤǡ¾ruby
-ȤؤƤ硤mark˻ꤹؿǥޡɬ
-롥
+[OBSOLETE] VALUE rb_iterate(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2) ::
- Make_Data_Struct(obj, iv, type, mark, free, sval)
+ 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.
-typeΥmallocѿsval塤򥫥ץ
-벽ǡobjΥ󥹥ѿivޥ
+ When rb_iterate is used in 1.9, func1 has to call some Ruby-level method.
+ This function is obsolete since 1.9; use rb_block_call instead.
- Get_Data_Struct(obj, iv, type, sval)
+VALUE rb_yield(VALUE val) ::
-objΥ󥹥ѿivؤǡtypeΥݥ󥿤
-Фѿsvalޥ
+ Evaluates the block with value val.
-** 饹/⥸塼
+VALUE rb_rescue(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) ::
- VALUE rb_define_class(char *name, VALUE super)
+ 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.
-superΥ֥饹Ȥƿruby饹롥
+VALUE rb_ensure(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) ::
- VALUE rb_define_class_under(VALUE module, char *name, VALUE super)
+ 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 when no exception occurred.
-superΥ֥饹Ȥƿruby饹module
-Ȥ롥
+VALUE rb_protect(VALUE (*func) (VALUE), VALUE arg, int *state) ::
- VALUE rb_define_module(char *name)
+ Calls the function func with arg as the argument. If no exception
+ occurred during func, it returns the result of func and *state is zero.
+ Otherwise, it returns Qnil and sets *state to nonzero. If state is
+ NULL, it is not set in both cases.
+ You have to clear the error info with rb_set_errinfo(Qnil) when
+ ignoring the caught exception.
-ruby⥸塼롥
+void rb_jump_tag(int state) ::
- VALUE rb_define_module_under(VALUE module, char *name, VALUE super)
+ Continues the exception caught by rb_protect() and rb_eval_string_protect().
+ state must be the returned value from those functions. This function
+ never return to the caller.
-ruby⥸塼moduleȤ롥
+void rb_iter_break() ::
- void rb_include_module(VALUE class, VALUE module)
+ Exits from the current innermost block. This function never return to
+ the caller.
-⥸塼򥤥󥯥롼ɤ롥classǤmodule򥤥󥯥롼
-ɤƤˤϲ⤷ʤ(¿ť󥯥롼ɤζػ)
+void rb_iter_break_value(VALUE value) ::
- void rb_extend_object(VALUE object, VALUE module)
+ Exits from the current innermost block with the value. The block will
+ return the given argument value. This function never return to the
+ caller.
-֥Ȥ⥸塼(Ƥ᥽å)dzĥ롥
+== Exceptions and Errors
-** ѿ
+void rb_warn(const char *fmt, ...) ::
- void rb_define_variable(char *name, VALUE *var)
+ Prints a warning message according to a printf-like format.
-rubyCȤǶͭ륰Хѿ롥ѿ̾`$'ǻ
-ޤʤˤϼưŪɲä롥nameȤrubyμ̻ҤȤ
-Ƶʤʸ(㤨` ')ޤˤrubyץफ
-ϸʤʤ롥
+void rb_warning(const char *fmt, ...) ::
- void rb_define_readonly_variable(char *name, VALUE *var)
+ Prints a warning message according to a printf-like format, if
+ $VERBOSE is true.
-rubyCȤǶͭread onlyΥХѿ롥read
-onlyǤ뤳Ȱʳrb_define_variable()Ʊ
+void rb_raise(rb_eRuntimeError, const char *fmt, ...) ::
- void rb_define_virtual_variable(char *name,
- VALUE (*getter)(), VALUE (*setter)())
+ Raises RuntimeError. The fmt is a format string just like printf().
-ؿˤäƼ¸rubyѿ롥ѿȤ줿
-ˤgetterѿͤåȤ줿ˤsetterƤФ롥
+void rb_raise(VALUE exception, const char *fmt, ...) ::
- void rb_define_hooked_variable(char *name, VALUE *var,
- VALUE (*getter)(), VALUE (*setter)())
+ Raises a class exception. The fmt is a format string just like printf().
-ؿˤähookΤĤ줿Хѿ롥ѿ
-Ȥ줿ˤgetterؿͤåȤ줿ˤsetter
-ƤФ롥gettersetter0ꤷˤhookꤷ
-ΤƱˤʤ롥
+void rb_fatal(const char *fmt, ...) ::
- void rb_global_variable(VALUE *var)
+ Raises a fatal error, terminates the interpreter. No exception handling
+ will be done for fatal errors, but ensure blocks will be executed.
-GCΤᡤrubyץफϥʤ, ruby֥
-Ȥޤѿޡ롥
+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.
- void rb_define_const(VALUE class, char *name, VALUE val)
+Note: In the format string, %i is used for Object#to_s (or Object#inspect if
+'+' flag is set) output (and related argument must be a VALUE). For integers
+in format strings, use %d.
-饹롥
+== Initialize and Start the Interpreter
- void rb_define_global_const(char *name, VALUE val)
+The embedding API functions are below (not needed for extension libraries):
-롥
+void ruby_init() ::
- rb_define_const(cKernal, name, val)
+ Initializes the interpreter.
-Ʊ̣
+void ruby_options(int argc, char **argv) ::
-** ᥽å
+ Process command line arguments for the interpreter.
- rb_define_method(VALUE class, char *name, VALUE (*func)(), int argc)
+void ruby_run() ::
-᥽åɤ롥argcselfοargc-1λ,
-ؿˤϰο(selfޤޤʤ)1, 2
-ȤͿ(3self)argc-2λ, 1
-self, 2args(argsϰޤruby)Ȥ
-Ϳ롥
+ Starts execution of the interpreter.
- rb_define_private_method(VALUE class, char *name, VALUE (*func)(), int argc)
+void ruby_script(char *name) ::
-private᥽åɤ롥rb_define_method()Ʊ
+ Specifies the name of the script ($0).
- rb_define_singleton_method(VALUE class, char *name, VALUE (*func)(), int argc)
+== Hooks for the Interpreter Events
-ðۥ᥽åɤ롥rb_define_method()Ʊ
+ void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events,
+ VALUE data)
- rb_scan_args(int atgc, VALUE *argv, char *fmt, ...)
+Adds a hook function for the specified interpreter events.
+events should be OR'ed value of:
-argc,argvͿ줿ʬ򤹤롥fmtɬܰο,
-ղðο, Ĥΰ뤫ꤹʸ, "
-*"ȤǤ롥 2 ܤο"*"Ϥ줾άǽ
-롥ɬܰĤʤ0ꤹ롥3ʹߤ
-ؤΥݥ󥿤, Ǥѿ˳Ǽ롥ղð
-бͿƤʤѿQnil
-롥
+ 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
-** ruby᥽åɸƤӽФ
+The definition of rb_event_hook_func_t is below:
- VALUE rb_funcall(VALUE recv, ID mid, int narg, ...)
+ typedef void (*rb_event_hook_func_t)(rb_event_t event, VALUE data,
+ VALUE self, ID id, VALUE klass)
-᥽åɸƤӽФʸ󤫤mid뤿ˤrb_intern()Ȥ
+The third argument `data' to rb_add_event_hook() is passed to the hook
+function as the second argument, which was the pointer to the current
+NODE in 1.8. See RB_EVENT_HOOKS_HAVE_CALLBACK_DATA below.
- VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)
+ int rb_remove_event_hook(rb_event_hook_func_t func)
-᥽åɸƤӽФargc,argvϤ
+Removes the specified hook function.
- VALUE rb_eval_string(char *str)
+== Macros for Compatibility
-ʸrubyȥץȤƥѥ롦¹Ԥ롥
+Some macros to check API compatibilities are available by default.
- ID rb_intern(char *name)
+NORETURN_STYLE_NEW ::
-ʸбID֤
+ Means that NORETURN macro is functional style instead of prefix.
- char *rb_id2name(ID id)
+HAVE_RB_DEFINE_ALLOC_FUNC ::
-IDбʸ֤(ǥХå)
+ Means that function rb_define_alloc_func() is provided, that means the
+ allocation framework is used. This is same as the result of
+ have_func("rb_define_alloc_func", "ruby.h").
- char *rb_class2name(VALUE class)
+HAVE_RB_REG_NEW_STR ::
-class֤̾(ǥХå)class̾ʤˤ,
-̤ä̾ĥ饹֤̾
+ Means that function rb_reg_new_str() is provided, that creates Regexp
+ object from String object. This is same as the result of
+ have_func("rb_reg_new_str", "ruby.h").
-** 󥹥ѿ
+HAVE_RB_IO_T ::
- VALUE rb_iv_get(VALUE obj, char *name)
+ Means that type rb_io_t is provided.
-objΥ󥹥ѿͤ롥`@'ǻϤޤʤ󥹥
-ѿ rubyץफ饢Ǥʤֱ줿ץ󥹥
-ѿˤʤ롥
+USE_SYMBOL_AS_METHOD_NAME ::
- VALUE rb_iv_set(VALUE obj, char *name, VALUE val)
+ Means that Symbols will be returned as method names, e.g.,
+ Module#methods, #singleton_methods and so on.
-objΥ󥹥ѿval˥åȤ롥
+HAVE_RUBY_*_H ::
-** 湽¤
+ Defined in ruby.h and means corresponding header is available. For
+ instance, when HAVE_RUBY_ST_H is defined you should use ruby/st.h not
+ mere st.h.
- VALUE rb_iterate(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2)
+RB_EVENT_HOOKS_HAVE_CALLBACK_DATA ::
-func2֥åȤꤷ, func1򥤥ƥ졼ȤƸƤ֡
-func1ˤ arg1ȤϤ, func2ˤ1˥ƥ졼
-Ϳ줿, 2arg2Ϥ롥
-
- VALUE rb_yield(VALUE val)
+ Means that rb_add_event_hook() takes the third argument `data', to be
+ passed to the given event hook function.
-valͤȤƥƥ졼֥åƤӽФ
+= Appendix C. Functions available for use in extconf.rb
- VALUE rb_rescue(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2)
+See documentation for {mkmf}[rdoc-ref:MakeMakefile].
-ؿfunc1arg1˸ƤӽФfunc1μ¹㳰ȯ
-ˤ func2arg2ȤƸƤ֡ͤ㳰ȯ
-äfunc1, 㳰ȯˤfunc2ͤ
-롥
+= Appendix D. Generational GC
- VALUE rb_ensure(VALUE (*func1)(), void *arg1, void (*func2)(), void *arg2)
+Ruby 2.1 introduced a generational garbage collector (called RGenGC).
+RGenGC (mostly) keeps compatibility.
-ؿfunc1arg1ȤƼ¹Ԥ, ¹Խλ(Ȥ㳰ȯ
-Ƥ) func2arg2ȤƼ¹Ԥ롥ͤfunc1
-ͤǤ(㳰ȯʤ)
+Generally, the use of the technique called write barriers is required in
+extension libraries for generational GC
+(http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29).
+RGenGC works fine without write barriers in extension libraries.
-** 㳰顼
+If your library adheres to the following tips, performance can
+be further improved. Especially, the "Don't touch pointers directly" section is
+important.
- void Warning(char *fmt, ...)
+== Incompatibility
-verboseɸ२顼Ϥ˷ٹɽ롥printf()Ʊ
+You can't write RBASIC(obj)->klass field directly because it is const
+value now.
- void Fail(char *fmt, ...)
+Basically you should not write this field because MRI expects it to be
+an immutable field, but if you want to do it in your extension you can
+use the following functions:
-㳰ȯ롥printf()Ʊ
+VALUE rb_obj_hide(VALUE obj) ::
- void Fatal(char *fmt, ...)
+ Clear RBasic::klass field. The object will be an internal object.
+ ObjectSpace::each_object can't find this object.
-̿Ū㳰ȯ롥̾㳰ϹԤʤ줺, 󥿡
-ץ꥿λ(ensureǻꤵ줿ɤϽλ˼
-Ԥ)
+VALUE rb_obj_reveal(VALUE obj, VALUE klass) ::
- void Bug(char *fmt, ...)
+ Reset RBasic::klass to be klass.
+ We expect the `klass' is hidden class by rb_obj_hide().
-󥿡ץ꥿ʤɥץΥХǤȯϤΤʤ
-λƤ֡󥿡ץ꥿ϥפľ˽λ롥㳰
-ϰڹԤʤʤ
+== Write barriers
-** rubyν¹
+RGenGC doesn't require write barriers to support generational GC.
+However, caring about write barrier can improve the performance of
+RGenGC. Please check the following tips.
-ruby򥢥ץꥱˤϰʲΥ󥿥ե
-Ȥ̾γĥ⥸塼ˤɬפʤ
+=== Don't touch pointers directly
- void ruby_init(int argc, char **argv, char **envp)
+In MRI (include/ruby/ruby.h), some macros to acquire pointers to the
+internal data structures are supported such as RARRAY_PTR(),
+RSTRUCT_PTR() and so on.
-ruby󥿥ץ꥿νԤʤ
+DO NOT USE THESE MACROS and instead use the corresponding C-APIs such as
+rb_ary_aref(), rb_ary_store() and so on.
- void ruby_run()
+=== Consider whether to insert write barriers
-ruby󥿥ץ꥿¹Ԥ롥
+You don't need to care about write barriers if you only use built-in
+types.
- void ruby_script(char *name)
+If you support T_DATA objects, you may consider using write barriers.
-rubyΥץ̾($0)ꤹ롥
+Inserting write barriers into T_DATA objects only works with the
+following type objects: (a) long-lived objects, (b) when a huge number
+of objects are generated and (c) container-type objects that have
+references to other objects. If your extension provides such a type of
+T_DATA objects, consider inserting write barriers.
-Appendix B. extconf.rbǻȤؿ
+(a): short-lived objects don't become old generation objects.
+(b): only a few oldgen objects don't have performance impact.
+(c): only a few references don't have performance impact.
-extconf.rbǤѲǽʥѥåδؿϰ
-̤Ǥ롥
+Inserting write barriers is a very difficult hack, it is easy to
+introduce critical bugs. And inserting write barriers has several areas
+of overhead. Basically we don't recommend you insert write barriers.
+Please carefully consider the risks.
- have_library(lib, func)
+=== Combine with built-in types
-ؿfuncƤ饤֥lib¸ߤå롥
-֥꤬¸ߤTRUE֤
+Please consider utilizing built-in types. Most built-in types support
+write barrier, so you can use them to avoid manually inserting write
+barriers.
- have_func(func)
+For example, if your T_DATA has references to other objects, then you
+can move these references to Array. A T_DATA object only has a reference
+to an array object. Or you can also use a Struct object to gather a
+T_DATA object (without any references) and an that Array contains
+references.
-ؿfunc¸ߤå롥funcɸǤϥ󥯤ʤ
-֥ΤΤǤˤhave_libraryǤΥ饤֥
-åƤؿ¸ߤTRUE֤
+With use of such techniques, you don't need to insert write barriers
+anymore.
- have_header(header)
+=== Insert write barriers
-إåե¸ߤå롥إåե뤬¸ߤ
-TRUE֤
+[AGAIN] Inserting write barriers is a very difficult hack, and it is
+easy to introduce critical bugs. And inserting write barriers has
+several areas of overhead. Basically we don't recommend you insert write
+barriers. Please carefully consider the risks.
- create_makefile(target)
+Before inserting write barriers, you need to know about RGenGC algorithm
+(gc.c will help you). Macros and functions to insert write barriers are
+available in in include/ruby/ruby.h. An example is available in iseq.c.
-ĥ⥸塼ѤMakefile롥δؿƤФʤ
-Υ⥸塼ϥѥ뤵ʤtargetϥ⥸塼̾ɽ
-
+For a complete guide for RGenGC and write barriers, please refer to
+<https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/RGenGC>.
/*
* Local variables:
- * fill-column: 60
+ * fill-column: 70
* end:
*/
diff --git a/README.EXT.ja b/README.EXT.ja
new file mode 100644
index 0000000000..5ccc9306d1
--- /dev/null
+++ b/README.EXT.ja
@@ -0,0 +1,1650 @@
+# README.EXT.ja - -*- RDoc -*- created at: Mon Aug 7 16:45:54 JST 1995
+
+Rubyの拡張ライブラリの作り方を説明します.
+
+= 基礎知識
+
+Cの変数には型があり,データには型がありません.ですから,た
+とえばポインタをintの変数に代入すると,その値は整数として取
+り扱われます.逆にRubyの変数には型がなく,データに型がありま
+す.この違いのため,CとRubyは相互に変換しなければ,お互いの
+データをアクセスできません.
+
+RubyのデータはVALUEというCの型で表現されます.VALUE型のデー
+タはそのデータタイプを自分で知っています.このデータタイプと
+いうのはデータ(オブジェクト)の実際の構造を意味していて,Ruby
+のクラスとはまた違ったものです.
+
+VALUEからCにとって意味のあるデータを取り出すためには
+
+1. VALUEのデータタイプを知る
+2. VALUEをCのデータに変換する
+
+の両方が必要です.(1)を忘れると間違ったデータの変換が行われ
+て,最悪プログラムがcore dumpします.
+
+== データタイプ
+
+Rubyにはユーザが使う可能性のある以下のタイプがあります.
+
+T_NIL :: nil
+T_OBJECT :: 通常のオブジェクト
+T_CLASS :: クラス
+T_MODULE :: モジュール
+T_FLOAT :: 浮動小数点数
+T_STRING :: 文字列
+T_REGEXP :: 正規表現
+T_ARRAY :: 配列
+T_HASH :: 連想配列
+T_STRUCT :: (Rubyの)構造体
+T_BIGNUM :: 多倍長整数
+T_FIXNUM :: Fixnum(31bitまたは63bit長整数)
+T_COMPLEX :: 複素数
+T_RATIONAL :: 有理数
+T_FILE :: 入出力
+T_TRUE :: 真
+T_FALSE :: 偽
+T_DATA :: データ
+T_SYMBOL :: シンボル
+
+その他に内部で利用されている以下のタイプがあります.
+
+ T_ICLASS
+ T_MATCH
+ T_UNDEF
+ T_NODE
+ T_ZOMBIE
+
+ほとんどのタイプはCの構造体で実装されています.
+
+== 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)
+
+== VALUEをCのデータに変換する
+
+データタイプがT_NIL,T_FALSE,T_TRUEである時,データはそれぞ
+れnil,false,trueです.このデータタイプのオブジェクトはひと
+つずつしか存在しません.
+
+データタイプがT_FIXNUMの時,これは31bitまたは63bitのサイズを
+持つ整数です.longのサイズが32bitのプラットフォームであれば
+31bitに,longのサイズが64bitのプラットフォームであれば63bit
+になります. FIXNUM を C の整数に変換するためにはマクロ
+「FIX2INT()」または「FIX2LONG()」を使います.これらのマクロ
+を使用する際には事前にデータタイプがFIXNUMであることを確認す
+る必要がありますが,比較的高速に変換を行うことができます.ま
+た,「FIX2LONG()」は例外を発生しませんが,「FIX2INT()」は変
+換結果がintのサイズに収まらない場合には例外を発生します.
+それから,FIXNUMに限らずRubyのデータを整数に変換する
+「NUM2INT()」および「NUM2LONG()」というマクロがあります.こ
+れらのマクロはマクロはデータタイプのチェック無しで使えます
+(整数に変換できない場合には例外が発生する).同様にチェック無
+で使える変換マクロはdoubleを取り出す「NUM2DBL()」があります.
+
+char* を取り出す場合, StringValue() と StringValuePtr()
+を使います.
+StringValue(var) は var が String
+であれば何もせず,そうでなければ var を var.to_str() の結果
+に置き換えるマクロ,StringValuePtr(var) は同様に var を
+String に置き換えてから var のバイト列表現に対する char* を
+返すマクロです.var の内容を直接置き換える処理が入るので,
+var は lvalue である必要があります.
+また,StringValuePtr() に類似した StringValueCStr() というマ
+クロもあります.StringValueCStr(var) は var を String に置き
+換えてから var の文字列表現に対する char* を返します.返され
+る文字列の末尾には nul 文字が付加されます.なお,途中に nul
+文字が含まれる場合は ArgumentError が発生します.
+一方,StringValuePtr() では,末尾に nul 文字がある保証はなく,
+途中に nul 文字が含まれている可能性もあります.
+
+それ以外のデータタイプは対応するCの構造体があります.対応す
+る構造体のあるVALUEはそのままキャスト(型変換)すれば構造体の
+ポインタに変換できます.
+
+構造体は「struct RXxxxx」という名前でruby.hで定義されていま
+す.例えば文字列は「struct RString」です.実際に使う可能性が
+あるのは文字列と配列くらいだと思います.
+
+ruby.hでは構造体へキャストするマクロも「RXXXXX()」(全部大文
+字にしたもの)という名前で提供されています(例: RSTRING()).た
+だし、構造体への直接のアクセスはできるだけ避け,対応する
+rb_xxxx() といった関数を使うようにして下さい.例えば,配列の
+要素へアクセスする場合は,rb_ary_entry(ary, offset),
+rb_ary_store(ary, offset, obj) を利用するようにして下さい.
+
+構造体からデータを取り出すマクロが提供されています.文字列
+strの長さを得るためには「RSTRING_LEN(str)」とし,文字列strを
+char*として得るためには「RSTRING_PTR(str)」とします.
+
+Rubyの構造体を直接アクセスする時に気をつけなければならないこ
+とは,配列や文字列の構造体の中身は参照するだけで,直接変更し
+ないことです.直接変更した場合,オブジェクトの内容の整合性が
+とれなくなって,思わぬバグの原因になります.
+
+== 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または63bit以内に収まる自信
+ がある時
+INT2NUM() :: 任意の整数からVALUEへ
+
+INT2NUM()は整数がFIXNUMの範囲に収まらない場合,Bignumに変換
+してくれます(が,少し遅い).
+
+== Rubyのデータを操作する
+
+先程も述べた通り,Rubyの構造体をアクセスする時に内容の更新を
+行うことは勧められません.で,Rubyのデータを操作する時には
+Rubyが用意している関数を用いてください.
+
+ここではもっとも使われるであろう文字列と配列の生成/操作を行
+う関数をあげます(全部ではないです).
+
+=== 文字列に対する関数
+
+rb_str_new(const char *ptr, long len) ::
+
+ 新しいRubyの文字列を生成する.
+
+rb_str_new2(const char *ptr)
+rb_str_new_cstr(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)
+rb_tainted_str_new_cstr(const char *ptr)
+
+ Cの文字列から汚染マークが付加されたRubyの文字列を生成する.
+
+rb_sprintf(const char *format, ...)
+rb_vsprintf(const char *format, va_list ap)
+
+ Cの文字列formatと続く引数をprintf(3)のフォーマットにしたがって
+ 整形し,Rubyの文字列を生成する.
+
+ 注意: %iはObject#to_s('+'フラグが指定されているときはObject#inspect)を
+ 使ったVALUEの出力に使用されているため,整数には%dを使用すること.
+
+rb_str_cat(VALUE str, const char *ptr, long len)
+
+ Rubyの文字列strにlenバイトの文字列ptrを追加する.
+
+rb_str_cat2(VALUE str, const char* ptr)
+
+ Rubyの文字列strにCの文字列ptrを追加する.この関数の機能は
+ rb_str_cat(str, ptr, strlen(ptr))と同等である.
+
+rb_str_catf(VALUE str, const char* format, ...)
+rb_str_vcatf(VALUE str, const char* format, va_list ap)
+
+ Cの文字列formatと続く引数をprintf(3)のフォーマットにしたがって
+ 整形し,Rubyの文字列strに追加する.この関数の機能は,それぞれ
+ rb_str_cat2(str, rb_sprintf(format, ...)) や
+ rb_str_cat2(str, rb_vsprintf(format, ap)) と同等である.
+
+rb_enc_str_new(const char *ptr, long len, rb_encoding *enc)
+rb_enc_str_new_cstr(const char *ptr, rb_encoding *enc)
+
+ 指定されたエンコーディングでRubyの文字列を生成する.
+
+rb_usascii_str_new(const char *ptr, long len)
+rb_usascii_str_new_cstr(const char *ptr)
+
+ エンコーディングがUS-ASCIIのRubyの文字列を生成する.
+
+rb_str_resize(VALUE str, long len)
+
+ Rubyの文字列のサイズをlenバイトに変更する.strの長さは前
+ 以てセットされていなければならない.lenが元の長さよりも短
+ い時は,lenバイトを越えた部分の内容は捨てられる.lenが元
+ の長さよりも長い時は,元の長さを越えた部分の内容は保存さ
+ れないでゴミになるだろう.この関数の呼び出しによって
+ RSTRING_PTR(str)が変更されるかもしれないことに注意.
+
+rb_str_set_len(VALUE str, long len)
+
+ Rubyの文字列のサイズをlenバイトにセットする.strが変更可
+ 能でなければ例外が発生する.RSTRING_LEN(str)とは無関係に,
+ lenバイトまでの内容は保存される.lenはstrの容量を越えてい
+ てはならない.
+
+
+== 配列に対する関数
+
+rb_ary_new()
+
+ 要素が0の配列を生成する.
+
+rb_ary_new2(long len)
+rb_ary_new_capa(long len)
+
+ 要素が0の配列を生成する.len要素分の領域をあらかじめ割り
+ 当てておく.
+
+rb_ary_new3(long n, ...)
+rb_ary_new_from_args(long n, ...)
+
+ 引数で指定したn要素を含む配列を生成する.
+
+rb_ary_new4(long n, VALUE *elts)
+rb_ary_new_from_values(long n, VALUE *elts)
+
+ 配列で与えたn要素の配列を生成する.
+
+rb_ary_to_ary(VALUE obj)
+
+ オブジェクトを配列に変換する.
+ Object#to_aryと同等である.
+
+他にも配列を操作する関数が多数ある. これらは
+引数aryに配列を渡さなければならない. さもないと
+コアを吐く.
+
+rb_ary_aref(argc, VALUE *argv, VALUE ary)
+
+ Array#[]と同等.
+
+rb_ary_entry(VALUE ary, long offset)
+
+ ary[offset]
+
+rb_ary_store(VALUE ary, long offset, VALUE obj) ::
+
+ ary[offset] = obj
+
+rb_ary_subseq(VALUE ary, long beg, long len)
+
+ ary[beg, len]
+
+rb_ary_push(VALUE ary, VALUE val)
+rb_ary_pop(VALUE ary)
+rb_ary_shift(VALUE ary)
+rb_ary_unshift(VALUE ary, VALUE val)
+
+rb_ary_cat(VALUE ary, const VALUE *ptr, long len)
+
+ 配列aryにptrからlen個のオブジェクトを追加する.
+
+= Rubyの機能を使う
+
+原理的にRubyで書けることはCでも書けます.RubyそのものがCで記
+述されているんですから,当然といえば当然なんですけど.ここで
+はRubyの拡張に使うことが多いだろうと予測される機能を中心に紹
+介します.
+
+== Rubyに機能を追加する
+
+Rubyで提供されている関数を使えばRubyインタプリタに新しい機能
+を追加することができます.Rubyでは以下の機能を追加する関数が
+提供されています.
+
+* クラス,モジュール
+* メソッド,特異メソッドなど
+* 定数
+
+では順に紹介します.
+
+=== クラス/モジュール定義
+
+クラスやモジュールを定義するためには,以下の関数を使います.
+
+ 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)
+
+=== メソッド/特異メソッド定義
+
+メソッドや特異メソッドを定義するには以下の関数を使います.
+
+ 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の配列として渡されます.
+
+メソッドを定義する関数はまだいくつかあります. ひとつはメソッド
+名としてIDを取ります. IDについては2.2.2を参照.
+
+ void rb_define_method_id(VALUE klass, ID name,
+ VALUE (*func)(ANYARGS), int argc)
+
+private/protectedなメソッドを定義するふたつの関数があります.
+
+ void rb_define_private_method(VALUE klass, const char *name,
+ VALUE (*func)(), int argc)
+ void rb_define_protected_method(VALUE klass, const char *name,
+ VALUE (*func)(), int argc)
+
+privateメソッドとは関数形式でしか呼び出すことの出来ないメソッ
+ドです.
+
+最後に, rb_define_module関数はモジュール関数を定義します.
+モジュール関数とはモジュールの特異メソッドであり,同時に
+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);
+
+属性の取得・設定メソッドを定義するには
+
+ void rb_define_attr(VALUE klass, const char *name, int read, int write)
+
+クラスメソッドallocateを定義したり削除したりするための関数は
+以下の通りです.
+
+ void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass));
+ void rb_undef_alloc_func(VALUE klass);
+
+funcはクラスを引数として受け取って,新しく割り当てられたイン
+スタンスを返さなくてはなりません.このインスタンスは,外部リ
+ソースなどを含まない,できるだけ「空」のままにしておいたほう
+がよいでしょう.
+
+=== 定数定義
+
+拡張ライブラリが必要な定数はあらかじめ定義しておいた方が良い
+でしょう.定数を定義する関数は二つあります.
+
+ void rb_define_const(VALUE klass, const char *name, VALUE val)
+ void rb_define_global_const(const char *name, VALUE val)
+
+前者は特定のクラス/モジュールに属する定数を定義するもの,後
+者はグローバルな定数を定義するものです.
+
+== Rubyの機能をCから呼び出す
+
+既に『1.5 Rubyのデータを操作する』で一部紹介したような関数を
+使えば,Rubyの機能を実現している関数を直接呼び出すことが出来
+ます.
+
+# このような関数の一覧表はいまのところありません.ソースを見
+# るしかないですね.
+
+それ以外にもRubyの機能を呼び出す方法はいくつかあります.
+
+=== Rubyのプログラムをevalする
+
+CからRubyの機能を呼び出すもっとも簡単な方法として,文字列で
+与えられたRubyのプログラムを評価する以下の関数があります.
+
+ VALUE rb_eval_string(const char *str)
+
+この評価は現在の環境で行われます.つまり,現在のローカル変数
+などを受け継ぎます.
+
+評価は例外を発生するかもしれないことに注意しましょう. より安全
+な関数もあります.
+
+ VALUE rb_eval_string_protect(const char *str, int *state)
+
+この関数はエラーが発生するとnilを返します.そして,成功時には
+*stateはゼロに,さもなくば非ゼロになります.
+
+=== IDまたはシンボル
+
+Cから文字列を経由せずにRubyのメソッドを呼び出すこともできま
+す.その前に,Rubyインタプリタ内でメソッドや変数名を指定する
+時に使われているIDについて説明しておきましょう.
+
+IDとは変数名,メソッド名を表す整数です.Rubyの中では
+
+ :識別子
+
+または
+
+ :"任意の文字列"
+
+でアクセスできます.Cからこの整数を得るためには関数
+
+ rb_intern(const char *name)
+ rb_intern_str(VALUE name)
+
+を使います.Rubyから引数として与えられたシンボル(または文字
+列)をIDに変換するには以下の関数を使います.
+
+ rb_to_id(VALUE symbol)
+ rb_check_id(volatile VALUE *name)
+ rb_check_id_cstr(const char *name, long len, rb_encoding *enc)
+
+もし引数がシンボルでも文字列でもなければ、to_strメソッドで文
+字列に変換しようとします.第二の関数はその変換結果を*nameに保
+存し,その名前が既知のシンボルでない場合は0を返します.この関
+数が0以外を返した場合は*nameは常にシンボルか文字列であり、0を
+返した場合は常に文字列です.第三の関数はRubyの文字列ではなく
+NUL終端されたCの文字列を使います.
+
+=== 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_funcallv(VALUE recv, ID mid, int argc, VALUE *argv)
+ VALUE rb_apply(VALUE recv, ID mid, VALUE args)
+
+applyには引数としてRubyの配列を与えます.
+
+=== 変数/定数を参照/更新する
+
+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 定数定義』で紹介さ
+れている関数を使ってください.
+
+= RubyとCとの情報共有
+
+C言語とRubyの間で情報を共有する方法について解説します.
+
+== Cから参照できるRubyの定数
+
+以下のRubyの定数はCのレベルから参照できます.
+
+ Qtrue
+ Qfalse
+
+真偽値.QfalseはC言語でも偽とみなされます(つまり0).
+
+ Qnil
+
+C言語から見た「nil」.
+
+== 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()と同じになる.
+
+getterとsetterの仕様は次の通りです.
+
+ VALUE (*getter)(ID id, VALUE *var);
+ void (*setter)(VALUE val, ID id, VALUE *var);
+
+
+それから,対応するCの変数を持たないRubyの大域変数を定義する
+こともできます. その変数の値はフック関数のみによって取得・設定
+されます.
+
+ void rb_define_virtual_variable(const char *name,
+ VALUE (*getter)(), void (*setter)())
+
+この関数によって定義されたRubyの大域変数が参照された時には
+getterが,変数に値がセットされた時にはsetterが呼ばれます.
+
+getterとsetterの仕様は以下の通りです.
+
+ (*getter)(ID id);
+ (*setter)(VALUE val, ID id);
+
+== CのデータをRubyオブジェクトにする
+
+Cの世界で定義されたデータ(構造体)をRubyのオブジェクトとして
+取り扱いたい場合がありえます.このような場合には,Dataという
+RubyオブジェクトにCの構造体(へのポインタ)をくるむことでRuby
+オブジェクトとして取り扱えるようになります.
+
+Dataオブジェクトを生成して構造体をRubyオブジェクトにカプセル
+化するためには,以下のマクロを使います.
+
+ Data_Wrap_Struct(klass, mark, free, sval)
+
+このマクロの戻り値は生成されたDataオブジェクトです.
+
+klassはこのDataオブジェクトのクラスです.markはこの構造体が
+Rubyのオブジェクトへの参照がある時に使う関数です.そのような
+参照を含まない時には0を指定します.
+
+# そのような参照は勧められません.
+
+freeはこの構造体がもう不要になった時に呼ばれる関数です.この
+関数がガーベージコレクタから呼ばれます.これが-1の場合は,単
+純に開放されます.
+
+markおよびfree関数はGC実行中に呼び出されます.
+なお, GC実行中はRubyオブジェクトのアロケーションは禁止されま
+す. よって, markおよびfree関数でRubyオブジェクトのアロケーシ
+ョンは行わないでください.
+
+Cの構造体の割当とDataオブジェクトの生成を同時に行うマクロと
+して以下のものが提供されています.
+
+ Data_Make_Struct(klass, type, mark, free, sval)
+
+このマクロの戻り値は生成されたDataオブジェクトです.このマク
+ロは以下の式のように働きます:
+
+ (sval = ALLOC(type), Data_Wrap_Struct(klass, mark, free, sval))
+
+klass, mark, freeはData_Wrap_Structと同じ働きをします.type
+は割り当てるC構造体の型です.割り当てられた構造体は変数sval
+に代入されます.この変数の型は (type*) である必要があります.
+
+Dataオブジェクトからポインタを取り出すのは以下のマクロを用い
+ます.
+
+ Data_Get_Struct(obj, type, sval)
+
+Cの構造体へのポインタは変数svalに代入されます.
+
+これらのDataの使い方はちょっと分かりにくいので,後で説明する
+例題を参照してください.
+
+= 例題 - dbmパッケージを作る
+
+ここまでの説明でとりあえず拡張ライブラリは作れるはずです.
+Rubyのextディレクトリにすでに含まれているdbmライブラリを例に
+して段階的に説明します.
+
+== ディレクトリを作る
+
+ % mkdir ext/dbm
+
+Ruby 1.1からは任意のディレクトリでダイナミックライブラリを作
+ることができるようになりました.Rubyに静的にリンクする場合に
+はRubyを展開したディレクトリの下,extディレクトリの中に拡張
+ライブラリ用のディレクトリを作る必要があります.名前は適当に
+選んで構いません.
+
+== 設計する
+
+まあ,当然なんですけど,どういう機能を実現するかどうかまず設
+計する必要があります.どんなクラスをつくるか,そのクラスには
+どんなメソッドがあるか,クラスが提供する定数などについて設計
+します.
+
+== Cコードを書く
+
+拡張ライブラリ本体となるC言語のソースを書きます.C言語のソー
+スがひとつの時には「ライブラリ名.c」を選ぶと良いでしょう.C
+言語のソースが複数の場合には逆に「ライブラリ名.c」というファ
+イル名は避ける必要があります.オブジェクトファイルとモジュー
+ル生成時に中間的に生成される「ライブラリ名.o」というファイル
+とが衝突するからです.また,後述する mkmf ライブラリのいくつ
+かの関数がコンパイルを要するテストのために「conftest.c」とい
+うファイル名を使用することに注意してください.ソースファイル
+名として「conftest.c」を使用してはなりません.
+
+Rubyは拡張ライブラリをロードする時に「Init_ライブラリ名」と
+いう関数を自動的に実行します.dbmライブラリの場合「Init_dbm」
+です.この関数の中でクラス,モジュール,メソッド,定数などの
+定義を行います.dbm.cから一部引用します.
+
+ void
+ Init_dbm(void)
+ {
+ /* DBMクラスを定義する */
+ cDBM = rb_define_class("DBM", rb_cObject);
+ /* DBMはEnumerableモジュールをインクルードする */
+ 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(VALUE obj, VALUE keystr)
+ {
+ /* ... */
+ }
+
+引数の数が固定のタイプは第1引数がself,第2引数以降がメソッド
+の引数となります.
+
+引数の数が不定のものはCの配列で受けるものとRubyの配列で受け
+るものとがあります.dbmライブラリの中で,Cの配列で受けるもの
+はDBMのクラスメソッドであるopen()です.これを実装している関
+数fdbm_s_open()はこうなっています.
+
+ static VALUE
+ fdbm_s_open(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変数以降に指定したVALUEへの参照に値を代入してくれま
+す.
+
+
+引数をRubyの配列として受け取るメソッドの例には
+Thread#initializeがあります.実装はこうです.
+
+ static VALUE
+ thread_initialize(VALUE thread, VALUE args)
+ {
+ /* ... */
+ }
+
+第1引数はself,第2引数はRubyの配列です.
+
+*注意事項*
+
+Rubyと共有はしないがRubyのオブジェクトを格納する可能性のある
+Cの大域変数は以下の関数を使ってRubyインタプリタに変数の存在
+を教えてあげてください.でないとGCでトラブルを起こします.
+
+ void rb_global_variable(VALUE *var)
+
+== 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[, target_prefix]): Makefileの生成
+
+以下の変数を使うことができます.
+
+ $CFLAGS: コンパイル時に追加的に指定するフラグ(-Oなど)
+ $CPPFLAGS: プリプロセッサに追加的に指定するフラグ(-Iや-Dなど)
+ $LDFLAGS: リンク時に追加的に指定するフラグ(-Lなど)
+ $objs: リンクされるオブジェクトファイル名のリスト
+
+オブジェクトファイルのリストは,通常はソースファイルを検索し
+て自動的に生成されますが,makeの途中でソースを生成するような
+場合は明示的に指定する必要があります.
+
+ライブラリをコンパイルする条件が揃わず,そのライブラリをコン
+パイルしない時にはcreate_makefileを呼ばなければMakefileは生
+成されず,コンパイルも行われません.
+
+== dependを用意する
+
+もし,ディレクトリにdependというファイルが存在すれば,
+Makefileが依存関係をチェックしてくれます.
+
+ % gcc -MM *.c > depend
+
+などで作ることが出来ます.あって損は無いでしょう.
+
+== Makefileを生成する
+
+Makefileを実際に生成するためには
+
+ ruby extconf.rb
+
+とします.extconf.rbに require 'mkmf' の行がない場合にはエラー
+になりますので,引数を追加して
+
+ ruby -r mkmf extconf.rb
+
+としてください.
+
+site_ruby ディレクトリでなく,
+vendor_ruby ディレクトリにインストールする場合には
+以下のように --vendor オプションを加えてください.
+
+ ruby extconf.rb --vendor
+
+ディレクトリをext以下に用意した場合にはRuby全体のmakeの時に
+自動的にMakefileが生成されますので,このステップは不要です.
+
+== makeする
+
+動的リンクライブラリを生成する場合にはその場でmakeしてくださ
+い.必要であれば make install でインストールされます.
+
+ext以下にディレクトリを用意した場合は,Rubyのディレクトリで
+makeを実行するとMakefileを生成からmake,必要によってはそのモ
+ジュールのRubyへのリンクまで自動的に実行してくれます.
+extconf.rbを書き換えるなどしてMakefileの再生成が必要な時はま
+たRubyディレクトリでmakeしてください.
+
+拡張ライブラリはmake installでRubyライブラリのディレクトリの
+下にコピーされます.もし拡張ライブラリと協調して使うRubyで記
+述されたプログラムがあり,Rubyライブラリに置きたい場合には,
+拡張ライブラリ用のディレクトリの下に lib というディレクトリ
+を作り,そこに 拡張子 .rb のファイルを置いておけば同時にイン
+ストールされます.
+
+== デバッグ
+
+まあ,デバッグしないと動かないでしょうね.ext/Setupにディレ
+クトリ名を書くと静的にリンクするのでデバッガが使えるようにな
+ります.その分コンパイルが遅くなりますけど.
+
+== できあがり
+
+後はこっそり使うなり,広く公開するなり,売るなり,ご自由にお
+使いください.Rubyの作者は拡張ライブラリに関して一切の権利を
+主張しません.
+
+= Appendix A. Rubyのソースコードの分類
+
+Rubyのソースはいくつかに分類することが出来ます.このうちクラ
+スライブラリの部分は基本的に拡張ライブラリと同じ作り方になっ
+ています.これらのソースは今までの説明でほとんど理解できると
+思います.
+
+== Ruby言語のコア
+
+class.c :: クラスとモジュール
+error.c :: 例外クラスと例外機構
+gc.c :: 記憶領域管理
+load.c :: ライブラリのロード
+object.c :: オブジェクト
+variable.c :: 変数と定数
+
+== Rubyの構文解析器
+
+ parse.y : 字句解析器と構文定義
+ -> parse.c : 自動生成
+ keywords : 予約語
+ -> lex.c : 自動生成
+
+== Rubyの評価器 (通称YARV)
+ compile.c
+ eval.c
+ eval_error.c
+ eval_jump.c
+ eval_safe.c
+ insns.def : 仮想機械語の定義
+ iseq.c : VM::ISeqの実装
+ thread.c : スレッド管理とコンテキスト切り替え
+ thread_win32.c : スレッド実装
+ thread_pthread.c : 同上
+ vm.c
+ vm_dump.c
+ vm_eval.c
+ vm_exec.c
+ vm_insnhelper.c
+ vm_method.c
+
+ opt_insns_unif.def : 命令融合
+ opt_operand.def : 最適化のための定義
+
+ -> insn*.inc : 自動生成
+ -> opt*.inc : 自動生成
+ -> vm.inc : 自動生成
+
+== 正規表現エンジン (鬼車)
+
+ regex.c
+ regcomp.c
+ regenc.c
+ regerror.c
+ regexec.c
+ regparse.c
+ regsyntax.c
+
+== ユーティリティ関数
+
+debug.c :: Cデバッガ用のデバッグシンボル
+dln.c :: 動的ローディング
+st.c :: 汎用ハッシュ表
+strftime.c :: 時刻整形
+util.c :: その他のユーティリティ
+
+== Rubyコマンドの実装
+
+ dmyext.c
+ dmydln.c
+ dmyencoding.c
+ id.c
+ inits.c
+ main.c
+ ruby.c
+ version.c
+
+ gem_prelude.rb
+ prelude.rb
+
+== クラスライブラリ
+
+array.c :: Array
+bignum.c :: Bignum
+compar.c :: Comparable
+complex.c :: Complex
+cont.c :: Fiber, Continuation
+dir.c :: Dir
+enum.c :: Enumerable
+enumerator.c :: Enumerator
+file.c :: File
+hash.c :: Hash
+io.c :: IO
+marshal.c :: Marshal
+math.c :: Math
+numeric.c :: Numeric, Integer, Fixnum, Float
+pack.c :: Array#pack, String#unpack
+proc.c :: Binding, Proc
+process.c :: Process
+random.c :: 乱数
+range.c :: Range
+rational.c :: Rational
+re.c :: Regexp, MatchData
+signal.c :: Signal
+sprintf.c :: String#sprintf
+string.c :: String
+struct.c :: Struct
+time.c :: Time
+defs/known_errors.def :: 例外クラス Errno::*
+-> known_errors.inc :: 自動生成
+
+== 多言語化
+
+encoding.c :: Encoding
+transcode.c :: Encoding::Converter
+enc/*.c :: エンコーディングクラス群
+enc/trans/* :: コードポイント対応表
+
+== gorubyコマンドの実装
+
+ goruby.c
+ golf_prelude.rb : goruby固有のライブラリ
+ -> golf_prelude.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)
+ SafeStringValue(value)
+
+== 型変換
+
+ FIX2INT(value), INT2FIX(i)
+ FIX2LONG(value), LONG2FIX(l)
+ NUM2INT(value), INT2NUM(i)
+ NUM2UINT(value), UINT2NUM(ui)
+ NUM2LONG(value), LONG2NUM(l)
+ NUM2ULONG(value), ULONG2NUM(ul)
+ NUM2LL(value), LL2NUM(ll)
+ NUM2ULL(value), ULL2NUM(ull)
+ NUM2OFFT(value), OFFT2NUM(off)
+ NUM2SIZET(value), SIZET2NUM(size)
+ NUM2SSIZET(value), SSIZET2NUM(ssize)
+ rb_integer_pack(value, words, numwords, wordsize, nails, flags), rb_integer_unpack(words, numwords, wordsize, nails, flags)
+ 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形式で与えられた指定されたフォーマットに従って引
+ 数を分解し,続くVALUEへの参照にセットします.このフォーマッ
+ トは,ABNFで記述すると以下の通りです.
+
+ scan-arg-spec := param-arg-spec [option-hash-arg-spec] [block-arg-spec]
+
+ param-arg-spec := pre-arg-spec [post-arg-spec] / post-arg-spec /
+ pre-opt-post-arg-spec
+ pre-arg-spec := num-of-leading-mandatory-args [num-of-optional-args]
+ post-arg-spec := sym-for-variable-length-args
+ [num-of-trailing-mandatory-args]
+ pre-opt-post-arg-spec := num-of-leading-mandatory-args num-of-optional-args
+ num-of-trailing-mandatory-args
+ option-hash-arg-spec := sym-for-option-hash-arg
+ block-arg-spec := sym-for-block-arg
+
+ num-of-leading-mandatory-args := DIGIT ; 先頭に置かれる省略不能な引数の数
+ num-of-optional-args := DIGIT ; 続いて置かれる省略可能な引数の数
+ sym-for-variable-length-args := "*" ; 続いて置かれる可変長引数を
+ ; Rubyの配列で取得するための指定
+ num-of-trailing-mandatory-args := DIGIT ; 終端に置かれる省略不能な引数の数
+ sym-for-option-hash-arg := ":" ; オプションハッシュを取得する
+ ; ための指定; 省略不能な引数の
+ ; 数よりも多くの引数が指定され,
+ ; 最後の引数がハッシュ(または
+ ; #to_hashで変換可能)の場合に
+ ; 取得される.最後の引数がnilの
+ ; 場合,可変長引数指定がなく,
+ ; 省略不能引数の数よりも多くの
+ ; 引数が指定された場合に取得される
+ sym-for-block-arg := "&" ; イテレータブロックを取得するための
+ ; 指定
+
+ フォーマットが"12"の場合,引数は最低1つで,3つ(1+2)まで許さ
+ れるという意味になります.従って,フォーマット文字列に続い
+ て3つのVALUEへの参照を置く必要があります.それらには取得した
+ 変数がセットされます.変数への参照の代わりにNULLを指定する
+ こともでき,その場合は取得した引数の値は捨てられます.なお,
+ 省略可能引数が省略された時の変数の値はnil(C言語のレベルでは
+ Qnil)になります.
+
+ 返り値は与えられた引数の数です.オプションハッシュおよびイ
+ テレータブロックは数えません.
+
+== Rubyメソッド呼び出し
+
+VALUE rb_funcall(VALUE recv, ID mid, int narg, ...) ::
+
+ メソッド呼び出し.文字列からmidを得るためにはrb_intern()を
+ 使う.
+ private/protectedなメソッドでも呼び出せる.
+
+VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv) ::
+VALUE rb_funcallv(VALUE recv, ID mid, int argc, VALUE *argv) ::
+
+ メソッド呼び出し.引数をargc, argv形式で渡す.
+ private/protectedなメソッドでも呼び出せる.
+
+VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, VALUE *argv) ::
+
+ メソッド呼び出し.
+ publicなメソッドしか呼べない.
+
+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_block_call(VALUE obj, ID mid, int argc, VALUE * argv, VALUE (*func) (ANYARGS), VALUE data2) ::
+
+ funcをブロックとして設定し,objをレシーバ,argcとargvを引数
+ としてmidメソッドを呼び出す.funcは第一引数にyieldされた値,
+ 第二引数にdata2を受け取る.複数の値がyieldされた場合(Cでは
+ rb_yield_values()とrb_yield_values2(), rb_yield_splat()),
+ data2はArrayとしてパックされている.第三, 第四引数のargcと
+ argvによってyieldされた値を取り出すことができる.
+
+[OBSOLETE] VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) ::
+
+ func2をブロックとして設定し, func1をイテレータとして呼ぶ.
+ func1には arg1が引数として渡され, func2には第1引数にイテレー
+ タから与えられた値, 第2引数にarg2が渡される.
+
+ 1.9でrb_iterateを使う場合は, func1の中でRubyレベルのメソッド
+ を呼び出さなければならない.
+ 1.9でobsoleteとなった. 代わりにrb_block_callが用意された.
+
+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, VALUE (*func2)(), VALUE arg2) ::
+
+ 関数func1をarg1を引数として実行し, 実行終了後(たとえ例外が
+ 発生しても) func2をarg2を引数として実行する.戻り値はfunc1
+ の戻り値である(例外が発生した時は戻らない).
+
+VALUE rb_protect(VALUE (*func) (VALUE), VALUE arg, int *state) ::
+
+ 関数funcをargを引数として実行し, 例外が発生しなければその戻
+ り値を返す.例外が発生した場合は, *stateに非0をセットして
+ Qnilを返す.
+ rb_jump_tag()を呼ばずに捕捉した例外を無視する場合には,
+ rb_set_errinfo(Qnil)でエラー情報をクリアしなければならない.
+
+void rb_jump_tag(int state) ::
+
+ rb_protect()やrb_eval_string_protect()で捕捉された例外を再
+ 送する.stateはそれらの関数から返された値でなければならない.
+ この関数は直接の呼び出し元に戻らない.
+
+void rb_iter_break() ::
+
+ 現在の最も内側のブロックを終了する.この関数は直接の呼び出
+ し元に戻らない.
+
+void rb_iter_break_value(VALUE value) ::
+
+ 現在の最も内側のブロックをvalueで終了する.ブロックは引数で
+ 与えられたvalueを返す.この関数は直接の呼び出し元に戻らない.
+
+== 例外・エラー
+
+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, ...) ::
+
+ インタープリタなどプログラムのバグでしか発生するはずのない
+ 状況の時呼ぶ.インタープリタはコアダンプし直ちに終了する.
+ 例外処理は一切行なわれない.
+
+注意: %iはObject#to_s('+'フラグが指定されているときはObject#inspect)を
+使ったVALUEの出力に使用されているため,整数には%dを使用すること.
+
+== 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)を設定する.
+
+== インタプリタのイベントのフック
+
+ void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events,
+ VALUE data)
+
+指定されたインタプリタのイベントに対するフック関数を追加します.
+eventsは以下の値のorでなければなりません:
+
+ 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
+
+rb_event_hook_func_tの定義は以下の通りです:
+
+ typedef void (*rb_event_hook_func_t)(rb_event_t event, VALUE data,
+ VALUE self, ID id, VALUE klass)
+
+rb_add_event_hook() の第3引数 data は,フック関数の第2引数と
+して渡されます.これは1.8では現在のNODEへのポインタでした.以
+下の RB_EVENT_HOOKS_HAVE_CALLBACK_DATA も参照してください.
+
+ int rb_remove_event_hook(rb_event_hook_func_t func)
+
+指定されたフック関数を削除します.
+
+== 互換性のためのマクロ
+
+APIの互換性をチェックするために以下のマクロがデフォルトで定義されています.
+
+NORETURN_STYLE_NEW ::
+
+ NORETURN マクロが関数型マクロとして定義されていることを意味する.
+
+HAVE_RB_DEFINE_ALLOC_FUNC ::
+
+ rb_define_alloc_func() 関数が提供されていること,つまり
+ allocation framework が使われることを意味する.
+ have_func("rb_define_alloc_func", "ruby.h")
+ の結果と同じ.
+
+HAVE_RB_REG_NEW_STR ::
+
+ StringオブジェクトからRegexpオブジェクトを作る
+ rb_reg_new_str() 関数が提供されていることを意味する.
+ have_func("rb_reg_new_str", "ruby.h").
+ の結果と同じ.
+
+HAVE_RB_IO_T ::
+
+ rb_io_t 型が提供されていることを意味する.
+
+USE_SYMBOL_AS_METHOD_NAME ::
+
+ メソッド名を返すメソッド,Module#methods, #singleton_methods
+ などがSymbolを返すことを意味する.
+
+HAVE_RUBY_*_H ::
+
+ ruby.h で定義されている.対応するヘッダが提供されていること
+ を意味する.たとえば,HAVE_RUBY_ST_H が定義されている場合は
+ 単なる st.h ではなく ruby/st.h を使用する.
+
+RB_EVENT_HOOKS_HAVE_CALLBACK_DATA ::
+
+ rb_add_event_hook() がフック関数に渡す data を第3引数として
+ 受け取ることを意味する.
+
+= Appendix C. extconf.rbで使える関数たち
+
+extconf.rbの中では利用可能なコンパイル条件チェックの関数は以
+下の通りである.
+
+have_macro(macro, headers) ::
+
+ ヘッダファイルheaderをインクルードしてマクロmacroが定義さ
+ れているかどうかチェックする.マクロが定義されている時true
+ を返す.
+
+have_library(lib, func) ::
+
+ 関数funcを定義しているライブラリlibの存在をチェックする.
+ チェックに成功すると,-llibを$libsに追加し,trueを返す.
+
+find_library(lib, func, path...) ::
+
+ 関数funcを定義しているライブラリlibの存在を -Lpath を追加
+ しながらチェックする.チェックに成功すると,-llibを$libsに
+ 追加し,trueを返す.
+
+have_func(func, header) ::
+
+ ヘッダファイルheaderをインクルードして関数funcの存在をチェ
+ ックする.funcが標準ではリンクされないライブラリ内のもので
+ ある時には先にhave_libraryでそのライブラリをチェックしてお
+ く事.チェックに成功すると,プリプロセッサマクロ
+ `HAVE_{FUNC}` を定義し,trueを返す.
+
+have_var(var, header) ::
+
+ ヘッダファイルheaderをインクルードして変数varの存在をチェッ
+ クする.varが標準ではリンクされないライブラリ内のものであ
+ る時には先にhave_libraryでそのライブラリをチェックしておく
+ 事.チェックに成功すると,プリプロセッサマクロ
+ `HAVE_{VAR}` を定義し,trueを返す.
+
+have_header(header) ::
+
+ ヘッダファイルの存在をチェックする.チェックに成功すると,
+ プリプロセッサマクロ `HAVE_{HEADER_H}` を定義し,trueを返す.
+ (スラッシュやドットはアンダースコアに置換される)
+
+find_header(header, path...) ::
+
+ ヘッダファイルheaderの存在を -Ipath を追加しながらチェック
+ する.チェックに成功すると,プリプロセッサマクロ
+ `HAVE_{HEADER_H}` を定義し,trueを返す.
+ (スラッシュやドットはアンダースコアに置換される)
+
+have_struct_member(type, member[, header[, opt]]) ::
+
+ ヘッダファイルheaderをインクルードして型typeが定義され,
+ なおかつメンバmemberが存在するかをチェックする.チェックに
+ 成功すると,プリプロセッサマクロ `HAVE_{TYPE}_{MEMBER}` を
+ 定義し,trueを返す.
+
+have_type(type, header, opt) ::
+
+ ヘッダファイルheaderをインクルードして型typeが存在するかを
+ チェックする.チェックに成功すると,プリプロセッサマクロ
+ `HAVE_TYPE_{TYPE}` を定義し,trueを返す.
+
+check_sizeof(type, header) ::
+
+ ヘッダファイルheaderをインクルードして型typeのchar単位サイ
+ ズを調べる.チェックに成功すると,プリプロセッサマクロ
+ `SIZEOF_{TYPE}` を定義し,そのサイズを返す.定義されていな
+ いときはnilを返す.
+
+create_makefile(target[, target_prefix]) ::
+
+ 拡張ライブラリ用の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, option=nil) ::
+
+ pkg-configコマンドからパッケージpkgの情報を [cflags, ldflags, libs]
+ の配列として得る.$CFLAGS, $LDFLAGS, $libs にはそれぞれの値が
+ 追加される.
+
+ pkg-configの実際のコマンドは,以下の順で試される.
+
+ 1. コマンドラインで--with-{pkg}-config={command}オプションが
+ 指定された場合: {command} {option}
+ 2. {pkg}-config {option}
+ 3. pkg-config {option} {pkg}
+
+ optionが指定された場合は、上記の配列の代わりにそのオプションを
+ 指定して得られた出力をstripしたものを返す.
+
+= Appendix D. 世代別GC
+
+Ruby 2.1から世代別GCに対応しました。我々はこれをRGenGCと呼んでいます。
+RGenGCは、過去の拡張ライブラリに(ほぼ)互換性を保つように開発されている
+ため、拡張ライブラリ側の対応はほぼ不要です。
+
+ただし、対応をすることで性能を向上することができる可能性があります。もし
+拡張ライブラリに高い性能が必要である場合は対応を検討して下さい。
+
+とくにRARRAY_PTR()/RHASH_TBL()のようなマクロを用いてポインタに直接アクセ
+スするようなコードは書かないようにして下さい。代わりに、rb_ary_aref(),
+rb_ary_store() などの、適切な API 関数を利用するようにして下さい。
+
+そのほか、対応についての詳細は README.ext の「Appendix D. Generational
+GC」を参照して下さい。
+
+/*
+ * Local variables:
+ * fill-column: 60
+ * end:
+ */
diff --git a/README.ja b/README.ja
new file mode 100644
index 0000000000..9ab2f3ca0e
--- /dev/null
+++ b/README.ja
@@ -0,0 +1,192 @@
+= 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-ctl@ruby-lang.org
+
+まで本文に
+
+ subscribe YourFirstName YourFamilyName
+
+と書いて送って下さい。
+
+Ruby開発者向けメーリングリストもあります。こちらではrubyのバ
+グ、将来の仕様拡張など実装上の問題について議論されています。
+参加希望の方は
+
+mailto:ruby-dev-ctl@ruby-lang.org
+
+までruby-listと同様の方法でメールしてください。
+
+Ruby拡張モジュールについて話し合うruby-extメーリングリストと
+数学関係の話題について話し合うruby-mathメーリングリストと
+英語で話し合うruby-talkメーリングリストもあります。参加方法
+はどれも同じです。
+
+
+== コンパイル・インストール
+
+以下の手順で行ってください.
+
+1. もし +configure+ ファイルが見つからない、もしくは
+ +configure.in+ より古いようなら、 +autoconf+ を実行して
+ 新しく +configure+ を生成する
+
+2. +configure+ を実行して +Makefile+ などを生成する
+
+ 環境によってはデフォルトのCコンパイラ用オプションが付き
+ ます. +configure+ オプションで <tt>optflags=..</tt> <tt>warnflags=..</tt> 等
+ で上書きできます.
+
+3. (必要ならば)+defines.h+ を編集する
+
+ 多分,必要無いと思います.
+
+4. (必要ならば)+ext/Setup+ に静的にリンクする拡張モジュールを
+ 指定する
+
+ +ext/Setup+ に記述したモジュールは静的にリンクされます.
+
+ ダイナミックローディングをサポートしていないアーキテク
+ チャでは +Setup+ の1行目の「<tt>option nodynamic</tt>」という行のコ
+ メントを外す必要があります.また,このアーキテクチャで
+ 拡張モジュールを利用するためには,あらかじめ静的にリン
+ クしておく必要があります.
+
+5. +make+ を実行してコンパイルする
+
+6. <tt>make check</tt>でテストを行う.
+
+ 「<tt>check succeeded</tt>」と表示されれば成功です.ただしテスト
+ に成功しても完璧だと保証されている訳ではありません.
+
+7. <tt>make install</tt>
+
+ 以下のディレクトリを作って,そこにファイルをインストー
+ ルします.
+
+ * <tt>${DESTDIR}${prefix}/bin</tt>
+ * <tt>${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}</tt>
+ * <tt>${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}</tt>
+ * <tt>${DESTDIR}${prefix}/lib</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/site_ruby</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/vendor_ruby</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}</tt>
+ * <tt>${DESTDIR}${prefix}/lib/ruby/gems/${MAJOR}.${MINOR}.${TEENY}</tt>
+ * <tt>${DESTDIR}${prefix}/share/man/man1</tt>
+ * <tt>${DESTDIR}${prefix}/share/ri/${MAJOR}.${MINOR}.${TEENY}/system</tt>
+
+ RubyのAPIバージョンが'_x.y.z_'であれば,<tt>${MAJOR}</tt>は
+ '_x_'で,<tt>${MINOR}</tt>は'_y_',<tt>${TEENY}</tt>は'_z_'です.
+
+ <b>注意</b>: APIバージョンの +teeny+ は,Rubyプログラムのバージョ
+ ンとは異なることがあります.
+
+ +root+ で作業する必要があるかもしれません.
+
+もし,コンパイル時にエラーが発生した場合にはエラーのログとマ
+シン,OSの種類を含むできるだけ詳しいレポートを作者に送ってく
+ださると他の方のためにもなります.
+
+
+== 移植
+
+UNIXであれば +configure+ がほとんどの差異を吸収してくれるはずで
+すが,思わぬ見落としがあった場合(あるに違いない),作者にその
+ことをレポートすれば,解決できるかも知れません.
+
+アーキテクチャにもっとも依存するのはGC部です.RubyのGCは対象
+のアーキテクチャが<tt>setjmp()</tt>または<tt>getcontext()</tt>によって全てのレ
+ジスタを +jmp_buf+ や +ucontext_t+ に格納することと, +jmp_buf+ や
++ucontext_t+ とスタックが32bitアラインメントされていることを仮定
+しています.特に前者が成立しない場合の対応は非常に困難でしょう.
+後者の解決は比較的簡単で, +gc.c+ でスタックをマークしている
+部分にアラインメントのバイト数だけずらしてマークするコードを
+追加するだけで済みます.<tt>defined(\_\_mc68000\_\_)</tt>で括られてい
+る部分を参考にしてください.
+
+レジスタウィンドウを持つCPUでは,レジスタウィンドウをスタッ
+クにフラッシュするアセンブラコードを追加する必要があるかも知
+れません.
+
+
+== 配布条件
+
++COPYING.ja+ ファイルを参照してください。
+
+
+== 著者
+
+コメント,バグレポートその他は mailto:matz@ruby-lang.org まで.
+-------------------------------------------------------
+created at: Thu Aug 3 11:57:36 JST 1995
+--
+Local variables:
+mode: rdoc
+end:
diff --git a/README.jp b/README.jp
deleted file mode 100644
index 06c0832b10..0000000000
--- a/README.jp
+++ /dev/null
@@ -1,159 +0,0 @@
-* RubyȤ
-
-Rubyϥץ뤫ĶϤʥ֥ȻظץȸǤ
-RubyϺǽ餫ʥ֥ȻظȤ߷פƤ
-顤֥Ȼظץߥ󥰤ڤ˹Ԥ
-̾μ³Υץߥ󥰤ǽǤ
-
-RubyϥƥȽطǽϤʤɤͥ졤perlƱ餤
-Ǥ˥ץʸˡȡ㳰䥤ƥ졼ʤɤε
-ˤäơʬ䤹ץߥ󥰤ޤ
-
-* RubyĹ
-
- + ץʸˡ
- + ̤Υ֥Ȼظǽ(饹᥽åɥʤ)
- + üʥ֥Ȼظǽ(Mixin, ðۥ᥽åɤʤ)
- + 黻ҥС
- + 㳰ǽ
- + ƥ졼ȥ
- + ١쥯
- + ʥߥåǥ (ƥˤ)
- + ܿ⤤¿UNIXư
-
-* ˡ
-
-** ftp
-
-ʲξˤƤޤ
-
- ftp://ftp.caelum.co.jp/pub/lang/ruby/
-
-** ᥤ
-
-ʲΥɥ쥹`send'ȤSubjectΥᥤäƲ
-
- ruby-archive@caelum.co.jp
-
-ʸˤϲ񤤤Ƥ⹽ޤޤ֤ǿǤruby
-
-* ۡڡ
-
- RubyΥۡڡURL
-
- http://www.caelum.co.jp/~matz/ruby/
-
- Ǥ
-
-* ᥤ󥰥ꥹ
-
- Ruby˴ؤΤΥᥤ󥰥ꥹȤߤޤ
- ɥ쥹
-
- ruby-list@caelum.co.jp
-
- ǤΥɥ쥹˥ᥤСưŪϿޤ
-
-* ѥ롦󥹥ȡ
-
-ʲμǹԤäƤ
-
- 1. configure¹ԤMakefileʤɤ
-
- 2. (ɬפʤ)defines.hԽ
-
- ¿ʬɬ̵Ȼפޤ
-
- 3. (ɬפʤ)ext/SetupŪ˥󥯤ĥ⥸塼
- ꤹ
-
- ext/Setup˵Ҥ⥸塼Ū˥󥯤ޤ
-
- ʥߥåǥ󥰤򥵥ݡȤƤʤƥ
- ǤSetup1ܤΡoption nodynamicפȤԤΥ
- Ȥ򳰤ɬפޤޤΥƥ
- ĥ⥸塼Ѥ뤿ˤϡ餫Ū˥
- Ƥɬפޤ
-
- 4. make¹Ԥƥѥ뤹
-
- 5. make testǥƥȤԤ
-
- test succeededפɽǤƥ
- ƤⴰݾڤƤǤϤޤ
-
- 6. make install
-
-⤷ѥ˥顼ȯˤϥ顼Υȥ
-OSμޤǤܤݡȤԤäƤ
-¾Τˤʤޤ
-
-* ܿ
-
-UNIXǤconfigureۤȤɤκۤۼƤϤ
-פ̸Ȥä(˰㤤ʤ)Ԥˤ
-ȤݡȤСǤ뤫Τޤ
-
-ƥˤäȤ¸ΤGCǤrubyGCо
-Υƥ㤬setjmp()ˤäƤΥ쥸 jmp_buf
-Ǽ뤳Ȥȡjmp_bufȥå32bit饤Ȥ
-뤳ȤꤷƤޤäԤΩʤб
-˺Ǥ礦ԤβŪñǡgc.cǥå
-ޡƤʬ˥饤ȤΥХȿ餷ƥޡ
-륳ɤɲäǺѤߤޤdefined(THINK_C)פ
-Ƥʬ򻲹ͤˤƤ
-
-# ºݤˤrubyThink CǤϥѥǤޤ
-
-쥸ɥCPUǤϡ쥸ɥ򥹥
-˥եå夹륢֥饳ɤɲäɬפ뤫
-
-* ۾
-
-ԤϰʲξΤȤrubyۤޤ
-
- +
-
- ֤ۤݻ¤꼫ͳǤѹԤäΤ
- ۤ뤳Ȥ˾ˤϺԤϢƤ
-
- ѹԤʤʤruby򥳥ѥ뤷Хʥۤ϶ػ
- ޤ󤬡ХʥäͤǤ
- ˡˡƤ
-
- + ѹ
-
- ۤԤʤ¤ꡤʤŪǤ켫ͳǤ
- ǽĥХϺԤؤΥեɥХåԤޤ
- (ǤϤޤ)
-
- + ¾Υץؤΰ
-
- ʤŪǤ켫ͳǤruby˴ޤޤ¾κ
- Ԥˤ륳ɤϡ줾κԤΰոˤ¤ä
- ޤŪˤgc.c()regex.[ch]fnmatch.[ch]
- glob.c, st.[ch]missingǥ쥯ȥ겼Υե뷲
- ޤ
-
- + RubyץȤθ
-
- ƤrubyץȤθϤ줾Ԥ°ޤ
- ԤϤ˴ؤưڤθĥޤ󡥤ޤruby
- Ȥ߹िγĥ⥸塼˴ؤƤƱͤǤ
-
- + ̵ݾ
-
- Ruby̵ݾڤǤԤruby򥵥ݡȤջ֤Ϥޤ
- rubyȤΥХ뤤rubyץȤΥХʤɤȯ
- 뤤ʤ»ФƤǤޤ
-
-*
-
-ȡХݡȤ¾ matz@ruby.club.or.jp ޤǡ
--------------------------------------------------------
-created at: Thu Aug 3 11:57:36 JST 1995
-Local variables:
-mode: indented-text
-end:
diff --git a/ToDo b/ToDo
deleted file mode 100644
index c39e13625d..0000000000
--- a/ToDo
+++ /dev/null
@@ -1,7 +0,0 @@
-* """..."""%Q#...#ΤɤĤ뤤ξ褫
-* ѥåޤѿΥ
-* formatǽ
-* here document
-* perlΤ褦setuid check
-* write debugger for ruby
-* re-write regex code for speed and copyright
diff --git a/addr2line.c b/addr2line.c
new file mode 100644
index 0000000000..f936694724
--- /dev/null
+++ b/addr2line.c
@@ -0,0 +1,1082 @@
+/**********************************************************************
+
+ 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_DL_ITERATE_PHDR
+# ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+# endif
+# include <link.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 PATH_MAX
+#define PATH_MAX 4096
+#endif
+
+int kprintf(const char *fmt, ...);
+
+typedef struct {
+ const char *dirname;
+ const char *filename;
+ int line;
+
+ int fd;
+ void *mapped;
+ size_t mapped_size;
+ unsigned long base_addr;
+} line_info_t;
+
+/* 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 int
+get_path_from_symbol(const char *symbol, const char **p, size_t *len)
+{
+ if (symbol[0] == '0') {
+ /* libexecinfo */
+ *p = strchr(symbol, '/');
+ if (*p == NULL) return 0;
+ *len = strlen(*p);
+ }
+ else {
+ /* glibc */
+ const char *q;
+ *p = symbol;
+ q = strchr(symbol, '(');
+ if (q == NULL) return 0;
+ *len = q - symbol;
+ }
+ return 1;
+}
+
+static void
+fill_line(int num_traces, void **traces,
+ unsigned long addr, int file, int line,
+ char *include_directories, char *filenames, line_info_t *lines)
+{
+ int i;
+ for (i = 0; i < num_traces; i++) {
+ unsigned long a = (unsigned long)traces[i] - lines[i].base_addr;
+ /* 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, line_info_t *lines)
+{
+ 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 = *(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, lines); \
+ /*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, line_info_t *lines)
+{
+ char *debug_line_end = debug_line + size;
+ while (debug_line < debug_line_end) {
+ parse_debug_line_cu(num_traces, traces, &debug_line, lines);
+ }
+ if (debug_line != debug_line_end) {
+ kprintf("Unexpected size of .debug_line in %s\n",
+ binary_filename);
+ }
+}
+
+/* read file and fill lines */
+static void
+fill_lines(int num_traces, void **traces, char **syms, int check_debuglink,
+ line_info_t *current_line, line_info_t *lines);
+
+static void
+follow_debuglink(char *debuglink, int num_traces, void **traces, char **syms,
+ line_info_t *current_line, line_info_t *lines)
+{
+ /* 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;
+
+ 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);
+ strncat(binary_filename, subdir,
+ PATH_MAX - strlen(binary_filename) - 1);
+ strncat(binary_filename, debuglink,
+ PATH_MAX - strlen(binary_filename) - 1);
+
+ munmap(current_line->mapped, current_line->mapped_size);
+ close(current_line->fd);
+ fill_lines(num_traces, traces, syms, 0, current_line, lines);
+}
+
+/* read file and fill lines */
+static void
+fill_lines(int num_traces, void **traces, char **syms, int check_debuglink,
+ line_info_t *current_line, line_info_t *lines)
+{
+ int i;
+ 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;
+
+ fd = open(binary_filename, O_RDONLY);
+ if (fd < 0) {
+ return;
+ }
+ filesize = lseek(fd, 0, SEEK_END);
+ if (filesize < 0) {
+ int e = errno;
+ close(fd);
+ kprintf("lseek: %s\n", strerror(e));
+ return;
+ }
+#if SIZEOF_OFF_T > SIZEOF_SIZE_T
+ if (filesize > (off_t)SIZE_MAX) {
+ close(fd);
+ kprintf("Too large file %s\n", binary_filename);
+ return;
+ }
+#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));
+ return;
+ }
+
+ 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);
+ return;
+ }
+
+ current_line->fd = fd;
+ current_line->mapped = file;
+ current_line->mapped_size = (size_t)filesize;
+
+ for (i = 0; i < num_traces; i++) {
+ const char *path;
+ size_t len;
+ if (get_path_from_symbol(syms[i], &path, &len) &&
+ !strncmp(path, binary_filename, len)) {
+ lines[i].line = -1;
+ }
+ }
+
+ 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;
+ if (!strcmp(section_name, ".debug_line")) {
+ debug_line_shdr = shdr + i;
+ break;
+ } else if (!strcmp(section_name, ".gnu_debuglink")) {
+ gnu_debuglink_shdr = shdr + i;
+ }
+ }
+
+ 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, syms,
+ current_line, lines);
+ }
+ return;
+ }
+
+ parse_debug_line(num_traces, traces,
+ file + debug_line_shdr->sh_offset,
+ debug_line_shdr->sh_size,
+ lines);
+}
+
+#ifdef HAVE_DL_ITERATE_PHDR
+
+typedef struct {
+ int num_traces;
+ char **syms;
+ line_info_t *lines;
+} fill_base_addr_state_t;
+
+static int
+fill_base_addr(struct dl_phdr_info *info, size_t size, void *data)
+{
+ int i;
+ fill_base_addr_state_t *st = (fill_base_addr_state_t *)data;
+ for (i = 0; i < st->num_traces; i++) {
+ const char *path;
+ size_t len;
+ size_t name_len = strlen(info->dlpi_name);
+
+ if (get_path_from_symbol(st->syms[i], &path, &len) &&
+ (len == name_len || (len > name_len && path[len-name_len-1] == '/')) &&
+ !strncmp(path+len-name_len, info->dlpi_name, name_len)) {
+ st->lines[i].base_addr = info->dlpi_addr;
+ }
+ }
+ return 0;
+}
+
+#endif /* HAVE_DL_ITERATE_PHDR */
+
+void
+rb_dump_backtrace_with_lines(int num_traces, void **trace, char **syms)
+{
+ int i;
+ /* async-signal unsafe */
+ line_info_t *lines = (line_info_t *)calloc(num_traces,
+ sizeof(line_info_t));
+
+ /* Note that line info of shared objects might not be shown
+ if we don't have dl_iterate_phdr */
+#ifdef HAVE_DL_ITERATE_PHDR
+ fill_base_addr_state_t fill_base_addr_state;
+
+ fill_base_addr_state.num_traces = num_traces;
+ fill_base_addr_state.syms = syms;
+ fill_base_addr_state.lines = lines;
+ /* maybe async-signal unsafe */
+ dl_iterate_phdr(fill_base_addr, &fill_base_addr_state);
+#endif /* HAVE_DL_ITERATE_PHDR */
+
+ for (i = 0; i < num_traces; i++) {
+ const char *path;
+ size_t len;
+ if (lines[i].line) {
+ continue;
+ }
+
+ if (!get_path_from_symbol(syms[i], &path, &len)) {
+ continue;
+ }
+
+ strncpy(binary_filename, path, len);
+ binary_filename[len] = '\0';
+
+ fill_lines(num_traces, trace, syms, 1, &lines[i], lines);
+ }
+
+ for (i = 0; i < num_traces; i++) {
+ line_info_t *line = &lines[i];
+
+ if (line->line > 0) {
+ if (line->filename) {
+ if (line->dirname && line->dirname[0]) {
+ kprintf("%s %s/%s:%d\n", syms[i], line->dirname, line->filename, line->line);
+ }
+ else {
+ kprintf("%s %s:%d\n", syms[i], line->filename, line->line);
+ }
+ } else {
+ kprintf("%s ???:%d\n", syms[i], line->line);
+ }
+ } else {
+ kprintf("%s\n", syms[i]);
+ }
+ }
+
+ for (i = 0; i < num_traces; i++) {
+ line_info_t *line = &lines[i];
+ if (line->fd) {
+ munmap(line->mapped, line->mapped_size);
+ close(line->fd);
+ }
+ }
+ free(lines);
+}
+
+/* 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
new file mode 100644
index 0000000000..3782d89e07
--- /dev/null
+++ b/addr2line.h
@@ -0,0 +1,21 @@
+/**********************************************************************
+
+ 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, char **syms);
+
+#endif /* USE_ELF */
+
+#endif /* RUBY_ADDR2LINE_H */
diff --git a/array.c b/array.c
index 040a18403c..7760e3313e 100644
--- a/array.c
+++ b/array.c
@@ -1,1155 +1,5698 @@
-/************************************************
+/**********************************************************************
array.c -
- $Author: matz $
- $Date: 1995/01/10 10:42:18 $
+ $Author$
created at: Fri Aug 6 09:46:12 JST 1993
- Copyright (C) 1993-1996 Yukihiro Matsumoto
+ Copyright (C) 1993-2007 Yukihiro Matsumoto
+ Copyright (C) 2000 Network Applied Communication Laboratory, Inc.
+ Copyright (C) 2000 Information-technology Promotion Agency, Japan
-************************************************/
+**********************************************************************/
-#include "ruby.h"
+#include "ruby/ruby.h"
+#include "ruby/util.h"
+#include "ruby/st.h"
+#include "ruby/encoding.h"
+#include "internal.h"
+#include "probes.h"
+#include "id.h"
-VALUE cArray;
+#ifndef ARRAY_DEBUG
+# define NDEBUG
+#endif
+#include <assert.h>
-VALUE rb_to_a();
+VALUE rb_cArray;
+
+static ID id_cmp, id_div, id_power;
#define ARY_DEFAULT_SIZE 16
+#define ARY_MAX_SIZE (LONG_MAX / (int)sizeof(VALUE))
void
-memclear(mem, size)
- VALUE *mem;
- int size;
+rb_mem_clear(register VALUE *mem, register long size)
{
while (size--) {
*mem++ = Qnil;
}
}
-VALUE
-ary_new2(len)
- int len;
+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)
{
- NEWOBJ(ary, struct RArray);
- OBJSETUP(ary, cArray, T_ARRAY);
+ while (size--) {
+ *mem++ = val;
+ }
+}
- ary->len = 0;
- ary->capa = len;
- if (len == 0)
- ary->ptr = 0;
+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_memcpy(VALUE ary, long beg, long argc, const VALUE *argv)
+{
+#if 1
+ if (OBJ_PROMOTED(ary)) {
+ if (argc > (int)(128/sizeof(VALUE)) /* is magic number (cache line size) */) {
+ rb_gc_writebarrier_remember_promoted(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(ary, &ptr[i+beg], argv[i]);
+ }
+ });
+ }
+ }
else {
- ary->ptr = ALLOC_N(VALUE, len);
- memclear(ary->ptr, len);
+ RARRAY_PTR_USE(ary, ptr, {
+ MEMCPY(ptr+beg, argv, VALUE, argc);
+ });
+ }
+#else
+ /* giveup write barrier (traditional way) */
+ MEMCPY(RARRAY_PTR(ary)+beg, argv, VALUE, argc);
+#endif
+}
+
+# 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)
+
+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);
+}
+
+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)
+{
+ long num = ARY_SHARED_NUM(shared);
+ if (num >= 0) {
+ ARY_SET_SHARED_NUM(shared, num + 1);
+ }
+ return shared;
+}
+
+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_check_frozen(ary);
+}
+
+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);
+ }
+
+ /* TODO: age2 promotion, OBJ_PROMOTED() checks not infant. */
+ if (OBJ_PROMOTED(ary) && !OBJ_PROMOTED(shared)) {
+ rb_gc_writebarrier_remember_promoted(ary);
+ }
+ }
+}
+
+static void
+ary_ensure_room_for_push(VALUE ary, long add_len)
+{
+ long new_len = RARRAY_LEN(ary) + add_len;
+ long capa;
+
+ 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);
+ }
+ 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;
+ }
+ }
+ }
+ rb_ary_modify(ary);
+ capa = ARY_CAPA(ary);
+ if (new_len > capa) {
+ ary_double_capa(ary, new_len);
+ }
+}
+
+/*
+ * 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)
+{
+ return rb_obj_freeze(ary);
+}
+
+/*
+ * call-seq:
+ * ary.frozen? -> true or false
+ *
+ * Return +true+ if this array is frozen (or temporarily frozen
+ * while being sorted). See also Object#frozen?
+ */
+
+static VALUE
+rb_ary_frozen_p(VALUE ary)
+{
+ if (OBJ_FROZEN(ary)) 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 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;
}
+static VALUE
+empty_ary_alloc(VALUE klass)
+{
+ if (RUBY_DTRACE_ARRAY_CREATE_ENABLED()) {
+ RUBY_DTRACE_ARRAY_CREATE(0, rb_sourcefile(), rb_sourceline());
+ }
+
+ return ary_alloc(klass);
+}
+
+static VALUE
+ary_new(VALUE klass, long capa)
+{
+ VALUE ary,*ptr;
+
+ if (capa < 0) {
+ rb_raise(rb_eArgError, "negative array size (or size too big)");
+ }
+ if (capa > ARY_MAX_SIZE) {
+ rb_raise(rb_eArgError, "array size too big");
+ }
+
+ if (RUBY_DTRACE_ARRAY_CREATE_ENABLED()) {
+ RUBY_DTRACE_ARRAY_CREATE(capa, rb_sourcefile(), rb_sourceline());
+ }
+
+ if (capa > RARRAY_EMBED_LEN_MAX) {
+ ptr = ALLOC_N(VALUE, capa);
+ ary = ary_alloc(klass);
+ FL_UNSET_EMBED(ary);
+ ARY_SET_PTR(ary, ptr);
+ ARY_SET_CAPA(ary, capa);
+ ARY_SET_HEAP_LEN(ary, 0);
+ }
+ else {
+ ary = ary_alloc(klass);
+ }
+
+ return ary;
+}
+
VALUE
-ary_new()
+rb_ary_new_capa(long capa)
{
- return ary_new2(ARY_DEFAULT_SIZE);
+ return ary_new(rb_cArray, capa);
}
-#include <varargs.h>
+VALUE
+rb_ary_new(void)
+{
+ return rb_ary_new2(RARRAY_EMBED_LEN_MAX);
+}
VALUE
-ary_new3(n, va_alist)
- int n;
- va_dcl
+rb_ary_new_from_args(long n, ...)
{
va_list ar;
- struct RArray* ary;
- int i;
+ VALUE ary;
+ long i;
- if (n < 0) {
- IndexError("Negative number of items(%d)", n);
- }
- ary = (struct RArray*)ary_new2(n<ARY_DEFAULT_SIZE?ARY_DEFAULT_SIZE:n);
+ ary = rb_ary_new2(n);
- va_start(ar);
+ va_start(ar, n);
for (i=0; i<n; i++) {
- ary->ptr[i] = va_arg(ar, VALUE);
+ RARRAY_ASET(ary, i, va_arg(ar, VALUE));
}
va_end(ar);
- ary->len = n;
- return (VALUE)ary;
+ ARY_SET_LEN(ary, n);
+ return ary;
}
VALUE
-ary_new4(n, elts)
- int n;
- VALUE *elts;
+rb_ary_new_from_values(long n, const VALUE *elts)
{
- struct RArray* ary;
+ VALUE ary;
- ary = (struct RArray*)ary_new2(n);
- MEMCPY(ary->ptr, elts, VALUE, n);
- ary->len = n;
+ ary = rb_ary_new2(n);
+ if (n > 0 && elts) {
+ ary_memcpy(ary, 0, n, elts);
+ ARY_SET_LEN(ary, n);
+ }
- return (VALUE)ary;
+ return ary;
}
VALUE
-assoc_new(car, cdr)
- VALUE car, cdr;
+rb_ary_tmp_new(long capa)
{
- struct RArray* ary;
+ return ary_new(0, capa);
+}
- ary = (struct RArray*)ary_new2(2);
- ary->ptr[0] = car;
- ary->ptr[1] = cdr;
- ary->len = 2;
+void
+rb_ary_free(VALUE ary)
+{
+ if (ARY_OWNS_HEAP_P(ary)) {
+ ruby_sized_xfree((void *)ARY_HEAP_PTR(ary), ARY_HEAP_SIZE(ary));
+ }
+}
- return (VALUE)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); /* keep shared ary as non-WB-protected */
+ 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_s_new(argc, argv, class)
- int argc;
- VALUE *argv;
- VALUE class;
+ary_make_substitution(VALUE ary)
{
- VALUE size;
- NEWOBJ(ary, struct RArray);
- OBJSETUP(ary, class, T_ARRAY);
+ long len = RARRAY_LEN(ary);
- rb_scan_args(argc, argv, "01", &size);
- ary->len = 0;
- ary->capa = NIL_P(size)?ARY_DEFAULT_SIZE:NUM2INT(size);
- ary->ptr = ALLOC_N(VALUE, ary->capa);
- memclear(ary->ptr, ary->capa);
+ 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));
+ }
+}
- return (VALUE)ary;
+VALUE
+rb_assoc_new(VALUE car, VALUE cdr)
+{
+ return rb_ary_new3(2, car, cdr);
}
static VALUE
-ary_s_create(argc, argv, class)
- int argc;
- VALUE *argv;
- VALUE class;
+to_ary(VALUE ary)
{
- NEWOBJ(ary, struct RArray);
- OBJSETUP(ary, class, T_ARRAY);
+ return rb_convert_type(ary, T_ARRAY, "Array", "to_ary");
+}
+
+VALUE
+rb_check_array_type(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
+ *
+ */
- ary->len = argc;
- ary->capa = argc;
+static VALUE
+rb_ary_s_try_convert(VALUE dummy, VALUE ary)
+{
+ return rb_check_array_type(ary);
+}
+
+/*
+ * call-seq:
+ * 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 +obj+ are sent, an array is created with
+ * +size+ copies of +obj+. Take notice that all elements will reference the
+ * same object +obj+.
+ *
+ * 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:
+ *
+ * a = Array.new(2, Hash.new)
+ * # => [{}, {}]
+ *
+ * a[0]['cat'] = 'feline'
+ * a # => [{"cat"=>"feline"}, {"cat"=>"feline"}]
+ *
+ * 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 = Array.new(2) { Hash.new }
+ * a[0]['cat'] = 'feline'
+ * a # => [{"cat"=>"feline"}, {}]
+ *
+ */
+
+static VALUE
+rb_ary_initialize(int argc, VALUE *argv, VALUE ary)
+{
+ long len;
+ VALUE size, val;
+
+ rb_ary_modify(ary);
if (argc == 0) {
- ary->ptr = 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_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)) {
+ rb_ary_replace(ary, val);
+ return ary;
+ }
+ }
+
+ len = NUM2LONG(size);
+ if (len < 0) {
+ rb_raise(rb_eArgError, "negative array size");
+ }
+ if (len > ARY_MAX_SIZE) {
+ rb_raise(rb_eArgError, "array size too big");
+ }
+ rb_ary_modify(ary);
+ ary_resize_capa(ary, len);
+ if (rb_block_given_p()) {
+ long i;
+
+ if (argc == 2) {
+ rb_warn("block supersedes default value argument");
+ }
+ for (i=0; i<len; i++) {
+ rb_ary_store(ary, i, rb_yield(LONG2NUM(i)));
+ ARY_SET_LEN(ary, i + 1);
+ }
}
else {
- ary->ptr = ALLOC_N(VALUE, argc);
- MEMCPY(ary->ptr, argv, VALUE, argc);
+ ary_memfill(ary, 0, len, val);
+ ARY_SET_LEN(ary, len);
}
+ return ary;
+}
- return (VALUE)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/]
+ */
+
+static VALUE
+rb_ary_s_create(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);
+ }
+
+ return ary;
}
-static void
-astore(ary, idx, val)
- struct RArray *ary;
- int idx;
- VALUE val;
+void
+rb_ary_store(VALUE ary, long idx, VALUE val)
{
+ long len = RARRAY_LEN(ary);
+
if (idx < 0) {
- IndexError("negative index for array");
+ idx += len;
+ if (idx < 0) {
+ rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
+ idx - len, -len);
+ }
+ }
+ else if (idx >= ARY_MAX_SIZE) {
+ rb_raise(rb_eIndexError, "index %ld too big", idx);
}
- if (idx >= ary->capa) {
- ary->capa = idx + ARY_DEFAULT_SIZE;
- REALLOC_N(ary->ptr, VALUE, ary->capa);
+ rb_ary_modify(ary);
+ if (idx >= ARY_CAPA(ary)) {
+ ary_double_capa(ary, idx);
}
- if (idx > ary->len) {
- memclear(ary->ptr+ary->len, idx-ary->len+1);
+ if (idx > len) {
+ ary_mem_clear(ary, len, idx - len + 1);
}
- if (idx >= ary->len) {
- ary->len = idx + 1;
+ if (idx >= len) {
+ ARY_SET_LEN(ary, idx + 1);
}
- ary->ptr[idx] = val;
+ RARRAY_ASET(ary, idx, val);
}
-VALUE
-ary_push(ary, item)
- struct RArray *ary;
- VALUE item;
+static VALUE
+ary_make_partial(VALUE ary, VALUE klass, long offset, long len)
{
- astore(ary, ary->len, item);
- return (VALUE)ary;
+ assert(offset >= 0);
+ assert(len >= 0);
+ assert(offset+len <= RARRAY_LEN(ary));
+
+ 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;
+ }
+ 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;
+ }
}
static VALUE
-ary_push_method(argc, argv, ary)
- int argc;
- VALUE *argv;
- struct RArray *ary;
+ary_make_shared_copy(VALUE ary)
{
- while (argc--) {
- astore(ary, ary->len, *argv++);
- }
- return (VALUE)ary;
+ return ary_make_partial(ary, rb_obj_class(ary), 0, RARRAY_LEN(ary));
}
-VALUE
-ary_pop(ary)
- struct RArray *ary;
+enum ary_take_pos_flags
{
- if (ary->len == 0) return Qnil;
- if (ary->len * 10 < ary->capa && ary->capa > ARY_DEFAULT_SIZE) {
- ary->capa = ary->len * 2;
- REALLOC_N(ary->ptr, VALUE, ary->capa);
+ ARY_TAKE_FIRST = 0,
+ ARY_TAKE_LAST = 1
+};
+
+static VALUE
+ary_take_first_or_last(int argc, 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 (last) {
+ offset = len - n;
}
- return ary->ptr[--ary->len];
+ return ary_make_partial(ary, rb_cArray, offset, n);
}
+/*
+ * call-seq:
+ * ary << obj -> ary
+ *
+ * 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.
+ *
+ * [ 1, 2 ] << "c" << "d" << [ 3, 4 ]
+ * #=> [ 1, 2, "c", "d", [ 3, 4 ] ]
+ *
+ */
+
VALUE
-ary_shift(ary)
- struct RArray *ary;
+rb_ary_push(VALUE ary, VALUE item)
{
- VALUE top;
+ long idx = RARRAY_LEN(ary);
- if (ary->len == 0) return Qnil;
+ ary_ensure_room_for_push(ary, 1);
+ RARRAY_ASET(ary, idx, item);
+ ARY_SET_LEN(ary, idx + 1);
+ return ary;
+}
- top = ary->ptr[0];
- ary->len--;
+VALUE
+rb_ary_cat(VALUE ary, const VALUE *ptr, long len)
+{
+ long oldlen = RARRAY_LEN(ary);
- /* sliding items */
- MEMMOVE(ary->ptr, ary->ptr+1, VALUE, ary->len);
- if (ary->len * 10 < ary->capa && ary->capa > ARY_DEFAULT_SIZE) {
- ary->capa = ary->len * 2;
- REALLOC_N(ary->ptr, VALUE, ary->capa);
- }
+ ary_ensure_room_for_push(ary, len);
+ ary_memcpy(ary, oldlen, len, ptr);
+ ARY_SET_LEN(ary, oldlen + len);
+ return ary;
+}
- return top;
+/*
+ * call-seq:
+ * ary.push(obj, ... ) -> ary
+ *
+ * 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.
+ *
+ * a = [ "a", "b", "c" ]
+ * 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
-ary_unshift(ary, item)
- struct RArray *ary;
- int item;
+rb_ary_pop(VALUE ary)
{
- if (ary->len >= ary->capa) {
- ary->capa+=ARY_DEFAULT_SIZE;
- REALLOC_N(ary->ptr, VALUE, ary->capa);
+ 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);
}
-
- /* sliding items */
- MEMMOVE(ary->ptr+1, ary->ptr, VALUE, ary->len);
-
- ary->len++;
- return ary->ptr[0] = item;
+ --n;
+ ARY_SET_LEN(ary, n);
+ return RARRAY_AREF(ary, n);
}
+/*
+ * 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"]
+ */
+
static VALUE
-ary_unshift_method(argc, argv, ary)
- int argc;
- VALUE *argv;
- VALUE ary;
+rb_ary_pop_m(int argc, VALUE *argv, VALUE ary)
{
- while (argc--) {
- ary_unshift(ary, argv[argc]);
+ VALUE result;
+
+ if (argc == 0) {
+ return rb_ary_pop(ary);
}
- return (VALUE)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;
}
VALUE
-ary_entry(ary, offset)
- struct RArray *ary;
- int offset;
+rb_ary_shift(VALUE ary)
{
- if (ary->len == 0) return Qnil;
+ 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 (offset < 0) {
- offset = ary->len + offset;
+ RARRAY_ASET(ary, 0, Qnil);
+ ary_make_shared(ary);
}
- if (offset < 0 || ary->len <= offset) {
- return Qnil;
+ else if (ARY_SHARED_OCCUPIED(ARY_SHARED(ary))) {
+ RARRAY_ASET(ary, 0, Qnil);
}
+ ARY_INCREASE_PTR(ary, 1); /* shift ptr */
+ ARY_INCREASE_LEN(ary, -1);
- return ary->ptr[offset];
+ 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
+ * 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"]
+ */
+
static VALUE
-ary_subseq(ary, beg, len)
- struct RArray *ary;
- int beg, len;
+rb_ary_shift_m(int argc, VALUE *argv, VALUE ary)
{
- struct RArray *ary2;
+ VALUE result;
+ long n;
- if (beg < 0) {
- beg = ary->len + beg;
- if (beg < 0) beg = 0;
+ if (argc == 0) {
+ return rb_ary_shift(ary);
}
- if (len < 0) {
- IndexError("negative length %d", ary->len);
+
+ 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))) {
+ ary_mem_clear(ary, 0, n);
+ }
+ ARY_INCREASE_PTR(ary, n);
}
- if (len == 0) {
- return ary_new2(0);
+ else {
+ RARRAY_PTR_USE(ary, ptr, {
+ MEMMOVE(ptr, ptr + n, VALUE, RARRAY_LEN(ary)-n);
+ }); /* WB: no new reference */
}
- if (beg + len > ary->len) {
- len = ary->len - beg;
+ ARY_INCREASE_LEN(ary, -n);
+
+ return result;
+}
+
+static void
+ary_ensure_room_for_unshift(VALUE ary, int argc)
+{
+ long len = RARRAY_LEN(ary);
+ long new_len = len + argc;
+ long capa;
+ const VALUE *head, *sharedp;
+
+ 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;
+ }
}
- ary2 = (struct RArray*)ary_new2(len);
- MEMCPY(ary2->ptr, ary->ptr+beg, VALUE, len);
- ary2->len = len;
+ rb_ary_modify(ary);
+ capa = ARY_CAPA(ary);
+ if (capa - (capa >> 6) <= new_len) {
+ ary_double_capa(ary, new_len);
+ }
- return (VALUE)ary2;
+ /* 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);
+
+ 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);
+ }
+ else {
+ /* sliding items */
+ RARRAY_PTR_USE(ary, ptr, {
+ MEMMOVE(ptr + argc, ptr, VALUE, len);
+ });
+ }
}
+/*
+ * 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.
+ *
+ * a = [ "b", "c", "d" ]
+ * a.unshift("a") #=> ["a", "b", "c", "d"]
+ * a.unshift(1, 2) #=> [ 1, 2, "a", "b", "c", "d"]
+ */
+
static VALUE
-beg_len(range, begp, lenp, len)
- VALUE range;
- int *begp, *lenp;
- int len;
+rb_ary_unshift_m(int argc, VALUE *argv, VALUE ary)
{
- int beg, end;
+ long len = RARRAY_LEN(ary);
+
+ if (argc == 0) {
+ rb_ary_modify_check(ary);
+ return ary;
+ }
- if (!range_beg_end(range, &beg, &end)) return FALSE;
+ ary_ensure_room_for_unshift(ary, argc);
+ ary_memcpy(ary, 0, argc, argv);
+ ARY_SET_LEN(ary, len + argc);
+ return ary;
+}
- if ((beg > 0 && end > 0 || beg < 0 && end < 0) && beg > end) {
- IndexError("end smaller than beg [%d..%d]", beg, end);
+VALUE
+rb_ary_unshift(VALUE ary, VALUE item)
+{
+ return rb_ary_unshift_m(1,&item,ary);
+}
+
+/* faster version - use this if you don't need to treat negative offset */
+static inline VALUE
+rb_ary_elt(VALUE ary, long offset)
+{
+ long len = RARRAY_LEN(ary);
+ if (len == 0) return Qnil;
+ if (offset < 0 || len <= offset) {
+ return Qnil;
}
+ return RARRAY_AREF(ary, offset);
+}
- if (beg < 0) {
- beg = len + beg;
- if (beg < 0) beg = 0;
+VALUE
+rb_ary_entry(VALUE ary, long offset)
+{
+ if (offset < 0) {
+ offset += RARRAY_LEN(ary);
}
- *begp = beg;
- if (beg > len) {
- *lenp = 0;
+ return rb_ary_elt(ary, offset);
+}
+
+VALUE
+rb_ary_subseq(VALUE ary, long beg, long len)
+{
+ VALUE klass;
+ long alen = RARRAY_LEN(ary);
+
+ if (beg > alen) return Qnil;
+ if (beg < 0 || len < 0) return Qnil;
+
+ if (alen < len || alen < beg + len) {
+ len = alen - beg;
}
- else {
- if (end < 0) {
- end = len + end;
- if (end < 0) end = -1;
- }
- if (end > len) end = len;
- if (beg > end) {
- *lenp = 0;
- }
- else {
- *lenp = end - beg +1;
+ klass = rb_obj_class(ary);
+ if (len == 0) return ary_new(klass, 0);
+
+ return ary_make_partial(ary, klass, beg, len);
+}
+
+/*
+ * 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.
+ *
+ * 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"
+ * a[6] #=> nil
+ * a[1, 2] #=> [ "b", "c" ]
+ * a[1..3] #=> [ "b", "c", "d" ]
+ * a[4..7] #=> [ "e" ]
+ * a[6..10] #=> nil
+ * 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, VALUE *argv, VALUE ary)
+{
+ VALUE arg;
+ long beg, len;
+
+ if (argc == 2) {
+ beg = NUM2LONG(argv[0]);
+ len = NUM2LONG(argv[1]);
+ if (beg < 0) {
+ beg += RARRAY_LEN(ary);
}
+ return rb_ary_subseq(ary, beg, len);
+ }
+ if (argc != 1) {
+ rb_scan_args(argc, argv, "11", NULL, NULL);
+ }
+ arg = argv[0];
+ /* special case - speeding up */
+ if (FIXNUM_P(arg)) {
+ return rb_ary_entry(ary, FIX2LONG(arg));
+ }
+ /* check if idx is Range */
+ switch (rb_range_beg_len(arg, &beg, &len, RARRAY_LEN(ary), 0)) {
+ case Qfalse:
+ break;
+ case Qnil:
+ return Qnil;
+ default:
+ return rb_ary_subseq(ary, beg, len);
}
- return TRUE;
+ return rb_ary_entry(ary, NUM2LONG(arg));
}
+/*
+ * call-seq:
+ * ary.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#[].
+ *
+ * a = [ "a", "b", "c", "d", "e" ]
+ * a.at(0) #=> "a"
+ * a.at(-1) #=> "e"
+ */
+
static VALUE
-ary_aref(argc, argv, ary)
- int argc;
- VALUE *argv;
- struct RArray *ary;
+rb_ary_at(VALUE ary, VALUE pos)
{
- VALUE arg1, arg2;
- int beg, len;
+ return rb_ary_entry(ary, NUM2LONG(pos));
+}
- if (rb_scan_args(argc, argv, "11", &arg1, &arg2) == 2) {
- beg = NUM2INT(arg1);
- len = NUM2INT(arg2);
- if (len <= 0) {
- return ary_new();
- }
- return ary_subseq(ary, beg, len);
+/*
+ * call-seq:
+ * ary.first -> obj or nil
+ * ary.first(n) -> new_ary
+ *
+ * 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.
+ *
+ * a = [ "q", "r", "s", "t" ]
+ * a.first #=> "q"
+ * a.first(2) #=> ["q", "r"]
+ */
+
+static VALUE
+rb_ary_first(int argc, VALUE *argv, VALUE ary)
+{
+ if (argc == 0) {
+ if (RARRAY_LEN(ary) == 0) return Qnil;
+ return RARRAY_AREF(ary, 0);
}
+ else {
+ return ary_take_first_or_last(argc, argv, ary, ARY_TAKE_FIRST);
+ }
+}
- /* special case - speeding up */
- if (FIXNUM_P(arg1)) {
- return ary_entry(ary, FIX2INT(arg1));
+/*
+ * 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"]
+ */
+
+VALUE
+rb_ary_last(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);
}
else {
- /* check if idx is Range */
- if (beg_len(arg1, &beg, &len, ary->len)) {
- return ary_subseq(ary, beg, len);
- }
+ return ary_take_first_or_last(argc, argv, ary, ARY_TAKE_LAST);
+ }
+}
+
+/*
+ * 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.
+ *
+ * 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"
+ */
+
+static VALUE
+rb_ary_fetch(int argc, VALUE *argv, VALUE ary)
+{
+ VALUE pos, ifnone;
+ long block_given;
+ long idx;
+
+ rb_scan_args(argc, argv, "11", &pos, &ifnone);
+ block_given = rb_block_given_p();
+ if (block_given && argc == 2) {
+ rb_warn("block supersedes default value argument");
+ }
+ idx = NUM2LONG(pos);
+
+ if (idx < 0) {
+ idx += RARRAY_LEN(ary);
}
- if (TYPE(arg1) == T_BIGNUM) {
- IndexError("index too big");
+ if (idx < 0 || RARRAY_LEN(ary) <= 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));
+ }
+ return ifnone;
}
- return ary_entry(ary, NUM2INT(arg1));
+ return RARRAY_AREF(ary, 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.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.index("b") #=> 1
+ * a.index("z") #=> nil
+ * a.index { |x| x == "b" } #=> 1
+ */
+
static VALUE
-ary_index(ary, val)
- struct RArray *ary;
- VALUE val;
+rb_ary_index(int argc, VALUE *argv, VALUE ary)
{
- int i;
+ const VALUE *ptr;
+ VALUE val;
+ long i, len;
- for (i=0; i<ary->len; i++) {
- if (rb_equal(ary->ptr[i], val))
- return INT2FIX(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:
+ 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.
+ *
+ * a = [ "a", "b", "b", "b", "c" ]
+ * a.rindex("b") #=> 3
+ * a.rindex("z") #=> nil
+ * a.rindex { |x| x == "b" } #=> 3
+ */
+
static VALUE
-ary_indexes(ary, args)
- struct RArray *ary, *args;
+rb_ary_rindex(int argc, VALUE *argv, VALUE ary)
{
- VALUE *p, *pend;
- VALUE new_ary;
- int i = 0;
+ const VALUE *ptr;
+ VALUE val;
+ long i = RARRAY_LEN(ary), len;
- if (!args || NIL_P(args)) {
- return ary_new2(0);
+ 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:
+ continue;
+ }
+ if (i > (len = RARRAY_LEN(ary))) {
+ i = len;
+ }
+ ptr = RARRAY_CONST_PTR(ary);
}
+ return Qnil;
+}
- new_ary = ary_new2(args->len);
+VALUE
+rb_ary_to_ary(VALUE obj)
+{
+ VALUE tmp = rb_check_array_type(obj);
- p = args->ptr; pend = p + args->len;
- while (p < pend) {
- astore(new_ary, i++, ary_entry(ary, NUM2INT(*p)));
- p++;
- }
- return new_ary;
+ if (!NIL_P(tmp)) return tmp;
+ return rb_ary_new3(1, obj);
}
static void
-ary_replace(ary, beg, len, rpl)
- struct RArray *ary, *rpl;
- int beg, len;
+rb_ary_splice(VALUE ary, long beg, long len, VALUE rpl)
{
- if (TYPE(rpl) != T_ARRAY) {
- rpl = (struct RArray*)rb_to_a(rpl);
- }
+ long rlen;
+ long olen;
+
+ if (len < 0) rb_raise(rb_eIndexError, "negative length (%ld)", len);
+ olen = RARRAY_LEN(ary);
if (beg < 0) {
- beg = ary->len + beg;
- if (beg < 0) beg = 0;
+ beg += olen;
+ if (beg < 0) {
+ rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
+ beg - olen, -olen);
+ }
}
- if (beg >= ary->len) {
- len = beg + rpl->len;
- if (len >= ary->capa) {
- ary->capa=len;
- REALLOC_N(ary->ptr, VALUE, ary->capa);
+ if (olen < len || olen < beg + len) {
+ len = olen - beg;
+ }
+
+ if (rpl == Qundef) {
+ 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 */
+ }
+ if (beg >= olen) {
+ if (beg > ARY_MAX_SIZE - rlen) {
+ rb_raise(rb_eIndexError, "index %ld too big", beg);
}
- memclear(ary->ptr+ary->len, beg-ary->len);
- MEMCPY(ary->ptr+beg, rpl->ptr, VALUE, rpl->len);
- ary->len = len;
+ ary_ensure_room_for_push(ary, rlen-len); /* len is 0 or negative */
+ len = beg + rlen;
+ ary_mem_clear(ary, olen, beg - olen);
+ if (rlen > 0) {
+ ary_memcpy(ary, beg, rlen, RARRAY_CONST_PTR(rpl));
+ }
+ ARY_SET_LEN(ary, len);
}
else {
- int alen;
+ long alen;
- if (beg + len > ary->len) {
- len = ary->len - beg;
- }
- if (len < 0) {
- IndexError("negative length %d", ary->len);
+ rb_ary_modify(ary);
+ alen = olen + rlen - len;
+ if (alen >= ARY_CAPA(ary)) {
+ ary_double_capa(ary, alen);
}
- alen = ary->len + rpl->len - len;
- if (alen >= ary->capa) {
- ary->capa=alen;
- REALLOC_N(ary->ptr, VALUE, ary->capa);
+ if (len != rlen) {
+ RARRAY_PTR_USE(ary, ptr,
+ MEMMOVE(ptr + beg + rlen, ptr + beg + len,
+ VALUE, olen - (beg + len)));
+ ARY_SET_LEN(ary, 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);
+}
- if (len != RARRAY(rpl)->len) {
- MEMMOVE(ary->ptr+beg+rpl->len, ary->ptr+beg+len,
- VALUE, ary->len-(beg+len));
- ary->len = alen;
+/*!
+ * 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);
}
- MEMCPY(ary->ptr+beg, rpl->ptr, VALUE, rpl->len);
+ 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.
+ *
+ * a = Array.new
+ * a[4] = "4"; #=> [nil, nil, nil, nil, "4"]
+ * a[0, 3] = [ 'a', 'b', 'c' ] #=> ["a", "b", "c", nil, "4"]
+ * a[1..2] = [ 1, 2 ] #=> ["a", 1, 2, nil, "4"]
+ * 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"]
+ */
+
static VALUE
-ary_aset(argc, argv, ary)
- int argc;
- VALUE *argv;
- struct RArray *ary;
+rb_ary_aset(int argc, VALUE *argv, VALUE ary)
{
- VALUE arg1, arg2;
- struct RArray *arg3;
- int offset;
- int beg, len;
-
- if (rb_scan_args(argc, argv, "21", &arg1, &arg2, &arg3) == 3) {
- beg = NUM2INT(arg1);
- len = NUM2INT(arg2);
- ary_replace(ary, beg, len, arg3);
- return (VALUE)arg3;
- }
- else if (FIXNUM_P(arg1)) {
- offset = FIX2INT(arg1);
+ 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]);
+ return argv[2];
+ }
+ rb_check_arity(argc, 2, 2);
+ rb_ary_modify_check(ary);
+ if (FIXNUM_P(argv[0])) {
+ offset = FIX2LONG(argv[0]);
goto fixnum;
}
- else if (beg_len(arg1, &beg, &len, ary->len)) {
+ if (rb_range_beg_len(argv[0], &beg, &len, RARRAY_LEN(ary), 1)) {
/* check if idx is Range */
- ary_replace(ary, beg, len, arg2);
- return arg2;
- }
- if (TYPE(arg1) == T_BIGNUM) {
- IndexError("index too big");
+ rb_ary_splice(ary, beg, len, argv[1]);
+ return argv[1];
}
- offset = NUM2INT(arg1);
- fixnum:
- if (offset < 0) {
- offset = ary->len + offset;
+ offset = NUM2LONG(argv[0]);
+fixnum:
+ rb_ary_store(ary, offset, argv[1]);
+ return argv[1];
+}
+
+/*
+ * 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.
+ *
+ * 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)
+{
+ long pos;
+
+ rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
+ rb_ary_modify_check(ary);
+ if (argc == 1) return ary;
+ pos = NUM2LONG(argv[0]);
+ if (pos == -1) {
+ pos = RARRAY_LEN(ary);
+ }
+ if (pos < 0) {
+ pos++;
}
- astore(ary, offset, arg2);
- return arg2;
+ rb_ary_splice(ary, pos, 0, rb_ary_new4(argc - 1, argv + 1));
+ return ary;
}
static VALUE
-ary_each(ary)
- struct RArray *ary;
+rb_ary_length(VALUE ary);
+
+static VALUE
+ary_enum_length(VALUE ary, VALUE args, VALUE eobj)
{
- int i;
+ 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.
+ *
+ * An Enumerator is returned if no block is given.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.each {|x| print x, " -- " }
+ *
+ * produces:
+ *
+ * a -- b -- c --
+ */
- for (i=0; i<ary->len; i++) {
- rb_yield(ary->ptr[i]);
+VALUE
+rb_ary_each(VALUE array)
+{
+ long i;
+ volatile VALUE ary = array;
+
+ RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ rb_yield(RARRAY_AREF(ary, i));
}
- return Qnil;
+ 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.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.each_index {|x| print x, " -- " }
+ *
+ * produces:
+ *
+ * 0 -- 1 -- 2 --
+ */
+
static VALUE
-ary_each_index(ary)
- struct RArray *ary;
+rb_ary_each_index(VALUE ary)
{
- int i;
+ long i;
+ RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
- for (i=0; i<ary->len; i++) {
- rb_yield(INT2FIX(i));
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ rb_yield(LONG2NUM(i));
}
- return Qnil;
+ return ary;
}
+/*
+ * call-seq:
+ * ary.reverse_each { |item| block } -> ary
+ * ary.reverse_each -> Enumerator
+ *
+ * Same as Array#each, but traverses +self+ in reverse order.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.reverse_each {|x| print x, " " }
+ *
+ * produces:
+ *
+ * c b a
+ */
+
static VALUE
-ary_length(ary)
- struct RArray *ary;
+rb_ary_reverse_each(VALUE ary)
{
- return INT2FIX(ary->len);
+ long 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;
+ }
+ }
+ return ary;
}
+/*
+ * call-seq:
+ * ary.length -> int
+ *
+ * Returns the number of elements in +self+. May be zero.
+ *
+ * [ 1, 2, 3, 4, 5 ].length #=> 5
+ * [].length #=> 0
+ */
+
static VALUE
-ary_empty_p(ary)
- struct RArray *ary;
+rb_ary_length(VALUE ary)
{
- if (ary->len == 0)
- return TRUE;
- return FALSE;
+ long len = RARRAY_LEN(ary);
+ return LONG2NUM(len);
}
+/*
+ * call-seq:
+ * ary.empty? -> true or false
+ *
+ * Returns +true+ if +self+ contains no elements.
+ *
+ * [].empty? #=> true
+ */
+
static VALUE
-ary_clone(ary)
- struct RArray *ary;
+rb_ary_empty_p(VALUE ary)
{
- VALUE ary2 = ary_new2(ary->len);
+ if (RARRAY_LEN(ary) == 0)
+ return Qtrue;
+ return Qfalse;
+}
- CLONESETUP(ary2, ary);
- MEMCPY(RARRAY(ary2)->ptr, ary->ptr, VALUE, ary->len);
- RARRAY(ary2)->len = ary->len;
- return ary2;
+VALUE
+rb_ary_dup(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
+rb_ary_resurrect(VALUE ary)
+{
+ return rb_ary_new4(RARRAY_LEN(ary), RARRAY_CONST_PTR(ary));
+}
+
+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)
+{
+ 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);
+ }
}
-extern VALUE OFS;
+static void
+ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result, int *first)
+{
+ VALUE val, tmp;
+
+ for (; i<RARRAY_LEN(ary); i++) {
+ if (i > 0 && !NIL_P(sep))
+ rb_str_buf_append(result, sep);
+
+ 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");
+ }
+ else {
+ VALUE args[4];
+
+ args[0] = val;
+ 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_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
-ary_join(ary, sep)
- struct RArray *ary;
- struct RString *sep;
+rb_ary_join(VALUE ary, VALUE sep)
{
- int i;
- VALUE result, tmp;
- if (ary->len == 0) return str_new(0, 0);
+ long len = 1, i;
+ int taint = FALSE;
+ VALUE val, tmp, result;
- if (TYPE(ary->ptr[0]) == T_STRING)
- result = str_dup(ary->ptr[0]);
- else
- result = obj_as_string(ary->ptr[0]);
+ if (RARRAY_LEN(ary) == 0) return rb_usascii_str_new(0, 0);
+ if (OBJ_TAINTED(ary)) taint = TRUE;
- for (i=1; i<ary->len; i++) {
- tmp = ary->ptr[i];
- switch (TYPE(tmp)) {
- case T_STRING:
- break;
- case T_ARRAY:
- tmp = ary_join(tmp, sep);
- break;
- default:
- tmp = obj_as_string(tmp);
+ 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;
}
- if (!NIL_P(sep)) str_cat(result, sep->ptr, sep->len);
- str_cat(result, RSTRING(tmp)->ptr, RSTRING(tmp)->len);
+
+ len += RSTRING_LEN(tmp);
}
+ 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
+ *
+ * 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", "b", "c" ].join #=> "abc"
+ * [ "a", "b", "c" ].join("-") #=> "a-b-c"
+ */
+
static VALUE
-ary_join_method(argc, argv, ary)
- int argc;
- VALUE *argv;
- struct RArray *ary;
+rb_ary_join_m(int argc, VALUE *argv, VALUE ary)
{
VALUE sep;
rb_scan_args(argc, argv, "01", &sep);
- if (NIL_P(sep)) sep = OFS;
+ if (NIL_P(sep)) sep = rb_output_fs;
- if (!NIL_P(sep))
- Check_Type(sep, T_STRING);
-
- return ary_join(ary, sep);
+ return rb_ary_join(ary, sep);
}
-VALUE
-ary_to_s(ary)
- VALUE ary;
+static VALUE
+inspect_ary(VALUE ary, VALUE dummy, int recur)
{
- VALUE str = ary_join(ary, OFS);
- if (NIL_P(str)) return str_new(0, 0);
+ 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+.
+ *
+ * [ "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
-ary_print_on(ary, port)
- struct RArray *ary;
- VALUE port;
+rb_ary_to_s(VALUE ary)
{
- int i;
+ return rb_ary_inspect(ary);
+}
+
+/*
+ * call-seq:
+ * ary.to_a -> ary
+ *
+ * Returns +self+.
+ *
+ * If called on a subclass of Array, converts the receiver to an Array object.
+ */
+
+static VALUE
+rb_ary_to_a(VALUE ary)
+{
+ if (rb_obj_class(ary) != rb_cArray) {
+ VALUE dup = rb_ary_new2(RARRAY_LEN(ary));
+ rb_ary_replace(dup, ary);
+ return dup;
+ }
+ return ary;
+}
+
+/*
+ * 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}
+ */
- for (i=0; i<ary->len; i++) {
- if (!NIL_P(OFS) && i>0) {
- io_write(port, OFS);
+static VALUE
+rb_ary_to_h(VALUE ary)
+{
+ long i;
+ VALUE hash = rb_hash_new();
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ VALUE key_value_pair = rb_check_array_type(rb_ary_elt(ary, i));
+ if (NIL_P(key_value_pair)) {
+ rb_raise(rb_eTypeError, "wrong element type %s at %ld (expected array)",
+ rb_builtin_class_name(rb_ary_elt(ary, i)), i);
}
- io_write(port, ary->ptr[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));
+ }
+ rb_hash_aset(hash, RARRAY_AREF(key_value_pair, 0), RARRAY_AREF(key_value_pair, 1));
}
- return port;
+ return hash;
}
+/*
+ * call-seq:
+ * ary.to_ary -> ary
+ *
+ * Returns +self+.
+ */
+
static VALUE
-ary_inspect(ary)
- struct RArray *ary;
+rb_ary_to_ary_m(VALUE ary)
{
- int i, len;
- VALUE s, str;
- char *p;
+ return ary;
+}
- if (ary->len == 0) return str_new2("[]");
- str = str_new2("[");
- len = 1;
+static void
+ary_reverse(VALUE *p1, VALUE *p2)
+{
+ while (p1 < p2) {
+ VALUE tmp = *p1;
+ *p1++ = *p2;
+ *p2-- = tmp;
+ }
+}
- for (i=0; i<ary->len; i++) {
- s = rb_inspect(ary->ptr[i]);
- if (i > 0) str_cat(str, ", ", 2);
- str_cat(str, RSTRING(s)->ptr, RSTRING(s)->len);
- len += RSTRING(s)->len + 2;
+VALUE
+rb_ary_reverse(VALUE ary)
+{
+ VALUE *p2;
+ long len = RARRAY_LEN(ary);
+
+ 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 */
}
- str_cat(str, "]", 1);
+ return ary;
+}
- return str;
+/*
+ * call-seq:
+ * ary.reverse! -> ary
+ *
+ * Reverses +self+ in place.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.reverse! #=> ["c", "b", "a"]
+ * a #=> ["c", "b", "a"]
+ */
+
+static VALUE
+rb_ary_reverse_bang(VALUE ary)
+{
+ return rb_ary_reverse(ary);
}
+/*
+ * 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]
+ */
+
static VALUE
-ary_to_a(ary)
- VALUE ary;
+rb_ary_reverse_m(VALUE ary)
{
- return 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);
+ }
+ ARY_SET_LEN(dup, RARRAY_LEN(ary));
+ return dup;
+}
+
+static inline long
+rotate_count(long cnt, long len)
+{
+ return (cnt < 0) ? (len - (~cnt % len) - 1) : (cnt % len);
}
VALUE
-rb_to_a(obj)
- VALUE obj;
+rb_ary_rotate(VALUE ary, long cnt)
{
- if (TYPE(obj) == T_ARRAY) return obj;
- obj = rb_funcall(obj, rb_intern("to_a"), 0);
- if (TYPE(obj) != T_ARRAY) {
- Bug("`to_a' did not return Array");
+ rb_ary_modify(ary);
+
+ if (cnt != 0) {
+ VALUE *ptr = RARRAY_PTR(ary);
+ long len = RARRAY_LEN(ary);
+
+ 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;
+ }
}
- return obj;
+
+ return Qnil;
}
-VALUE
-ary_reverse(ary)
- struct RArray *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"]
+ */
+
+static VALUE
+rb_ary_rotate_bang(int argc, VALUE *argv, VALUE ary)
{
- VALUE *p1, *p2;
- VALUE tmp;
+ long n = 1;
- p1 = ary->ptr;
- p2 = p1 + ary->len - 1; /* points last item */
+ 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;
+}
- while (p1 < p2) {
- tmp = *p1;
- *p1 = *p2;
- *p2 = tmp;
- p1++; p2--;
+/*
+ * 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"]
+ */
+
+static VALUE
+rb_ary_rotate_m(int argc, VALUE *argv, 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);
}
- return (VALUE)ary;
+ 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;
}
+struct ary_sort_data {
+ VALUE ary;
+ int opt_methods;
+ int opt_inited;
+};
+
+enum {
+ sort_opt_Fixnum,
+ sort_opt_String,
+ sort_optimizable_count
+};
+
+#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
-ary_reverse_method(ary)
- struct RArray *ary;
+sort_reentered(VALUE ary)
{
- return ary_reverse(ary_clone(ary));
+ if (RBASIC(ary)->klass) {
+ rb_raise(rb_eRuntimeError, "sort reentered");
+ }
+ return Qnil;
}
-static ID cmp;
-
static int
-sort_1(a, b)
- VALUE *a, *b;
+sort_1(const void *ap, const void *bp, void *dummy)
{
- VALUE retval = rb_yield(assoc_new(*a, *b));
- return NUM2INT(retval);
+ struct ary_sort_data *data = dummy;
+ VALUE retval = sort_reentered(data->ary);
+ VALUE a = *(const VALUE *)ap, b = *(const VALUE *)bp;
+ int n;
+
+ retval = rb_yield_values(2, a, b);
+ n = rb_cmpint(retval, a, b);
+ sort_reentered(data->ary);
+ return n;
}
static int
-sort_2(a, b)
- VALUE *a, *b;
+sort_2(const void *ap, const void *bp, void *dummy)
{
- VALUE retval;
+ struct ary_sort_data *data = dummy;
+ VALUE retval = sort_reentered(data->ary);
+ VALUE a = *(const VALUE *)ap, b = *(const VALUE *)bp;
+ int n;
- retval = rb_funcall(*a, cmp, 1, *b);
- return NUM2INT(retval);
+ if (FIXNUM_P(a) && FIXNUM_P(b) && SORT_OPTIMIZABLE(data, Fixnum)) {
+ 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);
+ }
+
+ retval = rb_funcallv(a, id_cmp, 1, &b);
+ n = rb_cmpint(retval, a, b);
+ sort_reentered(data->ary);
+
+ 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
+ * +-1+, when +a+ follows +b+, +0+ when +a+ and +b+ are equivalent, or ++1+
+ * if +b+ follows +a+.
+ *
+ * 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
-ary_sort_bang(ary)
- struct RArray *ary;
+rb_ary_sort_bang(VALUE ary)
{
- qsort(ary->ptr, ary->len, sizeof(VALUE), iterator_p()?sort_1:sort_2);
- return (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
+ * +-1+, when +a+ follows +b+, +0+ when +a+ and +b+ are equivalent, or ++1+
+ * if +b+ follows +a+.
+ *
+ *
+ * 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
-ary_sort(ary)
- VALUE ary;
+rb_ary_sort(VALUE ary)
{
- return ary_sort_bang(ary_clone(ary));
+ ary = rb_ary_dup(ary);
+ rb_ary_sort_bang(ary);
+ return 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
-ary_delete(ary, item)
- struct RArray *ary;
- VALUE item;
+rb_ary_bsearch(VALUE ary)
{
- int i1, i2;
+ 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 (FIX2INT(v) == 0) return val;
+ smaller = FIX2INT(v) < 0;
+ }
+ 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, INT2FIX(0))) {
+ case 0: return val;
+ case 1: smaller = 1; break;
+ case -1: smaller = 0;
+ }
+ }
+ else {
+ rb_raise(rb_eTypeError, "wrong argument type %s"
+ " (must be numeric, true, false or nil)",
+ rb_obj_classname(v));
+ }
+ if (smaller) {
+ high = mid;
+ }
+ else {
+ low = mid + 1;
+ }
+ }
+ if (low == RARRAY_LEN(ary)) return Qnil;
+ if (!satisfied) return Qnil;
+ return rb_ary_entry(ary, low);
+}
- for (i1 = i2 = 0; i1 < ary->len; i1++) {
- if (rb_equal(ary->ptr[i1], item)) continue;
- if (i1 != i2) {
- ary->ptr[i2] = ary->ptr[i1];
+
+static VALUE
+sort_by_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, dummy))
+{
+ return rb_yield(i);
+}
+
+/*
+ * 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.
+ *
+ */
+
+static VALUE
+rb_ary_sort_by_bang(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);
+ 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.
+ *
+ * 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"]
+ */
+
+static VALUE
+rb_ary_collect(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)));
+ }
+ 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.
+ *
+ * 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!"]
+ */
+
+static VALUE
+rb_ary_collect_bang(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)));
+ }
+ return ary;
+}
+
+VALUE
+rb_get_values_at(VALUE obj, long olen, int argc, VALUE *argv, VALUE (*func) (VALUE, long))
+{
+ VALUE result = rb_ary_new2(argc);
+ long beg, len, i, j;
+
+ for (i=0; i<argc; i++) {
+ if (FIXNUM_P(argv[i])) {
+ rb_ary_push(result, (*func)(obj, FIX2LONG(argv[i])));
+ continue;
}
- i2++;
+ /* 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));
+ }
+ if (beg + len > j)
+ rb_ary_resize(result, RARRAY_LEN(result) + (beg + len) - j);
+ continue;
+ }
+ rb_ary_push(result, (*func)(obj, NUM2LONG(argv[i])));
}
- if (ary->len == i2) {
- if (iterator_p()) rb_yield(Qnil);
+ 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.
+ *
+ * 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"]
+ */
+
+static VALUE
+rb_ary_values_at(int argc, VALUE *argv, VALUE ary)
+{
+ return rb_get_values_at(ary, RARRAY_LEN(ary), 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]
+ *
+ * a = %w{ a b c d e f }
+ * a.select { |v| v =~ /[aeiou]/ } #=> ["a", "e"]
+ *
+ * See also Enumerable#select.
+ */
+
+static VALUE
+rb_ary_select(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)))) {
+ rb_ary_push(result, rb_ary_elt(ary, i));
+ }
}
- else {
- ary->len = i2;
+ return result;
+}
+
+/*
+ * 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.
+ *
+ * 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)
+{
+ long i1, i2;
+
+ RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ rb_ary_modify(ary);
+ for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
+ VALUE v = RARRAY_AREF(ary, i1);
+ if (!RTEST(rb_yield(v))) continue;
+ if (i1 != i2) {
+ rb_ary_store(ary, i2, v);
+ }
+ i2++;
}
- return (VALUE)ary;
+ if (i1 == i2) return Qnil;
+ if (i2 < i1)
+ ARY_SET_LEN(ary, i2);
+ return ary;
+}
+
+/*
+ * 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!)
+ *
+ * a = [ "a", "b", "b", "b", "c" ]
+ * a.delete("b") #=> "b"
+ * a #=> ["a", "c"]
+ * a.delete("z") #=> nil
+ * a.delete("z") { "not found" } #=> "not found"
+ */
+
VALUE
-ary_delete_at(ary, at)
- struct RArray *ary;
- VALUE at;
+rb_ary_delete(VALUE ary, VALUE item)
{
- int i1, i2, pos;
- VALUE del = Qnil;
+ VALUE v = item;
+ long i1, i2;
- pos = NUM2INT(at);
- for (i1 = i2 = 0; i1 < ary->len; i1++) {
- if (i1 == pos) {
- del = ary->ptr[i1];
+ for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
+ VALUE e = RARRAY_AREF(ary, i1);
+
+ if (rb_equal(e, item)) {
+ v = e;
continue;
}
if (i1 != i2) {
- ary->ptr[i2] = ary->ptr[i1];
+ rb_ary_store(ary, i2, e);
}
i2++;
}
- ary->len = i2;
+ if (RARRAY_LEN(ary) == i2) {
+ if (rb_block_given_p()) {
+ return rb_yield(item);
+ }
+ return Qnil;
+ }
- return del;
+ ary_resize_smaller(ary, i2);
+
+ return v;
}
-static VALUE
-ary_delete_if(ary)
- struct RArray *ary;
+void
+rb_ary_delete_same(VALUE ary, VALUE item)
{
- int i1, i2;
+ long i1, i2;
+
+ for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
+ VALUE e = RARRAY_AREF(ary, i1);
- for (i1 = i2 = 0; i1 < ary->len; i1++) {
- if (rb_yield(ary->ptr[i1])) continue;
+ if (e == item) {
+ continue;
+ }
if (i1 != i2) {
- ary->ptr[i2] = ary->ptr[i1];
+ rb_ary_store(ary, i2, e);
}
i2++;
}
- ary->len = i2;
+ if (RARRAY_LEN(ary) == i2) {
+ return;
+ }
- return (VALUE)ary;
+ ary_resize_smaller(ary, i2);
+}
+
+VALUE
+rb_ary_delete_at(VALUE ary, long pos)
+{
+ long len = RARRAY_LEN(ary);
+ VALUE del;
+
+ if (pos >= len) return Qnil;
+ if (pos < 0) {
+ pos += len;
+ if (pos < 0) return Qnil;
+ }
+
+ 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);
+
+ 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"]
+ * a.delete_at(2) #=> "cat"
+ * a #=> ["ant", "bat", "dog"]
+ * a.delete_at(99) #=> nil
+ */
+
static VALUE
-ary_clear(ary)
- struct RArray *ary;
+rb_ary_delete_at_m(VALUE ary, VALUE pos)
{
- ary->len = 0;
- if (ARY_DEFAULT_SIZE*3 < ary->capa) {
- ary->capa = ARY_DEFAULT_SIZE * 2;
- REALLOC_N(ary->ptr, VALUE, ary->capa);
+ 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.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.slice!(1) #=> "b"
+ * a #=> ["a", "c"]
+ * a.slice!(-1) #=> "c"
+ * a #=> ["a"]
+ * a.slice!(100) #=> nil
+ * a #=> ["a"]
+ */
+
+static VALUE
+rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary)
+{
+ VALUE arg1, arg2;
+ long pos, len, orig_len;
+
+ rb_ary_modify_check(ary);
+ if (argc == 2) {
+ pos = NUM2LONG(argv[0]);
+ len = NUM2LONG(argv[1]);
+ delete_pos_len:
+ if (len < 0) return Qnil;
+ orig_len = RARRAY_LEN(ary);
+ if (pos < 0) {
+ pos += orig_len;
+ if (pos < 0) return Qnil;
+ }
+ 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);
+ return arg2;
}
- return (VALUE)ary;
+
+ 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;
+ }
+ }
+
+ return rb_ary_delete_at(ary, NUM2LONG(arg1));
}
static VALUE
-ary_fill(argc, argv, ary)
- int argc;
- VALUE *argv;
- struct RArray *ary;
+ary_reject(VALUE orig, VALUE result)
{
- VALUE item, arg1, arg2;
- int beg, len, end;
- VALUE *p, *pend;
+ long i;
- rb_scan_args(argc, argv, "12", &item, &arg1, &arg2);
- if (NIL_P(arg2) && beg_len(arg1, &beg, &len, ary->len)) {
- /* beg and len set already */
+ for (i = 0; i < RARRAY_LEN(orig); i++) {
+ VALUE v = RARRAY_AREF(orig, i);
+ if (!RTEST(rb_yield(v))) {
+ rb_ary_push(result, v);
+ }
}
- else {
- beg = NUM2INT(arg1);
- if (beg < 0) {
- beg = ary->len + beg;
- if (beg < 0) beg = 0;
+ return result;
+}
+
+static VALUE
+ary_reject_bang(VALUE ary)
+{
+ long i;
+ VALUE result = Qnil;
+
+ rb_ary_modify_check(ary);
+ for (i = 0; i < RARRAY_LEN(ary); ) {
+ VALUE v = RARRAY_AREF(ary, i);
+ if (RTEST(rb_yield(v))) {
+ rb_ary_delete_at(ary, i);
+ result = ary;
}
- if (arg2) {
- len = NUM2INT(arg2);
+ else {
+ i++;
+ }
+ }
+ return result;
+}
+
+/*
+ * call-seq:
+ * ary.reject! { |item| block } -> ary or nil
+ * ary.reject! -> Enumerator
+ *
+ * Equivalent to Array#delete_if, deleting elements from +self+ for which the
+ * block evaluates to +true+, but returns +nil+ if no changes were made.
+ *
+ * The array is changed instantly every time the block is called, not after
+ * the iteration is over.
+ *
+ * See also Enumerable#reject and Array#delete_if.
+ *
+ * If no block is given, an Enumerator is returned instead.
+ */
+
+static VALUE
+rb_ary_reject_bang(VALUE ary)
+{
+ RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ return ary_reject_bang(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+.
+ *
+ * See also Array#delete_if
+ *
+ * If no block is given, an Enumerator is returned instead.
+ */
+
+static VALUE
+rb_ary_reject(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;
+}
+
+/*
+ * 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]
+ */
+
+static VALUE
+rb_ary_delete_if(VALUE ary)
+{
+ RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ 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.
+ *
+ * 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]]
+ */
+
+static VALUE
+rb_ary_zip(int argc, VALUE *argv, VALUE ary)
+{
+ int i, j;
+ long len = RARRAY_LEN(ary);
+ VALUE result = Qnil;
+
+ for (i=0; i<argc; i++) {
+ argv[i] = take_items(argv[i], len);
+ }
+
+ if (rb_block_given_p()) {
+ int arity = rb_block_arity();
+
+ if (arity > 1 && argc+1 < 0x100) {
+ VALUE *tmp = ALLOCA_N(VALUE, 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);
+ }
}
else {
- len = ary->len - beg;
+ 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);
+ }
}
}
- end = beg + len;
- if (end > ary->len) {
- if (end >= ary->capa) {
- ary->capa=end;
- REALLOC_N(ary->ptr, VALUE, ary->capa);
+ else {
+ result = rb_ary_new_capa(len);
+
+ for (i=0; i<len; i++) {
+ VALUE tmp = rb_ary_new_capa(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_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.
+ *
+ * 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)
+{
+ long elen = -1, alen, i, j;
+ VALUE tmp, result = 0;
+
+ alen = RARRAY_LEN(ary);
+ 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);
+ result = rb_ary_new2(elen);
+ for (j=0; j<elen; j++) {
+ rb_ary_store(result, j, rb_ary_new2(alen));
+ }
}
- if (beg > ary->len) {
- memclear(ary->ptr+ary->len, end-ary->len);
+ else if (elen != RARRAY_LEN(tmp)) {
+ rb_raise(rb_eIndexError, "element size differs (%ld should be %ld)",
+ RARRAY_LEN(tmp), elen);
+ }
+ for (j=0; j<elen; j++) {
+ rb_ary_store(rb_ary_elt(result, j), i, rb_ary_elt(tmp, j));
}
- ary->len = end;
}
- p = ary->ptr + beg; pend = p + len;
+ return result;
+}
+
+/*
+ * 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.
+ *
+ * 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)
+{
+ rb_ary_modify_check(copy);
+ orig = to_ary(orig);
+ if (copy == orig) return copy;
- while (p < pend) {
- *p++ = item;
+ 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));
}
- return (VALUE)ary;
+ 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
+ *
+ * Removes all elements from +self+.
+ *
+ * a = [ "a", "b", "c", "d", "e" ]
+ * a.clear #=> [ ]
+ */
+
VALUE
-ary_plus(x, y)
- struct RArray *x, *y;
+rb_ary_clear(VALUE ary)
{
- struct RArray *z;
+ 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);
+ }
+ 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.
+ *
+ * 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]
+ */
- if (TYPE(y) != T_ARRAY) {
- return ary_plus(x, rb_to_a(y));
+static VALUE
+rb_ary_fill(int argc, VALUE *argv, VALUE ary)
+{
+ VALUE item, arg1, arg2;
+ long beg = 0, end = 0, len = 0;
+ int block_p = FALSE;
+
+ if (rb_block_given_p()) {
+ block_p = TRUE;
+ rb_scan_args(argc, argv, "02", &arg1, &arg2);
+ argc += 1; /* hackish */
+ }
+ else {
+ rb_scan_args(argc, argv, "12", &item, &arg1, &arg2);
+ }
+ switch (argc) {
+ case 1:
+ beg = 0;
+ len = RARRAY_LEN(ary);
+ break;
+ case 2:
+ if (rb_range_beg_len(arg1, &beg, &len, RARRAY_LEN(ary), 1)) {
+ break;
+ }
+ /* fall through */
+ case 3:
+ beg = NIL_P(arg1) ? 0 : NUM2LONG(arg1);
+ if (beg < 0) {
+ beg = RARRAY_LEN(ary) + beg;
+ if (beg < 0) beg = 0;
+ }
+ len = NIL_P(arg2) ? RARRAY_LEN(ary) - beg : NUM2LONG(arg2);
+ break;
+ }
+ rb_ary_modify(ary);
+ if (len < 0) {
+ return ary;
+ }
+ if (beg >= ARY_MAX_SIZE || len > ARY_MAX_SIZE - beg) {
+ 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);
+ }
+ ary_mem_clear(ary, RARRAY_LEN(ary), end - RARRAY_LEN(ary));
+ ARY_SET_LEN(ary, end);
}
- z = (struct RArray*)ary_new2(x->len + y->len);
- MEMCPY(z->ptr, x->ptr, VALUE, x->len);
- MEMCPY(z->ptr+x->len, y->ptr, VALUE, y->len);
- z->len = x->len + RARRAY(y)->len;
- return (VALUE)z;
+ if (block_p) {
+ VALUE v;
+ long i;
+
+ for (i=beg; i<end; i++) {
+ v = rb_yield(LONG2NUM(i));
+ if (i>=RARRAY_LEN(ary)) break;
+ RARRAY_ASET(ary, i, v);
+ }
+ }
+ else {
+ ary_memfill(ary, beg, len, item);
+ }
+ return ary;
}
+/*
+ * call-seq:
+ * ary + other_ary -> new_ary
+ *
+ * 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" ]
+ *
+ * See also Array#concat.
+ */
+
VALUE
-ary_concat(x, y)
- struct RArray *x, *y;
+rb_ary_plus(VALUE x, VALUE y)
{
- struct RArray *z;
- VALUE *p, *pend;
+ VALUE z;
+ long len, xlen, ylen;
+
+ y = to_ary(y);
+ xlen = RARRAY_LEN(x);
+ ylen = RARRAY_LEN(y);
+ len = xlen + ylen;
+ 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);
+ return z;
+}
- if (TYPE(y) != T_ARRAY) {
- return ary_concat(x, rb_to_a(y));
- }
+/*
+ * call-seq:
+ * ary.concat(other_ary) -> ary
+ *
+ * Appends the elements of +other_ary+ 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#+.
+ */
- p = y->ptr;
- pend = p + y->len;
- while (p < pend) {
- astore(x, x->len, *p);
- p++;
+VALUE
+rb_ary_concat(VALUE x, VALUE y)
+{
+ rb_ary_modify_check(x);
+ y = to_ary(y);
+ if (RARRAY_LEN(y) > 0) {
+ rb_ary_splice(x, RARRAY_LEN(x), 0, y);
}
- return (VALUE)x;
+ return x;
}
+
+/*
+ * call-seq:
+ * ary * int -> new_ary
+ * ary * str -> new_string
+ *
+ * Repetition --- With a String argument, equivalent to
+ * <code>ary.join(str)</code>.
+ *
+ * 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 ]
+ * [ 1, 2, 3 ] * "," #=> "1,2,3"
+ *
+ */
+
static VALUE
-ary_times(ary, times)
- struct RArray *ary;
- VALUE times;
+rb_ary_times(VALUE ary, VALUE times)
{
- struct RArray *ary2;
- int i, len;
+ VALUE ary2, tmp;
+ const VALUE *ptr;
+ long t, len;
- if (TYPE(times) == T_STRING) {
- return ary_join(ary, times);
+ tmp = rb_check_string_type(times);
+ if (!NIL_P(tmp)) {
+ return rb_ary_join(ary, tmp);
}
- len = NUM2INT(times) * ary->len;
- ary2 = (struct RArray*)ary_new2(len);
- ary2->len = len;
-
- for (i=0; i<len; i+=ary->len) {
- MEMCPY(ary2->ptr+i, ary->ptr, VALUE, ary->len);
+ len = NUM2LONG(times);
+ if (len == 0) {
+ ary2 = ary_new(rb_obj_class(ary), 0);
+ goto out;
}
+ if (len < 0) {
+ rb_raise(rb_eArgError, "negative argument");
+ }
+ if (ARY_MAX_SIZE/len < RARRAY_LEN(ary)) {
+ rb_raise(rb_eArgError, "argument too big");
+ }
+ len *= RARRAY_LEN(ary);
+
+ 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:
+ OBJ_INFECT(ary2, ary);
- return (VALUE)ary2;
+ return ary2;
}
+/*
+ * call-seq:
+ * ary.assoc(obj) -> new_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>.
+ *
+ * Returns the first contained array that matches (that is, the first
+ * associated array), or +nil+ if no match is found.
+ *
+ * See also Array#rassoc
+ *
+ * s1 = [ "colors", "red", "blue", "green" ]
+ * s2 = [ "letters", "a", "b", "c" ]
+ * s3 = "foo"
+ * a = [ s1, s2, s3 ]
+ * a.assoc("letters") #=> [ "letters", "a", "b", "c" ]
+ * a.assoc("foo") #=> nil
+ */
+
VALUE
-ary_assoc(ary, key)
- struct RArray *ary;
- VALUE key;
+rb_ary_assoc(VALUE ary, VALUE key)
{
- VALUE *p, *pend;
+ 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))
+ return v;
+ }
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * ary.rassoc(obj) -> new_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.
+ *
+ * a = [ [ 1, "one"], [2, "two"], [3, "three"], ["ii", "two"] ]
+ * a.rassoc("two") #=> [2, "two"]
+ * a.rassoc("four") #=> nil
+ */
- p = ary->ptr; pend = p + ary->len;
- while (p < pend) {
- if (TYPE(*p) == T_ARRAY
- && RARRAY(*p)->len > 1
- && rb_equal(RARRAY(*p)->ptr[0], key))
- return *p;
- p++;
+VALUE
+rb_ary_rassoc(VALUE ary, VALUE 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))
+ return v;
}
return Qnil;
}
+static VALUE
+recursive_equal(VALUE ary1, VALUE ary2, int recur)
+{
+ 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++;
+ }
+ return Qtrue;
+}
+
+/*
+ * call-seq:
+ * ary == other_ary -> 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+.
+ *
+ * [ "a", "c" ] == [ "a", "c", 7 ] #=> false
+ * [ "a", "c", 7 ] == [ "a", "c", 7 ] #=> true
+ * [ "a", "c", 7 ] == [ "a", "d", "f" ] #=> false
+ *
+ */
+
+static VALUE
+rb_ary_equal(VALUE ary1, VALUE ary2)
+{
+ if (ary1 == ary2) return Qtrue;
+ if (!RB_TYPE_P(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);
+}
+
+static VALUE
+recursive_eql(VALUE ary1, VALUE ary2, int recur)
+{
+ long i;
+
+ if (recur) return Qtrue; /* Subtle! */
+ for (i=0; i<RARRAY_LEN(ary1); i++) {
+ if (!rb_eql(rb_ary_elt(ary1, i), rb_ary_elt(ary2, i)))
+ return Qfalse;
+ }
+ return Qtrue;
+}
+
+/*
+ * call-seq:
+ * ary.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?).
+ */
+
+static VALUE
+rb_ary_eql(VALUE ary1, VALUE 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);
+}
+
+/*
+ * 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?).
+ */
+
+static VALUE
+rb_ary_hash(VALUE ary)
+{
+ long i;
+ st_index_t 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 = 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+.
+ *
+ * a = [ "a", "b", "c" ]
+ * a.include?("b") #=> true
+ * a.include?("z") #=> false
+ */
+
VALUE
-ary_rassoc(ary, value)
- struct RArray *ary;
- VALUE value;
+rb_ary_includes(VALUE ary, VALUE item)
{
- VALUE *p, *pend;
+ long i;
- p = ary->ptr; pend = p + ary->len;
- while (p < pend) {
- if (TYPE(*p) == T_ARRAY
- && RARRAY(*p)->len > 1
- && rb_equal(RARRAY(*p)->ptr[1], value))
- return *p;
- p++;
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ if (rb_equal(RARRAY_AREF(ary, i), item)) {
+ return Qtrue;
+ }
}
- return Qnil;
+ return Qfalse;
}
+
static VALUE
-ary_equal(ary1, ary2)
- struct RArray *ary1, *ary2;
+recursive_cmp(VALUE ary1, VALUE ary2, int recur)
{
- int i;
+ long i, len;
- if (TYPE(ary2) != T_ARRAY) return FALSE;
- if (ary1->len != ary2->len) return FALSE;
- for (i=0; i<ary1->len; i++) {
- if (!rb_equal(ary1->ptr[i], ary2->ptr[i]))
- return FALSE;
+ if (recur) return Qundef; /* Subtle! */
+ len = RARRAY_LEN(ary1);
+ if (len > RARRAY_LEN(ary2)) {
+ len = RARRAY_LEN(ary2);
+ }
+ 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);
+ if (v != INT2FIX(0)) {
+ return v;
+ }
}
- return TRUE;
+ 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+.
+ *
+ * +nil+ is returned if the two values are incomparable.
+ *
+ * Each object in each array is compared (using the <=> operator).
+ *
+ * Arrays are compared in an "element-wise" manner; the first two elements
+ * that are not equal will determine the return value for the whole
+ * comparison.
+ *
+ * If all the values are equal, then the return 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.
+ *
+ * [ "a", "a", "c" ] <=> [ "a", "b", "c" ] #=> -1
+ * [ 1, 2, 3, 4, 5, 6 ] <=> [ 1, 2 ] #=> +1
+ *
+ */
+
+VALUE
+rb_ary_cmp(VALUE ary1, VALUE ary2)
+{
+ long len;
+ VALUE v;
+
+ ary2 = rb_check_array_type(ary2);
+ if (NIL_P(ary2)) return Qnil;
+ if (ary1 == ary2) return INT2FIX(0);
+ v = rb_exec_recursive_paired(recursive_cmp, ary1, ary2, ary2);
+ if (v != Qundef) return v;
+ len = RARRAY_LEN(ary1) - RARRAY_LEN(ary2);
+ if (len == 0) return INT2FIX(0);
+ if (len > 0) return INT2FIX(1);
+ return INT2FIX(-1);
}
static VALUE
-ary_hash(ary)
- struct RArray *ary;
+ary_add_hash(VALUE hash, VALUE ary)
{
- int i, h;
- ID hash = rb_intern("hash");
+ long i;
- h = 0;
- for (i=0; i<ary->len; i++) {
- h ^= rb_funcall(ary->ptr[i], hash, 0);
+ 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);
+ }
}
- h += ary->len;
- return INT2FIX(h);
+ return hash;
+}
+
+static inline VALUE
+ary_tmp_hash_new(void)
+{
+ VALUE hash = rb_hash_new();
+
+ RBASIC_CLEAR_CLASS(hash);
+ return hash;
}
static VALUE
-ary_includes(ary, item)
- struct RArray *ary;
- VALUE item;
+ary_make_hash(VALUE ary)
{
- int i;
- for (i=0; i<ary->len; i++) {
- if (rb_equal(ary->ptr[i], item)) {
- return TRUE;
+ 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);
}
}
- return FALSE;
+ 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.
+ *
+ * It compares elements using their #hash and #eql? methods for efficiency.
+ *
+ * [ 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
-ary_diff(ary1, ary2)
- struct RArray *ary1, *ary2;
+rb_ary_diff(VALUE ary1, VALUE ary2)
{
VALUE ary3;
- int i;
+ VALUE hash;
+ long i;
+
+ hash = ary_make_hash(to_ary(ary2));
+ 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;
+ 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.
+ *
+ * [ 1, 1, 3, 5 ] & [ 1, 2, 3 ] #=> [ 1, 3 ]
+ * [ 'a', 'b', 'b', 'z' ] & [ 'a', 'b', 'c' ] #=> [ 'a', 'b' ]
+ *
+ * See also Array#uniq.
+ */
+
- Check_Type(ary2, T_ARRAY);
- ary3 = ary_new();
- for (i=0; i<ary1->len; i++) {
- if (ary_includes(ary2, ary1->ptr[i])) continue;
- if (ary_includes(ary3, ary1->ptr[i])) continue;
- ary_push(ary3, ary1->ptr[i]);
+static VALUE
+rb_ary_and(VALUE ary1, VALUE ary2)
+{
+ VALUE hash, ary3, v;
+ st_table *table;
+ st_data_t 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)) {
+ 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
+ *
+ * Set Union --- Returns a new array by joining +ary+ with +other_ary+,
+ * excluding any duplicates and preserving the order from the original array.
+ *
+ * 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.
+ */
+
static VALUE
-ary_and(ary1, ary2)
- struct RArray *ary1, *ary2;
+rb_ary_or(VALUE ary1, VALUE ary2)
{
- VALUE ary3;
- int i;
+ VALUE hash, ary3;
+ long i;
+
+ ary2 = to_ary(ary2);
+ hash = ary_make_hash(ary1);
- Check_Type(ary2, T_ARRAY);
- ary3 = ary_new();
- for (i=0; i<ary1->len; i++) {
- if (ary_includes(ary2, ary1->ptr[i])
- && !ary_includes(ary3, ary1->ptr[i])) {
- ary_push(ary3, ary1->ptr[i]);
+ 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);
}
}
+ 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.
+ *
+ * Returns +nil+ if no changes are made (that is, no duplicates are found).
+ *
+ * a = [ "a", "a", "b", "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"]]
+ *
+ */
+
static VALUE
-ary_or(ary1, ary2)
- struct RArray *ary1, *ary2;
+rb_ary_uniq_bang(VALUE ary)
{
- VALUE ary3;
- int i;
+ VALUE hash;
+ long hash_size;
+
+ 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);
- if (TYPE(ary2) != T_ARRAY) {
- if (ary_includes(ary1, ary2)) return (VALUE)ary1;
- else return ary_plus(ary1, ary2);
+ hash_size = RHASH_SIZE(hash);
+ if (RARRAY_LEN(ary) == hash_size) {
+ 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);
}
+ ary_resize_capa(ary, hash_size);
+ st_foreach(rb_hash_tbl_raw(hash), push_value, ary);
+ ary_recycle_hash(hash);
+
+ return ary;
+}
- ary3 = ary_new();
- for (i=0; i<ary1->len; i++) {
- if (!ary_includes(ary3, ary1->ptr[i]))
- ary_push(ary3, ary1->ptr[i]);
+/*
+ * 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.
+ *
+ * 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"]]
+ *
+ */
+
+static VALUE
+rb_ary_uniq(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);
}
- for (i=0; i<ary2->len; i++) {
- if (!ary_includes(ary3, ary2->ptr[i]))
- ary_push(ary3, ary2->ptr[i]);
+ else {
+ hash = ary_make_hash(ary);
+ uniq = rb_hash_values(hash);
}
- return ary3;
+ RBASIC_SET_CLASS(uniq, rb_obj_class(ary));
+ ary_recycle_hash(hash);
+
+ return uniq;
}
+/*
+ * call-seq:
+ * ary.compact! -> ary or nil
+ *
+ * Removes +nil+ elements from the array.
+ *
+ * Returns +nil+ if no changes were made, otherwise returns the array.
+ *
+ * [ "a", nil, "b", nil, "c" ].compact! #=> [ "a", "b", "c" ]
+ * [ "a", "b", "c" ].compact! #=> nil
+ */
+
static VALUE
-ary_compact_bang(ary)
- struct RArray *ary;
+rb_ary_compact_bang(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 = ary->ptr;
- end = p + ary->len;
while (t < end) {
if (NIL_P(*t)) t++;
else *p++ = *t++;
}
- ary->len = ary->capa = (p - ary->ptr);
- REALLOC_N(ary->ptr, VALUE, ary->len);
+ n = p - RARRAY_CONST_PTR(ary);
+ if (RARRAY_LEN(ary) == n) {
+ return Qnil;
+ }
+ ary_resize_smaller(ary, n);
- return (VALUE)ary;
+ return ary;
+}
+
+/*
+ * call-seq:
+ * ary.compact -> new_ary
+ *
+ * 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)
+{
+ ary = rb_ary_dup(ary);
+ rb_ary_compact_bang(ary);
+ return 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
+ *
+ */
+
+static VALUE
+rb_ary_count(int argc, VALUE *argv, VALUE ary)
+{
+ long i, n = 0;
+
+ if (argc == 0) {
+ VALUE v;
+
+ 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++;
+ }
+ }
+ 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)
+{
+ 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++);
+ tmp = rb_check_array_type(elt);
+ if (RBASIC(result)->klass) {
+ rb_raise(rb_eRuntimeError, "flatten reentered");
+ }
+ if (NIL_P(tmp) || (level >= 0 && RARRAY_LEN(stack) / 2 >= level)) {
+ 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);
+ }
+
+ st_free_table(memo);
+
+ RBASIC_SET_CLASS(result, rb_class_of(ary));
+ return result;
+}
+
+/*
+ * 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.
+ *
+ * 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)
+{
+ int mod = 0, level = -1;
+ VALUE result, lv;
+
+ rb_scan_args(argc, argv, "01", &lv);
+ rb_ary_modify_check(ary);
+ if (!NIL_P(lv)) level = NUM2INT(lv);
+ if (level == 0) return Qnil;
+
+ result = flatten(ary, level, &mod);
+ if (mod == 0) {
+ ary_discard(result);
+ return Qnil;
+ }
+ if (!(mod = ARY_EMBED_P(result))) rb_obj_freeze(result);
+ rb_ary_replace(ary, result);
+ if (mod) ARY_SET_EMBED_LEN(result, 0);
+
+ 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.
+ *
+ * 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.
+ *
+ * The optional +rng+ argument will be used as the random number generator.
+ */
+
+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]
+ *
+ * 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(int argc, VALUE *argv, VALUE ary)
+{
+ ary = rb_ary_dup(ary);
+ rb_ary_shuffle_bang(argc, argv, 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;
+}
+
+/*
+ * Recursively 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
+ * index: what index we're filling in now
+ * 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(long n, long r, long *p, long index, char *used, VALUE values)
+{
+ long i;
+ for (i = 0; i < n; i++) {
+ if (used[i] == 0) {
+ p[index] = i;
+ if (index < r-1) { /* if not done yet */
+ used[i] = 1; /* mark index used */
+ permute0(n, r, p, index+1, /* recurse */
+ used, values);
+ used[i] = 0; /* index unused */
+ }
+ else {
+ if (!yield_indexed_values(values, r, p)) {
+ rb_raise(rb_eRuntimeError, "permute reentered");
+ }
+ }
+ }
+ }
+}
+
+/*
+ * 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 = tmpbuf(r,sizeof(long));
+ long *p = (long*)RSTRING_PTR(t0);
+ volatile VALUE t1 = tmpbuf(n,sizeof(char));
+ char *used = (char*)RSTRING_PTR(t1);
+ 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, 0, used, ary0); /* compute and yield permutations */
+ tmpbuf_discard(t0);
+ tmpbuf_discard(t1);
+ RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
+ }
+ return ary;
+}
+
+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
-ary_compact(ary)
- struct RArray *ary;
+rb_ary_combination(VALUE ary, VALUE num)
{
- return ary_compact_bang(ary_clone(ary));
+ long n, i, 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);
+ long lev = 0;
+
+ RBASIC_CLEAR_CLASS(ary0);
+ MEMZERO(stack+1, long, n);
+ stack[0] = -1;
+ for (;;) {
+ for (lev++; lev < n; lev++) {
+ stack[lev+1] = stack[lev]+1;
+ }
+ if (!yield_indexed_values(ary0, n, stack+1)) {
+ rb_raise(rb_eRuntimeError, "combination reentered");
+ }
+ do {
+ if (lev == 0) goto done;
+ stack[lev--]++;
+ } while (stack[lev+1]+n == len+lev+1);
+ }
+ done:
+ ALLOCV_END(t0);
+ RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
+ }
+ return ary;
+}
+
+/*
+ * Recursively 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
+ * index: what index we're filling in now
+ * values: the Ruby array that holds the actual values to permute
+ */
+static void
+rpermute0(long n, long r, long *p, long index, VALUE values)
+{
+ long i;
+ for (i = 0; i < n; i++) {
+ p[index] = i;
+ if (index < r-1) { /* if not done yet */
+ rpermute0(n, r, p, index+1, values); /* recurse */
+ }
+ else {
+ if (!yield_indexed_values(values, r, p)) {
+ rb_raise(rb_eRuntimeError, "repeated permute reentered");
+ }
+ }
+ }
}
static VALUE
-ary_nitems(ary)
- struct RArray *ary;
+rb_ary_repeated_permutation_size(VALUE ary, VALUE args, VALUE eobj)
{
- int n = 0;
- VALUE *p, *pend;
+ long n = RARRAY_LEN(ary);
+ long k = NUM2LONG(RARRAY_AREF(args, 0));
+ VALUE v;
- p = ary->ptr;
- pend = p + ary->len;
- while (p < pend) {
- if (!NIL_P(*p)) n++;
- p++;
+ if (k < 0) {
+ return LONG2FIX(0);
}
- return INT2FIX(n);
+
+ v = LONG2NUM(k);
+ return rb_funcallv(LONG2NUM(n), id_power, 1, &v);
}
-extern VALUE mEnumerable;
+/*
+ * 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 = tmpbuf(r, sizeof(long));
+ long *p = (long*)RSTRING_PTR(t0);
+ VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
+ RBASIC_CLEAR_CLASS(ary0);
+
+ rpermute0(n, r, p, 0, ary0); /* compute and yield repeated permutations */
+ tmpbuf_discard(t0);
+ RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
+ }
+ return ary;
+}
+
+static void
+rcombinate0(long n, long r, long *p, long index, long rest, VALUE values)
+{
+ if (rest > 0) {
+ for (; index < n; ++index) {
+ p[r-rest] = index;
+ rcombinate0(n, r, p, index, rest-1, values);
+ }
+ }
+ else {
+ if (!yield_indexed_values(values, r, p)) {
+ rb_raise(rb_eRuntimeError, "repeated combination reentered");
+ }
+ }
+}
+
+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 = tmpbuf(n, sizeof(long));
+ long *p = (long*)RSTRING_PTR(t0);
+ VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
+ RBASIC_CLEAR_CLASS(ary0);
+
+ rcombinate0(len, n, p, 0, n, ary0); /* compute and yield repeated combinations */
+ tmpbuf_discard(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 { |arr| 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 { |arr| 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));
+}
+
+/*
+ * 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]
+ *
+ */
void
-Init_Array()
-{
- cArray = rb_define_class("Array", cObject);
- rb_include_module(cArray, mEnumerable);
-
- rb_define_singleton_method(cArray, "new", ary_s_new, -1);
- rb_define_singleton_method(cArray, "[]", ary_s_create, -1);
- rb_define_method(cArray, "to_s", ary_to_s, 0);
- rb_define_method(cArray, "inspect", ary_inspect, 0);
- rb_define_method(cArray, "to_a", ary_to_a, 0);
-
- rb_define_method(cArray, "print_on", ary_print_on, 1);
-
- rb_define_method(cArray, "==", ary_equal, 1);
- rb_define_method(cArray, "hash", ary_hash, 0);
- rb_define_method(cArray, "[]", ary_aref, -1);
- rb_define_method(cArray, "[]=", ary_aset, -1);
- rb_define_method(cArray, "concat", ary_concat, 1);
- rb_define_method(cArray, "<<", ary_push, 1);
- rb_define_method(cArray, "push", ary_push_method, -1);
- rb_define_method(cArray, "pop", ary_pop, 0);
- rb_define_method(cArray, "shift", ary_shift, 0);
- rb_define_method(cArray, "unshift", ary_unshift_method, -1);
- rb_define_method(cArray, "each", ary_each, 0);
- rb_define_method(cArray, "each_index", ary_each_index, 0);
- rb_define_method(cArray, "length", ary_length, 0);
- rb_define_alias(cArray, "size", "length");
- rb_define_method(cArray, "empty?", ary_empty_p, 0);
- rb_define_method(cArray, "index", ary_index, 1);
- rb_define_method(cArray, "indexes", ary_indexes, -2);
- rb_define_method(cArray, "clone", ary_clone, 0);
- rb_define_method(cArray, "join", ary_join_method, -1);
- rb_define_method(cArray, "reverse", ary_reverse_method, 0);
- rb_define_method(cArray, "reverse!", ary_reverse, 0);
- rb_define_method(cArray, "sort", ary_sort, 0);
- rb_define_method(cArray, "sort!", ary_sort_bang, 0);
- rb_define_method(cArray, "delete", ary_delete, 1);
- rb_define_method(cArray, "delete_at", ary_delete_at, 1);
- rb_define_method(cArray, "delete_if", ary_delete_if, 0);
- rb_define_method(cArray, "clear", ary_clear, 0);
- rb_define_method(cArray, "fill", ary_fill, -1);
- rb_define_method(cArray, "include?", ary_includes, 1);
- rb_define_method(cArray, "includes?", ary_includes, 1); /* obsolate */
-
- rb_define_method(cArray, "assoc", ary_assoc, 1);
- rb_define_method(cArray, "rassoc", ary_rassoc, 1);
-
- rb_define_method(cArray, "+", ary_plus, 1);
- rb_define_method(cArray, "*", ary_times, 1);
-
- rb_define_method(cArray, "-", ary_diff, 1);
- rb_define_method(cArray, "&", ary_and, 1);
- rb_define_method(cArray, "|", ary_or, 1);
-
- rb_define_method(cArray, "compact", ary_compact, 0);
- rb_define_method(cArray, "compact!", ary_compact_bang, 0);
- rb_define_method(cArray, "nitems", ary_nitems, 0);
-
- cmp = rb_intern("<=>");
+Init_Array(void)
+{
+#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_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, "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);
+
+ rb_define_method(rb_cArray, "==", rb_ary_equal, 1);
+ rb_define_method(rb_cArray, "eql?", rb_ary_eql, 1);
+ rb_define_method(rb_cArray, "hash", rb_ary_hash, 0);
+
+ rb_define_method(rb_cArray, "[]", rb_ary_aref, -1);
+ rb_define_method(rb_cArray, "[]=", rb_ary_aset, -1);
+ rb_define_method(rb_cArray, "at", rb_ary_at, 1);
+ rb_define_method(rb_cArray, "fetch", rb_ary_fetch, -1);
+ rb_define_method(rb_cArray, "first", rb_ary_first, -1);
+ rb_define_method(rb_cArray, "last", rb_ary_last, -1);
+ 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, "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);
+ rb_define_method(rb_cArray, "each_index", rb_ary_each_index, 0);
+ rb_define_method(rb_cArray, "reverse_each", rb_ary_reverse_each, 0);
+ 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, "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);
+ rb_define_method(rb_cArray, "delete_if", rb_ary_delete_if, 0);
+ rb_define_method(rb_cArray, "reject", rb_ary_reject, 0);
+ rb_define_method(rb_cArray, "reject!", rb_ary_reject_bang, 0);
+ rb_define_method(rb_cArray, "zip", rb_ary_zip, -1);
+ rb_define_method(rb_cArray, "transpose", rb_ary_transpose, 0);
+ rb_define_method(rb_cArray, "replace", rb_ary_replace, 1);
+ rb_define_method(rb_cArray, "clear", rb_ary_clear, 0);
+ rb_define_method(rb_cArray, "fill", rb_ary_fill, -1);
+ rb_define_method(rb_cArray, "include?", rb_ary_includes, 1);
+ rb_define_method(rb_cArray, "<=>", rb_ary_cmp, 1);
+
+ rb_define_method(rb_cArray, "slice", rb_ary_aref, -1);
+ rb_define_method(rb_cArray, "slice!", rb_ary_slice_bang, -1);
+
+ rb_define_method(rb_cArray, "assoc", rb_ary_assoc, 1);
+ rb_define_method(rb_cArray, "rassoc", rb_ary_rassoc, 1);
+
+ rb_define_method(rb_cArray, "+", rb_ary_plus, 1);
+ rb_define_method(rb_cArray, "*", rb_ary_times, 1);
+
+ rb_define_method(rb_cArray, "-", rb_ary_diff, 1);
+ rb_define_method(rb_cArray, "&", rb_ary_and, 1);
+ rb_define_method(rb_cArray, "|", rb_ary_or, 1);
+
+ rb_define_method(rb_cArray, "uniq", rb_ary_uniq, 0);
+ 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);
+
+ id_cmp = rb_intern("<=>");
+ id_random = rb_intern("random");
+ id_div = rb_intern("div");
+ id_power = rb_intern("**");
}
diff --git a/benchmark/bm_app_answer.rb b/benchmark/bm_app_answer.rb
new file mode 100644
index 0000000000..3cd8a8fd37
--- /dev/null
+++ b/benchmark/bm_app_answer.rb
@@ -0,0 +1,15 @@
+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
new file mode 100644
index 0000000000..807349089f
--- /dev/null
+++ b/benchmark/bm_app_aobench.rb
@@ -0,0 +1,292 @@
+# AO rebder benchmark
+# Original program (C) Syoyo Fujita in Javascript (and other languages)
+# http://lucille.atso-net.jp/blog/?p=642
+# http://lucille.atso-net.jp/blog/?p=711
+# 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)
+
+ # Subsmpling
+ 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
new file mode 100644
index 0000000000..77c66a7949
--- /dev/null
+++ b/benchmark/bm_app_erb.rb
@@ -0,0 +1,26 @@
+#
+# 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
new file mode 100644
index 0000000000..45f471dfdb
--- /dev/null
+++ b/benchmark/bm_app_factorial.rb
@@ -0,0 +1,11 @@
+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
new file mode 100644
index 0000000000..34a7b2e725
--- /dev/null
+++ b/benchmark/bm_app_fib.rb
@@ -0,0 +1,10 @@
+def fib n
+ if n < 3
+ 1
+ else
+ fib(n-1) + fib(n-2)
+ end
+end
+
+fib(34)
+
diff --git a/benchmark/bm_app_mandelbrot.rb b/benchmark/bm_app_mandelbrot.rb
new file mode 100644
index 0000000000..801b75e8e2
--- /dev/null
+++ b/benchmark/bm_app_mandelbrot.rb
@@ -0,0 +1,23 @@
+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
new file mode 100644
index 0000000000..59c63f358e
--- /dev/null
+++ b/benchmark/bm_app_pentomino.rb
@@ -0,0 +1,259 @@
+#!/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
new file mode 100644
index 0000000000..5db8f95d50
--- /dev/null
+++ b/benchmark/bm_app_raise.rb
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000000..7eed7c1aed
--- /dev/null
+++ b/benchmark/bm_app_strconcat.rb
@@ -0,0 +1,5 @@
+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
new file mode 100644
index 0000000000..efe5380f4e
--- /dev/null
+++ b/benchmark/bm_app_tak.rb
@@ -0,0 +1,13 @@
+
+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
new file mode 100644
index 0000000000..4c146f5ccf
--- /dev/null
+++ b/benchmark/bm_app_tarai.rb
@@ -0,0 +1,10 @@
+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
new file mode 100644
index 0000000000..586edfd5dc
--- /dev/null
+++ b/benchmark/bm_app_uri.rb
@@ -0,0 +1,8 @@
+require 'uri'
+
+100_000.times{
+ uri = URI.parse('http://www.ruby-lang.org')
+ uri.scheme
+ uri.host
+ uri.port
+}
diff --git a/benchmark/bm_hash_flatten.rb b/benchmark/bm_hash_flatten.rb
new file mode 100644
index 0000000000..e944aae9f2
--- /dev/null
+++ b/benchmark/bm_hash_flatten.rb
@@ -0,0 +1,9 @@
+h = {}
+
+10000.times do |i|
+ h[i] = nil
+end
+
+1000.times do
+ h.flatten
+end
diff --git a/benchmark/bm_hash_keys.rb b/benchmark/bm_hash_keys.rb
new file mode 100644
index 0000000000..6863cd01f9
--- /dev/null
+++ b/benchmark/bm_hash_keys.rb
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 0000000000..a645671a5b
--- /dev/null
+++ b/benchmark/bm_hash_shift.rb
@@ -0,0 +1,10 @@
+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_values.rb b/benchmark/bm_hash_values.rb
new file mode 100644
index 0000000000..069441302f
--- /dev/null
+++ b/benchmark/bm_hash_values.rb
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 0000000000..2f205c1333
--- /dev/null
+++ b/benchmark/bm_io_file_create.rb
@@ -0,0 +1,13 @@
+#
+# 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
new file mode 100644
index 0000000000..b9e796ed30
--- /dev/null
+++ b/benchmark/bm_io_file_read.rb
@@ -0,0 +1,15 @@
+#
+# 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
new file mode 100644
index 0000000000..aa1be0e5fe
--- /dev/null
+++ b/benchmark/bm_io_file_write.rb
@@ -0,0 +1,14 @@
+#
+# 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_select.rb b/benchmark/bm_io_select.rb
new file mode 100644
index 0000000000..19248daeb1
--- /dev/null
+++ b/benchmark/bm_io_select.rb
@@ -0,0 +1,9 @@
+# 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
new file mode 100644
index 0000000000..10e37d71b2
--- /dev/null
+++ b/benchmark/bm_io_select2.rb
@@ -0,0 +1,22 @@
+# 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
new file mode 100644
index 0000000000..7d0ba1f092
--- /dev/null
+++ b/benchmark/bm_io_select3.rb
@@ -0,0 +1,21 @@
+# 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
new file mode 100644
index 0000000000..0fc4cc1511
--- /dev/null
+++ b/benchmark/bm_loop_for.rb
@@ -0,0 +1,3 @@
+for i in 1..30_000_000
+ #
+end
diff --git a/benchmark/bm_loop_generator.rb b/benchmark/bm_loop_generator.rb
new file mode 100644
index 0000000000..d3375c744c
--- /dev/null
+++ b/benchmark/bm_loop_generator.rb
@@ -0,0 +1,14 @@
+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
new file mode 100644
index 0000000000..521f72ad1a
--- /dev/null
+++ b/benchmark/bm_loop_times.rb
@@ -0,0 +1 @@
+30_000_000.times{|e|}
diff --git a/benchmark/bm_loop_whileloop.rb b/benchmark/bm_loop_whileloop.rb
new file mode 100644
index 0000000000..0072822c06
--- /dev/null
+++ b/benchmark/bm_loop_whileloop.rb
@@ -0,0 +1,4 @@
+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
new file mode 100644
index 0000000000..47d02dffc4
--- /dev/null
+++ b/benchmark/bm_loop_whileloop2.rb
@@ -0,0 +1,4 @@
+i = 0
+while i< 6_000_000 # benchmark loop 2
+ i += 1
+end
diff --git a/benchmark/bm_so_ackermann.rb b/benchmark/bm_so_ackermann.rb
new file mode 100644
index 0000000000..7db5be9050
--- /dev/null
+++ b/benchmark/bm_so_ackermann.rb
@@ -0,0 +1,19 @@
+#!/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
new file mode 100644
index 0000000000..2b8fce8f99
--- /dev/null
+++ b/benchmark/bm_so_array.rb
@@ -0,0 +1,23 @@
+#!/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
new file mode 100644
index 0000000000..b1693e4109
--- /dev/null
+++ b/benchmark/bm_so_binary_trees.rb
@@ -0,0 +1,62 @@
+# 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
new file mode 100644
index 0000000000..873214de7c
--- /dev/null
+++ b/benchmark/bm_so_concatenate.rb
@@ -0,0 +1,18 @@
+#!/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
new file mode 100644
index 0000000000..65f6337a4a
--- /dev/null
+++ b/benchmark/bm_so_count_words.rb
@@ -0,0 +1,19 @@
+#!/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
new file mode 100644
index 0000000000..deb003a594
--- /dev/null
+++ b/benchmark/bm_so_exception.rb
@@ -0,0 +1,61 @@
+#!/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
new file mode 100644
index 0000000000..bac5ecd44c
--- /dev/null
+++ b/benchmark/bm_so_fannkuch.rb
@@ -0,0 +1,45 @@
+# 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
new file mode 100644
index 0000000000..3f759ba7ae
--- /dev/null
+++ b/benchmark/bm_so_fasta.rb
@@ -0,0 +1,81 @@
+# 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
new file mode 100644
index 0000000000..dadab3e79c
--- /dev/null
+++ b/benchmark/bm_so_k_nucleotide.rb
@@ -0,0 +1,48 @@
+# 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
new file mode 100644
index 0000000000..e8f4a2a5f7
--- /dev/null
+++ b/benchmark/bm_so_lists.rb
@@ -0,0 +1,47 @@
+#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
new file mode 100644
index 0000000000..76331c64b8
--- /dev/null
+++ b/benchmark/bm_so_mandelbrot.rb
@@ -0,0 +1,57 @@
+# 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
new file mode 100644
index 0000000000..e2c5c8e559
--- /dev/null
+++ b/benchmark/bm_so_matrix.rb
@@ -0,0 +1,48 @@
+#!/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
new file mode 100644
index 0000000000..99cf6a91cc
--- /dev/null
+++ b/benchmark/bm_so_meteor_contest.rb
@@ -0,0 +1,564 @@
+#!/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 boundries 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 accross the rows
+ (location / 6).to_i.upto(9) do | row_on |
+ # obtain a set of regions representing the bits of the curent 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 muliple 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
+ # follwing 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 acheived 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 noticable 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
new file mode 100644
index 0000000000..d6c5bb9e61
--- /dev/null
+++ b/benchmark/bm_so_nbody.rb
@@ -0,0 +1,148 @@
+# 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
new file mode 100644
index 0000000000..a0513f8c47
--- /dev/null
+++ b/benchmark/bm_so_nested_loop.rb
@@ -0,0 +1,24 @@
+#!/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
new file mode 100644
index 0000000000..a65cc78233
--- /dev/null
+++ b/benchmark/bm_so_nsieve.rb
@@ -0,0 +1,35 @@
+# 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
new file mode 100644
index 0000000000..6f958ee44e
--- /dev/null
+++ b/benchmark/bm_so_nsieve_bits.rb
@@ -0,0 +1,43 @@
+#!/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
new file mode 100644
index 0000000000..e8607c7199
--- /dev/null
+++ b/benchmark/bm_so_object.rb
@@ -0,0 +1,56 @@
+#!/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
new file mode 100644
index 0000000000..630b45cb8d
--- /dev/null
+++ b/benchmark/bm_so_partial_sums.rb
@@ -0,0 +1,31 @@
+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
new file mode 100644
index 0000000000..c7d6fbfb4d
--- /dev/null
+++ b/benchmark/bm_so_pidigits.rb
@@ -0,0 +1,92 @@
+# 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
new file mode 100644
index 0000000000..a66b9e8e63
--- /dev/null
+++ b/benchmark/bm_so_random.rb
@@ -0,0 +1,20 @@
+# 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
new file mode 100644
index 0000000000..82ea666994
--- /dev/null
+++ b/benchmark/bm_so_reverse_complement.rb
@@ -0,0 +1,30 @@
+#!/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
new file mode 100644
index 0000000000..43dc302648
--- /dev/null
+++ b/benchmark/bm_so_sieve.rb
@@ -0,0 +1,24 @@
+# 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
new file mode 100644
index 0000000000..6b97206689
--- /dev/null
+++ b/benchmark/bm_so_spectralnorm.rb
@@ -0,0 +1,50 @@
+# 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
new file mode 100644
index 0000000000..16906f3605
--- /dev/null
+++ b/benchmark/bm_vm1_attr_ivar.rb
@@ -0,0 +1,14 @@
+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
new file mode 100644
index 0000000000..7e7a6b48c0
--- /dev/null
+++ b/benchmark/bm_vm1_attr_ivar_set.rb
@@ -0,0 +1,14 @@
+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
new file mode 100644
index 0000000000..a9f56b15ea
--- /dev/null
+++ b/benchmark/bm_vm1_block.rb
@@ -0,0 +1,10 @@
+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
new file mode 100644
index 0000000000..ac59ebccf1
--- /dev/null
+++ b/benchmark/bm_vm1_const.rb
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000000..a1596145f2
--- /dev/null
+++ b/benchmark/bm_vm1_ensure.rb
@@ -0,0 +1,11 @@
+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
new file mode 100644
index 0000000000..d4581439ff
--- /dev/null
+++ b/benchmark/bm_vm1_float_simple.rb
@@ -0,0 +1,7 @@
+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
new file mode 100644
index 0000000000..e78bca5668
--- /dev/null
+++ b/benchmark/bm_vm1_gc_short_lived.rb
@@ -0,0 +1,10 @@
+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
new file mode 100644
index 0000000000..b66052dee0
--- /dev/null
+++ b/benchmark/bm_vm1_gc_short_with_complex_long.rb
@@ -0,0 +1,27 @@
+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
new file mode 100644
index 0000000000..298dbc845b
--- /dev/null
+++ b/benchmark/bm_vm1_gc_short_with_long.rb
@@ -0,0 +1,13 @@
+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
new file mode 100644
index 0000000000..6b15c1b7bf
--- /dev/null
+++ b/benchmark/bm_vm1_gc_short_with_symbol.rb
@@ -0,0 +1,15 @@
+# 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
new file mode 100644
index 0000000000..ecfab51dbf
--- /dev/null
+++ b/benchmark/bm_vm1_gc_wb_ary.rb
@@ -0,0 +1,10 @@
+long_lived = []
+GC.start
+GC.start
+
+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
new file mode 100644
index 0000000000..017eff4f94
--- /dev/null
+++ b/benchmark/bm_vm1_gc_wb_obj.rb
@@ -0,0 +1,13 @@
+class C
+ attr_accessor :foo
+end
+long_lived = C.new
+GC.start
+GC.start
+
+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
new file mode 100644
index 0000000000..68a73cf92f
--- /dev/null
+++ b/benchmark/bm_vm1_ivar.rb
@@ -0,0 +1,8 @@
+@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
new file mode 100644
index 0000000000..bd81b06c34
--- /dev/null
+++ b/benchmark/bm_vm1_ivar_set.rb
@@ -0,0 +1,6 @@
+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
new file mode 100644
index 0000000000..353de3ab0e
--- /dev/null
+++ b/benchmark/bm_vm1_length.rb
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 0000000000..36f2068811
--- /dev/null
+++ b/benchmark/bm_vm1_lvar_init.rb
@@ -0,0 +1,18 @@
+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
new file mode 100644
index 0000000000..222e864134
--- /dev/null
+++ b/benchmark/bm_vm1_lvar_set.rb
@@ -0,0 +1,5 @@
+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
new file mode 100644
index 0000000000..bbb4ae07a4
--- /dev/null
+++ b/benchmark/bm_vm1_neq.rb
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000000..b09ecdcc21
--- /dev/null
+++ b/benchmark/bm_vm1_not.rb
@@ -0,0 +1,7 @@
+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
new file mode 100644
index 0000000000..b0d3e2bdfa
--- /dev/null
+++ b/benchmark/bm_vm1_rescue.rb
@@ -0,0 +1,7 @@
+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
new file mode 100644
index 0000000000..63f9f21675
--- /dev/null
+++ b/benchmark/bm_vm1_simplereturn.rb
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 0000000000..918f8b2112
--- /dev/null
+++ b/benchmark/bm_vm1_swap.rb
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000000..775597cea6
--- /dev/null
+++ b/benchmark/bm_vm1_yield.rb
@@ -0,0 +1,10 @@
+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
new file mode 100644
index 0000000000..df9037c83c
--- /dev/null
+++ b/benchmark/bm_vm2_array.rb
@@ -0,0 +1,5 @@
+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
new file mode 100644
index 0000000000..b02509d6a2
--- /dev/null
+++ b/benchmark/bm_vm2_bigarray.rb
@@ -0,0 +1,106 @@
+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
new file mode 100644
index 0000000000..5e3f437bb8
--- /dev/null
+++ b/benchmark/bm_vm2_bighash.rb
@@ -0,0 +1,5 @@
+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
new file mode 100644
index 0000000000..adc6e4df0a
--- /dev/null
+++ b/benchmark/bm_vm2_case.rb
@@ -0,0 +1,14 @@
+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_defined_method.rb b/benchmark/bm_vm2_defined_method.rb
new file mode 100644
index 0000000000..053ed6c912
--- /dev/null
+++ b/benchmark/bm_vm2_defined_method.rb
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 0000000000..58c0f7bbc3
--- /dev/null
+++ b/benchmark/bm_vm2_dstr.rb
@@ -0,0 +1,6 @@
+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
new file mode 100644
index 0000000000..307cfc28ef
--- /dev/null
+++ b/benchmark/bm_vm2_eval.rb
@@ -0,0 +1,6 @@
+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
new file mode 100644
index 0000000000..a8ccff7138
--- /dev/null
+++ b/benchmark/bm_vm2_method.rb
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 0000000000..2badc73101
--- /dev/null
+++ b/benchmark/bm_vm2_method_missing.rb
@@ -0,0 +1,12 @@
+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
new file mode 100644
index 0000000000..b4efb4f520
--- /dev/null
+++ b/benchmark/bm_vm2_method_with_block.rb
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 0000000000..7362f738c5
--- /dev/null
+++ b/benchmark/bm_vm2_mutex.rb
@@ -0,0 +1,9 @@
+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_poly_method.rb b/benchmark/bm_vm2_poly_method.rb
new file mode 100644
index 0000000000..c82c0e4bce
--- /dev/null
+++ b/benchmark/bm_vm2_poly_method.rb
@@ -0,0 +1,20 @@
+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
new file mode 100644
index 0000000000..aa5fd1dd38
--- /dev/null
+++ b/benchmark/bm_vm2_poly_method_ov.rb
@@ -0,0 +1,20 @@
+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
new file mode 100644
index 0000000000..65e5217371
--- /dev/null
+++ b/benchmark/bm_vm2_proc.rb
@@ -0,0 +1,14 @@
+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
new file mode 100644
index 0000000000..aa5387987f
--- /dev/null
+++ b/benchmark/bm_vm2_raise1.rb
@@ -0,0 +1,18 @@
+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
new file mode 100644
index 0000000000..1f61c63157
--- /dev/null
+++ b/benchmark/bm_vm2_raise2.rb
@@ -0,0 +1,18 @@
+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
new file mode 100644
index 0000000000..55f9e957a3
--- /dev/null
+++ b/benchmark/bm_vm2_regexp.rb
@@ -0,0 +1,6 @@
+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
new file mode 100644
index 0000000000..6a3ab6fdab
--- /dev/null
+++ b/benchmark/bm_vm2_send.rb
@@ -0,0 +1,12 @@
+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_super.rb b/benchmark/bm_vm2_super.rb
new file mode 100644
index 0000000000..afd8579e7b
--- /dev/null
+++ b/benchmark/bm_vm2_super.rb
@@ -0,0 +1,20 @@
+
+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
new file mode 100644
index 0000000000..1774625942
--- /dev/null
+++ b/benchmark/bm_vm2_unif1.rb
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000000..2a43e62217
--- /dev/null
+++ b/benchmark/bm_vm2_zsuper.rb
@@ -0,0 +1,20 @@
+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
new file mode 100644
index 0000000000..0fbf73e1ca
--- /dev/null
+++ b/benchmark/bm_vm3_backtrace.rb
@@ -0,0 +1,22 @@
+# 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
new file mode 100644
index 0000000000..9661323cd2
--- /dev/null
+++ b/benchmark/bm_vm3_clearmethodcache.rb
@@ -0,0 +1,8 @@
+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
new file mode 100755
index 0000000000..7db9829d44
--- /dev/null
+++ b/benchmark/bm_vm3_gc.rb
@@ -0,0 +1,7 @@
+#! /usr/bin/ruby
+5000.times do
+ 100.times do
+ {"xxxx"=>"yyyy"}
+ end
+ GC.start
+end
diff --git a/benchmark/bm_vm_thread_alive_check1.rb b/benchmark/bm_vm_thread_alive_check1.rb
new file mode 100644
index 0000000000..c993accdda
--- /dev/null
+++ b/benchmark/bm_vm_thread_alive_check1.rb
@@ -0,0 +1,6 @@
+5_000.times{
+ t = Thread.new{}
+ while t.alive?
+ Thread.pass
+ end
+}
diff --git a/benchmark/bm_vm_thread_create_join.rb b/benchmark/bm_vm_thread_create_join.rb
new file mode 100644
index 0000000000..393cd45df9
--- /dev/null
+++ b/benchmark/bm_vm_thread_create_join.rb
@@ -0,0 +1,6 @@
+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
new file mode 100644
index 0000000000..5c9f85dfb7
--- /dev/null
+++ b/benchmark/bm_vm_thread_mutex1.rb
@@ -0,0 +1,21 @@
+# 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
new file mode 100644
index 0000000000..10de59054f
--- /dev/null
+++ b/benchmark/bm_vm_thread_mutex2.rb
@@ -0,0 +1,21 @@
+# 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
new file mode 100644
index 0000000000..7f9a44b39d
--- /dev/null
+++ b/benchmark/bm_vm_thread_mutex3.rb
@@ -0,0 +1,20 @@
+# 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
new file mode 100644
index 0000000000..b5b3c0bc85
--- /dev/null
+++ b/benchmark/bm_vm_thread_pass.rb
@@ -0,0 +1,15 @@
+# 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
new file mode 100644
index 0000000000..27157d1a6f
--- /dev/null
+++ b/benchmark/bm_vm_thread_pass_flood.rb
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000000..272d231eba
--- /dev/null
+++ b/benchmark/bm_vm_thread_pipe.rb
@@ -0,0 +1,17 @@
+# Mesure 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
new file mode 100644
index 0000000000..37381ae62b
--- /dev/null
+++ b/benchmark/bm_vm_thread_queue.rb
@@ -0,0 +1,18 @@
+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
new file mode 100644
index 0000000000..cbc72cf604
--- /dev/null
+++ b/benchmark/driver.rb
@@ -0,0 +1,301 @@
+#
+# 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 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
+ output
+
+ if @verbose
+ message '-----------------------------------------------------------'
+ message 'raw data:'
+ message
+ message PP.pp(@results, "", 79)
+ message
+ message "Elapsed time: #{Time.now - @start_time} (sec)"
+ end
+
+ output '-----------------------------------------------------------'
+ output 'benchmark results:'
+
+ if @verbose and @repeat > 1
+ output "minimum results in each #{@repeat} measurements."
+ end
+
+ output "Execution time (sec)"
+ output "name\t#{@execs.map{|(_, v)| v}.join("\t")}"
+ @results.each{|v, result|
+ rets = []
+ s = adjusted_results(v, result){|r|
+ rets << sprintf("%.3f", r)
+ }
+ output "#{v}#{s}\t#{rets.join("\t")}"
+ }
+
+ if @execs.size > 1
+ output
+ output "Speedup ratio: compare with the result of `#{@execs[0][1]}' (greater is better)"
+ output "name\t#{@execs[1..-1].map{|(_, v)| v}.join("\t")}"
+ @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("%.3f", first_value/r)
+ end
+ else
+ first_value = r
+ end
+ }
+ output "#{v}#{s}\t#{rets.join("\t")}"
+ }
+ 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
+
+ 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 => "bmlog-#{Time.now.strftime('%Y%m%d-%H%M%S')}.#{$$}",
+ }
+
+ 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('-q', '--quiet', "Run without notify information except result table."){|q|
+ opt[:quiet] = q
+ }
+ o.on('-v', '--verbose'){|v|
+ opt[:verbose] = v
+ }
+ }
+
+ parser.parse!(ARGV)
+ BenchmarkDriver.benchmark(opt)
+end
+
diff --git a/benchmark/gc/aobench.rb b/benchmark/gc/aobench.rb
new file mode 100644
index 0000000000..2eed7abc83
--- /dev/null
+++ b/benchmark/gc/aobench.rb
@@ -0,0 +1 @@
+require_relative '../bm_app_aobench.rb'
diff --git a/benchmark/gc/binary_trees.rb b/benchmark/gc/binary_trees.rb
new file mode 100644
index 0000000000..af8ea722aa
--- /dev/null
+++ b/benchmark/gc/binary_trees.rb
@@ -0,0 +1 @@
+require_relative '../bm_so_binary_trees.rb'
diff --git a/benchmark/gc/gcbench.rb b/benchmark/gc/gcbench.rb
new file mode 100644
index 0000000000..09a404466a
--- /dev/null
+++ b/benchmark/gc/gcbench.rb
@@ -0,0 +1,56 @@
+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
new file mode 100644
index 0000000000..cb030d458d
--- /dev/null
+++ b/benchmark/gc/hash1.rb
@@ -0,0 +1,11 @@
+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
new file mode 100644
index 0000000000..e8c943fb21
--- /dev/null
+++ b/benchmark/gc/hash2.rb
@@ -0,0 +1,7 @@
+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
new file mode 100644
index 0000000000..c05a79f561
--- /dev/null
+++ b/benchmark/gc/null.rb
@@ -0,0 +1 @@
+# null
diff --git a/benchmark/gc/pentomino.rb b/benchmark/gc/pentomino.rb
new file mode 100644
index 0000000000..94ba74be89
--- /dev/null
+++ b/benchmark/gc/pentomino.rb
@@ -0,0 +1 @@
+require_relative '../bm_app_pentomino.rb'
diff --git a/benchmark/gc/rdoc.rb b/benchmark/gc/rdoc.rb
new file mode 100644
index 0000000000..14c89f5611
--- /dev/null
+++ b/benchmark/gc/rdoc.rb
@@ -0,0 +1,13 @@
+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
new file mode 100644
index 0000000000..c66290140a
--- /dev/null
+++ b/benchmark/gc/redblack.rb
@@ -0,0 +1,366 @@
+# 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
new file mode 100644
index 0000000000..be2c7b7250
--- /dev/null
+++ b/benchmark/gc/ring.rb
@@ -0,0 +1,29 @@
+# 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
new file mode 100644
index 0000000000..b6d787ae27
--- /dev/null
+++ b/benchmark/make_fasta_output.rb
@@ -0,0 +1,19 @@
+# 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
new file mode 100644
index 0000000000..201e22ddfa
--- /dev/null
+++ b/benchmark/other-lang/ack.pl
@@ -0,0 +1,11 @@
+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
new file mode 100644
index 0000000000..9968e7cfcf
--- /dev/null
+++ b/benchmark/other-lang/ack.py
@@ -0,0 +1,16 @@
+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
new file mode 100644
index 0000000000..7451bed6c4
--- /dev/null
+++ b/benchmark/other-lang/ack.rb
@@ -0,0 +1,12 @@
+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
new file mode 100644
index 0000000000..a80b73ba55
--- /dev/null
+++ b/benchmark/other-lang/ack.scm
@@ -0,0 +1,7 @@
+(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
new file mode 100644
index 0000000000..48a2cea019
--- /dev/null
+++ b/benchmark/other-lang/eval.rb
@@ -0,0 +1,66 @@
+
+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
new file mode 100644
index 0000000000..a9b0b69cdf
--- /dev/null
+++ b/benchmark/other-lang/fact.pl
@@ -0,0 +1,13 @@
+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
new file mode 100644
index 0000000000..01593965d9
--- /dev/null
+++ b/benchmark/other-lang/fact.py
@@ -0,0 +1,18 @@
+#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
new file mode 100644
index 0000000000..6cedc752cd
--- /dev/null
+++ b/benchmark/other-lang/fact.rb
@@ -0,0 +1,13 @@
+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
new file mode 100644
index 0000000000..c98a7fedd3
--- /dev/null
+++ b/benchmark/other-lang/fact.scm
@@ -0,0 +1,8 @@
+(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
new file mode 100644
index 0000000000..a46f666d1e
--- /dev/null
+++ b/benchmark/other-lang/fib.pl
@@ -0,0 +1,11 @@
+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
new file mode 100644
index 0000000000..45f2bceb8d
--- /dev/null
+++ b/benchmark/other-lang/fib.py
@@ -0,0 +1,7 @@
+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
new file mode 100644
index 0000000000..ec587eabe0
--- /dev/null
+++ b/benchmark/other-lang/fib.rb
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 0000000000..2fc4e225bd
--- /dev/null
+++ b/benchmark/other-lang/fib.scm
@@ -0,0 +1,7 @@
+(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
new file mode 100644
index 0000000000..2777490aaa
--- /dev/null
+++ b/benchmark/other-lang/loop.pl
@@ -0,0 +1,3 @@
+for($i=0; $i<30000000; $i++){
+}
+
diff --git a/benchmark/other-lang/loop.py b/benchmark/other-lang/loop.py
new file mode 100644
index 0000000000..003749bf3a
--- /dev/null
+++ b/benchmark/other-lang/loop.py
@@ -0,0 +1,2 @@
+for i in xrange(30000000):
+ pass
diff --git a/benchmark/other-lang/loop.rb b/benchmark/other-lang/loop.rb
new file mode 100644
index 0000000000..b367b9dbf3
--- /dev/null
+++ b/benchmark/other-lang/loop.rb
@@ -0,0 +1,4 @@
+i = 0
+while i<30000000
+ i += 1
+end
diff --git a/benchmark/other-lang/loop.scm b/benchmark/other-lang/loop.scm
new file mode 100644
index 0000000000..3364f7e679
--- /dev/null
+++ b/benchmark/other-lang/loop.scm
@@ -0,0 +1 @@
+(dotimes (x 30000000))
diff --git a/benchmark/other-lang/loop2.rb b/benchmark/other-lang/loop2.rb
new file mode 100644
index 0000000000..df8fffc1ff
--- /dev/null
+++ b/benchmark/other-lang/loop2.rb
@@ -0,0 +1 @@
+30000000.times{}
diff --git a/benchmark/other-lang/tak.pl b/benchmark/other-lang/tak.pl
new file mode 100644
index 0000000000..7e748a67c6
--- /dev/null
+++ b/benchmark/other-lang/tak.pl
@@ -0,0 +1,11 @@
+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
new file mode 100644
index 0000000000..04f3f6829c
--- /dev/null
+++ b/benchmark/other-lang/tak.py
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000000..efe5380f4e
--- /dev/null
+++ b/benchmark/other-lang/tak.rb
@@ -0,0 +1,13 @@
+
+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
new file mode 100644
index 0000000000..52a7629ee5
--- /dev/null
+++ b/benchmark/other-lang/tak.scm
@@ -0,0 +1,10 @@
+(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_so_count_words.rb b/benchmark/prepare_so_count_words.rb
new file mode 100644
index 0000000000..ee2138cdb2
--- /dev/null
+++ b/benchmark/prepare_so_count_words.rb
@@ -0,0 +1,15 @@
+# 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
new file mode 100644
index 0000000000..f28f4460a1
--- /dev/null
+++ b/benchmark/prepare_so_k_nucleotide.rb
@@ -0,0 +1,2 @@
+require File.join(File.dirname(__FILE__), 'make_fasta_output')
+prepare_fasta_output(100_000)
diff --git a/benchmark/prepare_so_reverse_complement.rb b/benchmark/prepare_so_reverse_complement.rb
new file mode 100644
index 0000000000..7f089109de
--- /dev/null
+++ b/benchmark/prepare_so_reverse_complement.rb
@@ -0,0 +1,2 @@
+require File.join(File.dirname(__FILE__), 'make_fasta_output')
+prepare_fasta_output(2_500_000)
diff --git a/benchmark/report.rb b/benchmark/report.rb
new file mode 100644
index 0000000000..d2dc56b1e1
--- /dev/null
+++ b/benchmark/report.rb
@@ -0,0 +1,79 @@
+#
+# 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
new file mode 100644
index 0000000000..0cd2363849
--- /dev/null
+++ b/benchmark/run.rb
@@ -0,0 +1,127 @@
+#
+# 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
new file mode 100644
index 0000000000..97c5cef045
--- /dev/null
+++ b/benchmark/runc.rb
@@ -0,0 +1,27 @@
+#
+#
+#
+
+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
new file mode 100644
index 0000000000..41143fbac0
--- /dev/null
+++ b/benchmark/wc.input.base
@@ -0,0 +1,25 @@
+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 73316de894..b499c0b973 100644
--- a/bignum.c
+++ b/bignum.c
@@ -1,366 +1,5197 @@
-/************************************************
+/**********************************************************************
bignum.c -
- $Author: matz $
- $Date: 1995/01/10 10:42:19 $
+ $Author$
created at: Fri Jun 10 00:48:55 JST 1994
-************************************************/
+ Copyright (C) 1993-2007 Yukihiro Matsumoto
-#include "ruby.h"
-#include <ctype.h>
+**********************************************************************/
+
+#include "ruby/ruby.h"
+#include "ruby/thread.h"
+#include "ruby/util.h"
+#include "internal.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
-extern VALUE cInteger;
-VALUE cBignum;
+#define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM)
-#define BDIGITS(x) RBIGNUM(x)->digits
-#define BITSPERDIG (sizeof(USHORT)*CHAR_BIT)
-#define BIGRAD (1L << BITSPERDIG)
-#define DIGSPERLONG ((UINT)(sizeof(long)/sizeof(USHORT)))
-#define BIGUP(x) ((unsigned long)(x) << BITSPERDIG)
-#define BIGDN(x) ((x) >> BITSPERDIG)
-#define BIGLO(x) ((x) & (BIGRAD-1))
+VALUE rb_cBignum;
+const char ruby_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-static VALUE
-bignew_1(class, len, sign)
- VALUE class;
- UINT len;
- char sign;
+#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_BDIGITS <= sizeof(BDIGIT));
+STATIC_ASSERT(sizeof_bdigit_and_dbl, SIZEOF_BDIGITS*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, RBIGNUM_EMBED_LEN_MAX <= (RBIGNUM_EMBED_LEN_MASK >> RBIGNUM_EMBED_LEN_SHIFT));
+
+#if SIZEOF_BDIGITS < SIZEOF_LONG
+STATIC_ASSERT(sizeof_long_and_sizeof_bdigit, SIZEOF_LONG % SIZEOF_BDIGITS == 0);
+#else
+STATIC_ASSERT(sizeof_long_and_sizeof_bdigit, SIZEOF_BDIGITS % SIZEOF_LONG == 0);
+#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) (RBIGNUM_DIGITS(x))
+#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_BDIGITS == 2
+# define swap_bdigit(x) swap16(x)
+#elif SIZEOF_BDIGITS == 4
+# define swap_bdigit(x) swap32(x)
+#elif SIZEOF_BDIGITS == 8
+# define swap_bdigit(x) swap64(x)
+#endif
+
+#define BIGZEROP(x) (RBIGNUM_LEN(x) == 0 || \
+ (BDIGITS(x)[0] == 0 && \
+ (RBIGNUM_LEN(x) == 1 || bigzero_p(x))))
+#define BIGSIZE(x) (RBIGNUM_LEN(x) == 0 ? (size_t)0 : \
+ BDIGITS(x)[RBIGNUM_LEN(x)-1] ? \
+ (size_t)(RBIGNUM_LEN(x)*SIZEOF_BDIGITS - nlz(BDIGITS(x)[RBIGNUM_LEN(x)-1])/CHAR_BIT) : \
+ rb_absint_size(x, NULL))
+
+#define BIGDIVREM_EXTRA_WORDS 1
+#define roomof(n, m) ((long)(((n)+(m)-1) / (m)))
+#define bdigit_roomof(n) roomof(n, SIZEOF_BDIGITS)
+#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 RBIGNUM_SET_NEGATIVE_SIGN(b) RBIGNUM_SET_SIGN(b, 0)
+#define RBIGNUM_SET_POSITIVE_SIGN(b) RBIGNUM_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, long 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_BDIGITS <= SIZEOF_INT
+static int nlz(BDIGIT x) { return nlz_int((unsigned int)x) - (SIZEOF_INT-SIZEOF_BDIGITS) * CHAR_BIT; }
+#elif SIZEOF_BDIGITS <= SIZEOF_LONG
+static int nlz(BDIGIT x) { return nlz_long((unsigned long)x) - (SIZEOF_LONG-SIZEOF_BDIGITS) * CHAR_BIT; }
+#elif SIZEOF_BDIGITS <= SIZEOF_LONG_LONG
+static int nlz(BDIGIT x) { return nlz_long_long((unsigned LONG_LONG)x) - (SIZEOF_LONG_LONG-SIZEOF_BDIGITS) * CHAR_BIT; }
+#elif SIZEOF_BDIGITS <= SIZEOF_INT128_T
+static int nlz(BDIGIT x) { return nlz_int128((uint128_t)x) - (SIZEOF_INT128_T-SIZEOF_BDIGITS) * 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 scirpt, 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)
{
- NEWOBJ(big, struct RBignum);
- OBJSETUP(big, cBignum, T_BIGNUM);
- big->sign = sign;
- big->len = len;
- BDIGITS(big) = ALLOC_N(USHORT, len);
+ 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
+ }
- return (VALUE)big;
+ *exp_ret = exponent;
+ return maxpow;
}
-#define bignew(len,sign) bignew_1(cBignum,len,sign)
+static inline BDIGIT_DBL
+bary2bdigitdbl(const BDIGIT *ds, size_t n)
+{
+ assert(n <= 2);
-VALUE
-big_clone(x)
- struct RBignum *x;
+ 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)
{
- VALUE z = bignew_1(CLASS_OF(x), x->len, x->sign);
+ assert(n == 2);
- MEMCPY(BDIGITS(z), BDIGITS(x), USHORT, x->len);
- return (VALUE)z;
+ ds[0] = BIGLO(num);
+ ds[1] = (BDIGIT)BIGDN(num);
}
-void
-big_2comp(x) /* get 2's complement */
- struct RBignum *x;
+static int
+bary_cmp(const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
{
- UINT i = x->len;
- USHORT *ds = BDIGITS(x);
- long num;
+ 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;
+}
- while (i--) ds[i] = ~ds[i];
- i = 0; num = 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 {
- num += (long)ds[i];
- ds[i++] = BIGLO(num);
+ 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_BDIGITS
+ 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_BDIGITS
+ 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_BDIGITS
+ 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_BDIGITS
+ 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_BDIGITS && 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_BDIGITS
+ 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_BDIGITS && 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_BDIGITS
+ 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_BDIGITS && 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_BDIGITS == 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_BDIGITS;
+ 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_BDIGITS == sizeof(BDIGIT) &&
+ wordsize % SIZEOF_BDIGITS == 0 && (uintptr_t)words % ALIGNOF(BDIGIT) == 0) {
+ size_t bdigits_per_word = wordsize / SIZEOF_BDIGITS;
+ 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_BDIGITS * 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_BDIGITS && 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_BDIGITS
+ 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_BDIGITS
+ 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_BDIGITS
+ 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_BDIGITS == 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_BDIGITS;
+ 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_BDIGITS == sizeof(BDIGIT) &&
+ wordsize % SIZEOF_BDIGITS == 0) {
+ size_t bdigits_per_word = wordsize / SIZEOF_BDIGITS;
+ 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);
- } while (i < x->len);
+ }
+ 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 = RBIGNUM_LEN(x), yn = RBIGNUM_LEN(y), zn = xn + yn;
+ VALUE z = bignew(zn, RBIGNUM_SIGN(x)==RBIGNUM_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 = RBIGNUM_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 = RBIGNUM_LEN(x), yn = RBIGNUM_LEN(y), zn = xn + yn;
+ VALUE z = bignew(zn, RBIGNUM_SIGN(x)==RBIGNUM_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_BDIGITS * zn <= 16) {
+ uint128_t z, x, y;
+ ssize_t i;
+ for (x = 0, i = xn-1; 0 <= i; i--) { x <<= SIZEOF_BDIGITS*CHAR_BIT; x |= xds[i]; }
+ for (y = 0, i = yn-1; 0 <= i; i--) { y <<= SIZEOF_BDIGITS*CHAR_BIT; y |= yds[i]; }
+ for (z = 0, i = zn-1; 0 <= i; i--) { z <<= SIZEOF_BDIGITS*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 = RBIGNUM_LEN(x), yn = RBIGNUM_LEN(y), zn = xn + yn;
+ VALUE z = bignew(zn, RBIGNUM_SIGN(x)==RBIGNUM_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 = RBIGNUM_LEN(x), yn = RBIGNUM_LEN(y), zn = xn + yn;
+ VALUE z = bignew(zn, RBIGNUM_SIGN(x)==RBIGNUM_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_BDIGITS)*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 = RBIGNUM_LEN(x), yn = RBIGNUM_LEN(y), zn = xn + yn;
+ VALUE z = bignew(zn, RBIGNUM_SIGN(x)==RBIGNUM_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;
+}
+
+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 (xds[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 = RBIGNUM_LEN(x), yn = RBIGNUM_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, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
+ qds = BDIGITS(q);
+
+ rn = yn;
+ r = bignew(rn, RBIGNUM_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_BDIGITS)*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
-bignorm(x)
- struct RBignum *x;
+rb_big_divrem_gmp(VALUE x, VALUE y)
+{
+ size_t xn = RBIGNUM_LEN(x), yn = RBIGNUM_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, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
+ qds = BDIGITS(q);
+
+ rn = yn;
+ r = bignew(rn, RBIGNUM_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)
+{
+ long i;
+ printf("%c0x0", RBIGNUM_SIGN(x) ? '+' : '-');
+ for (i = RBIGNUM_LEN(x); i--; ) {
+ printf("_%0*"PRIxBDIGIT, SIZEOF_BDIGITS*2, BDIGITS(x)[i]);
+ }
+ printf(", len=%lu", RBIGNUM_LEN(x));
+ puts("");
+}
+
+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), RBIGNUM_LEN(x));
+}
+
+int
+rb_bigzero_p(VALUE x)
{
- UINT len = x->len;
- USHORT *ds = BDIGITS(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 (RBIGNUM_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;
+}
- while (len-- && !ds[len]) ;
- x->len = ++len;
+#define RBIGNUM_SET_LEN(b,l) \
+ ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
+ (void)(RBASIC(b)->flags = \
+ (RBASIC(b)->flags & ~RBIGNUM_EMBED_LEN_MASK) | \
+ ((l) << RBIGNUM_EMBED_LEN_SHIFT)) : \
+ (void)(RBIGNUM(b)->as.heap.len = (l)))
- if (len*sizeof(USHORT) < sizeof(VALUE) ||
- (len*sizeof(USHORT) == sizeof(VALUE) &&
- ds[sizeof(VALUE)/sizeof(USHORT)-1] <= 0x3fff)) {
- long num = 0;
- while (len--) {
- num = BIGUP(num) + ds[len];
+static void
+rb_big_realloc(VALUE big, long len)
+{
+ BDIGIT *ds;
+ if (RBASIC(big)->flags & RBIGNUM_EMBED_FLAG) {
+ if (RBIGNUM_EMBED_LEN_MAX < len) {
+ ds = ALLOC_N(BDIGIT, len);
+ MEMCPY(ds, RBIGNUM(big)->as.ary, BDIGIT, RBIGNUM_EMBED_LEN_MAX);
+ RBIGNUM(big)->as.heap.len = RBIGNUM_LEN(big);
+ RBIGNUM(big)->as.heap.digits = ds;
+ RBASIC(big)->flags &= ~RBIGNUM_EMBED_FLAG;
}
- if (x->sign) {
- if (POSFIXABLE(num)) return INT2FIX(num);
+ }
+ else {
+ if (len <= RBIGNUM_EMBED_LEN_MAX) {
+ ds = RBIGNUM(big)->as.heap.digits;
+ RBASIC(big)->flags |= RBIGNUM_EMBED_FLAG;
+ RBIGNUM_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 (NEGFIXABLE(-num)) return INT2FIX(-num);
+ else {
+ if (RBIGNUM_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, long len)
+{
+ rb_big_realloc(big, len);
+ RBIGNUM_SET_LEN(big, len);
+}
+
+static VALUE
+bignew_1(VALUE klass, long len, int sign)
+{
+ NEWOBJ_OF(big, struct RBignum, klass, T_BIGNUM | (RGENGC_WB_PROTECTED_BIGNUM ? FL_WB_PROTECTED : 0));
+ RBIGNUM_SET_SIGN(big, sign?1:0);
+ if (len <= RBIGNUM_EMBED_LEN_MAX) {
+ RBASIC(big)->flags |= RBIGNUM_EMBED_FLAG;
+ RBIGNUM_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;
}
- return (VALUE)x;
+ OBJ_FREEZE(big);
+ return (VALUE)big;
}
VALUE
-uint2big(n)
- UINT n;
+rb_big_new(long len, int sign)
{
- UINT i = 0;
- USHORT *digits;
- struct RBignum *big;
+ return bignew(len, sign != 0);
+}
- i = 0;
- big = (struct RBignum*)bignew(DIGSPERLONG, 1);
- digits = BDIGITS(big);
- while (i < DIGSPERLONG) {
- digits[i++] = BIGLO(n);
+VALUE
+rb_big_clone(VALUE x)
+{
+ long len = RBIGNUM_LEN(x);
+ VALUE z = bignew_1(CLASS_OF(x), len, RBIGNUM_SIGN(x));
+
+ MEMCPY(BDIGITS(z), BDIGITS(x), BDIGIT, len);
+ return z;
+}
+
+static void
+big_extend_carry(VALUE x)
+{
+ rb_big_resize(x, RBIGNUM_LEN(x)+1);
+ BDIGITS(x)[RBIGNUM_LEN(x)-1] = 1;
+}
+
+/* modify a bignum by 2's complement */
+static void
+get2comp(VALUE x)
+{
+ long i = RBIGNUM_LEN(x);
+ BDIGIT *ds = BDIGITS(x);
+
+ if (bary_2comp(ds, i)) {
+ big_extend_carry(x);
+ }
+}
+
+void
+rb_big_2comp(VALUE x) /* get 2's complement */
+{
+ get2comp(x);
+}
+
+static BDIGIT
+abs2twocomp(VALUE *xp, long *n_ret)
+{
+ VALUE x = *xp;
+ long n = RBIGNUM_LEN(x);
+ BDIGIT *ds = BDIGITS(x);
+ BDIGIT hibits = 0;
+
+ BARY_TRUNC(ds, n);
+
+ if (n != 0 && RBIGNUM_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)
+{
+ RBIGNUM_SET_SIGN(x, !hibits);
+ if (hibits) {
+ get2comp(x);
+ }
+}
+
+static inline VALUE
+bigtrunc(VALUE x)
+{
+ long len = RBIGNUM_LEN(x);
+ BDIGIT *ds = BDIGITS(x);
+
+ if (len == 0) return x;
+ while (--len && !ds[len]);
+ if (RBIGNUM_LEN(x) > len+1) {
+ rb_big_resize(x, len+1);
+ }
+ return x;
+}
+
+static inline VALUE
+bigfixize(VALUE x)
+{
+ size_t n = RBIGNUM_LEN(x);
+ BDIGIT *ds = BDIGITS(x);
+#if SIZEOF_BDIGITS < SIZEOF_LONG
+ unsigned long u;
+#else
+ BDIGIT u;
+#endif
+
+ BARY_TRUNC(ds, n);
+
+ if (n == 0) return INT2FIX(0);
+
+#if SIZEOF_BDIGITS < SIZEOF_LONG
+ if (sizeof(long)/SIZEOF_BDIGITS < n)
+ goto return_big;
+ else {
+ int i = (int)n;
+ u = 0;
+ while (i--) {
+ u = (unsigned long)(BIGUP(u) + ds[i]);
+ }
+ }
+#else /* SIZEOF_BDIGITS >= SIZEOF_LONG */
+ if (1 < n)
+ goto return_big;
+ else
+ u = ds[0];
+#endif
+
+ if (RBIGNUM_POSITIVE_P(x)) {
+ if (POSFIXABLE(u)) return LONG2FIX((long)u);
+ }
+ else {
+ if (u <= -FIXNUM_MIN) return LONG2FIX(-(long)u);
+ }
+
+ return_big:
+ rb_big_resize(x, n);
+ return x;
+}
+
+static VALUE
+bignorm(VALUE x)
+{
+ if (RB_BIGNUM_TYPE_P(x)) {
+ x = bigfixize(x);
+ }
+ return x;
+}
+
+VALUE
+rb_big_norm(VALUE x)
+{
+ return bignorm(x);
+}
+
+VALUE
+rb_uint2big(VALUE n)
+{
+ long i;
+ VALUE big = bignew(bdigit_roomof(SIZEOF_VALUE), 1);
+ BDIGIT *digits = BDIGITS(big);
+
+#if SIZEOF_BDIGITS >= SIZEOF_VALUE
+ digits[0] = n;
+#else
+ for (i = 0; i < bdigit_roomof(SIZEOF_VALUE); i++) {
+ digits[i] = BIGLO(n);
n = BIGDN(n);
}
+#endif
- i = DIGSPERLONG;
- while (i-- && !digits[i]) ;
- big->len = i+1;
- return (VALUE)big;
+ i = bdigit_roomof(SIZEOF_VALUE);
+ while (--i && !digits[i]) ;
+ RBIGNUM_SET_LEN(big, i+1);
+ return big;
}
VALUE
-int2big(n)
- int n;
+rb_int2big(SIGNED_VALUE n)
{
- int neg = 0;
- struct RBignum *big;
+ long neg = 0;
+ VALUE u;
+ VALUE big;
if (n < 0) {
- n = -n;
+ u = 1 + (VALUE)(-(n + 1)); /* u = -n avoiding overflow */
neg = 1;
}
- big = (struct RBignum*)uint2big(n);
+ else {
+ u = n;
+ }
+ big = rb_uint2big(u);
if (neg) {
- big->sign = 0;
+ RBIGNUM_SET_SIGN(big, 0);
}
- return (VALUE)big;
+ return big;
}
VALUE
-uint2inum(n)
- UINT n;
+rb_uint2inum(VALUE n)
{
- if (POSFIXABLE(n)) return INT2FIX(n);
- return uint2big(n);
+ if (POSFIXABLE(n)) return LONG2FIX(n);
+ return rb_uint2big(n);
}
VALUE
-int2inum(n)
- int n;
+rb_int2inum(SIGNED_VALUE n)
+{
+ if (FIXABLE(n)) return LONG2FIX(n);
+ return rb_int2big(n);
+}
+
+void
+rb_big_pack(VALUE val, unsigned long *buf, long num_longs)
{
- if (FIXABLE(n)) return INT2FIX(n);
- return int2big(n);
+ rb_integer_pack(val, buf, num_longs, sizeof(long), 0,
+ INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER|
+ INTEGER_PACK_2COMP);
}
VALUE
-str2inum(str, base)
- char *str;
- int base;
+rb_big_unpack(unsigned long *buf, long num_longs)
{
- char sign = 1, c;
- unsigned long num;
- UINT len, blen = 1, i;
+ return rb_integer_unpack(buf, num_longs, sizeof(long), 0,
+ INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER|
+ INTEGER_PACK_2COMP);
+}
+
+/*
+ * 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)
+{
+ BDIGIT *dp;
+ BDIGIT *de;
+ BDIGIT fixbuf[bdigit_roomof(sizeof(long))];
+
+ int num_leading_zeros;
+
+ val = rb_to_int(val);
+
+ if (FIXNUM_P(val)) {
+ long v = FIX2LONG(val);
+ if (v < 0) {
+ v = -v;
+ }
+#if SIZEOF_BDIGITS >= 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 + RBIGNUM_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_BDIGITS - 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] = { nlz_bits_in_msbyte };
+ 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;
+
+ /*
+ * 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;
+ }
+ 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);
+
+ if (sign == 2) {
+#if defined __GNUC__ && (__GNUC__ == 4 && __GNUC_MINOR__ == 4)
+ *nlz_bits_ret = 0;
+#endif
+ return (size_t)-1;
+ }
+ *nlz_bits_ret = nlz_bits;
+ return numwords;
+}
+
+/*
+ * 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)
+{
+ 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);
+
+ 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
+ }
+ else {
+ numwords = absint_numwords_generic(numbytes, nlz_bits_in_msbyte, word_numbits, &nlz_bits);
+ }
+ 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 : RBIGNUM_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 : RBIGNUM_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;
+
+ val = rb_to_int(val);
+
+ if (FIXNUM_P(val)) {
+ long v = FIX2LONG(val);
+ if (v < 0) {
+ v = -v;
+ }
+#if SIZEOF_BDIGITS >= 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 + RBIGNUM_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);
+}
+
+
+/*
+ * 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.
+ */
+
+int
+rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags)
+{
+ int sign;
+ BDIGIT *ds;
+ size_t num_bdigits;
+ BDIGIT fixbuf[bdigit_roomof(sizeof(long))];
+
+ RB_GC_GUARD(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_BDIGITS >= 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 = RBIGNUM_POSITIVE_P(val) ? 1 : -1;
+ ds = BDIGITS(val);
+ num_bdigits = RBIGNUM_LEN(val);
+ }
+
+ 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.
+ */
+
+VALUE
+rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags)
+{
+ VALUE val;
+ size_t num_bdigits;
+ 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), RBIGNUM_LEN(val)))
+ sign = 0;
+ RBIGNUM_SET_SIGN(val, 0 <= sign);
+
+ if (flags & INTEGER_PACK_FORCE_BIGNUM)
+ return bigtrunc(val);
+ return bignorm(val);
+}
+
+#define QUAD_SIZE 8
+
+void
+rb_quad_pack(char *buf, VALUE val)
+{
+ rb_integer_pack(val, buf, 1, QUAD_SIZE, 0,
+ INTEGER_PACK_NATIVE_BYTE_ORDER|
+ INTEGER_PACK_2COMP);
+}
+
+VALUE
+rb_quad_unpack(const char *buf, int signed_p)
+{
+ return rb_integer_unpack(buf, 1, QUAD_SIZE, 0,
+ INTEGER_PACK_NATIVE_BYTE_ORDER|
+ (signed_p ? INTEGER_PACK_2COMP : 0));
+}
+
+#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;
+
+ if (badcheck && *str == '_') goto bad;
+
+ while ((c = *str++) != 0) {
+ if (c == '_') {
+ if (nondigit) {
+ if (badcheck) goto bad;
+ break;
+ }
+ nondigit = (char) c;
+ continue;
+ }
+ 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;
- USHORT *zds;
- while (isspace(*str)) str++;
- if (*str == '-') {
+ 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;
+}
+
+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), RBIGNUM_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), RBIGNUM_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_BDIGITS)*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
+
+VALUE
+rb_cstr_to_inum(const char *str, int base, int badcheck)
+{
+ const char *s = str;
+ char sign = 1;
+ int c;
+ VALUE z;
+
+ int bits_per_digit;
+
+ const char *digits_start, *digits_end;
+ size_t num_digits;
+ size_t num_bdigits;
+ size_t len;
+
+ if (!str) {
+ if (badcheck) {
+ bad:
+ rb_invalid_str(s, "Integer()");
+ }
+ return INT2FIX(0);
+ }
+ while (ISSPACE(*str)) str++;
+
+ if (str[0] == '+') {
+ str++;
+ }
+ else if (str[0] == '-') {
str++;
sign = 0;
}
- if (base == 0) {
- if (*str == '0') {
- str++;
- if (*str == 'x' || *str == 'X') {
- str++;
+ if (str[0] == '+' || str[0] == '-') {
+ if (badcheck) goto bad;
+ return INT2FIX(0);
+ }
+ if (base <= 0) {
+ if (str[0] == '0') {
+ switch (str[1]) {
+ case 'x': case 'X':
base = 16;
- }
- else {
+ 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;
}
- if (*str == '\0') return INT2FIX(0);
+ }
+ else if (base < -1) {
+ base = -base;
}
else {
base = 10;
}
}
- len = strlen(str);
- if (base == 8) {
- len = 3*len*sizeof(char);
+ else if (base == 2) {
+ if (str[0] == '0' && (str[1] == 'b'||str[1] == 'B')) {
+ str += 2;
+ }
+ }
+ else if (base == 8) {
+ if (str[0] == '0' && (str[1] == 'o'||str[1] == 'O')) {
+ str += 2;
+ }
+ }
+ else if (base == 10) {
+ if (str[0] == '0' && (str[1] == 'd'||str[1] == 'D')) {
+ str += 2;
+ }
}
- else { /* base == 10 or 16 */
- len = 4*len*sizeof(char);
+ else if (base == 16) {
+ 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;
+ }
+ if (!(c = *str) || ISSPACE(c)) --str;
+ }
+ c = *str;
+ c = conv_digit(c);
+ if (c < 0 || c >= base) {
+ if (badcheck) goto bad;
+ return INT2FIX(0);
}
- if (len <= (sizeof(VALUE)*CHAR_BIT)) {
- UINT val = strtoul(str, 0, base);
+ 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 (str < end && *end == '_') goto bigparse;
+ if (badcheck) {
+ if (end == str) goto bad; /* no number */
+ while (*end && ISSPACE(*end)) end++;
+ if (*end) goto bad; /* trailing garbage */
+ }
if (POSFIXABLE(val)) {
- if (sign) return INT2FIX(val);
+ if (sign) return LONG2FIX(val);
else {
- int result = -(int)val;
- return INT2FIX(result);
+ long result = -(long)val;
+ return LONG2FIX(result);
}
}
else {
- VALUE big = uint2big(val);
- RBIGNUM(big)->sign = sign;
- return big;
+ VALUE big = rb_uint2big(val);
+ RBIGNUM_SET_SIGN(big, sign);
+ return bignorm(big);
}
}
- len = (len/(sizeof(USHORT)*CHAR_BIT))+1;
- z = bignew(len, sign);
- zds = BDIGITS(z);
- for (i=len;i--;) zds[i]=0;
- while (c = *str++) {
- switch (c) {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- c = c - '0';
- break;
- case 'a': case 'b': case 'c':
- case 'd': case 'e': case 'f':
- c = c - 'a' + 10;
- break;
- case 'A': case 'B': case 'C':
- case 'D': case 'E': case 'F':
- c = c - 'A' + 10;
- break;
- default:
- c = base;
- break;
- }
- if (c >= base) break;
- i = 0;
- num = c;
- for (;;) {
- while (i<blen) {
- num += zds[i]*base;
- zds[i++] = BIGLO(num);
- num = BIGDN(num);
- }
- if (num) {
- blen++;
- continue;
- }
- break;
+ bigparse:
+ digits_start = str;
+ str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
+ digits_end = digits_start + len;
+
+ if (POW2_P(base)) {
+ z = str2big_poweroftwo(sign, digits_start, digits_end, num_digits,
+ bits_per_digit);
+ }
+ 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);
+ }
+ }
+
+ return bignorm(z);
+}
+
+VALUE
+rb_str_to_inum(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);
+ }
+ if (s) {
+ len = RSTRING_LEN(str);
+ if (s[len]) { /* no sentinel somehow */
+ char *p = ALLOCV(v, 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);
}
-static char hexmap[] = "0123456789abcdef";
VALUE
-big2str(x, base)
- struct RBignum *x;
- int base;
+rb_str2big_karatsuba(VALUE arg, int base, int badcheck)
{
- VALUE t;
- USHORT *ds;
- UINT i, j, hbase;
- VALUE ss;
- char *s, c;
+ int positive_p = 1;
+ const char *s, *str;
+ const char *digits_start, *digits_end;
+ size_t num_digits;
+ size_t len;
+ VALUE z;
- if (FIXNUM_P(x)) {
- return fix2str(x, base);
+ int digits_per_bdigits_dbl;
+ size_t num_bdigits;
+
+ if (base < 2 || 36 < base) {
+ rb_raise(rb_eArgError, "invalid radix %d", base);
}
- i = x->len;
- if (i == 0) return str_new2("0");
- if (base == 10) {
- j = (sizeof(USHORT)/sizeof(char)*CHAR_BIT*i*241L)/800+2;
- hbase = 10000;
+
+ rb_must_asciicompat(arg);
+ s = str = StringValueCStr(arg);
+ if (*str == '-') {
+ str++;
+ positive_p = 0;
}
- else if (base == 16) {
- j = (sizeof(USHORT)/sizeof(char)*CHAR_BIT*i)/4+2;
- hbase = 0x10000;
+
+ 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);
}
- else if (base == 8) {
- j = (sizeof(USHORT)/sizeof(char)*CHAR_BIT*i)+2;
- hbase = 010000;
+
+ rb_must_asciicompat(arg);
+ s = str = StringValueCStr(arg);
+ if (*str == '-') {
+ str++;
+ positive_p = 0;
}
- else if (base == 2) {
- j = (sizeof(USHORT)*CHAR_BIT*i)+2;
- hbase = 020;
+
+ 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);
+}
+#endif
+
+#if HAVE_LONG_LONG
+
+static VALUE
+rb_ull2big(unsigned LONG_LONG n)
+{
+ long i;
+ VALUE big = bignew(bdigit_roomof(SIZEOF_LONG_LONG), 1);
+ BDIGIT *digits = BDIGITS(big);
+
+#if SIZEOF_BDIGITS >= SIZEOF_LONG_LONG
+ digits[0] = n;
+#else
+ for (i = 0; i < bdigit_roomof(SIZEOF_LONG_LONG); i++) {
+ digits[i] = BIGLO(n);
+ n = BIGDN(n);
+ }
+#endif
+
+ i = bdigit_roomof(SIZEOF_LONG_LONG);
+ while (i-- && !digits[i]) ;
+ RBIGNUM_SET_LEN(big, i+1);
+ return big;
+}
+
+static VALUE
+rb_ll2big(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 */
+ neg = 1;
+ }
+ else {
+ u = n;
+ }
+ big = rb_ull2big(u);
+ if (neg) {
+ RBIGNUM_SET_SIGN(big, 0);
+ }
+ return big;
+}
+
+VALUE
+rb_ull2inum(unsigned LONG_LONG n)
+{
+ if (POSFIXABLE(n)) return LONG2FIX(n);
+ return rb_ull2big(n);
+}
+
+VALUE
+rb_ll2inum(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)
+{
+ 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 = RBIGNUM_LEN(x);
+ z = bignew(xn+s1+1, RBIGNUM_SIGN(x));
+ zds = BDIGITS(z);
+ BDIGITS_ZERO(zds, s1);
+ xds = BDIGITS(x);
+ zds[xn+s1] = bary_small_lshift(zds+s1, xds, xn, s2);
}
else {
- j = 0;
- hbase = 0;
- Fail("bignum cannot treat base %d", base);
+ long zn;
+ BDIGIT hibitsx;
+ if (LONG_MAX < shift_numdigits || (size_t)RBIGNUM_LEN(x) <= shift_numdigits) {
+ if (RBIGNUM_POSITIVE_P(x) ||
+ bary_zero_p(BDIGITS(x), RBIGNUM_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 RBIGNUM_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);
+}
- t = big_clone(x);
- ds = BDIGITS(t);
- ss = str_new(0, j);
- s = RSTRING(ss)->ptr;
+#define MAX_BASE36_POWER_TABLE_ENTRIES (SIZEOF_SIZE_T * CHAR_BIT + 1)
- s[0] = x->sign ? '+' : '-';
- while (i && j) {
- int k = i;
- unsigned long num = 0;
- while (k--) {
- num = BIGUP(num) + ds[k];
- ds[k] = num / hbase;
- num %= hbase;
+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;
}
- if (ds[i-1] == 0) i--;
- k = 4;
- while (k--) {
- c = num % base;
- s[--j] = hexmap[(int)c];
- num /= base;
- if (i == 0 && num == 0) break;
+ }
+}
+
+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];
+}
+
+/*
+ * deprecated. (used only from deprecated rb_big2str0)
+ *
+ * big2str_muraken_find_n1
+ *
+ * Let a natural number x is given by:
+ * x = 2^0 * x_0 + 2^1 * x_1 + ... + 2^(B*n_0 - 1) * x_{B*n_0 - 1},
+ * where B is BITSPERDIG (i.e. BDIGITS*CHAR_BIT) and n_0 is
+ * RBIGNUM_LEN(x).
+ *
+ * Now, we assume n_1 = min_n \{ n | 2^(B*n_0/2) <= b_1^(n_1) \}, so
+ * it is realized that 2^(B*n_0) <= {b_1}^{2*n_1}, where b_1 is a
+ * given radix number. And then, we have n_1 <= (B*n_0) /
+ * (2*log_2(b_1)), therefore n_1 is given by ceil((B*n_0) /
+ * (2*log_2(b_1))).
+ */
+static long
+big2str_find_n1(VALUE x, int base)
+{
+ static const double log_2[] = {
+ 1.0, 1.58496250072116, 2.0,
+ 2.32192809488736, 2.58496250072116, 2.8073549220576,
+ 3.0, 3.16992500144231, 3.32192809488736,
+ 3.4594316186373, 3.58496250072116, 3.70043971814109,
+ 3.8073549220576, 3.90689059560852, 4.0,
+ 4.08746284125034, 4.16992500144231, 4.24792751344359,
+ 4.32192809488736, 4.39231742277876, 4.4594316186373,
+ 4.52356195605701, 4.58496250072116, 4.64385618977472,
+ 4.70043971814109, 4.75488750216347, 4.8073549220576,
+ 4.85798099512757, 4.90689059560852, 4.95419631038688,
+ 5.0, 5.04439411935845, 5.08746284125034,
+ 5.12928301694497, 5.16992500144231
+ };
+ long bits;
+
+ if (base < 2 || 36 < base)
+ rb_bug("invalid radix %d", base);
+
+ if (FIXNUM_P(x)) {
+ bits = (SIZEOF_LONG*CHAR_BIT - 1)/2 + 1;
+ }
+ else if (BIGZEROP(x)) {
+ return 0;
+ }
+ else if (RBIGNUM_LEN(x) >= LONG_MAX/BITSPERDIG) {
+ rb_raise(rb_eRangeError, "bignum too big to convert into `string'");
+ }
+ else {
+ bits = BITSPERDIG*RBIGNUM_LEN(x);
+ }
+
+ /* @shyouhei note: vvvvvvvvvvvvv this cast is suspicious. But I believe it is OK, because if that cast loses data, this x value is too big, and should have raised RangeError. */
+ return (long)ceil(((double)bits)/log_2[base - 2]);
+}
+
+struct big2str_struct {
+ int negative;
+ 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 = RBIGNUM_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 = RBIGNUM_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 (RBIGNUM_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++ = RBIGNUM_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--;
}
- while (s[j] == '0') j++;
- RSTRING(ss)->len -= x->sign?j:j-1;
- memmove(x->sign?s:s+1, s+j, RSTRING(ss)->len);
- s[RSTRING(ss)->len] = '\0';
+ return result;
+}
- return ss;
+VALUE
+rb_big2str_poweroftwo(VALUE x, int base)
+{
+ return big2str_base_poweroftwo(x, base);
}
static VALUE
-big_to_s(x)
- struct RBignum *x;
+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 = RBIGNUM_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)RBIGNUM_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)RBIGNUM_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 = RBIGNUM_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 + RBIGNUM_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(x, 10);
+ return big2str_generic(x, base);
}
-int
-big2int(x)
- struct RBignum *x;
+#ifdef USE_GMP
+VALUE
+big2str_gmp(VALUE x, int base)
+{
+ const size_t nails = (sizeof(BDIGIT)-SIZEOF_BDIGITS)*CHAR_BIT;
+ mpz_t mx;
+ size_t size;
+ VALUE str;
+ BDIGIT *xds = BDIGITS(x);
+ size_t xn = RBIGNUM_LEN(x);
+
+ mpz_init(mx);
+ mpz_import(mx, xn, -1, sizeof(BDIGIT), 0, nails, xds);
+
+ size = mpz_sizeinbase(mx, base);
+
+ if (RBIGNUM_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;
+}
+
+VALUE
+rb_big2str_gmp(VALUE x, int base)
+{
+ return big2str_gmp(x, base);
+}
+#endif
+
+static VALUE
+rb_big2str1(VALUE x, int base)
+{
+ BDIGIT *xds;
+ size_t xn;
+
+ if (FIXNUM_P(x)) {
+ return rb_fix2str(x, base);
+ }
+
+ bigtrunc(x);
+ xds = BDIGITS(x);
+ xn = RBIGNUM_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'");
+ }
+
+ if (POW2_P(base)) {
+ /* base == 2 || base == 4 || base == 8 || base == 16 || base == 32 */
+ return big2str_base_poweroftwo(x, base);
+ }
+
+#ifdef USE_GMP
+ if (GMP_BIG2STR_DIGITS < xn) {
+ return big2str_gmp(x, base);
+ }
+#endif
+
+ return big2str_generic(x, base);
+}
+
+/* deprecated */
+VALUE
+rb_big2str0(VALUE x, int base, int trim)
+{
+ VALUE str;
+ long oldlen;
+ long n2;
+
+ str = rb_big2str1(x, base);
+
+ if (trim || FIXNUM_P(x) || BIGZEROP(x))
+ return str;
+
+ oldlen = RSTRING_LEN(str);
+ if (oldlen && RSTRING_PTR(str)[0] != '-') {
+ rb_str_resize(str, oldlen+1);
+ MEMMOVE(RSTRING_PTR(str)+1, RSTRING_PTR(str), char, oldlen);
+ RSTRING_PTR(str)[0] = '+';
+ }
+
+ n2 = big2str_find_n1(x, base);
+
+ oldlen = RSTRING_LEN(str);
+ if (oldlen-1 < n2) {
+ long off = n2 - (oldlen-1);
+ rb_str_resize(str, n2+1);
+ MEMMOVE(RSTRING_PTR(str)+1+off, RSTRING_PTR(str)+1, char, oldlen-1);
+ memset(RSTRING_PTR(str)+1, '0', off);
+ }
+
+ RSTRING_PTR(str)[RSTRING_LEN(str)] = '\0';
+
+ return str;
+}
+
+VALUE
+rb_big2str(VALUE x, int base)
+{
+ return rb_big2str1(x, base);
+}
+
+/*
+ * call-seq:
+ * 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"
+ * 12345654321.to_s(16) #=> "2dfdbbc31"
+ * 78546939656932.to_s(36) #=> "rubyrules"
+ */
+
+static VALUE
+rb_big_to_s(int argc, VALUE *argv, VALUE x)
{
+ int base;
+
+ if (argc == 0) base = 10;
+ else {
+ VALUE b;
+
+ rb_scan_args(argc, argv, "01", &b);
+ base = NUM2INT(b);
+ }
+ return rb_big2str(x, base);
+}
+
+static unsigned long
+big2ulong(VALUE x, const char *type)
+{
+ long len = RBIGNUM_LEN(x);
unsigned long num;
- UINT len = x->len;
- USHORT *ds;
+ BDIGIT *ds;
- if (len > sizeof(long)/sizeof(USHORT))
- ArgError("Bignum too big to convert into fixnum");
+ if (len == 0)
+ return 0;
+ if (BIGSIZE(x) > sizeof(long)) {
+ rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type);
+ }
ds = BDIGITS(x);
+#if SIZEOF_LONG <= SIZEOF_BDIGITS
+ num = (unsigned long)ds[0];
+#else
num = 0;
while (len--) {
- num = BIGUP(num);
- num += ds[len];
+ num <<= BITSPERDIG;
+ num += (unsigned long)ds[len]; /* overflow is already checked */
}
- if (!x->sign) return -num;
+#endif
return num;
}
+/* deprecated */
VALUE
-big_to_i(x)
- VALUE x;
+rb_big2ulong_pack(VALUE x)
{
- return bignorm(x);
+ unsigned long num;
+ rb_integer_pack(x, &num, 1, sizeof(num), 0,
+ INTEGER_PACK_NATIVE_BYTE_ORDER|INTEGER_PACK_2COMP);
+ return num;
}
VALUE
-dbl2big(d)
- double d;
+rb_big2ulong(VALUE x)
+{
+ unsigned long num = big2ulong(x, "unsigned long");
+
+ if (RBIGNUM_POSITIVE_P(x)) {
+ return num;
+ }
+ else {
+ if (num <= LONG_MAX)
+ return -(long)num;
+ if (num == 1+(unsigned long)(-(LONG_MIN+1)))
+ return LONG_MIN;
+ }
+ rb_raise(rb_eRangeError, "bignum out of range of unsigned long");
+}
+
+SIGNED_VALUE
+rb_big2long(VALUE x)
+{
+ unsigned long num = big2ulong(x, "long");
+
+ if (RBIGNUM_POSITIVE_P(x)) {
+ if (num <= LONG_MAX)
+ return num;
+ }
+ 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 HAVE_LONG_LONG
+
+static unsigned LONG_LONG
+big2ull(VALUE x, const char *type)
+{
+ long len = RBIGNUM_LEN(x);
+ unsigned LONG_LONG num;
+ BDIGIT *ds = BDIGITS(x);
+
+ if (len == 0)
+ return 0;
+ if (BIGSIZE(x) > SIZEOF_LONG_LONG)
+ rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type);
+#if SIZEOF_LONG_LONG <= SIZEOF_BDIGITS
+ num = (unsigned LONG_LONG)ds[0];
+#else
+ num = 0;
+ while (len--) {
+ num = BIGUP(num);
+ num += ds[len];
+ }
+#endif
+ return num;
+}
+
+unsigned LONG_LONG
+rb_big2ull(VALUE x)
+{
+ unsigned LONG_LONG num = big2ull(x, "unsigned long long");
+
+ if (RBIGNUM_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");
+}
+
+LONG_LONG
+rb_big2ll(VALUE x)
+{
+ unsigned LONG_LONG num = big2ull(x, "long long");
+
+ if (RBIGNUM_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;
+ }
+ rb_raise(rb_eRangeError, "bignum too big to convert into `long long'");
+}
+
+#endif /* HAVE_LONG_LONG */
+
+static VALUE
+dbl2big(double d)
{
- UINT i = 0;
- long c;
- USHORT *digits;
+ long i = 0;
+ BDIGIT c;
+ BDIGIT *digits;
VALUE z;
double u = (d < 0)?-d:d;
- while (0 != (long)u) {
+ if (isinf(d)) {
+ rb_raise(rb_eFloatDomainError, d < 0 ? "-Infinity" : "Infinity");
+ }
+ if (isnan(d)) {
+ rb_raise(rb_eFloatDomainError, "NaN");
+ }
+
+ while (1.0 <= u) {
u /= (double)(BIGRAD);
i++;
}
@@ -368,882 +5199,1939 @@ dbl2big(d)
digits = BDIGITS(z);
while (i--) {
u *= BIGRAD;
- c = (long)u;
+ c = (BDIGIT)u;
u -= c;
digits[i] = c;
}
- return bignorm(z);
+ return z;
}
-double
-big2dbl(x)
- struct RBignum *x;
+VALUE
+rb_dbl2big(double d)
+{
+ return bignorm(dbl2big(d));
+}
+
+static double
+big2dbl(VALUE x)
{
double d = 0.0;
- UINT i = x->len;
- USHORT *ds = BDIGITS(x);
+ long i = (bigtrunc(x), RBIGNUM_LEN(x)), lo = 0, bits;
+ BDIGIT *ds = BDIGITS(x), dl;
- while (i--) {
- d = ds[i] + BIGRAD*d;
+ 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));
+ }
+ }
}
- if (!x->sign) d = -d;
+ if (!RBIGNUM_SIGN(x)) d = -d;
return d;
}
-VALUE
-big_to_f(x)
- VALUE x;
+double
+rb_big2dbl(VALUE x)
{
- return float_new(big2dbl(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;
+ }
+ 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
-big_cmp(x, y)
- struct RBignum *x, *y;
+rb_big_to_f(VALUE x)
{
- int xlen = x->len;
+ 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);
+}
- switch (TYPE(y)) {
- case T_FIXNUM:
- y = (struct RBignum*)int2big(FIX2INT(y));
- break;
+/*
+ * 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.
+ *
+ */
- case T_BIGNUM:
- break;
+VALUE
+rb_big_cmp(VALUE x, VALUE y)
+{
+ int cmp;
- default:
- return num_coerce_bin(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 rb_integer_float_cmp(x, y);
+ }
+ else {
+ return rb_num_coerce_cmp(x, y, rb_intern("<=>"));
}
- if (x->sign > y->sign) return INT2FIX(1);
- if (x->sign < y->sign) return INT2FIX(-1);
- if (xlen < y->len)
- return (x->sign) ? INT2FIX(-1) : INT2FIX(1);
- if (xlen > y->len)
- return (x->sign) ? INT2FIX(1) : INT2FIX(-1);
+ if (RBIGNUM_SIGN(x) > RBIGNUM_SIGN(y)) return INT2FIX(1);
+ if (RBIGNUM_SIGN(x) < RBIGNUM_SIGN(y)) return INT2FIX(-1);
- while(xlen-- && (BDIGITS(x)[xlen]==BDIGITS(y)[xlen]));
- if (-1 == xlen) return INT2FIX(0);
- return (BDIGITS(x)[xlen] > BDIGITS(y)[xlen]) ?
- (x->sign ? INT2FIX(1) : INT2FIX(-1)) :
- (x->sign ? INT2FIX(-1) : INT2FIX(1));
+ cmp = bary_cmp(BDIGITS(x), RBIGNUM_LEN(x), BDIGITS(y), RBIGNUM_LEN(y));
+ if (RBIGNUM_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_uminus(x)
- struct RBignum *x;
+big_op(VALUE x, VALUE y, enum big_op_t op)
{
- VALUE z = big_clone(x);
+ VALUE rel;
+ int n;
- RBIGNUM(z)->sign = !x->sign;
+ 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);
+ }
- return bignorm(z);
+ 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>.
+ */
+
static VALUE
-big_neg(x)
- struct RBignum *x;
+big_gt(VALUE x, VALUE y)
{
- VALUE z = big_clone(x);
- UINT i = x->len;
- USHORT *ds = BDIGITS(z);
+ return big_op(x, y, big_op_gt);
+}
- if (!x->sign) big_2comp(z);
- while (i--) ds[i] = ~ds[i];
- if (x->sign) big_2comp(z);
- RBIGNUM(z)->sign = !RBIGNUM(z)->sign;
+/*
+ * 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>.
+ */
- return bignorm(z);
+static VALUE
+big_ge(VALUE x, VALUE y)
+{
+ return big_op(x, y, big_op_ge);
+}
+
+/*
+ * 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>.
+ */
+
+static VALUE
+big_lt(VALUE x, VALUE y)
+{
+ return big_op(x, y, big_op_lt);
}
+/*
+ * 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>.
+ */
+
static VALUE
-bigsub(x, y)
- struct RBignum *x, *y;
-{
- struct RBignum *z = 0;
- USHORT *zds;
- long num;
- UINT i;
-
- i = x->len;
- /* if x is larger than y, swap */
- if (x->len < y->len) {
- z = x; x = y; y = z; /* swap x y */
- }
- else if (x->len == 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;
- }
- }
+big_le(VALUE x, VALUE y)
+{
+ return big_op(x, y, big_op_le);
+}
+
+/*
+ * call-seq:
+ * 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)
+{
+ if (FIXNUM_P(y)) {
+ if (bignorm(x) == y) return Qtrue;
+ 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 {
+ return rb_equal(y, x);
}
+ if (RBIGNUM_SIGN(x) != RBIGNUM_SIGN(y)) return Qfalse;
+ if (RBIGNUM_LEN(x) != RBIGNUM_LEN(y)) return Qfalse;
+ if (MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,RBIGNUM_LEN(y)) != 0) return Qfalse;
+ return Qtrue;
+}
- z = (struct RBignum*)bignew(x->len, (z == 0)?1:0);
- zds = BDIGITS(z);
+/*
+ * call-seq:
+ * 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
+ */
- i = x->len;
- while (i--) zds[i] = BDIGITS(x)[i];
+VALUE
+rb_big_eql(VALUE x, VALUE y)
+{
+ if (!RB_BIGNUM_TYPE_P(y)) return Qfalse;
+ if (RBIGNUM_SIGN(x) != RBIGNUM_SIGN(y)) return Qfalse;
+ if (RBIGNUM_LEN(x) != RBIGNUM_LEN(y)) return Qfalse;
+ if (MEMCMP(BDIGITS(x),BDIGITS(y),BDIGIT,RBIGNUM_LEN(y)) != 0) return Qfalse;
+ return Qtrue;
+}
- i = 0; num = 0;
- do {
- num += (long)zds[i] - BDIGITS(y)[i];
- if (num < 0) {
- zds[i] = num + BIGRAD;
- num = -1;
- }
- else {
- zds[i] = BIGLO(num);
- num = 0;
- }
- } while (++i < y->len);
- if (num) {
- while (num && i < x->len) {
- num += zds[i];
- if (num < 0) {
- zds[i++] = num + BIGRAD;
- num = -1;
- }
- else {
- zds[i++] = BIGLO(num);
- num = 0;
- }
- }
- }
+/*
+ * call-seq:
+ * -big -> integer
+ *
+ * Unary minus (returns an integer whose value is 0-big)
+ */
+
+VALUE
+rb_big_uminus(VALUE x)
+{
+ VALUE z = rb_big_clone(x);
+
+ RBIGNUM_SET_SIGN(z, !RBIGNUM_SIGN(x));
return bignorm(z);
}
+/*
+ * call-seq:
+ * ~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
-bigadd(x, y, sign)
- struct RBignum *x, *y;
- char sign;
+rb_big_neg(VALUE x)
{
- struct RBignum *z;
- USHORT *zds;
- long num;
- UINT i, len;
+ VALUE z = rb_big_clone(x);
+ BDIGIT *ds = BDIGITS(z);
+ long n = RBIGNUM_LEN(z);
- if (x->sign == (y->sign ^ sign)) {
- if (y->sign == sign) return bigsub(y, x);
- return bigsub(x, y);
- }
+ if (!n) return INT2FIX(-1);
- if (x->len > y->len) {
- len = x->len + 1;
+ if (RBIGNUM_POSITIVE_P(z)) {
+ if (bary_add_one(ds, n)) {
+ big_extend_carry(z);
+ }
+ RBIGNUM_SET_NEGATIVE_SIGN(z);
}
else {
- len = y->len + 1;
- }
- z = (struct RBignum*)bignew(len, sign==y->sign);
- zds = BDIGITS(z);
-
- i = len;
- while (i--) zds[i] = 0;
- i = y->len;
- while (i--) zds[i] = BDIGITS(y)[i];
-
- i = 0; num = 0;
- do {
- num += (long)zds[i] + BDIGITS(x)[i];
- zds[i++] = BIGLO(num);
- num = BIGDN(num);
- } while (i < x->len);
- if (num) {
- while (i < y->len) {
- num += zds[i];
- zds[i++] = BIGLO(num);
- num = BIGDN(num);
- }
- BDIGITS(z)[i] = num;
+ bary_neg(ds, n);
+ if (bary_add_one(ds, n))
+ return INT2FIX(-1);
+ bary_neg(ds, n);
+ RBIGNUM_SET_POSITIVE_SIGN(z);
}
return bignorm(z);
}
-VALUE
-big_plus(x, y)
- VALUE x, y;
+static VALUE
+bigsub(VALUE x, VALUE y)
{
VALUE z;
+ BDIGIT *xds, *yds, *zds;
+ long xn, yn, zn;
+
+ xn = RBIGNUM_LEN(x);
+ yn = RBIGNUM_LEN(y);
+ zn = xn < yn ? yn : xn;
- switch (TYPE(y)) {
- case T_FIXNUM:
- y = int2big(FIX2INT(y));
- /* fall through */
- case T_BIGNUM:
- return bigadd(x, y, 1);
+ z = bignew(zn, 1);
- case T_FLOAT:
- return float_new(big2dbl(x) + RFLOAT(y)->value);
+ xds = BDIGITS(x);
+ yds = BDIGITS(y);
+ zds = BDIGITS(z);
- default:
- return num_coerce_bin(x, y);
+ if (bary_sub(zds, zn, xds, xn, yds, yn)) {
+ bary_2comp(zds, zn);
+ RBIGNUM_SET_NEGATIVE_SIGN(z);
}
+
+ return z;
}
-VALUE
-big_minus(x, y)
- VALUE x, y;
+static VALUE bigadd_int(VALUE x, long y);
+
+static VALUE
+bigsub_int(VALUE x, long y0)
{
- VALUE cmp;
+ VALUE z;
+ BDIGIT *xds, *zds;
+ long xn, zn;
+ BDIGIT_DBL_SIGNED num;
+ long i, y;
+
+ y = y0;
+ xds = BDIGITS(x);
+ xn = RBIGNUM_LEN(x);
+
+ if (xn == 0)
+ return LONG2NUM(-y0);
- switch (TYPE(y)) {
- case T_FIXNUM:
- y = int2big(FIX2INT(y));
- /* fall through */
- case T_BIGNUM:
- return bigadd(x, y, 0);
+ zn = xn;
+#if SIZEOF_BDIGITS < SIZEOF_LONG
+ if (zn < bdigit_roomof(SIZEOF_LONG))
+ zn = bdigit_roomof(SIZEOF_LONG);
+#endif
+ z = bignew(zn, RBIGNUM_SIGN(x));
+ zds = BDIGITS(z);
- case T_FLOAT:
- return float_new(big2dbl(x) - RFLOAT(y)->value);
+#if SIZEOF_BDIGITS >= SIZEOF_LONG
+ assert(xn == zn);
+ num = (BDIGIT_DBL_SIGNED)xds[0] - y;
+ if (xn == 1 && num < 0) {
+ RBIGNUM_SET_SIGN(z, !RBIGNUM_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_BDIGITS < 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_BDIGITS < SIZEOF_LONG
+ for (; i < zn; i++) {
+ num_is_zero_z:
+ zds[i] = 0;
+ }
+#endif
+ goto finish;
- default:
- return num_coerce_bin(x, y);
+ finish:
+ assert(num == 0 || num == -1);
+ if (num < 0) {
+ get2comp(z);
+ RBIGNUM_SET_SIGN(z, !RBIGNUM_SIGN(x));
}
+ RB_GC_GUARD(x);
+ return bignorm(z);
}
-VALUE
-big_mul(x, y)
- struct RBignum *x, *y;
+static VALUE
+bigadd_int(VALUE x, long y)
{
- UINT i = 0, j;
- unsigned long n = 0;
VALUE z;
- USHORT *zds;
+ BDIGIT *xds, *zds;
+ long xn, zn;
+ BDIGIT_DBL num;
+ long i;
- if (FIXNUM_P(x)) x = (struct RBignum*)int2big(FIX2INT(x));
- switch (TYPE(y)) {
- case T_FIXNUM:
- y = (struct RBignum*)int2big(FIX2INT(y));
- break;
+ xds = BDIGITS(x);
+ xn = RBIGNUM_LEN(x);
- case T_BIGNUM:
- break;
+ if (xn == 0)
+ return LONG2NUM(y);
- case T_FLOAT:
- return float_new(big2dbl(x) * RFLOAT(y)->value);
+ zn = xn;
+#if SIZEOF_BDIGITS < SIZEOF_LONG
+ if (zn < bdigit_roomof(SIZEOF_LONG))
+ zn = bdigit_roomof(SIZEOF_LONG);
+#endif
+ zn++;
+
+ z = bignew(zn, RBIGNUM_SIGN(x));
+ zds = BDIGITS(z);
- default:
- return num_coerce_bin(x, y);
+#if SIZEOF_BDIGITS >= 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;
- j = x->len + y->len + 1;
- z = bignew(j, x->sign==y->sign);
- zds = BDIGITS(z);
- while (j--) zds[j] = 0;
- do {
- j = 0;
- if (BDIGITS(x)[i]) {
- do {
- n += zds[i + j] + ((unsigned long)BDIGITS(x)[i]*BDIGITS(y)[j]);
- zds[i + j++] = BIGLO(n);
- n = BIGDN(n);
- } while (j < y->len);
- if (n) {
- zds[i + j] = n;
- n = 0;
- }
- }
- } while (++i < x->len);
+#endif
+ for (;i < xn; i++) {
+ y_is_zero_x:
+ if (num == 0) goto num_is_zero_x;
+ num += (BDIGIT_DBL)xds[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);
+ 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;
+ }
+ goto finish;
+
+ finish:
+ RB_GC_GUARD(x);
return bignorm(z);
}
-static void
-bigdivmod(x, y, div, mod)
- struct RBignum *x, *y;
- VALUE *div, *mod;
+static VALUE
+bigadd(VALUE x, VALUE y, int sign)
{
- UINT nx = x->len, ny = y->len, i, j;
VALUE z;
- USHORT *xds, *yds, *zds, *tds;
- unsigned long t2;
- long num;
- USHORT dd, q;
+ long len;
- yds = BDIGITS(y);
- if (ny == 0 && yds[0] == 0) num_zerodiv();
- if (nx < ny) {
- if (div) *div = INT2FIX(0);
- if (mod) *mod = bignorm(x);
- return;
+ sign = (sign == RBIGNUM_SIGN(y));
+ if (RBIGNUM_SIGN(x) != sign) {
+ if (sign) return bigsub(y, x);
+ return bigsub(x, y);
}
- xds = BDIGITS(x);
- if (ny == 1) {
- dd = yds[0];
- z = big_clone(x);
- zds = BDIGITS(z);
- t2 = 0; i = nx;
- while(i--) {
- t2 = BIGUP(t2) + zds[i];
- zds[i] = t2 / dd;
- t2 %= dd;
- }
- if (div) *div = bignorm(z);
- if (mod) {
- if (!y->sign) t2 = -t2;
- *mod = INT2FIX(t2);
- }
- return;
+
+ if (RBIGNUM_LEN(x) > RBIGNUM_LEN(y)) {
+ len = RBIGNUM_LEN(x) + 1;
}
- z = bignew(nx==ny?nx+2:nx+1, x->sign==y->sign);
- zds = BDIGITS(z);
- if (nx==ny) zds[nx+1] = 0;
- while (!yds[ny-1]) ny--;
- if ((dd = BIGRAD/(int)(yds[ny-1]+1)) != 1) {
- y = (struct RBignum*)big_clone(y);
- tds = BDIGITS(y);
- j = 0;
- num = 0;
- while (j<ny) {
- num += (unsigned long)yds[j]*dd;
- tds[j++] = BIGLO(num);
- num = BIGDN(num);
+ else {
+ len = RBIGNUM_LEN(y) + 1;
+ }
+ z = bignew(len, sign);
+
+ bary_add(BDIGITS(z), RBIGNUM_LEN(z),
+ BDIGITS(x), RBIGNUM_LEN(x),
+ BDIGITS(y), RBIGNUM_LEN(y));
+
+ return z;
+}
+
+/*
+ * call-seq:
+ * big + other -> Numeric
+ *
+ * Adds big and other, returning the result.
+ */
+
+VALUE
+rb_big_plus(VALUE x, VALUE y)
+{
+ long n;
+
+ if (FIXNUM_P(y)) {
+ n = FIX2LONG(y);
+ if ((n > 0) != RBIGNUM_SIGN(x)) {
+ if (n < 0) {
+ n = -n;
+ }
+ return bigsub_int(x, n);
}
- yds = tds;
- j = 0;
- num = 0;
- while (j<nx) {
- num += (unsigned long)xds[j]*dd;
- zds[j++] = BIGLO(num);
- num = BIGDN(num);
+ if (n < 0) {
+ n = -n;
}
- zds[j] = num;
+ return bigadd_int(x, n);
+ }
+ else if (RB_BIGNUM_TYPE_P(y)) {
+ return bignorm(bigadd(x, y, 1));
+ }
+ else if (RB_FLOAT_TYPE_P(y)) {
+ return DBL2NUM(rb_big2dbl(x) + RFLOAT_VALUE(y));
}
else {
- zds[nx] = 0;
- j = nx;
- while (j--) zds[j] = xds[j];
+ return rb_num_coerce_bin(x, y, '+');
}
- j = nx==ny?nx+1:nx;
- do {
- if (zds[j] == yds[ny-1]) q = BIGRAD-1;
- else q = (BIGUP(zds[j]) + zds[j-1])/yds[ny-1];
- if (q) {
- i = 0; num = 0; t2 = 0;
- do { /* multiply and subtract */
- t2 += (unsigned long)yds[i] * q;
- num += zds[j - ny + i] - BIGLO(t2);
- if (num < 0) {
- zds[j - ny + i] = num + BIGRAD;
- num = -1;
- }
- else {
- zds[j - ny + i] = num;
- num = 0;
- }
- 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 {
- num += (long) zds[j - ny + i] + yds[i];
- zds[j - ny + i] = BIGLO(num);
- num = BIGDN(num);
- } while (++i < ny);
- num--;
+}
+
+/*
+ * call-seq:
+ * big - other -> Numeric
+ *
+ * Subtracts other from big, returning the result.
+ */
+
+VALUE
+rb_big_minus(VALUE x, VALUE y)
+{
+ long n;
+
+ if (FIXNUM_P(y)) {
+ n = FIX2LONG(y);
+ if ((n > 0) != RBIGNUM_SIGN(x)) {
+ if (n < 0) {
+ n = -n;
}
+ return bigadd_int(x, n);
}
- zds[j] = q;
- } while (--j >= ny);
- if (div) { /* move quotient down in z */
- *div = big_clone(z);
- zds = BDIGITS(*div);
- j = (nx==ny ? nx+2 : nx+1) - ny;
- for (i = 0;i < j;i++) zds[i] = zds[i+ny];
- RBIGNUM(*div)->len = i;
- *div = bignorm(*div);
- }
- if (mod) { /* just normalize remainder */
- *mod = big_clone(z);
- if (dd) {
- zds = BDIGITS(*mod);
- t2 = 0; i = ny;
- while(i--) {
- t2 = BIGUP(t2) + zds[i];
- zds[i] = t2 / dd;
- t2 %= dd;
- }
+ if (n < 0) {
+ n = -n;
}
- RBIGNUM(*mod)->len = ny;
- RBIGNUM(*mod)->sign = y->sign;
- *mod = bignorm(*mod);
+ return bigsub_int(x, n);
+ }
+ else if (RB_BIGNUM_TYPE_P(y)) {
+ 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
-big_div(x, y)
- VALUE x, y;
+bigsq(VALUE x)
{
+ long xn, zn;
VALUE z;
+ BDIGIT *xds, *zds;
- switch (TYPE(y)) {
- case T_FIXNUM:
- y = int2big(FIX2INT(y));
- break;
+ xn = RBIGNUM_LEN(x);
+ zn = 2 * xn;
- case T_BIGNUM:
- break;
+ z = bignew(zn, 1);
- case T_FLOAT:
- return float_new(big2dbl(x) / RFLOAT(y)->value);
+ xds = BDIGITS(x);
+ zds = BDIGITS(z);
- default:
- return num_coerce_bin(x, y);
- }
- bigdivmod(x, y, &z, 0);
+#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;
}
static VALUE
-big_mod(x, y)
- VALUE x, y;
+bigmul0(VALUE x, VALUE y)
{
+ long xn, yn, zn;
VALUE z;
+ BDIGIT *xds, *yds, *zds;
- switch (TYPE(y)) {
- case T_FIXNUM:
- y = int2big(FIX2INT(y));
- break;
+ if (x == y)
+ return bigsq(x);
- case T_BIGNUM:
- break;
+ xn = RBIGNUM_LEN(x);
+ yn = RBIGNUM_LEN(y);
+ zn = xn + yn;
- case T_FLOAT:
- y = dbl2big(RFLOAT(y)->value);
- break;
+ z = bignew(zn, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
- default:
- return num_coerce_bin(x, y);
- }
- bigdivmod(x, y, 0, &z);
+ xds = BDIGITS(x);
+ yds = BDIGITS(y);
+ zds = BDIGITS(z);
+
+ bary_mul(zds, zn, xds, xn, yds, yn);
+ RB_GC_GUARD(x);
+ RB_GC_GUARD(y);
return z;
}
+/*
+ * call-seq:
+ * big * other -> Numeric
+ *
+ * Multiplies big and other, returning the result.
+ */
+
+VALUE
+rb_big_mul(VALUE x, VALUE 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));
+}
+
static VALUE
-big_divmod(x, y)
- VALUE x, y;
+bigdivrem(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp)
{
- VALUE div, mod;
+ long xn = RBIGNUM_LEN(x), yn = RBIGNUM_LEN(y);
+ VALUE z;
+ BDIGIT *xds, *yds, *zds;
+ BDIGIT dd;
- switch (TYPE(y)) {
- case T_FIXNUM:
- y = int2big(FIX2INT(y));
- break;
+ VALUE q = Qnil, r = Qnil;
+ BDIGIT *qds, *rds;
+ long qn, rn;
- case T_FLOAT:
- y = dbl2big(RFLOAT(y)->value);
- break;
+ yds = BDIGITS(y);
+ BARY_TRUNC(yds, yn);
+ if (yn == 0)
+ rb_num_zerodiv();
- case T_BIGNUM:
- break;
+ xds = BDIGITS(x);
+ BARY_TRUNC(xds, xn);
- default:
- return num_coerce_bin(x, y);
+ if (xn < yn || (xn == yn && xds[xn - 1] < yds[yn - 1])) {
+ if (divp) *divp = rb_int2big(0);
+ if (modp) *modp = x;
+ return Qnil;
+ }
+ if (yn == 1) {
+ dd = yds[0];
+ z = bignew(xn, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
+ zds = BDIGITS(z);
+ dd = bigdivrem_single(zds, xds, xn, dd);
+ if (modp) {
+ *modp = rb_uint2big((VALUE)dd);
+ RBIGNUM_SET_SIGN(*modp, RBIGNUM_SIGN(x));
+ }
+ 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)), RBIGNUM_SIGN(x)==RBIGNUM_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)), RBIGNUM_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, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
+ qds = BDIGITS(q);
+ }
+ else {
+ qn = 0;
+ qds = NULL;
+ }
+
+ if (modp) {
+ rn = yn;
+ r = bignew(rn, RBIGNUM_SIGN(x));
+ rds = BDIGITS(r);
+ }
+ else {
+ rn = 0;
+ rds = NULL;
}
- bigdivmod(x, y, &div, &mod);
- return assoc_new(div, mod);;
+ bary_divmod_branch(qds, qn, rds, rn, xds, xn, yds, yn);
+
+ if (divp) {
+ bigtrunc(q);
+ *divp = q;
+ }
+ if (modp) {
+ bigtrunc(r);
+ *modp = r;
+ }
+
+ return Qnil;
}
-VALUE
-big_pow(x, y)
- VALUE x, y;
+static void
+bigdivmod(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp)
{
- double d;
- VALUE z;
-
- if (y == INT2FIX(0)) return INT2FIX(1);
- switch (TYPE(y)) {
- case T_FLOAT:
- d = RFLOAT(y)->value;
- break;
+ VALUE mod;
- case T_BIGNUM:
- if (RBIGNUM(y)->sign) goto pos_big;
- d = big2dbl(y);
- break;
+ bigdivrem(x, y, divp, &mod);
+ if (RBIGNUM_SIGN(x) != RBIGNUM_SIGN(y) && !BIGZEROP(mod)) {
+ if (divp) *divp = bigadd(*divp, rb_int2big(1), 0);
+ if (modp) *modp = bigadd(mod, y, 1);
+ }
+ else if (modp) {
+ *modp = mod;
+ }
+}
- case T_FIXNUM:
- if (FIX2INT(y) > 0) goto pos_big;
- d = (double)FIX2INT(y);
- break;
- default:
- return num_coerce_bin(x, y);
- }
- return float_new(pow(big2dbl(x), d));
+static VALUE
+rb_big_divide(VALUE x, VALUE y, ID op)
+{
+ VALUE z;
- pos_big:
- z = x;
- for (;;) {
- y = rb_funcall(y, '-', 1, INT2FIX(1));
- if (y == INT2FIX(0)) break;
- while (rb_funcall(y, '%', 1, INT2FIX(2)) == INT2FIX(0)) {
- y = rb_funcall(y, '/', 1, INT2FIX(2));
- x = big_mul(x, x);
+ if (FIXNUM_P(y)) {
+ 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);
}
- z = big_mul(z, x);
}
- return z;
+ else {
+ return rb_num_coerce_bin(x, y, op);
+ }
+ bigdivmod(x, y, &z, 0);
+
+ return bignorm(z);
+}
+
+/*
+ * 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, '/');
}
+/*
+ * call-seq:
+ * big.div(other) -> integer
+ *
+ * Performs integer division: returns integer value.
+ */
+
+VALUE
+rb_big_idiv(VALUE x, VALUE y)
+{
+ return rb_big_divide(x, y, rb_intern("div"));
+}
+
+/*
+ * call-seq:
+ * big % other -> Numeric
+ * big.modulo(other) -> Numeric
+ *
+ * Returns big modulo other. See Numeric.divmod for more
+ * information.
+ */
+
VALUE
-big_and(x, y)
- struct RBignum *x, *y;
+rb_big_modulo(VALUE x, VALUE y)
{
VALUE z;
- USHORT *ds1, *ds2, *zds;
- UINT i, l1, l2;
- char sign;
if (FIXNUM_P(y)) {
- y = (struct RBignum*)int2big(FIX2INT(y));
+ y = rb_int2big(FIX2LONG(y));
}
- else {
- Check_Type(y, T_BIGNUM);
+ else if (!RB_BIGNUM_TYPE_P(y)) {
+ return rb_num_coerce_bin(x, y, '%');
}
+ bigdivmod(x, y, 0, &z);
- if (!y->sign) {
- y = (struct RBignum*)big_clone(y);
- big_2comp(y);
+ return bignorm(z);
+}
+
+/*
+ * call-seq:
+ * 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)
+{
+ VALUE z;
+
+ if (FIXNUM_P(y)) {
+ y = rb_int2big(FIX2LONG(y));
}
- if (!x->sign) {
- x = (struct RBignum*)big_clone(x);
- big_2comp(x);
+ else if (!RB_BIGNUM_TYPE_P(y)) {
+ return rb_num_coerce_bin(x, y, rb_intern("remainder"));
}
- if (x->len > y->len) {
- l1 = y->len;
- l2 = x->len;
- ds1 = BDIGITS(y);
- ds2 = BDIGITS(x);
- sign = y->sign;
+ bigdivrem(x, y, 0, &z);
+
+ return bignorm(z);
+}
+
+/*
+ * call-seq:
+ * big.divmod(numeric) -> array
+ *
+ * See <code>Numeric#divmod</code>.
+ *
+ */
+VALUE
+rb_big_divmod(VALUE x, VALUE y)
+{
+ VALUE div, mod;
+
+ if (FIXNUM_P(y)) {
+ y = rb_int2big(FIX2LONG(y));
}
- else {
- l1 = x->len;
- l2 = y->len;
- ds1 = BDIGITS(x);
- ds2 = BDIGITS(y);
- sign = x->sign;
+ else if (!RB_BIGNUM_TYPE_P(y)) {
+ return rb_num_coerce_bin(x, y, rb_intern("divmod"));
}
- z = bignew(l2, x->sign && y->sign);
- zds = BDIGITS(z);
+ bigdivmod(x, y, &div, &mod);
- for (i=0; i<l1; i++) {
- zds[i] = ds1[i] & ds2[i];
- }
- for (; i<l2; i++) {
- zds[i] = sign?0:ds2[i];
+ return rb_assoc_new(bignorm(div), bignorm(mod));
+}
+
+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 = RBIGNUM_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);
}
- if (!RBIGNUM(z)->sign) big_2comp(z);
- return bignorm(z);
+#endif
+ return DBL2NUM(ldexp(big2dbl(z), (int)l));
+}
+
+static VALUE
+big_fdiv_int(VALUE x, VALUE y)
+{
+ long l, ey;
+ bigtrunc(y);
+ l = RBIGNUM_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);
+}
+
+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);
}
+/*
+ * call-seq:
+ * big.fdiv(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
+ *
+ */
+
+
VALUE
-big_or(x, y)
- struct RBignum *x, *y;
+rb_big_fdiv(VALUE x, VALUE y)
{
- VALUE z;
- USHORT *ds1, *ds2, *zds;
- UINT i, l1, l2;
- char sign;
+ double dx, dy;
+ dx = big2dbl(x);
if (FIXNUM_P(y)) {
- y = (struct RBignum*)int2big(FIX2INT(y));
+ dy = (double)FIX2LONG(y);
+ if (isinf(dx))
+ return big_fdiv_int(x, rb_int2big(FIX2LONG(y)));
+ }
+ else if (RB_BIGNUM_TYPE_P(y)) {
+ 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 {
- Check_Type(y, T_BIGNUM);
+ return rb_num_coerce_bin(x, y, rb_intern("fdiv"));
}
+ return DBL2NUM(dx / dy);
+}
+
+/*
+ * call-seq:
+ * 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
+ * a Fixnum, Bignum, or Float
+ *
+ * 123456789 ** 2 #=> 15241578750190521
+ * 123456789 ** 1.2 #=> 5126464716.09932
+ * 123456789 ** -2 #=> 6.5610001194102e-17
+ */
+
+VALUE
+rb_big_pow(VALUE x, VALUE y)
+{
+ double d;
+ SIGNED_VALUE yy;
- if (!y->sign) {
- y = (struct RBignum*)big_clone(y);
- big_2comp(y);
+ again:
+ if (y == INT2FIX(0)) return INT2FIX(1);
+ if (RB_FLOAT_TYPE_P(y)) {
+ d = RFLOAT_VALUE(y);
+ if ((!RBIGNUM_SIGN(x) && !BIGZEROP(x)) && d != round(d))
+ return rb_funcall(rb_complex_raw1(x), rb_intern("**"), 1, y);
}
- if (!x->sign) {
- x = (struct RBignum*)big_clone(x);
- big_2comp(x);
+ else if (RB_BIGNUM_TYPE_P(y)) {
+ y = bignorm(y);
+ if (FIXNUM_P(y))
+ goto again;
+ rb_warn("in a**b, b may be too big");
+ d = rb_big2dbl(y);
}
- if (x->len > y->len) {
- l1 = y->len;
- l2 = x->len;
- ds1 = BDIGITS(y);
- ds2 = BDIGITS(x);
- sign = y->sign;
+ else if (FIXNUM_P(y)) {
+ yy = FIX2LONG(y);
+
+ 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)) {
+ rb_warn("in a**b, b may be too big");
+ d = (double)yy;
+ }
+ else {
+ for (mask = FIXNUM_MAX + 1; mask; mask >>= 1) {
+ if (z) z = bigsq(z);
+ if (yy & mask) {
+ z = z ? bigtrunc(bigmul0(z, x)) : x;
+ }
+ }
+ return bignorm(z);
+ }
+ }
}
else {
- l1 = x->len;
- l2 = y->len;
- ds1 = BDIGITS(x);
- ds2 = BDIGITS(y);
- sign = x->sign;
+ 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_BDIGITS >= SIZEOF_LONG
+ if (!hibitsy) {
+ y &= xds[0];
+ return LONG2NUM(y);
}
- z = bignew(l2, x->sign || y->sign);
+#endif
+
+ zn = xn;
+#if SIZEOF_BDIGITS < SIZEOF_LONG
+ if (hibitsx && zn < bdigit_roomof(SIZEOF_LONG))
+ zn = bdigit_roomof(SIZEOF_LONG);
+#endif
+
+ z = bignew(zn, 0);
zds = BDIGITS(z);
- for (i=0; i<l1; i++) {
- zds[i] = ds1[i] | ds2[i];
+#if SIZEOF_BDIGITS >= 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<l2; i++) {
- zds[i] = sign?ds2[i]:(BIGRAD-1);
+ for (; i < zn; i++) {
+ if (y == 0 || y == -1) break;
+ zds[i] = hibitsx & BIGLO(y);
+ y = BIGDN(y);
}
- if (!RBIGNUM(z)->sign) big_2comp(z);
-
+#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);
}
+/*
+ * call-seq:
+ * big & numeric -> integer
+ *
+ * Performs bitwise +and+ between _big_ and _numeric_.
+ */
+
VALUE
-big_xor(x, y)
- struct RBignum *x, *y;
+rb_big_and(VALUE x, VALUE y)
{
VALUE z;
- USHORT *ds1, *ds2, *zds;
- UINT i, l1, l2;
- char sign;
+ 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, '&');
+ }
+ hibitsx = abs2twocomp(&x, &xn);
if (FIXNUM_P(y)) {
- y = (struct RBignum*)int2big(FIX2INT(y));
+ return bigand_int(x, xn, hibitsx, FIX2LONG(y));
}
- else {
- Check_Type(y, T_BIGNUM);
+ 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;
+
+ if (!hibits1)
+ n2 = n1;
+
+ z = bignew(n2, 0);
+ zds = BDIGITS(z);
- if (!y->sign) {
- y = (struct RBignum*)big_clone(y);
- big_2comp(y);
+ for (i=0; i<n1; i++) {
+ zds[i] = ds1[i] & ds2[i];
}
- if (!x->sign) {
- x = (struct RBignum*)big_clone(x);
- big_2comp(x);
+ for (; i<n2; i++) {
+ zds[i] = hibits1 & ds2[i];
}
- if (x->len > y->len) {
- l1 = y->len;
- l2 = x->len;
- ds1 = BDIGITS(y);
- ds2 = BDIGITS(x);
- sign = 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 = RBIGNUM_LEN(x);
+#if SIZEOF_BDIGITS < SIZEOF_LONG
+ if (zn < bdigit_roomof(SIZEOF_LONG))
+ zn = bdigit_roomof(SIZEOF_LONG);
+#endif
+ z = bignew(zn, 0);
+ zds = BDIGITS(z);
+
+#if SIZEOF_BDIGITS >= 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);
}
- else {
- l1 = x->len;
- l2 = y->len;
- ds1 = BDIGITS(x);
- ds2 = BDIGITS(y);
- sign = x->sign;
+ 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);
}
- x->sign = x->sign?1:0;
- y->sign = y->sign?1:0;
- z = bignew(l2, !(x->sign ^ y->sign));
- zds = BDIGITS(z);
+ goto finish;
+#endif
- for (i=0; i<l1; i++) {
- zds[i] = ds1[i] ^ ds2[i];
+ 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<l2; i++) {
- zds[i] = sign?ds2[i]:~ds2[i];
+ goto finish;
+
+ fill_hibits:
+ for (; i < zn; i++) {
+ zds[i] = BDIGMAX;
}
- if (!RBIGNUM(z)->sign) big_2comp(z);
+ finish:
+ twocomp2abs_bang(z, hibitsx || hibitsy);
+ RB_GC_GUARD(x);
return bignorm(z);
}
-static VALUE big_rshift();
+/*
+ * call-seq:
+ * big | numeric -> integer
+ *
+ * Performs bitwise +or+ between _big_ and _numeric_.
+ */
VALUE
-big_lshift(x, y)
- struct RBignum *x;
- VALUE y;
-{
- USHORT *xds, *zds;
- int shift = NUM2INT(y);
- UINT s1 = shift/(sizeof(USHORT)*CHAR_BIT);
- UINT s2 = shift%(sizeof(USHORT)*CHAR_BIT);
+rb_big_or(VALUE x, VALUE y)
+{
VALUE z;
- unsigned long num = 0;
- UINT len, i;
+ 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, '|');
+ }
- if (shift < 0) return big_rshift(x, INT2FIX(-shift));
- xds = BDIGITS(x);
- len = x->len;
- z = bignew(len+s1+1, x->sign);
+ hibitsx = abs2twocomp(&x, &xn);
+ if (FIXNUM_P(y)) {
+ return bigor_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;
+
+ if (hibits1)
+ n2 = n1;
+
+ z = bignew(n2, 0);
zds = BDIGITS(z);
- for (i=0; i<s1; i++) {
- *zds++ = 0;
+
+ for (i=0; i<n1; i++) {
+ zds[i] = ds1[i] | ds2[i];
}
- for (i=0; i<len; i++) {
- num = num | *xds++<<s2;
- *zds++ = BIGLO(num);
- num = BIGDN(num);
+ for (; i<n2; i++) {
+ zds[i] = hibits1 | ds2[i];
}
- *zds = BIGLO(num);
+ twocomp2abs_bang(z, hibits1 || hibits2);
+ RB_GC_GUARD(x);
+ RB_GC_GUARD(y);
return bignorm(z);
}
static VALUE
-big_rshift(x, y)
- struct RBignum *x;
- VALUE y;
-{
- USHORT *xds, *zds;
- int shift = NUM2INT(y);
- UINT s1 = shift/(sizeof(USHORT)*CHAR_BIT);
- UINT s2 = shift%(sizeof(USHORT)*CHAR_BIT);
+bigxor_int(VALUE x, long xn, BDIGIT hibitsx, long y)
+{
VALUE z;
- unsigned long num = 0;
- UINT i = x->len, j;
+ BDIGIT *xds, *zds;
+ long zn;
+ long i;
+ BDIGIT hibitsy;
- if (shift < 0) return big_lshift(x, INT2FIX(-shift));
- if (s1 > x->len) {
- if (x->sign)
- return INT2FIX(0);
- else
- return INT2FIX(-1);
- }
+ hibitsy = 0 <= y ? 0 : BDIGMAX;
xds = BDIGITS(x);
- i = x->len; j = i - s1;
- z = bignew(j, x->sign);
+ zn = RBIGNUM_LEN(x);
+#if SIZEOF_BDIGITS < SIZEOF_LONG
+ if (zn < bdigit_roomof(SIZEOF_LONG))
+ zn = bdigit_roomof(SIZEOF_LONG);
+#endif
+ z = bignew(zn, 0);
zds = BDIGITS(z);
- while (i--, j--) {
- num = (num | xds[i]) >> s2;
- zds[j] = BIGLO(num);
- num = BIGUP(xds[i]);
+
+#if SIZEOF_BDIGITS >= 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 < zn; i++) {
+ zds[i] = hibitsx ^ hibitsy;
+ }
+ twocomp2abs_bang(z, (hibitsx ^ hibitsy) != 0);
+ RB_GC_GUARD(x);
return bignorm(z);
}
+/*
+ * call-seq:
+ * big ^ numeric -> integer
+ *
+ * Performs bitwise +exclusive or+ between _big_ and _numeric_.
+ */
-static VALUE
-big_aref(x, y)
- struct RBignum *x;
- VALUE y;
+VALUE
+rb_big_xor(VALUE x, VALUE 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, '^');
+ }
+
+ hibitsx = abs2twocomp(&x, &xn);
+ 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);
+ zds = BDIGITS(z);
+
+ for (i=0; i<n1; i++) {
+ zds[i] = ds1[i] ^ ds2[i];
+ }
+ for (; i<n2; i++) {
+ zds[i] = hibitsx ^ ds2[i];
+ }
+ twocomp2abs_bang(z, (hibits1 ^ hibits2) != 0);
+ RB_GC_GUARD(x);
+ RB_GC_GUARD(y);
+ return bignorm(z);
+}
+
+/*
+ * call-seq:
+ * big << numeric -> integer
+ *
+ * Shifts big left _numeric_ positions (right if _numeric_ is negative).
+ */
+
+VALUE
+rb_big_lshift(VALUE x, VALUE y)
+{
+ int lshift_p;
+ size_t shift_numdigits;
+ int shift_numbits;
+
+ 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_numbits = (int)(shift & (BITSPERDIG-1));
+ shift_numdigits = shift >> bit_length(BITSPERDIG-1);
+ return bignorm(big_shift3(x, lshift_p, shift_numdigits, shift_numbits));
+ }
+ else if (RB_BIGNUM_TYPE_P(y)) {
+ return bignorm(big_shift2(x, 1, y));
+ }
+ y = rb_to_int(y);
+ }
+}
+
+
+/*
+ * call-seq:
+ * big >> numeric -> integer
+ *
+ * Shifts big right _numeric_ positions (left if _numeric_ is negative).
+ */
+
+VALUE
+rb_big_rshift(VALUE x, VALUE y)
{
- USHORT *xds;
- int shift = NUM2INT(y);
- UINT s1, s2;
+ int lshift_p;
+ size_t shift_numdigits;
+ int shift_numbits;
- if (shift < 0) return INT2FIX(0);
- s1 = shift/(sizeof(USHORT)*CHAR_BIT);
- s2 = shift%(sizeof(USHORT)*CHAR_BIT);
+ 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_numbits = (int)(shift & (BITSPERDIG-1));
+ shift_numdigits = shift >> bit_length(BITSPERDIG-1);
+ return bignorm(big_shift3(x, lshift_p, shift_numdigits, shift_numbits));
+ }
+ else if (RB_BIGNUM_TYPE_P(y)) {
+ return bignorm(big_shift2(x, 0, y));
+ }
+ y = rb_to_int(y);
+ }
+}
- if (!x->sign) {
- if (s1 >= x->len) return INT2FIX(1);
- x = (struct RBignum*)big_clone(x);
- big_2comp(x);
+/*
+ * 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)
+{
+ BDIGIT *xds;
+ unsigned long shift;
+ long i, s1, s2;
+ BDIGIT bit;
+
+ if (RB_BIGNUM_TYPE_P(y)) {
+ if (!RBIGNUM_SIGN(y))
+ return INT2FIX(0);
+ bigtrunc(y);
+ if (BIGSIZE(y) > sizeof(long)) {
+ out_of_range:
+ return RBIGNUM_SIGN(x) ? INT2FIX(0) : INT2FIX(1);
+ }
+ shift = big2ulong(y, "long");
}
else {
- if (s1 >= x->len) return INT2FIX(0);
+ i = NUM2LONG(y);
+ if (i < 0) return INT2FIX(0);
+ shift = i;
}
+ s1 = shift/BITSPERDIG;
+ s2 = shift%BITSPERDIG;
+ bit = (BDIGIT)1 << s2;
+
+ if (s1 >= RBIGNUM_LEN(x)) goto out_of_range;
+
xds = BDIGITS(x);
- if (xds[s1] & (1<<s2))
- return INT2FIX(1);
- return INT2FIX(0);
+ if (RBIGNUM_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);
}
+/*
+ * call-seq:
+ * big.hash -> fixnum
+ *
+ * Compute a hash based on the value of _big_.
+ */
+
static VALUE
-big_hash(x)
- struct RBignum *x;
+rb_big_hash(VALUE x)
{
- int i, len, key;
- USHORT *digits;
+ st_index_t hash;
- key = 0; digits = BDIGITS(x);
- for (i=0,len=x->len; i<x->len; i++) {
- key ^= *digits++;
- }
- return INT2FIX(key);
+ hash = rb_memhash(BDIGITS(x), sizeof(BDIGIT)*RBIGNUM_LEN(x)) ^ RBIGNUM_SIGN(x);
+ return INT2FIX(hash);
}
+/*
+ * 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]
+ */
+
static VALUE
-big_coerce(x, y)
- struct RBignum *x;
- VALUE y;
+rb_big_coerce(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
- return assoc_new(int2big(FIX2INT(y)), x);
+ y = rb_int2big(FIX2LONG(y));
}
- else {
- TypeError("can't coerce %s to Bignum", rb_class2name(CLASS_OF(y)));
+ else if (!RB_BIGNUM_TYPE_P(y)) {
+ rb_raise(rb_eTypeError, "can't coerce %s to Bignum",
+ rb_obj_classname(y));
}
- /* not reached */
+ return rb_assoc_new(y, x);
}
+/*
+ * call-seq:
+ * big.abs -> aBignum
+ * big.magnitude -> aBignum
+ *
+ * Returns the absolute value of <i>big</i>.
+ *
+ * -1234567890987654321.abs #=> 1234567890987654321
+ */
+
static VALUE
-big_abs(x)
- struct RBignum *x;
+rb_big_abs(VALUE x)
{
- if (!x->sign) {
- x = (struct RBignum*)big_clone(x);
- x->sign = 1;
+ if (!RBIGNUM_SIGN(x)) {
+ x = rb_big_clone(x);
+ RBIGNUM_SET_SIGN(x, 1);
}
- return (VALUE)x;
+ return x;
}
-/* !!!warnig!!!!
- this is not really a random number!!
-*/
+/*
+ * 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
+ */
-VALUE
-big_rand(max)
- struct RBignum *max;
+static VALUE
+rb_big_size(VALUE big)
{
- struct RBignum *v;
- int len;
+ return SIZET2NUM(BIGSIZE(big));
+}
- len = max->len;
- v = RBIGNUM(bignew(len,1));
- while (len--) {
-#ifdef HAVE_RANDOM
- BDIGITS(v)[len] = random();
-#else
- BDIGITS(v)[len] = rand();
-#endif
+/*
+ * 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
+ *
+ */
+
+static VALUE
+rb_big_bit_length(VALUE big)
+{
+ 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);
+
+ if (numbytes == 0)
+ return LONG2FIX(0);
+
+ if (RBIGNUM_NEGATIVE_P(big) && rb_absint_singlebit_p(big)) {
+ if (nlz_bits != CHAR_BIT-1) {
+ nlz_bits++;
+ }
+ else {
+ nlz_bits = 0;
+ numbytes--;
+ }
}
- return big_mod(v, max);
+ if (numbytes <= SIZE_MAX / CHAR_BIT) {
+ return SIZET2NUM(numbytes * CHAR_BIT - nlz_bits);
+ }
+
+ 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
-big_size(big)
- struct RBignum *big;
+rb_big_odd_p(VALUE num)
{
- return INT2FIX(big->len*2);
+ if (RBIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1) {
+ return Qtrue;
+ }
+ return Qfalse;
}
+/*
+ * call-seq:
+ * big.even? -> true or false
+ *
+ * Returns <code>true</code> if <i>big</i> is an even number.
+ */
+
+static VALUE
+rb_big_even_p(VALUE num)
+{
+ if (RBIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1) {
+ return Qfalse;
+ }
+ return Qtrue;
+}
+
+/*
+ * Bignum objects hold integers outside the range of
+ * Fixnum. Bignum objects are created
+ * automatically when integer calculations would otherwise overflow a
+ * 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()
-{
- cBignum = rb_define_class("Bignum", cInteger);
-
- rb_undef_method(CLASS_OF(cBignum), "new");
-
- rb_define_method(cBignum, "to_s", big_to_s, 0);
- rb_define_method(cBignum, "coerce", big_coerce, 1);
- rb_define_method(cBignum, "-@", big_uminus, 0);
- rb_define_method(cBignum, "+", big_plus, 1);
- rb_define_method(cBignum, "-", big_minus, 1);
- rb_define_method(cBignum, "*", big_mul, 1);
- rb_define_method(cBignum, "/", big_div, 1);
- rb_define_method(cBignum, "%", big_mod, 1);
- rb_define_method(cBignum, "divmod", big_divmod, 1);
- rb_define_method(cBignum, "**", big_pow, 1);
- rb_define_method(cBignum, "&", big_and, 1);
- rb_define_method(cBignum, "|", big_or, 1);
- rb_define_method(cBignum, "^", big_xor, 1);
- rb_define_method(cBignum, "~", big_neg, 0);
- rb_define_method(cBignum, "<<", big_lshift, 1);
- rb_define_method(cBignum, ">>", big_rshift, 1);
- rb_define_method(cBignum, "[]", big_aref, 1);
-
- rb_define_method(cBignum, "<=>", big_cmp, 1);
- rb_define_method(cBignum, "hash", big_hash, 0);
- rb_define_method(cBignum, "to_i", big_to_i, 0);
- rb_define_method(cBignum, "to_f", big_to_f, 0);
- rb_define_method(cBignum, "abs", big_abs, 0);
- rb_define_method(cBignum, "size", big_size, 0);
+Init_Bignum(void)
+{
+ 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);
+ rb_define_method(rb_cBignum, "-", rb_big_minus, 1);
+ 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, "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, "**", rb_big_pow, 1);
+ rb_define_method(rb_cBignum, "&", rb_big_and, 1);
+ rb_define_method(rb_cBignum, "|", rb_big_or, 1);
+ rb_define_method(rb_cBignum, "^", rb_big_xor, 1);
+ rb_define_method(rb_cBignum, "~", rb_big_neg, 0);
+ rb_define_method(rb_cBignum, "<<", rb_big_lshift, 1);
+ rb_define_method(rb_cBignum, ">>", rb_big_rshift, 1);
+ rb_define_method(rb_cBignum, "[]", rb_big_aref, 1);
+
+ 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
+ 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
new file mode 100755
index 0000000000..6a7ea7d593
--- /dev/null
+++ b/bin/erb
@@ -0,0 +1,155 @@
+#!/usr/bin/env ruby
+# Tiny eRuby --- ERB2
+# Copyright (c) 1999-2000,2002 Masatoshi SEKI
+# You can redistribute it and/or modify it under the same terms as Ruby.
+
+require 'erb'
+
+class ERB
+ module Main
+ def ARGV.switch
+ return nil if self.empty?
+ arg = self.shift
+ return nil if arg == '--'
+ if arg =~ /^-(.)(.*)/
+ 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
+ "-#{$1}"
+ else
+ self.unshift arg
+ nil
+ end
+ end
+
+ def ARGV.req_arg
+ (@maybe_arg || self.shift || raise('missing argument')).tap {
+ @maybe_arg = nil
+ }
+ end
+
+ def trim_mode_opt(trim_mode, disable_percent)
+ return trim_mode if disable_percent
+ case trim_mode
+ when 0
+ return '%'
+ when 1
+ return '%>'
+ when 2
+ return '%<>'
+ when '-'
+ return '%-'
+ end
+ end
+ module_function :trim_mode_opt
+
+ def run(factory=ERB)
+ trim_mode = 0
+ disable_percent = false
+ begin
+ while switch = ARGV.switch
+ case switch
+ when '-x' # ruby source
+ output = true
+ when '-n' # line number
+ number = true
+ when '-v' # verbose
+ $VERBOSE = true
+ when '--version' # version
+ STDERR.puts factory.version
+ exit
+ when '-d', '--debug' # debug
+ $DEBUG = true
+ when '-r' # require
+ require ARGV.req_arg
+ when '-S' # security level
+ arg = ARGV.req_arg
+ raise "invalid safe_level #{arg.dump}" unless arg =~ /^[0-3]$/
+ safe_level = arg.to_i
+ when '-T' # trim mode
+ arg = ARGV.req_arg
+ if arg == '-'
+ trim_mode = arg
+ next
+ end
+ raise "invalid trim mode #{arg.dump}" unless arg =~ /^[0-2]$/
+ trim_mode = arg.to_i
+ when '-E', '--encoding'
+ arg = ARGV.req_arg
+ set_encoding(*arg.split(/:/, 2))
+ when '-U'
+ set_encoding(Encoding::UTF_8, Encoding::UTF_8)
+ when '-P'
+ disable_percent = true
+ when '--help'
+ raise "print this help"
+ else
+ raise "unknown switch #{switch.dump}"
+ end
+ end
+ rescue # usage
+ STDERR.puts $!.to_s
+ 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..3)
+ -E ex[:in] set default external/internal encodings
+ -U set default encoding to UTF-8.
+ -T trim_mode specify trim_mode (0..2, -)
+ -P ignore lines which start with "%"
+EOU
+ exit 1
+ end
+
+ $<.set_encoding(Encoding::ASCII_8BIT, nil)
+ src = $<.read
+ filename = $FILENAME
+ exit 2 unless src
+ trim = trim_mode_opt(trim_mode, disable_percent)
+ erb = factory.new(src.untaint, safe_level, trim)
+ erb.filename = filename
+ if output
+ if number
+ erb.src.each_line.with_index do |line, l|
+ puts "%3d %s"%[l+1, line]
+ end
+ else
+ puts erb.src
+ end
+ else
+ 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.empty?
+ Encoding.default_internal = intern unless intern.nil? || intern.empty?
+ [$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
+
+if __FILE__ == $0
+ ERB::Main.run
+end
diff --git a/bin/gem b/bin/gem
new file mode 100755
index 0000000000..a4ec754abb
--- /dev/null
+++ b/bin/gem
@@ -0,0 +1,25 @@
+#!/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
new file mode 100755
index 0000000000..c64ee85fbd
--- /dev/null
+++ b/bin/irb
@@ -0,0 +1,11 @@
+#!/usr/bin/env ruby
+#
+# irb.rb - interactive ruby
+# $Release Version: 0.9.6 $
+# $Revision$
+# by Keiju ISHITSUKA(keiju@ruby-lang.org)
+#
+
+require "irb"
+
+IRB.start(__FILE__)
diff --git a/bin/rake b/bin/rake
new file mode 100755
index 0000000000..4e0bbb7b7a
--- /dev/null
+++ b/bin/rake
@@ -0,0 +1,33 @@
+#!/usr/bin/env ruby
+
+#--
+# Copyright (c) 2003, 2004, 2005, 2006, 2007 Jim Weirich
+#
+# 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.
+#++
+
+begin
+ require 'rubygems'
+ gem 'rake'
+rescue LoadError
+end
+
+require 'rake'
+
+Rake.application.run
diff --git a/bin/rdoc b/bin/rdoc
new file mode 100755
index 0000000000..aaa23292df
--- /dev/null
+++ b/bin/rdoc
@@ -0,0 +1,44 @@
+#!/usr/bin/env ruby
+#
+# RDoc: Documentation tool for source code
+# (see lib/rdoc/rdoc.rb for more information)
+#
+# Copyright (c) 2003 Dave Thomas
+# Released under the same terms as Ruby
+
+begin
+ gem 'rdoc'
+rescue NameError => e # --disable-gems
+ raise unless e.name == :gem
+rescue Gem::LoadError
+end
+
+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
+end
+
diff --git a/bin/ri b/bin/ri
new file mode 100755
index 0000000000..7fbed0c099
--- /dev/null
+++ b/bin/ri
@@ -0,0 +1,12 @@
+#!/usr/bin/env ruby
+
+begin
+ gem 'rdoc'
+rescue NameError => e # --disable-gems
+ raise unless e.name == :gem
+rescue Gem::LoadError
+end
+
+require 'rdoc/ri/driver'
+
+RDoc::RI::Driver.run ARGV
diff --git a/bin/testrb b/bin/testrb
new file mode 100755
index 0000000000..23a00b439f
--- /dev/null
+++ b/bin/testrb
@@ -0,0 +1,3 @@
+#!/usr/bin/env ruby
+require 'test/unit'
+exit Test::Unit::AutoRunner.run(true)
diff --git a/bootstraptest/pending.rb b/bootstraptest/pending.rb
new file mode 100644
index 0000000000..744c0adac1
--- /dev/null
+++ b/bootstraptest/pending.rb
@@ -0,0 +1,39 @@
+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
new file mode 100755
index 0000000000..5fdfc42a63
--- /dev/null
+++ b/bootstraptest/runner.rb
@@ -0,0 +1,485 @@
+"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+)=([^:]*)/)] : {}
+ @passed = "\e[#{colors["pass"] || "32"}m"
+ @failed = "\e[#{colors["fail"] || "31"}m"
+ @reset = "\e[m"
+ @erase = "\r\e[2K\r"
+ else
+ @passed = @failed = @reset = @erase = ""
+ 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 exec_test(pathes)
+ @count = 0
+ @error = 0
+ @errbuf = []
+ @location = nil
+ pathes.each do |path|
+ @basename = File.basename(path)
+ $stderr.print @basename, " "
+ $stderr.puts if @verbose
+ count = @count
+ error = @error
+ load File.expand_path(path)
+ if @tty
+ if @error == error
+ $stderr.print "#{@progress_bs}#{@passed}PASS #{@count-count}#{@reset}"
+ $stderr.print @erase if @quiet
+ else
+ $stderr.print "#{@progress_bs}#{@failed}FAIL #{@error-error}/#{@count-count}#{@reset}"
+ end
+ end
+ $stderr.puts unless @quiet and @tty
+ end
+ 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
+ faildesc, errout = with_stderr {yield}
+ if !faildesc
+ if @tty
+ $stderr.print "#{@progress_bs}#{@progress[@count % @progress.size]}"
+ else
+ $stderr.print '.'
+ end
+ $stderr.puts if @verbose
+ else
+ $stderr.print "#{@failed}F#{@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.print @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 && 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(/^/, ' ')
+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
new file mode 100644
index 0000000000..721a847145
--- /dev/null
+++ b/bootstraptest/test_attr.rb
@@ -0,0 +1,36 @@
+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
new file mode 100644
index 0000000000..a9f8e6dacd
--- /dev/null
+++ b/bootstraptest/test_autoload.rb
@@ -0,0 +1,70 @@
+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
new file mode 100644
index 0000000000..6a2ccfc6da
--- /dev/null
+++ b/bootstraptest/test_block.rb
@@ -0,0 +1,599 @@
+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{}
+}
+
diff --git a/bootstraptest/test_class.rb b/bootstraptest/test_class.rb
new file mode 100644
index 0000000000..b7fe0a1acd
--- /dev/null
+++ b/bootstraptest/test_class.rb
@@ -0,0 +1,169 @@
+# 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
new file mode 100644
index 0000000000..bf7478006d
--- /dev/null
+++ b/bootstraptest/test_eval.rb
@@ -0,0 +1,324 @@
+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
new file mode 100644
index 0000000000..35c8d25e37
--- /dev/null
+++ b/bootstraptest/test_exception.rb
@@ -0,0 +1,432 @@
+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
new file mode 100644
index 0000000000..22a16b1220
--- /dev/null
+++ b/bootstraptest/test_finalizer.rb
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000000..ff194868b2
--- /dev/null
+++ b/bootstraptest/test_flip.rb
@@ -0,0 +1 @@
+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
new file mode 100644
index 0000000000..0390062a24
--- /dev/null
+++ b/bootstraptest/test_flow.rb
@@ -0,0 +1,591 @@
+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
new file mode 100644
index 0000000000..384294727f
--- /dev/null
+++ b/bootstraptest/test_fork.rb
@@ -0,0 +1,69 @@
+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]')
+ Thread.new { sleep 1; Thread.kill Thread.main }
+ Process.setrlimit(:NPROC, 1)
+ fork {}
+End
+
+assert_equal 'ok', %q{
+ begin
+ if pid1 = fork
+ sleep 1
+ Process.kill("USR1", pid1)
+ _, s = Process.wait2(pid1)
+ s.success? ? :ok : :ng
+ else
+ if pid2 = fork
+ trap("USR1") { Time.now.to_s }
+ Process.wait2(pid2)
+ else
+ sleep 2
+ end
+ exit 0
+ end
+ rescue NotImplementedError
+ :ok
+ end
+}, '[ruby-core:28924]'
+
+assert_equal '[1, 2]', %q{
+ a = []
+ trap(:INT) { a.push(1) }
+ trap(:TERM) { a.push(2) }
+ pid = $$
+ begin
+ fork do
+ sleep 0.5
+ Process.kill(:INT, pid)
+ Process.kill(:TERM, pid)
+ end
+
+ sleep 1
+ 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
new file mode 100644
index 0000000000..eb68c9845e
--- /dev/null
+++ b/bootstraptest/test_gc.rb
@@ -0,0 +1,34 @@
+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
new file mode 100644
index 0000000000..f7360f34b3
--- /dev/null
+++ b/bootstraptest/test_io.rb
@@ -0,0 +1,112 @@
+assert_finish 5, %q{
+ r, w = IO.pipe
+ t1 = Thread.new { r.sysread(1) }
+ t2 = Thread.new { r.sysread(1) }
+ sleep 0.1
+ w.write "a"
+ sleep 0.1
+ 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, TimeoutError, NotImplementedError
+ end
+}, '[ruby-dev:32566]'
+
+assert_finish 1, %q{
+ r, w = IO.pipe
+ Thread.new {
+ w << "ab"
+ sleep 0.1
+ 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 }
+
+ Thread.new { sleep rand*0.2; 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
new file mode 100644
index 0000000000..595aaa7c4b
--- /dev/null
+++ b/bootstraptest/test_jump.rb
@@ -0,0 +1,308 @@
+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
new file mode 100644
index 0000000000..b95a2f2d0a
--- /dev/null
+++ b/bootstraptest/test_literal.rb
@@ -0,0 +1,231 @@
+# 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'
+
+# dynacmi 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
new file mode 100644
index 0000000000..4316c9e040
--- /dev/null
+++ b/bootstraptest/test_literal_suffix.rb
@@ -0,0 +1,54 @@
+# 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
new file mode 100644
index 0000000000..e63c93a8f4
--- /dev/null
+++ b/bootstraptest/test_load.rb
@@ -0,0 +1,27 @@
+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
new file mode 100644
index 0000000000..7e34176169
--- /dev/null
+++ b/bootstraptest/test_marshal.rb
@@ -0,0 +1,5 @@
+
+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
new file mode 100644
index 0000000000..0f63dd424a
--- /dev/null
+++ b/bootstraptest/test_massign.rb
@@ -0,0 +1,183 @@
+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
new file mode 100644
index 0000000000..0a7cb0a577
--- /dev/null
+++ b/bootstraptest/test_method.rb
@@ -0,0 +1,1220 @@
+# 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_equal 'wrong number of arguments (1 for 0)', %q{
+ def m; end
+ begin
+ m(1)
+ rescue => e
+ e.message
+ end
+}
+
+assert_equal 'wrong number of arguments (0 for 1)', %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{
+ proc{
+ $SAFE = 2
+ class C
+ def m
+ :ok
+ end
+ end
+ }.call
+ C.new.m
+}, '[ruby-core:11998]'
+
+assert_equal 'ok', %q{
+ proc{
+ $SAFE = 3
+ class C
+ def m
+ :ng
+ end
+ end
+ }.call
+ begin
+ C.new.m
+ rescue SecurityError
+ :ok
+ end
+}, '[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
new file mode 100644
index 0000000000..862a94e376
--- /dev/null
+++ b/bootstraptest/test_objectspace.rb
@@ -0,0 +1,46 @@
+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
new file mode 100644
index 0000000000..c23394e8d2
--- /dev/null
+++ b/bootstraptest/test_proc.rb
@@ -0,0 +1,483 @@
+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_struct.rb b/bootstraptest/test_struct.rb
new file mode 100644
index 0000000000..a65964d5f9
--- /dev/null
+++ b/bootstraptest/test_struct.rb
@@ -0,0 +1,5 @@
+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
new file mode 100644
index 0000000000..80eaa6416d
--- /dev/null
+++ b/bootstraptest/test_syntax.rb
@@ -0,0 +1,902 @@
+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{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
new file mode 100644
index 0000000000..7baa806a45
--- /dev/null
+++ b/bootstraptest/test_thread.rb
@@ -0,0 +1,464 @@
+# 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
+ 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 2}
+ th.join(1)
+ th.join
+}
+
+assert_finish 3, %{
+ require 'timeout'
+ th = Thread.new {sleep 2}
+ begin
+ Timeout.timeout(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.1
+ 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
+ Thread.new { m1.lock; sleep 1; m2.lock }
+ m2.lock; sleep 1; m1.lock
+ :ng
+ rescue Exception
+ :ok
+ end
+}
+
+assert_equal 'ok', %q{
+ m = Mutex.new
+ Thread.new { m.lock }; sleep 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 2 }
+ sleep 1; m.lock
+ :ok
+}
+
+assert_equal 'ok', %q{
+ m = Mutex.new
+ Thread.new { m.lock; sleep 2; m.unlock }
+ sleep 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
+ begin
+ m = Mutex.new
+ Thread.new { m.lock; sleep 1 }
+ sleep 0.3
+ parent = Thread.current
+ Thread.new do
+ sleep 0.3
+ begin
+ fork { GC.start }
+ rescue Exception
+ parent.raise $!
+ end
+ 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 {sleep 1})[1].success? ? 'ok' : 'ng'
+ rescue NotImplementedError
+ 'ok'
+ end
+}
+
+assert_equal 'foo', %q{
+ f = proc {|s| /#{ sleep 1; s }/o }
+ [ Thread.new { f.call("foo"); nil },
+ Thread.new { sleep 0.5; f.call("bar"); nil },
+ ].each {|t| t.join }
+ GC.start
+ f.call.source
+}
diff --git a/class.c b/class.c
index 3e8ce517a6..8f11f45b53 100644
--- a/class.c
+++ b/class.c
@@ -1,411 +1,1977 @@
-/************************************************
+/**********************************************************************
class.c -
- $Author: matz $
- $Date: 1995/01/12 08:54:44 $
+ $Author$
created at: Tue Aug 10 15:05:44 JST 1993
- Copyright (C) 1993-1995 Yukihiro Matsumoto
+ Copyright (C) 1993-2007 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 "ruby/ruby.h"
+#include "ruby/st.h"
+#include "method.h"
+#include "constant.h"
+#include "vm_core.h"
+#include "internal.h"
+#include <ctype.h>
+
+int rb_vm_add_root_module(ID id, VALUE module);
+
+
+#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 = xmalloc(sizeof(*entry));
+ 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 = xmalloc(sizeof(*entry));
+ 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;
+
+ 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);
+ }
-#include "ruby.h"
-#include "node.h"
-#include "st.h"
+ RCLASS_EXT(klass)->module_subclasses = NULL;
+}
-struct st_table *new_idhash();
-extern st_table *rb_class_tbl;
+void
+rb_class_foreach_subclass(VALUE klass, void(*f)(VALUE))
+{
+ 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);
+ }
+}
-extern VALUE cClass;
-extern VALUE cModule;
+void
+rb_class_detach_subclasses(VALUE klass)
+{
+ rb_class_foreach_subclass(klass, rb_class_remove_from_super_subclasses);
+}
+void
+rb_class_detach_module_subclasses(VALUE klass)
+{
+ rb_class_foreach_subclass(klass, rb_class_remove_from_module_subclasses);
+}
+
+/**
+ * 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) | (RGENGC_WB_PROTECTED_CLASS ? FL_WB_PROTECTED : 0));
+ obj->ptr = ALLOC(rb_classext_t);
+ RCLASS_IV_TBL(obj) = 0;
+ RCLASS_CONST_TBL(obj) = 0;
+ RCLASS_M_TBL_WRAPPER(obj) = 0;
+ RCLASS_SET_SUPER((VALUE)obj, 0);
+ RCLASS_ORIGIN(obj) = (VALUE)obj;
+ RCLASS_IV_INDEX_TBL(obj) = 0;
+
+ RCLASS_EXT(obj)->subclasses = NULL;
+ RCLASS_EXT(obj)->parent_subclasses = NULL;
+ RCLASS_EXT(obj)->module_subclasses = NULL;
+ RCLASS_SERIAL(obj) = rb_next_class_serial();
+
+ RCLASS_REFINED_CLASS(obj) = Qnil;
+ RCLASS_EXT(obj)->allocator = 0;
+ return (VALUE)obj;
+}
+
+
+/*!
+ * 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
-class_new(super)
- struct RClass *super;
+rb_class_boot(VALUE super)
{
- NEWOBJ(cls, struct RClass);
- OBJSETUP(cls, cClass, T_CLASS);
+ VALUE klass = class_alloc(T_CLASS, rb_cClass);
- cls->super = super;
- cls->m_tbl = new_idhash();
+ RCLASS_SET_SUPER(klass, super);
+ RCLASS_M_TBL_INIT(klass);
- return (VALUE)cls;
+ 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 (%s given)",
+ rb_obj_classname(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
-singleton_class_new(super)
- struct RClass *super;
+rb_class_new(VALUE super)
{
- struct RClass *cls = (struct RClass*)class_new(super);
+ Check_Type(super, T_CLASS);
+ rb_check_inheritable(super);
+ return rb_class_boot(super);
+}
- FL_SET(cls, FL_SINGLETON);
+static void
+rewrite_cref_stack(NODE *node, VALUE old_klass, VALUE new_klass, NODE **new_cref_ptr)
+{
+ NODE *new_node;
+ while (node) {
+ if (node->nd_clss == old_klass) {
+ new_node = NEW_CREF(new_klass);
+ RB_OBJ_WRITE(new_node, &new_node->nd_next, node->nd_next);
+ *new_cref_ptr = new_node;
+ return;
+ }
+ new_node = NEW_CREF(node->nd_clss);
+ node = node->nd_next;
+ *new_cref_ptr = new_node;
+ new_cref_ptr = &new_node->nd_next;
+ }
+ *new_cref_ptr = NULL;
+}
- return (VALUE)cls;
+static void
+clone_method(VALUE klass, ID mid, const rb_method_entry_t *me)
+{
+ VALUE newiseqval;
+ if (me->def && me->def->type == VM_METHOD_TYPE_ISEQ) {
+ rb_iseq_t *iseq;
+ NODE *new_cref;
+ newiseqval = rb_iseq_clone(me->def->body.iseq->self, klass);
+ GetISeqPtr(newiseqval, iseq);
+ rewrite_cref_stack(me->def->body.iseq->cref_stack, me->klass, klass, &new_cref);
+ RB_OBJ_WRITE(iseq->self, &iseq->cref_stack, new_cref);
+ rb_add_method(klass, mid, VM_METHOD_TYPE_ISEQ, iseq, me->flag);
+ RB_GC_GUARD(newiseqval);
+ }
+ else {
+ rb_method_entry_set(klass, mid, me, me->flag);
+ }
}
static int
-clone_method(mid, body, tbl)
- ID mid;
- NODE *body;
+clone_method_i(st_data_t key, st_data_t value, st_data_t data)
+{
+ clone_method((VALUE)data, (ID)key, (const rb_method_entry_t *)value);
+ return ST_CONTINUE;
+}
+
+struct clone_const_arg {
+ VALUE klass;
st_table *tbl;
+};
+
+static int
+clone_const(ID key, const rb_const_entry_t *ce, struct clone_const_arg *arg)
{
- st_insert(tbl, mid, NEW_METHOD(body->nd_body, body->nd_noex));
+ 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;
}
+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);
+}
+
+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");
+ }
+}
+
+/* :nodoc: */
+VALUE
+rb_mod_init_copy(VALUE clone, VALUE orig)
+{
+ if (RB_TYPE_P(clone, T_CLASS)) {
+ class_init_copy_check(clone, orig);
+ }
+ if (!OBJ_INIT_COPY(clone, orig)) return clone;
+ 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;
+ }
+ if (RCLASS_M_TBL_WRAPPER(clone)) {
+ rb_free_m_tbl_wrapper(RCLASS_M_TBL_WRAPPER(clone));
+ RCLASS_M_TBL_WRAPPER(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);
+ }
+ if (RCLASS_CONST_TBL(orig)) {
+ 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(orig), clone_const_i, (st_data_t)&arg);
+ }
+ if (RCLASS_M_TBL(orig)) {
+ RCLASS_M_TBL_INIT(clone);
+ st_foreach(RCLASS_M_TBL(orig), clone_method_i, (st_data_t)clone);
+ }
+
+ return clone;
+}
+
VALUE
-singleton_class_clone(class)
- struct RClass *class;
+rb_singleton_class_clone(VALUE obj)
{
- if (!FL_TEST(class, FL_SINGLETON))
- return (VALUE)class;
+ return rb_singleton_class_clone_and_attach(obj, Qundef);
+}
+
+VALUE
+rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach)
+{
+ VALUE klass = RBASIC(obj)->klass;
+
+ if (!FL_TEST(klass, FL_SINGLETON))
+ return klass;
else {
/* copy singleton(unnamed) class */
- NEWOBJ(clone, struct RClass);
- CLONESETUP(clone, class);
+ VALUE clone = class_alloc(RBASIC(klass)->flags, 0);
- clone->super = class->super;
- clone->m_tbl = new_idhash();
- st_foreach(class->m_tbl, clone_method, clone->m_tbl);
+ if (BUILTIN_TYPE(obj) == T_CLASS) {
+ RBASIC_SET_CLASS(clone, clone);
+ }
+ else {
+ RBASIC_SET_CLASS(clone, 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));
+ }
+ 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);
+ st_foreach(RCLASS_M_TBL(klass), clone_method_i, (st_data_t)clone);
+ rb_singleton_class_attached(RBASIC(clone)->klass, clone);
FL_SET(clone, FL_SINGLETON);
- return (VALUE)clone;
+
+ return clone;
}
}
-VALUE
-rb_define_class_id(id, super)
- ID id;
- struct RBasic *super;
+/*!
+ * 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)
+{
+ if (FL_TEST(klass, FL_SINGLETON)) {
+ if (!RCLASS_IV_TBL(klass)) {
+ RCLASS_IV_TBL(klass) = st_init_numtable();
+ }
+ rb_st_insert_id_and_value(klass, RCLASS_IV_TBL(klass), id_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))
+
+/*!
+ * 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_ivar_get(METACLASS_OF(k), id_attached) == (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)
{
- struct RClass *cls;
+ 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));
- if (!super) super = (struct RBasic*)cClass;
- cls = (struct RClass*)class_new(super);
- rb_name_class(cls, id);
- /* make metaclass */
- RBASIC(cls)->class = singleton_class_new(super->class);
+ 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 orig_class = RBASIC(obj)->klass;
+ VALUE klass = rb_class_boot(orig_class);
+
+ FL_SET(klass, FL_SINGLETON);
+ RBASIC_SET_CLASS(obj, klass);
+ rb_singleton_class_attached(klass, obj);
- return (VALUE)cls;
+ 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("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_define_class(name, super)
- char *name;
- VALUE super;
+rb_make_metaclass(VALUE obj, VALUE unused)
{
- VALUE class;
- ID id;
+ if (BUILTIN_TYPE(obj) == T_CLASS) {
+ return make_metaclass(obj);
+ }
+ else {
+ return make_singleton_class(obj);
+ }
+}
- id = rb_intern(name);
- class = rb_define_class_id(id, super);
- st_add_direct(rb_class_tbl, id, class);
- return class;
+/*!
+ * 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)
+{
+ VALUE klass;
+
+ if (!super) super = rb_cObject;
+ klass = rb_class_new(super);
+ rb_make_metaclass(klass, RBASIC(super)->klass);
+
+ return klass;
}
+
+/*!
+ * 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_define_class_under(under, name, super)
- VALUE under;
- char *name;
- VALUE super;
+rb_class_inherited(VALUE super, VALUE klass)
+{
+ ID inherited;
+ if (!super) super = rb_cObject;
+ CONST_ID(inherited, "inherited");
+ return rb_funcall(super, 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)
{
- VALUE class;
+ VALUE klass;
ID id;
id = rb_intern(name);
- class = rb_define_class_id(id, super);
- rb_const_set(under, id, class);
- rb_set_class_path(class, under, 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", name);
+ }
+ if (rb_class_real(RCLASS_SUPER(klass)) != super) {
+ rb_raise(rb_eTypeError, "superclass mismatch for class %s", name);
+ }
+ return klass;
+ }
+ if (!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);
+ rb_name_class(klass, id);
+ rb_const_set(rb_cObject, id, klass);
+ rb_class_inherited(super, klass);
- return class;
+ 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 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
-module_new()
+rb_define_class_under(VALUE outer, const char *name, VALUE super)
{
- NEWOBJ(mdl, struct RClass);
- OBJSETUP(mdl, cModule, T_MODULE);
+ return rb_define_class_id_under(outer, rb_intern(name), super);
+}
- mdl->super = 0;
- mdl->m_tbl = new_idhash();
+/*!
+ * 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 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_id_under(VALUE outer, ID id, VALUE super)
+{
+ VALUE klass;
+
+ 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, "%s is not a class", rb_id2name(id));
+ }
+ if (rb_class_real(RCLASS_SUPER(klass)) != super) {
+ rb_name_error(id, "%s is already defined", rb_id2name(id));
+ }
+ return klass;
+ }
+ if (!super) {
+ rb_warn("no super class for `%s::%s', Object assumed",
+ rb_class2name(outer), rb_id2name(id));
+ }
+ klass = rb_define_class_id(id, super);
+ rb_set_class_path_string(klass, outer, rb_id2str(id));
+ rb_const_set(outer, id, klass);
+ rb_class_inherited(super, klass);
+ rb_gc_register_mark_object(klass);
+
+ return klass;
+}
+
+VALUE
+rb_module_new(void)
+{
+ VALUE mdl = class_alloc(T_MODULE, rb_cModule);
+ RCLASS_M_TBL_INIT(mdl);
return (VALUE)mdl;
}
VALUE
-rb_define_module_id(id)
- ID id;
+rb_define_module_id(ID id)
{
- extern st_table *rb_class_tbl;
- struct RClass *mdl = (struct RClass*)module_new();
+ VALUE mdl;
+ mdl = rb_module_new();
rb_name_class(mdl, id);
- return (VALUE)mdl;
+ return mdl;
}
VALUE
-rb_define_module(name)
- char *name;
+rb_define_module(const char *name)
{
VALUE module;
ID id;
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))
+ return module;
+ rb_raise(rb_eTypeError, "%s is not a module", rb_obj_classname(module));
+ }
module = rb_define_module_id(id);
- st_add_direct(rb_class_tbl, id, module);
+ rb_vm_add_root_module(id, module);
+ rb_const_set(rb_cObject, id, module);
return module;
}
VALUE
-rb_define_module_under(under, name)
- VALUE under;
- char *name;
+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)
{
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))
+ 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(under, id, module);
- rb_set_class_path(module, under, name);
+ rb_const_set(outer, id, module);
+ rb_set_class_path_string(module, outer, rb_id2str(id));
+ rb_gc_register_mark_object(module);
return module;
}
-static struct RClass *
-include_class_new(module, super)
- struct RClass *module, *super;
+VALUE
+rb_include_class_new(VALUE module, VALUE super)
{
- NEWOBJ(cls, struct RClass);
- OBJSETUP(cls, cClass, T_ICLASS);
+ VALUE klass = class_alloc(T_ICLASS, rb_cClass);
- cls->m_tbl = module->m_tbl;
- cls->iv_tbl = module->iv_tbl;
- cls->super = super;
- if (TYPE(module) == T_ICLASS) {
- RBASIC(cls)->class = RBASIC(module)->class;
+ 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();
+ }
+ RCLASS_IV_TBL(klass) = RCLASS_IV_TBL(module);
+ RCLASS_CONST_TBL(klass) = RCLASS_CONST_TBL(module);
+
+ RCLASS_M_TBL_WRAPPER(OBJ_WB_UNPROTECT(klass)) =
+ RCLASS_M_TBL_WRAPPER(OBJ_WB_UNPROTECT(RCLASS_ORIGIN(module)));
+
+ RCLASS_SET_SUPER(klass, super);
+ if (RB_TYPE_P(module, T_ICLASS)) {
+ RBASIC_SET_CLASS(klass, RBASIC(module)->klass);
}
else {
- RBASIC(cls)->class = (VALUE)module;
+ RBASIC_SET_CLASS(klass, module);
}
+ OBJ_INFECT(klass, module);
+ OBJ_INFECT(klass, super);
- return cls;
+ return (VALUE)klass;
}
+static int include_modules_at(const VALUE klass, VALUE c, VALUE module);
+
void
-rb_include_module(class, module)
- struct RClass *class, *module;
+rb_include_module(VALUE klass, VALUE module)
{
- struct RClass *p;
+ int changed = 0;
- if (NIL_P(module)) return;
+ rb_frozen_class_p(klass);
- switch (TYPE(module)) {
- case T_MODULE:
- case T_CLASS:
- break;
- default:
+ if (!RB_TYPE_P(module, T_MODULE)) {
Check_Type(module, T_MODULE);
}
- if (class == module) return;
- rb_clear_cache();
-
+ OBJ_INFECT(klass, module);
+
+ changed = include_modules_at(klass, RCLASS_ORIGIN(klass), module);
+ if (changed < 0)
+ rb_raise(rb_eArgError, "cyclic include detected");
+}
+
+static int
+add_refined_method_entry_i(st_data_t key, st_data_t value, st_data_t data)
+{
+ rb_add_refined_method_entry((VALUE) data, (ID) key);
+ return ST_CONTINUE;
+}
+
+static int
+include_modules_at(const VALUE klass, VALUE c, VALUE module)
+{
+ VALUE p, iclass;
+ int method_changed = 0, constant_changed = 0;
+ const st_table *const klass_m_tbl = RCLASS_M_TBL(RCLASS_ORIGIN(klass));
+
while (module) {
+ int superclass_seen = FALSE;
+
+ if (RCLASS_ORIGIN(module) != module)
+ goto skip;
+ if (klass_m_tbl && klass_m_tbl == RCLASS_M_TBL(module))
+ return -1;
/* ignore if the module included already in superclasses */
- for (p = class->super; p; p = p->super) {
- if (BUILTIN_TYPE(p) == T_ICLASS && p->m_tbl == module->m_tbl)
- return;
+ for (p = RCLASS_SUPER(klass); p; p = RCLASS_SUPER(p)) {
+ switch (BUILTIN_TYPE(p)) {
+ case T_ICLASS:
+ if (RCLASS_M_TBL_WRAPPER(p) == RCLASS_M_TBL_WRAPPER(module)) {
+ if (!superclass_seen) {
+ c = p; /* move insertion point */
+ }
+ goto skip;
+ }
+ break;
+ case T_CLASS:
+ superclass_seen = TRUE;
+ break;
+ }
+ }
+ iclass = rb_include_class_new(module, RCLASS_SUPER(c));
+ c = RCLASS_SET_SUPER(c, iclass);
+
+ if (BUILTIN_TYPE(module) == T_ICLASS) {
+ rb_module_add_to_subclasses_list(RBASIC(module)->klass, iclass);
+ } else {
+ rb_module_add_to_subclasses_list(module, iclass);
}
- if (verbose) {
- rb_const_check(class, module);
+ if (FL_TEST(klass, RMODULE_IS_REFINEMENT)) {
+ VALUE refined_class =
+ rb_refinement_module_get_refined_class(klass);
+
+ st_foreach(RMODULE_M_TBL(module), add_refined_method_entry_i,
+ (st_data_t) refined_class);
+ FL_SET(c, RMODULE_INCLUDED_INTO_REFINEMENT);
}
+ if (RMODULE_M_TBL(module) && RMODULE_M_TBL(module)->num_entries)
+ method_changed = 1;
+ if (RMODULE_CONST_TBL(module) && RMODULE_CONST_TBL(module)->num_entries)
+ constant_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;
+}
- class->super = include_class_new(module, class->super);
- class = class->super;
- module = module->super;
+static int
+move_refined_method(st_data_t key, st_data_t value, st_data_t data)
+{
+ rb_method_entry_t *me = (rb_method_entry_t *) value;
+ st_table *tbl = (st_table *) data;
+
+ if (me->def->type == VM_METHOD_TYPE_REFINED) {
+ if (me->def->body.orig_me) {
+ rb_method_entry_t *orig_me = me->def->body.orig_me, *new_me;
+ me->def->body.orig_me = NULL;
+ new_me = ALLOC(rb_method_entry_t);
+ *new_me = *me;
+ st_add_direct(tbl, key, (st_data_t) new_me);
+ *me = *orig_me;
+ xfree(orig_me);
+ return ST_CONTINUE;
+ }
+ else {
+ st_add_direct(tbl, key, (st_data_t) me);
+ return ST_DELETE;
+ }
+ }
+ else {
+ return ST_CONTINUE;
}
}
void
-rb_define_method_id(class, name, func, argc)
- struct RClass *class;
- ID name;
- VALUE (*func)();
- int argc;
+rb_prepend_module(VALUE klass, VALUE module)
{
- rb_add_method(class, name, NEW_CFUNC(func, argc), NOEX_PUBLIC);
+ void rb_vm_check_redefinition_by_prepend(VALUE klass);
+ 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: conservertive shading. Need more survery. */
+ RCLASS_SET_SUPER(origin, RCLASS_SUPER(klass));
+ RCLASS_SET_SUPER(klass, origin);
+ RCLASS_ORIGIN(klass) = origin;
+ RCLASS_M_TBL_WRAPPER(origin) = RCLASS_M_TBL_WRAPPER(klass);
+ RCLASS_M_TBL_INIT(klass);
+ st_foreach(RCLASS_M_TBL(origin), move_refined_method,
+ (st_data_t) RCLASS_M_TBL(klass));
+ }
+ changed = include_modules_at(klass, klass, module);
+ if (changed < 0)
+ rb_raise(rb_eArgError, "cyclic prepend detected");
+ if (changed) {
+ rb_vm_check_redefinition_by_prepend(klass);
+ }
}
+/*
+ * 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)
+{
+ 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);
+ }
+ }
+ return ary;
+}
+
+/*
+ * call-seq:
+ * 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
+ * include A
+ * end
+ * class C < B
+ * end
+ * B.include?(A) #=> true
+ * C.include?(A) #=> true
+ * A.include?(A) #=> false
+ */
+
+VALUE
+rb_mod_include_p(VALUE mod, VALUE mod2)
+{
+ VALUE p;
+
+ Check_Type(mod2, T_MODULE);
+ for (p = RCLASS_SUPER(mod); p; p = RCLASS_SUPER(p)) {
+ if (BUILTIN_TYPE(p) == T_ICLASS) {
+ if (RBASIC(p)->klass == mod2) return Qtrue;
+ }
+ }
+ return Qfalse;
+}
+
+/*
+ * call-seq:
+ * mod.ancestors -> array
+ *
+ * Returns a list of modules included in <i>mod</i> (including
+ * <i>mod</i> itself).
+ *
+ * module Mod
+ * include Math
+ * include Comparable
+ * end
+ *
+ * Mod.ancestors #=> [Mod, Comparable, Math]
+ * Math.ancestors #=> [Math]
+ */
+
+VALUE
+rb_mod_ancestors(VALUE mod)
+{
+ VALUE p, ary = rb_ary_new();
+
+ for (p = mod; p; p = RCLASS_SUPER(p)) {
+ if (BUILTIN_TYPE(p) == T_ICLASS) {
+ rb_ary_push(ary, RBASIC(p)->klass);
+ }
+ else if (p == RCLASS_ORIGIN(p)) {
+ rb_ary_push(ary, p);
+ }
+ }
+ return ary;
+}
+
+#define VISI(x) ((x)&NOEX_MASK)
+#define VISI_CHECK(x,f) (VISI(x) == (f))
+
+static int
+ins_methods_push(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;
+ default:
+ visi = (type != NOEX_PRIVATE);
+ break;
+ }
+ if (visi) {
+ rb_ary_push(ary, ID2SYM(name));
+ }
+ return ST_CONTINUE;
+}
+
+static int
+ins_methods_i(st_data_t name, st_data_t type, st_data_t ary)
+{
+ return ins_methods_push((ID)name, (long)type, (VALUE)ary, -1); /* everything but private */
+}
+
+static int
+ins_methods_prot_i(st_data_t name, st_data_t type, st_data_t ary)
+{
+ return ins_methods_push((ID)name, (long)type, (VALUE)ary, NOEX_PROTECTED);
+}
+
+static int
+ins_methods_priv_i(st_data_t name, st_data_t type, st_data_t ary)
+{
+ return ins_methods_push((ID)name, (long)type, (VALUE)ary, NOEX_PRIVATE);
+}
+
+static int
+ins_methods_pub_i(st_data_t name, st_data_t type, st_data_t ary)
+{
+ return ins_methods_push((ID)name, (long)type, (VALUE)ary, NOEX_PUBLIC);
+}
+
+static int
+method_entry_i(st_data_t key, st_data_t value, st_data_t data)
+{
+ const rb_method_entry_t *me = (const rb_method_entry_t *)value;
+ st_table *list = (st_table *)data;
+ long type;
+
+ if (me && me->def->type == VM_METHOD_TYPE_REFINED) {
+ me = rb_resolve_refined_method(Qnil, me, NULL);
+ if (!me) return ST_CONTINUE;
+ }
+ if (!st_lookup(list, key, 0)) {
+ if (UNDEFINED_METHOD_ENTRY_P(me)) {
+ type = -1; /* none */
+ }
+ else {
+ type = VISI(me->flag);
+ }
+ st_add_direct(list, key, type);
+ }
+ return ST_CONTINUE;
+}
+
+static VALUE
+class_instance_method_list(int argc, VALUE *argv, VALUE mod, int obj, int (*func) (st_data_t, st_data_t, st_data_t))
+{
+ VALUE ary;
+ int recur, prepended = 0;
+ st_table *list;
+
+ if (argc == 0) {
+ recur = TRUE;
+ }
+ else {
+ VALUE r;
+ rb_scan_args(argc, argv, "01", &r);
+ recur = RTEST(r);
+ }
+
+ if (!recur && RCLASS_ORIGIN(mod) != mod) {
+ mod = RCLASS_ORIGIN(mod);
+ prepended = 1;
+ }
+
+ list = st_init_numtable();
+ for (; mod; mod = RCLASS_SUPER(mod)) {
+ if (RCLASS_M_TBL(mod)) st_foreach(RCLASS_M_TBL(mod), method_entry_i, (st_data_t)list);
+ if (BUILTIN_TYPE(mod) == T_ICLASS && !prepended) continue;
+ if (obj && FL_TEST(mod, FL_SINGLETON)) continue;
+ if (!recur) break;
+ }
+ ary = rb_ary_new();
+ 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. 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
+ * def method2() end
+ * end
+ * class C < B
+ * def method3() end
+ * end
+ *
+ * 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, VALUE *argv, VALUE mod)
+{
+ return class_instance_method_list(argc, argv, mod, 0, ins_methods_i);
+}
+
+/*
+ * call-seq:
+ * 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 not <code>false</code>, the
+ * methods of any ancestors are included.
+ */
+
+VALUE
+rb_class_protected_instance_methods(int argc, VALUE *argv, VALUE mod)
+{
+ return class_instance_method_list(argc, argv, mod, 0, ins_methods_prot_i);
+}
+
+/*
+ * call-seq:
+ * 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 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]
+ */
+
+VALUE
+rb_class_private_instance_methods(int argc, VALUE *argv, VALUE mod)
+{
+ return class_instance_method_list(argc, argv, mod, 0, ins_methods_priv_i);
+}
+
+/*
+ * call-seq:
+ * 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 not <code>false</code>, the methods of
+ * any ancestors are included.
+ */
+
+VALUE
+rb_class_public_instance_methods(int argc, VALUE *argv, VALUE mod)
+{
+ return class_instance_method_list(argc, argv, mod, 0, 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 <i>regular</i> parameter is set to <code>false</code>,
+ * Returns an array of obj'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 #=> 57
+ *
+ * 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, VALUE *argv, VALUE obj)
+{
+ retry:
+ if (argc == 0) {
+ return class_instance_method_list(argc, argv, CLASS_OF(obj), 1, ins_methods_i);
+ }
+ else {
+ VALUE recur;
+
+ rb_scan_args(argc, argv, "1", &recur);
+ if (RTEST(recur)) {
+ argc = 0;
+ goto retry;
+ }
+ return rb_obj_singleton_methods(argc, argv, obj);
+ }
+}
+
+/*
+ * 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, 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, 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, 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
+ *
+ * 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]
+ */
+
+VALUE
+rb_obj_singleton_methods(int argc, VALUE *argv, VALUE obj)
+{
+ VALUE recur, ary, klass, origin;
+ st_table *list, *mtbl;
+
+ if (argc == 0) {
+ recur = Qtrue;
+ }
+ else {
+ rb_scan_args(argc, argv, "01", &recur);
+ }
+ klass = CLASS_OF(obj);
+ origin = RCLASS_ORIGIN(klass);
+ list = st_init_numtable();
+ if (klass && FL_TEST(klass, FL_SINGLETON)) {
+ if ((mtbl = RCLASS_M_TBL(origin)) != 0)
+ st_foreach(mtbl, method_entry_i, (st_data_t)list);
+ klass = RCLASS_SUPER(klass);
+ }
+ 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)
+ st_foreach(mtbl, method_entry_i, (st_data_t)list);
+ klass = RCLASS_SUPER(klass);
+ }
+ }
+ ary = rb_ary_new();
+ 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(class, name, func, argc)
- struct RClass *class;
- char *name;
- VALUE (*func)();
- int argc;
+rb_define_method_id(VALUE klass, ID mid, VALUE (*func)(ANYARGS), int argc)
{
- rb_add_method(class, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PUBLIC);
+ rb_add_method_cfunc(klass, mid, func, argc, NOEX_PUBLIC);
}
void
-rb_undef_method(class, name)
- struct RClass *class;
- char *name;
+rb_define_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc)
{
- rb_add_method(class, rb_intern(name), 0, NOEX_PUBLIC);
+ rb_add_method_cfunc(klass, rb_intern(name), func, argc, NOEX_PUBLIC);
}
void
-rb_define_private_method(class, name, func, argc)
- struct RClass *class;
- char *name;
- VALUE (*func)();
- int argc;
+rb_define_protected_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc)
{
- rb_add_method(class, rb_intern(name), NEW_CFUNC(func, argc), NOEX_PRIVATE);
+ rb_add_method_cfunc(klass, rb_intern(name), func, argc, NOEX_PROTECTED);
+}
+
+void
+rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int argc)
+{
+ rb_add_method_cfunc(klass, rb_intern(name), func, argc, NOEX_PRIVATE);
+}
+
+void
+rb_undef_method(VALUE klass, const char *name)
+{
+ rb_add_method(klass, rb_intern(name), VM_METHOD_TYPE_UNDEF, 0, NOEX_UNDEF);
+}
+
+/*!
+ * \}
+ */
+/*!
+ * \addtogroup class
+ * \{
+ */
+
+#define SPECIAL_SINGLETON(x,c) do {\
+ if (obj == (x)) {\
+ 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_singleton_class(obj)
- struct RBasic *obj;
+rb_special_singleton_class(VALUE obj)
{
- if (FL_TEST(obj->class, FL_SINGLETON)) {
- return (VALUE)obj->class;
+ 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)
+{
+ VALUE klass;
+
+ if (FIXNUM_P(obj) || FLONUM_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 {
+ enum ruby_value_type type = BUILTIN_TYPE(obj);
+ if (type == T_FLOAT || type == T_BIGNUM) {
+ rb_raise(rb_eTypeError, "can't define singleton");
+ }
+ }
+
+ if (FL_TEST(RBASIC(obj)->klass, FL_SINGLETON) &&
+ rb_ivar_get(RBASIC(obj)->klass, id_attached) == obj) {
+ klass = RBASIC(obj)->klass;
+ }
+ else {
+ klass = rb_make_metaclass(obj, RBASIC(obj)->klass);
}
- return obj->class = singleton_class_new(obj->class);
+
+ if (OBJ_TAINTED(obj)) {
+ OBJ_TAINT(klass);
+ }
+ else {
+ FL_UNSET(klass, FL_TAINT);
+ }
+ if (OBJ_FROZEN(obj)) OBJ_FREEZE(klass);
+
+ return klass;
+}
+
+/*!
+ * 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(obj, name, func, argc)
- VALUE obj;
- char *name;
- VALUE (*func)();
- int argc;
+rb_define_singleton_method(VALUE obj, const char *name, VALUE (*func)(ANYARGS), int argc)
{
- rb_define_method(rb_singleton_class(obj), name, func, 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(module, name, func, argc)
- VALUE module;
- char *name;
- VALUE (*func)();
- int argc;
+rb_define_module_function(VALUE module, const char *name, VALUE (*func)(ANYARGS), 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_alias(class, name1, name2)
- struct RClass *class;
- char *name1, *name2;
+rb_define_global_function(const char *name, VALUE (*func)(ANYARGS), int argc)
{
- rb_alias(class, rb_intern(name1), rb_intern(name2));
+ 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_attr(class, id, pub)
- struct RClass *class;
- ID id;
- int pub;
+rb_define_alias(VALUE klass, const char *name1, const char *name2)
{
- char *name;
- char *buf;
- ID attr, attreq, attriv;
+ rb_alias(klass, rb_intern(name1), rb_intern(name2));
+}
- name = rb_id2name(id);
- attr = rb_intern(name);
- buf = ALLOCA_N(char,strlen(name)+2);
- sprintf(buf, "%s=", name);
- attreq = rb_intern(buf);
- sprintf(buf, "@%s", name);
- attriv = rb_intern(buf);
- if (!rb_method_boundp(class, attr)) {
- rb_add_method(class, attr, NEW_IVAR(attriv), 0);
- }
- if (pub && !rb_method_boundp(class, attreq)) {
- rb_add_method(class, attreq, NEW_ATTRSET(attriv), 0);
- }
+/*!
+ * 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);
}
-#include <varargs.h>
-#include <ctype.h>
+int
+rb_obj_basic_to_s_p(VALUE obj)
+{
+ const rb_method_entry_t *me = rb_method_entry(CLASS_OF(obj), rb_intern("to_s"), 0);
+ if (me && me->def && me->def->type == VM_METHOD_TYPE_CFUNC &&
+ me->def->body.cfunc.func == rb_any_to_s)
+ return 1;
+ return 0;
+}
+
+#include <stdarg.h>
int
-rb_scan_args(argc, argv, fmt, va_alist)
- int argc;
- VALUE *argv;
- char *fmt;
- va_dcl
-{
- int n, i;
- char *p = fmt;
+rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...)
+{
+ int i;
+ 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_start(vargs);
-
- if (*p == '*') {
- var = va_arg(vargs, VALUE*);
- *var = ary_new4(argc, argv);
- return argc;
+ 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;
+ }
+ }
}
-
- if (isdigit(*p)) {
- n = *p - '0';
- if (n > argc)
- ArgError("Wrong # of arguments (%d for %d)", argc, n);
- for (i=0; i<n; i++) {
- var = va_arg(vargs, VALUE*);
- *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++;
}
- else {
- goto error;
+ if (*p == '&') {
+ f_block = 1;
+ p++;
}
+ if (*p != '\0') {
+ rb_fatal("bad scan arg format: %s", fmt);
+ }
+ n_mand = n_lead + n_trail;
- if (isdigit(*p)) {
- n = i + *p - '0';
- for (; i<n; i++) {
- var = va_arg(vargs, VALUE*);
- if (argc > i) {
- *var = argv[i];
- }
- else {
- *var = Qnil;
+ 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;
}
}
- p++;
}
-
- if(*p == '*') {
- var = va_arg(vargs, VALUE*);
- if (argc > i) {
- *var = ary_new4(argc-i, argv+i);
+ /* 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 {
- *var = ary_new();
+ if (var) *var = Qnil;
}
}
- else if (*p == '\0') {
- if (argc > i) {
- ArgError("Wrong # of arguments(%d for %d)", argc, i);
+ /* 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;
+ }
+ else {
+ if (var) *var = rb_ary_new();
}
}
- else {
- goto error;
+ /* 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 (rb_block_given_p()) {
+ *var = rb_block_proc();
+ }
+ else {
+ *var = Qnil;
+ }
}
-
va_end(vargs);
+
+ if (argi < argc) {
+ argc_error:
+ rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt);
+ }
+
return argc;
+}
- error:
- Fatal("bad scan arg format: %s", fmt);
- return 0;
+NORETURN(static void keyword_error(const char *error, VALUE keys));
+static void
+keyword_error(const char *error, VALUE keys)
+{
+ const char *msg = "";
+ if (RARRAY_LEN(keys) == 1) {
+ keys = RARRAY_AREF(keys, 0);
+ }
+ else {
+ keys = rb_ary_join(keys, rb_usascii_str_new2(", "));
+ msg = "s";
+ }
+ rb_raise(rb_eArgError, "%s keyword%s: %"PRIsVALUE, error, msg, 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);
+ }
+ keys = rb_funcall(hash, rb_intern("keys"), 0, 0);
+ if (!RB_TYPE_P(keys, T_ARRAY)) rb_raise(rb_eArgError, "unknown keyword");
+ 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;
+ }
+ 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 (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)) {
+ 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
+}
+
+/*!
+ * \}
+ */
diff --git a/common.mk b/common.mk
new file mode 100644
index 0000000000..de1b671fdd
--- /dev/null
+++ b/common.mk
@@ -0,0 +1,1104 @@
+bin: $(PROGRAM) $(WPROGRAM)
+lib: $(LIBRUBY)
+dll: $(LIBRUBY_SO)
+
+.SUFFIXES: .inc .h .c .y .i .$(DTRACE_EXT)
+
+# V=0 quiet, V=1 verbose. other values don't work.
+V = 0
+Q1 = $(V:1=)
+Q = $(Q1:0=@)
+ECHO = $(ECHO1:0=@echo)
+
+RUBYLIB = $(PATH_SEPARATOR)
+RUBYOPT = -
+RUN_OPTS = --disable-gems
+
+SPEC_GIT_BASE = git://github.com/nurse
+MSPEC_GIT_URL = $(SPEC_GIT_BASE)/mspec.git
+RUBYSPEC_GIT_URL = $(SPEC_GIT_BASE)/rubyspec.git
+
+STATIC_RUBY = static-ruby
+
+EXTCONF = extconf.rb
+LIBRUBY_EXTS = ./.libruby-with-ext.time
+REVISION_H = ./.revision.time
+PLATFORM_D = ./$(PLATFORM_DIR)/.time
+RDOCOUT = $(EXTOUT)/rdoc
+CAPIOUT = doc/capi
+
+DMYEXT = dmyext.$(OBJEXT)
+NORMALMAINOBJ = main.$(OBJEXT)
+MAINOBJ = $(NORMALMAINOBJ)
+EXTOBJS =
+DLDOBJS = $(DMYEXT)
+EXTSOLIBS =
+MINIOBJS = $(ARCHMINIOBJS) miniinit.$(OBJEXT) miniprelude.$(OBJEXT)
+ENC_MK = enc.mk
+
+COMMONOBJS = array.$(OBJEXT) \
+ bignum.$(OBJEXT) \
+ class.$(OBJEXT) \
+ compar.$(OBJEXT) \
+ complex.$(OBJEXT) \
+ dir.$(OBJEXT) \
+ dln_find.$(OBJEXT) \
+ encoding.$(OBJEXT) \
+ enum.$(OBJEXT) \
+ enumerator.$(OBJEXT) \
+ error.$(OBJEXT) \
+ eval.$(OBJEXT) \
+ load.$(OBJEXT) \
+ proc.$(OBJEXT) \
+ file.$(OBJEXT) \
+ gc.$(OBJEXT) \
+ hash.$(OBJEXT) \
+ inits.$(OBJEXT) \
+ io.$(OBJEXT) \
+ marshal.$(OBJEXT) \
+ math.$(OBJEXT) \
+ node.$(OBJEXT) \
+ numeric.$(OBJEXT) \
+ object.$(OBJEXT) \
+ pack.$(OBJEXT) \
+ parse.$(OBJEXT) \
+ process.$(OBJEXT) \
+ random.$(OBJEXT) \
+ range.$(OBJEXT) \
+ rational.$(OBJEXT) \
+ re.$(OBJEXT) \
+ regcomp.$(OBJEXT) \
+ regenc.$(OBJEXT) \
+ regerror.$(OBJEXT) \
+ regexec.$(OBJEXT) \
+ regparse.$(OBJEXT) \
+ regsyntax.$(OBJEXT) \
+ ruby.$(OBJEXT) \
+ safe.$(OBJEXT) \
+ signal.$(OBJEXT) \
+ sprintf.$(OBJEXT) \
+ st.$(OBJEXT) \
+ strftime.$(OBJEXT) \
+ string.$(OBJEXT) \
+ struct.$(OBJEXT) \
+ time.$(OBJEXT) \
+ transcode.$(OBJEXT) \
+ util.$(OBJEXT) \
+ variable.$(OBJEXT) \
+ version.$(OBJEXT) \
+ compile.$(OBJEXT) \
+ debug.$(OBJEXT) \
+ iseq.$(OBJEXT) \
+ vm.$(OBJEXT) \
+ vm_dump.$(OBJEXT) \
+ vm_backtrace.$(OBJEXT) \
+ vm_trace.$(OBJEXT) \
+ thread.$(OBJEXT) \
+ cont.$(OBJEXT) \
+ $(BUILTIN_ENCOBJS) \
+ $(BUILTIN_TRANSOBJS) \
+ $(MISSING)
+
+EXPORTOBJS = $(DLNOBJ) \
+ localeinit.$(OBJEXT) \
+ loadpath.$(OBJEXT) \
+ $(COMMONOBJS)
+
+OBJS = $(EXPORTOBJS) prelude.$(OBJEXT)
+ALLOBJS = $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(DMYEXT)
+
+GOLFOBJS = goruby.$(OBJEXT) golf_prelude.$(OBJEXT)
+
+PRELUDE_SCRIPTS = $(srcdir)/prelude.rb $(srcdir)/enc/prelude.rb $(DEFAULT_PRELUDES)
+GEM_PRELUDE = $(srcdir)/gem_prelude.rb
+PRELUDES = prelude.c miniprelude.c
+GOLFPRELUDES = golf_prelude.c
+
+SCRIPT_ARGS = --dest-dir="$(DESTDIR)" \
+ --extout="$(EXTOUT)" \
+ --mflags="$(MFLAGS)" \
+ --make-flags="$(MAKEFLAGS)"
+EXTMK_ARGS = $(SCRIPT_ARGS) --extension $(EXTS) --extstatic $(EXTSTATIC) \
+ --make-flags="V=$(V) MINIRUBY='$(MINIRUBY)'" --
+INSTRUBY = $(SUDO) $(RUNRUBY) -r./$(arch)-fake $(srcdir)/tool/rbinstall.rb
+INSTRUBY_ARGS = $(SCRIPT_ARGS) \
+ --data-mode=$(INSTALL_DATA_MODE) \
+ --prog-mode=$(INSTALL_PROG_MODE) \
+ --installed-list $(INSTALLED_LIST) \
+ --mantype="$(MANTYPE)"
+INSTALL_PROG_MODE = 0755
+INSTALL_DATA_MODE = 0644
+
+PRE_LIBRUBY_UPDATE = $(MINIRUBY) -e 'ARGV[1] or File.unlink(ARGV[0]) rescue nil' -- \
+ $(LIBRUBY_EXTS) $(LIBRUBY_SO_UPDATE)
+
+TESTSDIR = $(srcdir)/test
+TESTWORKDIR = testwork
+
+TESTRUN_SCRIPT = $(srcdir)/test.rb
+
+BOOTSTRAPRUBY = $(BASERUBY)
+
+COMPILE_PRELUDE = $(MINIRUBY) -I$(srcdir) $(srcdir)/tool/compile_prelude.rb
+
+all: showflags main docs
+
+main: showflags $(EXTSTATIC:static=lib)encs exts
+ @$(NULLCMD)
+
+.PHONY: showflags
+exts enc trans: showflags
+showflags:
+ $(MESSAGE_BEGIN) \
+ " CC = $(CC)" \
+ " LD = $(LD)" \
+ " LDSHARED = $(LDSHARED)" \
+ " CFLAGS = $(CFLAGS)" \
+ " XCFLAGS = $(XCFLAGS)" \
+ " CPPFLAGS = $(CPPFLAGS)" \
+ " DLDFLAGS = $(DLDFLAGS)" \
+ " SOLIBS = $(SOLIBS)" \
+ $(MESSAGE_END)
+ -@$(CC_VERSION)
+
+.PHONY: showconfig
+showconfig:
+ @$(ECHO_BEGIN) \
+ $(configure_args) \
+ $(ECHO_END)
+
+exts: build-ext
+
+EXTS_MK = exts.mk
+$(EXTS_MK): $(MKFILES) all-incs $(PREP) $(RBCONFIG) $(LIBRUBY)
+ $(ECHO) generating makefile $@
+ $(Q)$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --command-output=$(EXTS_MK) $(EXTMK_ARGS) configure
+
+configure-ext: $(EXTS_MK)
+
+build-ext: $(EXTS_MK)
+ $(Q)$(MAKE) -f $(EXTS_MK) $(MFLAGS) $(EXTSTATIC) LIBRUBY_EXTS=$(LIBRUBY_EXTS) ENCOBJS="$(ENCOBJS)"
+
+$(MKMAIN_CMD): $(MKFILES) all-incs $(PREP) $(RBCONFIG) $(LIBRUBY)
+ $(Q)$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --command-output=$@ $(EXTMK_ARGS)
+
+prog: program wprogram
+
+$(PREP): $(MKFILES)
+
+miniruby$(EXEEXT): config.status $(ALLOBJS) $(ARCHFILE) $(DTRACE_OBJ)
+
+objs: $(ALLOBJS)
+
+GORUBY = go$(RUBY_INSTALL_NAME)
+golf: $(LIBRUBY) $(GOLFOBJS) PHONY
+ $(Q) $(MAKE) $(MFLAGS) MAINOBJ="$(GOLFOBJS)" PROGRAM=$(GORUBY)$(EXEEXT) program
+capi: $(CAPIOUT)/.timestamp PHONY
+
+$(CAPIOUT)/.timestamp: Doxyfile $(PREP)
+ $(Q) $(MAKEDIRS) "$(@D)"
+ $(ECHO) generating capi
+ $(Q) $(DOXYGEN) -b
+ $(Q) $(MINIRUBY) -e 'File.open(ARGV[0], "w"){|f| f.puts(Time.now)}' "$@"
+
+Doxyfile: $(srcdir)/template/Doxyfile.tmpl $(PREP) $(srcdir)/tool/generic_erb.rb $(RBCONFIG)
+ $(ECHO) generating $@
+ $(Q) $(MINIRUBY) $(srcdir)/tool/generic_erb.rb -o $@ $(srcdir)/template/Doxyfile.tmpl \
+ --srcdir="$(srcdir)" --miniruby="$(MINIRUBY)"
+
+program: showflags $(PROGRAM)
+wprogram: showflags $(WPROGRAM)
+mini: PHONY miniruby$(EXEEXT)
+
+$(PROGRAM) $(WPROGRAM): $(LIBRUBY) $(MAINOBJ) $(OBJS) $(EXTOBJS) $(SETUP) $(PREP)
+
+$(LIBRUBY_A): $(OBJS) $(MAINOBJ) $(DTRACE_OBJ) $(DTRACE_GLOMMED_OBJ) $(DMYEXT) $(ARCHFILE)
+
+$(LIBRUBY_SO): $(OBJS) $(DLDOBJS) $(LIBRUBY_A) $(PREP) $(LIBRUBY_SO_UPDATE) $(BUILTIN_ENCOBJS)
+
+$(LIBRUBY_EXTS):
+ @exit > $@
+
+$(STATIC_RUBY)$(EXEEXT): $(MAINOBJ) $(DLDOBJS) $(EXTOBJS) $(LIBRUBY_A)
+ $(Q)$(RM) $@
+ $(PURIFY) $(CC) $(MAINOBJ) $(DLDOBJS) $(EXTOBJS) $(LIBRUBY_A) $(MAINLIBS) $(EXTLIBS) $(LIBS) $(OUTFLAG)$@ $(LDFLAGS) $(XLDFLAGS)
+
+ruby.imp: $(COMMONOBJS)
+ $(Q)$(NM) -Pgp $(COMMONOBJS) | \
+ awk 'BEGIN{print "#!"}; $$2~/^[BDT]$$/&&$$1!~/^(Init_|.*_threadptr_|\.)/{print $$1}' | \
+ sort -u -o $@
+
+install: install-$(INSTALLDOC)
+docs: $(DOCTARGETS)
+pkgconfig-data: $(ruby_pc)
+$(ruby_pc): $(srcdir)/template/ruby.pc.in config.status
+
+install-all: docs pre-install-all do-install-all post-install-all
+pre-install-all:: pre-install-local pre-install-ext pre-install-doc
+do-install-all: all
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=all --rdoc-output="$(RDOCOUT)"
+post-install-all:: post-install-local post-install-ext post-install-doc
+ @$(NULLCMD)
+
+install-nodoc: pre-install-nodoc do-install-nodoc post-install-nodoc
+pre-install-nodoc:: pre-install-local pre-install-ext
+do-install-nodoc: main
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS)
+post-install-nodoc:: post-install-local post-install-ext
+
+install-local: pre-install-local do-install-local post-install-local
+pre-install-local:: pre-install-bin pre-install-lib pre-install-man
+do-install-local: $(PROGRAM)
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=local
+post-install-local:: post-install-bin post-install-lib post-install-man
+
+install-ext: pre-install-ext do-install-ext post-install-ext
+pre-install-ext:: pre-install-ext-arch pre-install-ext-comm
+do-install-ext: exts
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext
+post-install-ext:: post-install-ext-arch post-install-ext-comm
+
+install-arch: pre-install-arch do-install-arch post-install-arch
+pre-install-arch:: pre-install-bin pre-install-ext-arch
+do-install-arch: main
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=arch
+post-install-arch:: post-install-bin post-install-ext-arch
+
+install-comm: pre-install-comm do-install-comm post-install-comm
+pre-install-comm:: pre-install-lib pre-install-ext-comm pre-install-man
+do-install-comm: $(PREP)
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=lib --install=ext-comm --install=man
+post-install-comm:: post-install-lib post-install-ext-comm post-install-man
+
+install-bin: pre-install-bin do-install-bin post-install-bin
+pre-install-bin:: install-prereq
+do-install-bin: $(PROGRAM)
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=bin
+post-install-bin::
+ @$(NULLCMD)
+
+install-lib: pre-install-lib do-install-lib post-install-lib
+pre-install-lib:: install-prereq
+do-install-lib: $(PREP)
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=lib
+post-install-lib::
+ @$(NULLCMD)
+
+install-ext-comm: pre-install-ext-comm do-install-ext-comm post-install-ext-comm
+pre-install-ext-comm:: install-prereq
+do-install-ext-comm: exts
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext-comm
+post-install-ext-comm::
+ @$(NULLCMD)
+
+install-ext-arch: pre-install-ext-arch do-install-ext-arch post-install-ext-arch
+pre-install-ext-arch:: install-prereq
+do-install-ext-arch: exts
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext-arch
+post-install-ext-arch::
+ @$(NULLCMD)
+
+install-man: pre-install-man do-install-man post-install-man
+pre-install-man:: install-prereq
+do-install-man: $(PREP)
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=man
+post-install-man::
+ @$(NULLCMD)
+
+install-capi: capi pre-install-capi do-install-capi post-install-capi
+pre-install-capi:: install-prereq
+do-install-capi: $(PREP)
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=capi
+post-install-capi::
+ @$(NULLCMD)
+
+what-where: no-install
+no-install: no-install-$(INSTALLDOC)
+what-where-all: no-install-all
+no-install-all: pre-no-install-all dont-install-all post-no-install-all
+pre-no-install-all:: pre-no-install-local pre-no-install-ext pre-no-install-doc
+dont-install-all: $(PROGRAM)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=all --rdoc-output="$(RDOCOUT)"
+post-no-install-all:: post-no-install-local post-no-install-ext post-no-install-doc
+ @$(NULLCMD)
+
+uninstall: $(INSTALLED_LIST)
+ $(Q)$(SUDO) $(MINIRUBY) $(srcdir)/tool/rbuninstall.rb --destdir=$(DESTDIR) $(INSTALLED_LIST)
+
+reinstall: uninstall install
+
+what-where-nodoc: no-install-nodoc
+no-install-nodoc: pre-no-install-nodoc dont-install-nodoc post-no-install-nodoc
+pre-no-install-nodoc:: pre-no-install-local pre-no-install-ext
+dont-install-nodoc: $(PREP)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS)
+post-no-install-nodoc:: post-no-install-local post-no-install-ext
+
+what-where-local: no-install-local
+no-install-local: pre-no-install-local dont-install-local post-no-install-local
+pre-no-install-local:: pre-no-install-bin pre-no-install-lib pre-no-install-man
+dont-install-local: $(PREP)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=local
+post-no-install-local:: post-no-install-bin post-no-install-lib post-no-install-man
+
+what-where-ext: no-install-ext
+no-install-ext: pre-no-install-ext dont-install-ext post-no-install-ext
+pre-no-install-ext:: pre-no-install-ext-arch pre-no-install-ext-comm
+dont-install-ext: $(PREP)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext
+post-no-install-ext:: post-no-install-ext-arch post-no-install-ext-comm
+
+what-where-arch: no-install-arch
+no-install-arch: pre-no-install-arch dont-install-arch post-no-install-arch
+pre-no-install-arch:: pre-no-install-bin pre-no-install-ext-arch
+dont-install-arch: $(PREP)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=bin --install=ext-arch
+post-no-install-arch:: post-no-install-lib post-no-install-man post-no-install-ext-arch
+
+what-where-comm: no-install-comm
+no-install-comm: pre-no-install-comm dont-install-comm post-no-install-comm
+pre-no-install-comm:: pre-no-install-lib pre-no-install-ext-comm pre-no-install-man
+dont-install-comm: $(PREP)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=lib --install=ext-comm --install=man
+post-no-install-comm:: post-no-install-lib post-no-install-ext-comm post-no-install-man
+
+what-where-bin: no-install-bin
+no-install-bin: pre-no-install-bin dont-install-bin post-no-install-bin
+pre-no-install-bin:: install-prereq
+dont-install-bin: $(PREP)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=bin
+post-no-install-bin::
+ @$(NULLCMD)
+
+what-where-lib: no-install-lib
+no-install-lib: pre-no-install-lib dont-install-lib post-no-install-lib
+pre-no-install-lib:: install-prereq
+dont-install-lib: $(PREP)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=lib
+post-no-install-lib::
+ @$(NULLCMD)
+
+what-where-ext-comm: no-install-ext-comm
+no-install-ext-comm: pre-no-install-ext-comm dont-install-ext-comm post-no-install-ext-comm
+pre-no-install-ext-comm:: install-prereq
+dont-install-ext-comm: $(PREP)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext-comm
+post-no-install-ext-comm::
+ @$(NULLCMD)
+
+what-where-ext-arch: no-install-ext-arch
+no-install-ext-arch: pre-no-install-ext-arch dont-install-ext-arch post-no-install-ext-arch
+pre-no-install-ext-arch:: install-prereq
+dont-install-ext-arch: $(PREP)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext-arch
+post-no-install-ext-arch::
+ @$(NULLCMD)
+
+what-where-man: no-install-man
+no-install-man: pre-no-install-man dont-install-man post-no-install-man
+pre-no-install-man:: install-prereq
+dont-install-man: $(PREP)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=man
+post-no-install-man::
+ @$(NULLCMD)
+
+install-doc: rdoc pre-install-doc do-install-doc post-install-doc
+pre-install-doc:: install-prereq
+do-install-doc: $(PROGRAM)
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=rdoc --rdoc-output="$(RDOCOUT)"
+post-install-doc::
+ @$(NULLCMD)
+
+install-gem: pre-install-gem do-install-gem post-install-gem
+pre-install-gem:: pre-install-bin pre-install-lib pre-install-man
+do-install-gem: $(PROGRAM)
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=gem
+post-install-gem::
+ @$(NULLCMD)
+
+rdoc: PHONY main
+ @echo Generating RDoc documentation
+ $(Q) $(XRUBY) "$(srcdir)/bin/rdoc" --root "$(srcdir)" --page-dir "$(srcdir)/doc" --encoding=UTF-8 --no-force-update --all --ri --op "$(RDOCOUT)" --debug $(RDOCFLAGS) "$(srcdir)"
+
+rdoc-coverage: PHONY main
+ @echo Generating RDoc coverage report
+ $(Q) $(XRUBY) "$(srcdir)/bin/rdoc" --root "$(srcdir)" --encoding=UTF-8 --all --quiet -C $(RDOCFLAGS) "$(srcdir)"
+
+RDOCBENCHOUT=/tmp/rdocbench
+
+GCBENCH_ITEM=null
+
+gcbench: PHONY
+ $(Q) $(XRUBY) "$(srcdir)/benchmark/gc/gcbench.rb" $(GCBENCH_ITEM)
+
+gcbench-rdoc: PHONY
+ $(Q) $(XRUBY) "$(srcdir)/benchmark/gc/gcbench.rb" rdoc
+
+nodoc: PHONY
+
+what-where-doc: no-install-doc
+no-install-doc: pre-no-install-doc dont-install-doc post-no-install-doc
+pre-no-install-doc:: install-prereq
+dont-install-doc:: $(PREP)
+ $(INSTRUBY) -n --make="$(MAKE)" $(INSTRUBY_ARGS) --install=rdoc --rdoc-output="$(RDOCOUT)"
+post-no-install-doc::
+ @$(NULLCMD)
+
+CLEAR_INSTALLED_LIST = clear-installed-list
+
+install-prereq: $(CLEAR_INSTALLED_LIST) yes-fake PHONY
+
+clear-installed-list: PHONY
+ @> $(INSTALLED_LIST) set MAKE="$(MAKE)"
+
+clean: clean-ext clean-local clean-enc clean-golf clean-rdoc clean-capi clean-extout clean-platform
+clean-local:: PHONY
+ $(Q)$(RM) $(OBJS) $(MINIOBJS) $(MAINOBJ) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY) $(LIBRUBY_ALIASES)
+ $(Q)$(RM) $(PROGRAM) $(WPROGRAM) miniruby$(EXEEXT) dmyext.$(OBJEXT) $(ARCHFILE) .*.time
+ $(Q)$(RM) y.tab.c y.output encdb.h transdb.h prelude.c config.log rbconfig.rb $(ruby_pc) probes.h probes.$(OBJEXT) probes.stamp ruby-glommed.$(OBJEXT)
+clean-ext:: PHONY
+clean-golf: PHONY
+ $(Q)$(RM) $(GORUBY)$(EXEEXT) $(GOLFOBJS)
+clean-rdoc: PHONY
+clean-capi: PHONY
+clean-platform: PHONY
+clean-extout: PHONY
+clean-docs: clean-rdoc clean-capi
+
+distclean: distclean-ext distclean-local distclean-enc distclean-golf distclean-extout distclean-platform
+distclean-local:: clean-local
+ $(Q)$(RM) $(MKFILES) yasmdata.rb *.inc
+ $(Q)$(RM) config.cache config.status config.status.lineno
+ $(Q)$(RM) *~ *.bak *.stackdump core *.core gmon.out $(PREP)
+distclean-ext:: PHONY
+distclean-golf: clean-golf
+ $(Q)$(RM) $(GOLFPRELUDES)
+distclean-rdoc: PHONY
+distclean-capi: PHONY
+distclean-extout: clean-extout
+distclean-platform: clean-platform
+
+realclean:: realclean-ext realclean-local realclean-enc realclean-golf realclean-extout
+realclean-local:: distclean-local
+ $(Q)$(RM) parse.c parse.h lex.c newline.c miniprelude.c revision.h
+realclean-ext:: PHONY
+realclean-golf: distclean-golf
+realclean-capi: PHONY
+realclean-extout: distclean-extout
+
+clean-ext distclean-ext realclean-ext::
+ $(Q)$(RM) $(EXTS_MK)
+ $(Q)$(RM) $(EXTOUT)/.timestamp/.*.time
+
+clean-enc distclean-enc realclean-enc: PHONY
+
+check: main test test-all
+ $(ECHO) check succeeded
+check-ruby: test test-ruby
+
+fake: $(CROSS_COMPILING)-fake
+yes-fake: $(arch)-fake.rb $(RBCONFIG) PHONY
+no-fake: PHONY
+
+btest: $(TEST_RUNNABLE)-btest
+no-btest: PHONY
+yes-btest: fake miniruby$(EXEEXT) PHONY
+ $(BOOTSTRAPRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(BTESTRUBY) $(RUN_OPTS)" $(OPTS) $(TESTOPTS)
+
+btest-ruby: $(TEST_RUNNABLE)-btest-ruby
+no-btest-ruby: PHONY
+yes-btest-ruby: prog PHONY
+ $(Q)$(RUNRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(PROGRAM) -I$(srcdir)/lib $(RUN_OPTS)" -q $(OPTS) $(TESTOPTS)
+
+test-sample: $(TEST_RUNNABLE)-test-sample
+no-test-sample: PHONY
+yes-test-sample: prog PHONY
+ $(Q)$(RUNRUBY) $(srcdir)/tool/rubytest.rb --run-opt=$(RUN_OPTS) $(OPTS) $(TESTOPTS)
+
+test-knownbugs: test-knownbug
+test-knownbug: $(TEST_RUNNABLE)-test-knownbug
+no-test-knownbug: PHONY
+yes-test-knownbug: prog PHONY
+ -$(RUNRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(PROGRAM) $(RUN_OPTS)" $(OPTS) $(TESTOPTS) $(srcdir)/KNOWNBUGS.rb
+
+test: test-sample btest-ruby test-knownbug
+
+test-all: $(TEST_RUNNABLE)-test-all
+yes-test-all: prog PHONY
+ $(RUNRUBY) "$(srcdir)/test/runner.rb" --ruby="$(RUNRUBY)" $(TESTOPTS) $(TESTS)
+TESTS_BUILD = mkmf
+no-test-all: PHONY
+ $(MINIRUBY) -I"$(srcdir)/lib" "$(srcdir)/test/runner.rb" $(TESTOPTS) $(TESTS_BUILD)
+
+test-ruby: $(TEST_RUNNABLE)-test-ruby
+no-test-ruby: PHONY
+yes-test-ruby: prog encs PHONY
+ $(RUNRUBY) "$(srcdir)/test/runner.rb" -q $(TESTOPTS) -- ruby -ext-
+
+extconf: $(PREP)
+ $(Q) $(MAKEDIRS) "$(EXTCONFDIR)"
+ $(RUNRUBY) -C "$(EXTCONFDIR)" $(EXTCONF) $(EXTCONFARGS)
+
+$(RBCONFIG): $(srcdir)/tool/mkconfig.rb config.status $(srcdir)/version.h $(PREP)
+ $(Q)$(MINIRUBY) $(srcdir)/tool/mkconfig.rb -timestamp=$@ \
+ -install_name=$(RUBY_INSTALL_NAME) \
+ -so_name=$(RUBY_SO_NAME) rbconfig.rb
+
+test-rubyspec-precheck:
+
+test-rubyspec: test-rubyspec-precheck
+ $(RUNRUBY) $(srcdir)/spec/mspec/bin/mspec run -B $(srcdir)/spec/default.mspec $(MSPECOPT)
+
+RUNNABLE = $(LIBRUBY_RELATIVE:no=un)-runnable
+runnable: $(RUNNABLE) prog $(srcdir)/tool/mkrunnable.rb PHONY
+ $(Q) $(MINIRUBY) $(srcdir)/tool/mkrunnable.rb -v $(EXTOUT)
+yes-runnable: PHONY
+
+encs: enc trans
+libencs: libenc libtrans
+encs enc trans libencs libenc libtrans: showflags $(ENC_MK) $(LIBRUBY) $(PREP)
+ $(ECHO) making $@
+ $(Q) $(MAKE) -f $(ENC_MK) V="$(V)" \
+ RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" \
+ $(MFLAGS) $@
+
+
+libenc enc: {$(VPATH)}encdb.h
+libtrans trans: {$(VPATH)}transdb.h
+
+$(ENC_MK): $(srcdir)/enc/make_encmake.rb $(srcdir)/enc/Makefile.in $(srcdir)/enc/depend \
+ $(srcdir)/enc/encinit.c.erb $(srcdir)/lib/mkmf.rb $(RBCONFIG)
+ $(ECHO) generating $@
+ $(Q) $(MINIRUBY) $(srcdir)/enc/make_encmake.rb --builtin-encs="$(BUILTIN_ENCOBJS)" --builtin-transes="$(BUILTIN_TRANSOBJS)" --module$(EXTSTATIC) $@ $(ENCS)
+
+.PRECIOUS: $(MKFILES)
+
+.PHONY: PHONY all fake prereq incs srcs preludes help
+.PHONY: test install install-nodoc install-doc dist
+.PHONY: loadpath golf capi rdoc install-prereq clear-installed-list
+.PHONY: clean clean-ext clean-local clean-enc clean-golf clean-rdoc clean-extout
+.PHONY: distclean distclean-ext distclean-local distclean-enc distclean-golf distclean-extout
+.PHONY: realclean realclean-ext realclean-local realclean-enc realclean-golf realclean-extout
+.PHONY: check test test-all btest btest-ruby test-sample test-knownbug
+.PHONY: run runruby parse benchmark benchmark-each tbench gdb gdb-ruby
+.PHONY: update-mspec update-rubyspec test-rubyspec
+
+PHONY:
+
+{$(VPATH)}parse.c: {$(VPATH)}parse.y $(srcdir)/tool/ytab.sed {$(VPATH)}id.h
+{$(VPATH)}parse.h: {$(VPATH)}parse.c
+
+{$(srcdir)}.y.c:
+ $(ECHO) generating $@
+ $(Q)$(BASERUBY) $(srcdir)/tool/id2token.rb --path-separator=.$(PATH_SEPARATOR)./ --vpath=$(VPATH) id.h $(SRC_FILE) > parse.tmp.y
+ $(Q)$(YACC) -d $(YFLAGS) -o y.tab.c parse.tmp.y
+ $(Q)$(RM) parse.tmp.y
+ $(Q)sed -f $(srcdir)/tool/ytab.sed -e "/^#/s!parse\.tmp\.[iy]!parse.y!" -e "/^#/s!y\.tab\.c!$@!" y.tab.c > $@.new
+ $(Q)$(MV) $@.new $@
+ $(Q)sed -e "/^#line.*y\.tab\.h/d;/^#line.*parse.*\.y/d" y.tab.h > $(@:.c=.h)
+ $(Q)$(RM) y.tab.c y.tab.h
+
+$(PLATFORM_D):
+ $(Q) $(MAKEDIRS) $(PLATFORM_DIR)
+ @exit > $@
+
+###
+
+RUBY_H_INCLUDES = {$(VPATH)}ruby.h {$(VPATH)}config.h {$(VPATH)}defines.h \
+ {$(VPATH)}intern.h {$(VPATH)}missing.h {$(VPATH)}st.h \
+ {$(VPATH)}subst.h
+ENCODING_H_INCLUDES= {$(VPATH)}encoding.h {$(VPATH)}oniguruma.h
+PROBES_H_INCLUDES = {$(VPATH)}probes.h
+VM_CORE_H_INCLUDES = {$(VPATH)}vm_core.h {$(VPATH)}thread_$(THREAD_MODEL).h \
+ {$(VPATH)}node.h {$(VPATH)}method.h {$(VPATH)}ruby_atomic.h \
+ {$(VPATH)}vm_debug.h {$(VPATH)}id.h {$(VPATH)}thread_native.h
+
+###
+
+acosh.$(OBJEXT): {$(VPATH)}acosh.c
+alloca.$(OBJEXT): {$(VPATH)}alloca.c {$(VPATH)}config.h
+crypt.$(OBJEXT): {$(VPATH)}crypt.c
+dup2.$(OBJEXT): {$(VPATH)}dup2.c
+erf.$(OBJEXT): {$(VPATH)}erf.c
+finite.$(OBJEXT): {$(VPATH)}finite.c
+flock.$(OBJEXT): {$(VPATH)}flock.c
+memcmp.$(OBJEXT): {$(VPATH)}memcmp.c
+memmove.$(OBJEXT): {$(VPATH)}memmove.c
+mkdir.$(OBJEXT): {$(VPATH)}mkdir.c
+setproctitle.$(OBJEXT): {$(VPATH)}setproctitle.c {$(VPATH)}util.h $(RUBY_H_INCLUDES) $(hdrdir)/ruby.h
+strchr.$(OBJEXT): {$(VPATH)}strchr.c
+strdup.$(OBJEXT): {$(VPATH)}strdup.c
+strerror.$(OBJEXT): {$(VPATH)}strerror.c
+strlcat.$(OBJEXT): {$(VPATH)}strlcat.c
+strlcpy.$(OBJEXT): {$(VPATH)}strlcpy.c
+strstr.$(OBJEXT): {$(VPATH)}strstr.c
+strtod.$(OBJEXT): {$(VPATH)}strtod.c
+strtol.$(OBJEXT): {$(VPATH)}strtol.c
+nt.$(OBJEXT): {$(VPATH)}nt.c
+os2.$(OBJEXT): {$(VPATH)}os2.c
+dl_os2.$(OBJEXT): {$(VPATH)}dl_os2.c
+ia64.$(OBJEXT): {$(VPATH)}ia64.s
+ $(CC) $(CFLAGS) -c $<
+
+###
+
+addr2line.$(OBJEXT): {$(VPATH)}addr2line.c {$(VPATH)}addr2line.h {$(VPATH)}config.h
+array.$(OBJEXT): {$(VPATH)}array.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}id.h {$(VPATH)}vm_opts.h
+bignum.$(OBJEXT): {$(VPATH)}bignum.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \
+ {$(VPATH)}thread.h {$(VPATH)}internal.h
+class.$(OBJEXT): {$(VPATH)}class.c $(RUBY_H_INCLUDES) \
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}constant.h {$(VPATH)}vm_opts.h
+compar.$(OBJEXT): {$(VPATH)}compar.c $(RUBY_H_INCLUDES)
+complex.$(OBJEXT): {$(VPATH)}complex.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}internal.h $(hdrdir)/ruby.h
+dir.$(OBJEXT): {$(VPATH)}dir.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \
+ $(ENCODING_H_INCLUDES) \
+ {$(VPATH)}internal.h
+dln.$(OBJEXT): {$(VPATH)}dln.c {$(VPATH)}dln.h $(RUBY_H_INCLUDES)
+dln_find.$(OBJEXT): {$(VPATH)}dln_find.c {$(VPATH)}dln.h $(RUBY_H_INCLUDES)
+dmydln.$(OBJEXT): {$(VPATH)}dmydln.c $(RUBY_H_INCLUDES)
+dmyext.$(OBJEXT): {$(VPATH)}dmyext.c
+encoding.$(OBJEXT): {$(VPATH)}encoding.c $(RUBY_H_INCLUDES) \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}regenc.h {$(VPATH)}util.h \
+ {$(VPATH)}internal.h
+enum.$(OBJEXT): {$(VPATH)}enum.c $(RUBY_H_INCLUDES) {$(VPATH)}node.h \
+ {$(VPATH)}util.h {$(VPATH)}id.h {$(VPATH)}internal.h
+enumerator.$(OBJEXT): {$(VPATH)}enumerator.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}internal.h {$(VPATH)}node.h
+error.$(OBJEXT): {$(VPATH)}error.c {$(VPATH)}known_errors.inc \
+ $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) $(ENCODING_H_INCLUDES) \
+ {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+eval.$(OBJEXT): {$(VPATH)}eval.c {$(VPATH)}eval_intern.h {$(VPATH)}vm.h \
+ $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}eval_error.c \
+ {$(VPATH)}eval_jump.c {$(VPATH)}gc.h {$(VPATH)}iseq.h \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h {$(VPATH)}probes_helper.h
+load.$(OBJEXT): {$(VPATH)}load.c {$(VPATH)}eval_intern.h \
+ {$(VPATH)}util.h $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) \
+ {$(VPATH)}dln.h {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h
+file.$(OBJEXT): {$(VPATH)}file.c $(RUBY_H_INCLUDES) {$(VPATH)}io.h \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}util.h {$(VPATH)}dln.h \
+ {$(VPATH)}internal.h
+gc.$(OBJEXT): {$(VPATH)}gc.c $(RUBY_H_INCLUDES) {$(VPATH)}re.h \
+ {$(VPATH)}regex.h $(ENCODING_H_INCLUDES) $(VM_CORE_H_INCLUDES) \
+ {$(VPATH)}gc.h {$(VPATH)}io.h {$(VPATH)}eval_intern.h {$(VPATH)}util.h \
+ {$(VPATH)}internal.h {$(VPATH)}constant.h \
+ {$(VPATH)}thread.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h {$(VPATH)}debug.h
+hash.$(OBJEXT): {$(VPATH)}hash.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h
+inits.$(OBJEXT): {$(VPATH)}inits.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}internal.h
+io.$(OBJEXT): {$(VPATH)}io.c $(RUBY_H_INCLUDES) {$(VPATH)}io.h \
+ {$(VPATH)}util.h $(ENCODING_H_INCLUDES) {$(VPATH)}dln.h \
+ {$(VPATH)}internal.h {$(VPATH)}thread.h {$(VPATH)}id.h {$(VPATH)}ruby_atomic.h
+main.$(OBJEXT): {$(VPATH)}main.c $(RUBY_H_INCLUDES) {$(VPATH)}node.h {$(VPATH)}vm_debug.h {$(VPATH)}vm_opts.h $(hdrdir)/ruby.h
+marshal.$(OBJEXT): {$(VPATH)}marshal.c $(RUBY_H_INCLUDES) {$(VPATH)}io.h \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}util.h {$(VPATH)}internal.h
+math.$(OBJEXT): {$(VPATH)}math.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}internal.h
+node.$(OBJEXT): {$(VPATH)}node.c $(RUBY_H_INCLUDES) \
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}vm_opts.h {$(VPATH)}internal.h
+numeric.$(OBJEXT): {$(VPATH)}numeric.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}util.h $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}id.h
+object.$(OBJEXT): {$(VPATH)}object.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \
+ {$(VPATH)}internal.h {$(VPATH)}constant.h $(ENCODING_H_INCLUDES) $(PROBES_H_INCLUDES) \
+ {$(VPATH)}vm_opts.h {$(VPATH)}id.h
+pack.$(OBJEXT): {$(VPATH)}pack.c $(RUBY_H_INCLUDES) {$(VPATH)}encoding.h \
+ {$(VPATH)}oniguruma.h {$(VPATH)}internal.h
+parse.$(OBJEXT): {$(VPATH)}parse.c $(RUBY_H_INCLUDES) {$(VPATH)}node.h \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}id.h {$(VPATH)}regenc.h \
+ {$(VPATH)}regex.h {$(VPATH)}util.h {$(VPATH)}lex.c \
+ {$(VPATH)}defs/keywords {$(VPATH)}id.c {$(VPATH)}parse.y \
+ {$(VPATH)}parse.h {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h
+proc.$(OBJEXT): {$(VPATH)}proc.c {$(VPATH)}eval_intern.h \
+ $(RUBY_H_INCLUDES) {$(VPATH)}gc.h $(VM_CORE_H_INCLUDES) \
+ {$(VPATH)}internal.h {$(VPATH)}iseq.h {$(VPATH)}vm_opts.h
+process.$(OBJEXT): {$(VPATH)}process.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}util.h {$(VPATH)}io.h $(ENCODING_H_INCLUDES) {$(VPATH)}dln.h \
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h \
+ {$(VPATH)}thread.h {$(VPATH)}vm_opts.h
+random.$(OBJEXT): {$(VPATH)}random.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}siphash.c {$(VPATH)}siphash.h {$(VPATH)}internal.h
+range.$(OBJEXT): {$(VPATH)}range.c $(RUBY_H_INCLUDES) \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}id.h
+rational.$(OBJEXT): {$(VPATH)}rational.c $(RUBY_H_INCLUDES) {$(VPATH)}internal.h $(hdrdir)/ruby.h
+re.$(OBJEXT): {$(VPATH)}re.c $(RUBY_H_INCLUDES) {$(VPATH)}re.h \
+ {$(VPATH)}regex.h $(ENCODING_H_INCLUDES) {$(VPATH)}util.h \
+ {$(VPATH)}regint.h {$(VPATH)}regenc.h {$(VPATH)}internal.h
+regcomp.$(OBJEXT): {$(VPATH)}regcomp.c {$(VPATH)}regparse.h \
+ {$(VPATH)}regint.h {$(VPATH)}regenc.h {$(VPATH)}oniguruma.h \
+ $(RUBY_H_INCLUDES)
+regenc.$(OBJEXT): {$(VPATH)}regenc.c {$(VPATH)}regint.h \
+ {$(VPATH)}regenc.h {$(VPATH)}oniguruma.h $(RUBY_H_INCLUDES)
+regerror.$(OBJEXT): {$(VPATH)}regerror.c {$(VPATH)}regint.h \
+ {$(VPATH)}regenc.h {$(VPATH)}oniguruma.h $(RUBY_H_INCLUDES)
+regexec.$(OBJEXT): {$(VPATH)}regexec.c {$(VPATH)}regint.h \
+ {$(VPATH)}regenc.h {$(VPATH)}oniguruma.h $(RUBY_H_INCLUDES)
+regparse.$(OBJEXT): {$(VPATH)}regparse.c {$(VPATH)}regparse.h \
+ {$(VPATH)}regint.h {$(VPATH)}regenc.h {$(VPATH)}oniguruma.h \
+ $(RUBY_H_INCLUDES)
+regsyntax.$(OBJEXT): {$(VPATH)}regsyntax.c {$(VPATH)}regint.h \
+ {$(VPATH)}regenc.h {$(VPATH)}oniguruma.h $(RUBY_H_INCLUDES)
+ruby.$(OBJEXT): {$(VPATH)}ruby.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}eval_intern.h $(VM_CORE_H_INCLUDES) \
+ {$(VPATH)}dln.h {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+safe.$(OBJEXT): {$(VPATH)}safe.c $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}vm_opts.h {$(VPATH)}internal.h
+signal.$(OBJEXT): {$(VPATH)}signal.c $(RUBY_H_INCLUDES) \
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}vm_opts.h {$(VPATH)}internal.h {$(VPATH)}ruby_atomic.h {$(VPATH)}eval_intern.h
+sprintf.$(OBJEXT): {$(VPATH)}sprintf.c $(RUBY_H_INCLUDES) {$(VPATH)}re.h \
+ {$(VPATH)}regex.h {$(VPATH)}vsnprintf.c $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h
+st.$(OBJEXT): {$(VPATH)}st.c $(RUBY_H_INCLUDES)
+strftime.$(OBJEXT): {$(VPATH)}strftime.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}timev.h $(ENCODING_H_INCLUDES)
+string.$(OBJEXT): {$(VPATH)}string.c $(RUBY_H_INCLUDES) {$(VPATH)}re.h \
+ {$(VPATH)}regex.h $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h $(PROBES_H_INCLUDES) {$(VPATH)}vm_opts.h {$(VPATH)}node.h {$(VPATH)}ruby_atomic.h {$(VPATH)}vm_core.h {$(VPATH)}vm_debug.h {$(VPATH)}id.h {$(VPATH)}method.h {$(VPATH)}thread_$(THREAD_MODEL).h {$(VPATH)}thread_native.h
+struct.$(OBJEXT): {$(VPATH)}struct.c $(RUBY_H_INCLUDES) {$(VPATH)}internal.h
+thread.$(OBJEXT): {$(VPATH)}thread.c {$(VPATH)}eval_intern.h \
+ $(RUBY_H_INCLUDES) {$(VPATH)}gc.h $(VM_CORE_H_INCLUDES) \
+ {$(VPATH)}thread_$(THREAD_MODEL).c $(ENCODING_H_INCLUDES) \
+ {$(VPATH)}internal.h {$(VPATH)}io.h {$(VPATH)}thread.h {$(VPATH)}timev.h {$(VPATH)}vm_opts.h
+transcode.$(OBJEXT): {$(VPATH)}transcode.c $(RUBY_H_INCLUDES) \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}transcode_data.h {$(VPATH)}internal.h
+cont.$(OBJEXT): {$(VPATH)}cont.c $(RUBY_H_INCLUDES) \
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}gc.h {$(VPATH)}eval_intern.h \
+ {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+time.$(OBJEXT): {$(VPATH)}time.c $(RUBY_H_INCLUDES) \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}timev.h {$(VPATH)}internal.h
+util.$(OBJEXT): {$(VPATH)}util.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \
+ {$(VPATH)}internal.h
+variable.$(OBJEXT): {$(VPATH)}variable.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}node.h {$(VPATH)}util.h {$(VPATH)}encoding.h {$(VPATH)}id.h \
+ {$(VPATH)}oniguruma.h {$(VPATH)}internal.h {$(VPATH)}constant.h
+version.$(OBJEXT): {$(VPATH)}version.c $(RUBY_H_INCLUDES) \
+ $(srcdir)/include/ruby/version.h $(srcdir)/version.h $(srcdir)/revision.h {$(VPATH)}config.h
+loadpath.$(OBJEXT): {$(VPATH)}loadpath.c $(RUBY_H_INCLUDES) \
+ $(srcdir)/include/ruby/version.h $(srcdir)/version.h {$(VPATH)}config.h \
+ verconf.h
+localeinit.$(OBJEXT): {$(VPATH)}localeinit.c $(RUBY_H_INCLUDES) \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h
+miniinit.$(OBJEXT): {$(VPATH)}miniinit.c $(RUBY_H_INCLUDES) \
+ $(ENCODING_H_INCLUDES)
+
+compile.$(OBJEXT): {$(VPATH)}compile.c {$(VPATH)}iseq.h \
+ $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}insns.inc \
+ {$(VPATH)}insns_info.inc {$(VPATH)}optinsn.inc \
+ {$(VPATH)}optunifs.inc {$(VPATH)}opt_sc.inc {$(VPATH)}insns.inc \
+ {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+iseq.$(OBJEXT): {$(VPATH)}iseq.c {$(VPATH)}gc.h {$(VPATH)}iseq.h \
+ $(RUBY_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}insns.inc \
+ {$(VPATH)}insns_info.inc {$(VPATH)}node_name.inc {$(VPATH)}internal.h {$(VPATH)}vm_opts.h {$(VPATH)}ruby_atomic.h {$(VPATH)}eval_intern.h
+vm.$(OBJEXT): {$(VPATH)}vm.c {$(VPATH)}gc.h {$(VPATH)}iseq.h \
+ {$(VPATH)}eval_intern.h $(RUBY_H_INCLUDES) $(ENCODING_H_INCLUDES) \
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}vm_method.c {$(VPATH)}vm_eval.c \
+ {$(VPATH)}vm_insnhelper.c {$(VPATH)}vm_insnhelper.h {$(VPATH)}vm_exec.c \
+ {$(VPATH)}vm_exec.h {$(VPATH)}insns.def {$(VPATH)}vmtc.inc \
+ {$(VPATH)}vm.inc {$(VPATH)}insns.inc \
+ {$(VPATH)}internal.h {$(VPATH)}vm.h {$(VPATH)}constant.h \
+ $(PROBES_H_INCLUDES) {$(VPATH)}probes_helper.h {$(VPATH)}vm_opts.h
+vm_dump.$(OBJEXT): {$(VPATH)}vm_dump.c $(RUBY_H_INCLUDES) \
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}addr2line.h \
+ {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+debug.$(OBJEXT): {$(VPATH)}debug.c $(RUBY_H_INCLUDES) \
+ $(ENCODING_H_INCLUDES) $(VM_CORE_H_INCLUDES) {$(VPATH)}eval_intern.h \
+ {$(VPATH)}util.h {$(VPATH)}vm_opts.h {$(VPATH)}internal.h
+id.$(OBJEXT): {$(VPATH)}id.c $(RUBY_H_INCLUDES) {$(VPATH)}id.h {$(VPATH)}vm_opts.h
+vm_backtrace.$(OBJEXT): {$(VPATH)}vm_backtrace.c \
+ $(VM_CORE_H_INCLUDES) $(RUBY_H_INCLUDES) $(ENCODING_H_INCLUDES) \
+ {$(VPATH)}internal.h {$(VPATH)}iseq.h {$(VPATH)}debug.h {$(VPATH)}vm_opts.h {$(VPATH)}ruby_atomic.h {$(VPATH)}eval_intern.h
+vm_trace.$(OBJEXT): {$(VPATH)}vm_trace.c $(ENCODING_H_INCLUDES) \
+ $(VM_CORE_H_INCLUDES) $(RUBY_H_INCLUDES) {$(VPATH)}debug.h \
+ {$(VPATH)}internal.h {$(VPATH)}vm_opts.h {$(VPATH)}ruby_atomic.h {$(VPATH)}eval_intern.h
+miniprelude.$(OBJEXT): {$(VPATH)}miniprelude.c $(RUBY_H_INCLUDES) \
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+prelude.$(OBJEXT): {$(VPATH)}prelude.c $(RUBY_H_INCLUDES) \
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+golf_prelude.$(OBJEXT): {$(VPATH)}golf_prelude.c $(RUBY_H_INCLUDES) \
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+goruby.$(OBJEXT): {$(VPATH)}goruby.c {$(VPATH)}main.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}vm_debug.h {$(VPATH)}node.h $(hdrdir)/ruby.h
+
+sizes.$(OBJEXT): {$(VPATH)}sizes.c $(RUBY_H_INCLUDES)
+
+ascii.$(OBJEXT): {$(VPATH)}ascii.c {$(VPATH)}regenc.h {$(VPATH)}config.h \
+ {$(VPATH)}oniguruma.h {$(VPATH)}missing.h $(RUBY_H_INCLUDES)
+us_ascii.$(OBJEXT): {$(VPATH)}us_ascii.c {$(VPATH)}regenc.h \
+ {$(VPATH)}config.h {$(VPATH)}oniguruma.h {$(VPATH)}missing.h $(RUBY_H_INCLUDES)
+unicode.$(OBJEXT): {$(VPATH)}unicode.c {$(VPATH)}regint.h \
+ {$(VPATH)}config.h {$(VPATH)}defines.h {$(VPATH)}regenc.h \
+ {$(VPATH)}oniguruma.h {$(VPATH)}st.h {$(VPATH)}ruby.h \
+ {$(VPATH)}missing.h {$(VPATH)}intern.h \
+ {$(VPATH)}enc/unicode/name2ctype.h {$(VPATH)}enc/unicode/casefold.h \
+ {$(VPATH)}subst.h $(RUBY_H_INCLUDES)
+
+utf_8.$(OBJEXT): {$(VPATH)}utf_8.c {$(VPATH)}regenc.h {$(VPATH)}config.h \
+ {$(VPATH)}oniguruma.h {$(VPATH)}missing.h $(RUBY_H_INCLUDES)
+
+win32/win32.$(OBJEXT): {$(VPATH)}win32/win32.c {$(VPATH)}dln.h {$(VPATH)}dln_find.c \
+ {$(VPATH)}internal.h $(RUBY_H_INCLUDES) $(PLATFORM_D)
+win32/file.$(OBJEXT): {$(VPATH)}win32/file.c $(RUBY_H_INCLUDES) $(PLATFORM_D)
+
+$(NEWLINE_C): $(srcdir)/enc/trans/newline.trans $(srcdir)/tool/transcode-tblgen.rb
+ $(Q) $(BASERUBY) "$(srcdir)/tool/transcode-tblgen.rb" -vo $@ $(srcdir)/enc/trans/newline.trans
+newline.$(OBJEXT): $(NEWLINE_C) {$(VPATH)}defines.h \
+ {$(VPATH)}intern.h {$(VPATH)}missing.h {$(VPATH)}st.h \
+ {$(VPATH)}transcode_data.h {$(VPATH)}ruby.h {$(VPATH)}config.h {$(VPATH)}subst.h
+
+verconf.h: $(srcdir)/template/verconf.h.in $(srcdir)/tool/generic_erb.rb $(RBCONFIG)
+ $(ECHO) creating $@
+ $(Q) $(MINIRUBY) "$(srcdir)/tool/generic_erb.rb" $(srcdir)/template/verconf.h.in > $@
+
+DTRACE_DEPENDENT_OBJS = array.$(OBJEXT) \
+ eval.$(OBJEXT) \
+ gc.$(OBJEXT) \
+ hash.$(OBJEXT) \
+ load.$(OBJEXT) \
+ object.$(OBJEXT) \
+ parse.$(OBJEXT) \
+ string.$(OBJEXT) \
+ vm.$(OBJEXT)
+
+probes.$(OBJEXT): $(DTRACE_DEPENDENT_OBJS)
+ruby-glommed.$(OBJEXT): $(OBJS) $(DTRACE_OBJ)
+
+$(OBJS): {$(VPATH)}config.h {$(VPATH)}missing.h
+
+INSNS2VMOPT = --srcdir="$(srcdir)"
+
+{$(VPATH)}minsns.inc: $(srcdir)/template/minsns.inc.tmpl
+
+{$(VPATH)}opt_sc.inc: $(srcdir)/template/opt_sc.inc.tmpl
+
+{$(VPATH)}optinsn.inc: $(srcdir)/template/optinsn.inc.tmpl
+
+{$(VPATH)}optunifs.inc: $(srcdir)/template/optunifs.inc.tmpl
+
+{$(VPATH)}insns.inc: $(srcdir)/template/insns.inc.tmpl
+
+{$(VPATH)}insns_info.inc: $(srcdir)/template/insns_info.inc.tmpl
+
+{$(VPATH)}vmtc.inc: $(srcdir)/template/vmtc.inc.tmpl
+
+{$(VPATH)}vm.inc: $(srcdir)/template/vm.inc.tmpl
+
+srcs: {$(VPATH)}parse.c {$(VPATH)}lex.c {$(VPATH)}newline.c {$(VPATH)}id.c srcs-ext srcs-enc
+
+EXT_SRCS = $(srcdir)/ext/ripper/ripper.c $(srcdir)/ext/json/parser/parser.c \
+ $(srcdir)/ext/dl/callback/callback.c $(srcdir)/ext/rbconfig/sizeof/sizes.c
+
+srcs-ext: $(EXT_SRCS)
+
+srcs-enc: $(ENC_MK)
+ $(ECHO) making srcs under enc
+ $(Q) $(MAKE) -f $(ENC_MK) RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(MFLAGS) srcs
+
+all-incs: incs
+incs: $(INSNS) {$(VPATH)}node_name.inc {$(VPATH)}encdb.h {$(VPATH)}transdb.h {$(VPATH)}known_errors.inc \
+ $(srcdir)/revision.h $(REVISION_H) enc/unicode/name2ctype.h {$(VPATH)}id.h {$(VPATH)}probes.dmyh
+
+insns: $(INSNS)
+
+id.h: $(srcdir)/tool/generic_erb.rb $(srcdir)/template/id.h.tmpl $(srcdir)/defs/id.def
+ $(ECHO) generating $@
+ $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb --output=$@ \
+ $(srcdir)/template/id.h.tmpl
+
+id.c: $(srcdir)/tool/generic_erb.rb $(srcdir)/template/id.c.tmpl $(srcdir)/defs/id.def
+ $(ECHO) generating $@
+ $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb --output=$@ \
+ $(srcdir)/template/id.c.tmpl
+
+node_name.inc: {$(VPATH)}node.h
+ $(ECHO) generating $@
+ $(Q) $(BASERUBY) -n $(srcdir)/tool/node_name.rb < $? > $@
+
+encdb.h: $(PREP) $(srcdir)/tool/generic_erb.rb $(srcdir)/template/encdb.h.tmpl
+ $(ECHO) generating $@
+ $(Q) $(MINIRUBY) $(srcdir)/tool/generic_erb.rb -c -o $@ $(srcdir)/template/encdb.h.tmpl $(srcdir)/enc enc
+
+transdb.h: $(PREP) srcs-enc $(srcdir)/tool/generic_erb.rb $(srcdir)/template/transdb.h.tmpl
+ $(ECHO) generating $@
+ $(Q) $(MINIRUBY) $(srcdir)/tool/generic_erb.rb -c -o $@ $(srcdir)/template/transdb.h.tmpl $(srcdir)/enc/trans enc/trans
+
+enc/encinit.c: $(ENC_MK) $(srcdir)/enc/encinit.c.erb
+
+known_errors.inc: $(srcdir)/template/known_errors.inc.tmpl $(srcdir)/defs/known_errors.def
+ $(ECHO) generating $@
+ $(Q) $(BASERUBY) $(srcdir)/tool/generic_erb.rb -c -o $@ $(srcdir)/template/known_errors.inc.tmpl $(srcdir)/defs/known_errors.def
+
+$(MINIPRELUDE_C): $(srcdir)/tool/compile_prelude.rb $(srcdir)/prelude.rb
+ $(ECHO) generating $@
+ $(Q) $(BASERUBY) -I$(srcdir) $(srcdir)/tool/compile_prelude.rb $(srcdir)/prelude.rb $@
+
+prelude.c: $(srcdir)/tool/compile_prelude.rb $(RBCONFIG) \
+ $(srcdir)/lib/rubygems/defaults.rb \
+ $(srcdir)/lib/rubygems/core_ext/kernel_gem.rb \
+ $(PRELUDE_SCRIPTS) $(PREP)
+ $(ECHO) generating $@
+ $(Q) $(COMPILE_PRELUDE) $(PRELUDE_SCRIPTS) $@
+
+golf_prelude.c: $(srcdir)/tool/compile_prelude.rb $(RBCONFIG) $(srcdir)/prelude.rb $(srcdir)/golf_prelude.rb $(PREP)
+ $(ECHO) generating $@
+ $(Q) $(COMPILE_PRELUDE) $(srcdir)/golf_prelude.rb $@
+
+probes.dmyh: {$(srcdir)}probes.d $(srcdir)/tool/gen_dummy_probes.rb
+ $(BASERUBY) $(srcdir)/tool/gen_dummy_probes.rb $(srcdir)/probes.d > $@
+
+probes.h: {$(VPATH)}probes.$(DTRACE_EXT)
+
+prereq: incs srcs preludes PHONY
+
+preludes: {$(VPATH)}miniprelude.c
+preludes: {$(srcdir)}golf_prelude.c
+
+$(srcdir)/revision.h:
+ @exit > $@
+
+$(REVISION_H): $(srcdir)/version.h $(srcdir)/ChangeLog $(srcdir)/tool/file2lastrev.rb $(REVISION_FORCE)
+ -$(Q) $(BASERUBY) $(srcdir)/tool/file2lastrev.rb --revision.h "$(srcdir)" > revision.tmp
+ $(Q)$(IFCHANGE) "--timestamp=$@" "$(srcdir)/revision.h" revision.tmp
+
+$(srcdir)/ext/ripper/ripper.c: parse.y id.h
+ $(ECHO) generating $@
+ $(Q) $(CHDIR) $(@D) && $(exec) $(MAKE) -f depend $(MFLAGS) \
+ Q=$(Q) ECHO=$(ECHO) top_srcdir=../.. srcdir=. VPATH=../.. RUBY="$(BASERUBY)" PATH_SEPARATOR="$(PATH_SEPARATOR)"
+
+$(srcdir)/ext/json/parser/parser.c: $(srcdir)/ext/json/parser/parser.rl
+ $(ECHO) generating $@
+ $(Q) $(CHDIR) $(@D) && $(exec) $(MAKE) -f prereq.mk $(MFLAGS) \
+ Q=$(Q) ECHO=$(ECHO) top_srcdir=../../.. srcdir=. VPATH=../../.. BASERUBY="$(BASERUBY)"
+
+$(srcdir)/ext/dl/callback/callback.c: $(srcdir)/ext/dl/callback/mkcallback.rb $(srcdir)/ext/dl/dl.h
+ $(ECHO) generating $@
+ $(Q) $(CHDIR) $(@D) && $(exec) $(MAKE) -f depend $(MFLAGS) \
+ Q=$(Q) ECHO=$(ECHO) top_srcdir=../.. srcdir=. VPATH=../.. RUBY="$(BASERUBY)"
+
+$(srcdir)/ext/rbconfig/sizeof/sizes.c: $(srcdir)/ext/rbconfig/sizeof/depend \
+ $(srcdir)/tool/generic_erb.rb $(srcdir)/template/sizes.c.tmpl $(srcdir)/configure.in
+ $(ECHO) generating $@
+ $(Q) $(CHDIR) $(@D) && $(exec) $(MAKE) -f depend $(MFLAGS) \
+ Q=$(Q) ECHO=$(ECHO) top_srcdir=../../.. srcdir=. VPATH=../../.. RUBY="$(BASERUBY)"
+
+##
+
+run: fake miniruby$(EXEEXT) PHONY
+ $(BTESTRUBY) $(TESTRUN_SCRIPT) $(RUNOPT)
+
+runruby: $(PROGRAM) PHONY
+ $(RUNRUBY) $(TESTRUN_SCRIPT)
+
+parse: fake miniruby$(EXEEXT) PHONY
+ $(BTESTRUBY) $(srcdir)/tool/parse.rb $(TESTRUN_SCRIPT)
+
+bisect: PHONY
+ $(srcdir)/tool/bisect.sh miniruby $(srcdir)
+
+bisect-ruby: PHONY
+ $(srcdir)/tool/bisect.sh ruby $(srcdir)
+
+COMPARE_RUBY = $(BASERUBY)
+ITEM =
+OPTS =
+
+benchmark: $(PROGRAM) PHONY
+ $(BASERUBY) $(srcdir)/benchmark/driver.rb -v \
+ --executables="$(COMPARE_RUBY); built-ruby::$(RUNRUBY)" \
+ --pattern='bm_' --directory=$(srcdir)/benchmark $(OPTS)
+
+benchmark-each: $(PROGRAM) PHONY
+ $(BASERUBY) $(srcdir)/benchmark/driver.rb -v \
+ --executables="$(COMPARE_RUBY); built-ruby::$(RUNRUBY)" \
+ --pattern=$(ITEM) --directory=$(srcdir)/benchmark $(OPTS)
+
+tbench: $(PROGRAM) PHONY
+ $(BASERUBY) $(srcdir)/benchmark/driver.rb -v \
+ --executables="$(COMPARE_RUBY); built-ruby::$(RUNRUBY)" \
+ --pattern='bmx_' --directory=$(srcdir)/benchmark $(OPTS)
+
+run.gdb:
+ echo set breakpoint pending on > run.gdb
+ echo b ruby_debug_breakpoint >> run.gdb
+ echo '# handle SIGINT nostop' >> run.gdb
+ echo '# handle SIGPIPE nostop' >> run.gdb
+ echo '# b rb_longjmp' >> run.gdb
+ echo source $(srcdir)/breakpoints.gdb >> run.gdb
+ echo source $(srcdir)/.gdbinit >> run.gdb
+ echo 'set $$_exitcode = -999' >> run.gdb
+ echo run >> run.gdb
+ echo 'if $$_exitcode != -999' >> run.gdb
+ echo ' quit' >> run.gdb
+ echo end >> run.gdb
+
+
+gdb: miniruby$(EXEEXT) run.gdb PHONY
+ gdb -x run.gdb --quiet --args $(MINIRUBY) $(TESTRUN_SCRIPT)
+
+gdb-ruby: $(PROGRAM) run.gdb PHONY
+ $(Q) $(RUNRUBY_COMMAND) $(RUNRUBY_DEBUGGER) -- $(TESTRUN_SCRIPT)
+
+dist:
+ $(BASERUBY) $(srcdir)/tool/make-snapshot tmp $(RELNAME)
+
+up::
+ -$(Q)$(MAKE) $(MFLAGS) REVISION_FORCE=PHONY "$(REVISION_H)"
+
+update-config_files: $(srcdir)/tool/config.guess $(srcdir)/tool/config.sub
+$(srcdir)/tool/config.guess:
+ $(Q) $(BASERUBY) -C $(@D) get-config_files $(@F)
+$(srcdir)/tool/config.sub:
+ $(Q) $(BASERUBY) -C $(@D) get-config_files $(@F)
+
+info: info-program info-libruby_a info-libruby_so info-arch
+info-program:
+ @echo PROGRAM=$(PROGRAM)
+info-libruby_a:
+ @echo LIBRUBY_A=$(LIBRUBY_A)
+info-libruby_so:
+ @echo LIBRUBY_SO=$(LIBRUBY_SO)
+info-arch:
+ @echo arch=$(arch)
+
+change: PHONY
+ $(BASERUBY) -C "$(srcdir)" ./tool/change_maker.rb $(CHANGES) > change.log
+
+love: sudo-precheck up all test install test-all
+ @echo love is all you need
+
+yes-test-all: sudo-precheck
+
+sudo-precheck:
+ @$(SUDO) echo > $(NULL)
+
+help: PHONY
+ $(MESSAGE_BEGIN) \
+ " Makefile of Ruby" \
+ "" \
+ "targets:" \
+ " all (default): builds all of below" \
+ " miniruby: builds only miniruby" \
+ " encs: builds encodings" \
+ " exts: builds extensions" \
+ " main: builds encodings, extensions and ruby" \
+ " docs: builds documents" \
+ " run: runs test.rb by miniruby" \
+ " runruby: runs test.rb by ruby you just built" \
+ " gdb: runs test.rb by miniruby under gdb" \
+ " gdb-ruby: runs test.rb by ruby under gdb" \
+ " check: equals make test test-all" \
+ " test: ruby core tests" \
+ " test-all: all ruby tests [TESTS=<test files>]" \
+ " test-rubyspec: run RubySpec test suite" \
+ " update-rubyspec: update local copy of RubySpec" \
+ " benchmark: benchmark this ruby and COMPARE_RUBY" \
+ " gcbench: gc benchmark [GCBENCH_ITEM=<item_name>]" \
+ " gcbench-rdoc: gc benchmark with GCBENCH_ITEM=rdoc" \
+ " install: install all ruby distributions" \
+ " install-nodoc: install without rdoc" \
+ " install-cross: install cross compiling staff" \
+ " clean: clean for tarball" \
+ " distclean: clean for repository" \
+ " change: make change log template" \
+ " golf: for golfers" \
+ "" \
+ "see DeveloperHowto for more detail: " \
+ " http://bugs.ruby-lang.org/wiki/ruby/DeveloperHowto" \
+ $(MESSAGE_END)
diff --git a/compar.c b/compar.c
index e406a0f0fe..2f4db291a4 100644
--- a/compar.c
+++ b/compar.c
@@ -1,100 +1,245 @@
-/************************************************
+/**********************************************************************
compar.c -
- $Author: matz $
- $Date: 1994/10/14 06:19:05 $
+ $Author$
created at: Thu Aug 26 14:39:48 JST 1993
- Copyright (C) 1993-1996 Yukihiro Matsumoto
+ Copyright (C) 1993-2007 Yukihiro Matsumoto
-************************************************/
+**********************************************************************/
-#include "ruby.h"
+#include "ruby/ruby.h"
-VALUE mComparable;
+VALUE rb_mComparable;
static ID cmp;
+void
+rb_cmperr(VALUE x, VALUE y)
+{
+ const char *classname;
+
+ if (SPECIAL_CONST_P(y)) {
+ y = rb_inspect(y);
+ classname = StringValuePtr(y);
+ }
+ else {
+ classname = rb_obj_classname(y);
+ }
+ rb_raise(rb_eArgError, "comparison of %s with %s failed",
+ rb_obj_classname(x), classname);
+}
+
static VALUE
-cmp_eq(x, y)
- VALUE x, y;
+invcmp_recursive(VALUE x, VALUE y, int recursive)
{
- VALUE c = rb_funcall(x, cmp, 1, y);
- int t = NUM2INT(c);
+ if (recursive) return Qnil;
+ return rb_check_funcall(y, cmp, 1, &x);
+}
- if (t == 0) return TRUE;
- return FALSE;
+VALUE
+rb_invcmp(VALUE x, VALUE y)
+{
+ VALUE invcmp = rb_exec_recursive(invcmp_recursive, x, y);
+ if (invcmp == Qundef || NIL_P(invcmp)) {
+ return Qnil;
+ }
+ else {
+ int result = -rb_cmpint(invcmp, x, y);
+ return INT2FIX(result);
+ }
}
static VALUE
-cmp_gt(x, y)
- VALUE x, y;
+cmp_eq_recursive(VALUE arg1, VALUE arg2, int recursive)
+{
+ if (recursive) return Qfalse;
+ return rb_funcallv(arg1, cmp, 1, &arg2);
+}
+
+static VALUE
+cmp_eq(VALUE *a)
+{
+ VALUE c = rb_exec_recursive_paired_outer(cmp_eq_recursive, a[0], a[1], a[1]);
+
+ if (NIL_P(c)) return Qfalse;
+ if (rb_cmpint(c, a[0], a[1]) == 0) return Qtrue;
+ return Qfalse;
+}
+
+static VALUE
+cmp_failed(void)
+{
+ return Qfalse;
+}
+
+/*
+ * call-seq:
+ * obj == other -> true or false
+ *
+ * Compares two objects based on the receiver's <code><=></code>
+ * method, returning true if it returns 0. Also returns true if
+ * _obj_ and _other_ are the same object.
+ *
+ * Even if _obj_ <=> _other_ raised an exception, the exception
+ * is ignored and returns false.
+ */
+
+static VALUE
+cmp_equal(VALUE x, VALUE y)
+{
+ VALUE a[2];
+
+ if (x == y) return Qtrue;
+
+ a[0] = x; a[1] = y;
+ return rb_rescue(cmp_eq, (VALUE)a, cmp_failed, 0);
+}
+
+/*
+ * call-seq:
+ * obj > other -> true or false
+ *
+ * Compares two objects based on the receiver's <code><=></code>
+ * method, returning true if it returns 1.
+ */
+
+static VALUE
+cmp_gt(VALUE x, VALUE y)
{
VALUE c = rb_funcall(x, cmp, 1, y);
- int t = NUM2INT(c);
- if (t > 0) return TRUE;
- return FALSE;
+ if (rb_cmpint(c, x, y) > 0) return Qtrue;
+ return Qfalse;
}
+/*
+ * call-seq:
+ * obj >= other -> true or false
+ *
+ * Compares two objects based on the receiver's <code><=></code>
+ * method, returning true if it returns 0 or 1.
+ */
+
static VALUE
-cmp_ge(x, y)
- VALUE x, y;
+cmp_ge(VALUE x, VALUE y)
{
VALUE c = rb_funcall(x, cmp, 1, y);
- int t = NUM2INT(c);
- if (t >= 0) return TRUE;
- return FALSE;
+ if (rb_cmpint(c, x, y) >= 0) return Qtrue;
+ return Qfalse;
}
+/*
+ * call-seq:
+ * obj < other -> true or false
+ *
+ * Compares two objects based on the receiver's <code><=></code>
+ * method, returning true if it returns -1.
+ */
+
static VALUE
-cmp_lt(x, y)
- VALUE x, y;
+cmp_lt(VALUE x, VALUE y)
{
VALUE c = rb_funcall(x, cmp, 1, y);
- int t = NUM2INT(c);
- if (t < 0) return TRUE;
- return FALSE;
+ if (rb_cmpint(c, x, y) < 0) return Qtrue;
+ return Qfalse;
}
+/*
+ * call-seq:
+ * obj <= other -> true or false
+ *
+ * Compares two objects based on the receiver's <code><=></code>
+ * method, returning true if it returns -1 or 0.
+ */
+
static VALUE
-cmp_le(x, y)
- VALUE x, y;
+cmp_le(VALUE x, VALUE y)
{
VALUE c = rb_funcall(x, cmp, 1, y);
- int t = NUM2INT(c);
- if (t <= 0) return TRUE;
- return FALSE;
+ if (rb_cmpint(c, x, y) <= 0) return Qtrue;
+ return Qfalse;
}
+/*
+ * call-seq:
+ * obj.between?(min, max) -> true or false
+ *
+ * Returns <code>false</code> if <i>obj</i> <code><=></code>
+ * <i>min</i> is less than zero or if <i>anObject</i> <code><=></code>
+ * <i>max</i> is greater than zero, <code>true</code> otherwise.
+ *
+ * 3.between?(1, 5) #=> true
+ * 6.between?(1, 5) #=> false
+ * 'cat'.between?('ant', 'dog') #=> true
+ * 'gnu'.between?('ant', 'dog') #=> false
+ *
+ */
+
static VALUE
-cmp_between(x, min, max)
- VALUE x, min, max;
+cmp_between(VALUE x, VALUE min, VALUE max)
{
- VALUE c = rb_funcall(x, cmp, 1, min);
- int t = NUM2INT(c);
- if (t < 0) return FALSE;
-
- c = rb_funcall(x, cmp, 1, min);
- t = NUM2INT(c);
- if (t > 0) return FALSE;
- return TRUE;
+ if (RTEST(cmp_lt(x, min))) return Qfalse;
+ if (RTEST(cmp_gt(x, max))) return Qfalse;
+ return Qtrue;
}
+/*
+ * The <code>Comparable</code> mixin is used by classes whose objects
+ * may be ordered. The class must define the <code><=></code> operator,
+ * which compares the receiver against another object, returning -1, 0,
+ * or +1 depending on whether the receiver is less than, equal to, or
+ * greater than the other object. If the other object is not comparable
+ * then the <code><=></code> operator should return nil.
+ * <code>Comparable</code> uses
+ * <code><=></code> to implement the conventional comparison operators
+ * (<code><</code>, <code><=</code>, <code>==</code>, <code>>=</code>,
+ * and <code>></code>) and the method <code>between?</code>.
+ *
+ * class SizeMatters
+ * include Comparable
+ * attr :str
+ * def <=>(anOther)
+ * str.size <=> anOther.str.size
+ * end
+ * def initialize(str)
+ * @str = str
+ * end
+ * def inspect
+ * @str
+ * end
+ * end
+ *
+ * s1 = SizeMatters.new("Z")
+ * s2 = SizeMatters.new("YY")
+ * s3 = SizeMatters.new("XXX")
+ * s4 = SizeMatters.new("WWWW")
+ * s5 = SizeMatters.new("VVVVV")
+ *
+ * s1 < s2 #=> true
+ * s4.between?(s1, s3) #=> false
+ * s4.between?(s3, s5) #=> true
+ * [ s3, s2, s5, s4, s1 ].sort #=> [Z, YY, XXX, WWWW, VVVVV]
+ *
+ */
+
void
-Init_Comparable()
+Init_Comparable(void)
{
- mComparable = rb_define_module("Comparable");
- rb_define_method(mComparable, "==", cmp_eq, 1);
- rb_define_method(mComparable, ">", cmp_gt, 1);
- rb_define_method(mComparable, ">=", cmp_ge, 1);
- rb_define_method(mComparable, "<", cmp_lt, 1);
- rb_define_method(mComparable, "<=", cmp_le, 1);
- rb_define_method(mComparable, "between?", cmp_between, 2);
+#undef rb_intern
+#define rb_intern(str) rb_intern_const(str)
+
+ rb_mComparable = rb_define_module("Comparable");
+ rb_define_method(rb_mComparable, "==", cmp_equal, 1);
+ rb_define_method(rb_mComparable, ">", cmp_gt, 1);
+ rb_define_method(rb_mComparable, ">=", cmp_ge, 1);
+ rb_define_method(rb_mComparable, "<", cmp_lt, 1);
+ rb_define_method(rb_mComparable, "<=", cmp_le, 1);
+ rb_define_method(rb_mComparable, "between?", cmp_between, 2);
cmp = rb_intern("<=>");
}
diff --git a/compile.c b/compile.c
new file mode 100644
index 0000000000..a76c93be73
--- /dev/null
+++ b/compile.c
@@ -0,0 +1,5951 @@
+/**********************************************************************
+
+ compile.c - ruby node tree -> VM instruction sequence
+
+ $Author$
+ created at: 04/01/01 03:42:15 JST
+
+ Copyright (C) 2004-2007 Koichi Sasada
+
+**********************************************************************/
+
+#include "ruby/ruby.h"
+#include "internal.h"
+#include <math.h>
+
+#define USE_INSN_STACK_INCREASE 1
+#include "vm_core.h"
+#include "iseq.h"
+#include "insns.inc"
+#include "insns_info.inc"
+
+#define FIXNUM_INC(n, i) ((n)+(INT2FIX(i)&~FIXNUM_FLAG))
+#define FIXNUM_OR(n, i) ((n)|INT2FIX(i))
+
+typedef struct iseq_link_element {
+ enum {
+ ISEQ_ELEMENT_NONE,
+ ISEQ_ELEMENT_LABEL,
+ ISEQ_ELEMENT_INSN,
+ ISEQ_ELEMENT_ADJUST
+ } type;
+ struct iseq_link_element *next;
+ struct iseq_link_element *prev;
+} LINK_ELEMENT;
+
+typedef struct iseq_link_anchor {
+ LINK_ELEMENT anchor;
+ LINK_ELEMENT *last;
+} LINK_ANCHOR;
+
+typedef struct iseq_label_data {
+ LINK_ELEMENT link;
+ int label_no;
+ int position;
+ int sc_state;
+ int set;
+ int sp;
+} LABEL;
+
+typedef struct iseq_insn_data {
+ LINK_ELEMENT link;
+ enum ruby_vminsn_type insn_id;
+ unsigned int line_no;
+ int operand_size;
+ int sc_state;
+ VALUE *operands;
+} INSN;
+
+typedef struct iseq_adjust_data {
+ LINK_ELEMENT link;
+ LABEL *label;
+ int line_no;
+} ADJUST;
+
+struct ensure_range {
+ LABEL *begin;
+ LABEL *end;
+ struct ensure_range *next;
+};
+
+struct iseq_compile_data_ensure_node_stack {
+ NODE *ensure_node;
+ struct iseq_compile_data_ensure_node_stack *prev;
+ struct ensure_range *erange;
+};
+
+/**
+ * debug function(macro) interface depend on CPDEBUG
+ * if it is less than 0, runtime option is in effect.
+ *
+ * debug level:
+ * 0: no debug output
+ * 1: show node type
+ * 2: show node important parameters
+ * ...
+ * 5: show other parameters
+ * 10: show every AST array
+ */
+
+#ifndef CPDEBUG
+#define CPDEBUG 0
+#endif
+
+#if CPDEBUG >= 0
+#define compile_debug CPDEBUG
+#else
+#define compile_debug iseq->compile_data->option->debug_level
+#endif
+
+#if CPDEBUG
+
+#define compile_debug_print_indent(level) \
+ ruby_debug_print_indent((level), compile_debug, gl_node_level * 2)
+
+#define debugp(header, value) (void) \
+ (compile_debug_print_indent(1) && \
+ ruby_debug_print_value(1, compile_debug, (header), (value)))
+
+#define debugi(header, id) (void) \
+ (compile_debug_print_indent(1) && \
+ ruby_debug_print_id(1, compile_debug, (header), (id)))
+
+#define debugp_param(header, value) (void) \
+ (compile_debug_print_indent(1) && \
+ ruby_debug_print_value(1, compile_debug, (header), (value)))
+
+#define debugp_verbose(header, value) (void) \
+ (compile_debug_print_indent(2) && \
+ ruby_debug_print_value(2, compile_debug, (header), (value)))
+
+#define debugp_verbose_node(header, value) (void) \
+ (compile_debug_print_indent(10) && \
+ ruby_debug_print_value(10, compile_debug, (header), (value)))
+
+#define debug_node_start(node) ((void) \
+ (compile_debug_print_indent(1) && \
+ (ruby_debug_print_node(1, CPDEBUG, "", (NODE *)(node)), gl_node_level)), \
+ gl_node_level++)
+
+#define debug_node_end() gl_node_level --
+
+#else
+
+static inline ID
+r_id(ID id)
+{
+ return id;
+}
+
+static inline VALUE
+r_value(VALUE value)
+{
+ return value;
+}
+
+#define debugi(header, id) r_id(id)
+#define debugp(header, value) r_value(value)
+#define debugp_verbose(header, value) r_value(value)
+#define debugp_verbose_node(header, value) r_value(value)
+#define debugp_param(header, value) r_value(value)
+#define debug_node_start(node) ((void)0)
+#define debug_node_end() ((void)0)
+#endif
+
+#if CPDEBUG > 1 || CPDEBUG < 0
+#define debugs if (compile_debug_print_indent(1)) ruby_debug_printf
+#define debug_compile(msg, v) ((void)(compile_debug_print_indent(1) && fputs((msg), stderr)), (v))
+#else
+#define debugs if(0)printf
+#define debug_compile(msg, v) (v)
+#endif
+
+
+/* create new label */
+#define NEW_LABEL(l) new_label_body(iseq, (l))
+
+#define iseq_path(iseq) \
+ (((rb_iseq_t*)DATA_PTR(iseq))->location.path)
+
+#define iseq_absolute_path(iseq) \
+ (((rb_iseq_t*)DATA_PTR(iseq))->location.absolute_path)
+
+#define NEW_ISEQVAL(node, name, type, line_no) \
+ new_child_iseq(iseq, (node), rb_fstring(name), 0, (type), (line_no))
+
+#define NEW_CHILD_ISEQVAL(node, name, type, line_no) \
+ new_child_iseq(iseq, (node), rb_fstring(name), iseq->self, (type), (line_no))
+
+/* add instructions */
+#define ADD_SEQ(seq1, seq2) \
+ APPEND_LIST((seq1), (seq2))
+
+/* add an instruction */
+#define ADD_INSN(seq, line, insn) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) new_insn_body(iseq, (line), BIN(insn), 0))
+
+/* add an instruction with some operands (1, 2, 3, 5) */
+#define ADD_INSN1(seq, line, insn, op1) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) \
+ new_insn_body(iseq, (line), BIN(insn), 1, (VALUE)(op1)))
+
+/* add an instruction with label operand (alias of ADD_INSN1) */
+#define ADD_INSNL(seq, line, insn, label) ADD_INSN1(seq, line, insn, label)
+
+#define ADD_INSN2(seq, line, insn, op1, op2) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) \
+ new_insn_body(iseq, (line), BIN(insn), 2, (VALUE)(op1), (VALUE)(op2)))
+
+#define ADD_INSN3(seq, line, insn, op1, op2, op3) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) \
+ new_insn_body(iseq, (line), BIN(insn), 3, (VALUE)(op1), (VALUE)(op2), (VALUE)(op3)))
+
+/* Specific Insn factory */
+#define ADD_SEND(seq, line, id, argc) \
+ ADD_SEND_R((seq), (line), (id), (argc), (VALUE)Qfalse, (VALUE)INT2FIX(0))
+
+#define ADD_CALL_RECEIVER(seq, line) \
+ ADD_INSN((seq), (line), putself)
+
+#define ADD_CALL(seq, line, id, argc) \
+ ADD_SEND_R((seq), (line), (id), (argc), (VALUE)Qfalse, (VALUE)INT2FIX(VM_CALL_FCALL))
+
+#define ADD_CALL_WITH_BLOCK(seq, line, id, argc, block) \
+ ADD_SEND_R((seq), (line), (id), (argc), (block), (VALUE)INT2FIX(VM_CALL_FCALL))
+
+#define ADD_SEND_R(seq, line, id, argc, block, flag) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) \
+ new_insn_send(iseq, (line), \
+ (VALUE)(id), (VALUE)(argc), (VALUE)(block), (VALUE)(flag)))
+
+#define ADD_TRACE(seq, line, event) \
+ do { \
+ if ((event) == RUBY_EVENT_LINE && iseq->coverage && \
+ (line) != iseq->compile_data->last_coverable_line) { \
+ RARRAY_ASET(iseq->coverage, (line) - 1, INT2FIX(0)); \
+ iseq->compile_data->last_coverable_line = (line); \
+ ADD_INSN1((seq), (line), trace, INT2FIX(RUBY_EVENT_COVERAGE)); \
+ } \
+ if (iseq->compile_data->option->trace_instruction) { \
+ ADD_INSN1((seq), (line), trace, INT2FIX(event)); \
+ } \
+ } while (0)
+
+/* add label */
+#define ADD_LABEL(seq, label) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) (label))
+
+#define APPEND_LABEL(seq, before, label) \
+ APPEND_ELEM((seq), (before), (LINK_ELEMENT *) (label))
+
+#define ADD_ADJUST(seq, line, label) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) new_adjust_body(iseq, (label), (line)))
+
+#define ADD_ADJUST_RESTORE(seq, label) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) new_adjust_body(iseq, (label), -1))
+
+#define ADD_CATCH_ENTRY(type, ls, le, iseqv, lc) \
+ (rb_ary_push(iseq->compile_data->catch_table_ary, \
+ rb_ary_new3(5, (type), \
+ (VALUE)(ls) | 1, (VALUE)(le) | 1, \
+ (VALUE)(iseqv), (VALUE)(lc) | 1)))
+
+/* compile node */
+#define COMPILE(anchor, desc, node) \
+ (debug_compile("== " desc "\n", \
+ iseq_compile_each(iseq, (anchor), (node), 0)))
+
+/* compile node, this node's value will be popped */
+#define COMPILE_POPED(anchor, desc, node) \
+ (debug_compile("== " desc "\n", \
+ iseq_compile_each(iseq, (anchor), (node), 1)))
+
+/* compile node, which is popped when 'poped' is true */
+#define COMPILE_(anchor, desc, node, poped) \
+ (debug_compile("== " desc "\n", \
+ iseq_compile_each(iseq, (anchor), (node), (poped))))
+
+#define OPERAND_AT(insn, idx) \
+ (((INSN*)(insn))->operands[(idx)])
+
+#define INSN_OF(insn) \
+ (((INSN*)(insn))->insn_id)
+
+/* error */
+#define COMPILE_ERROR(strs) \
+{ \
+ VALUE tmp = GET_THREAD()->errinfo; \
+ if (compile_debug) rb_compile_bug strs; \
+ GET_THREAD()->errinfo = iseq->compile_data->err_info; \
+ rb_compile_error strs; \
+ RB_OBJ_WRITE(iseq->self, &iseq->compile_data->err_info, GET_THREAD()->errinfo); \
+ GET_THREAD()->errinfo = tmp; \
+ ret = 0; \
+ break; \
+}
+
+#define ERROR_ARGS ruby_sourcefile, nd_line(node),
+
+
+#define COMPILE_OK 1
+#define COMPILE_NG 0
+
+
+/* leave name uninitialized so that compiler warn if INIT_ANCHOR is
+ * missing */
+#define DECL_ANCHOR(name) \
+ LINK_ANCHOR *name, name##_body__ = {{0,},}
+#define INIT_ANCHOR(name) \
+ (name##_body__.last = &name##_body__.anchor, name = &name##_body__)
+
+#define hide_obj(obj) do {OBJ_FREEZE(obj); RBASIC_CLEAR_CLASS(obj);} while (0)
+
+#include "optinsn.inc"
+#if OPT_INSTRUCTIONS_UNIFICATION
+#include "optunifs.inc"
+#endif
+
+/* for debug */
+#if CPDEBUG < 0
+#define ISEQ_ARG iseq,
+#define ISEQ_ARG_DECLARE rb_iseq_t *iseq,
+#else
+#define ISEQ_ARG
+#define ISEQ_ARG_DECLARE
+#endif
+
+#if CPDEBUG
+#define gl_node_level iseq->compile_data->node_level
+#if 0
+static void debug_list(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor);
+#endif
+#endif
+
+static void dump_disasm_list(LINK_ELEMENT *elem);
+
+static int insn_data_length(INSN *iobj);
+static int calc_sp_depth(int depth, INSN *iobj);
+
+static INSN *new_insn_body(rb_iseq_t *iseq, int line_no, int insn_id, int argc, ...);
+static LABEL *new_label_body(rb_iseq_t *iseq, long line);
+static ADJUST *new_adjust_body(rb_iseq_t *iseq, LABEL *label, int line);
+
+static int iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *anchor, NODE * n, int);
+static int iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *anchor);
+static int iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *anchor);
+static int iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *anchor);
+
+static int iseq_set_local_table(rb_iseq_t *iseq, ID *tbl);
+static int iseq_set_exception_local_table(rb_iseq_t *iseq);
+static int iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *anchor, NODE * node);
+
+static int iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *anchor);
+static int iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor);
+static int iseq_set_exception_table(rb_iseq_t *iseq);
+static int iseq_set_optargs_table(rb_iseq_t *iseq);
+
+/*
+ * To make Array to LinkedList, use link_anchor
+ */
+
+static void
+verify_list(ISEQ_ARG_DECLARE const char *info, LINK_ANCHOR *anchor)
+{
+#if CPDEBUG
+ int flag = 0;
+ LINK_ELEMENT *list, *plist;
+
+ if (!compile_debug) return;
+
+ list = anchor->anchor.next;
+ plist = &anchor->anchor;
+ while (list) {
+ if (plist != list->prev) {
+ flag += 1;
+ }
+ plist = list;
+ list = list->next;
+ }
+
+ if (anchor->last != plist && anchor->last != 0) {
+ flag |= 0x70000;
+ }
+
+ if (flag != 0) {
+ rb_bug("list verify error: %08x (%s)", flag, info);
+ }
+#endif
+}
+#if CPDEBUG < 0
+#define verify_list(info, anchor) verify_list(iseq, (info), (anchor))
+#endif
+
+/*
+ * elem1, elem2 => elem1, elem2, elem
+ */
+static void
+ADD_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *elem)
+{
+ elem->prev = anchor->last;
+ anchor->last->next = elem;
+ anchor->last = elem;
+ verify_list("add", anchor);
+}
+
+/*
+ * elem1, before, elem2 => elem1, before, elem, elem2
+ */
+static void
+APPEND_ELEM(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor, LINK_ELEMENT *before, LINK_ELEMENT *elem)
+{
+ elem->prev = before;
+ elem->next = before->next;
+ elem->next->prev = elem;
+ before->next = elem;
+ if (before == anchor->last) anchor->last = elem;
+ verify_list("add", anchor);
+}
+#if CPDEBUG < 0
+#define ADD_ELEM(anchor, elem) ADD_ELEM(iseq, (anchor), (elem))
+#define APPEND_ELEM(anchor, before, elem) ADD_ELEM(iseq, (anchor), (before), (elem))
+#endif
+
+static int
+iseq_add_mark_object(rb_iseq_t *iseq, VALUE v)
+{
+ if (!SPECIAL_CONST_P(v)) {
+ rb_iseq_add_mark_object(iseq, v);
+ }
+ return COMPILE_OK;
+}
+
+#define ruby_sourcefile RSTRING_PTR(iseq->location.path)
+
+static int
+iseq_add_mark_object_compile_time(rb_iseq_t *iseq, VALUE v)
+{
+ if (!SPECIAL_CONST_P(v)) {
+ rb_ary_push(iseq->compile_data->mark_ary, v);
+ }
+ return COMPILE_OK;
+}
+
+static int
+validate_label(st_data_t name, st_data_t label, st_data_t arg)
+{
+ rb_iseq_t *iseq = (rb_iseq_t *)arg;
+ LABEL *lobj = (LABEL *)label;
+ if (!lobj->link.next) {
+ do {
+ int ret;
+ COMPILE_ERROR((ruby_sourcefile, lobj->position,
+ "%s: undefined label", rb_id2name((ID)name)));
+ if (ret) break;
+ } while (0);
+ }
+ return ST_CONTINUE;
+}
+
+static void
+validate_labels(rb_iseq_t *iseq, st_table *labels_table)
+{
+ st_foreach(labels_table, validate_label, (st_data_t)iseq);
+ if (!NIL_P(iseq->compile_data->err_info)) {
+ rb_exc_raise(iseq->compile_data->err_info);
+ }
+}
+
+VALUE
+rb_iseq_compile_node(VALUE self, NODE *node)
+{
+ DECL_ANCHOR(ret);
+ rb_iseq_t *iseq;
+ INIT_ANCHOR(ret);
+ GetISeqPtr(self, iseq);
+
+ if (node == 0) {
+ COMPILE(ret, "nil", node);
+ iseq_set_local_table(iseq, 0);
+ }
+ else if (nd_type(node) == NODE_SCOPE) {
+ /* iseq type of top, method, class, block */
+ iseq_set_local_table(iseq, node->nd_tbl);
+ iseq_set_arguments(iseq, ret, node->nd_args);
+
+ switch (iseq->type) {
+ case ISEQ_TYPE_BLOCK:
+ {
+ LABEL *start = iseq->compile_data->start_label = NEW_LABEL(0);
+ LABEL *end = iseq->compile_data->end_label = NEW_LABEL(0);
+
+ ADD_TRACE(ret, FIX2INT(iseq->location.first_lineno), RUBY_EVENT_B_CALL);
+ ADD_LABEL(ret, start);
+ COMPILE(ret, "block body", node->nd_body);
+ ADD_LABEL(ret, end);
+ ADD_TRACE(ret, nd_line(node), RUBY_EVENT_B_RETURN);
+
+ /* wide range catch handler must put at last */
+ ADD_CATCH_ENTRY(CATCH_TYPE_REDO, start, end, 0, start);
+ ADD_CATCH_ENTRY(CATCH_TYPE_NEXT, start, end, 0, end);
+ break;
+ }
+ case ISEQ_TYPE_CLASS:
+ {
+ ADD_TRACE(ret, FIX2INT(iseq->location.first_lineno), RUBY_EVENT_CLASS);
+ COMPILE(ret, "scoped node", node->nd_body);
+ ADD_TRACE(ret, nd_line(node), RUBY_EVENT_END);
+ break;
+ }
+ case ISEQ_TYPE_METHOD:
+ {
+ ADD_TRACE(ret, FIX2INT(iseq->location.first_lineno), RUBY_EVENT_CALL);
+ COMPILE(ret, "scoped node", node->nd_body);
+ ADD_TRACE(ret, nd_line(node), RUBY_EVENT_RETURN);
+ break;
+ }
+ default: {
+ COMPILE(ret, "scoped node", node->nd_body);
+ break;
+ }
+ }
+ }
+ else if (nd_type(node) == NODE_IFUNC) {
+ /* user callback */
+ (*node->nd_cfnc)(iseq, ret, node->nd_tval);
+ }
+ else {
+ switch (iseq->type) {
+ case ISEQ_TYPE_METHOD:
+ case ISEQ_TYPE_CLASS:
+ case ISEQ_TYPE_BLOCK:
+ case ISEQ_TYPE_EVAL:
+ case ISEQ_TYPE_MAIN:
+ case ISEQ_TYPE_TOP:
+ rb_compile_error(ERROR_ARGS "compile/should not be reached: %s:%d",
+ __FILE__, __LINE__);
+ break;
+ case ISEQ_TYPE_RESCUE:
+ iseq_set_exception_local_table(iseq);
+ COMPILE(ret, "rescue", node);
+ break;
+ case ISEQ_TYPE_ENSURE:
+ iseq_set_exception_local_table(iseq);
+ COMPILE_POPED(ret, "ensure", node);
+ break;
+ case ISEQ_TYPE_DEFINED_GUARD:
+ iseq_set_local_table(iseq, 0);
+ COMPILE(ret, "defined guard", node);
+ break;
+ default:
+ rb_bug("unknown scope");
+ }
+ }
+
+ if (iseq->type == ISEQ_TYPE_RESCUE || iseq->type == ISEQ_TYPE_ENSURE) {
+ ADD_INSN2(ret, 0, getlocal, INT2FIX(2), INT2FIX(0));
+ ADD_INSN1(ret, 0, throw, INT2FIX(0) /* continue throw */ );
+ }
+ else {
+ ADD_INSN(ret, iseq->compile_data->last_line, leave);
+ }
+
+#if SUPPORT_JOKE
+ if (iseq->compile_data->labels_table) {
+ validate_labels(iseq, iseq->compile_data->labels_table);
+ }
+#endif
+ return iseq_setup(iseq, ret);
+}
+
+int
+rb_iseq_translate_threaded_code(rb_iseq_t *iseq)
+{
+#if OPT_DIRECT_THREADED_CODE || OPT_CALL_THREADED_CODE
+ const void * const *table = rb_vm_get_insns_address_table();
+ unsigned long i;
+
+ iseq->iseq_encoded = ALLOC_N(VALUE, iseq->iseq_size);
+ MEMCPY(iseq->iseq_encoded, iseq->iseq, VALUE, iseq->iseq_size);
+
+ for (i = 0; i < iseq->iseq_size; /* */ ) {
+ int insn = (int)iseq->iseq_encoded[i];
+ int len = insn_len(insn);
+ iseq->iseq_encoded[i] = (VALUE)table[insn];
+ i += len;
+ }
+#else
+ iseq->iseq_encoded = iseq->iseq;
+#endif
+ return COMPILE_OK;
+}
+
+/*********************************************/
+/* definition of data structure for compiler */
+/*********************************************/
+
+static void *
+compile_data_alloc(rb_iseq_t *iseq, size_t size)
+{
+ void *ptr = 0;
+ struct iseq_compile_data_storage *storage =
+ iseq->compile_data->storage_current;
+
+ if (storage->pos + size > storage->size) {
+ unsigned long alloc_size = storage->size * 2;
+
+ retry:
+ if (alloc_size < size) {
+ alloc_size *= 2;
+ goto retry;
+ }
+ storage->next = (void *)ALLOC_N(char, alloc_size +
+ sizeof(struct
+ iseq_compile_data_storage));
+ storage = iseq->compile_data->storage_current = storage->next;
+ storage->next = 0;
+ storage->pos = 0;
+ storage->size = alloc_size;
+ storage->buff = (char *)(&storage->buff + 1);
+ }
+
+ ptr = (void *)&storage->buff[storage->pos];
+ storage->pos += size;
+ return ptr;
+}
+
+static INSN *
+compile_data_alloc_insn(rb_iseq_t *iseq)
+{
+ return (INSN *)compile_data_alloc(iseq, sizeof(INSN));
+}
+
+static LABEL *
+compile_data_alloc_label(rb_iseq_t *iseq)
+{
+ return (LABEL *)compile_data_alloc(iseq, sizeof(LABEL));
+}
+
+static ADJUST *
+compile_data_alloc_adjust(rb_iseq_t *iseq)
+{
+ return (ADJUST *)compile_data_alloc(iseq, sizeof(ADJUST));
+}
+
+/*
+ * elem1, elemX => elem1, elem2, elemX
+ */
+static void
+INSERT_ELEM_NEXT(LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
+{
+ elem2->next = elem1->next;
+ elem2->prev = elem1;
+ elem1->next = elem2;
+ if (elem2->next) {
+ elem2->next->prev = elem2;
+ }
+}
+
+#if 0 /* unused */
+/*
+ * elemX, elem1 => elemX, elem2, elem1
+ */
+static void
+INSERT_ELEM_PREV(LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
+{
+ elem2->prev = elem1->prev;
+ elem2->next = elem1;
+ elem1->prev = elem2;
+ if (elem2->prev) {
+ elem2->prev->next = elem2;
+ }
+}
+#endif
+
+/*
+ * elemX, elem1, elemY => elemX, elem2, elemY
+ */
+static void
+REPLACE_ELEM(LINK_ELEMENT *elem1, LINK_ELEMENT *elem2)
+{
+ elem2->prev = elem1->prev;
+ elem2->next = elem1->next;
+ if (elem1->prev) {
+ elem1->prev->next = elem2;
+ }
+ if (elem1->next) {
+ elem1->next->prev = elem2;
+ }
+}
+
+static void
+REMOVE_ELEM(LINK_ELEMENT *elem)
+{
+ elem->prev->next = elem->next;
+ if (elem->next) {
+ elem->next->prev = elem->prev;
+ }
+}
+
+static LINK_ELEMENT *
+FIRST_ELEMENT(LINK_ANCHOR *anchor)
+{
+ return anchor->anchor.next;
+}
+
+#if 0 /* unused */
+static LINK_ELEMENT *
+LAST_ELEMENT(LINK_ANCHOR *anchor)
+{
+ return anchor->last;
+}
+#endif
+
+static LINK_ELEMENT *
+POP_ELEMENT(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor)
+{
+ LINK_ELEMENT *elem = anchor->last;
+ anchor->last = anchor->last->prev;
+ anchor->last->next = 0;
+ verify_list("pop", anchor);
+ return elem;
+}
+#if CPDEBUG < 0
+#define POP_ELEMENT(anchor) POP_ELEMENT(iseq, (anchor))
+#endif
+
+#if 0 /* unused */
+static LINK_ELEMENT *
+SHIFT_ELEMENT(LINK_ANCHOR *anchor)
+{
+ LINK_ELEMENT *elem = anchor->anchor.next;
+ if (elem) {
+ anchor->anchor.next = elem->next;
+ }
+ return elem;
+}
+#endif
+
+#if 0 /* unused */
+static int
+LIST_SIZE(LINK_ANCHOR *anchor)
+{
+ LINK_ELEMENT *elem = anchor->anchor.next;
+ int size = 0;
+ while (elem) {
+ size += 1;
+ elem = elem->next;
+ }
+ return size;
+}
+#endif
+
+static int
+LIST_SIZE_ZERO(LINK_ANCHOR *anchor)
+{
+ if (anchor->anchor.next == 0) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+}
+
+/*
+ * anc1: e1, e2, e3
+ * anc2: e4, e5
+ *#=>
+ * anc1: e1, e2, e3, e4, e5
+ * anc2: e4, e5 (broken)
+ */
+static void
+APPEND_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *anc1, LINK_ANCHOR *anc2)
+{
+ if (anc2->anchor.next) {
+ anc1->last->next = anc2->anchor.next;
+ anc2->anchor.next->prev = anc1->last;
+ anc1->last = anc2->last;
+ }
+ verify_list("append", anc1);
+}
+#if CPDEBUG < 0
+#define APPEND_LIST(anc1, anc2) APPEND_LIST(iseq, (anc1), (anc2))
+#endif
+
+/*
+ * anc1: e1, e2, e3
+ * anc2: e4, e5
+ *#=>
+ * anc1: e4, e5, e1, e2, e3
+ * anc2: e4, e5 (broken)
+ */
+static void
+INSERT_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *anc1, LINK_ANCHOR *anc2)
+{
+ if (anc2->anchor.next) {
+ LINK_ELEMENT *first = anc1->anchor.next;
+ anc1->anchor.next = anc2->anchor.next;
+ anc1->anchor.next->prev = &anc1->anchor;
+ anc2->last->next = first;
+ if (first) {
+ first->prev = anc2->last;
+ }
+ else {
+ anc1->last = anc2->last;
+ }
+ }
+
+ verify_list("append", anc1);
+}
+#if CPDEBUG < 0
+#define INSERT_LIST(anc1, anc2) INSERT_LIST(iseq, (anc1), (anc2))
+#endif
+
+#if 0 /* unused */
+/*
+ * anc1: e1, e2, e3
+ * anc2: e4, e5
+ *#=>
+ * anc1: e4, e5
+ * anc2: e1, e2, e3
+ */
+static void
+SWAP_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *anc1, LINK_ANCHOR *anc2)
+{
+ LINK_ANCHOR tmp = *anc2;
+
+ /* it has bug */
+ *anc2 = *anc1;
+ *anc1 = tmp;
+
+ verify_list("swap1", anc1);
+ verify_list("swap2", anc2);
+}
+#if CPDEBUG < 0
+#define SWAP_LIST(anc1, anc2) SWAP_LIST(iseq, (anc1), (anc2))
+#endif
+
+static LINK_ANCHOR *
+REVERSE_LIST(ISEQ_ARG_DECLARE LINK_ANCHOR *anc)
+{
+ LINK_ELEMENT *first, *last, *elem, *e;
+ first = &anc->anchor;
+ elem = first->next;
+ last = anc->last;
+
+ if (elem != 0) {
+ anc->anchor.next = last;
+ anc->last = elem;
+ }
+ else {
+ /* null list */
+ return anc;
+ }
+ while (elem) {
+ e = elem->next;
+ elem->next = elem->prev;
+ elem->prev = e;
+ elem = e;
+ }
+
+ first->next = last;
+ last->prev = first;
+ anc->last->next = 0;
+
+ verify_list("reverse", anc);
+ return anc;
+}
+#if CPDEBUG < 0
+#define REVERSE_LIST(anc) REVERSE_LIST(iseq, (anc))
+#endif
+#endif
+
+#if CPDEBUG && 0
+static void
+debug_list(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor)
+{
+ LINK_ELEMENT *list = FIRST_ELEMENT(anchor);
+ printf("----\n");
+ printf("anch: %p, frst: %p, last: %p\n", &anchor->anchor,
+ anchor->anchor.next, anchor->last);
+ while (list) {
+ printf("curr: %p, next: %p, prev: %p, type: %d\n", list, list->next,
+ list->prev, FIX2INT(list->type));
+ list = list->next;
+ }
+ printf("----\n");
+
+ dump_disasm_list(anchor->anchor.next);
+ verify_list("debug list", anchor);
+}
+#if CPDEBUG < 0
+#define debug_list(anc) debug_list(iseq, (anc))
+#endif
+#endif
+
+static LABEL *
+new_label_body(rb_iseq_t *iseq, long line)
+{
+ LABEL *labelobj = compile_data_alloc_label(iseq);
+
+ labelobj->link.type = ISEQ_ELEMENT_LABEL;
+ labelobj->link.next = 0;
+
+ labelobj->label_no = iseq->compile_data->label_no++;
+ labelobj->sc_state = 0;
+ labelobj->sp = -1;
+ return labelobj;
+}
+
+static ADJUST *
+new_adjust_body(rb_iseq_t *iseq, LABEL *label, int line)
+{
+ ADJUST *adjust = compile_data_alloc_adjust(iseq);
+ adjust->link.type = ISEQ_ELEMENT_ADJUST;
+ adjust->link.next = 0;
+ adjust->label = label;
+ adjust->line_no = line;
+ return adjust;
+}
+
+static INSN *
+new_insn_core(rb_iseq_t *iseq, int line_no,
+ int insn_id, int argc, VALUE *argv)
+{
+ INSN *iobj = compile_data_alloc_insn(iseq);
+ /* printf("insn_id: %d, line: %d\n", insn_id, line_no); */
+
+ iobj->link.type = ISEQ_ELEMENT_INSN;
+ iobj->link.next = 0;
+ iobj->insn_id = insn_id;
+ iobj->line_no = line_no;
+ iobj->operands = argv;
+ iobj->operand_size = argc;
+ iobj->sc_state = 0;
+ return iobj;
+}
+
+static INSN *
+new_insn_body(rb_iseq_t *iseq, int line_no, int insn_id, int argc, ...)
+{
+ VALUE *operands = 0;
+ va_list argv;
+ if (argc > 0) {
+ int i;
+ va_init_list(argv, argc);
+ operands = (VALUE *)compile_data_alloc(iseq, sizeof(VALUE) * argc);
+ for (i = 0; i < argc; i++) {
+ VALUE v = va_arg(argv, VALUE);
+ operands[i] = v;
+ }
+ va_end(argv);
+ }
+ return new_insn_core(iseq, line_no, insn_id, argc, operands);
+}
+
+static rb_call_info_t *
+new_callinfo(rb_iseq_t *iseq, ID mid, int argc, VALUE block, unsigned long flag)
+{
+ rb_call_info_t *ci = (rb_call_info_t *)compile_data_alloc(iseq, sizeof(rb_call_info_t));
+ ci->mid = mid;
+ ci->flag = flag;
+ ci->orig_argc = argc;
+ ci->argc = argc;
+
+ if (block) {
+ GetISeqPtr(block, ci->blockiseq);
+ }
+ else {
+ ci->blockiseq = 0;
+ if (!(ci->flag & (VM_CALL_ARGS_SPLAT | VM_CALL_ARGS_BLOCKARG))) {
+ ci->flag |= VM_CALL_ARGS_SKIP_SETUP;
+ }
+ }
+ ci->method_state = 0;
+ ci->class_serial = 0;
+ ci->blockptr = 0;
+ ci->recv = Qundef;
+ ci->call = 0; /* TODO: should set default function? */
+
+ ci->aux.index = iseq->callinfo_size++;
+
+ return ci;
+}
+
+static INSN *
+new_insn_send(rb_iseq_t *iseq, int line_no, VALUE id, VALUE argc, VALUE block, VALUE flag)
+{
+ VALUE *operands = (VALUE *)compile_data_alloc(iseq, sizeof(VALUE) * 1);
+ operands[0] = (VALUE)new_callinfo(iseq, SYM2ID(id), FIX2INT(argc), block, FIX2INT(flag));
+ return new_insn_core(iseq, line_no, BIN(send), 1, operands);
+}
+
+static VALUE
+new_child_iseq(rb_iseq_t *iseq, NODE *node,
+ VALUE name, VALUE parent, enum iseq_type type, int line_no)
+{
+ VALUE ret;
+
+ debugs("[new_child_iseq]> ---------------------------------------\n");
+ ret = rb_iseq_new_with_opt(node, name,
+ iseq_path(iseq->self), iseq_absolute_path(iseq->self),
+ INT2FIX(line_no), parent, type, iseq->compile_data->option);
+ debugs("[new_child_iseq]< ---------------------------------------\n");
+ iseq_add_mark_object(iseq, ret);
+ return ret;
+}
+
+static int
+iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
+{
+ /* debugs("[compile step 2] (iseq_array_to_linkedlist)\n"); */
+
+ if (compile_debug > 5)
+ dump_disasm_list(FIRST_ELEMENT(anchor));
+
+ debugs("[compile step 3.1 (iseq_optimize)]\n");
+ iseq_optimize(iseq, anchor);
+
+ if (compile_debug > 5)
+ dump_disasm_list(FIRST_ELEMENT(anchor));
+
+ if (iseq->compile_data->option->instructions_unification) {
+ debugs("[compile step 3.2 (iseq_insns_unification)]\n");
+ iseq_insns_unification(iseq, anchor);
+ if (compile_debug > 5)
+ dump_disasm_list(FIRST_ELEMENT(anchor));
+ }
+
+ if (iseq->compile_data->option->stack_caching) {
+ debugs("[compile step 3.3 (iseq_set_sequence_stackcaching)]\n");
+ iseq_set_sequence_stackcaching(iseq, anchor);
+ if (compile_debug > 5)
+ dump_disasm_list(FIRST_ELEMENT(anchor));
+ }
+
+ debugs("[compile step 4.1 (iseq_set_sequence)]\n");
+ iseq_set_sequence(iseq, anchor);
+ if (compile_debug > 5)
+ dump_disasm_list(FIRST_ELEMENT(anchor));
+
+ debugs("[compile step 4.2 (iseq_set_exception_table)]\n");
+ iseq_set_exception_table(iseq);
+
+ debugs("[compile step 4.3 (set_optargs_table)] \n");
+ iseq_set_optargs_table(iseq);
+
+ debugs("[compile step 5 (iseq_translate_threaded_code)] \n");
+ rb_iseq_translate_threaded_code(iseq);
+
+ if (compile_debug > 1) {
+ VALUE str = rb_iseq_disasm(iseq->self);
+ printf("%s\n", StringValueCStr(str));
+ fflush(stdout);
+ }
+ debugs("[compile step: finish]\n");
+
+ return 0;
+}
+
+static int
+iseq_set_exception_local_table(rb_iseq_t *iseq)
+{
+ ID id_dollar_bang;
+
+ CONST_ID(id_dollar_bang, "#$!");
+ iseq->local_table = (ID *)ALLOC_N(ID, 1);
+ iseq->local_table_size = 1;
+ iseq->local_size = iseq->local_table_size + 1;
+ iseq->local_table[0] = id_dollar_bang;
+ return COMPILE_OK;
+}
+
+static int
+get_lvar_level(rb_iseq_t *iseq)
+{
+ int lev = 0;
+ while (iseq != iseq->local_iseq) {
+ lev++;
+ iseq = iseq->parent_iseq;
+ }
+ return lev;
+}
+
+static int
+get_dyna_var_idx_at_raw(rb_iseq_t *iseq, ID id)
+{
+ int i;
+
+ for (i = 0; i < iseq->local_table_size; i++) {
+ if (iseq->local_table[i] == id) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+static int
+get_local_var_idx(rb_iseq_t *iseq, ID id)
+{
+ int idx = get_dyna_var_idx_at_raw(iseq->local_iseq, id);
+
+ if (idx < 0) {
+ rb_bug("get_local_var_idx: %d", idx);
+ }
+
+ return idx;
+}
+
+static int
+get_dyna_var_idx(rb_iseq_t *iseq, ID id, int *level, int *ls)
+{
+ int lv = 0, idx = -1;
+
+ while (iseq) {
+ idx = get_dyna_var_idx_at_raw(iseq, id);
+ if (idx >= 0) {
+ break;
+ }
+ iseq = iseq->parent_iseq;
+ lv++;
+ }
+
+ if (idx < 0) {
+ rb_bug("get_dyna_var_idx: -1");
+ }
+
+ *level = lv;
+ *ls = iseq->local_size;
+ return idx;
+}
+
+static int
+iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args)
+{
+ debugs("iseq_set_arguments: %s\n", node_args ? "" : "0");
+
+ if (node_args) {
+ struct rb_args_info *args = node_args->nd_ainfo;
+ ID rest_id = 0;
+ int last_comma = 0;
+ ID block_id = 0;
+
+ if (nd_type(node_args) != NODE_ARGS) {
+ rb_bug("iseq_set_arguments: NODE_ARGS is expected, but %s",
+ ruby_node_name(nd_type(node_args)));
+ }
+
+
+ iseq->argc = (int)args->pre_args_num;
+ debugs(" - argc: %d\n", iseq->argc);
+
+ rest_id = args->rest_arg;
+ if (rest_id == 1) {
+ last_comma = 1;
+ rest_id = 0;
+ }
+ block_id = args->block_arg;
+
+ if (args->first_post_arg) {
+ iseq->arg_post_start = get_dyna_var_idx_at_raw(iseq, args->first_post_arg);
+ iseq->arg_post_len = args->post_args_num;
+ }
+
+ if (args->opt_args) {
+ NODE *node = args->opt_args;
+ LABEL *label;
+ VALUE labels = rb_ary_tmp_new(1);
+ int i = 0, j;
+
+ while (node) {
+ label = NEW_LABEL(nd_line(node));
+ rb_ary_push(labels, (VALUE)label | 1);
+ ADD_LABEL(optargs, label);
+ COMPILE_POPED(optargs, "optarg", node->nd_body);
+ node = node->nd_next;
+ i += 1;
+ }
+
+ /* last label */
+ label = NEW_LABEL(nd_line(node_args));
+ rb_ary_push(labels, (VALUE)label | 1);
+ ADD_LABEL(optargs, label);
+ i += 1;
+
+ iseq->arg_opts = i;
+ iseq->arg_opt_table = ALLOC_N(VALUE, i);
+ MEMCPY(iseq->arg_opt_table, RARRAY_CONST_PTR(labels), VALUE, i);
+ for (j = 0; j < i; j++) {
+ iseq->arg_opt_table[j] &= ~1;
+ }
+ rb_ary_clear(labels);
+ }
+ else {
+ iseq->arg_opts = 0;
+ }
+
+ if (args->kw_args) {
+ NODE *node = args->kw_args;
+ VALUE keywords = rb_ary_tmp_new(1);
+ VALUE required = 0;
+ int i = 0, j, r = 0;
+
+ iseq->arg_keyword = get_dyna_var_idx_at_raw(iseq, args->kw_rest_arg->nd_vid);
+ COMPILE(optargs, "kwarg", args->kw_rest_arg);
+ while (node) {
+ VALUE list = keywords;
+ if (node->nd_body->nd_value == (NODE *)-1) {
+ ++r;
+ if (!required) required = rb_ary_tmp_new(1);
+ list = required;
+ }
+ rb_ary_push(list, INT2FIX(node->nd_body->nd_vid));
+ COMPILE_POPED(optargs, "kwarg", node); /* nd_type(node) == NODE_KW_ARG */
+ node = node->nd_next;
+ i += 1;
+ }
+ iseq->arg_keyword_check = args->kw_rest_arg->nd_cflag != 0;
+ iseq->arg_keywords = i;
+ iseq->arg_keyword_required = r;
+ iseq->arg_keyword_table = ALLOC_N(ID, i);
+ if (r) {
+ rb_ary_concat(required, keywords);
+ keywords = required;
+ }
+ for (j = 0; j < i; j++) {
+ iseq->arg_keyword_table[j] = FIX2INT(RARRAY_AREF(keywords, j));
+ }
+ ADD_INSN(optargs, nd_line(args->kw_args), pop);
+ }
+ else if (args->kw_rest_arg) {
+ iseq->arg_keyword = get_dyna_var_idx_at_raw(iseq, args->kw_rest_arg->nd_vid);
+ COMPILE(optargs, "kwarg", args->kw_rest_arg);
+ ADD_INSN(optargs, nd_line(args->kw_rest_arg), pop);
+ }
+ else {
+ iseq->arg_keyword = -1;
+ }
+
+ if (args->pre_init) { /* m_init */
+ COMPILE_POPED(optargs, "init arguments (m)", args->pre_init);
+ }
+ if (args->post_init) { /* p_init */
+ COMPILE_POPED(optargs, "init arguments (p)", args->post_init);
+ }
+
+ if (rest_id) {
+ iseq->arg_rest = get_dyna_var_idx_at_raw(iseq, rest_id);
+
+ if (iseq->arg_rest == -1) {
+ rb_bug("arg_rest: -1");
+ }
+
+ if (iseq->arg_post_start == 0) {
+ iseq->arg_post_start = iseq->arg_rest + 1;
+ }
+ }
+
+ if (block_id) {
+ iseq->arg_block = get_dyna_var_idx_at_raw(iseq, block_id);
+ }
+
+ if (iseq->arg_opts != 0 || iseq->arg_post_len != 0 ||
+ iseq->arg_rest != -1 || iseq->arg_block != -1 ||
+ iseq->arg_keyword != -1) {
+ iseq->arg_simple = 0;
+
+ /* set arg_size: size of arguments */
+ if (iseq->arg_keyword != -1) {
+ iseq->arg_size = iseq->arg_keyword + 1;
+ }
+ else if (iseq->arg_block != -1) {
+ iseq->arg_size = iseq->arg_block + 1;
+ }
+ else if (iseq->arg_post_len) {
+ iseq->arg_size = iseq->arg_post_start + iseq->arg_post_len;
+ }
+ else if (iseq->arg_rest != -1) {
+ iseq->arg_size = iseq->arg_rest + 1;
+ }
+ else if (iseq->arg_opts) {
+ iseq->arg_size = iseq->argc + iseq->arg_opts - 1;
+ }
+ else {
+ iseq->arg_size = iseq->argc;
+ }
+ }
+ else {
+ iseq->arg_simple = 1;
+ iseq->arg_size = iseq->argc;
+ }
+
+ if (iseq->type == ISEQ_TYPE_BLOCK) {
+ if (iseq->arg_opts == 0 && iseq->arg_post_len == 0 &&
+ iseq->arg_rest == -1 && iseq->arg_keyword == -1) {
+ if (iseq->argc == 1 && last_comma == 0) {
+ /* {|a|} */
+ iseq->arg_simple |= 0x02;
+ }
+ }
+ }
+ }
+ else {
+ iseq->arg_simple = 1;
+ }
+
+ return COMPILE_OK;
+}
+
+static int
+iseq_set_local_table(rb_iseq_t *iseq, ID *tbl)
+{
+ int size;
+
+ if (tbl) {
+ size = (int)*tbl;
+ tbl++;
+ }
+ else {
+ size = 0;
+ }
+
+ if (size > 0) {
+ iseq->local_table = (ID *)ALLOC_N(ID, size);
+ MEMCPY(iseq->local_table, tbl, ID, size);
+ }
+
+ iseq->local_size = iseq->local_table_size = size;
+ iseq->local_size += 1;
+ /*
+ if (lfp == dfp ) { // top, class, method
+ dfp[-1]: svar
+ else { // block
+ dfp[-1]: cref
+ }
+ */
+
+ debugs("iseq_set_local_table: %d, %d\n", iseq->local_size, iseq->local_table_size);
+ return COMPILE_OK;
+}
+
+static int
+cdhash_cmp(VALUE val, VALUE lit)
+{
+ if (val == lit) return 0;
+ if (SPECIAL_CONST_P(lit)) {
+ return val != lit;
+ }
+ if (SPECIAL_CONST_P(val) || BUILTIN_TYPE(val) != BUILTIN_TYPE(lit)) {
+ return -1;
+ }
+ if (BUILTIN_TYPE(lit) == T_STRING) {
+ return rb_str_hash_cmp(lit, val);
+ }
+ return !rb_eql(lit, val);
+}
+
+static st_index_t
+cdhash_hash(VALUE a)
+{
+ if (SPECIAL_CONST_P(a)) return (st_index_t)a;
+ if (RB_TYPE_P(a, T_STRING)) return rb_str_hash(a);
+ {
+ VALUE hval = rb_hash(a);
+ return (st_index_t)FIX2LONG(hval);
+ }
+}
+
+static const struct st_hash_type cdhash_type = {
+ cdhash_cmp,
+ cdhash_hash,
+};
+
+struct cdhash_set_label_struct {
+ VALUE hash;
+ int pos;
+ int len;
+};
+
+static int
+cdhash_set_label_i(VALUE key, VALUE val, void *ptr)
+{
+ struct cdhash_set_label_struct *data = (struct cdhash_set_label_struct *)ptr;
+ LABEL *lobj = (LABEL *)(val & ~1);
+ rb_hash_aset(data->hash, key, INT2FIX(lobj->position - (data->pos+data->len)));
+ return ST_CONTINUE;
+}
+
+/**
+ ruby insn object list -> raw instruction sequence
+ */
+static int
+iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
+{
+ LABEL *lobj;
+ INSN *iobj;
+ struct iseq_line_info_entry *line_info_table;
+ unsigned int last_line = 0;
+ LINK_ELEMENT *list;
+ VALUE *generated_iseq;
+
+ int k, pos, sp, stack_max = 0, line = 0;
+
+ /* set label position */
+ list = FIRST_ELEMENT(anchor);
+ k = pos = 0;
+ while (list) {
+ switch (list->type) {
+ case ISEQ_ELEMENT_INSN:
+ {
+ iobj = (INSN *)list;
+ line = iobj->line_no;
+ pos += insn_data_length(iobj);
+ k++;
+ break;
+ }
+ case ISEQ_ELEMENT_LABEL:
+ {
+ lobj = (LABEL *)list;
+ lobj->position = pos;
+ lobj->set = TRUE;
+ break;
+ }
+ case ISEQ_ELEMENT_NONE:
+ {
+ /* ignore */
+ break;
+ }
+ case ISEQ_ELEMENT_ADJUST:
+ {
+ ADJUST *adjust = (ADJUST *)list;
+ if (adjust->line_no != -1) {
+ pos += 2 /* insn + 1 operand */;
+ k++;
+ }
+ break;
+ }
+ default:
+ dump_disasm_list(FIRST_ELEMENT(anchor));
+ dump_disasm_list(list);
+ rb_compile_error(RSTRING_PTR(iseq->location.path), line,
+ "error: set_sequence");
+ break;
+ }
+ list = list->next;
+ }
+
+ /* make instruction sequence */
+ generated_iseq = ALLOC_N(VALUE, pos);
+ line_info_table = ALLOC_N(struct iseq_line_info_entry, k);
+ iseq->is_entries = ALLOC_N(union iseq_inline_storage_entry, iseq->is_size);
+ MEMZERO(iseq->is_entries, union iseq_inline_storage_entry, iseq->is_size);
+ iseq->callinfo_entries = ALLOC_N(rb_call_info_t, iseq->callinfo_size);
+ /* MEMZERO(iseq->callinfo_entries, rb_call_info_t, iseq->callinfo_size); */
+
+ list = FIRST_ELEMENT(anchor);
+ k = pos = sp = 0;
+
+ while (list) {
+ switch (list->type) {
+ case ISEQ_ELEMENT_INSN:
+ {
+ int j, len, insn;
+ const char *types;
+ VALUE *operands;
+
+ iobj = (INSN *)list;
+
+ /* update sp */
+ sp = calc_sp_depth(sp, iobj);
+ if (sp > stack_max) {
+ stack_max = sp;
+ }
+
+ /* fprintf(stderr, "insn: %-16s, sp: %d\n", insn_name(iobj->insn_id), sp); */
+ operands = iobj->operands;
+ insn = iobj->insn_id;
+ generated_iseq[pos] = insn;
+ types = insn_op_types(insn);
+ len = insn_len(insn);
+
+ /* operand check */
+ if (iobj->operand_size != len - 1) {
+ /* printf("operand size miss! (%d, %d)\n", iobj->operand_size, len); */
+ dump_disasm_list(list);
+ rb_compile_error(RSTRING_PTR(iseq->location.path), iobj->line_no,
+ "operand size miss! (%d for %d)",
+ iobj->operand_size, len - 1);
+ xfree(generated_iseq);
+ xfree(line_info_table);
+ return 0;
+ }
+
+ for (j = 0; types[j]; j++) {
+ char type = types[j];
+ /* printf("--> [%c - (%d-%d)]\n", type, k, j); */
+ switch (type) {
+ case TS_OFFSET:
+ {
+ /* label(destination position) */
+ lobj = (LABEL *)operands[j];
+ if (!lobj->set) {
+ rb_compile_error(RSTRING_PTR(iseq->location.path), iobj->line_no,
+ "unknown label");
+ }
+ if (lobj->sp == -1) {
+ lobj->sp = sp;
+ }
+ generated_iseq[pos + 1 + j] = lobj->position - (pos + len);
+ break;
+ }
+ case TS_CDHASH:
+ {
+ VALUE map = operands[j];
+ struct cdhash_set_label_struct data;
+ data.hash = map;
+ data.pos = pos;
+ data.len = len;
+ rb_hash_foreach(map, cdhash_set_label_i, (VALUE)&data);
+
+ hide_obj(map);
+ generated_iseq[pos + 1 + j] = map;
+ break;
+ }
+ case TS_LINDEX:
+ case TS_NUM: /* ulong */
+ generated_iseq[pos + 1 + j] = FIX2INT(operands[j]);
+ break;
+ case TS_ISEQ: /* iseq */
+ {
+ VALUE v = operands[j];
+ rb_iseq_t *block = 0;
+ if (v) {
+ GetISeqPtr(v, block);
+ }
+ generated_iseq[pos + 1 + j] = (VALUE)block;
+ break;
+ }
+ case TS_VALUE: /* VALUE */
+ {
+ VALUE v = operands[j];
+ generated_iseq[pos + 1 + j] = v;
+ /* to mark ruby object */
+ iseq_add_mark_object(iseq, v);
+ break;
+ }
+ case TS_IC: /* inline cache */
+ {
+ int ic_index = FIX2INT(operands[j]);
+ IC ic = (IC)&iseq->is_entries[ic_index];
+ if (UNLIKELY(ic_index >= iseq->is_size)) {
+ rb_bug("iseq_set_sequence: ic_index overflow: index: %d, size: %d", ic_index, iseq->is_size);
+ }
+ generated_iseq[pos + 1 + j] = (VALUE)ic;
+ break;
+ }
+ case TS_CALLINFO: /* call info */
+ {
+ rb_call_info_t *base_ci = (rb_call_info_t *)operands[j];
+ rb_call_info_t *ci = &iseq->callinfo_entries[base_ci->aux.index];
+ *ci = *base_ci;
+
+ if (UNLIKELY(base_ci->aux.index >= iseq->callinfo_size)) {
+ rb_bug("iseq_set_sequence: ci_index overflow: index: %d, size: %d", base_ci->argc, iseq->callinfo_size);
+ }
+ generated_iseq[pos + 1 + j] = (VALUE)ci;
+ break;
+ }
+ case TS_ID: /* ID */
+ generated_iseq[pos + 1 + j] = SYM2ID(operands[j]);
+ break;
+ case TS_GENTRY:
+ {
+ struct rb_global_entry *entry =
+ (struct rb_global_entry *)(operands[j] & (~1));
+ generated_iseq[pos + 1 + j] = (VALUE)entry;
+ }
+ break;
+ default:
+ rb_compile_error(RSTRING_PTR(iseq->location.path), iobj->line_no,
+ "unknown operand type: %c", type);
+ xfree(generated_iseq);
+ xfree(line_info_table);
+ return 0;
+ }
+ }
+ if (last_line != iobj->line_no) {
+ line_info_table[k].line_no = last_line = iobj->line_no;
+ line_info_table[k].position = pos;
+ k++;
+ }
+ pos += len;
+ break;
+ }
+ case ISEQ_ELEMENT_LABEL:
+ {
+ lobj = (LABEL *)list;
+ if (lobj->sp == -1) {
+ lobj->sp = sp;
+ }
+ else {
+ sp = lobj->sp;
+ }
+ break;
+ }
+ case ISEQ_ELEMENT_ADJUST:
+ {
+ ADJUST *adjust = (ADJUST *)list;
+ int orig_sp = sp;
+
+ if (adjust->label) {
+ sp = adjust->label->sp;
+ }
+ else {
+ sp = 0;
+ }
+
+ if (adjust->line_no != -1) {
+ if (orig_sp - sp > 0) {
+ if (last_line != (unsigned int)adjust->line_no) {
+ line_info_table[k].line_no = last_line = adjust->line_no;
+ line_info_table[k].position = pos;
+ k++;
+ }
+ generated_iseq[pos++] = BIN(adjuststack);
+ generated_iseq[pos++] = orig_sp - sp;
+ }
+ else if (orig_sp - sp == 0) {
+ /* jump to next insn */
+ if (last_line != (unsigned int)adjust->line_no) {
+ line_info_table[k].line_no = last_line = adjust->line_no;
+ line_info_table[k].position = pos;
+ k++;
+ }
+ generated_iseq[pos++] = BIN(jump);
+ generated_iseq[pos++] = 0;
+ }
+ else {
+ rb_bug("iseq_set_sequence: adjust bug");
+ }
+ }
+ break;
+ }
+ default:
+ /* ignore */
+ break;
+ }
+ list = list->next;
+ }
+
+#if 0 /* XXX */
+ /* this check need dead code elimination */
+ if (sp != 1) {
+ rb_bug("SP is not 0 on %s (%d)\n", RSTRING_PTR(iseq->name), sp);
+ }
+#endif
+
+ iseq->iseq = (void *)generated_iseq;
+ iseq->iseq_size = pos;
+ iseq->stack_max = stack_max;
+
+ line_info_table = ruby_xrealloc(line_info_table, k * sizeof(struct iseq_line_info_entry));
+ iseq->line_info_table = line_info_table;
+ iseq->line_info_size = k;
+
+ return COMPILE_OK;
+}
+
+static int
+label_get_position(LABEL *lobj)
+{
+ return lobj->position;
+}
+
+static int
+label_get_sp(LABEL *lobj)
+{
+ return lobj->sp;
+}
+
+static int
+iseq_set_exception_table(rb_iseq_t *iseq)
+{
+ const VALUE *tptr, *ptr;
+ int tlen, i;
+ struct iseq_catch_table_entry *entry;
+
+ tlen = (int)RARRAY_LEN(iseq->compile_data->catch_table_ary);
+ tptr = RARRAY_CONST_PTR(iseq->compile_data->catch_table_ary);
+
+ iseq->catch_table = tlen ? ALLOC_N(struct iseq_catch_table_entry, tlen) : 0;
+ iseq->catch_table_size = tlen;
+
+ for (i = 0; i < tlen; i++) {
+ ptr = RARRAY_CONST_PTR(tptr[i]);
+ entry = &iseq->catch_table[i];
+ entry->type = (enum catch_type)(ptr[0] & 0xffff);
+ entry->start = label_get_position((LABEL *)(ptr[1] & ~1));
+ entry->end = label_get_position((LABEL *)(ptr[2] & ~1));
+ entry->iseq = ptr[3];
+
+ /* register iseq as mark object */
+ if (entry->iseq != 0) {
+ iseq_add_mark_object(iseq, entry->iseq);
+ }
+
+ /* stack depth */
+ if (ptr[4]) {
+ LABEL *lobj = (LABEL *)(ptr[4] & ~1);
+ entry->cont = label_get_position(lobj);
+ entry->sp = label_get_sp(lobj);
+
+ /* TODO: Dirty Hack! Fix me */
+ if (entry->type == CATCH_TYPE_RESCUE ||
+ entry->type == CATCH_TYPE_BREAK ||
+ entry->type == CATCH_TYPE_NEXT) {
+ entry->sp--;
+ }
+ }
+ else {
+ entry->cont = 0;
+ }
+ }
+
+ RB_OBJ_WRITE(iseq->self, &iseq->compile_data->catch_table_ary, 0); /* free */
+ return COMPILE_OK;
+}
+
+/*
+ * set optional argument table
+ * def foo(a, b=expr1, c=expr2)
+ * =>
+ * b:
+ * expr1
+ * c:
+ * expr2
+ */
+static int
+iseq_set_optargs_table(rb_iseq_t *iseq)
+{
+ int i;
+
+ if (iseq->arg_opts != 0) {
+ for (i = 0; i < iseq->arg_opts; i++) {
+ iseq->arg_opt_table[i] =
+ label_get_position((LABEL *)iseq->arg_opt_table[i]);
+ }
+ }
+ return COMPILE_OK;
+}
+
+static LINK_ELEMENT *
+get_destination_insn(INSN *iobj)
+{
+ LABEL *lobj = (LABEL *)OPERAND_AT(iobj, 0);
+ LINK_ELEMENT *list;
+
+ list = lobj->link.next;
+ while (list) {
+ if (list->type == ISEQ_ELEMENT_INSN || list->type == ISEQ_ELEMENT_ADJUST) {
+ break;
+ }
+ list = list->next;
+ }
+ return list;
+}
+
+static LINK_ELEMENT *
+get_next_insn(INSN *iobj)
+{
+ LINK_ELEMENT *list = iobj->link.next;
+
+ while (list) {
+ if (list->type == ISEQ_ELEMENT_INSN || list->type == ISEQ_ELEMENT_ADJUST) {
+ return list;
+ }
+ list = list->next;
+ }
+ return 0;
+}
+
+static LINK_ELEMENT *
+get_prev_insn(INSN *iobj)
+{
+ LINK_ELEMENT *list = iobj->link.prev;
+
+ while (list) {
+ if (list->type == ISEQ_ELEMENT_INSN || list->type == ISEQ_ELEMENT_ADJUST) {
+ return list;
+ }
+ list = list->prev;
+ }
+ return 0;
+}
+
+static int
+iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcallopt)
+{
+ INSN *iobj = (INSN *)list;
+ again:
+ if (iobj->insn_id == BIN(jump)) {
+ INSN *niobj, *diobj, *piobj;
+ /*
+ * useless jump elimination:
+ * jump LABEL1
+ * ...
+ * LABEL1:
+ * jump LABEL2
+ *
+ * => in this case, first jump instruction should jump to
+ * LABEL2 directly
+ */
+ diobj = (INSN *)get_destination_insn(iobj);
+ niobj = (INSN *)get_next_insn(iobj);
+
+ if (diobj == niobj) {
+ /*
+ * jump LABEL
+ * LABEL:
+ * =>
+ * LABEL:
+ */
+ REMOVE_ELEM(&iobj->link);
+ }
+ else if (iobj != diobj && diobj->insn_id == BIN(jump)) {
+ if (OPERAND_AT(iobj, 0) != OPERAND_AT(diobj, 0)) {
+ OPERAND_AT(iobj, 0) = OPERAND_AT(diobj, 0);
+ goto again;
+ }
+ }
+ else if (diobj->insn_id == BIN(leave)) {
+ /*
+ * jump LABEL
+ * ...
+ * LABEL:
+ * leave
+ * =>
+ * leave
+ * ...
+ * LABEL:
+ * leave
+ */
+ INSN *eiobj = new_insn_core(iseq, iobj->line_no, BIN(leave),
+ diobj->operand_size, diobj->operands);
+ INSN *popiobj = new_insn_core(iseq, iobj->line_no,
+ BIN(pop), 0, 0);
+ /* replace */
+ REPLACE_ELEM((LINK_ELEMENT *)iobj, (LINK_ELEMENT *)eiobj);
+ INSERT_ELEM_NEXT((LINK_ELEMENT *)eiobj, (LINK_ELEMENT *)popiobj);
+ iobj = popiobj;
+ }
+ /*
+ * useless jump elimination (if/unless destination):
+ * if L1
+ * jump L2
+ * L1:
+ * ...
+ * L2:
+ *
+ * ==>
+ * unless L2
+ * L1:
+ * ...
+ * L2:
+ */
+ else if ((piobj = (INSN *)get_prev_insn(iobj)) != 0 &&
+ (piobj->insn_id == BIN(branchif) ||
+ piobj->insn_id == BIN(branchunless))) {
+ if (niobj == (INSN *)get_destination_insn(piobj)) {
+ piobj->insn_id = (piobj->insn_id == BIN(branchif))
+ ? BIN(branchunless) : BIN(branchif);
+ OPERAND_AT(piobj, 0) = OPERAND_AT(iobj, 0);
+ REMOVE_ELEM(&iobj->link);
+ }
+ }
+ }
+
+ if (iobj->insn_id == BIN(branchif) ||
+ iobj->insn_id == BIN(branchunless)) {
+ /*
+ * if L1
+ * ...
+ * L1:
+ * jump L2
+ * =>
+ * if L2
+ */
+ INSN *nobj = (INSN *)get_destination_insn(iobj);
+ if (nobj->insn_id == BIN(jump)) {
+ OPERAND_AT(iobj, 0) = OPERAND_AT(nobj, 0);
+ }
+ }
+
+ if (do_tailcallopt && iobj->insn_id == BIN(leave)) {
+ /*
+ * send ...
+ * leave
+ * =>
+ * send ..., ... | VM_CALL_TAILCALL, ...
+ * leave # unreachable
+ */
+ INSN *piobj = (INSN *)get_prev_insn((INSN *)list);
+ enum ruby_vminsn_type previ = piobj->insn_id;
+
+ if (previ == BIN(send) || previ == BIN(opt_send_simple) || previ == BIN(invokesuper)) {
+ rb_call_info_t *ci = (rb_call_info_t *)piobj->operands[0];
+ if (ci->blockiseq == 0) {
+ ci->flag |= VM_CALL_TAILCALL;
+ }
+ }
+ }
+ return COMPILE_OK;
+}
+
+static int
+insn_set_specialized_instruction(rb_iseq_t *iseq, INSN *iobj, int insn_id)
+{
+ int old_opsize = iobj->operand_size;
+ iobj->insn_id = insn_id;
+ iobj->operand_size = insn_len(insn_id) - 1;
+
+ if (iobj->operand_size > old_opsize) {
+ VALUE *old_operands = iobj->operands;
+ if (insn_id != BIN(opt_neq)) {
+ rb_bug("insn_set_specialized_instruction: unknown insn: %d", insn_id);
+ }
+ iobj->operands = (VALUE *)compile_data_alloc(iseq, iobj->operand_size * sizeof(VALUE));
+ iobj->operands[0] = old_operands[0];
+ iobj->operands[1] = (VALUE)new_callinfo(iseq, idEq, 1, 0, 0);
+ }
+
+ return COMPILE_OK;
+}
+
+static int
+iseq_specialized_instruction(rb_iseq_t *iseq, INSN *iobj)
+{
+ if (iobj->insn_id == BIN(send)) {
+ rb_call_info_t *ci = (rb_call_info_t *)OPERAND_AT(iobj, 0);
+
+#define SP_INSN(opt) insn_set_specialized_instruction(iseq, iobj, BIN(opt_##opt))
+ if (ci->blockiseq == 0 && (ci->flag & ~VM_CALL_ARGS_SKIP_SETUP) == 0) {
+ switch (ci->orig_argc) {
+ case 0:
+ switch (ci->mid) {
+ case idLength: SP_INSN(length); return COMPILE_OK;
+ case idSize: SP_INSN(size); return COMPILE_OK;
+ case idEmptyP: SP_INSN(empty_p);return COMPILE_OK;
+ case idSucc: SP_INSN(succ); return COMPILE_OK;
+ case idNot: SP_INSN(not); return COMPILE_OK;
+ }
+ break;
+ case 1:
+ switch (ci->mid) {
+ case idPLUS: SP_INSN(plus); return COMPILE_OK;
+ case idMINUS: SP_INSN(minus); return COMPILE_OK;
+ case idMULT: SP_INSN(mult); return COMPILE_OK;
+ case idDIV: SP_INSN(div); return COMPILE_OK;
+ case idMOD: SP_INSN(mod); return COMPILE_OK;
+ case idEq: SP_INSN(eq); return COMPILE_OK;
+ case idNeq: SP_INSN(neq); return COMPILE_OK;
+ case idLT: SP_INSN(lt); return COMPILE_OK;
+ case idLE: SP_INSN(le); return COMPILE_OK;
+ case idGT: SP_INSN(gt); return COMPILE_OK;
+ case idGE: SP_INSN(ge); return COMPILE_OK;
+ case idLTLT: SP_INSN(ltlt); return COMPILE_OK;
+ case idAREF: SP_INSN(aref); return COMPILE_OK;
+ }
+ break;
+ case 2:
+ switch (ci->mid) {
+ case idASET: SP_INSN(aset); return COMPILE_OK;
+ }
+ break;
+ }
+ }
+ if (ci->flag & VM_CALL_ARGS_SKIP_SETUP) {
+ iobj->insn_id = BIN(opt_send_simple);
+ }
+ }
+#undef SP_INSN
+
+ return COMPILE_OK;
+}
+
+static int
+iseq_optimize(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
+{
+ LINK_ELEMENT *list;
+ const int do_peepholeopt = iseq->compile_data->option->peephole_optimization;
+ const int do_tailcallopt = iseq->compile_data->option->tailcall_optimization;
+ const int do_si = iseq->compile_data->option->specialized_instruction;
+ const int do_ou = iseq->compile_data->option->operands_unification;
+ list = FIRST_ELEMENT(anchor);
+
+ while (list) {
+ if (list->type == ISEQ_ELEMENT_INSN) {
+ if (do_peepholeopt) {
+ iseq_peephole_optimize(iseq, list, do_tailcallopt);
+ }
+ if (do_si) {
+ iseq_specialized_instruction(iseq, (INSN *)list);
+ }
+ if (do_ou) {
+ insn_operands_unification((INSN *)list);
+ }
+ }
+ list = list->next;
+ }
+ return COMPILE_OK;
+}
+
+#if OPT_INSTRUCTIONS_UNIFICATION
+static INSN *
+new_unified_insn(rb_iseq_t *iseq,
+ int insn_id, int size, LINK_ELEMENT *seq_list)
+{
+ INSN *iobj = 0;
+ LINK_ELEMENT *list = seq_list;
+ int i, argc = 0;
+ VALUE *operands = 0, *ptr = 0;
+
+
+ /* count argc */
+ for (i = 0; i < size; i++) {
+ iobj = (INSN *)list;
+ argc += iobj->operand_size;
+ list = list->next;
+ }
+
+ if (argc > 0) {
+ ptr = operands =
+ (VALUE *)compile_data_alloc(iseq, sizeof(VALUE) * argc);
+ }
+
+ /* copy operands */
+ list = seq_list;
+ for (i = 0; i < size; i++) {
+ iobj = (INSN *)list;
+ MEMCPY(ptr, iobj->operands, VALUE, iobj->operand_size);
+ ptr += iobj->operand_size;
+ list = list->next;
+ }
+
+ return new_insn_core(iseq, iobj->line_no, insn_id, argc, operands);
+}
+#endif
+
+/*
+ * This scheme can get more performance if do this optimize with
+ * label address resolving.
+ * It's future work (if compile time was bottle neck).
+ */
+static int
+iseq_insns_unification(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
+{
+#if OPT_INSTRUCTIONS_UNIFICATION
+ LINK_ELEMENT *list;
+ INSN *iobj, *niobj;
+ int id, k;
+ intptr_t j;
+
+ list = FIRST_ELEMENT(anchor);
+ while (list) {
+ if (list->type == ISEQ_ELEMENT_INSN) {
+ iobj = (INSN *)list;
+ id = iobj->insn_id;
+ if (unified_insns_data[id] != 0) {
+ const int *const *entry = unified_insns_data[id];
+ for (j = 1; j < (intptr_t)entry[0]; j++) {
+ const int *unified = entry[j];
+ LINK_ELEMENT *li = list->next;
+ for (k = 2; k < unified[1]; k++) {
+ if (li->type != ISEQ_ELEMENT_INSN ||
+ ((INSN *)li)->insn_id != unified[k]) {
+ goto miss;
+ }
+ li = li->next;
+ }
+ /* matched */
+ niobj =
+ new_unified_insn(iseq, unified[0], unified[1] - 1,
+ list);
+
+ /* insert to list */
+ niobj->link.prev = (LINK_ELEMENT *)iobj->link.prev;
+ niobj->link.next = li;
+ if (li) {
+ li->prev = (LINK_ELEMENT *)niobj;
+ }
+
+ list->prev->next = (LINK_ELEMENT *)niobj;
+ list = (LINK_ELEMENT *)niobj;
+ break;
+ miss:;
+ }
+ }
+ }
+ list = list->next;
+ }
+#endif
+ return COMPILE_OK;
+}
+
+#if OPT_STACK_CACHING
+
+#define SC_INSN(insn, stat) sc_insn_info[(insn)][(stat)]
+#define SC_NEXT(insn) sc_insn_next[(insn)]
+
+#include "opt_sc.inc"
+
+static int
+insn_set_sc_state(rb_iseq_t *iseq, INSN *iobj, int state)
+{
+ int nstate;
+ int insn_id;
+
+ insn_id = iobj->insn_id;
+ iobj->insn_id = SC_INSN(insn_id, state);
+ nstate = SC_NEXT(iobj->insn_id);
+
+ if (insn_id == BIN(jump) ||
+ insn_id == BIN(branchif) || insn_id == BIN(branchunless)) {
+ LABEL *lobj = (LABEL *)OPERAND_AT(iobj, 0);
+
+ if (lobj->sc_state != 0) {
+ if (lobj->sc_state != nstate) {
+ dump_disasm_list((LINK_ELEMENT *)iobj);
+ dump_disasm_list((LINK_ELEMENT *)lobj);
+ printf("\n-- %d, %d\n", lobj->sc_state, nstate);
+ rb_compile_error(RSTRING_PTR(iseq->location.path), iobj->line_no,
+ "insn_set_sc_state error\n");
+ return 0;
+ }
+ }
+ else {
+ lobj->sc_state = nstate;
+ }
+ if (insn_id == BIN(jump)) {
+ nstate = SCS_XX;
+ }
+ }
+ else if (insn_id == BIN(leave)) {
+ nstate = SCS_XX;
+ }
+
+ return nstate;
+}
+
+static int
+label_set_sc_state(LABEL *lobj, int state)
+{
+ if (lobj->sc_state != 0) {
+ if (lobj->sc_state != state) {
+ state = lobj->sc_state;
+ }
+ }
+ else {
+ lobj->sc_state = state;
+ }
+
+ return state;
+}
+
+
+#endif
+
+static int
+iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
+{
+#if OPT_STACK_CACHING
+ LINK_ELEMENT *list;
+ int state, insn_id;
+
+ /* initialize */
+ state = SCS_XX;
+ list = FIRST_ELEMENT(anchor);
+ /* dump_disasm_list(list); */
+
+ /* for each list element */
+ while (list) {
+ redo_point:
+ switch (list->type) {
+ case ISEQ_ELEMENT_INSN:
+ {
+ INSN *iobj = (INSN *)list;
+ insn_id = iobj->insn_id;
+
+ /* dump_disasm_list(list); */
+
+ switch (insn_id) {
+ case BIN(nop):
+ {
+ /* exception merge point */
+ if (state != SCS_AX) {
+ INSN *rpobj =
+ new_insn_body(iseq, 0, BIN(reput), 0);
+
+ /* replace this insn */
+ REPLACE_ELEM(list, (LINK_ELEMENT *)rpobj);
+ list = (LINK_ELEMENT *)rpobj;
+ goto redo_point;
+ }
+ break;
+ }
+ case BIN(swap):
+ {
+ if (state == SCS_AB || state == SCS_BA) {
+ state = (state == SCS_AB ? SCS_BA : SCS_AB);
+
+ REMOVE_ELEM(list);
+ list = list->next;
+ goto redo_point;
+ }
+ break;
+ }
+ case BIN(pop):
+ {
+ switch (state) {
+ case SCS_AX:
+ case SCS_BX:
+ state = SCS_XX;
+ break;
+ case SCS_AB:
+ state = SCS_AX;
+ break;
+ case SCS_BA:
+ state = SCS_BX;
+ break;
+ case SCS_XX:
+ goto normal_insn;
+ default:
+ rb_compile_error(RSTRING_PTR(iseq->location.path), iobj->line_no,
+ "unreachable");
+ }
+ /* remove useless pop */
+ REMOVE_ELEM(list);
+ list = list->next;
+ goto redo_point;
+ }
+ default:;
+ /* none */
+ } /* end of switch */
+ normal_insn:
+ state = insn_set_sc_state(iseq, iobj, state);
+ break;
+ }
+ case ISEQ_ELEMENT_LABEL:
+ {
+ LABEL *lobj;
+ lobj = (LABEL *)list;
+
+ state = label_set_sc_state(lobj, state);
+ }
+ default:
+ break;
+ }
+ list = list->next;
+ }
+#endif
+ return COMPILE_OK;
+}
+
+static int
+compile_dstr_fragments(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int *cntp)
+{
+ NODE *list = node->nd_next;
+ VALUE lit = node->nd_lit;
+ int cnt = 0;
+
+ debugp_param("nd_lit", lit);
+ if (!NIL_P(lit)) {
+ cnt++;
+ if (RB_TYPE_P(lit, T_STRING))
+ lit = node->nd_lit = rb_fstring(node->nd_lit);
+ ADD_INSN1(ret, nd_line(node), putobject, lit);
+ }
+
+ while (list) {
+ node = list->nd_head;
+ if (nd_type(node) == NODE_STR) {
+ node->nd_lit = rb_fstring(node->nd_lit);
+ ADD_INSN1(ret, nd_line(node), putobject, node->nd_lit);
+ }
+ else {
+ COMPILE(ret, "each string", node);
+ }
+ cnt++;
+ list = list->nd_next;
+ }
+ *cntp = cnt;
+
+ return COMPILE_OK;
+}
+
+static int
+compile_dstr(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node)
+{
+ int cnt;
+ compile_dstr_fragments(iseq, ret, node, &cnt);
+ ADD_INSN1(ret, nd_line(node), concatstrings, INT2FIX(cnt));
+ return COMPILE_OK;
+}
+
+static int
+compile_dregx(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node)
+{
+ int cnt;
+ compile_dstr_fragments(iseq, ret, node, &cnt);
+ ADD_INSN2(ret, nd_line(node), toregexp, INT2FIX(node->nd_cflag), INT2FIX(cnt));
+ return COMPILE_OK;
+}
+
+static int
+compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * cond,
+ LABEL *then_label, LABEL *else_label)
+{
+ switch (nd_type(cond)) {
+ case NODE_AND:
+ {
+ LABEL *label = NEW_LABEL(nd_line(cond));
+ compile_branch_condition(iseq, ret, cond->nd_1st, label,
+ else_label);
+ ADD_LABEL(ret, label);
+ compile_branch_condition(iseq, ret, cond->nd_2nd, then_label,
+ else_label);
+ break;
+ }
+ case NODE_OR:
+ {
+ LABEL *label = NEW_LABEL(nd_line(cond));
+ compile_branch_condition(iseq, ret, cond->nd_1st, then_label,
+ label);
+ ADD_LABEL(ret, label);
+ compile_branch_condition(iseq, ret, cond->nd_2nd, then_label,
+ else_label);
+ break;
+ }
+ case NODE_LIT: /* NODE_LIT is always not true */
+ case NODE_TRUE:
+ case NODE_STR:
+ /* printf("useless condition eliminate (%s)\n", ruby_node_name(nd_type(cond))); */
+ ADD_INSNL(ret, nd_line(cond), jump, then_label);
+ break;
+ case NODE_FALSE:
+ case NODE_NIL:
+ /* printf("useless condition eliminate (%s)\n", ruby_node_name(nd_type(cond))); */
+ ADD_INSNL(ret, nd_line(cond), jump, else_label);
+ break;
+ default:
+ COMPILE(ret, "branch condition", cond);
+ ADD_INSNL(ret, nd_line(cond), branchunless, else_label);
+ ADD_INSNL(ret, nd_line(cond), jump, then_label);
+ break;
+ }
+ return COMPILE_OK;
+}
+
+enum compile_array_type_t {
+ COMPILE_ARRAY_TYPE_ARRAY,
+ COMPILE_ARRAY_TYPE_HASH,
+ COMPILE_ARRAY_TYPE_ARGS
+};
+
+static int
+compile_array_(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE* node_root,
+ enum compile_array_type_t type, int poped)
+{
+ NODE *node = node_root;
+ int line = (int)nd_line(node);
+ int len = 0;
+
+ if (nd_type(node) == NODE_ZARRAY) {
+ if (!poped) {
+ switch (type) {
+ case COMPILE_ARRAY_TYPE_ARRAY: ADD_INSN1(ret, line, newarray, INT2FIX(0)); break;
+ case COMPILE_ARRAY_TYPE_HASH: ADD_INSN1(ret, line, newhash, INT2FIX(0)); break;
+ case COMPILE_ARRAY_TYPE_ARGS: /* do nothing */ break;
+ }
+ }
+ }
+ else {
+ int opt_p = 1;
+ int first = 1, i;
+
+ while (node) {
+ NODE *start_node = node, *end_node;
+ NODE *kw = 0;
+ const int max = 0x100;
+ DECL_ANCHOR(anchor);
+ INIT_ANCHOR(anchor);
+
+ for (i=0; i<max && node; i++, len++, node = node->nd_next) {
+ if (CPDEBUG > 0 && nd_type(node) != NODE_ARRAY) {
+ rb_bug("compile_array: This node is not NODE_ARRAY, but %s", ruby_node_name(nd_type(node)));
+ }
+
+ if (type == COMPILE_ARRAY_TYPE_HASH && !node->nd_head) {
+ opt_p = 0;
+ kw = node->nd_next;
+ node = kw->nd_next;
+ kw = kw->nd_head;
+ break;
+ }
+ if (opt_p && nd_type(node->nd_head) != NODE_LIT) {
+ opt_p = 0;
+ }
+
+ COMPILE_(anchor, "array element", node->nd_head, poped);
+ }
+
+ if (opt_p && type != COMPILE_ARRAY_TYPE_ARGS) {
+ if (!poped) {
+ VALUE ary = rb_ary_tmp_new(i);
+
+ end_node = node;
+ node = start_node;
+
+ while (node != end_node) {
+ rb_ary_push(ary, node->nd_head->nd_lit);
+ node = node->nd_next;
+ }
+ while (node && nd_type(node->nd_head) == NODE_LIT &&
+ node->nd_next && nd_type(node->nd_next->nd_head) == NODE_LIT) {
+ rb_ary_push(ary, node->nd_head->nd_lit);
+ node = node->nd_next;
+ rb_ary_push(ary, node->nd_head->nd_lit);
+ node = node->nd_next;
+ len++;
+ }
+
+ OBJ_FREEZE(ary);
+
+ iseq_add_mark_object_compile_time(iseq, ary);
+
+ if (first) {
+ first = 0;
+ if (type == COMPILE_ARRAY_TYPE_ARRAY) {
+ ADD_INSN1(ret, line, duparray, ary);
+ }
+ else { /* COMPILE_ARRAY_TYPE_HASH */
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line, putobject, ary);
+ ADD_SEND(ret, line, ID2SYM(id_core_hash_from_ary), INT2FIX(1));
+ }
+ }
+ else {
+ if (type == COMPILE_ARRAY_TYPE_ARRAY) {
+ ADD_INSN1(ret, line, putobject, ary);
+ ADD_INSN(ret, line, concatarray);
+ }
+ else {
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line, putobject, ary);
+ ADD_SEND(ret, line, ID2SYM(id_core_hash_merge_ary), INT2FIX(1));
+ }
+ }
+ }
+ }
+ else {
+ if (!poped) {
+ switch (type) {
+ case COMPILE_ARRAY_TYPE_ARRAY:
+ ADD_INSN1(anchor, line, newarray, INT2FIX(i));
+
+ if (first) {
+ first = 0;
+ }
+ else {
+ ADD_INSN(anchor, line, concatarray);
+ }
+
+ APPEND_LIST(ret, anchor);
+ break;
+ case COMPILE_ARRAY_TYPE_HASH:
+ if (i > 0) {
+ if (first) {
+ ADD_INSN1(anchor, line, newhash, INT2FIX(i));
+ APPEND_LIST(ret, anchor);
+ }
+ else {
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN(ret, line, swap);
+ APPEND_LIST(ret, anchor);
+ ADD_SEND(ret, line, ID2SYM(id_core_hash_merge_ptr), INT2FIX(i + 1));
+ }
+ }
+ if (kw) {
+ VALUE nhash = (i > 0 || !first) ? INT2FIX(2) : INT2FIX(1);
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ if (i > 0 || !first) ADD_INSN(ret, line, swap);
+ COMPILE(ret, "keyword splat", kw);
+ ADD_SEND(ret, line, ID2SYM(id_core_hash_merge_kwd), nhash);
+ if (nhash == INT2FIX(1)) ADD_SEND(ret, line, ID2SYM(rb_intern("dup")), INT2FIX(0));
+ }
+ first = 0;
+ break;
+ case COMPILE_ARRAY_TYPE_ARGS:
+ APPEND_LIST(ret, anchor);
+ break;
+ }
+ }
+ else {
+ /* poped */
+ APPEND_LIST(ret, anchor);
+ }
+ }
+ }
+ }
+ return len;
+}
+
+static VALUE
+compile_array(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE* node_root, enum compile_array_type_t type)
+{
+ return compile_array_(iseq, ret, node_root, type, 0);
+}
+
+static VALUE
+case_when_optimizable_literal(NODE * node)
+{
+ switch (nd_type(node)) {
+ case NODE_LIT: {
+ VALUE v = node->nd_lit;
+ double ival;
+ if (RB_TYPE_P(v, T_FLOAT) &&
+ modf(RFLOAT_VALUE(v), &ival) == 0.0) {
+ return FIXABLE(ival) ? LONG2FIX((long)ival) : rb_dbl2big(ival);
+ }
+ if (SYMBOL_P(v) || rb_obj_is_kind_of(v, rb_cNumeric)) {
+ return v;
+ }
+ break;
+ }
+ case NODE_STR:
+ return node->nd_lit = rb_fstring(node->nd_lit);
+ }
+ return Qundef;
+}
+
+static int
+when_vals(rb_iseq_t *iseq, LINK_ANCHOR *cond_seq, NODE *vals, LABEL *l1, int only_special_literals, VALUE literals)
+{
+ while (vals) {
+ NODE* val = vals->nd_head;
+ VALUE lit = case_when_optimizable_literal(val);
+
+ if (lit == Qundef) {
+ only_special_literals = 0;
+ }
+ else {
+ if (rb_hash_lookup(literals, lit) != Qnil) {
+ rb_compile_warning(RSTRING_PTR(iseq->location.path), nd_line(val), "duplicated when clause is ignored");
+ }
+ else {
+ rb_hash_aset(literals, lit, (VALUE)(l1) | 1);
+ }
+ }
+
+ ADD_INSN(cond_seq, nd_line(val), dup); /* dup target */
+
+ if (nd_type(val) == NODE_STR) {
+ val->nd_lit = rb_fstring(val->nd_lit);
+ debugp_param("nd_lit", val->nd_lit);
+ ADD_INSN1(cond_seq, nd_line(val), putobject, val->nd_lit);
+ }
+ else {
+ COMPILE(cond_seq, "when cond", val);
+ }
+
+ ADD_INSN1(cond_seq, nd_line(vals), checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE));
+ ADD_INSNL(cond_seq, nd_line(val), branchif, l1);
+ vals = vals->nd_next;
+ }
+ return only_special_literals;
+}
+
+static int
+compile_massign_lhs(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node)
+{
+ switch (nd_type(node)) {
+ case NODE_ATTRASGN: {
+ INSN *iobj;
+ rb_call_info_t *ci;
+ VALUE dupidx;
+
+ COMPILE_POPED(ret, "masgn lhs (NODE_ATTRASGN)", node);
+
+ POP_ELEMENT(ret); /* pop pop insn */
+ iobj = (INSN *)POP_ELEMENT(ret); /* pop send insn */
+ ci = (rb_call_info_t *)iobj->operands[0];
+ ci->orig_argc += 1; ci->argc = ci->orig_argc;
+ dupidx = INT2FIX(ci->orig_argc);
+
+ ADD_INSN1(ret, nd_line(node), topn, dupidx);
+ ADD_ELEM(ret, (LINK_ELEMENT *)iobj);
+ ADD_INSN(ret, nd_line(node), pop); /* result */
+ ADD_INSN(ret, nd_line(node), pop); /* rhs */
+ break;
+ }
+ case NODE_MASGN: {
+ DECL_ANCHOR(anchor);
+ INIT_ANCHOR(anchor);
+ COMPILE_POPED(anchor, "nest masgn lhs", node);
+ REMOVE_ELEM(FIRST_ELEMENT(anchor));
+ ADD_SEQ(ret, anchor);
+ break;
+ }
+ default: {
+ DECL_ANCHOR(anchor);
+ INIT_ANCHOR(anchor);
+ COMPILE_POPED(anchor, "masgn lhs", node);
+ REMOVE_ELEM(FIRST_ELEMENT(anchor));
+ ADD_SEQ(ret, anchor);
+ }
+ }
+
+ return COMPILE_OK;
+}
+
+static void
+compile_massign_opt_lhs(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *lhsn)
+{
+ if (lhsn) {
+ compile_massign_opt_lhs(iseq, ret, lhsn->nd_next);
+ compile_massign_lhs(iseq, ret, lhsn->nd_head);
+ }
+}
+
+static int
+compile_massign_opt(rb_iseq_t *iseq, LINK_ANCHOR *ret,
+ NODE *rhsn, NODE *orig_lhsn)
+{
+ VALUE mem[64];
+ const int memsize = numberof(mem);
+ int memindex = 0;
+ int llen = 0, rlen = 0;
+ int i;
+ NODE *lhsn = orig_lhsn;
+
+#define MEMORY(v) { \
+ int i; \
+ if (memindex == memsize) return 0; \
+ for (i=0; i<memindex; i++) { \
+ if (mem[i] == (v)) return 0; \
+ } \
+ mem[memindex++] = (v); \
+}
+
+ if (rhsn == 0 || nd_type(rhsn) != NODE_ARRAY) {
+ return 0;
+ }
+
+ while (lhsn) {
+ NODE *ln = lhsn->nd_head;
+ switch (nd_type(ln)) {
+ case NODE_LASGN:
+ MEMORY(ln->nd_vid);
+ break;
+ case NODE_DASGN:
+ case NODE_DASGN_CURR:
+ case NODE_IASGN:
+ case NODE_IASGN2:
+ case NODE_CVASGN:
+ MEMORY(ln->nd_vid);
+ break;
+ default:
+ return 0;
+ }
+ lhsn = lhsn->nd_next;
+ llen++;
+ }
+
+ while (rhsn) {
+ if (llen <= rlen) {
+ COMPILE_POPED(ret, "masgn val (popped)", rhsn->nd_head);
+ }
+ else {
+ COMPILE(ret, "masgn val", rhsn->nd_head);
+ }
+ rhsn = rhsn->nd_next;
+ rlen++;
+ }
+
+ if (llen > rlen) {
+ for (i=0; i<llen-rlen; i++) {
+ ADD_INSN(ret, nd_line(orig_lhsn), putnil);
+ }
+ }
+
+ compile_massign_opt_lhs(iseq, ret, orig_lhsn);
+ return 1;
+}
+
+static int
+compile_massign(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int poped)
+{
+ NODE *rhsn = node->nd_value;
+ NODE *splatn = node->nd_args;
+ NODE *lhsn = node->nd_head;
+ int lhs_splat = (splatn && (VALUE)splatn != (VALUE)-1) ? 1 : 0;
+
+ if (!poped || splatn || !compile_massign_opt(iseq, ret, rhsn, lhsn)) {
+ int llen = 0;
+ DECL_ANCHOR(lhsseq);
+
+ INIT_ANCHOR(lhsseq);
+
+ while (lhsn) {
+ compile_massign_lhs(iseq, lhsseq, lhsn->nd_head);
+ llen += 1;
+ lhsn = lhsn->nd_next;
+ }
+
+ COMPILE(ret, "normal masgn rhs", rhsn);
+
+ if (!poped) {
+ ADD_INSN(ret, nd_line(node), dup);
+ }
+
+ ADD_INSN2(ret, nd_line(node), expandarray,
+ INT2FIX(llen), INT2FIX(lhs_splat));
+ ADD_SEQ(ret, lhsseq);
+
+ if (lhs_splat) {
+ if (nd_type(splatn) == NODE_POSTARG) {
+ /*a, b, *r, p1, p2 */
+ NODE *postn = splatn->nd_2nd;
+ NODE *restn = splatn->nd_1st;
+ int num = (int)postn->nd_alen;
+ int flag = 0x02 | (((VALUE)restn == (VALUE)-1) ? 0x00 : 0x01);
+
+ ADD_INSN2(ret, nd_line(splatn), expandarray,
+ INT2FIX(num), INT2FIX(flag));
+
+ if ((VALUE)restn != (VALUE)-1) {
+ compile_massign_lhs(iseq, ret, restn);
+ }
+ while (postn) {
+ compile_massign_lhs(iseq, ret, postn->nd_head);
+ postn = postn->nd_next;
+ }
+ }
+ else {
+ /* a, b, *r */
+ compile_massign_lhs(iseq, ret, splatn);
+ }
+ }
+ }
+ return COMPILE_OK;
+}
+
+static int
+compile_colon2(rb_iseq_t *iseq, NODE * node,
+ LINK_ANCHOR *pref, LINK_ANCHOR *body)
+{
+ switch (nd_type(node)) {
+ case NODE_CONST:
+ debugi("compile_colon2 - colon", node->nd_vid);
+ ADD_INSN1(body, nd_line(node), getconstant, ID2SYM(node->nd_vid));
+ break;
+ case NODE_COLON3:
+ debugi("compile_colon2 - colon3", node->nd_mid);
+ ADD_INSN(body, nd_line(node), pop);
+ ADD_INSN1(body, nd_line(node), putobject, rb_cObject);
+ ADD_INSN1(body, nd_line(node), getconstant, ID2SYM(node->nd_mid));
+ break;
+ case NODE_COLON2:
+ compile_colon2(iseq, node->nd_head, pref, body);
+ debugi("compile_colon2 - colon2", node->nd_mid);
+ ADD_INSN1(body, nd_line(node), getconstant, ID2SYM(node->nd_mid));
+ break;
+ default:
+ COMPILE(pref, "const colon2 prefix", node);
+ break;
+ }
+ return COMPILE_OK;
+}
+
+static VALUE
+compile_cpath(LINK_ANCHOR *ret, rb_iseq_t *iseq, NODE *cpath)
+{
+ if (nd_type(cpath) == NODE_COLON3) {
+ /* toplevel class ::Foo */
+ ADD_INSN1(ret, nd_line(cpath), putobject, rb_cObject);
+ return Qfalse;
+ }
+ else if (cpath->nd_head) {
+ /* Bar::Foo */
+ COMPILE(ret, "nd_else->nd_head", cpath->nd_head);
+ return Qfalse;
+ }
+ else {
+ /* class at cbase Foo */
+ ADD_INSN1(ret, nd_line(cpath), putspecialobject,
+ INT2FIX(VM_SPECIAL_OBJECT_CONST_BASE));
+ return Qtrue;
+ }
+}
+
+#define defined_expr defined_expr0
+static int
+defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret,
+ NODE *node, LABEL **lfinish, VALUE needstr)
+{
+ enum defined_type expr_type = 0;
+ enum node_type type;
+
+ switch (type = nd_type(node)) {
+
+ /* easy literals */
+ case NODE_NIL:
+ expr_type = DEFINED_NIL;
+ break;
+ case NODE_SELF:
+ expr_type = DEFINED_SELF;
+ break;
+ case NODE_TRUE:
+ expr_type = DEFINED_TRUE;
+ break;
+ case NODE_FALSE:
+ expr_type = DEFINED_FALSE;
+ break;
+
+ case NODE_ARRAY:{
+ NODE *vals = node;
+
+ do {
+ defined_expr(iseq, ret, vals->nd_head, lfinish, Qfalse);
+
+ if (!lfinish[1]) {
+ lfinish[1] = NEW_LABEL(nd_line(node));
+ }
+ ADD_INSNL(ret, nd_line(node), branchunless, lfinish[1]);
+ } while ((vals = vals->nd_next) != NULL);
+ }
+ case NODE_STR:
+ case NODE_LIT:
+ case NODE_ZARRAY:
+ case NODE_AND:
+ case NODE_OR:
+ default:
+ expr_type = DEFINED_EXPR;
+ break;
+
+ /* variables */
+ case NODE_LVAR:
+ case NODE_DVAR:
+ expr_type = DEFINED_LVAR;
+ break;
+
+ case NODE_IVAR:
+ ADD_INSN(ret, nd_line(node), putnil);
+ ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_IVAR),
+ ID2SYM(node->nd_vid), needstr);
+ return 1;
+
+ case NODE_GVAR:
+ ADD_INSN(ret, nd_line(node), putnil);
+ ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_GVAR),
+ ID2SYM(node->nd_entry->id), needstr);
+ return 1;
+
+ case NODE_CVAR:
+ ADD_INSN(ret, nd_line(node), putnil);
+ ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_CVAR),
+ ID2SYM(node->nd_vid), needstr);
+ return 1;
+
+ case NODE_CONST:
+ ADD_INSN(ret, nd_line(node), putnil);
+ ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_CONST),
+ ID2SYM(node->nd_vid), needstr);
+ return 1;
+ case NODE_COLON2:
+ if (!lfinish[1]) {
+ lfinish[1] = NEW_LABEL(nd_line(node));
+ }
+ defined_expr(iseq, ret, node->nd_head, lfinish, Qfalse);
+ ADD_INSNL(ret, nd_line(node), branchunless, lfinish[1]);
+
+ if (rb_is_const_id(node->nd_mid)) {
+ COMPILE(ret, "defined/colon2#nd_head", node->nd_head);
+ ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_CONST),
+ ID2SYM(node->nd_mid), needstr);
+ }
+ else {
+ COMPILE(ret, "defined/colon2#nd_head", node->nd_head);
+ ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_METHOD),
+ ID2SYM(node->nd_mid), needstr);
+ }
+ return 1;
+ case NODE_COLON3:
+ ADD_INSN1(ret, nd_line(node), putobject, rb_cObject);
+ ADD_INSN3(ret, nd_line(node), defined,
+ INT2FIX(DEFINED_CONST), ID2SYM(node->nd_mid), needstr);
+ return 1;
+
+ /* method dispatch */
+ case NODE_CALL:
+ case NODE_VCALL:
+ case NODE_FCALL:
+ case NODE_ATTRASGN:{
+ int self = TRUE;
+
+ switch (type) {
+ case NODE_ATTRASGN:
+ if (node->nd_recv == (NODE *)1) break;
+ case NODE_CALL:
+ self = FALSE;
+ break;
+ default:
+ /* through */;
+ }
+ if (!lfinish[1]) {
+ lfinish[1] = NEW_LABEL(nd_line(node));
+ }
+ if (node->nd_args) {
+ defined_expr(iseq, ret, node->nd_args, lfinish, Qfalse);
+ ADD_INSNL(ret, nd_line(node), branchunless, lfinish[1]);
+ }
+ if (!self) {
+ defined_expr(iseq, ret, node->nd_recv, lfinish, Qfalse);
+ ADD_INSNL(ret, nd_line(node), branchunless, lfinish[1]);
+ COMPILE(ret, "defined/recv", node->nd_recv);
+ ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_METHOD),
+ ID2SYM(node->nd_mid), needstr);
+ }
+ else {
+ ADD_INSN(ret, nd_line(node), putself);
+ ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_FUNC),
+ ID2SYM(node->nd_mid), needstr);
+ }
+ return 1;
+ }
+
+ case NODE_YIELD:
+ ADD_INSN(ret, nd_line(node), putnil);
+ ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_YIELD), 0,
+ needstr);
+ return 1;
+
+ case NODE_BACK_REF:
+ case NODE_NTH_REF:
+ ADD_INSN(ret, nd_line(node), putnil);
+ ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_REF),
+ INT2FIX((node->nd_nth << 1) | (type == NODE_BACK_REF)),
+ needstr);
+ return 1;
+
+ case NODE_SUPER:
+ case NODE_ZSUPER:
+ ADD_INSN(ret, nd_line(node), putnil);
+ ADD_INSN3(ret, nd_line(node), defined, INT2FIX(DEFINED_ZSUPER), 0,
+ needstr);
+ return 1;
+
+ case NODE_OP_ASGN1:
+ case NODE_OP_ASGN2:
+ case NODE_OP_ASGN_OR:
+ case NODE_OP_ASGN_AND:
+ case NODE_MASGN:
+ case NODE_LASGN:
+ case NODE_DASGN:
+ case NODE_DASGN_CURR:
+ case NODE_GASGN:
+ case NODE_IASGN:
+ case NODE_CDECL:
+ case NODE_CVDECL:
+ case NODE_CVASGN:
+ expr_type = DEFINED_ASGN;
+ break;
+ }
+
+ if (expr_type) {
+ if (needstr != Qfalse) {
+ VALUE str = rb_iseq_defined_string(expr_type);
+ ADD_INSN1(ret, nd_line(node), putobject, str);
+ }
+ else {
+ ADD_INSN1(ret, nd_line(node), putobject, Qtrue);
+ }
+ return 1;
+ }
+ return 0;
+}
+#undef defined_expr
+
+static int
+defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret,
+ NODE *node, LABEL **lfinish, VALUE needstr)
+{
+ LINK_ELEMENT *lcur = ret->last;
+ int done = defined_expr0(iseq, ret, node, lfinish, needstr);
+ if (lfinish[1]) {
+ int line = nd_line(node);
+ LABEL *lstart = NEW_LABEL(line);
+ LABEL *lend = NEW_LABEL(line);
+ VALUE rescue = NEW_CHILD_ISEQVAL(NEW_NIL(),
+ rb_str_concat(rb_str_new2
+ ("defined guard in "),
+ iseq->location.label),
+ ISEQ_TYPE_DEFINED_GUARD, 0);
+ APPEND_LABEL(ret, lcur, lstart);
+ ADD_LABEL(ret, lend);
+ ADD_CATCH_ENTRY(CATCH_TYPE_RESCUE, lstart, lend, rescue, lfinish[1]);
+ }
+ return done;
+}
+
+#define BUFSIZE 0x100
+
+static VALUE
+make_name_for_block(rb_iseq_t *iseq)
+{
+ int level = 1;
+ rb_iseq_t *ip = iseq;
+
+ if (iseq->parent_iseq != 0) {
+ while (ip->local_iseq != ip) {
+ if (ip->type == ISEQ_TYPE_BLOCK) {
+ level++;
+ }
+ ip = ip->parent_iseq;
+ }
+ }
+
+ if (level == 1) {
+ return rb_sprintf("block in %"PRIsVALUE, ip->location.label);
+ }
+ else {
+ return rb_sprintf("block (%d levels) in %"PRIsVALUE, level, ip->location.label);
+ }
+}
+
+static void
+push_ensure_entry(rb_iseq_t *iseq,
+ struct iseq_compile_data_ensure_node_stack *enl,
+ struct ensure_range *er, NODE *node)
+{
+ enl->ensure_node = node;
+ enl->prev = iseq->compile_data->ensure_node_stack; /* prev */
+ enl->erange = er;
+ iseq->compile_data->ensure_node_stack = enl;
+}
+
+static void
+add_ensure_range(rb_iseq_t *iseq, struct ensure_range *erange,
+ LABEL *lstart, LABEL *lend)
+{
+ struct ensure_range *ne =
+ compile_data_alloc(iseq, sizeof(struct ensure_range));
+
+ while (erange->next != 0) {
+ erange = erange->next;
+ }
+ ne->next = 0;
+ ne->begin = lend;
+ ne->end = erange->end;
+ erange->end = lstart;
+
+ erange->next = ne;
+}
+
+static void
+add_ensure_iseq(LINK_ANCHOR *ret, rb_iseq_t *iseq, int is_return)
+{
+ struct iseq_compile_data_ensure_node_stack *enlp =
+ iseq->compile_data->ensure_node_stack;
+ struct iseq_compile_data_ensure_node_stack *prev_enlp = enlp;
+ DECL_ANCHOR(ensure);
+
+ INIT_ANCHOR(ensure);
+ while (enlp) {
+ if (enlp->erange != 0) {
+ DECL_ANCHOR(ensure_part);
+ LABEL *lstart = NEW_LABEL(0);
+ LABEL *lend = NEW_LABEL(0);
+ INIT_ANCHOR(ensure_part);
+
+ add_ensure_range(iseq, enlp->erange, lstart, lend);
+
+ iseq->compile_data->ensure_node_stack = enlp->prev;
+ ADD_LABEL(ensure_part, lstart);
+ COMPILE_POPED(ensure_part, "ensure part", enlp->ensure_node);
+ ADD_LABEL(ensure_part, lend);
+ ADD_SEQ(ensure, ensure_part);
+ }
+ else {
+ if (!is_return) {
+ break;
+ }
+ }
+ enlp = enlp->prev;
+ }
+ iseq->compile_data->ensure_node_stack = prev_enlp;
+ ADD_SEQ(ret, ensure);
+}
+
+static VALUE
+setup_args(rb_iseq_t *iseq, LINK_ANCHOR *args, NODE *argn, VALUE *flag)
+{
+ VALUE argc = INT2FIX(0);
+ int nsplat = 0;
+ DECL_ANCHOR(arg_block);
+ DECL_ANCHOR(args_splat);
+
+ INIT_ANCHOR(arg_block);
+ INIT_ANCHOR(args_splat);
+ if (argn && nd_type(argn) == NODE_BLOCK_PASS) {
+ COMPILE(arg_block, "block", argn->nd_body);
+ *flag |= VM_CALL_ARGS_BLOCKARG;
+ argn = argn->nd_head;
+ }
+
+ setup_argn:
+ if (argn) {
+ switch (nd_type(argn)) {
+ case NODE_SPLAT: {
+ COMPILE(args, "args (splat)", argn->nd_head);
+ argc = INT2FIX(1);
+ nsplat++;
+ *flag |= VM_CALL_ARGS_SPLAT;
+ break;
+ }
+ case NODE_ARGSCAT:
+ case NODE_ARGSPUSH: {
+ int next_is_array = (nd_type(argn->nd_head) == NODE_ARRAY);
+ DECL_ANCHOR(tmp);
+
+ INIT_ANCHOR(tmp);
+ COMPILE(tmp, "args (cat: splat)", argn->nd_body);
+ if (next_is_array && nsplat == 0) {
+ /* none */
+ }
+ else {
+ if (nd_type(argn) == NODE_ARGSCAT) {
+ ADD_INSN1(tmp, nd_line(argn), splatarray, Qfalse);
+ }
+ else {
+ ADD_INSN1(tmp, nd_line(argn), newarray, INT2FIX(1));
+ }
+ }
+ INSERT_LIST(args_splat, tmp);
+ nsplat++;
+ *flag |= VM_CALL_ARGS_SPLAT;
+
+ if (next_is_array) {
+ argc = INT2FIX(compile_array(iseq, args, argn->nd_head, COMPILE_ARRAY_TYPE_ARGS) + 1);
+ }
+ else {
+ argn = argn->nd_head;
+ goto setup_argn;
+ }
+ break;
+ }
+ case NODE_ARRAY: {
+ argc = INT2FIX(compile_array(iseq, args, argn, COMPILE_ARRAY_TYPE_ARGS));
+ break;
+ }
+ default: {
+ rb_bug("setup_arg: unknown node: %s\n", ruby_node_name(nd_type(argn)));
+ }
+ }
+ }
+
+ if (nsplat > 1) {
+ int i;
+ for (i=1; i<nsplat; i++) {
+ ADD_INSN(args_splat, nd_line(args), concatarray);
+ }
+ }
+
+ if (!LIST_SIZE_ZERO(args_splat)) {
+ ADD_SEQ(args, args_splat);
+ }
+
+ if (*flag & VM_CALL_ARGS_BLOCKARG) {
+ ADD_SEQ(args, arg_block);
+ }
+ return argc;
+}
+
+static VALUE
+build_postexe_iseq(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *body)
+{
+ int line = nd_line(body);
+ VALUE argc = INT2FIX(0);
+ VALUE block = NEW_CHILD_ISEQVAL(body, make_name_for_block(iseq->parent_iseq), ISEQ_TYPE_BLOCK, line);
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_CALL_WITH_BLOCK(ret, line, ID2SYM(id_core_set_postexe), argc, block);
+ iseq_set_local_table(iseq, 0);
+ return Qnil;
+}
+
+/**
+ compile each node
+
+ self: InstructionSequence
+ node: Ruby compiled node
+ poped: This node will be poped
+ */
+static int
+iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
+{
+ enum node_type type;
+ LINK_ELEMENT *saved_last_element = 0;
+ int line;
+
+ if (node == 0) {
+ if (!poped) {
+ debugs("node: NODE_NIL(implicit)\n");
+ ADD_INSN(ret, iseq->compile_data->last_line, putnil);
+ }
+ return COMPILE_OK;
+ }
+
+ iseq->compile_data->last_line = line = (int)nd_line(node);
+ debug_node_start(node);
+
+ type = nd_type(node);
+
+ if (node->flags & NODE_FL_NEWLINE) {
+ ADD_TRACE(ret, line, RUBY_EVENT_LINE);
+ saved_last_element = ret->last;
+ }
+
+ switch (type) {
+ case NODE_BLOCK:{
+ while (node && nd_type(node) == NODE_BLOCK) {
+ COMPILE_(ret, "BLOCK body", node->nd_head,
+ (node->nd_next == 0 && poped == 0) ? 0 : 1);
+ node = node->nd_next;
+ }
+ if (node) {
+ COMPILE_(ret, "BLOCK next", node->nd_next, poped);
+ }
+ break;
+ }
+ case NODE_IF:{
+ DECL_ANCHOR(cond_seq);
+ DECL_ANCHOR(then_seq);
+ DECL_ANCHOR(else_seq);
+ LABEL *then_label, *else_label, *end_label;
+
+ INIT_ANCHOR(cond_seq);
+ INIT_ANCHOR(then_seq);
+ INIT_ANCHOR(else_seq);
+ then_label = NEW_LABEL(line);
+ else_label = NEW_LABEL(line);
+ end_label = NEW_LABEL(line);
+
+ compile_branch_condition(iseq, cond_seq, node->nd_cond,
+ then_label, else_label);
+ COMPILE_(then_seq, "then", node->nd_body, poped);
+ COMPILE_(else_seq, "else", node->nd_else, poped);
+
+ ADD_SEQ(ret, cond_seq);
+
+ ADD_LABEL(ret, then_label);
+ ADD_SEQ(ret, then_seq);
+ ADD_INSNL(ret, line, jump, end_label);
+
+ ADD_LABEL(ret, else_label);
+ ADD_SEQ(ret, else_seq);
+
+ ADD_LABEL(ret, end_label);
+
+ break;
+ }
+ case NODE_CASE:{
+ NODE *vals;
+ NODE *tempnode = node;
+ LABEL *endlabel, *elselabel;
+ DECL_ANCHOR(head);
+ DECL_ANCHOR(body_seq);
+ DECL_ANCHOR(cond_seq);
+ int only_special_literals = 1;
+ VALUE literals = rb_hash_new();
+
+ INIT_ANCHOR(head);
+ INIT_ANCHOR(body_seq);
+ INIT_ANCHOR(cond_seq);
+
+ rb_hash_tbl_raw(literals)->type = &cdhash_type;
+
+ if (node->nd_head == 0) {
+ COMPILE_(ret, "when", node->nd_body, poped);
+ break;
+ }
+ COMPILE(head, "case base", node->nd_head);
+
+ node = node->nd_body;
+ type = nd_type(node);
+ line = nd_line(node);
+
+ if (type != NODE_WHEN) {
+ COMPILE_ERROR((ERROR_ARGS "NODE_CASE: unexpected node. must be NODE_WHEN, but %s", ruby_node_name(type)));
+ }
+
+ endlabel = NEW_LABEL(line);
+ elselabel = NEW_LABEL(line);
+
+ ADD_SEQ(ret, head); /* case VAL */
+
+ while (type == NODE_WHEN) {
+ LABEL *l1;
+
+ l1 = NEW_LABEL(line);
+ ADD_LABEL(body_seq, l1);
+ ADD_INSN(body_seq, line, pop);
+ COMPILE_(body_seq, "when body", node->nd_body, poped);
+ ADD_INSNL(body_seq, line, jump, endlabel);
+
+ vals = node->nd_head;
+ if (vals) {
+ switch (nd_type(vals)) {
+ case NODE_ARRAY:
+ only_special_literals = when_vals(iseq, cond_seq, vals, l1, only_special_literals, literals);
+ break;
+ case NODE_SPLAT:
+ case NODE_ARGSCAT:
+ case NODE_ARGSPUSH:
+ only_special_literals = 0;
+ ADD_INSN (cond_seq, nd_line(vals), dup);
+ COMPILE(cond_seq, "when/cond splat", vals);
+ ADD_INSN1(cond_seq, nd_line(vals), checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE | VM_CHECKMATCH_ARRAY));
+ ADD_INSNL(cond_seq, nd_line(vals), branchif, l1);
+ break;
+ default:
+ rb_bug("NODE_CASE: unknown node (%s)",
+ ruby_node_name(nd_type(vals)));
+ }
+ }
+ else {
+ rb_bug("NODE_CASE: must be NODE_ARRAY, but 0");
+ }
+
+ node = node->nd_next;
+ if (!node) {
+ break;
+ }
+ type = nd_type(node);
+ line = nd_line(node);
+ }
+ /* else */
+ if (node) {
+ ADD_LABEL(cond_seq, elselabel);
+ ADD_INSN(cond_seq, line, pop);
+ COMPILE_(cond_seq, "else", node, poped);
+ ADD_INSNL(cond_seq, line, jump, endlabel);
+ }
+ else {
+ debugs("== else (implicit)\n");
+ ADD_LABEL(cond_seq, elselabel);
+ ADD_INSN(cond_seq, nd_line(tempnode), pop);
+ if (!poped) {
+ ADD_INSN(cond_seq, nd_line(tempnode), putnil);
+ }
+ ADD_INSNL(cond_seq, nd_line(tempnode), jump, endlabel);
+ }
+
+ if (only_special_literals) {
+ iseq_add_mark_object(iseq, literals);
+
+ ADD_INSN(ret, nd_line(tempnode), dup);
+ ADD_INSN2(ret, nd_line(tempnode), opt_case_dispatch, literals, elselabel);
+ }
+
+ ADD_SEQ(ret, cond_seq);
+ ADD_SEQ(ret, body_seq);
+ ADD_LABEL(ret, endlabel);
+ break;
+ }
+ case NODE_WHEN:{
+ NODE *vals;
+ NODE *val;
+ NODE *orig_node = node;
+ LABEL *endlabel;
+ DECL_ANCHOR(body_seq);
+
+ INIT_ANCHOR(body_seq);
+ endlabel = NEW_LABEL(line);
+
+ while (node && nd_type(node) == NODE_WHEN) {
+ LABEL *l1 = NEW_LABEL(line = nd_line(node));
+ ADD_LABEL(body_seq, l1);
+ COMPILE_(body_seq, "when", node->nd_body, poped);
+ ADD_INSNL(body_seq, line, jump, endlabel);
+
+ vals = node->nd_head;
+ if (!vals) {
+ rb_bug("NODE_WHEN: must be NODE_ARRAY, but 0");
+ }
+ switch (nd_type(vals)) {
+ case NODE_ARRAY:
+ while (vals) {
+ val = vals->nd_head;
+ COMPILE(ret, "when2", val);
+ ADD_INSNL(ret, nd_line(val), branchif, l1);
+ vals = vals->nd_next;
+ }
+ break;
+ case NODE_SPLAT:
+ case NODE_ARGSCAT:
+ case NODE_ARGSPUSH:
+ ADD_INSN(ret, nd_line(vals), putnil);
+ COMPILE(ret, "when2/cond splat", vals);
+ ADD_INSN1(ret, nd_line(vals), checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_WHEN | VM_CHECKMATCH_ARRAY));
+ ADD_INSNL(ret, nd_line(vals), branchif, l1);
+ break;
+ default:
+ rb_bug("NODE_WHEN: unknown node (%s)",
+ ruby_node_name(nd_type(vals)));
+ }
+ node = node->nd_next;
+ }
+ /* else */
+ COMPILE_(ret, "else", node, poped);
+ ADD_INSNL(ret, nd_line(orig_node), jump, endlabel);
+
+ ADD_SEQ(ret, body_seq);
+ ADD_LABEL(ret, endlabel);
+
+ break;
+ }
+ case NODE_OPT_N:
+ case NODE_WHILE:
+ case NODE_UNTIL:{
+ LABEL *prev_start_label = iseq->compile_data->start_label;
+ LABEL *prev_end_label = iseq->compile_data->end_label;
+ LABEL *prev_redo_label = iseq->compile_data->redo_label;
+ int prev_loopval_popped = iseq->compile_data->loopval_popped;
+
+ struct iseq_compile_data_ensure_node_stack enl;
+
+ LABEL *next_label = iseq->compile_data->start_label = NEW_LABEL(line); /* next */
+ LABEL *redo_label = iseq->compile_data->redo_label = NEW_LABEL(line); /* redo */
+ LABEL *break_label = iseq->compile_data->end_label = NEW_LABEL(line); /* break */
+ LABEL *end_label = NEW_LABEL(line);
+
+ LABEL *next_catch_label = NEW_LABEL(line);
+ LABEL *tmp_label = NULL;
+
+ iseq->compile_data->loopval_popped = 0;
+ push_ensure_entry(iseq, &enl, 0, 0);
+
+ if (type == NODE_OPT_N || node->nd_state == 1) {
+ ADD_INSNL(ret, line, jump, next_label);
+ }
+ else {
+ tmp_label = NEW_LABEL(line);
+ ADD_INSNL(ret, line, jump, tmp_label);
+ }
+ ADD_INSN(ret, line, putnil);
+ ADD_LABEL(ret, next_catch_label);
+ ADD_INSN(ret, line, pop);
+ ADD_INSNL(ret, line, jump, next_label);
+ if (tmp_label) ADD_LABEL(ret, tmp_label);
+
+ ADD_LABEL(ret, redo_label);
+ COMPILE_POPED(ret, "while body", node->nd_body);
+ ADD_LABEL(ret, next_label); /* next */
+
+ if (type == NODE_WHILE) {
+ compile_branch_condition(iseq, ret, node->nd_cond,
+ redo_label, end_label);
+ }
+ else if (type == NODE_UNTIL) {
+ /* until */
+ compile_branch_condition(iseq, ret, node->nd_cond,
+ end_label, redo_label);
+ }
+ else {
+ ADD_CALL_RECEIVER(ret, line);
+ ADD_CALL(ret, line, ID2SYM(idGets), INT2FIX(0));
+ ADD_INSNL(ret, line, branchif, redo_label);
+ /* opt_n */
+ }
+
+ ADD_LABEL(ret, end_label);
+
+ if (node->nd_state == Qundef) {
+ /* ADD_INSN(ret, line, putundef); */
+ rb_bug("unsupported: putundef");
+ }
+ else {
+ ADD_INSN(ret, line, putnil);
+ }
+
+ ADD_LABEL(ret, break_label); /* break */
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+
+ ADD_CATCH_ENTRY(CATCH_TYPE_BREAK, redo_label, break_label,
+ 0, break_label);
+ ADD_CATCH_ENTRY(CATCH_TYPE_NEXT, redo_label, break_label, 0,
+ next_catch_label);
+ ADD_CATCH_ENTRY(CATCH_TYPE_REDO, redo_label, break_label, 0,
+ iseq->compile_data->redo_label);
+
+ iseq->compile_data->start_label = prev_start_label;
+ iseq->compile_data->end_label = prev_end_label;
+ iseq->compile_data->redo_label = prev_redo_label;
+ iseq->compile_data->loopval_popped = prev_loopval_popped;
+ iseq->compile_data->ensure_node_stack = iseq->compile_data->ensure_node_stack->prev;
+ break;
+ }
+ case NODE_ITER:
+ case NODE_FOR:{
+ VALUE prevblock = iseq->compile_data->current_block;
+ LABEL *retry_label = NEW_LABEL(line);
+ LABEL *retry_end_l = NEW_LABEL(line);
+
+ ADD_LABEL(ret, retry_label);
+ if (nd_type(node) == NODE_FOR) {
+ COMPILE(ret, "iter caller (for)", node->nd_iter);
+
+ iseq->compile_data->current_block =
+ NEW_CHILD_ISEQVAL(node->nd_body, make_name_for_block(iseq),
+ ISEQ_TYPE_BLOCK, line);
+
+ ADD_SEND_R(ret, line, ID2SYM(idEach), INT2FIX(0),
+ iseq->compile_data->current_block, INT2FIX(0));
+ }
+ else {
+ iseq->compile_data->current_block =
+ NEW_CHILD_ISEQVAL(node->nd_body, make_name_for_block(iseq),
+ ISEQ_TYPE_BLOCK, line);
+ COMPILE(ret, "iter caller", node->nd_iter);
+ }
+ ADD_LABEL(ret, retry_end_l);
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+
+ iseq->compile_data->current_block = prevblock;
+
+ ADD_CATCH_ENTRY(CATCH_TYPE_BREAK, retry_label, retry_end_l, 0, retry_end_l);
+
+ break;
+ }
+ case NODE_BREAK:{
+ unsigned long level = 0;
+
+ if (iseq->compile_data->redo_label != 0) {
+ /* while/until */
+ LABEL *splabel = NEW_LABEL(0);
+ ADD_LABEL(ret, splabel);
+ ADD_ADJUST(ret, line, iseq->compile_data->redo_label);
+ COMPILE_(ret, "break val (while/until)", node->nd_stts, iseq->compile_data->loopval_popped);
+ add_ensure_iseq(ret, iseq, 0);
+ ADD_INSNL(ret, line, jump, iseq->compile_data->end_label);
+ ADD_ADJUST_RESTORE(ret, splabel);
+
+ if (!poped) {
+ ADD_INSN(ret, line, putnil);
+ }
+ }
+ else if (iseq->type == ISEQ_TYPE_BLOCK) {
+ break_by_insn:
+ /* escape from block */
+ COMPILE(ret, "break val (block)", node->nd_stts);
+ ADD_INSN1(ret, line, throw, INT2FIX(level | 0x02) /* TAG_BREAK */ );
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ }
+ else if (iseq->type == ISEQ_TYPE_EVAL) {
+ break_in_eval:
+ COMPILE_ERROR((ERROR_ARGS "Can't escape from eval with break"));
+ }
+ else {
+ rb_iseq_t *ip = iseq->parent_iseq;
+ while (ip) {
+ if (!ip->compile_data) {
+ ip = 0;
+ break;
+ }
+
+ level++;
+ if (ip->compile_data->redo_label != 0) {
+ level = 0x8000;
+ if (ip->compile_data->loopval_popped == 0) {
+ /* need value */
+ level |= 0x4000;
+ }
+ goto break_by_insn;
+ }
+ else if (ip->type == ISEQ_TYPE_BLOCK) {
+ level <<= 16;
+ goto break_by_insn;
+ }
+ else if (ip->type == ISEQ_TYPE_EVAL) {
+ goto break_in_eval;
+ }
+
+ ip = ip->parent_iseq;
+ }
+ COMPILE_ERROR((ERROR_ARGS "Invalid break"));
+ }
+ break;
+ }
+ case NODE_NEXT:{
+ unsigned long level = 0;
+
+ if (iseq->compile_data->redo_label != 0) {
+ LABEL *splabel = NEW_LABEL(0);
+ debugs("next in while loop\n");
+ ADD_LABEL(ret, splabel);
+ COMPILE(ret, "next val/valid syntax?", node->nd_stts);
+ add_ensure_iseq(ret, iseq, 0);
+ ADD_ADJUST(ret, line, iseq->compile_data->redo_label);
+ ADD_INSNL(ret, line, jump, iseq->compile_data->start_label);
+ ADD_ADJUST_RESTORE(ret, splabel);
+ if (!poped) {
+ ADD_INSN(ret, line, putnil);
+ }
+ }
+ else if (iseq->compile_data->end_label) {
+ LABEL *splabel = NEW_LABEL(0);
+ debugs("next in block\n");
+ ADD_LABEL(ret, splabel);
+ ADD_ADJUST(ret, line, iseq->compile_data->start_label);
+ COMPILE(ret, "next val", node->nd_stts);
+ add_ensure_iseq(ret, iseq, 0);
+ ADD_INSNL(ret, line, jump, iseq->compile_data->end_label);
+ ADD_ADJUST_RESTORE(ret, splabel);
+
+ if (!poped) {
+ ADD_INSN(ret, line, putnil);
+ }
+ }
+ else if (iseq->type == ISEQ_TYPE_EVAL) {
+ next_in_eval:
+ COMPILE_ERROR((ERROR_ARGS "Can't escape from eval with next"));
+ }
+ else {
+ rb_iseq_t *ip;
+ ip = iseq;
+ while (ip) {
+ if (!ip->compile_data) {
+ ip = 0;
+ break;
+ }
+
+ level = 0x8000 | 0x4000;
+ if (ip->compile_data->redo_label != 0) {
+ /* while loop */
+ break;
+ }
+ else if (ip->type == ISEQ_TYPE_BLOCK) {
+ break;
+ }
+ else if (ip->type == ISEQ_TYPE_EVAL) {
+ goto next_in_eval;
+ }
+
+ ip = ip->parent_iseq;
+ }
+ if (ip != 0) {
+ COMPILE(ret, "next val", node->nd_stts);
+ ADD_INSN1(ret, line, throw, INT2FIX(level | 0x03) /* TAG_NEXT */ );
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ }
+ else {
+ COMPILE_ERROR((ERROR_ARGS "Invalid next"));
+ }
+ }
+ break;
+ }
+ case NODE_REDO:{
+ if (iseq->compile_data->redo_label) {
+ LABEL *splabel = NEW_LABEL(0);
+ debugs("redo in while");
+ ADD_LABEL(ret, splabel);
+ ADD_ADJUST(ret, line, iseq->compile_data->redo_label);
+ add_ensure_iseq(ret, iseq, 0);
+ ADD_INSNL(ret, line, jump, iseq->compile_data->redo_label);
+ ADD_ADJUST_RESTORE(ret, splabel);
+ if (!poped) {
+ ADD_INSN(ret, line, putnil);
+ }
+ }
+ else if (iseq->type == ISEQ_TYPE_EVAL) {
+ redo_in_eval:
+ COMPILE_ERROR((ERROR_ARGS "Can't escape from eval with redo"));
+ }
+ else if (iseq->compile_data->start_label) {
+ LABEL *splabel = NEW_LABEL(0);
+
+ debugs("redo in block");
+ ADD_LABEL(ret, splabel);
+ add_ensure_iseq(ret, iseq, 0);
+ ADD_ADJUST(ret, line, iseq->compile_data->start_label);
+ ADD_INSNL(ret, line, jump, iseq->compile_data->start_label);
+ ADD_ADJUST_RESTORE(ret, splabel);
+
+ if (!poped) {
+ ADD_INSN(ret, line, putnil);
+ }
+ }
+ else {
+ rb_iseq_t *ip;
+ unsigned long level;
+ level = 0x8000 | 0x4000;
+ ip = iseq;
+ while (ip) {
+ if (!ip->compile_data) {
+ ip = 0;
+ break;
+ }
+
+ if (ip->compile_data->redo_label != 0) {
+ break;
+ }
+ else if (ip->type == ISEQ_TYPE_BLOCK) {
+ break;
+ }
+ else if (ip->type == ISEQ_TYPE_EVAL) {
+ goto redo_in_eval;
+ }
+
+ ip = ip->parent_iseq;
+ }
+ if (ip != 0) {
+ ADD_INSN(ret, line, putnil);
+ ADD_INSN1(ret, line, throw, INT2FIX(level | 0x05) /* TAG_REDO */ );
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ }
+ else {
+ COMPILE_ERROR((ERROR_ARGS "Invalid redo"));
+ }
+ }
+ break;
+ }
+ case NODE_RETRY:{
+ if (iseq->type == ISEQ_TYPE_RESCUE) {
+ ADD_INSN(ret, line, putnil);
+ ADD_INSN1(ret, line, throw, INT2FIX(0x04) /* TAG_RETRY */ );
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ }
+ else {
+ COMPILE_ERROR((ERROR_ARGS "Invalid retry"));
+ }
+ break;
+ }
+ case NODE_BEGIN:{
+ COMPILE_(ret, "NODE_BEGIN", node->nd_body, poped);
+ break;
+ }
+ case NODE_RESCUE:{
+ LABEL *lstart = NEW_LABEL(line);
+ LABEL *lend = NEW_LABEL(line);
+ LABEL *lcont = NEW_LABEL(line);
+ VALUE rescue = NEW_CHILD_ISEQVAL(
+ node->nd_resq,
+ rb_str_concat(rb_str_new2("rescue in "), iseq->location.label),
+ ISEQ_TYPE_RESCUE, line);
+
+ ADD_LABEL(ret, lstart);
+ COMPILE(ret, "rescue head", node->nd_head);
+ ADD_LABEL(ret, lend);
+ if (node->nd_else) {
+ ADD_INSN(ret, line, pop);
+ COMPILE(ret, "rescue else", node->nd_else);
+ }
+ ADD_INSN(ret, line, nop);
+ ADD_LABEL(ret, lcont);
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+
+ /* register catch entry */
+ ADD_CATCH_ENTRY(CATCH_TYPE_RESCUE, lstart, lend, rescue, lcont);
+ ADD_CATCH_ENTRY(CATCH_TYPE_RETRY, lend, lcont, 0, lstart);
+ break;
+ }
+ case NODE_RESBODY:{
+ NODE *resq = node;
+ NODE *narg;
+ LABEL *label_miss, *label_hit;
+
+ while (resq) {
+ label_miss = NEW_LABEL(line);
+ label_hit = NEW_LABEL(line);
+
+ narg = resq->nd_args;
+ if (narg) {
+ switch (nd_type(narg)) {
+ case NODE_ARRAY:
+ while (narg) {
+ ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(0));
+ COMPILE(ret, "rescue arg", narg->nd_head);
+ ADD_INSN1(ret, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE));
+ ADD_INSNL(ret, line, branchif, label_hit);
+ narg = narg->nd_next;
+ }
+ break;
+ case NODE_SPLAT:
+ case NODE_ARGSCAT:
+ case NODE_ARGSPUSH:
+ ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(0));
+ COMPILE(ret, "rescue/cond splat", narg);
+ ADD_INSN1(ret, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE | VM_CHECKMATCH_ARRAY));
+ ADD_INSNL(ret, line, branchif, label_hit);
+ break;
+ default:
+ rb_bug("NODE_RESBODY: unknown node (%s)",
+ ruby_node_name(nd_type(narg)));
+ }
+ }
+ else {
+ ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(0));
+ ADD_INSN1(ret, line, putobject, rb_eStandardError);
+ ADD_INSN1(ret, line, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE));
+ ADD_INSNL(ret, line, branchif, label_hit);
+ }
+ ADD_INSNL(ret, line, jump, label_miss);
+ ADD_LABEL(ret, label_hit);
+ COMPILE(ret, "resbody body", resq->nd_body);
+ if (iseq->compile_data->option->tailcall_optimization) {
+ ADD_INSN(ret, line, nop);
+ }
+ ADD_INSN(ret, line, leave);
+ ADD_LABEL(ret, label_miss);
+ resq = resq->nd_head;
+ }
+ break;
+ }
+ case NODE_ENSURE:{
+ DECL_ANCHOR(ensr);
+ VALUE ensure = NEW_CHILD_ISEQVAL(node->nd_ensr,
+ rb_str_concat(rb_str_new2
+ ("ensure in "),
+ iseq->location.label),
+ ISEQ_TYPE_ENSURE, line);
+ LABEL *lstart = NEW_LABEL(line);
+ LABEL *lend = NEW_LABEL(line);
+ LABEL *lcont = NEW_LABEL(line);
+ struct ensure_range er;
+ struct iseq_compile_data_ensure_node_stack enl;
+ struct ensure_range *erange;
+
+ INIT_ANCHOR(ensr);
+ COMPILE_POPED(ensr, "ensure ensr", node->nd_ensr);
+
+ er.begin = lstart;
+ er.end = lend;
+ er.next = 0;
+ push_ensure_entry(iseq, &enl, &er, node->nd_ensr);
+
+ ADD_LABEL(ret, lstart);
+ COMPILE_(ret, "ensure head", node->nd_head, poped);
+ ADD_LABEL(ret, lend);
+ if (ensr->anchor.next == 0) {
+ ADD_INSN(ret, line, nop);
+ }
+ else {
+ ADD_SEQ(ret, ensr);
+ }
+ ADD_LABEL(ret, lcont);
+
+ erange = iseq->compile_data->ensure_node_stack->erange;
+ while (erange) {
+ ADD_CATCH_ENTRY(CATCH_TYPE_ENSURE, erange->begin, erange->end,
+ ensure, lcont);
+ erange = erange->next;
+ }
+
+ iseq->compile_data->ensure_node_stack = enl.prev;
+ break;
+ }
+
+ case NODE_AND:
+ case NODE_OR:{
+ LABEL *end_label = NEW_LABEL(line);
+ COMPILE(ret, "nd_1st", node->nd_1st);
+ if (!poped) {
+ ADD_INSN(ret, line, dup);
+ }
+ if (type == NODE_AND) {
+ ADD_INSNL(ret, line, branchunless, end_label);
+ }
+ else {
+ ADD_INSNL(ret, line, branchif, end_label);
+ }
+ if (!poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ COMPILE_(ret, "nd_2nd", node->nd_2nd, poped);
+ ADD_LABEL(ret, end_label);
+ break;
+ }
+
+ case NODE_MASGN:{
+ compile_massign(iseq, ret, node, poped);
+ break;
+ }
+
+ case NODE_LASGN:{
+ ID id = node->nd_vid;
+ int idx = iseq->local_iseq->local_size - get_local_var_idx(iseq, id);
+
+ debugs("lvar: %s idx: %d\n", rb_id2name(id), idx);
+ COMPILE(ret, "rvalue", node->nd_value);
+
+ if (!poped) {
+ ADD_INSN(ret, line, dup);
+ }
+ ADD_INSN2(ret, line, setlocal, INT2FIX(idx), INT2FIX(get_lvar_level(iseq)));
+
+ break;
+ }
+ case NODE_DASGN:
+ case NODE_DASGN_CURR:{
+ int idx, lv, ls;
+ COMPILE(ret, "dvalue", node->nd_value);
+ debugp_param("dassn id", rb_str_new2(rb_id2name(node->nd_vid) ? rb_id2name(node->nd_vid) : "*"));
+
+ if (!poped) {
+ ADD_INSN(ret, line, dup);
+ }
+
+ idx = get_dyna_var_idx(iseq, node->nd_vid, &lv, &ls);
+
+ if (idx < 0) {
+ rb_bug("NODE_DASGN(_CURR): unknown id (%s)", rb_id2name(node->nd_vid));
+ }
+
+ ADD_INSN2(ret, line, setlocal, INT2FIX(ls - idx), INT2FIX(lv));
+ break;
+ }
+ case NODE_GASGN:{
+ COMPILE(ret, "lvalue", node->nd_value);
+
+ if (!poped) {
+ ADD_INSN(ret, line, dup);
+ }
+ ADD_INSN1(ret, line, setglobal,
+ ((VALUE)node->nd_entry | 1));
+ break;
+ }
+ case NODE_IASGN:
+ case NODE_IASGN2:{
+ COMPILE(ret, "lvalue", node->nd_value);
+ if (!poped) {
+ ADD_INSN(ret, line, dup);
+ }
+ ADD_INSN2(ret, line, setinstancevariable,
+ ID2SYM(node->nd_vid), INT2FIX(iseq->is_size++));
+ break;
+ }
+ case NODE_CDECL:{
+ COMPILE(ret, "lvalue", node->nd_value);
+
+ if (!poped) {
+ ADD_INSN(ret, line, dup);
+ }
+
+ if (node->nd_vid) {
+ ADD_INSN1(ret, line, putspecialobject,
+ INT2FIX(VM_SPECIAL_OBJECT_CONST_BASE));
+ ADD_INSN1(ret, line, setconstant, ID2SYM(node->nd_vid));
+ }
+ else {
+ compile_cpath(ret, iseq, node->nd_else);
+ ADD_INSN1(ret, line, setconstant, ID2SYM(node->nd_else->nd_mid));
+ }
+ break;
+ }
+ case NODE_CVASGN:{
+ COMPILE(ret, "cvasgn val", node->nd_value);
+ if (!poped) {
+ ADD_INSN(ret, line, dup);
+ }
+ ADD_INSN1(ret, line, setclassvariable,
+ ID2SYM(node->nd_vid));
+ break;
+ }
+ case NODE_OP_ASGN1: {
+ DECL_ANCHOR(args);
+ VALUE argc;
+ VALUE flag = 0;
+ ID id = node->nd_mid;
+ int boff = 0;
+
+ /*
+ * a[x] (op)= y
+ *
+ * nil # nil
+ * eval a # nil a
+ * eval x # nil a x
+ * dupn 2 # nil a x a x
+ * send :[] # nil a x a[x]
+ * eval y # nil a x a[x] y
+ * send op # nil a x ret
+ * setn 3 # ret a x ret
+ * send []= # ret ?
+ * pop # ret
+ */
+
+ /*
+ * nd_recv[nd_args->nd_body] (nd_mid)= nd_args->nd_head;
+ * NODE_OP_ASGN nd_recv
+ * nd_args->nd_head
+ * nd_args->nd_body
+ * nd_mid
+ */
+
+ if (!poped) {
+ ADD_INSN(ret, line, putnil);
+ }
+ COMPILE(ret, "NODE_OP_ASGN1 recv", node->nd_recv);
+ switch (nd_type(node->nd_args->nd_head)) {
+ case NODE_ZARRAY:
+ argc = INT2FIX(0);
+ break;
+ case NODE_BLOCK_PASS:
+ boff = 1;
+ default:
+ INIT_ANCHOR(args);
+ argc = setup_args(iseq, args, node->nd_args->nd_head, &flag);
+ ADD_SEQ(ret, args);
+ }
+ ADD_INSN1(ret, line, dupn, FIXNUM_INC(argc, 1 + boff));
+ ADD_SEND_R(ret, line, ID2SYM(idAREF), argc, Qfalse, LONG2FIX(flag));
+
+ if (id == 0 || id == 1) {
+ /* 0: or, 1: and
+ a[x] ||= y
+
+ unless/if a[x]
+ a[x]= y
+ else
+ nil
+ end
+ */
+ LABEL *label = NEW_LABEL(line);
+ LABEL *lfin = NEW_LABEL(line);
+
+ ADD_INSN(ret, line, dup);
+ if (id == 0) {
+ /* or */
+ ADD_INSNL(ret, line, branchif, label);
+ }
+ else {
+ /* and */
+ ADD_INSNL(ret, line, branchunless, label);
+ }
+ ADD_INSN(ret, line, pop);
+
+ COMPILE(ret, "NODE_OP_ASGN1 args->body: ", node->nd_args->nd_body);
+ if (!poped) {
+ ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 2+boff));
+ }
+ if (flag & VM_CALL_ARGS_SPLAT) {
+ ADD_INSN1(ret, line, newarray, INT2FIX(1));
+ if (boff > 0) {
+ ADD_INSN1(ret, line, dupn, INT2FIX(3));
+ ADD_INSN(ret, line, swap);
+ ADD_INSN(ret, line, pop);
+ }
+ ADD_INSN(ret, line, concatarray);
+ if (boff > 0) {
+ ADD_INSN1(ret, line, setn, INT2FIX(3));
+ ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, line, pop);
+ }
+ ADD_SEND_R(ret, line, ID2SYM(idASET),
+ argc, Qfalse, LONG2FIX(flag));
+ }
+ else {
+ if (boff > 0)
+ ADD_INSN(ret, line, swap);
+ ADD_SEND_R(ret, line, ID2SYM(idASET),
+ FIXNUM_INC(argc, 1), Qfalse, LONG2FIX(flag));
+ }
+ ADD_INSN(ret, line, pop);
+ ADD_INSNL(ret, line, jump, lfin);
+ ADD_LABEL(ret, label);
+ if (!poped) {
+ ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 2+boff));
+ }
+ ADD_INSN1(ret, line, adjuststack, FIXNUM_INC(argc, 2+boff));
+ ADD_LABEL(ret, lfin);
+ }
+ else {
+ COMPILE(ret, "NODE_OP_ASGN1 args->body: ", node->nd_args->nd_body);
+ ADD_SEND(ret, line, ID2SYM(id), INT2FIX(1));
+ if (!poped) {
+ ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 2+boff));
+ }
+ if (flag & VM_CALL_ARGS_SPLAT) {
+ ADD_INSN1(ret, line, newarray, INT2FIX(1));
+ if (boff > 0) {
+ ADD_INSN1(ret, line, dupn, INT2FIX(3));
+ ADD_INSN(ret, line, swap);
+ ADD_INSN(ret, line, pop);
+ }
+ ADD_INSN(ret, line, concatarray);
+ if (boff > 0) {
+ ADD_INSN1(ret, line, setn, INT2FIX(3));
+ ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, line, pop);
+ }
+ ADD_SEND_R(ret, line, ID2SYM(idASET),
+ argc, Qfalse, LONG2FIX(flag));
+ }
+ else {
+ if (boff > 0)
+ ADD_INSN(ret, line, swap);
+ ADD_SEND_R(ret, line, ID2SYM(idASET),
+ FIXNUM_INC(argc, 1), Qfalse, LONG2FIX(flag));
+ }
+ ADD_INSN(ret, line, pop);
+ }
+
+ break;
+ }
+ case NODE_OP_ASGN2:{
+ ID atype = node->nd_next->nd_mid;
+ LABEL *lfin = NEW_LABEL(line);
+ LABEL *lcfin = NEW_LABEL(line);
+ /*
+ class C; attr_accessor :c; end
+ r = C.new
+ r.a &&= v # asgn2
+
+ eval r # r
+ dup # r r
+ eval r.a # r o
+
+ # or
+ dup # r o o
+ if lcfin # r o
+ pop # r
+ eval v # r v
+ swap # v r
+ topn 1 # v r v
+ send a= # v ?
+ jump lfin # v ?
+
+ lcfin: # r o
+ swap # o r
+
+ lfin: # o ?
+ pop # o
+
+ # and
+ dup # r o o
+ unless lcfin
+ pop # r
+ eval v # r v
+ swap # v r
+ topn 1 # v r v
+ send a= # v ?
+ jump lfin # v ?
+
+ # others
+ eval v # r o v
+ send ?? # r w
+ send a= # w
+
+ */
+
+ COMPILE(ret, "NODE_OP_ASGN2#recv", node->nd_recv);
+ ADD_INSN(ret, line, dup);
+ ADD_SEND(ret, line, ID2SYM(node->nd_next->nd_vid),
+ INT2FIX(0));
+
+ if (atype == 0 || atype == 1) { /* 0: OR or 1: AND */
+ ADD_INSN(ret, line, dup);
+ if (atype == 0) {
+ ADD_INSNL(ret, line, branchif, lcfin);
+ }
+ else {
+ ADD_INSNL(ret, line, branchunless, lcfin);
+ }
+ ADD_INSN(ret, line, pop);
+ COMPILE(ret, "NODE_OP_ASGN2 val", node->nd_value);
+ ADD_INSN(ret, line, swap);
+ ADD_INSN1(ret, line, topn, INT2FIX(1));
+ ADD_SEND(ret, line, ID2SYM(node->nd_next->nd_aid),
+ INT2FIX(1));
+ ADD_INSNL(ret, line, jump, lfin);
+
+ ADD_LABEL(ret, lcfin);
+ ADD_INSN(ret, line, swap);
+
+ ADD_LABEL(ret, lfin);
+ ADD_INSN(ret, line, pop);
+ if (poped) {
+ /* we can apply more optimize */
+ ADD_INSN(ret, line, pop);
+ }
+ }
+ else {
+ COMPILE(ret, "NODE_OP_ASGN2 val", node->nd_value);
+ ADD_SEND(ret, line, ID2SYM(node->nd_next->nd_mid),
+ INT2FIX(1));
+ if (!poped) {
+ ADD_INSN(ret, line, swap);
+ ADD_INSN1(ret, line, topn, INT2FIX(1));
+ }
+ ADD_SEND(ret, line, ID2SYM(node->nd_next->nd_aid),
+ INT2FIX(1));
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_OP_CDECL: {
+ LABEL *lfin = 0;
+ LABEL *lassign = 0;
+ ID mid;
+
+ switch (nd_type(node->nd_head)) {
+ case NODE_COLON3:
+ ADD_INSN1(ret, line, putobject, rb_cObject);
+ break;
+ case NODE_COLON2:
+ COMPILE(ret, "NODE_OP_CDECL/colon2#nd_head", node->nd_head->nd_head);
+ break;
+ default:
+ do {
+ COMPILE_ERROR((ERROR_ARGS "%s: invalid node in NODE_OP_CDECL",
+ ruby_node_name(nd_type(node->nd_head))));
+ } while (0);
+ return COMPILE_NG;
+ }
+ mid = node->nd_head->nd_mid;
+ /* cref */
+ if (node->nd_aid == 0) {
+ lassign = NEW_LABEL(line);
+ ADD_INSN(ret, line, dup); /* cref cref */
+ ADD_INSN3(ret, line, defined, INT2FIX(DEFINED_CONST),
+ ID2SYM(mid), Qfalse); /* cref bool */
+ ADD_INSNL(ret, line, branchunless, lassign); /* cref */
+ }
+ ADD_INSN(ret, line, dup); /* cref cref */
+ ADD_INSN1(ret, line, getconstant, ID2SYM(mid)); /* cref obj */
+
+ if (node->nd_aid == 0 || node->nd_aid == 1) {
+ lfin = NEW_LABEL(line);
+ if (!poped) ADD_INSN(ret, line, dup); /* cref [obj] obj */
+ if (node->nd_aid == 0)
+ ADD_INSNL(ret, line, branchif, lfin);
+ else
+ ADD_INSNL(ret, line, branchunless, lfin);
+ /* cref [obj] */
+ if (!poped) ADD_INSN(ret, line, pop); /* cref */
+ if (lassign) ADD_LABEL(ret, lassign);
+ COMPILE(ret, "NODE_OP_CDECL#nd_value", node->nd_value);
+ /* cref value */
+ if (poped)
+ ADD_INSN1(ret, line, topn, INT2FIX(1)); /* cref value cref */
+ else {
+ ADD_INSN1(ret, line, dupn, INT2FIX(2)); /* cref value cref value */
+ ADD_INSN(ret, line, swap); /* cref value value cref */
+ }
+ ADD_INSN1(ret, line, setconstant, ID2SYM(mid)); /* cref [value] */
+ ADD_LABEL(ret, lfin); /* cref [value] */
+ if (!poped) ADD_INSN(ret, line, swap); /* [value] cref */
+ ADD_INSN(ret, line, pop); /* [value] */
+ }
+ else {
+ COMPILE(ret, "NODE_OP_CDECL#nd_value", node->nd_value);
+ /* cref obj value */
+ ADD_CALL(ret, line, ID2SYM(node->nd_aid), INT2FIX(1));
+ /* cref value */
+ ADD_INSN(ret, line, swap); /* value cref */
+ if (!poped) {
+ ADD_INSN1(ret, line, topn, INT2FIX(1)); /* value cref value */
+ ADD_INSN(ret, line, swap); /* value value cref */
+ }
+ ADD_INSN1(ret, line, setconstant, ID2SYM(mid));
+ }
+ break;
+ }
+ case NODE_OP_ASGN_AND:
+ case NODE_OP_ASGN_OR:{
+ LABEL *lfin = NEW_LABEL(line);
+ LABEL *lassign;
+
+ if (nd_type(node) == NODE_OP_ASGN_OR) {
+ LABEL *lfinish[2];
+ lfinish[0] = lfin;
+ lfinish[1] = 0;
+ defined_expr(iseq, ret, node->nd_head, lfinish, Qfalse);
+ lassign = lfinish[1];
+ if (!lassign) {
+ lassign = NEW_LABEL(line);
+ }
+ ADD_INSNL(ret, line, branchunless, lassign);
+ }
+ else {
+ lassign = NEW_LABEL(line);
+ }
+
+ COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_head", node->nd_head);
+ ADD_INSN(ret, line, dup);
+
+ if (nd_type(node) == NODE_OP_ASGN_AND) {
+ ADD_INSNL(ret, line, branchunless, lfin);
+ }
+ else {
+ ADD_INSNL(ret, line, branchif, lfin);
+ }
+
+ ADD_INSN(ret, line, pop);
+ ADD_LABEL(ret, lassign);
+ COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_value", node->nd_value);
+ ADD_LABEL(ret, lfin);
+
+ if (poped) {
+ /* we can apply more optimize */
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_CALL:
+ if (node->nd_recv && nd_type(node->nd_recv) == NODE_STR &&
+ node->nd_mid == idFreeze && node->nd_args == NULL)
+ {
+ VALUE str = rb_fstring(node->nd_recv->nd_lit);
+ iseq_add_mark_object(iseq, str);
+ ADD_INSN1(ret, line, opt_str_freeze, str);
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_FCALL:
+ case NODE_VCALL:{ /* VCALL: variable or call */
+ /*
+ call: obj.method(...)
+ fcall: func(...)
+ vcall: func
+ */
+ DECL_ANCHOR(recv);
+ DECL_ANCHOR(args);
+ ID mid = node->nd_mid;
+ VALUE argc;
+ VALUE flag = 0;
+ VALUE parent_block = iseq->compile_data->current_block;
+ iseq->compile_data->current_block = Qfalse;
+
+ INIT_ANCHOR(recv);
+ INIT_ANCHOR(args);
+#if SUPPORT_JOKE
+ if (nd_type(node) == NODE_VCALL) {
+ ID id_bitblt;
+ ID id_answer;
+
+ CONST_ID(id_bitblt, "bitblt");
+ CONST_ID(id_answer, "the_answer_to_life_the_universe_and_everything");
+
+ if (mid == id_bitblt) {
+ ADD_INSN(ret, line, bitblt);
+ break;
+ }
+ else if (mid == id_answer) {
+ ADD_INSN(ret, line, answer);
+ break;
+ }
+ }
+ /* only joke */
+ {
+ ID goto_id;
+ ID label_id;
+
+ CONST_ID(goto_id, "__goto__");
+ CONST_ID(label_id, "__label__");
+
+ if (nd_type(node) == NODE_FCALL &&
+ (mid == goto_id || mid == label_id)) {
+ LABEL *label;
+ st_data_t data;
+ st_table *labels_table = iseq->compile_data->labels_table;
+ ID label_name;
+
+ if (!labels_table) {
+ labels_table = st_init_numtable();
+ iseq->compile_data->labels_table = labels_table;
+ }
+ if (nd_type(node->nd_args->nd_head) == NODE_LIT &&
+ SYMBOL_P(node->nd_args->nd_head->nd_lit)) {
+
+ label_name = SYM2ID(node->nd_args->nd_head->nd_lit);
+ if (!st_lookup(labels_table, (st_data_t)label_name, &data)) {
+ label = NEW_LABEL(line);
+ label->position = line;
+ st_insert(labels_table, (st_data_t)label_name, (st_data_t)label);
+ }
+ else {
+ label = (LABEL *)data;
+ }
+ }
+ else {
+ COMPILE_ERROR((ERROR_ARGS "invalid goto/label format"));
+ }
+
+
+ if (mid == goto_id) {
+ ADD_INSNL(ret, line, jump, label);
+ }
+ else {
+ ADD_LABEL(ret, label);
+ }
+ break;
+ }
+ }
+#endif
+ /* receiver */
+ if (type == NODE_CALL) {
+ COMPILE(recv, "recv", node->nd_recv);
+ }
+ else if (type == NODE_FCALL || type == NODE_VCALL) {
+ ADD_CALL_RECEIVER(recv, line);
+ }
+
+ /* args */
+ if (nd_type(node) != NODE_VCALL) {
+ argc = setup_args(iseq, args, node->nd_args, &flag);
+ }
+ else {
+ argc = INT2FIX(0);
+ }
+
+ ADD_SEQ(ret, recv);
+ ADD_SEQ(ret, args);
+
+ debugp_param("call args argc", argc);
+ debugp_param("call method", ID2SYM(mid));
+
+ switch (nd_type(node)) {
+ case NODE_VCALL:
+ flag |= VM_CALL_VCALL;
+ /* VCALL is funcall, so fall through */
+ case NODE_FCALL:
+ flag |= VM_CALL_FCALL;
+ }
+
+ ADD_SEND_R(ret, line, ID2SYM(mid),
+ argc, parent_block, LONG2FIX(flag));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_SUPER:
+ case NODE_ZSUPER:{
+ DECL_ANCHOR(args);
+ int argc;
+ VALUE flag = 0;
+ VALUE parent_block = iseq->compile_data->current_block;
+
+ INIT_ANCHOR(args);
+ iseq->compile_data->current_block = Qfalse;
+ if (nd_type(node) == NODE_SUPER) {
+ VALUE vargc = setup_args(iseq, args, node->nd_args, &flag);
+ argc = FIX2INT(vargc);
+ }
+ else {
+ /* NODE_ZSUPER */
+ int i;
+ rb_iseq_t *liseq = iseq->local_iseq;
+ int lvar_level = get_lvar_level(iseq);
+
+ argc = liseq->argc;
+
+ /* normal arguments */
+ for (i = 0; i < liseq->argc; i++) {
+ int idx = liseq->local_size - i;
+ ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
+ }
+
+ if (!liseq->arg_simple) {
+ if (liseq->arg_opts) {
+ /* optional arguments */
+ int j;
+ for (j = 0; j < liseq->arg_opts - 1; j++) {
+ int idx = liseq->local_size - (i + j);
+ ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
+ }
+ i += j;
+ argc = i;
+ }
+
+ if (liseq->arg_rest != -1) {
+ /* rest argument */
+ int idx = liseq->local_size - liseq->arg_rest;
+ ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
+ argc = liseq->arg_rest + 1;
+ flag |= VM_CALL_ARGS_SPLAT;
+ }
+
+ if (liseq->arg_post_len) {
+ /* post arguments */
+ int post_len = liseq->arg_post_len;
+ int post_start = liseq->arg_post_start;
+
+ if (liseq->arg_rest != -1) {
+ int j;
+ for (j=0; j<post_len; j++) {
+ int idx = liseq->local_size - (post_start + j);
+ ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
+ }
+ ADD_INSN1(args, line, newarray, INT2FIX(j));
+ ADD_INSN (args, line, concatarray);
+ /* argc is settled at above */
+ }
+ else {
+ int j;
+ for (j=0; j<post_len; j++) {
+ int idx = liseq->local_size - (post_start + j);
+ ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
+ }
+ argc = post_len + post_start;
+ }
+ }
+
+ if (liseq->arg_keyword >= 0) {
+ int local_size = liseq->local_size;
+ int idx = local_size - liseq->arg_keyword;
+ argc++;
+ ADD_INSN1(args, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
+ ADD_SEND (args, line, ID2SYM(rb_intern("dup")), INT2FIX(0));
+ for (i = 0; i < liseq->arg_keywords; ++i) {
+ ID id = liseq->arg_keyword_table[i];
+ idx = local_size - get_local_var_idx(liseq, id);
+ ADD_INSN1(args, line, putobject, ID2SYM(id));
+ ADD_INSN2(args, line, getlocal, INT2FIX(idx), INT2FIX(lvar_level));
+ }
+ ADD_SEND(args, line, ID2SYM(id_core_hash_merge_ptr), INT2FIX(i * 2 + 1));
+ if (liseq->arg_rest != -1) {
+ ADD_INSN1(args, line, newarray, INT2FIX(1));
+ ADD_INSN (args, line, concatarray);
+ --argc;
+ }
+ }
+ }
+ }
+
+ /* dummy receiver */
+ ADD_INSN1(ret, line, putobject, nd_type(node) == NODE_ZSUPER ? Qfalse : Qtrue);
+ ADD_SEQ(ret, args);
+ ADD_INSN1(ret, line, invokesuper, new_callinfo(iseq, 0, argc, parent_block,
+ flag | VM_CALL_SUPER | VM_CALL_FCALL));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_ARRAY:{
+ compile_array_(iseq, ret, node, COMPILE_ARRAY_TYPE_ARRAY, poped);
+ break;
+ }
+ case NODE_ZARRAY:{
+ if (!poped) {
+ ADD_INSN1(ret, line, newarray, INT2FIX(0));
+ }
+ break;
+ }
+ case NODE_VALUES:{
+ NODE *n = node;
+ while (n) {
+ COMPILE(ret, "values item", n->nd_head);
+ n = n->nd_next;
+ }
+ ADD_INSN1(ret, line, newarray, INT2FIX(node->nd_alen));
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_HASH:{
+ DECL_ANCHOR(list);
+ int type = node->nd_head ? nd_type(node->nd_head) : NODE_ZARRAY;
+
+ INIT_ANCHOR(list);
+ switch (type) {
+ case NODE_ARRAY:
+ compile_array(iseq, list, node->nd_head, COMPILE_ARRAY_TYPE_HASH);
+ ADD_SEQ(ret, list);
+ break;
+
+ case NODE_ZARRAY:
+ ADD_INSN1(ret, line, newhash, INT2FIX(0));
+ break;
+
+ default:
+ rb_bug("can't make hash with this node: %s", ruby_node_name(type));
+ }
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_RETURN:{
+ rb_iseq_t *is = iseq;
+
+ if (is) {
+ if (is->type == ISEQ_TYPE_TOP) {
+ COMPILE_ERROR((ERROR_ARGS "Invalid return"));
+ }
+ else {
+ LABEL *splabel = 0;
+
+ if (is->type == ISEQ_TYPE_METHOD) {
+ splabel = NEW_LABEL(0);
+ ADD_LABEL(ret, splabel);
+ ADD_ADJUST(ret, line, 0);
+ }
+
+ COMPILE(ret, "return nd_stts (return val)", node->nd_stts);
+
+ if (is->type == ISEQ_TYPE_METHOD) {
+ add_ensure_iseq(ret, iseq, 1);
+ ADD_TRACE(ret, line, RUBY_EVENT_RETURN);
+ ADD_INSN(ret, line, leave);
+ ADD_ADJUST_RESTORE(ret, splabel);
+
+ if (!poped) {
+ ADD_INSN(ret, line, putnil);
+ }
+ }
+ else {
+ ADD_INSN1(ret, line, throw, INT2FIX(0x01) /* TAG_RETURN */ );
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ }
+ }
+ }
+ break;
+ }
+ case NODE_YIELD:{
+ DECL_ANCHOR(args);
+ VALUE argc;
+ VALUE flag = 0;
+
+ INIT_ANCHOR(args);
+ if (iseq->type == ISEQ_TYPE_TOP) {
+ COMPILE_ERROR((ERROR_ARGS "Invalid yield"));
+ }
+
+ if (node->nd_head) {
+ argc = setup_args(iseq, args, node->nd_head, &flag);
+ }
+ else {
+ argc = INT2FIX(0);
+ }
+
+ ADD_SEQ(ret, args);
+ ADD_INSN1(ret, line, invokeblock, new_callinfo(iseq, 0, FIX2INT(argc), 0, flag));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_LVAR:{
+ if (!poped) {
+ ID id = node->nd_vid;
+ int idx = iseq->local_iseq->local_size - get_local_var_idx(iseq, id);
+
+ debugs("id: %s idx: %d\n", rb_id2name(id), idx);
+ ADD_INSN2(ret, line, getlocal, INT2FIX(idx), INT2FIX(get_lvar_level(iseq)));
+ }
+ break;
+ }
+ case NODE_DVAR:{
+ int lv, idx, ls;
+ debugi("nd_vid", node->nd_vid);
+ if (!poped) {
+ idx = get_dyna_var_idx(iseq, node->nd_vid, &lv, &ls);
+ if (idx < 0) {
+ rb_bug("unknown dvar (%s)", rb_id2name(node->nd_vid));
+ }
+ ADD_INSN2(ret, line, getlocal, INT2FIX(ls - idx), INT2FIX(lv));
+ }
+ break;
+ }
+ case NODE_GVAR:{
+ ADD_INSN1(ret, line, getglobal,
+ ((VALUE)node->nd_entry | 1));
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_IVAR:{
+ debugi("nd_vid", node->nd_vid);
+ if (!poped) {
+ ADD_INSN2(ret, line, getinstancevariable,
+ ID2SYM(node->nd_vid), INT2FIX(iseq->is_size++));
+ }
+ break;
+ }
+ case NODE_CONST:{
+ debugi("nd_vid", node->nd_vid);
+
+ if (iseq->compile_data->option->inline_const_cache) {
+ LABEL *lend = NEW_LABEL(line);
+ int ic_index = iseq->is_size++;
+
+ ADD_INSN2(ret, line, getinlinecache, lend, INT2FIX(ic_index));
+ ADD_INSN1(ret, line, getconstant, ID2SYM(node->nd_vid));
+ ADD_INSN1(ret, line, setinlinecache, INT2FIX(ic_index));
+ ADD_LABEL(ret, lend);
+ }
+ else {
+ ADD_INSN(ret, line, putnil);
+ ADD_INSN1(ret, line, getconstant, ID2SYM(node->nd_vid));
+ }
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_CVAR:{
+ if (!poped) {
+ ADD_INSN1(ret, line, getclassvariable,
+ ID2SYM(node->nd_vid));
+ }
+ break;
+ }
+ case NODE_NTH_REF:{
+ if (!poped) {
+ ADD_INSN2(ret, line, getspecial, INT2FIX(1) /* '~' */,
+ INT2FIX(node->nd_nth << 1));
+ }
+ break;
+ }
+ case NODE_BACK_REF:{
+ if (!poped) {
+ ADD_INSN2(ret, line, getspecial, INT2FIX(1) /* '~' */,
+ INT2FIX(0x01 | (node->nd_nth << 1)));
+ }
+ break;
+ }
+ case NODE_MATCH:
+ case NODE_MATCH2:
+ case NODE_MATCH3:{
+ DECL_ANCHOR(recv);
+ DECL_ANCHOR(val);
+
+ INIT_ANCHOR(recv);
+ INIT_ANCHOR(val);
+ switch (nd_type(node)) {
+ case NODE_MATCH:
+ ADD_INSN1(recv, line, putobject, node->nd_lit);
+ ADD_INSN2(val, line, getspecial, INT2FIX(0),
+ INT2FIX(0));
+ break;
+ case NODE_MATCH2:
+ COMPILE(recv, "receiver", node->nd_recv);
+ COMPILE(val, "value", node->nd_value);
+ break;
+ case NODE_MATCH3:
+ COMPILE(recv, "receiver", node->nd_value);
+ COMPILE(val, "value", node->nd_recv);
+ break;
+ }
+
+ if (iseq->compile_data->option->specialized_instruction) {
+ /* TODO: detect by node */
+ if (recv->last == recv->anchor.next &&
+ INSN_OF(recv->last) == BIN(putobject) &&
+ nd_type(node) == NODE_MATCH2) {
+ ADD_SEQ(ret, val);
+ ADD_INSN1(ret, line, opt_regexpmatch1,
+ OPERAND_AT(recv->last, 0));
+ }
+ else {
+ ADD_SEQ(ret, recv);
+ ADD_SEQ(ret, val);
+ ADD_INSN1(ret, line, opt_regexpmatch2, new_callinfo(iseq, idEqTilde, 1, 0, 0));
+ }
+ }
+ else {
+ ADD_SEQ(ret, recv);
+ ADD_SEQ(ret, val);
+ ADD_SEND(ret, line, ID2SYM(idEqTilde), INT2FIX(1));
+ }
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_LIT:{
+ debugp_param("lit", node->nd_lit);
+ if (!poped) {
+ ADD_INSN1(ret, line, putobject, node->nd_lit);
+ }
+ break;
+ }
+ case NODE_STR:{
+ node->nd_lit = rb_fstring(node->nd_lit);
+ debugp_param("nd_lit", node->nd_lit);
+ if (!poped) {
+ ADD_INSN1(ret, line, putstring, node->nd_lit);
+ }
+ break;
+ }
+ case NODE_DSTR:{
+ compile_dstr(iseq, ret, node);
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_XSTR:{
+ node->nd_lit = rb_fstring(node->nd_lit);
+ ADD_CALL_RECEIVER(ret, line);
+ ADD_INSN1(ret, line, putobject, node->nd_lit);
+ ADD_CALL(ret, line, ID2SYM(idBackquote), INT2FIX(1));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_DXSTR:{
+ ADD_CALL_RECEIVER(ret, line);
+ compile_dstr(iseq, ret, node);
+ ADD_CALL(ret, line, ID2SYM(idBackquote), INT2FIX(1));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_EVSTR:{
+ COMPILE(ret, "nd_body", node->nd_body);
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ else {
+ ADD_INSN(ret, line, tostring);
+ }
+ break;
+ }
+ case NODE_DREGX:{
+ compile_dregx(iseq, ret, node);
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_DREGX_ONCE:{
+ int ic_index = iseq->is_size++;
+ NODE *dregx_node = NEW_NODE(NODE_DREGX, node->u1.value, node->u2.value, node->u3.value);
+ NODE *block_node = NEW_NODE(NODE_SCOPE, 0, dregx_node, 0);
+ VALUE block_iseq = NEW_CHILD_ISEQVAL(block_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, line);
+
+ ADD_INSN2(ret, line, once, block_iseq, INT2FIX(ic_index));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_ARGSCAT:{
+ if (poped) {
+ COMPILE(ret, "argscat head", node->nd_head);
+ ADD_INSN1(ret, line, splatarray, Qfalse);
+ ADD_INSN(ret, line, pop);
+ COMPILE(ret, "argscat body", node->nd_body);
+ ADD_INSN1(ret, line, splatarray, Qfalse);
+ ADD_INSN(ret, line, pop);
+ }
+ else {
+ COMPILE(ret, "argscat head", node->nd_head);
+ COMPILE(ret, "argscat body", node->nd_body);
+ ADD_INSN(ret, line, concatarray);
+ }
+ break;
+ }
+ case NODE_ARGSPUSH:{
+ if (poped) {
+ COMPILE(ret, "arsgpush head", node->nd_head);
+ ADD_INSN1(ret, line, splatarray, Qfalse);
+ ADD_INSN(ret, line, pop);
+ COMPILE_(ret, "argspush body", node->nd_body, poped);
+ }
+ else {
+ COMPILE(ret, "arsgpush head", node->nd_head);
+ COMPILE_(ret, "argspush body", node->nd_body, poped);
+ ADD_INSN1(ret, line, newarray, INT2FIX(1));
+ ADD_INSN(ret, line, concatarray);
+ }
+ break;
+ }
+ case NODE_SPLAT:{
+ COMPILE(ret, "splat", node->nd_head);
+ ADD_INSN1(ret, line, splatarray, Qtrue);
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_DEFN:{
+ VALUE iseqval = NEW_ISEQVAL(node->nd_defn,
+ rb_id2str(node->nd_mid),
+ ISEQ_TYPE_METHOD, line);
+
+ debugp_param("defn/iseq", iseqval);
+
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CBASE));
+ ADD_INSN1(ret, line, putobject, ID2SYM(node->nd_mid));
+ ADD_INSN1(ret, line, putiseq, iseqval);
+ ADD_SEND (ret, line, ID2SYM(id_core_define_method), INT2FIX(3));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+
+ debugp_param("defn", iseqval);
+ break;
+ }
+ case NODE_DEFS:{
+ VALUE iseqval = NEW_ISEQVAL(node->nd_defn,
+ rb_id2str(node->nd_mid),
+ ISEQ_TYPE_METHOD, line);
+
+ debugp_param("defs/iseq", iseqval);
+
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ COMPILE(ret, "defs: recv", node->nd_recv);
+ ADD_INSN1(ret, line, putobject, ID2SYM(node->nd_mid));
+ ADD_INSN1(ret, line, putiseq, iseqval);
+ ADD_SEND (ret, line, ID2SYM(id_core_define_singleton_method), INT2FIX(3));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_ALIAS:{
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CBASE));
+ COMPILE(ret, "alias arg1", node->u1.node);
+ COMPILE(ret, "alias arg2", node->u2.node);
+ ADD_SEND(ret, line, ID2SYM(id_core_set_method_alias), INT2FIX(3));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_VALIAS:{
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line, putobject, ID2SYM(node->u1.id));
+ ADD_INSN1(ret, line, putobject, ID2SYM(node->u2.id));
+ ADD_SEND(ret, line, ID2SYM(id_core_set_variable_alias), INT2FIX(2));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_UNDEF:{
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CBASE));
+ COMPILE(ret, "undef arg", node->u2.node);
+ ADD_SEND(ret, line, ID2SYM(id_core_undef_method), INT2FIX(2));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_CLASS:{
+ VALUE iseqval =
+ NEW_CHILD_ISEQVAL(
+ node->nd_body,
+ rb_sprintf("<class:%s>", rb_id2name(node->nd_cpath->nd_mid)),
+ ISEQ_TYPE_CLASS, line);
+ VALUE noscope = compile_cpath(ret, iseq, node->nd_cpath);
+ int flags = VM_DEFINECLASS_TYPE_CLASS;
+ if (!noscope) flags |= VM_DEFINECLASS_FLAG_SCOPED;
+ if (node->nd_super) flags |= VM_DEFINECLASS_FLAG_HAS_SUPERCLASS;
+ COMPILE(ret, "super", node->nd_super);
+ ADD_INSN3(ret, line, defineclass,
+ ID2SYM(node->nd_cpath->nd_mid), iseqval, INT2FIX(flags));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_MODULE:{
+ VALUE iseqval = NEW_CHILD_ISEQVAL(
+ node->nd_body,
+ rb_sprintf("<module:%s>", rb_id2name(node->nd_cpath->nd_mid)),
+ ISEQ_TYPE_CLASS, line);
+
+ VALUE noscope = compile_cpath(ret, iseq, node->nd_cpath);
+ int flags = VM_DEFINECLASS_TYPE_MODULE;
+ if (!noscope) flags |= VM_DEFINECLASS_FLAG_SCOPED;
+ ADD_INSN (ret, line, putnil); /* dummy */
+ ADD_INSN3(ret, line, defineclass,
+ ID2SYM(node->nd_cpath->nd_mid), iseqval, INT2FIX(flags));
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_SCLASS:{
+ ID singletonclass;
+ VALUE iseqval =
+ NEW_ISEQVAL(node->nd_body, rb_str_new2("singleton class"),
+ ISEQ_TYPE_CLASS, line);
+
+ COMPILE(ret, "sclass#recv", node->nd_recv);
+ ADD_INSN (ret, line, putnil);
+ CONST_ID(singletonclass, "singletonclass");
+ ADD_INSN3(ret, line, defineclass,
+ ID2SYM(singletonclass), iseqval,
+ INT2FIX(VM_DEFINECLASS_TYPE_SINGLETON_CLASS));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_COLON2:{
+ if (rb_is_const_id(node->nd_mid)) {
+ /* constant */
+ LABEL *lend = NEW_LABEL(line);
+ int ic_index = iseq->is_size++;
+
+ DECL_ANCHOR(pref);
+ DECL_ANCHOR(body);
+
+ INIT_ANCHOR(pref);
+ INIT_ANCHOR(body);
+ compile_colon2(iseq, node, pref, body);
+ if (LIST_SIZE_ZERO(pref)) {
+ if (iseq->compile_data->option->inline_const_cache) {
+ ADD_INSN2(ret, line, getinlinecache, lend, INT2FIX(ic_index));
+ }
+ else {
+ ADD_INSN(ret, line, putnil);
+ }
+
+ ADD_SEQ(ret, body);
+
+ if (iseq->compile_data->option->inline_const_cache) {
+ ADD_INSN1(ret, line, setinlinecache, INT2FIX(ic_index));
+ ADD_LABEL(ret, lend);
+ }
+ }
+ else {
+ ADD_SEQ(ret, pref);
+ ADD_SEQ(ret, body);
+ }
+ }
+ else {
+ /* function call */
+ ADD_CALL_RECEIVER(ret, line);
+ COMPILE(ret, "colon2#nd_head", node->nd_head);
+ ADD_CALL(ret, line, ID2SYM(node->nd_mid),
+ INT2FIX(1));
+ }
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_COLON3:{
+ LABEL *lend = NEW_LABEL(line);
+ int ic_index = iseq->is_size++;
+
+ debugi("colon3#nd_mid", node->nd_mid);
+
+ /* add cache insn */
+ if (iseq->compile_data->option->inline_const_cache) {
+ ADD_INSN2(ret, line, getinlinecache, lend, INT2FIX(ic_index));
+ ADD_INSN(ret, line, pop);
+ }
+
+ ADD_INSN1(ret, line, putobject, rb_cObject);
+ ADD_INSN1(ret, line, getconstant, ID2SYM(node->nd_mid));
+
+ if (iseq->compile_data->option->inline_const_cache) {
+ ADD_INSN1(ret, line, setinlinecache, INT2FIX(ic_index));
+ ADD_LABEL(ret, lend);
+ }
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_DOT2:
+ case NODE_DOT3:{
+ VALUE flag = type == NODE_DOT2 ? INT2FIX(0) : INT2FIX(1);
+ COMPILE(ret, "min", (NODE *) node->nd_beg);
+ COMPILE(ret, "max", (NODE *) node->nd_end);
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, line, pop);
+ }
+ else {
+ ADD_INSN1(ret, line, newrange, flag);
+ }
+ break;
+ }
+ case NODE_FLIP2:
+ case NODE_FLIP3:{
+ LABEL *lend = NEW_LABEL(line);
+ LABEL *lfin = NEW_LABEL(line);
+ LABEL *ltrue = NEW_LABEL(line);
+ rb_iseq_t *local_iseq = iseq->local_iseq;
+ rb_num_t cnt;
+ VALUE key;
+
+ cnt = local_iseq->flip_cnt++ + DEFAULT_SPECIAL_VAR_COUNT;
+ key = INT2FIX(cnt);
+
+ ADD_INSN2(ret, line, getspecial, key, INT2FIX(0));
+ ADD_INSNL(ret, line, branchif, lend);
+
+ /* *flip == 0 */
+ COMPILE(ret, "flip2 beg", node->nd_beg);
+ ADD_INSN(ret, line, dup);
+ ADD_INSNL(ret, line, branchunless, lfin);
+ if (nd_type(node) == NODE_FLIP3) {
+ ADD_INSN(ret, line, dup);
+ ADD_INSN1(ret, line, setspecial, key);
+ ADD_INSNL(ret, line, jump, lfin);
+ }
+ else {
+ ADD_INSN1(ret, line, setspecial, key);
+ }
+
+ /* *flip == 1 */
+ ADD_LABEL(ret, lend);
+ COMPILE(ret, "flip2 end", node->nd_end);
+ ADD_INSNL(ret, line, branchunless, ltrue);
+ ADD_INSN1(ret, line, putobject, Qfalse);
+ ADD_INSN1(ret, line, setspecial, key);
+
+ ADD_LABEL(ret, ltrue);
+ ADD_INSN1(ret, line, putobject, Qtrue);
+
+ ADD_LABEL(ret, lfin);
+ break;
+ }
+ case NODE_SELF:{
+ if (!poped) {
+ ADD_INSN(ret, line, putself);
+ }
+ break;
+ }
+ case NODE_NIL:{
+ if (!poped) {
+ ADD_INSN(ret, line, putnil);
+ }
+ break;
+ }
+ case NODE_TRUE:{
+ if (!poped) {
+ ADD_INSN1(ret, line, putobject, Qtrue);
+ }
+ break;
+ }
+ case NODE_FALSE:{
+ if (!poped) {
+ ADD_INSN1(ret, line, putobject, Qfalse);
+ }
+ break;
+ }
+ case NODE_ERRINFO:{
+ if (!poped) {
+ if (iseq->type == ISEQ_TYPE_RESCUE) {
+ ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(0));
+ }
+ else {
+ rb_iseq_t *ip = iseq;
+ int level = 0;
+ while (ip) {
+ if (ip->type == ISEQ_TYPE_RESCUE) {
+ break;
+ }
+ ip = ip->parent_iseq;
+ level++;
+ }
+ if (ip) {
+ ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(level));
+ }
+ else {
+ ADD_INSN(ret, line, putnil);
+ }
+ }
+ }
+ break;
+ }
+ case NODE_DEFINED:{
+ if (poped) break;
+ if (!node->nd_head) {
+ VALUE str = rb_iseq_defined_string(DEFINED_NIL);
+ ADD_INSN1(ret, nd_line(node), putobject, str);
+ }
+ else {
+ LABEL *lfinish[2];
+ lfinish[0] = NEW_LABEL(line);
+ lfinish[1] = 0;
+ ADD_INSN(ret, line, putnil);
+ defined_expr(iseq, ret, node->nd_head, lfinish, Qtrue);
+ ADD_INSN(ret, line, swap);
+ ADD_INSN(ret, line, pop);
+ if (lfinish[1]) {
+ ADD_LABEL(ret, lfinish[1]);
+ }
+ ADD_LABEL(ret, lfinish[0]);
+ }
+ break;
+ }
+ case NODE_POSTEXE:{
+ /* compiled to:
+ * ONCE{ rb_mRubyVMFrozenCore::core#set_postexe{ ... } }
+ */
+ int is_index = iseq->is_size++;
+ VALUE once_iseq = NEW_CHILD_ISEQVAL(
+ NEW_IFUNC(build_postexe_iseq, node->nd_body),
+ make_name_for_block(iseq), ISEQ_TYPE_BLOCK, line);
+
+ ADD_INSN2(ret, line, once, once_iseq, INT2FIX(is_index));
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_KW_ARG:{
+ LABEL *default_label = NEW_LABEL(line);
+ LABEL *end_label = 0;
+ int idx, lv, ls;
+ ID id = node->nd_body->nd_vid;
+
+ ADD_INSN(ret, line, dup);
+ ADD_INSN1(ret, line, putobject, ID2SYM(id));
+ ADD_SEND(ret, line, ID2SYM(rb_intern("key?")), INT2FIX(1));
+ ADD_INSNL(ret, line, branchunless, default_label);
+ ADD_INSN(ret, line, dup);
+ ADD_INSN1(ret, line, putobject, ID2SYM(id));
+ ADD_SEND(ret, line, ID2SYM(rb_intern("delete")), INT2FIX(1));
+ switch (nd_type(node->nd_body)) {
+ case NODE_LASGN:
+ idx = iseq->local_iseq->local_size - get_local_var_idx(iseq, id);
+ ADD_INSN2(ret, line, setlocal, INT2FIX(idx), INT2FIX(get_lvar_level(iseq)));
+ break;
+ case NODE_DASGN:
+ case NODE_DASGN_CURR:
+ idx = get_dyna_var_idx(iseq, id, &lv, &ls);
+ ADD_INSN2(ret, line, setlocal, INT2FIX(ls - idx), INT2FIX(lv));
+ break;
+ default:
+ rb_bug("iseq_compile_each (NODE_KW_ARG): unknown node: %s", ruby_node_name(nd_type(node->nd_body)));
+ }
+ if (node->nd_body->nd_value != (NODE *)-1) {
+ end_label = NEW_LABEL(nd_line(node));
+ ADD_INSNL(ret, nd_line(node), jump, end_label);
+ }
+ ADD_LABEL(ret, default_label);
+ if (node->nd_body->nd_value != (NODE *)-1) {
+ COMPILE_POPED(ret, "keyword default argument", node->nd_body);
+ ADD_LABEL(ret, end_label);
+ }
+ break;
+ }
+ case NODE_DSYM:{
+ compile_dstr(iseq, ret, node);
+ if (!poped) {
+ ADD_SEND(ret, line, ID2SYM(idIntern), INT2FIX(0));
+ }
+ else {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ case NODE_ATTRASGN:{
+ DECL_ANCHOR(recv);
+ DECL_ANCHOR(args);
+ VALUE flag = 0;
+ VALUE argc;
+
+ INIT_ANCHOR(recv);
+ INIT_ANCHOR(args);
+ argc = setup_args(iseq, args, node->nd_args, &flag);
+
+ if (node->nd_recv == (NODE *) 1) {
+ flag |= VM_CALL_FCALL;
+ ADD_INSN(recv, line, putself);
+ }
+ else {
+ COMPILE(recv, "recv", node->nd_recv);
+ }
+
+ debugp_param("argc", argc);
+ debugp_param("nd_mid", ID2SYM(node->nd_mid));
+
+ if (!poped) {
+ ADD_INSN(ret, line, putnil);
+ ADD_SEQ(ret, recv);
+ ADD_SEQ(ret, args);
+
+ if (flag & VM_CALL_ARGS_BLOCKARG) {
+ ADD_INSN1(ret, line, topn, INT2FIX(1));
+ if (flag & VM_CALL_ARGS_SPLAT) {
+ ADD_INSN1(ret, line, putobject, INT2FIX(-1));
+ ADD_SEND(ret, line, ID2SYM(idAREF), INT2FIX(1));
+ }
+ ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 3));
+ ADD_INSN (ret, line, pop);
+ }
+ else if (flag & VM_CALL_ARGS_SPLAT) {
+ ADD_INSN(ret, line, dup);
+ ADD_INSN1(ret, line, putobject, INT2FIX(-1));
+ ADD_SEND(ret, line, ID2SYM(idAREF), INT2FIX(1));
+ ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 2));
+ ADD_INSN (ret, line, pop);
+ }
+ else {
+ ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 1));
+ }
+ }
+ else {
+ ADD_SEQ(ret, recv);
+ ADD_SEQ(ret, args);
+ }
+ ADD_SEND_R(ret, line, ID2SYM(node->nd_mid), argc, 0, LONG2FIX(flag));
+ ADD_INSN(ret, line, pop);
+
+ break;
+ }
+ case NODE_PRELUDE:{
+ COMPILE_POPED(ret, "prelude", node->nd_head);
+ COMPILE_(ret, "body", node->nd_body, poped);
+ break;
+ }
+ case NODE_LAMBDA:{
+ /* compile same as lambda{...} */
+ VALUE block = NEW_CHILD_ISEQVAL(node->nd_body, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, line);
+ VALUE argc = INT2FIX(0);
+ ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_CALL_WITH_BLOCK(ret, line, ID2SYM(idLambda), argc, block);
+
+ if (poped) {
+ ADD_INSN(ret, line, pop);
+ }
+ break;
+ }
+ default:
+ rb_bug("iseq_compile_each: unknown node: %s", ruby_node_name(type));
+ return COMPILE_NG;
+ }
+
+ /* check & remove redundant trace(line) */
+ if (saved_last_element && ret /* ret can be 0 when error */ &&
+ ret->last == saved_last_element &&
+ ((INSN *)saved_last_element)->insn_id == BIN(trace)) {
+ POP_ELEMENT(ret);
+ }
+
+ debug_node_end();
+ return COMPILE_OK;
+}
+
+/***************************/
+/* instruction information */
+/***************************/
+
+static int
+insn_data_length(INSN *iobj)
+{
+ return insn_len(iobj->insn_id);
+}
+
+static int
+calc_sp_depth(int depth, INSN *insn)
+{
+ return insn_stack_increase(depth, insn->insn_id, insn->operands);
+}
+
+static VALUE
+opobj_inspect(VALUE obj)
+{
+ struct RBasic *r = (struct RBasic *) obj;
+ if (!SPECIAL_CONST_P(r) && r->klass == 0) {
+ switch (BUILTIN_TYPE(r)) {
+ case T_STRING:
+ obj = rb_str_new_cstr(RSTRING_PTR(obj));
+ break;
+ case T_ARRAY:
+ obj = rb_ary_dup(obj);
+ break;
+ }
+ }
+ return rb_inspect(obj);
+}
+
+
+
+static VALUE
+insn_data_to_s_detail(INSN *iobj)
+{
+ VALUE str = rb_sprintf("%-20s ", insn_name(iobj->insn_id));
+
+ if (iobj->operands) {
+ const char *types = insn_op_types(iobj->insn_id);
+ int j;
+
+ for (j = 0; types[j]; j++) {
+ char type = types[j];
+
+ switch (type) {
+ case TS_OFFSET: /* label(destination position) */
+ {
+ LABEL *lobj = (LABEL *)OPERAND_AT(iobj, j);
+ rb_str_catf(str, "<L%03d>", lobj->label_no);
+ break;
+ }
+ break;
+ case TS_ISEQ: /* iseq */
+ {
+ rb_iseq_t *iseq = (rb_iseq_t *)OPERAND_AT(iobj, j);
+ VALUE val = Qnil;
+ if (0 && iseq) { /* TODO: invalidate now */
+ val = iseq->self;
+ }
+ rb_str_concat(str, opobj_inspect(val));
+ }
+ break;
+ case TS_LINDEX:
+ case TS_NUM: /* ulong */
+ case TS_VALUE: /* VALUE */
+ {
+ VALUE v = OPERAND_AT(iobj, j);
+ rb_str_concat(str, opobj_inspect(v));
+ break;
+ }
+ case TS_ID: /* ID */
+ rb_str_concat(str, opobj_inspect(OPERAND_AT(iobj, j)));
+ break;
+ case TS_GENTRY:
+ {
+ struct rb_global_entry *entry = (struct rb_global_entry *)
+ (OPERAND_AT(iobj, j) & (~1));
+ rb_str_cat2(str, rb_id2name(entry->id));
+ break;
+ }
+ case TS_IC: /* inline cache */
+ rb_str_catf(str, "<ic:%d>", FIX2INT(OPERAND_AT(iobj, j)));
+ break;
+ case TS_CALLINFO: /* call info */
+ {
+ rb_call_info_t *ci = (rb_call_info_t *)OPERAND_AT(iobj, j);
+ rb_str_catf(str, "<callinfo:%s, %d>", ci->mid ? rb_id2name(ci->mid) : "", ci->orig_argc);
+ break;
+ }
+ case TS_CDHASH: /* case/when condition cache */
+ rb_str_cat2(str, "<ch>");
+ break;
+ default:{
+ rb_raise(rb_eSyntaxError, "unknown operand type: %c", type);
+ }
+ }
+ if (types[j + 1]) {
+ rb_str_cat2(str, ", ");
+ }
+ }
+ }
+ return str;
+}
+
+static void
+dump_disasm_list(struct iseq_link_element *link)
+{
+ int pos = 0;
+ INSN *iobj;
+ LABEL *lobj;
+ VALUE str;
+
+ printf("-- raw disasm--------\n");
+
+ while (link) {
+ switch (link->type) {
+ case ISEQ_ELEMENT_INSN:
+ {
+ iobj = (INSN *)link;
+ str = insn_data_to_s_detail(iobj);
+ printf("%04d %-65s(%4d)\n", pos, StringValueCStr(str), iobj->line_no);
+ pos += insn_data_length(iobj);
+ break;
+ }
+ case ISEQ_ELEMENT_LABEL:
+ {
+ lobj = (LABEL *)link;
+ printf("<L%03d>\n", lobj->label_no);
+ break;
+ }
+ case ISEQ_ELEMENT_NONE:
+ {
+ printf("[none]\n");
+ break;
+ }
+ case ISEQ_ELEMENT_ADJUST:
+ {
+ ADJUST *adjust = (ADJUST *)link;
+ printf("adjust: [label: %d]\n", adjust->label ? adjust->label->label_no : -1);
+ break;
+ }
+ default:
+ /* ignore */
+ rb_raise(rb_eSyntaxError, "dump_disasm_list error: %ld\n", FIX2LONG(link->type));
+ }
+ link = link->next;
+ }
+ printf("---------------------\n");
+}
+
+const char *
+rb_insns_name(int i)
+{
+ return insn_name_info[i];
+}
+
+VALUE
+rb_insns_name_array(void)
+{
+ VALUE ary = rb_ary_new();
+ int i;
+ for (i = 0; i < numberof(insn_name_info); i++) {
+ rb_ary_push(ary, rb_fstring(rb_str_new2(insn_name_info[i])));
+ }
+ return rb_obj_freeze(ary);
+}
+
+static LABEL *
+register_label(rb_iseq_t *iseq, struct st_table *labels_table, VALUE obj)
+{
+ LABEL *label = 0;
+ st_data_t tmp;
+ obj = rb_convert_type(obj, T_SYMBOL, "Symbol", "to_sym");
+
+ if (st_lookup(labels_table, obj, &tmp) == 0) {
+ label = NEW_LABEL(0);
+ st_insert(labels_table, obj, (st_data_t)label);
+ }
+ else {
+ label = (LABEL *)tmp;
+ }
+ return label;
+}
+
+static VALUE
+get_exception_sym2type(VALUE sym)
+{
+#undef rb_intern
+#define rb_intern(str) rb_intern_const(str)
+ VALUE sym_inspect;
+ static VALUE symRescue, symEnsure, symRetry;
+ static VALUE symBreak, symRedo, symNext;
+
+ if (symRescue == 0) {
+ symRescue = ID2SYM(rb_intern("rescue"));
+ symEnsure = ID2SYM(rb_intern("ensure"));
+ symRetry = ID2SYM(rb_intern("retry"));
+ symBreak = ID2SYM(rb_intern("break"));
+ symRedo = ID2SYM(rb_intern("redo"));
+ symNext = ID2SYM(rb_intern("next"));
+ }
+
+ if (sym == symRescue) return CATCH_TYPE_RESCUE;
+ if (sym == symEnsure) return CATCH_TYPE_ENSURE;
+ if (sym == symRetry) return CATCH_TYPE_RETRY;
+ if (sym == symBreak) return CATCH_TYPE_BREAK;
+ if (sym == symRedo) return CATCH_TYPE_REDO;
+ if (sym == symNext) return CATCH_TYPE_NEXT;
+ sym_inspect = rb_inspect(sym);
+ rb_raise(rb_eSyntaxError, "invalid exception symbol: %s",
+ StringValuePtr(sym_inspect));
+ return 0;
+}
+
+static int
+iseq_build_from_ary_exception(rb_iseq_t *iseq, struct st_table *labels_table,
+ VALUE exception)
+{
+ int i;
+
+ for (i=0; i<RARRAY_LEN(exception); i++) {
+ VALUE v, type, eiseqval;
+ const VALUE *ptr;
+ LABEL *lstart, *lend, *lcont;
+ int sp;
+
+ RB_GC_GUARD(v) = rb_convert_type(RARRAY_AREF(exception, i), T_ARRAY,
+ "Array", "to_ary");
+ if (RARRAY_LEN(v) != 6) {
+ rb_raise(rb_eSyntaxError, "wrong exception entry");
+ }
+ ptr = RARRAY_CONST_PTR(v);
+ type = get_exception_sym2type(ptr[0]);
+ if (ptr[1] == Qnil) {
+ eiseqval = 0;
+ }
+ else {
+ eiseqval = rb_iseq_load(ptr[1], iseq->self, Qnil);
+ }
+
+ lstart = register_label(iseq, labels_table, ptr[2]);
+ lend = register_label(iseq, labels_table, ptr[3]);
+ lcont = register_label(iseq, labels_table, ptr[4]);
+ sp = NUM2INT(ptr[5]);
+
+ (void)sp;
+
+ ADD_CATCH_ENTRY(type, lstart, lend, eiseqval, lcont);
+ }
+ return COMPILE_OK;
+}
+
+static struct st_table *
+insn_make_insn_table(void)
+{
+ struct st_table *table;
+ int i;
+ table = st_init_numtable();
+
+ for (i=0; i<VM_INSTRUCTION_SIZE; i++) {
+ st_insert(table, ID2SYM(rb_intern(insn_name(i))), i);
+ }
+
+ return table;
+}
+
+static VALUE
+iseq_build_load_iseq(rb_iseq_t *iseq, VALUE op)
+{
+ VALUE iseqval;
+ if (RB_TYPE_P(op, T_ARRAY)) {
+ iseqval = rb_iseq_load(op, iseq->self, Qnil);
+ }
+ else if (CLASS_OF(op) == rb_cISeq) {
+ iseqval = op;
+ }
+ else {
+ rb_raise(rb_eSyntaxError, "ISEQ is required");
+ }
+ iseq_add_mark_object(iseq, iseqval);
+ return iseqval;
+}
+
+static int
+iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *anchor,
+ VALUE body, struct st_table *labels_table)
+{
+ /* TODO: body should be frozen */
+ const VALUE *ptr = RARRAY_CONST_PTR(body);
+ long i, len = RARRAY_LEN(body);
+ int j;
+ int line_no = 0;
+
+ /*
+ * index -> LABEL *label
+ */
+ static struct st_table *insn_table;
+
+ if (insn_table == 0) {
+ insn_table = insn_make_insn_table();
+ }
+
+ for (i=0; i<len; i++) {
+ VALUE obj = ptr[i];
+
+ if (SYMBOL_P(obj)) {
+ LABEL *label = register_label(iseq, labels_table, obj);
+ ADD_LABEL(anchor, label);
+ }
+ else if (FIXNUM_P(obj)) {
+ line_no = NUM2INT(obj);
+ }
+ else if (RB_TYPE_P(obj, T_ARRAY)) {
+ VALUE *argv = 0;
+ int argc = RARRAY_LENINT(obj) - 1;
+ st_data_t insn_id;
+ VALUE insn;
+
+ insn = (argc < 0) ? Qnil : RARRAY_AREF(obj, 0);
+ if (st_lookup(insn_table, (st_data_t)insn, &insn_id) == 0) {
+ /* TODO: exception */
+ RB_GC_GUARD(insn) = rb_inspect(insn);
+ rb_compile_error(RSTRING_PTR(iseq->location.path), line_no,
+ "unknown instruction: %s", RSTRING_PTR(insn));
+ }
+
+ if (argc != insn_len((VALUE)insn_id)-1) {
+ rb_compile_error(RSTRING_PTR(iseq->location.path), line_no,
+ "operand size mismatch");
+ }
+
+ if (argc > 0) {
+ argv = compile_data_alloc(iseq, sizeof(VALUE) * argc);
+ for (j=0; j<argc; j++) {
+ VALUE op = rb_ary_entry(obj, j+1);
+ switch (insn_op_type((VALUE)insn_id, j)) {
+ case TS_OFFSET: {
+ LABEL *label = register_label(iseq, labels_table, op);
+ argv[j] = (VALUE)label;
+ break;
+ }
+ case TS_LINDEX:
+ case TS_NUM:
+ (void)NUM2INT(op);
+ argv[j] = op;
+ break;
+ case TS_VALUE:
+ argv[j] = op;
+ iseq_add_mark_object(iseq, op);
+ break;
+ case TS_ISEQ:
+ {
+ if (op != Qnil) {
+ argv[j] = iseq_build_load_iseq(iseq, op);
+ }
+ else {
+ argv[j] = 0;
+ }
+ }
+ break;
+ case TS_GENTRY:
+ op = rb_convert_type(op, T_SYMBOL, "Symbol", "to_sym");
+ argv[j] = (VALUE)rb_global_entry(SYM2ID(op));
+ break;
+ case TS_IC:
+ argv[j] = op;
+ if (NUM2INT(op) >= iseq->is_size) {
+ iseq->is_size = NUM2INT(op) + 1;
+ }
+ break;
+ case TS_CALLINFO:
+ {
+ ID mid = 0;
+ int orig_argc = 0;
+ VALUE block = 0;
+ unsigned long flag = 0;
+
+ if (!NIL_P(op)) {
+ VALUE vmid = rb_hash_aref(op, ID2SYM(rb_intern("mid")));
+ VALUE vflag = rb_hash_aref(op, ID2SYM(rb_intern("flag")));
+ VALUE vorig_argc = rb_hash_aref(op, ID2SYM(rb_intern("orig_argc")));
+ VALUE vblock = rb_hash_aref(op, ID2SYM(rb_intern("blockptr")));
+
+ if (!NIL_P(vmid)) mid = SYM2ID(vmid);
+ if (!NIL_P(vflag)) flag = NUM2ULONG(vflag);
+ if (!NIL_P(vorig_argc)) orig_argc = FIX2INT(vorig_argc);
+ if (!NIL_P(vblock)) block = iseq_build_load_iseq(iseq, vblock);
+ }
+ argv[j] = (VALUE)new_callinfo(iseq, mid, orig_argc, block, flag);
+ }
+ break;
+ case TS_ID:
+ argv[j] = rb_convert_type(op, T_SYMBOL,
+ "Symbol", "to_sym");
+ break;
+ case TS_CDHASH:
+ {
+ int i;
+ op = rb_convert_type(op, T_ARRAY, "Array", "to_ary");
+ op = rb_ary_dup(op);
+ for (i=0; i<RARRAY_LEN(op); i+=2) {
+ VALUE sym = rb_ary_entry(op, i+1);
+ LABEL *label =
+ register_label(iseq, labels_table, sym);
+ rb_ary_store(op, i+1, (VALUE)label | 1);
+ }
+ argv[j] = op;
+ iseq_add_mark_object_compile_time(iseq, op);
+ }
+ break;
+ default:
+ rb_raise(rb_eSyntaxError, "unknown operand: %c", insn_op_type((VALUE)insn_id, j));
+ }
+ }
+ }
+ ADD_ELEM(anchor,
+ (LINK_ELEMENT*)new_insn_core(iseq, line_no,
+ (enum ruby_vminsn_type)insn_id, argc, argv));
+ }
+ else {
+ rb_raise(rb_eTypeError, "unexpected object for instruction");
+ }
+ }
+ validate_labels(iseq, labels_table);
+ st_free_table(labels_table);
+ iseq_setup(iseq, anchor);
+ return COMPILE_OK;
+}
+
+#define CHECK_ARRAY(v) rb_convert_type((v), T_ARRAY, "Array", "to_ary")
+#define CHECK_STRING(v) rb_convert_type((v), T_STRING, "String", "to_str")
+#define CHECK_SYMBOL(v) rb_convert_type((v), T_SYMBOL, "Symbol", "to_sym")
+static inline VALUE CHECK_INTEGER(VALUE v) {(void)NUM2LONG(v); return v;}
+
+VALUE
+rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE locals, VALUE args,
+ VALUE exception, VALUE body)
+{
+ int i;
+ ID *tbl;
+ struct st_table *labels_table = st_init_numtable();
+ DECL_ANCHOR(anchor);
+ INIT_ANCHOR(anchor);
+
+ iseq->local_table_size = RARRAY_LENINT(locals);
+ iseq->local_table = tbl = (ID *)ALLOC_N(ID, iseq->local_table_size);
+ iseq->local_size = iseq->local_table_size + 1;
+
+ for (i=0; i<RARRAY_LEN(locals); i++) {
+ VALUE lv = RARRAY_AREF(locals, i);
+ tbl[i] = FIXNUM_P(lv) ? (ID)FIX2LONG(lv) : SYM2ID(CHECK_SYMBOL(lv));
+ }
+
+ /* args */
+ if (FIXNUM_P(args)) {
+ iseq->arg_size = iseq->argc = FIX2INT(args);
+ iseq->arg_simple = 1;
+ }
+ else {
+ int i = 0;
+ VALUE argc = CHECK_INTEGER(rb_ary_entry(args, i++));
+ VALUE arg_opt_labels = CHECK_ARRAY(rb_ary_entry(args, i++));
+ VALUE arg_post_len = CHECK_INTEGER(rb_ary_entry(args, i++));
+ VALUE arg_post_start = CHECK_INTEGER(rb_ary_entry(args, i++));
+ VALUE arg_rest = CHECK_INTEGER(rb_ary_entry(args, i++));
+ VALUE arg_block = CHECK_INTEGER(rb_ary_entry(args, i++));
+ VALUE arg_simple = CHECK_INTEGER(rb_ary_entry(args, i++));
+
+ iseq->argc = FIX2INT(argc);
+ iseq->arg_rest = FIX2INT(arg_rest);
+ iseq->arg_post_len = FIX2INT(arg_post_len);
+ iseq->arg_post_start = FIX2INT(arg_post_start);
+ iseq->arg_block = FIX2INT(arg_block);
+ iseq->arg_opts = RARRAY_LENINT(arg_opt_labels);
+ iseq->arg_opt_table = (VALUE *)ALLOC_N(VALUE, iseq->arg_opts);
+
+ if (iseq->arg_block != -1) {
+ iseq->arg_size = iseq->arg_block + 1;
+ }
+ else if (iseq->arg_post_len) {
+ iseq->arg_size = iseq->arg_post_start + iseq->arg_post_len;
+ }
+ else if (iseq->arg_rest != -1) {
+ iseq->arg_size = iseq->arg_rest + 1;
+ }
+ else {
+ iseq->arg_size = iseq->argc + (iseq->arg_opts ? iseq->arg_opts - 1 : 0);
+ }
+
+ for (i=0; i<RARRAY_LEN(arg_opt_labels); i++) {
+ iseq->arg_opt_table[i] =
+ (VALUE)register_label(iseq, labels_table,
+ rb_ary_entry(arg_opt_labels, i));
+ }
+
+ iseq->arg_simple = NUM2INT(arg_simple);
+ }
+
+ /* exception */
+ iseq_build_from_ary_exception(iseq, labels_table, exception);
+
+ /* body */
+ iseq_build_from_ary_body(iseq, anchor, body, labels_table);
+ return iseq->self;
+}
+
+/* for parser */
+
+int
+rb_dvar_defined(ID id)
+{
+ rb_thread_t *th = GET_THREAD();
+ rb_iseq_t *iseq;
+ if (th->base_block && (iseq = th->base_block->iseq)) {
+ while (iseq->type == ISEQ_TYPE_BLOCK ||
+ iseq->type == ISEQ_TYPE_RESCUE ||
+ iseq->type == ISEQ_TYPE_ENSURE ||
+ iseq->type == ISEQ_TYPE_EVAL ||
+ iseq->type == ISEQ_TYPE_MAIN
+ ) {
+ int i;
+
+ for (i = 0; i < iseq->local_table_size; i++) {
+ if (iseq->local_table[i] == id) {
+ return 1;
+ }
+ }
+ iseq = iseq->parent_iseq;
+ }
+ }
+ return 0;
+}
+
+int
+rb_local_defined(ID id)
+{
+ rb_thread_t *th = GET_THREAD();
+ rb_iseq_t *iseq;
+
+ if (th->base_block && th->base_block->iseq) {
+ int i;
+ iseq = th->base_block->iseq->local_iseq;
+
+ for (i=0; i<iseq->local_table_size; i++) {
+ if (iseq->local_table[i] == id) {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+int
+rb_parse_in_eval(void)
+{
+ return GET_THREAD()->parse_in_eval > 0;
+}
+
+int
+rb_parse_in_main(void)
+{
+ return GET_THREAD()->parse_in_eval < 0;
+}
diff --git a/complex.c b/complex.c
new file mode 100644
index 0000000000..e1d5ff9f2a
--- /dev/null
+++ b/complex.c
@@ -0,0 +1,2211 @@
+/*
+ complex.c: Coded by Tadayoshi Funaba 2008-2012
+
+ This implementation is based on Keiju Ishitsuka's Complex library
+ which is written in ruby.
+*/
+
+#include "ruby.h"
+#include "internal.h"
+#include <math.h>
+
+#define NDEBUG
+#include <assert.h>
+
+#define ZERO INT2FIX(0)
+#define ONE INT2FIX(1)
+#define TWO INT2FIX(2)
+
+VALUE rb_cComplex;
+
+static ID id_abs, id_arg, id_convert,
+ id_denominator, id_eqeq_p, id_expt, id_fdiv,
+ id_inspect, id_negate, id_numerator, id_quo,
+ id_real_p, id_to_f, id_to_i, id_to_r, id_to_s,
+ id_i_real, id_i_imag;
+
+#define f_boolcast(x) ((x) ? Qtrue : Qfalse)
+
+#define binop(n,op) \
+inline static VALUE \
+f_##n(VALUE x, VALUE y)\
+{\
+ return rb_funcall(x, (op), 1, y);\
+}
+
+#define fun1(n) \
+inline static VALUE \
+f_##n(VALUE x)\
+{\
+ return rb_funcall(x, id_##n, 0);\
+}
+
+#define fun2(n) \
+inline static VALUE \
+f_##n(VALUE x, VALUE y)\
+{\
+ return rb_funcall(x, id_##n, 1, y);\
+}
+
+#define math1(n) \
+inline static VALUE \
+m_##n(VALUE x)\
+{\
+ return rb_funcall(rb_mMath, id_##n, 1, x);\
+}
+
+#define math2(n) \
+inline static VALUE \
+m_##n(VALUE x, VALUE y)\
+{\
+ return rb_funcall(rb_mMath, id_##n, 2, x, y);\
+}
+
+#define PRESERVE_SIGNEDZERO
+
+inline static VALUE
+f_add(VALUE x, VALUE y)
+{
+#ifndef PRESERVE_SIGNEDZERO
+ if (FIXNUM_P(y) && FIX2LONG(y) == 0)
+ return x;
+ else if (FIXNUM_P(x) && FIX2LONG(x) == 0)
+ return y;
+#endif
+ return rb_funcall(x, '+', 1, y);
+}
+
+inline static VALUE
+f_div(VALUE x, VALUE y)
+{
+ if (FIXNUM_P(y) && FIX2LONG(y) == 1)
+ return x;
+ return rb_funcall(x, '/', 1, y);
+}
+
+inline static VALUE
+f_gt_p(VALUE x, VALUE y)
+{
+ if (FIXNUM_P(x) && FIXNUM_P(y))
+ return f_boolcast(FIX2LONG(x) > FIX2LONG(y));
+ return rb_funcall(x, '>', 1, y);
+}
+
+inline static VALUE
+f_mul(VALUE x, VALUE y)
+{
+#ifndef PRESERVE_SIGNEDZERO
+ if (FIXNUM_P(y)) {
+ long iy = FIX2LONG(y);
+ if (iy == 0) {
+ if (FIXNUM_P(x) || RB_TYPE_P(x, T_BIGNUM))
+ return ZERO;
+ }
+ else if (iy == 1)
+ return x;
+ }
+ else if (FIXNUM_P(x)) {
+ long ix = FIX2LONG(x);
+ if (ix == 0) {
+ if (FIXNUM_P(y) || RB_TYPE_P(y, T_BIGNUM))
+ return ZERO;
+ }
+ else if (ix == 1)
+ return y;
+ }
+#endif
+ return rb_funcall(x, '*', 1, y);
+}
+
+inline static VALUE
+f_sub(VALUE x, VALUE y)
+{
+#ifndef PRESERVE_SIGNEDZERO
+ if (FIXNUM_P(y) && FIX2LONG(y) == 0)
+ return x;
+#endif
+ return rb_funcall(x, '-', 1, y);
+}
+
+fun1(abs)
+fun1(arg)
+fun1(denominator)
+fun1(inspect)
+fun1(negate)
+fun1(numerator)
+fun1(real_p)
+
+inline static VALUE
+f_to_i(VALUE x)
+{
+ if (RB_TYPE_P(x, T_STRING))
+ return rb_str_to_inum(x, 10, 0);
+ return rb_funcall(x, id_to_i, 0);
+}
+inline static VALUE
+f_to_f(VALUE x)
+{
+ if (RB_TYPE_P(x, T_STRING))
+ return DBL2NUM(rb_str_to_dbl(x, 0));
+ return rb_funcall(x, id_to_f, 0);
+}
+
+fun1(to_r)
+fun1(to_s)
+
+inline static VALUE
+f_eqeq_p(VALUE x, VALUE y)
+{
+ if (FIXNUM_P(x) && FIXNUM_P(y))
+ return f_boolcast(FIX2LONG(x) == FIX2LONG(y));
+ return rb_funcall(x, id_eqeq_p, 1, y);
+}
+
+fun2(expt)
+fun2(fdiv)
+fun2(quo)
+
+inline static VALUE
+f_negative_p(VALUE x)
+{
+ if (FIXNUM_P(x))
+ return f_boolcast(FIX2LONG(x) < 0);
+ return rb_funcall(x, '<', 1, ZERO);
+}
+
+#define f_positive_p(x) (!f_negative_p(x))
+
+inline static VALUE
+f_zero_p(VALUE x)
+{
+ if (RB_TYPE_P(x, T_FIXNUM)) {
+ return f_boolcast(FIX2LONG(x) == 0);
+ }
+ else if (RB_TYPE_P(x, T_BIGNUM)) {
+ return Qfalse;
+ }
+ else if (RB_TYPE_P(x, T_RATIONAL)) {
+ VALUE num = RRATIONAL(x)->num;
+
+ return f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 0);
+ }
+ return rb_funcall(x, id_eqeq_p, 1, ZERO);
+}
+
+#define f_nonzero_p(x) (!f_zero_p(x))
+
+inline static VALUE
+f_one_p(VALUE x)
+{
+ if (RB_TYPE_P(x, T_FIXNUM)) {
+ return f_boolcast(FIX2LONG(x) == 1);
+ }
+ else if (RB_TYPE_P(x, T_BIGNUM)) {
+ return Qfalse;
+ }
+ else if (RB_TYPE_P(x, T_RATIONAL)) {
+ VALUE num = RRATIONAL(x)->num;
+ VALUE den = RRATIONAL(x)->den;
+
+ return f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 1 &&
+ FIXNUM_P(den) && FIX2LONG(den) == 1);
+ }
+ return rb_funcall(x, id_eqeq_p, 1, ONE);
+}
+
+inline static VALUE
+f_kind_of_p(VALUE x, VALUE c)
+{
+ return rb_obj_is_kind_of(x, c);
+}
+
+inline static VALUE
+k_numeric_p(VALUE x)
+{
+ return f_kind_of_p(x, rb_cNumeric);
+}
+
+inline static VALUE
+k_fixnum_p(VALUE x)
+{
+ return f_kind_of_p(x, rb_cFixnum);
+}
+
+inline static VALUE
+k_bignum_p(VALUE x)
+{
+ return f_kind_of_p(x, rb_cBignum);
+}
+
+inline static VALUE
+k_float_p(VALUE x)
+{
+ return f_kind_of_p(x, rb_cFloat);
+}
+
+inline static VALUE
+k_rational_p(VALUE x)
+{
+ return f_kind_of_p(x, rb_cRational);
+}
+
+inline static VALUE
+k_complex_p(VALUE x)
+{
+ return f_kind_of_p(x, rb_cComplex);
+}
+
+#define k_exact_p(x) (!k_float_p(x))
+#define k_inexact_p(x) k_float_p(x)
+
+#define k_exact_zero_p(x) (k_exact_p(x) && f_zero_p(x))
+#define k_exact_one_p(x) (k_exact_p(x) && f_one_p(x))
+
+#define get_dat1(x) \
+ struct RComplex *dat;\
+ dat = ((struct RComplex *)(x))
+
+#define get_dat2(x,y) \
+ struct RComplex *adat, *bdat;\
+ adat = ((struct RComplex *)(x));\
+ bdat = ((struct RComplex *)(y))
+
+inline static VALUE
+nucomp_s_new_internal(VALUE klass, VALUE real, VALUE imag)
+{
+ NEWOBJ_OF(obj, struct RComplex, klass, T_COMPLEX | (RGENGC_WB_PROTECTED_COMPLEX ? FL_WB_PROTECTED : 0));
+
+ RCOMPLEX_SET_REAL(obj, real);
+ RCOMPLEX_SET_IMAG(obj, imag);
+
+ return (VALUE)obj;
+}
+
+static VALUE
+nucomp_s_alloc(VALUE klass)
+{
+ return nucomp_s_new_internal(klass, ZERO, ZERO);
+}
+
+#if 0
+static VALUE
+nucomp_s_new_bang(int argc, VALUE *argv, VALUE klass)
+{
+ VALUE real, imag;
+
+ switch (rb_scan_args(argc, argv, "11", &real, &imag)) {
+ case 1:
+ if (!k_numeric_p(real))
+ real = f_to_i(real);
+ imag = ZERO;
+ break;
+ default:
+ if (!k_numeric_p(real))
+ real = f_to_i(real);
+ if (!k_numeric_p(imag))
+ imag = f_to_i(imag);
+ break;
+ }
+
+ return nucomp_s_new_internal(klass, real, imag);
+}
+#endif
+
+inline static VALUE
+f_complex_new_bang1(VALUE klass, VALUE x)
+{
+ assert(!k_complex_p(x));
+ return nucomp_s_new_internal(klass, x, ZERO);
+}
+
+inline static VALUE
+f_complex_new_bang2(VALUE klass, VALUE x, VALUE y)
+{
+ assert(!k_complex_p(x));
+ assert(!k_complex_p(y));
+ return nucomp_s_new_internal(klass, x, y);
+}
+
+#ifdef CANONICALIZATION_FOR_MATHN
+#define CANON
+#endif
+
+#ifdef CANON
+static int canonicalization = 0;
+
+RUBY_FUNC_EXPORTED void
+nucomp_canonicalization(int f)
+{
+ canonicalization = f;
+}
+#endif
+
+inline static void
+nucomp_real_check(VALUE num)
+{
+ if (!RB_TYPE_P(num, T_FIXNUM) &&
+ !RB_TYPE_P(num, T_BIGNUM) &&
+ !RB_TYPE_P(num, T_FLOAT) &&
+ !RB_TYPE_P(num, T_RATIONAL)) {
+ if (!k_numeric_p(num) || !f_real_p(num))
+ rb_raise(rb_eTypeError, "not a real");
+ }
+}
+
+inline static VALUE
+nucomp_s_canonicalize_internal(VALUE klass, VALUE real, VALUE imag)
+{
+#ifdef CANON
+#define CL_CANON
+#ifdef CL_CANON
+ if (k_exact_zero_p(imag) && canonicalization)
+ return real;
+#else
+ if (f_zero_p(imag) && canonicalization)
+ return real;
+#endif
+#endif
+ if (f_real_p(real) && f_real_p(imag))
+ return nucomp_s_new_internal(klass, real, imag);
+ else if (f_real_p(real)) {
+ get_dat1(imag);
+
+ return nucomp_s_new_internal(klass,
+ f_sub(real, dat->imag),
+ f_add(ZERO, dat->real));
+ }
+ else if (f_real_p(imag)) {
+ get_dat1(real);
+
+ return nucomp_s_new_internal(klass,
+ dat->real,
+ f_add(dat->imag, imag));
+ }
+ else {
+ get_dat2(real, imag);
+
+ return nucomp_s_new_internal(klass,
+ f_sub(adat->real, bdat->imag),
+ f_add(adat->imag, bdat->real));
+ }
+}
+
+/*
+ * call-seq:
+ * Complex.rect(real[, imag]) -> complex
+ * Complex.rectangular(real[, imag]) -> complex
+ *
+ * Returns a complex object which denotes the given rectangular form.
+ *
+ * Complex.rectangular(1, 2) #=> (1+2i)
+ */
+static VALUE
+nucomp_s_new(int argc, VALUE *argv, VALUE klass)
+{
+ VALUE real, imag;
+
+ switch (rb_scan_args(argc, argv, "11", &real, &imag)) {
+ case 1:
+ nucomp_real_check(real);
+ imag = ZERO;
+ break;
+ default:
+ nucomp_real_check(real);
+ nucomp_real_check(imag);
+ break;
+ }
+
+ return nucomp_s_canonicalize_internal(klass, real, imag);
+}
+
+inline static VALUE
+f_complex_new2(VALUE klass, VALUE x, VALUE y)
+{
+ assert(!k_complex_p(x));
+ return nucomp_s_canonicalize_internal(klass, x, y);
+}
+
+/*
+ * call-seq:
+ * Complex(x[, y]) -> numeric
+ *
+ * Returns x+i*y;
+ *
+ * Complex(1, 2) #=> (1+2i)
+ * Complex('1+2i') #=> (1+2i)
+ *
+ * Syntax of string form:
+ *
+ * string form = extra spaces , complex , extra spaces ;
+ * complex = real part | [ sign ] , imaginary part
+ * | real part , sign , imaginary part
+ * | rational , "@" , rational ;
+ * real part = rational ;
+ * imaginary part = imaginary unit | unsigned rational , imaginary unit ;
+ * rational = [ sign ] , unsigned rational ;
+ * unsigned rational = numerator | numerator , "/" , denominator ;
+ * numerator = integer part | fractional part | integer part , fractional part ;
+ * denominator = digits ;
+ * integer part = digits ;
+ * fractional part = "." , digits , [ ( "e" | "E" ) , [ sign ] , digits ] ;
+ * imaginary unit = "i" | "I" | "j" | "J" ;
+ * sign = "-" | "+" ;
+ * digits = digit , { digit | "_" , digit };
+ * digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
+ * extra spaces = ? \s* ? ;
+ *
+ * See String#to_c.
+ */
+static VALUE
+nucomp_f_complex(int argc, VALUE *argv, VALUE klass)
+{
+ return rb_funcall2(rb_cComplex, id_convert, argc, argv);
+}
+
+#define imp1(n) \
+inline static VALUE \
+m_##n##_bang(VALUE x)\
+{\
+ return rb_math_##n(x);\
+}
+
+#define imp2(n) \
+inline static VALUE \
+m_##n##_bang(VALUE x, VALUE y)\
+{\
+ return rb_math_##n(x, y);\
+}
+
+imp2(atan2)
+imp1(cos)
+imp1(cosh)
+imp1(exp)
+imp2(hypot)
+
+#define m_hypot(x,y) m_hypot_bang((x),(y))
+
+static VALUE
+m_log_bang(VALUE x)
+{
+ return rb_math_log(1, &x);
+}
+
+imp1(sin)
+imp1(sinh)
+
+static VALUE
+m_cos(VALUE x)
+{
+ if (f_real_p(x))
+ return m_cos_bang(x);
+ {
+ get_dat1(x);
+ return f_complex_new2(rb_cComplex,
+ f_mul(m_cos_bang(dat->real),
+ m_cosh_bang(dat->imag)),
+ f_mul(f_negate(m_sin_bang(dat->real)),
+ m_sinh_bang(dat->imag)));
+ }
+}
+
+static VALUE
+m_sin(VALUE x)
+{
+ if (f_real_p(x))
+ return m_sin_bang(x);
+ {
+ get_dat1(x);
+ return f_complex_new2(rb_cComplex,
+ f_mul(m_sin_bang(dat->real),
+ m_cosh_bang(dat->imag)),
+ f_mul(m_cos_bang(dat->real),
+ m_sinh_bang(dat->imag)));
+ }
+}
+
+#if 0
+imp1(sqrt)
+
+static VALUE
+m_sqrt(VALUE x)
+{
+ if (f_real_p(x)) {
+ if (f_positive_p(x))
+ return m_sqrt_bang(x);
+ return f_complex_new2(rb_cComplex, ZERO, m_sqrt_bang(f_negate(x)));
+ }
+ else {
+ get_dat1(x);
+
+ if (f_negative_p(dat->imag))
+ return f_conj(m_sqrt(f_conj(x)));
+ else {
+ VALUE a = f_abs(x);
+ return f_complex_new2(rb_cComplex,
+ m_sqrt_bang(f_div(f_add(a, dat->real), TWO)),
+ m_sqrt_bang(f_div(f_sub(a, dat->real), TWO)));
+ }
+ }
+}
+#endif
+
+inline static VALUE
+f_complex_polar(VALUE klass, VALUE x, VALUE y)
+{
+ assert(!k_complex_p(x));
+ assert(!k_complex_p(y));
+ return nucomp_s_canonicalize_internal(klass,
+ f_mul(x, m_cos(y)),
+ f_mul(x, m_sin(y)));
+}
+
+/*
+ * call-seq:
+ * Complex.polar(abs[, arg]) -> complex
+ *
+ * Returns a complex object which denotes the given polar form.
+ *
+ * Complex.polar(3, 0) #=> (3.0+0.0i)
+ * Complex.polar(3, Math::PI/2) #=> (1.836909530733566e-16+3.0i)
+ * Complex.polar(3, Math::PI) #=> (-3.0+3.673819061467132e-16i)
+ * Complex.polar(3, -Math::PI/2) #=> (1.836909530733566e-16-3.0i)
+ */
+static VALUE
+nucomp_s_polar(int argc, VALUE *argv, VALUE klass)
+{
+ VALUE abs, arg;
+
+ switch (rb_scan_args(argc, argv, "11", &abs, &arg)) {
+ case 1:
+ nucomp_real_check(abs);
+ arg = ZERO;
+ break;
+ default:
+ nucomp_real_check(abs);
+ nucomp_real_check(arg);
+ break;
+ }
+ return f_complex_polar(klass, abs, arg);
+}
+
+/*
+ * call-seq:
+ * cmp.real -> real
+ *
+ * Returns the real part.
+ *
+ * Complex(7).real #=> 7
+ * Complex(9, -4).real #=> 9
+ */
+static VALUE
+nucomp_real(VALUE self)
+{
+ get_dat1(self);
+ return dat->real;
+}
+
+/*
+ * call-seq:
+ * cmp.imag -> real
+ * cmp.imaginary -> real
+ *
+ * Returns the imaginary part.
+ *
+ * Complex(7).imaginary #=> 0
+ * Complex(9, -4).imaginary #=> -4
+ */
+static VALUE
+nucomp_imag(VALUE self)
+{
+ get_dat1(self);
+ return dat->imag;
+}
+
+/*
+ * call-seq:
+ * -cmp -> complex
+ *
+ * Returns negation of the value.
+ *
+ * -Complex(1, 2) #=> (-1-2i)
+ */
+static VALUE
+nucomp_negate(VALUE self)
+{
+ get_dat1(self);
+ return f_complex_new2(CLASS_OF(self),
+ f_negate(dat->real), f_negate(dat->imag));
+}
+
+inline static VALUE
+f_addsub(VALUE self, VALUE other,
+ VALUE (*func)(VALUE, VALUE), ID id)
+{
+ if (k_complex_p(other)) {
+ VALUE real, imag;
+
+ get_dat2(self, other);
+
+ real = (*func)(adat->real, bdat->real);
+ imag = (*func)(adat->imag, bdat->imag);
+
+ return f_complex_new2(CLASS_OF(self), real, imag);
+ }
+ if (k_numeric_p(other) && f_real_p(other)) {
+ get_dat1(self);
+
+ return f_complex_new2(CLASS_OF(self),
+ (*func)(dat->real, other), dat->imag);
+ }
+ return rb_num_coerce_bin(self, other, id);
+}
+
+/*
+ * call-seq:
+ * cmp + numeric -> complex
+ *
+ * Performs addition.
+ *
+ * Complex(2, 3) + Complex(2, 3) #=> (4+6i)
+ * Complex(900) + Complex(1) #=> (901+0i)
+ * Complex(-2, 9) + Complex(-9, 2) #=> (-11+11i)
+ * Complex(9, 8) + 4 #=> (13+8i)
+ * Complex(20, 9) + 9.8 #=> (29.8+9i)
+ */
+static VALUE
+nucomp_add(VALUE self, VALUE other)
+{
+ return f_addsub(self, other, f_add, '+');
+}
+
+/*
+ * call-seq:
+ * cmp - numeric -> complex
+ *
+ * Performs subtraction.
+ *
+ * Complex(2, 3) - Complex(2, 3) #=> (0+0i)
+ * Complex(900) - Complex(1) #=> (899+0i)
+ * Complex(-2, 9) - Complex(-9, 2) #=> (7+7i)
+ * Complex(9, 8) - 4 #=> (5+8i)
+ * Complex(20, 9) - 9.8 #=> (10.2+9i)
+ */
+static VALUE
+nucomp_sub(VALUE self, VALUE other)
+{
+ return f_addsub(self, other, f_sub, '-');
+}
+
+/*
+ * call-seq:
+ * cmp * numeric -> complex
+ *
+ * Performs multiplication.
+ *
+ * Complex(2, 3) * Complex(2, 3) #=> (-5+12i)
+ * Complex(900) * Complex(1) #=> (900+0i)
+ * Complex(-2, 9) * Complex(-9, 2) #=> (0-85i)
+ * Complex(9, 8) * 4 #=> (36+32i)
+ * Complex(20, 9) * 9.8 #=> (196.0+88.2i)
+ */
+static VALUE
+nucomp_mul(VALUE self, VALUE other)
+{
+ if (k_complex_p(other)) {
+ VALUE real, imag;
+
+ get_dat2(self, other);
+
+ real = f_sub(f_mul(adat->real, bdat->real),
+ f_mul(adat->imag, bdat->imag));
+ imag = f_add(f_mul(adat->real, bdat->imag),
+ f_mul(adat->imag, bdat->real));
+
+ return f_complex_new2(CLASS_OF(self), real, imag);
+ }
+ if (k_numeric_p(other) && f_real_p(other)) {
+ get_dat1(self);
+
+ return f_complex_new2(CLASS_OF(self),
+ f_mul(dat->real, other),
+ f_mul(dat->imag, other));
+ }
+ return rb_num_coerce_bin(self, other, '*');
+}
+
+inline static VALUE
+f_divide(VALUE self, VALUE other,
+ VALUE (*func)(VALUE, VALUE), ID id)
+{
+ if (k_complex_p(other)) {
+ int flo;
+ get_dat2(self, other);
+
+ flo = (k_float_p(adat->real) || k_float_p(adat->imag) ||
+ k_float_p(bdat->real) || k_float_p(bdat->imag));
+
+ if (f_gt_p(f_abs(bdat->real), f_abs(bdat->imag))) {
+ VALUE r, n;
+
+ r = (*func)(bdat->imag, bdat->real);
+ n = f_mul(bdat->real, f_add(ONE, f_mul(r, r)));
+ if (flo)
+ return f_complex_new2(CLASS_OF(self),
+ (*func)(self, n),
+ (*func)(f_negate(f_mul(self, r)), n));
+ return f_complex_new2(CLASS_OF(self),
+ (*func)(f_add(adat->real,
+ f_mul(adat->imag, r)), n),
+ (*func)(f_sub(adat->imag,
+ f_mul(adat->real, r)), n));
+ }
+ else {
+ VALUE r, n;
+
+ r = (*func)(bdat->real, bdat->imag);
+ n = f_mul(bdat->imag, f_add(ONE, f_mul(r, r)));
+ if (flo)
+ return f_complex_new2(CLASS_OF(self),
+ (*func)(f_mul(self, r), n),
+ (*func)(f_negate(self), n));
+ return f_complex_new2(CLASS_OF(self),
+ (*func)(f_add(f_mul(adat->real, r),
+ adat->imag), n),
+ (*func)(f_sub(f_mul(adat->imag, r),
+ adat->real), n));
+ }
+ }
+ if (k_numeric_p(other) && f_real_p(other)) {
+ get_dat1(self);
+
+ return f_complex_new2(CLASS_OF(self),
+ (*func)(dat->real, other),
+ (*func)(dat->imag, other));
+ }
+ return rb_num_coerce_bin(self, other, id);
+}
+
+#define rb_raise_zerodiv() rb_raise(rb_eZeroDivError, "divided by 0")
+
+/*
+ * call-seq:
+ * cmp / numeric -> complex
+ * cmp.quo(numeric) -> complex
+ *
+ * Performs division.
+ *
+ * Complex(2, 3) / Complex(2, 3) #=> ((1/1)+(0/1)*i)
+ * Complex(900) / Complex(1) #=> ((900/1)+(0/1)*i)
+ * Complex(-2, 9) / Complex(-9, 2) #=> ((36/85)-(77/85)*i)
+ * Complex(9, 8) / 4 #=> ((9/4)+(2/1)*i)
+ * Complex(20, 9) / 9.8 #=> (2.0408163265306123+0.9183673469387754i)
+ */
+static VALUE
+nucomp_div(VALUE self, VALUE other)
+{
+ return f_divide(self, other, f_quo, id_quo);
+}
+
+#define nucomp_quo nucomp_div
+
+/*
+ * call-seq:
+ * cmp.fdiv(numeric) -> complex
+ *
+ * Performs division as each part is a float, never returns a float.
+ *
+ * Complex(11, 22).fdiv(3) #=> (3.6666666666666665+7.333333333333333i)
+ */
+static VALUE
+nucomp_fdiv(VALUE self, VALUE other)
+{
+ return f_divide(self, other, f_fdiv, id_fdiv);
+}
+
+inline static VALUE
+f_reciprocal(VALUE x)
+{
+ return f_quo(ONE, x);
+}
+
+/*
+ * call-seq:
+ * cmp ** numeric -> complex
+ *
+ * Performs exponentiation.
+ *
+ * Complex('i') ** 2 #=> (-1+0i)
+ * Complex(-8) ** Rational(1, 3) #=> (1.0000000000000002+1.7320508075688772i)
+ */
+static VALUE
+nucomp_expt(VALUE self, VALUE other)
+{
+ if (k_numeric_p(other) && k_exact_zero_p(other))
+ return f_complex_new_bang1(CLASS_OF(self), ONE);
+
+ if (k_rational_p(other) && f_one_p(f_denominator(other)))
+ other = f_numerator(other); /* c14n */
+
+ if (k_complex_p(other)) {
+ get_dat1(other);
+
+ if (k_exact_zero_p(dat->imag))
+ other = dat->real; /* c14n */
+ }
+
+ if (k_complex_p(other)) {
+ VALUE r, theta, nr, ntheta;
+
+ get_dat1(other);
+
+ r = f_abs(self);
+ theta = f_arg(self);
+
+ nr = m_exp_bang(f_sub(f_mul(dat->real, m_log_bang(r)),
+ f_mul(dat->imag, theta)));
+ ntheta = f_add(f_mul(theta, dat->real),
+ f_mul(dat->imag, m_log_bang(r)));
+ return f_complex_polar(CLASS_OF(self), nr, ntheta);
+ }
+ if (k_fixnum_p(other)) {
+ if (f_gt_p(other, ZERO)) {
+ VALUE x, z;
+ long n;
+
+ x = self;
+ z = x;
+ n = FIX2LONG(other) - 1;
+
+ while (n) {
+ long q, r;
+
+ while (1) {
+ get_dat1(x);
+
+ q = n / 2;
+ r = n % 2;
+
+ if (r)
+ break;
+
+ x = nucomp_s_new_internal(CLASS_OF(self),
+ f_sub(f_mul(dat->real, dat->real),
+ f_mul(dat->imag, dat->imag)),
+ f_mul(f_mul(TWO, dat->real), dat->imag));
+ n = q;
+ }
+ z = f_mul(z, x);
+ n--;
+ }
+ return z;
+ }
+ return f_expt(f_reciprocal(self), f_negate(other));
+ }
+ if (k_numeric_p(other) && f_real_p(other)) {
+ VALUE r, theta;
+
+ if (k_bignum_p(other))
+ rb_warn("in a**b, b may be too big");
+
+ r = f_abs(self);
+ theta = f_arg(self);
+
+ return f_complex_polar(CLASS_OF(self), f_expt(r, other),
+ f_mul(theta, other));
+ }
+ return rb_num_coerce_bin(self, other, id_expt);
+}
+
+/*
+ * call-seq:
+ * cmp == object -> true or false
+ *
+ * Returns true if cmp equals object numerically.
+ *
+ * Complex(2, 3) == Complex(2, 3) #=> true
+ * Complex(5) == 5 #=> true
+ * Complex(0) == 0.0 #=> true
+ * Complex('1/3') == 0.33 #=> false
+ * Complex('1/2') == '1/2' #=> false
+ */
+static VALUE
+nucomp_eqeq_p(VALUE self, VALUE other)
+{
+ if (k_complex_p(other)) {
+ get_dat2(self, other);
+
+ return f_boolcast(f_eqeq_p(adat->real, bdat->real) &&
+ f_eqeq_p(adat->imag, bdat->imag));
+ }
+ if (k_numeric_p(other) && f_real_p(other)) {
+ get_dat1(self);
+
+ return f_boolcast(f_eqeq_p(dat->real, other) && f_zero_p(dat->imag));
+ }
+ return f_eqeq_p(other, self);
+}
+
+/* :nodoc: */
+static VALUE
+nucomp_coerce(VALUE self, VALUE other)
+{
+ if (k_numeric_p(other) && f_real_p(other))
+ return rb_assoc_new(f_complex_new_bang1(CLASS_OF(self), other), self);
+ if (RB_TYPE_P(other, T_COMPLEX))
+ return rb_assoc_new(other, self);
+
+ rb_raise(rb_eTypeError, "%s can't be coerced into %s",
+ rb_obj_classname(other), rb_obj_classname(self));
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * cmp.abs -> real
+ * cmp.magnitude -> real
+ *
+ * Returns the absolute part of its polar form.
+ *
+ * Complex(-1).abs #=> 1
+ * Complex(3.0, -4.0).abs #=> 5.0
+ */
+static VALUE
+nucomp_abs(VALUE self)
+{
+ get_dat1(self);
+
+ if (f_zero_p(dat->real)) {
+ VALUE a = f_abs(dat->imag);
+ if (k_float_p(dat->real) && !k_float_p(dat->imag))
+ a = f_to_f(a);
+ return a;
+ }
+ if (f_zero_p(dat->imag)) {
+ VALUE a = f_abs(dat->real);
+ if (!k_float_p(dat->real) && k_float_p(dat->imag))
+ a = f_to_f(a);
+ return a;
+ }
+ return m_hypot(dat->real, dat->imag);
+}
+
+/*
+ * call-seq:
+ * cmp.abs2 -> real
+ *
+ * Returns square of the absolute value.
+ *
+ * Complex(-1).abs2 #=> 1
+ * Complex(3.0, -4.0).abs2 #=> 25.0
+ */
+static VALUE
+nucomp_abs2(VALUE self)
+{
+ get_dat1(self);
+ return f_add(f_mul(dat->real, dat->real),
+ f_mul(dat->imag, dat->imag));
+}
+
+/*
+ * call-seq:
+ * cmp.arg -> float
+ * cmp.angle -> float
+ * cmp.phase -> float
+ *
+ * Returns the angle part of its polar form.
+ *
+ * Complex.polar(3, Math::PI/2).arg #=> 1.5707963267948966
+ */
+static VALUE
+nucomp_arg(VALUE self)
+{
+ get_dat1(self);
+ return m_atan2_bang(dat->imag, dat->real);
+}
+
+/*
+ * call-seq:
+ * cmp.rect -> array
+ * cmp.rectangular -> array
+ *
+ * Returns an array; [cmp.real, cmp.imag].
+ *
+ * Complex(1, 2).rectangular #=> [1, 2]
+ */
+static VALUE
+nucomp_rect(VALUE self)
+{
+ get_dat1(self);
+ return rb_assoc_new(dat->real, dat->imag);
+}
+
+/*
+ * call-seq:
+ * cmp.polar -> array
+ *
+ * Returns an array; [cmp.abs, cmp.arg].
+ *
+ * Complex(1, 2).polar #=> [2.23606797749979, 1.1071487177940904]
+ */
+static VALUE
+nucomp_polar(VALUE self)
+{
+ return rb_assoc_new(f_abs(self), f_arg(self));
+}
+
+/*
+ * call-seq:
+ * cmp.conj -> complex
+ * cmp.conjugate -> complex
+ *
+ * Returns the complex conjugate.
+ *
+ * Complex(1, 2).conjugate #=> (1-2i)
+ */
+static VALUE
+nucomp_conj(VALUE self)
+{
+ get_dat1(self);
+ return f_complex_new2(CLASS_OF(self), dat->real, f_negate(dat->imag));
+}
+
+#if 0
+/* :nodoc: */
+static VALUE
+nucomp_true(VALUE self)
+{
+ return Qtrue;
+}
+#endif
+
+/*
+ * call-seq:
+ * cmp.real? -> false
+ *
+ * Returns false.
+ */
+static VALUE
+nucomp_false(VALUE self)
+{
+ return Qfalse;
+}
+
+#if 0
+/* :nodoc: */
+static VALUE
+nucomp_exact_p(VALUE self)
+{
+ get_dat1(self);
+ return f_boolcast(k_exact_p(dat->real) && k_exact_p(dat->imag));
+}
+
+/* :nodoc: */
+static VALUE
+nucomp_inexact_p(VALUE self)
+{
+ return f_boolcast(!nucomp_exact_p(self));
+}
+#endif
+
+/*
+ * call-seq:
+ * cmp.denominator -> integer
+ *
+ * Returns the denominator (lcm of both denominator - real and imag).
+ *
+ * See numerator.
+ */
+static VALUE
+nucomp_denominator(VALUE self)
+{
+ get_dat1(self);
+ return rb_lcm(f_denominator(dat->real), f_denominator(dat->imag));
+}
+
+/*
+ * call-seq:
+ * cmp.numerator -> numeric
+ *
+ * Returns the numerator.
+ *
+ * 1 2 3+4i <- numerator
+ * - + -i -> ----
+ * 2 3 6 <- denominator
+ *
+ * c = Complex('1/2+2/3i') #=> ((1/2)+(2/3)*i)
+ * n = c.numerator #=> (3+4i)
+ * d = c.denominator #=> 6
+ * n / d #=> ((1/2)+(2/3)*i)
+ * Complex(Rational(n.real, d), Rational(n.imag, d))
+ * #=> ((1/2)+(2/3)*i)
+ * See denominator.
+ */
+static VALUE
+nucomp_numerator(VALUE self)
+{
+ VALUE cd;
+
+ get_dat1(self);
+
+ cd = f_denominator(self);
+ return f_complex_new2(CLASS_OF(self),
+ f_mul(f_numerator(dat->real),
+ f_div(cd, f_denominator(dat->real))),
+ f_mul(f_numerator(dat->imag),
+ f_div(cd, f_denominator(dat->imag))));
+}
+
+/* :nodoc: */
+static VALUE
+nucomp_hash(VALUE self)
+{
+ st_index_t v, h[2];
+ VALUE n;
+
+ get_dat1(self);
+ n = rb_hash(dat->real);
+ h[0] = NUM2LONG(n);
+ n = rb_hash(dat->imag);
+ h[1] = NUM2LONG(n);
+ v = rb_memhash(h, sizeof(h));
+ return LONG2FIX(v);
+}
+
+/* :nodoc: */
+static VALUE
+nucomp_eql_p(VALUE self, VALUE other)
+{
+ if (k_complex_p(other)) {
+ get_dat2(self, other);
+
+ return f_boolcast((CLASS_OF(adat->real) == CLASS_OF(bdat->real)) &&
+ (CLASS_OF(adat->imag) == CLASS_OF(bdat->imag)) &&
+ f_eqeq_p(self, other));
+
+ }
+ return Qfalse;
+}
+
+inline static VALUE
+f_signbit(VALUE x)
+{
+#if defined(HAVE_SIGNBIT) && defined(__GNUC__) && defined(__sun) && \
+ !defined(signbit)
+ extern int signbit(double);
+#endif
+ if (RB_TYPE_P(x, T_FLOAT)) {
+ double f = RFLOAT_VALUE(x);
+ return f_boolcast(!isnan(f) && signbit(f));
+ }
+ return f_negative_p(x);
+}
+
+inline static VALUE
+f_tpositive_p(VALUE x)
+{
+ return f_boolcast(!f_signbit(x));
+}
+
+static VALUE
+f_format(VALUE self, VALUE (*func)(VALUE))
+{
+ VALUE s, impos;
+
+ get_dat1(self);
+
+ impos = f_tpositive_p(dat->imag);
+
+ s = (*func)(dat->real);
+ rb_str_cat2(s, !impos ? "-" : "+");
+
+ rb_str_concat(s, (*func)(f_abs(dat->imag)));
+ if (!rb_isdigit(RSTRING_PTR(s)[RSTRING_LEN(s) - 1]))
+ rb_str_cat2(s, "*");
+ rb_str_cat2(s, "i");
+
+ return s;
+}
+
+/*
+ * call-seq:
+ * cmp.to_s -> string
+ *
+ * Returns the value as a string.
+ *
+ * Complex(2).to_s #=> "2+0i"
+ * Complex('-8/6').to_s #=> "-4/3+0i"
+ * Complex('1/2i').to_s #=> "0+1/2i"
+ * Complex(0, Float::INFINITY).to_s #=> "0+Infinity*i"
+ * Complex(Float::NAN, Float::NAN).to_s #=> "NaN+NaN*i"
+ */
+static VALUE
+nucomp_to_s(VALUE self)
+{
+ return f_format(self, f_to_s);
+}
+
+/*
+ * call-seq:
+ * cmp.inspect -> string
+ *
+ * Returns the value as a string for inspection.
+ *
+ * Complex(2).inspect #=> "(2+0i)"
+ * Complex('-8/6').inspect #=> "((-4/3)+0i)"
+ * Complex('1/2i').inspect #=> "(0+(1/2)*i)"
+ * Complex(0, Float::INFINITY).inspect #=> "(0+Infinity*i)"
+ * Complex(Float::NAN, Float::NAN).inspect #=> "(NaN+NaN*i)"
+ */
+static VALUE
+nucomp_inspect(VALUE self)
+{
+ VALUE s;
+
+ s = rb_usascii_str_new2("(");
+ rb_str_concat(s, f_format(self, f_inspect));
+ rb_str_cat2(s, ")");
+
+ return s;
+}
+
+/* :nodoc: */
+static VALUE
+nucomp_dumper(VALUE self)
+{
+ return self;
+}
+
+/* :nodoc: */
+static VALUE
+nucomp_loader(VALUE self, VALUE a)
+{
+ get_dat1(self);
+
+ RCOMPLEX_SET_REAL(dat, rb_ivar_get(a, id_i_real));
+ RCOMPLEX_SET_IMAG(dat, rb_ivar_get(a, id_i_imag));
+
+ return self;
+}
+
+/* :nodoc: */
+static VALUE
+nucomp_marshal_dump(VALUE self)
+{
+ VALUE a;
+ get_dat1(self);
+
+ a = rb_assoc_new(dat->real, dat->imag);
+ rb_copy_generic_ivar(a, self);
+ return a;
+}
+
+/* :nodoc: */
+static VALUE
+nucomp_marshal_load(VALUE self, VALUE a)
+{
+ Check_Type(a, T_ARRAY);
+ if (RARRAY_LEN(a) != 2)
+ rb_raise(rb_eArgError, "marshaled complex must have an array whose length is 2 but %ld", RARRAY_LEN(a));
+ rb_ivar_set(self, id_i_real, RARRAY_AREF(a, 0));
+ rb_ivar_set(self, id_i_imag, RARRAY_AREF(a, 1));
+ return self;
+}
+
+/* --- */
+
+VALUE
+rb_complex_raw(VALUE x, VALUE y)
+{
+ return nucomp_s_new_internal(rb_cComplex, x, y);
+}
+
+VALUE
+rb_complex_new(VALUE x, VALUE y)
+{
+ return nucomp_s_canonicalize_internal(rb_cComplex, x, y);
+}
+
+VALUE
+rb_complex_polar(VALUE x, VALUE y)
+{
+ return f_complex_polar(rb_cComplex, x, y);
+}
+
+static VALUE nucomp_s_convert(int argc, VALUE *argv, VALUE klass);
+
+VALUE
+rb_Complex(VALUE x, VALUE y)
+{
+ VALUE a[2];
+ a[0] = x;
+ a[1] = y;
+ return nucomp_s_convert(2, a, rb_cComplex);
+}
+
+/*
+ * call-seq:
+ * cmp.to_i -> integer
+ *
+ * Returns the value as an integer if possible (the imaginary part
+ * should be exactly zero).
+ *
+ * Complex(1, 0).to_i #=> 1
+ * Complex(1, 0.0).to_i # RangeError
+ * Complex(1, 2).to_i # RangeError
+ */
+static VALUE
+nucomp_to_i(VALUE self)
+{
+ get_dat1(self);
+
+ if (k_inexact_p(dat->imag) || f_nonzero_p(dat->imag)) {
+ VALUE s = f_to_s(self);
+ rb_raise(rb_eRangeError, "can't convert %s into Integer",
+ StringValuePtr(s));
+ }
+ return f_to_i(dat->real);
+}
+
+/*
+ * call-seq:
+ * cmp.to_f -> float
+ *
+ * Returns the value as a float if possible (the imaginary part should
+ * be exactly zero).
+ *
+ * Complex(1, 0).to_f #=> 1.0
+ * Complex(1, 0.0).to_f # RangeError
+ * Complex(1, 2).to_f # RangeError
+ */
+static VALUE
+nucomp_to_f(VALUE self)
+{
+ get_dat1(self);
+
+ if (k_inexact_p(dat->imag) || f_nonzero_p(dat->imag)) {
+ VALUE s = f_to_s(self);
+ rb_raise(rb_eRangeError, "can't convert %s into Float",
+ StringValuePtr(s));
+ }
+ return f_to_f(dat->real);
+}
+
+/*
+ * call-seq:
+ * cmp.to_r -> rational
+ *
+ * Returns the value as a rational if possible (the imaginary part
+ * should be exactly zero).
+ *
+ * Complex(1, 0).to_r #=> (1/1)
+ * Complex(1, 0.0).to_r # RangeError
+ * Complex(1, 2).to_r # RangeError
+ *
+ * See rationalize.
+ */
+static VALUE
+nucomp_to_r(VALUE self)
+{
+ get_dat1(self);
+
+ if (k_inexact_p(dat->imag) || f_nonzero_p(dat->imag)) {
+ VALUE s = f_to_s(self);
+ rb_raise(rb_eRangeError, "can't convert %s into Rational",
+ StringValuePtr(s));
+ }
+ return f_to_r(dat->real);
+}
+
+/*
+ * call-seq:
+ * cmp.rationalize([eps]) -> rational
+ *
+ * Returns the value as a rational if possible (the imaginary part
+ * should be exactly zero).
+ *
+ * Complex(1.0/3, 0).rationalize #=> (1/3)
+ * Complex(1, 0.0).rationalize # RangeError
+ * Complex(1, 2).rationalize # RangeError
+ *
+ * See to_r.
+ */
+static VALUE
+nucomp_rationalize(int argc, VALUE *argv, VALUE self)
+{
+ get_dat1(self);
+
+ rb_scan_args(argc, argv, "01", NULL);
+
+ if (k_inexact_p(dat->imag) || f_nonzero_p(dat->imag)) {
+ VALUE s = f_to_s(self);
+ rb_raise(rb_eRangeError, "can't convert %s into Rational",
+ StringValuePtr(s));
+ }
+ return rb_funcall2(dat->real, rb_intern("rationalize"), argc, argv);
+}
+
+/*
+ * call-seq:
+ * complex.to_c -> self
+ *
+ * Returns self.
+ *
+ * Complex(2).to_c #=> (2+0i)
+ * Complex(-8, 6).to_c #=> (-8+6i)
+ */
+static VALUE
+nucomp_to_c(VALUE self)
+{
+ return self;
+}
+
+/*
+ * call-seq:
+ * nil.to_c -> (0+0i)
+ *
+ * Returns zero as a complex.
+ */
+static VALUE
+nilclass_to_c(VALUE self)
+{
+ return rb_complex_new1(INT2FIX(0));
+}
+
+/*
+ * call-seq:
+ * num.to_c -> complex
+ *
+ * Returns the value as a complex.
+ */
+static VALUE
+numeric_to_c(VALUE self)
+{
+ return rb_complex_new1(self);
+}
+
+#include <ctype.h>
+
+inline static int
+issign(int c)
+{
+ return (c == '-' || c == '+');
+}
+
+static int
+read_sign(const char **s,
+ char **b)
+{
+ int sign = '?';
+
+ if (issign(**s)) {
+ sign = **b = **s;
+ (*s)++;
+ (*b)++;
+ }
+ return sign;
+}
+
+inline static int
+isdecimal(int c)
+{
+ return isdigit((unsigned char)c);
+}
+
+static int
+read_digits(const char **s, int strict,
+ char **b)
+{
+ int us = 1;
+
+ if (!isdecimal(**s))
+ return 0;
+
+ while (isdecimal(**s) || **s == '_') {
+ if (**s == '_') {
+ if (strict) {
+ if (us)
+ return 0;
+ }
+ us = 1;
+ }
+ else {
+ **b = **s;
+ (*b)++;
+ us = 0;
+ }
+ (*s)++;
+ }
+ if (us)
+ do {
+ (*s)--;
+ } while (**s == '_');
+ return 1;
+}
+
+inline static int
+islettere(int c)
+{
+ return (c == 'e' || c == 'E');
+}
+
+static int
+read_num(const char **s, int strict,
+ char **b)
+{
+ if (**s != '.') {
+ if (!read_digits(s, strict, b))
+ return 0;
+ }
+
+ if (**s == '.') {
+ **b = **s;
+ (*s)++;
+ (*b)++;
+ if (!read_digits(s, strict, b)) {
+ (*b)--;
+ return 0;
+ }
+ }
+
+ if (islettere(**s)) {
+ **b = **s;
+ (*s)++;
+ (*b)++;
+ read_sign(s, b);
+ if (!read_digits(s, strict, b)) {
+ (*b)--;
+ return 0;
+ }
+ }
+ return 1;
+}
+
+inline static int
+read_den(const char **s, int strict,
+ char **b)
+{
+ if (!read_digits(s, strict, b))
+ return 0;
+ return 1;
+}
+
+static int
+read_rat_nos(const char **s, int strict,
+ char **b)
+{
+ if (!read_num(s, strict, b))
+ return 0;
+ if (**s == '/') {
+ **b = **s;
+ (*s)++;
+ (*b)++;
+ if (!read_den(s, strict, b)) {
+ (*b)--;
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int
+read_rat(const char **s, int strict,
+ char **b)
+{
+ read_sign(s, b);
+ if (!read_rat_nos(s, strict, b))
+ return 0;
+ return 1;
+}
+
+inline static int
+isimagunit(int c)
+{
+ return (c == 'i' || c == 'I' ||
+ c == 'j' || c == 'J');
+}
+
+VALUE rb_cstr_to_rat(const char *, int);
+
+static VALUE
+str2num(char *s)
+{
+ if (strchr(s, '/'))
+ return rb_cstr_to_rat(s, 0);
+ if (strpbrk(s, ".eE"))
+ return DBL2NUM(rb_cstr_to_dbl(s, 0));
+ return rb_cstr_to_inum(s, 10, 0);
+}
+
+static int
+read_comp(const char **s, int strict,
+ VALUE *ret, char **b)
+{
+ char *bb;
+ int sign;
+ VALUE num, num2;
+
+ bb = *b;
+
+ sign = read_sign(s, b);
+
+ if (isimagunit(**s)) {
+ (*s)++;
+ num = INT2FIX((sign == '-') ? -1 : + 1);
+ *ret = rb_complex_new2(ZERO, num);
+ return 1; /* e.g. "i" */
+ }
+
+ if (!read_rat_nos(s, strict, b)) {
+ **b = '\0';
+ num = str2num(bb);
+ *ret = rb_complex_new2(num, ZERO);
+ return 0; /* e.g. "-" */
+ }
+ **b = '\0';
+ num = str2num(bb);
+
+ if (isimagunit(**s)) {
+ (*s)++;
+ *ret = rb_complex_new2(ZERO, num);
+ return 1; /* e.g. "3i" */
+ }
+
+ if (**s == '@') {
+ int st;
+
+ (*s)++;
+ bb = *b;
+ st = read_rat(s, strict, b);
+ **b = '\0';
+ if (strlen(bb) < 1 ||
+ !isdecimal(*(bb + strlen(bb) - 1))) {
+ *ret = rb_complex_new2(num, ZERO);
+ return 0; /* e.g. "1@-" */
+ }
+ num2 = str2num(bb);
+ *ret = rb_complex_polar(num, num2);
+ if (!st)
+ return 0; /* e.g. "1@2." */
+ else
+ return 1; /* e.g. "1@2" */
+ }
+
+ if (issign(**s)) {
+ bb = *b;
+ sign = read_sign(s, b);
+ if (isimagunit(**s))
+ num2 = INT2FIX((sign == '-') ? -1 : + 1);
+ else {
+ if (!read_rat_nos(s, strict, b)) {
+ *ret = rb_complex_new2(num, ZERO);
+ return 0; /* e.g. "1+xi" */
+ }
+ **b = '\0';
+ num2 = str2num(bb);
+ }
+ if (!isimagunit(**s)) {
+ *ret = rb_complex_new2(num, ZERO);
+ return 0; /* e.g. "1+3x" */
+ }
+ (*s)++;
+ *ret = rb_complex_new2(num, num2);
+ return 1; /* e.g. "1+2i" */
+ }
+ /* !(@, - or +) */
+ {
+ *ret = rb_complex_new2(num, ZERO);
+ return 1; /* e.g. "3" */
+ }
+}
+
+inline static void
+skip_ws(const char **s)
+{
+ while (isspace((unsigned char)**s))
+ (*s)++;
+}
+
+static int
+parse_comp(const char *s, int strict,
+ VALUE *num)
+{
+ char *buf, *b;
+ VALUE tmp;
+ int ret = 1;
+
+ buf = ALLOCV_N(char, tmp, strlen(s) + 1);
+ b = buf;
+
+ skip_ws(&s);
+ if (!read_comp(&s, strict, num, &b)) {
+ ret = 0;
+ }
+ else {
+ skip_ws(&s);
+
+ if (strict)
+ if (*s != '\0')
+ ret = 0;
+ }
+ ALLOCV_END(tmp);
+
+ return ret;
+}
+
+static VALUE
+string_to_c_strict(VALUE self)
+{
+ char *s;
+ VALUE num;
+
+ rb_must_asciicompat(self);
+
+ s = RSTRING_PTR(self);
+
+ if (!s || memchr(s, '\0', RSTRING_LEN(self)))
+ rb_raise(rb_eArgError, "string contains null byte");
+
+ if (s && s[RSTRING_LEN(self)]) {
+ rb_str_modify(self);
+ s = RSTRING_PTR(self);
+ s[RSTRING_LEN(self)] = '\0';
+ }
+
+ if (!s)
+ s = (char *)"";
+
+ if (!parse_comp(s, 1, &num)) {
+ VALUE ins = f_inspect(self);
+ rb_raise(rb_eArgError, "invalid value for convert(): %s",
+ StringValuePtr(ins));
+ }
+
+ return num;
+}
+
+/*
+ * call-seq:
+ * str.to_c -> complex
+ *
+ * Returns a complex which denotes the string form. The parser
+ * ignores leading whitespaces and trailing garbage. Any digit
+ * sequences can be separated by an underscore. Returns zero for null
+ * or garbage string.
+ *
+ * '9'.to_c #=> (9+0i)
+ * '2.5'.to_c #=> (2.5+0i)
+ * '2.5/1'.to_c #=> ((5/2)+0i)
+ * '-3/2'.to_c #=> ((-3/2)+0i)
+ * '-i'.to_c #=> (0-1i)
+ * '45i'.to_c #=> (0+45i)
+ * '3-4i'.to_c #=> (3-4i)
+ * '-4e2-4e-2i'.to_c #=> (-400.0-0.04i)
+ * '-0.0-0.0i'.to_c #=> (-0.0-0.0i)
+ * '1/2+3/4i'.to_c #=> ((1/2)+(3/4)*i)
+ * 'ruby'.to_c #=> (0+0i)
+ *
+ * See Kernel.Complex.
+ */
+static VALUE
+string_to_c(VALUE self)
+{
+ char *s;
+ VALUE num;
+
+ rb_must_asciicompat(self);
+
+ s = RSTRING_PTR(self);
+
+ if (s && s[RSTRING_LEN(self)]) {
+ rb_str_modify(self);
+ s = RSTRING_PTR(self);
+ s[RSTRING_LEN(self)] = '\0';
+ }
+
+ if (!s)
+ s = (char *)"";
+
+ (void)parse_comp(s, 0, &num);
+
+ return num;
+}
+
+static VALUE
+nucomp_s_convert(int argc, VALUE *argv, VALUE klass)
+{
+ VALUE a1, a2, backref;
+
+ rb_scan_args(argc, argv, "11", &a1, &a2);
+
+ if (NIL_P(a1) || (argc == 2 && NIL_P(a2)))
+ rb_raise(rb_eTypeError, "can't convert nil into Complex");
+
+ backref = rb_backref_get();
+ rb_match_busy(backref);
+
+ if (RB_TYPE_P(a1, T_STRING)) {
+ a1 = string_to_c_strict(a1);
+ }
+
+ if (RB_TYPE_P(a2, T_STRING)) {
+ a2 = string_to_c_strict(a2);
+ }
+
+ rb_backref_set(backref);
+
+ if (RB_TYPE_P(a1, T_COMPLEX)) {
+ {
+ get_dat1(a1);
+
+ if (k_exact_zero_p(dat->imag))
+ a1 = dat->real;
+ }
+ }
+
+ if (RB_TYPE_P(a2, T_COMPLEX)) {
+ {
+ get_dat1(a2);
+
+ if (k_exact_zero_p(dat->imag))
+ a2 = dat->real;
+ }
+ }
+
+ if (RB_TYPE_P(a1, T_COMPLEX)) {
+ if (argc == 1 || (k_exact_zero_p(a2)))
+ return a1;
+ }
+
+ if (argc == 1) {
+ if (k_numeric_p(a1) && !f_real_p(a1))
+ return a1;
+ /* should raise exception for consistency */
+ if (!k_numeric_p(a1))
+ return rb_convert_type(a1, T_COMPLEX, "Complex", "to_c");
+ }
+ else {
+ if ((k_numeric_p(a1) && k_numeric_p(a2)) &&
+ (!f_real_p(a1) || !f_real_p(a2)))
+ return f_add(a1,
+ f_mul(a2,
+ f_complex_new_bang2(rb_cComplex, ZERO, ONE)));
+ }
+
+ {
+ VALUE argv2[2];
+ argv2[0] = a1;
+ argv2[1] = a2;
+ return nucomp_s_new(argc, argv2, klass);
+ }
+}
+
+/* --- */
+
+/*
+ * call-seq:
+ * num.real -> self
+ *
+ * Returns self.
+ */
+static VALUE
+numeric_real(VALUE self)
+{
+ return self;
+}
+
+/*
+ * call-seq:
+ * num.imag -> 0
+ * num.imaginary -> 0
+ *
+ * Returns zero.
+ */
+static VALUE
+numeric_imag(VALUE self)
+{
+ return INT2FIX(0);
+}
+
+/*
+ * call-seq:
+ * num.abs2 -> real
+ *
+ * Returns square of self.
+ */
+static VALUE
+numeric_abs2(VALUE self)
+{
+ return f_mul(self, self);
+}
+
+#define id_PI rb_intern("PI")
+
+/*
+ * call-seq:
+ * num.arg -> 0 or float
+ * num.angle -> 0 or float
+ * num.phase -> 0 or float
+ *
+ * Returns 0 if the value is positive, pi otherwise.
+ */
+static VALUE
+numeric_arg(VALUE self)
+{
+ if (f_positive_p(self))
+ return INT2FIX(0);
+ return rb_const_get(rb_mMath, id_PI);
+}
+
+/*
+ * call-seq:
+ * num.rect -> array
+ * num.rectangular -> array
+ *
+ * Returns an array; [num, 0].
+ */
+static VALUE
+numeric_rect(VALUE self)
+{
+ return rb_assoc_new(self, INT2FIX(0));
+}
+
+/*
+ * call-seq:
+ * num.polar -> array
+ *
+ * Returns an array; [num.abs, num.arg].
+ */
+static VALUE
+numeric_polar(VALUE self)
+{
+ return rb_assoc_new(f_abs(self), f_arg(self));
+}
+
+/*
+ * call-seq:
+ * num.conj -> self
+ * num.conjugate -> self
+ *
+ * Returns self.
+ */
+static VALUE
+numeric_conj(VALUE self)
+{
+ return self;
+}
+
+/*
+ * call-seq:
+ * flo.arg -> 0 or float
+ * flo.angle -> 0 or float
+ * flo.phase -> 0 or float
+ *
+ * Returns 0 if the value is positive, pi otherwise.
+ */
+static VALUE
+float_arg(VALUE self)
+{
+ if (isnan(RFLOAT_VALUE(self)))
+ return self;
+ if (f_tpositive_p(self))
+ return INT2FIX(0);
+ return rb_const_get(rb_mMath, id_PI);
+}
+
+/*
+ * A complex number can be represented as a paired real number with
+ * imaginary unit; a+bi. Where a is real part, b is imaginary part
+ * and i is imaginary unit. Real a equals complex a+0i
+ * mathematically.
+ *
+ * In ruby, you can create complex object with Complex, Complex::rect,
+ * Complex::polar or to_c method.
+ *
+ * Complex(1) #=> (1+0i)
+ * Complex(2, 3) #=> (2+3i)
+ * Complex.polar(2, 3) #=> (-1.9799849932008908+0.2822400161197344i)
+ * 3.to_c #=> (3+0i)
+ *
+ * You can also create complex object from floating-point numbers or
+ * strings.
+ *
+ * Complex(0.3) #=> (0.3+0i)
+ * Complex('0.3-0.5i') #=> (0.3-0.5i)
+ * Complex('2/3+3/4i') #=> ((2/3)+(3/4)*i)
+ * Complex('1@2') #=> (-0.4161468365471424+0.9092974268256817i)
+ *
+ * 0.3.to_c #=> (0.3+0i)
+ * '0.3-0.5i'.to_c #=> (0.3-0.5i)
+ * '2/3+3/4i'.to_c #=> ((2/3)+(3/4)*i)
+ * '1@2'.to_c #=> (-0.4161468365471424+0.9092974268256817i)
+ *
+ * A complex object is either an exact or an inexact number.
+ *
+ * Complex(1, 1) / 2 #=> ((1/2)+(1/2)*i)
+ * Complex(1, 1) / 2.0 #=> (0.5+0.5i)
+ */
+void
+Init_Complex(void)
+{
+ VALUE compat;
+#undef rb_intern
+#define rb_intern(str) rb_intern_const(str)
+
+ assert(fprintf(stderr, "assert() is now active\n"));
+
+ id_abs = rb_intern("abs");
+ id_arg = rb_intern("arg");
+ id_convert = rb_intern("convert");
+ id_denominator = rb_intern("denominator");
+ id_eqeq_p = rb_intern("==");
+ id_expt = rb_intern("**");
+ id_fdiv = rb_intern("fdiv");
+ id_inspect = rb_intern("inspect");
+ id_negate = rb_intern("-@");
+ id_numerator = rb_intern("numerator");
+ id_quo = rb_intern("quo");
+ id_real_p = rb_intern("real?");
+ id_to_f = rb_intern("to_f");
+ id_to_i = rb_intern("to_i");
+ id_to_r = rb_intern("to_r");
+ id_to_s = rb_intern("to_s");
+ id_i_real = rb_intern("@real");
+ id_i_imag = rb_intern("@image"); /* @image, not @imag */
+
+ rb_cComplex = rb_define_class("Complex", rb_cNumeric);
+
+ rb_define_alloc_func(rb_cComplex, nucomp_s_alloc);
+ rb_undef_method(CLASS_OF(rb_cComplex), "allocate");
+
+#if 0
+ rb_define_private_method(CLASS_OF(rb_cComplex), "new!", nucomp_s_new_bang, -1);
+ rb_define_private_method(CLASS_OF(rb_cComplex), "new", nucomp_s_new, -1);
+#else
+ rb_undef_method(CLASS_OF(rb_cComplex), "new");
+#endif
+
+ rb_define_singleton_method(rb_cComplex, "rectangular", nucomp_s_new, -1);
+ rb_define_singleton_method(rb_cComplex, "rect", nucomp_s_new, -1);
+ rb_define_singleton_method(rb_cComplex, "polar", nucomp_s_polar, -1);
+
+ rb_define_global_function("Complex", nucomp_f_complex, -1);
+
+ rb_undef_method(rb_cComplex, "%");
+ rb_undef_method(rb_cComplex, "<");
+ rb_undef_method(rb_cComplex, "<=");
+ rb_undef_method(rb_cComplex, "<=>");
+ rb_undef_method(rb_cComplex, ">");
+ rb_undef_method(rb_cComplex, ">=");
+ rb_undef_method(rb_cComplex, "between?");
+ rb_undef_method(rb_cComplex, "div");
+ rb_undef_method(rb_cComplex, "divmod");
+ rb_undef_method(rb_cComplex, "floor");
+ rb_undef_method(rb_cComplex, "ceil");
+ rb_undef_method(rb_cComplex, "modulo");
+ rb_undef_method(rb_cComplex, "remainder");
+ rb_undef_method(rb_cComplex, "round");
+ rb_undef_method(rb_cComplex, "step");
+ rb_undef_method(rb_cComplex, "truncate");
+ rb_undef_method(rb_cComplex, "i");
+
+#if 0 /* NUBY */
+ rb_undef_method(rb_cComplex, "//");
+#endif
+
+ rb_define_method(rb_cComplex, "real", nucomp_real, 0);
+ rb_define_method(rb_cComplex, "imaginary", nucomp_imag, 0);
+ rb_define_method(rb_cComplex, "imag", nucomp_imag, 0);
+
+ rb_define_method(rb_cComplex, "-@", nucomp_negate, 0);
+ rb_define_method(rb_cComplex, "+", nucomp_add, 1);
+ rb_define_method(rb_cComplex, "-", nucomp_sub, 1);
+ rb_define_method(rb_cComplex, "*", nucomp_mul, 1);
+ rb_define_method(rb_cComplex, "/", nucomp_div, 1);
+ rb_define_method(rb_cComplex, "quo", nucomp_quo, 1);
+ rb_define_method(rb_cComplex, "fdiv", nucomp_fdiv, 1);
+ rb_define_method(rb_cComplex, "**", nucomp_expt, 1);
+
+ rb_define_method(rb_cComplex, "==", nucomp_eqeq_p, 1);
+ rb_define_method(rb_cComplex, "coerce", nucomp_coerce, 1);
+
+ rb_define_method(rb_cComplex, "abs", nucomp_abs, 0);
+ rb_define_method(rb_cComplex, "magnitude", nucomp_abs, 0);
+ rb_define_method(rb_cComplex, "abs2", nucomp_abs2, 0);
+ rb_define_method(rb_cComplex, "arg", nucomp_arg, 0);
+ rb_define_method(rb_cComplex, "angle", nucomp_arg, 0);
+ rb_define_method(rb_cComplex, "phase", nucomp_arg, 0);
+ rb_define_method(rb_cComplex, "rectangular", nucomp_rect, 0);
+ rb_define_method(rb_cComplex, "rect", nucomp_rect, 0);
+ rb_define_method(rb_cComplex, "polar", nucomp_polar, 0);
+ rb_define_method(rb_cComplex, "conjugate", nucomp_conj, 0);
+ rb_define_method(rb_cComplex, "conj", nucomp_conj, 0);
+#if 0
+ rb_define_method(rb_cComplex, "~", nucomp_conj, 0); /* gcc */
+#endif
+
+ rb_define_method(rb_cComplex, "real?", nucomp_false, 0);
+#if 0
+ rb_define_method(rb_cComplex, "complex?", nucomp_true, 0);
+ rb_define_method(rb_cComplex, "exact?", nucomp_exact_p, 0);
+ rb_define_method(rb_cComplex, "inexact?", nucomp_inexact_p, 0);
+#endif
+
+ rb_define_method(rb_cComplex, "numerator", nucomp_numerator, 0);
+ rb_define_method(rb_cComplex, "denominator", nucomp_denominator, 0);
+
+ rb_define_method(rb_cComplex, "hash", nucomp_hash, 0);
+ rb_define_method(rb_cComplex, "eql?", nucomp_eql_p, 1);
+
+ rb_define_method(rb_cComplex, "to_s", nucomp_to_s, 0);
+ rb_define_method(rb_cComplex, "inspect", nucomp_inspect, 0);
+
+ rb_define_private_method(rb_cComplex, "marshal_dump", nucomp_marshal_dump, 0);
+ compat = rb_define_class_under(rb_cComplex, "compatible", rb_cObject);
+ rb_define_private_method(compat, "marshal_load", nucomp_marshal_load, 1);
+ rb_marshal_define_compat(rb_cComplex, compat, nucomp_dumper, nucomp_loader);
+
+ /* --- */
+
+ rb_define_method(rb_cComplex, "to_i", nucomp_to_i, 0);
+ rb_define_method(rb_cComplex, "to_f", nucomp_to_f, 0);
+ rb_define_method(rb_cComplex, "to_r", nucomp_to_r, 0);
+ rb_define_method(rb_cComplex, "rationalize", nucomp_rationalize, -1);
+ rb_define_method(rb_cComplex, "to_c", nucomp_to_c, 0);
+ rb_define_method(rb_cNilClass, "to_c", nilclass_to_c, 0);
+ rb_define_method(rb_cNumeric, "to_c", numeric_to_c, 0);
+
+ rb_define_method(rb_cString, "to_c", string_to_c, 0);
+
+ rb_define_private_method(CLASS_OF(rb_cComplex), "convert", nucomp_s_convert, -1);
+
+ /* --- */
+
+ rb_define_method(rb_cNumeric, "real", numeric_real, 0);
+ rb_define_method(rb_cNumeric, "imaginary", numeric_imag, 0);
+ rb_define_method(rb_cNumeric, "imag", numeric_imag, 0);
+ rb_define_method(rb_cNumeric, "abs2", numeric_abs2, 0);
+ rb_define_method(rb_cNumeric, "arg", numeric_arg, 0);
+ rb_define_method(rb_cNumeric, "angle", numeric_arg, 0);
+ rb_define_method(rb_cNumeric, "phase", numeric_arg, 0);
+ rb_define_method(rb_cNumeric, "rectangular", numeric_rect, 0);
+ rb_define_method(rb_cNumeric, "rect", numeric_rect, 0);
+ rb_define_method(rb_cNumeric, "polar", numeric_polar, 0);
+ rb_define_method(rb_cNumeric, "conjugate", numeric_conj, 0);
+ rb_define_method(rb_cNumeric, "conj", numeric_conj, 0);
+
+ rb_define_method(rb_cFloat, "arg", float_arg, 0);
+ rb_define_method(rb_cFloat, "angle", float_arg, 0);
+ rb_define_method(rb_cFloat, "phase", float_arg, 0);
+
+ /*
+ * The imaginary unit.
+ */
+ rb_define_const(rb_cComplex, "I",
+ f_complex_new_bang2(rb_cComplex, ZERO, ONE));
+}
+
+/*
+Local variables:
+c-file-style: "ruby"
+End:
+*/
diff --git a/config.dj b/config.dj
deleted file mode 100644
index 13f4e6ddb6..0000000000
--- a/config.dj
+++ /dev/null
@@ -1,35 +0,0 @@
-#define THREAD 1
-#define HAVE_DIRENT_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_LIMITS_H 1
-#define HAVE_SYS_FILE_H 1
-#define HAVE_PWD_H 1
-#define HAVE_SYS_TIME_H 1
-#define HAVE_SYS_TIMES_H 1
-#define HAVE_SYS_PARAM_H 1
-#define HAVE_SYS_WAIT_H 1
-#define HAVE_STRING_H 1
-#define HAVE_UTIME_H 1
-#define HAVE_MEMORY_H 1
-#define HAVE_ST_BLKSIZE 1
-#define HAVE_ST_RDEV 1
-#define GETGROUPS_T gid_t
-#define RETSIGTYPE void
-#define HAVE_ALLOCA 1
-#define vfork fork
-#define HAVE_FMOD 1
-#define HAVE_RANDOM 1
-#define HAVE_WAITPID 1
-#define HAVE_GETCWD 1
-#define HAVE_TRUNCATE 1
-#define HAVE_CHSIZE 1
-#define HAVE_TIMES 1
-#define HAVE_UTIMES 1
-/* #define HAVE_FCNTL 1 */
-/* #define HAVE_SETITIMER 1 */
-#define HAVE_GETGROUPS 1
-#define HAVE_SIGPROCMASK 1
-#define FILE_COUNT _cnt
-#define DLEXT ".so"
-#define RUBY_LIB ";/usr/local/lib/ruby;."
-#define RUBY_ARCHLIB "/usr/local/lib/ruby/i386-msdos"
diff --git a/config.guess b/config.guess
deleted file mode 100755
index ce6e12a8fd..0000000000
--- a/config.guess
+++ /dev/null
@@ -1,568 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
-#
-# This file 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 of the License, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Written by Per Bothner <bothner@cygnus.com>.
-# The master version of this file is at the FSF in /home/gd/gnu/lib.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub. If it succeeds, it prints the system name on stdout, and
-# exits with 0. Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit system type (host/target name).
-#
-# Only a few systems have been added to this list; please add others
-# (but try to keep the structure clean).
-#
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 8/24/94.)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
- PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
- alpha:OSF1:*:*)
- # A Vn.n version is a released version.
- # A Tn.n version is a released field test version.
- # A Xn.n version is an unreleased experimental baselevel.
- # 1.2 uses "1.2" for uname -r.
- echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
- exit 0 ;;
- 21064:Windows_NT:50:3)
- echo alpha-dec-winnt3.5
- exit 0 ;;
- Amiga*:UNIX_System_V:4.0:*)
- echo m68k-cbm-sysv4
- exit 0;;
- amiga:NetBSD:*:*)
- echo m68k-cbm-netbsd${UNAME_RELEASE}
- exit 0 ;;
- arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix${UNAME_RELEASE}
- exit 0;;
- Pyramid*:OSx*:*:*)
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit 0 ;;
- sun4*:SunOS:5.*:*)
- echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- i86pc:SunOS:5.*:*)
- echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:6*:*)
- # According to config.sub, this is the proper way to canonicalize
- # SunOS6. Hard to guess exactly what SunOS6 will be like, but
- # it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
- Series*|S4*)
- UNAME_RELEASE=`uname -v`
- ;;
- esac
- # Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- exit 0 ;;
- sun3*:SunOS:*:*)
- echo m68k-sun-sunos${UNAME_RELEASE}
- exit 0 ;;
- atari*:NetBSD:*:*)
- echo m68k-atari-netbsd${UNAME_RELEASE}
- exit 0 ;;
- sun3*:NetBSD:*:*)
- echo m68k-sun-netbsd${UNAME_RELEASE}
- exit 0 ;;
- mac68k:NetBSD:*:*)
- echo m68k-apple-netbsd${UNAME_RELEASE}
- exit 0 ;;
- RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix${UNAME_RELEASE}
- exit 0 ;;
- mips:*:4*:UMIPS)
- echo mips-mips-riscos4sysv
- exit 0 ;;
- mips:*:5*:RISCos)
- echo mips-mips-riscos${UNAME_RELEASE}
- exit 0 ;;
- Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit 0 ;;
- m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit 0 ;;
- m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit 0 ;;
- m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit 0 ;;
- AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
- if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
- -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
- echo m88k-dg-dgux${UNAME_RELEASE}
- else
- echo m88k-dg-dguxbcs${UNAME_RELEASE}
- fi
- else echo i586-dg-dgux${UNAME_RELEASE}
- fi
- exit 0 ;;
- M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit 0 ;;
- M88*:*:R3*:*)
- # Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit 0 ;;
- XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit 0 ;;
- Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit 0 ;;
- *:IRIX*:*:*)
- echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
- exit 0 ;;
- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i[34]86:AIX:*:*)
- echo i386-ibm-aix
- exit 0 ;;
- *:AIX:2:3)
- if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- sed 's/^ //' << EOF >dummy.c
- #include <sys/systemcfg.h>
-
- main()
- {
- if (!__power_pc())
- exit(1);
- puts("powerpc-ibm-aix3.2.5");
- exit(0);
- }
-EOF
- ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
- echo rs6000-ibm-aix3.2.5
- elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
- else
- echo rs6000-ibm-aix3.2
- fi
- exit 0 ;;
- *:AIX:*:4)
- if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
- IBM_ARCH=rs6000
- else
- IBM_ARCH=powerpc
- fi
- if [ -x /usr/bin/oslevel ] ; then
- IBM_REV=`/usr/bin/oslevel`
- else
- IBM_REV=4.${UNAME_RELEASE}
- fi
- echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- exit 0 ;;
- *:AIX:*:*)
- echo rs6000-ibm-aix
- exit 0 ;;
- ibmrt:4.4BSD:*|romp-ibm:BSD:*)
- echo romp-ibm-bsd4.4
- exit 0 ;;
- ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
- exit 0 ;; # report: romp-ibm BSD 4.3
- *:BOSX:*:*)
- echo rs6000-bull-bosx
- exit 0 ;;
- DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit 0 ;;
- 9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit 0 ;;
- hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit 0 ;;
- 9000/[3478]??:HP-UX:*:*)
- case "${UNAME_MACHINE}" in
- 9000/31? ) HP_ARCH=m68000 ;;
- 9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/7?? | 9000/8?[679] ) HP_ARCH=hppa1.1 ;;
- 9000/8?? ) HP_ARCH=hppa1.0 ;;
- esac
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- exit 0 ;;
- 3050*:HI-UX:*:*)
- sed 's/^ //' << EOF >dummy.c
- #include <unistd.h>
- int
- main ()
- {
- long cpu = sysconf (_SC_CPU_VERSION);
- /* The order matters, because CPU_IS_HP_MC68K erroneously returns
- true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
- results, however. */
- if (CPU_IS_PA_RISC (cpu))
- {
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
- case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
- default: puts ("hppa-hitachi-hiuxwe2"); break;
- }
- }
- else if (CPU_IS_HP_MC68K (cpu))
- puts ("m68k-hitachi-hiuxwe2");
- else puts ("unknown-hitachi-hiuxwe2");
- exit (0);
- }
-EOF
- ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
- rm -f dummy.c dummy
- echo unknown-hitachi-hiuxwe2
- exit 0 ;;
- 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
- echo hppa1.1-hp-bsd
- exit 0 ;;
- 9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit 0 ;;
- hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
- echo hppa1.1-hp-osf
- exit 0 ;;
- hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit 0 ;;
- parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit 0 ;;
- C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit 0 ;;
- C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit 0 ;;
- C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit 0 ;;
- C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit 0 ;;
- CRAY*X-MP:*:*:*)
- echo xmp-cray-unicos
- exit 0 ;;
- CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE}
- exit 0 ;;
- CRAY*C90:*:*:*)
- echo c90-cray-unicos${UNAME_RELEASE}
- exit 0 ;;
- CRAY-2:*:*:*)
- echo cray2-cray-unicos
- exit 0 ;;
- hp3[0-9][05]:NetBSD:*:*)
- echo m68k-hp-netbsd${UNAME_RELEASE}
- exit 0 ;;
- i[34]86:BSD/386:*:* | *:BSD/OS:*:*)
- echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- exit 0 ;;
- *:FreeBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
- exit 0 ;;
- *:NetBSD:*:*)
- echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
- exit 0 ;;
- i*:CYGWIN*:*)
- echo i386-pc-cygwin32
- exit 0 ;;
- p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin32
- exit 0 ;;
- prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- exit 0 ;;
- *:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- exit 0 ;;
- *:Linux:*:*)
- echo ${UNAME_MACHINE}-pc-linux
- exit 0 ;;
-# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
-# are messed up and put the nodename in both sysname and nodename.
- i[34]86:DYNIX/ptx:4*:*)
- echo i386-sequent-sysv4
- exit 0 ;;
- i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*)
- if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- i[34]86:*:3.2:*)
- if test -f /usr/options/cb.name; then
- UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
- elif /bin/uname -X 2>/dev/null >/dev/null ; then
- UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
- (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
- (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
- && UNAME_MACHINE=i586
- echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
- else
- echo ${UNAME_MACHINE}-pc-sysv32
- fi
- exit 0 ;;
- Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit 0 ;;
- paragon:*:*:*)
- echo i860-intel-osf1
- exit 0 ;;
- i860:*:4.*:*) # i860-SVR4
- if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
- else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
- fi
- exit 0 ;;
- mini*:CTIX:SYS*5:*)
- # "miniframe"
- echo m68010-convergent-sysv
- exit 0 ;;
- M680[234]0:*:R3V[567]*:*)
- test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
- uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4.3 && exit 0 ;;
- 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- uname -p 2>/dev/null | grep 86 >/dev/null \
- && echo i486-ncr-sysv4 && exit 0 ;;
- m680[234]0:LynxOS:2.[23]*:*)
- echo m68k-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
- mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit 0 ;;
- i[34]86:LynxOS:2.[23]*:*)
- echo i386-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
- TSUNAMI:LynxOS:2.[23]*:*)
- echo sparc-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
- rs6000:LynxOS:2.[23]*:*)
- echo rs6000-lynx-lynxos${UNAME_RELEASE}
- exit 0 ;;
- RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit 0 ;;
- *:SINIX-*:*:*)
- if uname -p 2>/dev/null >/dev/null ; then
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo ${UNAME_MACHINE}-sni-sysv4
- else
- echo ns32k-sni-sysv
- fi
- exit 0 ;;
- mc68*:A/UX:*:*)
- echo m68k-apple-aux${UNAME_RELEASE}
- exit 0 ;;
- R3000:*System_V*:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
- else
- echo mips-unknown-sysv${UNAME_RELEASE}
- fi
- exit 0 ;;
- powerpc:JCC_BSD+:*:*)
- echo powerpc-jcc-bsd4.4
- exit 0 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-cat >dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
- /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
- I don't know.... */
- printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
- printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
- "4"
-#else
- ""
-#endif
- ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
- printf ("arm-acorn-riscix"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
- printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
- int version;
- version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
- printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3");
- exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
- printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
- printf ("ns32k-encore-mach\n"); exit (0);
-#else
- printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
- printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
- printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
- printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
- struct utsname un;
-
- uname(&un);
-
- if (strncmp(un.version, "V2", 2) == 0) {
- printf ("i386-sequent-ptx2\n"); exit (0);
- }
- if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
- printf ("i386-sequent-ptx1\n"); exit (0);
- }
- printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-#if !defined (ultrix)
- printf ("vax-dec-bsd\n"); exit (0);
-#else
- printf ("vax-dec-ultrix\n"); exit (0);
-#endif
-#endif
-
-#if defined (alliant) && defined (i860)
- printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
- exit (1);
-}
-EOF
-
-${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
-rm -f dummy.c dummy
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
- case `getsysinfo -f cpu_type` in
- c1*)
- echo c1-convex-bsd
- exit 0 ;;
- c2*)
- if getsysinfo -f scalar_acc
- then echo c32-convex-bsd
- else echo c2-convex-bsd
- fi
- exit 0 ;;
- c34*)
- echo c34-convex-bsd
- exit 0 ;;
- c38*)
- echo c38-convex-bsd
- exit 0 ;;
- c4*)
- echo c4-convex-bsd
- exit 0 ;;
- esac
-fi
-
-#echo '(Unable to guess system type)' 1>&2
-
-exit 1
diff --git a/config.sub b/config.sub
deleted file mode 100755
index 27819cc8dc..0000000000
--- a/config.sub
+++ /dev/null
@@ -1,922 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script, version 1.1.
-# Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine. It does not imply ALL GNU software can.
-#
-# This file 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 of the License, 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., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support. The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-if [ x$1 = x ]
-then
- echo Configuration name missing. 1>&2
- echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
- echo "or $0 ALIAS" 1>&2
- echo where ALIAS is a recognized configuration type. 1>&2
- exit 1
-fi
-
-# First pass through any local machine types.
-case $1 in
- *local*)
- echo $1
- exit 0
- ;;
- *)
- ;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- linux-gnu*)
- os=-$maybe_os
- basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- *)
- basic_machine=`echo $1 | sed 's/-[^-]*$//'`
- if [ $basic_machine != $1 ]
- then os=`echo $1 | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple)
- os=
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco5)
- os=sco3.2v5
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*)
- os=-lynxos
- ;;
- -ptx*)
- basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
- ;;
- -windowsnt*)
- os=`echo $os | sed -e 's/windowsnt/winnt/'`
- ;;
- -psos*)
- os=-psos
- ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \
- | arme[lb] | pyramid \
- | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
- | alpha | we32k | ns16k | clipper | i370 | sh \
- | powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
- | pdp11 | mips64el | mips64orion | mips64orionel \
- | sparc | sparclet | sparclite | sparc64)
- basic_machine=$basic_machine-unknown
- ;;
- # We use `pc' rather than `unknown'
- # because (1) that's what they normally are, and
- # (2) the word "unknown" tends to confuse beginning users.
- i[3456]86)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
- | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
- | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
- | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
- | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
- | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
- | mips64el-* | mips64orion-* | mips64orionel-*)
- ;;
- # Recognize the various machine names and aliases which stand
- # for a CPU type and a company and sometimes even an OS.
- 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
- ;;
- 3b*)
- basic_machine=we32k-att
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-cbm
- ;;
- amigados)
- basic_machine=m68k-cbm
- os=-amigados
- ;;
- amigaunix | amix)
- basic_machine=m68k-cbm
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | ymp)
- basic_machine=ymp-cray
- os=-unicos
- ;;
- cray2)
- basic_machine=cray2-cray
- os=-unicos
- ;;
- [ctj]90-cray)
- basic_machine=c90-cray
- os=-unicos
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
- ;;
- delta | 3300 | motorola-3300 | motorola-delta \
- | 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
- ;;
- dpx2* | dpx2*-bull)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
- ;;
- encore | umax | mmax)
- basic_machine=ns32k-encore
- ;;
- ews4800)
- basic_machine=mips-nec
- os=-sysv4
- ;;
- fx2800)
- basic_machine=i860-alliant
- ;;
- genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
- ;;
- hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
- ;;
- hp9k3[2-9][0-9])
- basic_machine=m68k-hp
- ;;
- hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
- basic_machine=hppa1.1-hp
- ;;
- hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
- os=-mvs
- ;;
-# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i[3456]86v32)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv32
- ;;
- i[3456]86v4*)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv4
- ;;
- i[3456]86v)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-sysv
- ;;
- i[3456]86sol2)
- basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
- ;;
- *)
- os=-irix4
- ;;
- esac
- ;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- m88k-omron*)
- basic_machine=m88k-omron
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- miniframe)
- basic_machine=m68000-convergent
- ;;
- mips3*-*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
- ;;
- news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- next | m*-next )
- basic_machine=m68k-next
- case $os in
- -nextstep* )
- ;;
- -ns2*)
- os=-nextstep2
- ;;
- *)
- os=-nextstep3
- ;;
- esac
- ;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- np1)
- basic_machine=np1-gould
- ;;
- pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- pbd)
- basic_machine=sparc-tti
- ;;
- pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pentium | p5)
- basic_machine=i586-intel
- ;;
- pentiumpro | p6)
- basic_machine=i686-intel
- ;;
- pentium-* | p5-*)
- basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-*)
- basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- k5)
- # We don't have specific support for AMD's K5 yet, so just call it a Pentium
- basic_machine=i586-amd
- ;;
- nexen)
- # We don't have specific support for Nexgen yet, so just call it a Pentium
- basic_machine=i586-nexgen
- ;;
- pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=rs6000-ibm
- ;;
- ppc) basic_machine=powerpc-unknown
- ;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle | ppc-le | powerpc-little)
- basic_machine=powerpcle-unknown
- ;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- ;;
- ps2)
- basic_machine=i386-ibm
- ;;
- rm[46]00)
- basic_machine=mips-siemens
- ;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
- ;;
- sequent)
- basic_machine=i386-sequent
- ;;
- sh)
- basic_machine=sh-hitachi
- os=-hms
- ;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
- ;;
- spur)
- basic_machine=spur-unknown
- ;;
- sun2)
- basic_machine=m68000-sun
- ;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
- ;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
- ;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
- ;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
- ;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
- ;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
- ;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
- ;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
- ;;
- sun4)
- basic_machine=sparc-sun
- ;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
- ;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
- ;;
- tower | tower-32)
- basic_machine=m68k-ncr
- ;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
- ;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
- ;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
- ;;
- vms)
- basic_machine=vax-dec
- os=-vms
- ;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
- ;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
- ;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
- ;;
- xmp)
- basic_machine=xmp-cray
- os=-unicos
- ;;
- xps | xps100)
- basic_machine=xps100-honeywell
- ;;
- none)
- basic_machine=none-none
- os=-none
- ;;
-
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- mips)
- basic_machine=mips-mips
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- rs6000)
- basic_machine=rs6000-ibm
- ;;
- vax)
- basic_machine=vax-dec
- ;;
- pdp11)
- basic_machine=pdp11-dec
- ;;
- we32k)
- basic_machine=we32k-att
- ;;
- sparc)
- basic_machine=sparc-sun
- ;;
- cydra)
- basic_machine=cydra-cydrome
- ;;
- orion)
- basic_machine=orion-highlevel
- ;;
- orion105)
- basic_machine=clipper-highlevel
- ;;
- *)
- echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
- exit 1
- ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
- ;;
- *-commodore*)
- basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
- ;;
- *)
- ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
- ;;
- -solaris)
- os=-solaris2
- ;;
- -unixware* | svr4*)
- os=-sysv4
- ;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
- ;;
- # First accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST END IN A *, to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
- | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \
- | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \
- | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -cygwin32* | -pe* | -psos* | -moss* | -proelf* \
- | -linux*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -sunos5*)
- os=`echo $os | sed -e 's|sunos5|solaris2|'`
- ;;
- -sunos6*)
- os=`echo $os | sed -e 's|sunos6|solaris3|'`
- ;;
- -osfrose*)
- os=-osfrose
- ;;
- -osf*)
- os=-osf
- ;;
- -utek*)
- os=-bsd
- ;;
- -dynix*)
- os=-bsd
- ;;
- -acis*)
- os=-aos
- ;;
- -ctix* | -uts*)
- os=-sysv
- ;;
- -ns2 )
- os=-nextstep2
- ;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
- ;;
- -sinix*)
- os=-sysv4
- ;;
- -triton*)
- os=-sysv3
- ;;
- -oss*)
- os=-sysv3
- ;;
- -svr4)
- os=-sysv4
- ;;
- -svr3)
- os=-sysv3
- ;;
- -sysvr4)
- os=-sysv4
- ;;
- # This must come after -sysvr4.
- -sysv*)
- ;;
- -xenix)
- os=-xenix
- ;;
- -none)
- ;;
- *)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- exit 1
- ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system. Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
- *-acorn)
- os=-riscix1.2
- ;;
- arm*-semi)
- os=-aout
- ;;
- pdp11-*)
- os=-none
- ;;
- *-dec | vax-*)
- os=-ultrix4.2
- ;;
- m68*-apollo)
- os=-domain
- ;;
- i386-sun)
- os=-sunos4.0.2
- ;;
- m68000-sun)
- os=-sunos3
- # This also exists in the configure program, but was not the
- # default.
- # os=-sunos4
- ;;
- *-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
- ;;
- sparc-* | *-sun)
- os=-sunos4.1.1
- ;;
- *-ibm)
- os=-aix
- ;;
- *-hp)
- os=-hpux
- ;;
- *-hitachi)
- os=-hiux
- ;;
- i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
- ;;
- *-cbm)
- os=-amigados
- ;;
- *-dg)
- os=-dgux
- ;;
- *-dolphin)
- os=-sysv3
- ;;
- m68k-ccur)
- os=-rtu
- ;;
- m88k-omron*)
- os=-luna
- ;;
- *-next )
- os=-nextstep
- ;;
- *-sequent)
- os=-ptx
- ;;
- *-crds)
- os=-unos
- ;;
- *-ns)
- os=-genix
- ;;
- i370-*)
- os=-mvs
- ;;
- *-next)
- os=-nextstep3
- ;;
- *-gould)
- os=-sysv
- ;;
- *-highlevel)
- os=-bsd
- ;;
- *-encore)
- os=-bsd
- ;;
- *-sgi)
- os=-irix
- ;;
- *-siemens)
- os=-sysv4
- ;;
- *-masscomp)
- os=-rtu
- ;;
- *)
- os=-none
- ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
- vendor=acorn
- ;;
- -sunos*)
- vendor=sun
- ;;
- -lynxos*)
- vendor=lynx
- ;;
- -aix*)
- vendor=ibm
- ;;
- -hpux*)
- vendor=hp
- ;;
- -hiux*)
- vendor=hitachi
- ;;
- -unos*)
- vendor=crds
- ;;
- -dgux*)
- vendor=dg
- ;;
- -luna*)
- vendor=omron
- ;;
- -genix*)
- vendor=ns
- ;;
- -mvs*)
- vendor=ibm
- ;;
- -ptx*)
- vendor=sequent
- ;;
- -vxworks*)
- vendor=wrs
- ;;
- -aux*)
- vendor=apple
- ;;
- esac
- basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
- ;;
-esac
-
-echo $basic_machine$os
diff --git a/configure.bat b/configure.bat
deleted file mode 100644
index 84e5191bbe..0000000000
--- a/configure.bat
+++ /dev/null
@@ -1,5 +0,0 @@
-@echo off
-sed -f top.sed Makefile.in >Makefile
-sed -f top.sed ext/extmk.rb.in > ext\extmk.rb
-copy ext\Setup.dj ext\Setup
-copy config.dj config.h
diff --git a/configure.in b/configure.in
index 7f89f5e69c..bb1ab8abd8 100644
--- a/configure.in
+++ b/configure.in
@@ -1,100 +1,2270 @@
dnl Process this file with autoconf to produce a configure script.
-AC_INIT(ruby.h)
+AC_INIT()
+{
+AC_CONFIG_AUX_DIR(tool)
+
+AC_PREREQ(2.67)
+
+AC_DEFUN([RUBY_PREREQ_AC],
+ [m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [$1]), [-1],
+ AC_MSG_ERROR([Autoconf version ]$1[ or higher is required]$2))])
+
+AC_DISABLE_OPTION_CHECKING
+
+AC_DEFUN([RUBY_RM_RECURSIVE], [
+m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]), [2.70]), [-1], [
+# suppress error messages, rm: cannot remove 'conftest.dSYM', from
+# AC_EGREP_CPP with CFLAGS=-g on Darwin.
+#
+# TODO: remove this hack when AC_PREREQ() becomes 2.70 or later.
+AS_CASE([$build_os], [darwin*], [
+rm() {
+ rm_recursive=''
+ for arg do
+ AS_CASE("$arg",
+ [--*], [],
+ [-*r*], [break],
+ [conftest.*], [if test -d "$arg"; then rm_recursive=-r; break; fi],
+ [])
+ done
+ command rm $rm_recursive "[$]@"
+}
+])])])
+
+{ # environment section
+
+AC_ARG_WITH(baseruby,
+ AS_HELP_STRING([--with-baseruby=RUBY], [use RUBY as baseruby; RUBY is the pathname of ruby]),
+ [
+ AS_CASE(["$withval"],[*ruby*],[BASERUBY=$withval],[AC_MSG_ERROR(need ruby)])
+ ],
+ [
+ BASERUBY="ruby"
+ ])
+if test "`RUBYOPT=- $BASERUBY -e 'p 42' 2>/dev/null`" = 42; then
+ if test "`RUBYOPT=- $BASERUBY --disable=gems -e 'p 42' 2>/dev/null`" = 42; then
+ BASERUBY="$BASERUBY --disable=gems"
+ fi
+else
+ BASERUBY="echo executable host ruby is required. use --with-baseruby option.; false"
+fi
+AC_SUBST(BASERUBY)
+
+for conf in config.guess config.sub; do
+ test -f "$srcdir/tool/$conf" && continue
+ $BASERUBY -C "$srcdir/tool" get-config_files $conf
+done
+
+AC_DEFUN([RUBY_MINGW32],
+[AS_CASE(["$host_os"],
+[cygwin*], [
+AC_CACHE_CHECK(for mingw32 environment, rb_cv_mingw32,
+[AC_TRY_CPP([
+#ifndef __MINGW32__
+# error
+#endif
+], rb_cv_mingw32=yes,rb_cv_mingw32=no)
+rm -f conftest*])
+if test "$rb_cv_mingw32" = yes; then
+ target_os="mingw32"
+ : ${ac_tool_prefix:="`expr "$CC" : ['\(.*-\)g\?cc[^/]*$']`"}
+fi
+])
+AS_CASE(["$target_os"], [mingw*msvc], [
+target_os="`echo ${target_os} | sed 's/msvc$//'`"
+])
+AS_CASE(["$target_cpu-$target_os"], [x86_64-mingw*], [
+target_cpu=x64
+])
+])
+
+AC_DEFUN([RUBY_NACL],
+[
+ AS_CASE(["${host_os}"],
+[nacl], [
+ ac_cv_exeext=.nexe
+ host_vendor=chromium
+ ac_cv_host=chromium
+ AC_MSG_CHECKING([wheather \$NACL_SDK_ROOT is set])
+ if test x"${NACL_SDK_ROOT}" = x; then
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([You need to set \$NACL_SDK_ROOT environment variable to build for NativeClient])
+ fi
+ AC_MSG_RESULT([yes])
+
+ nacl_cv_build_variant=glibc
+ AC_ARG_WITH(newlib,
+ AS_HELP_STRING([--with-newlib], [uses newlib version of NativeClient SDK]),
+ [AS_CASE([$withval],
+ [no], [nacl_cv_build_variant=glibc],
+ [yes], [nacl_cv_build_variant=newlib])])
+
+ AS_CASE(["$build_cpu"],
+ [x86_64|i?86], [nacl_cv_cpu_nick=x86], [nacl_cv_cpu_nick=$build_cpu])
+ AS_CASE(["$build_os"],
+ [linux*], [nacl_cv_os_nick=linux],
+ [darwin*], [nacl_cv_os_nick=mac],
+ [cygwin*|mingw*], [nacl_cv_os_nick=win],
+ [nacl_cv_os_nick=$build_os])
-PROGS="ruby"
-AC_SUBST(PROGS)dnl
+ host="$host_cpu-chromium-$host_os-"
+ ac_tool_prefix="$host_cpu-nacl-"
+ AC_MSG_CHECKING([NativeClient toolchain])
+ if test -d \
+ "${NACL_SDK_ROOT}/toolchain/${nacl_cv_os_nick}_${nacl_cv_cpu_nick}_${nacl_cv_build_variant}"; then
+ NACL_TOOLCHAIN="${nacl_cv_os_nick}_${nacl_cv_cpu_nick}_${nacl_cv_build_variant}"
+ else
+ AS_CASE(
+ ["${nacl_cv_build_variant}"],
+ [glibc], [if test \
+ -d "${NACL_SDK_ROOT}/toolchain/${nacl_cv_os_nick}_${nacl_cv_cpu_nick}_newlib" \
+ -a -d "${NACL_SDK_ROOT}/toolchain/${nacl_cv_os_nick}_${nacl_cv_cpu_nick}"; then
+ NACL_TOOLCHAIN="${nacl_cv_os_nick}_${nacl_cv_cpu_nick}"
+ fi],
+ [newlib], [ NACL_TOOLCHAIN="${nacl_cv_os_nick}_${nacl_cv_cpu_nick}" ])
+ fi
+ if test ! -e "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/${ac_tool_prefix}gcc"; then
+ if test "${build_cpu}" = i686 -a -e "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/nacl-gcc"; then
+ ac_tool_prefix=nacl-
+ fi
+ if test "${build_cpu}" = x86_64 -a -e "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/nacl-gcc"; then
+ ac_tool_prefix=nacl64-
+ fi
+ fi
+ if test -z "${NACL_TOOLCHAIN}"; then
+ AC_MSG_ERROR([Unrecognized --host and --build combination or NaCl SDK is not installed])
+ fi
+ AC_MSG_RESULT(${NACL_TOOLCHAIN})
+
+ AC_MSG_CHECKING([path to SDK])
+ if ! echo -- "${PATH}" | grep -F "${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/bin" > /dev/null; then
+ PATH="${PATH}:${NACL_SDK_ROOT}/toolchain/${NACL_TOOLCHAIN}/bin"
+ fi
+
+ AC_SUBST(NACL_TOOLCHAIN)
+ AC_SUBST(NACL_SDK_ROOT)
+ AC_SUBST(NACL_SDK_VARIANT, nacl_cv_build_variant)
+])])
+
+AC_DEFUN([RUBY_NACL_CHECK_PEPPER_TYPES],
+[AS_CASE(["${host_os}"],
+[nacl], [
+ AC_CHECK_TYPES([struct PPB_Core, struct PPB_Messaging, struct PPB_Var,
+ struct PPB_URLLoader, struct PPB_URLRequestInfo,
+ struct PPB_URLResponseInfo, struct PPB_FileRef,
+ struct PPP_Instance])
+])
+])
+
+AC_DEFUN([RUBY_CPPOUTFILE],
+[AC_CACHE_CHECK(whether ${CPP} accepts -o, rb_cv_cppoutfile,
+[save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS='-o conftest-1.i'
+rb_cv_cppoutfile=no
+AC_TRY_CPP([test-for-cppout],
+ [grep test-for-cppout conftest-1.i > /dev/null && rb_cv_cppoutfile=yes])
+CPPFLAGS="$save_CPPFLAGS"
+rm -f conftest*])
+if test "$rb_cv_cppoutfile" = yes; then
+ CPPOUTFILE='-o conftest.i'
+elif test "$rb_cv_cppoutfile" = no; then
+ CPPOUTFILE='> conftest.i'
+elif test -n "$rb_cv_cppoutfile"; then
+ CPPOUTFILE="$rb_cv_cppoutfile"
+fi
+AC_SUBST(CPPOUTFILE)])
+
+AC_DEFUN([RUBY_PROG_GNU_LD],
+[AC_CACHE_CHECK(whether the linker is GNU ld, rb_cv_prog_gnu_ld,
+[if `$CC $CFLAGS $CPPFLAGS $LDFLAGS --print-prog-name=ld 2>&1` -v 2>&1 | grep "GNU ld" > /dev/null; then
+ rb_cv_prog_gnu_ld=yes
+else
+ rb_cv_prog_gnu_ld=no
+fi
+])
+GNU_LD=$rb_cv_prog_gnu_ld
+AC_SUBST(GNU_LD)])
+
+eval `sed -n 's/^#define RUBY_API_VERSION_\([A-Z][A-Z_0-9]*\) \([0-9][0-9]*\)/\1=\2/p' $srcdir/include/ruby/version.h`
+for v in MAJOR MINOR TEENY; do
+ if eval "test \"\$$v\" = ''"; then
+ AC_MSG_ERROR(could not determine $v number from version.h)
+ fi
+done
+AC_SUBST(MAJOR)
+AC_SUBST(MINOR)
+AC_SUBST(TEENY)
+RUBY_PROGRAM_VERSION=`sed -n 's/^#define RUBY_VERSION "\(.*\)"/\1/p' $srcdir/version.h`
+AC_SUBST(RUBY_PROGRAM_VERSION)
+RUBY_RELEASE_DATE=`sed -n 's/^#define RUBY_RELEASE_DATE "\(.*\)"/\1/p' $srcdir/version.h`
+AC_SUBST(RUBY_RELEASE_DATE)
+RUBY_PATCHLEVEL=`sed -n 's/^#define RUBY_PATCHLEVEL //p' $srcdir/version.h`
+AC_DEFINE(CANONICALIZATION_FOR_MATHN)
dnl checks for alternative programs
-AC_ARG_WITH(gcc, [--without-gcc never use gcc], [
- case $withval in
- no) CC=cc
- without_gcc=yes;;
- yes) CC=gcc
- without_gcc=no;;
- *) CC=$withval
- without_gcc=$withval;;
- esac], [without_gcc=no])
+AC_CANONICAL_BUILD
+RUBY_RM_RECURSIVE
+AC_ARG_WITH(gcc,
+ AS_HELP_STRING([--without-gcc], [never use gcc]),
+ [
+ AS_CASE([$withval],
+ [no], [: ${CC=cc}],
+ [yes], [: ${CC=gcc}],
+ [CC=$withval])])
dnl If the user switches compilers, we can't believe the cache
if test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC"
then
- AC_ERROR(cached CC is different -- throw away $cache_file
+ AC_MSG_ERROR(cached CC is different -- throw away $cache_file
(it is also a good idea to do 'make clean' before compiling))
fi
+AS_CASE(["$build_os"],
+ [darwin1*.*], [
+ AS_CASE(["x$CC"],
+ [xgcc-4.2|x/usr/bin/gcc-4.2], [: ${CXX=g++-4.2}],
+ [xgcc|x/usr/bin/gcc], [: ${CXX=g++}],
+ [xcc|x/usr/bin/cc], [: ${CXX=c++}],
+ [xclang|x/usr/bin/clang], [: ${CXX=clang++}])
+ ])
+test -z "$CC" || ac_cv_prog_CC="$CC"
+test -z "$CXX" || ac_cv_prog_CXX="$CXX"
-dnl checks for thread
-rb_thread=yes
-AC_ARG_ENABLE(thread, [--disable-thread never use user-level thread], [
- rb_thread=$enableval
+if test "$program_prefix" = NONE; then
+ program_prefix=
+fi
+RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"`
+RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"`
+AC_SUBST(RUBY_BASE_NAME)
+AC_SUBST(RUBYW_BASE_NAME)
+AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version}')
+
+AC_CANONICAL_TARGET
+test x"$target_alias" = x &&
+target_os=`echo $target_os | sed 's/linux-gnu$/linux/;s/linux-gnu/linux-/'`
+ac_install_sh='' # unusable for extension libraries.
+
+AS_CASE($target_os,
+ [darwin*], [os_version_style=major+0],
+ [os_version_style=full])
+AC_ARG_WITH(os-version-style,
+ AS_HELP_STRING([--with-os-version-style=TYPE],
+ [OS version number for target and target_os [[full]]]
+ [(full|teeny|minor+0|minor|major+0|major|none)]),
+ [os_version_style=$withval])
+os_version_style_transform=
+AS_CASE("${os_version_style}",
+ [full|teeny], [],
+ [minor+0], [os_version_style_transform=['s/\([0-9]\.[0-9][0-9]*\)\.[0-9][.0-9]*$/\1.0/']],
+ [minor], [os_version_style_transform=['s/\([0-9]\.[0-9][0-9]*\)\.[0-9][.0-9]*$/\1/']],
+ [major+0], [os_version_style_transform=['s/\([0-9]\)\.[0-9][.0-9]*$/\1.0/']],
+ [major], [os_version_style_transform=['s/\([0-9]\)\.[0-9][.0-9]*$/\1/']],
+ [none], [os_version_style_transform=['s/[0-9]\.[0-9][.0-9]*$//']],
+ [AC_MSG_ERROR(unknown --with-os-version-style: $withval)])
+AS_IF([test -z "$target_alias" -a -n "$os_version_style_transform"],
+ [
+ target=`echo ${target} | sed "$os_version_style_transform"`
+ target_os=`echo ${target_os} | sed "$os_version_style_transform"`
+ ])
+
+AC_DEFUN([RUBY_APPEND_OPTION],
+ [# RUBY_APPEND_OPTION($1)
+ AS_CASE([" [$]{$1-} "],
+ [*' $2 '*], [], [' '], [ $1="$2"], [ $1="[$]$1 $2"])])
+AC_DEFUN([RUBY_APPEND_OPTIONS],
+ [# RUBY_APPEND_OPTIONS($1)
+ for rb_opt in $2; do
+ AS_CASE([" [$]{$1-} "],
+ [*" [$]{rb_opt} "*], [], [' '], [ $1="[$]{rb_opt}"], [ $1="[$]$1 [$]{rb_opt}"])
+ done])
+AC_DEFUN([RUBY_PREPEND_OPTION],
+ [# RUBY_PREPEND_OPTION($1)
+ AS_CASE([" [$]{$1-} "],
+ [*' $2 '*], [], [' '], [ $1="$2"], [ $1="$2 [$]$1"])])
+AC_DEFUN([RUBY_PREPEND_OPTIONS],
+ [# RUBY_PREPEND_OPTIONS($1)
+ unset rb_opts; for rb_opt in $2; do
+ AS_CASE([" [$]{rb_opts} [$]{$1-} "],
+ [*" [$]{rb_opt} "*], [], [' '], [ $1="[$]{rb_opt}"], [ rb_opts="[$]{rb_opts}[$]{rb_opt} "])
+ done
+ $1="[$]{rb_opts}[$]$1"])
+
+AC_ARG_WITH(arch,
+ AS_HELP_STRING([--with-arch=ARCHS],
+ [build an Apple/NeXT Multi Architecture Binary (MAB);
+ ARCHS is a comma-delimited list of architectures for
+ which to build; if this option is disabled or omitted
+ entirely, then the package will be built only for the
+ target platform]),
+ [target_archs="$withval"], [unset target_archs])
+
+AC_DEFUN([RUBY_DEFAULT_ARCH], [
+AC_MSG_CHECKING([arch option])
+AS_CASE([$1],
+ [*64], [ARCH_FLAG=-m64],
+ [[i[3-6]86]], [ARCH_FLAG=-m32],
+ [AC_MSG_ERROR(unknown target architecture: $target_archs)]
+ )
+AC_MSG_RESULT([$ARCH_FLAG])
])
-if test $rb_thread = yes; then
- AC_DEFINE(THREAD)
+
+AC_DEFUN([RUBY_UNIVERSAL_ARCH], [
+# RUBY_UNIVERSAL_ARCH begin
+ARCH_FLAG=`expr " $CFLAGS " : ['.* \(-m[0-9][0-9]*\) ']`
+test ${CFLAGS+set} && CFLAGS=`echo "$CFLAGS" | sed -e 's/ *-arch *[^ ]*//g' -e 's/ *-m32//g' -e 's/ *-m64//g'`
+test ${LDFLAGS+set} && LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-arch *[^ ]*//g' -e 's/ *-m32//g' -e 's/ *-m64//g'`
+unset universal_binary universal_archnames
+if test ${target_archs+set}; then
+ AC_MSG_CHECKING([target architectures])
+ target_archs=`echo $target_archs | tr , ' '`
+ # /usr/lib/arch_tool -archify_list $TARGET_ARCHS
+ for archs in $target_archs
+ do
+ AS_CASE([",$universal_binary,"],[*",$archs,"*], [],[
+ cpu=`$SHELL "$ac_aux_dir/config.sub" "${archs}-${target_os}" 2>&1` || {
+ AC_MSG_RESULT([failed])
+ AC_MSG_ERROR([$cpu])
+ }
+ cpu=`echo $cpu | sed 's/-.*-.*//'`
+ universal_binary="${universal_binary+$universal_binary,}$cpu"
+ universal_archnames="${universal_archnames} ${archs}=${cpu}"
+ ARCH_FLAG="${ARCH_FLAG+$ARCH_FLAG }-arch $archs"
+ ])
+ done
+ target_archs="$universal_binary"
+ unset universal_binary
+ AS_CASE(["$target_archs"],
+ [*,*], [universal_binary=yes],
+ [unset universal_archnames])
+ AC_MSG_RESULT([$target_archs])
+
+ target=`echo $target | sed "s/^$target_cpu-/-/"`
+ target_alias=`echo $target_alias | sed "s/^$target_cpu-/-/"`
+ if test "${universal_binary-no}" = yes; then
+ AC_SUBST(try_header,try_compile)
+ target_cpu=universal
+ real_cross_compiling=$cross_compiling
+ else
+ if test x"$target_cpu" != x"${target_archs}"; then
+ echo 'int main(){return 0;}' > conftest.c
+ if $CC $CFLAGS $ARCH_FLAG -o conftest conftest.c > /dev/null 2>&1; then
+ rm -fr conftest.*
+ else
+ RUBY_DEFAULT_ARCH("$target_archs")
+ fi
+ fi
+ target_cpu=${target_archs}
+ fi
+ AS_CASE(["$target"], [-*], [ target="$target_cpu${target}"])
+ AS_CASE(["$target_alias"], [-*], [ target_alias="$target_cpu${target_alias}"])
+else
+ if test x"$target_alias" = x; then
+ AS_CASE(["$target_os"],
+ [darwin*], [
+ AC_MSG_CHECKING([for real target cpu])
+ target=`echo $target | sed "s/^$target_cpu-/-/"`
+ target_cpu=`$CC -E - 2>/dev/null <<EOF |
+#ifdef __x86_64__
+"processor-name=x86_64"
+#endif
+#ifdef __i386__
+"processor-name=i386"
+#endif
+#ifdef __ppc__
+"processor-name=powerpc"
+#endif
+#ifdef __ppc64__
+"processor-name=powerpc64"
+#endif
+EOF
+ sed -n 's/^"processor-name=\(.*\)"/\1/p'`
+ target="$target_cpu${target}"
+ AC_MSG_RESULT([$target_cpu])
+ ])
+ fi
+ target_archs="$target_cpu"
+fi
+if test "${target_archs}" != "${rb_cv_target_archs-${target_archs}}"; then
+ AC_MSG_ERROR([target arch(s) has changed from ${rb_cv_target_archs-nothing} to ${target_archs}])
+else
+ rb_cv_target_archs=${target_archs}
fi
+if test "x${ARCH_FLAG}" != x; then
+ CFLAGS="$CFLAGS ${ARCH_FLAG}"
+ LDFLAGS="${LDFLAGS+$LDFLAGS }${ARCH_FLAG}"
+fi
+# RUBY_UNIVERSAL_ARCH end
+])
-AC_CANONICAL_HOST
+AC_ARG_ENABLE(load-relative,
+ AS_HELP_STRING([--enable-load-relative], [resolve load paths at run time]),
+ [load_relative=$enableval])
+
+AC_ARG_PROGRAM
dnl Checks for programs.
+
+cflagspat=
+test -z "$optflags" ||
+ cflagspat="$cflagspat;s|"`eval echo '"'"${optflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
+test -z "$debugflags" ||
+ cflagspat="$cflagspat;s|"`eval echo '"'"${debugflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
+test -z "warnflags" ||
+ cflagspat="$cflagspat;s|"`eval echo '"'"${warnflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/ *$/ /'`'| |g'
+if test -z "${CFLAGS+set}"; then
+ cflags=`echo " $cflags " | sed "$cflagspat;s/^ *//;s/ *$//"`
+ orig_cflags="$cflags"
+ cflags="$cflags "'${optflags} ${debugflags} ${warnflags}'
+fi
+if test -z "${CXXFLAGS+set}"; then
+ cxxflags=`echo " $cxxflags " | sed "$cflagspat;s/^ *//;s/ *$//"`
+ orig_cxxflags="$cxxflags"
+ cxxflags="$cxxflags "'${optflags} ${debugflags} ${warnflags}'
+fi
+
+RUBY_NACL
+AS_CASE(["$host_os:$build_os"],
+[darwin*:darwin*], [
+ AC_CHECK_TOOLS(CC, [gcc-4.2 clang gcc cc])
+ # Following Apple deployed clang are broken
+ # clang version 1.0 (http://llvm.org/svn/llvm-project/cfe/tags/Apple/clang-23 exported)
+ # Apple clang version 2.0 (tags/Apple/clang-137) (based on LLVM 2.9svn)
+ # Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM 3.0svn)
+ if ! $CC -E -xc - <<SRC >/dev/null; then
+ @%:@if defined __APPLE_CC__ && defined __clang_major__ && __clang_major__ < 3
+ @%:@error premature clang
+ @%:@endif
+SRC
+ AC_MSG_ERROR([clang version 3.0 or later is required])
+ fi
+])
+if test x"${build}" != x"${host}"; then
+ AC_CHECK_TOOL(CC, gcc)
+fi
+
AC_PROG_CC
+AC_PROG_CXX
+RUBY_MINGW32
AC_PROG_GCC_TRADITIONAL
-AC_PROG_YACC
-AC_PROG_INSTALL
+AC_SUBST(GCC)
+AS_CASE(["$target_os"],
+[solaris*], [AC_PATH_TOOL([LD], [ld], [/usr/ccs/bin/ld], [/usr/ccs/bin:$PATH])],
+[AC_CHECK_TOOL([LD], [ld], [ld])])
+AC_SUBST(LD)
+if test "$GCC" = yes; then
+ linker_flag=-Wl,
+ : ${optflags=-O3}
+ gcc_major=`echo =__GNUC__ | $CC -E -xc - | sed '/^=/!d;s///'`
+ test -n "$gcc_major" || gcc_major=0
+ # RUBY_APPEND_OPTIONS(XCFLAGS, ["-include ruby/config.h" "-include ruby/missing.h"])
+else
+ linker_flag=
+fi
+
+RUBY_PROG_GNU_LD
+RUBY_CPPOUTFILE
+
+: ${OUTFLAG='-o '}
+: ${COUTFLAG=${OUTFLAG}}
+AC_SUBST(OUTFLAG)
+AC_SUBST(COUTFLAG)
+
+cc_version=
+for option in --version -v -V -qversion; do
+ cc_version_message=`$CC $option 2>&1`
+ cc_version_status=$?
+ AS_CASE($cc_version_status, [0], [:], [continue])
+ AS_CASE($cc_version_message, [*Warning*], [continue])
+ cc_version='$(CC) '$option
+done
+AC_SUBST(CC_VERSION, $cc_version)
+
+RUBY_UNIVERSAL_ARCH
+if test "$target_cpu" != "$host_cpu" -a "$GCC" = yes -a "$cross_compiling" = no -a "$universal_binary" = no; then
+ RUBY_DEFAULT_ARCH("$target_cpu")
+fi
+
+AS_CASE(["$target_cpu-$target_os"], [[i[3-6]86*]], [
+ AC_CACHE_CHECK([for __sync_val_compare_and_swap], [rb_cv_gcc_compiler_cas], [
+ AC_TRY_LINK([unsigned long atomic_var;],
+ [
+ __sync_val_compare_and_swap(&atomic_var, 0, 1);
+ ],
+ [rb_cv_gcc_compiler_cas=yes],
+ [rb_cv_gcc_compiler_cas=no])])
+ if test "$rb_cv_gcc_compiler_cas" = no; then
+ unset rb_cv_gcc_compiler_cas
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -march=i486"
+ AC_CACHE_CHECK([for __sync_val_compare_and_swap with -march=i486], [rb_cv_gcc_compiler_cas], [
+ AC_TRY_LINK([unsigned long atomic_var;],
+ [
+ __sync_val_compare_and_swap(&atomic_var, 0, 1);
+ ],
+ [rb_cv_gcc_compiler_cas=yes
+ ARCH_FLAG="-march=i486"],
+ [rb_cv_gcc_compiler_cas=no])])
+ CFLAGS="$save_CFLAGS"
+ fi])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(AR, ar)
+if test -z "$AR"; then
+ AC_CHECK_PROGS(AR, aal, ar)
+fi
+
+AC_CHECK_TOOL(AS, as)
+ASFLAGS=$ASFLAGS
+AC_SUBST(ASFLAGS)
+
+AS_CASE(["$target_os"],[cygwin*|mingw*], [ac_cv_prog_ac_ct_OBJCOPY=":"])
+
+# BSD's ports and MacPorts prefix GNU binutils with 'g'
+AC_CHECK_TOOLS(OBJDUMP, [objdump gobjdump])
+AC_CHECK_TOOLS(OBJCOPY, [objcopy gobjcopy])
+
+AS_CASE(["$target_os"],
+[cygwin*|mingw*], [
+ AC_CHECK_TOOL(WINDRES, windres)
+ AC_CHECK_TOOL(DLLWRAP, dllwrap)
+ target=`echo $target | sed "s/^$target_cpu-/-/"`
+ target_alias=`echo $target_alias | sed "s/^$target_cpu-/-/"`
+ target_cpu=`echo $target_cpu | sed s/i.86/i386/`
+ AS_CASE(["$target"], [-*], [ target="$target_cpu${target}"])
+ AS_CASE(["$target_alias"], [-*], [ target_alias="$target_cpu${target_alias}"])
+ AS_CASE(["$target_os"],
+ [mingw*], [
+ test "$rb_cv_msvcrt" = "" && unset rb_cv_msvcrt
+ AC_CACHE_CHECK(for mingw32 runtime DLL, rb_cv_msvcrt, [
+ AC_TRY_LINK([@%:@include <stdio.h>],
+ [FILE* volatile f = stdin; return 0;],
+ [rb_cv_msvcrt=`$OBJDUMP -p conftest$ac_exeext |
+ tr A-Z a-z |
+ sed -n '/^[[ ]]*dll name: \(msvc.*\)\.dll$/{s//\1/p;q;}'`],
+ [rb_cv_msvcrt=msvcrt])
+ test "$rb_cv_msvcrt" = "" && rb_cv_msvcrt=msvcrt])
+ RT_VER=`echo "$rb_cv_msvcrt" | tr -cd [0-9]`
+ test "$RT_VER" = "" && RT_VER=60
+ AC_DEFINE_UNQUOTED(RUBY_MSVCRT_VERSION, $RT_VER)
+ ])
+ : ${enable_shared=yes}
+ ],
+[aix*], [AC_CHECK_TOOL(NM, nm, /usr/ccs/bin/nm, /usr/ccs/bin:$PATH)],
+[hiuxmpp*], [AC_DEFINE(__HIUX_MPP__)]) # by TOYODA Eizi <toyoda@npd.kishou.go.jp>
+AC_CHECK_TOOL(NM, nm)
+
+AC_PROG_LN_S
AC_PROG_MAKE_SET
+AC_PROG_INSTALL
+AC_PROG_MKDIR_P
+if test "x$MKDIR_P" = "x -d"; then
+ if test x"$as_mkdir_p" != xfalse; then
+ MKDIR_P='mkdir -p'
+ echo "use 'mkdir -p' as MKDIR_P"
+ else
+ AC_MSG_ERROR([mkdir -p is required])
+ fi
+fi
+MAKEDIRS="$MKDIR_P"
+AC_SUBST(MAKEDIRS)
+
+AC_DEFUN([RUBY_DTRACE_AVAILABLE],
+[AC_CACHE_CHECK(whether dtrace USDT is available, rb_cv_dtrace_available,
+[
+ echo "provider conftest{ probe fire(); };" > conftest_provider.d
+ if $DTRACE -h -o conftest_provider.h -s conftest_provider.d >/dev/null 2>/dev/null; then
+ # DTrace is available on the system
+ rb_cv_dtrace_available=yes
+ else
+ # DTrace is not available while dtrace command exists
+ # for example FreeBSD 8 or FreeBSD 9 without DTrace build option
+ rb_cv_dtrace_available=no
+ fi
+ rm -f conftest.[co] conftest_provider.[dho]
+])
+])
+
+AC_DEFUN([RUBY_DTRACE_POSTPROCESS],
+[AC_CACHE_CHECK(whether $DTRACE needs post processing, rb_cv_prog_dtrace_g,
+[
+ if {
+ cat >conftest_provider.d <<_PROBES &&
+ provider conftest {
+ probe fire();
+ };
+_PROBES
+ $DTRACE -h -o conftest_provider.h -s conftest_provider.d >/dev/null 2>/dev/null &&
+ cat >conftest.c <<_CONF &&
+ @%:@include "conftest_provider.h"
+ int main(void){ CONFTEST_FIRE(); return 0; }
+_CONF
+ $CC $CFLAGS $CPPFLAGS -c -o conftest.o conftest.c &&
+ $DTRACE -G -s conftest_provider.d conftest.o 2>/dev/null
+ }; then
+ rb_cv_prog_dtrace_g=yes
+ else
+ rb_cv_prog_dtrace_g=no
+ fi
+ rm -f conftest.[co] conftest_provider.[dho]
+])
+])
+
+AC_CHECK_PROG([DTRACE], [${ac_tool_prefix}dtrace], [${ac_tool_prefix}dtrace])
+if test "$cross_compiling:$ac_cv_prog_DTRACE" = no: -a -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG([DTRACE], [dtrace], [dtrace])
+fi
+
+AC_CHECK_PROGS(DOT, dot)
+AC_CHECK_PROGS(DOXYGEN, doxygen)
+AS_CASE(["${host_os}"], [nacl], [AC_PATH_PROG(PYTHON, python)])
+
+AC_CHECK_PROG(PKG_CONFIG, pkg-config, [pkg-config], [], [],
+ [`"$as_dir/$ac_word$ac_exec_ext" --print-errors --version > /dev/null 2>&1 || echo "$as_dir/$ac_word$ac_exec_ext"`])
# checks for UNIX variants that set C preprocessor variables
-AC_MINIX
+AC_USE_SYSTEM_EXTENSIONS
+
+AC_SUBST(RM, ['rm -f'])
+AC_SUBST(CP, ['cp'])
+RMDIRS='$(top_srcdir)/tool/rmdirs'
+RMDIR=rmdir
+mkdir "rmdirs_$$_test" "rmdirs_$$_test/a"
+rmdir --ignore-fail-on-non-empty "rmdirs_$$_test" 2>/dev/null &&
+RMDIR='rmdir --ignore-fail-on-non-empty'
+$RMDIR -p "rmdirs_$$_test/a" 2>/dev/null &&
+{ test -d "rmdirs_$$_test" || RMDIRS="$RMDIR -p"; }
+rmdir "rmdirs_$$_test/a" "rmdirs_$$_test" 2>/dev/null
+AC_SUBST(RMDIR)
+AC_SUBST(RMDIRS)
+AC_SUBST(RMALL, ['rm -fr'])
+
+AC_MSG_CHECKING([for cd using physical directory])
+rm -fr conf$$.dir
+mkdir conf$$.dir &&
+(cd conf$$.dir && mkdir src build && cd src &&
+$as_ln_s ../build . > /dev/null 2>&1 && cd build &&
+for chdir in 'cd -P' 'PWD= cd'; do
+ /bin/sh -c "$chdir ../src && echo '$chdir' > cdcmd" 2> /dev/null && break
+done)
+if test -f conf$$.dir/src/cdcmd; then
+ read CHDIR < conf$$.dir/src/cdcmd 2> /dev/null
+else
+ CHDIR=cd
+fi
+rm -fr conf$$.dir
+AC_MSG_RESULT([$CHDIR])
+AC_SUBST(CHDIR)
+
+}
+{ # compiler section
+
+AC_DEFUN([RUBY_WERROR_FLAG], [dnl
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $rb_cv_warnflags"
+if test "${ac_c_werror_flag+set}"; then
+ rb_c_werror_flag="$ac_c_werror_flag"
+else
+ unset rb_c_werror_flag
+fi
+ac_c_werror_flag=yes
+$1
+CFLAGS="$save_CFLAGS"
+save_CFLAGS=
+if test "${rb_c_werror_flag+set}"; then
+ ac_c_werror_flag="$rb_c_werror_flag"
+else
+ unset ac_c_werror_flag
+fi])
+
+RUBY_WERROR_FLAG([
+ AC_MSG_CHECKING([whether CFLAGS is valid])
+ AC_TRY_COMPILE([], [],
+ [AC_MSG_RESULT(yes)],
+ [
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([something wrong with CFLAGS="$CFLAGS"])
+ ]
+ )
+ AC_MSG_CHECKING([whether LDFLAGS is valid])
+ AC_TRY_LINK([], [],
+ [AC_MSG_RESULT(yes)],
+ [
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([something wrong with LDFLAGS="$LDFLAGS"])
+ ]
+ )
+])
+
+AC_DEFUN(RUBY_TRY_CFLAGS, [
+ AC_MSG_CHECKING([whether ]$1[ is accepted as CFLAGS])
+ RUBY_WERROR_FLAG([
+ CFLAGS="[$]CFLAGS $1"
+ AC_TRY_COMPILE([$4], [$5],
+ [$2
+ AC_MSG_RESULT(yes)],
+ [$3
+ AC_MSG_RESULT(no)])
+ ])
+])
+
+AC_DEFUN(RUBY_TRY_LDFLAGS, [
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="[$]LDFLAGS $1"
+ AC_MSG_CHECKING([whether $1 is accepted as LDFLAGS])
+ RUBY_WERROR_FLAG([
+ AC_TRY_LINK([$4], [$5],
+ [$2
+ AC_MSG_RESULT(yes)],
+ [$3
+ AC_MSG_RESULT(no)])
+ ])
+ LDFLAGS="$save_LDFLAGS"
+ save_LDFLAGS=
+])
+
+AS_CASE([$RUBY_PATCHLEVEL], [-*],
+ [particular_werror_flags=yes], [particular_werror_flags=no])
+AC_ARG_ENABLE(werror,
+ AS_HELP_STRING([--disable-werror],
+ [don't make warnings into errors
+ even if a compiler support -Werror feature
+ [[disabled by default unless development version]]]),
+ [particular_werror_flags=$enableval])
+
+rb_cv_warnflags="$warnflags"
+if test "$GCC:${warnflags+set}:no" = yes::no; then
+ if test $gcc_major -ge 4; then
+ extra_warning=-Werror=extra-tokens
+ else
+ extra_warning=
+ fi
+ for wflag in -Wno-unused-parameter -Wno-parentheses -Wno-long-long \
+ -Wno-missing-field-initializers \
+ -Wunused-variable \
+ -Werror=pointer-arith \
+ -Werror=write-strings \
+ -Werror=declaration-after-statement \
+ -Werror=shorten-64-to-32 \
+ -Werror=implicit-function-declaration \
+ -Werror=division-by-zero \
+ $extra_warning \
+ ; do
+ if test "$particular_werror_flags" != yes; then
+ wflag=`echo x$wflag | sed 's/^x-Werror=/-W/;s/^x//'`
+ fi
+ ok=no
+ RUBY_TRY_CFLAGS($wflag, [
+ RUBY_APPEND_OPTIONS(warnflags, $wflag)
+ ok=yes
+ ])
+ AS_CASE([$ok:$wflag], [no:-Werror=*], [
+ wflag=`echo x$wflag | sed 's/^x-Werror=/-W/'`
+ RUBY_TRY_CFLAGS($wflag, [
+ RUBY_APPEND_OPTIONS(warnflags, $wflag)
+ particular_werror_flags=no
+ ])
+ ])
+ done
+ AS_CASE([" $warnflags "],[*" -Wno-missing-field-initializers "*], [wflag="-Wall -Wextra"],
+ [wflag=-Wall])
+ RUBY_TRY_CFLAGS($wflag, [warnflags="$wflag${warnflags+ $warnflags}"])
+ # Disable warnflags while conftest. -Werror=* flags might make bad OS capability guess.
+ rb_cv_warnflags="$warnflags"
+ warnflags=
+fi
+RUBY_TRY_CFLAGS(-Qunused-arguments, [RUBY_APPEND_OPTIONS(rb_cv_wsuppress_flags, -Qunused-arguments)])
+
+if test "$GCC" = yes; then
+ # -D_FORTIFY_SOURCE
+ # When defined _FORTIFY_SOURCE, glibc enables some additional sanity
+ # argument check. The performance drop is very little and Ubuntu enables
+ # _FORTIFY_SOURCE=2 by default. So, let's support it for protecting us from
+ # a mistake of silly C extensions.
+ RUBY_TRY_CFLAGS(-D_FORTIFY_SOURCE=2, [RUBY_APPEND_OPTION(XCFLAGS, -D_FORTIFY_SOURCE=2)])
+
+ # -fstack-protector
+ AS_CASE(["$target_os"],
+ [mingw*|nacl|haiku], [
+ stack_protector=no
+ ])
+ if test -z "${stack_protector+set}"; then
+ RUBY_TRY_CFLAGS(-fstack-protector, [stack_protector=yes], [stack_protector=no])
+ if test "x$stack_protector" = xyes; then
+ RUBY_TRY_LDFLAGS(-fstack-protector, [], [stack_protector=broken])
+ fi
+ fi
+ if test "x$stack_protector" = xyes; then
+ RUBY_APPEND_OPTION(XCFLAGS, -fstack-protector)
+ RUBY_APPEND_OPTION(XLDFLAGS, -fstack-protector)
+ RUBY_APPEND_OPTION(LDFLAGS, -fstack-protector)
+ fi
+
+ AS_CASE(["$target_os"],[mingw*], [
+ # On Windows platforms, system provided headers are VC++
+ # optimized. That is, C++ habits are often contaminated into
+ # various headers. Most frequent situation is the use of //
+ # comments. We bypass ANSI C mode for them. Otherwise
+ # extension libs cannot include those headers.
+ ],
+ [cygwin*|darwin*|netbsd*], [
+ # need lgamma_r(), finite()
+ ],
+ [haiku], [
+ # Haiku R1/alpha3 uses gcc-4.4.4 which can not handle anonymous union
+ # with ANSI standard flags. Anonumous union is required to compile
+ # socket extension where <net/if.h> uses anonymous union.
+ ],
+ [
+ # ANSI (no XCFLAGS because this is C only)
+ RUBY_TRY_CFLAGS(-ansi -std=iso9899:199409, [
+ RUBY_APPEND_OPTION(warnflags, -ansi -std=iso9899:199409)
+ RUBY_APPEND_OPTION(strict_warnflags, -ansi -std=iso9899:199409)
+ ])
+ ])
+
+ # suppress annoying -Wstrict-overflow warnings
+ RUBY_TRY_CFLAGS(-fno-strict-overflow, [RUBY_APPEND_OPTION(XCFLAGS, -fno-strict-overflow)])
+
+ test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-ggdb3, [debugflags=-ggdb3])}
+ test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-ggdb, [debugflags=-ggdb])}
+ test "${debugflags+set}" || {RUBY_TRY_CFLAGS(-g3, [debugflags=-g3])}
+fi
+test $ac_cv_prog_cc_g = yes && : ${debugflags=-g}
+
+if test "$GCC" = ""; then
+ AS_CASE(["$target_os"],[aix*],[warnflags="$warnflags -qinfo=por" rb_cv_warnflags="$rb_cv_warnflags -qinfo=por"])
+fi
+if test "$GCC" = yes; then
+ if test "$gcc_major" -ge 4; then
+ RUBY_TRY_CFLAGS(-fvisibility=hidden, [visibility_option=yes], [visibility_option=no])
+ fi
+ AC_SUBST(WERRORFLAG, "-Werror")
+ if test "$visibility_option" = yes; then
+ RUBY_APPEND_OPTION(XCFLAGS, -fvisibility=hidden)
+ AC_DEFINE(RUBY_SYMBOL_EXPORT_BEGIN, [_Pragma("GCC visibility push(default)")])
+ AC_DEFINE(RUBY_SYMBOL_EXPORT_END, [_Pragma("GCC visibility pop")])
+ else
+ RUBY_TRY_LDFLAGS([-Wl,-unexported_symbol,_Init_*], [visibility_option=ld], [visibility_option=no])
+ fi
+ test "$visibility_option" = no -o "$host_os" = nacl || OBJCOPY=:
+fi
+
+if test "$GCC" = yes; then
+ # optflags
+
+ AS_CASE(["$target_os"], [mingw*], [
+ RUBY_TRY_CFLAGS(-fno-omit-frame-pointer, [optflags="${optflags+$optflags }-fno-omit-frame-pointer"])
+ ])
+
+ # disable fast-math
+ for oflag in -fno-fast-math; do
+ RUBY_TRY_CFLAGS($oflag, [RUBY_APPEND_OPTION(optflags, $oflag)])
+ done
+ AS_CASE(["$target"],
+ [*-darwin*], [
+ # doesn't seem necessary on Mac OS X
+ ],
+ [[i[4-6]86*|i386*mingw*]], [
+ RUBY_TRY_CFLAGS(-msse2 -mfpmath=sse, [
+ RUBY_APPEND_OPTION(XCFLAGS, -msse2 -mfpmath=sse)
+ ])
+ AS_CASE(["$XCFLAGS"],
+ [[*-msse2*]], [
+ RUBY_TRY_CFLAGS(-mstackrealign, [
+ RUBY_APPEND_OPTION(XCFLAGS, -mstackrealign)
+ ])
+ ])
+ ]
+ )
+fi
+
+AC_ARG_WITH(opt-dir,
+ AS_HELP_STRING([--with-opt-dir=DIR-LIST],
+ [add optional headers and libraries directories separated by $PATH_SEPARATOR]),
+ [
+ val=`echo "$PATH_SEPARATOR$withval" | sed "s|$PATH_SEPARATOR\([[^$PATH_SEPARATOR]*]\)| -I\1/include|g;s/^ //"`
+ CPPFLAGS="$CPPFLAGS $val"
+ val=`echo "$PATH_SEPARATOR$withval" | sed "s|$PATH_SEPARATOR\([[^$PATH_SEPARATOR]*]\)| -L\1/lib|g;s/^ //"`
+ LDFLAGS="$LDFLAGS $val"
+ LDFLAGS_OPTDIR="$val"
+ OPT_DIR="$withval"
+ ], [OPT_DIR=])
+
+test -z "${ac_env_CFLAGS_set}" -a -n "${cflags+set}" && eval CFLAGS="\"$cflags $ARCH_FLAG\""
+test -z "${ac_env_CXXFLAGS_set}" -a -n "${cxxflags+set}" && eval CXXFLAGS="\"$cxxflags $ARCH_FLAG\""
+
+}
+{ # header and library section
+
+AC_ARG_WITH(winnt-ver,
+ AS_HELP_STRING([--with-winnt-ver=0xXXXX], [target Windows NT version (default to 0x0501)]),
+ [with_winnt_ver="$withval"], [with_winnt_ver="0x0501"])
+AS_CASE(["$target_os"],
+[mingw*], [
+ RUBY_APPEND_OPTION(CPPFLAGS, -D_WIN32_WINNT=$with_winnt_ver)
+ RUBY_APPEND_OPTION(CPPFLAGS, -D__MINGW_USE_VC2005_COMPAT)
+])
+
+AS_CASE(["$target_os"],
+[freebsd*], [
+ AC_CACHE_CHECK([whether pthread should be enabled by default],
+ rb_cv_enable_pthread_default,
+ [AC_TRY_CPP([
+#include <osreldate.h>
+#if __FreeBSD_version < 502102
+#error pthread should be disabled on this platform
+#endif
+ ],
+ rb_cv_enable_pthread_default=yes,
+ rb_cv_enable_pthread_default=no)])
+ enable_pthread=$rb_cv_enable_pthread_default
+ ],
+[mingw*], [
+ enable_pthread=no
+ ],
+[
+ enable_pthread=yes
+ ])
+
+AC_ARG_ENABLE(pthread,
+ AS_HELP_STRING([--enable-pthread], [obsolete, and ignored]))
dnl Checks for libraries.
-AC_CHECK_LIB(crypt, crypt)
+AS_CASE(["$target_os"],[*bsd*|dragonfly*],[],[ac_cv_func_daemon=no])
+
+POSTLINK=:
+AC_SUBST(POSTLINK)
+AS_CASE(["$target_os"],
+[nextstep*], [ ],
+[openstep*], [ ],
+[rhapsody*], [ ],
+[darwin*], [ RUBY_PREPEND_OPTION(LIBS, -lobjc)
+ RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT)
+ AC_MSG_CHECKING(whether Mac OS X 10.5 or later)
+ AC_TRY_CPP([#include <AvailabilityMacros.h>
+ #if MAC_OS_X_VERSION_MAX_ALLOWED <= 1040
+ #error pre OS X 10.4
+ [!<===== pre OS X 10.4 =====>]
+ #endif
+ ],
+ [macosx_10_5=yes], [macosx_10_5=no])
+ AC_MSG_RESULT($macosx_10_5)
+ if test $macosx_10_5 = yes; then
+ ac_cv_header_ucontext_h=no
+ else
+ AC_DEFINE(BROKEN_SETREUID, 1)
+ AC_DEFINE(BROKEN_SETREGID, 1)
+ fi
+ ac_cv_type_getgroups=gid_t # getgroups() on Rosetta fills garbage
+ ac_cv_lib_crypt_crypt=no
+ ac_cv_func_fdatasync=no # Mac OS X wrongly reports it has fdatasync()
+ AC_CACHE_CHECK(for broken crypt with 8bit chars, rb_cv_broken_crypt,
+ [AC_TRY_RUN([
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+int
+main()
+{
+ int i;
+ for (i = 0; i < 128*128; i++) {
+ char salt[2], buf[256], *s;
+ salt[0] = 0x80 | (i & 0x7f);
+ salt[1] = 0x80 | (i >> 7);
+ strcpy(buf, crypt("", salt));
+ if (strcmp(buf, s = crypt("", salt))) {
+#if 0
+ printf("%.2x%.2x: %s -> %s\n", (unsigned char)salt[0], (unsigned char)salt[1],
+ buf+2, s+2);
+#endif
+ return 1;
+ }
+ }
+ return 0;
+}
+],
+ rb_cv_broken_crypt=no,
+ rb_cv_broken_crypt=yes,
+ rb_cv_broken_crypt=yes)])
+ if test "$rb_cv_broken_crypt" = yes; then
+ AC_DEFINE(BROKEN_CRYPT, 1)
+ fi
+ AC_CHECK_PROGS(codesign, codesign)
+ if test -n "$codesign"; then
+ POSTLINK="test -z '\$(RUBY_CODESIGN)' || $codesign -s '\$(RUBY_CODESIGN)' -f \$@"
+ LINK_SO="$LINK_SO
+\$(POSTLINK)"
+ fi
+ AC_CHECK_HEADERS(crt_externs.h, [], [], [
+ #include <crt_externs.h>
+ ])
+ ],
+[hpux*], [ LIBS="-lm $LIBS"
+ ac_cv_c_inline=no],
+[beos*|haiku*], [
+ ac_cv_func_link=no
+ ac_cv_func_sched_yield=no
+ ac_cv_func_pthread_attr_setinheritsched=no
+ AS_CASE(["$target_os"],
+ [beos*], [ ac_cv_header_net_socket_h=yes],
+ [haiku*], [ ac_cv_func_shutdown=no])
+ LIBS="$LIBS" # m lib is include in root under BeOS/Haiku
+ ],
+[cygwin*], [ ac_cv_header_langinfo_h=yes
+ AC_CHECK_FUNCS(cygwin_conv_path)
+ AC_LIBOBJ([langinfo])
+ ],
+[mingw*], [ LIBS="-lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi $LIBS"
+ ac_cv_header_a_out_h=no
+ ac_cv_header_pwd_h=no
+ ac_cv_header_utime_h=no
+ ac_cv_header_sys_ioctl_h=no
+ ac_cv_header_sys_param_h=no
+ ac_cv_header_sys_resource_h=no
+ ac_cv_header_sys_select_h=no
+ ac_cv_header_sys_time_h=no
+ ac_cv_header_sys_times_h=no
+ ac_cv_header_sys_socket_h=no
+ ac_cv_func_times=yes
+ ac_cv_func_waitpid=yes
+ ac_cv_func_fsync=yes
+ ac_cv_func_seekdir=yes
+ ac_cv_func_telldir=yes
+ ac_cv_func_isinf=yes
+ ac_cv_func_isnan=yes
+ ac_cv_func_finite=yes
+ ac_cv_func_link=yes
+ ac_cv_lib_crypt_crypt=no
+ ac_cv_func_getpgrp_void=no
+ ac_cv_func_memcmp_working=yes
+ ac_cv_lib_dl_dlopen=no
+ rb_cv_binary_elf=no
+ rb_cv_negative_time_t=no
+ ac_cv_func_fcntl=yes
+ ac_cv_func_flock=yes
+ ac_cv_func_gmtime_r=yes
+ rb_cv_large_fd_select=yes
+ ac_cv_type_struct_timeval=yes
+ ac_cv_func_clock_gettime=yes
+ ac_cv_func_clock_getres=yes
+ ac_cv_func_malloc_usable_size=no
+ { test "$target_cpu" = x64 && ac_cv_func___builtin_setjmp=no; }
+ AC_CHECK_TYPE([NET_LUID], [], [],
+ [@%:@include <windows.h>
+ @%:@include <iphlpapi.h>])
+ if test x"$ac_cv_type_NET_LUID" = xyes; then
+ AC_DEFINE(HAVE_TYPE_NET_LUID, 1)
+ fi
+ AC_CHECK_FUNCS(_gmtime64_s)
+ AC_LIBOBJ([langinfo])
+ ],
+[os2-emx*], [ LIBS="-lm $LIBS"
+ ac_cv_lib_dir_opendir=no],
+[bsdi*], [ LIBS="-lm $LIBS"
+ AC_DEFINE(BROKEN_SETREUID, 1)
+ AC_DEFINE(BROKEN_SETREGID, 1)
+ ac_cv_sizeof_rlim_t=8],
+[freebsd*], [ LIBS="-lm $LIBS"
+ ac_cv_func_getpeername=no
+ ac_cv_func_getsockname=no
+ ac_cv_func_shutdown=no
+ ac_cv_func_close=no
+ ],
+[dragonfly*], [ LIBS="-lm $LIBS"
+ # isinf() and isnan() are macros on DragonFly.
+ ac_cv_func_isinf=yes
+ ac_cv_func_isnan=yes
+ ],
+[nacl], [
+ LIBS="-lm $LIBS"
+ if test "${nacl_cv_build_variant}" = "newlib"; then
+ RUBY_APPEND_OPTION(CPPFLAGS, -DNACL_NEWLIB)
+ RUBY_APPEND_OPTION(LIBS, '-lnosys')
+ else
+ RUBY_APPEND_OPTION(XCFLAGS, -fPIC)
+ fi
+ ac_cv_func_shutdown=no
+ ac_cv_func_fcntl=no
+ ],
+[ LIBS="-lm $LIBS"])
+
+AC_CHECK_LIB(crypt, crypt) # glibc (GNU/Linux, GNU/Hurd, GNU/kFreeBSD)
AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV
AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX
+AC_CHECK_LIB(socket, shutdown) # SunOS/Solaris
dnl Checks for header files.
AC_HEADER_DIRENT
-AC_HEADER_STDC
-AC_CHECK_HEADERS(unistd.h limits.h sys/file.h sys/ioctl.h pwd.h sys/select.h\
- sys/time.h sys/times.h sys/param.h sys/wait.h\
- syscall.h a.out.h string.h utime.h memory.h)
+dnl AC_HEADER_STDC has been checked in AC_USE_SYSTEM_EXTENSIONS
+AC_HEADER_STDBOOL
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS( \
+ limits.h \
+ sys/file.h \
+ sys/ioctl.h \
+ sys/syscall.h \
+ fcntl.h \
+ sys/fcntl.h \
+ sys/select.h \
+ sys/time.h \
+ sys/times.h \
+ sys/param.h \
+ syscall.h \
+ pwd.h \
+ grp.h \
+ a.out.h \
+ utime.h \
+ direct.h \
+ sys/resource.h \
+ sys/mkdev.h \
+ sys/utime.h \
+ float.h \
+ ieeefp.h \
+ ucontext.h \
+ intrinsics.h \
+ langinfo.h \
+ locale.h \
+ sys/sendfile.h \
+ time.h \
+ net/socket.h \
+ sys/socket.h \
+ process.h \
+ sys/prctl.h \
+ atomic.h \
+ malloc.h \
+ malloc_np.h \
+ malloc/malloc.h \
+ setjmpex.h
+)
+
+AC_ARG_WITH([gmp],
+ [AS_HELP_STRING([--without-gmp],
+ [disable GNU GMP to accelerate Bignum operations])],
+ [],
+ [with_gmp=yes])
+AS_IF([test "x$with_gmp" != xno],
+ [AC_CHECK_HEADERS(gmp.h)
+ AS_IF([test "x$ac_cv_header_gmp_h" != xno],
+ AC_CHECK_LIB([gmp], [__gmpz_init]))
+ with_gmp="$ac_cv_lib_gmp___gmpz_init"
+ AS_IF([test -z "$with_gmp"], [with_gmp=no])])
+
+dnl check for large file stuff
+mv confdefs.h confdefs1.h
+: > confdefs.h
+AC_SYS_LARGEFILE
+mv confdefs.h largefile.h
+mv confdefs1.h confdefs.h
+cat largefile.h >> confdefs.h
+
+AS_CASE(["$target_os"],
+ [mingw*], [ac_cv_type_off_t=yes;ac_cv_sizeof_off_t=8],
+ [aix*], [
+ AS_CASE(["$target_cpu:$ac_cv_sys_large_files"],
+ [ppc64:*|powerpc64:*], [],
+ [*:no|*:unknown], [],
+ [
+ # AIX currently does not support a 32-bit call to posix_fadvise()
+ # if _LARGE_FILES is defined.
+ ac_cv_func_posix_fadvise=no
+ ])
+ ])
+
+AC_C_BIGENDIAN
+AC_C_CONST
+AC_C_CHAR_UNSIGNED
+AC_C_INLINE
+AC_C_VOLATILE
+
+AS_CASE(":$ac_cv_c_const:$ac_cv_c_volatile:",
+ [*:no:*], [AC_MSG_ERROR(ANSI C-conforming const and volatile are mandatory)])
+
+AC_CHECK_TYPES([long long, off_t])
+
+AC_CACHE_CHECK([char bit], [rb_cv_char_bit],
+ [test "$universal_binary" = yes && cross_compiling=yes
+ AC_COMPUTE_INT([rb_cv_char_bit], [CHAR_BIT],
+ [AC_INCLUDES_DEFAULT([@%:@include <limits.h>])], [rb_cv_char_bit=8])
+ test "$universal_binary" = yes && cross_compiling=$real_cross_compiling])
+
+dnl RUBY_CHECK_SIZEOF [typename], [maybe same size types], [macros], [include]
+AC_DEFUN([RUBY_CHECK_SIZEOF],
+[m4_bmatch([$1], [\.], [], [if test "$universal_binary" = yes; then])
+AC_CACHE_CHECK([size of $1], [AS_TR_SH([ac_cv_sizeof_$1])], [
+ unset AS_TR_SH(ac_cv_sizeof_$1)
+ rbcv_var="
+typedef m4_bpatsubst([$1], [\..*]) ac__type_sizeof_;
+static ac__type_sizeof_ *rbcv_ptr;
+@%:@define AS_TR_CPP(SIZEOF_$1) sizeof((*rbcv_ptr)[]m4_bmatch([$1], [\.], .m4_bpatsubst([$1], [^[^.]*\.])))
+"
+ m4_ifval([$2], [test -z "${AS_TR_SH(ac_cv_sizeof_$1)+set}" && {
+ for t in $2; do
+ AC_COMPILE_IFELSE(
+ [AC_LANG_BOOL_COMPILE_TRY(AC_INCLUDES_DEFAULT([$4]
+ [$rbcv_var]),
+ [AS_TR_CPP(SIZEOF_$1) == sizeof($t)])], [
+ AS_TR_SH(ac_cv_sizeof_$1)=AS_TR_CPP([SIZEOF_]$t)
+ break])
+ done
+ }])
+ unset cond
+ m4_ifval([$3], [test -z "${AS_TR_SH(ac_cv_sizeof_$1)+set}" && {
+ for s in 32 64 128; do
+ for t in $3; do
+ cond="${cond}
+@%:@${cond+el}if defined(__${t}${s}__) || defined(__${t}${s}) || defined(_${t}${s}) || defined(${t}${s})"
+ hdr="AC_INCLUDES_DEFAULT([$4
+@%:@if defined(__${t}${s}__) || defined(__${t}${s}) || defined(_${t}${s}) || defined(${t}${s})
+@%:@ define AS_TR_CPP(HAVE_$1) 1
+@%:@else
+@%:@ define AS_TR_CPP(HAVE_$1) 0
+@%:@endif])"
+ AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$hdr], [!AS_TR_CPP(HAVE_$1)])], [continue])
+ AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([$hdr]
+ [$rbcv_var],
+ [AS_TR_CPP(HAVE_$1) == (AS_TR_CPP(SIZEOF_$1) == ([$[s / rb_cv_char_bit]]))])],
+ [AS_TR_SH(ac_cv_sizeof_$1)="${AS_TR_SH(ac_cv_sizeof_$1)+${AS_TR_SH(ac_cv_sizeof_$1)-} }${t}${s}"])
+ done
+ done
+ }])
+ m4_ifval([$2][$3],
+ [test "${AS_TR_SH(ac_cv_sizeof_$1)@%:@SIZEOF_}" = "${AS_TR_SH(ac_cv_sizeof_$1)}" && ]){
+ test "$universal_binary" = yes && cross_compiling=yes
+ AC_COMPUTE_INT([t], AS_TR_CPP(SIZEOF_$1), [AC_INCLUDES_DEFAULT([$4])]
+[${cond+$cond
+@%:@else}
+$rbcv_var
+${cond+@%:@endif}
+@%:@ifndef AS_TR_CPP(SIZEOF_$1)
+@%:@define AS_TR_CPP(SIZEOF_$1) 0
+@%:@endif], [t=0])
+ test "$universal_binary" = yes && cross_compiling=$real_cross_compiling
+ if test ${t-0} != 0; then
+ AS_TR_SH(ac_cv_sizeof_$1)="${AS_TR_SH(ac_cv_sizeof_$1)+${AS_TR_SH(ac_cv_sizeof_$1)-} }${t}"
+ fi
+ }
+ : ${AS_TR_SH(ac_cv_sizeof_$1)=0}
+])
+{
+ unset cond
+ for t in ${AS_TR_SH(ac_cv_sizeof_$1)-}; do
+ AS_CASE(["$t"],
+ [[[0-9]*|SIZEOF_*]], [
+ ${cond+echo "@%:@else"}
+ echo "[@%:@define ]AS_TR_CPP(SIZEOF_$1) [$t]"
+ break
+ ],
+ [
+ s=`expr $t : ['.*[^0-9]\([0-9][0-9]*\)$']`
+ echo "@%:@${cond+el}if defined(__${t}__) || defined(__${t}) || defined(_${t}) || defined($t)"
+ echo "@%:@define AS_TR_CPP(SIZEOF_$1) [$[s / rb_cv_char_bit]]"
+ cond=1
+ ])
+ done
+ ${cond+echo "@%:@endif"}
+} >> confdefs.h
+m4_bmatch([$1], [\.], [], [else
+AC_CHECK_SIZEOF([$1], 0, [$4])
+fi])
+])
+
+RUBY_CHECK_SIZEOF(int, [], [ILP])
+RUBY_CHECK_SIZEOF(short)
+RUBY_CHECK_SIZEOF(long, [int], [ILP LP])
+RUBY_CHECK_SIZEOF(long long)
+RUBY_CHECK_SIZEOF(__int64)
+RUBY_CHECK_SIZEOF(__int128)
+RUBY_CHECK_SIZEOF(off_t)
+RUBY_CHECK_SIZEOF(void*, [int long "long long"], [ILP LP LLP])
+RUBY_CHECK_SIZEOF(float)
+RUBY_CHECK_SIZEOF(double)
+RUBY_CHECK_SIZEOF(time_t, [long "long long"], [], [@%:@include <time.h>])
+RUBY_CHECK_SIZEOF(clock_t, [], [], [@%:@include <time.h>])
+
+AC_DEFUN([RUBY_CHECK_PRINTF_PREFIX], [
+AC_CACHE_CHECK([for printf prefix for $1], [rb_cv_pri_prefix_]AS_TR_SH($1),[
+ [rb_cv_pri_prefix_]AS_TR_SH($1)=[NONE]
+ RUBY_WERROR_FLAG(RUBY_APPEND_OPTIONS(CFLAGS, $rb_cv_wsuppress_flags)
+ for pri in $2; do
+ AC_TRY_COMPILE(
+ [@%:@include <stdio.h>
+ @%:@include <stddef.h>
+ @%:@ifdef __GNUC__
+ @%:@define PRINTF_ARGS(decl, string_index, first_to_check) \
+ decl __attribute__((format(printf, string_index, first_to_check)))
+ @%:@else
+ @%:@define PRINTF_ARGS(decl, string_index, first_to_check) decl
+ @%:@endif
+ PRINTF_ARGS(void test_sprintf(const char*, ...), 1, 2);],
+ [printf("%]${pri}[d", (]$1[)42);
+ test_sprintf("%]${pri}[d", (]$1[)42);],
+ [rb_cv_pri_prefix_]AS_TR_SH($1)[=[$pri]; break])
+ done)])
+if test "[$rb_cv_pri_prefix_]AS_TR_SH($1)" != NONE; then
+ AC_DEFINE_UNQUOTED([PRI_]m4_ifval($3,$3,AS_TR_CPP(m4_bpatsubst([$1],[_t$])))[_PREFIX],
+ "[$rb_cv_pri_prefix_]AS_TR_SH($1)")
+fi
+])
+
+if test "x$ac_cv_type_long_long" = xyes; then
+ RUBY_CHECK_PRINTF_PREFIX(long long, ll I64, LL)
+elif test "x$ac_cv_type___int64" = xyes; then
+ RUBY_CHECK_PRINTF_PREFIX(__int64, ll I64, LL)
+fi
+
+dnl RUBY_CHECK_SIZEOF [typename] [if-signed] [if-unsigned] [included]
+AC_DEFUN([RUBY_CHECK_SIGNEDNESS], [dnl
+ AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([$4])], [($1)-1 > 0])],
+ [$3], [$2])])
+
+dnl RUBY_REPLACE_TYPE [typename] [default type] [macro type] [included]
+AC_DEFUN([RUBY_REPLACE_TYPE], [dnl
+ AC_CHECK_TYPE([$1],
+ [n="patsubst([$1],["],[\\"])"],
+ [n="patsubst([$2],["],[\\"])"],
+ [$4])
+ AC_CACHE_CHECK([for convertible type of [$1]], rb_cv_[$1]_convertible, [
+ u= t=
+ AS_CASE(["$n "],
+ [*" signed "*], [ ],
+ [*" unsigned "*], [
+ u=U],
+ [RUBY_CHECK_SIGNEDNESS($n, [], [u=U], [$4])])
+ if test x"$t" = x; then
+ for t in "long long" long int short; do
+ test -n "$u" && t="unsigned $t"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([$4])]
+ [typedef $n rbcv_conftest_target_type;
+ typedef $t rbcv_conftest_replace_type;
+ extern rbcv_conftest_target_type rbcv_conftest_var;
+ extern rbcv_conftest_replace_type rbcv_conftest_var;
+ extern rbcv_conftest_target_type rbcv_conftest_func(void);
+ extern rbcv_conftest_replace_type rbcv_conftest_func(void);
+ ], [sizeof(rbcv_conftest_target_type) == sizeof(rbcv_conftest_replace_type)])],
+ [n="$t"; break])
+ done
+ fi
+ AS_CASE([" $n "],
+ [*" long long "*], [
+ t=LL],
+ [*" long "*], [
+ t=LONG],
+ [
+ t=INT])
+ rb_cv_[$1]_convertible=${u}${t}])
+ test "${AS_TR_SH(ac_cv_type_[$1])}" = "yes" && n="$1"
+ AS_CASE("${rb_cv_[$1]_convertible}", [U*], [u=+1], [u=-1])
+ AC_DEFINE_UNQUOTED(rb_[$1], $n)
+ AC_DEFINE_UNQUOTED([SIGNEDNESS_OF_]AS_TR_CPP($1), $u)
+ AC_DEFINE_UNQUOTED([$3]2NUM[(v)], [${rb_cv_[$1]_convertible}2NUM(v)])
+ AC_DEFINE_UNQUOTED(NUM2[$3][(v)], [NUM2${rb_cv_[$1]_convertible}(v)])
+ AC_DEFINE_UNQUOTED(PRI_[$3]_PREFIX,
+ [PRI_`echo ${rb_cv_[$1]_convertible} | sed ['s/^U//']`_PREFIX])
+])
+RUBY_REPLACE_TYPE(pid_t, int, PIDT)
+RUBY_REPLACE_TYPE(uid_t, int, UIDT)
+RUBY_REPLACE_TYPE(gid_t, int, GIDT)
+RUBY_REPLACE_TYPE(time_t, [], TIMET, [@%:@include <time.h>])
+RUBY_REPLACE_TYPE(dev_t, [int long "long long"], DEVT)
+RUBY_REPLACE_TYPE(mode_t, ["unsigned int" long], MODET, [@%:@include <sys/stat.h>])
+RUBY_REPLACE_TYPE(rlim_t, [int long "long long"], RLIM, [
+@%:@ifdef HAVE_SYS_TYPES_H
+@%:@include <sys/types.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TYPES_H
+@%:@include <sys/time.h>
+@%:@endif
+@%:@include <sys/resource.h>
+])
+RUBY_REPLACE_TYPE(off_t, [], OFFT)
+RUBY_REPLACE_TYPE(clockid_t, [], CLOCKID)
+
+AC_CACHE_CHECK(for prototypes, rb_cv_have_prototypes,
+ [AC_TRY_COMPILE([int foo(int x) { return 0; }], [return foo(10);],
+ rb_cv_have_prototypes=yes,
+ rb_cv_have_prototypes=no)])
+if test "$rb_cv_have_prototypes" = yes; then
+ AC_DEFINE(HAVE_PROTOTYPES)
+fi
+
+AC_CACHE_CHECK(token paste string, rb_cv_tokenpaste,
+ [AC_TRY_COMPILE([@%:@define paste(a,b) a@%:@@%:@b],
+ [int xy = 1; return paste(x,y);],
+ rb_cv_tokenpaste=ansi,
+ rb_cv_tokenpaste=knr)])
+if test "$rb_cv_tokenpaste" = ansi; then
+ AC_DEFINE(TOKEN_PASTE(x,y),[x@%:@@%:@y])
+else
+ AC_DEFINE(TOKEN_PASTE(x,y),[x/**/y])
+fi
+
+AC_CACHE_CHECK(stringization, rb_cv_stringization, [
+ rb_cv_stringization=no
+ for string in "#expr" '"expr"'; do
+ AC_COMPILE_IFELSE([
+ AC_LANG_BOOL_COMPILE_TRY([
+#define STRINGIZE0(expr) $string
+#define STRINGIZE(expr) STRINGIZE0(expr)
+#undef real_test_for_stringization
+#define test_for_stringization -.real_test_for_stringization.-
+const char stringized[[]] = STRINGIZE(test_for_stringization);
+], [sizeof(stringized) == 32])],
+ [rb_cv_stringization="$string"; break],
+ [rb_cv_stringization=no])
+ done]
+)
+AC_DEFINE(STRINGIZE(expr),STRINGIZE0(expr))
+if test x"$rb_cv_stringization" != xno -a "$rb_cv_stringization" != "#expr"; then
+ AC_DEFINE_UNQUOTED(STRINGIZE0(expr),$rb_cv_stringization)
+ AC_DEFINE(OLD_FASHIONED_STRINGIZATION,1)
+fi
+
+AC_CACHE_CHECK([string literal concatenation],
+ rb_cv_string_literal_concatenation, [
+ AC_COMPILE_IFELSE([
+ AC_LANG_BOOL_COMPILE_TRY([
+const char concatenated_literal[[]] = "literals" "to"
+ "be" "concatenated.";
+], [sizeof(concatenated_literal) == 26])],
+ [rb_cv_string_literal_concatenation=yes],
+ [rb_cv_string_literal_concatenation=no])]
+)
+if test "$rb_cv_string_literal_concatenation" = no; then
+ AC_DEFINE(NO_STRING_LITERAL_CONCATENATION,1)
+fi
+
+AC_CACHE_CHECK(for variable length prototypes and stdarg.h, rb_cv_stdarg,
+ [AC_TRY_COMPILE([
+#include <stdarg.h>
+int foo(int x, ...) {
+ va_list va;
+ va_start(va, x);
+ va_arg(va, int);
+ va_arg(va, char *);
+ va_arg(va, double);
+ return 0;
+}
+], [return foo(10, "", 3.14);],
+ rb_cv_stdarg=yes,
+ rb_cv_stdarg=no)])
+if test "$rb_cv_stdarg" = yes; then
+ AC_DEFINE(HAVE_STDARG_PROTOTYPES)
+fi
+
+AC_CACHE_CHECK(for variable length macro, rb_cv_va_args_macro,
+ [AC_TRY_COMPILE([
+int foo(int x, ...);
+@%:@define FOO(a, ...) foo(a, @%:@@%:@__VA_ARGS__)
+], [FOO(1);FOO(1,2);FOO(1,2,3);],
+ rb_cv_va_args_macro=yes,
+ rb_cv_va_args_macro=no)])
+if test "$rb_cv_va_args_macro" = yes; then
+ AC_DEFINE(HAVE_VA_ARGS_MACRO)
+fi
+
+AC_DEFUN([RUBY_DEFINE_IF], [dnl
+ m4_ifval([$1], [AS_LITERAL_IF([$1], [], [test "X$1" = X || ])cat <<EOH >> confdefs.h
+@%:@if $1
+EOH
+])dnl
+AC_DEFINE_UNQUOTED($2, $3)dnl
+ m4_ifval([$1], [AS_LITERAL_IF([$1], [], [test "X$1" = X || ])cat <<EOH >> confdefs.h
+@%:@endif /* $1 */
+EOH
+])dnl
+])dnl
+
+dnl RUBY_FUNC_ATTRIBUTE(attrib, macroname, cachevar, condition)
+AC_DEFUN([RUBY_FUNC_ATTRIBUTE], [dnl
+m4_ifval([$2], dnl
+ [AS_VAR_PUSHDEF([attrib],[$2])], dnl
+ [AS_VAR_PUSHDEF([attrib],[FUNC_]AS_TR_CPP($1))] dnl
+)dnl
+m4_ifval([$3], dnl
+ [AS_VAR_PUSHDEF([rbcv],[$3])], dnl
+ [AS_VAR_PUSHDEF([rbcv],[rb_cv_func_][$1])]dnl
+)dnl
+m4_ifval([$4], [rbcv_cond=["$4"]; test "$rbcv_cond" || unset rbcv_cond])
+AC_CACHE_CHECK(for [$1] function attribute, rbcv,
+[rbcv=x
+RUBY_WERROR_FLAG([
+for mac in "__attribute__ (($1)) x" "x __attribute__ (($1))" "__declspec($1) x" x; do
+ m4_ifval([$4],mac="$mac"${rbcv_cond+" /* only if $rbcv_cond */"})
+ AC_TRY_COMPILE(
+ m4_ifval([$4],${rbcv_cond+[@%:@if ]$rbcv_cond})
+[@%:@define ]attrib[(x) $mac]
+m4_ifval([$4],${rbcv_cond+[@%:@else]}
+${rbcv_cond+[@%:@define ]attrib[(x) x]}
+${rbcv_cond+[@%:@endif]})
+ attrib[(void conftest_attribute_check(void));], [],
+ [rbcv="$mac"; break])
+done
+])])
+if test "$rbcv" != x; then
+ RUBY_DEFINE_IF(m4_ifval([$4],[${rbcv_cond}]), attrib[(x)], $rbcv)
+fi
+m4_ifval([$4], [unset rbcv_cond])dnl
+AS_VAR_POPDEF([attrib])dnl
+AS_VAR_POPDEF([rbcv])dnl
+])
+
+RUBY_FUNC_ATTRIBUTE(noreturn, NORETURN)
+RUBY_FUNC_ATTRIBUTE(deprecated, DEPRECATED)
+RUBY_FUNC_ATTRIBUTE(noinline, NOINLINE)
+
+if_i386=${universal_binary+[defined __i386__]}
+RUBY_FUNC_ATTRIBUTE(stdcall, [], [], ${if_i386})
+RUBY_FUNC_ATTRIBUTE(cdecl, [], [], ${if_i386})
+RUBY_FUNC_ATTRIBUTE(fastcall, [], [], ${if_i386})
+
+if test "$GCC" = yes; then
+ AC_CACHE_CHECK([for function alias], [rb_cv_gcc_function_alias],
+ [rb_cv_gcc_function_alias=no
+ for a in alias weak,alias; do
+ AC_TRY_LINK([void foo(void) {}
+ void bar(void) __attribute__(($a("foo")));], [bar()],
+ [rb_cv_gcc_function_alias=$a; break])
+ done])
+ if test "$rb_cv_gcc_function_alias" != no; then
+ AC_DEFINE(HAVE_ATTRIBUTE_FUNCTION_ALIAS)
+ AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args)],
+ [type prot __attribute__(($rb_cv_gcc_function_alias(@%:@name)));])
+ AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION_VOID(prot, name, args)],
+ [RUBY_ALIAS_FUNCTION_TYPE(void, prot, name, args)])
+ fi
+
+ AC_CACHE_CHECK([for __atomic builtins], [rb_cv_gcc_atomic_builtins], [
+ AC_TRY_LINK([unsigned char atomic_var;],
+ [
+ __atomic_exchange_n(&atomic_var, 0, __ATOMIC_SEQ_CST);
+ __atomic_exchange_n(&atomic_var, 1, __ATOMIC_SEQ_CST);
+ __atomic_fetch_add(&atomic_var, 1, __ATOMIC_SEQ_CST);
+ __atomic_fetch_sub(&atomic_var, 1, __ATOMIC_SEQ_CST);
+ ],
+ [rb_cv_gcc_atomic_builtins=yes],
+ [rb_cv_gcc_atomic_builtins=no])])
+ if test "$rb_cv_gcc_atomic_builtins" = yes; then
+ AC_DEFINE(HAVE_GCC_ATOMIC_BUILTINS)
+ fi
+
+ AC_CACHE_CHECK([for __sync builtins], [rb_cv_gcc_sync_builtins], [
+ AC_TRY_LINK([unsigned char atomic_var;],
+ [
+ __sync_lock_test_and_set(&atomic_var, 0);
+ __sync_lock_test_and_set(&atomic_var, 1);
+ __sync_fetch_and_add(&atomic_var, 1);
+ __sync_fetch_and_sub(&atomic_var, 1);
+ ],
+ [rb_cv_gcc_sync_builtins=yes],
+ [rb_cv_gcc_sync_builtins=no])])
+ if test "$rb_cv_gcc_sync_builtins" = yes; then
+ AC_DEFINE(HAVE_GCC_SYNC_BUILTINS)
+ fi
+
+ AC_CACHE_CHECK(for __builtin_unreachable, rb_cv_func___builtin_unreachable,
+ [RUBY_WERROR_FLAG(
+ [AC_TRY_LINK([volatile int zero;],
+ [if (zero) __builtin_unreachable();],
+ [rb_cv_func___builtin_unreachable=yes],
+ [rb_cv_func___builtin_unreachable=no])
+ ])
+ ])
+ if test "$rb_cv_func___builtin_unreachable" = yes; then
+ AC_DEFINE_UNQUOTED(UNREACHABLE, [__builtin_unreachable()])
+ fi
+fi
+
+AC_CACHE_CHECK(for exported function attribute, rb_cv_func_exported, [
+rb_cv_func_exported=no
+RUBY_WERROR_FLAG([
+for mac in '__attribute__ ((visibility("default")))' '__declspec(dllexport)'; do
+ AC_TRY_COMPILE([@%:@define RUBY_FUNC_EXPORTED $mac extern
+ RUBY_FUNC_EXPORTED void conftest_attribute_check(void);], [],
+ [rb_cv_func_exported="$mac"; break])
+done
+])])
+if test "$rb_cv_func_exported" != no; then
+ AC_DEFINE_UNQUOTED(RUBY_FUNC_EXPORTED, [$rb_cv_func_exported extern])
+fi
+
+RUBY_APPEND_OPTION(XCFLAGS, -DRUBY_EXPORT)
+
+AC_CACHE_CHECK(for function name string predefined identifier,
+ rb_cv_function_name_string,
+ [rb_cv_function_name_string=no
+ RUBY_WERROR_FLAG([
+ for func in __func__ __FUNCTION__; do
+ AC_TRY_LINK([@%:@include <stdio.h>],
+ [puts($func);],
+ [rb_cv_function_name_string=$func
+ break])
+ done
+ ])]
+)
+if test "$rb_cv_function_name_string" != no; then
+ AC_DEFINE_UNQUOTED(RUBY_FUNCTION_NAME_STRING, [$rb_cv_function_name_string])
+fi
+
+dnl Check whether we need to define sys_nerr locally
+AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default
+@%:@include <errno.h>])
+
+AC_CHECK_DECLS([getenv])
+
+AS_CASE(["$target_cpu"],
+[alpha*|sh4|sh4el|sh4eb], [AS_CASE(["$target_os"::"$GCC"],
+ [*::yes], # gcc
+ [CFLAGS="-mieee $CFLAGS"],
+ [osf*], # ccc
+ [CFLAGS="-ieee $CFLAGS"],
+ )],
+[sparc*], [AC_LIBOBJ([sparc])])
+
+ac_cv_header_net_socket_h=${ac_cv_header_net_socket_h=no}
+if test "$ac_cv_header_net_socket_h" = yes; then
+ ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=no}
+else
+ ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=yes}
+fi
+
-dnl Checks for typedefs, structures, and compiler characteristics.
-AC_TYPE_UID_T
AC_TYPE_SIZE_T
+RUBY_CHECK_SIGNEDNESS(size_t, [AC_MSG_ERROR(size_t is signed)], [],
+ [@%:@include <sys/types.h>])
+RUBY_CHECK_SIZEOF(size_t, [int long void*], [], [@%:@include <sys/types.h>])
+RUBY_CHECK_SIZEOF(ptrdiff_t, size_t, [], [@%:@include <stddef.h>])
+RUBY_CHECK_PRINTF_PREFIX(size_t, z)
+RUBY_CHECK_PRINTF_PREFIX(ptrdiff_t, t)
AC_STRUCT_ST_BLKSIZE
AC_STRUCT_ST_BLOCKS
AC_STRUCT_ST_RDEV
+RUBY_CHECK_SIZEOF([struct stat.st_size], [int long "long long"], [], [@%:@include <sys/stat.h>])
+if test "$ac_cv_member_struct_stat_st_blocks" = yes; then
+ RUBY_CHECK_SIZEOF([struct stat.st_blocks], [int long "long long"], [], [@%:@include <sys/stat.h>])
+fi
+AC_CHECK_MEMBERS([struct stat.st_atim])
+AC_CHECK_MEMBERS([struct stat.st_atimespec])
+AC_CHECK_MEMBERS([struct stat.st_atimensec])
+AC_CHECK_MEMBERS([struct stat.st_mtim])
+AC_CHECK_MEMBERS([struct stat.st_mtimespec])
+AC_CHECK_MEMBERS([struct stat.st_mtimensec])
+AC_CHECK_MEMBERS([struct stat.st_ctim])
+AC_CHECK_MEMBERS([struct stat.st_ctimespec])
+AC_CHECK_MEMBERS([struct stat.st_ctimensec])
+
+AC_CHECK_TYPES([struct timeval], [], [], [@%:@ifdef HAVE_TIME_H
+@%:@include <time.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TIME_H
+@%:@include <sys/time.h>
+@%:@endif])
+
+if test "${ac_cv_type_struct_timeval}" = yes; then
+ RUBY_CHECK_SIZEOF([struct timeval.tv_sec], [time_t long "long long"], [],
+ [@%:@ifdef HAVE_TIME_H
+@%:@include <time.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TIME_H
+@%:@include <sys/time.h>
+@%:@endif])
+ AS_CASE(${ac_cv_sizeof_struct_timeval_tv_sec},
+ [SIZEOF_INT], [t=int],
+ [SIZEOF_LONG], [t=long],
+ [SIZEOF_LONG_LONG], [t=LONG_LONG],
+ [t=])
+ if test "${t}" != ""; then
+ AC_DEFINE_UNQUOTED(TYPEOF_TIMEVAL_TV_SEC, [$t])
+ fi
+fi
+
+AC_CHECK_TYPES([struct timespec], [], [], [@%:@ifdef HAVE_TIME_H
+@%:@include <time.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TIME_H
+@%:@include <sys/time.h>
+@%:@endif])
+
+AC_CHECK_TYPES([struct timezone], [], [], [@%:@ifdef HAVE_TIME_H
+@%:@ include <time.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TIME_H
+@%:@ include <sys/time.h>
+@%:@endif])
+
+AC_CHECK_TYPES([clockid_t], [], [], [@%:@ifdef HAVE_TIME_H
+@%:@ include <time.h>
+@%:@endif
+@%:@ifdef HAVE_SYS_TIME_H
+@%:@ include <sys/time.h>
+@%:@endif])
+
+AC_CACHE_VAL([rb_cv_large_fd_select],
+ [AC_CHECK_TYPE(fd_mask, [rb_cv_large_fd_select=yes], [rb_cv_large_fd_select=no])])
+if test "$rb_cv_large_fd_select" = yes; then
+ AC_DEFINE(HAVE_RB_FD_INIT, 1)
+fi
+
+dnl RUBY_DEFINT TYPENAME, SIZE, [SIGNED-OR-UNSIGNED], [INCLUDES = DEFAULT-INCLUDES]
+AC_DEFUN([RUBY_DEFINT], [dnl
+AC_CACHE_CHECK([for $1], [rb_cv_type_$1],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])
+typedef $1 t; int s = sizeof(t) == 42;])],
+ [rb_cv_type_$1=yes],
+ [AS_CASE([m4_bmatch([$2], [^[1-9][0-9]*$], $2, [$ac_cv_sizeof_]AS_TR_SH($2))],
+ ["1"], [ rb_cv_type_$1="m4_if([$3], [], [signed ], [$3 ])char"],
+ ["$ac_cv_sizeof_short"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])short"],
+ ["$ac_cv_sizeof_int"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])int"],
+ ["$ac_cv_sizeof_long"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])long"],
+ ["$ac_cv_sizeof_long_long"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])long long"],
+ ["$ac_cv_sizeof___int64"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])__int64"],
+ ["$ac_cv_sizeof___int128"], [ rb_cv_type_$1="m4_if([$3], [], [], [$3 ])__int128"],
+ [ rb_cv_type_$1=no])])])
+if test "${rb_cv_type_$1}" != no; then
+ AC_DEFINE([HAVE_]AS_TR_CPP($1), 1)
+ if test "${rb_cv_type_$1}" = yes; then
+ m4_bmatch([$2], [^[1-9][0-9]*$], [AC_CHECK_SIZEOF([$1], 0, [AC_INCLUDES_DEFAULT([$4])])],
+ [RUBY_CHECK_SIZEOF([$1], [$2], [], [AC_INCLUDES_DEFAULT([$4])])])
+ else
+ AC_DEFINE_UNQUOTED($1, [$rb_cv_type_$1])
+ AC_DEFINE_UNQUOTED([SIZEOF_]AS_TR_CPP($1), [SIZEOF_]AS_TR_CPP([$rb_cv_type_$1]))
+ fi
+fi
+])
+
+RUBY_DEFINT(int8_t, 1)
+RUBY_DEFINT(uint8_t, 1, unsigned)
+RUBY_DEFINT(int16_t, 2)
+RUBY_DEFINT(uint16_t, 2, unsigned)
+RUBY_DEFINT(int32_t, 4)
+RUBY_DEFINT(uint32_t, 4, unsigned)
+RUBY_DEFINT(int64_t, 8)
+RUBY_DEFINT(uint64_t, 8, unsigned)
+RUBY_DEFINT(int128_t, 16)
+RUBY_DEFINT(uint128_t, 16, unsigned)
+RUBY_DEFINT(intptr_t, void*)
+RUBY_DEFINT(uintptr_t, void*, unsigned)
+RUBY_DEFINT(ssize_t, size_t, [], [@%:@include <sys/types.h>]) dnl may differ from int, so not use AC_TYPE_SSIZE_T.
+
+RUBY_NACL_CHECK_PEPPER_TYPES
+
+AC_CACHE_CHECK(for stack end address, rb_cv_stack_end_address,
+[rb_cv_stack_end_address=no
+ AC_TRY_LINK(
+ [extern void *__libc_stack_end;],
+ [if (!__libc_stack_end) return 1;],
+ [rb_cv_stack_end_address="__libc_stack_end"])
+])
+if test $rb_cv_stack_end_address != no; then
+ AC_DEFINE_UNQUOTED(STACK_END_ADDRESS, $rb_cv_stack_end_address)
+fi
+
+# posix_memalign(memptr, alignment, size) implemented for OpenBSD 4.8 doesn't work if alignment > MALLOC_PAGESIZE.
+# [ruby-core:42158] https://bugs.ruby-lang.org/issues/5901
+# OpenBSD 5.2 fixed the problem. (src/lib/libc/stdlib/malloc.c:1.142)
+# MirOS #10semel has the problem but fixed in the repository. (src/lib/libc/stdlib/malloc.c:1.9)
+AS_CASE(["$target_os"],
+[openbsd*|mirbsd*], [
+ AC_CACHE_CHECK(for heap align log on openbsd, rb_cv_page_size_log,
+ [rb_cv_page_size_log=no
+ for page_log in 12 13; do
+ AC_TRY_RUN([
+#include <math.h>
+#include <unistd.h>
+
+int
+main() {
+ if ((int)log2((double)sysconf(_SC_PAGESIZE)) != $page_log) return 1;
+ return 0;
+}
+ ],
+ rb_cv_page_size_log="$page_log"; break)
+ done])
+ if test $rb_cv_page_size_log != no; then
+ AC_DEFINE_UNQUOTED(HEAP_ALIGN_LOG, $rb_cv_page_size_log)
+ else
+ AC_DEFINE_UNQUOTED(HEAP_ALIGN_LOG, 12)
+ fi
+])
dnl Checks for library functions.
AC_TYPE_GETGROUPS
AC_TYPE_SIGNAL
-AC_FUNC_ALLOCA
-AC_FUNC_VFORK
-AC_REPLACE_FUNCS(dup2 setenv memmove mkdir strerror strftime\
- strstr strtoul strdup strcasecmp crypt flock)
-AC_CHECK_FUNCS(fmod killpg random wait4 waitpid syscall getcwd\
- truncate chsize times utimes fcntl lockf setitimer\
- setruid seteuid setreuid setrgid setegid setregid\
- getgroups getpgid getpriority dlopen sigprocmask sigaction)
-if test "$ac_cv_func_strftime" = no; then
- AC_STRUCT_TIMEZONE
- AC_TRY_LINK([],
- [extern int daylight; int i = daylight;], AC_DEFINE(HAVE_DAYLIGHT))
+AS_CASE(["${target_cpu}-${target_os}:${target_archs}"],
+[powerpc-darwin*], [
+ AC_LIBSOURCES(alloca.c)
+ AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
+ AC_DEFINE(C_ALLOCA)
+ AC_DEFINE_UNQUOTED(alloca, alloca)
+ ],
+[universal-darwin*:*ppc*], [
+ AC_LIBSOURCES(alloca.c)
+ AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.${ac_objext}])
+ RUBY_DEFINE_IF([defined __powerpc__], C_ALLOCA, 1)
+ RUBY_DEFINE_IF([defined __powerpc__], alloca, alloca)
+ ],
+[
+ AC_FUNC_ALLOCA
+ ])
+if test "x$ALLOCA" = "x"; then
+ AC_CACHE_CHECK([for dynamic size alloca], rb_cv_dynamic_alloca, [
+ for chk in ok __chkstk; do
+ AC_TRY_LINK([
+ @%:@ifdef HAVE_ALLOCA_H
+ @%:@include <alloca.h>
+ @%:@endif
+ void $chk() {}
+ int dynamic_alloca_test;
+ int dynamic_alloca_result;],
+ [dynamic_alloca_result = alloca(dynamic_alloca_test) != 0;],
+ [rb_cv_dynamic_alloca=$chk; break])
+ done])
+ if test "x$rb_cv_dynamic_alloca" = "x__chkstk"; then
+ AC_DEFINE_UNQUOTED(RUBY_ALLOCA_CHKSTK, _$rb_cv_dynamic_alloca)
+ AS_CASE("$target_cpu",
+ [x64|x86_64], [
+ AC_SUBST([ALLOCA], [\${LIBOBJDIR}x86_64-chkstk.${ac_objext}])
+ ],)
+ fi
+fi
+AC_FUNC_MEMCMP
+
+# http://sources.redhat.com/ml/libc-hacker/2005-08/msg00008.html
+# Debian GNU/Linux Etch's libc6.1 2.3.6.ds1-13etch5 has this problem.
+# Debian GNU/Linux Lenny's libc6.1 2.7-10 has no problem.
+AC_CACHE_CHECK(for broken erfc of glibc-2.3.6 on IA64, rb_cv_broken_glibc_ia64_erfc,
+ [AC_TRY_RUN([
+#include <math.h>
+int
+main()
+{
+ erfc(10000.0);
+ return 0;
+}
+],
+ rb_cv_broken_glibc_ia64_erfc=no,
+ rb_cv_broken_glibc_ia64_erfc=yes,
+ rb_cv_broken_glibc_ia64_erfc=no)])
+AS_CASE([$rb_cv_broken_glibc_ia64_erfc],[yes],[ac_cv_func_erf=no])
+
+AS_CASE(["$target_os"],[freebsd*],[
+ AC_DEFINE(BROKEN_CLOSE)
+ AC_REPLACE_FUNCS(close)
+ ])
+AC_REPLACE_FUNCS(dup2 memmove strerror\
+ strchr strstr crypt flock\
+ isnan finite isinf hypot acosh erf tgamma lgamma_r cbrt \
+ strlcpy strlcat ffs setproctitle)
+
+# for missing/setproctitle.c
+AS_CASE(["$target_os"],
+[aix* | k*bsd*-gnu | kopensolaris*-gnu | linux* | darwin*], [AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)],
+[hpux*], [AC_DEFINE(SPT_TYPE,SPT_PSTAT) ],
+[])
+AC_CHECK_HEADERS(sys/pstat.h)
+
+
+AC_CACHE_CHECK(for signbit, rb_cv_have_signbit,
+ [AC_TRY_LINK([
+#include <math.h>
+], [int v = signbit(-0.0);],
+ rb_cv_have_signbit=yes,
+ rb_cv_have_signbit=no)])
+if test "$rb_cv_have_signbit" = yes; then
+ AC_DEFINE(HAVE_SIGNBIT)
+else
+ AC_LIBOBJ([signbit])
+fi
+
+AC_CHECK_FUNCS(__syscall)
+AC_CHECK_FUNCS(_longjmp) # used for AC_ARG_WITH(setjmp-type)
+AC_CHECK_FUNCS(_setjmp) # used for AC_ARG_WITH(setjmp-type)
+AC_CHECK_FUNCS(_setjmpex) # used for AC_ARG_WITH(setjmp-type)
+AC_CHECK_FUNCS(chroot)
+AC_CHECK_FUNCS(chsize)
+AC_CHECK_FUNCS(clock_gettime)
+AC_CHECK_FUNCS(cosh)
+AC_CHECK_FUNCS(daemon)
+AC_CHECK_FUNCS(dl_iterate_phdr)
+AC_CHECK_FUNCS(dlopen)
+AC_CHECK_FUNCS(dup)
+AC_CHECK_FUNCS(dup3)
+AC_CHECK_FUNCS(eaccess)
+AC_CHECK_FUNCS(endgrent)
+AC_CHECK_FUNCS(fchmod)
+AC_CHECK_FUNCS(fchown)
+AC_CHECK_FUNCS(fcntl)
+AC_CHECK_FUNCS(fdatasync)
+AC_CHECK_FUNCS(fmod)
+AC_CHECK_FUNCS(fork)
+AC_CHECK_FUNCS(fsync)
+AC_CHECK_FUNCS(ftruncate)
+AC_CHECK_FUNCS(ftruncate64) # used for Win32 platform
+AC_CHECK_FUNCS(getcwd)
+AC_CHECK_FUNCS(getgrnam_r)
+AC_CHECK_FUNCS(getgroups)
+AC_CHECK_FUNCS(getpgid)
+AC_CHECK_FUNCS(getpgrp)
+AC_CHECK_FUNCS(getpriority)
+AC_CHECK_FUNCS(getpwnam_r)
+AC_CHECK_FUNCS(getrlimit)
+AC_CHECK_FUNCS(getsid)
+AC_CHECK_FUNCS(gettimeofday) # for making ac_cv_func_gettimeofday
+AC_CHECK_FUNCS(gmtime_r)
+AC_CHECK_FUNCS(initgroups)
+AC_CHECK_FUNCS(ioctl)
+AC_CHECK_FUNCS(isfinite)
+AC_CHECK_FUNCS(issetugid)
+AC_CHECK_FUNCS(killpg)
+AC_CHECK_FUNCS(lchmod)
+AC_CHECK_FUNCS(lchown)
+AC_CHECK_FUNCS(link)
+AC_CHECK_FUNCS(llabs)
+AC_CHECK_FUNCS(lockf)
+AC_CHECK_FUNCS(log2)
+AC_CHECK_FUNCS(lstat)
+AC_CHECK_FUNCS(malloc_usable_size)
+AC_CHECK_FUNCS(malloc_size)
+AC_CHECK_FUNCS(mblen)
+AC_CHECK_FUNCS(memalign)
+AC_CHECK_FUNCS(memrchr)
+AC_CHECK_FUNCS(mktime)
+AC_CHECK_FUNCS(pipe2)
+AC_CHECK_FUNCS(poll)
+AC_CHECK_FUNCS(posix_fadvise)
+AC_CHECK_FUNCS(posix_memalign)
+AC_CHECK_FUNCS(ppoll)
+AC_CHECK_FUNCS(pread)
+AC_CHECK_FUNCS(readlink)
+AC_CHECK_FUNCS(round)
+AC_CHECK_FUNCS(seekdir)
+AC_CHECK_FUNCS(select_large_fdset)
+AC_CHECK_FUNCS(sendfile)
+AC_CHECK_FUNCS(setegid)
+AC_CHECK_FUNCS(setenv)
+AC_CHECK_FUNCS(seteuid)
+AC_CHECK_FUNCS(setgid)
+AC_CHECK_FUNCS(setgroups)
+AC_CHECK_FUNCS(setpgid)
+AC_CHECK_FUNCS(setpgrp)
+AC_CHECK_FUNCS(setregid)
+AC_CHECK_FUNCS(setresgid)
+AC_CHECK_FUNCS(setresuid)
+AC_CHECK_FUNCS(setreuid)
+AC_CHECK_FUNCS(setrgid)
+AC_CHECK_FUNCS(setrlimit)
+AC_CHECK_FUNCS(setruid)
+AC_CHECK_FUNCS(setsid)
+AC_CHECK_FUNCS(setuid)
+AC_CHECK_FUNCS(shutdown)
+AC_CHECK_FUNCS(sigaction)
+AC_CHECK_FUNCS(sigaltstack)
+AC_CHECK_FUNCS(sigprocmask)
+AC_CHECK_FUNCS(sinh)
+AC_CHECK_FUNCS(spawnv)
+AC_CHECK_FUNCS(symlink)
+AC_CHECK_FUNCS(syscall)
+AC_CHECK_FUNCS(sysconf)
+AC_CHECK_FUNCS(tanh)
+AC_CHECK_FUNCS(telldir)
+AC_CHECK_FUNCS(timegm)
+AC_CHECK_FUNCS(times)
+AC_CHECK_FUNCS(truncate)
+AC_CHECK_FUNCS(truncate64) # used for Win32
+AC_CHECK_FUNCS(unsetenv)
+AC_CHECK_FUNCS(utimensat)
+AC_CHECK_FUNCS(utimes)
+AC_CHECK_FUNCS(wait4)
+AC_CHECK_FUNCS(waitpid)
+
+AC_DEFUN([RUBY_CHECK_BUILTIN_FUNC], [dnl
+AC_CACHE_CHECK([for $1], AS_TR_SH(rb_cv_builtin_$1),
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([], [$2;])],
+ [AS_TR_SH(rb_cv_builtin_$1)=yes],
+ [AS_TR_SH(rb_cv_builtin_$1)=no])])
+if test "${AS_TR_SH(rb_cv_builtin_$1)}" != no; then
+ AC_DEFINE(AS_TR_CPP(HAVE_BUILTIN_$1))
+fi])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap16, [__builtin_bswap16(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap32, [__builtin_bswap32(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_bswap64, [__builtin_bswap64(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_clz, [__builtin_clz(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_clzl, [__builtin_clzl(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_clzll, [__builtin_clzll(0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_choose_expr, [__builtin_choose_expr(0, 0, 0)])
+RUBY_CHECK_BUILTIN_FUNC(__builtin_types_compatible_p, [__builtin_types_compatible_p(int, int)])
+
+# Some platform need -lrt for clock_gettime, but the other don't.
+if test x"$ac_cv_func_clock_gettime" != xyes; then
+ # glibc 2.17 moves clock_* functions from librt to the main C library.
+ # http://sourceware.org/ml/libc-announce/2012/msg00001.html
+ AC_CHECK_LIB(rt, clock_gettime)
+ if test x"$ac_cv_lib_rt_clock_gettime" = xyes; then
+ AC_DEFINE(HAVE_CLOCK_GETTIME, 1)
+ fi
+fi
+AC_CHECK_FUNCS(clock_getres) # clock_getres should be tested after clock_gettime test including librt test.
+
+AC_CACHE_CHECK(for unsetenv returns a value, rb_cv_unsetenv_return_value,
+ [AC_TRY_COMPILE([
+#include <stdlib.h>
+], [int v = unsetenv("foo");],
+ rb_cv_unsetenv_return_value=yes,
+ rb_cv_unsetenv_return_value=no)])
+if test "$rb_cv_unsetenv_return_value" = no; then
+ AC_DEFINE(VOID_UNSETENV)
+fi
+
+# used for AC_ARG_WITH(setjmp-type)
+AC_CACHE_CHECK(for sigsetjmp as a macro or function, ac_cv_func_sigsetjmp,
+ [AC_TRY_COMPILE([
+#include <setjmp.h>
+], [sigjmp_buf env; sigsetjmp(env,1);],
+ ac_cv_func_sigsetjmp=yes,
+ ac_cv_func_sigsetjmp=no)])
+
+AC_DEFUN(RUBY_CHECK_BUILTIN_SETJMP, [
+if test x"${ac_cv_func___builtin_setjmp}" = xyes; then
+ unset ac_cv_func___builtin_setjmp
+fi
+AC_CACHE_CHECK(for __builtin_setjmp, ac_cv_func___builtin_setjmp,
+ [
+ ac_cv_func___builtin_setjmp=no
+ for cast in "" "(void **)"; do
+ RUBY_WERROR_FLAG(
+ [AC_TRY_LINK([@%:@include <setjmp.h>
+ @%:@include <stdio.h>
+ jmp_buf jb;
+ void t(void) {__builtin_longjmp($cast jb, 1);}
+ int jump(void) {(void)(__builtin_setjmp($cast jb) ? 1 : 0); return 0;}],
+ [
+ void (*volatile f)(void) = t;
+ if (!jump()) printf("%d\n", f != 0);
+ ],
+ [ac_cv_func___builtin_setjmp="yes with cast ($cast)"])
+ ])
+ test "$ac_cv_func___builtin_setjmp" = no || break
+ done])
+])
+
+# we don't use _setjmp if _longjmp doesn't exist.
+test x$ac_cv_func__longjmp = xno && ac_cv_func__setjmp=no
+
+AC_DEFUN(RUBY_SETJMP_TYPE, [
+RUBY_CHECK_BUILTIN_SETJMP
+AC_MSG_CHECKING(for setjmp type)
+setjmp_suffix=
+AC_ARG_WITH(setjmp-type,
+ AS_HELP_STRING([--with-setjmp-type], [select setjmp type]),
+ [
+ AS_CASE([$withval],
+ [__builtin_setjmp], [setjmp=__builtin_setjmp],
+ [_setjmp], [ setjmp_prefix=_],
+ [sigsetjmp], [ setjmp_prefix=sig],
+ [setjmp], [ setjmp_prefix=],
+ [setjmpex], [ setjmp_prefix= setjmp_suffix=ex],
+ [''], [ unset setjmp_prefix],
+ [ AC_MSG_ERROR(invalid setjmp type: $withval)])], [unset setjmp_prefix])
+setjmp_cast=
+if test ${setjmp_prefix+set}; then
+ if test "${setjmp_prefix}" && eval test '$ac_cv_func_'${setjmp_prefix}setjmp${setjmp_suffix} = no; then
+ AC_MSG_ERROR(${setjmp_prefix}setjmp${setjmp_suffix} is not available)
+ fi
+elif { AS_CASE("$ac_cv_func___builtin_setjmp", [yes*], [true], [false]); }; then
+ setjmp_cast=`expr "$ac_cv_func___builtin_setjmp" : "yes with cast (\(.*\))"`
+ setjmp_prefix=__builtin_
+ setjmp_suffix=
+elif test "$ac_cv_header_setjmpex_h:$ac_cv_func__setjmpex" = yes:yes; then
+ setjmp_prefix=
+ setjmp_suffix=ex
+elif test "$ac_cv_func__setjmp" = yes; then
+ setjmp_prefix=_
+ setjmp_suffix=
+elif test "$ac_cv_func_sigsetjmp" = yes; then
+ AS_CASE([$target_os],[solaris*|cygwin*],[setjmp_prefix=],[setjmp_prefix=sig])
+ setjmp_suffix=
+else
+ setjmp_prefix=
+ setjmp_suffix=
+fi
+if test x$setjmp_prefix = xsig; then
+ setjmp_sigmask=yes
+else
+ unset setjmp_sigmask
+fi
+AC_MSG_RESULT(${setjmp_prefix}setjmp${setjmp_suffix}${setjmp_cast:+\($setjmp_cast\)})
+AC_DEFINE_UNQUOTED([RUBY_SETJMP(env)], [${setjmp_prefix}setjmp${setjmp_suffix}($setjmp_cast(env)${setjmp_sigmask+,0})])
+AC_DEFINE_UNQUOTED([RUBY_LONGJMP(env,val)], [${setjmp_prefix}longjmp($setjmp_cast(env),val)])
+AC_DEFINE_UNQUOTED(RUBY_JMP_BUF, ${setjmp_sigmask+${setjmp_prefix}}jmp_buf)
+])
+# End of setjmp check.
+
+AC_ARG_ENABLE(setreuid,
+ AS_HELP_STRING([--enable-setreuid], [use setreuid()/setregid() according to need even if obsolete]),
+ [use_setreuid=$enableval])
+if test "$use_setreuid" = yes; then
+ AC_DEFINE(USE_SETREUID)
+ AC_DEFINE(USE_SETREGID)
+fi
+AC_STRUCT_TIMEZONE
+AC_CACHE_CHECK(for struct tm.tm_gmtoff, rb_cv_member_struct_tm_tm_gmtoff,
+ [AC_TRY_COMPILE([@%:@include <time.h>],
+ [struct tm t; t.tm_gmtoff = 3600;],
+ [rb_cv_member_struct_tm_tm_gmtoff=yes],
+ [rb_cv_member_struct_tm_tm_gmtoff=no])])
+if test "$rb_cv_member_struct_tm_tm_gmtoff" = yes; then
+ AC_DEFINE(HAVE_STRUCT_TM_TM_GMTOFF)
+fi
+AC_CACHE_CHECK(for external int daylight, rb_cv_have_daylight,
+ [AC_TRY_LINK([#include <time.h>
+ int i;],
+ [i = daylight;],
+ rb_cv_have_daylight=yes,
+ rb_cv_have_daylight=no)])
+if test "$rb_cv_have_daylight" = yes; then
+ AC_DEFINE(HAVE_DAYLIGHT)
+fi
+AC_DEFUN([RUBY_CHECK_VARTYPE], [dnl
+AC_CACHE_CHECK([for external $1], AS_TR_SH(rb_cv_var_$1),
+ [AS_TR_SH(rb_cv_var_$1)=no
+ AC_TRY_COMPILE([
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 1
+#endif
+$2
+;
+const volatile void *volatile t;],
+ [t = &(&$1)[0];],
+ [for t in $3; do
+ AC_TRY_COMPILE([
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 1
+#endif
+$2
+;
+extern $t $1;
+const volatile void *volatile t;],
+ [t = &(&$1)[0];],
+ [AS_TR_SH(rb_cv_var_$1)=$t; break])
+ done])])
+if test "${AS_TR_SH(rb_cv_var_$1)}" != no; then
+ AC_DEFINE(AS_TR_CPP(HAVE_VAR_$1))
+ AC_DEFINE_UNQUOTED(AS_TR_CPP(TYPEOF_VAR_$1), ${AS_TR_SH(rb_cv_var_$1)})
+fi])
+RUBY_CHECK_VARTYPE(timezone, [@%:@include <time.h>], [long int])
+RUBY_CHECK_VARTYPE(altzone, [@%:@include <time.h>], [long int])
+AC_CHECK_FUNCS(timezone)
+if test "$ac_cv_func_timezone" = yes; then
+ AC_CACHE_CHECK([whether timezone requires zero arguments], rb_cv_func_timezone_void,
+ [AC_TRY_COMPILE([@%:@include <time.h>],
+ [(void)timezone(0, 0);],
+ [rb_cv_func_timezone_void=no],
+ [rb_cv_func_timezone_void=yes])]
+ )
+ if test $rb_cv_func_timezone_void = yes; then
+ AC_DEFINE(TIMEZONE_VOID)
+ fi
+fi
+
+AC_CACHE_CHECK(for negative time_t for gmtime(3), rb_cv_negative_time_t,
+ [AC_TRY_RUN([
+#include <stdlib.h>
+#include <time.h>
+
+void
+check(tm, y, m, d, h, s)
+ struct tm *tm;
+ int y, m, d, h, s;
+{
+ if (!tm ||
+ tm->tm_year != y ||
+ tm->tm_mon != m-1 ||
+ tm->tm_mday != d ||
+ tm->tm_hour != h ||
+ tm->tm_sec != s) {
+ exit(1);
+ }
+}
+
+int
+main()
+{
+ time_t t = -1;
+ struct tm *tm;
+
+ check(gmtime(&t), 69, 12, 31, 23, 59);
+ t = ~(time_t)0 << 31;
+ check(gmtime(&t), 1, 12, 13, 20, 52);
+ return 0;
+}
+],
+ rb_cv_negative_time_t=yes,
+ rb_cv_negative_time_t=no,
+ rb_cv_negative_time_t=yes)])
+if test "$rb_cv_negative_time_t" = yes; then
+ AC_DEFINE(NEGATIVE_TIME_T)
+fi
+
+# [ruby-dev:40910] overflow of time on FreeBSD
+# http://www.freebsd.org/cgi/query-pr.cgi?pr=145341
+AC_CACHE_CHECK(for localtime(3) overflow correctly, rb_cv_localtime_overflow,
+ [AC_TRY_RUN([
+#include <stdlib.h>
+#include <time.h>
+
+void
+check(time_t t1)
+{
+ struct tm *tm;
+ time_t t2;
+ tm = localtime(&t1);
+ if (!tm)
+ return; /* overflow detected. ok. */
+ t2 = mktime(tm);
+ if (t1 == t2)
+ return; /* round-trip. ok. */
+ exit(1);
+}
+
+int
+main()
+{
+ time_t t;
+ if (~(time_t)0 <= 0) {
+ t = (((time_t)1) << (sizeof(time_t) * 8 - 2));
+ t |= t - 1;
+ }
+ else {
+ t = ~(time_t)0;
+ }
+ check(t);
+ return 0;
+}
+],
+ rb_cv_localtime_overflow=yes,
+ rb_cv_localtime_overflow=no,
+ rb_cv_localtime_overflow=no)])
+if test "$rb_cv_localtime_overflow" = no; then
+ AC_DEFINE(LOCALTIME_OVERFLOW_PROBLEM)
fi
if test "$ac_cv_func_sigprocmask" = yes && test "$ac_cv_func_sigaction" = yes; then
AC_DEFINE(POSIX_SIGNAL)
else
- AC_MSG_CHECKING(for BSD signal semantics)
- AC_CACHE_VAL(rb_cv_bsd_signal,
- [AC_TRY_RUN([
+ AC_CHECK_FUNCS(sigsetmask)
+ AC_CACHE_CHECK(for BSD signal semantics, rb_cv_bsd_signal,
+ [AC_TRY_RUN([
#include <stdio.h>
#include <signal.h>
-void sig_handler(dummy)
+void
+sig_handler(dummy)
int dummy;
{
}
-int main(argc, argv)
- int argc;
- char ** argv;
+int
+main()
{
signal(SIGINT, sig_handler);
kill(getpid(), SIGINT);
@@ -104,148 +2274,675 @@ int main(argc, argv)
],
rb_cv_bsd_signal=yes,
rb_cv_bsd_signal=no,
- [:])])
- AC_MSG_RESULT($rb_cv_bsd_signal)
+ rb_cv_bsd_signal=$ac_cv_func_sigsetmask)])
if test "$rb_cv_bsd_signal" = yes; then
AC_DEFINE(BSD_SIGNAL)
fi
fi
-AC_C_BIGENDIAN
-AC_CHAR_UNSIGNED
-
-AC_MSG_CHECKING([count field in FILE structures])
-AC_CACHE_VAL(rb_cv_fcnt,
-[AC_TRY_COMPILE([#include <stdio.h>],
- [FILE *f = stdin; f->_cnt = 0;], rb_cv_fcnt="_cnt", )
-if test "$rb_cv_fcnt" = ""; then
- AC_TRY_COMPILE([#include <stdio.h>],
- [FILE *f = stdin; f->__cnt = 0;], rb_cv_fcnt="__cnt", )
-fi
-if test "$rb_cv_fcnt" = ""; then
- AC_TRY_COMPILE([#include <stdio.h>],
- [FILE *f = stdin; f->_r = 0;], rb_cv_fcnt="_r", )
-fi
-if test "$rb_cv_fcnt" = ""; then
- AC_TRY_COMPILE([#include <stdio.h>],
- [FILE *f = stdin; f->readCount = 0;],
- rb_cv_fcnt="readCount", rb_cv_fcnt="not found")
-fi])
-if test "$rb_cv_fcnt" = "not found"; then
- AC_MSG_RESULT([not found(OK if using GNU libc)])
+if test "$ac_cv_func_getpgid" = no; then
+ # AC_FUNC_GETPGRP fails when cross-compiling with old autoconf.
+ # autoconf is changed between 2.52d and 2.52f?
+ # http://lists.gnu.org/archive/html/bug-gnu-utils/2001-09/msg00181.html
+ # "autoconf cleanup for AC_FUNC_GETPGRP and GETPGRP_VOID"
+AC_FUNC_GETPGRP
+fi
+if test "$ac_cv_func_setpgid:$ac_cv_func_setpgrp" = no:yes; then
+ # AC_FUNC_SETPGRP fails when cross-compiling. (until autoconf 2.69?)
+ # https://lists.gnu.org/archive/html/bug-autoconf/2013-02/msg00002.html
+ # "AC_FUNC_SETPGRP fails to work properly when cross-compiling"
+AC_FUNC_SETPGRP
+fi
+
+if test x"$target_cpu" = xia64; then
+ AC_LIBOBJ([ia64])
+ AC_CACHE_CHECK(for __libc_ia64_register_backing_store_base,
+ rb_cv___libc_ia64_register_backing_store_base,
+ [rb_cv___libc_ia64_register_backing_store_base=no
+ AC_TRY_LINK(
+ [extern unsigned long __libc_ia64_register_backing_store_base;],
+ [unsigned long p = __libc_ia64_register_backing_store_base;
+ printf("%ld\n", p);],
+ [rb_cv___libc_ia64_register_backing_store_base=yes])])
+ if test $rb_cv___libc_ia64_register_backing_store_base = yes; then
+ AC_DEFINE(HAVE___LIBC_IA64_REGISTER_BACKING_STORE_BASE)
+ fi
+fi
+
+AC_CACHE_CHECK(whether right shift preserve sign bit, rb_cv_rshift_sign,
+ [AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([], [(-1==(-1>>1))])],
+ rb_cv_rshift_sign=yes,
+ rb_cv_rshift_sign=no)])
+if test "$rb_cv_rshift_sign" = yes; then
+ AC_DEFINE(RSHIFT(x,y), ((x)>>(int)(y)))
else
- AC_MSG_RESULT($rb_cv_fcnt)
- AC_DEFINE_UNQUOTED(FILE_COUNT, $rb_cv_fcnt)
-fi
-
-if test "$ac_cv_func_getpwent" = yes; then
- AC_MSG_CHECKING(struct passwd)
- AC_EGREP_HEADER(pw_change, pwd.h, AC_DEFINE(PW_CHANGE))
- AC_EGREP_HEADER(pw_quota, pwd.h, AC_DEFINE(PW_QUOTA))
- AC_EGREP_HEADER(pw_age, pwd.h, AC_DEFINE(PW_AGE))
- AC_EGREP_HEADER(pw_class, pwd.h, AC_DEFINE(PW_CLASS))
- AC_EGREP_HEADER(pw_comment, pwd.h, AC_DEFINE(PW_COMMENT))
- AC_EGREP_HEADER(pw_expire, pwd.h, AC_DEFINE(PW_EXPIRE))
- AC_MSG_RESULT(done)
-fi
-
-dnl wheather use dln_a_out ot not
-AC_ARG_WITH(dln-a-out, [--with-dln-a-out use dln_a_out if possible], [
- case $withval in
- yes) with_dln_a_out=yes;;
- *) with_dln_a_out=no;;
- esac], [with_dln_a_out=no])
-
-case "$host_os" in
- linux*)
- AC_MSG_CHECKING(whether ELF binaries are produced)
- AC_CACHE_VAL(rb_cv_linux_elf,
- [AC_TRY_RUN([
-/* Test for whether ELF binaries are produced */
-#include <fcntl.h>
+ AC_DEFINE(RSHIFT(x,y), (((x)<0) ? ~((~(x))>>(int)(y)) : (x)>>(int)(y)))
+fi
+
+# win32.c still use this. Don't remove it.
+test "$rb_cv_fcnt" = "not found" && rb_cv_fcnt="not found (OK if using GNU libc)"
+AC_CACHE_CHECK([read count field in FILE structures], rb_cv_fcnt,
+[rb_cv_fcnt="not found (OK if using GNU libc)"
+for fcnt in dnl
+ _cnt dnl
+ __cnt dnl
+ _r dnl
+ readCount dnl
+ _rcount dnl for emx0.9c
+; do
+ AC_TRY_COMPILE([#include <stdio.h>
+],
+ [FILE *f = stdin; f->$fcnt = 0;],
+ [rb_cv_fcnt="$fcnt"; break])
+done])
+AS_CASE("$rb_cv_fcnt",
+ ["not found"*], [rb_cv_fcnt="not found"],
+ [AC_DEFINE_UNQUOTED(FILE_COUNT, $rb_cv_fcnt)])
+
+# win32.c still use this. Don't remove it.
+AC_CACHE_CHECK([read buffer ptr field in FILE structures], rb_cv_frptr,
+[for frptr in dnl
+ _IO_read_ptr dnl
+ _ptr dnl
+ __ptr dnl
+ bufpos dnl
+ _p dnl
+ __bufpos dnl
+; do
+ AC_TRY_COMPILE([#include <stdio.h>
+],
+ [FILE *f = stdin; char buf[256]; f->$frptr = buf;],
+ rb_cv_frptr="$frptr"; break,
+ rb_cv_frptr="not found")
+done])
+if test "$rb_cv_frptr" != "not found"; then
+ AC_DEFINE_UNQUOTED(FILE_READPTR, $rb_cv_frptr)
+
+ if test "$rb_cv_fcnt" = "not found"; then
+ AC_CACHE_CHECK([read buffer end field in FILE structures], rb_cv_frend,
+ [for frend in dnl
+ _IO_read_end dnl
+ bufread dnl
+ __bufread dnl
+ ; do
+ AC_TRY_COMPILE([#include <stdio.h>
+ ],
+ [FILE *f = stdin; char buf[256]; f->$frend = buf;],
+ rb_cv_frend="$frend"; break,
+ rb_cv_frend="not found")
+ done])
+ if test "$rb_cv_frend" != "not found"; then
+ AC_DEFINE_UNQUOTED(FILE_READEND, $rb_cv_frend)
+ fi
+ fi
+fi
+
+if test x"$ac_cv_func_gettimeofday" != xyes; then
+ AC_MSG_ERROR(gettimeofday() must exist)
+fi
+
+RUBY_CHECK_SIZEOF([struct stat.st_ino], [long "long long"], [], [@%:@include <sys/stat.h>])
+
+if test "$ac_cv_func_sysconf" = yes; then
+ AC_DEFUN([RUBY_CHECK_SYSCONF], [dnl
+ AC_CACHE_CHECK([whether _SC_$1 is supported], rb_cv_have_sc_[]m4_tolower($1),
+ [AC_TRY_COMPILE([#include <unistd.h>
+ ],
+ [_SC_$1 >= 0],
+ rb_cv_have_sc_[]m4_tolower($1)=yes,
+ rb_cv_have_sc_[]m4_tolower($1)=no)
+ ])
+ if test "$rb_cv_have_sc_[]m4_tolower($1)" = yes; then
+ AC_DEFINE(HAVE__SC_$1)
+ fi
+ ])
+ RUBY_CHECK_SYSCONF(CLK_TCK)
+fi
+
+AC_DEFUN(RUBY_STACK_GROW_DIRECTION, [
+ AS_VAR_PUSHDEF([stack_grow_dir], [rb_cv_stack_grow_dir_$1])
+ AC_CACHE_CHECK(stack growing direction on $1, stack_grow_dir, [
+AS_CASE(["$1"],
+[m68*|x86*|x64|i?86|ia64|ppc*|sparc*|alpha*], [ $2=-1],
+[hppa*], [ $2=+1],
+[
+ AC_TRY_RUN([
+/* recurse to get rid of inlining */
+static int
+stack_growup_p(addr, n)
+ volatile int *addr, n;
+{
+ volatile int end;
+ if (n > 0)
+ return *addr = stack_growup_p(addr, n - 1);
+ else
+ return (&end > addr);
+}
+int main()
+{
+ int x;
+ return stack_growup_p(&x, 10);
+}
+], $2=-1, $2=+1, $2=0)
+ ])
+eval stack_grow_dir=\$$2])
+eval $2=\$stack_grow_dir
+AS_VAR_POPDEF([stack_grow_dir])])
+if test "${universal_binary-no}" = yes ; then
+ archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
+ save_CFLAGS="$CFLAGS" new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
+ save_LDFLAGS="$LDFLAGS" new_ldflags=`echo "$LDFLAGS" | sed "s|$archflagpat"'||'`
+ stack_dir=
+ for archs in ${universal_archnames}; do
+ archs=`echo $archs | sed 's/=.*//'`
+ CFLAGS="$new_cflags -arch $archs"
+ LDFLAGS="$new_ldflags -arch $archs"
+ RUBY_STACK_GROW_DIRECTION($archs, dir)
+ if test x$stack_dir = x; then
+ stack_dir=$dir
+ elif test x$stack_dir != x$dir; then
+ stack_dir=no
+ fi
+ done
+ CFLAGS="$save_CFLAGS" LDFLAGS="$save_LDFLAGS"
+ if test x$stack_dir = xno; then
+ for archs in ${universal_archnames}; do
+ archs=`echo $archs | sed 's/=.*//'`
+ eval dir=\$[rb_cv_stack_grow_dir_]AS_TR_SH([$archs])
+ RUBY_DEFINE_IF([defined __${archs}__], STACK_GROW_DIRECTION, $dir)
+ done
+ else
+ AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $stack_dir)
+ fi
+else
+ RUBY_STACK_GROW_DIRECTION($target_cpu, dir)
+ AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $dir)
+fi
+
+if test x"$enable_pthread" = xyes; then
+ for pthread_lib in thr pthread pthreads c c_r root; do
+ AC_CHECK_LIB($pthread_lib, pthread_kill,
+ rb_with_pthread=yes, rb_with_pthread=no)
+ if test "$rb_with_pthread" = "yes"; then break; fi
+ done
+ if test x"$rb_with_pthread" = xyes; then
+ AC_DEFINE(_REENTRANT)
+ AC_DEFINE(_THREAD_SAFE)
+ AC_DEFINE(HAVE_LIBPTHREAD)
+ AC_CHECK_HEADERS(pthread_np.h, [], [], [@%:@include <pthread.h>])
+ AS_CASE([$pthread_lib],
+ [c], [],
+ [root], [],
+ [c_r], [MAINLIBS="-pthread $MAINLIBS"],
+ [AS_CASE(["$target_os"],
+ [openbsd*|mirbsd*], [LIBS="-pthread $LIBS"],
+ [LIBS="-l$pthread_lib $LIBS"])])
+ else
+ AC_MSG_WARN("Don't know how to find pthread library on your system -- thread support disabled")
+ fi
+ AC_CHECK_FUNCS(sched_yield pthread_attr_setinheritsched \
+ pthread_getattr_np pthread_attr_get_np pthread_attr_getstack\
+ pthread_get_stackaddr_np pthread_get_stacksize_np \
+ thr_stksegment pthread_stackseg_np pthread_getthrds_np \
+ pthread_cond_init pthread_condattr_setclock pthread_condattr_init \
+ pthread_sigmask pthread_setname_np)
+ if test "${host_os}" = "nacl"; then
+ ac_cv_func_pthread_attr_init=no
+ else
+ AC_CHECK_FUNCS(pthread_attr_init)
+ fi
+ if test "$ac_cv_func_pthread_setname_np" = yes; then
+ AC_CACHE_CHECK([arguments of pthread_setname_np], [rb_cv_func_pthread_setname_np_arguments],
+ [rb_cv_func_pthread_setname_np_arguments=
+ # Linux,AIX, (pthread_self(), name)
+ # NetBSD (pthread_self(), name, \"%s\")
+ # Darwin (name)
+ for mac in \
+ "(pthread_self(), name)" \
+ "(pthread_self(), name, \"%s\")" \
+ "(name)" \
+ ; do
+ AC_TRY_COMPILE([
+ @%:@include <pthread.h>
+ @%:@ifdef HAVE_PTHREAD_NP_H
+ @%:@include <pthread_np.h>
+ @%:@endif
+ @%:@define SET_THREAD_NAME(name) pthread_setname_np${mac}
+ ],
+ [if (SET_THREAD_NAME("conftest")) return 1;],
+ [rb_cv_func_pthread_setname_np_arguments="${mac}"
+ break])
+ done
+ ]
+ )
+ if test -n "${rb_cv_func_pthread_setname_np_arguments}"; then
+ AC_DEFINE_UNQUOTED(SET_THREAD_NAME(name), pthread_setname_np${rb_cv_func_pthread_setname_np_arguments})
+ else
+ AC_DEFINE_UNQUOTED(SET_THREAD_NAME(name), (void)0)
+ fi
+ fi
+fi
+if test x"$ac_cv_header_ucontext_h" = xyes; then
+ if test x"$rb_with_pthread" = xyes; then
+ AC_CHECK_FUNCS(getcontext setcontext)
+ fi
+fi
+
+if test "$ac_cv_func_fork" = "yes" -a "$rb_with_pthread" = "yes"; then
+ AC_CACHE_CHECK([if fork works with pthread], rb_cv_fork_with_pthread,
+ [AC_TRY_RUN([
#include <stdlib.h>
-main() {
- char buffer[4];
- int i=open("conftest",O_RDONLY);
- if(i==-1)
- exit(1); /* fail */
- if(read(i,&buffer[0],4)<4)
- exit(1); /* fail */
- if(buffer[0] != 127 || buffer[1] != 'E' ||
- buffer[2] != 'L' || buffer[3] != 'F')
- exit(1); /* fail */
- exit(0); /* succeed (yes, it's ELF) */
+#include <unistd.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <signal.h>
+#ifndef EXIT_SUCCESS
+#define EXIT_SUCCESS 0
+#endif
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif
+
+void *
+thread_func(void *dmy)
+{
+ return dmy;
}
-],
- rb_cv_linux_elf=yes,
- rb_cv_linux_elf=no,
- [:])])
- AC_MSG_RESULT($rb_cv_linux_elf)
- if test "$rb_cv_linux_elf" = no; then
- with_dln_a_out=yes
- else
- LDFLAGS="-rdynamic"
- fi;;
-esac
+
+int
+use_threads(void)
+{
+ pthread_t tid;
+ if (pthread_create(&tid, 0, thread_func, 0) != 0) {
+ return -1;
+ }
+ if (pthread_join(tid, 0) != 0) {
+ return -1;
+ }
+ return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+ pid_t pid;
+ if (use_threads()) return EXIT_FAILURE;
+ pid = fork();
+
+ if (pid) {
+ int loc;
+ sleep(1);
+ if (waitpid(pid, &loc, WNOHANG) == 0) {
+ kill(pid, SIGKILL);
+ return EXIT_FAILURE;
+ }
+ if (!WIFEXITED(loc) || WEXITSTATUS(loc) != EXIT_SUCCESS)
+ return EXIT_FAILURE;
+ }
+ else {
+ if (use_threads()) return EXIT_FAILURE;
+ }
+
+ return EXIT_SUCCESS;
+}],
+ rb_cv_fork_with_pthread=yes,
+ rb_cv_fork_with_pthread=no,
+ rb_cv_fork_with_pthread=yes)])
+ test x$rb_cv_fork_with_pthread = xyes || AC_DEFINE(CANNOT_FORK_WITH_PTHREAD)
+fi
+
+
+}
+{ # runtime section
+
+dnl wheather use dln_a_out or not
+AC_ARG_WITH(dln-a-out,
+ AS_HELP_STRING([--with-dln-a-out], [use dln_a_out if possible]),
+ [
+ AS_CASE([$withval],
+ [yes], [
+ if test "$enable_shared" = yes; then
+ AC_MSG_ERROR(dln_a_out can not make shared library)
+ fi
+ with_dln_a_out=yes],
+ [
+ with_dln_a_out=no])], [with_dln_a_out=no])
+
+AC_CACHE_CHECK(whether ELF binaries are produced, rb_cv_binary_elf,
+[AC_TRY_LINK([],[], [
+AS_CASE(["`head -1 conftest$EXEEXT | cat -e`"],
+['^?ELF'*], [rb_cv_binary_elf=yes], [rb_cv_binary_elf=no])],
+rb_cv_binary_elf=no)])
+
+if test "$rb_cv_binary_elf" = yes; then
+ AC_DEFINE(USE_ELF)
+ if test "$with_dln_a_out" = yes; then
+ AC_MSG_ERROR(dln_a_out does not work with ELF)
+ fi
+ AC_CHECK_HEADERS([elf.h elf_abi.h])
+ if test $ac_cv_header_elf_h = yes -o $ac_cv_header_elf_abi_h = yes; then
+ AC_LIBOBJ([addr2line])
+ fi
+fi
+
+AS_CASE(["$target_os"],
+[linux* | gnu* | k*bsd*-gnu | bsdi* | kopensolaris*-gnu | nacl], [
+ if test "$rb_cv_binary_elf" = no; then
+ with_dln_a_out=yes
+ else
+ LDFLAGS="$LDFLAGS -rdynamic"
+ fi])
+LIBEXT=a
AC_SUBST(DLDFLAGS)dnl
+AC_SUBST(ARCH_FLAG)dnl
AC_SUBST(STATIC)dnl
AC_SUBST(CCDLFLAGS)dnl
AC_SUBST(LDSHARED)dnl
+AC_SUBST(LDSHAREDXX)dnl
AC_SUBST(DLEXT)dnl
+AC_SUBST(DLEXT2)dnl
+AC_SUBST(LIBEXT)dnl
STATIC=
+: ${PATHFLAG=''}
if test "$with_dln_a_out" != yes; then
rb_cv_dlopen=unknown
AC_MSG_CHECKING(whether OS depend dynamic link works)
if test "$GCC" = yes; then
- CCDLFLAGS=-fpic
+ AS_CASE(["$target_os"],
+ [darwin*], [
+ # The -fno-common is needed if we wish to embed the Ruby interpreter
+ # into a plugin module of some project (as opposed to embedding it
+ # within the project's application). The -I/usr/local/include is
+ # needed because CPP as discovered by configure (cc -E -traditional)
+ # fails to consult /usr/local/include by default. This causes
+ # mkmf.rb's have_header() to fail if the desired resource happens to be
+ # installed in the /usr/local tree.
+ RUBY_APPEND_OPTION(CCDLFLAGS, -fno-common)],
+ [bsdi*|beos*|haiku*|cygwin*|mingw*|aix*|interix*], [ ],
+ [
+ RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC)])
else
- case "$host_os" in
- hpux*) CCDLFLAGS='+z';;
- solaris*|irix*) CCDLFLAGS='-K pic' ;;
- sunos*) CCDLFLAGS='-pic' ;;
- svr4*|esix*) CCDLFLAGS='-Kpic' ;;
- *) CCDLFLAGS='' ;;
- esac
+ AS_CASE(["$target_os"],
+ [hpux*], [CCDLFLAGS="$CCDLFLAGS +Z"],
+ [solaris*|irix*], [CCDLFLAGS="$CCDLFLAGS -KPIC"],
+ [sunos*], [CCDLFLAGS="$CCDLFLAGS -PIC"],
+ [esix*|uxpds*], [CCDLFLAGS="$CCDLFLAGS -KPIC"],
+ [: ${CCDLFLAGS=""}])
+ fi
+
+
+ AC_ARG_ENABLE(rpath,
+ AS_HELP_STRING([--enable-rpath], [embed run path into extension libraries.
+ enabled by default on ELF platforms]),
+ [enable_rpath=$enableval], [enable_rpath="$rb_cv_binary_elf"])
+ if test "$enable_rpath" = yes; then
+ RPATHFLAG=" ${linker_flag}-R%1\$-s"
fi
- case "$host_os" in
- hpux*) DLDFLAGS="-E"
- LDSHARED='ld -b'
- LDFLAGS="-Wl,-E"
- rb_cv_dlopen=yes;;
- solaris*) LDSHARED='ld -G'
- rb_cv_dlopen=yes;;
- sunos*) LDSHARED='ld -assert nodefinitions'
- rb_cv_dlopen=yes;;
- svr4*|esix*) LDSHARED="ld -G"
- rb_cv_dlopen=yes ;;
- linux*) LDSHARED="gcc -shared"
- rb_cv_dlopen=yes ;;
- freebsd*) LDSHARED="ld -Bshareable"
- rb_cv_dlopen=yes ;;
- *) LDSHARED='ld' ;;
- esac
+ AS_CASE(["$target_os"],
+ [hpux*], [ DLDFLAGS="$DLDFLAGS -E"
+ : ${LDSHARED='$(LD) -b'}
+ XLDFLAGS="$XLDFLAGS -Wl,-E"
+ : ${LIBPATHENV=SHLIB_PATH}
+ if test "$rb_cv_prog_gnu_ld" = no; then
+ RPATHFLAG=' +b %1$-s'
+ fi
+ rb_cv_dlopen=yes],
+ [solaris*], [ if test "$GCC" = yes; then
+ : ${LDSHARED='$(CC) -shared'}
+ if test "$rb_cv_prog_gnu_ld" = yes; then
+ LDFLAGS="$LDFLAGS -Wl,-E"
+ fi
+ else
+ : ${LDSHARED='$(CC) -G'}
+ fi
+ if test "$ac_cv_sizeof_voidp" = 8; then
+ : ${LIBPATHENV=LD_LIBRARY_PATH_64}
+ fi
+ rb_cv_dlopen=yes],
+ [sunos*], [ : ${LDSHARED='$(LD) -assert nodefinitions'}
+ rb_cv_dlopen=yes],
+ [irix*], [ : ${LDSHARED='$(LD) -shared'}
+ rb_cv_dlopen=yes],
+ [sysv4*], [ : ${LDSHARED='$(LD) -G'}
+ rb_cv_dlopen=yes],
+ [nto-qnx*], [ : ${LDSHARED='$(CC) -shared'}
+ rb_cv_dlopen=yes],
+ [esix*|uxpds*], [ : ${LDSHARED='$(LD) -G'}
+ rb_cv_dlopen=yes],
+ [osf*], [ : ${LDSHARED='$(LD) -shared -expect_unresolved "*"'}
+ rb_cv_dlopen=yes],
+ [bsdi3*], [ AS_CASE(["$CC"],
+ [*shlicc*], [ : ${LDSHARED='$(CC) -r'}
+ rb_cv_dlopen=yes])],
+ [linux* | gnu* | k*bsd*-gnu | netbsd* | bsdi* | kopensolaris*-gnu], [
+ : ${LDSHARED='$(CC) -shared'}
+ if test "$rb_cv_binary_elf" = yes; then
+ LDFLAGS="$LDFLAGS -Wl,-export-dynamic"
+ fi
+ rb_cv_dlopen=yes],
+ [interix*], [ : ${LDSHARED='$(CC) -shared'}
+ XLDFLAGS="$XLDFLAGS -Wl,-E"
+ LIBPATHFLAG=" -L%1\$-s"
+ rb_cv_dlopen=yes],
+ [freebsd*|dragonfly*], [
+ : ${LDSHARED='$(CC) -shared'}
+ if test "$rb_cv_binary_elf" = yes; then
+ LDFLAGS="$LDFLAGS -rdynamic"
+ DLDFLAGS="$DLDFLAGS "'-Wl,-soname,$@'
+ else
+ test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED='$(LD) -Bshareable'
+ fi
+ rb_cv_dlopen=yes],
+ [openbsd*|mirbsd*], [ : ${LDSHARED='$(CC) -shared ${CCDLFLAGS}'}
+ if test "$rb_cv_binary_elf" = yes; then
+ LDFLAGS="$LDFLAGS -Wl,-E"
+ fi
+ rb_cv_dlopen=yes],
+ [darwin*], [ : ${LDSHARED='$(CC) -dynamic -bundle'}
+ RUBY_APPEND_OPTIONS(DLDFLAGS, [ \
+ "${linker_flag}-undefined${linker_flag:+,}dynamic_lookup" \
+ "${linker_flag}-multiply_defined${linker_flag:+,}suppress" \
+ ])
+ : ${LDFLAGS=""}
+ : ${LIBPATHENV=DYLD_LIBRARY_PATH}
+ # /usr/local/include is always searched for
+ # some reason, but /usr/local/lib is not.
+ hdr=`find /usr/local/include -name \*.h -type f | sed 's:^/usr/local/include/::;q'`
+ if test -n "$hdr" && $CC -E -include "$hdr" -xc - </dev/null 2>/dev/null | fgrep -q "$hdr"; then
+ $CC -print-search-dirs | grep -q '^libraries:.*:/usr/local/lib/*' ||
+ echo " $LDFLAGS " | grep -q ' -L */usr/local/lib/* ' ||
+ LDFLAGS="${LDFLAGS:+$LDFLAGS }-L/usr/local/lib"
+ fi
+ rb_cv_dlopen=yes],
+ [aix*], [ : ${LDSHARED='$(CC)'}
+ LDSHARED="$LDSHARED ${linker_flag}-G"
+ EXTDLDFLAGS='-e$(TARGET_ENTRY)'
+ XLDFLAGS="${linker_flag}"'-bE:$(ARCHFILE)'" ${linker_flag}-brtl"
+ XLDFLAGS="$XLDFLAGS ${linker_flag}-blibpath:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}"
+ : ${ARCHFILE="ruby.imp"}
+ TRY_LINK='$(CC) $(LDFLAGS) -oconftest $(INCFLAGS) -I$(hdrdir) $(CPPFLAGS)'
+ TRY_LINK="$TRY_LINK"' $(CFLAGS) $(src) $(LIBPATH) $(LOCAL_LIBS) $(LIBS)'
+ : ${LIBPATHENV=LIBPATH}
+ RPATHFLAG=" ${linker_flag}-blibpath:%1\$-s:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}"
+ rb_cv_dlopen=yes],
+ [beos*], [ AS_CASE(["$target_cpu"],
+ [powerpc*], [
+ : ${LDSHARED='$(LD) -xms'}
+ EXTDLDFLAGS='-export $(TARGET_ENTRY)'
+ DLDFLAGS="$DLDFLAGS -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o"
+ LDFLAGS="$LDFLAGS -L/boot/home/config/lib -lbe -lroot"
+ ],
+ [i586*], [
+ : ${LDSHARED='$(LD) -shared'}
+ DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -L/boot/home/config/lib \$(topdir)/_APP_ -lroot"
+ LDFLAGS="$LDFLAGS -L/boot/develop/lib/x86 -L/boot/home/config/lib -lroot"
+ ])
+ : ${LIBPATHENV=LIBRARY_PATH}
+ rb_cv_dlopen=yes],
+ [haiku*], [ AS_CASE(["$target_cpu"],
+ [powerpc*], [
+ : ${LDSHARED='$(LD) -xms'}
+ EXTDLDFLAGS='-export $(TARGET_ENTRY)'
+ DLDFLAGS="$DLDFLAGS -lroot glue-noinit.a init_term_dyn.o start_dyn.o"
+ ],
+ [i586*], [
+ : ${LDSHARED='$(CC) -shared'}
+ ])
+ : ${LIBPATHENV=LIBRARY_PATH}
+ rb_cv_dlopen=yes ],
+ [nto-qnx*], [ DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
+ : ${LDSHARED='$(LD) -Bshareable -x'}
+ LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
+ rb_cv_dlopen=yes],
+ [cygwin*|mingw*], [
+ : ${LDSHARED='$(CC) -shared $(if $(filter-out -g -g0,$(debugflags)),,-s)'}
+ XLDFLAGS="$XLDFLAGS -Wl,--stack,0x00200000,--enable-auto-import"
+ DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import"
+ : ${LIBPATHENV=""}
+ rb_cv_dlopen=yes],
+ [hiuxmpp], [ : ${LDSHARED='$(LD) -r'}],
+ [atheos*], [ : ${LDSHARED='$(CC) -shared'}
+ rb_cv_dlopen=yes],
+ [os2-emx*], [ LDFLAGS="$LDFLAGS -Zomf"
+ ],
+ [nacl], [ LDSHARED='$(CC) -shared' ],
+ [ : ${LDSHARED='$(LD)'}])
AC_MSG_RESULT($rb_cv_dlopen)
fi
+if test "${LDSHAREDXX}" = ""; then
+ AS_CASE(["${LDSHARED}"],
+ [*'$(CC)'*], [
+ LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\$(CC)/$(CXX)/'`
+ ],
+ [*'${CC}'*], [
+ LDSHAREDXX=`echo "${LDSHARED}" | sed 's/\${CC}/${CXX}/'`
+ ],
+ [*$CC*], [
+ LDSHAREDXX=`echo "${LDSHARED}" | sed "s|$CC|$CXX|"`
+ ],
+ [ld" "*], [
+ ])
+fi
+AS_CASE([${RPATHFLAG}],[*'%1$'*],[: ${LIBPATHFLAG=' -L%1$-s'}],[: ${LIBPATHFLAG=' -L%s'}])
+
+AC_SUBST(LINK_SO)
+AC_SUBST(LIBPATHFLAG)
+AC_SUBST(RPATHFLAG)
+AC_SUBST(LIBPATHENV, "${LIBPATHENV-LD_LIBRARY_PATH}")
+AC_SUBST(TRY_LINK)
+
+if test "x$OPT_DIR" != x; then
+ pat=`echo "${LDFLAGS_OPTDIR}" | sed ['s/[][\\.*|]/\\\\&/']`
+ LDFLAGS=`echo "${LDFLAGS}" | sed "s| ${pat}||"`
+ val=`IFS="$PATH_SEPARATOR"
+ for dir in $OPT_DIR; do
+ echo x ${LIBPATHFLAG} ${RPATHFLAG} |
+ sed "s/^x *//;s${IFS}"'%1\\$-s'"${IFS}${dir}/lib${IFS}g;s${IFS}%s${IFS}${dir}/lib${IFS}g"
+ done | tr '\012' ' '`
+ test x"${LDFLAGS}" = x || LDFLAGS="$LDFLAGS "
+ LDFLAGS="$LDFLAGS$val"
+ test x"${DLDFLAGS}" = x || DLDFLAGS="$DLDFLAGS "
+ DLDFLAGS="$DLDFLAGS$val"
+ LDFLAGS_OPTDIR="$val"
+fi
+
+AS_CASE(["$target_cpu-$target_os"],
+[*-darwin*], [
+ AC_CHECK_HEADERS([execinfo.h])
+ if test "x$ac_cv_header_execinfo_h" = xyes; then
+ AC_CHECK_LIB([execinfo], [backtrace])
+ fi],
+[*-freebsd*|x86_64-netbsd*], [
+ AC_CHECK_HEADERS([execinfo.h])
+ if test "x$ac_cv_header_execinfo_h" = xyes; then
+ AC_CHECK_LIB([execinfo], [backtrace])
+ AC_CHECK_LIB([unwind], [unw_backtrace])
+ fi])
+AC_CHECK_FUNCS(backtrace)
+
+if test "x$ac_cv_func_backtrace" = xyes; then
+ AC_CACHE_CHECK(for broken backtrace, rb_cv_broken_backtrace,
+ [AC_TRY_RUN([
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <signal.h>
+#include <execinfo.h>
+
+#define TRACE_SIZE 256
+
+void sigsegv(int signum, siginfo_t *info, void *ctx){
+ void *trace[TRACE_SIZE];
+ int n = backtrace(trace, TRACE_SIZE);
+ if (n > 0) {
+ /*fprintf(stdout, "backtrace:%d\n",n);*/
+ } else {
+ _exit(EXIT_FAILURE);
+ }
+ _exit(EXIT_SUCCESS);
+}
+int
+main(void)
+{
+ volatile int *a = NULL;
+ stack_t ss;
+ ss.ss_sp = malloc(SIGSTKSZ);
+ if (ss.ss_sp == NULL) {
+ fprintf(stderr, "cannot allocate memory for sigaltstack\n");
+ return EXIT_FAILURE;
+ }
+ ss.ss_size = SIGSTKSZ;
+ ss.ss_flags = 0;
+ if (sigaltstack(&ss, NULL) == -1) {
+ fprintf(stderr, "sigaltstack failed\n");
+ return EXIT_FAILURE;
+ }
+ struct sigaction sa;
+ memset(&sa, 0, sizeof(struct sigaction));
+ sigemptyset(&sa.sa_mask);
+ sa.sa_sigaction = sigsegv;
+ sa.sa_flags |= SA_SIGINFO;
+ sa.sa_flags |= SA_ONSTACK;
+ sigaction(SIGSEGV, &sa, NULL);
+ a[0] = 1;
+ return EXIT_SUCCESS;
+}
+],
+ rb_cv_broken_backtrace=no,
+ rb_cv_broken_backtrace=yes,
+ rb_cv_broken_backtrace=no)])
+ if test "$rb_cv_broken_backtrace" = yes; then
+ AC_DEFINE(BROKEN_BACKTRACE, 1)
+ fi
+fi
+
+AC_ARG_WITH(valgrind,
+ AS_HELP_STRING([--without-valgrind],[disable valgrind memcheck support]),
+ [], with_valgrind=yes)
+AS_IF([test x$with_valgrind != xno],
+ [AC_CHECK_HEADERS(valgrind/memcheck.h)])
dln_a_out_works=no
if test "$ac_cv_header_a_out_h" = yes; then
if test "$with_dln_a_out" = yes || test "$rb_cv_dlopen" = unknown; then
- AC_MSG_CHECKING(whether matz's dln works)
cat confdefs.h > config.h
- AC_CACHE_VAL(rb_cv_dln_a_out,
+ AC_CACHE_CHECK(whether matz's dln works, rb_cv_dln_a_out,
[AC_TRY_COMPILE([
#define USE_DLN_A_OUT
#include "dln.c"
],
- [],
+ [],
rb_cv_dln_a_out=yes,
rb_cv_dln_a_out=no)])
- AC_MSG_RESULT($rb_cv_dln_a_out)
if test "$rb_cv_dln_a_out" = yes; then
dln_a_out_works=yes
AC_DEFINE(USE_DLN_A_OUT)
@@ -259,53 +2956,1079 @@ if test "$dln_a_out_works" = yes; then
else
STATIC=-Bstatic
fi
- DLEXT=o
- AC_DEFINE(DLEXT, ".o")
+ DLEXT=so
CCDLFLAGS=
else
- case "$host_os" in
- hpux*) DLEXT=sl
- AC_DEFINE(DLEXT, ".sl");;
- nextstep*) DLEXT=o
- AC_DEFINE(DLEXT, ".o");;
- *) DLEXT=so
- AC_DEFINE(DLEXT, ".so");;
- esac
+ AS_CASE(["$target_os"],
+ [hpux*], [
+ DLEXT=sl],
+ [darwin*], [
+ RUBY_APPEND_OPTION(XLDFLAGS, [-Wl,-u,_objc_msgSend])
+ DLEXT=bundle],
+ [os2-emx*], [
+ LOAD_RELATIVE=1
+ DLEXT=dll],
+ [cygwin*|mingw*|*djgpp*], [
+ LOAD_RELATIVE=1
+ DLEXT=so],
+ [
+ DLEXT=so])
+fi
+if test "$rb_cv_dlopen:$load_relative" = yes:yes; then
+ AC_CHECK_FUNCS(dladdr)
+ if test "$ac_cv_func_dladdr" = yes; then
+ LOAD_RELATIVE=1
+ fi
+fi
+if test x"$LOAD_RELATIVE" = x1; then
+ load_relative=yes
+else
+ unset load_relative
fi
-AC_SUBST(STRIP)dnl
+len=2 # .rb
+n=`expr "$DLEXT" : '.*'`; test "$n" -gt "$len" && len=$n
+n=`expr "$DLEXT2" : '.*'`; test "$n" -gt "$len" && len=$n
+AC_DEFINE_UNQUOTED(DLEXT_MAXLEN, `expr $len + 1`)
+test ".$DLEXT" = "." || AC_DEFINE_UNQUOTED(DLEXT, ".$DLEXT")
+test ".$DLEXT2" = "." || AC_DEFINE_UNQUOTED(DLEXT2, ".$DLEXT2")
+AC_SUBST(DLEXT)
+
if test "$with_dln_a_out" = yes; then
STRIP=true
else
- STRIP=strip
+ AC_CHECK_TOOL(STRIP, strip, :)dnl
fi
-case "$host_os" in
- linux*)
- STRIP='strip -S -x';;
- nextstep*)
- STRIP='strip -A -n';;
-esac
+AS_CASE(["$target_os"],
+ [linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu], [
+ STRIP="$STRIP -S -x"],
+ [darwin*], [
+ STRIP="$STRIP -A -n"])
+AC_ARG_WITH(ext,
+ AC_HELP_STRING([--with-ext=EXTS],
+ [pass to --with-ext option of extmk.rb]))
+AC_ARG_WITH(out-ext,
+ AC_HELP_STRING([--with-out-ext=EXTS],
+ [pass to --without-ext option of extmk.rb]))
EXTSTATIC=
AC_SUBST(EXTSTATIC)dnl
AC_ARG_WITH(static-linked-ext,
- [--with-static-linked-ext link external modules statically],
- [case $withval in
- yes) STATIC=
- EXTSTATIC=static;;
- *) ;;
- esac])
+ AS_HELP_STRING([--with-static-linked-ext], [link external modules statically]),
+ [AS_CASE([$withval],[yes],[STATIC=;EXTSTATIC=static])])
+if test x"$EXTSTATIC" = xstatic; then
+ ENCOBJS='enc/encinit.$(OBJEXT) enc/libenc.$(LIBEXT) enc/libtrans.$(LIBEXT)'
+ EXTOBJS='ext/extinit.$(OBJEXT)'
+ AC_DEFINE_UNQUOTED(EXTSTATIC, 1)
+fi
+AC_SUBST(ENCOBJS)
+AC_SUBST(EXTOBJS)
+
+if test -f "$srcdir/ext/Setup.$target_os"; then
+ setup="Setup.$target_os"
+else
+ setup=
+ for file in "$srcdir"/ext/Setup.*; do
+ AS_CASE(["$file"], [*~|*.bak|*.orig|*.rej|*.tmp], [continue])
+ setup=`basename "$file"`
+ AS_CASE(["$target_os"], [`expr "$setup" : 'Setup.\(.*\)'`*], [break])
+ platform=`sed '/^option *platform */!d;s///;s/|/*|/g;q' "$file"`
+ if test "x$platform" != x; then
+ eval "AS_CASE([\"\$target_os\"], [$platform*], [break])"
+ fi
+ setup=
+ done
+ : ${setup:=Setup}
+fi
+AC_SUBST(setup)
+
+rubylibprefix='${libdir}/${RUBY_BASE_NAME}'
+AC_ARG_WITH(rubylibprefix,
+ AS_HELP_STRING([--with-rubylibprefix=DIR], [prefix for ruby libraries [[LIBDIR/RUBY_BASE_NAME]]]),
+ [if test "x$withval" = xno; then
+ AC_MSG_ERROR([No ruby, No libprefix])
+ fi
+ rubylibprefix="$withval"])
+AC_SUBST(rubylibprefix)
+
+if test x"${exec_prefix}" != xNONE; then
+ RUBY_EXEC_PREFIX="$exec_prefix"
+elif test x"$prefix" != xNONE; then
+ RUBY_EXEC_PREFIX="$prefix"
+else
+ RUBY_EXEC_PREFIX=$ac_default_prefix
+fi
+pat=`echo "${RUBY_EXEC_PREFIX}" | tr -c '\012' .`'\(.*\)'
+for var in bindir libdir rubylibprefix; do
+ eval val='"$'$var'"'
+ AS_CASE(["$val"], ["${RUBY_EXEC_PREFIX}"*], [val='${exec_prefix}'"`expr \"$val\" : \"$pat\"`"])
+ eval $var='"$val"'
+done
+
+BTESTRUBY='$(MINIRUBY)'
+if test x"$cross_compiling" = xyes; then
+ test x"$MINIRUBY" = x && MINIRUBY="${RUBY-$BASERUBY} -I`$CHDIR .; pwd` "-r'$(arch)-fake'
+ XRUBY_LIBDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["libdir"]']`
+ XRUBY_RUBYLIBDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["rubylibdir"]']`
+ XRUBY_RUBYHDRDIR=`${RUBY-$BASERUBY} -rrbconfig -e ['puts RbConfig::CONFIG["rubyhdrdir"]']`
+ AC_SUBST(XRUBY_LIBDIR)
+ AC_SUBST(XRUBY_RUBYLIBDIR)
+ AC_SUBST(XRUBY_RUBYHDRDIR)
+ PREP='$(arch)-fake.rb'
+ RUNRUBY_COMMAND='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`'
+ RUNRUBY='$(RUNRUBY_COMMAND)'
+ XRUBY='$(MINIRUBY)'
+ TEST_RUNNABLE=no
+ CROSS_COMPILING=yes
+
+ if test "$host_os" = "nacl"; then
+ if test "$build_cpu" = "$host_cpu" || test "${nacl_cv_cpu_nick}" = "x86" -a "$host_cpu" = "i686"; then
+ nacl_cv_sel_ldr='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb sel_ldr`'
+ nacl_cv_irt_core='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb irt_core`'
+ nacl_cv_runnable_ld='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb runnable_ld`'
+ nacl_cv_host_lib='`$(MINIRUBY) $(srcdir)/nacl/nacl-config.rb host_lib`'
+ TEST_RUNNABLE=yes
+ BTESTRUBY="${nacl_cv_sel_ldr} -a -B ${nacl_cv_irt_core} -w 1:3 -w 2:4"
+ BTESTRUBY="$BTESTRUBY -- ${nacl_cv_runnable_ld} --library-path ${nacl_cv_host_lib}"
+ BTESTRUBY="$BTESTRUBY `pwd`/"'miniruby$(EXEEXT) -I`cd $(srcdir)/lib; pwd` -I.'
+ BTESTRUBY="$BTESTRUBY"' -I$(EXTOUT)/common 3>&1 4>&2 1>/dev/null 2>/dev/null '
+ fi
+ fi
+else
+ MINIRUBY='./miniruby$(EXEEXT) -I$(srcdir)/lib -I.'
+ MINIRUBY="$MINIRUBY"' -I$(EXTOUT)/common'
+ PREP='miniruby$(EXEEXT)'
+ RUNRUBY_COMMAND='$(MINIRUBY) $(srcdir)/tool/runruby.rb --extout=$(EXTOUT) $(RUNRUBYOPT)'
+ RUNRUBY='$(RUNRUBY_COMMAND) --'
+ XRUBY='$(RUNRUBY)'
+ TEST_RUNNABLE=yes
+ CROSS_COMPILING=no
+fi
+AC_SUBST(TEST_RUNNABLE)
+AC_SUBST(CROSS_COMPILING)
+AC_SUBST(MINIRUBY)
+AC_SUBST(BTESTRUBY)
+AC_SUBST(PREP)
+AC_SUBST(RUNRUBY_COMMAND)
+AC_SUBST(RUNRUBY)
+AC_SUBST(XRUBY)
+AC_SUBST(EXTOUT, [${EXTOUT=.ext}])
+
+FIRSTMAKEFILE=""
+LIBRUBY_A='lib$(RUBY_SO_NAME)-static.a'
+LIBRUBY='$(LIBRUBY_A)'
+LIBRUBYARG_STATIC='-l$(RUBY_SO_NAME)-static'
+LIBRUBYARG='$(LIBRUBYARG_STATIC)'
+SOLIBS=
+
+AS_CASE(["$target_os"],
+ [cygwin*|mingw*|beos*|haiku*|darwin*|os2-emx*], [
+ : ${DLDLIBS=""}
+ ],
+ [
+ DLDLIBS="$DLDLIBS -lc"
+ ])
+
+AC_ARG_ENABLE(multiarch,
+ AS_HELP_STRING([--enable-multiarch], [enable multiarch compatible directories]),
+ [multiarch=], [unset multiarch])
+if test ${multiarch+set}; then
+ AC_DEFINE(ENABLE_MULTIARCH)
+fi
+
+archlibdir='${libdir}/${arch}'
+sitearchlibdir='${libdir}/${sitearch}'
+archincludedir='${includedir}/${arch}'
+sitearchincludedir='${includedir}/${sitearch}'
+
+AC_ARG_WITH(soname,
+ AS_HELP_STRING([--with-soname=SONAME], [base name of shared library]),
+ [RUBY_SO_NAME=$withval], [RUBY_SO_NAME='$(RUBY_BASE_NAME)'])
+
+LIBRUBY_LDSHARED=$LDSHARED
+LIBRUBY_DLDFLAGS=$DLDFLAGS
+LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY)'
+LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so'
+ENABLE_SHARED=no
+
+AC_ARG_ENABLE(shared,
+ AS_HELP_STRING([--enable-shared], [build a shared library for Ruby]),
+ [enable_shared=$enableval])
+libprefix=${multiarch+'$(archlibdir)'}${multiarch-'$(libdir)'}
+LIBRUBY_RELATIVE=${load_relative-no}
+AS_CASE("$enable_shared", [yes], [
+ LIBRUBY='$(LIBRUBY_SO)'
+ LIBRUBYARG_SHARED='-l$(RUBY_SO_NAME)'
+ LIBRUBYARG='$(LIBRUBYARG_SHARED)'
+ LIBRUBY_RELATIVE=no
+ test -z "$CCDLFLAGS" || CFLAGS="$CFLAGS $CCDLFLAGS"
+ ENABLE_SHARED=yes
+ if test "$rb_cv_binary_elf" = yes; then
+ SOLIBS='$(LIBS)'
+ fi
+
+ # libdir can be overridden in config.site file (on OpenSUSE at least).
+ libdir_basename=lib
+ if test "$bindir" = '${exec_prefix}/bin'; then
+ AS_CASE(["$libdir"], ['${exec_prefix}/'*], [libdir_basename=`basename "$libdir"`])
+ fi
+ AC_DEFINE_UNQUOTED(LIBDIR_BASENAME, ["${libdir_basename}"])
+ libdir_basename="${libdir_basename}"${multiarch+'/${arch}'}
+
+ AS_CASE(["$target_os"],
+ [freebsd*|dragonfly*], [],
+ [
+ if test "$GCC" = yes; then
+ RUBY_TRY_LDFLAGS([${linker_flag}--no-undefined], [no_undefined=yes], [no_undefined=no])
+ if test "no_undefined" = yes; then
+ RUBY_APPEND_OPTION(EXTLDFLAGS, [${linker_flag}--no-undefined])
+ fi
+ fi
+ ])
+
+ AS_CASE(["$target_os"],
+ [sunos4*], [
+ LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
+ ],
+ [linux* | gnu* | k*bsd*-gnu | atheos* | kopensolaris*-gnu], [
+ LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'" $LDFLAGS_OPTDIR"
+ LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so'
+ if test "$load_relative" = yes; then
+ libprefix="'\$\${ORIGIN}/../${libdir_basename}'"
+ LIBRUBY_RPATHFLAGS="-Wl,-rpath,${libprefix}"
+ LIBRUBY_RELATIVE=yes
+ fi
+ ],
+ [freebsd*|dragonfly*], [
+ SOLIBS='$(LIBS)'
+ LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'
+ if test "$rb_cv_binary_elf" != "yes" ; then
+ LIBRUBY_SO="$LIBRUBY_SO.\$(TEENY)"
+ LIBRUBY_ALIASES=''
+ fi
+ ],
+ [netbsd*], [
+ SOLIBS='$(LIBS)'
+ LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR).$(TEENY)'
+ LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'" $LDFLAGS_OPTDIR"
+ if test "$rb_cv_binary_elf" = yes; then # ELF platforms
+ LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR) lib$(RUBY_SO_NAME).so'
+ else # a.out platforms
+ LIBRUBY_ALIASES=""
+ fi
+ ],
+ [openbsd*|mirbsd*], [
+ SOLIBS='$(LIBS)'
+ LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}`
+ ],
+ [solaris*], [
+ SOLIBS='$(LIBS)'
+ LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR)'
+ LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR).$(TEENY) lib$(RUBY_SO_NAME).so'
+ if test "$GCC" = yes; then
+ LIBRUBY_DLDFLAGS="$DLDFLAGS "'-Wl,-h,$(@F)'
+ else
+ LIBRUBY_DLDFLAGS="$DLDFLAGS "'-h $(@F)'
+ fi
+ XLDFLAGS="$XLDFLAGS "'-R${libdir}'
+ ],
+ [hpux*], [
+ XLDFLAGS="$XLDFLAGS "'-Wl,+s,+b,$(libdir)'
+ LIBRUBY_SO='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR).$(TEENY)'
+ LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).sl'
+ ],
+ [aix*], [
+ LIBRUBY_DLDFLAGS="${linker_flag}-bnoentry $XLDFLAGS $LDFLAGS_OPTDIR"
+ LIBRUBYARG_SHARED='-L${libdir} -l${RUBY_SO_NAME}'
+ SOLIBS='-lm -lc'
+ ],
+ [beos*], [
+ AS_CASE(["$target_cpu"],
+ [powerpc*], [
+ LIBRUBY_DLDFLAGS="-f ruby.exp -lnet -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o $LDFLAGS_OPTDIR"
+ ])
+ ],
+ [darwin*], [
+ RUBY_SO_NAME="$RUBY_SO_NAME"'.$(MAJOR).$(MINOR).$(TEENY)'
+ LIBRUBY_LDSHARED='$(CC) -dynamiclib'
+ if test "$load_relative" = yes; then
+ libprefix="@executable_path/../${libdir_basename}"
+ LIBRUBY_RELATIVE=yes
+ fi
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-install_name '${libprefix}'/$(LIBRUBY_SO)'
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-current_version $(MAJOR).$(MINOR).$(TEENY)'
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-compatibility_version $(ruby_version)'
+ if test "$visibility_option" = ld; then
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,_Init_*'
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "'-Wl,-unexported_symbol,*_threadptr_*'
+ fi
+ LIBRUBY_DLDFLAGS="$LIBRUBY_DLDFLAGS "' $(XLDFLAGS)'
+ LIBRUBY_SO='lib$(RUBY_SO_NAME).dylib'
+ LIBRUBY_ALIASES='lib$(RUBY_BASE_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_INSTALL_NAME).dylib'
+ SOLIBS='$(LIBS)'
+ ],
+ [interix*], [
+ LIBRUBYARG_SHARED='-L. -L${libdir} -l$(RUBY_SO_NAME)'
+ ],
+ [mingw*|cygwin*|mswin*], [
+ LIBRUBY_RELATIVE=yes
+ ])
+], [
+ LIBRUBYARG_SHARED=
+
+ # enable PIE if possible
+ pie=
+ AS_CASE(["$target_os"],
+ [haiku], [
+ # gcc supports PIE, but doesn't work correctly in Haiku
+ pie=no
+ ],
+ [nacl], [
+ # -pie implies -shared for NaCl.
+ pie=no
+ ])
+ if test "$GCC" = yes -a -z "$EXTSTATIC" -a "x$pie" != xno; then
+ RUBY_TRY_CFLAGS(-fPIE, [pie=yes], [pie=no])
+ if test "$pie" = yes; then
+ # Use -fPIE when testing -pie. RUBY_TRY_LDFLAGS sets
+ # $save_CFLAGS internally, so set other name here.
+ save_CFLAGS_before_pie="$CFLAGS"
+ CFLAGS="$CFLAGS -fPIE"
+
+ # gcc need -pie but clang need -Wl,-pie.
+ for pie in -pie -Wl,-pie; do
+ RUBY_TRY_LDFLAGS([$pie], [], [pie=])
+ if test "x$pie" != x; then
+ RUBY_APPEND_OPTION(XCFLAGS, -fPIE)
+ RUBY_APPEND_OPTION(XLDFLAGS, $pie)
+ break
+ fi
+ done
+ CFLAGS="$save_CFLAGS_before_pie"
+ fi
+ fi
+])
+if test "$enable_rpath" = yes; then
+ test -z "$LIBRUBY_RPATHFLAGS" || LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS "
+ LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS${linker_flag}-R ${linker_flag}${libprefix}"
+ test "x$cross_compiling" = xyes || LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS -L${libprefix}"
+ LIBRUBYARG_SHARED="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_SHARED"
+ LIBRUBYARG_STATIC="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_STATIC"
+fi
+AC_SUBST(LIBRUBY_RELATIVE)
+
+LDFLAGS="-L. $LDFLAGS"
+AC_SUBST(ARCHFILE)
+
+if test "$EXEEXT" = .exe; then
+ EXECUTABLE_EXTS='".exe",".com",".cmd",".bat"'
+ AC_DEFINE_UNQUOTED(EXECUTABLE_EXTS, $EXECUTABLE_EXTS)
+ EXECUTABLE_EXTS=`echo $EXECUTABLE_EXTS | tr -d '"' | tr , ' '`
+ AC_SUBST(EXECUTABLE_EXTS)
+fi
+
+AC_ARG_ENABLE(dtrace,
+ AS_HELP_STRING([--enable-dtrace],
+ [enable DTrace for tracing inside ruby. enabled by default on systems having dtrace]),
+ [enable_dtrace=$enableval], [enable_dtrace=auto])
+
+if test "${enable_dtrace}" = "auto"; then
+ if test x"$DTRACE" != x -a x"$cross_compiling" != xyes; then
+ RUBY_DTRACE_AVAILABLE()
+ enable_dtrace=$rb_cv_dtrace_available
+ else
+ enable_dtrace=no
+ fi
+fi
+
+LIBRUBY_A_OBJS='$(OBJS)'
+if test "${enable_dtrace}" = "yes"; then
+ if test -z "$DTRACE"; then
+ AC_MSG_ERROR([dtrace(1) is missing])
+ elif test "$cross_compiling" = yes; then
+ AC_MSG_ERROR([--enable-dtrace, however, cross compiling])
+ else
+ RUBY_DTRACE_AVAILABLE()
+ enable_dtrace=$rb_cv_dtrace_available
+ if test "${enable_dtrace}" = "no"; then
+ AC_MSG_ERROR([--enable-dtrace, however, USDT is not available])
+ fi
+ RUBY_DTRACE_POSTPROCESS()
+ if test "$rb_cv_prog_dtrace_g" = 'yes'; then
+ DTRACE_OBJ='probes.$(OBJEXT)'
+ DTRACE_GLOMMED_OBJ='ruby-glommed.$(OBJEXT)'
+ LIBRUBY_A_OBJS='$(DTRACE_GLOMMED_OBJ)'
+ fi
+ AS_CASE("${target_os}", [freebsd*], [
+ # FreeBSD's dtrace requires libelf
+ LIBS="-lelf $LIBS"
+ ])
+ fi
+ DTRACE_EXT=d
+else
+ DTRACE_EXT=dmyh
+fi
+AC_SUBST(DTRACE_EXT)
+AC_SUBST(DTRACE_OBJ)
+AC_SUBST(DTRACE_GLOMMED_OBJ)
+AC_SUBST(LIBRUBY_A_OBJS)
+
+RUBY_SETJMP_TYPE
+}
+{ # build section
+
+dnl build rdoc index if requested
+RDOCTARGET=""
+CAPITARGET=""
+AC_ARG_ENABLE(install-doc,
+ AS_HELP_STRING([--disable-install-doc], [do not install neither rdoc indexes nor C API documents during install]),
+ [install_doc=$enableval], [install_doc=yes])
+AC_ARG_ENABLE(install-rdoc,
+ AS_HELP_STRING([--disable-install-rdoc], [do not install rdoc indexes during install]),
+ [install_rdoc=$enableval], [install_rdoc=yes])
+AC_ARG_ENABLE(install-capi,
+ AS_HELP_STRING([--disable-install-capi], [do not install C API documents during install]),
+ [install_capi=$enableval], [install_capi=yes])
+
+if test "$install_doc" != no; then
+ if test "$install_rdoc" != no; then
+ RDOCTARGET="rdoc"
+ else
+ RDOCTARGET="nodoc"
+ fi
+ if test "$install_capi" != no -a -n "$DOXYGEN"; then
+ CAPITARGET="capi"
+ else
+ CAPITARGET="nodoc"
+ fi
+else
+ RDOCTARGET="nodoc"
+ CAPITARGET="nodoc"
+fi
+
+AC_SUBST(RDOCTARGET)
+AC_SUBST(CAPITARGET)
+
+AS_CASE(["$RDOCTARGET:$CAPITARGET"],[nodoc:nodoc],[INSTALLDOC=nodoc],[INSTALLDOC=all])
+AC_SUBST(INSTALLDOC)
+
+if test "$rb_with_pthread" = "yes"; then
+ THREAD_MODEL=pthread
+fi
+AC_CACHE_CHECK([for prefix of external symbols], rb_cv_symbol_prefix, [
+ AC_TRY_COMPILE([extern void conftest_external(void) {}], [], [
+ rb_cv_symbol_prefix=`$NM conftest.$ac_objext |
+ sed -n ['/.*T[ ]\([^ ]*\)conftest_external.*/!d;s//\1/p;q']`
+ ],
+ [rb_cv_symbol_prefix=''])
+ test -n "$rb_cv_symbol_prefix" || rb_cv_symbol_prefix=NONE
+])
+SYMBOL_PREFIX="$rb_cv_symbol_prefix"
+test "x$SYMBOL_PREFIX" = xNONE && SYMBOL_PREFIX=''
+DLNOBJ=dln.o
+AC_ARG_ENABLE(dln,
+ AC_HELP_STRING([--disable-dln], [disable dynamic link feature]),
+ [test "$enableval" = yes || DLNOBJ=dmydln.o])
+AC_SUBST(DLNOBJ)
+MINIDLNOBJ=dmydln.o
+
+AS_CASE(["$target_os"],
+ [linux*], [
+ ],
+ [netbsd*], [
+ RUBY_APPEND_OPTION(CFLAGS, -pipe)
+ ],
+ [darwin*], [
+ RUBY_APPEND_OPTION(CFLAGS, -pipe)
+ RUBY_APPEND_OPTION(XLDFLAGS, [-framework CoreFoundation])
+ RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework CoreFoundation])
+ ],
+ [os2-emx], [
+ AC_LIBOBJ([os2])
+ CFLAGS="$CFLAGS -DOS2"
+ LIBRUBY_A=`echo $LIBRUBY_A | sed 's/^lib//'`
+ LIBRUBY_SO=`echo $LIBRUBY_SO | sed 's/^lib//'`
+ LIBRUBY_ALIASES=`for i in $LIBRUBY_ALIASES; do echo "$i"; done | sed 's/^lib//'`
+ ],
+ [osf*], [
+ if test "$GCC" != "yes" ; then
+ # compile something small: taint.c is fine for this.
+ # the main point is the '-v' flag of 'cc'.
+ AS_CASE(["`cc -v -I. -c main.c -o /tmp/main.o 2>&1`"],
+ [*/gemc_cc*], [ # we have the new DEC GEM CC
+ CFLAGS="$CFLAGS -oldc"
+ ],
+ [ # we have the old MIPS CC
+ ])
+ # cleanup
+ rm -f /tmp/main.o
+ CFLAGS="$CFLAGS -std"
+ fi
+ ],
+ [beos*], [
+ AS_CASE(["$target_cpu"],[powerpc*], [CFLAGS="$CFLAGS -relax_pointers"])
+ CPPFLAGS="$CPPFLAGS -I/boot/home/config/include"
+ ],
+ [cygwin*|mingw*], [
+ RUBY_SO_NAME="${RUBY_SO_NAME}"'$(MAJOR)$(MINOR)$(TEENY)'
+ LIBRUBY_DLDFLAGS="${DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)'
+ AS_CASE(["$target_os"],
+ [cygwin*], [
+ if test x"$enable_shared" = xyes; then
+ LIBRUBY_SO='cyg$(RUBY_SO_NAME)'.dll
+ LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
+ fi
+ ],
+ [mingw*], [
+ RUBY_SO_NAME="${rb_cv_msvcrt}-${RUBY_SO_NAME}"
+ if test x"${target_cpu}" != xi386; then
+ RUBY_SO_NAME="${target_cpu}-${RUBY_SO_NAME}"
+ fi
+ if test x"$enable_shared" = xyes; then
+ LIBRUBY_SO='$(RUBY_SO_NAME)'.dll
+ LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
+ fi
+ EXPORT_PREFIX=' '
+ DLDFLAGS="${DLDFLAGS}"' $(DEFFILE)'
+ AC_LIBOBJ([win32/win32])
+ AC_LIBOBJ([win32/file])
+ COMMON_LIBS=m
+# COMMON_MACROS="WIN32_LEAN_AND_MEAN="
+ COMMON_HEADERS="winsock2.h windows.h"
+ THREAD_MODEL=win32
+ PLATFORM_DIR=win32
+ ])
+ LIBRUBY_ALIASES=''
+ FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in
+ SOLIBS='$(LIBS)'
+ if test x"$enable_shared" = xyes; then
+ LIBRUBY='lib$(RUBY_SO_NAME).dll.a'
+ else
+ LIBRUBY_SO=dummy
+ LIBRUBY='lib$(RUBY_SO_NAME).a'
+ LIBRUBYARG='-l$(RUBY_SO_NAME)'
+ fi
+ ],
+ [hpux*], [
+ AS_CASE(["$YACC"],[*yacc*], [
+ XCFLAGS="$XCFLAGS -DYYMAXDEPTH=300"
+ YACC="$YACC -Nl40000 -Nm40000"
+ ])],
+ [nacl], [
+ FIRSTMAKEFILE=GNUmakefile:nacl/GNUmakefile.in
+ ])
+
+AS_CASE(["$with_gmp: $SOLIBS "], [no:* | *' -lgmp '*|*' $(LIBS) '*], [],
+ [SOLIBS="-lgmp $SOLIBS"])
+
+MINIOBJS="$MINIDLNOBJ"
+
+AS_CASE(["$THREAD_MODEL"],
+[pthread], [AC_CHECK_HEADERS(pthread.h)],
+[win32], [],
+[""], [AC_MSG_ERROR(thread model is missing)],
+ [AC_MSG_ERROR(unknown thread model $THREAD_MODEL)])
+
+AC_ARG_ENABLE(debug-env,
+ AS_HELP_STRING([--enable-debug-env], [enable RUBY_DEBUG environment variable]),
+ [AC_DEFINE(RUBY_DEBUG_ENV)])
+
+AS_CASE(["$FIRSTMAKEFILE"], [*GNUmakefile:*], [gnumake=yes], [
+ AC_MSG_CHECKING([if ${MAKE-make} is GNU make])
+ mkdir conftest.dir
+ echo "all:; @echo yes" > conftest.dir/GNUmakefile
+ echo "all:; @echo no" > conftest.dir/Makefile
+ gnumake=`(cd conftest.dir; ${MAKE-make})`
+ rm -fr conftest.dir
+ AS_CASE(["$gnumake"],
+ [*yes*], [
+ FIRSTMAKEFILE=GNUmakefile:template/GNUmakefile.in
+ gnumake=yes],
+ [
+ gnumake=no])
+ AC_MSG_RESULT($gnumake)
+])
+AS_IF([test "$gnumake" = yes], [ NULLCMD=: ], [
+ AC_MSG_CHECKING([for safe null command for ${MAKE-make}])
+ mkdir conftest.dir
+ NULLCMD=
+ for cmd in : true; do
+ echo 'A=1' > conftest.dir/Makefile
+ echo 'B=$(A:1=@'$cmd')' >> conftest.dir/Makefile
+ echo 'all:; $B 1 2 3 4 5 6 7 8 9' >> conftest.dir/Makefile
+ if (cd conftest.dir; ${MAKE-make} >/dev/null 2>/dev/null); then
+ NULLCMD=$cmd
+ break
+ fi
+ done
+ rm -fr conftest.dir
+ if test -z "$NULLCMD"; then
+ AC_MSG_ERROR(no candidate for safe null command)
+ fi
+ AC_MSG_RESULT($NULLCMD)
+])
+AC_SUBST(NULLCMD)
+
+if test "${universal_binary-no}" = yes ; then
+ AC_CACHE_CHECK([for architecture macros], rb_cv_architecture_macros, [
+ mv confdefs.h confdefs1.h
+ : > confdefs.h
+ AC_TRY_COMPILE([@%:@if defined __`echo ${universal_archnames} |
+ sed 's/=[^ ]*//g;s/ /__ || defined __/g'`__
+@%:@else
+@%:@error
+>>>>>><<<<<<
+@%:@endif], [],
+[
+ rb_cv_architecture_macros=yes
+ mv -f confdefs1.h confdefs.h
+], [
+ rb_cv_architecture_macros=no
+ archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
+ new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
+ for archs in ${universal_archnames}; do
+ cpu=${archs@%:@*=}
+ archs=${archs%=*}
+ CFLAGS="$new_cflags -arch $archs"
+ archs="__${archs}__"
+ AC_MSG_CHECKING([for macro ${archs} on ${cpu}])
+ AC_TRY_COMPILE([@%:@ifndef ${archs}
+@%:@error
+@%:@endif], [], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])])
+ done
+ mv -f confdefs1.h confdefs.h
+ AC_MSG_ERROR([failed])
+ ])])
+fi
+
+AC_CHECK_FUNC(memmem, [
+ AC_CACHE_CHECK(for broken memmem, rb_cv_broken_memmem, [
+ AC_TRY_RUN([
+#include <string.h>
+
+int
+main()
+{
+ char *str = "hogefugafoobar";
+ char *rs = "foo";
+ char *empty = "";
+ char *p;
+
+ p = memmem(str, strlen(str), rs, strlen(rs));
+ if (p == str+8) {
+ p = memmem(str, strlen(str), empty, strlen(empty));
+ if (p == str)
+ return 0;
+ else
+ return 1;
+ }
+ else {
+ return 1;
+ }
+}
+ ],
+ rb_cv_broken_memmem=no,
+ rb_cv_broken_memmem=yes,
+ rb_cv_broken_memmem=yes)
+ ])
+ if test "$rb_cv_broken_memmem" = no; then
+ AC_DEFINE(HAVE_MEMMEM, 1)
+ fi
+])
+
+
+CPPFLAGS="$CPPFLAGS "'$(DEFS)'
+test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}'
+if test -n "${cflags+set}"; then
+ cflagspat=`eval echo '"'"${cflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/^ *$/ /'`
+ CFLAGS=`echo " $CFLAGS " | sed "s|$cflagspat"'|${cflags}|;s/^ *//;s/ *$//'`
+fi
+if test -n "${cxxflags+set}"; then
+ cxxflagspat=`eval echo '"'"${cxxflags}"'"' | sed 's/[[][|.*]]/\\&/g;s/^ */ /;s/^ *$/ /'`
+ CXXFLAGS=`echo " $CXXFLAGS " | sed "s|$cxxflagspat"'|${cxxflags}|;s/^ *//;s/ *$//'`
+fi
+if test "${ARCH_FLAG}"; then
+ archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
+ CFLAGS=`echo "$CFLAGS" | sed "s| *$archflagpat"'||'`
+ CXXFLAGS=`echo "$CXXFLAGS" | sed "s| *$archflagpat"'||'`
+ LDFLAGS=`echo "$LDFLAGS" | sed "s| *$archflagpat"'||'`
+fi
+warnflags="$rb_cv_warnflags"
+AC_SUBST(cppflags)dnl
+AC_SUBST(cflags, ["$orig_cflags "'${optflags} ${debugflags} ${warnflags}'])dnl
+AC_SUBST(cxxflags, ["$orig_cxxflags "'${optflags} ${debugflags} ${warnflags}'])dnl
+AC_SUBST(optflags)dnl
+AC_SUBST(debugflags)dnl
+AC_SUBST(warnflags)dnl
+AC_SUBST(strict_warnflags)dnl
+AC_SUBST(XCFLAGS)dnl
+AC_SUBST(XLDFLAGS)dnl
+AC_SUBST(EXTLDFLAGS)dnl
+AC_SUBST(EXTDLDFLAGS)dnl
+AC_SUBST(LIBRUBY_LDSHARED)
+AC_SUBST(LIBRUBY_DLDFLAGS)
+AC_SUBST(RUBY_INSTALL_NAME)
+AC_SUBST(rubyw_install_name)
+AC_SUBST(RUBYW_INSTALL_NAME)
+AC_SUBST(RUBY_SO_NAME)
+AC_SUBST(LIBRUBY_A)
+AC_SUBST(LIBRUBY_SO)
+AC_SUBST(LIBRUBY_ALIASES)
+AC_SUBST(LIBRUBY)
+AC_SUBST(LIBRUBYARG)
+AC_SUBST(LIBRUBYARG_STATIC)
+AC_SUBST(LIBRUBYARG_SHARED)
+AC_SUBST(SOLIBS)
+AC_SUBST(DLDLIBS)
+AC_SUBST(ENABLE_SHARED)
+AC_SUBST(MAINLIBS)
+AC_SUBST(COMMON_LIBS)
+AC_SUBST(COMMON_MACROS)
+AC_SUBST(COMMON_HEADERS)
+AC_SUBST(EXPORT_PREFIX)
+AC_SUBST(SYMBOL_PREFIX)
+AC_SUBST(MINIOBJS)
+AC_SUBST(THREAD_MODEL)
+AC_SUBST(PLATFORM_DIR)
+
+firstmf=`echo $FIRSTMAKEFILE | sed 's/:.*//'`
+firsttmpl=`echo $FIRSTMAKEFILE | sed 's/.*://'`
+MAKEFILES="Makefile $firstmf"
+MAKEFILES="`echo $MAKEFILES`"
+AC_SUBST(MAKEFILES)
+
+ri_prefix=
+test "$program_prefix" != NONE &&
+ ri_prefix=$program_prefix
+
+ri_suffix=
+test "$program_suffix" != NONE &&
+ ri_suffix=$program_suffix
+
+RUBY_INSTALL_NAME="${ri_prefix}"'$(RUBY_BASE_NAME)'"${ri_suffix}"
+AS_CASE(["$target_os"],
+ [cygwin*|mingw*], [
+ RUBYW_INSTALL_NAME="${ri_prefix}"'$(RUBYW_BASE_NAME)'"${ri_suffix}"
+ rubyw_install_name='$(RUBYW_INSTALL_NAME)'
+ ])
+
+rubylibdir='${rubylibprefix}/${ruby_version}'
+rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'}
+
+rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'}
+AC_ARG_WITH(rubyarchprefix,
+ AS_HELP_STRING([--with-rubyarchprefix=DIR],
+ [prefix for architecture dependent ruby libraries [[RUBYLIBPREFIX/ARCH]]]),
+ [rubyarchprefix="$withval"])
+AC_SUBST(rubyarchprefix)
+
+rubysitearchprefix=${multiarch+'${sitearchlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${sitearch}'}
+AC_ARG_WITH(rubysitearchprefix,
+ AS_HELP_STRING([--with-rubysitearchprefix=DIR],
+ [prefix for architecture dependent site libraries [[RUBYLIBPREFIX/SITEARCH]]]),
+ [rubysitearchprefix="$withval"])
+AC_SUBST(rubysitearchprefix)
+
+RI_BASE_NAME=`echo ${RUBY_BASE_NAME} | sed 's/ruby/ri/'`
+ridir='${datarootdir}/${RI_BASE_NAME}'
+AC_ARG_WITH(ridir,
+ AS_HELP_STRING([--with-ridir=DIR], [ri documentation [[DATAROOTDIR/ri]]]),
+ [ridir=$withval])
+AC_SUBST(ridir)
+AC_SUBST(RI_BASE_NAME)
+
+AC_ARG_WITH(ruby-version,
+ AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|minor|STR)]),
+ [ruby_version=$withval],
+ [ruby_version=full])
+unset RUBY_LIB_VERSION
+unset RUBY_LIB_VERSION_STYLE
+AS_CASE(["$ruby_version"],
+ [full], [RUBY_LIB_VERSION_STYLE='3 /* full */'],
+ [minor], [RUBY_LIB_VERSION_STYLE='2 /* minor */'])
+if test ${RUBY_LIB_VERSION_STYLE+set}; then
+ {
+ echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
+ echo '#define STRINGIZE(x) x'
+ test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
+ echo '#include "verconf.h"'
+ echo '#include "version.h"'
+ echo 'ruby_version=RUBY_LIB_VERSION'
+ } > conftest.c
+ test -f verconf.h || > verconf.h
+ ruby_version="`$CPP -I. -I"${srcdir}" -I"${srcdir}/include" conftest.c | sed '/^ruby_version=/!d;s/ //g'`"
+ eval $ruby_version
+elif test -z "${ruby_version}"; then
+ AC_MSG_ERROR([No ruby version, No place for bundled libraries])
+else
+ RUBY_LIB_VERSION="\"${ruby_version}\""
+fi
+AC_SUBST(RUBY_LIB_VERSION_STYLE)
+AC_SUBST(RUBY_LIB_VERSION)
+
+AC_ARG_WITH(sitedir,
+ AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]], "no" to disable site directory]),
+ [sitedir=$withval],
+ [sitedir='${rubylibprefix}/site_ruby'])
+sitelibdir='${sitedir}/${ruby_version}'
+
+AC_ARG_WITH(sitearchdir,
+ AS_HELP_STRING([--with-sitearchdir=DIR],
+ [architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]),
+ [sitearchdir=$withval],
+ [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}])
+
+AC_ARG_WITH(vendordir,
+ AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]),
+ [vendordir=$withval],
+ [vendordir='${rubylibprefix}/vendor_ruby'])
+vendorlibdir='${vendordir}/${ruby_version}'
+
+AC_ARG_WITH(vendorarchdir,
+ AS_HELP_STRING([--with-vendorarchdir=DIR],
+ [architecture dependent vendor libraries in DIR [[VENDORDIR/SITEARCH]], "no" to disable vendor directory]),
+ [vendorarchdir=$withval],
+ [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}])
+
+if test "${LOAD_RELATIVE+set}"; then
+ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
+ RUBY_EXEC_PREFIX=''
+fi
+
+AC_SUBST(RUBY_EXEC_PREFIX)
+
+AC_SUBST(libdirname, ${multiarch+arch}libdir)
+AC_SUBST(archlibdir)dnl
+AC_SUBST(sitearchlibdir)dnl
+AC_SUBST(archincludedir)dnl
+AC_SUBST(sitearchincludedir)dnl
+AC_SUBST(arch)dnl
+AC_SUBST(sitearch)dnl
+AC_SUBST(ruby_version)dnl
+AC_SUBST(rubylibdir)dnl
+AC_SUBST(rubyarchdir)dnl
+AC_SUBST(sitedir)dnl
+AC_SUBST(sitelibdir)dnl
+AC_SUBST(sitearchdir)dnl
+AC_SUBST(vendordir)dnl
+AC_SUBST(vendorlibdir)dnl
+AC_SUBST(vendorarchdir)dnl
+
+AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
+
+if test "${universal_binary-no}" = yes ; then
+ arch="universal-${target_os}"
+ AC_CACHE_CHECK(whether __ARCHITECTURE__ is available, rb_cv_architecture_available,
+ AC_TRY_COMPILE([const char arch[] = __ARCHITECTURE__;], [puts(arch);],
+ [rb_cv_architecture_available=yes], [rb_cv_architecture_available=no]))
+ if test "${rb_cv_architecture_available}" = yes; then
+ AC_DEFINE_UNQUOTED(RUBY_PLATFORM_CPU, __ARCHITECTURE__)
+ else
+ for archs in ${universal_archnames}; do
+ cpu=`echo $archs | sed 's/.*=//'`
+ archs=`echo $archs | sed 's/=.*//'`
+ RUBY_DEFINE_IF([defined __${archs}__], RUBY_PLATFORM_CPU, ["${cpu}"])
+ done
+ fi
+ ints='long int short'
+ test "$ac_cv_type_long_long" = yes && ints="'long long' $ints"
+ AC_SUBST(UNIVERSAL_ARCHNAMES, "${universal_archnames}")
+ AC_SUBST(UNIVERSAL_INTS, "${ints}")
+ AC_DEFINE_UNQUOTED(RUBY_PLATFORM_OS, "${target_os}")
+ AC_DEFINE_UNQUOTED(RUBY_ARCH, "universal-"RUBY_PLATFORM_OS)
+ AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "universal."RUBY_PLATFORM_CPU"-"RUBY_PLATFORM_OS)
+else
+ arch="${target_cpu}-${target_os}"
+ AC_DEFINE_UNQUOTED(RUBY_PLATFORM, "${arch}")
+fi
+
+unset sitearch
+AS_CASE(["$target_os"],[mingw*],[sitearch="$target_cpu-$rb_cv_msvcrt"])
+: ${sitearch='${arch}'}
-if test "$prefix" = NONE; then
- prefix=$ac_default_prefix
+AC_ARG_WITH(search-path,
+ AS_HELP_STRING([--with-search-path=DIR], [specify the additional search path]),
+ [search_path=$withval])
+if test "$search_path" != ""; then
+ AC_SUBST(RUBY_SEARCH_PATH, $search_path)
fi
-AC_DEFINE_UNQUOTED(RUBY_LIB, "${prefix}/lib/ruby:.")
-AC_SUBST(archlib)dnl
-archlib="${prefix}/lib/ruby/${host_cpu}-${host_os}"
-AC_DEFINE_UNQUOTED(RUBY_ARCHLIB, "$archlib")
-echo "creating config.h"
-cat confdefs.h > config.h
+AC_ARG_WITH(rubyhdrdir,
+ AS_HELP_STRING([--with-rubyhdrdir=DIR], [core headers in DIR [[INCLUDEDIR/RUBY_BASE_NAME-RUBY_VERSION]]]),
+ [rubyhdrdir=$withval],
+ [rubyhdrdir='${includedir}/${RUBY_VERSION_NAME}'])
+
+AC_ARG_WITH(rubyarchhdrdir,
+ AS_HELP_STRING([--with-rubyarchhdrdir=DIR],
+ [architecture dependent core headers in DIR [[$(rubyhdrdir)/$(arch)]]]),
+ [rubyarchhdrdir=$withval],
+ [rubyarchhdrdir=${multiarch+'${archincludedir}/${RUBY_VERSION_NAME}'}${multiarch-'${rubyhdrdir}/${arch}'}])
+
+AC_ARG_WITH(sitehdrdir,
+ AS_HELP_STRING([--with-sitehdrdir=DIR], [core site headers in DIR [[RUBYHDRDIR/site_ruby]]]),
+ [sitehdrdir=$withval],
+ [sitehdrdir='${rubyhdrdir}/site_ruby'])
+
+AC_ARG_WITH(sitearchhdrdir,
+ AS_HELP_STRING([--with-sitearchhdrdir=DIR],
+ [architecture dependent core site headers in DIR [[RUBYHDRDIR/site_ruby]]]),
+ [sitearchhdrdir=$withval],
+ [sitearchhdrdir=${multiarch+'${sitearchincludedir}/${RUBY_VERSION_NAME}/site_ruby'}${multiarch-'${sitehdrdir}/${sitearch}'}])
+
+AC_ARG_WITH(vendorhdrdir,
+ AS_HELP_STRING([--with-vendorhdrdir=DIR], [core vendor headers in DIR [[RUBYHDRDIR/vendor_ruby]]]),
+ [vendorhdrdir=$withval],
+ [vendorhdrdir='${rubyhdrdir}/vendor_ruby'])
+
+AC_ARG_WITH(vendorarchhdrdir,
+ AS_HELP_STRING([--with-vendorarchhdrdir=DIR],
+ [architecture dependent core vendor headers in DIR [[RUBYHDRDIR/vendor_ruby]]]),
+ [vendorarchhdrdir=$withval],
+ [vendorarchhdrdir=${multiarch+'${sitearchincludedir}/${RUBY_VERSION_NAME}/vendor_ruby'}${multiarch-'${vendorhdrdir}/${sitearch}'}])
+
+AC_SUBST(rubyhdrdir)dnl
+AC_SUBST(sitehdrdir)dnl
+AC_SUBST(vendorhdrdir)dnl
+AC_SUBST(rubyarchhdrdir)dnl
+AC_SUBST(sitearchhdrdir)dnl
+AC_SUBST(vendorarchhdrdir)dnl
+
+AC_ARG_WITH(mantype,
+ AS_HELP_STRING([--with-mantype=TYPE], [specify man page type; TYPE is one of man and doc]),
+ [
+ AS_CASE(["$withval"],
+ [man|doc], [MANTYPE=$withval],
+ [AC_MSG_ERROR(invalid man type: $withval)])
+ ])
+if test -z "$MANTYPE"; then
+ AC_PATH_PROGS(NROFF, nroff awf, /bin/false, "/usr/bin:/usr/ucb")
+ if ${NROFF} -mdoc ${srcdir}/man/ruby.1 >/dev/null 2>&1; then
+ MANTYPE=doc
+ else
+ MANTYPE=man
+ fi
+fi
+AC_SUBST(MANTYPE)
-AC_OUTPUT(Makefile ext/extmk.rb)
+AC_ARG_ENABLE(rubygems,
+ AS_HELP_STRING([--disable-rubygems], [disable rubygems by default]),
+ [enable_rubygems="$enableval"], [enable_rubygems=yes])
+if test x"$enable_rubygems" = xno; then
+ AC_DEFINE(DISABLE_RUBYGEMS, 1)
+ USE_RUBYGEMS=NO
+else
+ USE_RUBYGEMS=YES
+fi
+AC_SUBST(USE_RUBYGEMS)
+
+arch_hdrdir="${EXTOUT}/include/${arch}/ruby"
+AS_MKDIR_P("${arch_hdrdir}")
+config_h="${arch_hdrdir}/config.h"
+guard=INCLUDE_RUBY_CONFIG_H
+{
+ echo "#ifndef $guard"
+ echo "#define $guard 1"
+ grep -v "^#define PACKAGE_" confdefs.h
+ echo "#endif /* $guard */"
+} | tr -d '\015' |
+${srcdir}/tool/ifchange "${config_h}" -
+tr -d '\015' < largefile.h > confdefs.h
+rm largefile.h
+
+BUILTIN_ENCS=["`sed -n -e '/^BUILTIN_ENCS[ ]*=/{' \
+ -e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \
+ -e '}' "${srcdir}/enc/Makefile.in"`"]
+BUILTIN_ENCOBJS=
+for e in $BUILTIN_ENCS; do BUILTIN_ENCOBJS="$BUILTIN_ENCOBJS `basename $e .c`"'.$(OBJEXT)'; done
+AC_SUBST(BUILTIN_ENCOBJS)
+
+BUILTIN_TRANSES=["`sed -n -e '/^BUILTIN_TRANSES[ ]*=/{' \
+ -e s/// -e :l -e '/\\\\$/N' -e 's/\\\\\\n/ /' -e 't l' -e p \
+ -e '}' "${srcdir}/enc/Makefile.in"`"]
+BUILTIN_TRANSSRCS=
+BUILTIN_TRANSOBJS=
+for e in $BUILTIN_TRANSES; do
+ BUILTIN_TRANSSRCS="$BUILTIN_TRANSSRCS `basename $e .trans`"'.c';
+ BUILTIN_TRANSOBJS="$BUILTIN_TRANSOBJS `basename $e .trans`"'.$(OBJEXT)';
+done
+AC_SUBST(BUILTIN_TRANSSRCS)
+AC_SUBST(BUILTIN_TRANSOBJS)
+
+PACKAGE=$RUBY_BASE_NAME
+AC_SUBST(PACKAGE)
+AC_MSG_RESULT($PACKAGE library version = $ruby_version)
+
+AS_CASE([" $CPP "], [*" $CC "*], [CPP=`echo " $CPP " | sed "s| $CC |"' $(CC) |;s/^ *//;s/ *$//'`])
+
+if test x"$firstmf" != x; then
+ AC_CONFIG_FILES($firstmf:$firsttmpl, [], [firstmf="$firstmf" firsttmpl="$firsttmpl"])
+fi
+AC_CONFIG_FILES(Makefile, [
+ tmpmk=confmk$$.tmp
+ {
+ if test ${VCS+set}; then
+ :
+ elif svn info "$srcdir" > /dev/null 2>&1; then
+ VCS='svn'
+ elif test -d "$srcdir/.git/svn"; then
+ VCS='git svn'
+ elif test -d "$srcdir/.git"; then
+ VCS='git'
+ else
+ VCS='echo cannot'
+ fi
+ AS_CASE("$VCS",
+ [svn], [VCSUP='$(VCS) up $(SVNUPOPTIONS)'],
+ ["git svn"], [VCSUP='$(VCS) rebase $(GITSVNREBASEOPTIONS)'],
+ [git], [VCSUP='$(VCS) pull $(GITPULLOPTIONS)'],
+ [VCSUP='$(VCS)'])
+ sed '/^MISSING/s/\$U\././g;/^VCS *=/s#@VCS@#'"$VCS"'#;/^VCSUP *=/s#@VCSUP@#'"$VCSUP"'#' Makefile
+ echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)'
+ if test "$gnumake" != yes; then
+ echo ['$(MKFILES): $(srcdir)/common.mk']
+ sed ['s/{\$([^(){}]*)[^{}]*}//g'] ${srcdir}/common.mk
+ else
+ echo 'distclean-local::; @$(RM) GNUmakefile uncommon.mk'
+ fi
+ } > $tmpmk && if ! grep '^ruby:' $tmpmk > /dev/null; then
+ if test "${gnumake}" = yes; then
+ tmpgmk=confgmk$$.tmp
+ {
+ echo "include $tmpmk"
+ echo "-include uncommon.mk"
+ } > $tmpgmk
+ else
+ tmpgmk=$tmpmk
+ fi &&
+ test -z "`${MAKE-make} -f $tmpgmk info-program | grep '^PROGRAM=ruby$'`" &&
+ echo 'ruby: $(PROGRAM);' >> $tmpmk
+ test "$tmpmk" = "$tmpgmk" || rm -f "$tmpgmk"
+ fi && mv -f $tmpmk Makefile],
+[EXEEXT='$EXEEXT' gnumake='$gnumake'])
+
+AC_ARG_WITH([ruby-pc],
+ AC_HELP_STRING([pc file basename]),
+ [ruby_pc="$withval"],
+ [ruby_pc="${RUBY_BASE_NAME}-${MAJOR}.${MINOR}.pc"])
+AC_SUBST(ruby_pc)
+AC_SUBST(exec, [exec])
+
+AC_CONFIG_FILES($ruby_pc:template/ruby.pc.in,
+ [
+ if sed ['s/\$(\([A-Za-z_][A-Za-z0-9_]*\))/${\1}/g;s/@[A-Za-z_][A-Za-z0-9_]*@//'] $ruby_pc > ruby.tmp.pc &&
+ {
+ test -z "$PKG_CONFIG" ||
+ PKG_CONFIG_PATH=. $PKG_CONFIG --print-errors ruby.tmp
+ }
+ then
+ mv -f ruby.tmp.pc $ruby_pc
+ else
+ exit 1
+ fi
+ ],
+ [ruby_pc='$ruby_pc' PKG_CONFIG='$PKG_CONFIG'])
+
+AC_OUTPUT
+}
+}
diff --git a/constant.h b/constant.h
new file mode 100644
index 0000000000..3dc9b8d4ef
--- /dev/null
+++ b/constant.h
@@ -0,0 +1,36 @@
+/**********************************************************************
+
+ constant.h -
+
+ $Author$
+ created at: Sun Nov 15 00:09:33 2009
+
+ Copyright (C) 2009 Yusuke Endoh
+
+**********************************************************************/
+#ifndef CONSTANT_H
+#define CONSTANT_H
+
+typedef enum {
+ CONST_PUBLIC = 0x00,
+ CONST_PRIVATE = 0x01
+} rb_const_flag_t;
+
+typedef struct rb_const_entry_struct {
+ rb_const_flag_t flag;
+ const VALUE value; /* should be mark */
+ const VALUE file; /* should be mark */
+ int line;
+} rb_const_entry_t;
+
+VALUE rb_mod_private_constant(int argc, VALUE *argv, VALUE obj);
+VALUE rb_mod_public_constant(int argc, VALUE *argv, VALUE obj);
+void rb_free_const_table(st_table *tbl);
+VALUE rb_public_const_get(VALUE klass, ID id);
+VALUE rb_public_const_get_at(VALUE klass, ID id);
+VALUE rb_public_const_get_from(VALUE klass, ID id);
+int rb_public_const_defined(VALUE klass, ID id);
+int rb_public_const_defined_at(VALUE klass, ID id);
+int rb_public_const_defined_from(VALUE klass, ID id);
+
+#endif /* CONSTANT_H */
diff --git a/cont.c b/cont.c
new file mode 100644
index 0000000000..3b05f995d4
--- /dev/null
+++ b/cont.c
@@ -0,0 +1,1696 @@
+/**********************************************************************
+
+ cont.c -
+
+ $Author$
+ created at: Thu May 23 09:03:43 2007
+
+ Copyright (C) 2007 Koichi Sasada
+
+**********************************************************************/
+
+#include "ruby/ruby.h"
+#include "internal.h"
+#include "vm_core.h"
+#include "gc.h"
+#include "eval_intern.h"
+
+/* FIBER_USE_NATIVE enables Fiber performance improvement using system
+ * dependent method such as make/setcontext on POSIX system or
+ * CreateFiber() API on Windows.
+ * This hack make Fiber context switch faster (x2 or more).
+ * However, it decrease maximum number of Fiber. For example, on the
+ * 32bit POSIX OS, ten or twenty thousands Fiber can be created.
+ *
+ * Details is reported in the paper "A Fast Fiber Implementation for Ruby 1.9"
+ * in Proc. of 51th Programming Symposium, pp.21--28 (2010) (in Japanese).
+ */
+
+#if !defined(FIBER_USE_NATIVE)
+# if defined(HAVE_GETCONTEXT) && defined(HAVE_SETCONTEXT)
+# if 0
+# elif defined(__NetBSD__)
+/* On our experience, NetBSD doesn't support using setcontext() and pthread
+ * simultaneously. This is because pthread_self(), TLS and other information
+ * are represented by stack pointer (higher bits of stack pointer).
+ * TODO: check such constraint on configure.
+ */
+# define FIBER_USE_NATIVE 0
+# elif defined(__sun)
+/* On Solaris because resuming any Fiber caused SEGV, for some reason.
+ */
+# define FIBER_USE_NATIVE 0
+# elif defined(__ia64)
+/* At least, Linux/ia64's getcontext(3) doesn't save register window.
+ */
+# define FIBER_USE_NATIVE 0
+# elif defined(__GNU__)
+/* GNU/Hurd doesn't fully support getcontext, setcontext, makecontext
+ * and swapcontext functions. Disabling their usage till support is
+ * implemented. More info at
+ * http://darnassus.sceen.net/~hurd-web/open_issues/glibc/#getcontext
+ */
+# define FIBER_USE_NATIVE 0
+# else
+# define FIBER_USE_NATIVE 1
+# endif
+# elif defined(_WIN32)
+# if _WIN32_WINNT >= 0x0400
+/* only when _WIN32_WINNT >= 0x0400 on Windows because Fiber APIs are
+ * supported only such building (and running) environments.
+ * [ruby-dev:41192]
+ */
+# define FIBER_USE_NATIVE 1
+# endif
+# endif
+#endif
+#if !defined(FIBER_USE_NATIVE)
+#define FIBER_USE_NATIVE 0
+#endif
+
+#if FIBER_USE_NATIVE
+#ifndef _WIN32
+#include <unistd.h>
+#include <sys/mman.h>
+#include <ucontext.h>
+#endif
+#define RB_PAGE_SIZE (pagesize)
+#define RB_PAGE_MASK (~(RB_PAGE_SIZE - 1))
+static long pagesize;
+#endif /*FIBER_USE_NATIVE*/
+
+#define CAPTURE_JUST_VALID_VM_STACK 1
+
+enum context_type {
+ CONTINUATION_CONTEXT = 0,
+ FIBER_CONTEXT = 1,
+ ROOT_FIBER_CONTEXT = 2
+};
+
+typedef struct rb_context_struct {
+ enum context_type type;
+ VALUE self;
+ int argc;
+ VALUE value;
+ VALUE *vm_stack;
+#ifdef CAPTURE_JUST_VALID_VM_STACK
+ size_t vm_stack_slen; /* length of stack (head of th->stack) */
+ size_t vm_stack_clen; /* length of control frames (tail of th->stack) */
+#endif
+ struct {
+ VALUE *stack;
+ VALUE *stack_src;
+ size_t stack_size;
+#ifdef __ia64
+ VALUE *register_stack;
+ VALUE *register_stack_src;
+ int register_stack_size;
+#endif
+ } machine;
+ rb_thread_t saved_thread;
+ rb_jmpbuf_t jmpbuf;
+ rb_ensure_entry_t *ensure_array;
+ rb_ensure_list_t *ensure_list;
+} rb_context_t;
+
+enum fiber_status {
+ CREATED,
+ RUNNING,
+ TERMINATED
+};
+
+#if FIBER_USE_NATIVE && !defined(_WIN32)
+#define MAX_MACHINE_STACK_CACHE 10
+static int machine_stack_cache_index = 0;
+typedef struct machine_stack_cache_struct {
+ void *ptr;
+ size_t size;
+} machine_stack_cache_t;
+static machine_stack_cache_t machine_stack_cache[MAX_MACHINE_STACK_CACHE];
+static machine_stack_cache_t terminated_machine_stack;
+#endif
+
+typedef struct rb_fiber_struct {
+ rb_context_t cont;
+ VALUE prev;
+ enum fiber_status status;
+ struct rb_fiber_struct *prev_fiber;
+ struct rb_fiber_struct *next_fiber;
+ /* If a fiber invokes "transfer",
+ * then this fiber can't "resume" any more after that.
+ * You shouldn't mix "transfer" and "resume".
+ */
+ int transfered;
+
+#if FIBER_USE_NATIVE
+#ifdef _WIN32
+ void *fib_handle;
+#else
+ ucontext_t context;
+#endif
+#endif
+} rb_fiber_t;
+
+static const rb_data_type_t cont_data_type, fiber_data_type;
+static VALUE rb_cContinuation;
+static VALUE rb_cFiber;
+static VALUE rb_eFiberError;
+
+#define GetContPtr(obj, ptr) \
+ TypedData_Get_Struct((obj), rb_context_t, &cont_data_type, (ptr))
+
+#define GetFiberPtr(obj, ptr) do {\
+ TypedData_Get_Struct((obj), rb_fiber_t, &fiber_data_type, (ptr)); \
+ if (!(ptr)) rb_raise(rb_eFiberError, "uninitialized fiber"); \
+} while (0)
+
+NOINLINE(static VALUE cont_capture(volatile int *stat));
+
+#define THREAD_MUST_BE_RUNNING(th) do { \
+ if (!(th)->tag) rb_raise(rb_eThreadError, "not running thread"); \
+ } while (0)
+
+static void
+cont_mark(void *ptr)
+{
+ RUBY_MARK_ENTER("cont");
+ if (ptr) {
+ rb_context_t *cont = ptr;
+ rb_gc_mark(cont->value);
+ rb_thread_mark(&cont->saved_thread);
+ rb_gc_mark(cont->saved_thread.self);
+
+ if (cont->vm_stack) {
+#ifdef CAPTURE_JUST_VALID_VM_STACK
+ rb_gc_mark_locations(cont->vm_stack,
+ cont->vm_stack + cont->vm_stack_slen + cont->vm_stack_clen);
+#else
+ rb_gc_mark_localtion(cont->vm_stack,
+ cont->vm_stack, cont->saved_thread.stack_size);
+#endif
+ }
+
+ if (cont->machine.stack) {
+ if (cont->type == CONTINUATION_CONTEXT) {
+ /* cont */
+ rb_gc_mark_locations(cont->machine.stack,
+ cont->machine.stack + cont->machine.stack_size);
+ }
+ else {
+ /* fiber */
+ rb_thread_t *th;
+ rb_fiber_t *fib = (rb_fiber_t*)cont;
+ GetThreadPtr(cont->saved_thread.self, th);
+ if ((th->fiber != cont->self) && fib->status == RUNNING) {
+ rb_gc_mark_locations(cont->machine.stack,
+ cont->machine.stack + cont->machine.stack_size);
+ }
+ }
+ }
+#ifdef __ia64
+ if (cont->machine.register_stack) {
+ rb_gc_mark_locations(cont->machine.register_stack,
+ cont->machine.register_stack + cont->machine.register_stack_size);
+ }
+#endif
+ }
+ RUBY_MARK_LEAVE("cont");
+}
+
+static void
+cont_free(void *ptr)
+{
+ RUBY_FREE_ENTER("cont");
+ if (ptr) {
+ rb_context_t *cont = ptr;
+ RUBY_FREE_UNLESS_NULL(cont->saved_thread.stack); fflush(stdout);
+#if FIBER_USE_NATIVE
+ if (cont->type == CONTINUATION_CONTEXT) {
+ /* cont */
+ ruby_xfree(cont->ensure_array);
+ RUBY_FREE_UNLESS_NULL(cont->machine.stack);
+ }
+ else {
+ /* fiber */
+#ifdef _WIN32
+ if (GET_THREAD()->fiber != cont->self && cont->type != ROOT_FIBER_CONTEXT) {
+ /* don't delete root fiber handle */
+ rb_fiber_t *fib = (rb_fiber_t*)cont;
+ if (fib->fib_handle) {
+ DeleteFiber(fib->fib_handle);
+ }
+ }
+#else /* not WIN32 */
+ if (GET_THREAD()->fiber != cont->self) {
+ rb_fiber_t *fib = (rb_fiber_t*)cont;
+ if (fib->context.uc_stack.ss_sp) {
+ if (cont->type == ROOT_FIBER_CONTEXT) {
+ rb_bug("Illegal root fiber parameter");
+ }
+ munmap((void*)fib->context.uc_stack.ss_sp, fib->context.uc_stack.ss_size);
+ }
+ }
+ else {
+ /* It may reached here when finalize */
+ /* TODO examine whether it is a bug */
+ /* rb_bug("cont_free: release self"); */
+ }
+#endif
+ }
+#else /* not FIBER_USE_NATIVE */
+ ruby_xfree(cont->ensure_array);
+ RUBY_FREE_UNLESS_NULL(cont->machine.stack);
+#endif
+#ifdef __ia64
+ RUBY_FREE_UNLESS_NULL(cont->machine.register_stack);
+#endif
+ RUBY_FREE_UNLESS_NULL(cont->vm_stack);
+
+ /* free rb_cont_t or rb_fiber_t */
+ ruby_xfree(ptr);
+ }
+ RUBY_FREE_LEAVE("cont");
+}
+
+static size_t
+cont_memsize(const void *ptr)
+{
+ const rb_context_t *cont = ptr;
+ size_t size = 0;
+ if (cont) {
+ size = sizeof(*cont);
+ if (cont->vm_stack) {
+#ifdef CAPTURE_JUST_VALID_VM_STACK
+ size_t n = (cont->vm_stack_slen + cont->vm_stack_clen);
+#else
+ size_t n = cont->saved_thread.stack_size;
+#endif
+ size += n * sizeof(*cont->vm_stack);
+ }
+
+ if (cont->machine.stack) {
+ size += cont->machine.stack_size * sizeof(*cont->machine.stack);
+ }
+#ifdef __ia64
+ if (cont->machine.register_stack) {
+ size += cont->machine.register_stack_size * sizeof(*cont->machine.register_stack);
+ }
+#endif
+ }
+ return size;
+}
+
+static void
+fiber_mark(void *ptr)
+{
+ RUBY_MARK_ENTER("cont");
+ if (ptr) {
+ rb_fiber_t *fib = ptr;
+ rb_gc_mark(fib->prev);
+ cont_mark(&fib->cont);
+ }
+ RUBY_MARK_LEAVE("cont");
+}
+
+static void
+fiber_link_join(rb_fiber_t *fib)
+{
+ VALUE current_fibval = rb_fiber_current();
+ rb_fiber_t *current_fib;
+ GetFiberPtr(current_fibval, current_fib);
+
+ /* join fiber link */
+ fib->next_fiber = current_fib->next_fiber;
+ fib->prev_fiber = current_fib;
+ current_fib->next_fiber->prev_fiber = fib;
+ current_fib->next_fiber = fib;
+}
+
+static void
+fiber_link_remove(rb_fiber_t *fib)
+{
+ fib->prev_fiber->next_fiber = fib->next_fiber;
+ fib->next_fiber->prev_fiber = fib->prev_fiber;
+}
+
+static void
+fiber_free(void *ptr)
+{
+ RUBY_FREE_ENTER("fiber");
+ if (ptr) {
+ rb_fiber_t *fib = ptr;
+ if (fib->cont.type != ROOT_FIBER_CONTEXT &&
+ fib->cont.saved_thread.local_storage) {
+ st_free_table(fib->cont.saved_thread.local_storage);
+ }
+ fiber_link_remove(fib);
+
+ cont_free(&fib->cont);
+ }
+ RUBY_FREE_LEAVE("fiber");
+}
+
+static size_t
+fiber_memsize(const void *ptr)
+{
+ const rb_fiber_t *fib = ptr;
+ size_t size = 0;
+ if (ptr) {
+ size = sizeof(*fib);
+ if (fib->cont.type != ROOT_FIBER_CONTEXT &&
+ fib->cont.saved_thread.local_storage != NULL) {
+ size += st_memsize(fib->cont.saved_thread.local_storage);
+ }
+ size += cont_memsize(&fib->cont);
+ }
+ return size;
+}
+
+VALUE
+rb_obj_is_fiber(VALUE obj)
+{
+ if (rb_typeddata_is_kind_of(obj, &fiber_data_type)) {
+ return Qtrue;
+ }
+ else {
+ return Qfalse;
+ }
+}
+
+static void
+cont_save_machine_stack(rb_thread_t *th, rb_context_t *cont)
+{
+ size_t size;
+
+ SET_MACHINE_STACK_END(&th->machine.stack_end);
+#ifdef __ia64
+ th->machine.register_stack_end = rb_ia64_bsp();
+#endif
+
+ if (th->machine.stack_start > th->machine.stack_end) {
+ size = cont->machine.stack_size = th->machine.stack_start - th->machine.stack_end;
+ cont->machine.stack_src = th->machine.stack_end;
+ }
+ else {
+ size = cont->machine.stack_size = th->machine.stack_end - th->machine.stack_start;
+ cont->machine.stack_src = th->machine.stack_start;
+ }
+
+ if (cont->machine.stack) {
+ REALLOC_N(cont->machine.stack, VALUE, size);
+ }
+ else {
+ cont->machine.stack = ALLOC_N(VALUE, size);
+ }
+
+ FLUSH_REGISTER_WINDOWS;
+ MEMCPY(cont->machine.stack, cont->machine.stack_src, VALUE, size);
+
+#ifdef __ia64
+ rb_ia64_flushrs();
+ size = cont->machine.register_stack_size = th->machine.register_stack_end - th->machine.register_stack_start;
+ cont->machine.register_stack_src = th->machine.register_stack_start;
+ if (cont->machine.register_stack) {
+ REALLOC_N(cont->machine.register_stack, VALUE, size);
+ }
+ else {
+ cont->machine.register_stack = ALLOC_N(VALUE, size);
+ }
+
+ MEMCPY(cont->machine.register_stack, cont->machine.register_stack_src, VALUE, size);
+#endif
+}
+
+static const rb_data_type_t cont_data_type = {
+ "continuation",
+ {cont_mark, cont_free, cont_memsize,},
+ NULL, NULL, RUBY_TYPED_FREE_IMMEDIATELY
+};
+
+static void
+cont_save_thread(rb_context_t *cont, rb_thread_t *th)
+{
+ /* save thread context */
+ cont->saved_thread = *th;
+ /* saved_thread->machine.stack_(start|end) should be NULL */
+ /* because it may happen GC afterward */
+ cont->saved_thread.machine.stack_start = 0;
+ cont->saved_thread.machine.stack_end = 0;
+#ifdef __ia64
+ cont->saved_thread.machine.register_stack_start = 0;
+ cont->saved_thread.machine.register_stack_end = 0;
+#endif
+}
+
+static void
+cont_init(rb_context_t *cont, rb_thread_t *th)
+{
+ /* save thread context */
+ cont_save_thread(cont, th);
+ cont->saved_thread.local_storage = 0;
+}
+
+static rb_context_t *
+cont_new(VALUE klass)
+{
+ rb_context_t *cont;
+ volatile VALUE contval;
+ rb_thread_t *th = GET_THREAD();
+
+ THREAD_MUST_BE_RUNNING(th);
+ contval = TypedData_Make_Struct(klass, rb_context_t, &cont_data_type, cont);
+ cont->self = contval;
+ cont_init(cont, th);
+ return cont;
+}
+
+static VALUE
+cont_capture(volatile int *stat)
+{
+ rb_context_t *cont;
+ rb_thread_t *th = GET_THREAD(), *sth;
+ volatile VALUE contval;
+
+ THREAD_MUST_BE_RUNNING(th);
+ rb_vm_stack_to_heap(th);
+ cont = cont_new(rb_cContinuation);
+ contval = cont->self;
+ sth = &cont->saved_thread;
+
+#ifdef CAPTURE_JUST_VALID_VM_STACK
+ cont->vm_stack_slen = th->cfp->sp + th->mark_stack_len - th->stack;
+ cont->vm_stack_clen = th->stack + th->stack_size - (VALUE*)th->cfp;
+ cont->vm_stack = ALLOC_N(VALUE, cont->vm_stack_slen + cont->vm_stack_clen);
+ MEMCPY(cont->vm_stack, th->stack, VALUE, cont->vm_stack_slen);
+ MEMCPY(cont->vm_stack + cont->vm_stack_slen, (VALUE*)th->cfp, VALUE, cont->vm_stack_clen);
+#else
+ cont->vm_stack = ALLOC_N(VALUE, th->stack_size);
+ MEMCPY(cont->vm_stack, th->stack, VALUE, th->stack_size);
+#endif
+ sth->stack = 0;
+
+ cont_save_machine_stack(th, cont);
+
+ /* backup ensure_list to array for search in another context */
+ {
+ rb_ensure_list_t *p;
+ int size = 0;
+ rb_ensure_entry_t *entry;
+ for (p=th->ensure_list; p; p=p->next)
+ size++;
+ entry = cont->ensure_array = ALLOC_N(rb_ensure_entry_t,size+1);
+ for (p=th->ensure_list; p; p=p->next) {
+ if (!p->entry.marker)
+ p->entry.marker = rb_ary_tmp_new(0); /* dummy object */
+ *entry++ = p->entry;
+ }
+ entry->marker = 0;
+ }
+
+ if (ruby_setjmp(cont->jmpbuf)) {
+ volatile VALUE value;
+
+ value = cont->value;
+ if (cont->argc == -1) rb_exc_raise(value);
+ cont->value = Qnil;
+ *stat = 1;
+ return value;
+ }
+ else {
+ *stat = 0;
+ return contval;
+ }
+}
+
+static void
+cont_restore_thread(rb_context_t *cont)
+{
+ rb_thread_t *th = GET_THREAD(), *sth = &cont->saved_thread;
+
+ /* restore thread context */
+ if (cont->type == CONTINUATION_CONTEXT) {
+ /* continuation */
+ VALUE fib;
+
+ th->fiber = sth->fiber;
+ fib = th->fiber ? th->fiber : th->root_fiber;
+
+ if (fib) {
+ rb_fiber_t *fcont;
+ GetFiberPtr(fib, fcont);
+ th->stack_size = fcont->cont.saved_thread.stack_size;
+ th->stack = fcont->cont.saved_thread.stack;
+ }
+#ifdef CAPTURE_JUST_VALID_VM_STACK
+ MEMCPY(th->stack, cont->vm_stack, VALUE, cont->vm_stack_slen);
+ MEMCPY(th->stack + sth->stack_size - cont->vm_stack_clen,
+ cont->vm_stack + cont->vm_stack_slen, VALUE, cont->vm_stack_clen);
+#else
+ MEMCPY(th->stack, cont->vm_stack, VALUE, sth->stack_size);
+#endif
+ }
+ else {
+ /* fiber */
+ th->stack = sth->stack;
+ th->stack_size = sth->stack_size;
+ th->local_storage = sth->local_storage;
+ th->fiber = cont->self;
+ }
+
+ th->cfp = sth->cfp;
+ th->safe_level = sth->safe_level;
+ th->raised_flag = sth->raised_flag;
+ th->state = sth->state;
+ th->status = sth->status;
+ th->tag = sth->tag;
+ th->protect_tag = sth->protect_tag;
+ th->errinfo = sth->errinfo;
+ th->first_proc = sth->first_proc;
+ th->root_lep = sth->root_lep;
+ th->root_svar = sth->root_svar;
+ th->ensure_list = sth->ensure_list;
+
+}
+
+#if FIBER_USE_NATIVE
+#ifdef _WIN32
+static void
+fiber_set_stack_location(void)
+{
+ rb_thread_t *th = GET_THREAD();
+ VALUE *ptr;
+
+ SET_MACHINE_STACK_END(&ptr);
+ th->machine.stack_start = (void*)(((VALUE)ptr & RB_PAGE_MASK) + STACK_UPPER((void *)&ptr, 0, RB_PAGE_SIZE));
+}
+
+static VOID CALLBACK
+fiber_entry(void *arg)
+{
+ fiber_set_stack_location();
+ rb_fiber_start();
+}
+#else /* _WIN32 */
+
+/*
+ * FreeBSD require a first (i.e. addr) argument of mmap(2) is not NULL
+ * if MAP_STACK is passed.
+ * http://www.FreeBSD.org/cgi/query-pr.cgi?pr=158755
+ */
+#if defined(MAP_STACK) && !defined(__FreeBSD__) && !defined(__FreeBSD_kernel__)
+#define FIBER_STACK_FLAGS (MAP_PRIVATE | MAP_ANON | MAP_STACK)
+#else
+#define FIBER_STACK_FLAGS (MAP_PRIVATE | MAP_ANON)
+#endif
+
+static char*
+fiber_machine_stack_alloc(size_t size)
+{
+ char *ptr;
+
+ if (machine_stack_cache_index > 0) {
+ if (machine_stack_cache[machine_stack_cache_index - 1].size == (size / sizeof(VALUE))) {
+ ptr = machine_stack_cache[machine_stack_cache_index - 1].ptr;
+ machine_stack_cache_index--;
+ machine_stack_cache[machine_stack_cache_index].ptr = NULL;
+ machine_stack_cache[machine_stack_cache_index].size = 0;
+ }
+ else{
+ /* TODO handle multiple machine stack size */
+ rb_bug("machine_stack_cache size is not canonicalized");
+ }
+ }
+ else {
+ void *page;
+ STACK_GROW_DIR_DETECTION;
+
+ errno = 0;
+ ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, FIBER_STACK_FLAGS, -1, 0);
+ if (ptr == MAP_FAILED) {
+ rb_raise(rb_eFiberError, "can't alloc machine stack to fiber: %s", strerror(errno));
+ }
+
+ /* guard page setup */
+ page = ptr + STACK_DIR_UPPER(size - RB_PAGE_SIZE, 0);
+ if (mprotect(page, RB_PAGE_SIZE, PROT_NONE) < 0) {
+ rb_raise(rb_eFiberError, "mprotect failed");
+ }
+ }
+
+ return ptr;
+}
+#endif
+
+static void
+fiber_initialize_machine_stack_context(rb_fiber_t *fib, size_t size)
+{
+ rb_thread_t *sth = &fib->cont.saved_thread;
+
+#ifdef _WIN32
+ fib->fib_handle = CreateFiberEx(size - 1, size, 0, fiber_entry, NULL);
+ if (!fib->fib_handle) {
+ /* try to release unnecessary fibers & retry to create */
+ rb_gc();
+ fib->fib_handle = CreateFiberEx(size - 1, size, 0, fiber_entry, NULL);
+ if (!fib->fib_handle) {
+ rb_raise(rb_eFiberError, "can't create fiber");
+ }
+ }
+ sth->machine.stack_maxsize = size;
+#else /* not WIN32 */
+ ucontext_t *context = &fib->context;
+ char *ptr;
+ STACK_GROW_DIR_DETECTION;
+
+ getcontext(context);
+ ptr = fiber_machine_stack_alloc(size);
+ context->uc_link = NULL;
+ context->uc_stack.ss_sp = ptr;
+ context->uc_stack.ss_size = size;
+ makecontext(context, rb_fiber_start, 0);
+ sth->machine.stack_start = (VALUE*)(ptr + STACK_DIR_UPPER(0, size));
+ sth->machine.stack_maxsize = size - RB_PAGE_SIZE;
+#endif
+#ifdef __ia64
+ sth->machine.register_stack_maxsize = sth->machine.stack_maxsize;
+#endif
+}
+
+NOINLINE(static void fiber_setcontext(rb_fiber_t *newfib, rb_fiber_t *oldfib));
+
+static void
+fiber_setcontext(rb_fiber_t *newfib, rb_fiber_t *oldfib)
+{
+ rb_thread_t *th = GET_THREAD(), *sth = &newfib->cont.saved_thread;
+
+ if (newfib->status != RUNNING) {
+ fiber_initialize_machine_stack_context(newfib, th->vm->default_params.fiber_machine_stack_size);
+ }
+
+ /* restore thread context */
+ cont_restore_thread(&newfib->cont);
+ th->machine.stack_maxsize = sth->machine.stack_maxsize;
+ if (sth->machine.stack_end && (newfib != oldfib)) {
+ rb_bug("fiber_setcontext: sth->machine.stack_end has non zero value");
+ }
+
+ /* save oldfib's machine stack */
+ if (oldfib->status != TERMINATED) {
+ STACK_GROW_DIR_DETECTION;
+ SET_MACHINE_STACK_END(&th->machine.stack_end);
+ if (STACK_DIR_UPPER(0, 1)) {
+ oldfib->cont.machine.stack_size = th->machine.stack_start - th->machine.stack_end;
+ oldfib->cont.machine.stack = th->machine.stack_end;
+ }
+ else {
+ oldfib->cont.machine.stack_size = th->machine.stack_end - th->machine.stack_start;
+ oldfib->cont.machine.stack = th->machine.stack_start;
+ }
+ }
+ /* exchange machine_stack_start between oldfib and newfib */
+ oldfib->cont.saved_thread.machine.stack_start = th->machine.stack_start;
+ th->machine.stack_start = sth->machine.stack_start;
+ /* oldfib->machine.stack_end should be NULL */
+ oldfib->cont.saved_thread.machine.stack_end = 0;
+#ifndef _WIN32
+ if (!newfib->context.uc_stack.ss_sp && th->root_fiber != newfib->cont.self) {
+ rb_bug("non_root_fiber->context.uc_stac.ss_sp should not be NULL");
+ }
+#endif
+
+ /* swap machine context */
+#ifdef _WIN32
+ SwitchToFiber(newfib->fib_handle);
+#else
+ swapcontext(&oldfib->context, &newfib->context);
+#endif
+}
+#endif
+
+NOINLINE(NORETURN(static void cont_restore_1(rb_context_t *)));
+
+static void
+cont_restore_1(rb_context_t *cont)
+{
+ cont_restore_thread(cont);
+
+ /* restore machine stack */
+#ifdef _M_AMD64
+ {
+ /* workaround for x64 SEH */
+ jmp_buf buf;
+ setjmp(buf);
+ ((_JUMP_BUFFER*)(&cont->jmpbuf))->Frame =
+ ((_JUMP_BUFFER*)(&buf))->Frame;
+ }
+#endif
+ if (cont->machine.stack_src) {
+ FLUSH_REGISTER_WINDOWS;
+ MEMCPY(cont->machine.stack_src, cont->machine.stack,
+ VALUE, cont->machine.stack_size);
+ }
+
+#ifdef __ia64
+ if (cont->machine.register_stack_src) {
+ MEMCPY(cont->machine.register_stack_src, cont->machine.register_stack,
+ VALUE, cont->machine.register_stack_size);
+ }
+#endif
+
+ ruby_longjmp(cont->jmpbuf, 1);
+}
+
+NORETURN(NOINLINE(static void cont_restore_0(rb_context_t *, VALUE *)));
+
+#ifdef __ia64
+#define C(a) rse_##a##0, rse_##a##1, rse_##a##2, rse_##a##3, rse_##a##4
+#define E(a) rse_##a##0= rse_##a##1= rse_##a##2= rse_##a##3= rse_##a##4
+static volatile int C(a), C(b), C(c), C(d), C(e);
+static volatile int C(f), C(g), C(h), C(i), C(j);
+static volatile int C(k), C(l), C(m), C(n), C(o);
+static volatile int C(p), C(q), C(r), C(s), C(t);
+#if 0
+{/* the above lines make cc-mode.el confused so much */}
+#endif
+int rb_dummy_false = 0;
+NORETURN(NOINLINE(static void register_stack_extend(rb_context_t *, VALUE *, VALUE *)));
+static void
+register_stack_extend(rb_context_t *cont, VALUE *vp, VALUE *curr_bsp)
+{
+ if (rb_dummy_false) {
+ /* use registers as much as possible */
+ E(a) = E(b) = E(c) = E(d) = E(e) =
+ E(f) = E(g) = E(h) = E(i) = E(j) =
+ E(k) = E(l) = E(m) = E(n) = E(o) =
+ E(p) = E(q) = E(r) = E(s) = E(t) = 0;
+ E(a) = E(b) = E(c) = E(d) = E(e) =
+ E(f) = E(g) = E(h) = E(i) = E(j) =
+ E(k) = E(l) = E(m) = E(n) = E(o) =
+ E(p) = E(q) = E(r) = E(s) = E(t) = 0;
+ }
+ if (curr_bsp < cont->machine.register_stack_src+cont->machine.register_stack_size) {
+ register_stack_extend(cont, vp, (VALUE*)rb_ia64_bsp());
+ }
+ cont_restore_0(cont, vp);
+}
+#undef C
+#undef E
+#endif
+
+static void
+cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
+{
+ if (cont->machine.stack_src) {
+#ifdef HAVE_ALLOCA
+#define STACK_PAD_SIZE 1
+#else
+#define STACK_PAD_SIZE 1024
+#endif
+ VALUE space[STACK_PAD_SIZE];
+
+#if !STACK_GROW_DIRECTION
+ if (addr_in_prev_frame > &space[0]) {
+ /* Stack grows downward */
+#endif
+#if STACK_GROW_DIRECTION <= 0
+ volatile VALUE *const end = cont->machine.stack_src;
+ if (&space[0] > end) {
+# ifdef HAVE_ALLOCA
+ volatile VALUE *sp = ALLOCA_N(VALUE, &space[0] - end);
+ space[0] = *sp;
+# else
+ cont_restore_0(cont, &space[0]);
+# endif
+ }
+#endif
+#if !STACK_GROW_DIRECTION
+ }
+ else {
+ /* Stack grows upward */
+#endif
+#if STACK_GROW_DIRECTION >= 0
+ volatile VALUE *const end = cont->machine.stack_src + cont->machine.stack_size;
+ if (&space[STACK_PAD_SIZE] < end) {
+# ifdef HAVE_ALLOCA
+ volatile VALUE *sp = ALLOCA_N(VALUE, end - &space[STACK_PAD_SIZE]);
+ space[0] = *sp;
+# else
+ cont_restore_0(cont, &space[STACK_PAD_SIZE-1]);
+# endif
+ }
+#endif
+#if !STACK_GROW_DIRECTION
+ }
+#endif
+ }
+ cont_restore_1(cont);
+}
+#ifdef __ia64
+#define cont_restore_0(cont, vp) register_stack_extend((cont), (vp), (VALUE*)rb_ia64_bsp())
+#endif
+
+/*
+ * Document-class: Continuation
+ *
+ * Continuation objects are generated by Kernel#callcc,
+ * after having +require+d <i>continuation</i>. They hold
+ * a return address and execution context, allowing a nonlocal return
+ * to the end of the <code>callcc</code> block from anywhere within a
+ * program. Continuations are somewhat analogous to a structured
+ * version of C's <code>setjmp/longjmp</code> (although they contain
+ * more state, so you might consider them closer to threads).
+ *
+ * For instance:
+ *
+ * require "continuation"
+ * arr = [ "Freddie", "Herbie", "Ron", "Max", "Ringo" ]
+ * callcc{|cc| $cc = cc}
+ * puts(message = arr.shift)
+ * $cc.call unless message =~ /Max/
+ *
+ * <em>produces:</em>
+ *
+ * Freddie
+ * Herbie
+ * Ron
+ * Max
+ *
+ * This (somewhat contrived) example allows the inner loop to abandon
+ * processing early:
+ *
+ * require "continuation"
+ * callcc {|cont|
+ * for i in 0..4
+ * print "\n#{i}: "
+ * for j in i*5...(i+1)*5
+ * cont.call() if j == 17
+ * printf "%3d", j
+ * end
+ * end
+ * }
+ * puts
+ *
+ * <em>produces:</em>
+ *
+ * 0: 0 1 2 3 4
+ * 1: 5 6 7 8 9
+ * 2: 10 11 12 13 14
+ * 3: 15 16
+ */
+
+/*
+ * call-seq:
+ * callcc {|cont| block } -> obj
+ *
+ * Generates a Continuation object, which it passes to
+ * the associated block. You need to <code>require
+ * 'continuation'</code> before using this method. Performing a
+ * <em>cont</em><code>.call</code> will cause the #callcc
+ * to return (as will falling through the end of the block). The
+ * value returned by the #callcc is the value of the
+ * block, or the value passed to <em>cont</em><code>.call</code>. See
+ * class Continuation for more details. Also see
+ * Kernel#throw for an alternative mechanism for
+ * unwinding a call stack.
+ */
+
+static VALUE
+rb_callcc(VALUE self)
+{
+ volatile int called;
+ volatile VALUE val = cont_capture(&called);
+
+ if (called) {
+ return val;
+ }
+ else {
+ return rb_yield(val);
+ }
+}
+
+static VALUE
+make_passing_arg(int argc, VALUE *argv)
+{
+ switch (argc) {
+ case 0:
+ return Qnil;
+ case 1:
+ return argv[0];
+ default:
+ return rb_ary_new4(argc, argv);
+ }
+}
+
+/* CAUTION!! : Currently, error in rollback_func is not supported */
+/* same as rb_protect if set rollback_func to NULL */
+void
+ruby_register_rollback_func_for_ensure(VALUE (*ensure_func)(ANYARGS), VALUE (*rollback_func)(ANYARGS))
+{
+ st_table **table_p = &GET_VM()->ensure_rollback_table;
+ if (UNLIKELY(*table_p == NULL)) {
+ *table_p = st_init_numtable();
+ }
+ st_insert(*table_p, (st_data_t)ensure_func, (st_data_t)rollback_func);
+}
+
+static inline VALUE
+lookup_rollback_func(VALUE (*ensure_func)(ANYARGS))
+{
+ st_table *table = GET_VM()->ensure_rollback_table;
+ st_data_t val;
+ if (table && st_lookup(table, (st_data_t)ensure_func, &val))
+ return (VALUE) val;
+ return Qundef;
+}
+
+
+static inline void
+rollback_ensure_stack(VALUE self,rb_ensure_list_t *current,rb_ensure_entry_t *target)
+{
+ rb_ensure_list_t *p;
+ rb_ensure_entry_t *entry;
+ size_t i;
+ size_t cur_size;
+ size_t target_size;
+ size_t base_point;
+ VALUE (*func)(ANYARGS);
+
+ cur_size = 0;
+ for (p=current; p; p=p->next)
+ cur_size++;
+ target_size = 0;
+ for (entry=target; entry->marker; entry++)
+ target_size++;
+
+ /* search common stack point */
+ p = current;
+ base_point = cur_size;
+ while (base_point) {
+ if (target_size >= base_point &&
+ p->entry.marker == target[target_size - base_point].marker)
+ break;
+ base_point --;
+ p = p->next;
+ }
+
+ /* rollback function check */
+ for (i=0; i < target_size - base_point; i++) {
+ if (!lookup_rollback_func(target[i].e_proc)) {
+ rb_raise(rb_eRuntimeError, "continuation called from out of critical rb_ensure scope");
+ }
+ }
+ /* pop ensure stack */
+ while (cur_size > base_point) {
+ /* escape from ensure block */
+ (*current->entry.e_proc)(current->entry.data2);
+ current = current->next;
+ cur_size--;
+ }
+ /* push ensure stack */
+ while (i--) {
+ func = (VALUE (*)(ANYARGS)) lookup_rollback_func(target[i].e_proc);
+ if ((VALUE)func != Qundef) {
+ (*func)(target[i].data2);
+ }
+ }
+}
+
+/*
+ * call-seq:
+ * cont.call(args, ...)
+ * cont[args, ...]
+ *
+ * Invokes the continuation. The program continues from the end of the
+ * <code>callcc</code> block. If no arguments are given, the original
+ * <code>callcc</code> returns <code>nil</code>. If one argument is
+ * given, <code>callcc</code> returns it. Otherwise, an array
+ * containing <i>args</i> is returned.
+ *
+ * callcc {|cont| cont.call } #=> nil
+ * callcc {|cont| cont.call 1 } #=> 1
+ * callcc {|cont| cont.call 1, 2, 3 } #=> [1, 2, 3]
+ */
+
+static VALUE
+rb_cont_call(int argc, VALUE *argv, VALUE contval)
+{
+ rb_context_t *cont;
+ rb_thread_t *th = GET_THREAD();
+ GetContPtr(contval, cont);
+
+ if (cont->saved_thread.self != th->self) {
+ rb_raise(rb_eRuntimeError, "continuation called across threads");
+ }
+ if (cont->saved_thread.protect_tag != th->protect_tag) {
+ rb_raise(rb_eRuntimeError, "continuation called across stack rewinding barrier");
+ }
+ if (cont->saved_thread.fiber) {
+ rb_fiber_t *fcont;
+ GetFiberPtr(cont->saved_thread.fiber, fcont);
+
+ if (th->fiber != cont->saved_thread.fiber) {
+ rb_raise(rb_eRuntimeError, "continuation called across fiber");
+ }
+ }
+ rollback_ensure_stack(contval, th->ensure_list, cont->ensure_array);
+
+ cont->argc = argc;
+ cont->value = make_passing_arg(argc, argv);
+
+ /* restore `tracing' context. see [Feature #4347] */
+ th->trace_arg = cont->saved_thread.trace_arg;
+
+ cont_restore_0(cont, &contval);
+ return Qnil; /* unreachable */
+}
+
+/*********/
+/* fiber */
+/*********/
+
+/*
+ * Document-class: Fiber
+ *
+ * Fibers are primitives for implementing light weight cooperative
+ * concurrency in Ruby. Basically they are a means of creating code blocks
+ * that can be paused and resumed, much like threads. The main difference
+ * is that they are never preempted and that the scheduling must be done by
+ * the programmer and not the VM.
+ *
+ * As opposed to other stackless light weight concurrency models, each fiber
+ * comes with a small 4KB stack. This enables the fiber to be paused from deeply
+ * nested function calls within the fiber block.
+ *
+ * When a fiber is created it will not run automatically. Rather it must be
+ * be explicitly asked to run using the <code>Fiber#resume</code> method.
+ * The code running inside the fiber can give up control by calling
+ * <code>Fiber.yield</code> in which case it yields control back to caller
+ * (the caller of the <code>Fiber#resume</code>).
+ *
+ * Upon yielding or termination the Fiber returns the value of the last
+ * executed expression
+ *
+ * For instance:
+ *
+ * fiber = Fiber.new do
+ * Fiber.yield 1
+ * 2
+ * end
+ *
+ * puts fiber.resume
+ * puts fiber.resume
+ * puts fiber.resume
+ *
+ * <em>produces</em>
+ *
+ * 1
+ * 2
+ * FiberError: dead fiber called
+ *
+ * The <code>Fiber#resume</code> method accepts an arbitrary number of
+ * parameters, if it is the first call to <code>resume</code> then they
+ * will be passed as block arguments. Otherwise they will be the return
+ * value of the call to <code>Fiber.yield</code>
+ *
+ * Example:
+ *
+ * fiber = Fiber.new do |first|
+ * second = Fiber.yield first + 2
+ * end
+ *
+ * puts fiber.resume 10
+ * puts fiber.resume 14
+ * puts fiber.resume 18
+ *
+ * <em>produces</em>
+ *
+ * 12
+ * 14
+ * FiberError: dead fiber called
+ *
+ */
+
+static const rb_data_type_t fiber_data_type = {
+ "fiber",
+ {fiber_mark, fiber_free, fiber_memsize,},
+ NULL, NULL, RUBY_TYPED_FREE_IMMEDIATELY
+};
+
+static VALUE
+fiber_alloc(VALUE klass)
+{
+ return TypedData_Wrap_Struct(klass, &fiber_data_type, 0);
+}
+
+static rb_fiber_t*
+fiber_t_alloc(VALUE fibval)
+{
+ rb_fiber_t *fib;
+ rb_thread_t *th = GET_THREAD();
+
+ if (DATA_PTR(fibval) != 0) {
+ rb_raise(rb_eRuntimeError, "cannot initialize twice");
+ }
+
+ THREAD_MUST_BE_RUNNING(th);
+ fib = ALLOC(rb_fiber_t);
+ memset(fib, 0, sizeof(rb_fiber_t));
+ fib->cont.self = fibval;
+ fib->cont.type = FIBER_CONTEXT;
+ cont_init(&fib->cont, th);
+ fib->prev = Qnil;
+ fib->status = CREATED;
+
+ DATA_PTR(fibval) = fib;
+
+ return fib;
+}
+
+static VALUE
+fiber_init(VALUE fibval, VALUE proc)
+{
+ rb_fiber_t *fib = fiber_t_alloc(fibval);
+ rb_context_t *cont = &fib->cont;
+ rb_thread_t *th = &cont->saved_thread;
+
+ /* initialize cont */
+ cont->vm_stack = 0;
+
+ th->stack = 0;
+ th->stack_size = 0;
+
+ fiber_link_join(fib);
+
+ th->stack_size = th->vm->default_params.fiber_vm_stack_size / sizeof(VALUE);
+ th->stack = ALLOC_N(VALUE, th->stack_size);
+
+ th->cfp = (void *)(th->stack + th->stack_size);
+ th->cfp--;
+ th->cfp->pc = 0;
+ th->cfp->sp = th->stack + 1;
+#if VM_DEBUG_BP_CHECK
+ th->cfp->bp_check = 0;
+#endif
+ th->cfp->ep = th->stack;
+ *th->cfp->ep = VM_ENVVAL_BLOCK_PTR(0);
+ th->cfp->self = Qnil;
+ th->cfp->klass = Qnil;
+ th->cfp->flag = 0;
+ th->cfp->iseq = 0;
+ th->cfp->proc = 0;
+ th->cfp->block_iseq = 0;
+ th->cfp->me = 0;
+ th->tag = 0;
+ th->local_storage = st_init_numtable();
+
+ th->first_proc = proc;
+
+#if !FIBER_USE_NATIVE
+ MEMCPY(&cont->jmpbuf, &th->root_jmpbuf, rb_jmpbuf_t, 1);
+#endif
+
+ return fibval;
+}
+
+/* :nodoc: */
+static VALUE
+rb_fiber_init(VALUE fibval)
+{
+ return fiber_init(fibval, rb_block_proc());
+}
+
+VALUE
+rb_fiber_new(VALUE (*func)(ANYARGS), VALUE obj)
+{
+ return fiber_init(fiber_alloc(rb_cFiber), rb_proc_new(func, obj));
+}
+
+static VALUE
+return_fiber(void)
+{
+ rb_fiber_t *fib;
+ VALUE curr = rb_fiber_current();
+ VALUE prev;
+ GetFiberPtr(curr, fib);
+
+ prev = fib->prev;
+ if (NIL_P(prev)) {
+ const VALUE root_fiber = GET_THREAD()->root_fiber;
+
+ if (root_fiber == curr) {
+ rb_raise(rb_eFiberError, "can't yield from root fiber");
+ }
+ return root_fiber;
+ }
+ else {
+ fib->prev = Qnil;
+ return prev;
+ }
+}
+
+VALUE rb_fiber_transfer(VALUE fib, int argc, VALUE *argv);
+
+static void
+rb_fiber_terminate(rb_fiber_t *fib)
+{
+ VALUE value = fib->cont.value;
+ fib->status = TERMINATED;
+#if FIBER_USE_NATIVE && !defined(_WIN32)
+ /* Ruby must not switch to other thread until storing terminated_machine_stack */
+ terminated_machine_stack.ptr = fib->context.uc_stack.ss_sp;
+ terminated_machine_stack.size = fib->context.uc_stack.ss_size / sizeof(VALUE);
+ fib->context.uc_stack.ss_sp = NULL;
+ fib->cont.machine.stack = NULL;
+ fib->cont.machine.stack_size = 0;
+#endif
+ rb_fiber_transfer(return_fiber(), 1, &value);
+}
+
+void
+rb_fiber_start(void)
+{
+ rb_thread_t *th = GET_THREAD();
+ rb_fiber_t *fib;
+ rb_context_t *cont;
+ rb_proc_t *proc;
+ int state;
+
+ GetFiberPtr(th->fiber, fib);
+ cont = &fib->cont;
+
+ TH_PUSH_TAG(th);
+ if ((state = EXEC_TAG()) == 0) {
+ int argc;
+ const VALUE *argv, args = cont->value;
+ GetProcPtr(cont->saved_thread.first_proc, proc);
+ argv = (argc = cont->argc) > 1 ? RARRAY_CONST_PTR(args) : &args;
+ cont->value = Qnil;
+ th->errinfo = Qnil;
+ th->root_lep = rb_vm_ep_local_ep(proc->block.ep);
+ th->root_svar = Qnil;
+
+ fib->status = RUNNING;
+ cont->value = rb_vm_invoke_proc(th, proc, argc, argv, 0);
+ }
+ TH_POP_TAG();
+
+ if (state) {
+ if (state == TAG_RAISE || state == TAG_FATAL) {
+ rb_threadptr_pending_interrupt_enque(th, th->errinfo);
+ }
+ else {
+ VALUE err = rb_vm_make_jump_tag_but_local_jump(state, th->errinfo);
+ if (!NIL_P(err))
+ rb_threadptr_pending_interrupt_enque(th, err);
+ }
+ RUBY_VM_SET_INTERRUPT(th);
+ }
+
+ rb_fiber_terminate(fib);
+ rb_bug("rb_fiber_start: unreachable");
+}
+
+static rb_fiber_t *
+root_fiber_alloc(rb_thread_t *th)
+{
+ rb_fiber_t *fib;
+ /* no need to allocate vm stack */
+ fib = fiber_t_alloc(fiber_alloc(rb_cFiber));
+ fib->cont.type = ROOT_FIBER_CONTEXT;
+#if FIBER_USE_NATIVE
+#ifdef _WIN32
+ fib->fib_handle = ConvertThreadToFiber(0);
+#endif
+#endif
+ fib->status = RUNNING;
+ fib->prev_fiber = fib->next_fiber = fib;
+
+ return fib;
+}
+
+VALUE
+rb_fiber_current(void)
+{
+ rb_thread_t *th = GET_THREAD();
+ if (th->fiber == 0) {
+ /* save root */
+ rb_fiber_t *fib = root_fiber_alloc(th);
+ th->root_fiber = th->fiber = fib->cont.self;
+ }
+ return th->fiber;
+}
+
+static VALUE
+fiber_store(rb_fiber_t *next_fib)
+{
+ rb_thread_t *th = GET_THREAD();
+ rb_fiber_t *fib;
+
+ if (th->fiber) {
+ GetFiberPtr(th->fiber, fib);
+ cont_save_thread(&fib->cont, th);
+ }
+ else {
+ /* create current fiber */
+ fib = root_fiber_alloc(th);
+ th->root_fiber = th->fiber = fib->cont.self;
+ }
+
+#if !FIBER_USE_NATIVE
+ cont_save_machine_stack(th, &fib->cont);
+#endif
+
+ if (FIBER_USE_NATIVE || ruby_setjmp(fib->cont.jmpbuf)) {
+#if FIBER_USE_NATIVE
+ fiber_setcontext(next_fib, fib);
+#ifndef _WIN32
+ if (terminated_machine_stack.ptr) {
+ if (machine_stack_cache_index < MAX_MACHINE_STACK_CACHE) {
+ machine_stack_cache[machine_stack_cache_index].ptr = terminated_machine_stack.ptr;
+ machine_stack_cache[machine_stack_cache_index].size = terminated_machine_stack.size;
+ machine_stack_cache_index++;
+ }
+ else {
+ if (terminated_machine_stack.ptr != fib->cont.machine.stack) {
+ munmap((void*)terminated_machine_stack.ptr, terminated_machine_stack.size * sizeof(VALUE));
+ }
+ else {
+ rb_bug("terminated fiber resumed");
+ }
+ }
+ terminated_machine_stack.ptr = NULL;
+ terminated_machine_stack.size = 0;
+ }
+#endif
+#endif
+ /* restored */
+ GetFiberPtr(th->fiber, fib);
+ if (fib->cont.argc == -1) rb_exc_raise(fib->cont.value);
+ return fib->cont.value;
+ }
+#if !FIBER_USE_NATIVE
+ else {
+ return Qundef;
+ }
+#endif
+}
+
+static inline VALUE
+fiber_switch(VALUE fibval, int argc, VALUE *argv, int is_resume)
+{
+ VALUE value;
+ rb_fiber_t *fib;
+ rb_context_t *cont;
+ rb_thread_t *th = GET_THREAD();
+
+ GetFiberPtr(fibval, fib);
+ cont = &fib->cont;
+
+ if (th->fiber == fibval) {
+ /* ignore fiber context switch
+ * because destination fiber is same as current fiber
+ */
+ return make_passing_arg(argc, argv);
+ }
+
+ if (cont->saved_thread.self != th->self) {
+ rb_raise(rb_eFiberError, "fiber called across threads");
+ }
+ else if (cont->saved_thread.protect_tag != th->protect_tag) {
+ rb_raise(rb_eFiberError, "fiber called across stack rewinding barrier");
+ }
+ else if (fib->status == TERMINATED) {
+ value = rb_exc_new2(rb_eFiberError, "dead fiber called");
+ if (th->fiber != fibval) {
+ GetFiberPtr(th->fiber, fib);
+ if (fib->status != TERMINATED) rb_exc_raise(value);
+ fibval = th->root_fiber;
+ }
+ else {
+ fibval = fib->prev;
+ if (NIL_P(fibval)) fibval = th->root_fiber;
+ }
+ GetFiberPtr(fibval, fib);
+ cont = &fib->cont;
+ cont->argc = -1;
+ cont->value = value;
+#if FIBER_USE_NATIVE
+ {
+ VALUE oldfibval;
+ rb_fiber_t *oldfib;
+ oldfibval = rb_fiber_current();
+ GetFiberPtr(oldfibval, oldfib);
+ fiber_setcontext(fib, oldfib);
+ }
+#else
+ cont_restore_0(cont, &value);
+#endif
+ }
+
+ if (is_resume) {
+ fib->prev = rb_fiber_current();
+ }
+ else {
+ /* restore `tracing' context. see [Feature #4347] */
+ th->trace_arg = cont->saved_thread.trace_arg;
+ }
+
+ cont->argc = argc;
+ cont->value = make_passing_arg(argc, argv);
+
+ value = fiber_store(fib);
+#if !FIBER_USE_NATIVE
+ if (value == Qundef) {
+ cont_restore_0(cont, &value);
+ rb_bug("rb_fiber_resume: unreachable");
+ }
+#endif
+ RUBY_VM_CHECK_INTS(th);
+
+ return value;
+}
+
+VALUE
+rb_fiber_transfer(VALUE fib, int argc, VALUE *argv)
+{
+ return fiber_switch(fib, argc, argv, 0);
+}
+
+VALUE
+rb_fiber_resume(VALUE fibval, int argc, VALUE *argv)
+{
+ rb_fiber_t *fib;
+ GetFiberPtr(fibval, fib);
+
+ if (fib->prev != Qnil || fib->cont.type == ROOT_FIBER_CONTEXT) {
+ rb_raise(rb_eFiberError, "double resume");
+ }
+ if (fib->transfered != 0) {
+ rb_raise(rb_eFiberError, "cannot resume transferred Fiber");
+ }
+
+ return fiber_switch(fibval, argc, argv, 1);
+}
+
+VALUE
+rb_fiber_yield(int argc, VALUE *argv)
+{
+ return rb_fiber_transfer(return_fiber(), argc, argv);
+}
+
+void
+rb_fiber_reset_root_local_storage(VALUE thval)
+{
+ rb_thread_t *th;
+ rb_fiber_t *fib;
+
+ GetThreadPtr(thval, th);
+ if (th->root_fiber && th->root_fiber != th->fiber) {
+ GetFiberPtr(th->root_fiber, fib);
+ th->local_storage = fib->cont.saved_thread.local_storage;
+ }
+}
+
+/*
+ * call-seq:
+ * fiber.alive? -> true or false
+ *
+ * Returns true if the fiber can still be resumed (or transferred
+ * to). After finishing execution of the fiber block this method will
+ * always return false. You need to <code>require 'fiber'</code>
+ * before using this method.
+ */
+VALUE
+rb_fiber_alive_p(VALUE fibval)
+{
+ rb_fiber_t *fib;
+ GetFiberPtr(fibval, fib);
+ return fib->status != TERMINATED ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq:
+ * fiber.resume(args, ...) -> obj
+ *
+ * Resumes the fiber from the point at which the last <code>Fiber.yield</code>
+ * was called, or starts running it if it is the first call to
+ * <code>resume</code>. Arguments passed to resume will be the value of
+ * the <code>Fiber.yield</code> expression or will be passed as block
+ * parameters to the fiber's block if this is the first <code>resume</code>.
+ *
+ * Alternatively, when resume is called it evaluates to the arguments passed
+ * to the next <code>Fiber.yield</code> statement inside the fiber's block
+ * or to the block value if it runs to completion without any
+ * <code>Fiber.yield</code>
+ */
+static VALUE
+rb_fiber_m_resume(int argc, VALUE *argv, VALUE fib)
+{
+ return rb_fiber_resume(fib, argc, argv);
+}
+
+/*
+ * call-seq:
+ * fiber.transfer(args, ...) -> obj
+ *
+ * Transfer control to another fiber, resuming it from where it last
+ * stopped or starting it if it was not resumed before. The calling
+ * fiber will be suspended much like in a call to
+ * <code>Fiber.yield</code>. You need to <code>require 'fiber'</code>
+ * before using this method.
+ *
+ * The fiber which receives the transfer call is treats it much like
+ * a resume call. Arguments passed to transfer are treated like those
+ * passed to resume.
+ *
+ * You cannot resume a fiber that transferred control to another one.
+ * This will cause a double resume error. You need to transfer control
+ * back to this fiber before it can yield and resume.
+ *
+ * Example:
+ *
+ * fiber1 = Fiber.new do
+ * puts "In Fiber 1"
+ * Fiber.yield
+ * end
+ *
+ * fiber2 = Fiber.new do
+ * puts "In Fiber 2"
+ * fiber1.transfer
+ * puts "Never see this message"
+ * end
+ *
+ * fiber3 = Fiber.new do
+ * puts "In Fiber 3"
+ * end
+ *
+ * fiber2.resume
+ * fiber3.resume
+ *
+ * <em>produces</em>
+ *
+ * In fiber 2
+ * In fiber 1
+ * In fiber 3
+ *
+ */
+static VALUE
+rb_fiber_m_transfer(int argc, VALUE *argv, VALUE fibval)
+{
+ rb_fiber_t *fib;
+ GetFiberPtr(fibval, fib);
+ fib->transfered = 1;
+ return rb_fiber_transfer(fibval, argc, argv);
+}
+
+/*
+ * call-seq:
+ * Fiber.yield(args, ...) -> obj
+ *
+ * Yields control back to the context that resumed the fiber, passing
+ * along any arguments that were passed to it. The fiber will resume
+ * processing at this point when <code>resume</code> is called next.
+ * Any arguments passed to the next <code>resume</code> will be the
+ * value that this <code>Fiber.yield</code> expression evaluates to.
+ */
+static VALUE
+rb_fiber_s_yield(int argc, VALUE *argv, VALUE klass)
+{
+ return rb_fiber_yield(argc, argv);
+}
+
+/*
+ * call-seq:
+ * Fiber.current() -> fiber
+ *
+ * Returns the current fiber. You need to <code>require 'fiber'</code>
+ * before using this method. If you are not running in the context of
+ * a fiber this method will return the root fiber.
+ */
+static VALUE
+rb_fiber_s_current(VALUE klass)
+{
+ return rb_fiber_current();
+}
+
+
+
+/*
+ * Document-class: FiberError
+ *
+ * Raised when an invalid operation is attempted on a Fiber, in
+ * particular when attempting to call/resume a dead fiber,
+ * attempting to yield from the root fiber, or calling a fiber across
+ * threads.
+ *
+ * fiber = Fiber.new{}
+ * fiber.resume #=> nil
+ * fiber.resume #=> FiberError: dead fiber called
+ */
+
+void
+Init_Cont(void)
+{
+#if FIBER_USE_NATIVE
+ rb_thread_t *th = GET_THREAD();
+
+#ifdef _WIN32
+ SYSTEM_INFO info;
+ GetSystemInfo(&info);
+ pagesize = info.dwPageSize;
+#else /* not WIN32 */
+ pagesize = sysconf(_SC_PAGESIZE);
+#endif
+ SET_MACHINE_STACK_END(&th->machine.stack_end);
+#endif
+
+ rb_cFiber = rb_define_class("Fiber", rb_cObject);
+ rb_define_alloc_func(rb_cFiber, fiber_alloc);
+ rb_eFiberError = rb_define_class("FiberError", rb_eStandardError);
+ rb_define_singleton_method(rb_cFiber, "yield", rb_fiber_s_yield, -1);
+ rb_define_method(rb_cFiber, "initialize", rb_fiber_init, 0);
+ rb_define_method(rb_cFiber, "resume", rb_fiber_m_resume, -1);
+}
+
+RUBY_SYMBOL_EXPORT_BEGIN
+
+void
+ruby_Init_Continuation_body(void)
+{
+ rb_cContinuation = rb_define_class("Continuation", rb_cObject);
+ rb_undef_alloc_func(rb_cContinuation);
+ rb_undef_method(CLASS_OF(rb_cContinuation), "new");
+ rb_define_method(rb_cContinuation, "call", rb_cont_call, -1);
+ rb_define_method(rb_cContinuation, "[]", rb_cont_call, -1);
+ rb_define_global_function("callcc", rb_callcc, 0);
+}
+
+void
+ruby_Init_Fiber_as_Coroutine(void)
+{
+ rb_define_method(rb_cFiber, "transfer", rb_fiber_m_transfer, -1);
+ rb_define_method(rb_cFiber, "alive?", rb_fiber_alive_p, 0);
+ rb_define_singleton_method(rb_cFiber, "current", rb_fiber_s_current, 0);
+}
+
+RUBY_SYMBOL_EXPORT_END
diff --git a/cygwin/GNUmakefile.in b/cygwin/GNUmakefile.in
new file mode 100644
index 0000000000..5bd414d786
--- /dev/null
+++ b/cygwin/GNUmakefile.in
@@ -0,0 +1,109 @@
+include Makefile
+
+ENABLE_SHARED=@ENABLE_SHARED@
+DLLWRAP = @DLLWRAP@ --target=@target_os@ --driver-name="$(CC)"
+WINDRES = @WINDRES@ --preprocessor="$(CPP) -xc" -DRC_INVOKED
+
+ifeq (@target_os@,cygwin)
+ DLL_BASE_NAME := $(LIBRUBY_SO:.dll=)
+else
+ DLL_BASE_NAME := $(RUBY_SO_NAME)
+ DLLWRAP += -mno-cygwin
+ VPATH := $(VPATH):$(srcdir)/win32
+ STUBPROGRAM = rubystub$(EXEEXT)
+ IGNOREDPATTERNS = %~ .% %.orig %.rej \#%\#
+ SCRIPTPROGRAMS = $(addsuffix $(EXEEXT),$(filter-out $(IGNOREDPATTERNS),$(notdir $(wildcard $(srcdir)/bin/*))))
+endif
+
+ifneq ($(ENABLE_SHARED),yes)
+ RUBY_EXP = $(RUBY_INSTALL_NAME).exp
+ EXTOBJS = $(RUBY_EXP)
+ LIBRUBYARG = $(LIBRUBY_A)
+ LIBRUBY_SO =
+endif
+
+ifeq ($(RUBY_INSTALL_NAME),ruby)
+ RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME)w
+else
+ RUBYW_INSTALL_NAME = $(subst ruby,rubyw,$(RUBY_INSTALL_NAME))
+endif
+
+WPROGRAM = $(RUBYW_INSTALL_NAME)$(EXEEXT)
+
+-include uncommon.mk
+
+SOLIBS := $(DLL_BASE_NAME).res.@OBJEXT@ $(SOLIBS)
+EXTOBJS += $(if $(filter-out $(RUBYW_INSTALL_NAME),$(@:$(EXEEXT)=)),$(RUBY_INSTALL_NAME),$(@:$(EXEEXT)=)).res.$(OBJEXT)
+RCFILES = $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(DLL_BASE_NAME).rc
+RUBYDEF = $(DLL_BASE_NAME).def
+
+ruby: $(PROGRAM)
+rubyw: $(WPROGRAM)
+stub: $(STUBPROGRAM)
+scriptbin: $(SCRIPTPROGRAMS)
+
+%$(EXEEXT): bin/% $(STUBPROGRAM)
+ $(ECHO) generating $@
+ $(Q) { cat $(STUBPROGRAM); echo; sed -e '1{' -e '/^#!.*ruby/!i\' -e '#!/bin/ruby' -e '}' $<; } > $@
+ $(Q) chmod +x $@
+
+$(LIBRUBY): $(RUBY_EXP) $(LIBRUBY_SO)
+$(RUBY_EXP) $(LIBRUBY_SO): $(DLL_BASE_NAME).res.@OBJEXT@
+
+%.res.@OBJEXT@: %.rc
+ $(ECHO) compiling $@
+ $(Q) $(WINDRES) --include-dir . --include-dir $(<D) --include-dir $(srcdir)/win32 $< $@
+
+$(RCFILES): $(RBCONFIG) $(srcdir)/revision.h $(srcdir)/win32/resource.rb
+ $(ECHO) generating $@
+ $(Q) $(MINIRUBY) $(srcdir)/win32/resource.rb \
+ -ruby_name=$(RUBY_INSTALL_NAME) -rubyw_name=$(RUBYW_INSTALL_NAME) \
+ -so_name=$(DLL_BASE_NAME) \
+ . $(icondirs) $(srcdir)/win32
+
+$(PROGRAM): $(RUBY_INSTALL_NAME).res.@OBJEXT@
+$(WPROGRAM): $(RUBYW_INSTALL_NAME).res.@OBJEXT@
+ @rm -f $@
+ $(ECHO) linking $@
+ $(Q) $(PURIFY) $(CC) -mwindows -e $(SYMBOL_PREFIX)mainCRTStartup $(LDFLAGS) $(XLDFLAGS) \
+ $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@
+$(STUBPROGRAM): $(RUBY_INSTALL_NAME).res.@OBJEXT@ stub.@OBJEXT@
+ @rm -f $@
+ $(ECHO) linking $@
+ $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) \
+ stub.@OBJEXT@ $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@
+
+$(RUBY_EXP): $(LIBRUBY_A)
+ $(ECHO) creating $@
+ $(Q) $(DLLWRAP) \
+ --output-exp=$(RUBY_EXP) \
+ --export-all $(LIBRUBY_A) $(LIBS) -o $(PROGRAM)
+ $(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) dmyext.o $(SOLIBS) -o $(PROGRAM)
+ @rm -f $(PROGRAM)
+
+GNUmakefile: $(srcdir)/cygwin/GNUmakefile.in
+
+ifeq (@target_os@,mingw32)
+$(OBJS) $(MAINOBJ): win32.h
+
+dir.$(OBJEXT) win32.$(OBJEXT): win32/dir.h
+endif
+
+$(LIBRUBY_SO): $(RUBYDEF)
+
+$(RUBYDEF): $(LIBRUBY_A) $(PREP) $(RBCONFIG)
+ $(ECHO) generating $@
+ $(Q) $(MINIRUBY) $(srcdir)/win32/mkexports.rb -output=$@ $(LIBRUBY_A)
+
+clean-local::
+ @$(RM) $(RUBYDEF)
+
+ifeq (@target_os@,cygwin)
+cygwin-$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR)$(TEENY).dll: $(LIBRUBY_A) $(RUBYDEF)
+ $(ECHO) generating $@
+ $(Q) @DLLWRAP@ -s --def=$(RUBYDEF) -o $@
+endif
+
+clean-local::
+ @$(RM) $(RUBY_EXP) $(RCFILES:.rc=.res.@OBJEXT@)
+ @$(RM) $(RCFILES)
diff --git a/debug.c b/debug.c
new file mode 100644
index 0000000000..2f1e03cc3a
--- /dev/null
+++ b/debug.c
@@ -0,0 +1,162 @@
+/**********************************************************************
+
+ debug.c -
+
+ $Author$
+ created at: 04/08/25 02:31:54 JST
+
+ Copyright (C) 2004-2007 Koichi Sasada
+
+**********************************************************************/
+
+#include "ruby/ruby.h"
+#include "ruby/encoding.h"
+#include "ruby/util.h"
+#include "vm_debug.h"
+#include "eval_intern.h"
+#include "vm_core.h"
+#include "id.h"
+
+/* for gdb */
+const union {
+ enum ruby_special_consts special_consts;
+ enum ruby_value_type value_type;
+ enum ruby_tag_type tag_type;
+ enum node_type node_type;
+ enum ruby_method_ids method_ids;
+ enum ruby_id_types id_types;
+ enum {
+ RUBY_ENCODING_INLINE_MAX = ENCODING_INLINE_MAX,
+ RUBY_ENCODING_SHIFT = ENCODING_SHIFT,
+ RUBY_ENC_CODERANGE_MASK = ENC_CODERANGE_MASK,
+ RUBY_ENC_CODERANGE_UNKNOWN = ENC_CODERANGE_UNKNOWN,
+ RUBY_ENC_CODERANGE_7BIT = ENC_CODERANGE_7BIT,
+ RUBY_ENC_CODERANGE_VALID = ENC_CODERANGE_VALID,
+ RUBY_ENC_CODERANGE_BROKEN = ENC_CODERANGE_BROKEN,
+ RUBY_FL_WB_PROTECTED = FL_WB_PROTECTED,
+ RUBY_FL_PROMOTED = FL_PROMOTED,
+ RUBY_FL_FINALIZE = FL_FINALIZE,
+ RUBY_FL_TAINT = FL_TAINT,
+ RUBY_FL_EXIVAR = FL_EXIVAR,
+ RUBY_FL_FREEZE = FL_FREEZE,
+ RUBY_FL_SINGLETON = FL_SINGLETON,
+ RUBY_FL_USER0 = FL_USER0,
+ RUBY_FL_USER1 = FL_USER1,
+ RUBY_FL_USER2 = FL_USER2,
+ RUBY_FL_USER3 = FL_USER3,
+ RUBY_FL_USER4 = FL_USER4,
+ RUBY_FL_USER5 = FL_USER5,
+ RUBY_FL_USER6 = FL_USER6,
+ RUBY_FL_USER7 = FL_USER7,
+ RUBY_FL_USER8 = FL_USER8,
+ RUBY_FL_USER9 = FL_USER9,
+ RUBY_FL_USER10 = FL_USER10,
+ RUBY_FL_USER11 = FL_USER11,
+ RUBY_FL_USER12 = FL_USER12,
+ RUBY_FL_USER13 = FL_USER13,
+ RUBY_FL_USER14 = FL_USER14,
+ RUBY_FL_USER15 = FL_USER15,
+ RUBY_FL_USER16 = FL_USER16,
+ RUBY_FL_USER17 = FL_USER17,
+ RUBY_FL_USER18 = FL_USER18,
+ RUBY_FL_USHIFT = FL_USHIFT,
+ RUBY_NODE_TYPESHIFT = NODE_TYPESHIFT,
+ RUBY_NODE_TYPEMASK = NODE_TYPEMASK,
+ RUBY_NODE_LSHIFT = NODE_LSHIFT,
+ RUBY_NODE_FL_NEWLINE = NODE_FL_NEWLINE
+ } various;
+} ruby_dummy_gdb_enums;
+
+const VALUE RUBY_FL_USER19 = FL_USER19;
+const SIGNED_VALUE RUBY_NODE_LMASK = NODE_LMASK;
+const VALUE RUBY_ENCODING_MASK = ENCODING_MASK;
+
+int
+ruby_debug_print_indent(int level, int debug_level, int indent_level)
+{
+ if (level < debug_level) {
+ fprintf(stderr, "%*s", indent_level, "");
+ fflush(stderr);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void
+ruby_debug_printf(const char *format, ...)
+{
+ va_list ap;
+ va_start(ap, format);
+ vfprintf(stderr, format, ap);
+ va_end(ap);
+}
+
+VALUE
+ruby_debug_print_value(int level, int debug_level, const char *header, VALUE obj)
+{
+ if (level < debug_level) {
+ VALUE str;
+ str = rb_inspect(obj);
+ fprintf(stderr, "DBG> %s: %s\n", header,
+ obj == (VALUE)(SIGNED_VALUE)-1 ? "" : StringValueCStr(str));
+ fflush(stderr);
+ }
+ return obj;
+}
+
+void
+ruby_debug_print_v(VALUE v)
+{
+ ruby_debug_print_value(0, 1, "", v);
+}
+
+ID
+ruby_debug_print_id(int level, int debug_level, const char *header, ID id)
+{
+ if (level < debug_level) {
+ fprintf(stderr, "DBG> %s: %s\n", header, rb_id2name(id));
+ fflush(stderr);
+ }
+ return id;
+}
+
+NODE *
+ruby_debug_print_node(int level, int debug_level, const char *header, const NODE *node)
+{
+ if (level < debug_level) {
+ fprintf(stderr, "DBG> %s: %s (%u)\n", header,
+ ruby_node_name(nd_type(node)), nd_line(node));
+ }
+ return (NODE *)node;
+}
+
+void
+ruby_debug_breakpoint(void)
+{
+ /* */
+}
+
+static void
+set_debug_option(const char *str, int len, void *arg)
+{
+#define SET_WHEN(name, var) do { \
+ if (len == sizeof(name) - 1 && \
+ strncmp(str, (name), len) == 0) { \
+ extern int var; \
+ var = 1; \
+ return; \
+ } \
+ } while (0)
+ SET_WHEN("gc_stress", *ruby_initial_gc_stress_ptr);
+ SET_WHEN("core", ruby_enable_coredump);
+#if defined _WIN32 && defined _MSC_VER && _MSC_VER >= 1400
+ SET_WHEN("rtc_error", ruby_w32_rtc_error);
+#endif
+ fprintf(stderr, "unexpected debug option: %.*s\n", len, str);
+}
+
+void
+ruby_set_debug_option(const char *str)
+{
+ ruby_each_words(str, set_debug_option, 0);
+}
diff --git a/defines.h b/defines.h
deleted file mode 100644
index bef61b00fa..0000000000
--- a/defines.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/************************************************
-
- defines.h -
-
- $Author: matz $
- $Date: 1995/01/10 10:42:25 $
- created at: Wed May 18 00:21:44 JST 1994
-
-************************************************/
-#ifndef DEFINES_H
-#define DEFINES_H
-
-#define RUBY
-
-/* define EUC/SJIS for default kanji-code */
-#define EUC
-#undef SJIS
-
-#ifdef NeXT
-#define S_IXUSR _S_IXUSR /* execute/search permission, owner */
-#define S_IXGRP 0000010 /* execute/search permission, group */
-#define S_IXOTH 0000001 /* execute/search permission, other */
-#define S_ISREG(mode) (((mode) & (_S_IFMT)) == (_S_IFREG))
-#endif /* NeXT */
-
-#ifdef NT
-#include "missing/nt.h"
-#endif
-
-#ifdef sparc
-#define FLUSH_REGISTER_WINDOWS asm("ta 3")
-#else
-#define FLUSH_REGISTER_WINDOWS /* empty */
-#endif
-
-#endif
diff --git a/defs/default_gems b/defs/default_gems
new file mode 100644
index 0000000000..e73e383b26
--- /dev/null
+++ b/defs/default_gems
@@ -0,0 +1,5 @@
+# gem base directory versioning file [executable files under bin]
+rake lib/rake lib/rake/version.rb [rake]
+rdoc lib/rdoc lib/rdoc.rb [rdoc ri]
+minitest lib/minitest lib/minitest/unit.rb
+json ext/json ext/json/lib/json/version.rb
diff --git a/defs/gmake.mk b/defs/gmake.mk
new file mode 100644
index 0000000000..0acb88ef57
--- /dev/null
+++ b/defs/gmake.mk
@@ -0,0 +1,29 @@
+# -*- makefile-gmake -*-
+TEST_TARGETS := $(filter check test check% test% btest%,$(MAKECMDGOALS))
+TEST_TARGETS += $(subst check,test-all,$(patsubst check-%,test-%,$(TEST_TARGETS)))
+TEST_TARGETS := $(patsubst test-%,yes-test-%,$(patsubst btest-%,yes-btest-%,$(TEST_TARGETS)))
+TEST_DEPENDS := $(if $(TEST_TARGETS),$(filter all main exts,$(MAKECMDGOALS)))
+TEST_DEPENDS += $(TEST_DEPENDS) $(if $(filter check%,$(MAKECMDGOALS)),main)
+
+ifneq ($(filter check% test,$(MAKECMDGOALS)),)
+yes-test-knownbug: $(TEST_DEPENDS) yes-btest-ruby
+yes-btest-ruby: $(TEST_DEPENDS) yes-test-sample
+yes-test-sample: $(TEST_DEPENDS)
+endif
+ifneq ($(filter check%,$(MAKECMDGOALS)) $(filter test-all,$(TEST_TARGETS)),)
+yes-test-all yes-test-ruby: $(filter-out %test-all %test-ruby check%,$(TEST_TARGETS))
+endif
+ifneq ($(filter check%,$(MAKECMDGOALS))$(if $(filter test-all,$(MAKECMDGOALS)),$(filter test-knownbug,$(MAKECMDGOALS))),)
+yes-test-all yes-test-ruby: yes-test-knownbug
+endif
+
+$(TEST_TARGETS): $(TEST_DEPENDS)
+
+ifneq ($(if $(filter install,$(MAKECMDGOALS)),$(filter uninstall,$(MAKECMDGOALS))),)
+install-targets := $(filter install uninstall,$(MAKECMDGOALS))
+$(word 1,$(install-targets)): $(word 0,$(install-targets))
+endif
+
+ifneq ($(filter reinstall,$(MAKECMDGOALS)),)
+install: uninstall
+endif
diff --git a/defs/id.def b/defs/id.def
new file mode 100644
index 0000000000..53ed3775ad
--- /dev/null
+++ b/defs/id.def
@@ -0,0 +1,105 @@
+# -*- mode: ruby; coding: us-ascii -*-
+firstline, predefined = __LINE__+1, %[\
+ freeze
+ inspect
+ intern
+ object_id
+ const_missing
+ method_missing MethodMissing
+ method_added
+ singleton_method_added
+ method_removed
+ singleton_method_removed
+ method_undefined
+ singleton_method_undefined
+ length
+ size
+ gets
+ succ
+ each
+ proc
+ lambda
+ send
+ __send__
+ __attached__
+ initialize
+ initialize_copy
+ initialize_clone
+ initialize_dup
+ _ UScore
+ "/*NULL*/" NULL
+ empty?
+ eql?
+ respond_to? Respond_to
+ respond_to_missing? Respond_to_missing
+ <IFUNC>
+ <CFUNC>
+ core#set_method_alias
+ core#set_variable_alias
+ core#undef_method
+ core#define_method
+ core#define_singleton_method
+ core#set_postexe
+ core#hash_from_ary
+ core#hash_merge_ary
+ core#hash_merge_ptr
+ core#hash_merge_kwd
+]
+
+class KeywordError < RuntimeError
+ def self.raise(mesg, line)
+ super(self, mesg, ["#{__FILE__}:#{line}", *caller])
+ end
+end
+
+predefined_ids = {}
+preserved_ids = []
+local_ids = []
+instance_ids = []
+global_ids = []
+const_ids = []
+class_ids = []
+names = {}
+predefined.split(/^/).each_with_index do |line, num|
+ next if /^#/ =~ line
+ line.sub!(/\s+#.*/, '')
+ name, token = line.split
+ next unless name
+ token ||= name
+ if /#/ =~ token
+ token = "_#{token.gsub(/\W+/, '_')}"
+ else
+ token = token.sub(/\?/, 'P').sub(/\A[a-z]/) {$&.upcase}
+ token.sub!(/\A\$/, "_G_")
+ token.sub!(/\A@@/, "_C_")
+ token.sub!(/\A@/, "_I_")
+ token.gsub!(/\W+/, "")
+ end
+ if prev = names[name]
+ KeywordError.raise("#{name} is already registered at line #{prev+firstline}", firstline+num)
+ end
+ if prev = predefined_ids[token]
+ KeywordError.raise("#{token} is already used for #{prev} at line #{names[prev]+firstline}", firstline+num)
+ end
+ names[name] = num
+ case name
+ when /\A[A-Z]\w*\z/; const_ids
+ when /\A(?!\d)\w+\z/; local_ids
+ when /\A\$(?:\d+|(?!\d)\w+)\z/; global_ids
+ when /\A@@(?!\d)\w+\z/; class_ids
+ when /\A@(?!\d)\w+\z/; instance_ids
+ when /\A((?!\d)\w+)=\z/
+ KeywordError.raise("use ID2ATTRSET(#{$1}) instead of ATTRSET #{name}", firstline+num)
+ else preserved_ids
+ end << token
+ predefined_ids[token] = name
+end
+{
+ "LOCAL" => local_ids,
+ "INSTANCE" => instance_ids,
+ "GLOBAL" => global_ids,
+ "CONST" => const_ids,
+ "CLASS" => class_ids,
+ :preserved => preserved_ids,
+ :predefined => predefined_ids,
+}
diff --git a/defs/keywords b/defs/keywords
new file mode 100644
index 0000000000..1b5719aa85
--- /dev/null
+++ b/defs/keywords
@@ -0,0 +1,53 @@
+%{
+struct kwtable {const char *name; int id[2]; enum lex_state_e state;};
+const struct kwtable *rb_reserved_word(const char *, unsigned int);
+#ifndef RIPPER
+static const struct kwtable *reserved_word(const char *, unsigned int);
+#define rb_reserved_word(str, len) reserved_word(str, len)
+%}
+
+struct kwtable;
+%%
+__ENCODING__, {keyword__ENCODING__, keyword__ENCODING__}, EXPR_END
+__LINE__, {keyword__LINE__, keyword__LINE__}, EXPR_END
+__FILE__, {keyword__FILE__, keyword__FILE__}, EXPR_END
+BEGIN, {keyword_BEGIN, keyword_BEGIN}, EXPR_END
+END, {keyword_END, keyword_END}, EXPR_END
+alias, {keyword_alias, keyword_alias}, EXPR_FNAME
+and, {keyword_and, keyword_and}, EXPR_VALUE
+begin, {keyword_begin, keyword_begin}, EXPR_BEG
+break, {keyword_break, keyword_break}, EXPR_MID
+case, {keyword_case, keyword_case}, EXPR_VALUE
+class, {keyword_class, keyword_class}, EXPR_CLASS
+def, {keyword_def, keyword_def}, EXPR_FNAME
+defined?, {keyword_defined, keyword_defined}, EXPR_ARG
+do, {keyword_do, keyword_do}, EXPR_BEG
+else, {keyword_else, keyword_else}, EXPR_BEG
+elsif, {keyword_elsif, keyword_elsif}, EXPR_VALUE
+end, {keyword_end, keyword_end}, EXPR_END
+ensure, {keyword_ensure, keyword_ensure}, EXPR_BEG
+false, {keyword_false, keyword_false}, EXPR_END
+for, {keyword_for, keyword_for}, EXPR_VALUE
+if, {keyword_if, modifier_if}, EXPR_VALUE
+in, {keyword_in, keyword_in}, EXPR_VALUE
+module, {keyword_module, keyword_module}, EXPR_VALUE
+next, {keyword_next, keyword_next}, EXPR_MID
+nil, {keyword_nil, keyword_nil}, EXPR_END
+not, {keyword_not, keyword_not}, EXPR_ARG
+or, {keyword_or, keyword_or}, EXPR_VALUE
+redo, {keyword_redo, keyword_redo}, EXPR_END
+rescue, {keyword_rescue, modifier_rescue}, EXPR_MID
+retry, {keyword_retry, keyword_retry}, EXPR_END
+return, {keyword_return, keyword_return}, EXPR_MID
+self, {keyword_self, keyword_self}, EXPR_END
+super, {keyword_super, keyword_super}, EXPR_ARG
+then, {keyword_then, keyword_then}, EXPR_BEG
+true, {keyword_true, keyword_true}, EXPR_END
+undef, {keyword_undef, keyword_undef}, EXPR_FNAME
+unless, {keyword_unless, modifier_unless}, EXPR_VALUE
+until, {keyword_until, modifier_until}, EXPR_VALUE
+when, {keyword_when, keyword_when}, EXPR_VALUE
+while, {keyword_while, modifier_while}, EXPR_VALUE
+yield, {keyword_yield, keyword_yield}, EXPR_ARG
+%%
+#endif
diff --git a/defs/known_errors.def b/defs/known_errors.def
new file mode 100644
index 0000000000..3cebe90a8e
--- /dev/null
+++ b/defs/known_errors.def
@@ -0,0 +1,145 @@
+EPERM
+ENOENT
+ESRCH
+EINTR
+EIO
+ENXIO
+E2BIG
+ENOEXEC
+EBADF
+ECHILD
+EAGAIN
+ENOMEM
+EACCES
+EFAULT
+ENOTBLK
+EBUSY
+EEXIST
+EXDEV
+ENODEV
+ENOTDIR
+EISDIR
+EINVAL
+ENFILE
+EMFILE
+ENOTTY
+ETXTBSY
+EFBIG
+ENOSPC
+ESPIPE
+EROFS
+EMLINK
+EPIPE
+EDOM
+ERANGE
+EDEADLK
+ENAMETOOLONG
+ENOLCK
+ENOSYS
+ENOTEMPTY
+ELOOP
+EWOULDBLOCK
+ENOMSG
+EIDRM
+ECHRNG
+EL2NSYNC
+EL3HLT
+EL3RST
+ELNRNG
+EUNATCH
+ENOCSI
+EL2HLT
+EBADE
+EBADR
+EXFULL
+ENOANO
+EBADRQC
+EBADSLT
+EDEADLOCK
+EBFONT
+ENOSTR
+ENODATA
+ETIME
+ENOSR
+ENONET
+ENOPKG
+EREMOTE
+ENOLINK
+EADV
+ESRMNT
+ECOMM
+EPROTO
+EMULTIHOP
+EDOTDOT
+EBADMSG
+EOVERFLOW
+ENOTUNIQ
+EBADFD
+EREMCHG
+ELIBACC
+ELIBBAD
+ELIBSCN
+ELIBMAX
+ELIBEXEC
+EILSEQ
+ERESTART
+ESTRPIPE
+EUSERS
+ENOTSOCK
+EDESTADDRREQ
+EMSGSIZE
+EPROTOTYPE
+ENOPROTOOPT
+EPROTONOSUPPORT
+ESOCKTNOSUPPORT
+EOPNOTSUPP
+EPFNOSUPPORT
+EAFNOSUPPORT
+EADDRINUSE
+EADDRNOTAVAIL
+ENETDOWN
+ENETUNREACH
+ENETRESET
+ECONNABORTED
+ECONNRESET
+ENOBUFS
+EISCONN
+ENOTCONN
+ESHUTDOWN
+ETOOMANYREFS
+ETIMEDOUT
+ECONNREFUSED
+EHOSTDOWN
+EHOSTUNREACH
+EALREADY
+EINPROGRESS
+ESTALE
+EUCLEAN
+ENOTNAM
+ENAVAIL
+EISNAM
+EREMOTEIO
+EDQUOT
+ECANCELED
+EKEYEXPIRED
+EKEYREJECTED
+EKEYREVOKED
+EMEDIUMTYPE
+ENOKEY
+ENOMEDIUM
+ENOTRECOVERABLE
+EOWNERDEAD
+ERFKILL
+EAUTH
+EBADRPC
+EDOOFUS
+EFTYPE
+ENEEDAUTH
+ENOATTR
+ENOTSUP
+EPROCLIM
+EPROCUNAVAIL
+EPROGMISMATCH
+EPROGUNAVAIL
+ERPCMISMATCH
+EIPSEC
diff --git a/defs/lex.c.src b/defs/lex.c.src
new file mode 100644
index 0000000000..1b5719aa85
--- /dev/null
+++ b/defs/lex.c.src
@@ -0,0 +1,53 @@
+%{
+struct kwtable {const char *name; int id[2]; enum lex_state_e state;};
+const struct kwtable *rb_reserved_word(const char *, unsigned int);
+#ifndef RIPPER
+static const struct kwtable *reserved_word(const char *, unsigned int);
+#define rb_reserved_word(str, len) reserved_word(str, len)
+%}
+
+struct kwtable;
+%%
+__ENCODING__, {keyword__ENCODING__, keyword__ENCODING__}, EXPR_END
+__LINE__, {keyword__LINE__, keyword__LINE__}, EXPR_END
+__FILE__, {keyword__FILE__, keyword__FILE__}, EXPR_END
+BEGIN, {keyword_BEGIN, keyword_BEGIN}, EXPR_END
+END, {keyword_END, keyword_END}, EXPR_END
+alias, {keyword_alias, keyword_alias}, EXPR_FNAME
+and, {keyword_and, keyword_and}, EXPR_VALUE
+begin, {keyword_begin, keyword_begin}, EXPR_BEG
+break, {keyword_break, keyword_break}, EXPR_MID
+case, {keyword_case, keyword_case}, EXPR_VALUE
+class, {keyword_class, keyword_class}, EXPR_CLASS
+def, {keyword_def, keyword_def}, EXPR_FNAME
+defined?, {keyword_defined, keyword_defined}, EXPR_ARG
+do, {keyword_do, keyword_do}, EXPR_BEG
+else, {keyword_else, keyword_else}, EXPR_BEG
+elsif, {keyword_elsif, keyword_elsif}, EXPR_VALUE
+end, {keyword_end, keyword_end}, EXPR_END
+ensure, {keyword_ensure, keyword_ensure}, EXPR_BEG
+false, {keyword_false, keyword_false}, EXPR_END
+for, {keyword_for, keyword_for}, EXPR_VALUE
+if, {keyword_if, modifier_if}, EXPR_VALUE
+in, {keyword_in, keyword_in}, EXPR_VALUE
+module, {keyword_module, keyword_module}, EXPR_VALUE
+next, {keyword_next, keyword_next}, EXPR_MID
+nil, {keyword_nil, keyword_nil}, EXPR_END
+not, {keyword_not, keyword_not}, EXPR_ARG
+or, {keyword_or, keyword_or}, EXPR_VALUE
+redo, {keyword_redo, keyword_redo}, EXPR_END
+rescue, {keyword_rescue, modifier_rescue}, EXPR_MID
+retry, {keyword_retry, keyword_retry}, EXPR_END
+return, {keyword_return, keyword_return}, EXPR_MID
+self, {keyword_self, keyword_self}, EXPR_END
+super, {keyword_super, keyword_super}, EXPR_ARG
+then, {keyword_then, keyword_then}, EXPR_BEG
+true, {keyword_true, keyword_true}, EXPR_END
+undef, {keyword_undef, keyword_undef}, EXPR_FNAME
+unless, {keyword_unless, modifier_unless}, EXPR_VALUE
+until, {keyword_until, modifier_until}, EXPR_VALUE
+when, {keyword_when, keyword_when}, EXPR_VALUE
+while, {keyword_while, modifier_while}, EXPR_VALUE
+yield, {keyword_yield, keyword_yield}, EXPR_ARG
+%%
+#endif
diff --git a/defs/opt_insn_unif.def b/defs/opt_insn_unif.def
new file mode 100644
index 0000000000..1ac613dbea
--- /dev/null
+++ b/defs/opt_insn_unif.def
@@ -0,0 +1,29 @@
+#
+# a definition of instruction unification
+#
+#
+
+__END__
+
+putobject putobject
+putobject putstring
+putobject setlocal
+putobject setdynamic
+
+putstring putstring
+putstring putobject
+putstring setlocal
+putstring setdynamic
+
+# putnil end
+
+dup setlocal
+
+# from tarai
+getlocal getlocal
+# getlocal send
+
+# from tak, ackermann
+getlocal putobject
+
+
diff --git a/defs/opt_operand.def b/defs/opt_operand.def
new file mode 100644
index 0000000000..ab7103a421
--- /dev/null
+++ b/defs/opt_operand.def
@@ -0,0 +1,22 @@
+#
+# configration file for operand union optimization
+#
+# format:
+# [insn name] op1, op2 ...
+#
+# wildcard: *
+#
+
+getlocal *, 0
+getlocal *, 1
+setlocal *, 0
+setlocal *, 1
+
+putobject INT2FIX(0)
+putobject INT2FIX(1)
+
+__END__
+
+putobject Qtrue
+putobject Qfalse
+
diff --git a/dir.c b/dir.c
index a1a6114406..3188a9eb38 100644
--- a/dir.c
+++ b/dir.c
@@ -1,31 +1,33 @@
-/************************************************
+/**********************************************************************
dir.c -
- $Author: matz $
- $Date: 1995/01/10 10:42:28 $
+ $Author$
created at: Wed Jan 5 09:51:01 JST 1994
- Copyright (C) 1993-1996 Yukihiro Matsumoto
+ Copyright (C) 1993-2007 Yukihiro Matsumoto
+ Copyright (C) 2000 Network Applied Communication Laboratory, Inc.
+ Copyright (C) 2000 Information-technology Promotion Agency, Japan
-************************************************/
+**********************************************************************/
-#include "ruby.h"
+#include "ruby/ruby.h"
+#include "ruby/encoding.h"
+#include "internal.h"
#include <sys/types.h>
+#include <sys/stat.h>
+
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
-#ifdef HAVE_SYS_PARAM_H
-# include <sys/param.h>
-#else
-# define MAXPATHLEN 1024
-#endif
-
-#if HAVE_DIRENT_H
+#if defined HAVE_DIRENT_H && !defined _WIN32
# include <dirent.h>
# define NAMLEN(dirent) strlen((dirent)->d_name)
+#elif defined HAVE_DIRECT_H && !defined _WIN32
+# include <direct.h>
+# define NAMLEN(dirent) strlen((dirent)->d_name)
#else
# define dirent direct
# define NAMLEN(dirent) (dirent)->d_namlen
@@ -38,200 +40,939 @@
# if HAVE_NDIR_H
# include <ndir.h>
# endif
-# ifdef NT
-# include "missing/dirent.h"
+# ifdef _WIN32
+# include "win32/dir.h"
# endif
#endif
+#if defined(__native_client__) && defined(NACL_NEWLIB)
+# include "nacl/dirent.h"
+# include "nacl/stat.h"
+#endif
#include <errno.h>
+#ifndef HAVE_STDLIB_H
char *getenv();
+#endif
+
+#ifndef HAVE_STRING_H
+char *strchr(char*,char);
+#endif
+
+#include <ctype.h>
+
+#include "ruby/util.h"
+
+/* define system APIs */
+#ifdef _WIN32
+#undef chdir
+#define chdir(p) rb_w32_uchdir(p)
+#undef mkdir
+#define mkdir(p, m) rb_w32_umkdir((p), (m))
+#undef rmdir
+#define rmdir(p) rb_w32_urmdir(p)
+#undef opendir
+#define opendir(p) rb_w32_uopendir(p)
+#endif
+
+#ifdef __APPLE__
+# define HAVE_HFS 1
+#else
+# define HAVE_HFS 0
+#endif
+#if HAVE_HFS
+#include <sys/param.h>
+#include <sys/mount.h>
+
+static inline int
+is_hfs(DIR *dirp)
+{
+ struct statfs buf;
+ if (fstatfs(dirfd(dirp), &buf) == 0) {
+ return buf.f_type == 17; /* HFS on darwin */
+ }
+ return FALSE;
+}
+
+static inline int
+has_nonascii(const char *ptr, size_t len)
+{
+ while (len > 0) {
+ if (!ISASCII(*ptr)) return 1;
+ ptr++;
+ --len;
+ }
+ return 0;
+}
+
+# define IF_HAVE_HFS(something) something
+#else
+# define IF_HAVE_HFS(something) /* nothing */
+#endif
+
+#define FNM_NOESCAPE 0x01
+#define FNM_PATHNAME 0x02
+#define FNM_DOTMATCH 0x04
+#define FNM_CASEFOLD 0x08
+#define FNM_EXTGLOB 0x10
+#if CASEFOLD_FILESYSTEM
+#define FNM_SYSCASE FNM_CASEFOLD
+#else
+#define FNM_SYSCASE 0
+#endif
+
+#define FNM_NOMATCH 1
+#define FNM_ERROR 2
+
+# define Next(p, e, enc) ((p)+ rb_enc_mbclen((p), (e), (enc)))
+# define Inc(p, e, enc) ((p) = Next((p), (e), (enc)))
+
+static char *
+bracket(
+ const char *p, /* pattern (next to '[') */
+ const char *pend,
+ const char *s, /* string */
+ const char *send,
+ int flags,
+ rb_encoding *enc)
+{
+ const int nocase = flags & FNM_CASEFOLD;
+ const int escape = !(flags & FNM_NOESCAPE);
+ unsigned int c1, c2;
+ int r;
+ int ok = 0, not = 0;
+
+ if (p >= pend) return NULL;
+ if (*p == '!' || *p == '^') {
+ not = 1;
+ p++;
+ }
+
+ while (*p != ']') {
+ const char *t1 = p;
+ if (escape && *t1 == '\\')
+ t1++;
+ if (!*t1)
+ return NULL;
+ p = t1 + (r = rb_enc_mbclen(t1, pend, enc));
+ if (p >= pend) return NULL;
+ if (p[0] == '-' && p[1] != ']') {
+ const char *t2 = p + 1;
+ int r2;
+ if (escape && *t2 == '\\')
+ t2++;
+ if (!*t2)
+ return NULL;
+ p = t2 + (r2 = rb_enc_mbclen(t2, pend, enc));
+ if (ok) continue;
+ if ((r <= (send-s) && memcmp(t1, s, r) == 0) ||
+ (r2 <= (send-s) && memcmp(t2, s, r2) == 0)) {
+ ok = 1;
+ continue;
+ }
+ c1 = rb_enc_codepoint(s, send, enc);
+ if (nocase) c1 = rb_enc_toupper(c1, enc);
+ c2 = rb_enc_codepoint(t1, pend, enc);
+ if (nocase) c2 = rb_enc_toupper(c2, enc);
+ if (c1 < c2) continue;
+ c2 = rb_enc_codepoint(t2, pend, enc);
+ if (nocase) c2 = rb_enc_toupper(c2, enc);
+ if (c1 > c2) continue;
+ }
+ else {
+ if (ok) continue;
+ if (r <= (send-s) && memcmp(t1, s, r) == 0) {
+ ok = 1;
+ continue;
+ }
+ if (!nocase) continue;
+ c1 = rb_enc_toupper(rb_enc_codepoint(s, send, enc), enc);
+ c2 = rb_enc_toupper(rb_enc_codepoint(p, pend, enc), enc);
+ if (c1 != c2) continue;
+ }
+ ok = 1;
+ }
+
+ return ok == not ? NULL : (char *)p + 1;
+}
+
+/* If FNM_PATHNAME is set, only path element will be matched. (upto '/' or '\0')
+ Otherwise, entire string will be matched.
+ End marker itself won't be compared.
+ And if function succeeds, *pcur reaches end marker.
+*/
+#define UNESCAPE(p) (escape && *(p) == '\\' ? (p) + 1 : (p))
+#define ISEND(p) (!*(p) || (pathname && *(p) == '/'))
+#define RETURN(val) return *pcur = p, *scur = s, (val);
+
+static int
+fnmatch_helper(
+ const char **pcur, /* pattern */
+ const char **scur, /* string */
+ int flags,
+ rb_encoding *enc)
+{
+ const int period = !(flags & FNM_DOTMATCH);
+ const int pathname = flags & FNM_PATHNAME;
+ const int escape = !(flags & FNM_NOESCAPE);
+ const int nocase = flags & FNM_CASEFOLD;
+
+ const char *ptmp = 0;
+ const char *stmp = 0;
+
+ const char *p = *pcur;
+ const char *pend = p + strlen(p);
+ const char *s = *scur;
+ const char *send = s + strlen(s);
+
+ int r;
+
+ if (period && *s == '.' && *UNESCAPE(p) != '.') /* leading period */
+ RETURN(FNM_NOMATCH);
+
+ while (1) {
+ switch (*p) {
+ case '*':
+ do { p++; } while (*p == '*');
+ if (ISEND(UNESCAPE(p))) {
+ p = UNESCAPE(p);
+ RETURN(0);
+ }
+ if (ISEND(s))
+ RETURN(FNM_NOMATCH);
+ ptmp = p;
+ stmp = s;
+ continue;
+
+ case '?':
+ if (ISEND(s))
+ RETURN(FNM_NOMATCH);
+ p++;
+ Inc(s, send, enc);
+ continue;
+
+ case '[': {
+ const char *t;
+ if (ISEND(s))
+ RETURN(FNM_NOMATCH);
+ if ((t = bracket(p + 1, pend, s, send, flags, enc)) != 0) {
+ p = t;
+ Inc(s, send, enc);
+ continue;
+ }
+ goto failed;
+ }
+ }
+
+ /* ordinary */
+ p = UNESCAPE(p);
+ if (ISEND(s))
+ RETURN(ISEND(p) ? 0 : FNM_NOMATCH);
+ if (ISEND(p))
+ goto failed;
+ r = rb_enc_precise_mbclen(p, pend, enc);
+ if (!MBCLEN_CHARFOUND_P(r))
+ goto failed;
+ if (r <= (send-s) && memcmp(p, s, r) == 0) {
+ p += r;
+ s += r;
+ continue;
+ }
+ if (!nocase) goto failed;
+ if (rb_enc_toupper(rb_enc_codepoint(p, pend, enc), enc) !=
+ rb_enc_toupper(rb_enc_codepoint(s, send, enc), enc))
+ goto failed;
+ p += r;
+ Inc(s, send, enc);
+ continue;
+
+ failed: /* try next '*' position */
+ if (ptmp && stmp) {
+ p = ptmp;
+ Inc(stmp, send, enc); /* !ISEND(*stmp) */
+ s = stmp;
+ continue;
+ }
+ RETURN(FNM_NOMATCH);
+ }
+}
+
+static int
+fnmatch(
+ const char *pattern,
+ rb_encoding *enc,
+ const char *string,
+ int flags)
+{
+ const char *p = pattern;
+ const char *s = string;
+ const char *send = s + strlen(string);
+ const int period = !(flags & FNM_DOTMATCH);
+ const int pathname = flags & FNM_PATHNAME;
+
+ const char *ptmp = 0;
+ const char *stmp = 0;
+
+ if (pathname) {
+ while (1) {
+ if (p[0] == '*' && p[1] == '*' && p[2] == '/') {
+ do { p += 3; } while (p[0] == '*' && p[1] == '*' && p[2] == '/');
+ ptmp = p;
+ stmp = s;
+ }
+ if (fnmatch_helper(&p, &s, flags, enc) == 0) {
+ while (*s && *s != '/') Inc(s, send, enc);
+ if (*p && *s) {
+ p++;
+ s++;
+ continue;
+ }
+ if (!*p && !*s)
+ return 0;
+ }
+ /* failed : try next recursion */
+ if (ptmp && stmp && !(period && *stmp == '.')) {
+ while (*stmp && *stmp != '/') Inc(stmp, send, enc);
+ if (*stmp) {
+ p = ptmp;
+ stmp++;
+ s = stmp;
+ continue;
+ }
+ }
+ return FNM_NOMATCH;
+ }
+ }
+ else
+ return fnmatch_helper(&p, &s, flags, enc);
+}
-static VALUE cDir;
+VALUE rb_cDir;
+
+struct dir_data {
+ DIR *dir;
+ VALUE path;
+ rb_encoding *enc;
+};
static void
-free_dir(dir)
- DIR **dir;
+dir_mark(void *ptr)
{
- if (dir && *dir) closedir(*dir);
+ struct dir_data *dir = ptr;
+ rb_gc_mark(dir->path);
}
+static void
+dir_free(void *ptr)
+{
+ struct dir_data *dir = ptr;
+ if (dir) {
+ if (dir->dir) closedir(dir->dir);
+ }
+ xfree(dir);
+}
+
+static size_t
+dir_memsize(const void *ptr)
+{
+ return ptr ? sizeof(struct dir_data) : 0;
+}
+
+static const rb_data_type_t dir_data_type = {
+ "dir",
+ {dir_mark, dir_free, dir_memsize,},
+ NULL, NULL, RUBY_TYPED_FREE_IMMEDIATELY
+};
+
+static VALUE dir_close(VALUE);
+
+#define GlobPathValue(str, safe) \
+ /* can contain null bytes as separators */ \
+ (!RB_TYPE_P((str), T_STRING) ? \
+ (void)FilePathValue(str) : \
+ (void)(check_safe_glob((str), (safe)), \
+ check_glob_encoding(str), (str)))
+#define check_safe_glob(str, safe) ((safe) ? rb_check_safe_obj(str) : (void)0)
+#define check_glob_encoding(str) rb_enc_check((str), rb_enc_from_encoding(rb_usascii_encoding()))
+
static VALUE
-dir_s_open(dir_class, dirname)
- VALUE dir_class;
- struct RString *dirname;
+dir_s_alloc(VALUE klass)
{
- VALUE obj;
- DIR *dirp, **d;
+ struct dir_data *dirp;
+ VALUE obj = TypedData_Make_Struct(klass, struct dir_data, &dir_data_type, dirp);
+
+ dirp->dir = NULL;
+ dirp->path = Qnil;
+ dirp->enc = NULL;
- Check_Type(dirname, T_STRING);
+ return obj;
+}
- dirp = opendir(dirname->ptr);
- if (dirp == NULL) {
+/*
+ * call-seq:
+ * Dir.new( string ) -> aDir
+ * Dir.new( string, encoding: enc ) -> aDir
+ *
+ * Returns a new directory object for the named directory.
+ *
+ * The optional <i>enc</i> argument specifies the encoding of the directory.
+ * If not specified, the filesystem encoding is used.
+ */
+static VALUE
+dir_initialize(int argc, VALUE *argv, VALUE dir)
+{
+ struct dir_data *dp;
+ rb_encoding *fsenc;
+ VALUE dirname, opt, orig;
+ static ID keyword_ids[1];
+
+ if (!keyword_ids[0]) {
+ keyword_ids[0] = rb_intern("encoding");
+ }
+
+ fsenc = rb_filesystem_encoding();
+
+ rb_scan_args(argc, argv, "1:", &dirname, &opt);
+
+ if (!NIL_P(opt)) {
+ VALUE enc;
+ rb_get_kwargs(opt, keyword_ids, 0, 1, &enc);
+ if (enc != Qundef && !NIL_P(enc)) {
+ fsenc = rb_to_encoding(enc);
+ }
+ }
+
+ GlobPathValue(dirname, FALSE);
+ orig = rb_str_dup_frozen(dirname);
+ dirname = rb_str_encode_ospath(dirname);
+ dirname = rb_str_dup_frozen(dirname);
+
+ TypedData_Get_Struct(dir, struct dir_data, &dir_data_type, dp);
+ if (dp->dir) closedir(dp->dir);
+ dp->dir = NULL;
+ dp->path = Qnil;
+ dp->enc = fsenc;
+ dp->dir = opendir(RSTRING_PTR(dirname));
+ if (dp->dir == NULL) {
if (errno == EMFILE || errno == ENFILE) {
- gc();
- dirp = opendir(dirname->ptr);
+ rb_gc();
+ dp->dir = opendir(RSTRING_PTR(dirname));
}
- if (dirp == NULL) {
- rb_sys_fail(dirname->ptr);
+ if (dp->dir == NULL) {
+ rb_sys_fail_path(orig);
}
}
+ dp->path = orig;
- obj = Make_Data_Struct(dir_class, DIR*, 0, free_dir, d);
- *d = dirp;
+ return dir;
+}
- return obj;
+/*
+ * call-seq:
+ * Dir.open( string ) -> aDir
+ * Dir.open( string, encoding: enc ) -> aDir
+ * Dir.open( string ) {| aDir | block } -> anObject
+ * Dir.open( string, encoding: enc ) {| aDir | block } -> anObject
+ *
+ * The optional <i>enc</i> argument specifies the encoding of the directory.
+ * If not specified, the filesystem encoding is used.
+ *
+ * With no block, <code>open</code> is a synonym for
+ * <code>Dir::new</code>. If a block is present, it is passed
+ * <i>aDir</i> as a parameter. The directory is closed at the end of
+ * the block, and <code>Dir::open</code> returns the value of the
+ * block.
+ */
+static VALUE
+dir_s_open(int argc, VALUE *argv, VALUE klass)
+{
+ struct dir_data *dp;
+ VALUE dir = TypedData_Make_Struct(klass, struct dir_data, &dir_data_type, dp);
+
+ dir_initialize(argc, argv, dir);
+ if (rb_block_given_p()) {
+ return rb_ensure(rb_yield, dir, dir_close, dir);
+ }
+
+ return dir;
}
static void
-closeddir()
+dir_closed(void)
{
- Fail("closed directory");
+ rb_raise(rb_eIOError, "closed directory");
}
-#define GetDIR(obj, dirp) {\
- DIR **_dp;\
- Get_Data_Struct(obj, DIR*, _dp);\
- dirp = *_dp;\
- if (dirp == NULL) closeddir();\
+static struct dir_data *
+dir_check(VALUE dir)
+{
+ struct dir_data *dirp;
+ rb_check_frozen(dir);
+ dirp = rb_check_typeddata(dir, &dir_data_type);
+ if (!dirp->dir) dir_closed();
+ return dirp;
}
+#define GetDIR(obj, dirp) ((dirp) = dir_check(obj))
+
+
+/*
+ * call-seq:
+ * dir.inspect -> string
+ *
+ * Return a string describing this Dir object.
+ */
static VALUE
-dir_each(dir)
- VALUE dir;
+dir_inspect(VALUE dir)
{
- DIR *dirp;
+ struct dir_data *dirp;
+
+ TypedData_Get_Struct(dir, struct dir_data, &dir_data_type, dirp);
+ if (!NIL_P(dirp->path)) {
+ VALUE str = rb_str_new_cstr("#<");
+ rb_str_append(str, rb_class_name(CLASS_OF(dir)));
+ rb_str_cat2(str, ":");
+ rb_str_append(str, dirp->path);
+ rb_str_cat2(str, ">");
+ return str;
+ }
+ return rb_funcall(dir, rb_intern("to_s"), 0, 0);
+}
+
+/*
+ * call-seq:
+ * dir.path -> string or nil
+ * dir.to_path -> string or nil
+ *
+ * Returns the path parameter passed to <em>dir</em>'s constructor.
+ *
+ * d = Dir.new("..")
+ * d.path #=> ".."
+ */
+static VALUE
+dir_path(VALUE dir)
+{
+ struct dir_data *dirp;
+
+ TypedData_Get_Struct(dir, struct dir_data, &dir_data_type, dirp);
+ if (NIL_P(dirp->path)) return Qnil;
+ return rb_str_dup(dirp->path);
+}
+
+#if defined _WIN32
+# define READDIR(dir, enc) rb_w32_readdir((dir), (enc))
+#else
+# define READDIR(dir, enc) readdir((dir))
+#endif
+
+/*
+ * call-seq:
+ * dir.read -> string or nil
+ *
+ * Reads the next entry from <em>dir</em> and returns it as a string.
+ * Returns <code>nil</code> at the end of the stream.
+ *
+ * d = Dir.new("testdir")
+ * d.read #=> "."
+ * d.read #=> ".."
+ * d.read #=> "config.h"
+ */
+static VALUE
+dir_read(VALUE dir)
+{
+ struct dir_data *dirp;
struct dirent *dp;
- VALUE file;
GetDIR(dir, dirp);
- for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) {
- file = str_new(dp->d_name, NAMLEN(dp));
- rb_yield(file);
+ errno = 0;
+ if ((dp = READDIR(dirp->dir, dirp->enc)) != NULL) {
+ return rb_external_str_new_with_enc(dp->d_name, NAMLEN(dp), dirp->enc);
+ }
+ else {
+ if (errno != 0) rb_sys_fail(0);
+ return Qnil; /* end of stream */
+ }
+}
+
+/*
+ * call-seq:
+ * dir.each { |filename| block } -> dir
+ * dir.each -> an_enumerator
+ *
+ * Calls the block once for each entry in this directory, passing the
+ * filename of each entry as a parameter to the block.
+ *
+ * If no block is given, an enumerator is returned instead.
+ *
+ * d = Dir.new("testdir")
+ * d.each {|x| puts "Got #{x}" }
+ *
+ * <em>produces:</em>
+ *
+ * Got .
+ * Got ..
+ * Got config.h
+ * Got main.rb
+ */
+static VALUE
+dir_each(VALUE dir)
+{
+ struct dir_data *dirp;
+ struct dirent *dp;
+ IF_HAVE_HFS(int hfs_p);
+
+ RETURN_ENUMERATOR(dir, 0, 0);
+ GetDIR(dir, dirp);
+ rewinddir(dirp->dir);
+ IF_HAVE_HFS(hfs_p = is_hfs(dirp->dir));
+ while ((dp = READDIR(dirp->dir, dirp->enc)) != NULL) {
+ const char *name = dp->d_name;
+ size_t namlen = NAMLEN(dp);
+ VALUE path;
+#if HAVE_HFS
+ if (hfs_p && has_nonascii(name, namlen) &&
+ !NIL_P(path = rb_str_normalize_ospath(name, namlen))) {
+ path = rb_external_str_with_enc(path, dirp->enc);
+ }
+ else
+#endif
+ path = rb_external_str_new_with_enc(name, namlen, dirp->enc);
+ rb_yield(path);
+ if (dirp->dir == NULL) dir_closed();
}
return dir;
}
+#ifdef HAVE_TELLDIR
+/*
+ * call-seq:
+ * dir.pos -> integer
+ * dir.tell -> integer
+ *
+ * Returns the current position in <em>dir</em>. See also
+ * <code>Dir#seek</code>.
+ *
+ * d = Dir.new("testdir")
+ * d.tell #=> 0
+ * d.read #=> "."
+ * d.tell #=> 12
+ */
static VALUE
-dir_tell(dir)
- VALUE dir;
+dir_tell(VALUE dir)
{
- DIR *dirp;
- int pos;
+ struct dir_data *dirp;
+ long pos;
-#if !defined(__CYGWIN32__)
GetDIR(dir, dirp);
- pos = telldir(dirp);
- return int2inum(pos);
+ pos = telldir(dirp->dir);
+ return rb_int2inum(pos);
+}
#else
- rb_notimplement();
+#define dir_tell rb_f_notimplement
#endif
-}
+#ifdef HAVE_SEEKDIR
+/*
+ * call-seq:
+ * dir.seek( integer ) -> dir
+ *
+ * Seeks to a particular location in <em>dir</em>. <i>integer</i>
+ * must be a value returned by <code>Dir#tell</code>.
+ *
+ * d = Dir.new("testdir") #=> #<Dir:0x401b3c40>
+ * d.read #=> "."
+ * i = d.tell #=> 12
+ * d.read #=> ".."
+ * d.seek(i) #=> #<Dir:0x401b3c40>
+ * d.read #=> ".."
+ */
static VALUE
-dir_seek(dir, pos)
- VALUE dir, pos;
+dir_seek(VALUE dir, VALUE pos)
{
- DIR *dirp;
+ struct dir_data *dirp;
+ long p = NUM2LONG(pos);
-#if !defined(__CYGWIN32__)
GetDIR(dir, dirp);
- seekdir(dirp, NUM2INT(pos));
+ seekdir(dirp->dir, p);
return dir;
+}
#else
- rb_notimplement();
+#define dir_seek rb_f_notimplement
#endif
+
+#ifdef HAVE_SEEKDIR
+/*
+ * call-seq:
+ * dir.pos = integer -> integer
+ *
+ * Synonym for <code>Dir#seek</code>, but returns the position
+ * parameter.
+ *
+ * d = Dir.new("testdir") #=> #<Dir:0x401b3c40>
+ * d.read #=> "."
+ * i = d.pos #=> 12
+ * d.read #=> ".."
+ * d.pos = i #=> 12
+ * d.read #=> ".."
+ */
+static VALUE
+dir_set_pos(VALUE dir, VALUE pos)
+{
+ dir_seek(dir, pos);
+ return pos;
}
+#else
+#define dir_set_pos rb_f_notimplement
+#endif
+/*
+ * call-seq:
+ * dir.rewind -> dir
+ *
+ * Repositions <em>dir</em> to the first entry.
+ *
+ * d = Dir.new("testdir")
+ * d.read #=> "."
+ * d.rewind #=> #<Dir:0x401b3fb0>
+ * d.read #=> "."
+ */
static VALUE
-dir_rewind(dir)
- VALUE dir;
+dir_rewind(VALUE dir)
{
- DIR *dirp;
+ struct dir_data *dirp;
GetDIR(dir, dirp);
- rewinddir(dirp);
+ rewinddir(dirp->dir);
return dir;
}
+/*
+ * call-seq:
+ * dir.close -> nil
+ *
+ * Closes the directory stream. Any further attempts to access
+ * <em>dir</em> will raise an <code>IOError</code>.
+ *
+ * d = Dir.new("testdir")
+ * d.close #=> nil
+ */
static VALUE
-dir_close(dir)
- VALUE dir;
+dir_close(VALUE dir)
+{
+ struct dir_data *dirp;
+
+ GetDIR(dir, dirp);
+ closedir(dirp->dir);
+ dirp->dir = NULL;
+
+ return Qnil;
+}
+
+static void
+dir_chdir(VALUE path)
{
- DIR **dirpp;
+ if (chdir(RSTRING_PTR(path)) < 0)
+ rb_sys_fail_path(path);
+}
- Get_Data_Struct(dir, DIR*, dirpp);
- if (*dirpp == NULL) closeddir();
- closedir(*dirpp);
- *dirpp = NULL;
+static int chdir_blocking = 0;
+static VALUE chdir_thread = Qnil;
+struct chdir_data {
+ VALUE old_path, new_path;
+ int done;
+};
+
+static VALUE
+chdir_yield(struct chdir_data *args)
+{
+ dir_chdir(args->new_path);
+ args->done = TRUE;
+ chdir_blocking++;
+ if (chdir_thread == Qnil)
+ chdir_thread = rb_thread_current();
+ return rb_yield(args->new_path);
+}
+
+static VALUE
+chdir_restore(struct chdir_data *args)
+{
+ if (args->done) {
+ chdir_blocking--;
+ if (chdir_blocking == 0)
+ chdir_thread = Qnil;
+ dir_chdir(args->old_path);
+ }
return Qnil;
}
+/*
+ * call-seq:
+ * Dir.chdir( [ string] ) -> 0
+ * Dir.chdir( [ string] ) {| path | block } -> anObject
+ *
+ * Changes the current working directory of the process to the given
+ * string. When called without an argument, changes the directory to
+ * the value of the environment variable <code>HOME</code>, or
+ * <code>LOGDIR</code>. <code>SystemCallError</code> (probably
+ * <code>Errno::ENOENT</code>) if the target directory does not exist.
+ *
+ * If a block is given, it is passed the name of the new current
+ * directory, and the block is executed with that as the current
+ * directory. The original working directory is restored when the block
+ * exits. The return value of <code>chdir</code> is the value of the
+ * block. <code>chdir</code> blocks can be nested, but in a
+ * multi-threaded program an error will be raised if a thread attempts
+ * to open a <code>chdir</code> block while another thread has one
+ * open.
+ *
+ * Dir.chdir("/var/spool/mail")
+ * puts Dir.pwd
+ * Dir.chdir("/tmp") do
+ * puts Dir.pwd
+ * Dir.chdir("/usr") do
+ * puts Dir.pwd
+ * end
+ * puts Dir.pwd
+ * end
+ * puts Dir.pwd
+ *
+ * <em>produces:</em>
+ *
+ * /var/spool/mail
+ * /tmp
+ * /usr
+ * /tmp
+ * /var/spool/mail
+ */
static VALUE
-dir_s_chdir(argc, argv, obj)
- int argc;
- VALUE *argv;
- VALUE obj;
+dir_s_chdir(int argc, VALUE *argv, VALUE obj)
{
- VALUE path;
- char *dist = "";
+ VALUE path = Qnil;
- rb_scan_args(argc, argv, "01", &path);
- if (path) {
- Check_Type(path, T_STRING);
- dist = RSTRING(path)->ptr;
+ rb_secure(2);
+ if (rb_scan_args(argc, argv, "01", &path) == 1) {
+ FilePathValue(path);
+ path = rb_str_encode_ospath(path);
}
else {
- dist = getenv("HOME");
+ const char *dist = getenv("HOME");
if (!dist) {
dist = getenv("LOGDIR");
+ if (!dist) rb_raise(rb_eArgError, "HOME/LOGDIR not set");
}
+ path = rb_str_new2(dist);
}
- if (chdir(dist) < 0)
- rb_sys_fail(0);
+ if (chdir_blocking > 0) {
+ if (!rb_block_given_p() || rb_thread_current() != chdir_thread)
+ rb_warn("conflicting chdir during another chdir block");
+ }
+
+ if (rb_block_given_p()) {
+ struct chdir_data args;
+
+ args.old_path = rb_str_encode_ospath(rb_dir_getwd());
+ args.new_path = path;
+ args.done = FALSE;
+ return rb_ensure(chdir_yield, (VALUE)&args, chdir_restore, (VALUE)&args);
+ }
+ dir_chdir(path);
return INT2FIX(0);
}
-static VALUE
-dir_s_getwd(dir)
- VALUE dir;
+VALUE
+rb_dir_getwd(void)
{
- extern char *getwd();
- char path[MAXPATHLEN];
+ char *path;
+ VALUE cwd;
-#ifdef HAVE_GETCWD
- if (getcwd(path, sizeof(path)) == 0) rb_sys_fail(path);
-#else
- if (getwd(path) == 0) rb_sys_fail(path);
-#endif
+ path = my_getcwd();
+ cwd = rb_tainted_str_new2(path);
+ rb_enc_associate(cwd, rb_filesystem_encoding());
- return str_new2(path);
+ xfree(path);
+ return cwd;
}
+/*
+ * call-seq:
+ * Dir.getwd -> string
+ * Dir.pwd -> string
+ *
+ * Returns the path to the current working directory of this process as
+ * a string.
+ *
+ * Dir.chdir("/tmp") #=> 0
+ * Dir.getwd #=> "/tmp"
+ */
static VALUE
-dir_s_chroot(dir, path)
- VALUE dir, path;
+dir_s_getwd(VALUE dir)
{
-#if !defined(DJGPP) && !defined(__CYGWIN32__)
- Check_Type(path, T_STRING);
+ return rb_dir_getwd();
+}
- if (chroot(RSTRING(path)->ptr) == -1)
- rb_sys_fail(0);
+static void
+check_dirname(volatile VALUE *dir)
+{
+ VALUE d = *dir;
+ char *path, *pend;
+ long len;
+ rb_encoding *enc;
+
+ rb_secure(2);
+ FilePathValue(d);
+ enc = rb_enc_get(d);
+ RSTRING_GETMEM(d, path, len);
+ pend = path + len;
+ pend = rb_enc_path_end(rb_enc_path_skip_prefix(path, pend, enc), pend, enc);
+ if (pend - path < len) {
+ d = rb_str_subseq(d, 0, pend - path);
+ }
+ *dir = rb_str_encode_ospath(d);
+}
+
+#if defined(HAVE_CHROOT)
+/*
+ * call-seq:
+ * Dir.chroot( string ) -> 0
+ *
+ * Changes this process's idea of the file system root. Only a
+ * privileged process may make this call. Not available on all
+ * platforms. On Unix systems, see <code>chroot(2)</code> for more
+ * information.
+ */
+static VALUE
+dir_s_chroot(VALUE dir, VALUE path)
+{
+ check_dirname(&path);
+ if (chroot(RSTRING_PTR(path)) == -1)
+ rb_sys_fail_path(path);
return INT2FIX(0);
+}
#else
- rb_notimplement();
+#define dir_s_chroot rb_f_notimplement
#endif
-}
+/*
+ * call-seq:
+ * Dir.mkdir( string [, integer] ) -> 0
+ *
+ * Makes a new directory named by <i>string</i>, with permissions
+ * specified by the optional parameter <i>anInteger</i>. The
+ * permissions may be modified by the value of
+ * <code>File::umask</code>, and are ignored on NT. Raises a
+ * <code>SystemCallError</code> if the directory cannot be created. See
+ * also the discussion of permissions in the class documentation for
+ * <code>File</code>.
+ *
+ * Dir.mkdir(File.join(Dir.home, ".foo"), 0700) #=> 0
+ *
+ */
static VALUE
-dir_s_mkdir(argc, argv, obj)
- int argc;
- VALUE *argv;
- VALUE obj;
+dir_s_mkdir(int argc, VALUE *argv, VALUE obj)
{
VALUE path, vmode;
int mode;
@@ -243,165 +984,1280 @@ dir_s_mkdir(argc, argv, obj)
mode = 0777;
}
- Check_Type(path, T_STRING);
- if (mkdir(RSTRING(path)->ptr, mode) == -1)
- rb_sys_fail(RSTRING(path)->ptr);
+ check_dirname(&path);
+ if (mkdir(RSTRING_PTR(path), mode) == -1)
+ rb_sys_fail_path(path);
return INT2FIX(0);
}
+/*
+ * call-seq:
+ * Dir.delete( string ) -> 0
+ * Dir.rmdir( string ) -> 0
+ * Dir.unlink( string ) -> 0
+ *
+ * Deletes the named directory. Raises a subclass of
+ * <code>SystemCallError</code> if the directory isn't empty.
+ */
static VALUE
-dir_s_rmdir(obj, dir)
- VALUE obj;
- struct RString *dir;
+dir_s_rmdir(VALUE obj, VALUE dir)
{
- Check_Type(dir, T_STRING);
- if (rmdir(dir->ptr) < 0)
- rb_sys_fail(dir->ptr);
+ check_dirname(&dir);
+ if (rmdir(RSTRING_PTR(dir)) < 0)
+ rb_sys_fail_path(dir);
- return TRUE;
+ return INT2FIX(0);
}
-#define isdelim(c) ((c)==' '||(c)=='\t'||(c)=='\n'||(c)=='\0')
+static VALUE
+sys_warning_1(VALUE mesg)
+{
+ rb_sys_warning("%s:%s", strerror(errno), (const char *)mesg);
+ return Qnil;
+}
+
+#define GLOB_VERBOSE (1U << (sizeof(int) * CHAR_BIT - 1))
+#define sys_warning(val) \
+ (void)((flags & GLOB_VERBOSE) && rb_protect(sys_warning_1, (VALUE)(val), 0))
-char **glob_filename();
+#define GLOB_ALLOC(type) ((type *)malloc(sizeof(type)))
+#define GLOB_ALLOC_N(type, n) ((type *)malloc(sizeof(type) * (n)))
+#define GLOB_FREE(ptr) free(ptr)
+#define GLOB_JUMP_TAG(status) (((status) == -1) ? rb_memerror() : rb_jump_tag(status))
+
+/*
+ * ENOTDIR can be returned by stat(2) if a non-leaf element of the path
+ * is not a directory.
+ */
+#define to_be_ignored(e) ((e) == ENOENT || (e) == ENOTDIR)
+
+#ifdef _WIN32
+#define STAT(p, s) rb_w32_ustati64((p), (s))
+#else
+#define STAT(p, s) stat((p), (s))
+#endif
+
+/* System call with warning */
+static int
+do_stat(const char *path, struct stat *pst, int flags)
+
+{
+ int ret = STAT(path, pst);
+ if (ret < 0 && !to_be_ignored(errno))
+ sys_warning(path);
+
+ return ret;
+}
+
+#if defined HAVE_LSTAT || defined lstat
+static int
+do_lstat(const char *path, struct stat *pst, int flags)
+{
+ int ret = lstat(path, pst);
+ if (ret < 0 && !to_be_ignored(errno))
+ sys_warning(path);
+
+ return ret;
+}
+#else
+#define do_lstat do_stat
+#endif
+
+static DIR *
+do_opendir(const char *path, int flags, rb_encoding *enc)
+{
+ DIR *dirp;
+#ifdef _WIN32
+ volatile VALUE tmp;
+ if (enc != rb_usascii_encoding() &&
+ enc != rb_ascii8bit_encoding() &&
+ enc != rb_utf8_encoding()) {
+ tmp = rb_enc_str_new(path, strlen(path), enc);
+ tmp = rb_str_encode_ospath(tmp);
+ path = RSTRING_PTR(tmp);
+ }
+#endif
+ dirp = opendir(path);
+ if (dirp == NULL && !to_be_ignored(errno))
+ sys_warning(path);
+
+ return dirp;
+}
+
+/* Return nonzero if S has any special globbing chars in it. */
+static int
+has_magic(const char *p, const char *pend, int flags, rb_encoding *enc)
+{
+ const int escape = !(flags & FNM_NOESCAPE);
+ const int nocase = flags & FNM_CASEFOLD;
+
+ register char c;
+
+ while (p < pend && (c = *p++) != 0) {
+ switch (c) {
+ case '*':
+ case '?':
+ case '[':
+ return 1;
+
+ case '\\':
+ if (escape && !(c = *p++))
+ return 0;
+ continue;
+
+ default:
+ if (!FNM_SYSCASE && ISALPHA(c) && nocase)
+ return 1;
+ }
+
+ p = Next(p-1, pend, enc);
+ }
+
+ return 0;
+}
+
+/* Find separator in globbing pattern. */
+static char *
+find_dirsep(const char *p, const char *pend, int flags, rb_encoding *enc)
+{
+ const int escape = !(flags & FNM_NOESCAPE);
+
+ register char c;
+ int open = 0;
+
+ while ((c = *p++) != 0) {
+ switch (c) {
+ case '[':
+ open = 1;
+ continue;
+ case ']':
+ open = 0;
+ continue;
+
+ case '/':
+ if (!open)
+ return (char *)p-1;
+ continue;
+
+ case '\\':
+ if (escape && !(c = *p++))
+ return (char *)p-1;
+ continue;
+ }
+
+ p = Next(p-1, pend, enc);
+ }
+
+ return (char *)p-1;
+}
+
+/* Remove escaping backslashes */
+static char *
+remove_backslashes(char *p, register const char *pend, rb_encoding *enc)
+{
+ char *t = p;
+ char *s = p;
+
+ while (*p) {
+ if (*p == '\\') {
+ if (t != s)
+ memmove(t, s, p - s);
+ t += p - s;
+ s = ++p;
+ if (!*p) break;
+ }
+ Inc(p, pend, enc);
+ }
+
+ while (*p++);
+
+ if (t != s)
+ memmove(t, s, p - s); /* move '\0' too */
+
+ return p;
+}
+
+/* Globing pattern */
+enum glob_pattern_type { PLAIN, MAGICAL, RECURSIVE, MATCH_ALL, MATCH_DIR };
+
+struct glob_pattern {
+ char *str;
+ enum glob_pattern_type type;
+ struct glob_pattern *next;
+};
+
+static void glob_free_pattern(struct glob_pattern *list);
+
+static struct glob_pattern *
+glob_make_pattern(const char *p, const char *e, int flags, rb_encoding *enc)
+{
+ struct glob_pattern *list, *tmp, **tail = &list;
+ int dirsep = 0; /* pattern is terminated with '/' */
+ int recursive = 0;
+
+ while (p < e && *p) {
+ tmp = GLOB_ALLOC(struct glob_pattern);
+ if (!tmp) goto error;
+ if (p[0] == '*' && p[1] == '*' && p[2] == '/') {
+ /* fold continuous RECURSIVEs (needed in glob_helper) */
+ do { p += 3; while (*p == '/') p++; } while (p[0] == '*' && p[1] == '*' && p[2] == '/');
+ tmp->type = RECURSIVE;
+ tmp->str = 0;
+ dirsep = 1;
+ recursive = 1;
+ }
+ else {
+ const char *m = find_dirsep(p, e, flags, enc);
+ int magic = has_magic(p, m, flags, enc);
+ char *buf;
+
+ if (!magic && !recursive && *m) {
+ const char *m2;
+ while (!has_magic(m+1, m2 = find_dirsep(m+1, e, flags, enc), flags, enc) &&
+ *m2) {
+ m = m2;
+ }
+ }
+ buf = GLOB_ALLOC_N(char, m-p+1);
+ if (!buf) {
+ GLOB_FREE(tmp);
+ goto error;
+ }
+ memcpy(buf, p, m-p);
+ buf[m-p] = '\0';
+ tmp->type = magic ? MAGICAL : PLAIN;
+ tmp->str = buf;
+ if (*m) {
+ dirsep = 1;
+ p = m + 1;
+ }
+ else {
+ dirsep = 0;
+ p = m;
+ }
+ }
+ *tail = tmp;
+ tail = &tmp->next;
+ }
+
+ tmp = GLOB_ALLOC(struct glob_pattern);
+ if (!tmp) {
+ error:
+ *tail = 0;
+ glob_free_pattern(list);
+ return 0;
+ }
+ tmp->type = dirsep ? MATCH_DIR : MATCH_ALL;
+ tmp->str = 0;
+ *tail = tmp;
+ tmp->next = 0;
+
+ return list;
+}
static void
-push_globs(ary, s)
- VALUE ary;
- char *s;
+glob_free_pattern(struct glob_pattern *list)
+{
+ while (list) {
+ struct glob_pattern *tmp = list;
+ list = list->next;
+ if (tmp->str)
+ GLOB_FREE(tmp->str);
+ GLOB_FREE(tmp);
+ }
+}
+
+static char *
+join_path(const char *path, long len, int dirsep, const char *name, size_t namlen)
+{
+ char *buf = GLOB_ALLOC_N(char, len+namlen+(dirsep?1:0)+1);
+
+ if (!buf) return 0;
+ memcpy(buf, path, len);
+ if (dirsep) {
+ buf[len++] = '/';
+ }
+ memcpy(buf+len, name, namlen);
+ buf[len+namlen] = '\0';
+ return buf;
+}
+
+enum answer {UNKNOWN = -1, NO, YES};
+
+#ifndef S_ISDIR
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif
+
+#ifndef S_ISLNK
+# ifndef S_IFLNK
+# define S_ISLNK(m) (0)
+# else
+# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+# endif
+#endif
+
+struct glob_args {
+ void (*func)(const char *, VALUE, void *);
+ const char *path;
+ VALUE value;
+ rb_encoding *enc;
+};
+
+static VALUE
+glob_func_caller(VALUE val)
+{
+ struct glob_args *args = (struct glob_args *)val;
+
+ (*args->func)(args->path, args->value, args->enc);
+ return Qnil;
+}
+
+#define glob_call_func(func, path, arg, enc) (*(func))((path), (arg), (enc))
+
+static int
+glob_helper(
+ const char *path,
+ int dirsep, /* '/' should be placed before appending child entry's name to 'path'. */
+ enum answer exist, /* Does 'path' indicate an existing entry? */
+ enum answer isdir, /* Does 'path' indicate a directory or a symlink to a directory? */
+ struct glob_pattern **beg,
+ struct glob_pattern **end,
+ int flags,
+ ruby_glob_func *func,
+ VALUE arg,
+ rb_encoding *enc)
{
- char **fnames, **ff;
+ struct stat st;
+ int status = 0;
+ struct glob_pattern **cur, **new_beg, **new_end;
+ int plain = 0, magical = 0, recursive = 0, match_all = 0, match_dir = 0;
+ int escape = !(flags & FNM_NOESCAPE);
+ long pathlen;
+
+ for (cur = beg; cur < end; ++cur) {
+ struct glob_pattern *p = *cur;
+ if (p->type == RECURSIVE) {
+ recursive = 1;
+ p = p->next;
+ }
+ switch (p->type) {
+ case PLAIN:
+ plain = 1;
+ break;
+ case MAGICAL:
+ magical = 1;
+ break;
+ case MATCH_ALL:
+ match_all = 1;
+ break;
+ case MATCH_DIR:
+ match_dir = 1;
+ break;
+ case RECURSIVE:
+ rb_bug("continuous RECURSIVEs");
+ }
+ }
- fnames = glob_filename(s);
- if (fnames == (char**)-1) rb_sys_fail(s);
- ff = fnames;
- while (*ff) {
- ary_push(ary, str_new2(*ff));
- free(*ff);
- ff++;
+ pathlen = strlen(path);
+ if (*path) {
+ if (match_all && exist == UNKNOWN) {
+ if (do_lstat(path, &st, flags) == 0) {
+ exist = YES;
+ isdir = S_ISDIR(st.st_mode) ? YES : S_ISLNK(st.st_mode) ? UNKNOWN : NO;
+ }
+ else {
+ exist = NO;
+ isdir = NO;
+ }
+ }
+ if (match_dir && isdir == UNKNOWN) {
+ if (do_stat(path, &st, flags) == 0) {
+ exist = YES;
+ isdir = S_ISDIR(st.st_mode) ? YES : NO;
+ }
+ else {
+ exist = NO;
+ isdir = NO;
+ }
+ }
+ if (match_all && exist == YES) {
+ status = glob_call_func(func, path, arg, enc);
+ if (status) return status;
+ }
+ if (match_dir && isdir == YES) {
+ char *tmp = join_path(path, pathlen, dirsep, "", 0);
+ if (!tmp) return -1;
+ status = glob_call_func(func, tmp, arg, enc);
+ GLOB_FREE(tmp);
+ if (status) return status;
+ }
}
- free(fnames);
+
+ if (exist == NO || isdir == NO) return 0;
+
+ if (magical || recursive) {
+ struct dirent *dp;
+ DIR *dirp;
+ IF_HAVE_HFS(int hfs_p);
+ dirp = do_opendir(*path ? path : ".", flags, enc);
+ if (dirp == NULL) return 0;
+ IF_HAVE_HFS(hfs_p = is_hfs(dirp));
+
+ while ((dp = READDIR(dirp, enc)) != NULL) {
+ char *buf;
+ enum answer new_isdir = UNKNOWN;
+ const char *name;
+ size_t namlen;
+ int dotfile = 0;
+ IF_HAVE_HFS(VALUE utf8str = Qnil);
+
+ if (recursive && dp->d_name[0] == '.') {
+ ++dotfile;
+ if (!dp->d_name[1]) {
+ /* unless DOTMATCH, skip current directories not to recurse infinitely */
+ if (!(flags & FNM_DOTMATCH)) continue;
+ ++dotfile;
+ }
+ else if (dp->d_name[1] == '.' && !dp->d_name[2]) {
+ /* always skip parent directories not to recurse infinitely */
+ continue;
+ }
+ }
+
+ name = dp->d_name;
+ namlen = NAMLEN(dp);
+# if HAVE_HFS
+ if (hfs_p && has_nonascii(name, namlen)) {
+ if (!NIL_P(utf8str = rb_str_normalize_ospath(name, namlen))) {
+ RSTRING_GETMEM(utf8str, name, namlen);
+ }
+ }
+# endif
+ buf = join_path(path, pathlen, dirsep, name, namlen);
+ IF_HAVE_HFS(if (!NIL_P(utf8str)) rb_str_resize(utf8str, 0));
+ if (!buf) {
+ status = -1;
+ break;
+ }
+ name = buf + pathlen + (dirsep != 0);
+ if (recursive && dotfile < ((flags & FNM_DOTMATCH) ? 2 : 1)) {
+ /* RECURSIVE never match dot files unless FNM_DOTMATCH is set */
+#ifndef _WIN32
+ if (do_lstat(buf, &st, flags) == 0)
+ new_isdir = S_ISDIR(st.st_mode) ? YES : S_ISLNK(st.st_mode) ? UNKNOWN : NO;
+ else
+ new_isdir = NO;
+#else
+ new_isdir = dp->d_isdir ? (!dp->d_isrep ? YES : UNKNOWN) : NO;
+#endif
+ }
+
+ new_beg = new_end = GLOB_ALLOC_N(struct glob_pattern *, (end - beg) * 2);
+ if (!new_beg) {
+ GLOB_FREE(buf);
+ status = -1;
+ break;
+ }
+
+ for (cur = beg; cur < end; ++cur) {
+ struct glob_pattern *p = *cur;
+ if (p->type == RECURSIVE) {
+ if (new_isdir == YES) /* not symlink but real directory */
+ *new_end++ = p; /* append recursive pattern */
+ p = p->next; /* 0 times recursion */
+ }
+ if (p->type == PLAIN || p->type == MAGICAL) {
+ if (fnmatch(p->str, enc, name, flags) == 0)
+ *new_end++ = p->next;
+ }
+ }
+
+ status = glob_helper(buf, 1, YES, new_isdir, new_beg, new_end,
+ flags, func, arg, enc);
+ GLOB_FREE(buf);
+ GLOB_FREE(new_beg);
+ if (status) break;
+ }
+
+ closedir(dirp);
+ }
+ else if (plain) {
+ struct glob_pattern **copy_beg, **copy_end, **cur2;
+
+ copy_beg = copy_end = GLOB_ALLOC_N(struct glob_pattern *, end - beg);
+ if (!copy_beg) return -1;
+ for (cur = beg; cur < end; ++cur)
+ *copy_end++ = (*cur)->type == PLAIN ? *cur : 0;
+
+ for (cur = copy_beg; cur < copy_end; ++cur) {
+ if (*cur) {
+ char *buf;
+ char *name;
+ size_t len = strlen((*cur)->str) + 1;
+ name = GLOB_ALLOC_N(char, len);
+ if (!name) {
+ status = -1;
+ break;
+ }
+ memcpy(name, (*cur)->str, len);
+ if (escape)
+ len = remove_backslashes(name, name+len-1, enc) - name;
+
+ new_beg = new_end = GLOB_ALLOC_N(struct glob_pattern *, end - beg);
+ if (!new_beg) {
+ GLOB_FREE(name);
+ status = -1;
+ break;
+ }
+ *new_end++ = (*cur)->next;
+ for (cur2 = cur + 1; cur2 < copy_end; ++cur2) {
+ if (*cur2 && fnmatch((*cur2)->str, enc, name, flags) == 0) {
+ *new_end++ = (*cur2)->next;
+ *cur2 = 0;
+ }
+ }
+
+ buf = join_path(path, pathlen, dirsep, name, len);
+ GLOB_FREE(name);
+ if (!buf) {
+ GLOB_FREE(new_beg);
+ status = -1;
+ break;
+ }
+ status = glob_helper(buf, 1, UNKNOWN, UNKNOWN, new_beg,
+ new_end, flags, func, arg, enc);
+ GLOB_FREE(buf);
+ GLOB_FREE(new_beg);
+ if (status) break;
+ }
+ }
+
+ GLOB_FREE(copy_beg);
+ }
+
+ return status;
+}
+
+static int
+ruby_glob0(const char *path, int flags, ruby_glob_func *func, VALUE arg, rb_encoding *enc)
+{
+ struct glob_pattern *list;
+ const char *root, *start;
+ char *buf;
+ size_t n;
+ int status;
+
+ start = root = path;
+ flags |= FNM_SYSCASE;
+#if defined DOSISH
+ root = rb_enc_path_skip_prefix(root, root + strlen(root), enc);
+#endif
+
+ if (root && *root == '/') root++;
+
+ n = root - start;
+ buf = GLOB_ALLOC_N(char, n + 1);
+ if (!buf) return -1;
+ MEMCPY(buf, start, char, n);
+ buf[n] = '\0';
+
+ list = glob_make_pattern(root, root + strlen(root), flags, enc);
+ if (!list) {
+ GLOB_FREE(buf);
+ return -1;
+ }
+ status = glob_helper(buf, 0, UNKNOWN, UNKNOWN, &list, &list + 1, flags, func, arg, enc);
+ glob_free_pattern(list);
+ GLOB_FREE(buf);
+
+ return status;
+}
+
+int
+ruby_glob(const char *path, int flags, ruby_glob_func *func, VALUE arg)
+{
+ return ruby_glob0(path, flags & ~GLOB_VERBOSE, func, arg,
+ rb_ascii8bit_encoding());
+}
+
+static int
+rb_glob_caller(const char *path, VALUE a, void *enc)
+{
+ int status;
+ struct glob_args *args = (struct glob_args *)a;
+
+ args->path = path;
+ rb_protect(glob_func_caller, a, &status);
+ return status;
+}
+
+static int
+rb_glob2(const char *path, int flags,
+ void (*func)(const char *, VALUE, void *), VALUE arg,
+ rb_encoding* enc)
+{
+ struct glob_args args;
+
+ args.func = func;
+ args.value = arg;
+ args.enc = enc;
+
+ if (flags & FNM_SYSCASE) {
+ rb_warning("Dir.glob() ignores File::FNM_CASEFOLD");
+ }
+
+ return ruby_glob0(path, flags | GLOB_VERBOSE, rb_glob_caller, (VALUE)&args,
+ enc);
+}
+
+void
+rb_glob(const char *path, void (*func)(const char *, VALUE, void *), VALUE arg)
+{
+ int status = rb_glob2(path, 0, func, arg, rb_ascii8bit_encoding());
+ if (status) GLOB_JUMP_TAG(status);
}
static void
-push_braces(ary, s)
- VALUE ary;
- char *s;
+push_pattern(const char *path, VALUE ary, void *enc)
{
- char buf[MAXPATHLEN];
- char *p, *t, *b;
- char *lbrace, *rbrace;
+ rb_ary_push(ary, rb_external_str_new_with_enc(path, strlen(path), enc));
+}
+
+static int
+ruby_brace_expand(const char *str, int flags, ruby_glob_func *func, VALUE arg,
+ rb_encoding *enc)
+{
+ const int escape = !(flags & FNM_NOESCAPE);
+ const char *p = str;
+ const char *pend = p + strlen(p);
+ const char *s = p;
+ const char *lbrace = 0, *rbrace = 0;
+ int nest = 0, status = 0;
- p = s;
- lbrace = rbrace = 0;
while (*p) {
- if (*p == '{' && !lbrace) lbrace = p;
- if (*p == '}' && lbrace) rbrace = p;
- p++;
+ if (*p == '{' && nest++ == 0) {
+ lbrace = p;
+ }
+ if (*p == '}' && --nest <= 0) {
+ rbrace = p;
+ break;
+ }
+ if (*p == '\\' && escape) {
+ if (!*++p) break;
+ }
+ Inc(p, pend, enc);
}
- if (lbrace) {
+ if (lbrace && rbrace) {
+ size_t len = strlen(s) + 1;
+ char *buf = GLOB_ALLOC_N(char, len);
+ long shift;
+
+ if (!buf) return -1;
memcpy(buf, s, lbrace-s);
- b = buf + (lbrace-s);
+ shift = (lbrace-s);
p = lbrace;
- while (*p != '}') {
- t = p + 1;
- for (p = t; *p!='}' && *p!=','; p++) {
- /* skip inner braces */
- if (*p == '{') while (*p!='}') p++;
+ while (p < rbrace) {
+ const char *t = ++p;
+ nest = 0;
+ while (p < rbrace && !(*p == ',' && nest == 0)) {
+ if (*p == '{') nest++;
+ if (*p == '}') nest--;
+ if (*p == '\\' && escape) {
+ if (++p == rbrace) break;
+ }
+ Inc(p, pend, enc);
}
- memcpy(b, t, p-t);
- strcpy(b+(p-t), rbrace+1);
- push_braces(ary, buf);
+ memcpy(buf+shift, t, p-t);
+ strlcpy(buf+shift+(p-t), rbrace+1, len-(shift+(p-t)));
+ status = ruby_brace_expand(buf, flags, func, arg, enc);
+ if (status) break;
}
+ GLOB_FREE(buf);
}
- else {
- push_globs(ary, s);
+ else if (!lbrace && !rbrace) {
+ status = (*func)(s, arg, enc);
}
+
+ return status;
+}
+
+struct brace_args {
+ ruby_glob_func *func;
+ VALUE value;
+ int flags;
+};
+
+static int
+glob_brace(const char *path, VALUE val, void *enc)
+{
+ struct brace_args *arg = (struct brace_args *)val;
+
+ return ruby_glob0(path, arg->flags, arg->func, arg->value, enc);
+}
+
+static int
+ruby_brace_glob0(const char *str, int flags, ruby_glob_func *func, VALUE arg,
+ rb_encoding* enc)
+{
+ struct brace_args args;
+
+ args.func = func;
+ args.value = arg;
+ args.flags = flags;
+ return ruby_brace_expand(str, flags, glob_brace, (VALUE)&args, enc);
+}
+
+int
+ruby_brace_glob(const char *str, int flags, ruby_glob_func *func, VALUE arg)
+{
+ return ruby_brace_glob0(str, flags & ~GLOB_VERBOSE, func, arg,
+ rb_ascii8bit_encoding());
+}
+
+int
+ruby_brace_glob_with_enc(const char *str, int flags, ruby_glob_func *func, VALUE arg, rb_encoding *enc)
+{
+ return ruby_brace_glob0(str, flags & ~GLOB_VERBOSE, func, arg, enc);
+}
+
+static int
+push_glob(VALUE ary, VALUE str, int flags)
+{
+ struct glob_args args;
+ rb_encoding *enc = rb_enc_get(str);
+
+ if (enc == rb_usascii_encoding()) enc = rb_filesystem_encoding();
+ args.func = push_pattern;
+ args.value = ary;
+ args.enc = enc;
+
+ RB_GC_GUARD(str);
+ return ruby_brace_glob0(RSTRING_PTR(str), flags | GLOB_VERBOSE,
+ rb_glob_caller, (VALUE)&args, enc);
}
static VALUE
-dir_s_glob(dir, str)
- VALUE dir;
- struct RString *str;
+rb_push_glob(VALUE str, int flags) /* '\0' is delimiter */
{
- char *p, *pend;
- char buf[MAXPATHLEN];
- char *t, *t0;
- int nest;
+ long offset = 0;
VALUE ary;
- Check_Type(str, T_STRING);
+ GlobPathValue(str, TRUE);
+ ary = rb_ary_new();
+
+ while (offset < RSTRING_LEN(str)) {
+ char *p, *pend;
+ int status;
+ p = RSTRING_PTR(str) + offset;
+ status = push_glob(ary, rb_enc_str_new(p, strlen(p), rb_enc_get(str)),
+ flags);
+ if (status) GLOB_JUMP_TAG(status);
+ if (offset >= RSTRING_LEN(str)) break;
+ p += strlen(p) + 1;
+ pend = RSTRING_PTR(str) + RSTRING_LEN(str);
+ while (p < pend && !*p)
+ p++;
+ offset = p - RSTRING_PTR(str);
+ }
- ary = ary_new();
+ return ary;
+}
- p = str->ptr;
- pend = p + str->len;
+static VALUE
+dir_globs(long argc, const VALUE *argv, int flags)
+{
+ VALUE ary = rb_ary_new();
+ long i;
+
+ for (i = 0; i < argc; ++i) {
+ int status;
+ VALUE str = argv[i];
+ GlobPathValue(str, TRUE);
+ status = push_glob(ary, str, flags);
+ if (status) GLOB_JUMP_TAG(status);
+ }
- while (p < pend) {
- t = buf;
- while (p < pend && isdelim(*p)) p++;
- while (p < pend && !isdelim(*p)) {
- *t++ = *p++;
- }
- *t = '\0';
- t0 = buf;
- nest = 0;
- while (t0 < t) {
- if (*t0 == '{') nest+=2;
- if (*t0 == '}') nest+=3;
- t0++;
- }
- if (nest == 0) {
- push_globs(ary, buf);
- }
- else if (nest % 5 == 0) {
- push_braces(ary, buf);
- }
- /* else unmatched braces */
+ return ary;
+}
+
+/*
+ * call-seq:
+ * Dir[ string [, string ...] ] -> array
+ *
+ * Equivalent to calling
+ * <code>Dir.glob([</code><i>string,...</i><code>],0)</code>.
+ *
+ */
+static VALUE
+dir_s_aref(int argc, VALUE *argv, VALUE obj)
+{
+ if (argc == 1) {
+ return rb_push_glob(argv[0], 0);
+ }
+ return dir_globs(argc, argv, 0);
+}
+
+/*
+ * call-seq:
+ * Dir.glob( pattern, [flags] ) -> matches
+ * Dir.glob( pattern, [flags] ) { |filename| block } -> nil
+ *
+ * Expands +pattern+, which is an Array of patterns or a pattern String, and
+ * returns the results as +matches+ or as arguments given to the block.
+ *
+ * Note that this pattern is not a regexp, it's closer to a shell glob. See
+ * File::fnmatch for the meaning of the +flags+ parameter. Note that case
+ * sensitivity depends on your system (so File::FNM_CASEFOLD is ignored), as
+ * does the order in which the results are returned.
+ *
+ * <code>*</code>::
+ * Matches any file. Can be restricted by other values in the glob.
+ * Equivalent to <code>/ .* /x</code> in regexp.
+ *
+ * <code>*</code>:: Matches all files
+ * <code>c*</code>:: Matches all files beginning with <code>c</code>
+ * <code>*c</code>:: Matches all files ending with <code>c</code>
+ * <code>\*c\*</code>:: Match all files that have <code>c</code> in them
+ * (including at the beginning or end).
+ *
+ * Note, this will not match Unix-like hidden files (dotfiles). In order
+ * to include those in the match results, you must use the
+ * File::FNM_DOTMATCH flag or something like <code>"{*,.*}"</code>.
+ *
+ * <code>**</code>::
+ * Matches directories recursively.
+ *
+ * <code>?</code>::
+ * Matches any one character. Equivalent to <code>/.{1}/</code> in regexp.
+ *
+ * <code>[set]</code>::
+ * Matches any one character in +set+. Behaves exactly like character sets
+ * in Regexp, including set negation (<code>[^a-z]</code>).
+ *
+ * <code>{p,q}</code>::
+ * Matches either literal <code>p</code> or literal <code>q</code>.
+ * Equivalent to pattern alternation in regexp.
+ *
+ * Matching literals may be more than one character in length. More than
+ * two literals may be specified.
+ *
+ * <code> \\ </code>::
+ * Escapes the next metacharacter.
+ *
+ * Note that this means you cannot use backslash on windows as part of a
+ * glob, i.e. <code>Dir["c:\\foo*"]</code> will not work, use
+ * <code>Dir["c:/foo*"]</code> instead.
+ *
+ * Examples:
+ *
+ * Dir["config.?"] #=> ["config.h"]
+ * Dir.glob("config.?") #=> ["config.h"]
+ * Dir.glob("*.[a-z][a-z]") #=> ["main.rb"]
+ * Dir.glob("*.[^r]*") #=> ["config.h"]
+ * Dir.glob("*.{rb,h}") #=> ["main.rb", "config.h"]
+ * Dir.glob("*") #=> ["config.h", "main.rb"]
+ * Dir.glob("*", File::FNM_DOTMATCH) #=> [".", "..", "config.h", "main.rb"]
+ *
+ * rbfiles = File.join("**", "*.rb")
+ * Dir.glob(rbfiles) #=> ["main.rb",
+ * # "lib/song.rb",
+ * # "lib/song/karaoke.rb"]
+ * libdirs = File.join("**", "lib")
+ * Dir.glob(libdirs) #=> ["lib"]
+ *
+ * librbfiles = File.join("**", "lib", "**", "*.rb")
+ * Dir.glob(librbfiles) #=> ["lib/song.rb",
+ * # "lib/song/karaoke.rb"]
+ *
+ * librbfiles = File.join("**", "lib", "*.rb")
+ * Dir.glob(librbfiles) #=> ["lib/song.rb"]
+ */
+static VALUE
+dir_s_glob(int argc, VALUE *argv, VALUE obj)
+{
+ VALUE str, rflags, ary;
+ int flags;
+
+ if (rb_scan_args(argc, argv, "11", &str, &rflags) == 2)
+ flags = NUM2INT(rflags);
+ else
+ flags = 0;
+
+ ary = rb_check_array_type(str);
+ if (NIL_P(ary)) {
+ ary = rb_push_glob(str, flags);
+ }
+ else {
+ volatile VALUE v = ary;
+ ary = dir_globs(RARRAY_LEN(v), RARRAY_CONST_PTR(v), flags);
+ }
+
+ if (rb_block_given_p()) {
+ rb_ary_each(ary);
+ return Qnil;
}
return ary;
}
static VALUE
-dir_foreach(io, dirname)
- VALUE io;
- struct RString *dirname;
+dir_open_dir(int argc, VALUE *argv)
+{
+ VALUE dir = rb_funcall2(rb_cDir, rb_intern("open"), argc, argv);
+
+ rb_check_typeddata(dir, &dir_data_type);
+ return dir;
+}
+
+
+/*
+ * call-seq:
+ * Dir.foreach( dirname ) {| filename | block } -> nil
+ * Dir.foreach( dirname, encoding: enc ) {| filename | block } -> nil
+ * Dir.foreach( dirname ) -> an_enumerator
+ * Dir.foreach( dirname, encoding: enc ) -> an_enumerator
+ *
+ * Calls the block once for each entry in the named directory, passing
+ * the filename of each entry as a parameter to the block.
+ *
+ * If no block is given, an enumerator is returned instead.
+ *
+ * Dir.foreach("testdir") {|x| puts "Got #{x}" }
+ *
+ * <em>produces:</em>
+ *
+ * Got .
+ * Got ..
+ * Got config.h
+ * Got main.rb
+ *
+ */
+static VALUE
+dir_foreach(int argc, VALUE *argv, VALUE io)
{
VALUE dir;
- dir = dir_s_open(cDir, dirname);
- return rb_ensure(dir_each, dir, dir_close, dir);
+ RETURN_ENUMERATOR(io, argc, argv);
+ dir = dir_open_dir(argc, argv);
+ rb_ensure(dir_each, dir, dir_close, dir);
+ return Qnil;
}
-void
-Init_Dir()
+/*
+ * call-seq:
+ * Dir.entries( dirname ) -> array
+ * Dir.entries( dirname, encoding: enc ) -> array
+ *
+ * Returns an array containing all of the filenames in the given
+ * directory. Will raise a <code>SystemCallError</code> if the named
+ * directory doesn't exist.
+ *
+ * The optional <i>enc</i> argument specifies the encoding of the directory.
+ * If not specified, the filesystem encoding is used.
+ *
+ * Dir.entries("testdir") #=> [".", "..", "config.h", "main.rb"]
+ *
+ */
+static VALUE
+dir_entries(int argc, VALUE *argv, VALUE io)
+{
+ VALUE dir;
+
+ dir = dir_open_dir(argc, argv);
+ return rb_ensure(rb_Array, dir, dir_close, dir);
+}
+
+static int
+fnmatch_brace(const char *pattern, VALUE val, void *enc)
{
- extern VALUE mEnumerable;
+ struct brace_args *arg = (struct brace_args *)val;
+ VALUE path = arg->value;
+ rb_encoding *enc_pattern = enc;
+ rb_encoding *enc_path = rb_enc_get(path);
+
+ if (enc_pattern != enc_path) {
+ if (!rb_enc_asciicompat(enc_pattern))
+ return FNM_NOMATCH;
+ if (!rb_enc_asciicompat(enc_path))
+ return FNM_NOMATCH;
+ if (!rb_enc_str_asciionly_p(path)) {
+ int cr = ENC_CODERANGE_7BIT;
+ long len = strlen(pattern);
+ if (rb_str_coderange_scan_restartable(pattern, pattern + len,
+ enc_pattern, &cr) != len)
+ return FNM_NOMATCH;
+ if (cr != ENC_CODERANGE_7BIT)
+ return FNM_NOMATCH;
+ }
+ }
+ return (fnmatch(pattern, enc, RSTRING_PTR(path), arg->flags) == 0);
+}
- cDir = rb_define_class("Dir", cObject);
+/*
+ * call-seq:
+ * File.fnmatch( pattern, path, [flags] ) -> (true or false)
+ * File.fnmatch?( pattern, path, [flags] ) -> (true or false)
+ *
+ * Returns true if +path+ matches against +pattern+. The pattern is not a
+ * regular expression; instead it follows rules similar to shell filename
+ * globbing. It may contain the following metacharacters:
+ *
+ * <code>*</code>::
+ * Matches any file. Can be restricted by other values in the glob.
+ * Equivalent to <code>/ .* /x</code> in regexp.
+ *
+ * <code>*</code>:: Matches all files regular files
+ * <code>c*</code>:: Matches all files beginning with <code>c</code>
+ * <code>*c</code>:: Matches all files ending with <code>c</code>
+ * <code>\*c*</code>:: Matches all files that have <code>c</code> in them
+ * (including at the beginning or end).
+ *
+ * To match hidden files (that start with a <code>.</code> set the
+ * File::FNM_DOTMATCH flag.
+ *
+ * <code>**</code>::
+ * Matches directories recursively or files expansively.
+ *
+ * <code>?</code>::
+ * Matches any one character. Equivalent to <code>/.{1}/</code> in regexp.
+ *
+ * <code>[set]</code>::
+ * Matches any one character in +set+. Behaves exactly like character sets
+ * in Regexp, including set negation (<code>[^a-z]</code>).
+ *
+ * <code> \ </code>::
+ * Escapes the next metacharacter.
+ *
+ * <code>{a,b}</code>::
+ * Matches pattern a and pattern b if File::FNM_EXTGLOB flag is enabled.
+ * Behaves like a Regexp union (<code>(?:a|b)</code>).
+ *
+ * +flags+ is a bitwise OR of the <code>FNM_XXX</code> constants. The same
+ * glob pattern and flags are used by Dir::glob.
+ *
+ * Examples:
+ *
+ * File.fnmatch('cat', 'cat') #=> true # match entire string
+ * File.fnmatch('cat', 'category') #=> false # only match partial string
+ *
+ * File.fnmatch('c{at,ub}s', 'cats') #=> false # { } isn't supported by default
+ * File.fnmatch('c{at,ub}s', 'cats', File::FNM_EXTGLOB) #=> true # { } is supported on FNM_EXTGLOB
+ *
+ * File.fnmatch('c?t', 'cat') #=> true # '?' match only 1 character
+ * File.fnmatch('c??t', 'cat') #=> false # ditto
+ * File.fnmatch('c*', 'cats') #=> true # '*' match 0 or more characters
+ * File.fnmatch('c*t', 'c/a/b/t') #=> true # ditto
+ * File.fnmatch('ca[a-z]', 'cat') #=> true # inclusive bracket expression
+ * File.fnmatch('ca[^t]', 'cat') #=> false # exclusive bracket expression ('^' or '!')
+ *
+ * File.fnmatch('cat', 'CAT') #=> false # case sensitive
+ * File.fnmatch('cat', 'CAT', File::FNM_CASEFOLD) #=> true # case insensitive
+ *
+ * File.fnmatch('?', '/', File::FNM_PATHNAME) #=> false # wildcard doesn't match '/' on FNM_PATHNAME
+ * File.fnmatch('*', '/', File::FNM_PATHNAME) #=> false # ditto
+ * File.fnmatch('[/]', '/', File::FNM_PATHNAME) #=> false # ditto
+ *
+ * File.fnmatch('\?', '?') #=> true # escaped wildcard becomes ordinary
+ * File.fnmatch('\a', 'a') #=> true # escaped ordinary remains ordinary
+ * File.fnmatch('\a', '\a', File::FNM_NOESCAPE) #=> true # FNM_NOESCAPE makes '\' ordinary
+ * File.fnmatch('[\?]', '?') #=> true # can escape inside bracket expression
+ *
+ * File.fnmatch('*', '.profile') #=> false # wildcard doesn't match leading
+ * File.fnmatch('*', '.profile', File::FNM_DOTMATCH) #=> true # period by default.
+ * File.fnmatch('.*', '.profile') #=> true
+ *
+ * rbfiles = '**' '/' '*.rb' # you don't have to do like this. just write in single string.
+ * File.fnmatch(rbfiles, 'main.rb') #=> false
+ * File.fnmatch(rbfiles, './main.rb') #=> false
+ * File.fnmatch(rbfiles, 'lib/song.rb') #=> true
+ * File.fnmatch('**.rb', 'main.rb') #=> true
+ * File.fnmatch('**.rb', './main.rb') #=> false
+ * File.fnmatch('**.rb', 'lib/song.rb') #=> true
+ * File.fnmatch('*', 'dave/.profile') #=> true
+ *
+ * pattern = '*' '/' '*'
+ * File.fnmatch(pattern, 'dave/.profile', File::FNM_PATHNAME) #=> false
+ * File.fnmatch(pattern, 'dave/.profile', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=> true
+ *
+ * pattern = '**' '/' 'foo'
+ * File.fnmatch(pattern, 'a/b/c/foo', File::FNM_PATHNAME) #=> true
+ * File.fnmatch(pattern, '/a/b/c/foo', File::FNM_PATHNAME) #=> true
+ * File.fnmatch(pattern, 'c:/a/b/c/foo', File::FNM_PATHNAME) #=> true
+ * File.fnmatch(pattern, 'a/.b/c/foo', File::FNM_PATHNAME) #=> false
+ * File.fnmatch(pattern, 'a/.b/c/foo', File::FNM_PATHNAME | File::FNM_DOTMATCH) #=> true
+ */
+static VALUE
+file_s_fnmatch(int argc, VALUE *argv, VALUE obj)
+{
+ VALUE pattern, path;
+ VALUE rflags;
+ int flags;
+
+ if (rb_scan_args(argc, argv, "21", &pattern, &path, &rflags) == 3)
+ flags = NUM2INT(rflags);
+ else
+ flags = 0;
+
+ StringValue(pattern);
+ FilePathStringValue(path);
+
+ if (flags & FNM_EXTGLOB) {
+ struct brace_args args;
+
+ args.value = path;
+ args.flags = flags;
+ if (ruby_brace_expand(RSTRING_PTR(pattern), flags, fnmatch_brace,
+ (VALUE)&args, rb_enc_get(pattern)) > 0)
+ return Qtrue;
+ }
+ else {
+ rb_encoding *enc = rb_enc_compatible(pattern, path);
+ if (!enc) return Qfalse;
+ if (fnmatch(RSTRING_PTR(pattern), enc, RSTRING_PTR(path), flags) == 0)
+ return Qtrue;
+ }
+ RB_GC_GUARD(pattern);
+
+ return Qfalse;
+}
- rb_include_module(cDir, mEnumerable);
+/*
+ * call-seq:
+ * Dir.home() -> "/home/me"
+ * Dir.home("root") -> "/root"
+ *
+ * Returns the home directory of the current user or the named user
+ * if given.
+ */
+static VALUE
+dir_s_home(int argc, VALUE *argv, VALUE obj)
+{
+ VALUE user;
+ const char *u = 0;
+
+ rb_check_arity(argc, 0, 1);
+ user = (argc > 0) ? argv[0] : Qnil;
+ if (!NIL_P(user)) {
+ SafeStringValue(user);
+ rb_must_asciicompat(user);
+ u = StringValueCStr(user);
+ if (*u) {
+ return rb_home_dir_of(user, rb_str_new(0, 0));
+ }
+ }
+ return rb_default_home_dir(rb_str_new(0, 0));
- rb_define_singleton_method(cDir, "open", dir_s_open, 1);
- rb_define_singleton_method(cDir, "foreach", dir_foreach, 1);
+}
- rb_define_method(cDir,"each", dir_each, 0);
- rb_define_method(cDir,"rewind", dir_rewind, 0);
- rb_define_method(cDir,"tell", dir_tell, 0);
- rb_define_method(cDir,"seek", dir_seek, 1);
- rb_define_method(cDir,"close", dir_close, 0);
+#if 0
+/*
+ * call-seq:
+ * Dir.exist?(file_name) -> true or false
+ * Dir.exists?(file_name) -> true or false
+ *
+ * Returns <code>true</code> if the named file is a directory,
+ * <code>false</code> otherwise.
+ *
+ */
+VALUE
+rb_file_directory_p()
+{
+}
+#endif
- rb_define_singleton_method(cDir,"chdir", dir_s_chdir, -1);
- rb_define_singleton_method(cDir,"getwd", dir_s_getwd, 0);
- rb_define_singleton_method(cDir,"pwd", dir_s_getwd, 0);
- rb_define_singleton_method(cDir,"chroot", dir_s_chroot, 1);
- rb_define_singleton_method(cDir,"mkdir", dir_s_mkdir, -1);
- rb_define_singleton_method(cDir,"rmdir", dir_s_rmdir, 1);
- rb_define_singleton_method(cDir,"delete", dir_s_rmdir, 1);
- rb_define_singleton_method(cDir,"unlink", dir_s_rmdir, 1);
+static VALUE
+rb_dir_exists_p(VALUE obj, VALUE fname)
+{
+ rb_warning("Dir.exists? is a deprecated name, use Dir.exist? instead");
+ return rb_file_directory_p(obj, fname);
+}
- rb_define_singleton_method(cDir,"glob", dir_s_glob, 1);
- rb_define_singleton_method(cDir,"[]", dir_s_glob, 1);
+/*
+ * Objects of class <code>Dir</code> are directory streams representing
+ * directories in the underlying file system. They provide a variety of
+ * ways to list directories and their contents. See also
+ * <code>File</code>.
+ *
+ * The directory used in these examples contains the two regular files
+ * (<code>config.h</code> and <code>main.rb</code>), the parent
+ * directory (<code>..</code>), and the directory itself
+ * (<code>.</code>).
+ */
+void
+Init_Dir(void)
+{
+ rb_cDir = rb_define_class("Dir", rb_cObject);
+
+ rb_include_module(rb_cDir, rb_mEnumerable);
+
+ rb_define_alloc_func(rb_cDir, dir_s_alloc);
+ rb_define_singleton_method(rb_cDir, "open", dir_s_open, -1);
+ rb_define_singleton_method(rb_cDir, "foreach", dir_foreach, -1);
+ rb_define_singleton_method(rb_cDir, "entries", dir_entries, -1);
+
+ rb_define_method(rb_cDir,"initialize", dir_initialize, -1);
+ rb_define_method(rb_cDir,"path", dir_path, 0);
+ rb_define_method(rb_cDir,"to_path", dir_path, 0);
+ rb_define_method(rb_cDir,"inspect", dir_inspect, 0);
+ rb_define_method(rb_cDir,"read", dir_read, 0);
+ rb_define_method(rb_cDir,"each", dir_each, 0);
+ rb_define_method(rb_cDir,"rewind", dir_rewind, 0);
+ rb_define_method(rb_cDir,"tell", dir_tell, 0);
+ rb_define_method(rb_cDir,"seek", dir_seek, 1);
+ rb_define_method(rb_cDir,"pos", dir_tell, 0);
+ rb_define_method(rb_cDir,"pos=", dir_set_pos, 1);
+ rb_define_method(rb_cDir,"close", dir_close, 0);
+
+ rb_define_singleton_method(rb_cDir,"chdir", dir_s_chdir, -1);
+ rb_define_singleton_method(rb_cDir,"getwd", dir_s_getwd, 0);
+ rb_define_singleton_method(rb_cDir,"pwd", dir_s_getwd, 0);
+ rb_define_singleton_method(rb_cDir,"chroot", dir_s_chroot, 1);
+ rb_define_singleton_method(rb_cDir,"mkdir", dir_s_mkdir, -1);
+ rb_define_singleton_method(rb_cDir,"rmdir", dir_s_rmdir, 1);
+ rb_define_singleton_method(rb_cDir,"delete", dir_s_rmdir, 1);
+ rb_define_singleton_method(rb_cDir,"unlink", dir_s_rmdir, 1);
+ rb_define_singleton_method(rb_cDir,"home", dir_s_home, -1);
+
+ rb_define_singleton_method(rb_cDir,"glob", dir_s_glob, -1);
+ rb_define_singleton_method(rb_cDir,"[]", dir_s_aref, -1);
+ rb_define_singleton_method(rb_cDir,"exist?", rb_file_directory_p, 1);
+ rb_define_singleton_method(rb_cDir,"exists?", rb_dir_exists_p, 1);
+
+ rb_define_singleton_method(rb_cFile,"fnmatch", file_s_fnmatch, -1);
+ rb_define_singleton_method(rb_cFile,"fnmatch?", file_s_fnmatch, -1);
+
+ /* Document-const: File::Constants::FNM_NOESCAPE
+ *
+ * Disables escapes in File.fnmatch and Dir.glob patterns
+ */
+ rb_file_const("FNM_NOESCAPE", INT2FIX(FNM_NOESCAPE));
+
+ /* Document-const: File::Constants::FNM_PATHNAME
+ *
+ * Wildcards in File.fnmatch and Dir.glob patterns do not match directory
+ * separators
+ */
+ rb_file_const("FNM_PATHNAME", INT2FIX(FNM_PATHNAME));
+
+ /* Document-const: File::Constants::FNM_DOTMATCH
+ *
+ * The '*' wildcard matches filenames starting with "." in File.fnmatch
+ * and Dir.glob patterns
+ */
+ rb_file_const("FNM_DOTMATCH", INT2FIX(FNM_DOTMATCH));
+
+ /* Document-const: File::Constants::FNM_CASEFOLD
+ *
+ * Makes File.fnmatch patterns case insensitive (but not Dir.glob
+ * patterns).
+ */
+ rb_file_const("FNM_CASEFOLD", INT2FIX(FNM_CASEFOLD));
+
+ /* Document-const: File::Constants::FNM_EXTGLOB
+ *
+ * Allows file globbing through "{a,b}" in File.fnmatch patterns.
+ */
+ rb_file_const("FNM_EXTGLOB", INT2FIX(FNM_EXTGLOB));
+ rb_file_const("FNM_SYSCASE", INT2FIX(FNM_SYSCASE));
}
diff --git a/dln.c b/dln.c
index b4005e973c..85ebe27cae 100644
--- a/dln.c
+++ b/dln.c
@@ -1,41 +1,69 @@
-/************************************************
+/**********************************************************************
dln.c -
- $Author: matz $
- $Date: 1994/12/09 01:28:23 $
+ $Author$
created at: Tue Jan 18 17:05:06 JST 1994
- Copyright (C) 1993-1996 Yukihiro Matsumoto
+ Copyright (C) 1993-2007 Yukihiro Matsumoto
-************************************************/
+**********************************************************************/
-#ifdef _AIX
-#pragma alloca
+#ifdef RUBY_EXPORT
+#include "ruby/ruby.h"
+#define dln_notimplement rb_notimplement
+#define dln_memerror rb_memerror
+#define dln_exit rb_exit
+#define dln_loaderror rb_loaderror
+#else
+#define dln_notimplement --->>> dln not implemented <<<---
+#define dln_memerror abort
+#define dln_exit exit
+static void dln_loaderror(const char *format, ...);
#endif
-
-#include "config.h"
-#include "defines.h"
#include "dln.h"
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#ifdef USE_DLN_A_OUT
char *dln_argv0;
+#endif
-#if defined(HAVE_ALLOCA_H) && !defined(__GNUC__)
+#if defined(HAVE_ALLOCA_H)
#include <alloca.h>
#endif
+#ifdef HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+
+#ifndef xmalloc
void *xmalloc();
void *xcalloc();
void *xrealloc();
+#endif
+
+#define free(x) xfree(x)
#include <stdio.h>
-#include <sys/file.h>
+#if defined(_WIN32)
+#include "missing/file.h"
+#endif
#include <sys/types.h>
#include <sys/stat.h>
+#ifndef S_ISDIR
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif
+
#ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
-#else
+#endif
+#ifndef MAXPATHLEN
# define MAXPATHLEN 1024
#endif
@@ -43,57 +71,93 @@ void *xrealloc();
# include <unistd.h>
#endif
-#if defined (HAVE_STRING_H)
-# include <string.h>
-#else
-# include <strings.h>
+#ifndef _WIN32
+char *getenv();
#endif
-char *strdup();
+#ifdef __APPLE__
+# if defined(HAVE_DLOPEN)
+ /* Mac OS X with dlopen (10.3 or later) */
+# define MACOSX_DLOPEN
+# else
+# define MACOSX_DYLD
+# endif
+#endif
-char *getenv();
+#if defined(__BEOS__) || defined(__HAIKU__)
+# include <image.h>
+#endif
-int eaccess();
+#ifndef dln_loaderror
+static void
+dln_loaderror(const char *format, ...)
+{
+ va_list ap;
+ va_start(ap, format);
+ vfprintf(stderr, format, ap);
+ va_end(ap);
+ abort();
+}
+#endif
-#if defined(HAVE_DLOPEN) && !defined(USE_DLN_A_OUT)
+#if defined(HAVE_DLOPEN) && !defined(USE_DLN_A_OUT) && !defined(_AIX) && !defined(MACOSX_DYLD) && !defined(_UNICOSMP)
/* dynamic load with dlopen() */
# define USE_DLN_DLOPEN
#endif
#ifndef FUNCNAME_PATTERN
-# if defined(__hp9000s300) || defined(__NetBSD__) || defined(__BORLANDC__) || defined(__FreeBSD__)
-# define FUNCNAME_PATTERN "_Init_%.200s"
+# if defined(__hp9000s300) || ((defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__)) && !defined(__ELF__)) || defined(__BORLANDC__) || defined(NeXT) || defined(__WATCOMC__) || defined(MACOSX_DYLD)
+# define FUNCNAME_PREFIX "_Init_"
# else
-# define FUNCNAME_PATTERN "Init_%.200s"
+# define FUNCNAME_PREFIX "Init_"
# endif
#endif
-static void
-init_funcname(buf, file)
- char *buf, *file;
+#if defined __CYGWIN__ || defined DOSISH
+#define isdirsep(x) ((x) == '/' || (x) == '\\')
+#else
+#define isdirsep(x) ((x) == '/')
+#endif
+
+static size_t
+init_funcname_len(const char **file)
{
- char *p, *slash;
+ const char *p = *file, *base, *dot = NULL;
/* Load the file as an object one */
- for (p = file, slash = p-1; *p; p++) /* Find position of last '/' */
- if (*p == '/') slash = p;
-
- sprintf(buf, FUNCNAME_PATTERN, slash + 1);
- for (p = buf; *p; p++) { /* Delete suffix it it exists */
- if (*p == '.') {
- *p = '\0'; break;
- }
+ for (base = p; *p; p++) { /* Find position of last '/' */
+ if (*p == '.' && !dot) dot = p;
+ if (isdirsep(*p)) base = p+1, dot = NULL;
}
+ *file = base;
+ /* Delete suffix if it exists */
+ return (dot ? dot : p) - base;
}
+static const char funcname_prefix[sizeof(FUNCNAME_PREFIX) - 1] = FUNCNAME_PREFIX;
+
+#define init_funcname(buf, file) do {\
+ const char *base = (file);\
+ const size_t flen = init_funcname_len(&base);\
+ const size_t plen = sizeof(funcname_prefix);\
+ char *const tmp = ALLOCA_N(char, plen+flen+1);\
+ if (!tmp) {\
+ dln_memerror();\
+ }\
+ memcpy(tmp, funcname_prefix, plen);\
+ memcpy(tmp+plen, base, flen);\
+ tmp[plen+flen] = '\0';\
+ *(buf) = tmp;\
+} while (0)
+
#ifdef USE_DLN_A_OUT
#ifndef LIBC_NAME
# define LIBC_NAME "libc.a"
#endif
-#ifndef DLN_DEFAULT_PATH
-# define DLN_DEFAULT_PATH "/lib:/usr/lib:."
+#ifndef DLN_DEFAULT_LIB_PATH
+# define DLN_DEFAULT_LIB_PATH "/lib:/usr/lib:/usr/local/lib:."
#endif
#include <errno.h>
@@ -101,16 +165,15 @@ init_funcname(buf, file)
static int dln_errno;
#define DLN_ENOEXEC ENOEXEC /* Exec format error */
-#define DLN_ECONFL 201 /* Symbol name conflict */
-#define DLN_ENOINIT 202 /* No inititalizer given */
-#define DLN_EUNDEF 203 /* Undefine symbol remains */
-#define DLN_ENOTLIB 204 /* Not a library file */
-#define DLN_EBADLIB 205 /* Malformed library file */
-#define DLN_EINIT 206 /* Not initialized */
+#define DLN_ECONFL 1201 /* Symbol name conflict */
+#define DLN_ENOINIT 1202 /* No initializer given */
+#define DLN_EUNDEF 1203 /* Undefine symbol remains */
+#define DLN_ENOTLIB 1204 /* Not a library file */
+#define DLN_EBADLIB 1205 /* Malformed library file */
+#define DLN_EINIT 1206 /* Not initialized */
static int dln_init_p = 0;
-#include "st.h"
#include <ar.h>
#include <a.out.h>
#ifndef N_COMM
@@ -122,26 +185,26 @@ static int dln_init_p = 0;
#define INVALID_OBJECT(h) (N_MAGIC(h) != OMAGIC)
+#include "ruby/util.h"
+#include "ruby/st.h"
+
static st_table *sym_tbl;
static st_table *undef_tbl;
static int load_lib();
static int
-load_header(fd, hdrp, disp)
- int fd;
- struct exec *hdrp;
- long disp;
+load_header(int fd, struct exec *hdrp, long disp)
{
int size;
lseek(fd, disp, 0);
- size = read(fd, hdrp, sizeof(*hdrp));
+ size = read(fd, hdrp, sizeof(struct exec));
if (size == -1) {
dln_errno = errno;
return -1;
}
- if (size != sizeof(*hdrp) || N_BADMAG(*hdrp)) {
+ if (size != sizeof(struct exec) || N_BADMAG(*hdrp)) {
dln_errno = DLN_ENOEXEC;
return -1;
}
@@ -165,7 +228,7 @@ load_header(fd, hdrp, disp)
#define RELOC_TARGET_SIZE(r) ((r)->r_length)
#endif
-#if defined(sun) && defined(sparc)
+#if defined(__sun) && defined(__sparc)
/* Sparc (Sun 4) macros */
# undef relocation_info
# define relocation_info reloc_info_sparc
@@ -201,16 +264,12 @@ static int reloc_r_length[] = {
#endif
static struct relocation_info *
-load_reloc(fd, hdrp, disp)
- int fd;
- struct exec *hdrp;
- long disp;
+load_reloc(int fd, struct exec *hdrp, long disp)
{
- struct relocation_info * reloc;
+ struct relocation_info *reloc;
int size;
lseek(fd, disp + N_TXTOFF(*hdrp) + hdrp->a_text + hdrp->a_data, 0);
-
size = hdrp->a_trsize + hdrp->a_drsize;
reloc = (struct relocation_info*)xmalloc(size);
if (reloc == NULL) {
@@ -228,10 +287,7 @@ load_reloc(fd, hdrp, disp)
}
static struct nlist *
-load_sym(fd, hdrp, disp)
- int fd;
- struct exec *hdrp;
- long disp;
+load_sym(int fd, struct exec *hdrp, long disp)
{
struct nlist * buffer;
struct nlist * sym;
@@ -272,9 +328,7 @@ load_sym(fd, hdrp, disp)
}
static st_table *
-sym_hash(hdrp, syms)
- struct exec *hdrp;
- struct nlist *syms;
+sym_hash(struct exec *hdrp, struct nlist *syms)
{
st_table *tbl;
struct nlist *sym = syms;
@@ -294,16 +348,16 @@ sym_hash(hdrp, syms)
}
static int
-dln_init(prog)
+dln_init(const char *prog)
{
- char *file;
+ char *file, fbuf[MAXPATHLEN];
int fd;
struct exec hdr;
struct nlist *syms;
if (dln_init_p == 1) return 0;
- file = dln_find_exe(prog, NULL);
+ file = dln_find_exe_r(prog, NULL, fbuf, sizeof(fbuf));
if (file == NULL || (fd = open(file, O_RDONLY)) < 0) {
dln_errno = errno;
return -1;
@@ -335,7 +389,7 @@ dln_init(prog)
if (c != '!') goto err_noexec;
p = buf;
- /* skip forwading spaces */
+ /* skip forwarding spaces */
while (read(fd, &c, 1) == 1) {
if (c == '\n') goto err_noexec;
if (c != '\t' && c != ' ') {
@@ -347,6 +401,10 @@ dln_init(prog)
while (read(fd, p, 1) == 1) {
if (*p == '\n' || *p == '\t' || *p == ' ') break;
p++;
+ if (p-buf >= MAXPATHLEN) {
+ dln_errno = ENAMETOOLONG;
+ return -1;
+ }
}
*p = '\0';
@@ -364,11 +422,7 @@ dln_init(prog)
}
static long
-load_text_data(fd, hdrp, bss, disp)
- int fd;
- struct exec *hdrp;
- int bss;
- long disp;
+load_text_data(int fd, struct exec *hdrp, int bss, long disp)
{
int size;
unsigned char* addr;
@@ -402,27 +456,26 @@ load_text_data(fd, hdrp, bss, disp)
}
static int
-undef_print(key, value)
- char *key, *value;
+undef_print(char *key, char *value)
{
fprintf(stderr, " %s\n", key);
return ST_CONTINUE;
}
static void
-dln_print_undef()
+dln_print_undef(void)
{
fprintf(stderr, " Undefined symbols:\n");
st_foreach(undef_tbl, undef_print, NULL);
}
static void
-dln_undefined()
+dln_undefined(void)
{
if (undef_tbl->num_entries > 0) {
fprintf(stderr, "dln: Calling undefined function\n");
dln_print_undef();
- rb_exit(1);
+ dln_exit(1);
}
}
@@ -440,10 +493,7 @@ struct undef {
static st_table *reloc_tbl = NULL;
static void
-link_undef(name, base, reloc)
- char *name;
- long base;
- struct relocation_info *reloc;
+link_undef(const char *name, long base, struct relocation_info *reloc)
{
static int u_no = 0;
struct undef *obj;
@@ -471,19 +521,16 @@ link_undef(name, base, reloc)
}
struct reloc_arg {
- char *name;
+ const char *name;
long value;
};
static int
-reloc_undef(no, undef, arg)
- int no;
- struct undef *undef;
- struct reloc_arg *arg;
+reloc_undef(int no, struct undef *undef, struct reloc_arg *arg)
{
int datum;
char *address;
-#if defined(sun) && defined(sparc)
+#if defined(__sun) && defined(__sparc)
unsigned int mask = 0;
#endif
@@ -492,7 +539,7 @@ reloc_undef(no, undef, arg)
datum = arg->value;
if (R_PCREL(&(undef->reloc))) datum -= undef->base;
-#if defined(sun) && defined(sparc)
+#if defined(__sun) && defined(__sparc)
datum += undef->reloc.r_addend;
datum >>= R_RIGHTSHIFT(&(undef->reloc));
mask = (1 << R_BITSIZE(&(undef->reloc))) - 1;
@@ -540,9 +587,7 @@ reloc_undef(no, undef, arg)
}
static void
-unlink_undef(name, value)
- char *name;
- long value;
+unlink_undef(const char *name, long value)
{
struct reloc_arg arg;
@@ -557,10 +602,7 @@ struct indr_data {
};
static int
-reloc_repl(no, undef, data)
- int no;
- struct undef *undef;
- struct indr_data *data;
+reloc_repl(int no, struct undef *undef, struct indr_data *data)
{
if (strcmp(data->name0, undef->name) == 0) {
free(undef->name);
@@ -571,12 +613,9 @@ reloc_repl(no, undef, data)
#endif
static int
-load_1(fd, disp, need_init)
- int fd;
- long disp;
- char *need_init;
+load_1(int fd, long disp, const char *need_init)
{
- static char *libc = LIBC_NAME;
+ static const char *libc = LIBC_NAME;
struct exec hdr;
struct relocation_info *reloc = NULL;
long block = 0;
@@ -585,7 +624,6 @@ load_1(fd, disp, need_init)
struct nlist *sym;
struct nlist *end;
int init_p = 0;
- char buf[256];
if (load_header(fd, &hdr, disp) == -1) return -1;
if (INVALID_OBJECT(hdr)) {
@@ -594,8 +632,12 @@ load_1(fd, disp, need_init)
}
reloc = load_reloc(fd, &hdr, disp);
if (reloc == NULL) return -1;
+
syms = load_sym(fd, &hdr, disp);
- if (syms == NULL) return -1;
+ if (syms == NULL) {
+ free(reloc);
+ return -1;
+ }
sym = syms;
end = syms + (hdr.a_syms / sizeof(struct nlist));
@@ -608,7 +650,7 @@ load_1(fd, disp, need_init)
char *key = sym->n_un.n_name;
if (st_lookup(sym_tbl, sym[1].n_un.n_name, &old_sym)) {
- if (st_delete(undef_tbl, &key, NULL)) {
+ if (st_delete(undef_tbl, (st_data_t*)&key, NULL)) {
unlink_undef(key, old_sym->n_value);
free(key);
}
@@ -621,7 +663,7 @@ load_1(fd, disp, need_init)
st_foreach(reloc_tbl, reloc_repl, &data);
st_insert(undef_tbl, strdup(sym[1].n_un.n_name), NULL);
- if (st_delete(undef_tbl, &key, NULL)) {
+ if (st_delete(undef_tbl, (st_data_t*)&key, NULL)) {
free(key);
}
}
@@ -672,7 +714,7 @@ load_1(fd, disp, need_init)
sym = syms;
while (sym < end) {
struct nlist *new_sym;
- char *key, *name;
+ char *key;
switch (sym->n_type) {
case N_COMM:
@@ -689,7 +731,7 @@ load_1(fd, disp, need_init)
}
key = sym->n_un.n_name;
- if (st_delete(undef_tbl, &key, NULL) != 0) {
+ if (st_delete(undef_tbl, (st_data_t*)&key, NULL) != 0) {
unlink_undef(key, sym->n_value);
free(key);
}
@@ -721,11 +763,11 @@ load_1(fd, disp, need_init)
while (rel < rel_end) {
char *address = (char*)(rel->r_address + block);
long datum = 0;
-#if defined(sun) && defined(sparc)
+#if defined(__sun) && defined(__sparc)
unsigned int mask = 0;
#endif
- if(rel >= rel_beg)
+ if (rel >= rel_beg)
address += hdr.a_text;
if (rel->r_extern) { /* Look it up in symbol-table */
@@ -742,7 +784,7 @@ load_1(fd, disp, need_init)
}
} /* end.. look it up */
else { /* is static */
- switch (R_SYMBOL(rel)) {
+ switch (R_SYMBOL(rel)) {
case N_TEXT:
case N_DATA:
datum = block;
@@ -756,7 +798,7 @@ load_1(fd, disp, need_init)
} /* end .. is static */
if (R_PCREL(rel)) datum -= block;
-#if defined(sun) && defined(sparc)
+#if defined(__sun) && defined(__sparc)
datum += rel->r_addend;
datum >>= R_RIGHTSHIFT(rel);
mask = (1 << R_BITSIZE(rel)) - 1;
@@ -798,18 +840,19 @@ load_1(fd, disp, need_init)
if (need_init) {
int len;
char **libs_to_be_linked = 0;
+ char *buf;
if (undef_tbl->num_entries > 0) {
if (load_lib(libc) == -1) goto err_exit;
}
- init_funcname(buf, need_init);
+ init_funcname(&buf, need_init);
len = strlen(buf);
for (sym = syms; sym<end; sym++) {
char *name = sym->n_un.n_name;
if (name[0] == '_' && sym->n_value >= block) {
- if (strcmp(name+1, "libs_to_be_linked") == 0) {
+ if (strcmp(name+1, "dln_libs_to_be_linked") == 0) {
libs_to_be_linked = (char**)sym->n_value;
}
else if (strcmp(name+1, buf) == 0) {
@@ -851,42 +894,27 @@ load_1(fd, disp, need_init)
static int target_offset;
static int
-search_undef(key, value, lib_tbl)
- char *key;
- int value;
- st_table *lib_tbl;
+search_undef(const char *key, int value, st_table *lib_tbl)
{
-#if 0
- static char *last = "";
- int offset;
-
- if (st_lookup(lib_tbl, key, &offset) == 0) return ST_CONTINUE;
- if (strcmp(last, key) != 0) {
- last = key;
- target_offset = offset;
- }
- return ST_STOP;
-#else
- int offset;
+ long offset;
if (st_lookup(lib_tbl, key, &offset) == 0) return ST_CONTINUE;
target_offset = offset;
return ST_STOP;
-#endif
}
struct symdef {
- int str_index;
+ int rb_str_index;
int lib_offset;
};
-char *dln_library_path = DLN_DEFAULT_PATH;
+const char *dln_librrb_ary_path = DLN_DEFAULT_LIB_PATH;
static int
-load_lib(lib)
- char *lib;
+load_lib(const char *lib)
{
- char *path, *file;
+ char *path, *file, fbuf[MAXPATHLEN];
+ char *envpath = 0;
char armagic[SARMAG];
int fd, size;
struct ar_hdr ahdr;
@@ -904,19 +932,22 @@ load_lib(lib)
dln_errno = DLN_EBADLIB;
if (lib[0] == '-' && lib[1] == 'l') {
- char *p = alloca(strlen(lib) + 4);
- sprintf(p, "lib%s.a", lib+2);
+ long len = strlen(lib) + 4;
+ char *p = alloca(len);
+ snprintf(p, len, "lib%s.a", lib+2);
lib = p;
}
/* library search path: */
/* look for environment variable DLN_LIBRARY_PATH first. */
- /* then variable dln_library_path. */
+ /* then variable dln_librrb_ary_path. */
/* if path is still NULL, use "." for path. */
path = getenv("DLN_LIBRARY_PATH");
- if (path == NULL) path = dln_library_path;
+ if (path == NULL) path = dln_librrb_ary_path;
+ else path = envpath = strdup(path);
- file = dln_find_file(lib, path);
+ file = dln_find_file_r(lib, path, fbuf, sizeof(fbuf));
+ if (envpath) free(envpath);
fd = open(file, O_RDONLY);
if (fd == -1) goto syserr;
size = read(fd, armagic, SARMAG);
@@ -943,7 +974,7 @@ load_lib(lib)
base = (struct symdef*)(data + 1);
name_base = (char*)(base + nsym) + sizeof(int);
while (nsym > 0) {
- char *name = name_base + base->str_index;
+ char *name = name_base + base->rb_str_index;
st_insert(lib_tbl, name, base->lib_offset + sizeof(ahdr));
nsym--;
@@ -1020,8 +1051,7 @@ load_lib(lib)
}
static int
-load(file)
- char *file;
+load(const char *file)
{
int fd;
int result;
@@ -1046,8 +1076,7 @@ load(file)
}
void*
-dln_sym(name)
- char *name;
+dln_sym(const char *name)
{
struct nlist *sym;
@@ -1059,32 +1088,64 @@ dln_sym(name)
#endif /* USE_DLN_A_OUT */
#ifdef USE_DLN_DLOPEN
-# ifdef __NetBSD__
-# include <nlist.h>
-# include <link.h>
-# else
-# include <dlfcn.h>
-# endif
+# include <dlfcn.h>
#endif
-#ifdef hpux
+#ifdef __hpux
#include <errno.h>
#include "dl.h"
#endif
-#ifdef _AIX
+#if defined(_AIX)
#include <ctype.h> /* for isdigit() */
#include <errno.h> /* for global errno */
-#include <string.h> /* for strerror() */
#include <sys/ldr.h>
#endif
#ifdef NeXT
-/*#include <mach-o/rld.h>*/
+#if NS_TARGET_MAJOR < 4
+#include <mach-o/rld.h>
+#else
+#include <mach-o/dyld.h>
+#ifndef NSLINKMODULE_OPTION_BINDNOW
+#define NSLINKMODULE_OPTION_BINDNOW 1
+#endif
+#endif
+#else
+#ifdef MACOSX_DYLD
+#include <mach-o/dyld.h>
+#endif
+#endif
+
+#if defined _WIN32 && !defined __CYGWIN__
+#include <windows.h>
+#include <imagehlp.h>
#endif
-static char *
-dln_strerror()
+#if defined _WIN32 && !defined __CYGWIN__
+static const char *
+dln_strerror(char *message, size_t size)
+{
+ int error = GetLastError();
+ char *p = message;
+ size_t len = snprintf(message, size, "%d: ", error);
+
+#define format_message(sublang) FormatMessage(\
+ FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, \
+ NULL, error, MAKELANGID(LANG_NEUTRAL, (sublang)), \
+ message + len, size - len, NULL)
+ if (format_message(SUBLANG_ENGLISH_US) == 0)
+ format_message(SUBLANG_DEFAULT);
+ for (p = message + len; *p; p++) {
+ if (*p == '\n' || *p == '\r')
+ *p = ' ';
+ }
+ return message;
+}
+#define dln_strerror() dln_strerror(message, sizeof message)
+#elif ! defined _AIX
+static const char *
+dln_strerror(void)
{
#ifdef USE_DLN_A_OUT
char *strerror();
@@ -1093,7 +1154,7 @@ dln_strerror()
case DLN_ECONFL:
return "Symbol name conflict";
case DLN_ENOINIT:
- return "No inititalizer given";
+ return "No initializer given";
case DLN_EUNDEF:
return "Unresolved symbols";
case DLN_ENOTLIB:
@@ -1108,103 +1169,200 @@ dln_strerror()
#endif
#ifdef USE_DLN_DLOPEN
- return dlerror();
+ return (char*)dlerror();
#endif
}
+#endif
-
-#ifdef _AIX
+#if defined(_AIX) && ! defined(_IA64)
static void
-aix_loaderror(char *pathname)
+aix_loaderror(const char *pathname)
+{
+ char *message[1024], errbuf[1024];
+ int i;
+#define ERRBUF_APPEND(s) strncat(errbuf, (s), sizeof(errbuf)-strlen(errbuf)-1)
+ snprintf(errbuf, sizeof(errbuf), "load failed - %s. ", pathname);
+
+ if (loadquery(L_GETMESSAGES, &message[0], sizeof(message)) != -1) {
+ ERRBUF_APPEND("Please issue below command for detailed reasons:\n\t");
+ ERRBUF_APPEND("/usr/sbin/execerror ruby ");
+ for (i=0; message[i]; i++) {
+ ERRBUF_APPEND("\"");
+ ERRBUF_APPEND(message[i]);
+ ERRBUF_APPEND("\" ");
+ }
+ ERRBUF_APPEND("\n");
+ } else {
+ ERRBUF_APPEND(strerror(errno));
+ ERRBUF_APPEND("[loadquery failed]");
+ }
+ dln_loaderror("%s", errbuf);
+}
+#endif
+
+#if defined _WIN32 && defined RUBY_EXPORT
+HANDLE rb_libruby_handle(void);
+
+static int
+rb_w32_check_imported(HMODULE ext, HMODULE mine)
{
- char *message[8], errbuf[1024];
- int i,j;
-
- struct errtab {
- int errno;
- char *errstr;
- } load_errtab[] = {
- {L_ERROR_TOOMANY, "too many errors, rest skipped."},
- {L_ERROR_NOLIB, "can't load library:"},
- {L_ERROR_UNDEF, "can't find symbol in library:"},
- {L_ERROR_RLDBAD,
- "RLD index out of range or bad relocation type:"},
- {L_ERROR_FORMAT, "not a valid, executable xcoff file:"},
- {L_ERROR_MEMBER,
- "file not an archive or does not contain requested member:"},
- {L_ERROR_TYPE, "symbol table mismatch:"},
- {L_ERROR_ALIGN, "text allignment in file is wrong."},
- {L_ERROR_SYSTEM, "System error:"},
- {L_ERROR_ERRNO, NULL}
- };
-
-#define LOAD_ERRTAB_LEN (sizeof(load_errtab)/sizeof(load_errtab[0]))
-#define ERRBUF_APPEND(s) strncat(errbuf, s, sizeof(errbuf)-strlen(errbuf)-1)
-
- sprintf(errbuf, "load failed - %.200s ", pathname);
-
- if (!loadquery(1, &message[0], sizeof(message)))
- ERRBUF_APPEND(strerror(errno));
- for(i = 0; message[i] && *message[i]; i++) {
- int nerr = atoi(message[i]);
- for (j=0; j<LOAD_ERRTAB_LEN ; j++) {
- if (nerr == load_errtab[i].errno && load_errtab[i].errstr)
- ERRBUF_APPEND(load_errtab[i].errstr);
+ ULONG size;
+ const IMAGE_IMPORT_DESCRIPTOR *desc;
+
+ desc = ImageDirectoryEntryToData(ext, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &size);
+ if (!desc) return 0;
+ while (desc->Name) {
+ PIMAGE_THUNK_DATA pint = (PIMAGE_THUNK_DATA)((char *)ext + desc->Characteristics);
+ PIMAGE_THUNK_DATA piat = (PIMAGE_THUNK_DATA)((char *)ext + desc->FirstThunk);
+ for (; piat->u1.Function; piat++, pint++) {
+ static const char prefix[] = "rb_";
+ PIMAGE_IMPORT_BY_NAME pii;
+ const char *name;
+
+ if (IMAGE_SNAP_BY_ORDINAL(pint->u1.Ordinal)) continue;
+ pii = (PIMAGE_IMPORT_BY_NAME)((char *)ext + (size_t)pint->u1.AddressOfData);
+ name = (const char *)pii->Name;
+ if (strncmp(name, prefix, sizeof(prefix) - 1) == 0) {
+ FARPROC addr = GetProcAddress(mine, name);
+ if (addr) return (FARPROC)piat->u1.Function == addr;
+ }
}
- while (isdigit(*message[i])) message[i]++ ;
- ERRBUF_APPEND(message[i]);
- ERRBUF_APPEND("\n");
+ desc++;
}
- errbuf[strlen(errbuf)-1] = '\0'; /* trim off last newline */
- LoadError(errbuf);
- return;
+ return 1;
}
#endif
-void
-dln_load(file)
- char *file;
+#if defined(DLN_NEEDS_ALT_SEPARATOR) && DLN_NEEDS_ALT_SEPARATOR
+#define translit_separator(src) do { \
+ char *tmp = ALLOCA_N(char, strlen(src) + 1), *p = tmp, c; \
+ do { \
+ *p++ = ((c = *file++) == '/') ? DLN_NEEDS_ALT_SEPARATOR : c; \
+ } while (c); \
+ (src) = tmp; \
+ } while (0)
+#else
+#define translit_separator(str) (void)(str)
+#endif
+
+void*
+dln_load(const char *file)
{
+#if !defined(_AIX) && !defined(NeXT)
+ const char *error = 0;
+#define DLN_ERROR() (error = dln_strerror(), strcpy(ALLOCA_N(char, strlen(error) + 1), error))
+#endif
+
+#if defined _WIN32 && !defined __CYGWIN__
+ HINSTANCE handle;
+ WCHAR *winfile;
+ char message[1024];
+ void (*init_fct)();
+ char *buf;
+
+ /* Load the file as an object one */
+ init_funcname(&buf, file);
+
+ /* Convert the file path to wide char */
+ winfile = rb_w32_mbstr_to_wstr(CP_UTF8, file, -1, NULL);
+ if (!winfile) {
+ dln_memerror();
+ }
+
+ /* Load file */
+ handle = LoadLibraryW(winfile);
+ free(winfile);
+
+ if (!handle) {
+ error = dln_strerror();
+ goto failed;
+ }
+
+#if defined _WIN32 && defined RUBY_EXPORT
+ if (!rb_w32_check_imported(handle, rb_libruby_handle())) {
+ FreeLibrary(handle);
+ error = "incompatible library version";
+ goto failed;
+ }
+#endif
+
+ if ((init_fct = (void(*)())GetProcAddress(handle, buf)) == NULL) {
+ dln_loaderror("%s - %s\n%s", dln_strerror(), buf, file);
+ }
+
+ /* Call the init code */
+ (*init_fct)();
+ return handle;
+#else
#ifdef USE_DLN_A_OUT
if (load(file) == -1) {
+ error = dln_strerror();
goto failed;
}
- return;
+ return 0;
#else
- char buf[MAXPATHLEN];
+ char *buf;
/* Load the file as an object one */
- init_funcname(buf, file);
+ init_funcname(&buf, file);
+ translit_separator(file);
#ifdef USE_DLN_DLOPEN
#define DLN_DEFINED
{
void *handle;
void (*init_fct)();
- int len = strlen(file);
-# ifndef RTLD_LAZY
-# define RTLD_LAZY 1
-# endif
-# ifndef RTLD_GLOBAL
-# define RTLD_GLOBAL 0
-# endif
+#ifndef RTLD_LAZY
+# define RTLD_LAZY 1
+#endif
+#ifdef __INTERIX
+# undef RTLD_GLOBAL
+#endif
+#ifndef RTLD_GLOBAL
+# define RTLD_GLOBAL 0
+#endif
+#ifdef __native_client__
+ char* p, *orig;
+ if (file[0] == '.' && file[1] == '/') file+=2;
+ orig = strdup(file);
+ for (p = file; *p; ++p) {
+ if (*p == '/') *p = '_';
+ }
+#endif
/* Load file */
- if ((handle = dlopen(file, RTLD_LAZY|RTLD_GLOBAL)) == NULL) {
+ if ((handle = (void*)dlopen(file, RTLD_LAZY|RTLD_GLOBAL)) == NULL) {
+#ifdef __native_client__
+ free(orig);
+#endif
+ error = dln_strerror();
goto failed;
}
- if ((init_fct = (void(*)())dlsym(handle, buf)) == NULL) {
+ init_fct = (void(*)())(VALUE)dlsym(handle, buf);
+#ifdef __native_client__
+ strcpy(file, orig);
+ free(orig);
+#endif
+#if defined __SYMBIAN32__
+ if (init_fct == NULL) {
+ init_fct = (void(*)())dlsym(handle, "1"); /* Some Symbian versions do not support symbol table in DLL, ordinal numbers only */
+ }
+#endif
+ if (init_fct == NULL) {
+ error = DLN_ERROR();
+ dlclose(handle);
goto failed;
}
/* Call the init code */
(*init_fct)();
- return;
+
+ return handle;
}
#endif /* USE_DLN_DLOPEN */
-#ifdef hpux
+#ifdef __hpux
#define DLN_DEFINED
{
shl_t lib = NULL;
@@ -1214,196 +1372,136 @@ dln_load(file)
flags = BIND_DEFERRED;
lib = shl_load(file, flags, 0);
if (lib == NULL) {
- rb_sys_fail(file);
+ extern int errno;
+ dln_loaderror("%s - %s", strerror(errno), file);
}
shl_findsym(&lib, buf, TYPE_PROCEDURE, (void*)&init_fct);
if (init_fct == NULL) {
shl_findsym(&lib, buf, TYPE_UNDEFINED, (void*)&init_fct);
if (init_fct == NULL) {
- extern int errno;
errno = ENOSYM;
- rb_sys_fail(file);
+ dln_loaderror("%s - %s", strerror(ENOSYM), file);
}
}
(*init_fct)();
- return;
+ return (void*)lib;
}
#endif /* hpux */
-#ifdef _AIX
+#if defined(_AIX) && ! defined(_IA64)
#define DLN_DEFINED
{
void (*init_fct)();
- init_fct = (void(*)())load(file, 1, 0);
+ init_fct = (void(*)())load((char*)file, 1, 0);
if (init_fct == NULL) {
aix_loaderror(file);
}
+ if (loadbind(0, (void*)dln_load, (void*)init_fct) == -1) {
+ aix_loaderror(file);
+ }
(*init_fct)();
- return;
+ return (void*)init_fct;
}
#endif /* _AIX */
-#ifdef NeXT
+#if defined(MACOSX_DYLD)
#define DLN_DEFINED
/*----------------------------------------------------
By SHIROYAMA Takayuki Psi@fortune.nest.or.jp
-
+
Special Thanks...
Yu tomoak-i@is.aist-nara.ac.jp,
Mi hisho@tasihara.nest.or.jp,
+ sunshine@sunshineco.com,
and... Miss ARAI Akino(^^;)
----------------------------------------------------*/
{
- unsigned long init_address;
- char *object_files[2] = {NULL, NULL};
+ int dyld_result;
+ NSObjectFileImage obj_file; /* handle, but not use it */
+ /* "file" is module file name .
+ "buf" is pointer to initial function name with "_" . */
void (*init_fct)();
- int len = strlen(file);
- char *point;
- char init_name[len +7];
-
- object_files[0] = file;
-
- /* Load object file, if return value ==0 , load failed*/
- if(rld_load(NULL, NULL, object_files, NULL) == 0) {
- LoadError("Failed to load %.200s", file);
- }
- /* lookup the initial function */
- if(rld_lookup(NULL, buf, &init_address) == 0) {
- LoadError("Failed to lookup Init function %.200s",file);
+
+ dyld_result = NSCreateObjectFileImageFromFile(file, &obj_file);
+
+ if (dyld_result != NSObjectFileImageSuccess) {
+ dln_loaderror("Failed to load %.200s", file);
}
- /* Cannot call *init_address directory, so copy this value to
- funtion pointer */
+ NSLinkModule(obj_file, file, NSLINKMODULE_OPTION_BINDNOW);
- init_fct = (void(*)())init_address;
+ /* lookup the initial function */
+ if (!NSIsSymbolNameDefined(buf)) {
+ dln_loaderror("Failed to lookup Init function %.200s",file);
+ }
+ init_fct = NSAddressOfSymbol(NSLookupAndBindSymbol(buf));
(*init_fct)();
- return ;
+
+ return (void*)init_fct;
}
#endif
+#if defined(__BEOS__) || defined(__HAIKU__)
+# define DLN_DEFINED
+ {
+ status_t err_stat; /* BeOS error status code */
+ image_id img_id; /* extension module unique id */
+ void (*init_fct)(); /* initialize function for extension module */
+
+ /* load extension module */
+ img_id = load_add_on(file);
+ if (img_id <= 0) {
+ dln_loaderror("Failed to load add_on %.200s error_code=%x",
+ file, img_id);
+ }
+
+ /* find symbol for module initialize function. */
+ /* The Be Book KernelKit Images section described to use
+ B_SYMBOL_TYPE_TEXT for symbol of function, not
+ B_SYMBOL_TYPE_CODE. Why ? */
+ /* strcat(init_fct_symname, "__Fv"); */ /* parameter nothing. */
+ /* "__Fv" dont need! The Be Book Bug ? */
+ err_stat = get_image_symbol(img_id, buf,
+ B_SYMBOL_TYPE_TEXT, (void **)&init_fct);
+
+ if (err_stat != B_NO_ERROR) {
+ char real_name[MAXPATHLEN];
+
+ strlcpy(real_name, buf, MAXPATHLEN);
+ strlcat(real_name, "__Fv", MAXPATHLEN);
+ err_stat = get_image_symbol(img_id, real_name,
+ B_SYMBOL_TYPE_TEXT, (void **)&init_fct);
+ }
+
+ if ((B_BAD_IMAGE_ID == err_stat) || (B_BAD_INDEX == err_stat)) {
+ unload_add_on(img_id);
+ dln_loaderror("Failed to lookup Init function %.200s", file);
+ }
+ else if (B_NO_ERROR != err_stat) {
+ char errmsg[] = "Internal of BeOS version. %.200s (symbol_name = %s)";
+ unload_add_on(img_id);
+ dln_loaderror(errmsg, strerror(err_stat), buf);
+ }
+
+ /* call module initialize function. */
+ (*init_fct)();
+ return (void*)img_id;
+ }
+#endif /* __BEOS__ || __HAIKU__ */
+
#ifndef DLN_DEFINED
- rb_notimplement("dynamic link not supported");
+ dln_notimplement();
#endif
#endif /* USE_DLN_A_OUT */
+#endif
#if !defined(_AIX) && !defined(NeXT)
failed:
- LoadError("%s - %s", dln_strerror(), file);
+ dln_loaderror("%s - %s", error, file);
#endif
-}
-
-static char *dln_find_1();
-
-char *
-dln_find_exe(fname, path)
- char *fname;
- char *path;
-{
- if (!path) path = getenv("PATH");
- if (!path) path = "/usr/local/bin:/usr/ucb:/usr/bin:/bin:.";
- return dln_find_1(fname, path, 1);
-}
-
-char *
-dln_find_file(fname, path)
- char *fname;
- char *path;
-{
- if (!path) path = ".";
- return dln_find_1(fname, path, 0);
-}
-
-static char fbuf[MAXPATHLEN];
-
-static char *
-dln_find_1(fname, path, exe_flag)
- char *fname;
- char *path;
- int exe_flag; /* non 0 if looking for executable. */
-{
- register char *dp;
- register char *ep;
- register char *bp;
- struct stat st;
-
- if (fname[0] == '/') return fname;
- if (strncmp("./", fname, 2) == 0 || strncmp("../", fname, 3) == 0)
- return fname;
-
- for (dp = path;; dp = ++ep) {
- register int l;
- int i;
- int fspace;
-
- /* extract a component */
- ep = strchr(dp, ':');
- if (ep == NULL)
- ep = dp+strlen(dp);
-
- /* find the length of that component */
- l = ep - dp;
- bp = fbuf;
- fspace = sizeof fbuf - 2;
- if (l > 0) {
- /*
- ** If the length of the component is zero length,
- ** start from the current directory. If the
- ** component begins with "~", start from the
- ** user's $HOME environment variable. Otherwise
- ** take the path literally.
- */
-
- if (*dp == '~' && (l == 1 || dp[1] == '/')) {
- char *home;
-
- home = getenv("HOME");
- if (home != NULL) {
- i = strlen(home);
- if ((fspace -= i) < 0)
- goto toolong;
- memcpy(bp, home, i);
- bp += i;
- }
- dp++;
- l--;
- }
- if (l > 0) {
- if ((fspace -= l) < 0)
- goto toolong;
- memcpy(bp, dp, l);
- bp += l;
- }
-
- /* add a "/" between directory and filename */
- if (ep[-1] != '/')
- *bp++ = '/';
- }
-
- /* now append the file name */
- i = strlen(fname);
- if ((fspace -= i) < 0) {
- toolong:
- fprintf(stderr, "openpath: pathname too long (ignored)\n");
- *bp = '\0';
- fprintf(stderr, "\tDirectory \"%s\"\n", fbuf);
- fprintf(stderr, "\tFile \"%s\"\n", fname);
- continue;
- }
- memcpy(bp, fname, i + 1);
- if (stat(fbuf, &st) == 0) {
- if (exe_flag == 0) return fbuf;
- /* looking for executable */
- if (eaccess(fbuf, X_OK) == 0) return fbuf;
- }
- /* if not, and no other alternatives, life is bleak */
- if (*ep == '\0') {
- return NULL;
- }
-
- /* otherwise try the next component in the search path */
- }
+ return 0; /* dummy return */
}
diff --git a/dln.h b/dln.h
index 79d99e74c1..d98b2607e2 100644
--- a/dln.h
+++ b/dln.h
@@ -1,22 +1,51 @@
-/************************************************
+/**********************************************************************
dln.h -
- $Author: matz $
- $Revision: 1.2 $
- $Date: 1994/08/12 04:47:17 $
+ $Author$
created at: Wed Jan 19 16:53:09 JST 1994
-************************************************/
+ Copyright (C) 1993-2007 Yukihiro Matsumoto
+
+**********************************************************************/
+
#ifndef DLN_H
#define DLN_H
-char *dln_find_exe();
-char *dln_find_file();
+#ifdef __cplusplus
+# ifndef HAVE_PROTOTYPES
+# define HAVE_PROTOTYPES 1
+# endif
+# ifndef HAVE_STDARG_PROTOTYPES
+# define HAVE_STDARG_PROTOTYPES 1
+# endif
+#endif
+
+#undef _
+#ifdef HAVE_PROTOTYPES
+# define _(args) args
+#else
+# define _(args) ()
+#endif
+
+RUBY_SYMBOL_EXPORT_BEGIN
+
+#ifndef DLN_FIND_EXTRA_ARG
+#define DLN_FIND_EXTRA_ARG
+#endif
+#ifndef DLN_FIND_EXTRA_ARG_DECL
+#define DLN_FIND_EXTRA_ARG_DECL
+#endif
+
+char *dln_find_exe_r(const char*,const char*,char*,size_t DLN_FIND_EXTRA_ARG_DECL);
+char *dln_find_file_r(const char*,const char*,char*,size_t DLN_FIND_EXTRA_ARG_DECL);
#ifdef USE_DLN_A_OUT
extern char *dln_argv0;
#endif
-void dln_load();
+void *dln_load(const char*);
+
+RUBY_SYMBOL_EXPORT_END
+
#endif
diff --git a/dln_find.c b/dln_find.c
new file mode 100644
index 0000000000..f41ceb051d
--- /dev/null
+++ b/dln_find.c
@@ -0,0 +1,294 @@
+/**********************************************************************
+
+ dln_find.c -
+
+ $Author$
+ created at: Tue Jan 18 17:05:06 JST 1994
+
+ Copyright (C) 1993-2007 Yukihiro Matsumoto
+
+**********************************************************************/
+
+#ifdef RUBY_EXPORT
+#include "ruby/ruby.h"
+#define dln_warning rb_warning
+#define dln_warning_arg
+#else
+#define dln_warning fprintf
+#define dln_warning_arg stderr,
+#endif
+#include "dln.h"
+
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#ifdef USE_DLN_A_OUT
+char *dln_argv0;
+#endif
+
+#if defined(HAVE_ALLOCA_H)
+#include <alloca.h>
+#endif
+
+#ifdef HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+
+#include <stdio.h>
+#if defined(_WIN32)
+#include "missing/file.h"
+#endif
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifndef S_ISDIR
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif
+
+#ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+#ifndef MAXPATHLEN
+# define MAXPATHLEN 1024
+#endif
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if !defined(_WIN32) && !HAVE_DECL_GETENV
+char *getenv();
+#endif
+
+static char *dln_find_1(const char *fname, const char *path, char *buf, size_t size, int exe_flag
+ DLN_FIND_EXTRA_ARG_DECL);
+
+char *
+dln_find_exe_r(const char *fname, const char *path, char *buf, size_t size
+ DLN_FIND_EXTRA_ARG_DECL)
+{
+ char *envpath = 0;
+
+ if (!path) {
+ path = getenv(PATH_ENV);
+ if (path) path = envpath = strdup(path);
+ }
+
+ if (!path) {
+#if defined(_WIN32)
+ path = "/usr/local/bin;/usr/ucb;/usr/bin;/bin;.";
+#else
+ path = "/usr/local/bin:/usr/ucb:/usr/bin:/bin:.";
+#endif
+ }
+ buf = dln_find_1(fname, path, buf, size, 1 DLN_FIND_EXTRA_ARG);
+ if (envpath) free(envpath);
+ return buf;
+}
+
+char *
+dln_find_file_r(const char *fname, const char *path, char *buf, size_t size
+ DLN_FIND_EXTRA_ARG_DECL)
+{
+ if (!path) path = ".";
+ return dln_find_1(fname, path, buf, size, 0 DLN_FIND_EXTRA_ARG);
+}
+
+static char *
+dln_find_1(const char *fname, const char *path, char *fbuf, size_t size,
+ int exe_flag /* non 0 if looking for executable. */
+ DLN_FIND_EXTRA_ARG_DECL)
+{
+ register const char *dp;
+ register const char *ep;
+ register char *bp;
+ struct stat st;
+ size_t i, fnlen, fspace;
+#ifdef DOSISH
+ static const char extension[][5] = {
+ EXECUTABLE_EXTS,
+ };
+ size_t j;
+ int is_abs = 0, has_path = 0;
+ const char *ext = 0;
+#endif
+ const char *p = fname;
+
+ static const char pathname_too_long[] = "openpath: pathname too long (ignored)\n\
+\tDirectory \"%.*s\"%s\n\tFile \"%.*s\"%s\n";
+#define PATHNAME_TOO_LONG() dln_warning(dln_warning_arg pathname_too_long, \
+ ((bp - fbuf) > 100 ? 100 : (int)(bp - fbuf)), fbuf, \
+ ((bp - fbuf) > 100 ? "..." : ""), \
+ (fnlen > 100 ? 100 : (int)fnlen), fname, \
+ (fnlen > 100 ? "..." : ""))
+
+#define RETURN_IF(expr) if (expr) return (char *)fname;
+
+ RETURN_IF(!fname);
+ fnlen = strlen(fname);
+ if (fnlen >= size) {
+ dln_warning(dln_warning_arg
+ "openpath: pathname too long (ignored)\n\tFile \"%.*s\"%s\n",
+ (fnlen > 100 ? 100 : (int)fnlen), fname,
+ (fnlen > 100 ? "..." : ""));
+ return NULL;
+ }
+#ifdef DOSISH
+# ifndef CharNext
+# define CharNext(p) ((p)+1)
+# endif
+# ifdef DOSISH_DRIVE_LETTER
+ if (((p[0] | 0x20) - 'a') < 26 && p[1] == ':') {
+ p += 2;
+ is_abs = 1;
+ }
+# endif
+ switch (*p) {
+ case '/': case '\\':
+ is_abs = 1;
+ p++;
+ }
+ has_path = is_abs;
+ while (*p) {
+ switch (*p) {
+ case '/': case '\\':
+ has_path = 1;
+ ext = 0;
+ p++;
+ break;
+ case '.':
+ ext = p;
+ p++;
+ break;
+ default:
+ p = CharNext(p);
+ }
+ }
+ if (ext) {
+ for (j = 0; STRCASECMP(ext, extension[j]); ) {
+ if (++j == sizeof(extension) / sizeof(extension[0])) {
+ ext = 0;
+ break;
+ }
+ }
+ }
+ ep = bp = 0;
+ if (!exe_flag) {
+ RETURN_IF(is_abs);
+ }
+ else if (has_path) {
+ RETURN_IF(ext);
+ i = p - fname;
+ if (i + 1 > size) goto toolong;
+ fspace = size - i - 1;
+ bp = fbuf;
+ ep = p;
+ memcpy(fbuf, fname, i + 1);
+ goto needs_extension;
+ }
+ p = fname;
+#endif
+
+ if (*p == '.' && *++p == '.') ++p;
+ RETURN_IF(*p == '/');
+ RETURN_IF(exe_flag && strchr(fname, '/'));
+
+#undef RETURN_IF
+
+ for (dp = path;; dp = ++ep) {
+ register size_t l;
+
+ /* extract a component */
+ ep = strchr(dp, PATH_SEP[0]);
+ if (ep == NULL)
+ ep = dp+strlen(dp);
+
+ /* find the length of that component */
+ l = ep - dp;
+ bp = fbuf;
+ fspace = size - 2;
+ if (l > 0) {
+ /*
+ ** If the length of the component is zero length,
+ ** start from the current directory. If the
+ ** component begins with "~", start from the
+ ** user's $HOME environment variable. Otherwise
+ ** take the path literally.
+ */
+
+ if (*dp == '~' && (l == 1 ||
+#if defined(DOSISH)
+ dp[1] == '\\' ||
+#endif
+ dp[1] == '/')) {
+ char *home;
+
+ home = getenv("HOME");
+ if (home != NULL) {
+ i = strlen(home);
+ if (fspace < i)
+ goto toolong;
+ fspace -= i;
+ memcpy(bp, home, i);
+ bp += i;
+ }
+ dp++;
+ l--;
+ }
+ if (l > 0) {
+ if (fspace < l)
+ goto toolong;
+ fspace -= l;
+ memcpy(bp, dp, l);
+ bp += l;
+ }
+
+ /* add a "/" between directory and filename */
+ if (ep[-1] != '/')
+ *bp++ = '/';
+ }
+
+ /* now append the file name */
+ i = fnlen;
+ if (fspace < i) {
+ toolong:
+ PATHNAME_TOO_LONG();
+ goto next;
+ }
+ fspace -= i;
+ memcpy(bp, fname, i + 1);
+
+#if defined(DOSISH)
+ if (exe_flag && !ext) {
+ needs_extension:
+ for (j = 0; j < sizeof(extension) / sizeof(extension[0]); j++) {
+ if (fspace < strlen(extension[j])) {
+ PATHNAME_TOO_LONG();
+ continue;
+ }
+ strlcpy(bp + i, extension[j], fspace);
+ if (stat(fbuf, &st) == 0)
+ return fbuf;
+ }
+ goto next;
+ }
+#endif /* _WIN32 or __EMX__ */
+
+ if (stat(fbuf, &st) == 0) {
+ if (exe_flag == 0) return fbuf;
+ /* looking for executable */
+ if (!S_ISDIR(st.st_mode) && eaccess(fbuf, X_OK) == 0)
+ return fbuf;
+ }
+ next:
+ /* if not, and no other alternatives, life is bleak */
+ if (*ep == '\0') {
+ return NULL;
+ }
+
+ /* otherwise try the next component in the search path */
+ }
+}
diff --git a/dmydln.c b/dmydln.c
new file mode 100644
index 0000000000..25872efc98
--- /dev/null
+++ b/dmydln.c
@@ -0,0 +1,9 @@
+#include "ruby/ruby.h"
+
+void*
+dln_load(const char *file)
+{
+ rb_loaderror("this executable file can't load extension libraries");
+
+ UNREACHABLE;
+}
diff --git a/dmyext.c b/dmyext.c
index 4120d493c3..34ea7a02f4 100644
--- a/dmyext.c
+++ b/dmyext.c
@@ -1,4 +1,9 @@
void
-Init_ext()
+Init_ext(void)
+{
+}
+
+void
+Init_enc(void)
{
}
diff --git a/doc/.document b/doc/.document
new file mode 100644
index 0000000000..b48c0387a7
--- /dev/null
+++ b/doc/.document
@@ -0,0 +1,4 @@
+*.rdoc
+ChangeLog*
+NEWS-*
+syntax
diff --git a/doc/ChangeLog-1.8.0 b/doc/ChangeLog-1.8.0
new file mode 100644
index 0000000000..07d7c6b165
--- /dev/null
+++ b/doc/ChangeLog-1.8.0
@@ -0,0 +1,24350 @@
+Mon Aug 4 17:21:19 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (class_instance_method_list): methods defined in
+ singleton class and extended modules should be included.
+ [ruby-dev:21119]
+
+Mon Aug 4 13:05:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (method_proc): should specify YIELD_FUNC_SVALUE.
+ [ruby-dev:21107]
+
+ * marshal.c (w_object): should not call w_extended for USRMARSHAL
+ dump. [ruby-dev:21106]
+
+Mon Aug 4 10:42:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit/ui/console/testrunner.rb: Flushed io in the
+ Console::TestRunner so that it will output immediately.
+
+Mon Aug 4 10:27:22 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.h: remove unnecessary parentheses. [ruby-dev:20879]
+
+Mon Aug 4 10:00:47 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (receive_responses): raise exception to
+ client_thread. Thanks to William Webber.
+
+Mon Aug 4 09:22:53 2003 William Webber <wew@williamwebber.com>
+
+ * lib/net/imap.rb: convert RD to RDoc.
+
+Mon Aug 4 02:34:05 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_utime): never use utime() of C runtime.
+ [ruby-talk:77782]
+
+Sun Aug 3 23:56:50 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_call_super): should propagate previous block for
+ super call. [ruby-talk:77884]
+
+Sun Aug 3 22:07:47 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tkentry.rb: support 'validatecommand' option of
+ TkEntry/TkSpinbox widget
+
+ * ext/tk/sample/{demos-en,demos-jp}/spin.rb: add
+
+Sun Aug 3 19:25:28 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (call_trace_func): clear exception flag temporarily.
+ [ruby-dev:21090]
+
+Sun Aug 3 18:03:44 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * regex.h (re_mbctab): should refer to RUBY_EXPORT. [ruby-ext:02199]
+
+ * lib/un.h (help): new. % ruby -run -e help cp
+
+Sun Aug 3 08:53:06 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/sample/{demos-en,demos-jp}/image3.rb: add
+
+ * ext/tk/lib/tkcanvas.rb: bug fix on Tk object ID management
+
+ * ext/tk/lib/tktext.rb: ditto
+
+Sun Aug 3 02:55:52 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * process.c: modify macro to detect 'MacOS X' [ruby-talk:77849]
+
+ * ext/tcltklib/lib/tcltk.rb: bug fix ( NOT MAINTAINED : only
+ for running 'line2.rb' demo. )
+
+Sun Aug 3 02:45:06 2003 Koji Arai <jca02266@nifty.ne.jp>
+
+ * numeric.c (flo_to_s): get rid of buffer overflow.
+
+Sat Aug 2 23:51:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (appendline): clearerr(3) before raising exception, since
+ exception may be captured by rescue. [ruby-talk:77794]
+
+Sat Aug 2 09:58:13 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: bug fix --- TkGrid failed to treat
+ RELATIVE PLACEMENT
+
+ * ext/tk/sample/demos-en/, demos-jp/: add or modify some
+ widget demo scripts
+
+Sat Aug 2 20:59:38 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/https.rb: change an option name.
+ :SSLCertStore -> :SSLCertificateStore.
+
+Sat Aug 2 19:18:40 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/smtp.rb: respond_to? needs 2nd argument.
+ Thanks Jim Bob. [ruby-talk:77796]
+
+Sat Aug 2 15:11:54 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb (--no-undefined): annoying option removed.
+
+Sat Aug 2 14:53:55 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (pkg_config): get configuration by pkg-config. [new]
+
+ * ext/openssl/extconf.rb: use pkg_config.
+
+Sat Aug 2 13:45:17 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c: add "#pragma weak" for __libc_ia64_register_backing_store_base.
+ [ruby-dev:21072]
+
+Sat Aug 2 14:02:39 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (classname): find regular class name if not set.
+ [ruby-dev:20496]
+
+Sat Aug 2 09:58:13 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: bug fix --- forgot to entry a widget class
+ name of 'labelframe' widget
+
+ * ext/tk/sample/{demos-en,demos-jp}/{labelframe.rb,paned1.rb,
+ paned2.rb,spin.rb}: add demo-scripts to the JP/EN widget demos
+
+Sat Aug 2 05:04:30 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tkentry.rb: bug fix of TkEntry#delete
+
+ * ext/tk/samples/: bug fix of some widget demos
+
+ * ext/tk/lib/tk.rb: support <TkVariable object> == <Symbol>
+
+ * ext/tk/lib/*.rb: freeze some object for security reason
+
+Sat Aug 2 03:30:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_obj_singleton_methods): should not go up to
+ ancestors unless the recursive flag is set. [ruby-list:38007]
+
+ * eval.c (rb_yield_0): expand [] to nil if avalue is set.
+ [ruby-dev:21058]
+
+ * hash.c (env_each_key): use env_keys to avoid environment modify
+ on the fly.
+
+ * hash.c (env_each_value): use env_values for safety.
+
+ * hash.c (env_each): allocate environment array first.
+
+Fri Aug 2 03:20:00 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * lib/yaml/store.rb (YAML::Store#initialize): filename is first
+ argument. Thanks Kent Dahl.
+
+Sat Aug 2 00:49:31 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: refine document.
+
+Fri Aug 1 23:57:45 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_gc_mark_locations): no need to swap arguments.
+
+ * gc.c (STACK_LENGTH): insufficient for growing up stack
+ architectures.
+
+ * gc.c (rb_gc, Init_stack) ditto.
+
+Fri Aug 1 23:33:36 2003 Masatoshi Seki <mas@snow.local.>
+
+ * rubytest.rb: set dldpath on darwin.
+
+Fri Aug 1 23:07:38 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: convert RD to RDoc. Thanks William Webber.
+ [ruby-doc:456]
+
+Fri Aug 1 19:48:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/syck/rubyext.c (syck_emitter_write_m): forgot to declare
+ "self", making it default to "int".
+
+ * ext/syck/rubyext.c (syck_emitter_simple_write): ditto.
+
+ * gc.c (rb_gc): should mark backing store region on IA64.
+
+Fri Aug 1 18:51:10 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * process.c: bug fix --- preprocessor errors occur on OpenBSD-current
+
+Fri Aug 1 17:13:23 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/extconf.rb: should replace literally.
+
+Fri Aug 1 16:22:57 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_check_readable, rb_io_check_writable): ensure not
+ closed at first.
+
+ * io.c (rb_io_getline): check readable always. (ruby-bugs:PR#1069)
+
+ * io.c (rb_io_each_byte): ditto.
+
+Fri Aug 1 16:02:46 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (READ_DATA_PENDING_PTR): cast to get rid of warnings.
+
+ * ext/socket/socket.c (unix_send_io, unix_recv_io): ditto.
+
+Fri Aug 1 15:53:24 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (isInternalCmd): shouldn't return if find end of str.
+ [ruby-talk:77678]
+
+Fri Aug 1 13:45:14 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_call_super): propagate previous block if a block is
+ given. [ruby-talk:77577]
+
+Fri Aug 1 09:54:38 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_fill): array length may be changed during the
+ block execution. [ruby-talk:77579]
+
+ * array.c (rb_ary_zip): ditto.
+
+ * array.c (rb_ary_fill): ditto.
+
+ * hash.c (env_reject_bang): length may be changed during the block
+ execution.
+
+ * hash.c (env_clear): ditto.
+
+Fri Aug 1 04:58:55 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: bug fix --- forget to eval given block to
+ TkRoot.new method
+
+ * ext/tk/sample/tkoptdb-safeTk.rb: new sample script
+
+Fri Aug 1 00:52:58 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (Init_stack): IA64 requires STACK_LEVEL_MAX to be less than
+ magic number when optimizer turned on, regardless of rlimit
+ values.
+
+Thu Jul 31 23:44:00 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/erb.rb: import erb-2.0.4b4.
+
+Thu Jul 31 23:04:45 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/sample/resource.en, ext/tk/sample/resource.jp:
+ wrong resource file format
+
+ * ext/tk/lib/tk.rb: add Tk::Encoding.{encoding_convertfrom,
+ encoding_convertto}
+
+ * ext/tk/lib/tk.rb: add TkOptionDB.read_with_encoding to read
+ non-utf8 resource file
+
+Thu Jul 31 23:02:47 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/etc/etc.c: revert getenv()'s prototype. use it only when _WIN32
+ is not defined.
+
+Thu Jul 31 20:52:40 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: (IMPORTANT BUG FIX) scan of event keywords
+ doesn't work on recent versions of Tck/Tk
+
+ * ext/tk/lib/tk.rb: initialize error of instance variable on
+ TkComposite
+
+ * ext/tk/lib/multi-tk.rb: initialize error on encoding-system on
+ MultiTkIp
+
+ * ext/tk/lib/tk.rb: trouble on destroying widgets
+
+ * ext/tk/sample/demos-en/, demos-jp/: add JP and EN version of
+ Ruby/Tk widget demos
+
+Thu Jul 31 15:25:12 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * array.c (rb_ary_collect): must get length of array for each
+ iteration. reported on [ruby-talk:77500], and fixed by
+ K.Sasada <ko1@namikilab.tuat.ac.jp> on [ruby-talk:77504]
+
+Thu Jul 31 14:11:54 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/extconf.rb: move gmake specific features
+ into GNUmakefile.
+
+Thu Jul 31 12:36:11 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * bin/erb, lib/erb.rb: add explicit trim mode.
+
+Thu Jul 31 04:59:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (rb_num_coerce_relop): export function.
+
+Thu Jul 31 08:18:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
+
+ * lib/test/unit.rb: A useful return code is now set if tests fail when
+ running automatically using the Console::TestRunner.
+
+Thu Jul 31 07:59:18 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: wrap the command-proc of TkScale --- pass
+ the numeric object to the proc
+
+ * ext/tk/lib/tk.rb: better support for widgets created on
+ Tk interpreter (without Ruby)
+
+ * ext/tk/lib/multi-tk.rb: a little more stable on Multiple Tk
+ interpreters running
+
+Thu Jul 31 00:17:19 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (return_code): obsolete.
+
+ * lib/net/ftp.rb (last_response_code): new method. lastresp is now
+ alias to last_response_code.
+
+ * lib/net/ftp.rb (last_response): new method.
+
+Wed Jul 30 23:55:44 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): check has been dropped. "_dump must return
+ string." [ruby-dev:21024]
+
+Wed Jul 30 22:35:19 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/mkmf.rb (dir_config): allow multiple directories separated
+ by File::PATH_SEPARATOR.
+
+ * lib/mkmf.rb (create_makefile): DLDFLAGS include $LDFLAGS again.
+ [ruby-talk:76894]
+
+ * lib/mkmf.rb (init_mkmf): not default $LDFLAGS to LDFLAGS for
+ ruby itself, but default $DLDFLAGS to DLDFLAGS.
+
+Wed Jul 30 16:17:06 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): marshal_dump should not take any
+ argument.
+
+Wed Jul 30 15:54:04 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_initialize): should initialize
+ instance variables. [ruby-talk:77362]
+
+Wed Jul 30 15:39:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (proc_options): -F set compiled regular expression to $;.
+ [ruby-talk:77381]
+
+ * string.c (Init_String): no setter type check for $;
+
+Wed Jul 30 15:10:02 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * error.c (rb_raise): snprintf() termination moved to
+ win32/win32.c.
+
+ * win32/win32.c (valid_filename, str_grow): unused.
+
+ * win32/win32.c (NTLoginName, ChildRecord): make static.
+
+ * win32/win32.c (CreateChild): argument check.
+
+ * win32/win32.c (kill): should not call CloseHandle() when
+ OpenProcess() failed.
+
+ * win32/win32.c (rb_w32_vsnprintf, rb_w32_snprintf): ensure buffer
+ terminated. [ruby-talk:69672]
+
+Wed Jul 30 10:54:10 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (get): fix wrong argument name. Thanks to William
+ Webber.
+
+Wed Jul 30 10:31:37 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/iconv/iconv.c (iconv_convert): append unchanged portion
+ after overflow. [ruby-dev:21006]
+
+ * ext/iconv/extconf.rb: check if iconv() 2nd argument is const.
+
+Wed Jul 30 09:31:55 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in (os2-emx): renamed from os2_emx, add flags to
+ CFLAGS and LDFLAGS, and remove lib prefix. [ruby-dev:20993]
+
+ * file.c (rb_file_s_rename): retry with removing new file on
+ DOSISH. [ruby-dev:21007]
+
+ * ext/socket/extconf.rb (sendmsg, recvmsg): check functions.
+
+ * ext/socket/socket.c (unix_send_io, unix_recv_io): raise
+ NotImplementedError unless system calls are available.
+
+ * ext/socket/socket.c (sock_initialize): rename from sock_init()
+ to get rid of conflict with OS/2 socket library.
+
+Wed Jul 30 07:23:14 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tkentry.rb: fix lack of methods for TkEntry
+
+ * ext/tk/lib/multi-tk.rb, ext/tk/lib/tk.rb,
+ ext/tk/lib/tkdialog.rb, ext/tk/lib/tkentry.rb,
+ ext/tk/sample/safe-tk.rb, ext/tk/sample/tktimer2.rb: bug fix
+
+ * ext/tk/lib/multi-tk.rb: MultiTkIp.new_* accept a block to
+ eval under the new interpreter
+
+Wed Jul 30 04:36:30 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c,
+ ext/tk/lib/tk.rb, ext/tk/lib/tkafter.rb: additional check of
+ Tk interpreters' status for a little more safety
+
+Wed Jul 30 02:37:12 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): if object responds to 'marshal_dump',
+ Marshal.dump uses it to dump object. unlike '_dump',
+ marshal_dump returns any kind of object.
+
+ * marshal.c (r_object0): restore instance by calling
+ 'marshal_load' method. unlike '_load', it's an instance
+ method, to handle cyclic reference.
+
+ * marshal.c (marshal_load): all objects read from file should be
+ tainted. [ruby-core:01325]
+
+Wed Jul 30 01:47:51 2003 Hugh Sasse <hgs@dmu.ac.uk>
+
+ * lib/timeout.rb (Timeout::timeout): execute immediately if sec is
+ zero.
+
+Wed Jul 30 01:36:18 2003 Aron Griffis <ruby-talk@griffis1.net>
+
+ * ext/socket/socket.c (socks_init): typo fixed. [ruby-talk:77232]
+
+Wed Jul 30 00:48:43 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/extconf.rb: the default value for --enable-socks is
+ taken from ENV["SOCKS_SERVER"]. [ruby-talk:77232]
+
+ * ruby.c (proc_options): add -W option. -W0 to shut up all warning
+ messages. [ruby-talk:77227]
+
+ * error.c (rb_warn): no message will be printed if the value of
+ $VERBOSE is "nil", i.e. perfect silence.
+
+ * ruby.c (verbose_setter): $VERBOSE value is either true, false,
+ or nil.
+
+ * io.c (Init_IO): no "read" check for $stdin. in addition some
+ function names has been changed.
+
+Tue Jul 29 23:10:19 2003 Yoshida Masato <yoshidam@yoshidam.net>
+
+ * regex.c (re_match_exec): incorrect multibyte match.
+
+Tue Jul 29 22:36:50 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/smtp.rb (send0): do taint check only when $SAFE > 0
+
+Tue Jul 29 19:20:34 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/fileutils.rb (install): support preserve timestamp.
+
+ * instruby.rb (install): use FileUtils::install preserve mode.
+
+ * lib/un.rb: new. % ruby -run -e cp -- -p foo bar
+
+ * lib/mkmf.rb: use un.rb instead of ftools.rb.
+
+ * MANIFEST: add lib/un.rb.
+
+ * ext/extmk.rb (INSTALL_PROG, INSTALL_DATA): modify verbose messages.
+
+Tue Jul 29 18:55:22 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/smtp.rb: unify coding style.
+
+ * lib/net/http.rb: ditto.
+
+Tue Jul 29 17:27:59 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ruby.h (LLONG_MIN): fix typo.
+
+Tue Jul 29 16:38:44 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/net/smtp.rb (Net::SMTP::send0): add taint check.
+
+Tue Jul 29 15:41:02 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * instruby.rb (install): preserve the timestamp for Mac OS X ranlib
+ problem.
+
+Tue Jul 29 01:14:51 2003 Rick Ohnemus <rick_ohnemus@acm.org>
+
+ * ruby.h (LLONG_MIN): wrong value.
+
+Mon Jul 28 22:57:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_f_getc): $stdin may not be IO. [ruby-dev:20973]
+
+Tue Jul 29 16:20:36 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: bug fix and
+ change mainloop_abort_on_no_widget_cmd => mainloop_abort_on_exception
+ ( to avoid thread timing trouble on accessing destroyed widgets )
+
+ * ext/tk/lib/multi-tk.rb: change default mode of
+ mainloop_abort_on_exception on multi-tk.rb
+
+ * ext/tk/lib/multi-tk.rb: fix a bug of the procedure for
+ 'Delete' button on the safe-Tk frmae
+
+Tue Jul 29 12:22:28 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/token.c: prefixed many constants and definitions
+ with YAML_ to avoid name clash.
+
+ * ext/syck/gram.c: ditto.
+
+ * ext/syck/gram.h: ditto.
+
+Tue Jul 29 12:15:37 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/etc/etc.c: add real prototype to getenv().
+
+ * win32/win32.h: add arguments to definitions of functions if possible.
+
+Tue Jul 29 08:05:30 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb, ext/tk/lib/tkdialog.rb, ext/tk/lib/tktext.rb,
+ ext/tk/sample/tkbiff.rb, ext/tk/sample/tkdialog.rb,
+ ext/tk/sample/tkform.rb: bug fix ( tested with Ruby/Tk widget demo )
+
+Tue Jul 29 04:22:08 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/syck.h: Added 'syck' yacc prefixes.
+
+ * ext/syck/gram.c: ditto.
+
+ * ext/syck/token.c: ditto.
+
+ * ext/syck: Added ruby.h reference to source files.
+
+Tue Jul 29 03:53:28 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/net/https.rb (use_ssl=): raise ProtocolError if
+ connection is set up already.
+
+Tue Jul 29 01:45:32 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: use RTEST()
+
+Tue Jul 29 01:24:32 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: bug fix
+
+ * ext/tk/lib/multi-tk.rb: bug fix and pack options are pssed
+ to the safeTk container
+
+ * ext/tk/sample/safe-tk.rb: add example for pack options of
+ safeTk container
+
+Mon Jul 28 23:23:08 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (Init_File): IO should include File::Const.
+ [ruby-dev:20964]
+
+Mon Jul 28 18:53:03 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/openssl/extconf.rb: check again after pkg-config for MinGW on
+ Cygwin.
+
+Mon Jul 28 15:32:04 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_gets): only "gets" should set $_.
+
+ * ext/stringio/stringio.c (strio_getline): should not set $_ here.
+
+ * io.c (argf_to_s): argf.to_s returns "ARGF".
+
+ * io.c (set_defout_var, set_deferr_var): make $defout and $deferr
+ obsolete.
+
+ * io.c (set_input_var, set_output_var): allow $stdin, $stdout,
+ $stderr not to be instance of IO.
+
+ * io.c (rb_f_readline): forward method to current_file. gets,
+ readline, readlines, getc, readchar, tell, seek, pos=, rewind,
+ fileno, to_io, eof, each_line, each_byte, binmode, and closed?
+ as well.
+
+ * io.c (argf_forward): utility function to forward method to
+ current_file.
+
+Mon Jul 28 06:10:13 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: bug fix
+
+ * ext/lib/tk/multi-tk.rb: bug fix
+
+ * ext/lib/tk/multi-tk.rb: add methods depend on Tcl's 'interp' command
+
+ * ext/lib/tk/multi-tk.rb: suppot safe-level control of each interpreter
+
+Mon Jul 28 03:08:47 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb: each() should return self.
+
+Mon Jul 28 01:35:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_chomp_bang): defer rb_str_modify() to actual
+ modify point. other methods, replace, tr, delete, squeeze,
+ lstrip, and rstrip as well.
+
+ * string.c (rb_str_rstrip_bang): remove trailing '\0' at the end
+ of string.
+
+ * string.c (rb_str_lstrip_bang): do not strip '\0' from the left.
+
+Sun Jul 27 21:16:30 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/openssl/extconf.rb: better support MinGW. add
+ dir_config("kerberos") and with_config("pkg-config").
+
+ * mkconfig.rb: initialize global variables to avoid warnings.
+
+Sun Jul 27 19:35:06 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: add some methods to support
+ multiple interpreters (low level)
+
+ * ext/tk/lib/multi-tk.rb: new library to support multiple Tk
+ interpreters (high level)
+
+ * ext/tcltklib/demo/safeTk.rb: new sample of safeTk interpreter
+
+ * ext/tk/sample/safe-tk.rb: new sample of multi-tk.rb
+
+ * ext/tk/lib/tk.rb: bug fix and add feature to supprt multi-tk
+
+ * ext/tk/lib/tkafter.rb: ditto
+
+Sun Jul 27 14:43:37 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/debug.rb: fix breakpoint parameter parsing/checking.
+ (?:(file|class):)(line_number|method)
+
+Sun Jul 27 10:21:28 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/unix.rb: add UNIXFileOwner, UNIXFileGroup.
+
+Sun Jul 27 03:10:43 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (io_reopen): avoid dup2() equal handles not to close itself and
+ to get rid of a msvcrt bug. [ruby-dev:20919]
+
+Sun Jul 27 00:37:16 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/tmpdir.rb: use GetWindowsDirectory, not GetSystemDirectory.
+ [ruby-talk:77073]
+
+Sat Jul 26 21:25:21 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (rb_fdopen): set errno if it's zero on win32 platforms.
+
+ * ext/openssl/ossl_ssl.c (TO_SOCKET): define special version when
+ _WIN32 is defined. this is ruby's problem, not OpenSSL.
+
+ * win32/win32.c: remove some old comments.
+
+Sat Jul 26 14:26:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/tk/lib/tk.rb (TkCore::chooseDirectory): back up wrongly
+ removed method.
+
+Sat Jul 26 14:14:12 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/stringio/stringio.c: includes Enumerable as well as IO.
+ [ruby-talk:77058]
+
+Sat Jul 26 07:00:53 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/erb.rb: fix % line.
+
+Sat Jul 26 05:31:09 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl.h: fix comment.
+
+ * ext/openssl/ossl.c (ossl_debug): should enable if no va-args
+ macro supplied.
+
+Sat Jul 26 04:04:36 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/extconf.rb: refine va-args macro detection.
+ [ruby-talk:76983]
+
+Sat Jul 26 01:33:51 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_setup): need to pass the real
+ socket to SSL_get_fd on native win32 platforms.
+
+Sat Jul 26 01:20:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_mod_const_missing): "const_missing" should not
+ appear in the caller(); add call frame adjustment.
+
+ * eval.c (rb_method_missing): simplify call frame adjustment.
+
+Fri Jul 26 00:04:25 2003 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
+
+ * ext/openssl/sample: add samples.
+ - cert2text.rb: dump certificate file as text.
+ - crlstore.rb: CRL store implementation. Fetch CRL via HTTP when
+ http-access2 is installed.
+ - certstore.rb: certificate store implementation.
+ - cert_store_view.rb: certificate store viewer with FXRuby. Uses
+ c_rehash.rb, crlstore.rb and certstore.rb.
+
+Fri Jul 25 16:43:03 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: add TclTkIp#create_slave,
+ TclTkIp#_make_safe and TclTkIp#safe?
+
+ * ext/tcltklib/MANUAL.euc: modify descriptions
+
+ * ext/tk/lib/tk.rb: bug fix [ruby-talk:76980] and modify to
+ support multi Tk IPs
+
+ * ext/tk/lib/tkafter.rb: modify to support multi Tk IPs
+
+Fri Jul 25 15:47:39 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/extconf.rb: add check for BN_rand_range() and
+ BN_pseudo_rand_range().
+
+ * ext/openssl/ossl_bn.c (ossl_bn_s_rand_range): should raise
+ NotImplementedError if BN_rand_range() wan not defined.
+
+ * ext/openssl/ossl_bn.c (ossl_bn_s_pseudo_rand_range): should raise
+ NotImplementedError if BN_pseudo_rand_range() wan not defined.
+
+ * ext/openssl/ossl_pkcs7.c (ossl_pkcs7_s_encrypt): avoid compiler
+ warning for OpenSSL-0.9.6.
+
+ * ext/openssl/ossl_pkcs7.c (ossl_pkcs7si_initialize): ditto.
+
+Fri Jul 25 14:34:55 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (tcp_s_gethostbyname): was using
+ uninitialized size_t value. [ruby-talk:76946]
+
+Fri Jul 25 13:38:38 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * re.c (rb_reg_options_m): use rb_reg_options() to mask internal
+ flags.
+
+ * re.c (rb_reg_initialize_m): allow nil as third argument and
+ ignore, and mask code flags if the argument is given.
+ [ruby-dev:20885]
+
+ * re.c (rb_reg_options): get common flags directly.
+
+Fri Jul 25 03:52:21 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * lib/yaml/dbm.rb: replace indexes with values_at.
+
+Fri Jul 25 02:55:59 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/extconf.rb: add check for libsocket and libnsl.
+
+ * ext/openssl/extconf.rb: use pkg-config to build CFLAGS and LDFLAGS.
+
+Fri Jul 25 01:27:59 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/emitter.c (syck_emitter_flush): accepts count
+ of bytes to flush. anchor offsets now functional.
+
+ * ext/syck/syck.h (syck_emitter_flush): ditto.
+
+ * ext/syck/rubyext.c: ditto.
+
+ * ext/syck/token.c: URI escaping now supported.
+
+Thu Jul 24 16:41:31 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/mkmf.rb (have_type): check if a type is defined.
+
+ * lib/mkmf.rb (check_sizeof): check size of a type.
+
+ * ext/dbm/extconf.rb: check if type DBM is defined.
+ [ruby-talk:76693]
+
+Thu Jul 24 16:18:40 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ChangeLog (add-log-time-format): "%c" contains timezone on
+ XEmacs.
+
+Thu Jul 24 16:05:22 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in (AC_C_VOLATILE): check if volatile works.
+
+ * defines.h (volatile): removed.
+
+ * eval.c (rb_thread_group): Thread#group. [new]
+
+Thu Jul 24 15:50:42 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/extconf.rb: add check for win32 OpenSSL libraries.
+
+ * ext/openssl/extconf.rb: add check for __VA_ARGS__.
+
+ * ext/openssl/ossl.h: avoid non C99 compiler errors.
+
+Thu Jul 24 13:32:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (thgroup_add): no warning for terminated threads.
+
+Thu Jul 24 13:09:26 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pathname.rb: added.
+
+Thu Jul 24 11:21:10 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/io/wait/extconf.rb: removed unnecessary backward
+ compatibility stuff.
+
+Thu Jul 24 11:09:10 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/openssl/extconf.rb: revert use of dir_config.
+
+Thu Jul 24 09:58:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/Win32API/lib/win32/resolv.rb: added.
+
+ * lib/resolv.rb: support Win32 platforms. based on Tietew's work
+ [ruby-dev:15573].
+
+Thu Jul 24 04:05:46 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ssl.h: undef X509_NAME and PKCS7_SIGNER_INFO to
+ avoid name confliction on mswin32.
+
+ * ext/openssl/ssl.c (ossl_protect_obj2bio): avoid VC++ warnings
+ in function prototype.
+
+ * ext/openssl/ssl.c (ossl_protect_membio2str): ditto.
+
+ * ext/openssl/ssl.c (ossl_protect_x509_ary2sk): ditto.
+
+Thu Jul 24 03:44:04 2003 Michal Rokos <m.rokos@sh.cvut.cz>
+
+ * ext/openssl/extconf.rb: cut check for OpenSSL version
+
+Thu Jul 24 03:41:30 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/tcltklib/tcltklib.c (ip_init): need at least one statement after
+ label.
+
+Thu Jul 24 01:48:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/cgi.rb (CGI::QueryExtension::[]): should return StringIO (or
+ Tempfile) for multipart/form.
+
+ * variable.c (rb_define_const): give warning for non constant
+ name. [ruby-core:01287]
+
+Thu Jul 24 01:51:08 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick: imported.
+
+ * MANIFEST: added webrick files.
+
+Thu Jul 24 01:32:04 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/tmpdir.rb (tmpdir): new method. remove TMPDIR.
+ use GetSystemWindowsDirectory(GetSystemDirectory), not GetTempPath.
+
+Thu Jul 24 01:08:43 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl: imported.
+
+Wed Jul 23 23:06:59 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * file.c (DOSISH): better Cygwin support.
+
+Wed Jul 23 19:13:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_split_m): the receiver may be empty string.
+
+Wed Jul 23 18:43:00 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/erb.rb: import erb-2.0.4b1.
+
+Wed Jul 23 18:21:52 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/io/wait: imported.
+
+Wed Jul 23 16:07:35 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * process.c: unify indentation
+
+ * configure.in: add --enable-setreuid option
+
+ * ext/tcltklib/tcltklib.c: TclTkIp.new accepts 'ip-name' and 'options'
+
+ * ext/tk/lib/tk.rb: support arguments of TclTkIp.new
+
+ * ext/tk/lib/tk*.rb: preparations for multi-Tk interpreter support
+
+Wed Jul 23 15:49:01 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_lstrip_bang): strip NUL along with white
+ spaces. [ruby-talk:76659]
+
+ * string.c (rb_str_rstrip_bang): ditto.
+
+Wed Jul 23 14:19:17 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/mkmf.rb (log_src, checking_for, create_header):
+ Logging.message is printf like format.
+
+Wed Jul 23 10:11:15 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/iconv/iconv.c (check_iconv): check if Iconv instance.
+
+ * ext/iconv/iconv.c (iconv_convert): stringify argument.
+
+Wed Jul 23 02:39:46 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * process.c: add a module for raw syscalls to control UID/GID
+
+ * process.c: add modules for portable UID/GID control
+
+Tue Jul 22 19:16:40 2003 Tanaka Akira <akr@m17n.org>
+
+ * ext/iconv/iconv.c (iconv_failure_initialize): limit
+ inspect message. [ruby-dev:20785]
+
+ * ext/iconv/iconv.c (rb_str_derive): share with original
+ string if possible. [ruby-dev:20785]
+
+Tue Jul 22 17:22:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_mod_const_missing): new method. [ruby-core:00441]
+
+ * variable.c (rb_const_get_at): allow "const_missing" hook.
+
+ * variable.c (rb_const_get_0): ditto.
+
+ * eval.c (method_missing): rename from rb_undefined to clarify.
+
+ * eval.c (ruby_finalize_0): update exit status if any of END proc
+ raises SystemExit. [ruby-core:01256]
+
+ * signal.c (rb_trap_exit): wrap rb_eval_cmd
+
+ * eval.c (rb_exec_end_proc): reduce rb_protect().
+
+Tue Jul 22 17:15:57 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * MANIFEST (lib/cgi/session/pstore.rb, lib/yaml/baseemitter.rb):
+ added.
+
+Tue Jul 22 10:52:19 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/tmpdir.rb: remove charcters after "\000" and regularize path.
+
+Tue Jul 22 02:22:45 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_equal): should not use rb_equal().
+
+ * string.c (rb_str_equal): should return nil for non string
+ operand to conform comparable convention. [ruby-dev:20759]
+
+Tue Jul 22 00:19:19 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/tmpdir.rb: new library to get temporary directory path,
+ using GetTempPath on Win32 environment.
+
+ * lib/tempfile.rb: now uses tmpdir.rb.
+
+ * lib/cgi/session.rb, ib/drb/unix.rb: ditto.
+
+Mon Jul 21 01:53:43 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_string_value_cstr): check null byte in the string
+ before retrieving C ptr. accessed via macro StringValueCStr.
+
+ * file.c: use StringValueCStr to retrieve paths to system calls.
+
+ * file.c (sys_fail2): raise error for two operand system calls
+ such as rename, link, symlink. (ruby-bugs PR#1047)
+
+Sun Jul 20 11:03:25 2003 UENO Katsuhiro <katsu@blue.sky.or.jp>
+
+ * ext/zlib/zlib.c (gzfile_read_header): gz->z.input may be nil after
+ finishing reading a gzip header.
+
+Sat Jul 19 22:25:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_match2): add warning to "~string".
+ [ruby-list:37751]
+
+ * lib/net/ftp.rb (Net::FTP::open): takes block. suggested by Gavin
+ Sinclair in [ruby-core:01237].
+
+Sat Jul 19 19:03:24 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/stdlib.c: add bsearch().
+
+Sat Jul 19 12:34:45 2003 David Black <dblack@superlink.net>
+
+ * lib/scanf.rb: import.
+
+Sat Jul 19 11:27:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/xmlrpc: import.
+
+ * eval.c (thgroup_add): should return group for terminated thread
+ case.
+
+ * eval.c (thgroup_add): do not raise ThreadError on terminated
+ thread addition for compatibility. just warning.
+
+Sat Jul 19 04:50:56 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/iconv/charset_alias.rb, ext/iconv/extconf.rb: make wrapper
+ script which maps charset names. [ruby-dev:20625]
+
+ * ext/iconv/iconv.c (charset_map): charset name map.
+
+ * ext/iconv/iconv.c (iconv_dfree): no exception while
+ finalization.
+
+ * ext/iconv/iconv.c (iconv_s_conv): new method Iconv.conv.
+ [ruby-dev:20588]
+
+Sat Jul 19 03:09:18 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/Win32API/lib/win32/registry.rb (Win32::Registry::Error):
+ inherit StandardError instead of SystemCallError.
+
+Sat Jul 19 02:00:39 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_attr): extra calls of method_added. [ruby-talk:76361]
+
+Fri Jul 18 18:44:22 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/mkmf.rb (init_mkmf): clear $INSTALLFILES. [ruby-dev:20727]
+
+Fri Jul 18 17:34:39 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/mkmf.rb (rm_f): use FileUtils.
+
+ * lib/mkmf.rb (modified?): return mtime of the target if
+ it exists and newer than times.
+
+ * lib/mkmf.rb (install_files): add a current directory
+ file even if it does not exist yet.
+
+ * lib/mkmf.rb (configuration): do not add $LDFLAGS to
+ DLDFLAGS.
+
+ * ext/extmk.rb (extmake): check whether Makefile is newer
+ than depend and MANIFEST.
+
+Fri Jul 18 14:57:19 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (make_cmdvector): recognize quote within string.
+ based on Nobu's patch ([ruby-win32:450]). [ruby-talk:75853]
+
+Fri Jul 18 13:04:36 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_missing): VCALL is called only for LOCAL_ID. no
+ check required.
+
+ * parse.y (primary): primary:tFID generates NODE_FCALL.
+ [ruby-dev:20641]
+
+Thu Jul 17 18:50:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (match_captures): rename from "groups".
+
+Thu Jul 17 17:57:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_clear_cache_by_class): check both klass and origin.
+
+Thu Jul 17 13:46:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ruby_init): set ruby_running to true after
+ initialization.
+
+Thu Jul 17 13:42:53 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/ftools.rb (File::makedirs): do not handle "//" as a directory.
+
+Thu Jul 17 06:40:28 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: recover and fix typo : Tk.chooseDirectory
+ (Tk8.4 feature)
+
+Wed Jul 16 16:23:58 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_proc_new): call svalue_to_avalue for yield argument.
+
+Wed Jul 16 00:31:00 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_disable_super, rb_enable_super): deprecate.
+
+ * eval.c (thgroup_s_alloc): re-implement group struct.
+
+ * eval.c (thgroup_add): add check for enclose and frozen status.
+
+Tue Jul 15 19:50:49 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_add_method, rb_alias): need to clear cache by
+ ID when method defined in parent class is cached for
+ grand child classes. [ruby-dev:20672]
+
+Tue Jul 15 14:38:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/matrix.rb: remove elements conversion to_f, to_i, to_r.
+
+ * lib/cgi/session/pstore.rb: add new file.
+
+Tue Jul 15 03:30:41 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/rubyext.c (syck_mark_emitter): forgot to rb_gc_mark the
+ outgoing IO object.
+
+Sun Jul 13 14:55:36 2003 Koji Arai <jca02266@nifty.ne.jp>
+
+ * process.c (proc_getgroups, proc_setmaxgroups): fix typo.
+
+Sat Jul 12 17:01:28 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * struct.c (struct_entry): add prototype to avoid VC++ warnings.
+
+Sat Jul 12 04:43:57 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/emitter.c: new emitter code.
+
+ * ext/syck/rubyext.c: Emitter class.
+
+ * lib/yaml.rb: Load Syck emitter, if available.
+
+ * lib/yaml/stream.rb: ditto.
+
+ * lib/yaml/baseemitter.rb: underlying class for all emitters.
+
+ * lib/yaml/rubytypes.rb: use BaseEmitter abstraction.
+
+ * lib/yaml/emitter.rb: ditto.
+
+Sat Jul 12 04:23:13 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_undef): need to clear cache for inherited class.
+ (rubicon/builtin/TestModulePrivate.rb:test_undef_method)
+
+Sat Jul 12 01:21:54 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (avalue_to_svalue): typo.
+
+ * eval.c (rb_load): rb_prohibit_interrupt must not underflow.
+
+ * parse.y (NODE_STRTERM, tokadd_string, parse_string): moved
+ string nest level from a static variable to NODE_STRTERM, to
+ preserve it from word to word in %W/%w.
+
+Fri Jul 11 22:37:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in (aix): needs ruby.imp even with gcc.
+ (ruby-bugs:PR#1007)
+
+Fri Jul 11 18:37:37 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * instruby.rb: do not handle directories. [ruby-dev:20613]
+
+Fri Jul 11 16:09:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * util.c (ruby_strtod): exp should be less than MDMAXEXPT.
+
+Fri Jul 11 07:17:47 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: not create a Tcl/Tk interpreter if already
+ defined TkCore::INTERP
+
+ * ext/tk/lib/tk.rb: bugfix on TkWindow#configure
+
+Thu Jul 10 14:42:02 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * math.c (math_log): nan takes a dummy argument on Cygwin 1.5.0.
+
+Wed Jul 9 23:50:46 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * regex.c (mbctab_sjis): 0x80 is not shift jis first byte.
+ [ruby-dev:20516]
+
+Wed Jul 9 15:38:28 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * instruby.rb: do not install shared libraries as man pages.
+
+ * mkconfig.rb: support text-mount on Cygwin.
+
+Wed Jul 9 11:09:57 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * re.c (match_entry): add prototype to avoid VC++ warnings.
+
+Wed Jul 9 03:48:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_load): put rb_load_file() in a thread critical
+ section. [ruby-dev:20490]
+
+ * eval.c (compile): put rb_compile_string() in a thread critical
+ section.
+
+Tue Jul 8 02:35:41 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_const_get_0): should not warn if constant is not
+ defined. (ruby-bugs-ja PR#509)
+
+ * bignum.c (rb_big2dbl): give a warning on overflow.
+ (ruby-bugs-ja PR#510)
+
+ * util.c (ruby_strtod): change MDMAXEXPT from 511 to 308.
+
+ * pack.c (utf8_to_uv): long is sufficient. LONG_LONG is not
+ required.
+
+Tue Jul 8 01:43:16 2003 Koji Arai <jca02266@nifty.ne.jp>
+
+ * bignum.c (rb_big2str): support 32 bit (without `long long' type)
+ machines. (ruby-bugs-ja PR#512)
+
+Mon Jul 7 10:22:46 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/dbm/extconf.rb (gdbm_compat, qdbm): add check for gdbm_compat
+ and qdbm.
+
+Mon Jul 7 01:34:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call_super): k->super maybe NULL if klass is Kernel.
+ [ruby-dev:20519]
+
+ * gc.c (obj_free): clear method cache when freeing class/module.
+
+Sat Jul 5 23:32:06 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_mod_remove_method): allow "remove_method" to accept
+ multiple arguments.
+
+Sat Jul 5 00:22:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * node.h (NEW_NODE): cast arguments to rb_node_newnode().
+
+Fri Jul 4 21:48:44 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/syck/rubyext.c, ext/syck/syck.c, ext/syck/syck.h,
+ ext/syck/token.c: C++ style comments are not allowed.
+ (ruby-bugs:PR#1008)
+
+Thu Jul 3 23:41:30 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/timeout.rb: add optional exception argument for compatibility
+ function.
+
+Thu Jul 3 14:22:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_values_at): extract common procedure from
+ rb_ary_values_at. follow DRY principle.
+
+ * re.c (match_values_at): values_at should understand ranges.
+
+ * struct.c (rb_struct_values_at): ditto.
+
+ * struct.c (inspect_struct): inspect format changed; add "struct "
+ at the top.
+
+ * sprintf.c (rb_f_sprintf): "%p" specifier for inspect output.
+ (RCR#69)
+
+ * eval.c (rb_mod_undef_method): allow "undef_method" to accept
+ multiple arguments. (RCR#146)
+
+ * lib/timeout.rb: put timeout in Timeout module. (RCR#121)
+ [ruby-talk:61028]
+
+ * re.c (match_groups): new method added. (RCR#139)
+
+ * variable.c (rb_mod_const_of): should exclude constant defined
+ in Object, unless retrieving constants of Object.
+
+Thu Jul 3 12:13:05 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/mkmf.rb (VPATH): convert from Windows form to Unix form on
+ MinGW. This fixes the build with GNU make 3.80-1 for Cygwin.
+
+Wed Jul 2 23:27:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_new4): do not allocate new string if original
+ is frozen or already have copy-on-write entry. [ruby-talk:74940]
+
+Wed Jul 2 13:22:39 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_shared_replace): clear flags before copy.
+
+ * string.c (rb_str_replace): ditto.
+
+ * eval.c (rb_yield_0): override visibility mode for module_eval
+ etc. (ruby-bugs-ja PR#505)
+
+Wed Jul 2 11:45:34 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/smtp.rb: synchronize document with source code.
+
+ * lib/net/pop.rb: ditto.
+
+Wed Jul 2 11:39:50 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/smtp.rb: unify SMTP and SMTPCommand.
+
+ * lib/net/smtp.rb: new exception class SMTPError.
+
+ * lib/net/smtp.rb: new exception class SMTPAuthenticationError.
+
+ * lib/net/smtp.rb: new exception class SMTPServerBusy.
+
+ * lib/net/smtp.rb: new exception class SMTPSyntaxError.
+
+ * lib/net/smtp.rb: new exception class SMTPFatalError.
+
+ * lib/net/smtp.rb: new exception class SMTPUnknownError.
+
+ * lib/net/smtp.rb: change critical section protect algorithm.
+
+ * lib/net/smtp.rb (SMTP#do_start): check authentication args
+ before all.
+
+ * lib/net/smtp.rb: new method send_message (alias send_mail).
+
+ * lib/net/smtp.rb: new method open_message_stream (alias ready).
+
+ * lib/net/pop.rb: POPBadResponse is a POPError.
+
+ * lib/net/pop.rb (POPMail#pop): ban ReadAdapter.
+
+ * lib/net/pop.rb (POPMail#top): ditto.
+
+ * lib/net/pop.rb (POP3Command): change critical section protect
+ algorithm.
+
+ * lib/net/pop.rb (POP3Command#auth): USER and PASS should be one
+ critical block.
+
+ * lib/net/pop.rb (POP3Command#retr): ban `dest' argument using
+ iterator.
+
+ * lib/net/pop.rb (POP3Command#top): ditto.
+
+ * lib/net/protocol.rb: #read_message_to -> #each_message_chunk
+
+ * lib/net/protocol.rb: #D -> #LOG
+
+ * lib/net/protocol.rb: #D_off -> #LOG_off
+
+ * lib/net/protocol.rb: #D_on -> #LOG_on
+
+Wed Jul 2 11:10:47 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: set old class aliases for backward
+ compatibility. [ruby-talk:74863]
+
+ * lib/net/protocol.rb: ditto.
+
+Wed Jul 2 01:32:40 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/net/pop.rb (Net::POP3#start): typofix.
+
+Tue Jul 1 22:08:19 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: TkWindow include TkWinfo
+
+ * ext/tk/lib/tk.rb: treat unknown widget classes as subclasses
+ of TkWindow
+
+Tue Jul 1 19:02:12 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * parse.y (rb_intern): should use mbclen instead of mblen.
+
+Tue Jul 1 10:36:19 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * class.c (rb_define_class, rb_define_module): also set constant under
+ Object. [ruby-dev:20445]
+
+ * object.c (boot_defclass): ditto.
+
+ * variable.c (rb_const_get_at, rb_const_get_0, rb_mod_const_at,
+ rb_const_defined, mod_av_set, rb_const_assign): toplevel constants
+ are now under Object, rb_class_tbl remains for GC.
+
+Mon Jun 30 17:53:06 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (mnew): ignore metaclasses have no influence, for rklass.
+ [ruby-talk:74706]
+
+Sun Jun 29 06:59:07 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/drb.rb, lib/drb/invokemethod.rb: import drb-2.0.4
+ (use LocalJumpError#reason)
+
+Sat Jun 28 12:28:54 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in (rb_cv_stack_grow_dir): check stack growing direction.
+
+ * eval.c (rb_thread_restore_context): prior configuration macro.
+
+ * gc.c (ruby_stack_length): always return the address of lower edge.
+
+ * gc.c (rb_gc_mark_locations): remove margin. [ruby-dev:20462]
+
+ * gc.c (rb_gc, Init_stack): prior configuration macro.
+
+ * gc.c (Init_stack): add safety margin.
+
+Fri Jun 27 14:41:22 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * string.c (rb_str_split_m): remove white spaces on the head of
+ the last element, when limit is specified. [ruby-talk:74506]
+
+Fri Jun 27 03:24:54 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (io_fflush): need to check if closed after thread switch.
+ [ruby-dev:20351]
+
+ * io.c (fptr_finalize): ditto.
+
+ * string.c (rb_str_rindex_m): fixed wrong fix. should move backward
+ first only when matching from the end.
+
+Thu Jun 26 21:34:49 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * class.c (class_instance_method_list): get rid of warning about
+ arguement type mismatch, and inline method_list().
+ [ruby-core:01198]
+
+Wed Jun 25 14:40:33 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: add and modify methods ---
+ TkWidget.database_class, TkWidget.database_classname,
+ TkWidget#database_class, TkWidget#database_classname
+
+ * ext/tk/lib/tk.rb: instances of a subclass of TkToplevel or
+ TkFrame are created with ":class=>subclass" option as default.
+
+ * ext/tk/sample/tkoptdb.rb: add a new part
+
+Wed Jun 25 12:52:58 2003 Matthew Dempsky <jivera@flame.org>
+
+ * class.c (rb_generic_class_instance_methods): merge argument
+ check (and warning) into one function; following DRY principle.
+ [ruby-core:01193]
+
+Wed Jun 25 05:49:10 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: add widget destroy hook binding to TkBindTag::ALL
+
+ * ext/tk/lib/tkcanvas.rb: Although requiring manual control of GC,
+ memory eating problem of TkCanvas Items is fixed.
+
+ * ext/tk/lib/tktext.rb: add some methods and bug fix
+
+Wed Jun 25 00:14:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (autoload_delete): should delete Qundef from iv_tbl.
+ (ruby-bugs-ja PR#504)
+
+Tue Jun 24 16:46:07 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: bug fix on TkToplevel, TkFrame,
+ TkPanedwindow, TkOptionDB
+
+ * ext/tk/lib/tk.rb: TkOptionDB --- make it more secure to use procs
+ defined on resourceDB
+
+ * ext/tk/sample/tkoptdb.rb, resource.ja, resource.en:
+ sample script how to use TkOptionDB.
+
+Tue Jun 24 14:22:41 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * lib/yaml/types.rb: replaced Kernel::Hash reference with Object::Hash
+ from [ruby-talk:74270]
+
+Tue Jun 24 17:59:30 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_yield_0): show yielded block position not only yielding
+ point. [ruby-dev:20441]
+
+Tue Jun 24 16:47:07 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb (HTTPHeader#proxy_basic_auth): missing `@'.
+ Thanks Douglas Koszerek. (ruby-bugs:PR975)
+
+Tue Jun 24 14:31:17 2003 Minero Aoki <aamine@loveruby.net>
+
+ * config.guess: have wrongly returned "alphaev56-unknown-linux-"
+ on Linux/Alpha. [ruby-dev:20434]
+
+Tue Jun 24 04:54:46 2003 Minero Aoki <aamine@loveruby.net>
+
+ * configure.in: always add -mieee for gcc/alpha. [ruby-dev:20429]
+
+Tue Jun 24 02:40:09 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * array.c (rb_ary_unshift_m): need to check number of arguments.
+ [ruby-talk:74189]
+
+Mon Jun 23 23:59:56 2003 Minero Aoki <aamine@loveruby.net>
+
+ * io.c (io_close): missing prototype. [ruby-dev:20422]
+
+ * ext/socket/socket.c (bsock_do_not_rev_lookup_set): ditto.
+
+ * ext/win32ole/win32ole.c (foletype_guid, foletype_progid): ditto.
+
+ * error.c (syserr_initialize): length argument of sprintf() is an
+ int.
+
+Mon Jun 23 23:28:14 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * MANIFEST: add wince files.
+
+ * ext/tk/MANIFEST: add sample/tkmenubutton.rb.
+
+Mon Jun 23 17:40:58 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * dir.c (find_dirsep): get rid of warnings.
+
+ * eval.c (error_print): temporary value might be disposed by GC.
+
+ * hash.c (env_has_value, env_index): should not increment NULL.
+
+ * io.c (io_read, rb_io_sysread): not read when length is 0.
+
+ * io.c (rb_io_reopen): ensure initialized IO.
+
+ * io.c (rb_io_init_copy): sychronize file pointer.
+
+ * io.c (rb_io_s_pipe): make exception proof.
+
+ * string.c (rb_str_rindex_m): Fixnum 0 matched end of string.
+
+Mon Jun 23 16:18:12 2003 Tanaka Akira <akr@m17n.org>
+
+ * io.c (rb_open_file): initialize flags.
+
+ * time.c (time_arg): initialize v[6] even when argc is 10 to
+ avoid valgrind error.
+
+Mon Jun 23 14:22:44 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: bug fix on TkRoot and TkToplevel
+
+Mon Jun 23 08:24:01 2003 Florian Frank <flori@nixe.ping.de>
+
+ * string.c (rb_str_upto): generate sequence according to "succ"
+ order. formerly check was done by dictionary order.
+ [ruby-talk:74138]
+
+Mon Jun 23 00:27:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_string_value): fill constant empty string along
+ with setting ELTS_SHARED if str->ptr is NULL. [ruby-core:01179]
+
+ * string.c (rb_string_value_ptr): ditto.
+
+ * string.c (rb_check_string_type): ditto.
+
+Sun Jun 22 23:42:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * string.c (str_gsub): move END(0) check before mbclen2().
+
+ * string.c (scan_once): reduce END(0) check.
+
+ * io.c (rb_io_initialize): accept fixnum mode.
+
+ * eval.c (error_print): replace strchr() by memchr(), einfo may
+ contain "\0".
+
+ * pack.c (pack_unpack): range check for "@" move; initialize check
+ for "m".
+
+ * error.c (syserr_initialize): avoid buffer overflow.
+
+ * file.c (rb_file_s_readlink): expand buffer until readlink
+ succeed.
+
+Sun Jun 22 16:17:02 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: TkRoot.new and TkToplevel.new accept Wm
+ commands as elements
+
+ * ext/tk/lib/tk.rb: TkMenu --- add some methods
+
+ * ext/tk/lib/tk.rb: TkOptionMenubutton --- bug fix
+
+ * ext/tk/sample/tkmenubutton.rb: sample of TkMenubutton and
+ TkOptionMenubutton
+
+Sat Jun 21 23:15:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_invoke): should not propagate distination tag if
+ tag is already handled in this level. (ruby-bugs-ja PR#501)
+
+ * object.c (str_to_id): check for empty string before intern.
+ [ruby-talk:74006]
+
+Sat Jun 21 13:56:09 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/Makefile.sub: undefine HAVE__SETJMP.
+
+ * wince/resource.rb: include winver.h in wince3.0.
+
+Sat Jun 21 12:55:17 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: TkRoot.new and TkToplevel.new accept Wm commands
+ as elements of a hash argument.
+
+ * ext/tk/sample/tktimer2.rb: add comments about the usage of a
+ TkTimer object.
+
+Sat Jun 21 08:47:22 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk*.rb: remove direct-accesses to TkComm::INTERP and
+ TkComm::INITIALIZE_TARGETS
+
+ * ext/tk/lib/tk*.rb: use TkINTERP_SETUP_SCRIPTS constant for setting
+ up the interpreter
+
+ * ext/tcltklib/tcltklib.c: support to create a safe interpreter
+ with safe-Tk
+
+Fri Jun 20 23:28:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_invoke): should not propagate TAG_BREAK and
+ TAG_RETURN from orphan Proc object. [ruby-core:01148]
+
+Fri Jun 20 15:04:28 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * defines.h (PATH_ENV): name of PATH environment. [new].
+
+ * defines.h (ENV_IGNORECASE): define for case insensitive platforms
+ to access environment variables.
+
+ * dln.c (dln_find_exe): use PATH_ENV instead of "PATH".
+
+ * hash.c (env_delete, rb_f_getenv, env_fetch, rb_env_path_tainted,
+ env_aset): ditto.
+
+ * ruby.c (proc_options): ditto.
+
+Fri Jun 20 14:52:46 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: Tk interpreter returns TAINTED strings.
+
+Fri Jun 20 03:09:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (new_yield): distinguish "yield 1,2" and "yield [1,2]".
+ [ruby-dev:20360]
+
+ * eval.c (rb_eval): support new_yield() change.
+
+ * variable.c (rb_const_get_0): warn for Foo::BAR when BAR is a
+ toplevel constant (i.e. a constant defined under Object).
+ [ruby-list:36935]
+
+ * parse.y (no_blockarg): separate no block argument check and
+ ret_args argument processing.
+
+Fri Jun 20 00:45:19 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/csv.rb: import csv module.
+
+Thu Jun 19 22:51:41 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb.rb, lib/drb/drb.rb, lib/drb/eq.rb,
+ lib/drb/extserv.rb, lib/drb/extservm.rb, lib/drb/gw.rb,
+ lib/drb/invokemethod.rb, lib/drb/observer.rb,
+ lib/drb/timeridconv.rb, lib/drb/unix.rb: import drb-2.0.4b3
+
+Thu Jun 19 16:14:43 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c (lib_do_one_event): change default
+ value of the argument
+
+ * ext/tcltklib/tcltklib.c (lib_do_one_event): returns true/false
+
+ * ext/tcltklib/tcltklib.c: add TclTkLib::EventFlag::NONE ( == 0 )
+
+ * ext/tcltklib/tcltklib.c: add set_no_event_wait() and
+ get_no_event_wait()
+
+ * ext/tcltklib/MANUAL.euc: modify
+
+ * ext/tcltklib/README.euc: ditto
+
+ * ext/tk/lib/tk.rb: change default value of TkCore.do_one_event
+ argument
+
+ * ext/tk/lib/tk.rb: add TkCore.set_no_event_wait(wait) and
+ TkCore.get_no_event_wait
+
+ * ext/tk/lib/tk.rb: add Tk.exit ( == destroy root widget )
+
+ * ext/tk/lib/tkafter.rb: rename TkAfter => TkTimer (TkAfter is
+ an alias name)
+
+ * ext/tk/lib/tkafter.rb: set_callback returns self
+
+ * ext/tk/lib/tkafter.rb: continue() raises an exception, if already
+ running or no procedure.
+
+ * ext/tk/lib/tkafter.rb: skip() raises an exception, if not running.
+
+ * ext/tk/sample/tktimer2.rb: new sample for TkTimer class.
+
+Thu Jun 19 16:13:54 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * rubytest.rb: add library path to include standard libraries.
+
+Thu Jun 19 13:13:10 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * hash.c (env_delete, rb_f_getenv, env_fetch): case insensitive to
+ access environment variables on DOSISH platforms.
+
+Thu Jun 19 00:51:47 2003 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
+
+ * range.c (rb_range_beg_len): out_of_range check after adjusting
+ end point. [ruby-dev:20370]
+
+Wed Jun 18 23:59:11 2003 Guy Decoux <ts@moulon.inra.fr>
+
+ * parse.y (call_args): the first argument to arg_cancat() should
+ be NODE_LIST. [ruby-core:01151]
+
+Wed Jun 18 23:41:27 2003 Marc Cartright <marc@isri.unlv.edu>
+
+ * ext/zlib/zlib.c (zstream_run): In a particular situation,
+ deflate/inflate will return Z_BUF_ERROR, even though another call
+ is required by the zlib library.
+
+Wed Jun 18 19:46:21 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: bug fix
+
+ * ext/tk/lib/tk.rb: rename 'no_create' option to 'without_creating'
+
+ * ext/tk/lib/tk.rb: add TkWindow#pack_in, TkWindow#grid_in,
+ TkWindow#place_in
+
+ * ext/tk/lib/tk.rb: add TkWindow#bind_class and TkWindow#database_class
+
+ * ext/tk/lib/tk.rb: add TkBindTag.new_by_name and TkDatabaseClass
+ for binding to database class
+
+ * ext/tk/lib/tk.rb: check varname whether already exsist or not.
+ (TkVarAccess.new)
+
+ * ext/tk/lib/tk.rb: TkTextWin#bbox returns an array of four numbers
+
+ * ext/tk/lib/tk.rb: autoload TkDialog2, TkWarning2
+
+ * ext/tk/lib/tk.rb: scan event callback arguments and convert
+ to proper type
+
+ * ext/tk/lib/tk.rb: TkBindTag.new accepts a block
+
+ * ext/tk/lib/tk.rb: If given taglist, TkWindow#bindtags(taglist)
+ returns taglist
+
+ * ext/tk/lib/tk.rb: add TkWindow#bindtags=(taglist)
+
+ * ext/tk/lib/tk.rb: Tk.focue and Tk.focus_lastfor return nil
+ if there is no target widget.
+
+ * ext/tk/lib/tk.rb: Tk::Wm.client returns the argument string
+ when setting name
+
+ * ext/tk/lib/tk.rb: TkGrid.columnconfiginfo and rowconfiginfo
+ given a slot return a number.
+
+ * ext/tk/lib/tk.rb: TkWindow.grid_columnconfiginfo and
+ grid_rowconfiginfo --- ditto
+
+ * ext/tk/lib/tk.rb: rename and define alias :: TkOption ==> TkOptionDB
+
+ * ext/tk/lib/tk.rb: define alias :: TkTimer ==> TkAfter
+
+ * ext/tk/lib/tk.rb: some instance methods change from public to private
+
+ * ext/tk/lib/tk.rb: some TkComm methods change to module functions
+
+ * ext/tk/lib/tk.rb: add support for -displayof option to some
+ TkWinfo methods
+
+ * ext/tk/lib/tk.rb: bind, bind_append and bind_remove ---
+ returns the target of event-binding
+
+ * ext/tk/lib/tk.rb: add Tk8.4 features
+
+ * ext/tk/lib/tk.rb: add TkPaneWindow
+
+ * ext/tk/lib/tkdialog.rb: bug fix
+
+ * ext/tk/lib/tkdialog.rb: some methods return self
+
+ * ext/tk/lib/tkdialog.rb: add TkTextMark#+(mod) and TkTextMark#-(mod)
+
+ * ext/tk/lib/tkdialog.rb: add some methods
+
+ * ext/tk/lib/tkcanvas.rb: bug fix and some methods return self
+
+ * ext/tk/lib/tkentry.rb: some methods return self
+
+ * ext/tk/lib/tkentry.rb: TkEntry#bbox returns an array of four numbers
+
+ * ext/tk/lib/tkentry.rb: scan validatecommand arguments and
+ convert to proper type
+
+ * ext/tk/lib/tkbgerror.rb: support to define a error handler by user
+
+ * ext/tcltklib/tcltklib.c: [ruby-talk:60759]
+
+Wed Jun 18 13:50:06 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): should dispatch based on ID type.
+
+Wed Jun 18 12:53:42 2003 Minero Aoki <aamine@loveruby.net>
+
+ * eval.c (rb_yield_0): should restore scope_vmode during yield.
+ [ruby-dev:20361]
+
+Wed Jun 18 01:13:36 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/rubyext.c (rb_syck_load_handler): merge key implemented.
+
+ * ext/syck/rubyext.c (transfer_find_i): removed use of String#=~ in favor
+ of Regexp#match.
+
+ * lib/yaml.rb: YAML::try_implicit returns.
+
+ * lib/yaml/rubytypes.rb: Regexps added for type matching.
+
+ * lib/yaml/emitter.rb: fix String + nil error.
+
+Tue Jun 17 17:01:08 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/gram.c: added grammar for certain empty sequence entries.
+
+ * ext/syck/handler.c, ext/syck/syck.c, ext/syck/syck.h: track bad anchors.
+
+ * ext/syck/token.c: added pause token, tag possible circular references.
+
+ * lib/yaml/rubytypes.rb: parsing YMD time as Date instance.
+
+ * ext/syck/rubyext.c: ditto. DomainType, PrivateType, BadAlias classes.
+
+Tue Jun 17 21:28:27 2003 Ariff Abdullah <skywizard@time.net.my>
+
+ * win32/win32.c (rb_w32_opendir): need to set errno. [ruby-talk:73761]
+
+Mon Jun 16 19:01:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c: remove rb_cBlock.
+
+Mon Jun 16 18:06:33 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * numeric.c (rb_fix2uint): renamed from rb_fix2int on IA64.
+
+Mon Jun 16 17:02:57 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (proc_invoke): format the message for localjump_error().
+
+Mon Jun 16 16:23:56 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/dl.c (rb_dl_callback): use rb_block_proc() instead of
+ rb_block_new().
+
+ * ext/win32ole/win32ole.c (ev_on_event): ditto.
+
+Mon Jun 16 16:06:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_alloc): re-unification of Block and Proc. Block
+ class is no longer available.
+
+Mon Jun 16 14:43:14 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * bcc32/Makefile.sub: undefine HAVE_GETGROUPS.
+
+Sat Jun 14 16:58:41 2003 Guy Decoux <ts@moulon.inra.fr>
+
+ * regex.c (calculate_must_string): should handle option_set
+ properly. [ruby-talk:73481]
+
+ * regex.c (re_compile_fastmap): a bug in flag manipulation.
+ [ruby-talk:73549]
+
+Sat Jun 14 17:59:59 2003 Guy Decoux <ts@moulon.inra.fr>
+
+ * eval.c (method_arity): should handle NODE_BMETHOD and
+ NODE_DMETHOD. [ruby-core:01138]
+
+Fri Jun 13 09:24:39 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (storebinary): seek correctly. Thanks, William Webber.
+
+ * lib/net/ftp.rb (putbinaryfile): rescue FTPPermError.
+
+Thu Jun 12 22:13:13 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb : add 'no_create' option to widget
+ initialize method.
+
+ * ext/tk/MANIFEST : forgot to commit when added tkmacpkg.rb
+ and tkwinpkg.rb
+
+ * ext/tk/lib/README : ditto.
+
+Thu Jun 12 21:14:11 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb : widget configure returns self (for method
+ call chain)
+
+ * ext/tk/lib/tkmacpkg.rb : Mac resource (not new but not
+ included until now)
+
+ * ext/tk/lib/tkwinpkg.rb : Win DDE and registry (not new but not
+ included until now)
+
+Tue Jun 10 14:26:30 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/token.c: preserve newlines prepended to a block.
+
+ * ext/syck/implicit.c (syck_match_implicit): added !merge and !default.
+
+ * lib/yaml/constants.rb: remove '\z' escape.
+
+ * lib/yaml/emitter.rb: ensure reset of @seq_map shortcut flag.
+
+ * lib/yaml/encoding.rb: remove Unicode translation methods.
+
+ * lib/yaml/rubytypes.rb: improved round-tripping of Strings.
+ [ruby-core:1134]
+
+Tue Jun 10 01:07:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/irb.rb (IRB::Irb::eval_input): warn and exit if $SAFE >=3
+ after input evaluation.
+
+ * lib/irb.rb (IRB::Irb::eval_input): untaint input string. now
+ irb works for levels 1 and 2.
+
+Mon Jun 9 19:02:33 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in: checks presence of grp.h and setgroups().
+
+ * process.c (proc_getgroups, proc_setgroups): raise
+ NotImplementedError unless available. [ruby-talk:73014]
+
+Mon Jun 9 18:09:11 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: fixed 100% CPU problem of Tk.mainloop
+
+Mon Jun 9 15:50:24 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: renewal Tk.mainloop
+
+Sun Jun 8 13:37:21 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/setup.mak: set SUBSYSTEM in each platform.
+
+ * wince/stdlib.c: fix mblen() bug.
+
+Sat Jun 7 22:22:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/syck/rubyext.c (syck_loader_transfer): should not use
+ rb_cProc directly, since type_proc may be Proc, Block, or
+ Method.
+
+ * parse.y (value_expr0): class and module statements should not be
+ warned for "void value expression". [ruby-talk:72989]
+
+Sat Jun 7 01:46:41 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (add_final): should determine type by respond_to?
+
+ * gc.c (define_final): ditto.
+
+ * io.c (rb_io_ctl): should not depend on respond_to?
+
+ * range.c (range_step): rb_check_string_type().
+
+Fri Jun 6 20:29:14 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (error_print): needs to be exception proof.
+
+ * eval.c (error_handle, rb_longjmp): bails out when exception
+ reentered. (ruby-bugs-ja:PR#487), [ruby-core:01119],
+ [ruby-core:01122]
+
+ * eval.c (Init_Proc): pre-allocates critical error objects.
+
+Fri Jun 6 20:29:14 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (cmd_brace_block, do_block, brace_block): initialize block
+ variables at the beginning of the block. [ruby-talk:72521]
+
+Fri Jun 6 18:49:11 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (proc_setgroups): new functions.
+
+Fri Jun 6 18:33:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (define_final): eliminate rb_f_lambda() call.
+
+ * class.c (rb_scan_args): ditto.
+
+ * signal.c (sig_trap): ditto.
+
+ * hash.c (rb_hash_initialize): ditto.
+
+ * variable.c (rb_f_trace_var): ditto.
+
+ * ext/dl/dl.c (rb_dl_callback): ditto.
+
+ * ext/win32ole/win32ole.c (ev_on_event): ditto.
+
+Fri Jun 6 16:10:01 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: define Net::HTTPResponse#to_ary for backward
+ compatibility. [ruby-talk:72927]
+
+ * lib/net/protocol.rb: add warning.
+
+Fri Jun 6 13:30:57 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ruby_cleanup): $SAFE is turned off in the finalization.
+ Each END proc should preserve its own $SAFE level. [ruby-core:01119]
+
+ * marshal.c (marshal_load): remove unused variable "hash".
+ [ruby-core:01120]
+
+ * hash.c (env_str_new): freeze strings from ENV. [ruby-talk:72860]
+
+ * array.c (rb_ary_first): optional argument to retrieve first n
+ elements.
+
+ * array.c (rb_ary_last): optional argument to retrieve last n
+ elements.
+
+Thu Jun 5 21:31:55 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/stdlib.c: add mblen().
+
+Thu Jun 5 18:33:46 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/curses/curses.c (window_s_allocate,curses_finalize):
+ avoid VC++ warnings.
+
+Thu Jun 5 17:44:11 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/rubyext.c (syck_parser_mark): was a bit heavy on the GC.
+
+ * lib/yaml.rb (YAML::transfer): added.
+
+Thu Jun 5 16:11:50 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bcc32/Makefile.sub, win32/Makefile.sub, wince/Makefile.sub
+ (MISSING): link with missing/erf.c.
+
+ * missing.h (erf, erfc): fix prototype.
+
+ * missing/erf.c: new. [ruby-list:37753]
+
+Thu Jun 5 15:09:06 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * math.c (math_erf,math_erfc): new function. [ruby-list:37753]
+
+Thu Jun 5 14:49:43 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/rubyext.c: using GC nodes caused segfault. [ruby-core:1071]
+
+Thu Jun 5 13:48:57 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/token.c: directives choked on a period.
+
+ * ext/syck/gram.y: anchors work above a collection. [ruby-core:1071]
+
+ * ext/syck/handler.c, ext/syck/syck.c: ensure a fresh strtable between
+ parser iterations.
+
+Wed Jun 4 12:06:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ruby_finalize): no longer need to turn off $DEBUG in the
+ finalizer. (ruby-bugs-ja PR#473)
+
+Tue Jun 3 22:20:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call_super): should search superclass method based on
+ orig_func, not last_func.
+
+Tue Jun 3 09:59:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call_super): inheritance line adjustment moved from
+ rb_call(). [ruby-core:01113]
+
+ * eval.c (rb_eval): use rb_call_super() to follow DRY principle.
+
+Mon Jun 2 02:20:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (push_values_at): Array#values_at should work with
+ ranges too.
+
+ * range.c (rb_range_beg_len): length calculation was wrong.
+
+ * eval.c (rb_call): should set T_ICLASS in the frame->last_class.
+ [ruby-core:01110]
+
+Sun Jun 1 21:50:01 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: should not use def file, use ld with
+ --export-all-symbols option on Cygwin/MinGW.
+
+ * defines.h: ditto.
+
+ * cygwin/GNUmakefile.in: ditto.
+
+ * ext/digest/defs.h: avoid warnings on Cygwin.
+
+Sun Jun 01 13:33:49 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/string_wce.c: add strpbrk() for hpcpro support.
+
+ * wince/setup.mak: add hpcpro(CE2.11) & armv4t(CE.NET) support.
+
+ * wince/resource.rb: ditto.
+
+ * wince/Makefile.sub: ditto.
+
+Sun Jun 1 10:38:28 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * variable.c (rb_autoload_load): autoloaded constants under a module
+ belong to the module. [ruby-core:01094], [ruby-dev:20309]
+
+Sat May 31 04:36:54 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (rb_intern): should handle multibyte name.
+
+Fri May 30 23:18:01 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/rubyext.c (rb_syck_mktime): seconds calculated wrong.
+
+ * ext/syck/gram.c: flexibility to anchors and transfer methods on
+ collections.
+
+ * ext/syck/token.c: hex escapes.
+
+ * lib/yaml/basenode.rb: YamlNode references changed to YAML::BaseNode.
+
+Fri May 30 22:28:04 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * numeric.c (rb_num2uint, rb_fix2int): new function to convert
+ values over INT_MAX. [ruby-core:01099]
+
+ * ruby.h (NUM2UINT, FIX2INT): ditto.
+
+Fri May 30 15:01:05 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/token.c: preserve any indentation past an explicit
+ indentation.
+
+Fri May 30 14:55:44 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_Array): exclude Kernel#to_a instead of Object#to_a.
+ (ruby-bugs-ja:PR#483)
+
+ * lib/optparse.rb (OptionParser::Switch#parse_arg): not splat.
+
+ * lib/optparse.rb (OptionParser::Switch#conv_arg): splat if no
+ conversion supplied.
+
+ * lib/optparse.rb (OptionParser::Switch::PlacedArgument#parse):
+ override next switch after argument conversion.
+
+Fri May 30 14:41:34 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/handler.c, ext/syck/syck.h: removed syck_fold_format().
+
+ * ext/syck/gram.c: flexibility for aliases and anchors.
+
+ * ext/syck/token.c: folding now handled in the tokenizer.
+
+Fri May 30 06:21:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * variable.c (rb_autoload_load): should delete autoloaded
+ symbol itself before load. [ruby-core:01097]
+
+ * variable.c (rb_mod_remove_const): must not return Qundef.
+
+Thu May 29 14:59:10 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.c (_CRTIMP): redefine _CRTIMP on MinGW.
+
+ * configure.in: remove '-D__USE_CRTIMP' from XCFLAGS on MinGW.
+
+ * win32/win32.c (NtMakeCmdVector): handle quotes only if not instring.
+
+Thu May 29 09:11:01 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (ev_const_defined, ev_const_get), variable.c
+ (rb_const_get_at, rb_const_get, rb_mod_remove_const): use Qundef
+ as autoload marker. [ruby-dev:18103], [ruby-dev:18184]
+
+ * eval.c (rb_mod_autoload, rb_mod_autoload_p): new method;
+ Module#autoload, Module#autoload?.
+
+ * variable.c (rb_autoload, rb_autoload_load, rb_autoload_p):
+ manage autoload constants per classes/modules.
+
+ * variable.c (rb_const_defined_at, rb_const_defined): return false
+ for autoloading constants.
+
+ * class.c (rb_define_class, rb_define_module), eval.c (rb_eval),
+ variable.c (rb_mod_const_at, rb_const_assign): removed autoload
+ stuff.
+
+ * intern.h: prototypes; rb_autoload, rb_autoload_load,
+ rb_autoload_p.
+
+ * lib/optparse.rb (OptionParser::Switch::PlacedArgument::parse):
+ do not treat unmatched argument as an option.
+
+Wed May 28 08:44:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_f_syscall): type dispatch should be based on
+ rb_check_string_type(), not FIXNUM_P(), because values may be a
+ bignum. [ruby-talk:72257]
+
+Tue May 27 20:33:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c, util.c: removed duplicated includes/defines.
+
+ * ext/socket/socket.c (sock_addrinfo): get rid of SEGV at NULL ptr
+ String. increase buffer size for 64bit platforms.
+
+Tue May 27 02:34:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call0): should pass the current klass value to
+ block_invoke, which may be called via "super". [ruby-core:01077]
+
+ * eval.c (block_invoke): now takes 4th argument "klass".
+
+ * eval.c (block_alloc): should propagate BLOCK_PROC to
+ ruby_block.
+
+Mon May 26 23:51:38 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (r_object0): should not use "yield" method, use "call"
+ instead. (ruby-bugs-ja PR#476)
+
+Mon May 26 21:39:46 2003 MoonWolf <moonwolf@moonwolf.com>
+
+ * lib/mkmf.rb, lib/optparse.rb, lib/tracer.rb: use Method#to_block
+ instead of deprecated Method#to_proc. (ruby-bugs-ja:PR#477)
+
+Mon May 26 21:21:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/optparse.rb (OptionParser::Switch::parse,
+ OptionParser::order): use {Block,Proc}#call instead of deprecated
+ #yield.
+
+Mon May 26 16:39:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (Init_Proc): Block/Proc separation. [huge change]
+
+ * eval.c (block_arity): returns exact arity number for Procs out
+ of methods. also gives 1 for {|a|..}.
+
+ * string.c (rb_str_match): revert use of String#index for
+ invocation like string =~ string.
+
+ * eval.c (rb_Array): move Object#to_a exclusion hack from
+ splat_value(). need to be in eval.c for a while.
+
+Sun May 25 23:48:21 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * bignum.c (rb_quad_pack): should negate negative bignum.
+ (ruby-bugs-ja:PR#474)
+
+Sun May 25 03:27:25 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/smtp.rb: support LOGIN authentication, based on
+ the patch by Kazuhiko Izawa. [ruby-talk:78981]
+
+Sat May 24 18:19:51 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/Makefile.sub: add eMbedded Visual C++ 4.0 support.
+
+ * wince/resource.rb: ditto.
+
+ * wince/setup.mak: ditto.
+
+ * wince/configure.bat: ditto.
+
+ * wince/mkexports.rb: delete japanese comments.
+
+Fri May 23 18:34:05 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_longjmp): get rid of reentering while debug warning.
+ (ruby-bugs-ja:PR473)
+
+Fri May 23 15:16:16 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * pack.c (pack_unpack): sign-extend if sizeof long is bigger than
+ 32. (ruby-bugs-ja:PR#472)
+
+Fri May 23 14:19:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ruby_finalize): turn off ruby_debug flag before calling
+ at_exit procs and finalizers. (ruby-bugs-ja:PR473)
+
+ * ext/tcltklib/tcltklib.c (lib_mainloop_core): OK to block if
+ there's no other thread. (ruby-bugs:PR#861)
+
+Thu May 22 18:07:46 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/token.c: single- and double-quoted root-level fix.
+
+ * lib/yaml.rb (YAML::object_maker): can create object attributes (such as
+ found in Exception class)
+
+ * lib/yaml/rubytypes.rb: roundtripping of Exception and subclasses.
+
+Fri May 23 01:26:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_clone): defer copying freezing state after
+ calling initialize_copy(). [ruby-dev:20276]
+
+Thu May 22 17:12:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (run_final): use rb_thread_critical instead of DEFER_INTS.
+ [ruby-dev:20272]
+
+ * marshal.c: try to make ArgumentError and TypeError consistent.
+ [ruby-core:01068]
+
+Thu May 22 15:46:37 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_define_alloc_func): need not to disable
+ rb_call_super() for allocation functions. [ruby-core:1065]
+
+Thu May 22 06:21:33 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/rubyext.c (rb_syck_err_handler): raise ArgumentError on
+ malformed YAML.
+
+ * lib/yaml/rubytypes.rb: String#to_yaml was missing space indicators at
+ the end of a line.
+
+Thu May 22 05:43:24 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/rubyext.c (syck_parser_load): root-level false was returning
+ nil.
+
+ * ext/syck/token.c: root-level transfer method bug.
+
+ * ext/syck/gram.c: root-level empty gave a parse error.
+
+ * lib/yaml/rubytypes.rb: Symbol#to_yaml generating method call error.
+
+Thu May 22 02:46:38 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_eval): splat NODE_RESTARY. [ruby-dev:20268]
+
+ * eval.c (rb_thread_fd_close): raise for writing threads.
+ [ruby-dev:20269]
+
+ * io.c (rb_io_close, io_reopen): ditto.
+
+ * io.c (io_reopen): keep stdio objects for stdin, stdout,
+ and stderr. [ruby-dev:19442]
+
+Thu May 22 01:11:15 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (strings, word_list): must create new instance always.
+ http://yowaken.dip.jp/tdiary/20030521.html#p02
+
+ * parse.y (yylex): slight optimization.
+
+Wed May 21 23:07:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (rb_sys_fail): should not specify errno explicitly.
+ [ruby-dev:20264]
+
+Wed May 21 20:51:47 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * Makefile.in, bcc32/Makefile.sub, win32/Makefile.sub,
+ wince/Makefile.sub: update dependencies.
+
+Wed May 21 17:44:16 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (syserr_initialize): prohibit specifying errno for
+ subclasses of SystemCallError. in addition, if initialize is
+ called for SystenCallError instance, its class be changed.
+ [ruby-dev:20257]
+
+ * gc.c (run_final): to protect thread context switch, finalizers
+ are wrapped in DEFER_INTS/ENABLE_INTS.
+
+Wed May 21 13:26:08 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/optparse.rb: get rid of warnings.
+
+Tue May 20 18:59:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_save_context): prohibit rb_gc_force_recycle()
+ on thread saved ruby_dyna_vars. [ruby-dev:20236]
+
+Tue May 20 17:39:15 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (init_copy): call initialize_copy at the end of copy
+ process.
+
+Tue May 20 17:15:55 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * error.c (syserr_initialize): use Errno constants as default
+ errno for subclasses. [ruby-dev:20241]
+
+Tue May 20 15:26:25 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * st.h: define ST_DATA_T_DEFINED for portability.
+
+ * ext/syck/syck.h: add typedef, st_data_t for Ruby 1.6.
+
+ * ext/syck/syck.c (syck_st_free_nodes): return int.
+
+ * ext/syck/syck.c (syck_add_sym): cast the data to st_data_t
+ to avoid error on bcc32.
+
+ * ext/syck/syck.c (syck_lookup_sym): ditto.
+
+ * ext/syck/syck.c (syck_free_parser): NULL is not integer.
+
+Tue May 20 13:29:04 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (kill): set errno after calling raise().
+
+Tue May 20 10:51:26 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_f_missing): create exception instance by ordinal
+ method. [ruby-dev:20033]
+
+ * error.c (rb_name_error, rb_sys_fail): ditto.
+
+ * error.c (exc_to_s, exit_status, name_err_name,
+ nometh_err_args, syserr_errno, syserr_eqq): access
+ attributes.
+
+ * error.c (name_err_initialize, nometh_err_initialize,
+ syserr_initialize): initialize attributes.
+
+Tue May 20 10:26:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): give warning for multiple values for a
+ block parameter.
+
+ * eval.c (rb_yield_values): a function to yield multiple values.
+
+ * array.c (sort_1): use rb_yield_values.
+
+ * enum.c (min_ii, max_ii): ditto.
+
+ * hash.c (rb_hash_update_block_i, delete_if_i, select_i,
+ each_pair_i, env_each, env_reject_bang, env_select,
+ env_update_i): ditto.
+
+ * struct.c (rb_struct_each_pair): ditto.
+
+ * eval.c (top_include): should include module in the current self,
+ not ruby_top_self. [ruby-dev:20198]
+
+ * eval.c (top_include): stop inclusion to ruby_wrapper; give
+ warning.
+
+Mon May 19 18:54:30 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/token.c, ext/syck/implicit.c: expanded character set to
+ allow UTF-8, other Ruby encodings.
+
+Mon May 19 16:47:00 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/syck.c, ext/syck/syck.h, ext/syck/token.c, ext/syck/gram.c:
+ count line numbers only if line pointer has increased.
+
+Tue May 20 00:45:40 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (push_braces): do not push_braces() unless rbrace is found.
+ (ruby-bugs-ja:PR#469)
+
+Tue May 20 00:09:41 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/pty/pty.c (pty_finalize_syswait): join (using Thread#value)
+ before detach pid. [ruby-talk:71519]
+
+Mon May 19 23:02:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (PUSH_FRAME): save outer ruby_block. [ruby-list:37677],
+ [ruby-dev:20202]
+
+ * eval.c (BEGIN_CALLARGS): restore outer block by using
+ ruby_block->outer.
+
+ * eval.c (block_pass): do not alter block->prev, but block->outer.
+
+ * array.c (get_inspect_tbl): warning on wrong condition.
+
+Mon May 19 16:13:57 2003 Minero Aoki <aamine@loveruby.net>
+
+ * class.c: add #include "version.h".
+
+ * hash.c: ditto.
+
+ * string.c: ditto.
+
+Mon May 19 15:33:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (localjump_xvalue): renamed exitstatus to exit_value
+ since it's not exit "status" after all.
+
+ * eval.c (localjump_error): add reason to LocalJumpError.
+
+ * compar.c (rb_cmpint): raise error via rb_cmperr(), if cmp value
+ is nil. now take new 2 arguments.
+
+ * time.c (time_cmp): 2003-05-16 fix was incomplete.
+ (ruby-bugs-ja:PR#458)
+
+Mon May 19 14:42:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_mod_cmp): stupid comparison fixed.
+
+ * io.c (Init_IO): ARGF.path added (alias to ARGF.filename).
+ [ruby-dev:20197]
+
+Mon May 19 13:58:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (init_copy): rename copy_object as initialize_copy,
+ since it works as copy constructor.
+
+ * eval.c (rb_add_method): initialize_copy should always be
+ private, like initialize.
+
+Mon May 19 13:51:50 2003 Minero Aoki <aamine@loveruby.net>
+
+ * re.c (rb_reg_quote): \n \r \f \v quoting was wrong.
+ [ruby-dev:20203]
+
+ * re.c (rb_reg_quote): rb_reg_quote(" ") should be "\\ ", not
+ "\\s".
+
+Mon May 19 08:08:51 2003 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb: use warn() instead of $stderr.puts().
+
+ * sample/cal.rb: ditto.
+
+Sat May 17 12:02:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (get_inspect_tbl): check whether inspect_tbl value is a
+ valid array. (ruby-bugs-ja PR#65)
+
+ * array.c (inspect_ensure,rb_protect_inspect,rb_inspecting_p):
+ use get_inspect_tbl().
+
+Sat May 17 11:50:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_abort): call exit(1) if exception is raised. This
+ patch was made by Nobuyoshi Nakada <nobu.nokada@softhome.net> on
+ 2002-05-30. (ruby-bugs-ja PR#236)
+
+ * signal.c: disable Ruby's interrupt handler at the beginning.
+ (ruby-bugs-ja PR#236)
+
+Sat May 17 02:17:42 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/rational.rb (Integer::denominator): fixed typo.
+ (ruby-bugs-ja:PR#466)
+
+Sat May 17 00:18:11 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/socket/socket.c (ruby_connect): connect() after EINPROGRESS
+ returns EINVAL on some platforms, need to check true error
+ status. [ruby-core:01037]
+
+Sat May 17 00:21:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_class_allocate_instance): singleton class check
+ moved to rb_obj_alloc(). (ruby-bugs-ja PR#345)
+
+Fri May 16 23:55:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_quote): should escape white space characters,
+ \t, \f, \n, \r. (ruby-bugs-ja PR#231)
+
+Fri May 16 12:40:40 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (block_pass): chain previous block to the pushing block.
+ [ruby-list:37677]
+
+ * time.c (time_cmp): does not compare with numbers for
+ interchangeability. (ruby-bugs-ja:PR#458)
+
+Thu May 15 21:55:54 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/gram.c: fixes to one-line documents and end of stream
+ documents.
+
+ * ext/syck/syck.c, ext/syck/syck.h: add root_on_error to parser
+ struct, specifying the symbol to be returned on a parse error.
+
+Thu May 15 18:44:31 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb (OpenURI::Redirect#initialize): call super to
+ initialize mesg.
+
+ * lib/open-uri.rb (OpenURI::Meta#charset): call block to guess charset
+ if block is given and charset is not given.
+
+Thu May 15 16:55:16 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_mod_le): returns nil if two classes/modules are not
+ in class-superclass relationship.
+
+ * object.c (rb_mod_cmp): uses new rb_mod_le() behavior.
+
+Thu May 15 07:45:30 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/rubyext.c, ext/syck/implicit.c: timestamp repairs to
+ timezone and milliseconds.
+
+ * ext/syck/syck.c (syck_parser_reset_levels): duplicate string literal
+ to avoid warning.
+
+Thu May 15 13:26:48 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_class_instance_methods): default will be changed in
+ 1.8.1.
+
+ * io.c (set_stdio): better message.
+
+Thu May 15 13:18:11 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (set_stdio): $stdin, $stdout, $stderr now became read-only.
+
+ * variable.c (readonly_setter): message changed.
+
+Thu May 15 09:50:51 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/syck/syck.c (syck_parser_pop_level): add prototype.
+
+ * ext/syck/syck.c (syck_strndup): should return value.
+
+Thu May 15 09:32:25 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (kill): fix typo and add signal 0 support.
+
+Wed May 14 20:09:26 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/gram.c: sequence-in-map shortcut, transfer methods on
+ sequence-in-sequence, memory leak in mapping merge.
+
+ * ext/syck/syck.c: memory leak in domain anchoring.
+
+ * lib/yaml/rubytypes.rb, lib/yaml/types.rb: eliminated 1.6.x code.
+
+Wed May 14 19:56:43 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/syck/rubyext.c: add prototypes to avoid VC++ warnings.
+
+Wed May 14 12:23:46 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb (Net::HTTP#start): should check whether HTTP
+ session is opened before finishing. (ruby-bugs-ja:PR#463)
+
+Wed May 14 09:12:55 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: reduce warning. (ruby-bugs-ja:PR#462)
+
+Tue May 13 22:31:04 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * lib/yaml/rubytypes.rb, lib/yaml/types.rb: using Object#object_id
+ rather than deprecated Object#id.
+
+ * ext/syck/token.c: changed ASCII escapes to octal notation.
+
+ * ext/Setup*: added entries for static linking of Syck extension.
+
+Tue May 13 20:31:58 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: add '--Wl,--enable-auto-import' to DLDFLAGS
+ on Cygwin/MinGW.
+
+ * configure.in: add '-D__USE_CRTIMP' to XCFLAGS on MinGW.
+
+ * ext/syck/handler.c: add proper casts.
+
+ * ext/syck/syck.c: ditto.
+
+Tue May 13 17:58:08 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * configure.in, bcc32/Makefile.sub, win32/Makefile.sub: define
+ HAVE_FSYNC.
+
+ * win32/win32.h (fsync): define as _commit().
+
+Tue May 13 15:35:35 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_match_exec): \Z changed to be consistent with new $
+ (endbuf) behavior.
+
+Tue May 13 14:48:07 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (error_pos): use $deferr for output instead of stderr
+ directly.
+
+ * eval.c (error_print,error_handle,rb_longjmp,rb_thread_schedule):
+ ditto.
+
+Tue May 13 06:34:19 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * lib/yaml/rubytypes.rb: object and struct loading
+
+ * lib/yaml.rb: YAML::detect_implicit will discover typing for a Ruby
+ string
+
+ * ext/syck/: Fixed portable comments, misuse of NULL and methods without
+ return VALUEs.
+
+Mon May 12 18:08:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (Init_IO): new variable $deferr which is default output
+ port of error messages.
+
+ * io.c (rb_warn_m): new method "warn". [new]
+
+ * error.c (warn_print): use $deferr.
+
+ * error.c (rb_bug): ditto.
+
+ * error.c (err_append): ditto.
+
+Sun May 11 13:50:12 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pp.rb: refine to_s test.
+
+ * lib/pp.rb (PP::ObjectMixin#pretty_print): refine to_s handling.
+
+Sun May 11 06:32:13 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/implicit.c, ext/syck/rubyext.c: transfer methods applied to
+ native loading
+
+ * ext/syck/token.c: fix for transfer methods on same indentation as nested
+ mapping
+
+ * lib/yaml/rubytypes.rb: all type names in lowercase
+
+Sat May 10 19:55:18 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ext/syck/gram.c ext/syck/handler.c ext/syck/implicit.c
+ ext/syck/node.c ext/syck/rubyext.c ext/syck/syck.c
+ ext/syck/syck.h ext/syck/token.c: updated to Syck 0.27
+
+ * lib/yaml/loader.rb: new YAML::Loader class
+
+ * lib/yaml.rb: loading of type families leverages YAML::DefaultLoader
+
+Sat May 10 19:00:08 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/string.c: file removed.
+
+ * wince/stdlib.c: file added.
+
+Sat May 10 16:17:02 2003 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (decode_utf7): new method.
+
+ * lib/net/imap.rb (encode_utf7): new method.
+
+Fri May 9 21:25:50 2003 why the lucky stiff <ruby-cvs@whytheluckystiff.net>
+
+ * ruby/ext/syck, ruby/lib/yaml: Initial checkin of YAML substances.
+
+Fri May 9 16:38:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_reopen): It should be possible to reopen closed IO.
+ [ruby-talk:70941]
+
+ * io.c (rb_io_reopen): inherit original file mode unless specified.
+
+Thu May 8 18:44:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_gc): check odd alignment stack on m68k machines.
+
+Thu May 8 12:56:04 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * compar.c (rb_cmperr): raise comparison failure.
+
+ * intern.h: prototype; rb_cmperr
+
+ * numeric.c (flo_gt, flo_ge, flo_lt, flo_le, fix_gt, fix_ge,
+ fix_lt, fix_le): should fail unless the argument is comparable.
+ (ruby-bugs-ja:PR#456)
+
+ * numeric.c (int_upto, int_downto): should fail unless the
+ argument is comparable. (ruby-bugs-ja:PR#454)
+
+Wed May 7 13:30:11 2003 Masahiro TANAKA <masa@ir.isas.ac.jp>
+
+ * numeric.c (num_step): better error treatment of float values.
+
+Tue May 6 17:51:54 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/pop.rb: rename method: POP3#mail_size -> n_mails
+
+ * lib/net/pop.rb: rename method: POP3#bytes -> n_bytes
+
+Tue May 6 17:21:01 2003 Minero Aoki <aamine@loveruby.net>
+
+ * ext/bigdecimal/.cvsignore: new file.
+
+ * ext/zlib/.cvsignore: new file.
+
+Tue May 6 14:39:36 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_methods): list singleton methods if recur
+ argument is false; list all methods otherwise.
+
+Mon May 5 21:19:25 2003 Koji Arai <jca02266@nifty.ne.jp>
+
+ * ext/gdbm/gdbm.c (fgdbm_values_at): new method to replace
+ select(index..).
+
+ * ext/sdbm/init.c (fsdbm_values_at): ditto.
+
+ * ext/dbm/dbm.c (fdbm_values_at): ditto.
+
+ * ext/dbm/dbm.c (DBM::VERSION): defined.
+
+ * ext/gdbm/testgdbm.rb: replace select with values_at.
+
+ * ext/sdbm/testsdbm.rb: ditto.
+
+ * ext/dbm/testdbm.rb: ditto.
+
+ * ext/dbm/testdbm.rb (setup): DBM.open(path, 0400) cause EACCESS
+ on Berkeley DB[234].
+
+Mon May 5 22:57:07 2003 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * sample/cal.rb: use values_at instead of select.
+
+ * sample/biorhythm.rb: ditto.
+
+Mon May 5 18:59:45 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * sample/test.rb: substitute 'select' with 'values_at'.
+
+ * lib/date.rb: ditto.
+
+ * lib/parsedate.rb: ditto.
+
+Mon May 5 00:46:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_values_at): new method to replace select(index..).
+
+ * hash.c (rb_hash_values_at,env_values_at): ditto.
+
+ * re.c (match_values_at): ditto.
+
+ * struct.c (rb_struct_values_at): ditto.
+
+ * re.c (match_select): add iterator behavior.
+
+Sun May 4 19:08:53 2003 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/format.rb: synchronized with date2 3.3.2.
+
+Sun May 4 15:21:18 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/smtp.rb: ESMTP -> SMTP transition wrongly fails.
+
+Sun May 4 15:06:37 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/pop.rb: APOP did not work. [ruby-dev:20149]
+
+Sat May 3 21:14:29 2003 Johan Holmberg <holmberg@iar.se>
+
+ * ext/curses/curses.c, ext/digest/sha2/sha2.c, ext/iconv/iconv.c,
+ ext/racc/cparse/cparse.c: include "ruby.h" at the top to shut up
+ "_FILE_OFFSET_BITS redefined" warning on Solaris.
+
+Sat May 3 11:00:12 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_class_protected_instance_methods): now gives
+ warnings to show migration path. The default will be reversed
+ on Jan 2004.
+
+Sat May 3 00:58:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_methods): now accepts recurse parameter.
+
+ * lib/delegate.rb (Delegator::initialize): instance_methods
+ etc. now recurse by default. need to specify false.
+
+Sat May 3 00:22:00 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/protocol.rb: reintroduce Protocol.protocol_param.
+
+ * lib/net/http.rb: ditto.
+
+ * lib/net/pop.rb: ditto.
+
+ * lib/net/smtp.rb: ditto.
+
+Fri May 2 23:29:53 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/protocol.rb: remove Protocol class.
+
+ * lib/net/smtp.rb (SMTP): ditto.
+
+ * lib/net/pop.rb (POP3): ditto.
+
+ * lib/net/http.rb (HTTP): ditto.
+
+ * lib/net/protocol.rb: remove Command class.
+
+ * lib/net/smtp.rb (SMTPCommand): ditto.
+
+ * lib/net/pop.rb (POP3Command): ditto.
+
+ * lib/net/pop.rb: remove APOPCommand class.
+
+ * lib/net/protocol.rb: remove Code class and its all subclasses.
+
+ * lib/net/protocol.rb: remove Response class and its all
+ subclasses.
+
+ * lib/net/pop.rb (POPMail): new method unique_id (alias uidl).
+
+Fri May 2 18:17:37 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * compar.c (cmp_gt): raises ArgumentError when "<=>" give nil.
+ inspired by discussion on comp.lang.python.
+
+Fri May 2 17:37:01 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/cgi/session.rb (CGI::Session::initialize): updated to
+ support 2003-04-23 change in cgi.rb [ruby-core:1002]
+
+Fri May 2 17:21:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (method_list): classify methods based on nearest
+ visibility. [ruby-dev:20127]
+
+ * class.c (rb_class_instance_methods): recurse by default. other
+ method listing methods as well.
+
+Fri May 2 09:38:06 2003 Warren Brown <wkb@airmail.net>
+
+ * string.c (rb_str_ljust): now takes optional argument to specify
+ pad string. [ruby-talk:70482]
+
+ * string.c (rb_str_rjust): ditto.
+
+ * string.c (rb_str_center): ditto.
+
+ * string.c (rb_str_justify): utility function.
+
+Fri May 2 04:10:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_add_method): call singleton_method_added or
+ method_added for every method definition (after ruby_running).
+ [ruby-talk:70471]
+
+ * array.c (rb_ary_reverse_bang): Array#reverse! should not return
+ nil even for arrays sized less than 2.
+
+Thu May 1 23:18:01 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_eof): should not block after reading all argument
+ files. (ruby-bugs-ja PR#449)
+
+Fri May 2 15:10:41 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb: use hashes to pass options.
+
+ * lib/fileutils.rb: new option mkdir(:mode), mkdir_p(:mode).
+
+ * instruby.rb: follow fileutils.rb feature change.
+
+Thu May 1 08:24:00 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_match_exec): $ _always_ matches at the end of string.
+
+Wed Apr 30 14:12:00 2003 wanowa.kimura@nifty.ne.jp (kimura wataru)
+
+ * net/imap.rb: support THREAD extension.
+
+Sun Apr 27 23:13:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * string.c (rb_str_to_i): disallow negative radix.
+ [ruby-dev:20087]
+
+Sat Apr 26 23:34:42 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (open_args): warning message changed to "don't put space
+ before argument parentheses".
+
+Sat Apr 26 14:25:00 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * wince/ : files removed.
+ (config, dll.mak, exe.mak, mswince-ruby17.def,
+ io.c, process.c, signal.c, string.c, time.c)
+
+ * wince/ : files added.
+ (assert.c, Makefile.sub, mkexports.rb, io_wce.c,
+ process_wce.c, signal_wce.c, string_wce.c,
+ time_wce.c)
+
+ * wince/configure.bat : like mswin32 style.
+
+ * wince/direct.c : remove "static" at _currentdir.
+
+ * wince/io.h : change definition.
+
+ * wince/stdio.c : _fdopen -> fdopen.
+
+ * wince/process.h : add _P_OVERLAY.
+
+ * wince/time.h : change definition.
+
+ * wince/wincemain.c : add wce_SetCurrentDir.
+
+ * wince/wince.c : add wce_SetCurrentDir and wce_fopen.
+ fix GetModuleFileNameA to return correct "lpFileName".
+
+ * wince/wince.h : remove #ifdef.
+
+ * wince/sys/utime.h, utime.c : rename _utime to utime.
+
+ * wince/sys/stat.c : expand relative directory in stat.
+
+Sat Apr 26 06:33:04 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_read): ARGF.read() should read all argument files.
+
+Fri Apr 25 18:46:00 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * gc.c: STACK_LEVEL_MAX=65535 on mswince.
+
+Fri Apr 25 18:40:07 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_read): read should not span two files. [ruby-dev:20073]
+
+Fri Apr 25 18:19:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (splat_value): split splat_value() and avalue_splat().
+
+ * io.c: there's no way to set non-IO value to current_file, thus
+ no need for argf_forward().
+
+Fri Apr 25 02:03:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_invoke): Proc#yield should pass through retry and
+ break like keyword yield. [ruby-talk:70034]
+
+ * eval.c (proc_invoke): orphan Proc now raises LocalJumpError for
+ break and retry again.
+
+ * eval.c (rb_eval): ARGSCAT should splat the argument.
+
+ * eval.c (splat_value): splat operation function.
+
+Thu Apr 24 23:37:02 2003 Dave Thomas <dave@thomases.com>
+
+ * lib/matrix.rb (Matrix#minor): Used Range#size, which no longer
+ exists.
+
+ * lib/complex.rb (new!): Complex.new had been made private, but
+ Kernel#Complex called it. Re-exposed as new!.
+
+ * lib/matrix.rb (Matrix.row_vector): Fix method name typo
+
+Thu Apr 24 19:40:02 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb: add -Wl,--no-undefined to LDSHARED only
+ if GNU ld is 2.11 or later.
+
+Wed Apr 23 14:05:40 2003 Dave Thomas <dave@pragprog.com>
+
+ * lib/ipaddr.rb (include?): Support non-IPAddr parameters.
+ [ruby-core:00980]
+
+Wed Apr 23 13:31:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/cgi.rb (CGI::QueryExtension::[]): always return Value
+ object.
+
+Wed Apr 23 08:39:27 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/zlib/extconf.rb: bccwin32 is win32 too.
+
+Tue Apr 22 20:58:00 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
+
+ * ruby.c: don't call VirtualQuery in ruby_init_loadpath()
+ on mswince.
+
+Tue Apr 22 19:08:53 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * marshal.c (save_mantissa, load_mantissa): for interoperability
+ should count cut-down bit from topmost.
+
+Tue Apr 22 09:20:40 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg_ambiguous): hopefully better message.
+
+ * lib/cgi.rb (CGI::QueryExtension::initialize_query): to_ary
+ removed.
+
+Tue Apr 22 06:06:22 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/resolv.rb (Resolv::DNS::Resource#hash): use XOR to accumulate
+ hash value.
+
+ * lib/tsort.rb (TSort#each_strongly_connected_component): don't use
+ block argument.
+ (each_strongly_connected_component_from): ditto.
+
+Mon Apr 21 21:59:48 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * marshal.c: one more digit for decimal point. [ruby-talk:69808]
+
+Mon Apr 21 21:25:59 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * numeric.c (flo_is_finite_p): use finite() if available.
+
+ * win32/win32.h (isinf, isnan): define as macro.
+ [ruby-win32:00533]
+
+ * bcc32/Makefile.sub, win32/Makefile.sub: no longer use
+ missing/isinf.c, missing/isnan.c.
+
+Mon Apr 21 18:36:28 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * bignum.c (rb_cstr_to_inum): unnecessarily long buffer was used
+ for radix 9. [ruby-dev:20057]
+
+Mon Apr 21 17:44:34 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (block_append, value_expr0, assign_in_cond,
+ warn_unless_e_option, warning_unless_e_option, range_op,
+ cond0): adjust line number in warning.
+
+Mon Apr 21 00:47:42 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * sample/test.rb: avoid the MSVCRT *printf problem(float).
+ [ruby-dev:20037]
+
+Mon Apr 21 00:11:15 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * marshal.c (w_float): append least mantissa bits to get rid
+ of roundoff problem. [ruby-talk:69518]
+
+ * marshal.c (r_object0): load least mantissa bits.
+
+Sun Apr 20 23:24:25 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.c (NtInitialize): set the floating-point control word
+ on bcc32.
+
+ * win32/win32.h, bcc32/Makefile.sub: use missing/isinf.c, should not
+ use _finite() because it returns 0 if NaN.
+
+Sun Apr 20 03:09:30 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * parse.y (void_expr0): node might become NULL after calling
+ remove_begin().
+
+Sat Apr 19 21:55:10 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/Setup*: Add zlib and remove bogus and obsolete entries.
+
+Sat Apr 19 14:47:07 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_gc): use rb_gc_mark_maybe() to mark registered C
+ addresses. C variables may not hold valid reference to Ruby
+ objects. [ruby-core:00975]
+
+Sat Apr 19 00:56:13 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * struct.c (rb_struct_eql): should compare values with "eql?".
+
+Fri Apr 18 23:29:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_check): <=> returns nil for invalid values;
+ should check.
+
+Fri Apr 18 15:26:50 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * error.c (rb_raise): workaround for some implementations of
+ vsnprintf.
+
+Fri Apr 18 02:23:42 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_compile_pattern): should not set RE_OPTIMIZE_ANCHOR,
+ if anychar_repeat is enclosed by parentheses.
+
+Fri Apr 18 01:49:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * util.c (ruby_strtod): improved conversion accuracy.
+
+Thu Apr 17 14:39:23 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dbm/dbm.c (each_pair): add prototype to avoid VC++ warnings.
+
+ * ext/readline/readline.c (Init_readline): follow readline 4.2
+ prototype.
+
+Thu Apr 17 14:22:36 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (cond0): warn only range literals whose both side are
+ literals. [ruby-core:00964]
+
+Thu Apr 17 11:10:59 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/readline/readline.c: add the defined operator for bcc32.
+
+Wed Apr 16 00:14:06 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-special-char-p): should test at the
+ point if no argument. fixed by Michael Scholz
+ <scholz-micha@gmx.de>.
+
+Tue Apr 15 19:35:08 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb: rm_r should raise Errno::ENOENT if file
+ does not exist ([ruby-core:958]). Thanks Johan Holmberg.
+
+Tue Apr 15 19:12:21 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * struct.c (rb_struct_hash): new methods Struct#hash, Struct#eql?.
+ (ruby-bugs:PR#758)
+
+Tue Apr 15 16:05:11 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * numeric.c (rb_fix2str): buffer was insufficient.
+ (ruby-bugs-ja:PR#431)
+
+Mon Apr 14 19:45:56 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (file_expand_path): root must follow buf when
+ reallocated. [ruby-talk:69339], [ruby-dev:20025]
+
+Mon Apr 14 03:22:33 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * rubyio.h (struct OpenFile): add noraise flag to finalizer.
+
+ * io.c (Init_IO): define $/, $-0, and $\ as string-only
+ variables.
+
+ * string.c (rb_str_split_m): does not generate empty string if
+ the receiver is empty.
+
+ * io.c (fptr_finalize): should raise error on EBADF for readable
+ IOs as well.
+
+Mon Apr 14 15:54:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * bignum.c (rb_cstr_to_inum, rb_big2str): allow 2-36 as radix.
+
+ * numeric.c (rb_fix2str): ditto.
+
+ * string.c (rb_str_to_i): ditto.
+
+Sun Apr 13 03:20:31 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/mkmf.rb (try_func): remove COMMON_HEADERS at first for
+ performance.
+
+Sat Apr 12 20:59:40 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-beginning-of-arg): substitute
+ ruby-backward-arg.
+
+ * misc/ruby-mode.el (ruby-calculate-indent): fixed wrong
+ indentation in brace block and parentheses.
+
+ * misc/ruby-mode.el (ruby-forward-sexp, ruby-backward-sexp):
+ support special char literal, and negative arguments.
+
+Sat Apr 12 17:52:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_stat): use rb_check_convert_type() to retrieve IO.
+
+Fri Apr 11 19:00:14 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * win32/win32.c (rb_w32_stat): check arguments. [ruby-dev:20007]
+ [ruby-win32:535]
+
+Fri Apr 11 15:56:08 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * numeric.c (coerce_rescue): prevent inspected String from GC.
+
+ * numeric.c (flo_eq, rb_dbl_cmp, flo_gt, flo_ge, flo_lt, flo_le,
+ flo_eql): correct NaN comparison. (ruby-bugs:PR#744)
+
+ * sample/test.rb: NaN comparison test.
+
+Fri Apr 11 14:48:47 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_stat): dereference using StringValuePtr().
+
+ * file.c (rb_file_s_stat): use rb_stat(). [ruby-dev:20007]
+
+Fri Apr 11 10:51:08 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/benchmark.rb (Benchmark::bm): get rid of warning.
+ [ruby-talk:69124]
+
+Fri Apr 11 02:41:35 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (set_stdin): assigned value must respond to "read" and
+ "getc".
+
+ * io.c (set_outfile): assigned value must respond to "write".
+ (ruby-bugs-ja:PR#425)
+
+Thu Apr 10 21:12:19 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/pop.rb: Exception line was accidentaly removed.
+ [ruby-dev:19989]
+
+Thu Apr 10 18:42:13 2003 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * array.c (rb_ary_times): added some checks for request size.
+
+Thu Apr 10 03:22:38 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_mod_name): always return empty string for
+ anonymous class/module. (ruby-bugs-ja PR#424)
+
+ * config.sub: stop forcing addition of -gnu to -linux.
+
+ * variable.c (classname): refactoring.
+
+ * variable.c (rb_class_path): __tmp__classpath__ handling moved
+ from classname().
+
+Thu Apr 10 01:52:24 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_obj_is_method): indefinite return value.
+
+Thu Apr 10 00:39:32 2003 Tanaka Akira <akr@m17n.org>
+
+ * regex.c (re_compile_pattern): /[\--\-]/ was warned. warn /]/.
+
+ * mkconfig.rb: escape `]' in regexp.
+
+Thu Apr 10 00:27:07 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * time.c (time_strftime): RSTRING(format)->ptr might become NULL.
+
+Wed Apr 9 23:54:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_obj_remove_instance_variable): better message.
+ [ruby-talk:68987]
+
+ * variable.c (rb_mod_remove_const): ditto.
+
+ * object.c (rb_obj_ivar_get): ditto.
+
+ * object.c (rb_obj_ivar_set): ditto.
+
+ * parse.y (yylex): ditto.
+
+Wed Apr 9 21:51:20 2003 Dave Thomas <Dave@Thomases.com>
+
+ * eval.c (rb_mod_define_method): Allow UnboundMethod as
+ parameter.
+
+Wed Apr 9 18:30:58 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (top_include): include module to wrapper module if
+ wrapper is present. experimental. [ruby-list:37539]
+
+Wed Apr 9 17:24:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_gc_mark_children): introduce this function again; this
+ is required when stack was very tight. [ruby-talk:68916]
+
+Wed Apr 9 15:49:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigdivmod): small typo.
+
+Wed Apr 9 15:35:04 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/readline/readline.c: include <unistd.h> only when
+ HAVE_UNISTD_H is defined.
+
+Wed Apr 9 14:05:00 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * marshal.c (w_object): preserve extended module on struct.
+ (ruby-bugs-ja:PR#422)
+
+Wed Apr 9 03:43:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (BIGZEROP): macro to determine if x is a bignum zero.
+
+Tue Apr 8 11:49:31 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (Init_Proc): make Method and UnboundMethod independent.
+ They are like instance and its class. [ruby-core:00941]
+
+ * parse.y (yylex): disallow global variables like "$1ve".
+ [ruby-core:00945]
+
+ * marshal.c (marshal_dump): Marshal.dump(0, false) should cause an
+ error. (ruby-bugs-ja PR#421)
+
+ * regex.c (re_compile_pattern): warn if '-' is the edge of
+ character range.
+
+Mon Apr 7 15:49:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_s_unpack_sockaddr_in): remove struct
+ size check. getnameinfo(3) can handle. [ruby-dev:19967]
+
+Mon Apr 7 01:33:31 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_read): do not call rb_sys_fail() when required data
+ length is zero. (ruby-bugs-ja PR#420)
+
+ * eval.c (umethod_proc): should raise TypeError, instead of
+ returning error causing Proc. Following the principle of "fail
+ early". [ruby-core:00927]
+
+Sun Apr 6 18:29:21 2003 UENO Katsuhiro <katsu@blue.sky.or.jp>
+
+ * ext/zlib/zlib.c: the return value of GzipReader#getc must be
+ unsigned.
+
+Sun Apr 6 00:35:37 2003 Tanaka Akira <akr@m17n.org>
+
+ * sample/exyacc.rb: use Regexp in gsub!.
+
+Sat Apr 5 23:41:28 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): small but serious typo.
+
+Sat Apr 5 04:23:05 2003 Warren Brown <wkb@airmail.net>
+
+ * sprintf.c (rb_f_sprintf): was decrementing width even if there
+ is no sign character.
+
+Sat Apr 5 01:41:28 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (backtrace): skip internal allocator frame.
+ (ruby-bugs-ja PR#416)
+
+Fri Apr 4 10:53:22 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (assign): should prepare mrhs by svalue_to_mrhs().
+
+Wed Apr 2 15:11:23 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * README.EXT, README.EXT.ja (3.3): clarified -1 as free for
+ Data_Wrap_Struct(). [ruby-dev:19881]
+
+Mon Mar 31 11:11:36 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_missing): use "inspect" for T_OBJECT as well.
+
+Mon Mar 31 10:50:48 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (env_reject_bang): untaint key string.
+
+ * hash.c (env_delete_m): execute block only if deleting key does
+ not exist.
+
+Sat Mar 29 17:54:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): do not call rb_str_buf_cat() with NULL ptr,
+ which causes SEGV; jump to grow instead. [ruby-dev:19944]
+
+Sat Mar 29 15:19:48 2003 Tanaka Akira <akr@m17n.org>
+
+ * instruby.rb, ext/extmk.rb, lib/benchmark.rb, lib/cgi.rb,
+ lib/debug.rb, lib/getoptlong.rb, lib/optparse.rb, lib/time.rb,
+ lib/date/format.rb, lib/irb/ruby-lex.rb lib/uri/common.rb: revert
+ escape for `-' in character class.
+
+Sat Mar 29 09:48:35 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (avalue_to_svalue): use rb_check_array_type() again.
+ Clarify how "to_ary" and "to_a" work. [ruby-talk:68155]
+
+ * eval.c (svalue_to_avalue): ditto.
+
+ * eval.c (svalue_to_mrhs): ditto.
+
+ * eval.c (rb_eval): unary splat to use to_a, but we need a hack to
+ exclude Object#to_a until it's removed.
+
+ * object.c (rb_Array): check obj.respond_to?("to_a"). Currently
+ all object respond_to "to_a", but Object#to_a will be removed.
+
+ * range.c (Init_Range): undefine to_ary.
+
+ * re.c (Init_Regexp): ditto.
+
+Sat Mar 29 09:47:52 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * MANIFEST (ext/aix_mksym.rb): remove obsolete file.
+
+Fri Mar 29 06:21:24 2003 UENO Katsuhiro <katsu@blue.sky.or.jp>
+
+ * ext/zlib: merge from rough.
+
+Fri Mar 28 19:33:39 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * variable.c (rb_class_path): hold temporary class path in a
+ instance variable to get rid of GC. [ruby-dev:19932]
+
+ * variable.c (classname): remove temporary class path when exact
+ name found.
+
+Fri Mar 28 18:29:23 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_compile_pattern): do not warn if "-" is at the top
+ or last of character class.
+
+Thu Mar 27 12:10:15 2003 Tanaka Akira <akr@m17n.org>
+
+ * regex.c (re_compile_pattern): fix [:name:] handling.
+ /[\[:digit:]]/ was treated as /[[:digit:]]/.
+ /[[:-@]/ was treated as /[\[:\-@]/.
+ /[%-[:digit:]]/ was treated as /[%-\[:digit:]\]/.
+
+Thu Mar 27 03:26:40 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * string.c (rb_str_capitalize_bang): check length before upcase
+ first character. (ruby-bugs:PR#697)
+
+Wed Mar 26 20:25:10 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * dln.c (dln_find_1): break if path list end, even for too long
+ path names. (ruby-bugs-ja:PR#412)
+
+Wed Mar 26 13:19:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (avalue_splat): new function to do unary * (splat)
+ operator.
+
+ * eval.c (avalue_to_svalue,svalue_to_avalue,svalue_to_mrhs): do
+ not use implicit "to_ary" conversion.
+
+ * ext/curses/curses.c (GetWINDOW,GetMOUSE): add taint check.
+
+ * ext/curses/curses.c (curses_init_screen): ditto.
+
+ * ext/curses/curses.c (window_initialize): ditto.
+
+ * gc.c (os_each_obj): prohibit ObjectSpace#each_object in safe
+ mode ($SAFE >= 4).
+
+Tue Mar 25 23:26:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * signal.c (trap): return "DEFAULT" and "IGNORE" respectively for
+ previous sighandler SIG_DFL and SIG_IGN. [ruby-talk:67860]
+
+Tue Mar 25 12:24:15 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): call avalue_to_mrhs() to assign block
+ parameter |a|. [ruby-dev:19897]
+
+ * ruby.c (ruby_set_argv): freeze argument strings.
+
+Tue Mar 25 12:01:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_initialize): should check rb_secure(4).
+
+ * dir.c (dir_s_getwd): should check rb_secure(4).
+
+ * object.c (rb_obj_infect): function version of OBJ_INFECT().
+
+ * eval.c (rb_secure_update): new function to check object update.
+
+Tue Mar 25 10:18:05 2003 Minero Aoki <aamine@loveruby.net>
+
+ * ext/strscan/strscan.c: should infect also return values of
+ #inspect.
+
+ * ext/strscan/strscan.c: use snprintf() instead of sprintf().
+
+Mon Mar 24 16:55:04 2003 Takaaki Tateishi <ttate@ttsky.net>
+
+ * ext/dl/dl.c: added rb_secure(4). (Thanks to Minero Aoki)
+
+ * ext/dl/sym.c: ditto.
+
+ * ext/dl/ptr.c: ditto.
+
+Mon Mar 24 00:09:02 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (block_append): warn unused literal.
+
+Sun Mar 23 22:22:04 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/jcode.rb (tr!, delete!, szueeze!): add empty string checking.
+
+Sun Mar 23 19:54:53 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * gc.c (rb_gc_call_finalizer_at_exit): use free() if dfree is -1.
+
+Sat Mar 22 15:50:29 2003 Tanaka Akira <akr@m17n.org>
+
+ * time.c (make_time_t): try search_time_t if mktime/timegm is failed.
+
+Sat Mar 22 13:26:33 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/optparse.rb, lib/jcode.rb, ext/tk/lib/tk.rb: reorder character
+ class /[\]\[]/ to /[\[\]]/ for readability.
+
+Sat Mar 22 12:44:15 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/date/format.rb, lib/uri/common.rb: escape `[', `]', `-' in
+ character class in regexp to avoid warning.
+
+Sat Mar 22 07:39:32 2003 Ulf Betlehem <flu@iki.fi>
+
+ * io.c (rb_io_fread): may lose data on nonblocking read.
+
+Fri Mar 21 23:40:41 2003 Tanaka Akira <akr@m17n.org>
+
+ * regex.c (re_compile_pattern): fix previous change.
+
+ * instruby.rb, ext/extmk.rb, ext/tk/lib/tk.rb, lib/benchmark.rb,
+ lib/cgi.rb, lib/debug.rb, lib/getoptlong.rb, lib/jcode.rb,
+ lib/optparse.rb, lib/time.rb, lib/date/format.rb,
+ lib/irb/ruby-lex.rb: escape `[', `]', `-' in character class in
+ regexp to avoid warning.
+
+Fri Mar 21 23:23:45 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_compile_pattern): give warning for unescaped square
+ brackets and minus in character class. [ruby-dev:19868]
+
+Fri Mar 21 18:12:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (bmcall): missing type.
+
+Fri Mar 21 01:29:35 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (rb_f_sprintf): copy sign bits only if value is
+ negative.
+
+ * missing.h: include <stdarg.h> or <varargs.h> if HAVE_VSNPRINTF
+ is not defined.
+
+Thu Mar 20 18:31:37 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/optparse.rb (OptionParser#order!): follow recent change
+ of proc argument.
+
+Thu Mar 20 16:12:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flo_to_s): change format specifier to "%.15g" to
+ avoid unnecessary 9s (e.g. 99.59999999999999). (ruby-bugs-ja PR#406)
+
+Thu Mar 20 16:03:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (stmt, primary): get rid of SEGV at empty or invalid
+ condition. (ruby-bugs-ja:PR#410)
+
+ * parse.y (cond_negative): negate condition node when NODE_NOT.
+
+Thu Mar 20 10:45:29 2003 Tanaka Akira <akr@m17n.org>
+
+ * eval.c (bmcall): add volatile to avoid GC problem.
+
+Thu Mar 20 10:10:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (load_dyna): clear ruby_errinfo. (ruby-bugs-ja PR#409)
+
+Wed Mar 19 23:05:30 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/tracer.rb (trace_func): save and recover Thread.critical state.
+ Fixed by Fukumoto Atsushi <fukumoto@imasy.or.jp> [ruby-dev:19830]
+
+Wed Mar 19 02:55:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (read_all): make str empty if given. (ruby-bugs-ja PR#408)
+
+ * io.c (io_read): ditto.
+
+ * io.c (rb_io_sysread): ditto.
+
+Tue Mar 18 18:24:03 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c: do not override min and max.
+
+Sun Mar 16 12:29:55 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pp.rb (object_address_group): use to_s instead of name
+ to get name of class.
+
+Fri Mar 14 08:53:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (remove_sign_bits): octal left most digit for negative
+ numbers may be '3'. (ruby-bugs-ja PR#407)
+
+ * sprintf.c (rb_f_sprintf): should prefix sign bits if bignum is
+ negative, using sign_bits().
+
+Wed Mar 12 16:48:19 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * io.c (prep_stdio): set binmode only if the file descriptor
+ is not connected to a terminal on Cygwin.
+
+Wed Mar 12 11:23:49 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (avalue_to_mrhs): split argument passing and assignment
+ conversion.
+
+ * eval.c (svalue_to_mrhs): ditto.
+
+ * eval.c (avalue_to_svalue): avalue_to_svalue([[1,2]]) should be
+ [[1,2]], not [1,2] to wrap-around.
+
+Tue Mar 11 21:00:59 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/smtp.rb: Digest string wrongly included '\n' when user
+ name is too long (ruby-bugs-ja:PR#404).
+
+Tue Mar 11 20:07:01 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: speeding up by avoiding extra flush.
+ (suggested by Brian Candler <B.Candler@pobox.com> [ruby-talk:66516])
+
+Tue Mar 11 04:30:12 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (massign): remove unnecessary array unpacking; it should
+ be handled before massign() by svalue_to_mrhs().
+
+ * eval.c (svalue_to_mrhs): '*a = v' value conversion to avalue
+ (i.e. [1] => [[1]], [1,2] => [1,2]).
+
+ * eval.c (rb_eval): use svalue_to_mrhs.
+
+ * eval.c (rb_yield_0): ditto.
+
+ * eval.c (proc_invoke): break from "Proc#yield" is legal.
+
+Mon Mar 10 23:19:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_find_file): need world writable directory check for
+ relative paths too.
+
+Mon Mar 10 11:23:00 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_find_file): world writable directory check if
+ $SAFE >= 1 (was $SAFE >= 2).
+
+Mon Mar 10 01:59:47 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/pop.rb: do not dispatch LIST when a mailbox is empty.
+
+ * lib/net/pop.rb: merge the 'STAT' patch from Frank S.Fejes
+ <frank@oopdreams.com>, with modifications (listed below).
+
+ * lib/net/pop.rb: new method Net::POP#mail_size.
+
+ * lib/net/pop.rb: new method Net::POP#bytes.
+
+ * lib/net/pop.rb: new method Net::POPCommand#stat.
+
+Sun Mar 9 19:30:25 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/fileutils.rb (mkdir, mkdir_p): revert.
+
+ * instruby.rb (umask): umask 0022, not 0.
+
+Sun Mar 9 17:09:40 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/fileutils.rb (mkdir, mkdir_p): set mode to 0755.
+
+ * Makefile.in (fake.rb): set ALT_SEPARATOR to the default value.
+
+Sat Mar 8 11:30:59 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (massign): fix a bug not to expand in assignment to sole
+ lhs. [ruby-dev:19766]
+
+Fri Mar 7 21:57:25 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pp.rb (Kernel.pp): module function.
+ (MatchData#pretty_print): new method.
+
+Fri Mar 7 20:27:19 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/tcltklib/extconf.rb (find_tcl, find_tk): return true if
+ non-versioned found. [ruby-dev:19759]
+
+Fri Mar 7 15:05:35 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/dbm/extconf.rb: add QDBM support.
+
+Fri Mar 7 12:59:39 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (massign): deal with sole lhs, assign rest args from
+ converted array. [ruby-dev:19751]
+
+Fri Mar 7 03:31:36 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (dsym): :"symbol string" style should not contain `\0'.
+
+ * process.c (proc_detach): new method Process.detach(pid) which
+ create background watcher thread to issue waitpid. [new]
+
+ * process.c (rb_detach_process): utility function to detach
+ process from C code.
+
+ * ext/pty/pty.c (pty_finalize_syswait): terminate watcher thread,
+ and detach child process (by creating new idle waitpid watcher
+ thread).
+
+ * ext/pty/pty.c (pty_syswait): may lost signal stopped child.
+
+Fri Mar 7 00:30:33 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/Win32API/Win32API.c: no longer use inline-asms.
+
+ * ext/Win32API/extconf.rb: no need to add gcc options.
+
+Thu Mar 6 13:02:10 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (reswords): fix reswords list.
+
+Wed Mar 5 12:13:21 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: better YACC support on HP-UX.
+
+Wed Mar 5 05:55:20 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_cat): remove ptr NULL check and MEMZERO(). ptr
+ must be non NULL.
+
+Tue Mar 4 23:12:07 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in, bcc32/Makefile.sub, win32/Makefile.sub: define
+ RUBY_EXPORT to export symbols.
+
+ * defines.h: use RUBY_EXTERN instead of EXTERN.
+
+ * intern.h, re.h, ruby.h, rubysig.h: ditto.
+
+ * win32/win32.h: remove EXTERN definition.
+
+Tue Mar 4 17:54:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_aref): raise TypeError if index is a symbol.
+ [ruby-list:37217]
+
+ * array.c (rb_ary_aset): ditto.
+
+Tue Nov 13 14:39:11 2001 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * missing/strftime.c: HP-UX support.
+
+Tue Mar 4 15:08:08 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: better HP-UX support.
+
+ * missing/strftime.c: ditto.
+
+Tue Mar 4 10:11:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_popen): do not call rb_io_close() directly, call
+ "close" method instead. [ruby-dev:19717]
+
+ * io.c (rb_io_s_open): ditto.
+
+ * hash.c (rb_any_hash): remove DEFER_INTS. all do_hash() calls in
+ st.c are at the top of functions. No reentrant problem.
+
+Tue Mar 4 01:19:21 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/dl/MANIFEST: Exclude .cvsignore. [found by: eban]
+
+Tue Mar 4 01:17:08 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/Win32API/MANIFEST: Belatedly add lib/win32/registry.rb.
+ [found by: eban]
+
+Tue Mar 4 00:33:04 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * MANIFEST: Belatedly add Test::Unit files. D'oh!
+
+Sun Mar 2 09:51:47 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * marshal.c (w_nbyte): should output always via rb_io_write().
+
+ * marshal.c (dump_ensure): ditto.
+
+ * marshal.c (marshal_dump): should call "binmode" method, if it
+ responds to.
+
+ * marshal.c (r_byte): should input always via "getc" method.
+
+ * marshal.c (r_bytes0): should input always via "read" method.
+
+ * marshal.c (marshal_load): need not to set up FILE* fp;
+
+Mon Mar 3 11:29:04 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): parse 'lhs = a rescue b' as 'lhs=(a rescue b)'.
+
+Mon Mar 3 02:53:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_fread): should not clearerr() if there's no filled
+ buffer (i.e. rb_io_fread() returning zero).
+
+Mon Mar 3 01:42:35 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-expr-beg): escaped char syntax.
+
+ * misc/ruby-mode.el (ruby-parse-partial): ditto.
+
+ * misc/ruby-mode.el (ruby-parse-partial): no deep indent for
+ block.
+
+ * misc/ruby-mode.el (ruby-backward-arg): skip arguments backward.
+
+ * misc/ruby-mode.el (ruby-calculate-indent): too deep indentation.
+
+Fri Feb 28 23:50:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (map_errno): map OS error to errno. [new]
+
+ * win32/win32.c (pipe_exec, CreateChild, poll_child_status, waitpid,
+ kill, link, rb_w32_rename, unixtime_to_filetime, rb_w32_utime): use
+ map_errno() instead of using GetLastError() directly.
+
+ * 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): map winsock error to errno.
+
+Fri Feb 28 22:54:10 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * win32/win32.c (flock): supports larger files, and maps error
+ code.
+
+ * win32/win32.c (rb_w32_asynchronize): returns errno from child
+ thread.
+
+ * win32/win32.c (rb_w32_fclose, rb_w32_close): ensures unlocked.
+
+Wed Feb 26 17:38:16 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb: replace Kernel.open as well.
+
+Tue Feb 25 23:03:08 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/debug.rb (DEBUGGER__::Context#debug_command): bp filename must
+ be the basename of it. [ruby-talk:65644]
+
+Mon Feb 24 17:49:35 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (yycompile): zero clear ruby_eval_tree_begin if
+ compilation failed.
+
+Mon Feb 24 08:06:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_new): need no MEMZERO().
+
+Sun Feb 23 17:57:06 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/fileutils (fu_stream_blksize): wrong logical condition.
+ (and -> or).
+
+Sat Feb 22 03:12:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (fix_gt): use rb_num_coerce_cmp() instead of
+ rb_num_coerce_bin.
+
+ * numeric.c (fix_ge, fix_lt, fix_le): ditto.
+
+ * numeric.c (flo_gt, flo_ge, flo_lt, flo_le): ditto.
+
+Sat Feb 22 02:45:20 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_create): may called from place higher than
+ rb_gc_stack_start.
+
+ * gc.c (Init_stack): update rb_gc_stack_start if it is lower (or
+ higher if stack grows down) than the previous value.
+
+Fri Feb 21 21:03:41 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb: new method FileUtils#copy_stream.
+
+ * lib/fileutils.rb: new method FileUtils#compare_file.
+
+ * lib/fileutils.rb: new method FileUtils#compare_stream.
+
+ * lib/fileutils.rb: new method FileUtils#rmtree (alias of rm_rf).
+
+Fri Feb 21 17:19:27 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * eval.c (rb_f_require): do not need to abort if a DLEXT file
+ is not found.
+
+Fri Feb 21 13:39:25 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_cmp_m): should use LONG2NUM().
+
+Fri Feb 21 12:45:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_cmp_m): two small bugs fixed.
+
+Fri Feb 21 08:03:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_gc_mark): inline rb_gc_mark_children().
+
+ * gc.c (gc_sweep): new tactics to increase malloc_limit mildly.
+
+Fri Feb 21 05:16:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_cmp_m): return nil if str2 does not respond to
+ both "to_str" and "<=>".
+
+ * compar.c (cmp_gt): return nil if "<=>" returns nil (means
+ incomparable).
+
+ * compar.c (cmp_ge, cmp_lt, cmp_le): ditto.
+
+ * compar.c (cmp_between): use RTEST(), since cmp_lt and cmp_gt may
+ return nil.
+
+Thu Feb 20 19:05:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_start_0): main thread swapped by fork() may
+ terminate rb_thread_start_0() successfully. call ruby_stop(0);
+ this change was suggested by Rudi Cilibrasi
+ <cilibrar@drachma.ugcs.caltech.edu>.
+
+Thu Feb 20 18:44:51 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (file_expand_path): fix wrong behavior for root file.
+ expand_path("..", "//machine/share") => "//machine/share"
+ expand_path("..", "c:/a") => "c:/"
+ expand_path("..", "/a") => "/"
+
+Thu Feb 20 18:11:01 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (file_expand_path): should not upward beyond share name.
+
+Thu Feb 20 15:45:33 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * missing.h (strtoul): fix prototype of strtoul.
+
+Thu Feb 20 10:11:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (clhs): allow "Foo::Bar = x".
+
+Thu Feb 20 04:07:06 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (primary): "self[n]=x" can be legal even when "[]=" is
+ private. changes submitted in [ruby-talk:63982]
+
+ * parse.y (aryset): ditto.
+
+ * parse.y (attrset): "self.foo=x" can be legal even when "foo="
+ is private.
+
+ * eval.c (is_defined): private "[]=" and "foo=" support.
+
+ * eval.c (rb_eval, assign): ditto.
+
+Thu Feb 20 03:58:34 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): "foo=" should not always be public.
+
+Thu Feb 20 01:23:59 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_thread_restore_context): inhibit interrupts in
+ critical section while context switching. [ruby-talk:64785]
+
+Wed Feb 19 18:27:42 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * node.h (nd_cpath): nested class/module declaration.
+ [EXPERIMENTAL]
+
+ * eval.c (rb_eval): ditto.
+
+ * gc.c (rb_gc_mark_children): ditto.
+
+ * parse.y (cpath): ditto.
+
+Tue Feb 18 21:39:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call0): should not report uninitialized warning by
+ attribute reader method.
+
+ * variable.c (rb_attr_get): new function to get instance variable
+ without uninitialized warning.
+
+ * io.c (argf_to_io): should prefetch argv.
+
+Tue Feb 18 00:13:50 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-comment-column): customize comment
+ column. [new]
+
+ * misc/ruby-mode.el (ruby-deep-indent-paren): deep indentation
+ parentheses. [new]
+
+ * misc/ruby-mode.el (ruby-expr-beg): fix for / after $?.
+
+ * misc/ruby-mode.el (ruby-parse-partial, ruby-calculate-indent):
+ deep indentation support.
+
+ * misc/ruby-mode.el (ruby-forward-sexp, ruby-backward-sexp):
+ move forward/backward across one balanced expression. [new]
+
+ * misc/ruby-mode.el (ruby-indent-exp): indent balanced
+ expression. [new]
+
+ * misc/ruby-mode.el (ruby-electric-brace): indent before
+ show matching parenthesis. (contributed by NABEYA Kenichi)
+
+Mon Feb 17 14:36:56 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * win32/win32.c (rb_w32_opendir, rb_w32_utime): need parens.
+
+Mon Feb 17 14:13:25 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (link): implement with CreateHardLink().
+
+ * win32/win32.c, win32/win32.h (rb_w32_utime): enable utime() to
+ directory if on NT. [new] (ruby-bugs-ja:PR#393)
+
+Mon Feb 17 13:28:51 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (file_expand_path): strip last slash when path is
+ root.
+
+Sun Feb 16 19:22:31 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (file_expand_path): buffer might be reallocated while
+ expanding default directory.
+
+ * file.c (file_expand_path): default directory was being
+ ignored if path was full path with no drive letter, under
+ DOSISH.
+
+Sun Feb 16 03:14:33 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * io.c (prep_stdio, Init_io): always set binmode on Cygwin.
+
+Sat Feb 15 01:01:45 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (file_expand_path): fix surplus path separators while
+ expanding at root directory. [ruby-dev:19572]
+
+Fri Feb 14 14:25:24 2003 akira yamada <akira@arika.org>
+
+ * lib/uri/generic.rb, lib/uri/ldap.rb, lib/uri/mailto.ldap: all foo=()
+ returns arguments passed by caller.
+
+ * lib/uri/generic.rb (Generic#to_str, Generic#to_s): removed to_str.
+ Suggested by Tanaka Akira <akr@m17n.org> at [ruby-dev:19475].
+
+ * lib/uri/generic.rb (Generic#==): should not generate an URI object
+ from argument. Suggested by Tanaka Akira <akr@m17n.org> at
+ [ruby-dev:19475].
+
+Thu Feb 13 11:54:50 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ruby.c (ruby_init_loadpath): ensures buffer terminated
+ before use strncpy().
+
+ * ruby.c (proc_options): avoid SEGV at -S with no arguments.
+ script argument is in effect only when -e is not given.
+ (ruby-bugs-ja:PR#391)
+
+Thu Feb 13 01:30:10 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_thread_schedule): current thread may be dead when
+ deadlock. (ruby-bugs:PR#588)
+
+Thu Feb 13 00:28:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_step): step might be float 0 < x < 1.
+
+ * eval.c (rb_thread_schedule): pause if no runnable thread when
+ there's only one thread.
+
+Thu Feb 13 00:09:47 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (strrdirsep): ignore trailing directory separators.
+
+ * file.c (rb_file_s_expand_path): File.expand_path(".","/") should
+ return "/". (ruby-bugs-ja:PR#389)
+
+ * file.c (rb_file_s_basename): also ignore trailing directory
+ separators, in compliance with SUSv3. (ruby-bugs-ja:PR#390)
+
+ * file.c (rb_file_s_dirname, rb_file_s_extname): ditto.
+
+ * file.c (rb_file_s_dirname): append "." if drive only.
+
+ * file.c (rb_file_s_split): get rid of converting twice.
+
+Mon Feb 10 20:55:15 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb (parse_args): add '-n' to $mflags BEFORE "--".
+ do not add DESTDIR if already included in $mflags.
+
+Mon Feb 10 19:54:30 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (FileUtils#uptodate?): use mtime for
+ comparison.
+
+Mon Feb 10 10:14:26 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_to_a): return value should be an Array if the
+ receiver is an instance of subclass of Array.
+
+ * string.c (rb_str_to_s): return value should be a String if the
+ receiver is an instance of subclass of String.
+
+Mon Feb 10 03:33:42 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * io.c (rb_file_sysopen): rb_file_sysopen_internal() needs four
+ arguments.
+
+Sun Feb 9 15:16:04 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * intern.h (HAVE_RB_DEFINE_ALLOC_FUNC, RB_CVAR_SET_4ARGS):
+ define to 1.
+
+ * ruby.h (NORETURN_STYLE_NEW): ditto.
+
+Sun Feb 9 12:28:18 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/mkmf.rb (init_mkmf): add libdir to LIBPATH unless cross
+ compiling.
+
+Sun Feb 9 08:34:45 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: 4xx raises Net::ProtoServerError, 5xx raises
+ Net::ProtoFatalError (for backward compatibility).
+
+Sun Feb 9 07:07:26 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb: new method FileUtils.pwd (really).
+
+ * lib/fileutils.rb: FileUtils.pwd, cmp, identical?, uptodate? does
+ not accept any option.
+
+Sat Feb 8 18:35:30 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-forward-string): fixed void variable
+ error.
+
+Sat Feb 8 16:23:11 2003 NABEYA Kenichi <kenichi@nabeya.com>
+
+ * misc/ruby-mode.el (ruby-font-lock-keywords): method name can
+ be delimited by tab.
+
+Sat Feb 8 03:57:32 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/irb/workspace.rb, lib/irb/ext/math-mode.rb,
+ lib/irb/ext/multi-irb.rb, lib/irb/lc/error.rb,
+ lib/irb/lc/help-message, lib/irb/lc/ja/error.rb,
+ lib/shell/command-processor.rb, lib/shell/error.rb,
+ lib/shell/filter.rb: Fix typos and grammos. [approved by: keiju]
+
+Sat Feb 8 03:34:28 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * intern.h (HAVE_RB_DEFINE_ALLOC_FUNC): New boolean macro to make
+ it easier to write extensions that work with both ~1.6 and 1.8~.
+
+ * intern.h (RB_CVAR_SET_4ARGS): Ditto.
+
+ * ruby.h (NORETURN_STYLE_NEW): Ditto.
+
+Sat Feb 8 00:47:24 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call): calls method_missing when superclass method
+ does not exist.
+
+ * eval.c (rb_f_missing): now handles "no super" case.
+
+ * object.c (rb_obj_ivar_get): Object#instance_variable_get: new
+ method to get instance variable value without eval(). [new]
+
+ * object.c (rb_obj_ivar_set): Object#instance_variable_set: new
+ method to set instance variable value without eval(). [new]
+
+Fri Feb 7 15:35:21 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * intern.h, re.c (rb_memsearch): returns long.
+
+ * string.c (rb_str_index): should return offset position.
+
+Fri Feb 7 15:30:15 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (proc_invoke): should propagate self to super
+ methods. [ruby-dev:19510]
+
+Thu Feb 6 19:04:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_initialize_m): should not preset "kcode" unless
+ encoding is explicitly specified.
+
+Thu Feb 6 19:01:32 2003 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb: new method FileUtils.pwd.
+
+ * lib/fileutils.rb: default label is ''.
+
+ * lib/fileutils.rb: using module_eval again, to avoid ruby's bug.
+
+ * lib/fileutils.rb: fix wrong examples in rdoc.
+
+Thu Feb 6 17:43:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/complex.rb (Complex#==): should not raise error by type
+ mismatch.
+
+ * lib/rational.rb (Rational#==): ditto.
+
+Thu Feb 6 11:44:40 2003 MoonWolf <moonwolf@moonwolf.com>
+
+ * re.c (rb_reg_initialize_m): 3rd argument was ignored.
+
+Thu Feb 6 01:09:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_count): return 0 for empty string (was
+ returning nil).
+
+Wed Feb 5 19:41:37 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb: dispatch code restructured to make it openable
+ that has `open' method.
+
+ * lib/open-uri.rb: Location: field may has a relative URI.
+ pointed out by erik eriksson <ee@opera.com>.
+
+Wed Feb 5 17:11:02 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): no .<digit> float literal anymore.
+
+Tue Feb 4 16:11:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_equal): a == b is true when b is non T_ARRAY
+ object, if b has "to_ary" and b == a.
+
+ * hash.c (rb_hash_equal): a == b is true when b is non T_HASH
+ object, if b has "to_hash" and b == a.
+
+ * string.c (rb_str_equal): a == b is true when b is non T_STRING
+ object, if b has "to_str" and b == a.
+
+Mon Feb 3 23:46:48 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_getline): should not increment lineno at EOF.
+
+Mon Feb 3 16:49:19 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (Init_Object): default Object#=== now calls "=="
+ internally.
+
+ * re.c (rb_reg_initialize_m): should honor option status of
+ original regexp.
+
+ * array.c (rb_ary_equal): ary2 should be T_ARRAY (no to_ary
+ conversion).
+
+ * array.c (rb_ary_eql): ditto.
+
+ * string.c (rb_str_equal): str2 should be T_STRING (no to_str
+ conversion).
+
+Mon Feb 3 16:32:52 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * re.c (rb_memsearch): a little improvement.
+
+Mon Feb 3 13:18:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_memsearch): algorithm body of String#index.
+
+ * error.c (Init_Exception): "to_str" removed.
+
+ * eval.c (eval): should not rely on Exception#to_str
+
+ * eval.c (compile_error): ditto.
+
+ * error.c (err_append): ditto.
+
+Sat Feb 1 23:56:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_merge): Hash#merge, non destructive "update".
+ now there's also Hash#merge! which is an alias to "update".
+
+Fri Jan 31 14:16:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_index): search using Karp-Rabin algorithm.
+
+Fri Jan 31 12:45:11 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_obj_classname): new function.
+
+ * string.c (rb_str_dup): should preserve original's class (but not
+ hidden singleton class).
+
+ * string.c (rb_str_substr): ditto.
+
+ * parse.y: backout EXPR_CMDARG removal.
+
+Fri Jan 31 09:40:07 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/optparse.rb (OptionParser::List::accept): default
+ pattern must not be nil.
+
+ * lib/optparse.rb (OptionParser::make_switch): NoArgument doesn't
+ override other styles.
+
+Thu Jan 30 16:46:43 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/optparse.rb (OptionParser::Switch::PlacedArgument): added.
+ if the next argument doesn't start with '-', use it as the
+ value.
+
+ * lib/optparse.rb (OptionParser::make_switch): fixed a bug of
+ pattern.
+
+ * lib/optparse.rb (Array): no need to guard.
+
+Thu Jan 30 08:27:19 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (rb_file_s_expand_path): removed a sludge.
+
+Wed Jan 29 03:24:39 2003 Michal Rokos <michal@rokos.homeip.net>
+
+ * dir.c (glob_helper): memory leak fixed.
+
+Tue Jan 28 04:45:03 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * instruby.rb (parse_args), ext/extmk.rb (parse_args): Prepend a
+ hyphen to the first argument of MAKEFLAGS only if appropriate.
+ Remove wrong comments.
+
+Mon Jan 27 03:30:06 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * error.c (get_syserror): use snprintf() instead of sprintf(). pointed
+ out by knu.
+
+Mon Jan 27 02:06:38 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * error.c (get_syserror): some Windows' errno have 5 digits. pointed
+ out by znz.
+
+Sun Jan 26 19:23:10 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * instruby.rb ($mflags.set?): Check $make instead of $nmake, since
+ there is no such a variable.
+
+ * instruby.rb ($mflags.set?), ext/extmk.rb ($mflags.set?): Return
+ false if unmatched.
+
+Sun Jan 26 19:08:30 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/shellwords.rb: Embed rdoc style comments.
+
+ * lib/shellwords.rb (shellwords): Use String#lstrip!.
+
+ * lib/shellwords.rb (shellwords): Recognize an object that
+ responds to to_str() by using String.new().
+
+Sun Jan 26 17:53:04 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * instruby.rb (parse_args), ext/extmk.rb (parse_args): Detect -n
+ and emulate a dry run. Use 'make' in case no --make argument is
+ given.
+
+Sun Jan 26 07:18:42 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * instruby.rb: re-define individual methods verbosely rather than
+ including FileUtils::Verbose, in order to suppress messages from
+ FileUtils#cmp.
+
+ * instruby.rb (makedirs): make same directory only once even if
+ dryrun.
+
+ * lib/fileutils.rb (FileUtils::Verbose, FileUtils::NoWrite):
+ re-define methods with define_method instead of module_eval.
+
+Sun Jan 26 03:37:18 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * instruby.rb, ext/extmk.rb, Makefile.in, win32/Makefile.sub,
+ bcc32/Makefile.sub: Replace the complicated MFLAGS/MAKEFLAGS
+ parser with something plain and comprehensible. This fixes a
+ bug where make flags were wrongly reordered and the resulted
+ command line often did not make sense especially when BSD make
+ is used with extra arguments given. Tested with FreeBSD and
+ Linux by me and mswin32, bccwin32 and mingw by usa.
+
+Fri Jan 24 18:15:33 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y: tMINUS should have lower precedence than tPOW.
+
+Fri Jan 24 05:12:55 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): deal
+ with escaped $ and ? at the end of strings. [ruby-talk:62297]
+
+ * misc/ruby-mode.el (ruby-font-lock-keywords): added defined?.
+
+Thu Jan 23 17:25:04 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): do not warn discarding already undefined
+ method.
+
+ * lib/rational.rb: undef quo before replacing.
+
+Thu Jan 23 15:49:57 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (arg): missing arguments.
+
+Thu Jan 23 14:56:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rational.rb: modified to support "quo".
+
+ * numeric.c (num_quo): should return most exact quotient value,
+ i.e. float by default, rational if available.
+
+ * numeric.c (num_div): "div" should return x.divmod(x)[0].
+
+Thu Jan 23 13:24:18 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_arg): was accessing garbage argv value.
+
+Thu Jan 23 06:37:01 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * instruby.rb: should not contain destdir in shebang line.
+
+Wed Jan 22 23:19:57 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (pipe_exec): remove unnecessary SetStdHandle().
+
+Wed Jan 22 20:20:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): syntaxify tPOW negative number hack.
+
+ * parse.y (negate_lit): new function to negate literal numeric
+ values in compile time.
+
+Wed Jan 22 15:36:54 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_match_exec): charset info may be stored in MBC
+ region when $KCODE != NONE.
+
+Wed Jan 22 14:22:53 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (set_syserr): should preserve duplicated error names.
+
+Tue Jan 21 20:29:31 2003 Michal Rokos <michal@rokos.homeip.net>
+
+ * mkmf.rb: make possible to add files to clean and distclean targets
+
+Tue Jan 21 18:05:25 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * bcc32/Makefile.sub (LIBRUBY_A): link dmyext.
+
+Tue Jan 21 16:59:18 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * instruby.rb: use real interpreter pathname at shebang line.
+ [ruby-dev:19370]
+
+Tue Jan 21 16:22:32 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): put back old ** behavior for negative number
+ right operand.
+
+Tue Jan 21 14:46:12 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pp.rb: Use Test::Unit.
+
+ * lib/prettyprint.rb: Ditto
+
+ * lib/time.rb: Ditto
+
+ * lib/tsort.rb: Ditto
+
+Tue Jan 21 04:15:50 2003 Tanaka Akira <akr@m17n.org>
+
+ * lib/pp.rb: Use redefined `to_s' as well as `inspect'.
+ Useless `pretty_print' methods removed.
+ (PP::ObjectMixin#pretty_print_inspect): new method.
+
+Mon Jan 20 21:48:43 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * configure.in (MANTYPE): Detect if the system's nroff(1) groks
+ mdoc. Provide a new option --with-mantype={doc|man} in case the
+ check does not work as expected.
+
+ * Makefile.in (MANTYPE): Define MANTYPE and pass it to
+ instruby.rb.
+
+ * instruby.rb: Convert mdoc manpages to man for systems which
+ nroff(1) does not grok mdoc.
+
+Mon Jan 20 21:25:18 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/tempfile.rb (self.open): If a block is given, call it with
+ tempfile as an argument and automatically close the tempfile
+ when the block terminates.
+
+Mon Jan 20 21:02:50 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * mdoc2man.rb: Properly put nested braces, parentheses and angles.
+
+ * mdoc2man.rb: Add support for .An and .Aq/.Ao/.Ac.
+
+ * mdoc2man.rb: Add support for .Dl.
+
+ * mdoc2man.rb: Make .Pf macro actually work.
+
+ * mdoc2man.rb: Properly handle .Os.
+
+ * mdoc2man.rb: Correctly omit spaces around punctuation
+ characters.
+
+Mon Jan 20 19:43:41 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * mdoc2man.rb: Make this work as a library.
+
+Mon Jan 20 18:22:40 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_f_require): purge too many goto's.
+
+Mon Jan 20 17:50:05 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * mdoc2man.rb (parse_macro): Understand .Ux.
+
+Mon Jan 20 17:32:56 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * mdoc2man.rb: New file. A mdoc to man converter ported from
+ Perl.
+
+Mon Jan 20 15:40:15 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * ruby.1: Properly close .Bl with .El.
+
+Mon Jan 20 04:14:17 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/mkmf.rb (egrep_cpp): use inspect to show options.
+
+ * lib/mkmf.rb (dir_config): prior configured directories to
+ defaults.
+
+ * lib/mkmf.rb (dir_config): extract first word to determine
+ make command type.
+
+Mon Jan 20 02:15:53 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/aix_mksym.rb: no longer used.
+
+Mon Jan 20 00:17:16 2003 Matt Armstrong <matt@lickey.com>
+
+ * file.c (eaccess): under windows, make eaccess() just call
+ access(). [ruby-core:716], [ruby-bugs:PR#556]
+
+Sun Jan 19 23:08:18 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/shellwords.rb (shellwords): A backslash ('\') in single
+ quotes should not be regarded as meta character. This bug or
+ maybe feature was inherited from Perl's shellwords.pl.
+
+Sun Jan 19 14:01:12 2003 UENO Katsuhiro <unnie@blue.sky.or.jp>
+
+ * regex.c (is_in_list): should work well with UTF-8.
+
+ * regex.c (re_match_exec): ditto.
+
+Sat Jan 18 14:53:49 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * bignum.c (rb_cstr_to_inum): should not erase all 0s, but
+ squeeze into one. [ruby-dev:19377]
+
+Fri Jan 17 03:33:42 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * sprintf.c (rb_f_sprintf): Fix a bug caused by an uninitialized
+ variable v, that a bignum unexpectedly gets converted into a
+ string with its higher figures all filled with ./f/7/1,
+ depending on the base. This bug seems to have been introduced
+ in rev.1.27.
+
+ * sprintf.c (rb_f_sprintf): Use switch instead of a sequence of
+ else-if's.
+
+Wed Jan 15 15:18:38 2003 moumar <moumar@netcourrier.com>
+
+ * configure.in (ARCHFILE): set even unless --enable-shared on
+ AIX. [ruby-talk:61466]
+
+ * marshal.c (math.h): should be included after ruby.h on AIX.
+ [ruby-talk:61366]
+
+Tue Jan 14 21:47:56 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_f_require): do not search adding .rb/.so suffixes if
+ the suffix specified. [ruby-dev:18702]
+ http://moonrock.jp/~don/d/200211.html#d08_t1
+
+Tue Jan 14 18:36:41 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_all): now works without block.
+
+ * enum.c (enum_any): ditto.
+
+Tue Jan 14 01:21:32 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (next_argv): not always set binmode.
+
+Mon Jan 13 20:45:19 2003 Guy Decoux <ts@moulon.inra.fr>
+
+ * parse.y (list_append): avoid O(n) search using node->nd_next->nd_end.
+
+ * parse.y (list_concat): ditto.
+
+ * eval.c (rb_eval): NODE_ARRY nd_end adoption.
+
+Mon Jan 13 02:22:11 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/dl/lib/dl/win32.rb: eliminate unnecessary "A" adding.
+
+Sun Jan 12 16:07:17 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * io.c (next_argv): inherit binmode from $defout.
+
+Sat Jan 11 22:50:47 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/dl/lib/dl/win32.rb: compatibility improvement.
+
+Sat Jan 11 01:44:16 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in (RUBY_CHECK_IO_NEED): added more tests.
+
+ * io.c (rb_io_check_readable): seek after synchronized write.
+
+Fri Jan 10 01:23:45 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): syntax
+ classes are not allowed inside character classes.
+ [ruby-talk:60996]
+
+Thu Jan 9 23:28:01 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in: AC_MSG_FAILURE is a new macro in 2.54b or later.
+
+Thu Jan 9 17:05:24 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in (RUBY_CHECK_IO_NEED): check whether fseek() and
+ fflush() are needed.
+
+ * io.c (flush_before_seek): flush write stream only.
+
+ * io.c (rb_io_check_readable): seek instead of flush if the last
+ operation was write.
+
+ * io.c (rb_io_check_writable): seek instead of flush if the last
+ operation was read.
+
+ * bcc32/Makefile.sub, win32/Makefile.sub: needs to seek between
+ R/W.
+
+Thu Jan 9 16:31:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): should not discard nested NODE_BLOCK.
+
+Thu Jan 9 15:12:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (stmt): NODE_NOT elimination for if/unless/while/until node.
+
+ * parse.y (primary): ditto.
+
+Thu Jan 9 13:26:18 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * st.h, st.c: Back out the introduction of st_*_func_t. Some
+ compilers complain about function type mismatch.
+
+Thu Jan 9 02:10:44 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): reduce recursive rb_eval() call by using sort
+ of continuation passing style.
+
+Wed Jan 8 17:10:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/Win32API/lib/win32/registry.rb: added. [new]
+
+Wed Jan 8 15:54:05 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c: remove ruby_last_node and assignments seems to be
+ unnecessary
+
+ * intern.h: debug does not run if ID_ALLOCATOR is zero.
+
+Wed Jan 8 15:04:11 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_each): treat fixnums specially to boost.
+
+ * numeric.c (num_step): remove rb_scan_args() for small speedup.
+
+Tue Jan 7 17:56:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (svalue_to_avalue): should return converted array.
+
+Tue Jan 7 07:48:01 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_f_local_variables): skip $_, $~ and flip states in
+ dynamic variables. [ruby-core:00681]
+
+Tue Jan 7 02:46:29 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (env_clear): new Hash compatible method.
+
+ * hash.c (env_shift, env_invert, env_replace, env_update): ditto.
+
+Mon Jan 6 23:36:29 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * st.h, st.c: Introduce new conventional typedef's, st_data_t,
+ st_compare_func_t, st_hash_func_t and st_each_func_t.
+
+ * st.h, st.c: Do explicit function declarations and do not rely on
+ implicit declarations.
+
+ * class.c, eval.c, gc.c, hash.c, marshal.c, parse.y, variable.c:
+ Add proper casts to avoid warnings.
+
+Mon Jan 6 20:44:43 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * intern.h (rb_check_array_type): Declare rb_check_array_type().
+
+ * ext/digest/md5/md5ossl.c: Include stdio.h for sprintf() and
+ string.h for memcmp().
+
+ * ext/dl/ptr.c: Include ctype.h for isdigit().
+
+Mon Jan 6 18:43:17 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c: improve DOSISH drive letter support.
+
+Mon Jan 6 18:31:45 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/fileutils.rb (ln): add ' -f' in the verbose message.
+
+ * lib/fileutils.rb (cp_r): add 'p' in the verbose message.
+
+Mon Jan 6 16:44:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_join): dispatch based on "to_str".
+
+ * array.c (rb_ary_times, rb_ary_equal): ditto.
+
+Mon Jan 6 13:26:35 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (proc_exec_v): follow to proc_spawn_v(). call do_aspawn()
+ on Win32.
+
+ * process.c (rb_proc_exec): call do_spawn() on Win32.
+
+ * win32/win32.c, win32/win32.h (do_spawn, do_aspawn): add mode flag.
+
+ * process.c (proc_spawn_v, rb_f_system): follow above change.
+
+Mon Jan 6 05:11:15 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/extmk.rb: make $0 normal variable.
+
+Mon Jan 6 02:32:46 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * struct.c (make_struct): needs meta class.
+
+Sun Jan 5 22:54:05 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/fileutils.rb (ln): `argv' is not a argument.
+
+Sun Jan 5 17:44:37 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/extmk.rb (extmake): set $0 temporarily while loading
+ extconf.rb.
+
+Sun Jan 5 14:46:46 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * instruby.rb: need paren in regexp(make -n install).
+
+ * ext/extmk.rb (sysquote): do not need to quote on mswin/bccwin/mingw.
+
+ * ext/extmk.rb ($mflags): uniq items and remove '-' and '--'.
+ move options to the lead.
+
+ * lib/fileutils.rb (install): model on the real install
+ command(message).
+
+Sun Jan 5 09:36:46 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ruby.c (ruby_init_loadpath): under Windows, get the module
+ path from an internal address instead of hard coded library
+ name.
+
+ * cygwin/GNUmakefile.in, bcc32/Makefile.sub,
+ win32/Makefile.sub (CPPFLAGS): removed LIBRUBY_SO macro.
+
+ * bcc32/Makefile.sub, win32/Makefile.sub (config.h): no longer
+ depends on makefiles.
+
+Sun Jan 5 04:17:05 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * gc.c (SET_STACK_END): Issue a FLUSH_REGISTER_WINDOWS here too.
+ This fixes make test on FreeBSD/sparc64.
+
+Sun Jan 5 03:43:47 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * defines.h (FLUSH_REGISTER_WINDOWS): Make the flushw call an
+ inline function so it can be used as an expression.
+
+ * eval.c (EXEC_TAG, THREAD_SAVE_CONTEXT): Consistently call
+ FLUSH_REGISTER_WINDOWS before calling setjmp(). (I suspect that
+ every setjmp() implementation should take care of register
+ windows, though)
+
+Sun Jan 5 03:12:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (utimbuf): use utimbuf instead of _utimbuf if defined _WIN32.
+
+ * win32/Makefile.sub (LIBS): use oldnames.lib.
+
+ * win32/win32.c (rb_w32_getcwd): follow above change.
+
+ * win32/win32.h: ditto.
+
+ * wince/direct.c, wince/direct.h (getcwd): ditto.
+
+ * wince/io.h: ditto.
+
+ * wince/string.c, wince/wince.h (stricmp, strnicmp): ditto.
+
+Sat Jan 4 15:18:50 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (rb_proc_exec): use same logic as DJGPP on win32 ports.
+
+ * process.c (rb_f_system): ditto.
+
+ * win32/win32.c, win32/win32.h (do_aspawn): [new]. for arrayed
+ arguments.
+
+ * win32/win32.c (CreateChild): add new argument for real filename of
+ executing process.
+
+ * win32/win32.c (NtHasRedirection, pipe_exec): follow above change.
+
+Sat Jan 4 14:29:52 2003 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * configure.in: set rb_cv_need_io_flush_between_seek=yes.
+
+ * win32/Makefile.sub (config.h): define NEED_IO_FLUSH_BETWEE_SEEK.
+ (pointed out by moriq [ruby-dev:19299])
+
+Sat Jan 4 03:12:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (umethod_bind): exact class match is not required. relax
+ the restriction to subclasses.
+
+Sat Jan 4 01:33:40 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (rb_file_s_lchmod): get rid of gcc-3 -O3 warning.
+
+Fri Jan 3 22:26:07 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * process.c (rb_proc_times): need to initialize first.
+
+Fri Jan 3 01:10:17 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): call "inherited" before executing class body.
+
+ * class.c (rb_define_class): call "inherited" after defining the
+ constant.
+
+ * class.c (rb_define_class_under): ditto.
+
+Thu Jan 2 19:37:30 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (massign): expand first element if RHS is an array and
+ its size is 1, and LHS has concrete assignment target (i.e. LHS
+ has target(s) other than *var).
+
+ * eval.c (massign): avoid unnecessary avalue/svalue conversion.
+
+ * eval.c (rb_yield_0): ditto
+
+ * array.c (rb_ary_update): do not allocate unused array if rpl is
+ nil (i.e. merely removing elements).
+
+Thu Jan 2 13:55:08 2003 Mathieu Bouchard <matju@sympatico.ca>
+
+ * io.c (io_read): should resize supplied string if it's shorter
+ than expected.
+
+Thu Jan 2 11:01:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (bmcall): arguments should be an array.
+
+Wed Jan 1 18:18:45 2003 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: better DJGPP support. add GNUmakefile.
+
+ * djgpp/GNUmakefile: new.
+
+Wed Jan 1 04:16:18 2003 Akinori MUSHA <knu@iDaemons.org>
+
+ * node.h (struct RNode): Change argc from int to long. Otherwise
+ NEW_CFUNC() sets argc to a wrong value on platforms where
+ sizeof(int) != sizeof(long) and the byte order is big-endian.
+ This fixes breakage on FreeBSD/sparc64.
+
+Tue Dec 31 23:22:50 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (massign): removed awkward conversion between yvalue,
+ mvalue, etc.
+
+ * eval.c (rb_yield_0): new parameter added to tell whether val is
+ an array value or not.
+
+ * parse.y (yield_args): restructuring: new nodes: NODE_RESTARY2,
+ NODE_SVALUE; removed node: NODE_RESTARGS.
+
+Tue Dec 31 21:13:51 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * Makefile.in, {win32,bcc32}/Makefile.sub: add new target:
+ what-where, no-install.
+
+ * mkconfig.rb: add const: CROSS_COMPILING.
+
+ * ext/extmk.rb: no-install support. add MAKEDIRS macro.
+
+ * lib/mkmf.rb: add !ifdef .. !endif for Borland make.
+
+ * process.c: improve DJGPP support. system "ls", "-l".
+
+Tue Dec 31 20:16:37 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/socket/addrinfo.h (NI_MAXHOST): Define NI_MAXHOST and
+ NI_MAXSERV only if they are not defined yet. This fixes build
+ on such platforms as OpenBSD.
+
+Tue Dec 31 20:07:49 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/tcltklib/extconf.rb (find_tcl, find_tk): Look for both
+ lib{tcl,tk}M.N and lib{tcl,tk}MN on all platforms. *BSD have
+ Tcl/Tk libraries named this way.
+
+Tue Dec 31 19:48:21 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * configure.in: Improve OpenBSD support. [obtained from: OpenBSD
+ ports]
+
+ * dln.c (FUNCNAME_PATTERN): Ditto.
+
+Tue Dec 31 19:21:02 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * array.c (rb_ary_transpose): Properly declare ary as a VALUE.
+
+ * file.c (rb_file_s_chmod): Do not directly cast an int to void *
+ to avoid a warning.
+
+ * defines.h (FLUSH_REGISTER_WINDOWS): Add support for
+ FreeBSD/sparc64. miniruby still coredumps in a different place,
+ though.
+
+Tue Dec 31 07:47:15 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (parse_string): readjusted.
+
+ * parse.y (heredoc_identifier): readjusted.
+
+ * parse.y (here_document): make EOL codes of single-quoted
+ here-documents consistent.
+
+ * parse.y (yylex): reduced unnecessary conditionals.
+
+Tue Dec 31 04:49:51 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ruby.1: mdoc'ify.
+
+Tue Dec 31 01:30:29 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * parse.y (yylex): do not accept " __END__\n". ([ruby-dev:19245])
+
+Mon Dec 30 21:10:59 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * parse.y (yylex): use strncmp instead of strcmp.
+ accept "__END__\r\n". ([ruby-dev:19241])
+
+Mon Dec 30 20:32:14 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_gc_mark_frame): should mark frame->node.
+
+Mon Dec 30 19:10:30 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/extmk.rb: split --make argument contains options, assume
+ the first word of --make-flags is always options even unless
+ preceded by -, and ignore letter-case of options if nmake.
+
+ * instruby.rb: extract -n option also from --make and
+ --make-flags.
+
+ * bcc32/Makefile.sub, win32/Makefile.sub: not prepend - to
+ $(MFLAGS)
+
+Mon Dec 30 16:44:14 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * string.c (rb_str_substr): should share the shared string if
+ present, instead of the original string. (ruby-bugs:PR#528)
+
+Mon Dec 30 05:10:00 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/socket/socket.c (tcp_svr_init): local host to
+ init_inetsock() is VALUE but not pointer.
+
+ * ext/socket/socket.c (sock_s_unpack_sockaddr_in): get rid of
+ gcc-3 -O3 warning.
+
+Sun Dec 29 23:45:53 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * gc.c (gc_sweep): adjust GC trigger.
+
+ * dln.c (init_funcname_len): get rid of gcc-3 -O3 warning.
+
+ * eval.c (copy_node_scope): ditto.
+
+ * hash.c (rb_hash_foreach, delete_if_i, select_i, each_value_i,
+ each_key_i, each_pair_i, envix): ditto.
+
+ * range.c (range_each_func): ditto.
+
+ * file.c (rb_file_s_chmod): ditto.
+
+Sun Dec 29 15:30:37 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (fu_parseargs): should not inherit ftools.rb's
+ misfeature.
+
+Sun Dec 29 05:08:13 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/fileutils.rb (cmp): return false if file size differs.
+
+Sat Dec 28 19:21:24 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * instruby.rb: remove junk args.
+
+ * lib/mkmf.rb (create_makefile): remove a trouble library
+ before making a shared library.
+
+ * win32/Makefile.sub: invoke instruby.rb with the --make-flags option.
+
+Sat Dec 28 03:09:58 2002 Wakou Aoyama <wakou@ruby-lang.org>
+
+ * lib/cgi.rb (CGI#[]): improvement. thanks to Kazuhiro NISHIYAMA
+ <zn@mbf.nifty.com>
+
+Sat Dec 28 00:34:03 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * {win32,bcc32}/Makefile.sub: remove `=' from --make-flags options.
+ nmake quotes args if included `=' in args.
+
+ * instruby.rb: use getopts.rb.
+
+ * ext/dbm/extconf.rb (-DDBM_HDR): substitute ' with " to avoid
+ a error on Win32.
+
+ * ext/gdbm/gdbm.c: add prototypes to avoid VC++ warnings.
+
+Fri Dec 27 21:41:57 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * bcc32/setup.mak, win32/setup.mak(-prologue-): move srcdir from
+ CPP input or UNC path will be removed as a comment.
+
+Fri Dec 27 17:55:00 2002 Takaaki Uematsu <mail@uema2.cjb.net>
+
+ * wince/config, wince/configure.bat: replace 1.7 with 1.8
+ in macros.
+
+Fri Dec 27 13:28:14 2002 Minero Aoki <aamine@loveruby.net>
+
+ * instruby.rb: fileutils.rb accepts only one argument.
+
+Fri Dec 27 13:23:29 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb (fu_parseargs): reject illegal options
+ correctly.
+
+ * lib/fileutils.rb (uptodate?): parameter declaration was wrong.
+
+ * lib/fileutils.rb: change coding styles.
+
+Fri Dec 27 09:25:22 2002 ABE Shigeru <shiger-a@nifty.com>
+
+ * process.c (rb_proc_times): avoid WindowsXP crash using volatile
+ variables.
+
+Fri Dec 27 02:56:58 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * instruby.rb: check only `-' option, and use fileutils instead of
+ ftools.
+
+Fri Dec 27 02:45:17 2002 Wakou Aoyama <wakou@ruby-lang.org>
+
+ * lib/net/telnet.rb: Telnet#print not add "\n".
+
+ * lib/cgi.rb: cgi['key'] is equal cgi['key'][0]
+
+Thu Dec 26 22:33:18 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb (create_makefile): check only `-' option.
+
+ * configure.in: cleanups for MinGW. remove -D__NO_ISOCEXT in $CFLAGS.
+
+ * win32/win32.h: prototypes for isinf, isnan are not needed on MinGW.
+
+Thu Dec 26 19:22:00 2002 YOSHIDA Kazuhiro <moriq@moriq.com>
+
+ * win32/setup.mak (-prologue-): moved srcdir macro definition.
+ [ruby-win32:420].
+
+Wed Dec 25 18:26:44 2002 K.Kosako <kosako@sofnec.co.jp>
+
+ * regex.c (re_match): fixed wrong \G behavior. (ruby-bugs-ja:PR#377)
+
+Wed Dec 25 16:41:16 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_match_exec): fix odd \G behavior based on the patch
+ from Nobu.
+
+Wed Dec 25 11:05:11 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * bcc32/setup.mak (-generic-): removed garbages.
+
+Wed Dec 25 10:36:20 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bcc32/Makefile.sub, win32/Makefile.sub (RUBY_SO_NAME, config.h):
+ use $(MAJOR) and $(MINOR). based on Nobu's patch. [ruby-win32:413]
+
+ * bcc32/setup.mak, win32/setup.mak (-prologue-): define MAJOR, MINOR
+ and TEENY from version.h. based on Nobu's patch. [ruby-win32:413]
+
+ * win32/Makefile.sub (config.h): add HAVE_FLOAT_H.
+
+ * win32/Makefile.sub (parse.obj): depend on win32/win32.h.
+
+Tue Dec 24 23:49:16 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/irb/completion.rb: Use Object#class rather than Object#type.
+
+Tue Dec 24 23:37:40 2002 TADA Tadashi <sho@spc.gr.jp>
+
+ * lib/cgi.rb (Cookie::parse), lib/cgi-lib.rb (initialize): Do not
+ pass to split() a bare string longer than 2 characters as
+ separator.
+
+Tue Dec 24 19:19:24 2002 Tietew <tietew@tietew.net>
+
+ * numeric.c (DBL_MAX_10_EXP): fix typo. [ruby-dev:19175]
+
+Tue Dec 24 17:02:46 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_undefined): use NoMethodError instead of fatal.
+
+Tue Dec 24 02:12:45 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/README: Synchronize with reality.
+
+Tue Dec 24 02:05:51 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * MANIFEST, lib/README, lib/ipaddr.rb: Add ipaddr.rb from rough.
+
+Sun Dec 22 04:07:47 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dbm/dbm.c (fdbm_alloc): allocator takes only one argument.
+
+Sun Dec 22 02:49:25 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * array.c (ary_alloc), dir.c (dir_s_alloc), eval.c (thgroup_s_alloc),
+ file.c (rb_stat_s_alloc), hash.c (hash_alloc), io.c (io_alloc),
+ object.c (rb_module_s_alloc, rb_class_allocate_instance),
+ re.c (match_alloc, rb_reg_s_alloc), string.c (str_alloc),
+ time.c (time_s_alloc), ext/digest/digest.c (rb_digest_base_alloc),
+ ext/tcltklib/tcltklib.c (ip_alloc),
+ ext/win32ole/win32ole.c (fole_s_allocate, fev_s_allocate)
+ : add prototype to get rid of VC++ warnings.
+
+ * ext/sdbm/init.c (fsdbm_alloc): allocator takes only one argument.
+
+Sun Dec 22 00:36:43 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): accept pure ruby libraries.
+
+Sat Dec 21 23:59:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (ins_methods_i): should not show ID_ALLOCATOR.
+
+ * class.c (ins_methods_prot_i): ditto.
+
+ * class.c (ins_methods_priv_i): ditto.
+
+ * class.c (ins_methods_pub_i): ditto.
+
+ * eval.c (call_trace_func): ditto.
+
+ * eval.c (rb_undefined): ditto.
+
+Sat Dec 21 07:27:24 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-parse-partial): keywords must not be
+ preceded by @ or $.
+
+Fri Dec 20 20:29:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/curses/curses.c, ext/dbm/dbm.c, ext/digest/digest.c,
+ ext/dl/handle.c, ext/dl/ptr.c, ext/dl/sym.c, ext/gdbm/gdbm.c,
+ ext/iconv/iconv.c, ext/sdbm/init.c, ext/stringio/stringio.c,
+ ext/strscan/strscan.c, ext/tcltklib/tcltklib.c,
+ ext/win32ole/win32ole.c: use rb_define_alloc_func().
+
+Fri Dec 20 18:29:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (rb_io_fwrite): separated from io_write().
+
+ * marshal.c (w_byten): use rb_io_fwrite() to support non-blocking
+ IO, and added error check.
+
+ * rubyio.h: prototypes; rb_io_fwrite
+
+Fri Dec 20 17:40:59 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (Init_Object): should not remove Class#allocate.
+
+ * lib/profiler.rb: separate profiling functions, without
+ trace_func and at_exit setting.
+
+Fri Dec 20 16:20:04 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (do_block): split "do" block and tLBRACE_ARG block.
+
+ * parse.y (cmd_brace_block): new tLBRACE_ARG block rule
+
+ * parse.y (command): can take optional cmd_brace_block; use %prec
+ to resolve shift/reduce conflict. (ruby-bugs-ja PR#372)
+
+ * eval.c (ruby_finalize): trace_func should be cleared here (after
+ executing exit procs and finalizers).
+
+ * eval.c (rb_define_alloc_func): new allocation framework, based
+ on Nobu's work [ruby-dev:19116]. "allocate" method is no longer
+ used for object allocation.
+
+Fri Dec 20 05:06:49 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/README, lib/cgi/ftplib.rb, lib/telnet.rb: Delete ftplib.rb
+ and telnet.rb. It has been quite some time sinc they were
+ obsoleted and made to emit warnings.
+
+Fri Dec 20 04:58:22 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/tempfile.rb: Embed Rdoc style comments.
+
+ * lib/tempfile.rb: Add length as an alias for size.
+
+Fri Dec 20 03:57:32 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/tempfile.rb: Add Tempfile#close!() as a shorthand for
+ Tempfile#close(true).
+
+ * lib/tempfile.rb: Add Tempfile#{unlink,delete}().
+
+Fri Dec 20 03:53:01 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/README, lib/cgi/final.rb, lib/cgi/session.rb: Delete
+ final.rb, which was obsoleted long ago.
+
+Fri Dec 20 00:16:06 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * re.c (rb_reg_match_pre, rb_reg_match_post, match_to_a,
+ match_select): return instances of same class as the original
+ string. [ruby-dev:19119]
+
+Thu Dec 19 22:55:49 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (DBL_EPSILON): fix typo.
+
+Thu Dec 19 22:35:20 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (assign): avoid [BUG] at multiple attribute assignment.
+
+Thu Dec 19 01:00:09 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_step): use DBL_EPSILON.
+
+ * array.c (rb_check_array_type): new function: return an array
+ (convert if possible), or nil.
+
+ * string.c (rb_check_string_type): new function: return a string
+ (convert if possible), or nil.
+
+ * numeric.c (rb_dbl_cmp): returns nil if values are not
+ comparable.
+
+ * numeric.c (fix_cmp,flo_cmp): use rb_num_coerce_cmp()
+
+ * bignum.c (rb_big_cmp): ditto.
+
+ * numeric.c (rb_num_coerce_cmp): new coercing function for "<=>",
+ which does not raise TypeError.
+
+ * numeric.c (do_coerce): can be suppress exception now.
+
+ * object.c (rb_mod_cmp): should return nil for non class/module
+ objects.
+
+Thu Dec 19 04:21:10 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/open-uri.rb: add a missing ||. (found by: ruby -wc)
+
+Wed Dec 18 17:53:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_eqq): return false if the argument is not a
+ string. now returns boolean value.
+
+ * class.c (rb_include_module): argument should be T_MODULE, not
+ T_class, nor T_ICLASS.
+
+Wed Dec 18 03:52:55 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * string.c (rb_str_new4): handle tail shared string.
+ (ruby-bugs-ja:PR#370)
+
+ * string.c (rb_str_dup_frozen): ditto.
+
+Tue Dec 17 21:08:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * node.h (NODE_ATTRASGN): new node, assignment to attribute.
+ [ruby-core:00637].
+
+ * eval.c (is_defined, rb_eval): ditto.
+
+ * parse.y (attrset, node_assign): ditto.
+
+ * string.c (rb_str_substr): tail sharing. [ruby-core:00650]
+
+ * re.c (rb_reg_nth_match): ditto.
+
+Tue Dec 17 16:52:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (is_defined): "defined?" should return "assignment" for
+ attribute assignment (e.g. a.foo=b) and indexed assignment
+ (e.g. a[2] = 44).
+
+ * parse.y (aryset): use NODE_ATTRASGN.
+
+Tue Dec 17 04:03:45 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/open-uri.rb: new file.
+
+Tue Dec 17 00:28:19 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (utimbuf): need to define for VC++.
+
+Mon Dec 16 15:53:20 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (nextc): get rid of overrun. (pointed out by akr
+ [ruby-list:36773])
+
+Sun Dec 15 21:16:44 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/mkmf.rb (init_mkmf): add $(topdir) to $LIBPATH if $extmk.
+ remove adding $(archdir) to $LIBPATH.
+
+Sat Dec 15 12:15:00 2002 Takaaki Uematsu <mail@uema2.cjb.net>
+
+ * configure.in, defines.h, dir.c, dir.h, dln.c, error.c,
+ eval.c, file.c, hash.c, io.c, main.c, missing.c,
+ process.c, ruby.c, rubysig.h, signal.c, st.c, util.c, util.h,
+ bcc/Makefile.sub, win32/Makefile.sub, win32/win32.h,
+ ext/Win32API/Win32API.c, ext/socket/getaddrinfo.c,
+ ext/socket/getnameinfo.c, ext/socket/socket.c,
+ ext/tcltklib/stubs.c
+ : replace "NT" with "_WIN32", add DOSISH_DRIVE_LETTER
+ * wince/exe.mak : delete \r at the end of lines.
+ * wince/mswince-ruby17.def : delete rb_obj_become
+
+Sun Dec 15 11:43:26 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (dispose_string): dispose String object.
+
+ * parse.y (heredoc_restore, here_document): fix memory leak.
+
+Sat Dec 14 14:25:00 2002 Takaaki Uematsu <mail@uema2.cjb.net>
+
+ * wince/sys : add stat.c, stat.h, timeb.c, timeb.h,
+ types.h, utime.c, utime.h
+ * wince/dll.mak : object file name changed.
+ * wince/io.c : add empty dup2().
+ * wince/io.h : add dup2 definition.
+
+Sat Dec 14 01:51:29 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/dbm/extconf.rb (rb_check): support for GNU dbm 1.8.3.
+ (-with-dbm-type=gdbm_compat). link against -lgdbm_compat
+ and -lgdbm.
+
+Fri Dec 13 23:42:16 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/dbm/extconf.rb (db_check): check existence of the function
+ in the specified library before checking it in libc.
+
+Fri Dec 13 17:15:49 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (generic_ivar_get): should always warn uninitialized
+ instance variables.
+
+Fri Dec 13 12:33:22 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (expr): rescue clause was ignored.
+
+Thu Dec 12 18:19:14 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (RUBY_PROG_GNU_LD): add $CFLAGS, $CPPFLAGS, $LDFLAGS
+ to the option of $CC.
+
+ * configure.in: set LIBRUBYARG to '-l$(RUBY_SO_NAME)' if the
+ target os is cygwin and --disable-shared option is supplied.
+
+ * lib/mkmf.rb (init_mkmf): expand config["LIBRUBY"] and
+ config["LIBRUBY_A"]. don't link $LIBRUBYARG_STATIC if
+ --disable-shared option is supplied.
+
+ * configure.in (RUBY_CPPOUTFILE): should be a better message.
+
+ * ext/Win32API/extconf.rb: join with a space.
+
+Thu Dec 12 17:27:19 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_hash): define Regexp#hash to make regexps to be
+ hash keys.
+
+ * re.c (Init_Regexp): define Regexp#eql? (alias to Regexp#==).
+
+Thu Dec 12 16:26:31 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * marshal.c (r_object0): singleton class instance can't be loaded.
+ (ruby-bugs-ja:PR#366)
+
+Wed Dec 11 23:35:43 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb (create_makefile): -no-undefined -> --no-undefined.
+
+Wed Dec 11 17:54:59 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_read): takes optional second argument to specify a
+ string to be written. the string should not be frozen.
+
+ * io.c (rb_io_sysread): ditto.
+
+Wed Dec 11 11:30:28 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/digest/digest.c (rb_digest_base_copy): renamed "become".
+
+ * ext/stringio/stringio.c (strio_copy): ditto.
+
+Wed Dec 11 00:45:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/getoptlong.rb (GetoptLong::Error): provide a common ancestor
+ for GetoptLong error classes (RCR#129).
+
+Tue Dec 10 17:42:39 2002 K.Kosako <kosako@sofnec.co.jp>
+
+ * re.c (rb_reg_copy_object): fixed memory leak.
+
+Tue Dec 10 17:30:35 2002 Tanaka Akira <akr@m17n.org>
+
+ * pack.c (utf8_limits): fix the limit of 4 bytes UTF-8 sequence.
+
+Tue Dec 10 12:01:15 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (mnew): original class of method defined in module should
+ be the module not intermediate class. [ruby-dev:19040]
+
+Tue Dec 10 01:16:52 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (rb_f_sprintf): preceding ".." for negative numbers
+ still left; removed.
+
+ * sprintf.c (rb_f_sprintf): should not prepend '0' if width > prec
+ for example "%5.3d".
+
+Sat Dec 7 18:14:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (Init_process): add Process.exit and Process.abort
+
+ * pack.c (utf8_to_uv): raise ArgumentError for malformed/redundant
+ UTF-8 sequences.
+
+Fri Dec 6 03:46:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (last_status_set): add pid attribute to Process::Status.
+
+Wed Dec 4 17:31:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (uv_to_utf8): limit maximum length of the encoded string
+ to 6 bytes, even when the platform supports 8 bytes long integers.
+
+ * pack.c (utf8_to_uv): do not decode sequences longer than 6 bytes.
+
+ * object.c (copy_object): use "copy_object" method, not "become".
+
+Wed Dec 4 16:37:11 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (copy_object): copy finalizers as well if any.
+
+ * gc.c (rb_gc_copy_finalizer): new function to copy finalizers.
+
+Tue Dec 3 01:13:41 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/pp.rb (PP.singleline_pp): new method.
+
+Sun Dec 1 23:04:03 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/optparse.rb (OptionParser::new): same as OptionParser#on but
+ returns new OptionParser::switch.
+
+Sun Dec 1 22:43:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * win32/win32.c (rb_w32_stat): empty path is invalid, and return
+ ENOENT rather than EBADF in such case. [ruby-talk:57177]
+
+Fri Nov 29 18:01:48 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (utf8_to_uv): added checks for malformed or redundant
+ UTF-8 sequences.
+
+Thu Nov 28 12:08:30 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/mkmf.rb: Avoid the use of "clean::" in favor of "clean:" in
+ order not to let make(1) choke if there is another dependency on
+ the target added in a depend file.
+
+Thu Nov 28 02:40:42 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/mkmf.rb: Make sure to dig the destination directory before
+ installing a file there. Formerly "make install" could fail
+ depending on make(1)'s mood of the moment, especially when -jN
+ is given.
+
+Wed Nov 27 17:39:38 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/syslog/syslog.c: Cut redundancy.
+
+ * ext/syslog/syslog.c: Do not leak ident.
+
+Wed Nov 27 17:25:29 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/syslog/syslog.c, ext/syslog/test.rb: Syslog.close should
+ raise RuntimeError when not opened.
+
+ * ext/syslog/syslog.c, ext/syslog/test.rb:
+ Syslog.{ident,options,facility,mask} should all return nil when
+ not opened.
+
+ * ext/syslog/syslog.c, ext/syslog/test.rb: Change back the output
+ format of inspect().
+
+Wed Nov 27 16:25:43 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/test.rb: Switch from RUnit to Test::Unit.
+
+Wed Nov 27 16:14:12 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/syslog/syslog.c: Fix a problem where Syslog.ident was not
+ marked and could thus be GC'd.
+
+Wed Nov 27 16:11:53 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/syslog/test.rb: Switch from RUnit to Test::Unit.
+
+ * ext/syslog/test.rb: The output format of inspect() is slightly
+ altered.
+
+Wed Nov 27 06:43:26 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * error.c (exit_initialize): add SystemExit#initialize to set
+ instance variable status. (ruby-bugs-ja:PR#362)
+ Now accepts status as optional first argument.
+
+ * eval.c (error_handle): now SystemExit have status always.
+
+ * eval.c (system_exit): just instantiate SystemExit without raise.
+
+ * eval.c (rb_thread_start_0): initialize SystemExit properly.
+
+Tue Nov 26 10:17:04 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dln.c (init_funcname_len): remove MAXPATHLEN dependency.
+
+Mon Nov 25 19:55:38 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): return true if not dynamic and not static.
+
+Mon Nov 25 01:08:40 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * dln.c: revert and add the MAXPATHLEN definition on mswin32/mingw32.
+
+Sun Nov 24 20:36:53 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * dln.c: move the MAXPATHLEN definition in front.
+
+Fri Nov 22 22:55:01 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (rb_f_sprintf): preceding ".." for negative
+ hexadecimal numbers should not appear if prec (e.g. %.4) is
+ specified.
+
+ * pack.c (NUM2I32): support platforms which does not have 32bit
+ integers (e.g. Cray).
+
+Fri Nov 22 19:20:36 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * instruby.rb: Install batch files on Windows. [Submitted by usa]
+
+Fri Nov 22 18:31:46 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_add_method): node may be NULL.
+
+Thu Nov 21 20:53:06 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/smtp.rb: changes coding style.
+
+ * lib/net/pop.rb: ditto.
+
+ * lib/net/protocol.rb: ditto.
+
+Thu Nov 21 20:17:08 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: changes coding style.
+
+Thu Nov 21 20:04:06 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: should not overwrite Host: header.
+ (This patch is contributed by sean@ruby-lang.org)
+
+Thu Nov 21 20:01:33 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: support Proxy-Authorization.
+ (This patch is contributed by Alexander Bokovoy)
+
+Thu Nov 21 11:03:39 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_find_file_ext): should not terminate searching with
+ empty path, just ignore.
+
+ * dir.c: remove <sys/parm.h> inclusion.
+
+Wed Nov 20 02:07:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * compar.c (cmp_eq,cmp_gt,cmp_ge,cmp_lt,cmp_le): check using
+ rb_cmpint().
+
+ * error.c (init_syserr): remove sys_nerr dependency.
+
+Wed Nov 20 01:52:21 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_cmp): added to satisfy Comparable assumption.
+
+ * eval.c (rb_add_method): "initialize" should be public if it is a
+ singleton method.
+
+Tue Nov 19 22:37:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_match): avoid dereferencing if size == 0.
+ (ruby-bugs-ja:PR#360)
+
+Tue Nov 19 20:40:39 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_cmp): should return nil if an operand is not a
+ number nor time. (ruby-bugs-ja:PR#359)
+
+ * file.c (rb_stat_cmp): should return nil if an operand is not
+ File::Stat.
+
+Tue Nov 19 14:35:09 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_zip): iterates over items in the receiver.
+ zipped with nil if argument arrays are shorter. if arrays are
+ longer, left items are ignored. now works with blocks.
+
+ * enum.c (zip_i): changed for new behavior.
+
+ * array.c (rb_ary_transpose): added. [new]
+
+Tue Nov 19 05:12:21 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * instruby.rb: Do not install various working files under bin/.
+
+Tue Nov 19 05:07:39 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * instruby.rb: not rewrite installed scripts when dry-run mode.
+
+ * lib/ostruct.rb (OpenStruct::initialize): should symbolize keys
+ instead of values.
+
+Tue Nov 19 02:24:10 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * instruby.rb: Rewrite installed scripts' shebang lines.
+
+ * instruby.rb: Use File.join() where appropriate.
+
+Tue Nov 19 01:53:35 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * bin/irb: Moved from sample/irb.rb.
+
+ * instruby.rb: Install script files under bin/ with ruby's program
+ prefix and suffix.
+
+Mon Nov 18 02:13:36 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/tempfile.rb: Make this library thread safe.
+
+ * lib/tempfile.rb: Do not pick a name which was once used and is
+ still scheduled for removal.
+
+ * lib/tempfile.rb: A lock file need not and must not be scheduled
+ for removal.
+
+ * lib/tempfile.rb: Compare Max_try with the number of mkdir
+ failures instead of the suffix counter.
+
+ * lib/tempfile.rb: Overall cleanup and add some important notices.
+
+Sun Nov 17 22:57:31 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (dsym): garbage returned. (ruby-bugs-ja:PR#358)
+
+Fri Nov 15 07:40:08 2002 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
+
+ * observer.rb: raise NoMethodError instead of NameError.
+ [ruby-dev:18788]
+
+ * ostruct.rb: ditto. fix a bug in inspect which called String#+ with
+ Symbol. [ruby-dev:18788]
+
+ * profile.rb: illegal use of Array#sort!. replaced it with non-bang
+ method. [ruby-dev:18792]
+
+Thu Nov 14 22:40:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in (LIBRUBY_A): append -static. [ruby-dev:18689]
+
+ * configure.in (LIBRUBYARG_STATIC, LIBRUBYARG_SHARED): linker
+ argument to link static/shared library respectively.
+
+ * Makefile.in (LIBRUBYARG_STATIC, LIBRUBYARG_SHARED): added.
+
+ * bcc32/Makefile.sub, win32/Makefile.sub: ditto.
+
+ * instruby.rb (LIBRUBY_A): install to libdir.
+
+ * lib/mkmf.rb (link_command): link static library of ruby, or
+ try_run fails unless LIBRUBY_SO is installed. [ruby-dev:18646]
+
+ * eval.c (call_trace_func): toplevel caller was missing.
+ [ruby-dev:18754]
+
+ * eval.c (proc_to_s): adjust created line number.
+
+ * parse.y (primary, do_block, brace_block): adjust line number of
+ block to beginning line, instead of the first statement inside
+ the block.
+
+Thu Nov 14 08:23:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * math.c (math_acos): check errno after operation. ditto for
+ asin, acosh, atanh, log, log10 and sqrt.
+
+ * eval.c (rb_add_method): initialize should always be private.
+
+ * parse.y (expr): add rescue modifier rule.
+
+ * parse.y (command_call): return, break and next with argument is
+ now part of this rule.
+
+Wed Nov 13 16:22:38 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in (DLDFLAGS): removed -Wl,-no-undefined to
+ ext/extmk.rb, in order to allow references to symbols in other
+ extension libraries for mkmf.rb. [ruby-dev:18724]
+
+ * ext/extmk.rb (extmake): ditto.
+
+ * ext/extmk.rb (extmake): exit when make failed.
+
+Sun Nov 10 03:46:18 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb: retire contain?() and add superset?(),
+ proper_superset?() subset?(), and proper_subset?().
+ [obtained from: Jason Voegele's set.rb]
+
+ * lib/set.rb: define several aliases: union() for |(),
+ difference() for -(), and intersection() for &().
+ [obtained from: Jason Voegele's set.rb]
+
+ * lib/set.rb: deal with a s/id/object_id/ leftover.
+
+Sat Nov 9 16:06:57 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/tcltklib/stubs.c: should include "util.h" for ruby_strdup.
+
+Sat Nov 9 11:39:45 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c: remove ENABLE_TRACE/DISABLE_TRACE to trace child nodes of
+ c-call. [ruby-dev:18699]
+
+Fri Nov 8 04:16:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): "a" in "a /5" should be considered as a local
+ variable. [experimental]
+
+Thu Nov 7 09:51:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_yield_0): should enable trace for non-cfunc nodes.
+ [ruby-dev:18645]
+
+ * eval.c (blk_orphan): a block created in a different thread is
+ orphan. [ruby-dev:17471]
+
+Wed Nov 6 16:57:06 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_define_method): do not set NOEX_CFUNC if klass is
+ really a module, whose methods must be safe for reciever's type.
+
+ * eval.c (rb_eval): nosuper should not be inherited unless the
+ overwritten method is an undef placeholder.
+
+Tue Nov 5 00:46:04 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/extmk.rb: Properly pass the given target to
+ make(1). [pointed out by eban]
+
+Mon Nov 4 20:03:53 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * instruby.rb, lib/mkmf.rb: use CONFIG["ENABLE_SHARED"] instead of
+ checking whether CONFIG["configure-args"] includes "--enable-shared".
+
+Mon Nov 4 16:49:14 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (primary): allow 'when'-less case statement; persuaded
+ by Sean Chittenden.
+
+Mon Nov 4 06:28:09 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * Makefile.in, ext/extmk.rb, bcc32/Makefile.sub,
+ win32/Makefile.sub: Introduce better command line syntax
+ (--make/--make-flags/--extstatic) to extmk.rb and instruby.rb.
+ Previously such command as 'make -j3 install' with pmake doesn't
+ fail. Formerly extmk.rb was receiving "make -j 3 -j 3" via the
+ command line arguments and just ended up recognizing the first
+ "3" as destdir. [with help of usa]
+
+Mon Nov 4 03:59:51 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/getopts.rb: Do not choke on characters that cannot be used
+ in a variable name. Replace them with `_'. Define a hash named
+ $OPT for convenience.
+
+Sat Nov 2 00:38:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (Init_Object): added Object#object_id, new name for
+ Object#id. [new]
+
+ * object.c (rb_obj_id_obsolete): give warning for Object#id.
+
+ * numeric.c (fix_intern): added Fixnum#to_sym. [new]
+
+ * object.c (sym_to_sym): rename from Symbol#intern
+
+Fri Nov 1 14:21:06 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_zip): added Enumerable#zip. [new]
+
+ * array.c (rb_ary_zip): added Array#zip.
+
+Thu Oct 31 20:10:18 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (init_syserr): remove sys_nerr dependency.
+
+Thu Oct 31 09:31:51 2002 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (rb_export_method): undef'ed method visibility should not
+ be changed.
+
+Wed Oct 30 17:00:47 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_mod_public_method_defined, etc.): new methods:
+ public_method_defined?, private_method_defined?,
+ protected_method_defined?
+
+ * object.c (rb_obj_public_methods): new method
+ Object#public_methods.
+
+ * class.c (ins_methods_i): Object#methods should list both public
+ and protected methods.
+
+ * class.c (rb_class_public_instance_methods): new method
+ Module#public_instance_methods.
+
+Wed Oct 30 06:29:00 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * eval.c, file.c, gc.c, io.c, object.c, ruby.c, ruby.h, struct.c,
+ ext/socket/socket.c: differentiate long and int; use proper
+ printf type specifiers and do casts where appropriate.
+
+Wed Oct 30 04:07:33 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (error_print, rb_longjmp, rb_thread_schedule): flush
+ error message. [ruby-dev:18582]
+
+ * eval.c (ruby_cleanup): added. just clean up without exit.
+ [ruby-dev:18582]
+
+ * eval.c (ruby_exec): added. execute main evaluation tree without
+ exit. [ruby-dev:18582]
+
+ * intern.h: prototypes; ruby_cleanup, ruby_exec
+
+Tue Oct 29 02:00:08 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/extmk.rb (extmake): use dummy_makefile to create dummy
+ Makefile.
+
+ * lib/mkmf.rb (find_executable0): EXEEXT is optional.
+
+ * lib/mkmf.rb (dummy_makefile): make dummy Makefile content.
+
+ * lib/mkmf.rb (create_makefile): define EXTLIB replacing -l.
+
+ * lib/mkmf.rb ($bccwin): detect Borland make by help message.
+
+ * lib/mkmf.rb (CLEANINGS): common rules to clean.
+
+Mon Oct 28 01:27:17 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * djgpp/config.sed (@program_transform_name@): use `%', not `,'.
+
+Sun Oct 27 22:59:50 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * ext/extmk.rb(78) : The unnecessary error when installing by bccwin32
+ is controlled.
+
+ * lib/mkmf.rb(773) : Also in the case of bccwin32, the path was added.
+
+Sun Oct 27 17:07:25 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * djgpp/*: sync with the latest.
+
+ * ext/extmk.rb, lib/mkmf.rb: flush $stdout.
+
+ * io.c (READ_DATA_PENDING_COUNT, READ_DATA_PENDING_PTR):
+ undef these macros on DJGPP.
+
+Sat Oct 26 10:11:47 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * node.h (nd_type): cast the value to int.
+
+Sat Oct 26 04:27:35 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/dbm/dbm.c (fdbm_indexes, fdbm_select): add a missing
+ argument and prevent coredump when a nonexistent key is
+ specified.
+
+ * ext/sdbm/init.c (fsdbm_indexes, fsdbm_select): ditto.
+
+Sat Oct 26 03:28:43 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * eval.c, gc.c: use a common set of alloca() #ifdef's. This fixes
+ the build with Intel C Compiler for Linux.
+
+ * eval.c (rb_f_require): declare old_func with a real type, not
+ just type modifiers.
+
+Fri Oct 25 02:55:01 2002 Minero Aoki <aamine@loveruby.net>
+
+ * string.c (rb_str_split_m): RSTRING(str)->ptr might become NULL.
+ [ruby-dev:18581]
+
+Thu Oct 24 21:57:02 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in (LIBPATHFLAG): avoid $ substitution.
+ [ruby-dev:18577]
+
+ * ext/extmk.rb (extmake): expand $srcdir.
+
+ * ext/win32ole/extconf.rb: should not override $CFLAGS, but
+ append.
+
+ * lib/mkmf.rb (config_string): use given config hash.
+
+ * bcc32/Makefile.sub (.rc.res): directory part may be empty in
+ Borland make.
+
+Thu Oct 24 03:38:07 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/mkmf.rb (create_makefile): site-install target for backward
+ compatibility.
+
+ * lib/mkmf.rb (init_mkmf): libdir prior to topdir.
+
+ * configure.in (LIBPATHFLAG): should escape $. [ruby-dev:18572]
+
+ * mkconfig.rb: never substitute escaped $$.
+
+ * instruby.rb: not install LIBRUBY_SO unless enable-shared.
+ [ruby-dev:18569]
+
+Wed Oct 23 19:16:06 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_eval): added NODE_DSYM, symbol literal with
+ interpolation.
+
+ * node.h: ditto.
+
+ * intern.h: prototypes; rb_is_junk_id, rb_str_dump, rb_str_intern
+
+ * object.c (sym_inspect): escape and quote for non-alphanumeric
+ symbols.
+
+ * parse.y (dsym, tokadd_string, yylex): extended symbol literals.
+
+ * parse.y (rb_is_junk_id): added.
+
+ * string.c (rb_str_dump, rb_str_intern) : make extern.
+
+ * lib/mkmf.rb (create_makefile): deffile should be removed by
+ distclean, not clean.
+
+Tue Oct 22 23:56:41 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/mkmf.rb (init_mkmf): add dir_config("opt").
+
+Tue Oct 22 19:44:03 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * bcc32/configure.bat : The command line when calling setup.mak is
+ corrected.
+
+ * bcc32/readme.bcc32 : It follows up about the option of configure.bat.
+
+Tue Oct 22 15:23:19 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * instruby.rb: add dryrun mode.
+
+ * ext/extmk.rb (extmake): add install: target to dummy Makefile.
+
+ * ext/extmk.rb (extmake): avoid Borland make's quirk behavior.
+
+ * lib/mkmf.rb (link_command): opt is not a makefile macro.
+
+ * bcc32/Makefile.sub ($(LIBRUBY_SO) $(LIBRUBY)): EXTOBJS were not
+ linked.
+
+ * bcc32/Makefile.sub (ext/extinit.obj): missing.
+
+ * bcc32/Makefile.sub (TRY_LINK): options have to place before any
+ non-option arguments.
+
+ * win32/Makefile.sub (TRY_LINK): need -link and -libpath options.
+
+ * bcc32/Makefile.sub, win32/Makefile.sub (RANLIB): logical
+ operator never work with command.com.
+
+Tue Oct 22 00:59:59 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (RUBY_CPPOUTFILE): fix cache file bug.
+
+ * lib/mkmf.rb (link_command): put 'opt' after conftest.c for
+ static linking.
+
+Mon Oct 21 22:53:02 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in (XCFLAGS): CFLAGS to compile ruby itself.
+
+ * configure.in (LIBEXT): suffix for static libraries.
+
+ * configure.in (LIBPATHFLAG): switch template to specify library
+ path.
+
+ * configure.in (LINK_SO): command to link shared objects.
+
+ * configure.in (DEFFILE, ARCHFILE): miscellaneous system dependent
+ files.
+
+ * configure.in (EXPORT_PREFIX): prefix to exported symbols on
+ Windows.
+
+ * configure.in (COMMON_LIBS, COMMON_MACROS, COMMON_HEADERS):
+ libraries, macros and headers used in common.
+
+ * configure.in (RUBYW_INSTALL_NAME, rubyw_install_name): GUI mode
+ executable name.
+
+ * Makefile.in (CFLAGS): append XCFLAGS.
+
+ * Makefile.in (PREP): miscellaneous system dependent files.
+
+ * Makefile.in (ruby.imp, ext/extinit.o): moved from ext/extmk.rb.
+
+ * Makefile.in (fake.rb): CROSS_COMPILING keeps building platform.
+
+ * Makefile.in (MAKEFILES): depend on *.in and config.status.
+
+ * Makefile.in (parse.c): replace "y.tab.c" with actual name for
+ byacc.
+
+ * ext/extmk.rb, lib/mkmf.rb: integrated.
+
+ * ext/extmk.rb: propagate MFLAGS.
+
+ * ext/extmk.rb (extmake): make dummy Makefile to clean even if no
+ Makefile is made.
+
+ * lib/mkmf.rb (older): accept multiple file names and Time
+ objects.
+
+ * lib/mkmf.rb (xsystem): split and quote.
+
+ * lib/mkmf.rb (cpp_include): make include directives.
+
+ * lib/mkmf.rb (try_func): try whether specified function is
+ available.
+
+ * lib/mkmf.rb (install_files): default to site-install.
+
+ * lib/mkmf.rb (checking_for): added.
+
+ * lib/mkmf.rb (find_executable0): just find executable file with
+ no message.
+
+ * lib/mkmf.rb (create_header): output header file is variable.
+
+ * lib/mkmf.rb (create_makefile): separate sections.
+
+ * lib/mkmf.rb (init_mkmf): initialize global variables.
+
+ * win32/Makefile.sub, bcc32/Makefile.sub (CPP, AR): added.
+
+ * bcc32/Makefile.sub (ARCH): fixed to i386.
+
+ * win32/Makefile.sub, bcc32/Makefile.sub (miniruby): should not
+ link EXTOBJS.
+
+ * ext/dl/extconf.rb: use try_cpp to cross compile.
+
+ * ext/dl/extconf.rb: not modify files in source directory.
+
+Fri Oct 18 23:11:21 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (value_expr0): allow return/break/next/redo/retry in rhs
+ of logical operator. [ruby-dev:18534]
+
+ * parse.y (remove_begin): eliminate useless NODE_BEGIN.
+ [ruby-dev:18535]
+
+Fri Oct 18 01:02:44 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * hash.c, eval.c: Use (*_NSGetEnviron()) instead of environ on
+ Darwin for namespace cleanness. [ruby-core:00537]
+
+ * dln.c (dln_load): Fix Darwin support that has been disabled and
+ switch to using it on Darwin instead of the system dlopen().
+ [ruby-core:00541]
+
+Thu Oct 17 19:17:56 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * marshal.c (w_byten): added; write n bytes from s to arg.
+
+ * marshal.c (dump): flush buffered data.
+
+ * marshal.c (marshal_dump, r_byte, r_bytes0, marshal_load): unify
+ marshaling I/O. [ruby-talk:53368]
+
+Thu Oct 17 12:58:24 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb: stat.blksize might be 0/nil.
+
+ * lib/fileutils.rb: change coding style.
+
+Wed Oct 16 22:35:53 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * sprintf.c (rb_f_sprintf): disallow mixed usage of numbered and
+ unnumbered arguments. [ruby-dev:18531]
+ get rid of memory leak at exception. [ruby-core:00460]
+
+Wed Oct 16 13:36:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * variable.c (rb_global_entry): not add global entry until
+ initialized to avoid accessing it while GC. [ruby-dev:18514]
+
+ * variable.c (rb_alias_variable): ditto.
+
+Wed Oct 16 01:03:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_str_to_dbl): RString ptr might be NULL.
+
+ * object.c (rb_cstr_to_dbl): p pointer might be NULL.
+
+ * bignum.c (rb_str_to_inum): RString ptr might be NULL.
+
+ * bignum.c (rb_cstr_to_inum): str pointer might be NULL.
+
+Sat Oct 12 23:44:11 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * win32/win32.c (rb_w32_putc): wrong condition to fill or flush on
+ bccwin32. [ruby-win32:408]
+
+Fri Oct 11 15:58:06 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): rescue modifier is now an operator with
+ precedence right below assignments. i.e. "a = b rescue c" now
+ parsed as "a = (b rescue c)", not as "(a = b) rescue c". [new]
+ [experimental]
+
+Fri Oct 11 06:05:30 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * win32/win32.c (rb_w32_fclose, rb_w32_close): use closesocket()
+ for socket. [ruby-win32:382]
+
+ * win32/win32.c (StartSockets): set NtSocketsInitialized.
+
+ * win32/win32.h: prototypes; rb_w32_fclose, rb_w32_close
+
+Fri Oct 11 00:24:57 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * gc.c (ruby_xmalloc, ruby_xrealloc): restrict total allocation
+ size according to memories consumed by live objects.
+ [ruby-dev:18482]
+
+ * gc.c (gc_sweep): estimate how live objects consume memories.
+
+Thu Oct 10 17:26:12 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/tcltklib/stubs.c (ruby_tcltk_stubs): fix memory leak.
+ [ruby-dev:18478]
+
+Thu Oct 10 15:20:18 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/weakref.rb (WeakRef::@@final): use Hash#delete.
+
+ * lib/weakref.rb (WeakRef::__getobj__): examine if alive or not by
+ ID_REV_MAP to deal with recycled object. [ruby-dev:18472]
+
+ * lib/weakref.rb (WeakRef::weakref_alive?): ditto.
+
+Wed Oct 9 07:11:25 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * gc.c (gc_sweep): also adjust heaps_limits when free unused heap
+ page. [ruby-core:00526]
+
+ * io.c (io_fflush): condition to retry can occur.
+
+ * io.c (io_write): returned 0 wrongly if no error occurred.
+
+Tue Oct 8 14:19:07 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (io_write): must check returned value from fwrite() before
+ test with ferror(). (ruby-bugs-ja:PR#350)
+
+Tue Oct 8 10:55:23 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/prettyprint.rb (PrettyPrint.singleline_format): new method.
+
+Mon Oct 7 16:43:07 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigdivrem): bignum zero's len should not be 0.
+
+Mon Oct 7 15:36:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigdivmod): wrong condition check for Bignum zero.
+
+ * bignum.c (Init_Bignum): need to add Bignum#div.
+
+Sun Oct 6 00:49:15 2002 Minero Aoki <aamine@loveruby.net>
+
+ * eval.c (rb_load): should not pass blocks to the loaded file.
+ [ruby-dev:18458]
+
+Fri Oct 4 20:25:38 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_thread_interrupt, rb_thread_signal_raise): no need to
+ save dead thread context. (same as [ruby-dev:18322])
+ (ruby-bugs-ja:PR#349)
+
+Fri Oct 4 13:05:58 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (RUBY_PROG_GNU_LD): check whether the linker is GNU ld.
+
+ * ext/extmk.rb (create_makefile): add -Wl,-no-undefined to $DLDFLAGS
+ on Linux if GNU ld is used and --enable-shared is specified.
+
+Fri Oct 4 02:21:16 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_rshift): num should be initialized by carry
+ bits if x is negative.
+
+ * bignum.c (bigdivmod): len for bignum zero is 1, not 0.
+
+Thu Oct 3 20:22:11 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * bcc32/mkexports.rb: to work on cygwin via telnet.
+ [ruby-win32:358]
+
+ * ext/tcltklib/tcltklib.c (ip_invoke): requires command name
+ argument. [ruby-dev:18438]
+
+ * eval.c (ruby_init, ruby_options): Init_stack() with local
+ location. (ruby-bugs-ja:PR#277)
+
+ * eval.c (rb_call0): disable trace call. [ruby-dev:18074]
+
+ * eval.c (eval, rb_load): enable trace call. [ruby-dev:18074]
+
+ * eval.c (rb_f_require): set source file name for extension
+ libraries. [ruby-dev:18445]
+
+ * gc.c (Init_stack): prefer address of argument rather than local
+ variable to initialize rb_gc_stack_start.
+
+ * ruby.c (translate_char): translate a character in a string;
+ DOSISH only. [ruby-dev:18274]
+
+ * ruby.c (ruby_init_loadpath): added argv[0] handling under
+ Human68K. [ruby-dev:18274]
+
+ * ruby.c (proc_options): translate directory separator in $0 to
+ '/'. [ruby-dev:18274]
+
+Thu Oct 3 00:27:26 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/delegate.rb (Delegator::initialize): use Object#class
+ instead of deprecated Object#type.
+
+Wed Oct 2 23:32:48 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * configure.in (RUBY_CHECK_IO_NEED_FLUSH): check whether fflush()
+ is needed.
+
+ * io.c (flush_before_seek): flush before seek if buffered data
+ may remain.
+
+ * io.c (rb_io_check_readable): flush if the last operation was
+ write.
+
+ * io.c (rb_io_check_writable): flush if the last operation was
+ read.
+
+ * rubyio.h (FMODE_RBUF): added.
+
+Wed Oct 2 23:09:20 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (rb_io_wait_readable): handle retryable errors.
+
+ * io.c (rb_io_wait_writable): ditto.
+
+ * ext/socket/socket.c (bsock_send): ditto.
+
+ * ext/socket/socket.c (s_recvfrom): ditto.
+
+ * ext/socket/socket.c (s_accept): ditto.
+
+ * ext/socket/socket.c (udp_send): ditto.
+
+ * ext/socket/getaddrinfo.c (afdl): made private structures constant.
+
+ * rubyio.h: prototype; rb_io_wait_readable(), rb_io_wait_writable().
+
+Wed Oct 2 13:03:58 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: set ac_cv_func_setitimer to "no" on Cygwin.
+
+Wed Oct 2 10:59:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (gc_sweep): free unused heap page to reduce process size if
+ possible.
+
+ * object.c (rb_obj_type): deprecated Object#type; use Object#class.
+
+Tue Oct 1 23:48:32 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/socket/socket.c (init_sock): no need for special finalizer,
+ socket descriptor is no longer duplicated in 1.7.
+ [ruby-talk:50732]
+
+ * win32/win32.c, win32/win32.h (rb_w32_fddup, rb_w32_fdclose):
+ delete.
+
+Mon Sep 30 20:29:10 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (rb_io_inspect): not need to raise IOError for closed
+ stream. [ruby-talk:51871]
+
+Mon Sep 30 03:48:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_check): need no Fixnum check.
+
+Sun Sep 29 18:30:24 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * win32/win32.c (rb_w32_open_osfhandle): adjust
+ rb_w32_open_osfhandle() with _open_osfhandle().
+
+ * win32/win32.c (rb_w32_accept, rb_w32_socket): return -1 on
+ error.
+
+ * win32/win32.h: should use file descriptor instead of SOCKET.
+
+Sun Sep 29 06:33:03 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (is_socket, 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):
+ need to protect WSAGetLastError() by RUBY_CRITICAL. [ruby-talk:51778]
+
+Sat Sep 28 20:06:36 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * keywords: add braces around initializers.
+
+Sat Sep 28 13:19:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * hash.c (rb_hash_become): should check self-assignment after
+ conversion.
+
+Sat Sep 28 10:40:44 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_become): Hash#become should check added
+ self-assignment.
+
+ * class.c (rb_make_metaclass): metaclass of a superclass may be
+ NULL at boot time.
+
+Sat Sep 28 09:50:03 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * ext/extmk.rb: The condition judgment without necessity was deleted.
+
+Fri Sep 27 18:40:42 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_thread_deadlock): more verbose message at deadlock.
+
+ * eval.c (rb_thread_schedule): ditto.
+
+ * eval.c (rb_thread_join): ditto.
+
+Fri Sep 27 13:24:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): Class#inherited should be called after the
+ execution of the class body.
+
+Fri Sep 27 02:41:53 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/sha1: Use OpenSSL's SHA1 engine if available. It is
+ much faster than what we have now (sha1.[ch]). Add a knob
+ (--with-bundled-sha1) to extconf.rb which makes it use the
+ bundled one anyway.
+
+Fri Sep 27 02:25:14 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/rmd160: Use OpenSSL's RMD160 engine if available. It
+ is much faster than what we have now (rmd160.[ch]). Add a knob
+ (--with-bundled-rmd160) to extconf.rb which makes it use the
+ bundled one anyway.
+
+Fri Sep 27 01:23:39 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/md5: Use OpenSSL's MD5 engine if available. It is
+ much faster than what we have now (md5.[ch]). Add a knob
+ (--with-bundled-md5) to extconf.rb which makes it use the
+ bundled one anyway.
+
+Thu Sep 26 22:44:21 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/digest.c (rb_digest_base_s_digest): Fix a double
+ free() bug mingled with allocation framework deployment.
+
+ * ext/digest/digest.c (rb_digest_base_s_hexdigest): Get rid of
+ redundant struct allocation.
+
+Thu Sep 26 09:52:52 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (primary): remove "return outside of method" check at
+ compile time.
+
+Wed Sep 25 23:51:29 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * dir.c (glob_helper): must not closedir() when exception raised
+ while globbing "**".
+
+ * marshal.c (w_uclass): unused variable.
+
+ * re.c (match_clone): unused.
+
+ * regex.c (re_compile_pattern): get rid of implicit promotion from
+ plain char to int.
+
+Wed Sep 25 17:46:46 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (libpathflag): restore ENV['LIB'] when some error
+ occurred.
+
+Wed Sep 25 16:14:51 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_match): p1 may exceed pend limit.
+
+Mon Sep 23 23:22:43 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_call0): must not clear ruby_current_node, or
+ backtrace cannot be generated.
+
+ * intern.h (ruby_yyparse): rather than yyparse().
+
+ * parse.y (yylex): nextc() returns -1 at end of input, not 0.
+
+ * parse.y (newline_node): reduce duplicated newline node.
+
+ * parse.y (literal_concat): get rid of warning.
+
+ * parse.y (new_evstr): fixed junk code.
+
+Mon Sep 23 19:57:52 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (RUBY_MINGW32): new macro. check for the MinGW
+ compiler environment.
+
+ * lib/mkmf.rb: refactoring.
+
+Mon Sep 23 08:27:11 2002 Tanaka Akira <akr@m17n.org>
+
+ * io.c (appendline): forget to terminate with nul.
+
+Mon Sep 23 02:46:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ruby_run): should set toplevel visibility again here.
+
+ * eval.c (rb_eval): should not rely on ruby_class == rb_cObject
+ check. Besides allow implicit publicity for attribute set
+ methods.
+
+ * parse.y (primary): need not to check class_nest, just set
+ whether method is an attrset or not.
+
+Sun Sep 22 21:49:42 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (call_trace_func): should not call trace function while
+ compilation.
+
+ * eval.c (rb_call0): also inside c-func.
+
+ * parse.y (yycompile): ditto.
+
+ * ruby.c (require_libraries): preserve source file/line for each
+ require.
+
+Sun Sep 22 17:08:11 2002 Tanaka Akira <akr@m17n.org>
+
+ * string.c (rb_str_each_line): p might be at the top of the
+ string.
+
+Sat Sep 21 23:28:28 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_make_metaclass): class of metaclass should be
+ metaclass of superclass, unless class itself is a metaclass;
+ class of metaclass of metaclass should point back to self.
+ eh, confusing, isn't it.
+
+ * class.c (rb_singleton_class): check if its class is singleton
+ AND attached to self.
+
+Sat Sep 21 22:23:41 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_thread_raise): no need to save dead thread context.
+ [ruby-dev:18322]
+
+Fri Sep 20 23:02:01 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (block_append): eliminate unused literal nodes.
+
+ * parse.y (literal_concat): refined literal concatenation.
+
+Fri Sep 20 19:43:40 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb: Merge rough/lib/set.rb rev.1.5-1.15.
+
+Wed Sep 18 12:41:16 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): should define class/module under ruby_cbase.
+
+ * eval.c (rb_eval): should set class/module path based on
+ ruby_cbase, not ruby_class.
+
+ * eval.c (module_setup): use ruby_cbase instead of ruby_class.
+
+Tue Sep 17 21:06:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_thread_die): put thread dead state.
+
+ * eval.c (rb_thread_atfork): free stack buffer at fork too.
+
+Tue Sep 17 01:13:31 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_mod_nesting): load wrapping module should appear in
+ Module#nesting list. (ruby-bugs-ja:PR#328)
+
+ * eval.c (rb_thread_remove): free stack buffer on remove.
+
+Tue Sep 17 00:58:35 2002 Minero Aoki <aamine@loveruby.net>
+
+ * io.c: add parameter prototype.
+
+ * re.c: ditto.
+
+Sun Sep 15 21:14:22 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * win32/win32.c (rb_w32_opendir, rb_w32_stat): Corresponds to
+ the unjust path containing ".
+
+Sun Sep 15 19:48:55 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (OUTFLAG, CPPOUTFILE): moved from lib/mkmf.rb.
+ check whether ${CPP} accepts the -o option.
+
+ * win32/Makefile.sub (OUTFLAG, CPPOUTFILE): ditto.
+
+ * bcc32/Makefile.sub (OUTFLAG, CPPOUTFILE): ditto.
+
+ * djgpp/config.sed (OUTFLAG, CPPOUTFILE): ditto.
+
+ * lib/mkmf.rb (OUTFLAG, CPPOUTFILE): use CONFIG.
+ make easy to understand log.
+
+ * mkconfig.rb (val): should not strip.
+
+Sat Sep 14 20:13:42 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * error.c(rb_sys_fail): remove case EPIPE on bcc32 .
+
+Fri Sep 13 23:39:49 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * dir.c (glob_func_caller): add prototype to get rid of warning.
+
+Fri Sep 13 18:35:12 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_eval): avoid uninitialized global/class variable
+ warnings at `||='. [ruby-dev:18278]
+
+ * parse.y (stmt, arg): ditto
+
+Fri Sep 13 13:28:04 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/mkmf.rb ($INSTALLFILES): avoid warning when $VERBOSE mode.
+
+Thu Sep 12 23:20:10 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * bcc32/setup.mak : Control of a message.
+
+ * bcc32/makefile.sub : include resource.
+
+Thu Sep 12 18:10:03 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * dir.c (glob_helper): fixed freeing buffer. (ruby-bugs-ja:PR#332)
+
+ * dir.c (glob_helper): should pass matched path. (ruby-bugs-ja:PR#333)
+
+Thu Sep 12 00:09:32 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_trap_eval): preserve thread status and so on.
+ [ruby-talk:40337], [ruby-core:00019]
+
+Wed Sep 11 21:25:52 2002 Tanaka Akira <akr@m17n.org>
+
+ * pp.rb (ARGF.pretty_print): implemented.
+ (PP.pp): arguments reordered.
+
+Wed Sep 11 18:55:38 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (proc_to_s): refined format. [ruby-dev:18215]
+
+Wed Sep 11 17:47:17 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c, win32/win32.h (rb_w32_getpid): negate pid under Win9x.
+ [ruby-dev:18262]
+
+Wed Sep 11 12:58:57 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * string.c (get_pat): Add an extra argument "quote".
+
+ * string.c (rb_str_match_m): Do not bother to convert if a regexp
+ is given.
+
+Wed Sep 11 11:33:40 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bcc32/Makefile.sub: remove unnecessary `.dll' from filename of
+ dll's resource file.
+
+ * cygwin/GNUmakefile.in: ditto. [ruby-dev:17103]
+
+ * win32/Makefile.sub: ditto. [ruby-dev:17103]
+
+ * win32/resource.rb: ditto. [ruby-dev:17103]
+
+Wed Sep 11 09:59:46 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (rb_io_wait_readable): added.
+
+ * io.c (rb_io_wait_writable): added.
+
+ * io.c (io_read_retryable): added.
+
+ * io.c (io_write): retry on EINTR, ERESTART and EWOULDBLOCK.
+ [ruby-dev:17855], [ruby-dev:17878], [ruby-core:00444]
+
+ * io.c (rb_io_fread): ditto.
+
+ * io.c (read_all): ditto.
+
+ * io.c (appendline): ditto.
+
+ * io.c (rb_io_each_byte): ditto.
+
+ * io.c (rb_io_getc): ditto.
+
+Wed Sep 11 09:29:24 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (ext): make directory `ext' on compile dir.
+ [ruby-dev:18255]
+
+Wed Sep 11 00:41:10 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_mod_define_method): initialize orig_func too.
+ (ruby-bugs-ja:PR#330)
+
+Wed Sep 11 00:01:32 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (glob_helper): prevent memory leak using rb_protect().
+
+ * string.c (rb_str_associate): no need to check freeze flag.
+
+ * string.c (rb_str_resize): should honor STR_ASSOC flag on
+ resize.
+
+ * string.c (rb_str_resize): proper STR_ASSOC handling. pointed
+ out by Michal Rokos.
+
+ * string.c (rb_str_buf_cat): ditto.
+
+ * string.c (rb_str_cat): ditto.
+
+ * string.c (rb_str_buf_append): ditto.
+
+ * string.c (rb_str_append): ditto.
+
+Tue Sep 10 23:35:46 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (nextc): restore line number after here documents.
+ (ruby-bugs-ja:PR#331)
+
+ * parse.y (heredoc_restore): ditto.
+
+Tue Sep 10 18:26:52 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb, lib/mkmf.rb ($INCFLAGS): new var for -I$(topdir).
+
+ * lib/mkmf.rb: add #define WIN32_LEAN_AND_MEAN to improve compile
+ times.
+
+Tue Sep 10 17:16:14 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (miniruby): shouldn't link $(EXTOBJS).
+ [ruby-dev:17059]
+
+ * win32/Makefile.sub ($(LIBRUBY_A), $(LIBRUBY)): avoid lib.exe's
+ warning. [ruby-dev:17059]
+
+ * win32/Makefile.sub: remove unnecessary rules. [ruby-dev:17059]
+
+ * win32/configure.bat, win32/setup.mak, win32/README.win32: enable to
+ pass some arguments to configure. [ruby-dev:17059]
+
+Mon Sep 9 23:43:33 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.h (S_I?USR): define only if not mingw32.
+
+Mon Sep 9 11:21:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/stringio/stringio.c (strio_set_string): reinitialize
+ properly.
+
+ * ext/stringio/stringio.c (strio_become): added self-assign check
+ and experimental auto-conversion to StringIO.
+
+ * ext/stringio/stringio.c (strio_reopen): added.
+
+
+Sun Sep 8 21:29:25 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * time.c (time_free): prototype; struct time_object -> void *.
+ avoid GCC warnings.
+
+ * lib/mkmf.rb, ext/extmk.rb ($LINK, $CPP): move to lib/mkmf.rb.
+
+Sun Sep 8 19:02:28 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * time.c: prototype; time_free() to avoid VC++ warnings.
+
+ * ext/tcltklib/tcltklib.c: prototype; invoke_queue_handler() to avoid
+ VC++ warning.
+
+ * win32/win32.c (rb_w32_stat): remove S_IWGRP and S_IWOTH bits from
+ st_mode.
+
+ * win32/win32.h (S_I*): define if not defined.
+
+Sun Sep 8 14:38:31 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: modify program_prefix only if specified
+ --program-prefix.
+
+ * configure.in: don't generate ext/extmk.rb.
+
+ * Makefile.in: execute directly $(srcdir)/ext/extmk.rb.
+ remove -Cext option, "Dir::chdir 'ext'" in ext/extmk.rb.
+
+ * {win32,bccwin32}/Makefile.sub: ditto.
+
+ * instruby.rb: ditto.
+
+ * ext/extmk.rb: renamed from ext/extmk.rb.in.
+
+ * lib/mkmf.rb (module Logging): create log files (mkmf.log)
+ in each extension module directories.
+
+ * ext/extmk.rb: ditto.
+
+ * lib/mkmf.rb (macro_defined?): new method.
+
+ * ext/.cvsignore: remove extmk.rb.
+
+ * ext/*/.cvsignore: add "*.def".
+
+ * lib/mkmf.rb (have_struct_member): moved from ext/socket/extconf.rb.
+
+ * ext/socket/extconf.rb: use macro_defined? instead of egrep_cpp.
+
+ * ext/etc/extconf.rb: use have_struct_member.
+
+ * ext/etc/etc.c: add prefix HAVE_ST_ to PW_ macros.
+
+Sun Sep 8 14:36:40 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * bcc32/configure.bat : Control of a message.
+ * bcc32/makefile.sub : @(sitearch) typo.
+ * ext/extmk.rb.in : [bccwin32] libdir is added to a library path.
+ * lib/mkmf.rb : ditto.
+
+Sat Sep 7 23:32:56 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/inf-ruby.el (inferior-ruby-error-regexp-alist): regexp
+ alist for error message from ruby.
+
+ * misc/inf-ruby.el (inferior-ruby-mode): fixed for Emacs.
+
+ * misc/inf-ruby.el (ruby-send-region): compilation-parse-errors
+ doesn't parse first line, so insert separators before each
+ evaluations.
+
+Sat Sep 7 19:46:57 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb: Disallow Set.new(false). Add even more tests.
+ [Submitted by: "Christoph" <chr_news@gmx.net>]
+
+Sat Sep 7 19:23:56 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb: Fix a bug in flatten()'s recursive set detection.
+ [Submitted by: "Christoph" <chr_news@gmx.net>] Some tests
+ against the bug are added.
+
+ * lib/set.rb: Resurrect the test suite by putting it after
+ __END__ and executing `eval DATA.read'.
+
+Sat Sep 7 08:41:39 2002 Minero Aoki <aamine@loveruby.net>
+
+ * parse.y (rb_gc_mark_parser): ruby_eval_tree is marked in eval.c.
+
+Fri Sep 6 20:01:38 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/mkmf.rb ($CC): command to compile C source.
+
+ * lib/mkmf.rb (logging): added.
+
+ * lib/mkmf.rb (try_compile): added.
+
+ * lib/mkmf.rb (egrep_cpp): use internal grep when pattern is
+ Regexp, otherwise use external egrep command but get rid of
+ pipe of command.com.
+
+ * lib/mkmf.rb (have_func): local variable should be volatile not
+ to be eliminated by optimization.
+
+ * lib/mkmf.rb (create_makefile): link with CONFIG["LIBS"].
+
+ * lib/mkmf.rb (create_makefile): emit .SUFFIXES:.
+
+Fri Sep 6 12:11:22 2002 Minero Aoki <aamine@loveruby.net>
+
+ * parse.y (rb_gc_mark_parser): should mark ALL global variables
+ defined in parse.y.
+
+Fri Sep 6 01:15:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (ruby_xmalloc): remove MALLOC_LIMIT to avoid frequent
+ garbage collection.
+
+Fri Sep 6 11:47:37 2002 Minero Aoki <aamine@loveruby.net>
+
+ * parse.y (rb_gc_mark_parser): should mark global variables
+ defined in parse.y.
+
+Fri Sep 6 10:34:32 2002 Minero Aoki <aamine@loveruby.net>
+
+ * io.c (rb_io_puts): RSTRING(line)->ptr might be NULL.
+
+Fri Sep 6 10:26:37 2002 Minero Aoki <aamine@loveruby.net>
+
+ * parse.y: should not put non-NODE-VALUEs in the semantic stack.
+
+Fri Sep 6 05:48:26 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (rb_path_check): nothing to check under DOSISH.
+ [ruby-list:35772]
+
+Fri Sep 6 05:03:50 2002 Minero Aoki <aamine@loveruby.net>
+
+ * gc.c (rb_gc): should mark parser.
+
+ * parse.y (rb_gc_mark_parser): new function.
+
+ * intern.h (rb_gc_mark_parser): added.
+
+Thu Sep 5 18:32:32 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_path2class): should not use rb_eval_string().
+
+Thu Sep 5 17:18:22 2002 Michal Rokos <michal@ruby-lang.org>
+
+ * dln.c: fix memory leak in dln_load (ruby-core:405) and
+ in load_1 (ruby-core:407)
+
+Thu Sep 5 15:43:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_extended): should allow marshaling of object which
+ is extended by named module.
+
+ * class.c (rb_make_metaclass): super may be T_ICLASS, need to skip.
+
+Thu Sep 5 13:09:22 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_eval): overriding false constant with class/module
+ definition should be error. (PR#327)
+
+Thu Sep 5 01:24:26 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * extmk.rb (create_makefile): add macro MAKEDIRS, INSTALL_PROG,
+ INSTALL_DATA.
+
+ * extmk.rb (create_makefile): support for building to any directory.
+
+ * extmk.rb (xsystem): move to mkmf.rb.
+
+ * mkmf.rb (xsystem): support for extmk.rb
+
+ * mkmf.rb ($CPP): remove '-E' option. add CPPFLAGS.
+
+Wed Sep 4 16:15:17 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb: ==(o) should be aware of all the Set variant
+ instances, not just those of its subclasses. [Submitted by:
+ "Christoph" <chr_news@gmx.net>]
+
+ * lib/set.rb: - Fix eql?(). [ditto]
+
+Wed Sep 4 15:23:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_make_metaclass): obj.meta.super.meta should be equal
+ to obj.meta.meta.super (ruby-bugs-ja:PR#324).
+
+Wed Sep 4 05:10:16 2002 Koji Arai <jca02266@nifty.ne.jp>
+
+ * parse.y (yylex): the warning message "invalid
+ character syntax" was never issued (ruby-bugs-ja:PR#323).
+
+Wed Sep 4 01:08:45 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (r_bytes): do not use alloca (ruby-bugs:PR#382).
+
+Tue Sep 3 17:12:59 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * extmk.rb: require mkmf.rb. remove duplicate methods.
+ use Config::CONFIG["FOO"] instead of @FOO@.
+
+ * mkmf.rb: support for extmk.rb.
+
+Mon Sep 2 23:01:50 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * re.c (rb_reg_search): MatchData must be rb_cMatch.
+ (ruby-bugs-ja:PR#319)
+
+Mon Sep 2 21:21:46 2002 Minero Aoki <aamine@loveruby.net>
+
+ * gc.c (gc_sweep): does reclaim nodes in also compile time, if we
+ can.
+
+ * ruby.c (load_file): omit GC if we can.
+
+ * parse.y (ruby_parser_stack_on_heap): new function.
+
+ * intern.h (ruby_parser_stack_on_heap): added.
+
+Mon Sep 2 18:45:07 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_copy_generic_ivar): remove old generic instance
+ variable table if it exists.
+
+Sun Sep 1 15:54:33 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * config.guess: fixed for Linux/PPC.
+
+Sat Aug 31 09:38:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_make_metaclass): metaclass of a metaclass is a
+ metaclass itself.
+
+Fri Aug 30 22:45:16 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb: Added.
+
+Fri Aug 30 20:58:54 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * ext/Win32API/Win32API.c (Win32API_Call): typo.
+
+Fri Aug 30 19:45:52 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * variable.c (rb_const_assign): st_delete() takes pointer to key.
+
+Fri Aug 30 19:40:28 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/Win32API/Win32API.c (Win32API_Call): RSTRING()->ptr may be
+ NULL.
+
+ * ext/nkf/nkf.c (rb_nkf_guess): ditto.
+
+ * ext/readline/readline.c (readline_s_set_completion_append_character):
+ ditto.
+
+ * ext/socket/socket.c (sock_s_getaddrinfo, sock_s_getnameinfo):
+ ditto.
+
+ * ext/tcltklib/tcltklib.c (ip_toUTF8, ip_fromUTF8): ditto.
+
+Fri Aug 30 01:32:17 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_singleton_class): superclass of a metaclass
+ should be a metaclass of superclass.
+
+ * range.c (range_eq): two instances must belong to a same class to
+ be equal.
+
+ * range.c (range_eql): ditto.
+
+ * io.c (rb_io_taint_check): frozen check added.
+
+ * file.c (rb_stat_become): frozen check added.
+
+ * object.c (rb_obj_become): ditto.
+
+ * re.c (rb_reg_become): ditto.
+
+ * struct.c (rb_struct_become): ditto.
+
+ * time.c (time_become): ditto.
+
+ * array.c (rb_ary_become): should call rb_ary_modify().
+
+ * hash.c (rb_hash_become): should call rb_hash_modify().
+
+ * compar.c (cmp_equal): should not use NUM2LONG(), since <=> may
+ return bignum.
+
+ * compar.c (cmp_gt, cmp_ge, cmp_lt, cmp_le, cmp_between): ditto.
+
+Thu Aug 29 23:34:42 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * bcc32/MakeFile.sub (sitearch): add.
+
+Thu Aug 29 13:36:42 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * io.c (read_all): should use off_t instead of long.
+
+Thu Aug 29 00:55:55 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * marshal.c (r_object): yield loaded objects, not intermediates.
+ (ruby-bugs-ja:PR#296)
+
+Thu Aug 29 00:06:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_become): should not free ptr if it's shared.
+
+ * eval.c (rb_alias): prohibit making an alias named "allocate" if
+ klass is a metaclass.
+
+Wed Aug 28 23:59:15 2002 Michal Rokos <michal@ruby-lang.org>
+
+ * signal.c: remove #ifdef SIGINT for struct signals.
+
+ * variable.c: get rid of fix length buffer in rb_class_path.
+
+Wed Aug 28 23:34:32 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (appendline): data was lost when raw mode.
+
+Wed Aug 28 22:57:34 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_string_value_ptr): StringValuePtr() should never
+ return NULL pointer.
+
+Wed Aug 28 19:12:46 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/stringio/stringio.c (strio_initialize): RSTRING(mode)->ptr
+ can be NULL.
+
+ * ext/stringio/stringio.c (strio_ungetc): fix buffer overflow.
+
+Wed Aug 28 18:19:55 2002 Michal Rokos <michal@ruby-lang.org>
+
+ * file.c: fix memory leak in rb_stat_init.
+
+Wed Aug 28 17:45:03 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * win32/win32.c (kill): negate pid under Win9x.
+
+Wed Aug 28 16:36:40 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (ar): don't check ar twice.
+
+Wed Aug 28 15:00:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_delete_bang): should check if str->ptr is 0.
+
+ * string.c (rb_str_squeeze_bang): ditto.
+
+ * string.c (rb_str_count): ditto.
+
+ * string.c (rb_str_lstrip_bang): ditto.
+
+ * string.c (rb_str_rstrip_bang): ditto.
+
+ * string.c (rb_str_intern): ditto.
+
+Wed Aug 28 11:37:35 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.h: define SIGINT and SIGKILL if not defined.
+
+ * win32/win32.c: remove definition of SIGINT and SIGKILL.
+
+Tue Aug 27 19:50:27 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ruby.c (require_libraries): prevent ruby_sourcefile from GC.
+
+Tue Aug 27 15:03:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_find_file): $LOAD_PATH must not be empty.
+
+ * file.c (rb_find_file_ext): ditto.
+
+Tue Aug 27 02:35:21 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_eq): class check should be based on range.class,
+ instead of Range to work with Range.dup.
+
+ * range.c (range_eql): ditto.
+
+Mon Aug 26 18:17:56 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_mod_dup): need to preserve metaclass and flags.
+
+Mon Aug 26 10:44:18 2002 Tanaka Akira <akr@m17n.org>
+
+ * object.c (rb_cstr_to_dbl): had a buffer overrun.
+
+Sun Aug 25 20:10:32 2002 Wakou Aoyama <wakou@ruby-lang.org>
+
+ * lib/cgi.rb (CGI#form): fix ruby-bugs-ja:PR#280, add default action.
+
+Sat Aug 24 15:32:16 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (call_trace_func): restore source file/line, as trace
+ function installed in required library with -r option can be
+ called while parsing. (ruby-bugs:PR#372)
+
+ * eval.c (module_setup): unused variable. [ruby-core:00358]
+
+Sat Aug 24 14:59:02 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_class): integrate singleton check into a function
+ to follow DRY principle.
+
+ * marshal.c (w_uclass): should check singleton method.
+
+ * object.c (rb_obj_dup): dmark and dfree functions must be match
+ for T_DATA type.
+
+ * object.c (rb_obj_dup): class of the duped object must be match
+ to the class of the original.
+
+Sat Aug 24 13:57:28 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/time.rb (Time.rfc2822, Time#rfc2822): preserve localtimeness.
+
+ * lib/pp.rb: pretty_print_cycled is renamed to pretty_print_cycle.
+
+Fri Aug 23 23:59:57 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (method_call): check receiver is defined.
+
+ * eval.c (umethod_call): removed.
+
+Fri Aug 23 23:39:17 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_quote): do not escape \t, \f, \r, \n, for they are
+ not regular expression metacharacters.
+
+ * time.c (time_s_alloc): use time_free instead of free (null check,
+ also serves for type mark).
+
+ * time.c (time_s_at): check dfree function too.
+
+Fri Aug 23 17:06:48 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: RUBY_SO_NAME is msvcrt-rubyXX on mswin32/mingw32.
+
+ * configure.in (sitearch): new var.
+
+ * mkconfig.rb, lib/mkmf.rb (sitearch): ditto.
+
+ * win32/Makefile.sub, win32/setup.mak (sitearch): ditto.
+
+ * instruby.rb: ditto.
+
+Wed Aug 21 16:53:00 2002 Michal Rokos <michal@ruby-lang.org>
+
+ * *.c: int, long types cleanup.
+
+ * parse.y: ditto.
+
+ * re.h, regex.h, ruby.h: ditto.
+
+Wed Aug 21 16:43:19 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_cleanup): should not modify the global
+ variable curr_thread.
+
+Wed Aug 21 16:14:26 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: set ac_cv_func__setjmp to "no" on Cygwin.
+
+ * configure.in: set ac_cv_func_crypt to "no" on MinGW.
+
+Tue Aug 20 21:47 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * io.c (rb_io_fread): remove case EPIPE on bcc32 .
+
+ * win32/win32.c (rb_w32_getc): clear EPIPE error on bcc32.
+
+Tue Aug 20 19:39:03 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * file.c (rb_file_s_expand_path): accept drive letter on Cygwin.
+
+ * file.c (is_absolute_path): ditto.
+
+Tue Aug 20 12:12:25 2002 Tietew <tietew@tietew.net>
+
+ * io.c (rb_io_putc): output via rb_io_write().
+
+Mon Aug 19 19:01:55 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/inf-ruby.el (inf-ruby-keys): ruby-send-definition
+ conflicted with ruby-insert-end.
+
+ * misc/inf-ruby.el (inferior-ruby-mode): compilation-minor-mode.
+
+ * misc/inf-ruby.el (ruby-send-region): send as here document to
+ adjust source file/line. [ruby-talk:47113], [ruby-dev:17965]
+
+ * misc/inf-ruby.el (ruby-send-terminator): added to make unique
+ terminator.
+
+Mon Aug 19 17:08:19 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_initialize_m): frozen check should be moved here
+ from rb_reg_initialize().
+
+Mon Aug 19 15:38:44 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (sort_2): comparison should be done as signed long.
+
+ * array.c (sort_2): should return int, not VALUE.
+
+Mon Aug 19 12:38:33 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_thread_save_context, rb_thread_restore_context):
+ save/restore SEH chain on MS-Windows at thread switch.
+ [ruby-win32:273]
+
+ * eval.c (win32_get_exception_list, win32_set_exception_list):
+ added.
+
+Sat Aug 17 23:01:25 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (sort_2): *a - *b may overflow.
+
+Sat Aug 17 00:25:08 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (ary_new): len*sizeof(VALUE) may be a positive value.
+
+ * array.c (rb_ary_initialize): ditto.
+
+Fri Aug 16 15:58:16 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * io.c (NOFILE): define NOFILE as 64 if not defined.
+
+ * signal.c (sighandler_t): rename to sh_t on dietlibc.
+
+Fri Aug 16 15:37:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * bignum.c (rb_cstr_to_inum): new decimal and octal string.
+
+Fri Aug 16 13:17:11 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_class_allocate_instance): move singleton class
+ check from rb_obj_alloc().
+
+Fri Aug 16 11:47:24 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (rb_io_fread): renamed from io_fread and made extern.
+
+ * marshal.c (r_bytes0): check if successfully read, use
+ rb_io_fread() instead of fread() to be preemptive.
+ (ruby-bugs-ja:PR#294, 295)
+
+ * rubyio.h (rb_io_fread): added.
+
+Fri Aug 16 07:57:26 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (compile_error): must not clear ruby_sourcefile here.
+ (ruby-bugs:PR#364).
+
+ * eval.c (rb_longjmp): set ruby_sourcefile before making
+ backtrace.
+
+Thu Aug 15 20:38:58 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (ruby_current_node) : added to set sourceline on demand.
+
+ * eval.c (error_pos, error_print, rb_longjmp, assign): set source
+ file/line.
+
+ * eval.c (rb_eval): store current node instead of file/line, and
+ preserve it at return.
+
+ * eval.c (module_setup): ditto.
+
+ * eval.c (struct thread): store node instead of file/line.
+
+ * eval.c (rb_thread_raise): ditto.
+
+ * intern.h (ruby_current_node): added.
+
+ * intern.h (ruby_set_current_source): added.
+
+ * parse.y (stmt, arg): not fix position of assignment.
+
+ * parse.y (node_assign): ditto.
+
+ * parse.y (yycompile): clear current node.
+
+Thu Aug 15 00:48:46 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_initialize): should not modify frozen Regexp.
+
+Tue Aug 13 18:33:18 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/tcltklib/tcltklib.c (ip_init): allocation framework.
+
+Tue Aug 13 15:32:14 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_replace): should copy ifnone.
+
+ * hash.c (rb_hash_dup): should preserve HASH_PROC_DEFAULT and
+ HASH_DELETED flags.
+
+ * hash.c (rb_hash_shift): shift from empty hash should not return
+ its default proc.
+
+ * hash.c (rb_hash_default_proc): new method. [new]
+
+Tue Aug 13 00:37:11 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_aref): no need for Bignum check.
+
+ * array.c (rb_ary_aset): explicit Bignum check removed.
+
+ * numeric.c (fix_aref): normalize bignum before bit-op.
+
+ * bignum.c (rb_big_rand): max may be Bignum zero.
+
+ * bignum.c (rb_cstr_to_inum): should normalize bignums, to avoid
+ returning fixable bignum value.
+
+ * bignum.c (rb_uint2big): there should be no zero sized bignum.
+
+Mon Aug 12 23:45:28 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/extmk.rb.in: extmake() that works properly for both tkutil
+ (tk/tkutil.so) and digest/sha1.
+
+Mon Aug 12 22:29:35 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ruby.c (set_arg0): Correct the position of #endif.
+
+Mon Aug 12 17:25:06 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_equal): should check HASH_PROC_DEFAULT too.
+
+Mon Aug 12 16:15:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * bignum.c (rb_big_cmp): raise for NaN. (ruby-bugs-ja:PR#284).
+
+Sun Aug 11 09:34:07 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_eval): set line number from all nodes.
+
+ * eval.c (proc_to_s): show source file/line if available.
+
+ * marshal.c (r_object): register TYPE_BIGNUM regardless real type.
+
+Sat Aug 10 23:47:16 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_cmp): use dbl2big() for Floats, instead of
+ big2dbl().
+
+ * bignum.c (Init_Bignum): rb_big_zero_p() removed. There may be
+ Bignum zero.
+
+Fri Aug 9 13:31:40 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/Win32API/extconf.rb: check existence of <windows.h>.
+
+Thu Aug 8 09:37:02 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/optparse.rb (NilClass): must provide conversion block.
+
+ * lib/optparse.rb (String): ditto.
+
+Thu Aug 8 00:45:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call0): new argument added for original method name.
+ preserve original method name in frame->orig_func.
+
+ * eval.c (is_defined): use frame->orig_func, not last_func.
+
+ * eval.c (rb_eval): ditto.
+
+ * eval.c (method_call): supply data->oid also to rb_call0().
+
+ * object.c (rb_class_allocate_instance): call rb_obj_alloc() when
+ called from alias, thus invoke original "allocate".
+
+ * eval.c (remove_method): removing allocate from classes should
+ cause NameError.
+
+Wed Aug 7 22:12:54 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/optparse.rb (OptionParser::Completion::convert): returned
+ all values not first one.
+
+ * lib/optparse.rb (OptionParser::Switch::parse): return values as
+ is.
+
+ * lib/optparse.rb (OptionParser::order): ditto.
+
+ * lib/optparse/time.rb: prior time.rb.
+
+ * lib/optparse/uri.rb: require standard uri module. thanks to
+ Minero Aoki.
+
+Wed Aug 7 09:51:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_equal): should check default values.
+
+Wed Aug 7 08:44:32 2002 Minero Aoki <aamine@loveruby.net>
+
+ * ext/racc/cparse/cparse.c: reduce goto.
+
+Tue Aug 6 15:19:39 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * string.c (rb_str_rindex): must return -1 if unmatched.
+
+Mon Aug 5 22:41:18 2002 Minero Aoki <aamine@loveruby.net>
+
+ * MANIFEST: add lib/racc/parser.rb.
+
+ * ext/racc/cparse/cparse.c: code refine.
+
+ * ext/racc/cparse/MANIFEST: add depend.
+
+Sun Aug 4 22:30:50 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/curses/curses.c: follow allocation framework.
+
+Sat Aug 3 21:23:56 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_eval): set constant in cbase scope.
+
+ * eval.c (assign): ditto.
+
+Fri Aug 2 09:12:32 2002 Minero Aoki <aamine@loveruby.net>
+
+ * ext/strscan/strscan.c: follow allocation framework.
+
+Fri Aug 2 01:21:52 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (s_recvfrom): update RSTRING len.
+
+Thu Aug 1 17:47:15 2002 Tachino Nobuhiro <tachino@jp.fujitsu.com>
+
+ * parse.y (tokadd_string): ignore backslashed spaces in %w.
+
+Thu Aug 1 14:14:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_find): do not use rb_eval_cmd(); should not accept
+ a string for if_none.
+
+Wed Jul 31 14:11:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_undef): undef should be done for klass, not ruby_class.
+
+Tue Jul 30 19:48:51 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-accurate-end-of-block): restrict search
+ region.
+
+ * misc/ruby-mode.el (ruby-parse-partial): reversed wrong patch.
+
+Tue Jul 30 17:21:13 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-accurate-end-of-block): incomplete block
+ caused infinite loop.
+
+ * misc/ruby-mode.el (ruby-parse-partial): returns nil unless
+ delimiters found.
+
+Tue Jul 30 15:24:07 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/tcltklib/stubs.c (ruby_tcltk_stubs): win32_getenv returns
+ the same address always, so allocate string by ruby_strdup.
+
+ * win32/win32.c: prototype; rb_w32_open_osfhandle().
+
+Tue Jul 30 09:11:07 2002 Minero Aoki <aamine@loveruby.net>
+
+ * eval.c (rb_thread_join_m): add parameter type declaration.
+
+Tue Jul 30 08:37:11 2002 Minero Aoki <aamine@loveruby.net>
+
+ * eval.c (localjump_error): add parameter type declaration.
+
+Mon Jul 29 16:00:54 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb.in: always use File.expand_path for $top_srcdir.
+
+Sat Jul 27 23:07:52 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_to_int): default to_int implementation for every
+ numeric class.
+
+Sat Jul 27 08:09:03 2002 Booker C. Bense <bbense@slac.stanford.edu>
+
+ * re.c (rb_reg_quote): initial part of the string was never copied
+ to the quoted string.
+
+Fri Jul 26 23:03:53 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_eval): no need to convert to string twice.
+
+Fri Jul 26 18:32:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-expr-beg): wrong indent at modifiers
+ after ?.
+
+Fri Jul 26 16:01:16 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb.in (create_makefile): use Regexp in gsub.
+
+ * sample/mkproto.rb: ditto and fix bug.
+
+Fri Jul 26 14:31:06 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * random.c: replace with Mersenne Twister RNG.
+
+Fri Jul 26 12:14:48 2002 Minero Aoki <aamine@loveruby.net>
+
+ * parse.y (yylex): modify to accept a code like "m (a){...}".
+
+Thu Jul 25 09:05:02 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-delimiter): include here document.
+
+ * misc/ruby-mode.el (ruby-deep-arglist): skips spaces after
+ parenthesis when 'space.
+
+ * misc/ruby-mode.el (ruby-imenu-create-index): fix for nested
+ classes.
+
+ * misc/ruby-mode.el (ruby-accurate-end-of-block): added. scan a
+ block in the order.
+
+ * misc/ruby-mode.el (ruby-expr-beg): support for here document.
+
+ * misc/ruby-mode.el (ruby-parse-partial): splitted from
+ ruby-parse-region.
+
+ * misc/ruby-mode.el (ruby-move-to-block): skips RD style comments.
+
+Wed Jul 24 09:47:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (jump_tag_but_local_jump): preserve retval in
+ LocalJumpError exceptions.
+
+ * parse.y (command): no more check for "super outside of method".
+
+ * eval.c (rb_mod_define_method): should set last_class and
+ last_func in the block->frame.
+
+Mon Jul 22 17:23:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (error_handle): should handle TAG_THROW as well.
+
+Fri Jul 19 10:52:32 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): new decimal notation '0d4567'.
+
+Thu Jul 18 11:52:02 2002 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (set_socket): new method.
+
+Thu Jul 18 06:51:24 2002 Minero Aoki <aamine@loveruby.net>
+
+ * parse.y (yylex): fix typo.
+
+Wed Jul 17 18:41:28 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): new octal notation '0o777'.
+
+Mon Jul 15 18:36:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (string_content): every string_content node should
+ return string only. use NODE_EVSTR to coercing.
+
+ * eval.c (rb_eval): NODE_EVSTR support.
+
+Mon Jul 15 10:35:35 2002 Minero Aoki <aamine@loveruby.net>
+
+ * parse.y (heredoc_identifier): fix typo.
+
+Sat Jul 13 09:30:04 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (literal_concat_string): wrong optimization.
+
+Sat Jul 13 01:25:38 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/resolv.rb (Resolv::DNS::open, close): new.
+
+ * lib/optparse.rb, lib/optparse: import.
+
+Fri Jul 12 06:34:05 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: rename HTTP.get_uri get_response.
+
+ * lib/net/http.rb: HTTP.get_print accepts URI objects.
+
+ * lib/net/http.rb: HTTP.get had not work with URI objects.
+
+Fri Jul 12 02:15:58 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * string.c (rb_str_match): fix for string match.
+
+Fri Jul 12 00:02:50 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/stringio/stringio.c (strio_gets_internal): fixed for record
+ separator longer than 1.
+
+Thu Jul 11 17:59:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_quote): avoid unnecessary string allocation.
+
+ * string.c (get_pat): quote metacharacters before compiling a
+ string into a regex.
+
+ * string.c (rb_str_split_m): special treatment of strings of size
+ 1, but AWK emulation. now uses get_pat().
+
+ * string.c (rb_str_match_m): quote metacharacters.
+
+ * string.c (rb_str_match2): ditto.
+
+Thu Jul 11 12:59:23 2002 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/resolv.rb: untaint strings read from /etc/hosts and
+ /etc/resolv.conf to prevent SecurityError when $SAFE==1.
+
+Thu Jul 11 09:00:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_slice_bang): if there's no corresponding
+ substring, slice! should return nil without exception.
+
+Tue Jul 9 20:03:55 2002 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * irb 0.9
+
+Sat Jul 6 07:35:02 2002 Jamie Herre <jfh@gettysgroup.com>
+
+ * array.c (rb_ary_insert): type fixed.
+
+Fri Jul 5 09:17:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_split_m): accept separator value nil as well.
+
+Fri Jul 5 08:59:15 2002 Michal Rokos <michal@ruby-lang.org>
+
+ * enum.c: Fix bug in enum_sort_by and some code indents
+
+Fri Jul 5 05:00:40 2002 Wakou Aoyama <wakou@ruby-lang.org>
+
+ * lib/cgi.rb (CGI#initialize): improvement for mod_ruby.
+ thanks to Sean Chittenden <sean@ruby-lang.org>, Shugo Maeda
+ <shugo@modruby.net>
+
+Fri Jul 5 00:10:09 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_become): was leaking memory.
+
+Thu Jul 4 23:43:26 2002 Minero Aoki <aamine@loveruby.net>
+
+ * parse.y: remove useless function str_extend_p().
+
+Wed Jul 3 14:26:40 2002 Sean Chittenden <sean@ruby-lang.org>
+
+ * lib/net/ftp.rb (get): new method.
+
+ * lib/net/ftp.rb (putt): ditto.
+
+ * lib/net/ftp.rb (binary): ditto.
+
+ * lib/net/ftp.rb (binary=): ditto.
+
+Wed Jul 3 13:57:53 2002 Sean Chittenden <sean@ruby-lang.org>
+
+ * lib/net/ftp.rb (getbinaryfile): the second argument (localfile)
+ is now optional.
+
+ * lib/net/ftp.rb (gettextfile): ditto.
+
+Wed Jul 3 13:45:42 2002 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb: use &block and yield for speed.
+
+Wed Jul 3 02:32:31 2002 Wakou Aoyama <wakou@ruby-lang.org>
+
+ * lib/cgi.rb (CGI#initialize): improvement for mod_ruby.
+
+Tue Jul 2 14:53:10 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_include_module): should not alter other
+ classes/modules by inclusion. by this fix, local order may not
+ be preserved for some cases.
+
+ * class.c (include_class_new): module may be T_ICLASS; retrieve
+ original module information.
+
+Tue Jul 2 14:13:11 2002 Wakou Aoyama <wakou@ruby-lang.org>
+
+ * lib/cgi.rb (CGI#header): accept any type as value.
+
+Sun Jun 30 17:05:29 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (seekdir, telldir): add ac_cv_func_telldir=yes,
+ ac_cv_func_seekdir=yes for MinGW.
+
+Sat Jun 29 01:43:32 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (pipe_finalize, pipe_popen): two-way pipe support for win32.
+
+ * win32/win32.c (ChildRecord, FindFreeChildSlot): ditto.
+
+ * win32/win32.c, win32/win32.h (pipe_exec): new function for two-way
+ pipe support for win32.
+
+ * win32/win32.c, win32/win32.h (FindPipedChildSlot, rb_w32_popen,
+ rb_w32_pclose): removed functions for two-way pipe support for win32.
+
+Fri Jun 28 23:49:34 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * pack.c (pack_unpack): change names of local variables because their
+ names are overlapped.
+
+Fri Jun 28 17:54:07 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/pp.rb: fix object address.
+
+Thu Jun 27 23:55:50 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_stat): fix buffer overflow. (ruby-bugs:PR#329)
+
+Thu Jun 27 20:57:45 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/prettyprint.rb, lib/pp.rb: convenience methods added.
+
+Thu Jun 27 15:22:18 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/prettyprint.rb: re-implemented for incremental output to handle
+ huge data. API is changed a bit.
+
+ * lib/pp.rb: adapt new pretty printing API.
+
+Thu Jun 27 08:28:18 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (literal_concat_string): non-string last expression in
+ #{} was ignored when followed by literal.
+
+Thu Jun 27 03:42:04 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_expr_str): need to process backslashes properly.
+
+Wed Jun 26 17:33:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_any_to_a): declare Object#to_a to be obsolete.
+
+ * object.c (rb_Array): do not convert nil into [] automagically.
+
+Wed Jun 26 15:40:00 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (words, qwords): word list literal rules.
+
+ * parse.y (parse_string): ditto.
+
+ * parse.y (yylex): %W: word list literal with interpolation. [new]
+
+Tue Jun 25 18:53:34 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (string1, xstring, regexp): moved lex_strnest
+ initialization to string_contents/xstring_contents.
+
+Tue Jun 25 19:24:38 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * dln.c: remove definition rb_loaderror().
+
+Tue Jun 25 00:34:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_Integer): use "to_int" instead of
+ "to_i". [experimental]
+
+ * object.c (nil_to_f): new method.
+
+ * object.c (rb_Integer): Symbols and nil should cause error.
+
+ * object.c (rb_Float): nil should cause error.
+
+Tue Jun 25 00:21:00 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * dln.c: remark definition rb_loaderror().
+
+Tue Jun 25 00:14:07 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (string_dvar): allow back references in interpolation.
+
+Mon Jun 24 16:32:31 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_eval): NODE_EVSTR is no longer used.
+
+ * eval.c (eval): not enforce to make assigned variables dynamic.
+
+ * parse.y (string): split rules to strings/xstring/regexp to allow
+ arbitrary statements inside string interpolation.
+
+ * parse.y (here_document): splitted into three phases.
+
+ * parse.y (literall_append, literal_concat): added.
+ append/concatenate string literals.
+
+ * sample/test.rb (valid_syntax): adjust line number for BEGIN.
+
+ * lib/mkmf.rb (create_makefile): get rid of nested string.
+
+ * lib/mkmf.rb (install_rb): site-install didn't work properly.
+
+Sun Jun 23 00:19:10 2002 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb, lib/date/format.rb, sample/cal.rb, sample/goodfriday.rb:
+ updated to the new version (based on date2 3.3).
+
+Sat Jun 22 14:41:33 2002 Guy Decoux <ts@moulon.inra.fr>
+
+ * ext/socket/socket.c (sock_addrinfo): make all 3 versions of
+ getaddrinfo happy. [ruby-core:00184]
+
+Fri Jun 21 18:49:58 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): __END__ should not be effective within
+ string literals.
+
+Thu Jun 20 21:09:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/readline/readline.c (readline_readline): get rid of
+ libreadline's bug. (ruby-bugs-ja:PR#268)
+
+Thu Jun 20 17:10:27 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/ftool.rb (BUFSIZE): tuning, set buffer length to 8192.
+
+ * configure.in (__NO_ISOCEXT): add for mingw-runtime 2.0-2.
+
+ * configure.in (__MSVCRT__): removed because it is defined
+ in the GCC specs.
+
+Wed Jun 19 14:46:18 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb, lib/mkmf.rb (xsystem): open the log file if xsystem
+ is called.
+
+Wed Jun 19 01:01:13 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (here_document): should be aware of __END__ within here
+ documents.
+
+Wed Jun 19 00:50:50 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (yylex): ? followed by successive word characters is
+ ternary operator not numeric literal.
+
+ * parse.y (yylex): commands after break/next/rescue can take
+ arguments. (ruby-bugs-ja:PR#265)
+
+Tue Jun 18 19:20:16 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/mkexports.rb: remove unnecessary exports. (ruby-dev:17418)
+
+Tue Jun 18 12:50:17 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (yylex): should pushback proper char after '<<'.
+
+ * parse.y (range_op, cond0, cond): get rid of doubled warnings.
+
+ * parse.y (value_expr): reduce recursion level.
+
+ * parse.y (logop): ditto.
+
+Mon Jun 17 11:11:34 2002 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * string.c (rb_str_crypt): result need not be tainted always.
+
+Mon Jun 17 10:51:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * dln.c (dln_load): need to preserve dln_strerror() result,
+ calling other dl family can clear it.
+
+Sat Jun 15 22:56:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): obsolete '?<whitespace>'; use '?\s', '?\n',
+ etc, instead.
+
+Sat Jun 15 18:51:13 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * dir.c (glob_helper): Use lstat() instead of stat() so it catches
+ a dead symlink. Given a dead symlink named "a", Dir.glob("?")
+ did catch it but Dir.glob("a") somehow didn't.
+
+Sat Jun 15 01:59:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): no here document after a dot.
+
+ * parse.y (yylex): should have set lex_state after '`'.
+
+ * parse.y (yylex): should have set lex_state properly after
+ tOP_ASGN.
+
+Fri Jun 14 21:01:48 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * bcc32/mkexports.rb: insert sleep(1) for win9x.
+
+ * bcc32/configure.bat: change return code LF -> CRLF for win9x.
+
+ * win32/win32.c: fix rb_w32_open_osfhandle()
+
+Fri Jun 14 15:22:19 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (read_escape): deny zero-width hexadecimal character.
+ (ruby-bugs-ja:PR#260)
+
+ * parse.y (tokadd_escape): ditto.
+
+ * regex.c (re_compile_pattern): ditto.
+
+Fri Jun 14 00:49:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big2dbl): return canonical HUGE_VAL for infinity.
+
+Thu Jun 13 09:43:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (svalue_to_avalue): v may be Qundef. This fix was
+ suggested by Guy Decoux.
+
+Thu Jun 13 00:33:49 2002 takuma ozawa <metal@mine.ne.jp>
+
+ * hash.c (rb_hash_s_create): use rb_hash_aset() instead of calling
+ st_insert() directly, to dup&freeze string keys.
+
+Thu Jun 13 00:12:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): proper error message for "@@0".
+
+ * parse.y (yylex): paren to parse_string() must be zero for
+ unparenthesized strings.
+
+ * parse.y (str_extend): broken string when unterminated "#{".
+
+ * enum.c (enum_sort_by): had a bug in 1 element enumeration.
+
+Wed Jun 12 18:04:44 2002 akira yamada <akira@arika.org>
+
+ * uri/common.rb (REGEXP::PATTERN::X_ABS_URI): 'file:/foo' is valid.
+
+ * uri/generic.rb (Generic#xxx=): should return substituted value.
+ (ruby-dev:16728.)
+
+ * test/generic.rb (test_set_component): added tests for the above
+ change.
+
+Wed Jun 12 02:38:00 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (stmt): fix typo.
+
+Wed Jun 12 01:10:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): 'do' should return kDO_BLOCK on EXPR_ENDARG.
+
+ * parse.y (singleton): "def (()).a end" dumped core.
+
+ * parse.y (range_op): node may be null.
+
+ * parse.y (match_gen): ditto.
+
+Tue Jun 11 19:20:34 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (LIBRUBY): rename to lib$(LIBRUBY_SO).a on Cygwin/MinGW.
+
+ * configure.in, cygwin/GNUmakefile: use dllwrap when --disable-shared
+ is specified.
+
+Tue Jun 11 17:12:04 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): void value check for "..", "...", "!", and "not".
+
+ * parse.y (match_gen): void value check for "=~".
+
+ * parse.y (value_expr): check NODE_AND and NODE_OR recursively.
+
+ * parse.y (cond0): void value check added for conditionals.
+
+Tue Jun 11 13:18:47 2002 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (noop): new method.
+
+ * lib/net/ftp.rb (site): ditto.
+
+Tue Jun 11 13:15:41 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bcc32/Makefile.sub: set PROCESSOR_LEVEL to 6 if it's too big value.
+
+ * win32/Makefile.sub: ditto.
+
+Tue Jun 11 12:37:46 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * bcc32/configure.bat fix.
+
+Tue Jun 11 10:18:23 2002 KONISHI Hiromasa <konishih@fd6.so-net.ne.jp>
+
+ * new platform [bccwin32] merged.
+ - create new folder bcc32
+ - modify any files for bccwin32
+ error.c, file.c, hash.c, io.c, instruby.rb,
+ ext/extmk.rb.in,
+ lib/mkmf.rb, lib/ftools.rb,
+ ext/digest/defs.h,
+ ext/dl/depend, ext/dl/dl.c, ext/dl/sym.c, ext/dl/extconf.rb,
+ ext/socket/extconf.rb,
+ ext/pty/extconf.rb,
+ ext/tcltklib/extconf.rb
+ ext/Win32API/Win32API.c,
+ win32/dir.h, win32/win32.c, win32/win32.h, win32/resource.rb
+
+Mon Jun 10 19:02:19 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * numeric.c (fix_lshift): negative shift count means right shift.
+ (ruby-bugs-ja:PR#248)
+
+ * numeric.c (fix_rshift): return -1 when left side operand is
+ negative. (ruby-bugs-ja:PR#247)
+
+ * parse.y (yylex): `0_' should be an error. (ruby-bugs-ja:PR#249)
+
+Mon Jun 10 01:53:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): ruby_frame->last_func may be null, if it's
+ called outside of a method.
+
+ * parse.y (arg): use INT2NUM, not INT2FIX for tUMINUS.
+
+ * parse.y (arg): unnecessary negative tPOW treatment.
+
+ * parse.y (tokadd_escape): wrong backslash escapement.
+
+Sun Jun 9 17:40:41 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl: change the callback mechanism.
+
+Sat Jun 8 00:48:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (stmt,arg): too much void value check.
+
+ * parse.y (stmt,arg): need to check void value on rules which does
+ not use node_assign().
+
+Thu Jun 6 19:50:39 2002 KONISHI Hiromasa <H_Konishi@ruby-lang.org>
+
+ * sample/biorhythm.rb (getPosiiton,etc)
+ fix at changing Date module ( Date is changed Fixnum to Rational )
+
+Thu Jun 6 17:42:39 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (ipaddr): need not to taint hostnames.
+
+Thu Jun 6 12:04:30 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.status): use sub! instead of []= because
+ []= causes exception.
+
+Thu Jun 6 11:42:15 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * lib/thread.rb (Queue::pop): get rid of race condition.
+
+Wed Jun 5 01:56:47 2002 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: Stop the running zombi-eventloop when
+ mainloop_watchdog is killed.
+
+Tue Jun 4 23:09:24 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_include): should be based on "<=>", whereas
+ member? still is based on "each".
+
+ * range.c (range_min,range_max): redefine methods based on "<=>".
+
+Tue Jun 4 18:28:37 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/socket/extconf.rb: The IPv6 stack of Cygwin is still incomplete.
+
+ * ext/Win32API/extconf.rb: refactoring.
+
+Tue Jun 4 07:03:33 2002 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tkfont.rb: Fix bugs on TkFont.init_widget_font for Tk8.x.
+
+ * ext/tk/lib/tkafter.rb: Add self to 1st argument of interval-
+ and loop-proc
+ TkAfter#current_interval returns an interval (sleep) time value
+ TkAfter#current_args returns an array of arguments
+ TkAfter#return_value returns a return value of last loop-proc
+
+ * ext/tk/lib/tk*.rb: Allow to use Symbols for parameters.
+
+ * ext/tk/lib/tkcanvas.rb: (TkcItem) Add 'coords' parameter to the
+ canvas item constructor (for new notation of constructor).
+
+ * ext/tcltklib/tcltklib.c: New 'mainloop' and 'mainloop_watchdog'.
+
+ * ext/tk/lib/tk.rb: (Tk.restart) Add 'app-name' paramater and
+ 'use' parameter.
+
+ * ext/tk/lib/tk.rb: Add new parameter 'widgetname' to the widget
+ constructor to support effective use of Resource Database.
+
+ * ext/tk/lib/tk.rb: TkOption::get always returns a tainted string.
+
+Tue Jun 4 00:45:50 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/socket/addrinfo.h: typo.
+
+ * ext/socket/getaddrinfo.c (gai_strerror): make literals const.
+
+ * ext/socket/socket.c (init_inetsock): ensures resources are
+ freed at exceptions.
+
+ * ext/socket/socket.c (init_unixsock): ditto.
+
+ * ext/socket/socket.c (udp_connect): ditto.
+
+Mon Jun 3 20:39:51 2002 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/extconf.rb : change PLATFORM with RUBY_PLATFORM.
+
+Mon Jun 3 07:07:07 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (here_document): check if identifier is terminated.
+ (ruby-bugs-ja:PR#239)
+
+ * parse.y (yylex): should pushback proper char after '**'.
+ (ruby-bugs-ja:PR#240)
+
+Mon Jun 3 05:56:17 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_aset): should raise error if an indexing string
+ is not found in the receiver.
+
+ * sprintf.c (rb_f_sprintf): "%d" should convert objects into
+ integers using Integer().
+
+Sat Jun 1 19:20:07 2002 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole: merge from rough.
+
+Fri May 31 17:11:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile::size): added.
+
+Thu May 30 12:52:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_step): iteration done using "+" if elements are
+ Numeric. Otherwise using "succ".
+
+ * range.c (range_each): iteration done using "succ". If the
+ elements does not respond to "succ", raise TypeError. As a
+ result, all Enumerable methods, e.g. collect, require elements
+ to respond to "succ".
+
+ * range.c (range_member): comparison done using "each", if
+ elements are non-Numeric or no-"succ" objects. Otherwise
+ compare using "<=>".
+
+ * range.c (Init_Range): remove "size" and "length".
+
+Thu May 30 09:16:36 2002 Wakou Aoyama <wakou@ruby-lang.org>
+
+ * lib/cgi.rb: if StringIO is usable then use it.
+
+Wed May 29 18:55:47 2002 KONISHI Hiromasa <H_Konishi@ruby-lang.org>
+
+ * function renames my* and win32_* to rb_w32_* in win32/win32.c
+ fixed files win32/win32.c, win32/win32.h, win32/dir.h,
+ hash.c, rubysig.h, signal.c, ext/socket/socket.c
+
+Wed May 29 17:32:55 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * time.c (tmcmp, search_time_t): activate unless HAVE_TIMEGM.
+
+Wed May 29 13:45:15 2002 Wakou Aoyama <wakou@ruby-lang.org>
+
+ * lib/cgi.rb: not use const if GET, HEAD. check multipart form head.
+
+Tue May 28 17:56:02 2002 Sean Chittenden <sean@ruby-lang.org>
+
+ * parse.y: yyparse #defines moved from intern.h
+
+ * ruby.c (proc_options): access prefixed "ruby_yydebug".
+
+ * applied modifies to pacify some of gcc -Wall warnings.
+
+Tue May 28 14:07:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): no more ugly hack for "**", so that "-2**2" to be
+ parsed as "(-2)**2", whereas "- 2**2" or "-(2)**2" to be parsed
+ as "-(2**2)".
+
+ * parse.y (yylex): '-2' to be literal fixnum. [new]
+
+Tue May 28 12:13:37 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (scope_node): trick to keep the node has a scope.
+
+ * eval.c (rb_eval): NODE_EVSTR: write back local_tbl to the node.
+
+ * eval.c (rb_eval): NODE_SCOPE: hold the scope node in ruby_scope.
+
+ * eval.c (module_setup): ditto.
+
+ * eval.c (rb_call0): ditto.
+
+ * node.h (NEW_DASGN, NEW_DASGN_CURR): remove surplus semicolons.
+
+Fri May 24 09:06:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_arg): nil test against v[6] (usec).
+
+Thu May 23 16:39:21 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ruby.c (proc_options): option parsing problem.
+ (ruby-bugs-ja:PR#233)
+
+Thu May 23 09:13:56 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (proc_options): removed "-*-" support for #! line.
+
+ * io.c (rb_io_s_sysopen): new method to get a raw file
+ descriptor. [new]
+
+ * ext/socket/socket.c (tcp_sysaccept): new method to return an
+ accepted socket fd (integer). [new]
+
+ * ext/socket/socket.c (unix_sysaccept,sock_sysaccept): ditto.
+
+Wed May 22 21:26:47 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ruby.c (proc_options): -T consumes digits only.
+
+Wed May 22 20:18:31 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: need not link vsnprintf.o on MinGW.
+
+Wed May 22 18:34:23 2002 Minero Aoki <aamine@loveruby.net>
+
+ * parse.y (yylex): Here-document label ate '-'.
+
+Tue May 21 13:25:18 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-font-lock-keywords): symbols end with
+ '_'.
+
+Tue May 21 04:48:37 2002 Sean Chittenden <sean@chittenden.org>
+
+ * lib/cgi-lib.rb: Checking for constant MOD_RUBY instead of
+ environment variable. Remove a mod_ruby warning and use
+ Apache::request.headers_out[] instead.
+
+Tue May 21 01:16:46 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (bodystmt): ensure clause was executed on else clause
+ without rescue clause.
+
+Tue May 21 00:20:25 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl/ptr.c: rename PtrData::alloc to PtrData::malloc.
+
+ * ext/dl/lib/dl/struct.c: rename Struct#alloc to Struct#malloc.
+
+Mon May 20 14:29:14 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (Init_Object): should do exact match for Module#==.
+
+ * compar.c (cmp_eq): returns 'false' if <=> returns 'nil'.
+
+ * compar.c (cmp_gt,cmp_ge,cmp_lt,cmp_le,cmp_between): ditto.
+
+Mon May 20 13:28:52 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * io.c (rb_io_clone): writing stream was not copied properly.
+
+Sat May 18 21:38:11 2002 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb, lib/date/format.rb, lib/parsedate.rb:
+ updated to the new version (based on date2 3.2.1).
+
+Sat May 18 21:18:00 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): add VC++4/5 support about noreturn
+ directive.
+
+Sat May 18 02:16:41 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): should propagate taintedness.
+
+ * pack.c (pack_unpack): ditto.
+
+Fri May 17 16:16:19 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * sample/test.rb: use eval instead of './miniruby -c',
+ in order to check a syntax error.
+
+Thu May 16 14:46:34 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_thread_select): cleanup conditional compilation.
+
+Wed May 15 06:13:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_schedule): need to preserve errno before
+ calling rb_trap_exec().
+
+ * regex.c (calculate_must_string): a bug in charset/charset_not
+ parsing.
+
+Tue May 14 18:17:44 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * win32/Makefile.sub: config.h inlined. and catch up with the
+ latest change.
+
+ * win32/config.h.in: no longer used.
+
+Tue May 14 14:49:05 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * gc.c (is_pointer_to_heap): avoid GCC 3.1 warnings.
+
+ * missing/strftime.c (timezone): it should take no argument on Cygwin.
+
+Tue May 14 03:07:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_clear_cache_by_class): new function.
+
+ * eval.c (set_method_visibility): should have clear cache for
+ updated visibility.
+
+Mon May 13 14:38:33 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * djgpp/config.hin, djgpp/config.sed: catch up with the latest change.
+
+Mon May 13 01:59:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flo_to_s): default format precision to be "%.16g".
+
+ * util.c (ruby_strtod): use own strtod(3) implementation to avoid
+ locale hell. Due to this change "0xff".to_f no longer returns 255.0
+
+Sun May 12 03:01:08 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * missing.h: add for missing/*.c.
+
+ * ruby.h: add `#include "missing.h"'.
+
+ * Makefile.in: add the dependency of missing.h by gcc -MM.
+
+ * MANIFEST: add missing.h
+
+Sat May 11 23:24:52 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl: enable dl's stack emulation for constructing function call.
+
+Sat May 11 10:52:09 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * dir.c (glob_helper): remove escaping backslashes.
+
+Sat May 11 02:46:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (avalue_to_yvalue): new function to distinguish yvalue
+ (no-arg == Qundef) from svalue (no-arg == Qnil).
+
+ * eval.c (rb_yield_0): use avalue_to_yvalue().
+
+ * eval.c (assign): warn if val == Qundef where it means rhs is
+ void (e.g. yield without value or call without argument).
+
+Fri May 10 19:00:47 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * parse.y (here_document): preserve line number begins here
+ document.
+
+Fri May 10 01:55:44 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_thread_join): added an argument to limit time to wait
+ the thread.
+
+ * eval.c (rb_thread_join_m): new. and added optional argument.
+
+Wed May 8 23:48:40 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (value_expr): need not to warn for WHILE and UNTIL,
+ since they can have return value (via valued break).
+
+Tue May 7 17:13:40 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: forgot to add '-Wl,' to the gcc option on Cygwin/MinGW.
+
+Tue May 7 15:41:33 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/iconv/iconv.c (iconv_try): should initialize exceptions
+ properly. (ruby-bugs-ja:PR#232)
+
+Tue May 7 15:28:03 2002 Minero Aoki <aamine@loveruby.net>
+
+ * eval.c (rb_yield_0): The destination of the goto jump was wrong.
+
+Tue May 7 09:17:51 2002 Minero Aoki <aamine@loveruby.net>
+
+ * eval.c (superclass): undesirable "unexpected return" when the
+ superclass is not a Class.
+
+Sun May 5 06:53:45 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/mkmf.rb: exclude topdir from the system configuration
+ section and prevent it from being overridden.
+
+Fri May 3 20:19:00 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: add #include <errno.h> in AC_CHECK_DECLS().
+
+ * win32/config.h.in: define HAVE_DECL_SYS_NERR.
+
+Thu May 2 23:42:40 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_s_quote): # also should be quoted.
+
+Thu May 2 18:27:13 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb.in, lib/mkmf.rb: use 'do...end' instead of '{}' for
+ Borland make.
+
+Thu May 2 08:01:56 2002 Chris Thomas <kenshin@apple.com>
+
+ * error.c: use HAVE_DECL_SYS_NERR instead of platform names.
+
+Tue Apr 30 09:23:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_step): better iteration condition for float
+ values; suggested by Masahiro TANAKA <masa@ir.isas.ac.jp>.
+
+Tue Apr 30 05:59:42 2002 Michal Rokos <m.rokos@sh.cvut.cz>
+
+ * range.c (range_step): step (for Range#step method) <= 0 makes no
+ sense, thus ArgError will be raised.
+
+ * range.c (range_each): Range#each method is special case for
+ Range#step(1)
+
+Mon Apr 29 18:46:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_find_file): load must be done from an absolute path if
+ $SAFE >= 4.
+
+Sun Apr 28 17:01:56 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.c (insert): fix prototype for ANSI C.
+
+Fri Apr 26 13:47:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_partition): new method. [new]
+
+Fri Apr 26 13:41:00 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_s_quote): quote whitespaces for /x cases.
+
+Fri Apr 26 06:48:23 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl/ptr.c (cary2ary): missing break in switch statements.
+
+Fri Apr 26 09:35:47 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_proc_new): make Proc from C function. [new]
+
+ * intern.h (rb_proc_new): prototype.
+
+Wed Apr 24 14:56:46 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (proc_to_proc): return self. [new]
+
+ * eval.c (block_pass): no need to convert if block is Proc.
+
+Wed Apr 24 14:21:41 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: set size of the initial stack from
+ 2MB to 32MB on MinGW/Cygwin.
+
+Wed Apr 24 14:06:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_step): try to reduce residual on Float operations.
+
+Wed Apr 24 06:48:31 2002 Koji Arai <jca02266@nifty.ne.jp>
+
+ * io.c (rb_io_mode_flags): both 'r+b' and 'rb+' should be allowed.
+
+ * io.c (rb_io_mode_modenum): ditto.
+
+Wed Apr 24 01:16:14 2002 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_mark): must check if ptr is NULL
+ first. [ruby-talk:38873]
+
+ * lib/mkmf.rb (create_makefile): should print depend file when
+ make is other than nmake.
+
+Wed Apr 24 00:37:12 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/extmk.rb.in (create_makefile): use `{$(srcdir)}' directive instead
+ of `$(srcdir)/' when including depend file.
+
+ * lib/mkmf.rb (create_makefile): add `{$(srcdir)}' when including depend
+ file.
+
+Tue Apr 23 12:58:18 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_memerror): rename from mem_error, and exported.
+
+ * gc.c (Init_GC): pre-allocate NoMemoryError instance.
+
+ * object.c (convert_type): error message changed from "failed to
+ convert" to "cannot convert", since it does not try to convert
+ if an object does not respond to the converting method.
+
+Mon Apr 22 09:31:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (block_pass): convert Method to Proc using
+ rb_check_convert_type().
+
+ * object.c (rb_check_convert_type): always convert T_DATA
+
+ * eval.c (rb_thread_cleanup): should not terminate main_thread by
+ Fatal error.
+
+ * regex.c (is_in_list): need to not exclude NUL and NEWLINE.
+
+Sat Apr 20 00:19:13 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_expr_str): wrong backslash escapement.
+
+ * re.c (rb_reg_expr_str): do not escape embedded space
+ characters.
+
+Fri Apr 19 22:03:40 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub: add -DNT to $CFLAGS instead of $CPPFLAGS.
+
+ * win32/setup.mak: ditto.
+
+Fri Apr 19 17:24:22 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): T_DATA process patch from Joel VanderWerf
+ <vjoel@PATH.Berkeley.EDU>. This is temporary hack; it remains
+ undocumented, and it will be removed when marshaling is
+ re-designed.
+
+ * marshal.c (r_object): ditto.
+
+Fri Apr 19 17:10:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_step): Integer#step is moved to Numeric#step;
+ Fixnum#step is merged into this method.
+
+ * numeric.c (int_dotimes): Fixnum#times is merged.
+
+ * numeric.c (int_upto): Fixnum#upto is merged.
+
+ * numeric.c (int_downto): Fixnum#downto is merged.
+
+Fri Apr 19 16:22:55 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/socket/extconf.rb: include <windows.h>, <winsock.h> on _WIN32.
+
+ * win32/win32.c: include <mswsock.h> on __MINGW32__.
+
+ * configure.in: cleanup for autoconf 2.5x.
+
+ * configure.in: use gcc -shared instead of dllwrap on Cygwin/MinGW.
+
+ * ext/extmk.rb, lib/mkmf.rb: get rid of "--def=".
+
+Fri Apr 19 14:57:44 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * re.c (rb_reg_to_s): remove redundant shy group.
+
+Fri Apr 19 01:08:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_cleanup): current thread may be THREAD_STOPPED,
+ for example when terminated from signal handler.
+
+Thu Apr 18 19:03:15 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_compile_pattern): remove /p support.
+
+ * regex.h: ditto.
+
+ * parse.y (parse_regx): ditto.
+
+Thu Apr 18 17:01:43 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl/ptr.c (rb_dlptr_cast): removed.
+
+Thu Apr 18 17:01:43 2002 Tanaka Akira <akr@m17n.org>
+
+ * re.c (rb_reg_to_s): new function for Regexp#to_s.
+
+Wed Apr 17 23:55:34 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/Setup*, ext/bigfloat/*: Back out the import of BigFloat in
+ favor of its forthcoming successor, BigDecimal.
+
+Wed Apr 17 16:53:33 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_expr_str): should treat backslash specially in
+ escaping.
+
+Wed Apr 17 08:16:41 2002 Michal Rokos <m.rokos@sh.cvut.cz>
+
+ * io.c: complete off_t handling; missing argument for
+ fptr_finalize(); polished rb_scan_args call.
+
+Wed Apr 17 00:01:59 2002 Michal Rokos <m.rokos@sh.cvut.cz>
+
+ * dir.c: wrap multi-statement macro by do { } while (0)
+
+ * eval.c, numeric,c, sprintf.c, util.c: ditto.
+
+Tue Apr 16 08:59:50 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (assign): convert mrhs to mvalue.
+
+Mon Apr 15 18:12:57 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_eq): check `y == x' if y is neither Fixnum,
+ Bignum, nor Float.
+
+Mon Apr 15 09:27:31 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_unpack): should treat 'U' in character unit, not in
+ byte unit.
+
+ * error.c (exc_initialize): should clear backtrace information.
+
+Sat Apr 13 23:42:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_fptr_cleanup): should close IO created by IO.new(fd).
+
+ * rubyio.h: remove FMODE_FDOPEN
+
+Fri Apr 12 12:54:04 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub: use missing/acosh.c.
+
+ * win32/config.h.in: define HAVE_COSH, HAVE_SINH, and HAVE_TANH.
+
+Fri Apr 12 02:58:55 2002 Koji Arai <jca02266@nifty.ne.jp>
+
+ * struct.c (rb_struct_select): fix typo.
+
+Fri Apr 12 00:34:17 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * MANIFEST (missing/acosh.c): added.
+
+ * Makefile.in (missing/acosh.c): ditto.
+
+ * Makefile.in (missing/fileblocks.c): ditto.
+
+ * configure.in (AC_REPLACE_FUNCS): check acosh() on behalf of
+ inverse hyperbolic functions, asinh() and atanh().
+
+ * missing/acosh.c: added for acosh(), asinh() and atanh().
+
+Thu Apr 11 20:01:44 2002 Masahiro Tomita <tommy@tmtm.org>
+
+ * io.c (io_write): check error if written data is less than
+ specified size to detect EPIPE.
+
+Thu Apr 11 19:10:37 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * io.c (remain_size): IO#read returns "" if file.size == 0.
+
+ * random.c (rand_init): add check for initstate(3).
+
+ * configure.in: ditto.
+
+Thu Apr 11 09:31:19 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl/ptr.c: raise() -> rb_raise(). (Thanks Tetsuya Watanabe)
+
+ * ext/dl/sym.c: ditto.
+
+Thu Apr 11 07:57:48 2002 Michal Rokos <m.rokos@sh.cvut.cz>
+
+ * eval.c (assign): ruby_verbose should be surrounded by RTEST().
+
+ * object.c (rb_str2cstr): ditto.
+
+ * parse.y (void_expr): ditto.
+
+ * parse.y (void_stmts): ditto.
+
+ * variable.c (rb_ivar_get): ditto.
+
+ * variable.c (rb_cvar_set): ditto.
+
+ * variable.c (rb_cvar_get): ditto.
+
+Thu Apr 11 07:02:31 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl: Add dl.txt instead of README and README.html.
+
+Thu Apr 11 01:55:52 2002 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi/session.rb: support for multipart form.
+
+Wed Apr 10 18:42:23 2002 Tachino Nobuhiro <tachino@jp.fujitsu.com>
+
+ * dir.c (glob_helper): should have proceed link when link->path
+ was non existing symbolic link.
+
+Wed Apr 10 17:30:19 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_obj_remove_instance_variable): raise NameError if
+ specified instance variable is not defined.
+
+ * variable.c (generic_ivar_remove): modified to check ivar
+ existence.
+
+Wed Apr 10 14:16:45 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * misc/ruby-mode.el (ruby-font-lock-keywords): fontify symbols for
+ unary operators and aset.
+
+Tue Apr 9 13:40:31 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * lib/mkmf.rb (try_link0): need expand macro in command, sync with
+ ext/extmk.rb.in.
+
+ * lib/mkmf.rb (try_cpp): ditto.
+
+ * lib/mkmf.rb (egrep_cpp): ditto.
+
+Tue Apr 9 12:44:59 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/stringio/stringio.c (check_modifiable): performance
+ improvement. avoid calling rb_str_modify() twice.
+
+ * ext/stringio/stringio.c (strio_ungetc): ditto.
+
+ * ext/stringio/stringio.c (strio_putc): ditto.
+
+ * ext/stringio/stringio.c (strio_write): ditto, and use
+ rb_str_cat() as possible.
+
+Tue Apr 9 05:17:48 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * re.c (match_select): fix index references and make
+ MatchData#select actually work.
+
+Tue Apr 9 00:20:52 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_file_s_extname): new method based on the proposal
+ (and patch) from Mike Hall. [new]
+
+Mon Apr 8 04:50:51 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (error_handle): default to 1 unless status is set.
+
+ * eval.c (ruby_options): guard error_handle() with PROT_NONE.
+
+ * eval.c (ruby_stop): ditto.
+
+Mon Apr 8 01:22:24 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * math.c (math_acosh): added. [new]
+
+ * math.c (math_asinh): ditto.
+
+ * math.c (math_atanh): ditto.
+
+ * struct.c (rb_struct_each_pair): method added. [new]
+
+Sat Apr 6 02:04:49 2002 Guy Decoux <ts@moulon.inra.fr>
+
+ * class.c (rb_singleton_class): wrong condition; was creating
+ unnecessary singleton class.
+
+Sat Apr 6 01:09:41 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (remove_sign_bits): simplifies the condition.
+
+ * bignum.c (get2comp): calculate proper carry over.
+
+Fri Apr 5 05:07:28 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl: Add dl/struct.rb.
+
+Thu Apr 4 14:08:52 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl/lib/dl/import.rb: Get rid of ineffective
+ encoding/decoding procedures.
+
+Thu Apr 4 01:08:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (int_step): step may be a float less than 1.
+
+Wed Apr 3 20:42:34 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl: Merge Nakada's patch.
+
+ * ext/dl/dl.h: define StringValuePtr for ruby-1.6.
+
+Wed Apr 3 15:37:24 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl: Add dl/types.rb.
+
+Wed Apr 3 01:54:10 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/extmk.rb.in (enable_config): follow lib/mkmf.rb.
+
+Tue Apr 2 19:59:13 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * ext/dl: Merge from rough.
+
+Tue Apr 2 15:17:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * Makefile.in (CPPFLAGS): remove @includedir@.
+
+ * lib/mkmf.rb (create_makefile): ditto.
+
+ * ext/extmk.rb.in (create_makefile): ditto.
+
+Tue Apr 2 15:09:05 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_addrinfo): should clear addrinfo hints.
+
+Mon Apr 1 23:48:12 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
+
+ * lib/mkmf.rb: install any files using $INSTALLFILES.
+ (see also [ruby-dev:16683])
+
+Mon Apr 1 17:25:50 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_fptr_cleanup): need flush even when io will not be
+ closed.
+
+ * io.c (rb_io_initialize): was calling wrong function
+ rb_io_mode_flags().
+
+Mon Apr 1 16:52:00 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/sdbm/init.c (each_pair): moved prototype before the
+ definition.
+
+ * ext/racc/cparse/cparse.c (call_scaniter): ditto.
+
+Mon Apr 1 15:11:40 2002 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/racc/cparse/cparse.c: prototype; call_scaniter().
+
+ * ext/sdbm/init.c: prototype; each_pair().
+
+ * ext/tcltklib/tcltklib.c: prototypes; _timer_for_tcl() and ip_ruby(),
+ Nobu's patch at [ruby-dev:14483].
+
+Mon Apr 1 10:56:40 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (match_setter): it's OK to assign nil to $~.
+
+Mon Apr 1 03:55:46 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_fptr_cleanup): do not close IO created by for_fd().
+
+ * io.c (rb_io_initialize): mark IO created by for_fd
+
+ * ext/socket/socket.c (bsock_s_for_fd): ditto.
+
+Fri Mar 29 20:21:58 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * lib/mkmf.rb (create_makefile): default FLAGS to empty strings.
+
+Fri Mar 29 16:36:52 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * lib/mkmf.rb (arg_config): should use Shellwords::shellwords like
+ ext/extmk.rb.in.
+
+ * lib/mkmf.rb (enable_config): default had priority over command
+ line options and configure_args.
+
+ * lib/mkmf.rb: support autoconf 2.53 style variables from
+ environment.
+
+ * lib/mkmf.rb: add directory options.
+
+Fri Mar 29 15:49:29 2002 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/README.win32: follow recent changes.
+
+Fri Mar 29 14:44:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_fflush): DRY patch from /Christoph applied.
+
+Thu Mar 28 18:58:13 2002 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.status): reflect user defined $CC in
+ config.status.
+
+Thu Mar 28 18:03:51 2002 Minero Aoki <aamine@loveruby.net>
+
+ * ext/strscan/strscan.c: add taint check.
+
+ * ext/strscan/strscan.c: #getch/#get_byte should set regexp
+ registers.
+
+ * ext/strscan/strscan.c: remove useless #include directive.
+
+ * ext/strscan/strscan.c: refactor struct strscanner.
+
+Thu Mar 28 14:51:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_addrinfo): should specify socktype
+ from outside.
+
+Wed Mar 27 17:04:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_binmode): should call next_argv() to initialize ARGF.
+
+ * io.c (argf_filename): ditto.
+
+ * io.c (argf_file): ditto.
+
+Wed Mar 27 14:47:32 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * io.c (READ_DATA_PENDING): configure.in has supported for uClibc,
+ so remove uClibc stuff.
+
+Wed Mar 27 13:14:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_sysseek): new method based on a patch from Aristarkh
+ A Zagorodnikov <xm@bolotov-team.ru>. [new]
+
+ * io.c (READ_DATA_PENDING): use !feof(fp) for default behavior.
+
+Tue Mar 26 20:28:50 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: HTTP.get accepts URI.
+
+ * lib/net/http.rb: new method HTTP.get_uri.
+
+ * lib/net/http.rb: add some HTTP 1.1 response codes.
+
+Tue Mar 26 20:25:28 2002 Minero Aoki <aamine@loveruby.net>
+
+ * doc/net/protocol.rd.ja, smtp.rd.ja, pop.rd.ja: removed.
+
+ * MANIFEST: remove doc/net/* entries.
+
+Tue Mar 26 18:45:15 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (FILE_READPTR): check bufread instead of bufend
+ for uClibc.
+
+ * ext/extmk.rb.in (arg_config): should use Shellwords::shellwords.
+
+Tue Mar 26 01:56:33 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (primary): while/until statement modifiers to "begin"
+ statement now work as "do .. while" even when begin statement
+ has "rescue" or "ensure" [new].
+
+ * parse.y (bodystmt): rescue/ensure is allowed at every bodies,
+ i.e. method bodies, begin bodies, class bodies[new], and module
+ bodies[new].
+
+Mon Mar 25 22:10:04 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_addrinfo): should specify ai_socktype
+ for getaddrinfo hints.
+
+Mon Mar 25 17:18:48 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * dir.c (rb_push_glob): local variable 'maxnest' was
+ uninitialized.
+
+Mon Mar 25 16:53:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_abort): embed aborting message into exception
+ object [new].
+
+ * eval.c (terminate_process): utility function for exit and abort.
+
+Tue Mar 26 14:04:47 2002 okabe katsuyuki <HGC02147@nifty.ne.jp>
+
+ * win32/mkexports.rb: support VC++.NET.
+
+Tue Mar 26 14:00:17 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/bigfloat/bigfloat.c: Fix the initializer's function name
+ according to the new library name. (pointed out by nobu)
+
+Tue Mar 26 11:12:01 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/fileutils.rb: new file.
+
+Tue Mar 26 03:23:50 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/pp.rb (pp): return nil like p.
+
+Tue Mar 26 01:48:01 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/bigfloat/extconf.rb: Downcase the library name. (BigFloat.so
+ -> bigfloat.so)
+
+ * ext/bigfloat/bigfloat.c (BigFloat_inspect): Alter the inspect
+ format not to look like an array. (pointed out by akr)
+
+ * ext/bigfloat/bigfloat.c (BigFloat_hash): Implement BigFloat#hash.
+
+ * ext/bigfloat/bigfloat.c (BigFloat_dump, BigFloat_load):
+ Support marshaling.
+
+Tue Mar 26 00:38:11 2002 Tanaka Akira <akr@m17n.org>
+
+ * configure.in (FILE_READPTR): check _p for 4.4BSD.
+
+Mon Mar 25 23:39:25 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * configure.in (FILE_READPTR): new. for IO#gets improvement.
+
+ * io.c (READ_DATA_PENDING_PTR): ditto.
+
+ * io.c (remain_size): separated from read_all().
+
+ * io.c (read_all): argument changed.
+
+ * io.c (appendline): new. get a line and append to string.
+
+ * io.c (swallow): new. swallow continuous line delimiters.
+
+ * io.c (rb_io_getline_fast): add delimiter argument.
+
+ * io.c (rb_io_getline): performance improvement.
+
+Mon Mar 25 19:30:25 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb.in (arg_config): get rid of single quotes
+ for autoconf 2.53.
+
+Mon Mar 25 17:49:41 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * regex.c (mbc_startpos_func): VC6 seems to be unable to
+ understand forward declaration for static variables.
+
+ * dir.c (rb_push_glob): local variable 'maxnest' was
+ uninitialized.
+
+Mon Mar 25 13:24:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (bsock_do_not_rev_lookup_set): should not be
+ allowed when $SAFE > 3.
+
+ * eval.c (rb_thread_ready): THREAD_TO_KILL threads should not turn
+ into THREAD_RUNNABLE on wakeup.
+
+ * eval.c (rb_thread_list): THREAD_TO_KILL threads should be in the
+ list.
+
+ * eval.c (thgroup_list): ditto; by moving gid clearance from
+ rb_thread_cleanup().
+
+Mon Mar 25 11:06:19 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * dln.c (dln_argv0): unused unless USE_DLN_A_OUT.
+
+ * regex.c (mbc_startpos_func): should be static.
+
+Sun Mar 24 12:19:09 2002 Koji Arai <jca02266@nifty.ne.jp>
+
+ * dir.c (fnmatch): "*/bar" (with FNM_PATHNAME flag) does not
+ match "foo/bar".
+
+Sun Mar 24 00:46:05 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * util.c (push_element): avoid warning for djgpp.
+
+Sat Mar 23 01:50:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (read_all): files on /proc filesystem with zero stat size,
+ may have contents.
+
+Fri Mar 22 18:07:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (tcp_s_gethostbyname): refactored.
+
+ * ext/socket/socket.c (sock_s_gethostbyname): ditto.
+
+Fri Mar 22 16:46:54 2002 Minero Aoki <aamine@loveruby.net>
+
+ * ext/extmk.rb.in: replace mkdir with mkpath to compile racc/cparse.
+
+Fri Mar 22 16:22:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * the VMS support patch submitted by Akiyoshi, Masamichi
+ <Masamichi.Akiyoshi@jp.compaq.com> is merged.
+
+Fri Mar 22 16:27:24 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/racc/parser.rb: new file.
+
+ * ext/racc/MANIFEST, cparse.c, depend, extconf.rb: new files.
+
+ * lib/README: add racc/parser.rb.
+
+ * ext/Setup*: add racc/cparse.
+
+Fri Mar 22 15:04:03 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (exec_under): changing ruby_class is OK, but should not
+ alter cbase.
+
+ * eval.c (yield_under_i): ditto.
+
+Fri Mar 22 15:44:38 2002 Minero Aoki <aamine@loveruby.net>
+
+ * ext/strscan/MANIFEST, strscan.c, depend, extconf.rb: new files.
+
+ * ext/Setup*: add strscan entry.
+
+Fri Mar 22 14:32:14 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/protocol.rb: Protocol#start should return self.
+
+Fri Mar 22 14:14:21 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/resolv.rb: fix arguments to create exceptions.
+ Patch from matt@lickey.com. (ruby-bugs:PR#278)
+
+Fri Mar 22 13:51:11 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/bigfloat/.cvsignore, ext/bigfloat/MANIFEST: BigFloat 1.1.8
+ has been imported. Add .cvsignore and MANIFEST.
+
+Fri Mar 22 04:07:55 2002 Koji Arai <jca02266@nifty.ne.jp>
+
+ * sprintf.c (rb_f_printf): discard meaningless prefix ".." for '%u'.
+
+Thu Mar 21 01:11:37 2002 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.status): fix install path (prefix).
+
+Thu Mar 21 01:03:05 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/configsub.rb: latest autoconf style support.
+
+Wed Mar 20 22:16:25 2002 Usaku Nakamura <usa@ruby-lang.org>
+
+ * mkconfig.rb: close duplicated $stdout before renaming rbconfig.rb.
+
+Wed Mar 20 21:54:17 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * win32/Makefile.sub: made variables configurable.
+
+ * win32/Makefile.sub (config.h): updates RUBY_PLATFORM from
+ Makefile.
+
+ * win32/Makefile.sub (config.status): ditto. and use recent
+ autoconf format.
+
+ * win32/Makefile.sub (clean): separate ext and local clean up.
+
+ * win32/Makefile.sub (distclean): ditto.
+
+ * win32/config.status.in: no longer used.
+
+Wed Mar 20 20:12:35 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * variable.c (rb_const_list): a temporary table must be freed.
+
+Wed Mar 20 19:44:09 2002 Tanaka Akira <akr@m17n.org>
+
+ * mkconfig.rb: don't touch rbconfig.rb if there is a trouble.
+
+Wed Mar 20 16:05:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (is_defined): should check receiver only once.
+
+ * eval.c (is_defined): should handle NODE_NEWLINE.
+
+Wed Mar 20 11:29:25 2002 Aristarkh A Zagorodnikov <xm@xml-objects.com>
+
+ * file.c (rb_file_s_expand_path): memory leak fixed.
+
+Wed Mar 20 00:36:43 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * util.c (ruby_getcwd): the content of buf is uncertain and must
+ not be printed when getcwd(buf, size) has failed.
+
+Mon Mar 18 22:19:52 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/stringio/stringio.c (check_modifiable): wrong declaration.
+
+Mon Mar 18 18:04:05 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/digest: add depend file.
+
+ * ext/digest/md5: ditto.
+
+ * ext/digest/rmd160: ditto.
+
+ * ext/digest/sha1: ditto.
+
+ * ext/digest/sha2: ditto.
+
+ * ext/iconv/MANIFEST: ditto.
+
+ * ext/stringio/MANIFEST: ditto.
+
+ * ext/syslog: ditto.
+
+Mon Mar 18 17:18:06 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_f_abort): should not bypass cleanup.
+
+ * ext/stringio/stringio.c (check_modifiable): void function.
+
+Mon Mar 18 12:52:01 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/iconv/extconf.rb: workaround for GNU libiconv.
+
+Mon Mar 18 10:55:03 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * parse.y (parse_string): part of multi-byte sequence must not
+ match to paren.
+
+ * parse.y (parse_qstring): ditto.
+
+ * parse.y (parse_quotedwords): ditto.
+
+ * parse.y (str_extend): handle multi-byte characters.
+
+Mon Mar 18 10:31:20 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * enum.c (enum_find): catch a value before recycle.
+
+ * enum.c (enum_all): ditto.
+
+ * enum.c (enum_any): ditto.
+
+ * enum.c (enum_min): ditto.
+
+ * enum.c (enum_max): ditto.
+
+Sun Mar 17 20:08:04 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/iconv/depend: added.
+
+ * ext/stringio/depend: added.
+
+Sat Mar 16 22:43:53 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * missing/fileblocks.c: add for autoconf.
+
+Sat Mar 16 15:30:40 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_search): should clear last_match if pos is out of
+ string range.
+
+ * string.c (rb_str_index_m): ditto.
+
+ * string.c (rb_str_rindex): ditto.
+
+Sat Mar 16 09:04:58 2002 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * enum.c (enum_inject): use the first iterated element as the
+ initial value when omitted.
+
+ * enum.c (inject_i): ditto.
+
+ * enum.c (Init_Enumerable): Enumerable#inject now takes variable
+ count arguments.
+
+Fri Mar 15 19:47:31 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * win32/win32.c (StartSockets): remove duplicated lines.
+
+Fri Mar 15 17:44:08 2002 Usaku Nakamura <usa@ruby-lang.org>
+
+ * bignum.c, intern.h (rb_ull2big, rb_ll2big, rb_ull2inum, rb_ll2inum,
+ big2ull, rb_big2ull, rb_big2ll): use LONG_LONG macro instead of
+ long long.
+
+ * numeric.c, intern.h, ruby.h (rb_num2ll, rb_num2ull): ditto.
+
+ * ruby.h: use _I64_MAX and _I64_MIN if they are defined (for VC++).
+
+Fri Mar 15 14:02:43 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/iconv/iconv.c: fixed document, Iconv#new is no longer an
+ iterator. thanks to Tanaka Akira <akr@m17n.org>.
+
+Thu Mar 14 22:17:45 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/iconv: imported.
+
+Thu Mar 14 16:42:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_define_class): should handle autoload.
+
+ * class.c (rb_define_module): ditto.
+
+Thu Mar 14 16:18:12 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: autoconf 2.53 support. use AC_LIBOBJ.
+
+Thu Mar 14 00:29:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_match): should clear $~ if operand is nil.
+
+ * re.c (rb_reg_match2): ditto.
+
+Thu Mar 14 12:32:59 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/stringio/stringio.c: fixed frozen string bug. ungetc no
+ longer raises on readonly stream unless modifies actually.
+
+Thu Mar 14 08:57:41 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * dir.c (rb_push_glob): avoid SEGV when a block given.
+
+Thu Mar 14 00:16:02 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * string.c (rb_str_subpat_set): must make str independent after
+ rb_reg_search() matched.
+
+Wed Mar 13 19:05:15 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * dir.c: FNM_PERIOD is obsoleted and FNM_DOTMATCH is introduced
+ instead, which has the opposite meaning of FNM_PERIOD.
+
+ * dir.c: Dir::glob now accepts optional FNM_* flags via the second
+ argument, whereas Dir::[] doesn't.
+
+Wed Mar 13 18:36:55 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/getopts.rb: single_options can be nil[*], and is not not
+ optional. ([*]Pointed out by gotoken)
+
+Wed Mar 13 17:23:46 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * configure: merge Jonathan Baker's large file support patch
+ [ruby-talk:35316], with read_all patch in [ruby-talk:35470].
+
+Wed Mar 13 04:06:48 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_abort): optional message argument that be printed
+ on termination.
+
+Tue Mar 12 17:12:06 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/resolv.rb: don't complete domains for absolute FQNs.
+
+Mon Mar 11 23:08:48 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/tsort.rb: new file.
+
+Mon Mar 11 21:03:37 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/stringio: new.
+
+Mon Mar 11 18:03:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_compile_pattern): '\0111' should be '\011' plus '1',
+ since octal literals are formed by three digits at most.
+
+Mon Mar 11 14:44:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): module inclusion using extend() should
+ also be detected.
+
+ * eval.c (rb_eval_cmd): cbase should not be NULL; it should be
+ either ruby_wrapper or Object.
+
+Sun Mar 10 02:18:22 2002 Koji Arai <jca02266@nifty.ne.jp>
+
+ * enum.c (enum_each_with_index): should return self.
+
+ * process.c (proc_setpgrp): should return value for non-void function.
+
+ * process.c (proc_getpgid): should raise exception if getpgid() return -1.
+
+ * string.c (rb_str_ljust): should return a duplicated string.
+
+ * string.c (rb_str_rjust): ditto.
+
+ * string.c (rb_str_center): ditto.
+
+Sat Mar 9 08:45:58 2002 Tanaka Akira <akr@m17n.org>
+
+ * ext/socket/extconf.rb (have_struct_member): don't print checked
+ result.
+
+Fri Mar 8 12:19:15 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/resolv.rb: use its own thread group for background threads.
+
+Fri Mar 8 02:21:32 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (cvar_cbase): utility function to find innermost non
+ singleton cbase.
+
+ * eval.c (is_defined): adopt new cvar behavior.
+
+ * eval.c (rb_eval): ditto.
+
+ * eval.c (assign): ditto.
+
+Thu Mar 7 20:08:25 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * gc.c (rb_source_filename): added. holds unique strings for file
+ names with GC space.
+
+ * gc.c (rb_gc_mark): mark source file name.
+
+ * gc.c (gc_sweep): ditto.
+
+ * gc.c (Init_GC): initialize source file name table.
+
+ * intern.h (rb_source_filename): added.
+
+ * eval.c (rb_eval_string): use rb_source_filename().
+
+ * parse.y (yycompile): ditto.
+
+ * ruby.c (proc_options): ditto.
+
+ * ruby.c (load_file): ditto.
+
+ * ruby.c (ruby_script): ditto.
+
+ * ruby.c (ruby_prog_init): ditto.
+
+Wed Mar 6 17:58:08 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * dln.c (dln_load): use LoadLibrary instead of LoadLibraryEx.
+
+Wed Mar 6 16:50:37 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_mod_clone): should not call rb_obj_clone(), since
+ Module does not provide "allocate".
+
+ * class.c (rb_singleton_class): should create new singleton class
+ if obj is a class or module and attached object is different,
+ which means metaclass of singleton class is sought.
+
+ * time.c (time_s_alloc): now follows allocation framework.
+
+Tue Mar 5 05:56:29 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/getopts.rb: Rewrite to fix some bugs and complete features.
+ - Accept options with the colon in the first argument;
+ getopts("a:bcd:") is equivalent to getopts("bc", "a:", "d:").
+ - Do not discard the argument that caused an error.
+ - Do not discard '-', which commonly stands for stdin or stdout.
+ - Allow specifying a long option with a value using '='.
+ (command --long-option=value)
+ - Stop reading options when it meets a non-option argument.
+
+Mon Mar 4 13:19:18 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/extmk.rb.in (dir_config): Sync with mkmf.rb: Fix a bug where
+ --with-xx-{include,lib} is ignored when --with-xx-dir is
+ specified.
+
+Mon Mar 4 00:09:55 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): should initialize outer class variables from
+ methods in singleton class definitions.
+
+ * eval.c (assign): ditto.
+
+Fri Mar 1 11:29:10 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/socket/{addinfo.h,getaddrinfo.c} (gai_strerror): add const
+ qualifier only for uClibc.
+
+Fri Mar 1 11:22:51 2002 Amos Gouaux <amos+ruby@utdallas.edu>
+
+ * lib/net/imap.rb: added document.
+
+ * lib/net/imap.rb (getquotaroot): new method.
+
+ * lib/net/imap.rb (setacl): remove the rights if the rights
+ parameter is nil.
+
+ * lib/net/imap.rb (getacl): return an array of MailboxACLItem.
+
+Fri Mar 1 06:25:49 2002 Tanaka Akira <akr@m17n.org>
+
+ * ext/socket/extconf.rb (have_struct_member): new method.
+ check msg_control and msg_accrights in struct msghdr. check
+ sys/uio.h.
+
+ * ext/socket/socket.c: include sys/uio.h if available.
+ (thread_read_select): new function.
+ (unix_send_io): ditto.
+ (unix_recv_io): ditto.
+ (unix_s_socketpair): ditto.
+ (Init_socket): define UNIXSocket#send_io, UNIXSocket#recv_io,
+ UNIXSocket.socketpair and UNIXSocket.pair.
+
+ * dln.c (dln_load): fix typo.
+
+Wed Feb 27 16:30:50 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_mod_include): load modules in argument order.
+
+ * st.c (st_init_table_with_size): num_bins should be prime numbers
+ (no decrement).
+
+ * st.c (rehash): ditto.
+
+Wed Feb 27 13:18:49 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * io.c (READ_DATA_PENDING): uClibc support.
+
+ * random.c (rand_init): ditto.
+
+ * ext/socket/{addinfo.h,getaddrinfo.c} (gai_strerror): ditto.
+
+Wed Feb 27 07:05:17 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/sha2/sha2.c: Merge from rough. Fix a couple of
+ off-by-one errors in Aaron Gifford's code.
+
+ Obtained from: KAME via FreeBSD
+ KAME PR: 393
+ FreeBSD PR: kern/34242
+
+Wed Feb 27 03:36:47 2002 Koji Arai <jca02266@nifty.ne.jp>
+
+ * ext/dbm/dbm.c (fdbm_select): 1.7 behavior.
+
+ * ext/gdbm/gdbm.c (fgdbm_select): ditto.
+
+ * ext/sdbm/sdbm.c (fsdbm_select): ditto.
+
+ * ext/dbm/dbm.c (fdbm_delete): adopt Hash#delete behavior.
+
+ * ext/sdbm/sdbm.c (fsdbm_delete): ditto.
+
+ * ext/gdbm/gdbm.c: need not to dup key to the block.
+
+ * ext/sdbm/sdbm.c : replace RuntimeError with SDBMError.
+
+Tue Feb 26 21:34:07 2002 Usaku Nakamura <usa@ruby-lang.org>
+
+ * bignum.c (rb_big_2comp): void function cannot return any value.
+
+Tue Feb 26 16:52:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_missing): NoMethod error messages for true, false,
+ nil must respond visibility like for other objects.
+
+Tue Feb 26 15:41:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): call trace_func for if/while conditions.
+
+ * marshal.c (r_object): separate r_regist from proc calling.
+
+Tue Feb 26 11:25:50 2002 akira yamada <akira@arika.org>
+
+ * lib/uri/generic.rb: merge0 should return [oth, oth] if oth is
+ absolute URI.
+
+ * lib/uri/generic.rb: registry part must not be allowed for any
+ schemes for the Internet. (RFC2396, section 3.2.2 and 3.2.1.)
+
+Mon Feb 25 21:22:41 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/syslog/syslog.c: Merge from rough. Use SafeStringValue().
+
+Mon Feb 25 21:12:08 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/syslog/syslog.c: Merge from rough. Turn Syslog into a
+ module keeping backward compatibility intact.
+
+Mon Feb 25 19:35:48 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * sample/test.rb (system): test with scripts under the source
+ directory.
+
+Mon Feb 25 15:14:01 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (method_inspect): should not dump core for unbound
+ singleton methods.
+
+ * object.c (rb_mod_to_s): better description.
+
+Mon Feb 25 13:32:13 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * lib/shell.rb (Shell::expand_path): relative to @cwd.
+
+Mon Feb 25 06:30:11 2002 Koji Arai <jca02266@nifty.ne.jp>
+
+ * hash.c (env_select): should path the assoc list.
+
+Sun Feb 24 17:20:22 2002 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/*/*.h: Merge from rough.
+ - Avoid namespace pollution. (MD5_* -> rb_Digest_MD5_*, etc.)
+
+Sat Feb 23 21:12:13 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (rb_syswait): thread kludge; should be fixed to
+ support native thread.
+
+Fri Feb 22 21:20:53 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/protocol.rb: set read_timeout dynamically.
+
+ * lib/net/http.rb: @@newimpl is always true in the main trunk.
+
+ * lib/net/http.rb: HTTP.port -> default_port
+
+ * lib/net/http.rb: HTTPResponse.read_response_status ->
+ read_status_line
+
+Fri Feb 22 19:56:15 2002 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/config.status.in: set LIBRUBY_SO.
+
+Fri Feb 22 03:34:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (get2comp): need to specify to carry or not.
+
+ * io.c (rb_io_inspect): embed path info.
+
+Fri Feb 22 11:30:01 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/prettyprint.rb: FillGroup implemented.
+
+Thu Feb 21 21:40:18 2002 Usaku Nakamura <usa@ruby-lang.org>
+
+ * ext/extmk.rb.in (create_makefile): remove unnecessary -L option from
+ LIBS macro.
+
+Thu Feb 21 02:49:12 2002 Koji Arai <jca02266@nifty.ne.jp>
+
+ * pack.c (pack_pack): wrong # comment treatment.
+
+ * pack.c (pack_unpack): ditto.
+
+Wed Feb 20 15:15:03 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * intern.h: prototypes; rb_io_addstr(), rb_io_printf(),
+ rb_io_print(), rb_io_puts()
+
+ * io.c (rb_io_addstr): make extern.
+
+ * io.c (rb_io_printf): ditto.
+
+ * io.c (rb_io_print): ditto.
+
+ * io.c (rb_io_puts): ditto.
+
+Wed Feb 20 13:41:35 2002 Usaku Nakamura <usa@ruby-lang.org>
+
+ * io.c (rb_io_close): return Qnil.
+
+Wed Feb 20 12:41:59 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_any_cmp): should handle Qundef in keys.
+
+ * eval.c (remove_method): should not remove a empty method to
+ implement "undef".
+
+ * eval.c (rb_eval): should allow singleton class def for
+ true/false/nil.
+
+Tue Feb 19 21:43:32 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/protocol.rb: rename Protocol.port to default_port.
+
+ * lib/net/smtp.rb: ditto.
+
+ * lib/net/pop.rb: ditto.
+
+ * lib/net/http.rb: ditto.
+
+ * lib/net/protocol.rb: rename BufferedSocket class to
+ InternetMessageIO.
+
+ * lib/net/smtp.rb: ditto.
+
+ * lib/net/pop.rb: ditto.
+
+ * lib/net/http.rb: ditto.
+
+ * lib/net/protocol.rb: rename InternetMessageIO#write_pendstr to
+ write_message.
+
+ * lib/net/smtp.rb: ditto.
+
+ * lib/net/protocol.rb: new method
+ InternetMessageIO#through_message.
+
+ * lib/net/smtp.rb: ditto.
+
+ * lib/net/protocol.rb: rename InternetMessageIO#read_pendstr to
+ read_message_to.
+
+ * lib/net/pop.rb: ditto.
+
+ * lib/net/protocol.rb: rename InternetMessageIO#read_pendlist to
+ each_list_item
+
+ * lib/net/pop.rb: ditto.
+
+ * lib/net/protocol.rb: Now block size is 1024.
+
+ * lib/net/smtp.rb: new methods SMTP#esmtp? and #esmtp=.
+
+ * lib/net/http.rb: Using singleton method syntax instead of
+ singleton class clause, to avoid behavior change of class
+ variables in ruby 1.7.
+
+ * lib/net/http.rb: HTTPResponse class does not inherit from
+ Net::Response.
+
+ * lib/net/http.rb: divide HTTP#connecting into
+ {begin,end}_transport.
+
+ * lib/net/http.rb: unused class Accumulator removed.
+
+ * lib/net/http.rb: Net::HTTP reads response. not HTTPRequest.
+
+ * lib/net/http.rb: proxy related class-instance-variables are not
+ initialized correctly.
+
+Tue Feb 19 20:20:12 2002 Ed Sinjiashvili <edsin@swes.saren.ru>
+
+ * parse.y (str_extend): backslash escape was done wrong.
+
+Tue Feb 19 17:10:25 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c (path_check_1): do not fail on world writable *parent*
+ directories too.
+
+Tue Feb 19 15:51:41 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (path_check_1): do not warn on world writable *parent*
+ directories.
+
+ * class.c (rb_include_module): should preserve ancestor order in
+ the included class/module.
+
+Tue Feb 19 14:45:32 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (path_check_1): should check directory sticky bits.
+
+ * process.c (security): need not to warn twice.
+
+ * marshal.c (r_object): complete restoration before calling
+ r_regist().
+
+Tue Feb 19 14:24:36 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): operators in the "op" rule should make
+ lex_state EXPR_ARG on EXPR_FNAME and EXPR_DOT.
+
+Tue Feb 19 13:38:10 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval_string_wrap): should hide the toplevel local
+ variable bindings by PUSH_SCOPE().
+
+Tue Feb 19 13:21:51 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * regex.c: fix prototypes of xmalloc(), xcalloc() and xrealloc().
+
+Tue Feb 19 13:16:08 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * io.c (rb_io_ungetc): don't fail pushed EOF back.
+
+Mon Feb 18 20:48:40 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * pack.c (pack_pack): avoid infinite loop at comment.
+
+ * pack.c (pack_unpack): ditto.
+
+Mon Feb 18 14:06:28 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * misc/ruby-mode.el (ruby-block-hanging-re): rescue block was too
+ indented.
+
+Mon Feb 18 13:56:44 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (expr_value, arg_value, primary_value): value_expr()
+ check in place.
+
+ * eval.c (block_pass): "&nil" should clear block given.
+
+Mon Feb 18 02:05:56 2002 Wolfgang Jahrling <wolfgang@pro-linux.de>
+
+ * dir.c (push_braces): remove MAXPATHLEN dependency.
+
+ * dir.c (dir_s_globd): ditto.
+
+ * dln.c (init_funcname): ditto.
+
+ * dln.c (load_1): ditto.
+
+ * dln.c (dln_load): ditto.
+
+ * configure.in: add GNU/Hurd switches.
+
+Fri Feb 15 17:44:26 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): allows comment in template strings.
+
+ * pack.c (pack_unpack): ditto.
+
+Sun Feb 17 23:41:37 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * mkconfig.rb (Config::expand): expand ${} too.
+
+ * ext/extmk.rb.in (try_link0): expand command.
+
+ * ext/extmk.rb.in (try_cpp): ditto.
+
+ * ext/extmk.rb.in (extmake): default $LIBPATH to $libdir
+
+Sun Feb 17 21:39:24 2002 Tetsuya Watanabe <tetsuya.watanabe@nifty.com>
+
+ * ext/digest/md5/md5init.c (Init_md5): rb_cvar_declare() is
+ replaced by rb_cvar_set().
+
+ * ext/digest/rmd160/rmd160init.c (Init_rmd160): ditto.
+
+ * ext/digest/sha1/sha1init.c (Init_sha1): ditto.
+
+ * ext/digest/sha2/sha2init.c (Init_sha2): ditto.
+
+Sun Feb 17 18:10:09 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * class.c (rb_define_class): warn unless superclass is specified
+ explicitly.
+
+ * class.c (rb_define_class_under): ditto.
+
+Thu Feb 16 02:11:08 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * misc/ruby-mode.el (ruby-font-lock-keywords): fontify
+ instance/class/global variables start with '_'.
+
+Fri Feb 15 14:40:38 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): replace rb_cvar_declare() by rb_cvar_set().
+
+ * eval.c (assign): ditto.
+
+ * variable.c (rb_cvar_set): 4th argument (warn) added; define new
+ class variable if it's not defined yet.
+
+ * variable.c (rb_cvar_declare): removed.
+
+Fri Feb 15 13:36:58 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_rshift): should properly convert the negative
+ value to 2's compliment.
+
+Thu Feb 14 17:38:35 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * parse.y: avoid SEGV at OP_ASIGN to pseudo variable.
+
+Thu Feb 14 14:13:16 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * struct.c (Init_Struct): should undefine "allocate" for Struct
+ class (it's redefined in the subclasses).
+
+Wed Feb 13 17:58:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (stmt): local variable declaration order was changed
+ since 1.6
+
+ * parse.y (arg): ditto.
+
+ * pack.c (pack_pack): add templates 'q' and 'Q'.
+
+ * pack.c (pack_unpack): ditto.
+
+ * bignum.c (rb_quad_pack): new utility function.
+
+ * bignum.c (rb_quad_unpack): ditto.
+
+Tue Feb 12 01:21:34 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (assignable): should emit CVASGN within the method
+ body.
+
+Mon Feb 11 06:13:53 2002 Matt Armstrong <matt@lickey.com>
+
+ * dir.c (dir_s_glob): should not warn even if no match found.
+
+Mon Feb 11 04:25:54 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): clean up class variable behavior.
+
+ * eval.c (assign): ditto.
+
+ * eval.c (is_defined): ditto.
+
+ * variable.c (rb_mod_class_variables): need not to call rb_cvar_singleton().
+
+ * variable.c (rb_cvar_singleton): removed.
+
+Mon Feb 11 00:10:41 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * regex.c (re_compile_fastmap): skip begpos.
+
+Sun Feb 10 16:52:53 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ruby.c (load_file): avoid SEGV on '#' only input.
+
+Fri Feb 8 23:07:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): singleton check should be moved from yycompile
+ to here.
+
+ * eval.c (is_defined): check should be added here too.
+
+Fri Feb 8 05:31:48 2002 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: HTTP.Proxy should use self for proxy-class's
+ super class.
+
+ * lib/net/http.rb: initialize HTTP.proxy_port by HTTP.port.
+
+Fri Feb 8 01:27:33 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yycompile): should inherit "in_single" if eval happened
+ in a singleton method.
+
+ * eval.c (rb_eval): class variables from singleton methods defined
+ within singleton class statement should work like ones defined
+ by singleton def statements.
+
+Thu Feb 7 13:44:08 2002 akira yamada <akira@arika.org>
+
+ * uri/common.rb (URI::join): new method.
+
+ * uri/generic.rb (Generic#merge): URI.parse("http://a/")+"b" should
+ return "http://a/b" but it returned "http://a//b".
+
+ * uri/generic.rb (Generic#check_path): corrected error message,
+ @path -> v
+
+Thu Feb 7 00:18:43 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_write): flag when buffered write is done.
+
+ * io.c (fptr_finalize): do not raise error on EBADF if write
+ buffer is empty.
+
+Wed Feb 6 17:18:54 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * configure.in: keep old config.h unless changed.
+
+Wed Feb 6 13:28:53 2002 Amos Gouaux <amos+ruby@utdallas.edu>
+
+ * lib/net/imap.rb: OpenSSL support.
+
+ * lib/net/imap.rb (setquota): unset quota if the second argument
+ is nil.
+
+Wed Feb 6 13:05:11 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_readlines): avoid calling GetOpenFile() repeatedly.
+
+ * io.c (rb_io_each_line): ditto.
+
+ * io.c (argf_getline): ditto.
+
+ * process.c: should include <time.h> to get proper CLK_TCK.
+
+Wed Feb 6 02:10:30 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * io.c (fptr_finalize): ignore EBADF when f and f2 use same
+ descriptor.
+
+Tue Feb 5 16:17:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (fptr_finalize): should raise error when fclose fails.
+
+ * eval.c (method_inspect): proper output format to distinguish
+ methods and singleton methods.
+
+Mon Feb 4 22:44:58 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c (rb_file_s_expand_path): should terminate.
+
+Mon Feb 4 15:38:29 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_class_real): should not follow ICLASS link
+
+ * variable.c (classname): should follow ICLASS link explicitly.
+
+ * eval.c (rb_call): ditto.
+
+Fri Feb 1 19:10:04 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * intern.h: prototypes for new functions; rb_cstr_to_inum(),
+ rb_str_to_inum(), rb_cstr_to_dbl(), rb_str_to_dbl()
+
+ * bignum.c (rb_cstr_to_inum): changed from rb_cstr2inum(), and
+ added argument badcheck to be consistent with parser. [new]
+
+ * bignum.c (rb_str_to_inum): ditto.
+
+ * bignum.c (rb_cstr2inum): wrapper of rb_cstr_to_inum() now.
+
+ * bignum.c (rb_str2inum): ditto.
+
+ * object.c (rb_cstr_to_dbl): float number parser. [new]
+
+ * object.c (rb_str_to_dbl): ditto.
+
+ * object.c (rb_Float): use rb_cstr_to_dbl() for strict check.
+
+ * object.c (rb_Integer): use rb_str_to_inum() for strict check.
+
+ * string.c (rb_str_to_f): use rb_str_to_dbl() with less check.
+
+ * string.c (rb_str_to_i): use rb_str_to_inum() with less check.
+
+ * string.c (rb_str_hex): ditto.
+
+ * string.c (rb_str_oct): ditto.
+
+ * sprintf.c (rb_f_sprintf): ditto.
+
+ * time.c (obj2long): ditto.
+
+ * parse.y (yylex): use rb_cstr_to_inum() for strict check.
+
+Fri Feb 1 17:46:39 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * regex.c (mbc_startpos): become macro.
+
+ * regex.c (euc_startpos): added for improvement.
+
+ * regex.c (sjis_startpos): ditto.
+
+ * regex.c (utf8_startpos): ditto.
+
+Fri Feb 1 00:03:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_stat_inspect): print dev, rdev in hexadecimal.
+
+Thu Jan 31 20:45:33 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * lib/mkmf.rb (dir_config): prior --with flag.
+
+ * lib/mkmf.rb (arg_config): avoid special variables for
+ font-lock-mode.
+
+Thu Jan 31 13:22:36 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/pp.rb (File::Stat#pretty_print): print rdev_major and rdev_minor.
+
+Wed Jan 30 15:58:04 2002 K.Kosako <kosako@sofnec.co.jp>
+
+ * regex.c (re_adjust_startpos): fix for SJIS and UTF-8.
+
+ * regex.c (mbc_startpos): ditto.
+
+Wed Jan 30 13:37:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_search): should set regs.allocated.
+
+Wed Jan 30 02:25:38 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * regex.c (re_adjust_startpos): search start of multibyte
+ backward.
+
+ * regex.c (mbc_startpos): ditto.
+
+Tue Jan 29 17:59:20 2002 Tanaka Akira <akr@m17n.org>
+
+ * file.c: `major' and `minor' macro needs sys/mkdev.h on SunOS 5.x.
+
+ * configure.in: add check for `sys/mkdev.h'.
+
+ * lib/pp.rb: don't print a mode File::Stat as decimal number.
+
+Mon Jan 28 19:16:58 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * array.c (rb_ary_fill): shouldn't yield unless block given.
+
+Mon Jan 28 18:33:18 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * parse.y (yylex): strict check for numbers.
+
+Mon Jan 28 18:01:01 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_stat_rdev_major): added. [new]
+
+ * file.c (rb_stat_rdev_minor): added. [new]
+
+ * file.c (rb_stat_inspect): print mode in octal.
+
+Mon Jan 28 13:29:41 2002 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (is_defined): defined?(Foo::Baz) should check constants
+ only, no methods.
+
+ * eval.c (is_defined): should not dump core on defined?(a::b)
+ where a is not a class nor a module.
+
+Mon Jan 28 02:50:12 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (Init_Object): remove dup and clone from TrueClass,
+ FalseClass, and NilClass.
+
+ * array.c (rb_ary_fill): Array#fill takes block to get the value to
+ fill.
+
+Sat Jan 26 20:05:18 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_to_i): to_i(0) auto-detects base radix.
+
+ * array.c (rb_ary_initialize): fill by the block evaluation value
+ if block is given.
+
+Fri Jan 25 17:48:43 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in (solaris): add '-shared' only for GNU ld.
+
+Fri Jan 25 17:16:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_include_module): detect cyclic module inclusion.
+
+Fri Jan 25 02:17:56 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_cleanup): need not to free thread stacks at
+ process termination.
+
+ * array.c (rb_ary_fetch): use the block to get the default value
+ if the block is given.
+
+ * eval.c (rb_thread_schedule): should check time only if BOTH
+ WAIT_SELECT and WAIT_TIME.
+
+Thu Jan 24 11:49:05 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (umethod_bind): should update rklass field.
+
+ * hash.c (rb_hash_update): if a block is given, yields [key,
+ value1, value2] to the block to resolve conflict.
+
+Thu Jan 24 05:42:01 2002 Koji Arai <jca02266@nifty.ne.jp>
+
+ * string.c (rb_str_split_m): no need to consider KANJI
+ characters, if the length of separator is 1 (byte).
+
+Wed Jan 23 16:07:31 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (Init_Array): remove Array#filter.
+
+Wed Jan 23 13:27:44 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_yield_0): restore source file/line after yield.
+
+Wed Jan 23 02:00:14 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_mod_initialize): should accept zero argument.
+
+ * object.c (rb_mod_cmp): should raise ArgumentError if
+ inheritance/inclusion relation between two classes/modules is
+ not defined. [new]
+
+Tue Jan 22 17:45:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_fsync): new method. [new]
+
+Mon Jan 21 22:57:18 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * signal.c (ruby_signal): must define sighandler_t for every
+ occasion.
+
+Mon Jan 21 08:25:30 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ruby_stop): should not trace error handler.
+
+ * signal.c (install_sighandler): do not install sighandler unless
+ the old value is SIG_DFL.
+
+ * io.c (io_write): should not raise exception on O_NONBLOCK io.
+
+ * dir.c (dir_set_pos): seek should return dir, pos= should not.
+
+Sat Jan 19 02:31:45 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): need not to clear method cache for NODE_CLASS,
+ NODE_SCLASS.
+
+ * gc.c (obj_free): need not to clear method cache on class/module
+ finalization.
+
+Fri Jan 18 23:38:03 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_fetch): index out of range raises exception
+ unless optional second argument is specified.
+
+Fri Jan 18 17:32:09 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_s_new): block check moved from initialize to this
+ method.
+
+ * io.c (rb_io_s_open): open should call initialize too. IO#for_fd
+ also calls initialize. [new]
+
+Fri Jan 18 10:26:33 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (rb_sys_fail): replace INT2FIX() by INT2NUM() since
+ errno value may not fit in Fixnum size on Hurd.
+
+ * error.c (set_syserr): ditto.
+
+Fri Jan 18 10:12:00 2002 Usaku Nakamura <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (tcp_svr_s_open): fix typo.
+
+Fri Jan 18 02:27:48 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (dir_s_glob): returns nil if block given.
+
+ * io.c (rb_io_each_byte): should return self.
+
+ * io.c (rb_io_close_m): close check added.
+
+ * dir.c (dir_seek): should return pos.
+
+Fri Jan 18 01:21:53 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (fixpos): orig may be (NODE*)1, which should not be
+ dereferenced.
+
+Thu Jan 17 16:21:42 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (block_pass): allow "retry" from within argument passed
+ block. [new]
+
+ * eval.c (localjump_error): should preserve exit status in the
+ exception object. [new]
+
+ * eval.c (proc_invoke): should raise exception for "break" if it's
+ yielding, not calling. [new]
+
+ * eval.c (block_pass): should NOT raise exception for "break". [new]
+
+ * eval.c (block_pass): should allow block argument relay even in
+ the tainted mode.
+
+Thu Jan 17 09:43:05 2002 TAKAHASHI Kaoru <kaoru@kaisei.org>
+
+ * misc/ruby-mode.el (ruby-add-log-current-method): New function
+ for `add-log-current-defun-function'.
+
+Thu Jan 17 04:51:48 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c: support subclassing by proper "initialize"
+ calling convention. [new]
+
+Wed Jan 16 18:25:08 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * st.c: primes should be primes.
+
+Wed Jan 16 12:29:14 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/timeout.rb (timeout): new optional argument to specify an
+ exception class.
+
+ * lib/resolv.rb: use Resolv::ResolvTimeout for internal timeout to
+ avoid problem with timeout of application.
+
+Wed Jan 16 11:12:30 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * object.c (rb_Float): remove underscores between digits.
+
+ * bignum.c (rb_cstr2inum): reject prefix followed by spaces only.
+
+ * class.c (rb_class_inherited): should use Object when no super
+ class.
+
+Tue Jan 15 01:11:44 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (is_defined): method defined? check should honor
+ protected too.
+
+Mon Jan 14 13:06:02 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (block_pass): should not pass tainted block, if $SAFE > 0.
+
+Sun Jan 13 09:31:41 2002 Koji Arai <jca02266@nifty.ne.jp>
+
+ * variable.c (rb_mod_remove_cvar): should pass the char*.
+
+Fri Jan 11 05:06:25 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * class.c (rb_make_metaclass): [new]
+
+ * class.c (rb_define_class_id): use rb_make_metaclass(), don't
+ call Class#inherited hook.
+
+ * class.c (rb_class_inherited): [new]
+
+ * class.c (rb_define_class): call Class#inherited hook here.
+
+ * class.c (rb_define_class_under): ditto after class path is set.
+
+ * class.c (rb_singleton_class): use rb_make_metaclass().
+
+ * eval.c (rb_eval): same as rb_define_class_under().
+
+ * intern.h: prototypes of rb_make_metaclass() and
+ rb_class_inherited().
+
+ * object.c (rb_class_s_new): use rb_make_metaclass() and
+ rb_class_inherited().
+
+ * object.c (Init_Object): use rb_make_metaclass().
+
+ * struct.c (make_struct): use rb_class_inherited().
+
+Thu Jan 10 19:15:15 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_add_method): should clear cache by id always.
+
+ * eval.c (rb_disable_super): no longer need to clear cache before
+ rb_add_method().
+
+ * eval.c (rb_export_method): ditto.
+
+ * eval.c (rb_attr): ditto.
+
+ * eval.c (rb_undef): ditto.
+
+ * eval.c (rb_eval): ditto.
+
+ * eval.c (rb_mod_modfunc): ditto.
+
+ * eval.c (rb_mod_define_method): ditto.
+
+Thu Jan 10 11:42:47 2002 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/resource.rb: Modify copyright in resource script.
+
+Thu Jan 10 07:15:44 2002 takuma ozawa <metal@mine.ne.jp>
+
+ * re.c (match_select): should propagate taintness.
+
+Thu Jan 10 00:54:57 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_set_default): Hash#default= should return the
+ new value.
+
+Wed Jan 9 20:21:09 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * misc/ruby-mode.el (ruby-calculate-indent): indentation after
+ comment at beginning of buffer failed.
+
+ * misc/ruby-mode.el (font-lock-defaults): unless XEmacs, set
+ font-lock variables in ruby-mode-hook.
+
+Tue Jan 8 15:56:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_to_i): accepts optional base argument. [new]
+
+ * numeric.c (rb_fix2str): should not handle negative fixnum values
+ int32 via calling sprintf() directly.
+
+Tue Jan 8 15:54:02 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_add_method): clear replaced method from the cache.
+
+Mon Jan 7 12:38:47 2002 Tanaka Akira <akr@m17n.org>
+
+ * lib/time.rb (Time#xmlschema): new optional argument
+ fractional_seconds to specify a number of digits of
+ fractional part of the time.
+
+Sat Jan 5 13:18:11 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * range.c (range_member): beginning check was
+ wrong. [ruby-talk:30252]
+
+Sat Jan 5 03:07:34 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_new2): NULL pointer check added.
+
+Sat Jan 5 00:19:12 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * parse.y (yycompile): strdup()'ed twice.
+
+Fri Jan 4 18:29:10 2002 Michal Rokos <m.rokos@sh.cvut.cz>
+
+ * class.c (rb_define_module_under): should locate predefined
+ module using rb_const_defined_at().
+
+Fri Jan 4 17:23:49 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * misc/ruby-mode.el (ruby-forward-string): forward a string. [new]
+
+ * misc/ruby-mode.el (ruby-parse-region): handle nested parentheses
+ in a string and terminators in #{}.
+
+ * misc/ruby-mode.el (ruby-calculate-indent): ditto.
+
+Wed Jan 2 23:34:25 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): add -I. to CPPFLAGS.
+
+ * lib/mkmf.rb (create_makefile): srcdir support(.def and depend file).
+
+Wed Jan 2 11:51:56 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (rb_f_system): abandon vfork.
+
+ * io.c (pipe_open): ditto.
+
+Tue Jan 1 02:16:48 2002 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/curses/extconf.rb: add dir_config.
+
+ * Makefile.in (fake.rb): set RUBY_VERSION.
+
+Mon Dec 31 14:20:46 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * parse.y (yycompile): always store copy of filename.
+
+ * parse.y (rb_compile_file): no longer need to strdup() here.
+
+Mon Dec 31 05:26:40 2001 Ferris McCormick <fmccor@inforead.com>
+
+ * defines.h: sparc linux needs different FLUSH_REGISTER_WINDOWS
+
+Mon Dec 31 04:27:28 2001 Minero Aoki <aamine@mx.edit.ne.jp>
+
+ * lib/net/protocol.rb: Protocol#start returns the return value of
+ block.
+
+ * lib/net/protocol.rb: set timeout limit by default.
+
+ * lib/net/protocol.rb: new methods WriteAdapter#write, puts,
+ print, printf.
+
+ * lib/net/http.rb: rename HTTP#get2 to request_get, post2 to
+ request_post ...
+
+ * lib/net/smtp.rb: should not resolve HELO domain automatically.
+
+Sun Dec 30 00:59:16 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb.in, lib/mkmf.rb (have_library): accept -lm
+ unconditionally on mswin32/mingw32.
+
+Sat Dec 29 01:55:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_search): abandon stclass optimization.
+
+Fri Dec 28 14:39:05 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * array.c (rb_cmpint): fixed typo.
+
+Thu Dec 27 18:43:04 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * bignum.c (rb_cstr2inum): deny "0_".
+
+Thu Dec 27 01:54:02 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * bignum.c (rb_cstr2inum): allow "0\n" and so on.
+
+Wed Dec 26 19:24:21 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (rb_invalid_str): utility function to show inspect()'ed
+ string.
+
+ * bignum.c (rb_cstr2inum): prints invalid strings in inspect()'ed
+ format.
+
+ * object.c (rb_Float): ditto.
+
+Wed Dec 26 02:41:29 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_convert_type): no longer use rb_rescue().
+
+Tue Dec 25 18:32:16 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * re.c (rb_reg_search): initialize taint status of match object.
+
+Tue Dec 25 02:37:49 2001 Tanaka Akira <akr@m17n.org>
+
+ * lib/pp.rb, lib/prettyprint.rb: new files.
+
+Tue Dec 25 02:11:17 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_convert_type): check method response check before
+ invoking rb_rescue().
+
+ * object.c (rb_check_convert_type): ditto.
+
+Mon Dec 24 02:37:40 2001 Le Wang <lewang@bigfoot.com>
+
+ * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords):
+ fix font-lock problem [ruby-talk:29296].
+
+Sat Dec 22 22:52:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_timeval): wrong cast to time_t.
+
+ * time.c (time_plus): ditto.
+
+Fri Dec 21 20:33:34 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * parse.y (str_extend): make up "#$;" handling.
+
+Fri Dec 21 16:18:17 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * dln.h, ruby.h, util.h: enable prototypes in C++.
+
+Fri Dec 21 15:12:41 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_plus): result should not be negative unless
+ NEGATIVE_TIME_T is defined.
+
+ * time.c (time_new_internal): should check tv_sec overflow too.
+
+ * time.c (time_timeval): should check time_t range when time is
+ initialized from float.
+
+ * time.c (time_plus): uses modf(3).
+
+Fri Dec 21 03:15:52 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_mod_define_method): must not convert Method to Proc.
+
+Fri Dec 21 01:17:57 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * lib/mkmf.rb (with_destdir): new.
+
+ * lib/mkmf.rb: prefix target directories with $(DESTDIR) all.
+
+ * lib/mkmf.rb: no need to mkdir $(libdir)
+
+Thu Dec 20 14:08:20 2001 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/protocol.rb: rename Net::Socket to Net::BufferedSocket
+
+Thu Dec 20 13:51:52 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * variable.c (rb_cvar_set): add frozen class/module check.
+
+ * variable.c (rb_cvar_declare): add frozen class/module check.
+
+Thu Dec 20 01:01:50 2001 takuma ozawa <metal@mine.ne.jp>
+
+ * re.c (match_to_a): should propagate taint.
+
+ * re.c (rb_reg_s_quote): ditto.
+
+Wed Dec 19 16:58:29 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * ext/readline/readline.c: new methods
+ Readline::basic_word_break_characters,
+ Readline::basic_word_break_characters=,
+ Readline::completer_word_break_characters,
+ Readline::completer_word_break_characters=,
+ Readline::basic_quote_characters,
+ Readline::basic_quote_characters=,
+ Readline::completer_quote_characters,
+ Readline::completer_quote_characters=,
+ Readline::filename_quote_characters,
+ Readline::filename_quote_characters=.
+
+Wed Dec 19 14:05:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_mod_define_method): define_method should follow
+ default method visibility.
+
+ * eval.c (rb_attr): should warn if the default method visibility
+ is "module_function" (can be error).
+
+ * eval.c (rb_mod_define_method): should define class/module method
+ also if the visibility is "module_function".
+
+ * eval.c (rb_mod_define_method): should call hook method
+ "method_added", and "singleton_method_added".
+
+Wed Dec 19 11:42:13 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * string.c: use RESIZE_CAPA for capacity change.
+
+Wed Dec 19 03:08:40 2001 Tanaka Akira <akr@m17n.org>
+
+ * lib/time.rb: date.rb is not required anymore.
+
+ * lib/resolv.rb: fix document. refine IPv6 regex.
+
+Tue Dec 18 23:24:53 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (Init_socket): add listen method to
+ TCPServer and UNIXServer.
+
+Tue Dec 18 17:54:53 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * sample/test.rb: Hash#indexes -> Hash#select.
+
+Tue Dec 18 01:02:13 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_schedule): should not select a thread which is
+ not yet initialized.
+
+Mon Dec 17 18:53:49 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * string.c (rb_str_replace): swap arguments of OBJ_INFECT.
+
+Mon Dec 17 16:52:20 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * intern.h: add prototypes.
+ rb_gc_enable(), rb_gc_disable(), rb_gc_start(), rb_str_new5()
+ rb_str_buf_append(), rb_str_buf_cat(), rb_str_buf_cat2(),
+ rb_str_dup_frozen()
+
+ * ruby.h: added declaration.
+ rb_defout, rb_stdin, rb_stdout, rb_stderr, ruby_errinfo
+
+ * rubyio.h: changed double include guard macro to RUBYIO_H.
+
+ * array.c (inspect_call): make static.
+
+ * eval.c (dvar_asgn): ditto.
+
+ * io.c (rb_io_close_read): ditto.
+
+ * lex.c (rb_reserved_word): ditto.
+
+ * ruby.c: (req_list_head, req_list_last): ditto.
+
+ * ruby.c (require_libraries): ditto.
+
+Mon Dec 17 15:41:24 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_plus): wrong boundary check.
+
+ * time.c (time_minus): ditto.
+
+Mon Dec 17 15:19:32 2001 Tanaka Akira <akr@m17n.org>
+
+ * time.c: new method `gmtoff', `gmt_offset' and `utc_offset'.
+ (time_utc_offset): new function.
+ (Init_Time): bind above methods to `time_utc_offset'.
+
+ * time.c: 64bit time_t support.
+ (time_s_at): use NUM2LONG instead of NUM2INT for tv_sec.
+ (time_arg): initialize tm_isdst correctly.
+ use long to initialize tm_year.
+ (search_time_t): renamed from `make_time_t'.
+ (make_time_t): call `timegm' and `mktime' instead of `search_time_t'
+ if available.
+ (time_to_i): use LONG2NUM instead of INT2NUM.
+ (time_localtime): check localtime failure.
+ (time_gmtime): check gmtime failure.
+ (time_year): use LONG2NUM instead of INT2FIX.
+ (time_to_a): use long for tm_year.
+ (time_dump): check tm_year which is not representable with 17bit.
+ (time_load): initialize tm_isdst.
+
+ * configure.in: check existence of `mktime' and `timegm'.
+ check existence of tm_gmtoff field of struct tm.
+ fix negative time_t for 64bit time_t.
+
+ * missing/strftime.c: fix overflow by tm_year + 1900.
+
+ * lib/time.rb: use Time#utc_offset.
+
+Mon Dec 17 00:02:04 2001 Guy Decoux <ts@moulon.inra.fr>
+
+ * variable.c (find_class_path): should initialize iv_tbl if it's
+ NULL.
+
+Fri Dec 14 04:23:36 2001 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/pop.rb: new method Net::POP3.APOP
+
+ * lib/net/http.rb: set default Content-Type to
+ x-www-form-urlencoded (causes warning)
+
+ * lib/net/protocol.rb: remove Net::NetPrivate module.
+
+ * lib/net/smtp.rb: ditto.
+
+ * lib/net/pop.rb: ditto.
+
+ * lib/net/http.rb: ditto.
+
+Fri Dec 14 00:16:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_define_class): should return the existing class if
+ the class is already defined and its superclass is identical to
+ the specified superclass.
+
+ * class.c (rb_define_class_under): ditto.
+
+ * class.c (rb_define_module): should return the existing module if
+ the module is already defined.
+
+Thu Dec 13 09:52:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_new_internal): avoid loop to calculate negative
+ div, mod.
+
+ * time.c (time_cmp): should handle Bignums.
+
+Tue Dec 11 17:39:16 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * array.c (rb_ary_pop): should ELTS_SHARED flag check before
+ REALLOC.
+
+Tue Dec 11 12:45:28 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_match_m): should convert an argument into
+ regexp if it's a string.
+
+Tue Dec 11 03:40:23 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_select): Array#select(n,m,...) now works like
+ Array#indexes(n,m,..). [new, experimental]
+
+ * hash.c (rb_hash_select): ditto.
+
+ * hash.c (env_select): ditto.
+
+ * re.c (match_select): ditto.
+
+ * struct.c (rb_struct_select): ditto.
+
+Tue Dec 11 03:17:19 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * object.c (rb_class_real): follow included modules.
+
+Mon Dec 10 23:37:51 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * util.h: change prototype of ruby_qsort() to accord with its
+ definition.
+
+Mon Dec 10 20:30:01 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * gc.c (STR_ASSOC): use FL_USER3 instead of FL_USER2.
+
+Mon Dec 10 17:40:02 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * parse.y (str_extend): make up pushback call.
+
+Mon Dec 10 02:09:28 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_modify): should copy the internal buffer if the
+ modifying buffer is shared.
+
+ * array.c (ary_make_shared): make an internal buffer of an array
+ to be shared.
+
+ * array.c (rb_ary_shift): avoid sliding an internal buffer by
+ using shared buffer.
+
+ * array.c (rb_ary_subseq): avoid copying the buffer.
+
+Mon Dec 10 01:06:56 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (gettable): should freeze __FILE__ string.
+
+Sun Dec 9 18:06:26 2001 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/protocol.rb: calls on_connect before conn_command
+
+Sat Dec 8 23:27:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_puts): old behavior restored. rationale: a) if you
+ want to call to_s for arrays, you can just call print a, "\n".
+ b) to_s wastes memory if array (and sum of its contents) is
+ huge. c) now any object that has to_ary is treated as an array,
+ using rb_check_convert_type().
+
+Sat Dec 8 22:40:38 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_initialize): now accepts a block to calculate
+ the default value. [new]
+
+ * hash.c (rb_hash_aref): call "default" method to get the value
+ corresponding to the non existing key.
+
+ * hash.c (rb_hash_default): get the default value based on the
+ block given to 'new'. Now it takes an optional "key" argument.
+ "default" became the method to get the value for non existing
+ key. Users may override "default" method to change the hash
+ behavior.
+
+ * hash.c (rb_hash_set_default): clear the flag if a block is given
+ to 'new'
+
+Sat Dec 8 02:29:54 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (Init_Object): undef Data.allocate, left Data.new.
+
+Fri Dec 7 19:12:14 2001 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/smtp.rb: SMTP.new requires at least one arg.
+
+ * lib/net/pop.rb: POP.new requires at least one arg.
+
+ * lib/net/pop.rb: uses "raise *Error.new" instead of simple raise.
+
+ * lib/net/http.rb: HTTP.new requires at least one arg.
+
+ * lib/net/http.rb: changes implicit start algorithm.
+
+Fri Dec 7 15:49:39 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * ext/extmk.rb.in: ignore adding -Wl,-R to DLDFLAGS when the directory
+ is $topdir.
+
+Fri Dec 7 13:58:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/curses/curses.c (window_scrollok): use RTEST().
+
+ * ext/curses/curses.c (window_idlok): ditto.
+
+ * ext/curses/curses.c (window_keypad): ditto.
+
+ * ext/curses/curses.c (window_idlok): idlok() may return void on
+ some platforms; so don't use return value.
+
+ * ext/curses/curses.c (window_scrollok): ditto for consistency.
+
+ * ext/curses/curses.c: replace FIX2INT() by typechecking NUM2INT().
+
+Fri Dec 7 09:51:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (str_extend): should not process immature #$x and
+ #@x interpolation, e.g #@#@ etc.
+
+Fri Dec 7 03:21:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_sort_by): sort_by does not have to be stable always.
+
+ * enum.c (enum_sort_by): call qsort directly to gain performance.
+
+Thu Dec 6 18:52:28 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * ext/extmk.rb.in: add -Wl,-R flags to DLDFLAGS on netbsdelf.
+
+ * lib/mkmf.rb: ditto.
+
+Thu Dec 6 09:15:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * util.c (ruby_qsort): ruby_qsort(qs6) is now native thread safe.
+
+ * error.c (rb_sys_fail): it must be a bug if it's called when
+ errno == 0.
+
+Wed Dec 5 23:36:56 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (WC2MBC1ST): should not pass through > 0x80 number in UTF-8.
+
+Wed Dec 5 20:05:18 2001 Florian Frank <flori@ping.de>
+
+ * ext/socket/socket.c (bsock_send): should raise EWOULDBLOCK
+ exception.
+
+ * ext/socket/socket.c (s_recvfrom): ditto.
+
+ * ext/socket/socket.c (s_accept): ditto.
+
+ * ext/socket/socket.c (udp_send): ditto.
+
+Tue Dec 4 17:43:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.h (DUPSETUP): new SETUP macro for duplication.
+
+ * time.c (time_dup): implement in Time class using DUPSETUP.
+
+ * time.c (time_getlocaltime): new method; probably requires
+ better name than getlocaltime. [new,experimental]
+
+ * time.c (time_getgmtime): ditto.
+
+ * array.c (rb_ary_dup): uses DUPSETUP.
+
+ * string.c (rb_str_dup): uses DUPSETUP. now properly copies
+ instance variables too.
+
+Tue Dec 4 03:49:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_fread): EAGAIN/EWOULDBLOCK should not terminate and
+ throw away the input.
+
+ * time.c (time_new_internal): underflow adjustment must not use
+ negative div/mod.
+
+ * time.c (time_cmp): should consider tv_usec on non Fixnum number
+ comparison.
+Sun Dec 9 23:00:54 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
+ * matrix.rb: Vector#* bug. reported from Massimiliano Mirra
+ <info@chromatic-harp.com>.
+
+Sun Dec 9 22:15:59 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * enum.c (enum_sort_by): should replace with last elements.
+
+Mon Dec 3 16:06:57 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/socket/extconf.rb: remove -L/usr/local/lib.
+
+ * configure.in: add -Wl,-export-dynamic on NetBSD.
+
+Mon Dec 3 16:04:16 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * configure.in: not use X11BASE, since it's not always set.
+
+Mon Dec 3 13:53:49 2001 Tanaka Akira <akr@m17n.org>
+
+ * time.c (rb_strftime): buffer length condition was wrong.
+
+ * time.c (time_strftime): should backup buf to the original
+ buffer.
+
+Mon Dec 3 09:59:08 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_plus): must detect result overflow.
+
+ * time.c (time_minus): ditto.
+
+ * time.c (time_new_internal): round usec overflow and underflow
+ here.
+
+ * time.c (time_plus): move operand overflow/underflow check to
+ time_new_internal().
+
+ * time.c (time_minus): ditto.
+
+ * time.c (time_cmp): should consider tv_usec too.
+
+Mon Dec 3 03:32:22 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * configure.in: apply patch from NetBSD's pkgsrc (patch-aa).
+
+Sun Dec 2 22:01:52 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: use GCC, not without_gcc. remove without_gcc.
+
+ * ext/curses/extconf.rb: check for curses.h.
+
+ * ext/dbm/extconf.rb: check if $CFLAGS includes DBM_HDR.
+
+Sat Dec 1 12:13:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_gmtime): time_modify() should be called even if tm
+ struct is not calculated yet.
+
+Fri Nov 30 17:02:55 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: set target_cpu to i386 on cygwin and mingw32.
+
+ * configure.in: default --enable-shared to yes on cygwin and mingw32.
+
+Fri Nov 30 00:25:28 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * README.EXT: Appendix B is duplicated.
+
+ * README.EXT.ja: ditto.
+
+Thu Nov 29 00:28:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_equal): object with to_str must be treated as a
+ string.
+
+Wed Nov 28 18:46:28 2001 Ville Mattila <mulperi@iki.fi>
+
+ * eval.c (rb_thread_select): should subtract timeofday() from
+ limit, not reverse.
+
+Wed Nov 28 16:03:28 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * util.c (scan_hex): x is not a hexadecimal digit.
+
+Wed Nov 28 13:38:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_schedule): should treat the case that
+ select(2) returns 0, if a thread is under both WAIT_SELECT and
+ WAIT_TIME. Jakub Travnik <J.Travnik@sh.cvut.cz> actually fixed
+ this bug.
+
+Tue Nov 27 02:15:25 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_float): must distinguish -0.0 from 0.0.
+
+Mon Nov 26 20:57:24 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/Setup*, ext/syslog/*: import the "syslog" module from the
+ rough ruby project.
+
+Mon Nov 26 16:14:42 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * gc.c (gc_mark_all): tweak mark order for little bit better scan.
+
+ * gc.c (rb_gc_mark): ditto.
+
+ * gc.c (rb_gc): ditto.
+
+Mon Nov 26 16:54:59 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/win32.c (mypopen): fixed that mypclose() didn't really close
+ pipe.
+
+ * win32/win32.c (CreateChild): set STARTF_USESTDHANDLES flag only
+ when some handles are passed.
+
+Mon Nov 26 16:31:28 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (sort_by_i): slight performance boost.
+
+Sun Nov 25 21:02:18 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * parse.y (str_extend): change types of second and third arguments
+ from char to int.
+
+Thu Nov 22 20:15:28 2001 TAMURA Takashi <sheepman@tcn.zaq.ne.jp>
+
+ * gc.c (gc_mark_rest): should call gc_mark_children(), not gc_mark().
+
+ * gc.c (rb_gc_mark): may cause infinite loop.
+
+Thu Nov 22 00:28:13 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (str_extend): should check nesting parentheses in #{}.
+
+Wed Nov 21 12:22:52 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/cgi.rb: CGI#header: do not set Apache.request.status for
+ Location: if Apache.request.status is already set.
+
+Wed Nov 21 02:24:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (pst_wstopsig): returns nil unless WIFSTOPPED() is
+ non-zero.
+
+ * process.c (pst_wtermsig): returns nil unless WIFSIGNALED() is
+ non-zero.
+
+ * process.c (pst_wexitstatus): returns nil unless WIFEXITED() is
+ non-zero.
+
+Wed Nov 21 00:17:54 2001 Ville Mattila <mulperi@iki.fi>
+
+ * eval.c (rb_thread_select): tv_sec and tv_usec should not be
+ negative.
+
+ * signal.c (posix_signal): do not set SA_RESTART for SIGVTALRM.
+
+Tue Nov 20 21:09:22 2001 Guy Decoux <ts@moulon.inra.fr>
+
+ * parse.y (call_args2): block_arg may follow the first argument in
+ call_args2.
+
+Tue Nov 20 02:01:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (stack_check): should avoid stack length check during
+ raising SystemStackError exception.
+
+Tue Nov 20 01:07:13 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (str_extend): should not terminate string interpolation
+ with newlines in here-docs and newline terminated strings.
+
+Mon Nov 19 17:58:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_mod_modfunc): should follow NODE_ZSUPER link; based
+ on Guy Decoux's patch in [ruby-talk:25478].
+
+Mon Nov 19 16:09:33 2001 Tanaka Akira <akr@m17n.org>
+
+ * string.c (rb_str_succ): there was buffer overrun.
+
+Mon Nov 19 14:14:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (str_extend): term can be any character.
+
+Mon Nov 19 04:58:42 2001 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb (header): support for Apache. thanks to
+ Shugo Maeda <shugo@ruby-lang.org>.
+
+Sun Nov 18 19:37:55 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * parse.y: needless conditionals.
+
+ * parse.y (parse_regx): parse error at unterminated regex /#{.
+ (ruby-bugs-ja:PR#142)
+
+Sat Nov 17 12:37:39 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_unpack): should give length to utf8_to_uv().
+
+ * pack.c (utf8_to_uv): add length check.
+
+Sat Nov 17 01:41:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * massages: replace "wrong #" by "wrong number".
+
+ * marshal.c (w_float): output Infinity and NaN explicitly.
+
+ * marshal.c (r_object): support new explicit float format.
+
+ * eval.c (rb_thread_wait_for): select may cause ERESTART on
+ Solaris.
+
+ * eval.c (rb_thread_select): ditto.
+
+Thu Nov 15 15:29:39 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * array.c (rb_ary_join): non-nil separator must be converted to
+ String. and separators' total length was wrong.
+
+Thu Nov 15 03:37:17 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * hash.c (ruby_setenv): remove USE_WIN32_RTL_ENV block since it's
+ obsoleted.
+
+ * win32/win32.c, win32/win32.h: sort out #if 0 - #endif or others.
+
+Thu Nov 15 00:07:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_to_s): if rb_output_fs is nil, insert newlines
+ between array elements (use rb_default_rs as newline literal)
+ [experimental].
+
+Wed Nov 14 15:16:23 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * gc.c (init_mark_stack): no need to clear mark_stack.
+
+ * gc.c (gc_mark_all): need to handle finalizer mark.
+
+ * gc.c (gc_mark_rest): use MEMCPY instead of memcpy.
+
+ * gc.c (rb_gc_mark): earlier const check to avoid pusing special
+ constants into mark stack.
+
+Wed Nov 14 01:12:07 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/win32.c (waitpid): fix wait count.
+
+ * win32/win32.c (poll_child_status): rename from wait_child().
+
+Wed Nov 14 01:33:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (fix_to_s): 'to_s' now takes optional argument to
+ specify radix. [new]
+
+ * bignum.c (rb_big_to_s): ditto. [new]
+
+Tue Nov 13 19:50:30 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: do not override CC if set.
+
+Tue Nov 13 16:49:16 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/win32.c (mypopen): return error status instead of calling
+ rb_sys_fail().
+
+ * win32/win32.c (do_spawn): ditto.
+
+Tue Nov 13 14:39:11 2001 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * signal.c (sighandle): should not re-register sighandler if
+ POSIX_SIGNAL is defined.
+
+Tue Nov 13 12:55:59 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/win32.c (do_spawn): use CreateChild() instead of calling
+ CreateProcess() directly. Original patches comes from Patrick Cheng.
+
+ * win32/win32.c (mypopen): ditto.
+
+ * win32/win32.c (mypclose): use rb_syswait() instead of waiting in this
+ function.
+
+ * win32/win32.c (waitpid): use wait_child() instead of _cwait().
+
+ * win32/win32.c (CreateChild): added. [new]
+
+ * win32/win32.c (wait_child): added. [new]
+
+ * win32/win32.c (FindFirstChildSlot): added. [new]
+
+ * win32/win32.c (FindChildSlot): added. [new]
+
+ * win32/win32.c (FindPipedChildSlot): added. [new]
+
+ * win32/win32.c (CloseChildHandle): added. [new]
+
+ * win32/win32.c (FindFreeChildSlot): added. [new]
+
+Tue Nov 13 12:38:12 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * hash.c (envix): use GET_ENVIRON and FREE_ENVIRON to get environment
+ variables list.
+
+ * hash.c (env_keys): ditto.
+
+ * hash.c (env_each_key): ditto.
+
+ * hash.c (env_values): ditto.
+
+ * hash.c (env_keys): ditto.
+
+ * hash.c (env_each_value): ditto.
+
+ * hash.c (env_each): ditto.
+
+ * hash.c (env_inspect): ditto.
+
+ * hash.c (env_to_a): ditto.
+
+ * hash.c (env_size): ditto.
+
+ * hash.c (env_empty_p): ditto.
+
+ * hash.c (env_has_value): ditto.
+
+ * hash.c (env_index): ditto.
+
+ * hash.c (env_to_hash): ditto.
+
+ * win32/win32.c (win32_getenv): use static buffer.
+
+ * win32/win32.c, win32/win32.h (win32_get_environ): get environment
+ variables list. [new]
+
+ * win32/win32.c, win32/win32.h (win32_free_environ): free environment
+ variables list. [new]
+
+Mon Nov 12 16:48:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (error_print): errat array may be empty.
+
+Mon Nov 12 01:30:37 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval_cmd): should not upgrade safe level unless
+ explicitly specified by argument newly added.
+
+ * signal.c (sig_trap): should not allow tainted trap closure.
+
+ * variable.c (rb_f_trace_var): should not allow trace_var on safe
+ level higher than 3.
+
+ * variable.c (rb_f_trace_var): should not allow tainted trace
+ closure.
+
+Sun Nov 11 00:12:23 2001 TAMURA Takashi <sheepman@tcn.zaq.ne.jp>
+
+ * gc.c: do not use static stack until system stack overflows.
+
+Sat Nov 10 03:57:09 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (eval): should call Exception#exception instead of
+ calling rb_exc_new3() directly.
+
+ * error.c (exc_exception): set "mesg" directly to the clone. it
+ might be better to set mesg via some method for flexibility.
+
+Sat Nov 10 00:14:24 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (cvar_override_check): should print original module
+ name, if 'a' is T_ICLASS.
+
+ * parse.y (yylex): float '1_.0' should not be allowed.
+
+ * variable.c (var_getter): should care about var as Qfalse
+ (ruby-bugs#PR199).
+
+Fri Nov 9 13:50:06 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/config.status.in: make CFLAGS same as Makefile's one.
+
+Thu Nov 8 20:20:37 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_trap_eval): avoid annoying warning with signal.
+ [ruby-talk:23225]
+
+ * eval.c (rb_call0): adjust caller source file/line while
+ evaluating optional arguments.
+
+Thu Nov 8 18:41:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (cmpint): <=> or block for {min,max} may return bignum.
+
+ * array.c (sort_1): use rb_compint.
+
+ * array.c (sort_2): ditto.
+
+ * enum.c (min_ii): ditto.
+
+ * enum.c (min_ii): ditto.
+
+ * enum.c (max_i): ditto.
+
+ * enum.c (max_ii): ditto.
+
+Thu Nov 8 18:21:02 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (path_check_1): forgot to initialize 'p'.
+
+Thu Nov 8 14:52:15 2001 Tanaka Akira <akr@m17n.org>
+
+ * mkconfig.rb: use String#dump to generate Ruby string literal.
+
+Thu Nov 8 15:46:54 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_eql): should override 'eql?'
+
+ * array.c (rb_ary_hash): should override 'hash' too.
+
+Tue Nov 6 14:38:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (security): always give warning for insecure PATH.
+
+ * dir.c (my_getcwd): do not rely on MAXPATHLEN.
+
+ * file.c (rb_file_s_readlink): ditto.
+
+ * file.c (path_check_1): ditto.
+
+Tue Nov 6 14:17:14 2001 Amos Gouaux <amos+ruby@utdallas.edu>
+
+ * lib/net/imap.rb (getquota_response): use astring for mailbox
+ names.
+
+ * lib/net/imap.rb (getacl_response): ditto.
+
+Mon Nov 5 17:09:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): should not call rb_f_block_given_p().
+
+Sat Nov 3 23:33:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_chomp_bang): should terminate string by NUL.
+
+Sat Nov 3 22:28:51 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * matrix.rb (Matrix#column_vectors, Matrix#row_vectors): ditto bug.
+ this bug report and fix by tsutomu@nucba.ac.jp.
+
+ * forwardable.rb: change raise to Kernel::raise
+
+Sat Nov 3 10:11:57 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): better error message.
+
+Thu Nov 1 14:08:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_aref): idx may be a Bignum.
+
+ * numeric.c (fix_aref): negative index must return zero.
+
+Thu Nov 1 13:23:50 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (gc_mark_children): should NOT treat last element of
+ structs and arrays specially.
+
+Wed Oct 31 16:59:25 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (exec_under): should initialize ruby_frame->self;
+
+Wed Oct 31 15:09:28 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (POP_VARS): should not set DVAR_DONT_RECYCLE if _old
+ ruby_vars is already force_recycled.
+
+Wed Oct 31 10:28:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_gc): handles mark stack overflow.
+
+ * gc.c (PUSH_MARK): use static mark stack, no more recursion.
+
+Wed Oct 31 02:44:06 2001 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: CGI::Cookie::parse(): Ignore duplicate keys caused by
+ Netscape bug.
+
+Tue Oct 30 18:21:51 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/mkexports.rb: follow the change of rb_io_puts().
+
+Tue Oct 30 14:04:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_chomp_bang): do smart chomp if $/ == '\n'. [new]
+
+ * io.c (rb_io_puts): don't treat Array specially.
+
+ * bignum.c (rb_big_cmp): should convert bignum to float.
+
+ * eval.c (rb_f_eval): can't modify untainted binding.
+
+Mon Oct 29 16:08:30 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_compile_pattern): should preserve p0 value.
+
+Mon Oct 29 14:56:44 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * intern.h (rb_protect_inspect): follow the change of array.c.
+
+ * eval.c (rb_exec_end_proc): follow the change of rb_protect().
+
+ * eval.c (method_proc, umethod_proc, rb_catch): cast the first
+ parameter of rb_iterate() to avoid VC++ warning.
+
+ * range.c (range_step): ditto.
+
+ * ext/sdbm/init.c (fsdbm_update, fsdbm_replace): ditto.
+
+Mon Oct 29 07:57:31 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (str_extend): should allow interpolation of $-x.
+
+ * variable.c (rb_cvar_set): empty iv_tbl may cause infinite loop.
+
+ * variable.c (rb_cvar_get): ditto.
+
+ * variable.c (cvar_override_check): ditto.
+
+Sat Oct 27 23:01:19 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_eq): convert Bignum to Float, instead of
+ reverse.
+
+Fri Oct 26 06:19:29 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_localtime): getting tm should not be prohibited for
+ frozen time objects.
+
+ * time.c (time_gmtime): ditto.
+
+ * version.c (Init_version): freeze RUBY_VERSION,
+ RUBY_RELEASE_DATE, and RUBY_PLATFORM.
+
+ * file.c (Init_File): freeze File::SEPARATOR, ALT_SEPARATOR and
+ PATH_SEPARATOR.
+
+ * file.c (rb_stat_cmp): should check operand type before calling
+ get_stat().
+
+Thu Oct 25 10:28:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval_cmd): should not invoke "call" with a block on
+ any occasion.
+
+Wed Oct 24 03:25:31 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (fix_aref): idx may be a Bignum.
+
+Tue Oct 23 01:21:19 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (proc_invoke): fix self switching in Proc#call
+ (ruby-bugs-ja#PR108) and GC failure. use Qundef instead of 0
+ to direct not switching self.
+
+ * eval.c (call_trace_func): ditto.
+
+ * eval.c (call_end_proc): ditto.
+
+ * eval.c (proc_call): ditto.
+
+ * eval.c (proc_yield): ditto.
+
+Tue Oct 23 01:15:43 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * variable.c (rb_global_entry): reconstruct global variable
+ aliasing (sharing global_entry->var with other global_entry).
+
+ * variable.c (undef_getter): ditto.
+
+ * variable.c (undef_setter): ditto.
+
+ * variable.c (val_setter): ditto.
+
+ * variable.c (mark_global_entry): ditto.
+
+ * variable.c (rb_define_hooked_variable): ditto.
+
+ * variable.c (rb_f_trace_var): ditto.
+
+ * variable.c (remove_trace): ditto.
+
+ * variable.c (rb_f_untrace_var): ditto.
+
+ * variable.c (rb_gvar_get): ditto.
+
+ * variable.c (trace_en): ditto.
+
+ * variable.c (rb_gvar_set): ditto.
+
+ * variable.c (rb_gvar_defined): ditto.
+
+ * variable.c (rb_alias_variable): ditto.
+
+Mon Oct 22 18:53:55 2001 Masahiro Tanaka <masa@stars.gsfc.nasa.gov>
+
+ * numeric.c (num_remainder): a bug in Numeric#remainder.
+
+Mon Oct 22 15:21:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_exec_end_proc): END might be called within END
+ block.
+
+ * class.c (rb_mod_clone): should not copy class name, since clone
+ should remain anonymous.
+
+Fri Oct 19 23:40:37 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * variable.c (remove_trace): should not access already freed area.
+
+ * variable.c (rb_f_untrace_var): fix memory leak.
+
+Fri Oct 19 17:55:14 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * marshal.c (w_uclass): cloned class is not user
+ class. (ruby-bugs-ja#PR103)
+
+ * marshal.c (r_object): Struct subclass couldn't
+ load. (ruby-bugs-ja#PR104)
+
+Wed Oct 17 14:12:50 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * variable.c (alias_fixup): added. ad hoc support for ordinary
+ global variable aliasing. when original entry is set, make the
+ alias to refer directly as possible.
+
+ * variable.c (alias_getter, alias_setter): ditto.
+
+ * variable.c (rb_alias_variable): ditto. and no need to mark alias
+ variables.
+
+ * variable.c (rb_gvar_defined): refer the original entry of an alias.
+
+Tue Oct 16 23:29:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call0): self in a block given to define_method now be
+ switched to the receiver of the method.
+
+ * eval.c (proc_invoke): added new parameter to allow self
+ switching.
+
+Tue Oct 16 21:38:15 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_f_missing): check stack level with rb_stack_check().
+
+ * eval.c (rb_call0): ditto.
+
+ * eval.c, intern.h (rb_stack_check): added. [new]
+
+Tue Oct 16 13:18:47 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * object.c (rb_mod_initialize): optional block with
+ Module.new. [new] (from 2001-10-10)
+
+Tue Oct 16 00:07:06 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * parse.y (yylex): disallow alpha-numeric and mbchar for
+ terminator of %string.
+
+Mon Oct 15 18:00:05 2001 Pit Capitain <pit@capitain.de>
+
+ * string.c (rb_str_index): wrong increment for non alphanumeric
+ string.
+
+Mon Oct 15 05:23:02 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * sprintf.c (rb_f_sprintf): support "%B".
+
+Wed Oct 10 03:11:47 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_stat_clone): should copy internal data too.
+
+ * numeric.c (num_clone): Numeric should not be copied by clone.
+
+ * object.c (rb_obj_clone): should check immediate values.
+
+ * parse.y (command): `yield' should take command_args.
+
+ * parse.y (parse_quotedwords): %w(...) is not a string.
+
+Tue Oct 9 18:40:35 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * process.c (Init_process): activate the case NT.
+
+Tue Oct 9 17:08:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (thread_status_name): separated from
+ rb_thread_inspect(). return string expression for thread status.
+
+ * eval.c (rb_thread_status, rb_thread_inspect): use
+ thread_status_name().
+
+ * eval.c (rb_thread_priority_set): return the priority not but
+ self.
+
+Sat Oct 6 23:07:08 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): NODE_MATCH3 was confusing left and right. sigh.
+
+Fri Oct 5 15:19:46 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_unique): should not dump anonymous class.
+
+Fri Oct 5 11:59:13 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (proc_s_new): revived.
+
+ * eval.c (Init_Proc): define Proc.new instead of Proc.allocate to
+ inhibit from creating uninitialized Proc.
+
+Thu Oct 4 14:11:03 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/socket/socket.c (ruby_connect): EALREADY is the equivalent
+ for EINPROGRESS in ws2_32.lib.
+
+Wed Oct 3 20:11:06 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * re.c (rb_reg_s_alloc): avoid infinite recursion.
+
+Wed Oct 3 16:49:49 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/gdbm/gdbm.c (rb_gdbm_fetch): str is a VALUE now.
+
+Wed Oct 3 13:32:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (r_object): better allocation type check for
+ TYPE_UCLASS. usage of allocation framework is disabled for now.
+
+ * variable.c (rb_class_path): Module may have subclass.
+
+ * string.c (rb_str_update): should maintain original negative
+ offset.
+
+ * string.c (rb_str_subpat_set): ditto
+
+ * string.c (rb_str_aset): ditto.
+
+ * re.c (rb_reg_nth_match): should check negative nth.
+
+ * re.c (rb_reg_nth_defined): ditto.
+
+Tue Oct 2 19:12:47 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/ftools.rb (catname): allow trailing '/' for the destination.
+
+Tue Oct 2 18:31:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): should override existing class.
+
+Tue Oct 2 17:08:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_alloc): general instance allocation framework.
+ use of NEWOBJ() is deprecated except within 'allocate' method.
+
+Tue Oct 2 08:04:52 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * marshal.c (r_object): TYPE_UCLASS check should be inversed.
+
+Mon Oct 1 19:18:54 2001 Tanaka Akira <akr@m17n.org>
+
+ * ext/socket/socket.c (unix_addr): getsockname(2) may result len = 0.
+
+ * ext/socket/socket.c (unix_peeraddr): getpeername(2) may result
+ len = 0.
+
+Mon Oct 1 09:59:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_subpat_set): support function for new argument
+ pattern String#[re,offset] = val. [new]
+
+Sat Sep 29 02:30:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (POP_BLOCK): rb_gc_force_recycle() was called too much.
+ Should not be called if SCOPE_DONT_RECYCLE is set.
+
+Wed Sep 26 22:21:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_aref_m): new argument pattern
+ String#[re,offset]. [new]
+
+Wed Sep 26 19:02:39 2001 Guy Decoux <ts@moulon.inra.fr>
+
+ * parse.y: allow 'primary[] = arg'
+
+Tue Sep 25 10:46:42 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/win32.c (isInternalCmd): check return value of NtMakeCmdVector
+ (Tietew <tietew@tietew.net>'s patch).
+
+Mon Sep 24 00:55:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_substr): should return an instance of
+ receiver's class.
+
+ * string.c (rb_str_succ): ditto.
+
+ * array.c (rb_ary_subseq): ditto.
+
+ * array.c (rb_ary_initialize): Array.new([1,2,3]) => [1,2,3]. [new]
+
+Sat Sep 22 22:16:08 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_reverse): should return an instance of
+ receiver's class.
+
+ * string.c (rb_str_times): ditto.
+
+ * array.c (rb_ary_times): ditto
+
+ * string.c (str_gsub): ditto.
+
+ * string.c (rb_str_ljust): ditto.
+
+ * string.c (rb_str_rjust): ditto.
+
+ * string.c (rb_str_center): ditto.
+
+Sat Sep 22 12:13:39 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (eval): retrieves file, line information from binding.
+
+Thu Sep 20 21:25:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (MATCH_DATA): access via rb_svar().
+
+Thu Sep 20 15:20:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c, intern.h (rb_svar): return reference to special variable
+ from local variable index. [new]
+
+ * eval.c (rb_eval): use rb_svar() for NODE_FLIP{2,3}.
+
+ * parse.y (rb_(backref|lastline)_(get|set)): access via rb_svar().
+
+ * eval.c (proc_invoke): push dynamic variables.
+
+ * eval.c (rb_thread_yield): push special variables as dynamic
+ variables($_, $~ and FLIP states).
+
+Thu Sep 20 15:20:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * intern.h, parse.y (rb_is_local_id): return true if the ID is
+ local symbol. [new]
+
+ * parse.y (internal_id): make new ID for internal use. [new]
+
+ * parse.y (cond0): allocate internal ID for NODE_FLIP{2,3}.
+
+ * eval.c (rb_f_local_variables): use rb_is_local_id() to select
+ visible local variables.
+
+Thu Sep 20 15:20:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_thread_start_0): SCOPE_SHARED is removed.
+
+ * eval.c, intern.h (rb_thread_scope_shared_p): removed. special
+ variables are no longer shared by threads.
+
+ * re.c (rb_reg_search): MATCHDATA is no longer shared by threads.
+
+Tue Sep 18 11:44:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_init): String.new() => "" [new]
+
+Tue Sep 11 20:53:56 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (dir_path): new method.
+
+ * dir.c (dir_initialize): wrap DIR into struct, along with path
+ information.
+
+Sat Sep 8 07:13:42 2001 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/net/telnet.rb: waitfor(): improvement. thanks to
+ nobu.nakada@nifty.ne.jp
+
+Sat Sep 8 04:34:17 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_restore_context): save current value of
+ lastline and lastmatch in the thread struct for later restore.
+
+ * eval.c (rb_thread_save_context): restore lastline and lastmatch.
+
+Fri Sep 7 11:27:56 2001 akira yamada <akira@ruby-lang.org>
+
+ * numeric.c (flo_to_s): should handle negative float value.
+
+Fri Sep 7 09:44:44 2001 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/net/telnet.rb: waitfor(): bug fix.
+
+Fri Sep 7 07:11:34 2001 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: CGI#doctype(): bug fix (html4Fr).
+
+ * lib/net/telnet.rb, lib/cgi.rb: remove VERSION, RELEASE_DATE,
+ VERSION_CODE, RELEASE_CODE. please use REVISION.
+
+ * lib/cgi.rb: CGI#header(): bug fix.
+
+ * lib/net/telnet.rb, lib/cgi.rb: concat --> +=
+
+Thu Sep 6 17:38:18 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * dir.c (dir_s_chdir): raise if environment variable HOME/LOGDIR
+ not set.
+
+ * dir.c (glob_helper): avoid infinite loop on a file name with
+ wildcard characters. (ruby-bugs#PR177)
+
+Thu Sep 6 14:25:15 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/digest.c (rb_digest_base_s_hexdigest): remove a debug
+ print.
+
+Thu Sep 6 13:56:14 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/digest.c (rb_digest_base_s_digest,
+ rb_digest_base_s_hexdigest): ensure that a string is given.
+
+Thu Sep 6 13:28:51 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/jcode.rb (_regexp_quote): fix quote handling, again.
+
+Thu Sep 6 07:28:56 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c (rb_find_file_ext): add const qualifiers to ext.
+
+ * intern.h (rb_find_file_ext): ditto.
+
+Thu Sep 6 07:16:14 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/socket/socket.c (Init_socket): remove duplicating constants.
+
+Thu Sep 6 03:15:24 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_include_module): should check whole ancestors to
+ avoid duplicate module inclusion.
+
+Wed Sep 5 20:02:27 2001 Shin'ya Adzumi <adzumi@denpa.org>
+
+ * string.c (trnext): should check backslash before updating "now"
+ position.
+
+Wed Sep 5 17:41:11 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/jcode.rb (_regexp_quote): fix quote handling.
+
+Tue Sep 4 01:03:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (Init_Regexp): to_s to be alias to inspect.
+
+Mon Sep 3 22:46:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): should support 'keyword='.
+
+Mon Sep 3 20:26:08 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * intern.h (rb_find_file_ext): changed from rb_find_file_noext().
+
+Mon Sep 3 15:12:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (proc_options): should not adjust argc/argv if -e option
+ is supplied.
+
+Mon Sep 3 14:11:17 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * error.c: unbreak the build on *BSD with gcc 3.0.1 by removing
+ the conflicting declaration of sys_nerr for *BSD.
+
+Sat Sep 1 18:50:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (proc_options): should not alter origargv[].
+
+ * ruby.c (set_arg0): long strings for $0 dumped core.
+
+Sat Sep 1 09:50:54 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ruby.c (set_arg0): prevent SEGV when val is longer than the
+ original arguments.
+
+ * ruby.c (ruby_process_options): initialize total length of
+ original arguments at first.
+
+Sat Sep 1 14:05:28 2001 Brian F. Feldman <green@FreeBSD.org>
+
+ * ruby.c (set_arg0): use setprogtitle() if it's available.
+
+Sat Sep 1 03:49:11 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_popen): accept integer flags as mode.
+
+Fri Aug 31 19:46:05 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c (rb_find_file_ext): extension table can be supplied from
+ outside. renamed.
+
+ * eval.c (rb_f_require): replace rb_find_file_noext by
+ rb_find_file_ext.
+
+Fri Aug 31 19:26:55 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_provided): should also check feature without
+ extension.
+
+Fri Aug 31 13:06:33 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flo_to_s): do not rely on decimal point to be '.'
+
+Wed Aug 29 02:18:53 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): ternary ? can be followed by newline.
+
+Tue Aug 28 00:40:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_require): should check static linked libraries
+ before raising exception.
+
+Fri Aug 24 15:17:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_equal): check identity equality first.
+
+ * string.c (rb_str_equal): ditto.
+
+ * struct.c (rb_struct_equal): ditto.
+
+Fri Aug 24 14:38:17 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * dln.c (dln_strerror): fix a bug that sometimes made null message on
+ win32 (Tietew <tietew@tietew.net>'s patch).
+
+ * win32/win32.c (mystrerror): ditto.
+
+Fri Aug 24 03:15:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (Init_Numeric): undef Integer::new.
+
+Fri Aug 24 00:46:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): NODE_WHILE should update result for each
+ conditional evaluation.
+
+ * eval.c (rb_eval): NODE_UNTIL should return last evaluated value
+ (or value given to break).
+
+Thu Aug 23 21:59:38 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * enum.c (sort_by_i): fix typo.
+
+Thu Aug 23 10:10:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (is_defined): should not dump core for "defined?(())".
+
+ * eval.c (umethod_bind): recv can be an instance of descender of
+ oklass if oklass is a Module.
+
+Wed Aug 22 23:20:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_equal): check identity equality first.
+
+Wed Aug 22 19:58:59 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (intersect_fds): counts intersecting fds.
+
+ * eval.c (rb_thread_schedule): only fds requested by
+ each thread count as select_value.
+
+Tue Aug 21 22:28:09 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c (group_member): should check real gid only.
+
+ * file.c (eaccess): do not cache euid, since effective euid may be
+ changed via Process.euid=().
+
+ * file.c (eaccess): return -1 unless every specified access mode
+ is permitted.
+
+Tue Aug 21 16:09:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): while/until returns the value which is given
+ to break.
+
+ * parse.y (value_expr): using while/until/class/def as an
+ expression is now gives a warning, not an error.
+
+Tue Aug 21 11:56:02 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_eqq): should compare strings based on magical
+ increment (using String#upto), not dictionary order.
+
+Mon Aug 20 19:53:16 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/digest/sha2/extconf.rb: fix support for cross-compiling.
+
+ * mkconfig.rb: fix support for autoconf 2.52.
+
+Mon Aug 20 17:24:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_sort_by): new method for Schewartzian transformed
+ stable sort.
+
+Mon Aug 20 16:09:05 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (mod_av_set): detect constant overriding for built-in
+ classes/modules.
+
+Mon Aug 20 15:14:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (tokadd_escape): escaped backslashes too much.
+
+Mon Aug 20 13:24:08 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_step): 'iter' here should be an array.
+
+Mon Aug 20 12:43:08 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): should retrieve __member__ data from
+ non-singleton class.
+
+Sat Aug 18 23:11:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_cvar_get): class variable override check added.
+
+ * variable.c (rb_cvar_set): ditto
+
+ * variable.c (rb_cvar_declare): ditto.
+
+Fri Aug 17 12:13:48 2001 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/protocol.rb: Protocol.new requires at least one arg.
+
+ * lib/net/smtp.rb: ditto.
+
+ * lib/net/pop.rb: ditto.
+
+ * lib/net/http.rb: ditto.
+
+Fri Aug 17 00:49:51 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (parse_regx): handle backslash escaping of delimiter here.
+
+Thu Aug 16 23:03:40 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * io.c: prevent recursive malloc calls on NEC UX/4800.
+
+ * ext/socket/socket.c: ditto.
+
+Thu Aug 16 13:54:04 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (s_recvfrom): fix typo.
+
+Thu Aug 16 09:53:28 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (s_recvfrom): avoid VC++6 warning.
+
+Thu Aug 16 03:50:33 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/win32.c (NtCmdGlob): avoid VC++ warning.
+
+ * lib/mkmf.rb: add -I$(srcdir) to CPPFLAGS.
+
+Wed Aug 15 04:59:15 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/*/extconf.rb: really fix so that they build from any
+ directory.
+
+Wed Aug 15 04:04:02 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/sha2/extconf.rb: fix so that they build from any
+ directory.
+
+Wed Aug 15 01:59:19 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/defs.h: Define NO_UINT64_T instead of emitting an
+ error to fail.
+
+ * ext/digest/sha2/extconf.rb: Do not exit on error, and utilize
+ NO_UINT64_T to detect if the system has a 64bit integer type.
+
+Tue Aug 14 21:14:07 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/sha2/extconf.rb: do not create Makefile when no 64bit
+ integer type is detected.
+
+Tue Aug 14 17:09:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_step): new method.
+
+Tue Aug 14 11:49:00 2001 TOYOFUKU Chikanobu <toyofuku@juice.or.jp>
+
+ * string.c (rb_str_cmp): remove needless conditional.
+
+Tue Aug 14 03:23:25 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * string.c (rb_str_lstrip_bang) `return Qnil' was missing.
+
+Mon Aug 13 14:16:46 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * bignum.c, marshal.c: Detypo: s/SIZEOF_ING/SIZEOF_INT/.
+
+Sun Aug 12 15:01:58 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * string.c (rb_str_cat): fix buffer overflow.
+
+ * string.c (rb_str_append): nothing to append actually when `str2'
+ is empty.
+
+Sat Aug 11 14:43:47 2001 Tanaka Akira <akr@m17n.org>
+
+ * array.c (rb_inspecting_p): initialize inspect_key if it is
+ not initialized yet.
+
+Fri Aug 10 22:14:37 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (cond0): operands of logical operators are not treated
+ as conditional expression anymore, but propagate conditional
+ status if used in conditionals.
+
+Tue Aug 7 09:10:32 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * win32/win32.h: fix problems with BC++ (ruby-bugs#PR161).
+
+Mon Aug 6 23:47:46 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * pack.c (pack_pack): associates p/P strings once at last
+ (reverted to 1.26).
+
+ * string.c (rb_str_associate): associates an Array at once, not
+ but a String. realloc's when str_buf.
+
+Mon Aug 6 17:01:33 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_gc_mark_threads): should mark ruby_cref.
+
+Mon Aug 6 14:31:37 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * numeric.c (num_divmod): fix typo.
+
+Mon Aug 6 03:29:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_lstrip_bang): new method.
+
+ * string.c (rb_str_rstrip_bang): new method.
+
+Mon Aug 6 00:35:03 2001 Guy Decoux <decoux@moulon.inra.fr>
+
+ * struct.c (rb_struct_modify): should check frozen and taint
+ status.
+
+Sun Aug 5 19:28:39 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * string.c (rb_str_associate): should consider STR_ASSOC too.
+
+Sun Aug 5 07:46:18 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_undefined): do not recurse if method_missing is
+ undefined.
+
+Thu Aug 2 21:37:32 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (proc_waitpid): now all arguments are optional.
+
+ * process.c (Init_process): waitpid is now alias to wait.
+
+ * process.c (Init_process): waitpid2 is now alias to wait2.
+
+ * process.c (rb_waitpid): made public.
+
+ * ext/pty/pty.c (pty_getpty): avoid disturbing SIGCHLD using
+ thread and rb_waitpid.
+
+Thu Aug 2 11:23:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (proc_getpgrp): now takes no argument on all
+ platforms.
+
+ * process.c (proc_setpgrp): ditto.
+
+Thu Aug 2 01:29:42 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c (strrdirsep): removed meaningless code.
+
+ * file.c (rb_file_s_expand_path): reverted to 1.66.
+
+Wed Aug 1 16:17:47 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_s_pack_sockaddr_in): added
+ Socket::pack_sockaddr_in(). [new]
+
+ * ext/socket/socket.c (sock_s_pack_sockaddr_un): added
+ Socket::pack_sockaddr_un(). [new]
+
+ * ext/socket/socket.c (sock_s_pack_sockaddr_in): added
+ Socket::unpack_sockaddr_in(). [new]
+
+ * ext/socket/socket.c (sock_s_pack_sockaddr_un): added
+ Socket::unpack_sockaddr_un(). [new]
+
+Wed Aug 1 15:42:16 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * eval.c (ruby_run): avoid VC++ warning.
+
+Tue Jul 31 17:30:53 2001 Usaku Nakamura <usa@ruby-lang.org>
+
+ * marshal.c (Init_marshal): fix typos.
+
+Tue Jul 31 15:16:39 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * process.c (last_status_set): nothing returned, should be void.
+
+ * ext/socket/socket.c (load_addr_info): ditto.
+
+Tue Jul 31 12:11:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (Init_marshal): new constant Marshal::MAJOR_VERSION
+ and Marshal::MINOR_VERSION.
+
+Tue Jul 31 07:18:04 2001 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * file.c (rb_file_s_expand_path): scans per path element not per
+ byte/character, including fix of [ruby-talk:18152] and
+ multi-byte pathname support.
+
+Tue Jul 31 11:52:10 2001 akira yamada <akira@ruby-lang.org>
+
+ * marshal.c (marshal_load): ruby_verbose test should be wrapped by
+ RTEST().
+
+Mon Jul 30 17:54:23 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_index): should return nil (not the default
+ value) if value is not in the hash.
+
+Mon Jul 30 12:55:47 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_div): new method added. alias to '/' which
+ should be preserved even if '/' is redefined (e.g. by
+ mathn). [new]
+
+Mon Jul 30 11:12:14 2001 Amos Gouaux <amos+ruby@utdallas.edu>
+
+ * lib/net/imap.rb: added new commands for managing folder quotas
+ and folder ACLs.
+
+Mon Jul 30 03:19:53 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_cstr2inum): "0 ff".hex should return 0, not 255.
+
+Fri Jul 27 22:29:41 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c (rb_file_s_expand_path): fixed using CharNext().
+
+Fri Jul 27 18:07:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_provided): extension should be guessed using
+ rb_find_file_noext().
+
+ * eval.c (rb_f_require): should call rb_feature_p() after
+ extension completion.
+
+Fri Jul 27 16:25:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): add CHECK_INTS before next, redo, retry to
+ avoid potential uninterruptable infinite loop.
+
+Thu Jul 26 11:27:12 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * file.c (rb_find_file_noext, rb_find_file): fix tilde expansion
+ problem.
+
+Wed Jul 25 17:54:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_file_s_expand_path): use CharNext() to expand.
+
+Wed Jul 25 17:16:26 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * intern.h: add some missing function prototypes.
+
+Wed Jul 25 15:50:05 2001 Guy Decoux <decoux@moulon.inra.fr>
+
+ * file.c (rb_file_s_expand_path): should not expand "." and ".."
+ not following dirsep.
+
+Wed Jul 25 12:15:32 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * file.c (rb_find_file_noext): should update f by expanded path.
+
+ * file.c (rb_find_file): ditto.
+
+Tue Jul 24 23:10:47 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c (strrdirsep): multi-byte pathname and DOSish separator
+ support. originally comes from Patrick Cheng. [new]
+
+ * file.c (rb_file_s_basename, rb_file_s_dirname): use
+ strrdirsep(). comes from Patrick Cheng.
+
+ * file.c (is_absolute_path): restricted in DOSish absolute path
+ with drive letter, and UNC support. originally comes from
+ Patrick Cheng.
+
+ * file.c (getcwd): define macro using getwd() unless provided.
+
+Tue Jul 24 19:23:15 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/extmk.rb.in, lib/mkmf.rb: dig the target subdirectory for
+ lib/* files properly in case of create_makefile("dir/name").
+
+Mon Jul 23 00:26:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_provide_feature): should not tweak extension used for
+ loading.
+
+Sun Jul 22 21:16:43 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/extmk.rb.in, lib/mkmf.rb: introduce a couple of new make
+ variables: CLEANFILES and DISTCLEANFILES. They'd typically be
+ defined in a file "depend".
+
+Sat Jul 21 09:40:10 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * io.c (io_fread): use fread(3) if PENDING_COUNT is available.
+
+Fri Jul 20 22:55:01 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * gc.c (ruby_xrealloc): fix a dangling bug which led memory
+ reallocation to fail even though the second try after a GC
+ succeeds.
+
+Fri Jul 20 03:00:46 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * class.c (rb_mod_include_p): Module#include? added. [new]
+
+Fri Jul 20 01:05:50 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (ignorecase_setter): give warning on modifying $=.
+
+ * string.c (rb_str_casecmp): new method. [new]
+
+ * string.c (rb_str_eql): separated from rb_str_equal(), make it
+ always be case sensitive. [new]
+
+ * string.c (rb_str_hash): made it always be case sensitive.
+
+Thu Jul 19 13:03:15 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_f_require): should not include path in $" value
+
+ * file.c (rb_find_file): should return 0 explicitly on failure.
+
+Tue Jul 17 11:44:40 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * ruby.h: enable volatile directive with VC++.
+
+ * regex.c: ditto.
+
+Tue Jul 17 06:01:12 2001 Minero Aoki <aamine@loveruby.net>
+
+ * doc/net/smtp.rd.ja, pop.rd.ja, http.rd.ja: new files.
+
+ * MANIFEST: add doc/net/{http,pop,smtp}.rd.ja.
+
+Tue Jul 17 11:22:01 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (NUM_FAILURE_ITEMS): was confusing NUM_REG_ITEMS and
+ NUM_NONREG_ITEMS, which have happened to be same value.
+
+Tue Jul 17 11:08:34 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * ext/extmk.rb.in: modify RM macro because command.com/cmd.exe don't
+ recognize single quotation as quote character.
+
+ * lib/mkmf.rb: ditto.
+
+Tue Jul 17 01:38:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_class_new): subclass check moved to this function.
+
+ * class.c (rb_class_boot): check less version of rb_class_new().
+
+Man Jul 16 13:21:30 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * file.c (file_load_ok): fix typo.
+
+Mon Jul 16 12:58:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_invoke): should preserve iter status for embedded
+ frame in the block.
+
+Mon Jul 16 00:04:39 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_file_s_expand_path): may overrun buffer on stack.
+
+Sun Jul 15 01:38:28 2001 Guy Decoux <decoux@moulon.inra.fr>
+
+ * string.c (rb_str_insert): forgot to call rb_str_modify().
+
+Sat Jul 14 12:26:30 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/digest/*/extconf.rb: fix so that they build from any
+ directory.
+
+Sat Jul 14 06:20:17 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/net/http.rb: HTTP#proxy? did not worked.
+
+Sat Jul 14 02:56:19 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/extmk.rb.in: support multi-level ext/ directories.
+ (e.g. you can have ext/foo, ext/foo/bar and ext/foo/baz)
+
+Sat Jul 14 02:55:02 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/.cvsignore: let cvs ignore extinit.c.
+
+Fri Jul 13 23:47:35 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_search): should consider reverse search.
+
+Fri Jul 13 22:26:09 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/mkmf.rb: use File::split to split a target into a prefix and
+ a module name. This also works around a just found bug of
+ String#rindex.
+
+ * ext/extmk.rb.in: ditto.
+
+Fri Jul 13 02:36:10 2001 Minero Aoki <aamine@loveruby.net>
+
+ * dir.c (dir_s_chdir): warn only when invoked from multiple
+ threads or block is not given.
+
+Thu Jul 12 15:11:48 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/socket/socket.c (ruby_connect): workaround for the setup of
+ Cygwin socket(EALREADY).
+
+Mon Jul 9 16:49:30 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb.in: modify RM macro.
+
+ * lib/mkmf.rb: ditto.
+
+Sun Jul 8 20:52:02 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi().
+
+Sun Jul 8 16:04:35 2001 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: rename HTTP#request_by_name to send_request.
+
+ * lib/net/protocol.rb (ProtoSocket#read): modify typo.
+
+Sat Jul 7 17:45:35 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_convert_type): should use rb_rescue(), not rb_rescue2().
+
+ * range.c (range_init): ditto.
+
+Fri Jul 6 18:01:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_dup): copies (actually does not free)
+ generic_ivar on dupif original owns them.
+
+Fri Jul 6 02:15:06 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/tempfile.rb: a tempfile must be created with mode 0600.
+
+Thu Jul 5 20:28:53 2001 Tietew <tietew@tietew.net>
+
+ * string.c (rb_str_each_line): should propagate taint mark.
+
+ * ext/nkf/nkf.c (rb_nkf_kconv): ditto.
+
+Fri Jul 6 14:54:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_require): revamp for simpler implementation.
+
+ * file.c (rb_find_file_noext): use String object, instead of
+ passing char* around.
+
+ * file.c (rb_find_file): ditto.
+
+Thu Jul 5 22:01:02 2001 Mitsuhiro Kondo <kondo@nik-prt.co.jp>
+
+ * dln.c (dln_load): should use NSLINKMODULE_OPTION_BINDNOW.
+
+Thu Jul 5 13:44:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (load_file): local variables 'c' remain uninitialized on
+ xflag.
+
+Thu Jul 5 10:00:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_match): prefetched escaped character too early.
+
+Wed Jul 4 08:58:30 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call0): add argument check for attr_readers.
+
+Wed Jul 4 04:22:44 2001 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb (HTTP#request_by_name): arg order changes.
+
+Wed Jul 4 04:07:36 2001 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb (HTTP#request_by_name): bug fix.
+
+ * lib/net/http.rb: does not write Connection: by default.
+
+ * lib/net/protocol.rb: "start" for started protocol is an error.
+
+ * lib/net/protocol.rb: "finish" for finished protocol is an error.
+
+Wed Jul 4 03:17:31 2001 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb: new method HTTP#request_by_name (test)
+
+ * lib/net/http.rb: new class HTTPGenericRequest
+
+Tue Jul 3 23:58:29 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/mkmf.rb: distclean should remove mkmf.log as well.
+
+Tue Jul 3 18:35:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval_string_wrap): should push frame (and adjust
+ cbase) before wrapped eval.
+
+ * eval.c (rb_eval_cmd): ditto.
+
+ * eval.c (eval): should update ruby_class always after all.
+
+Tue Jul 3 14:56:27 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * eval.c (block_pass): do not change wrapper information.
+
+ * eval.c (rb_yield_0): preserve wrapper information.
+
+Tue Jul 3 08:59:50 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * error.c (rb_name_error): raise NameError instead of LoadError.
+
+Mon Jul 2 17:22:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (exc_exception): clone the receiver exception instead of
+ creating brand new exception object of the receiver.
+
+Mon Jul 2 09:53:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval_string_wrap): extend new ruby_top_self, not
+ original self.
+
+ * eval.c (rb_eval_cmd): respect ruby_wrapper if set.
+
+ * eval.c (eval): do not update ruby_class unless scope is not
+ provided.
+
+Sun Jul 1 10:51:15 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * eval.c (eval): preserve wrapper information.
+
+ * eval.c (proc_invoke): ditto.
+
+ * eval.c (block_pass): ditto.
+
+Sat Jun 30 02:55:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (void_expr): too much warnings for void context
+ (e.g. foo[1] that can be mere Proc call).
+
+Fri Jun 29 17:23:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (rb_name_error): new function to raise NameError with
+ name attribute set.
+
+ * eval.c (rb_f_missing): set name and args in the exception
+ object. [new]
+
+ * error.c (name_name): NameError#name - new method.
+
+ * error.c (nometh_args): NoMethodError#args - new method.
+
+Fri Jun 29 15:29:31 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lex.c (rb_reserved_word): lex_state after tRESCUE should be
+ EXPR_MID.
+
+Thu Jun 28 00:21:28 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/matrix.rb: resolve 'ruby -w' warnings.
+
+ * lib/irb/locale.rb: resolve 'ruby -w' warnings.
+
+ * lib/irb/multi-irb.rb: resolve 'ruby -w' warnings.
+
+ * lib/irb/ruby-lex.rb: fix problem for "\\M-\\..." and "\\C-\\..."
+ and resolve 'ruby -w' warnings.
+
+ * lib/irb/ruby-token.rb: fix typo
+
+ * lib/shell/command-processor.rb: resolve 'ruby -w' warnings.
+
+Wed Jun 27 08:53:26 2001 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/pop.rb: new methods POP3.auth_only, POP3#auth_only
+
+ * lib/net/http.rb: HTTP.Proxy returns self if ADDRESS is nil.
+
+ * lib/net/protocol.rb: new method ProtocolError#response
+
+ * lib/net/protocol.rb,smtp.rb,pop.rb,http.rb: add document.
+
+Tue Jun 26 18:42:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (add_heap): allocation size of the heap unit is doubled for
+ each allocation.
+
+Mon Jun 25 09:54:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (isdelim): space, tab, and newline are no longer
+ delimiters for glob patterns.
+
+Sat Jun 23 22:28:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (svalue_to_avalue): new conversion scheme between single
+ value and array values.
+
+ * eval.c (avalue_to_svalue): ditto.
+
+ * eval.c (rb_eval): REXPAND now uses avalue_to_svalue(), return
+ and yield too.
+
+ * eval.c (rb_yield_0): use avalue_to_svalue().
+
+ * eval.c (proc_invoke): Proc#call gives avaules, whereas
+ Proc#yield gives mvalues.
+
+ * eval.c (bmcall): convert given value (svalue) to avalue.
+
+Sat Jun 23 18:28:52 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/readline/readline.c (readline_event): a non-void function
+ should return a value.
+
+Fri Jun 22 23:17:28 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/socket/socket.c (ruby_connect): workaround for the setup of
+ Cygwin socket.
+
+Fri Jun 22 23:11:17 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/irb/locale.rb: fix for require "kconv" problem
+
+Fri Jun 22 18:08:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): no mvalue_to_svalue conversion here.
+
+ * eval.c (massign): takes svalue, convert it to mvalue inside.
+
+ * eval.c (rb_eval): parameters for yield/return are always
+ svalues now.
+
+ * eval.c (svalue_to_mvalue): more strict conversion.
+
+ * eval.c (mvalue_to_svalue): ditto.
+
+Fri Jun 22 17:12:23 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * st.c (new_size): prime hash size enabled.
+
+ * ext/socket/socket.c (Init_socket): SO_* constants added.
+
+Tue Jun 19 22:24:07 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * gc.c (rb_setjmp): avoid GCC 3.0 warnings.
+
+Tue Jun 19 18:19:30 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/readline/readline.c: add new methods:
+ Readline::completion_append_character and
+ Readline::completion_append_character=.
+
+Tue Jun 19 16:29:50 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (svalue_to_mvalue): new function to convert from svalue
+ to mvalue. [experimental]
+
+ * eval.c (mvalue_to_svalue): new function to convert from mvalue
+ to svalue.
+
+ * eval.c (rb_eval): use mvalue_to_svalue().
+
+ * eval.c (rb_yield_0): use mvalue_to_svalue().
+
+ * eval.c (proc_invoke): proper mvalue handling.
+
+Mon Jun 18 17:38:50 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_require): searches ".rb" and ".so" at the same
+ time. previous behavior (search ".rb", then ".so") has a
+ security risk (ruby-bugs#PR140).
+
+ * array.c (rb_ary_to_ary): new function to replace internal
+ rb_Array(), which never calls to_a, but to_ary (rb_Array() might
+ call both). [new]
+
+Mon Jun 18 00:43:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (PUSH_FAILURE_POINT): push option status again.
+
+ * regex.c (re_compile_pattern): avoid pushing unnecessary
+ option_set.
+
+Sat Jun 16 10:58:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_load): tainted string is OK if wrapped *and*
+ $SAFE >= 4.
+
+Thu Jun 14 16:27:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_start_0): should not nail down higher blocks
+ before preserving original context (i.e. should not alter
+ original context).
+
+Wed Jun 13 19:34:59 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * dir.c (Init_Dir): add a new method File::fnmatch? along with
+ File::Constants::FNM_*. While I am here, FNM_NOCASE is renamed
+ to FNM_CASEFOLD which is commonly used by *BSD and GNU libc.
+
+Wed Jun 13 09:33:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_yield): new method equivalent to Proc#call but no
+ check for number of arguments. [new]
+
+Tue Jun 12 14:21:28 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * lib/mkmf.rb: target_prefix is only for installation, not for
+ build.
+
+Tue Jun 12 00:41:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (method_eq): new method Method#==. [new]
+
+Mon Jun 11 14:29:41 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * confgure.in: add RUBY_CANONICAL_BUILD.
+
+Sun Jun 10 17:31:47 2001 Guy Decoux <decoux@moulon.inra.fr>
+
+ * gc.c (STR_NO_ORIG): STR_NO_ORIG value was different between
+ string.c and gc.c
+
+Sat Jun 9 22:10:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): should convert *non-array at the end of
+ arguments by using Array().
+
+Sat Jun 9 17:04:30 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * hash.c (ruby_setenv): readline library leaves their environment
+ strings uncopied. "free" check revised.
+
+Sat Jun 9 16:31:03 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * ext/extmk.rb.in: Use -F and -T for mswin32 because cl.exe doesn't
+ support -o officially and cl.exe considers that *.cc and *.cxx are
+ OBJs.
+
+ * lib/mkmf.rb: ditto.
+
+ * win32/Makefile.sub: Use del instead of rm.
+ All these changes are derived from Nobuyoshi Nakada's patch.
+ Thanks.
+
+Fri Jun 8 22:37:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (Init_stack): avoid __builtin_frame_address(2) to retrieve
+ stack bottom line.
+
+Fri Jun 8 18:14:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * st.c (numhash): should shuffle bits by dividing by prime number.
+
+Fri Jun 8 17:05:21 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): multiple assignment behavior fixed, which
+ results "*a = nil" makes "a == []" now.
+
+Fri Jun 8 15:25:09 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_require): should set SCOPE_PUBLIC before calling
+ dln_load().
+
+Thu Jun 7 17:28:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): exclude kDO_BLOCK too much by false condition.
+
+Wed Jun 6 23:02:36 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/sync.rb: bug fix if obj.initialize has parameters when
+ obj.extend(Sync_m)
+
+ * lib/mutex_m.rb: modified bit
+
+Wed Jun 6 16:11:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_load): should check if tainted even when wrap is
+ specified.
+
+Wed Jun 6 14:34:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (mrhs_basic): "*arg" should always be expanded by REXPAND.
+
+ * regex.c (re_compile_pattern): too much optimization for the
+ cases like /(.|a)b/.
+
+Tue Jun 5 23:58:43 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (fc_i): removed vast string allocation.
+
+Tue Jun 5 16:45:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (Init_Exception): NameError went under StandardError,
+ and NoMethodError went under NameError.
+
+Tue Jun 5 16:40:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (rb_intern): non identifier symbols should be
+ categorized as ID_JUNK. [new]
+
+Tue Jun 5 16:15:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_mod_const_at): use hash table as internal
+ data. [new]
+
+ * variable.c (rb_mod_const_of): ditto.
+
+ * variable.c (rb_const_list): new function to convert internal
+ data (hash table) to array of strings.
+
+ * eval.c (rb_mod_s_constants): data handling scheme has changed.
+
+Tue Jun 5 15:16:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_add_method): should not call rb_secure(), for
+ last_func may not be set.
+
+ * io.c (rb_io_ctl): ioctl should accept any integer within C long
+ range.
+
+Tue Jun 5 13:41:13 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/etc/extconf.rb: use egrep_cpp.
+
+Tue Jun 5 12:44:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (r_object): wrong type check for modules.
+
+ * marshal.c (w_object): should not dump anonymous classes/modules.
+
+Tue Jun 5 01:19:34 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_open_file): use rb_file_sysopen_internal() if the 3rd
+ argument (permission flags) is given. [new, should be backported?]
+
+ * io.c (rb_io_mode_binmode): mode string (e.g. "r+") to flags to
+ open(2).
+
+Mon Jun 4 23:55:54 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): NODE_REXPAND expand an array of 1 element as
+ the element itself. [new, should be backported?]
+
+ * parse.y (ret_args): should treat "*[a]" in rhs expression as
+ "a", not "[a]".
+
+Mon Jun 4 04:14:53 2001 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/shellwords.rb: don't destroy argument.
+
+Sat Jun 2 23:23:05 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_compile_pattern): should push option modifier at the
+ right place.
+
+Sat Jun 2 23:05:20 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/cgi/session.rb: don't use module_function for Class.
+
+Sat Jun 2 00:02:22 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * irb messages: fix typos.
+
+Fri Jun 1 17:26:24 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * hash.c (replace_i): ignore when key == Qundef.
+
+Fri Jun 1 16:50:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (call_args2): confusion with list_append() and
+ list_concat() was fixed.
+
+Fri Jun 1 15:01:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): fixed 'print CGI::bar() {}, "\n"' syntax
+ breakage, adding new lex_state status. sigh. [new]
+
+Fri Jun 1 11:21:04 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: use waitpid on mingw32.
+
+ * ext/dbm/extconf.rb: include <ndbm.h>, not <gdbm.h>.
+
+Thu May 31 18:34:57 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * file.c (rb_file_s_unlink): should not allow if $SAFE >= 2.
+
+Thu May 31 17:23:25 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (Init_Range): define "to_ary".
+
+Thu May 31 13:30:25 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * mkconfig.rb, ext/configsub.rb: VERSION -> RUBY_VERSION.
+
+Thu May 31 08:00:58 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * win32/dir.h: re-add.
+
+Thu May 31 01:25:59 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * configure.in: default --with-libc_r to `no' until the problem is
+ fixed. (FreeBSD only)
+
+Tue May 29 17:24:23 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * ruby.c (proc_options): unexpected SecurityError happens when -T4.
+
+Tue May 29 18:46:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_compile_pattern): * \1 .. \9 should be
+ backreferences always.
+
+ * regex.c (re_match): backreferences corresponding to
+ unclosed/unmatched parentheses should fail always.
+
+Tue May 29 16:35:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_cat): use rb_str_buf_cat() if possible. [new]
+
+ * string.c (rb_str_append): ditto.
+
+ * string.c (rb_str_buf_cat): remove unnecessary check (type,
+ taint, modify) to gain performance.
+
+ * string.c (rb_str_buf_append): ditto.
+
+ * string.c (rb_str_buf_finish): removed.
+
+Tue May 29 02:05:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_buf_new): buffering string function. [new]
+
+ * string.c (rb_str_buf_append): ditto.
+
+ * string.c (rb_str_buf_cat): ditto.
+
+ * string.c (rb_str_buf_finish): ditto.
+
+Mon May 28 23:20:43 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: remove unnecessary AC_CANONICAL_BUILD
+
+ * defines.h: #define HAVE_SETITIMER on Cygwin(bug fixed).
+
+ * ruby.c: use relative path from LIBRUBY_SO.
+
+ * ruby.c: don't use -mwin32 option on Cygwin.
+
+ * cygwin/GNUmakefile.in: ditto.
+
+ * ext/sdbm/_sdbm: ditto.
+
+ * ext/tcltklib/extconf.rb: ditto.
+
+ * ext/tcltklib/stubs.c: ditto.
+
+Mon May 28 22:12:01 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/extconf.rb.in: make the priority of the make rule of .c
+ higher than .C .
+
+Mon May 28 13:22:19 2001 Tanaka Akira <akr@m17n.org>
+
+ * time.c (make_time_t): local time adjustment revised.
+
+Mon May 28 02:20:38 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * dir.c (glob_helper): teach has_magic() to handle flags and get
+ glob_helper to properly support FNM_NOESCAPE.
+
+ * dir.c (fnmatch): fix a bug when FNM_PATHNAME and FNM_PERIOD are
+ specified at the same time.
+
+Sat May 26 09:55:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y: accomplish extended syntax described in [ruby-talk:14525]
+ using tSPC token. [new, experimental]
+
+Sat May 26 07:05:45 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * MANIFEST: add win32/dir.h .
+
+Fri May 25 20:03:51 2001 Pascal Rigaux <pixel@mandrakesoft.com>
+
+ * dln.c (dln_find_1): should exclude directories in executable
+ file lookup.
+
+Fri May 25 18:00:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_obj_singleton_methods): list methods in extended
+ modules if optional argument is true. [new]
+
+Fri May 25 14:19:25 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * string.c (rb_str_replace): add taint status infection
+ (OBJ_INFECT()).
+
+ * string.c (rb_str_crypt): ditto.
+
+ * string.c (rb_str_ljust): ditto.
+
+ * string.c (rb_str_rjust): ditto.
+
+ * string.c (rb_str_center): ditto.
+
+Fri May 25 05:39:03 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/sha1/sha1-ruby.c (sha1_hexdigest): fix buffer overflow. The
+ buffer for a SHA-1 hexdigest needs to be 41 bytes in length.
+
+Fri May 25 01:47:39 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * MANIFEST: update the entries I forgot to add or remove.
+
+Fri May 25 00:57:25 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/sha1/sha1-ruby.c (sha1_new): separate initialize() from
+ new().
+
+ * ext/md5/md5init.c (md5i_new): ditto.
+
+Fri May 25 00:53:41 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/dbm/extconf.rb: fix support for *BSD and set $CFLAGS
+ properly.
+
+Thu May 24 16:10:33 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_member): check based on "<=>" comparison. [new]
+
+ * range.c (range_check): add "succ" check if first end is not a
+ numeric.
+
+ * range.c (range_eqq): comparison should based on "<=>".
+
+ * range.c (range_each): ditto.
+
+Thu May 24 16:08:21 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * mkconfig.rb: autoconf 2.50 support.
+
+Thu May 24 14:23:35 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): need argument adjustment for C defined
+ blocks too.
+
+Thu May 24 01:11:30 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/dbm/extconf.rb: header search added. [new]
+
+Wed May 23 02:58:21 2001 Tanaka Akira <akr@m17n.org>
+
+ * time.c (make_time_t): fix ad-hoc local time adjustment, using
+ binary tree search.
+
+Tue May 22 17:10:35 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * variable.c (rb_alias_variable): should not allow variable
+ aliasing if $SAFE >= 4.
+
+Tue May 22 02:37:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (expr): "break" and "next" to take optional expression,
+ which is used as a value for termination. [new, experimental]
+
+ * eval.c (rb_eval): "break" can give value to terminating method.
+
+ * eval.c (rb_eval): "break" and "next" to take optional expression.
+
+ * eval.c (rb_yield_0): "next" can give value to terminating "yield".
+
+ * eval.c (rb_iterate): "break" can give value to terminating method.
+
+ * eval.c (proc_call): ditto.
+
+Mon May 21 13:15:25 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big2str): t should be protected from GC.
+
+Sat May 19 09:29:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (rb_proc_times): need not to check return value from
+ times(2).
+
+Fri May 18 05:36:08 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/extmk.rb.in (xsystem): backout the previous fix which was
+ bogus.
+
+Fri May 18 05:19:55 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/mkmf.rb (xsystem): make a temporary fix to get $(...) macros
+ properly expanded on a command execution.
+
+ * ext/extmk.rb.in (xsystem): ditto.
+
+Fri May 18 03:45:55 2001 Brian F. Feldman <green@FreeBSD.org>
+
+ * lib/mkmf.rb: unbreak "make install". lib/* must be installed
+ under $rubylibdir, not under $libdir.
+
+Fri May 18 01:28:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (expr): break, next, redo, retry are moved from primary.
+
+Fri May 18 01:11:02 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * ext/sha1/sha1-ruby.c (sha1_new): get rid of an unneeded
+ rb_obj_call_init() call.
+
+Fri May 18 01:03:55 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * ext/sha1/sha1.txt, ext/sha1/sha1.txt.jp: fix typos.
+
+Thu May 17 19:17:11 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/shell.rb, lib/shell/process-controller.rb,
+ lib/shell/command-processor.rb: translate Japanese comments into
+ English.
+
+Thu May 17 19:07:14 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * doc/shell.rd.jp: RD'ify and make some fixes.
+
+ * doc/shell.rd: RD'ify, delete Japanese leftovers, make overall
+ English fixes, and sync with doc/shell.rd.jp.
+
+Thu May 17 17:35:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call0): address of local_vars might change during eval.
+
+Thu May 17 07:27:09 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/md5/md5.txt.jp, ext/sha1/sha1.txt.jp:
+ s/SuperClass/Superclass/.
+
+Thu May 17 07:21:44 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/Setup.dj, ext/Setup.emx, ext/Setup.nt, ext/Setup.x68:
+ compile sha1 in as well as md5.
+
+ * ext/Setup: put sha1 in a comment.
+
+Thu May 17 07:16:38 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/sha1/sha1.txt.jp: add the Japanese version derived from
+ ext/md5/md5.txt.jp.
+
+ * ext/sha1/sha1.txt: revise the copyright info and reduce the
+ difference from ext/md5/md5.txt.
+
+ * ext/md5/md5.txt: reduce the difference from ext/sha1/sha1.txt.
+
+Thu May 17 07:11:35 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/sha1/extconf.rb, ext/sha1/sha1.c: use WORDS_BIGENDIAN to
+ detect the platform's endian.
+
+Thu May 17 06:31:30 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/md5/md5.txt: make wording fixes, and mention the newly added
+ method: "<<".
+
+ * ext/md5/md5.txt.jp: ditto.
+
+Wed May 16 18:05:52 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/md5/md5init.c: add an instance method "<<" as an alias for
+ "update". (inspired by Steve Coltrin's ruby-sha1)
+
+Tue May 15 17:46:37 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_and): should not push frozen key string.
+
+ * array.c (rb_ary_or): ditto.
+
+Tue May 15 02:18:23 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/thread.rb: rescue ThreadError in case the thread is dead
+ just before calling Thread#run.
+
+Mon May 14 13:50:22 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_schedule): should save context before raising
+ deadlock, saved context for current thread might be obsolete.
+
+ * time.c (make_time_t): non DST timezone shift supported (hopefully).
+
+ * time.c (make_time_t): strict range detection for negative time_t.
+
+Mon May 14 11:54:20 2001 Tanaka Akira <akr@m17n.org>
+
+ * signal.c: SIGINFO added.
+
+Mon May 14 08:57:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_ensure): should not SEGV when prot_tag is NULL.
+
+Sun May 13 23:51:14 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * win32/resource.rb: Modify copyright in resource script.
+
+Sun May 13 14:03:33 2001 Okada Jun <yun@be-in.org>
+
+ * lib/thread.rb: fix Queue#pop and SizedQueue#max= to avoid
+ deadlock.
+
+Sat May 12 15:43:55 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * win32/win32.c (kill): add support of signal 9 on mswin32/mingw32.
+
+Fri May 11 15:09:52 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ruby.h (rb_string_value): add volatile to avoid compiler warning.
+
+ * string.c (rb_string_value): ditto.
+
+Fri May 11 03:35:33 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * README.EXT: Document find_library(), with_config() and
+ dir_config().
+
+Fri May 11 03:34:20 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * README.EXT.jp: Remove the description of find_header() because
+ such a function does not actually exist.
+
+ * README.EXT.jp: Update the description of dir_config().
+
+Fri May 11 02:42:05 2001 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * README, README.jp: Fix CVS access and mailing lists info.
+
+Fri May 11 02:00:44 2001 Ryo HAYASAKA <ryoh@jaist.ac.jp>
+
+ * bignum.c (bigdivrem): access boundary bug.
+
+Thu May 10 02:40:47 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): prohibit dumping out singleton classes.
+
+ * object.c (rb_mod_to_s): distinguish singleton classes.
+
+ * variable.c (rb_class2name): it's ok to reveal NilClass,
+ TrueClass, FalseClass.
+
+Wed May 9 14:38:33 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (rb_yield_0): preserve and restore ruby_cref as well.
+
+Tue May 8 18:28:19 2001 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/irb.rb lib/irb/multi-irb.rb lib/irb/ruby-lex.rb
+ lib/irb/version.rb resolve ctrl-c problem
+
+Tue May 8 17:12:43 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (is_defined): core dumped during instance_eval for
+ special constants.
+
+ * eval.c (rb_eval): ditto.
+
+Tue May 8 08:52:57 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * doc/forwardable.rd, doc/forwardable.rd.jp: Hit `=begin' and
+ `=end' in proper places so rd2 can format them without a problem.
+
+ * doc/irb/irb-tools.rd.jp, doc/irb/irb.rd, doc/irb/irb.rd.jp:
+ ditto.
+
+Tue May 8 08:38:53 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * doc/forwardable.rd, doc/forwardable.rd.jp, lib/forwardable.rb:
+ Import forwardable 1.1.
+
+Tue May 8 08:34:33 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * doc/irb/irb-tools.rd.jp, doc/irb/irb.rd.jp: Convert from JIS to
+ EUC.
+
+Tue May 8 03:46:39 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * sample/rbc.rb: Obsoleted by IRB.
+
+Mon May 7 15:58:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): "||=" should not warn for uninitialized instance
+ variables.
+
+ * eval.c (rb_eval): ditto.
+
+ * eval.c (eval): preserve and restore ruby_cref as well.
+
+Mon May 7 15:45:48 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/ftools.rb (syscopy): chmod destination file only if
+ it does not exist.
+
+Mon May 7 14:35:57 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_is_instance_of): takes only class/module as an
+ argument.
+
+Sun May 6 16:27:29 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * eval.c (is_defined): rb_reg_nth_defined() may return Qnil.
+
+Thu May 3 03:15:06 2001 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
+
+ * configure.in: get --enable-shared to work on MacOS X.
+
+ * Makefile.in: make $(LIBRUBY_SO) depend on miniruby properly.
+ Now `make -jN' should work without a problem.
+
+Thu May 3 02:07:45 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * win32/config.h.in: add SIZEOF___INT64 definition.
+
+Wed May 2 20:39:35 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * dir.c (rb_glob, rb_globi): remove unnecessary FNM_PATHNAME.
+
+Wed May 2 11:46:13 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (block_pass): should not downgrade safe level.
+
+Wed May 2 03:07:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/dbm/extconf.rb: allow specifying dbm-type explicitly.
+
+ * ext/dbm/extconf.rb: avoid gdbm if possible, because it leaks
+ memory, whereas gdbm.so doesn't. potential incompatibility.
+
+Wed May 2 02:02:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_insert): new method.
+
+Tue May 1 17:55:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): lex_state after RESCUE_MOD should be EXPR_BEG.
+
+Tue May 1 16:23:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_insert): new method.
+
+ * array.c (rb_ary_update): new utility function.
+
+Tue May 1 03:24:05 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/irb/completion.rb, lib/irb/frame.rb, lib/irb/xmp.rb,
+ doc/irb/irb-tools.rd.jp: Merge from irb-tools 0.7.1.
+
+Tue May 1 03:07:17 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * sample/irb.rb, lib/irb.rb, lib/irb/*, doc/irb/*: Merge from irb
+ 0.7.3.
+
+ * instruby.rb: Install help-message's too.
+
+ * lib/irb/main.rb: This file is not needed anymore.
+
+Fri Apr 27 09:27:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (set_outfile): should check if closed before assignment.
+
+Thu Apr 26 22:36:11 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: don't use tzname on Cygwin 1.3.1+.
+
+ * configure.in: add -mieee/-ieee to CFLAGS on OSF1/Alpha
+ to disable "DIVISION BY ZERO" exception.
+
+Thu Apr 26 22:30:43 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): should preserve value of ruby_errinfo.
+
+Thu Apr 26 10:36:09 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_schedule): infinite sleep should not cause
+ dead lock.
+
+Wed Apr 25 16:40:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_flatten_bang): proper recursive detection.
+
+Wed Apr 25 15:36:15 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (yield_under): need not to prohibit at safe level 4.
+
+Wed Apr 25 15:22:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): p/P packs nil into NULL.
+
+ * pack.c (pack_unpack): p/P unpacks NULL into nil.
+
+Tue Apr 24 15:35:32 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): size check for P template.
+
+ * ruby.c (set_arg0): wrong predicate when new $0 value is bigger
+ than original space.
+
+Tue Apr 24 15:18:49 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/extmk.rb.in, lib/mkmf.rb: (dir_config) do not add the
+ specified include directory if already included in $CPPFLAGS.
+
+ * ext/extmk.rb.in, lib/mkmf.rb: (dir_config) return a more useful
+ value, [include_dir, lib_dir].
+
+Mon Apr 23 14:43:59 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (id2ref): should use NUM2ULONG()
+
+ * object.c (rb_mod_const_get): check whether name is a class
+ variable name.
+
+ * object.c (rb_mod_const_set): ditto.
+
+ * object.c (rb_mod_const_defined): ditto.
+
+Sat Apr 21 22:33:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_float): precision changed to "%.16g"
+
+Sat Apr 21 22:07:58 2001 Guy Decoux <decoux@moulon.inra.fr>
+
+ * eval.c (rb_call0): wrong retry behavior.
+
+Fri Apr 20 19:12:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (fix_aref): a bug on long>int architecture.
+
+Fri Apr 20 14:57:15 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (rb_eval_string_wrap): should restore ruby_wrapper.
+
+Sun Apr 22 17:44:37 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: add -mieee to CFLAGS on Linux/Alpha
+ to disable "DIVISION BY ZERO" exception.
+
+ * configure.in: remove -ansi on OSF/1.
+
+Wed Apr 18 04:37:51 2001 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: CGI::Cookie: no use PATH_INFO.
+
+Wed Apr 18 00:24:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_compile_pattern): char class at either edge of range
+ should be invalid.
+
+Tue Apr 17 17:33:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (handle_rescue): use === to compare exception match.
+
+ * error.c (syserr_eqq): comparison between SystemCallErrors should
+ based on their error numbers.
+
+Tue Apr 17 16:54:39 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (safe_getter): should use INT2NUM().
+
+Tue Apr 17 15:12:56 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big2long): 2**31 cannot fit in 31 bit long.
+
+Sat Apr 14 22:46:43 2001 Guy Decoux <decoux@moulon.inra.fr>
+
+ * regex.c (calculate_must_string): wrong length calculation.
+
+Sat Apr 14 13:37:32 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * win32/config.status.in: no longer use missing/alloca.c.
+
+ * win32/Makefile.sub: ditto.
+
+Fri Apr 13 12:40:48 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (rb_thread_start_0): fixed memory leak.
+
+Fri Apr 13 16:41:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (none): should clear cmdarg_stack too.
+
+Fri Apr 13 06:19:29 2001 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * io.c (rb_fopen): use setvbuf() to avoid recursive malloc() on
+ some platforms.
+
+Wed Apr 11 23:36:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_stat_dev): device functions should honor stat field
+ types (except long long such as dev_t).
+
+Wed Apr 11 18:07:53 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (rb_mod_nesting): should not push nil for nesting array.
+
+ * eval.c (rb_mod_s_constants): should not search array by
+ rb_mod_const_at() for nil (happens for singleton class).
+
+Wed Apr 11 13:29:26 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_singleton_class_attached): should modify iv_tbl by
+ itself, no longer use rb_iv_set() to avoid freeze check error.
+
+ * variable.c (rb_const_get): error message "uninitialized constant
+ Foo at Bar::Baz" instead of "uninitialized constantBar::Baz::Foo".
+
+Tue Apr 10 17:52:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_mod_included): new hook called from rb_mod_include().
+
+Tue Apr 10 02:24:40 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * io.c (opt_i_set): should strdup() inplace_edit string.
+
+Mon Apr 9 23:29:54 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (exec_under): need to push cref too.
+
+Mon Apr 9 15:20:21 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_missing): raise NameError for "undefined local
+ variable or method".
+
+ * error.c (Init_Exception): new exception NoMethodError.
+ NameError moved under ScriptError again.
+
+ * eval.c (rb_f_missing): use NoMethodError instead of NameError.
+
+Mon Apr 9 12:05:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (Init_File): should redefine "new" class method.
+
+Mon Apr 9 11:56:52 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb: fix typo.
+
+Fri Apr 6 01:46:35 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (PUSH_CREF): sharing cref node was problematic. maintain
+ runtime cref list instead.
+
+ * eval.c (rb_eval): copy defn node before registering.
+
+ * eval.c (rb_load): clear ruby_cref before loading.
+
+Thu Apr 5 22:40:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_const_get): no recursion to show full class path
+ for modules.
+
+ * eval.c (rb_set_safe_level): should set safe level in curr_thread
+ as well.
+
+ * eval.c (safe_setter): ditto.
+
+Thu Apr 5 13:46:06 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * object.c (rb_obj_is_instance_of): nil belongs to false, not true.
+
+Thu Apr 5 02:19:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (make_time_t): proper (I hope) daylight saving time
+ handling for both US and Europe. I HATE DST!
+
+ * eval.c (rb_thread_wait_for): non blocked signal interrupt should
+ stop the interval.
+
+Wed Apr 4 03:47:03 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_eq): class check added.
+
+ * eval.c (proc_eq): typo fixed ("return" was omitted).
+
+ * error.c (Init_Exception): move NameError under StandardError.
+
+ * class.c (rb_mod_clone): should copy method bodies too.
+
+ * bignum.c (bigdivrem): should trim trailing zero bdigits of
+ remainder, even if dd == 0.
+
+ * file.c (check3rdbyte): safe string check moved here.
+
+Tue Apr 3 09:56:20 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb.in (create_makefile): create def file only if
+ it does not yet exist.
+
+ * lib/mkmf.rb: ditto.
+
+Tue Apr 3 00:05:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (make_time_t): remove HAVE_TM_ZONE code since it
+ sometimes reports wrong time.
+
+ * time.c (make_time_t): remove unnecessary range check for
+ platforms where negative time_t is available.
+
+Mon Apr 2 16:52:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (proc_waitall): should push Process::Status instead of
+ Fixnum status.
+
+ * process.c (waitall_each): should add all entries in pid_tbl.
+ these changes are inspired by Koji Arai. Thanks.
+
+ * process.c (proc_wait): should not iterate if pid_tbl is 0.
+
+ * process.c (proc_waitall): ditto.
+
+Mon Apr 2 14:25:49 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/monitor.rb (wait): ensure reentrance.
+
+ * lib/monitor.rb (wait): fix timeout support.
+
+Mon Apr 2 12:40:45 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (media_subtype): return subtype.
+
+Mon Apr 2 12:01:15 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (flag_list): capitalize flags.
+
+Mon Apr 2 01:32:38 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * Makefile.in: Introduce MAINLIBS.
+
+ * configure.in: Link libc_r against the ruby executable on
+ FreeBSD, which is the first attempt to work around a certain
+ problem regarding pthread on FreeBSD. It should make ruby/libruby
+ happy when it loads an extension to a library compiled and linked
+ with -pthread. Note, however, that libruby is _not_ linked with
+ libc_r so as not to mess up pthread unfriendly stuff including
+ apache+mod_ruby and vim6+ruby_interp.
+
+Mon Apr 2 01:16:24 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.c: use ruby's opendir on mingw32.
+
+ * win32/dir.h, dir.c, Makefile: ditto.
+
+Sun Apr 1 23:26:14 2001 TOYOFUKU Chikanobu <toyofuku@juice.or.jp>
+
+ * numeric.c (flodivmod): a bug in no fmod case.
+
+Sun Apr 1 18:36:14 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * process.c (pst_wifsignaled): should apply WIFSIGNALED for status
+ (int), not st (VALUE).
+
+Sat Mar 31 04:47:55 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb: add document and example code.
+
+Sat Mar 31 03:24:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (Init_IO): value of $/ and $\ are no longer restricted to
+ strings. type checks are done on demand.
+
+ * class.c (rb_include_module): module inclusion should be check
+ taints.
+
+ * ruby.h (STR2CSTR): replace to StringType() and StringTypePtr().
+
+ * ruby.h (rb_str2cstr): ditto.
+
+Fri Mar 30 23:37:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_load): should not copy toplevel local variables. It
+ cause variable/method ambiguity. Thanks to L. Peter Deutsch.
+
+Fri Mar 30 22:56:56 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb: rename ContinueRequest to ContinuationRequest.
+
+Fri Mar 30 12:51:19 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_include_module): freeze check at first.
+
+Thu Mar 29 17:05:09 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_attr): sprintf() and rb_intern() moved into
+ conditional body.
+
+Wed Mar 28 23:43:00 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/extmk.rb.in, lib/mkmf.rb: add C++ rules in addition to C
+ rules for the mswin32 platforms.
+
+Wed Mar 28 19:29:21 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/extmk.rb.in, lib/mkmf.rb: move C++ rules to the right place.
+
+Wed Mar 28 17:39:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_str2cstr): warn if string contains \0 and length
+ value is ignored.
+
+Wed Mar 28 15:00:31 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * class.c (rb_singleton_class_clone): should copy class constant
+ table as well.
+
+Wed Mar 28 14:23:23 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_include_module): sometimes cache was mistakenly left
+ uncleared - based on the patch by K.Kosako.
+
+ * ruby.h: all Check_SafeStr()'s are replaced by SafeStr() to
+ ensure 'to_str' be always effective.
+
+Wed Mar 28 09:52:33 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/Makefile.sub: disable global optimization.
+
+Tue Mar 27 15:00:54 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (rb_mod_define_method): should have clear method cache.
+
+ * eval.c (rb_mod_define_method): should have raised exception for
+ type error.
+
+Tue Mar 27 14:48:17 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.h: changed "extern INLINE" to "static inline".
+
+Mon Mar 26 23:19:33 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * time.c (rb_strftime): check whether strftime returns empty string.
+
+Mon Mar 26 21:16:56 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb: supports response handlers and multiple commands.
+
+Mon Mar 26 17:21:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c: remove TMP_PROTECT_END to prevent C_ALLOCA crash.
+
+Mon Mar 26 14:04:41 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/Win32API/Win32API.c: remove Init_win32api().
+
+Sun Mar 25 16:52:48 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * file.c (rb_file_flock): do not trap EINTR.
+
+ * missing/flock.c (flock): returns the value from lockf(2)
+ directly.
+
+Sat Mar 24 23:44:50 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ev_const_defined): should ignore toplevel cbase (Object).
+
+ * eval.c (ev_const_get): ditto.
+
+Fri Mar 23 17:37:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/md5/md5.h: replace by independent md5 implementation
+ contributed by L. Peter Deutsch (thanks).
+
+ * ext/md5/md5init.c: adopted to Deutsch's md5 implementation.
+
+Fri Mar 23 17:26:19 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_unpack): string from P/p should be tainted.
+
+Fri Mar 23 12:18:44 2001 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
+
+ * ext/curses/curses.c: curses on Mac OS X public beta does not
+ have _maxx etc.
+
+Fri Mar 23 10:50:31 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_object): should truncate trailing zero short for
+ bignums.
+
+Fri Mar 23 09:49:02 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (sym_intern): new method.
+
+Thu Mar 22 22:15:45 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/Win32API/extconf.rb: add -fno-omit-frame-pointer.
+
+Thu Mar 22 18:17:36 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_mod_nesting): should not include Object at the
+ toplevel.
+
+Thu Mar 22 17:43:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.h: better inline function support.
+
+ * configure.in (NO_C_INLINE): check if inline is available for the
+ C compiler.
+
+Mon Mar 19 11:03:10 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * marshal.c (r_object): len calculation patch was wrong for
+ machines SIZEOF_BDIGITS == SIZEOF_SHORT.
+
+ * gc.c: alloca prototype reorganized for C_ALLOCA machine.
+
+Wed Mar 21 23:07:45 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.c (win32_stat): WinNT/2k "//host/share" support.
+
+Wed Mar 21 08:05:35 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * win32/dir.h: replace missing/dir.h .
+
+ * win32/win32.h: ditto.
+
+ * win32/win32.c: ditto.
+
+Wed Mar 21 01:26:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (id2ref): sometimes confused symbol and reference.
+
+Tue Mar 20 23:09:33 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.c (win32_stat): UNC support.
+
+ * dir.c (extract_path): fix "./*" problem.
+
+Tue Mar 20 15:10:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (glob_helper): breaks loop after calling recursive
+ glob_helper; all wild cards should be consumed; no need for
+ further match.
+
+ * dir.c (dir_s_glob): gives warning if no match found.
+
+Tue Mar 20 14:13:45 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * object.c (sym_inspect): did allocate extra byte space.
+
+Mon Mar 19 19:14:47 2001 Guy Decoux <decoux@moulon.inra.fr>
+
+ * marshal.c (shortlen): shortlen should return number of bytes
+ written.
+
+Mon Mar 19 16:52:23 2001 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (ev_const_defined): need not to check if cbase->nd_class
+ is rb_cObject.
+
+ * eval.c (ev_const_get): ditto.
+
+Mon Mar 19 17:11:20 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_zone): return "UTC" for UTC time objects.
+
+Mon Mar 19 16:27:32 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (THREAD_ALLOC): flags should be initialized.
+
+ * signal.c (rb_f_kill): should use FIX2INT, not FIX2UINT.
+
+Mon Mar 19 10:55:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (glob_helper): replace lstat() by stat() to follow symlink
+ in the case like 'symlink/*'.
+
+ * dir.c (glob_helper): gave warning too much.
+
+Sun Mar 18 08:58:18 2001 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: // === '' --> //.match('')
+
+ * lib/cgi.rb: cgi#header(): improvement for mod_ruby.
+
+ * lib/cgi.rb: cgi#rfc1123date(): improvement.
+ thanks to TADA Tadashi <sho@spc.gr.jp>.
+
+ * lib/cgi.rb: cgi#rfc1123date(): document bug fix.
+ thanks to Kazuhiro NISHIYAMA <zn@mbf.nifty.com>.
+
+ * lib/cgi.rb: cgi#header(): bug fix.
+ thanks to IWATSUKI Hiroyuki <don@na.rim.or.jp>.
+
+Sat Mar 17 11:11:24 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (glob_helper): * should follow symlink, whereas ** should
+ not follow.
+
+Thu Mar 15 01:28:02 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (dir_s_chdir): block form of Dir.chdir. (RCR#U016).
+
+Fri Mar 16 17:14:17 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * configure.in: Set SOLIBS properly for all ELF and
+ FreeBSD/NetBSD/OpenBSD a.out platforms so that the shlib
+ dependencies are recorded in the libruby shlib.
+
+Wed Mar 14 16:41:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_schedule): raise FATAL just once to
+ THREAD_TO_KILL.
+
+Wed Mar 14 10:41:34 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): 0 (= Qfalse) is a valid value, so that
+ default self should be checked by klass == 0.
+
+ * bignum.c (rb_cstr2inum): should disallow '++1', '+-1', etc.
+
+Tue Mar 13 17:51:09 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ev_const_defined): add new parameter self for special
+ const fallback.
+
+ * eval.c (ev_const_get): ditto.
+
+Tue Mar 13 16:39:45 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * dir.c (rb_glob_helper): fix drive letter handling on DOSISH.
+
+Tue Mar 13 14:54:39 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: add HTTPRequest#basic_auth.
+
+ * lib/net/smtp.rb: raise if only account or password is given.
+
+ * lib/net/protocol.rb: WriteAdapter#<< returns self.
+
+Tue Mar 13 14:41:16 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_seek_m): wrong calling sequence of rb_io_seek().
+
+Tue Mar 13 09:14:19 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (cond0): no special treatment of string literal in
+ condition.
+
+Mon Mar 12 18:59:38 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): save/restore $libs and $LIBPATH.
+
+Sun Mar 11 18:13:34 2001 Masahiro Tanaka <masa@stars.gsfc.nasa.gov>
+
+ * math.c: add acos, asin, atan, conh, sinh, tanh and hypot to Math.
+
+ * configure.in: check hypot availability.
+
+ * missing/hypot.c: public domain rewrite of hypot.
+
+Sun Mar 11 13:21:04 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * parse.y (warn_unless_e_option): warning condition was wrong.
+
+ * parse.y (warning_unless_e_option): ditto.
+
+Sun Mar 11 00:55:31 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/mkmf.rb (install_rb): fix handling of destination path.
+
+Sat Mar 10 22:56:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_all): new method 'all?', which returns true if
+ block returns true for all elements.
+
+ * enum.c (enum_any): new method 'any?', which returns true if
+ block returns true for any of elements.
+
+Sat Mar 10 02:34:18 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * math.c (math_log, math_log10): use nan() instead of 0.0/0.0 on Cygwin.
+
+Fri Mar 9 09:56:19 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (marshal_load): do not give warning unless explicitly
+ set to verbose.
+
+Fri Mar 9 02:07:53 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_exit): give string value "exit" to SystemExit.
+
+ * ruby.c (proc_options): -v should not print version if
+ proc_options called via moreswitches().
+
+Thu Mar 8 17:45:19 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb: one write(2) per one line.
+
+Wed Mar 7 14:26:11 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * math.c (math_log, math_log10): should return NaN if x < 0.0
+ on Cygwin.
+
+Thu Mar 7 10:31:26 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * parse.y (stmt): while/until modifier must work for empty body.
+
+Tue Mar 6 22:53:58 2001 Kazuhiro Yoshida <moriq.kazuhiro@nifty.ne.jp>
+
+ * ruby.c (ruby_set_argv): clear ARGV contents before adding args.
+
+Tue Mar 6 10:50:29 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (primary): rescue and ensure clauses should be allowed
+ to appear in singleton method body.
+
+Mon Mar 5 17:25:13 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_eq): compare Procs using blocktag equality.
+
+ * eval.c (proc_to_s): stringify according to block tag address.
+
+Mon Mar 5 17:19:56 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.c (gettimeofday): use GetLocalTime() instead of ftime()
+ for high-resolution timing.
+
+Sun Mar 4 17:01:09 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * string.c (trnext): support backslash escape in String#tr.
+
+Sat Mar 3 16:15:16 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): push cbase if ruby_cbase != ruby_class, for
+ example in the case NODE_DEFN/NODE_DEFS are called within
+ module_eval.
+
+Wed Feb 28 11:02:41 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_delete_bang): delete! should take at least 1
+ argument.
+
+ * ruby.c (load_file): add rb_gc() after loading to avoid
+ extraordinary memory growth.
+
+Wed Feb 28 05:01:40 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * dir.c (rb_glob_helper): "./foo" should match "foo", not "./foo".
+
+Tue Feb 27 16:38:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ev_const_get): retrieve Object's constant if no current
+ class is available (e.g. defining singleton class for Fixnums).
+
+ * eval.c (ev_const_defined): check Object's constant if no current
+ class is available (e.g. defining singleton class for Fixnums).
+
+ * time.c (time_timeval): negative time interval should not be
+ allowed.
+
+ * eval.c (proc_call): ignore block to `call' always, despite of
+ being orphan or not.
+
+Wed Feb 27 10:16:32 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_yield_0): should check based on rb_block_given_p()
+ and rb_f_block_given_p().
+
+Tue Feb 27 04:13:45 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * configure.in (frame-address): --enable-frame-address to allow
+ __builtin_frame_address() to be used.
+
+ * eval.c (stack_length): use __builtin_frame_address() based on
+ the macro USE_BUILTIN_FRAME_ADDRESS.
+
+ * gc.c (rb_gc): ditto.
+
+ * gc.c (Init_stack): ditto.
+
+Mon Feb 26 16:20:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (proc_options): call ruby_show_version() just once.
+
+ * dir.c (dir_s_open): returns the value from a block (if given).
+
+Mon Feb 26 14:29:04 2001 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/extmk.rb.in, lib/mkmf.rb: add C++ rules in addition to C
+ rules.
+
+Mon Feb 26 00:04:52 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_call): should not modify ruby_block->frame.iter
+ based on ruby_frame->iter altered by PUSH_ITER().
+
+Mon Feb 26 05:27:52 2001 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/net/telnet.rb: #telnetmode(), #binmode(): bug fix.
+ thanks to nobu.nakada@nifty.ne.jp.
+
+Mon Feb 26 04:55:50 2001 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: CGI#form(): bug fix.
+ thanks to MoonWolf <moonwolf@moonwolf.com>.
+
+ * lib/cgi.rb: CGI#rfc1123_date(): improvement.
+ thanks to Tomoyasu Akita <genzo-@dm4lab.to>.
+
+ * lib/cgi.rb: CGI#header(): improvement for mod_ruby.
+ thanks to Shugo Maeda <shugo@ruby-lang.org>.
+
+Sun Feb 25 02:45:30 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * file.c (rb_file_s_rename): avoid Cygwin's bug.
+
+Sat Feb 24 23:32:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_fd_close): should save current context before
+ raising exception.
+
+Sat Feb 24 22:14:00 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.c (myrename): fix error handling.
+
+Sat Feb 24 13:58:48 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: always close connection on request without
+ body.
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: change copyright.
+
+Sat Feb 24 03:15:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (set_stdin): preserve original stdin.
+
+ * io.c (set_outfile): preserve original stdout/stderr.
+
+Fri Feb 23 08:28:58 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb: clear read buffer after reopen.
+
+ * lib/net/protocol.rb: refactoring.
+
+ * lib/net/http.rb: split module HTTPHeader from HTTPResponse.
+
+Tue Feb 20 23:45:35 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * process.c: add W* macro if not available.
+
+Tue Feb 20 16:37:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * configure.in: add check for negative time_t for gmtime(3).
+
+ * time.c (time_new_internal): no positive check if gmtime(3) can
+ handle negative time_t.
+
+ * time.c (time_timeval): ditto.
+
+ * bignum.c (rb_big2long): should not raise RangeError for Bignum
+ LONG_MIN value.
+
+Mon Feb 19 17:46:37 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_substr): "a"[1,2] should return ""; need
+ rubicon upgrade.
+
+Mon Feb 19 12:10:36 2001 Triet H. Lai <thlai@mail.usyd.edu.au>
+
+ * error.c (rb_sys_warning): new function to give warning with
+ strerror() message.
+
+ * dir.c (rb_glob_helper): better error handling, along with
+ performance tune.
+
+Mon Feb 19 01:55:43 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (secure_visibility): visibility check for untainted modules.
+
+Mon Feb 19 00:29:29 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * signal.c (sigpipe): sighandler which does nothing.
+
+ * signal.c (trap): set sigpipe function for SIGPIPE.
+
+ * signal.c (Init_signal): default SIGPIPE handler should be
+ sigpipe function.
+
+Sun Feb 18 15:42:38 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/curses/extconf.rb: add dir_config.
+
+ * missing/flock.c: use fcntl(2) instead of lockf(2).
+
+Sun Feb 18 05:46:03 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: Response#range_length was not debugged.
+
+Sun Feb 18 04:02:03 2001 Yasushi Shoji <yashi@yashi.com>
+
+ * array.c (rb_ary_subseq): wrong boundary check.
+
+Sun Feb 18 00:09:50 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * win32/win32.c: make file I/O faster on mswin32/mingw32.
+
+ * win32/win32.h: ditto.
+
+ * rubysig.h: ditto.
+
+Sat Feb 17 23:32:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (cond0): integer literal in condition should not be
+ compared to lineno ($.).
+
+Fri Feb 16 01:44:56 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (set_outfile): f should be the FILE* from the assigning value.
+
+ * ext/socket/socket.c (tcp_s_open): should not give default value
+ to local_host.
+
+ * time.c (time_s_times): move to Process::times.
+
+ * file.c (rb_file_s_lchmod): new method File::lchmod.
+
+ * file.c (rb_file_s_lchown): new method File::lchown.
+
+Thu Feb 15 11:33:49 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/cgi/session.rb (close): fixed reversed condition.
+
+Thu Feb 15 08:34:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (proc_waitall): new method based on a patch from Brian
+ Fundakowski Feldman <green@green.dyndns.org>.
+
+ * process.c (last_status_set): objectify $? value (Process::Status).
+
+Wed Feb 14 17:28:24 2001 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb: supports unknown resp_text_code.
+
+Wed Feb 14 00:44:17 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (dir_s_glob): support backslash escape of metacharacters
+ and delimiters.
+
+ * dir.c (remove_backslases): remove backslashes from path before
+ calling stat(2).
+
+ * dir.c (dir_s_glob): call rb_yield directly (via push_pattern) if
+ block is given to the method.
+
+ * dir.c (push_pattern): do not call rb_ary_push; yield directly.
+
+ * eval.c (blk_copy_prev): reduced ALLOC_N too much.
+
+ * eval.c (frame_dup): ditto.
+
+Tue Feb 13 23:05:38 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * dir.c (lstat): should use rb_sys_stat if lstat(2) is not
+ available.
+
+Tue Feb 13 08:43:10 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_ctl): do not call ioctl/fcntl for f2, if f and f2
+ have same fileno.
+
+Tue Feb 13 01:13:43 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_load): raise LocalJumpError if unexpected local jumps
+ appear during load.
+
+ * ext/socket/socket.c (bsock_close_read): don't call rb_thread_fd_close();
+ it's supposed to be called by io_io_close().
+
+ * ext/socket/socket.c (bsock_close_read): do not modify f and f2.
+
+ * ext/socket/socket.c (bsock_close_write): ditto.
+
+ * ext/socket/socket.c (sock_new): avoid dup(2) on sockets.
+
+ * parse.y (primary): preserve and clear in_single and in_def using
+ stack to prevent nested method errors in singleton class bodies.
+
+Sun Feb 11 16:00:30 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * eval.c (stack_length): use __builtin_frame_address() only if
+ GCC and i386 CPU.
+
+ * gc.c (rb_gc, Init_stack): ditto.
+
+ * configure.in: add ac_cv_func_getpgrp_void=yes on DJGPP.
+
+Sat Feb 10 23:43:49 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * hash.c (rb_any_hash): dumped core on machines sizeof(int) != sizeof(long).
+
+Sat Feb 10 23:07:15 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_s_for_fd): IO::for_fd(fd) - new method.
+
+ * regex.c (PREV_IS_A_LETTER): should not treat c>0x7f as a word
+ character if -Kn.
+
+Sat Feb 10 00:00:30 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * win32/win32.c (win32_stat): replace stat to enable when pathname
+ ends with '/' or '\' for mswin32 on Win9X / Win2k.
+
+ * win32/win32.h: ditto.
+
+ * ruby.h: ditto.
+
+ * dir.c (rb_glob_helper): ditto.
+
+ * file.c (rb_stat, rb_file_s_stat, eaccess, check3rdbyte): ditto.
+
+Fri Feb 9 22:54:57 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath): convert '\\' to '/'
+ before finding executable file path.
+
+Fri Feb 9 17:41:53 2001 Triet H. Lai <thlai@mail.usyd.edu.au>
+
+ * dir.c (rb_glob_helper): do not follow symbolic links.
+
+Thu Feb 8 21:27:24 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/mkmf.rb (install_rb): fix handling of relative path.
+
+ * lib/mkmf.rb (create_makefile): add srcdir.
+
+Thu Feb 8 02:22:09 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: join HTTPReadResponse into HTTPResponse again.
+
+ * lib/net/http.rb: move http_version() from HTTPRequest to
+ HTTPResponse.
+
+ * lib/net/protocol.rb: refactoring.
+
+Wed Feb 7 16:27:27 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: split HTTPResponse into HTTPReadResponse
+ module.
+
+ * lib/net/protocol.rb: add Net::net_private.
+
+ * lib/net/protocol.rb: Socket#reopen takes arg, open_timeout.
+
+Wed Feb 7 16:05:22 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * parse.y (parse_quotedwords): %w should allow parenthesis escape.
+
+Wed Feb 7 00:57:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (parse_qstring): %q should allow terminator escape.
+
+ * re.c (rb_reg_options): new method to give an option values.
+
+ * parse.y (cond0): disable special treating of integer literal in
+ conditional unless option -e is supplied. changes current
+ behavior. experimental.
+
+ * parse.y (cond0): give warning for string/integer literals and
+ dot operators in conditionals unless option -e is supplied.
+
+ * re.c (rb_reg_equal): all option flags should be same to be equal.
+
+Tue Feb 6 21:30:44 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: call on_connect() on re-opening socket.
+
+ * lib/net/pop.rb: also POP3 can use APOP auth.
+
+Tue Feb 6 20:19:10 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: add HTTP#request.
+
+ * lib/net/http.rb: take HTTP 1.0 server into account (incomplete).
+
+ * lib/net/protocol.rb: timeout for open/read.
+
+ * lib/net/protocol.rb: add Protocol#on_connect,on_disconnect.
+
+Mon Feb 5 23:15:46 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (Init_Exception): make Interrupt a subclass of
+ SignalException.
+
+Mon Feb 5 00:39:06 2001 KANEKO Naoshi <wbs01621@mail.wbs.ne.jp>
+
+ * dir.c: use ISXXX() instead of isxxx().
+
+ * dln.c (aix_loaderror): ditto.
+
+ * file.c (rb_file_s_expand_path): ditto.
+
+ * string.c (rb_str_upcase_bang): ditto.
+
+ * win32/win32.c (do_spawn): ditto.
+
+ * win32/win32.c (NtMakeCmdVector): ditto.
+
+ * win32/win32.c (opendir): ditto.
+
+Sat Feb 3 14:44:53 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * configure.in (AC_C_INLINE): check inline attribute.
+
+ * gc.c (is_pointer_to_heap): use inline rather than __inline__.
+
+ * pack.c (hex2num): ditto.
+
+ * ruby.h (rb_class_of, rb_type, rb_special_const_p): ditto.
+
+ * util.c (rb_class_of, rb_type, rb_special_const_p): defined in
+ ruby.h.
+
+Fri Feb 2 16:14:51 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_sort_bang): returns self, even if its length is
+ less than 2.
+
+ * eval.c (POP_VARS): propagate DVAR_DONT_RECYCLE, if
+ SCOPE_DONT_RECYCLE of ruby_scope is set.
+
+Wed Jan 31 22:27:29 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: gcc-2.95.2-7(Cygwin) support.
+ add -mwin32 if available.
+
+ * cygwin/GNUmakefile: ditto.
+
+Tue Jan 30 17:56:48 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_fetch): new method.
+
+Mon Jan 29 17:36:19 2001 TOYOFUKU Chikanobu <toyofuku@juice.or.jp>
+
+ * eval.c (rb_eval): nd_iter evaluation should be wrapped by
+ BEGIN_CALLARGS and END_CALLARGS.
+
+Mon Jan 29 14:25:39 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (block_pass): return from block jumps directory to
+ block invoker.
+
+Mon Jan 29 01:40:27 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_independent): should not clear str->orig here.
+ it's too early.
+
+Fri Jan 26 01:42:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y: clarify do ambiguity, bit more complex but natural
+ from my point of view.
+
+Wed Jan 24 14:58:08 2001 Akinori MUSHA <knu@ruby-lang.org>
+
+ * lib/cgi.rb: fix the problem that when running under mod_ruby
+ header() outputs only one Set-Cookie line.
+
+Wed Jan 24 01:45:49 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (POP_BLOCK_TAG): call rb_gc_force_recycle() if block has
+ not been objectified.
+
+ * eval.c (rb_callcc): should nail down block->tag history to avoid
+ rb_gc_force_recycle().
+
+Tue Jan 23 18:51:57 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_gc_call_finalizer_at_exit): should finalize objects in
+ deferred_final_list too.
+
+Tue Jan 23 16:10:12 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (os_live_obj): do not list terminated object.
+
+ * gc.c (os_obj_of): ditto.
+
+ * gc.c (rb_gc_mark): support new T_BLKTAG tag.
+
+ * gc.c (obj_free): ditto.
+
+ * eval.c (new_blktag): creation of new block tag, which holds
+ destination of global jump and orphan status.
+
+ * eval.c (block_pass): break from orphan Proc object will raise a
+ LocalJumpError exception.
+
+Mon Jan 22 16:33:16 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * mkconfig.rb: autoconf 2.49 support.
+
+Mon Jan 22 00:32:44 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (block_pass): behavior consistency with proc_call(). do
+ not propagate `break'.
+
+Sat Jan 20 03:54:00 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): fixed serious syntax misbehavior. do's
+ preceding was too high. a block in `foo bar do .. end' should
+ be passed to `foo', not `bar'.
+
+ * parse.y (block_call): syntax restructure.
+
+Thu Jan 18 04:28:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_s_read): new method to call IO#read from
+ pathname. In addition, it accepts third optional argument to
+ specify starting point.
+
+Wed Jan 17 13:28:26 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: remove DEFS definition.
+
+ * mkconfig.rb: ditto.
+
+ * win32/config.status.in: ditto.
+
+Tue Jan 16 17:00:50 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb: ignore EOFError for read.
+
+ * lib/net/http.rb: user specified header was not used.
+
+Mon Jan 15 16:00:07 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_unpack): should check associated pointer packed by
+ pack("P"). Thus pointers can be retrieved only from pointer
+ packed strings. restriction added.
+
+Sun Jan 14 21:49:28 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * sprintf.c (rb_f_sprintf): simple typo. binary base should be 2,
+ not '2'.
+
+ * re.c (rb_reg_s_last_match): should explicitly return nth match.
+
+Sun Jan 14 18:21:30 2001 Usaku Nakamura <usa@osb.att.ne.jp>
+
+ * win32/config.status.in: add some field.
+
+ * win32/win32.c (isInternalCmd): ignore case for shell's internal
+ command.
+
+ * win32/win32.c (do_spawn): recognize quoted command line.
+
+Sun Jan 14 04:10:27 2001 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb (adding): too few "yield" in case of arg is
+ not String/File.
+
+ * lib/net/http.rb: add http request object.
+
+Sat Jan 13 19:39:30 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * re.c (rb_reg_desc): separate RE_OPTION_MULTILINE
+
+ * re.c (rb_reg_options): add RE_OPTION_{POSIXLINE,RE_OPTION_MULTILINE,
+ RE_OPTION_EXTENDED}
+
+Thu Jan 11 10:45:04 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.h, win32/config.h.in: move NORETURN from win32.h
+ to config.h.in.
+
+ * win32/config.h.in (inline): renamed from INLINE.
+
+ * djgpp/config.hin (INLINE): removed.
+
+Thu Jan 11 06:45:55 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_mod_dup): should propagate FL_SINGLETON.
+
+ * object.c (inspect_obj): handles the case of no instance variable.
+
+Wed Jan 10 16:15:08 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ruby.h: NORETURN macro is changed for VC++ 6.0.
+
+ * eval.c, intern.h: ditto.
+
+ * djgpp/config.hin, win32/win32.h: ditto.
+
+ * configure.in: ditto.
+
+Wed Jan 10 13:54:53 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * process.c (proc_setuid): use setresuid() if available.
+
+ * process.c (proc_setgid): use setresgid() if available.
+
+ * configure.in: ditto.
+
+Wed Jan 10 01:50:45 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * configure.in (AC_C_INLINE): check inline attribute.
+
+ * string.c (rb_str_reverse_bang): forgot to call rb_str_modify().
+
+Tue Jan 9 17:41:40 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_taint): check frozen status before modifying
+ taint status.
+
+ * object.c (rb_obj_untaint): ditto.
+
+Tue Jan 9 16:22:14 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_inject): new method.
+
+Tue Jan 9 02:16:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_gc_call_finalizer_at_exit): clear klass member of
+ terminating object.
+
+ * eval.c (rb_call): raise exception for terminated object.
+
+Mon Jan 8 21:24:37 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigdivrem): t2 might be too big for signed long; do
+ not use rb_int2big(), but rb_uint2big().
+
+Mon Jan 8 21:35:10 2001 Guy Decoux <decoux@moulon.inra.fr>
+
+ * file.c (path_check_1): should restore modified path.
+
+Mon Jan 8 03:09:58 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (rb_load_fail): new func to report LoadError.
+
+ * ruby.c (load_file): use rb_load_fail.
+
+Sat Jan 6 00:17:18 2001 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * pack.c (pack_pack): avoid infinite loop(pack 'm2').
+
+Fri Jan 5 01:02:17 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ruby_finalize): should enclosed by PUSH_TAG/POP_TAG.
+
+ * gc.c (rb_gc_mark): link 2 of NODE_IFUNC should not be explicitly
+ marked. it may contain non object pointer.
+
+Tue Jan 2 00:20:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (reg_s_last_match): Regexp::last_match(nth) returns nth
+ substring of the match (alternative for $& and $<digit>).
+
+Sun Dec 31 01:39:16 2000 Guy Decoux <decoux@moulon.inra.fr>
+
+ * eval.c (rb_mod_define_method): wrong comparison for blocks.
+
+Sat Dec 30 19:28:50 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (id2ref): should handle Symbol too.
+
+ * gc.c (id2ref): should print original ptr value
+
+Sat Dec 30 03:14:22 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_iterate): NODE_CFUNC does not protect its data
+ (nd_tval), so create new node NODE_IFUNC for iteration C
+ function.
+
+ * eval.c (rb_yield_0): use NODE_IFUNC.
+
+ * gc.c (rb_gc_mark): support NODE_IFUNC.
+
+Fri Dec 29 11:41:55 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (mem_error): prohibit recursive mem_error().
+ (ruby-bugs-ja:PR#36)
+
+Fri Dec 29 11:05:41 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_fd_writable): should not switch context if
+ rb_thread_critical is set.
+
+ * eval.c (rb_thread_wait_fd): ditto.
+
+ * eval.c (rb_thread_wait_for): ditto.
+
+ * eval.c (rb_thread_select): ditto.
+
+ * eval.c (rb_thread_join): join during critical section causes
+ deadlock.
+
+Fri Dec 29 00:38:46 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * m17n.c: new file - core functions of M17N.
+
+Tue Dec 26 18:46:41 2000 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
+
+ * lib/debug.rb: Avoid thread deadlock in debugging stopped thread.
+
+ * lib/debug.rb: Uncleared 'finish' state.
+
+Tue Dec 26 16:53:55 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): remove dvar node by rb_gc_force_recycle()
+ more eagerly.
+
+ * eval.c (rb_f_binding): recycling should be stopped for outer
+ scope too.
+
+ * eval.c (proc_new): ditto.
+
+Tue Dec 26 15:45:35 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_inspect): should treat multibyte characters
+ properly.
+
+Mon Dec 25 17:49:08 2000 K.Kosako <kosako@sofnec.co.jp>
+
+ * string.c (rb_str_replace_m): unexpected string share happens if
+ replace is done for associated (STR_NO_ORIG) string.
+
+Tue Dec 26 15:01:53 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_f_p): should not call rb_io_flush() if rb_defout is not
+ a IO (T_FILE).
+
+Mon Dec 25 15:52:39 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * stable version 1.6.2 released.
+
+Mon Dec 25 05:11:04 2000 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: version 2.1.2 (some bug fixes).
+
+ * lib/cgi.rb: Regexp::last_match[1] --> $1
+
+ * lib/net/telnet.rb: ditto.
+
+Mon Dec 25 04:43:02 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: does not send HEAD on closing socket.
+
+Mon Dec 25 00:44:48 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_any_cmp): should use rb_str_cmp() if TYPE == T_STRING
+ and CLASS_OF == rb_cString.
+
+ * string.c (rb_str_new4): should copy class of original too.
+
+Mon Dec 25 00:04:54 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_thread_schedule): initial value of `max' changed to -1.
+
+Mon Dec 25 00:16:14 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_replace_m): copy-on-write replace.
+
+ * parse.y (yylex): should handle => after identifier as well as ==
+ and =~.
+
+Sat Dec 23 23:55:57 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_cstr2inum): Integer("") should not return 0.
+
+Sat Dec 23 11:55:57 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_and): Array#& should preserve original order.
+
+Sat Dec 23 03:44:16 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb: set @closed false in Socket#reopen.
+
+ * lib/net/pop.rb: add POP3.foreach, delete_all.
+
+ * lib/net/pop.rb: add POP3#delete_all.
+
+ * lib/net/http.rb: add HTTP.version_1_1, version_1_2
+
+ * lib/net/http.rb: refactoring.
+
+Fri Dec 22 23:11:12 2000 Ueno Katsuhiro <unnie@blue.sky.or.jp>
+
+ * eval.c (rb_feature_p): ext might be null.
+
+Fri Dec 22 17:04:12 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * win32/win32.c (myselect): avoid busy loop by adjusting fd_count.
+
+Fri Dec 22 15:07:55 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_cstr2inum): prefix like '0x' had removed too much.
+
+Thu Dec 21 13:01:46 2000 Tanaka Akira <akr@m17n.org>
+
+ * lib/net/ftp.rb (makeport): don't use TCPsocket.getaddress.
+
+Wed Dec 20 12:00:15 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_lshift): should cast up to BDIGIT_DBL.
+
+ * parse.y (yylex): disallow trailing '_' for numeric literals.
+
+ * bignum.c (rb_cstr2inum): allow `_' within converting string.
+
+ * eval.c (specific_eval): should take no argument if block is
+ supplied.
+
+Tue Dec 19 13:44:50 2000 K.Kosako <kosako@sofnec.co.jp>
+
+ * io.c (rb_f_p): should flush rb_defout, not stdout.
+
+Tue Dec 19 00:57:10 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_minus): usec might overflow. (ruby-bugs-ja:PR#35)
+
+ * eval.c (rb_obj_extend): Object#extend should take at least one
+ argument.
+
+ * parse.y (mrhs_basic): should check value_expr($3), not $1.
+
+Mon Dec 18 23:18:39 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * util.c (mblen, __crt0_glob_function): add for multibyte
+ on DJGPP 2.03.
+
+Mon Dec 18 18:10:30 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_plus): usec might underflow (ruby-bugs-ja:#PR33).
+
+Mon Dec 18 08:11:20 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_set_default): should call rb_hash_modify().
+
+Sat Dec 16 02:58:26 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * eval.c (rb_eval): should clear ruby_errinfo on retry.
+
+ * eval.c (rb_rescue2): ditto.
+
+Thu Dec 14 13:06:18 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * class.c (rb_include_module): prohibit frozen class/module.
+
+ * eval.c (rb_frozen_class_p): make external.
+
+ * intern.h (rb_frozen_class_p): prototyped.
+
+ * intern.h (rb_undef): prototyped not but rb_undef_method()
+ which is also in ruby.h.
+
+Thu Dec 14 09:20:26 2000 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: support -T1 on ruby 1.6.2
+
+ * lib/cgi.rb: $1 --> Regexp::last_match[1]
+
+ * lib/net/telnet.rb: ditto.
+
+Wed Dec 13 23:27:06 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): handles case statement without expr, which
+ looks for any TRUE (non nil, non false) when expression.
+
+ * parse.y (primary): case expression should not be compstmt, but
+ mere expr.
+
+ * parse.y (primary): case without following expression is now
+ separated rule.
+
+Wed Dec 13 12:41:27 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ruby.c (proc_options): accept "--^M" for DOS line endings.
+
+Tue Dec 12 15:45:42 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (newline_node): cancel newline unification.
+
+Mon Dec 11 23:01:57 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): supports cases `?' precedes EOF and newline.
+
+Mon Dec 11 12:11:25 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (call_end_proc): some frame members were left
+ uninitialized.
+
+Mon Dec 11 01:14:58 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_fptr_finalize): do not fclose stdin, stdout and
+ stderr at exit.
+
+Sat Dec 9 17:34:48 2000 Tachino Nobuhiro <tachino@open.nm.fujitsu.co.jp>
+
+ * time.c (time_cmp): should check with kind_of?, not instance_of?
+
+ * time.c (time_eql): ditto.
+
+ * time.c (time_minus): ditto.
+
+Fri Dec 8 17:23:25 2000 Tachino Nobuhiro <tachino@open.nm.fujitsu.co.jp>
+
+ * sprintf.c (rb_f_sprintf): proper string precision treat.
+
+Fri Dec 8 10:44:05 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_mod_remove_cvar): Module#remove_class_variable
+ added.
+
+Thu Dec 7 17:35:51 2000 Shugo Maeda <shugo@ruby-lang.org>
+
+ * eval.c (stack_length): don't use __builtin_frame_address() on alpha.
+
+Wed Dec 6 18:07:13 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * djgpp/config.sed, win32/Makefile.sub: typo.
+
+ * eval.c (rb_mod_define_method): avoid VC4.0 warnings.
+
+Wed Dec 6 13:38:08 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_and): tuning, make hash from shorter operand.
+
+Wed Dec 6 01:28:50 2000 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
+
+ * gc.c (rb_gc): __builtin_frame_address() should not be used on
+ MacOS X.
+
+ * gc.c (Init_stack): ditto.
+
+Mon Dec 4 13:44:01 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/jcode.rb: consider multibyte. not /n.
+
+Mon Dec 4 09:49:36 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_inspect): output whole string contents. no more `...'
+
+ * string.c (rb_str_dump): should propagate taintness.
+
+ * hash.c (env_inspect): hash like human readable output.
+
+ * variable.c (rb_ivar_get): prohibiting instance variable access
+ is too much restriction.
+
+ * class.c (method_list): retrieving information should not be
+ restricted where $SAFE=4.
+
+ * class.c (rb_obj_singleton_methods): ditto.
+
+ * eval.c (rb_thread_priority): ditto.
+
+ * eval.c (rb_thread_local_aref): ditto.
+
+ * variable.c (rb_obj_instance_variables): ditto.
+
+ * variable.c (rb_mod_const_at): ditto.
+
+ * variable.c (rb_mod_class_variables): ditto.
+
+ * eval.c (rb_exec_end_proc): end_proc should be preserved.
+
+Sat Dec 2 22:32:43 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): || should accept exactly zero argument.
+
+ * parse.y (stmt): multiple right hand side for single assignment
+ (e.g. a = 1,2) is allowed.
+
+Wed Nov 29 07:55:29 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_long): dumping long should be smaller than 32bit max.
+
+ * marshal.c (w_long): shorter long format for small integers(-123..122).
+
+ * marshal.c (r_long): ditto.
+
+Tue Nov 28 18:10:51 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_mod_define_method): quick hack to implement
+ on-the-fly method definition. experimental.
+
+Mon Nov 27 17:00:35 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): should not redefine builtin classes/modules
+ from within wrapped load.
+
+Mon Nov 27 08:57:33 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (call_end_proc): should be isolated from outer block.
+
+Mon Nov 27 00:10:08 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_ctl): call ioctl/fcntl for fptr->f2 too.
+
+ * process.c (rb_f_fork): call rb_thread_atfork() after creating
+ child process.
+
+ * eval.c (rb_thread_atfork): kill all other threads immediately,
+ then turn the current thread into the main thread.
+
+Sat Nov 25 23:12:22 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (ruby_run): move calling point of rb_trap_exit after
+ cleaning up threads.
+
+ * eval.c (ruby_finalize): new function to call EXIT trap, END
+ procs and GC finalizers.
+
+ * eval.c (rb_exec_end_proc): prevent recursion.
+
+ * gc.c (rb_gc_call_finalizer_at_exit): ditto.
+
+ * signal.c (rb_trap_exit): ditto. made static.
+
+ * process.c (rb_f_fork): should swallow all exceptions from block
+ execution.
+
+ * process.c (fork_rescue): should call ruby_finalize().
+
+ * parse.y (yycompile): rb_gc() removed. I don't remember why I put
+ this here. test code?
+
+Fri Nov 24 22:03:48 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (EXCL): exclusive information is now stored in an
+ instance variable. this enables proper marshal dump.
+
+ * process.c (proc_waitpid): should clear rb_last_status ($?) if
+ no pid was given by waitpid(2).
+
+Thu Nov 23 01:35:38 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (proc_waitpid2): returns nil if no pid found.
+
+Wed Nov 22 23:45:15 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_eq): new method. Compares start and end of range
+ respectively.
+
+Wed Nov 22 11:01:32 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_mod_class_variables): should honor singleton
+ class variable rule defined yesterday.
+
+Tue Nov 21 23:24:14 2000 Mitsuteru S Nakao <nakao@kuicr.kyoto-u.ac.jp>
+
+ * numeric.c (flodivmod): missing second operand (typo).
+
+Tue Nov 21 03:39:41 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (marshal_load): marshal format compatibility check
+ revised. greater minor revision is UPWARD compatible;
+ downward compatibility is not assured.
+
+ * eval.c (is_defined): clarify class variable behavior for
+ singleton classes. class variables within singleton class
+ should be treated like within singleton method.
+
+Mon Nov 20 13:45:21 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): set ruby_sourceline before evaluating
+ exceptions.
+
+ * gc.c (gc_sweep): defer finalization in GC during compilation or
+ interrupt prohibit section.
+
+ * gc.c (gc_sweep): mark all nodes before sweeping if GC happened
+ during compilation.
+
+ * eval.c (rb_eval): should treat class variables specially in a
+ method defined in the singleton class.
+
+Mon Nov 20 10:20:21 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * dir.c, win32/win32.c, ruby.h: add rb_iglob().
+
+Mon Nov 20 00:18:16 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_subseq): should return nil for outbound start
+ index.
+
+ * marshal.c (marshal_load): show format versions explicitly when
+ format version mismatch happens.
+
+Sun Nov 19 06:13:24 2000 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * marshal.c: use long for string/array length.
+
+ * pack.c (swaps): use bit-or(|) instead of plus(+).
+
+ * pack.c (swapl): ditto.
+
+Sat Nov 18 15:18:16 2000 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * array.c (rb_ary_replace): array size should be in long.
+
+ * array.c (rb_ary_concat): ditto.
+
+ * array.c (rb_ary_hash): ditto.
+
+Sat Nov 18 14:07:20 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: Socket#readline() reads until "\n", not "\r\n"
+
+Fri Nov 17 14:55:18 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * string.c (rb_str_succ): output should be NUL terminated.
+
+Fri Nov 17 02:54:15 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_close): need not to flush before closing.
+
+ * eval.c (rb_thread_join): should preserve last thread status when
+ THREAD_TO_KILL.
+
+ * eval.c (rb_thread_stop): ditto.
+
+ * io.c (io_fflush): wrap fflush by TRAP_BEG, TRAP_END.
+
+ * eval.c (rb_eval): method defined within singleton class
+ definition should behave like singleton method about class
+ variables.
+
+ * eval.c (is_defined): ditto.
+
+Thu Nov 16 23:06:07 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: can call {old,new}_implementation any times.
+
+ * lib/net/http.rb: HTTP#connecting, receive ->
+ common_oper, connecting.
+
+ * lib/net/http.rb: output warning if u_header includes
+ duplicated header.
+
+ * lib/net/http.rb: not check Connection:/Proxy-Connection;
+ always read until eof.
+
+ * lib/net/protocol.rb: detects and catches "break" from block.
+
+Thu Nov 16 16:32:45 2000 Masahiro Tanaka <masa@stars.gsfc.nasa.gov>
+
+ * bignum.c (bigdivrem): should have incremented ny first.
+
+Thu Nov 16 14:58:00 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/socket/socket.c (sock_new): duplicates file descriptor
+ with myfddup() on mswin32/mingw32.
+
+ * win32/win32.h: uses system original fdopen().
+
+ * win32/win32.c (myfddup): newly added instead of myfdopen().
+
+ * win32/win32.c (mybind, myconnect, mygetsockname, mygetsockopt,
+ mylisten, mysetsockopt): now accept file descriptor only, not
+ SOCKET.
+
+ * win32/win32.c (myaccept, mysocket): return file descriptor,
+ instead of SOCKET.
+
+Thu Nov 16 10:23:24 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (massign): too strict check for nameless rest argument.
+
+ * eval.c (method_arity): mere * should return -1.
+
+ * eval.c (intersect_fds): should check all FDs in the fd_set.
+
+Wed Nov 15 19:33:20 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_attr): should clear method cache before calling hook.
+
+ * eval.c (rb_eval): ditto.
+
+ * eval.c (rb_mod_modfunc): ditto.
+
+Mon Nov 13 22:44:52 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (rb_bug): print version to stderr.
+
+Mon Nov 13 19:02:08 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * win32/win32.c, io.c, process.c: the exit status of program must be
+ multiplied 256 on mswin32 and msdosdjgpp(system(), ``).
+
+Sat Nov 11 22:57:38 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): uniformed treatment of -a**b, where a is a
+ number literal; hacky but behavior appears more consistent.
+
+ * parse.y (newline_node): reduce newline node (one per line).
+
+ * random.c (rb_f_srand): should be prohibited in safe level
+ greater than 4.
+
+Sat Nov 11 22:37:36 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * rubysig.h: do not use rb_trap_immediate on win32.
+
+ * rubysig.h: new macros, ATOMIC_TEST, ATOMIC_SET, ATOMIC_INC,
+ ATOMIC_DEC, RUBY_CRITICAL and new definition of TRAP_BEG,
+ TRAP_END.
+
+ * gc.c (ruby_xmalloc): should wrap malloc() by RUBY_CRITICAL.
+
+ * signal.c (sighandle): better win32 sig handling.
+
+ * win32/win32.c (flock): better implementation.
+
+ * win32/win32.c (myselect): ditto.
+
+ * win32/win32.c (myaccept): ditto.
+
+ * win32/win32.c (waitpid): ditto.
+
+ * win32/win32.c (myrename): ditto.
+
+ * win32/win32.c (wait_events): support function for win32 signal
+ handling.
+
+Sat Nov 11 08:34:18 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.31.
+
+ * lib/net/http.rb: initializes header in HTTP, not HTTPCommand.
+
+ * lib/net/protocol.rb, http.rb: rewrites proxy code.
+
+Fri Nov 10 16:15:53 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (rb_num2long): use to_int, not to_i.
+
+ * error.c: T_SYMBOL was misplaced by T_UNDEF.
+
+ * parse.y (yylex): eval("^") caused infinite loop.
+
+Thu Nov 9 14:22:13 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_taint_check): should check IO taintness; no
+ operation for untainted IO should be allowed in the sandbox.
+
+ * rubyio.h (GetOpenFile): check IO taintness inside using
+ rb_io_taint_check().
+
+Wed Nov 8 03:08:53 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_fflush): ensure fflush(3) would not block by calling
+ rb_thread_fd_writable().
+
+Tue Nov 7 20:29:56 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.30.
+
+ * lib/net/protocol.rb, smtp.rb: Command#critical_ok -> error_ok
+
+ * lib/net/http.rb: reads header when also "100 Continue".
+
+Tue Nov 7 04:32:19 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigdivrem): use bit shift to make y's MSB set.
+
+Mon Nov 6 1:22:49 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (warn_print): do not use err_append(), to ensure output
+ to stderr.
+
+ * error.c (rb_warn): use warn_print() instead of err_print().
+
+ * error.c (rb_warning): ditto.
+
+ * error.c (rb_bug): ditto.
+
+ * eval.c (rb_load): re-raise exceptions during load.
+
+ * time.c (make_time_t): remove useless adjust
+
+Thu Nov 2 18:01:16 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * random.c (rb_f_rand): half-baked float support fixed. This fix
+ was originally proposed by K.Kosako <kosako@sofnec.co.jp>.
+
+Tue Oct 31 17:27:17 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c: change digit size to `long|int' if long long is
+ available.
+
+ * marshal.c (w_object): support `long|int' digits.
+
+ * marshal.c (r_object): ditto.
+
+Sat Oct 28 23:54:22 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): allow =end at the end of file (without a
+ newline at the end).
+
+Fri Oct 27 10:00:27 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_cstr2inum): should ignore trailing white spaces.
+
+ * bignum.c (rb_str2inum): string may not have sentinel NUL.
+
+Fri Oct 27 02:37:22 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_cstr2inum): wrongly assigned base to c before
+ badcheck check.
+
+Thu Oct 26 02:42:50 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb: Command#critical_ok
+
+ * lib/net/smtp.rb: clear critical flag before go to SMTP
+
+Wed Oct 25 12:30:19 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_concat): replacing array might be the receiver
+ itself. do not call rb_ary_push_m.
+
+ * array.c (rb_ary_replace): replacing array might be the receiver
+ itself. use memmove.
+
+Fri Oct 20 07:56:23 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): ARGSPUSH should not modify args array.
+
+Thu Oct 19 14:58:17 2000 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * pack.c (NUM2U32): should use NUM2ULONG().
+
+Tue Oct 17 17:30:34 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * eval.c (error_print): ruby_sourcefile may be NULL.
+
+Tue Oct 17 16:36:28 2000 Wes Nakamura <wknaka@pobox.com>
+
+ * pack.c (NATINT_U32): wrong use of sizeof.
+
+Tue Oct 17 12:48:20 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * eval.c (rb_abort): nil check against ruby_errinfo.
+
+ * eval.c (rb_thread_schedule): use FOREACH_THREAD_FROM instead of
+ FOREACH_THREAD, since curr_thread may be removed from thread ring.
+
+ * eval.c (THREAD_ALLOC): errinfo should be Qnil.
+
+ * eval.c (rb_callcc): th->prev,th->next are now already
+ initialized in THREAD_ALLOC.
+
+Mon Oct 16 15:37:33 2000 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * eval.c (rb_thread_inspect): tag size was shorter than required.
+
+ * object.c (rb_obj_inspect): ditto.
+
+Mon Oct 16 14:25:18 2000 Shugo Maeda <shugo@ruby-lang.org>
+
+ * object.c (sym_inspect): used `name' before initialization.
+
+Mon Oct 16 14:06:00 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): use NATINT_U32 for 'l', 'L', and 'N'.
+
+ * pack.c (I32,U32): 32 bit sized integer.
+
+ * pack.c (OFF16,OFF32B): big endian offset for network byteorder.
+
+Mon Oct 16 06:39:32 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: hex-alpha is not [a-h] but [a-f].
+
+Mon Oct 16 01:02:02 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_start_0): should not abort on exception if
+ $SAFE >= 4.
+
+ * parse.y (sym): symbols for class variable names.
+
+Sun Oct 15 01:49:18 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_file_flock): should accept interrupt.
+
+ * process.c (rb_waitpid): ditto.
+
+ * process.c (rb_waitpid): ditto.
+
+ * process.c (proc_wait): ditto.
+
+ * process.c (proc_waitpid2): wrong recursion.
+
+Sat Oct 14 03:32:13 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_alloc): should not link a new thread in the
+ live thread ring before initialization.
+
+Fri Oct 13 17:08:09 2000 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb: new file.
+
+Thu Oct 12 18:56:28 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/pop.rb: POP3#reset
+
+ * lib/net/http.rb: a code for "Switch Protocol" was wrongly 100.
+
+Thu Oct 12 01:23:38 2000 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: bug fix: CGI::html(): PRETTY option didn't work.
+
+Thu Oct 12 00:03:02 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (sym_inspect): should adjust string length.
+
+ * struct.c (rb_struct_to_s): ditto.
+
+ * struct.c (rb_struct_inspect): ditto.
+
+Wed Oct 11 22:15:47 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * eval.c (rb_thread_inspect): should adjust string length.
+
+ * object.c (rb_any_to_s): ditto.
+
+ * object.c (rb_obj_inspect): ditto.
+
+Wed Oct 11 18:13:50 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_start_0): should check insecure exit.
+
+Wed Oct 11 14:29:51 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb: 2nd arg for ProtocolError#initialize is
+ optional.
+
+ * lib/net/http.rb: code refining.
+
+Wed Oct 11 11:13:03 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (primary): setter method (e.g. foo=) should always be
+ public.
+
+ * eval.c (rb_thread_raise): should not raise SecurityError if
+ exception raised by the interpreter.
+
+ * eval.c (rb_thread_cleanup): skip all THREAD_KILLED threads
+ before FOREACH_THREAD.
+
+Tue Oct 10 16:11:54 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * dln.c (dln_load): remove unused code for Cygwin.
+
+Tue Oct 10 09:49:23 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (Init_File): FileTest.size should return 0 (not nil) for
+ empty files.
+
+Sun Oct 8 13:20:26 2000 Guy Decoux <decoux@moulon.inra.fr>
+
+ * eval.c (POP_SCOPE): not just set SCOPE_DONT_RECYCLE, but do
+ scope_dup().
+
+Sat Oct 7 15:10:50 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_reverse_bang): unnecessary ALLOCA_N() was
+ removed.
+
+Fri Oct 6 14:50:24 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/extmk.rb.in, lib/mkmf.rb: remove "DESTDIR =".
+
+ * Makefile.in, win32/Makefile.sub, ruby.1: renamed -X to -C.
+
+Fri Oct 6 12:50:52 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_plus): use to_ary(), not Check_Type().
+
+ * array.c (rb_ary_concat): ditto.
+
+ * gc.c (rb_gc): use __builtin_frame_address() for gcc.
+
+ * eval.c (stack_length): ditto.
+
+ * parse.y (assign_in_cond): stop warning till some better warning
+ condition will be found.
+
+Thu Oct 5 18:02:39 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_dup): should have propagated taint flag.
+ (ruby-bugs:#PR64,65)
+
+Wed Oct 4 00:26:11 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (proc_arity): proc{|a|}'s arity should be -1.
+
+Mon Oct 2 05:28:58 2000 akira yamada <akira@ruby-lang.org>
+
+ * string.c (trnext): minus at the end of pattern.
+
+Sun Oct 1 00:43:34 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in: exp-name was wrong on cygwin and mingw32.
+
+Thu Sep 28 14:57:09 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_compile_pattern): should try must_string calculation
+ every time.
+
+Tue Sep 19 23:47:44 2000 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
+
+ * configure.in, config.guess, config.sub: MacOS X support.
+
+Wed Sep 27 18:40:05 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * stable version 1.6.1 released.
+
+Wed Sep 27 16:13:05 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * mkconfig.rb: variables should be expanded only if /\$\{?\w+\}?/.
+
+Tue Sep 26 18:09:51 2000 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * string.c: include <math.h>
+
+Tue Sep 26 15:59:50 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_mod_dup): metaclasses of class/module should not be
+ cleared by rb_obj_dup.
+
+Tue Sep 26 02:44:54 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (GC_MALLOC_LIMIT): size extended.
+
+ * regex.c (DOUBLE_STACK): use machine's stack region for regex
+ stack if its size is small enough.
+
+Mon Sep 25 18:13:07 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c: include <defines.h>.
+
+ * eval.c (rb_add_method): cache mismatch by method
+ definition. need to clear_cache_by_id every time.
+
+Mon Sep 25 13:31:45 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * win32/win32.c (NtCmdGlob): substitute '\\' with '/'.
+
+Mon Sep 25 00:35:01 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * defines.h: #undef HAVE_SETITIMER on cygwin.
+
+Sun Sep 24 03:01:53 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, http.rb: typo.
+
+Sat Sep 23 07:33:20 2000 Aleksi Niemela <aleksi.niemela@cinnober.com>
+
+ * regex.c (re_compile_pattern): nicer regexp error messages for
+ invalid patterns.
+
+Sat Sep 23 03:06:25 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_autoload_load): should not require already
+ provided features.
+
+Fri Sep 22 15:46:21 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/http.rb: too early parameter expansion in string.
+
+Fri Sep 22 13:58:51 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/extmk.rb.in: don't use default $:
+
+Fri Sep 22 13:42:50 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * regex.c (PUSH_FAILURE_COUNT): avoid casting warning on alpha.
+
+ * regex.c (PUSH_FAILURE_POINT): ditto.
+
+Fri Sep 22 10:16:21 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * win32/config.h.in: add HAVE_TELLDIR, HAVE_SEEKDIR
+
+Thu Sep 21 19:04:34 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/extmk.rb, lib/mkmf.rb (install_rb): check whether libdir is
+ directory or not.
+
+Thu Sep 21 17:23:05 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_file_s_symlink): use HAVE_SYMLINK.
+
+ * file.c (rb_file_s_readlink): use HAVE_READLINK.
+
+ * dir.c (dir_tell): use HAVE_TELLDIR.
+
+ * dir.c (dir_seek): use HAVE_SEEKDIR.
+
+ * configure.in (AC_CHECK_FUNCS): lstat, symlink, readlink,
+ telldir, seekdir checks added.
+
+ * file.c (lstat): should use stat(2) if lstat(2) is not
+ available.
+
+Thu Sep 21 15:59:23 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.29.
+
+ * lib/net/http.rb: HTTPReadAdapter -> HTTPResponseReceiver
+
+ * lib/net/http.rb (connecting): response is got in receive()
+
+Thu Sep 21 15:49:07 2000 Wayne Scott <wscott@ichips.intel.com>
+
+ * lib/find.rb (find): should not follow symbolic links;
+ tuned performance too.
+
+Wed Sep 20 23:21:38 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (load_file): two Ctrl-D was required to stop ruby at the
+ beginning of stdin script read.
+
+Wed Sep 20 14:01:45 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_provided): detect infinite load loop.
+
+ * eval.c (rb_provided): too weak filename comparison.
+
+ * eval.c (rb_thread_alloc): avoid recycling still referenced
+ dvar structures.
+
+ * eval.c (rb_callcc): ditto.
+
+ * eval.c (THREAD_ALLOC): fill dyna_vars field by ruby_dyna_vars.
+
+Tue Sep 19 17:47:03 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * stable version 1.6.0 released.
+
+Tue Sep 19 16:24:52 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (Init_marshal): provide marshal.so no more.
+
+Tue Sep 19 14:01:01 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in, win32/setup.mak: include version number
+ in RUBY_SO_NAME.
+
+Tue Sep 19 13:07:47 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): was confusing $~ and $_.
+
+Tue Sep 19 13:06:53 2000 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * signal.c (rb_f_kill): signum may be a negative number, should be
+ treated by signed number.
+
+Tue Sep 19 01:14:56 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_provide): better feature handling.
+
+ * eval.c (rb_f_require): loading ruby library may be partial
+ state. checks in rb_thread_loading is integrated.
+
+ * eval.c (rb_provided): better thread awareness.
+
+ * lib/irb/frame.rb: 6 (not 5) parameters for trace_func proc.
+
+ * eval.c (error_print): should print error position even if
+ get_backtrace() failed.
+
+Sat Sep 16 03:29:59 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_require): rb_provided() was called too early; does
+ not work well with threads.
+
+ * parse.y (ensure): should distinguish empty ensure and non
+ existing ensure.
+
+ * file.c (Init_File): extending File by class of FileTest was
+ serious mistake.
+
+Thu Sep 14 02:46:54 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_yield): array strip should be done in this
+ function.
+
+Wed Sep 13 17:01:03 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_eq): incomplete value comparison of bignums.
+
+Wed Sep 13 06:39:54 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_mod_class_variables): Module#class_variables added.
+
+Wed Sep 13 06:09:26 2000 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: bug fix: CGI::header(): output status header.
+
+Wed Sep 13 01:09:12 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): allow global variables like '$__a'.
+
+Tue Sep 12 22:28:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/socket/extconf.rb: avoid using terrible <netinet/tcp.h>
+ on cygwin 1.1.5.
+
+Tue Sep 12 16:01:58 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * array.c (rb_ary_unshift_m): typo.
+
+Tue Sep 12 15:37:55 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): stripped array too much, should remove just
+ for proc_call().
+
+Tue Sep 12 07:05:24 2000 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: version 2.0.0: require ruby1.5.4 or later.
+
+ * lib/net/telnet.rb: version 1.6.0
+
+Tue Sep 12 03:26:07 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (massign): use to_ary to get an array if available.
+
+ * object.c (rb_Array): ditto.
+
+Mon Sep 11 14:24:47 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (ruby_setenv): should not free the element of
+ origenvironment.
+
+ * parse.y (command_call): kYIELD moved to this rule to allow
+ 'a = yield b'. (ruby-bugs-ja:#PR15)
+
+Mon Sep 11 01:27:54 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_yield_0): proc#call([]) should pass single value to
+ the block.
+
+ * eval.c (callargs): reduce array allocation.
+
+ * eval.c (massign): precise check for argument number.
+
+Fri Sep 8 10:05:17 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (STR_NO_ORIG): should be FL_USER2.
+
+Thu Sep 7 14:17:51 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_cat): should work even for concatenating same
+ string.
+
+Wed Sep 6 17:06:38 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_cvar_declare): should check superclass's class
+ variable first.
+
+Wed Sep 6 10:42:02 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-calculate-indent): shift continuing line
+ if previous line ends with modifier keyword.
+
+ * misc/ruby-mode.el (ruby-parse-region): should not give up if
+ modifiers are at the end of line.
+
+ * misc/ruby-mode.el (ruby-expr-beg): indented wrongly if modified
+ statement was size 1.
+
+Wed Sep 6 10:41:19 2000 Kenichi Komiya <kom@mail1.accsnet.ne.jp>
+
+ * misc/ruby-mode.el (ruby-parse-region): modifier was not handled
+ well on emacs19.
+
+Tue Sep 5 17:10:12 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_to_s): fixed zone string UTC for utc time object.
+
+Tue Sep 5 00:26:06 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regex.c (re_search): range worked wrongly on bm_search().
+
+Mon Sep 4 13:40:40 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: renamed libruby.a to libruby.{cygwin,mingw32}.a
+ on cygwin and mingw32.
+
+Sun Sep 3 23:44:04 2000 Noriaki Harada <tenmei@maoh.office.ne.jp>
+
+ * io.c (NO_SAFE_RENAME): for BeOS too.
+
+Sun Sep 3 11:31:53 2000 Takaaki Tateishi <ttate@jaist.ac.jp>
+
+ * parse.y (rescue): no assignment was done if rescue body was
+ empty.
+
+Sat Sep 2 10:52:21 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (call_args,aref_args): block_call can be the last
+ argument.
+
+ * parse.y (COND_PUSH,COND_POP): maintain condition stack to allow
+ kDO2 in parentheses in while/until/for conditions.
+
+ * parse.y (yylex): generate kDO2 for EXPR_ARG outside of
+ while/until/for condition.
+
+Fri Sep 1 10:36:29 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (aref_args,opt_call_args): add block_call to allow a
+ method without parentheses and with block as a last argument.
+
+ * hash.c (rb_hash_sort): should not return nil.
+
+ * re.c (match_aref): should use rb_reg_nth_match().
+
+ * eval.c (POP_SCOPE): recycled scopes too much
+
+ * eval.c (Init_eval): extend room for stack allowance.
+
+ * eval.c (POP_SCOPE): frees scope too much.
+
+Thu Aug 31 14:28:39 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_gc_mark): T_SCOPE condition must be more precise.
+
+ * eval.c (scope_dup): should not make all duped scope orphan.
+
+Thu Aug 31 10:11:47 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (stmt): allow stmt_rhs to be right hand side of multiple
+ assignment.
+
+ * time.c (rb_time_timeval): type error should not mention the word
+ 'interval'.
+
+Wed Aug 30 23:21:20 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (rb_num2long): use rb_Integer() instead of independent
+ convert routine.
+
+ * eval.c (rb_rescue2): now takes arbitrary number of exception types.
+
+ * object.c (rb_convert_type): use rb_rescue2 now to handle NameError.
+
+ * object.c (rb_convert_type): better error message.
+
+Wed Aug 30 17:09:14 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/Win32API/Win32API.c (Win32API_initialize): AlphaNT support.
+
+Wed Aug 30 14:19:07 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (node_assign): should support NODE_CVASGN2 too.
+
+Wed Aug 30 11:31:47 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ext/Win32API/Win32API.c (Win32API_initialize): add the
+ arguments checking.
+
+ * ext/Win32API/Win32API.c (Win32API_initialize): add taint
+ checking. allow String object in the third argument.
+
+Wed Aug 30 10:29:40 2000 Masahiro Tomita <tommy@tmtm.org>
+
+ * io.c (rb_f_p): flush output buffer.
+
+Tue Aug 29 16:29:15 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (assignable): remove NODE_CVASGN3.
+
+ * parse.y (gettable): remove NODE_CVAR3.
+
+Tue Aug 29 02:02:14 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): handles create_makefile("a/b").
+
+ * ext/extmk.rb.in (create_makefile): ditto
+
+Mon Aug 28 18:43:54 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (is_defined): now handles class variables.
+
+ * eval.c (rb_eval): class variable behavior revisited.
+
+ * parse.y (assignable): ditto.
+
+ * parse.y (gettable): ditto.
+
+ * regex.c (PUSH_FAILURE_COUNT): push/pop interval count on failure
+ stack. this fix is inspired by the Emacs21 patch from Stefan
+ Monnier <monnier@cs.yale.edu>.
+
+Fri Aug 25 15:24:39 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_cvar_get): should not follow __attached__.
+
+ * variable.c (rb_cvar_set): ditto.
+
+ * variable.c (rb_cvar_declare): ditto.
+
+ * variable.c (mod_av_set): second class variable assignment at the
+ toplevel should not give warning.
+
+Fri Aug 25 01:18:36 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (next_argv): prepare path for open file.
+
+ * string.c (rb_str_setter): moved from io.c.
+
+ * io.c (next_argv): filename should be "-" for refreshed ARGF.
+
+Thu Aug 24 15:27:39 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/socket/socketport.h: use `extern int h_errno' if needed.
+
+Sat Aug 19 01:34:02 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/sdbm/_sdbm.c (sdbm_prep): flags should be or-ed by O_BINARY on
+ Win32 too.
+
+ * ext/sdbm/_sdbm.c (makroom): fill hole with 0 on Win32 too.
+
+Fri Aug 18 13:23:59 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): should preserve and clear $! value before
+ compilation.
+
+ * eval.c (eval): ditto.
+
+Fri Aug 18 11:06:19 2000 Shugo Maeda <shugo@ruby-lang.org>
+
+ * ext/socket/socket.c (s_accept): start GC on EMFILE/ENFILE.
+
+Thu Aug 17 16:04:48 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (is_defined): should clear ruby_errinfo.
+
+Thu Aug 17 04:26:31 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.27.
+
+ * lib/net/protocol.rb: writing methods returns written byte size.
+
+ * lib/net/smtp.rb: send_mail accepts many destinations.
+
+Wed Aug 16 00:43:47 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_s_times): use CLK_TCK for HZ if it's defined.
+
+Tue Aug 15 17:30:59 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (frame_dup): should set flag FRAME_MALLOC after
+ argv allocation.
+
+ * eval.c (blk_free): should not free argv if GC was called before
+ frame_dup.
+
+Tue Aug 15 16:08:40 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: add ac_cv_func_times=yes for mingw32.
+
+ * win32/win32.c (mytimes): typo.
+
+Tue Aug 15 01:45:28 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_eof): should return true at the end of ARGF without
+ checking stdout if arguments are given.
+
+Mon Aug 14 10:34:32 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_status): status should return false for normal
+ termination, nil for termination by exception.
+
+Fri Aug 11 15:43:46 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_undef): give warning for undefining __id__, __send__.
+
+Thu Aug 10 08:05:03 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_callcc): returned current thread instead of
+ continuation wrongly.
+
+Thu Aug 10 05:40:28 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/extmk.rb.in: $CPPFLAGS should be initialized.
+
+ * ext/tcltklib/depend: add stubs.o.
+
+ * ext/tcltklib/extconf.rb: use $CPPFLAGS instead of $CFLAGS.
+
+Wed Aug 9 16:31:48 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_callcc): thread status for continuations must be
+ THREAD_KILLED, otherwise thread_free() breaks other threads.
+
+Wed Aug 9 13:24:25 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * win32/win32.[ch]: emulate rename(2).
+
+Tue Aug 8 14:01:46 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/tcltklib/tcltklib.c: support --enable-tcltk_stubs
+
+ * ext/tcltklib/extconf.rb: ditto.
+
+ * ext/tcltklib/stubs.c: created. examine candidate shared libraries.
+
+Mon Aug 7 13:59:12 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.h (CLONESETUP): should copy flags before any potential
+ object allocation.
+
+ * regex.c (re_match): check for stack depth was needed.
+
+Sat Aug 5 16:43:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * djgpp/*: convert DOS line endings to UNIX style.
+
+ * djgpp/config.status: rename to config.sed for SFN.
+
+ * lib/ftools.rb (compare, safe_unlink, chmod): avoid warnings.
+
+ * lib/ftools.rb (move): typo. not `tpath', but `to'.
+
+Fri Aug 4 23:26:48 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (proc_call): gives warning if a block is supplied.
+
+ * eval.c (rb_eval): no warning for discarding if an alias for the
+ method is already made.
+
+Fri Aug 4 16:32:29 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_reject_bang): returns nil if no element removed.
+
+ * hash.c (rb_hash_reject_bang): returns nil if no element removed.
+
+Thu Aug 3 19:44:26 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_fd_writable): should return integer value.
+
+ * array.c (rb_ary_assoc): search array element whose length is
+ longer than 0 (not 1).
+
+Wed Aug 2 18:27:47 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_wait_fd): prohibit thread context switch
+ during compilation.
+
+ * eval.c (rb_cont_call): prohibit Continuation#call across threads.
+
+Wed Aug 2 08:22:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * gc.c (rb_gc): clear malloc_memories to zero, to avoid potential
+ super frequent GC invocation. (ruby-bugs:#PR48)
+
+ * gc.c (rb_gc): only add_heap() if GC trigger condition is
+ satisfied.
+
+Tue Aug 1 16:41:58 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (proc_options): global load path setting moved from
+ ruby_prog_init().
+
+ * ruby.c (incpush): renamed. push path entry at the END of the
+ load path array. This makes -I directories sorted in order in
+ the arguments.
+
+Sat Jul 29 23:42:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * dir.c (dir_each): should check whether dir is closed during the
+ block execution. (ruby-bugs:#PR47)
+
+Sat Jul 29 21:57:30 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ruby.c (rubylib_mangle): provide another buffer for the result.
+
+Wed Jul 26 10:09:01 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: set SOLIBS to LIBS on Cygwin.
+
+ * configure.in: LIBRUBY_SO='$(RUBY_INSTALL_NAME)'.$target_os.dll
+ on cygwin and mingw32. ruby-cygwin.dll is bad. why?
+
+Wed Jul 26 10:04:03 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * gc.c (gc_sweep): avoid full scan during compilation.
+
+ * gc.c (rb_gc): add heap during no gc period (including
+ compilation).
+
+Tue Jul 25 19:03:04 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * cygwin/GNUmakefile: use puts instead of print, because
+ Cygwin DLL's behavior is changed(or bug?).
+
+ * configure.in: LIBRUBY_SO='$(RUBY_INSTALL_NAME)'-$target_os.dll
+ on cygwin and mingw32.
+
+ * cygwin/GNUmakefile: ditto.
+
+ * Makefile.in: $(SOLIBS) should be put after dmyext.@OBJEXT@.
+
+ * instruby.rb: install $(LIBRUBY) to libdir
+ if $(LIBRUBY) != $(LIBRUBY_A_).
+
+Tue Jul 25 15:16:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_p): redirect to $defout.
+
+Mon Jul 24 18:52:55 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * win32/win32.c (win32_getenv): should remove `static'.
+
+ * ruby.c (rubylib_mangle): support "/hoge;/foo"
+
+Mon Jul 24 10:28:55 2000 GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp>
+
+ * string.c (rb_str_count): raise exception if no argument is
+ given.
+
+Sun Jul 23 12:55:04 2000 Dave Thomas <Dave@Thomases.com>
+
+ * string.c (rb_str_rindex): Support negative end position.
+
+Fri Jul 21 17:35:01 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (aref_args): command_call now be permitted as
+ aref_args.
+
+ * process.c (proc_getpriority): getpriority(2) may return valid
+ negative number. use errno to detect error.
+
+ * marshal.c (dump_ensure): dumped string should be tainted if
+ any among target objects is tainted.
+
+ * marshal.c (r_regist): restored object should be tainted if and
+ only if the source is a file or a tainted string.
+
+Wed Jul 19 15:14:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (bigdivrem): should use rb_int2big(), not rb_uint2big().
+
+Tue Jul 18 14:58:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (ruby_options): should treat SystemExit etc. properly.
+
+ * parse.y (yycompile): should check compile_for_eval, not
+ ruby_in_eval.
+
+Mon Jul 17 04:29:50 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/mkmf.rb: converts extension of $objs into $OBJEXT.
+
+Sun Jul 16 03:02:34 2000 Dave Thomas <dave@thomases.com>
+
+ * lib/weakref.rb: Change to use new ObjectSpace calls.
+
+Sat Jul 15 21:59:58 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): should not redefine __id__ nor __send__.
+
+ * gc.c (define_final): integrate final.rb features into the
+ interpreter. define_finalizer and undefine_finalizer was
+ added to ObjectSpace. plus, add_finalizer, remove_finalizer,
+ and call_finalizer are deprecated now.
+
+Sat Jul 15 01:32:34 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_mod_method): implements unbound method.
+
+ * eval.c (Init_eval): should prohibit `module_function' for class
+ Class.
+
+Fri Jul 14 17:19:59 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * cygwin/GNUmakefile.in: use miniruby instead of sed.
+
+Fri Jul 14 12:49:50 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (argf_eof): need to check stdin, when next_p == -1.
+
+ * io.c (read_all): use io_fread() instead of fread(3).
+
+ * io.c (io_reopen): should clearerr FILE if fd < 3.
+
+ * re.c (rb_reg_match_m): the result is exported, so it should be
+ declared as busy.
+
+ * eval.c (rb_eval): should preserve errinfo even if return, break,
+ etc. is called in rescue clause.
+
+ * instruby.rb: install irb too.
+
+Wed Jul 12 15:32:57 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (rb_const_get): constants for builtin classes must
+ have higher priority than constants from included modules at
+ Object class.
+
+ * bignum.c (bigdivrem): small embarrassing typo.
+
+Wed Jul 12 15:06:28 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): use rb_const_get_at().
+
+ * variable.c (top_const_get): retrieve toplevel constants only,
+ not ones of Object (and its included modules) in general.
+
+Wed Jul 12 15:04:11 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.26.
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb:
+ add module Net::NetPrivate and its inner classes
+ {Read,Write}Adapter, Command, Socket,
+ SMTPCommand, POP3Command, APOPCommand, HTTPCommand
+
+Wed Jul 12 13:10:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (bigdivrem): defer bignorm().
+
+ * bignum.c (bignorm): accepts accidental fixnums.
+
+Tue Jul 11 16:54:17 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): `@<digit>' is no longer a valid instance
+ variable name.
+
+Tue Jul 11 01:51:50 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (rb_big_divmod): should not use Integer(float) for
+ the right operand.
+
+ * bignum.c (rb_big_remainder): ditto.
+
+ * bignum.c (rb_big_modulo): ditto.
+
+Mon Jul 10 15:27:16 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * io.c (pipe_finalize): should set rb_last_status when pclose().
+
+Mon Jul 10 09:07:54 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * error.c (rb_bug): print version number and such too.
+
+Sat Jul 8 23:08:40 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_start_0): should copy previous scopes to
+ prevent rb_gc_force_recycle().
+
+Fri Jul 7 23:36:36 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/socket/addrinfo.h: move IN_EXPERIMENTAL and IN_LOOPBACKNET
+ definitions to ext/socket/sockport.h.
+
+ * ext/socket/extconf.rb: add getservbyport() and arpa/inet.h check.
+
+ * ext/socket/getaddrinfo.c (getaddrinfo): SOCK_RAW may not be
+ defined (ex. BeOS, Palm OS 2.x or before).
+
+ * ext/socket/getnameinfo.c (getnameinfo): getservbyport() may not
+ exist (ex. BeOS, Palm OS).
+
+ * ext/socket/sockport.h: add IN_EXPERIMENTAL, IN_CLASSA_NSHIFT,
+ IN_LOOPBACKNET, AF_UNSPEC, PF_UNSPEC and PF_INET.
+
+Fri Jul 7 03:30:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (aref_args): should allow Hash[:a=>2] etc.
+
+ * numeric.c (fix_aref): convert index by NUM2INT, not FIX2INT.
+ (ruby-bugs:#PR37)
+
+ * time.c (time_localtime): should prohibit for frozen time.
+
+ * time.c (time_gmtime): ditto.
+
+Thu Jul 6 19:12:12 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_file_s_open): should not terminate fptr; just clear it.
+
+ * ruby.c (proc_options): should not call require_libraries()
+ twice.
+
+ * ruby.c (require_libraries): clear req_list_head.next after
+ execution.
+
+Thu Jul 6 13:51:57 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * object.c (rb_to_id): name may not be symbol nor fixnum.
+
+ * struct.c (rb_struct_s_def): name may be nil.
+
+Thu Jul 6 02:09:06 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (bigdivrem): new function to return remainder.
+
+ * numeric.c (fixdivmod): now returns modulo, not remainder.
+
+ * numeric.c (flodivmod): ditto.
+
+ * bignum.c (bigdivmod): ditto.
+
+ * numeric.c (num_modulo): new method; alias to '%'.
+
+Thu Jul 6 00:51:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * win32/win32.c (NtCmdGlob): patterns should be separated and
+ NUL terminated.
+
+Wed Jul 5 22:27:56 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * cygwin/GNUmakefile: use ruby.def to make rubycw.dll.
+
+ * ext/extmk.rb.in: create target.def.
+
+ * lib/mkmf.rb: ditto.
+
+Wed Jul 5 09:47:14 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_arg): Time::local, Time::gm now take 7th optional
+ argument for usec.
+
+ * numeric.c (num_ceil, etc): default ceil, floor, round, truncate
+ implementation for Numeric, using `to_f'.
+
+ * io.c (rb_io_reopen): clear fptr->path after free() to prevent
+ potential GC crash.
+
+ * io.c (rb_file_s_open): terminate fptr unless null.
+
+ * io.c (rb_file_initialize): ditto.
+
+ * lib/tempfile.rb: specify FILE::CREAT|File::EXCL to open for
+ better security.
+
+ * numeric.c (flo_truncate): new method.
+
+Wed Jul 5 01:02:53 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/extmk.rb.in: join ' ' -> join(' ').
+
+ * lib/mkmf.rb: ditto.
+
+Tue Jul 4 13:51:29 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/dbm/dbm.c: add methods added to Hash in 1.5.x.
+
+ * ext/gdbm/gdbm.c: ditto.
+
+ * ext/sdbm/init.c: ditto.
+
+ * eval.c (proc_call): args may be Qundef (means no argument), do
+ not call TYPE() for args.
+
+Tue Jul 4 13:20:56 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/extmk.rb.in: make command line must be single-quoted.
+ $(RUBY_INSTALL_NAME) is command substitution in the POSIX sh.
+
+Tue Jul 4 13:16:02 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * util.c (rb_type): should add T_UNDEF.
+
+Tue Jul 4 09:30:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (here_document): supports EOF right after terminator.
+
+ * random.c (rb_f_rand): argument is now optional (rand(max=0)).
+
+Tue Jul 4 01:50:49 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * win32/ruby.def: remove ruby_mktemp.
+
+Tue Jul 4 01:27:13 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_rescue2): new function to rescue arbitrary exception.
+
+ * numeric.c (do_coerce): should catch NameError explicitly.
+
+Tue Jul 4 00:15:23 2000 Dave Thomas <Dave@thomases.com>
+
+ * numeric.c (Init_Numeric): forgot to register Numeric#remainder.
+
+Mon Jul 3 23:46:56 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * win32/win32.c (myselect, myaccept): disable interrupt while
+ executing accept() or select() to avoid Ctrl-C causes
+ "unknown software exception (0xc0000029)".
+
+Mon Jul 3 18:35:41 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * lib/mkmf.rb: use null device if it exists for cross-compiling.
+
+Mon Jul 3 18:19:51 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.26.
+
+ * lib/net/protocol.rb (finish): do nothing unless active.
+
+ * lib/net/http.rb: HTTP#{get,post}2 again (for new impl).
+
+Mon Jul 3 16:47:22 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * cygwin/GNUmakefile: librubys.a -> lib$(RUBY_INSTALL_NAME)s.a
+
+ * configure.in: use AC_CANONICAL_{HOST,TARGET,BUILD}.
+
+Mon Jul 3 13:15:02 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * numeric.c (fix_divmod): x * d + m = y where d, m = x.divmod(y).
+
+ * bignum.c (rb_big_divmod): ditto.
+
+ * numeric.c (fixdivmod): does not depend C's undefined %
+ behavior. adopt to fmod(3m) behavior.
+
+ * numeric.c (flo_mod): modulo now reserves fmod(3m) behavior.
+
+ * numeric.c (num_remainder): 'deprecated' warning.
+
+Mon Jul 3 10:27:28 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: use AC_CANONICAL_SYSTEM.
+
+Sun Jul 2 21:17:37 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: support without --enable-shared for cygwin/mingw32.
+
+ * cygwin/GNUmakefile: ditto.
+
+ * ext/extmk.rb.in: use null device if it exists for cross-compiling.
+
+ * lib/mkmf.rb: ditto.
+
+ * util.c (ruby_mktemp): remove unused ruby_mktemp().
+
+Sun Jul 2 14:18:04 2000 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * eval.c (TMP_PROTECT_END): tmp__protect_tmp may be NULL.
+
+Sun Jul 2 03:37:50 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.25.
+
+ * lib/net/protocol.rb (each_crlf_line): beg = 0 is needed in adding{}
+
+ * lib/net/smtp.rb: allow String for to_addr of SMTP#sendmail
+
+Sat Jul 1 15:22:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * numeric.c (fix_rshift): should handle shift value more than
+ sizeof(long).
+
+Sat Jul 1 15:22:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): the value from RTEST() is not valid Ruby
+ object. result should be either true or false.
+
+Sat Jul 1 09:30:06 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * re.c (rb_reg_initialize): was freeing invalid pointer.
+
+Sat Jul 1 03:25:56 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (call_args): command_call can be the last argument of
+ call_args. It had to be the only argument.
+
+ * re.c (rb_reg_s_quote): should not dump core even for unsane mbc
+ string.
+
+Fri Jun 30 01:36:20 2000 Aleksi Niemela <aleksi.niemela@cinnober.com>
+
+ * parse.y (f_norm_arg): better, nicer error message.
+
+Thu Jun 29 07:45:33 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c (udp_send): destination may be packed
+ struct sockaddr.
+
+ * object.c (rb_Integer): Integer(nil) should be invalid, on the
+ other hand, nil.to_i is OK.
+
+Wed Jun 28 17:26:06 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c (ip_recvfrom): udp_recvfrom and tcp_recvfrom
+ is merged and moved to IPSocket#recvfrom.
+
+ * ext/socket/socket.c (sock_s_getaddrinfo): family can be a
+ strings such as "AF_INET" etc.
+
+ * ruby.c (require_libraries): . and RUBYLIB added to $load_path
+ just before -r procedure.
+
+ * ruby.c (proc_options): -e, - did not exec -r.
+
+Wed Jun 28 14:52:28 2000 Koga Youichirou <y-koga@mms.mt.nec.co.jp>
+
+ * config.sub: NetBSD/hpcmips support.
+
+Wed Jun 28 10:11:06 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * gc.c: gc trigger threshold changed; GC_NEWOBJ_LIMIT removed,
+ FREE_MIN is increased to 4096.
+
+Tue Jun 27 22:39:28 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.24.
+
+ * lib/net/protocol.rb: modified each_crlf_line again.
+
+ * lib/net/protocol.rb: do_write_beg,do_write_end -> writing{}
+ do_write_do -> do_write
+
+ * lib/net/http.rb: can make proxy connection by passing
+ addresses to HTTP.new, start.
+
+ * lib/net/http.rb: HTTP.new_implementation, old_implementation:
+ can use 1.2 implementation of head, get, post, put.
+ (see document)
+
+Tue Jun 27 12:05:10 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * win32.c (myfdclr): new function.
+
+ * win32.h: add FD_CLR.
+
+Mon Jun 26 23:41:41 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ruby.h: add cast for ANSI style.
+
+ * gc.c (rb_data_object_alloc): use RUBY_DATA_FUNC.
+
+Mon Jun 26 22:20:03 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * win32/win32.c (is_socket, extract_file_fd): New function.
+
+ * win32/win32.c (myfdopen): use is_socket().
+
+ * win32/win32.c (myselect): return non socket files immediately
+ if file and socket handles are mixed.
+
+Mon Jun 26 16:21:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_schedule): wait_for cleared too early.
+
+Mon Jun 26 09:15:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * pack.c: remove obsolete 'F', 'D' specifiers.
+
+Sun Jun 25 00:55:03 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/socket/socket.c (sock_s_getnameinfo): `res' would not
+ be assigned if TYPE(sa) == T_STRING.
+
+Sat Jun 24 14:36:29 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * config*.dj, configure.bat, top.sed: move to djgpp/.
+
+Sat Jun 24 02:34:17 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (load_file): call require_libraries() here to let
+ debug.rb work properly.
+
+Fri Jun 23 22:34:51 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * bignum.c (rb_big_lshift): reorder xds assignment to avoid
+ reusing `x' as `len' by VC++ 6.0 SP3 compiler with -Ox switch.
+
+Fri Jun 23 01:11:27 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_substr): should return empty string (""),
+ if beg == str.size and len == zero, mostly for convenience and
+ backward compatibility.
+
+ * parse.y (new_super): should tweak block_pass node for super too.
+
+ * string.c (rb_str_split_m): last split element should not be nil,
+ but "" when limit is specified.
+
+Thu Jun 22 17:27:46 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_substr): str[n,m] now returns nil when n equals
+ to str.size.
+
+Thu Jun 22 13:49:02 2000 Uechi Yasumasa <uechi@ryucom.ne.jp>
+
+ * lib/net/ftp.rb: support resuming.
+
+Thu Jun 22 13:37:19 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * eval.c (rb_thread_sleep_forever): merge pause() macro.
+
+Wed Jun 21 08:49:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): should not raise exception just by defining
+ singleton class.
+
+Wed Jun 21 01:18:03 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.h: two macros RUBY_DATA_FUNC and RUBY_METHOD_FUNC are added
+ to make writing C++ extensions easier.
+
+ * array.c (rb_ary_dup): internal classes should not be shared by dup.
+
+ * hash.c (rb_hash_dup): ditto.
+
+ * object.c (rb_obj_dup): ditto.
+
+ * string.c (rb_str_dup): ditto.
+
+ * error.c (Init_Exception): renamed NotImplementError to
+ NotImplementedError.
+
+Tue Jun 20 16:22:38 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (make_time_t): bug in DST boundary.
+
+Tue Jun 20 10:54:19 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: add eval sitedir.
+
+Tue Jun 20 06:14:43 2000 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: change: version syntax. old: x.yz, now: x.y.z
+
+ * lib/net/telnet.rb: ditto.
+
+Tue Jun 20 00:37:45 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (rb_reg_kcode_m): Regexp#kcode returns nil for code unfixed
+ regexp object.
+
+ * bignum.c (bigdivmod): bignum zero check was wrong.
+
+Mon Jun 19 10:48:28 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (rb_cvar_set): forgot to add security check for class
+ variable assignment.
+
+Sun Jun 18 22:49:13 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: single quoted sitedir.
+
+ * mkconfig.rb: add DESTDIR for cross-compiling.
+
+ * lib/mkmf.rb: add DESTDIR.
+
+ * ruby.c (load_file): force binmode if fname includes ".exe"
+ on DOSISH.
+
+Sat Jun 17 23:22:17 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sprintf.c (rb_f_sprintf): should ignore negative precision given
+ by <%.*>.
+
+ * sprintf.c (rb_f_sprintf): should allow zero precision.
+
+Sat Jun 17 03:13:29 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_localtime): avoid unnecessary call of localtime.
+
+ * time.c (time_gmtime): avoid unnecessary call of gmtime.
+
+ * process.c (proc_wait2): new method.
+
+ * process.c (proc_waitpid): second argument made optional.
+
+ * process.c (proc_waitpid2): new method.
+
+Sat Jun 17 00:05:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (rb_reg_clone): should initialize member fields.
+
+Fri Jun 16 22:49:34 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_rewind): set lineno to zero.
+
+Fri Jun 16 22:47:47 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.23.
+
+ * lib/net/protocol.rb: too many CRLF in last line.
+
+Fri Jun 16 21:23:59 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: add pause(2) checking.
+
+ * eval.c: define pause() if missing.
+
+Fri Jun 16 18:41:58 2000 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * process.c (proc_setsid): BSD-style setpgrp() don't return
+ process group ID, but 0 or -1.
+
+Fri Jun 16 16:23:35 2000 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * file.c (rb_stat_inspect): gives detailed information;
+ compatibility with ruby-1.4.x.
+
+Fri Jun 16 05:18:45 2000 Yasuhiro Fukuma <yasuf@bsdclub.org>
+
+ * configure.in: FreeBSD: do not link dummy libxpg4 which was
+ merged into libc.
+
+Fri Jun 16 03:17:36 2000 Satoshi Nojo <nojo@t-samukawa.or.jp>
+
+ * ext/dbm/dbm.c (fdbm_length): use GetDBM. empty?, [] too.
+
+ * ext/gdbm/gdbm.c (fgdbm_length): ditto.
+
+ * ext/sdbm/init.c (fsdbm_length): ditto.
+
+Fri Jun 16 01:57:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_sleep_forever): pause(2) instead of sleep(3).
+
+Thu Jun 15 10:46:36 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_sub_bang): should propagate taintness from
+ replacement string.
+
+Wed Jun 14 17:01:41 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * rubytest.rb: add CONFIG['EXEEXT'] to the executable file name.
+
+Wed Jun 14 14:50:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_f_sub): assign to $_ only if modification happens.
+
+ * string.c (rb_f_gsub): ditto.
+
+ * string.c (rb_f_chop): ditto.
+
+ * string.c (rb_f_chomp): ditto.
+
+ * io.c (io_reopen): preserve file position by ftell/fseek, if io
+ is a seekable.
+
+ * eval.c (method_arity): wrong arity number for the methods with
+ optional arguments.
+
+ * time.c (make_time_t): opposite timezone shift (should be negative).
+
+Wed Jun 14 14:07:38 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * io.c: typo(ig/if).
+
+ * re.c: typo(re/reg). add rb_reg_check().
+
+ * time.c: remove unneeded declare(daylight, timezone).
+
+ * configure.in: add include <time.h> when daylight checking.
+
+Wed Jun 14 11:36:52 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * marshal.c (r_object): modified for symbols.
+
+ * marshal.c (w_object): ditto.
+
+Wed Jun 14 10:04:58 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (rb_memcmp): should compare according to ruby_ignorecase.
+
+ * string.c (rb_str_cmp): use rb_memcmp.
+
+ * string.c (rb_str_index): ditto.
+
+ * string.c (rb_str_rindex): ditto.
+
+ * string.c (rb_str_each_line): ditto.
+
+Wed Jun 14 04:58:53 2000 Dave Thomas <dave@thomases.com>
+
+ * io.c (rb_io_set_lineno): should have returned VALUE, not
+ integer.
+
+Wed Jun 14 09:29:42 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_dup): dup should always propagate taintness.
+
+Wed Jun 14 00:50:14 2000 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: read_multipart(): if no content body then raise EOFError.
+
+Tue Jun 13 11:46:17 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * process.c (proc_setsid): try implement it using setpgrp() and
+ ioctl(fd, TIOCNOTTY, NULL).
+
+ * re.c (rb_reg_prepare_re): magic variable $= should affect regex
+ pattern match.
+
+ * time.c (make_time_t): use tm.tm_gmtoff if possible.
+
+ * time.c (time_zone): use tm.tm_zone if available.
+
+Tue Jun 13 01:50:57 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.22.
+
+ * lib/net/http.rb: HTTPResponse#body returns body.
+
+Mon Jun 12 23:41:54 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in (daylight): avoid GCC optimization.
+
+Mon Jun 12 19:02:27 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: cygwin has strange timezone.
+
+ * time.c (time_zone): use tzname and daylight.
+
+Sat Jun 10 23:10:32 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_seek): whence is optional, default is SEEK_SET.
+
+Fri Jun 9 17:00:29 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.21.
+
+ * lib/net/http.rb: exception is raised with response object.
+
+Fri Jun 9 15:11:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (make_time_t): supports daylight saving time.
+
+ * eval.c (rb_thread_safe_level): should retrieve current $SAFE
+ value if a thread is the current thread.
+
+Thu Jun 8 14:25:45 2000 Hiroshi Igarashi <iga@ruby-lang.org>
+
+ * lib/mkmf.rb: add target `distclean' in Makefile for extlib.
+ target `clean' doesn't remove Makefile.
+
+Thu Jun 8 13:34:03 2000 Dave Thomas <dave@thomases.com>
+
+ * numeric.c: add nan?, infinite?, and finite? to Float
+
+Thu Jun 8 00:31:04 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * regex.h: export re_mbctab properly on cygwin.
+
+ * dln.c: use dlopen instead of LoadLibrary on cygwin.
+
+Thu Jun 8 13:41:34 2000 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * file.c (rb_file_s_basename): might dump core.
+
+Tue Jun 6 03:29:12 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * dir.c (dir_foreach): now returns nil for consistency.
+
+ * bignum.c (bigdivmod): modulo by small numbers was wrong.
+
+Mon Jun 5 00:18:08 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * bignum.c: avoid conflict with USHORT on mingw32.
+
+Mon Jun 5 00:13:35 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * eval.c (rb_thread_schedule): =/== typo.
+
+Sun Jun 4 03:17:36 2000 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: improve: CGI::pretty()
+
+Sun Jun 4 02:01:10 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * lib/mkmf.rb: do not need to add -L$(topdir) in --enable-shared case.
+
+Sat Jun 3 13:50:06 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (rb_id2name): should support constant attrset
+ identifiers.
+
+ * bignum.c (rb_big_eq): Bignum#== should not raise exception.
+
+Fri Jun 2 11:24:48 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_popen): open with a block returns the value from the
+ block. old behavior was back.
+
+Fri Jun 2 00:42:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+
+ * eval.c (rb_thread_cleanup): should clear priority for thread
+ termination.
+
+Thu Jun 1 22:39:41 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.20.
+
+ * lib/net/http.rb: wrongly closed the socket twice
+ when no Content-Length: was given.
+
+Thu Jun 1 00:59:15 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_yield_0): convert Qundef to [].
+
+Wed May 31 20:45:59 2000 Dave Thomas <Dave@Thomases.com>
+
+ * string.c (rb_str_slice_bang): wrong argument number.
+
+Wed May 31 12:37:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_exec_end_proc): print error message from END procs.
+
+Wed May 31 04:06:41 2000 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: change: CGI#out() if "HEAD" == REQUEST_METHOD then
+ output only HTTP header.
+
+Wed May 31 01:54:21 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_schedule): set main_thread->status to
+ THREAD_TO_KILL, before raising deadlock error.
+
+ * eval.c (rb_thread_deadlock): if curr_thread == main_thread, do
+ not call rb_thread_restore_context()
+
+Tue May 30 23:33:41 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * lib/mkmf.rb (create_makefile): add $(TARGET).ilk and *.pdb
+ to cleanup files for mswin32.
+
+Mon May 29 10:41:10 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c (rb_file_s_basename): should propagate taintness.
+
+Sun May 28 21:37:13 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * eval.c: bug fix: DLEXT2.
+
+Sun May 28 19:21:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * win32/win32.c: use ruby's glob.
+
+ * dir.c: "glob" exported and renamed to "rb_glob".
+
+ * ruby.h: ditto.
+
+ * main.c: turn off command line mingw32's globbing.
+
+Wed May 25 22:25:13 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/extmk.rb.in: use "ftools" instead of "rm -f".
+
+ * lib/mkmf.rb: ditto.
+
+Thu May 25 22:01:32 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * defines.h: mswin32: remove obsolete USHORT definition.
+
+ * re.h: mswin32: use EXTERN instead of extern.
+
+ * regex.h: mswin32: export re_mbctab properly.
+
+ * win32/ruby.def: add ruby_ignorecase and regex.c's exports.
+
+Thu May 25 21:28:44 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * re.c (rb_reg_expr_str): escape un-printable character.
+
+Thu May 25 01:35:15 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (tokadd_escape): forgot to add `\x' to hexadecimal
+ escape sequences.
+
+ * object.c (rb_obj_dup): dup for normal object (T_OBJECT) copies
+ instance variables only.
+
+Wed May 24 23:49:47 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (rb_mod_initialize): should provide initialize.
+
+Wed May 24 23:17:50 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * win32/Makefile: remove unnecessary mv and rm command call.
+
+Wed May 24 21:01:04 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/pty/pty.c: use "" instead of <> to include ruby.h and rubyio.h
+ for BeOS (PowerPC).
+
+ * file.c (rb_find_file): should check dln_find_file() result.
+
+ * win32/ruby.def: add rb_block_given_p.
+
+Wed May 24 16:32:45 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_popen): popen does not take 3rd argument anymore.
+
+ * re.c (rb_reg_desc): re may be zero, check before dereferencing.
+
+Wed May 24 16:03:06 2000 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/cgi.rb: bug fix: CGI::escape(), CGI::Cookie::new()
+
+ * lib/net/telnet.rb: improve: binmode(), telnetmode() interface
+
+Wed May 24 13:12:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * misc/ruby-mode.el (ruby-parse-region): support `while .. do'
+ etc. But corresponding keywords must be at the beginning of
+ line.
+
+Tue May 23 23:50:12 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (rb_reg_initialize_m): wrong kcode value.
+
+ * re.c (rb_reg_s_new): forgot to initialize re->ptr.
+
+Tue May 23 08:36:24 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): forgot to restore old option
+ status by (?ix-ix).
+
+ * regex.c (re_compile_fastmap): anychar may match newline if
+ RE_OPTION_MULTILINE or RE_OPTION_POSIXLINE is set.
+
+Mon May 22 22:45:06 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.19.
+
+ * lib/net/http.rb: do not use Regexp "p" option.
+
+Mon May 22 21:56:43 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * struct.c (rb_struct_getmember): should use ID2SYM, not INT2NUM.
+
+Mon May 22 15:07:37 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * file.c (rb_find_file): should check if the file really exists.
+
+Mon May 22 09:08:12 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_popen): _exit(0) after processing block under the
+ child process.
+
+ * io.c (rb_io_popen): flush stdout/stderr before subprocess
+ termination.
+
+ * eval.c (rb_check_safe_str): insert rb_secure(4); operation
+ requires untainted string should be prohibited in level 4.
+
+Sun May 21 21:17:00 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: add Setup.dj for djgpp cross-compiling.
+
+ * Setup.dj: add readline.
+
+ * instruby.rb: copy win32/win32.h to archlibdir on mingw32.
+
+Sun May 21 20:58:08 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * pack.c: fix OFF16 and OFF32 definitions for Alpha and IRIX64.
+
+Sun May 21 17:31:37 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * instruby.rb: support "make install" for cross-compiling.
+
+ * ext/extmk.rb.in: ditto.
+
+Sun May 21 14:22:49 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * Makefile.in: rename prep.rb to fake.rb.
+
+ * configure.in: ditto.
+
+Sat May 20 23:29:14 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * dir.c (dir_s_new): does not take block; "open" does.
+
+ * io.c (rb_io_s_new): ditto.
+
+Fri May 19 07:44:26 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * dir.c (dir_s_open): Dir#open does not returns closed Dir if a
+ block is given to the method.
+
+ * re.c (rb_reg_initialize_m): Regexp::new calls initialize now.
+
+ * string.c (Init_String): String#delete_at removed.
+
+ * string.c (rb_str_aset_m): should have checked argc != 2.
+
+ * eval.c (rb_thread_schedule): select(2) was called too many.
+
+ * regex.c (re_compile_pattern): a bug in (?m) support. Pointed
+ out by Dave Thomas <Dave@thomases.com>.
+
+Thu May 18 23:55:26 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * dln.c (search_undef): st_lookup()'s 3rd parameter should be
+ a pointer of the variable which has the same size and alignment
+ as `char *'.
+
+ * marshal.c (w_symbol, w_object): ditto.
+
+ * parse.y (rb_intern): ditto.
+
+Thu May 18 18:00:35 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.18.
+
+ * lib/net/protocol.rb: Net::Version was removed.
+
+ * lib/net/smtp.rb: use Socket.gethostname to get local host name.
+
+Thu May 18 13:34:57 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c (ruby_connect): should not have replaced
+ thread_write_select() by rb_thread_fd_writable().
+
+Thu May 18 09:01:25 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * configure.in, ext/extmk.rb.in, lib/mkmf.rb: remove BeOS R3 support.
+ Make a shared library (libruby.so) only if the --enable-shared
+ option is specified.
+
+ * instruby.rb: no longer use libruby.so.LIB and import.h.
+
+ * io.c: fix READ_DATA_PENDING definition for BeOS (PowerPC).
+
+Wed May 17 14:14:23 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (rb_reg_new_1): use /m instead of /p.
+
+Wed May 17 02:22:03 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_polling): wait 0.06 second to let other
+ processes run.
+
+ * process.c (rb_waitpid): avoid busy wait using rb_thread_polling.
+
+ * file.c (rb_thread_flock): ditto.
+
+ * parse.y (expr): avoid calling value_expr() twice.
+
+Wed May 17 00:45:57 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * io.c (rb_io_binmode): should check PLATFORMs, not O_BINARY, sigh...
+
+Wed May 17 00:40:15 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * win32/config.h: add DLEXT2, now DLEXT on mswin32 is "so".
+
+ * win32/config.status: ditto.
+
+ * win32/ruby.def: add symbol "rb_big_divmod".
+
+Tue May 16 19:45:32 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * intern.h: use EXTERN instead of extern.
+
+ * win32/ruby.def: add rb_defout, rb_stdout, ruby_errinfo,
+ ruby_sourceline, ruby_sourcefile to work with eruby
+ reported by Hiroshi Saito <HiroshiSaito@pob.org>.
+ Export both ruby_xmalloc and xmalloc etc.
+
+Tue May 16 17:00:05 2000 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
+
+ * eval.c (rb_thread_select): should check whether fds are null.
+
+Tue May 16 11:51:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (pipe_open): synchronize subprocess stdout/stderr.
+
+Mon May 15 15:38:09 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.h: exported symbols should be for xmalloc etc. are now
+ prefixed by 'ruby_', e.g. ruby_xmalloc().
+
+ * eval.c (rb_thread_select): remove busy wait for select.
+
+ * dir.c (glob): trailing path may be null, e.g. glob("**").
+
+Mon May 15 14:48:41 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * io.c (rb_io_pid): new method; returns nil if no process attached
+ to the IO.
+
+Mon May 15 01:18:20 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_s_popen): _exit after Proc execution.
+
+Sun May 14 18:05:59 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * Makefile.in: missing/nt.c -> win32/win32.c
+
+ * configure.in: bug fix; static linking on mingw32.
+
+ * cygwin/GNUmakefile.in: remove VPATH.
+
+ * ext/extmk.rb.in: Makefile set binmode with mingw32 on cygwin32.
+
+ * lib/mkmf.rb: ditto.
+
+ * win32/config.h: undef HAVE_SYS_FILE_H.
+
+Sun May 14 02:02:48 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * lib/irb/ruby-lex.rb: '/' should be escaped in character class.
+
+Sun May 14 00:54:43 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in, ...: support mingw32.
+
+ * defines.h: ditto. undef EXTERN for tcl/tk on cygwin.
+
+ * ext/*/extconf.rb: replace PLATFORM with RUBY_PLATFORM.
+
+ * ext/socket/sockport.h: define IN_MULTICAST for missing IN_MULTICAST.
+
+ * ext/tcltklib/tcltklib.c: remove declaration of rb_argv0.
+
+ * file.c: should check S_IXGRP, S_ISGID, not NT.
+
+ * io.c (rb_io_binmode): should check _IOBIN, O_BINARY, not PLATFORMs.
+
+Sat May 13 14:21:15 2000 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * io.c (rb_io_s_popen): should check whether a block is given.
+
+Fri May 12 17:33:44 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): charset_not should not exclude
+ newline from matching set.
+
+Thu May 11 22:51:05 2000 Ryunosuke Ohshima <ryu@jaist.ac.jp>
+
+ * pack.c (pack_pack): Bignum support.
+
+ * pack.c (pack_unpack): ditto.
+
+Thu May 11 21:19:29 2000 Hiroshi Igarashi <iga@ruby-lang.org>
+
+ * intern.h: add missing declarations of ruby API functions.
+
+ * ruby.h: fix function name in declarations.
+
+Thu May 11 22:29:25 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/md5/depend: add $(topdir)/config.h dependency to md5c.o.
+
+ * ext/md5/extconf.rb: new file to add -DHAVE_CONFIG_H flag for Alpha.
+
+Thu May 11 10:55:52 2000 Ryunosuke Ohshima <ryu@jaist.ac.jp>
+
+ * pack.c (pack_pack): packing BER compressed integer by `w'.
+
+ * pack.c (pack_unpack): unpacking BER.
+
+Thu May 11 00:37:55 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (parse_regx): remove in_brack.
+
+Wed May 10 12:51:18 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (proc_options): move adding RUBYLIB and "." to the load
+ path after #! line parsing.
+
+ * parse.y (parse_regx): should parse backslash escape like `\c['
+ here to avoid causing `unterminated regexp' error.
+
+Wed May 10 00:19:53 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * MANIFEST, beos/GNUmakefile.in, configure.in: no longer need
+ beos/GNUmakefile.in to support BeOS R4.5.2 (Intel) as a result
+ of eban's Makefile.in change.
+
+ * io.c: NOFILE is already defined on BeOS R4.5 (Intel) or later.
+
+ * lib/matrix.rb: remove debug print.
+
+ * regex.c: don't use nested comment.
+
+Tue May 9 17:08:43 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (massign): no longer convert nil into empty array.
+
+ * io.c (rb_io_s_popen): optional 3rd argument to give proc, which
+ will be executed in spawned child process.
+
+Mon May 8 23:47:39 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * eval.c (rb_callcc): prev & next should be initialized to zero.
+
+Mon May 8 23:17:36 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * dln.c (dln_init): remove possible buffer overrun. This is
+ suggested by Aleksi Niemela <aleksi.niemela@cinnober.com>.
+
+ * dln.c (init_funcname): ditto.
+
+Sat May 6 23:35:47 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (lhs): should allow `obj.Attr = 5' type expression.
+
+Sat May 6 15:46:08 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/socket/extconf.rb: add a new configure option to force use
+ of the WIDE Project's getaddrinfo(): --enbale-wide-getaddrinfo.
+
+Fri May 5 21:19:22 2000 MOROHOSHI Akihiko <moro@remus.dti.ne.jp>
+
+ * parse.y (yylex): allow '$1foo' and such.
+
+Fri May 5 17:57:24 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.17.
+
+ * lib/net/http.rb: write also port number in Host: field.
+
+ * lib/net/http.rb: see Proxy-Connection: to decide socket connection.
+
+Fri May 5 03:25:15 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_fastmap): charset_not for multibyte
+ characters excluded too many characters.
+
+Tue May 2 13:23:43 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_schedule): little bit more impartial context
+ switching.
+
+Tue May 2 09:50:03 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * configure.in: add DLDLIBS to set platform specific library
+ for extensions.
+
+ * ext/extmk.rb.in: use @DLDLIBS@ instead of RUBY_PLATFORM choice.
+
+ * lib/mkmf.rb: use CONFIG["DLDLIBS"] instead of RUBY_PLATFORM choice.
+
+ * config_s.dj: add @DLDLIBS@.
+
+ * win32/config.status: ditto.
+
+ * win32/ruby.def: regular maintenance.
+
+Mon May 1 23:42:44 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in, eval.c: add DLEXT2. now DLEXT on Cygwin is "so".
+
+ * defines.h: use dllimport, dllexport for Cygwin 1.1.x.
+
+ * ruby.h: ditto.
+
+ * cygwin/GNUmakefile.in: ditto.
+
+ * ext/Win32API/Win32API.c: directly "call" in asm statement for
+ gcc 2.95.x or newer.
+
+Sat Apr 29 04:58:12 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * array.c (rb_ary_unshift_m): performance improvement.
+
+Fri Apr 28 00:19:22 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * array.c (rb_ary_unshift_m): takes items to push.
+
+Wed Apr 26 15:23:02 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_succ): insert carrying character just before
+ the leftmost alpha numeric character.
+
+ * string.c (rb_str_succ): proper behavior for "".succ and "\377".succ.
+
+ * string.c (rb_str_succ): use realloc and memmove.
+
+Tue Apr 25 18:28:45 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.16.
+
+ * lib/net/smtp.rb: add SMTP AUTH
+
+Tue Apr 25 14:30:13 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_gets_internal): shortcut when rs == rb_default_rs.
+
+Sat Apr 22 23:14:41 2000 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
+
+ * configure.in: MacOS X support.
+
+Sat Apr 22 16:37:10 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.15.
+
+ * lib/net/http.rb: closing socket by watching both
+ user header and server response
+
+Fri Apr 21 21:44:34 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * io.c (rb_io_s_pipe): should set FMODE_SYNC.
+
+Thu Apr 20 16:59:22 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (massign): `*lvalue = false' should assign `[false]' to
+ lvalue.
+
+Wed Apr 19 08:35:08 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * class.c (rb_singleton_class): generate singleton class for
+ special constants: nil, true, false.
+
+Wed Apr 19 02:09:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * class.c (rb_singleton_class): singleton method for nil, true,
+ false is possible now.
+
+ * eval.c (rb_eval): ditto.
+
+Tue Apr 18 18:54:25 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.14.
+
+ * lib/net/http.rb: new method HTTP#head2.
+
+ * lib/net/http.rb: get2/post2 does not raise exceptions.
+
+Mon Apr 17 15:16:31 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_close): to detect some exceptional status, writable
+ IO should be flushed before close;
+
+Sat Apr 15 18:29:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_collect_bang): Array#filter renamed.
+
+Fri Apr 14 19:47:11 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.13.
+
+ * lib/net/pop.rb: accept illegal timestamp
+
+ * lib/net/http.rb: when body was chunked, does not set Content-Length:
+
+Tue Apr 11 21:14:42 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * config_s.dj: add @sitedir@.
+ * configure.in: add --with-sitedir=DIR option.
+ * instruby.rb: use CONFIG["sitedir"].
+ * lib/mkmf.rb: support 'make site-install'.
+ * win32/config.status: add @sitedir@.
+
+Tue Apr 11 16:25:15 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (rb_big_2comp): unnecessary lvalue cast removed.
+
+Tue Apr 11 02:25:53 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (env_fetch): new method.
+
+ * marshal.c (marshal_dump): accepts depth = nil for unlimited depth.
+
+Sun Apr 9 20:49:19 2000 Dave Thomas <Dave@Thomases.com>
+
+ * parse.y (str_extend): Allow class variables to be expanded.
+
+Fri Apr 7 02:03:54 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * error.c (rb_sys_fail): escape non-printable characters.
+
+Thu Apr 6 20:10:47 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/extmk.rb.in (create_makefile): BeOS --program-suffix support.
+ * lib/mkmf.rb (create_makefile): ditto.
+
+Thu Apr 6 09:55:26 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * error.c (rb_sys_fail): need rb_exc_new2() call on BeOS.
+
+Mon Apr 3 17:22:27 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_reopen): support tempfile.
+
+ * eval.c (catch_i): should supply argument.
+
+Sat Apr 1 22:50:28 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * marshal.c (r_object): wrong symbol restoration.
+
+Sat Apr 1 21:30:53 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * io.c (rb_io_printf, rb_f_printf): should use rb_io_write.
+
+Sat Apr 1 00:16:05 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * gc.c (rb_gc_call_finalizer_at_exit): should be clear flags
+ before calling finalizers.
+
+ * eval.c (specific_eval): can be called without SecurityError, if
+ $SAFE >= 4.
+
+ * object.c (sym_inspect): inspect gives ":sym", to_s gives "sym".
+
+Fri Mar 31 22:07:04 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.12.
+
+ * lib/net/protocol.rb: update Net::Protocol::Proxy#connect
+
+ * lib/net/protocol.rb: ReplyCode is not a class
+
+ * lib/net/http.rb: header value format was change:
+ values do not include header name
+
+ * lib/net/http.rb: header is not a Hash, but HTTPResponse
+
+Thu Mar 30 12:19:44 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * enum.c (enum_find): rb_eval_cmd() should be called with array.
+
+Tue Mar 28 13:57:05 2000 Clemens Hintze <c.hintze@gmx.net>
+
+ * ext/dbm/dbm.c (fdbm_invert): should return new hash.
+
+ * ext/gdbm/gdbm.c (fgdbm_invert): ditto.
+
+Tue Mar 28 00:58:03 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.11.
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: does not
+ dispatch any commands while dispatching command.
+
+ * lib/net/protocol.rb: failed to get error class of
+ inherited ReplyCode
+
+ * lib/net/http.rb: change feature of "get2", "post2"
+
+Mon Mar 27 01:34:58 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.10.
+
+ * lib/net/http.rb: return value of 'head' was wrong.
+
+Sun Mar 26 17:47:35 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.9.
+
+ * lib/net/smtp.rb: SMTP#do_ready wrongly took no arguments
+
+Sat Mar 25 23:21:10 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * marshal.c (w_object): symbols should be converted to ID before
+ dumping out.
+
+Fri Mar 24 18:26:51 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * file.c (test_check): should have checked exact number of arguments.
+
+Fri Mar 24 21:02:11 2000 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * signal.c (trap): should treat some symbols as the signal.
+
+Fri Mar 24 06:58:03 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.8.
+
+ * lib/net/http.rb: post, get2, post2, get_body
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: separate
+ Command/Socket documentation.
+
+Thu Mar 23 02:26:14 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_fptr_finalize): fptr may be null.
+
+ * io.c (rb_io_s_new): now calls `initialize'.
+
+ * io.c (rb_io_initialize): actual open done in this method.
+
+ * io.c (rb_file_initialize): ditto.
+
+ * eval.c (rb_eval): class variables in singleton class definition
+ is now handled properly (I hope).
+
+Wed Mar 22 21:49:36 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * st.c (st_delete_safe): skip already deleted entry.
+
+ * hash.c (rb_hash_delete): modify brace miss.
+
+Wed Mar 22 08:53:58 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (exec_under): do not push cbase if ruby_cbase == under.
+
+ * node.h (NEW_CREF0): preserve cbase nesting.
+
+Tue Mar 21 12:57:50 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (rb_class_s_new): Class::new should call `inherited'.
+
+Sat Mar 18 12:36:09 2000 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * eval.c (rb_backtrace, make_backtrace): removed unused variable
+ `lev'.
+
+ * eval.c (rb_attr): calls `method_added' at attribute definition.
+
+ * eval.c (rb_mod_modfunc): calls `singleton_method_added' while
+ `module_function'.
+
+ * eval.c (rb_eval): parameter to `method_added' and
+ `singleton_method_added' is Symbol.
+
+ * eval.c (Init_eval): caches IDs for `method_added' and
+ `singleton_method_added'.
+
+Sat Mar 18 11:25:10 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (rescue): allows `rescue Error in foo'. experimental.
+ which is better this or preparing alias `exception' for `$!'?
+
+Fri Mar 17 15:02:45 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (rb_autoload_id): defining new autoload should be
+ prohibited for $SAFE > 4.
+
+ * variable.c (rb_autoload_load): autoload should be possible for
+ $SAFE > 4.
+
+ * eval.c (call_trace_func): should handle T_ICLASS properly.
+
+Fri Mar 17 14:34:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_gsub): forgot to initialize str->orig.
+
+Fri Mar 17 01:24:59 2000 Dave Thomas <Dave@thomases.com>
+
+ * string.c (rb_str_clone): forgot to copy str->orig if STR_NO_ORIG
+ is set by Array#pack.
+
+Wed Mar 15 21:25:04 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * array.c (rb_ary_join): 'result' is always duplicated
+ before concat string.
+
+Wed Mar 15 17:26:05 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (rb_hash_s_create): unexpected recursive call removed.
+ this bug was found by Satoshi Nojo <nojo@t-samukawa.or.jp>.
+
+Wed Mar 15 13:12:39 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (Init_Thread): Thread.join removed finally.
+
+ * string.c (rb_str_chomp_bang): forgot to call rb_str_modify().
+
+Mon Mar 13 16:12:13 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (block_pass): distinguish real orphan block and still
+ on-stack block passed by block argument.
+
+Mon Mar 13 00:20:25 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (f_norm_arg): proper error message when constant comes
+ in formal argument list. this message is suggested by Muvaw
+ Pnazte <bugathlon@yahoo.com>.
+
+ * eval.c (rb_f_raise): proper error message when the first
+ argument is not an exception class/object.
+
+ * string.c (rb_str_dup): dup now postpone buffer copy as long as
+ possible. performance improved by lazy copying.
+
+Sun Mar 12 13:58:52 2000 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * signal.c (rb_f_kill): should treat some symbols as the signal.
+
+Sat Mar 11 22:03:03 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_gsub): performance tune by avoiding buffer copy.
+
+ * eval.c (rb_f_missing): check if argv[0] is ID.
+
+Sat Mar 11 15:49:41 2000 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * struct.c (rb_struct_aref): struct aref by symbol.
+
+Sat Mar 11 05:07:11 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * process.c (proc_setpriority): should return 0, not nil.
+
+ * process.c (proc_setpgid): ditto.
+
+Fri Mar 10 18:14:54 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * file.c (path_check_1): confusing buf and path. this bug found
+ by <decoux@moulon.inra.fr>.
+
+Fri Mar 10 09:37:49 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * MANIFEST: add beos/GNUmakefile.in.
+ * configure.in: support BeOS R4.5.2 (Intel).
+ * beos/GNUmakefile.in: new file to support BeOS R4.5.2 (Intel).
+
+Thu Mar 9 11:13:32 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_fastmap): fixed embarrassing brace bug.
+
+Thu Mar 9 01:36:32 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * missing/flock.c: emulate missing flock() with fcntl().
+
+Thu Mar 9 00:29:35 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (sym_to_s): returns ":sym".
+
+ * object.c (sym_id2name): separated from to_s; returns "sym".
+
+Wed Mar 8 19:16:19 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.7.
+
+ * lib/net/http.rb (connecting): returns header
+
+Wed Mar 8 02:08:43 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y: escape expansion too early.
+
+ * string.c (rb_f_scan): Kernel#scan added.
+
+ * regex.c (re_compile_pattern): support \cX et al.
+
+Tue Mar 7 01:44:27 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (set_stdin): simplified procedure, allows $stdin = DATA;
+ experimental.
+
+ * io.c (set_outfile): ditto.
+
+ * re.c (Init_Regexp): new method Regexp#last_match added; it's an
+ alternative for $~.
+
+ * configure.in (DEFAULT_KCODE): KCODE_NONE should be the default.
+
+ * dir.c (dir_s_rmdir): should return 0 on success.
+
+ * signal.c: remove CWGUSI support.
+
+Mon Mar 6 12:28:37 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * marshal.c (w_symbol): support symbol object.
+
+ * util.c: make symbol as separated class.
+
+ * error.c (Init_Exception): new exception RangeError.
+
+ * ext/socket/socket.c (ip_addrsetup): should check length of hostname.
+
+ * ext/socket/socket.c (ip_addrsetup): check newline at the end of
+ hostname. These fixes suggested by Muvaw Pnazte <bugathlon@yahoo.com>.
+
+Sun Mar 5 20:35:45 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/Win32API/Win32API.c (Win32API_initialize): should call
+ LoadLibrary() everytime and should assign the hdll to Win32API
+ object(protect the hdll from GC).
+
+Sun Mar 5 18:49:06 2000 Nakada.Nobuyoshi <nobu.nokada@softhome.net>
+
+ * misc/ruby-mode.el (ruby-parse-region): not treat method `begin'
+ and `end' as reserved words.
+
+ * misc/ruby-mode.el (ruby-font-lock-docs): ignore after `=begin'
+ and `=end'.
+
+ * misc/ruby-mode.el (ruby-font-lock-keywords, hilit-set-mode-patterns):
+ added `yield' to keywords.
+
+ * misc/ruby-mode.el (ruby-font-lock-keywords, hilit-set-mode-patterns):
+ matches keywords at end of buffer.
+
+Sun Mar 5 18:08:53 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.6.
+
+ * lib/net/http.rb: allow to omit 'start'
+
+Tue Feb 29 01:08:26 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * range.c (range_initialize): initialization done in `initialize';
+ `initialize' should not be called more than once.
+
+ * object.c (Init_Object): default `initialize' should take zero
+ argument.
+
+ * time.c (time_s_new): call `initialize' in Time::new.
+
+Sat Feb 26 22:39:31 2000 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * string.c (rb_str_times): fix String#* with huge string.
+
+Sat Feb 26 00:14:59 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * dir.c (dir_s_new): call `initialize' in Dir::new.
+
+Fri Feb 25 23:01:49 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ruby.h: export ruby_safe_level by EXTERN for mswin32.
+ * win32/ruby.def: regular maintenance.
+
+Fri Feb 25 22:12:46 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_reopen): IO#reopen should accept path as well.
+
+ * string.c (rb_str_s_new): call `initialize' in String::new.
+
+ * hash.c (rb_hash_s_new): call `initialize' in Hash::new.
+
+ * array.c (rb_ary_s_new): call `initialize' in Array::new.
+
+Fri Feb 25 12:50:20 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_start_timer): interval changed to 10ms from 50ms.
+
+Fri Feb 25 06:42:26 2000 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/socket/socket.c (ip_addrsetup): hostp should remain NULL if
+ host is nil.
+
+Thu Feb 24 16:53:47 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_schedule): priority check for sleep expired
+ threads needed.
+
+Wed Feb 23 14:22:32 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_join): forgot to initialize a local variable
+ `taint'.
+
+Tue Feb 22 07:40:55 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (Init_Regexp): renamed to MatchData, old name MatchingData
+ remain as alias.
+
+Tue Feb 22 00:20:21 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.5.
+
+ * lib/net/session.rb: rename to protocol.rb
+
+ * lib/net/protocol.rb: ProtocolSocket -> Net::Socket
+
+ * lib/net/protocol.rb: Net::Socket#write, write_pendstr
+ can take block
+
+ * lib/net/smtp.rb: new methods SMTP#ready SMTPCommand#write_mail
+
+ * lib/net/pop.rb: POPMail#pop can take block
+
+Sat Feb 19 23:58:51 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): pop_loop should not pop at forward jump.
+
+Fri Feb 18 17:15:40 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (method_clone): method objects are now clonable.
+
+Fri Feb 18 00:27:34 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (rb_shared_variable_declare): shared variable (aka
+ class/module variable) introduced. prefix `@@'. experimental.
+
+ * class.c (rb_scan_args): new format char '&'.
+
+Thu Feb 17 19:09:05 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * win32/win32.c (mypopen): don't close handle if it is not assigned.
+ * win32/win32.c (my_open_osfhandle): support O_NOINHERIT flag.
+ * win32/win32.c (win32_getcwd): rename getcwd to win32_getcwd
+ in order to avoid using the C/C++ runtime DLL's getcwd.
+ Use CharNext() to process directory name.
+ * win32/win32.h: map getcwd to win32_getcwd.
+
+Wed Feb 16 00:32:49 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (method_arity): nd_rest is -1 for no rest argument.
+
+ * process.c (proc_waitpid): returns nil when waitpid(2) returns 0.
+
+Tue Feb 15 01:47:00 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * process.c (rb_f_waitpid): pid_t should be signed.
+
+Mon Feb 14 13:59:01 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): yylex yields wrong tokens for `:foo=~expr'.
+
+ * ruby.c (load_file): exit if reading file is empty.
+
+Mon Feb 14 03:34:52 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): `foo.bar=1' should be <foo><.><bar><=><1>,
+ not <foo><.><bar=><1>.
+
+ * eval.c (rb_thread_restore_context): process according to
+ RESTORE_* is moved after longjmp().
+
+ * eval.c (thread_switch): new function to process RESTORE_*.
+
+Sun Feb 13 16:19:49 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ruby.c (require_libraries): don't access freed memory.
+
+ * ruby.c (add_modules): ditto.
+
+Fri Feb 11 12:06:22 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (parse_quotedwords): %w() need to split not only by mere
+ spaces, but by all whitespaces.
+
+Thu Feb 10 02:12:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_index_m): did not support negative offset.
+
+Wed Feb 9 21:54:26 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/socket/getaddrinfo.c: gcc --traditional support.
+ Rearrange headers to work AC_C_CONST.
+ * ext/socket/getnameinfo.c: ditto.
+ * ext/socket/socket.c: mswin32: use double instead of long long.
+
+Wed Feb 9 16:30:41 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * numeric.c (num_coerce): should return [y, x].
+
+Wed Feb 9 11:07:30 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (ruby_prog_init): loadpath structure changed.
+
+Tue Feb 8 02:07:33 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_search): optimize for \G at top.
+
+ * regex.c (re_compile_pattern): \G introduced.
+
+ * regex.c (re_match): ditto.
+
+ * string.c (str_sub_bang): old behavior restored: bang method
+ returns nil if string not changed.
+
+ * regex.c (re_compile_pattern): support independent subexpression
+ `(?>pattern)'.
+
+ * regex.c (re_match): ditto.
+
+Mon Feb 7 15:51:08 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): now understands interrupts under Ruby.
+
+Mon Feb 7 07:51:52 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_uniq_bang): always return an Array.
+
+ * array.c (rb_ary_compact_bang): ditto.
+
+ * array.c (rb_ary_flatten_bang): ditto.
+
+ * hash.c (rb_hash_reject): returns a Hash, not an Array.
+
+ * hash.c (env_reject): ditto.
+
+Fri Feb 4 10:20:25 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (scan_once): scan now leaves information about the last
+ successful pattern match in $&.
+
+ * io.c (rb_io_close): should not check closed IO.
+
+Fri Feb 4 05:44:01 2000 Kentaro Inagaki <inagaki@tg.rim.or.jp>
+
+ * ext/socket/socket.c (s_recv): TRAP_BEG after retry entry.
+
+Wed Feb 2 22:33:45 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (rb_thread_start): receives argument from outside, like
+ `Thread::start(1,2,3){|a,b,c| ... }'.
+
+Wed Feb 2 22:14:40 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (rb_reg_regsub): should check regs->num_regs.
+
+ * re.c (rb_reg_search): remove matchcache, use static struct
+ re_register instead.
+
+ * re.c (match_getter): avoid cloning match data.
+
+Wed Feb 2 17:12:15 2000 Dave Thomas <Dave@Thomases.com>
+
+ * samples/eval.rb: Rescue new ScriptError exception
+
+Wed Feb 2 02:06:07 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_gsub_bang): gsub! now leaves information about the
+ last successful pattern match in $&.
+
+Mon Jan 31 15:24:58 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_sub_bang): bang method returns string always.
+ experimental.
+
+Sun Jan 30 17:58:09 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * eval.c: arrange to use setitimer(2) for BOW, DJGPP
+
+ * defines.h: ditto. use random(3) on cygwin b20.1.
+
+Sun Jan 30 17:20:16 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * eval.c: use getrlimit(2) on DJGPP.
+
+Thu Jan 27 01:27:10 2000 GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp>
+
+ * dir.c (glob): glob pattern "/*" did not match.
+
+Wed Jan 26 22:30:47 2000 Shigeo Kobayashi <shigeo@tinyforest.gr.jp>
+
+ * numeric.c (flo_modulo): wrong result for negative modulo.
+
+Wed Jan 26 02:01:57 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * file.c (test_c): should use S_ISCHR.
+
+ * file.c (rb_stat_c): ditto.
+
+ * string.c (rb_str_each_line): should propagate tainting.
+
+Tue Jan 25 04:01:34 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (rb_obj_freeze): all objects made freezable.
+
+Tue Jan 25 00:37:01 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: use AC_CHECK_TOOL for cross compiling.
+
+Mon Jan 24 19:01:54 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * array.c (rb_protect_inspect): should be checked by id of
+ objects; not by object themselves.
+
+Mon Jan 24 18:48:08 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * eval.c (rb_eval): too many warnings; warned on every method
+ overriding. should be on method discarding.
+
+Mon Jan 24 02:56:44 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): -2.abs should be `(-2).abs' to accomplish the
+ principle of less surprise. `+2' too.
+
+ * eval.c (rb_eval): when defining class is already there, and
+ superclass differ, throw away the old class.
+
+ * variable.c (rb_const_set): gives warning again on constant
+ redefinition.
+
+ * error.c (Init_Exception): SyntaxError, NameError, LoadError and
+ NotImplementError are subclasses of ScriptError<Exception, not
+ StandardError. experimental.
+
+Sat Jan 22 00:00:41 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (parse_quotedwords): no longer use `String#split'.
+ and enable space escape within quoted word list.
+ e.g. %w(a\ b\ c abc) => ["a b c", "abc"].
+
+ * string.c (rb_str_slice_bang): new method `slice!'.
+
+Fri Jan 21 21:56:08 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.4.
+
+ * lib/net/http.rb: can receive messages which have
+ no Content-Length:.
+
+Fri Jan 21 16:15:59 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (thgroup_s_new): new class ThreadGroup.
+
+Tue Jan 18 12:24:28 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * struct.c (Init_Struct): remove Struct's own hash and eql?.
+
+Sat Jan 15 22:21:08 2000 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * eval.c (search_method): argument klass may be 0.
+
+Sat Jan 15 15:03:46 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * enum.c (enum_index): remove this method.
+
+ * enum.c: remove use of pointers to local variables. find,
+ find_all, min, max, index, member?, each_with_index,
+
+ * eval.c (massign): multiple assignment does not use to_a anymore.
+ experimental.
+
+Fri Jan 14 12:22:04 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_replace): use memmove instead of memcpy for
+ overwrapping strings (e.g. a[1] = a).
+
+Thu Jan 13 11:12:40 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (arg_add): use new node, ARGSPUSH.
+
+Mon Jan 10 18:32:28 2000 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * marshal.c (w_object): forgot an argument to call w_ivar().
+
+Sun Jan 9 18:13:51 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * random.c: first was not defined unless HAVE_RANDOM.
+
+Sat Jan 8 19:02:49 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_sysread): raise IOError for buffered IO.
+
+ * ext/socket/socket.c (s_recv): ditto.
+
+Fri Jan 7 00:59:29 2000 Masahiro Tomita <tommy@tmtm.org>
+
+ * io.c (io_fread): TRAP_BEG/TRAP_END added around getc().
+
+Thu Jan 6 00:39:54 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * random.c (rb_f_rand): should be initialized unless srand is
+ called before.
+
+Wed Jan 5 16:59:34 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.3.
+
+ * lib/net/session.rb: Session -> Protocol, ...
+
+ * lib/net/http.rb: HTTPCommand implementation was changed.
+
+Wed Jan 5 02:14:46 2000 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * parse.y: Fix SEGV on empty parens with UMINUS or UPLUS.
+
+Tue Jan 4 22:25:54 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (stmt): `() while cond' dumped core.
+
+Tue Jan 4 06:04:14 2000 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * configure.in: modify for cross-compiling.
+ use target_* instead of host_*.
+ use AC_CANONICAL_TARGET.
+
+ * Makefile.in: ditto.
+
+ * cygwin/GNUmakefile.in: ditto.
+
+Sat Jan 1 13:26:14 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_yield_0): force_recycle ruby_dyna_vars to gain
+ performance.
+
+ * array.c (rb_ary_delete_at_m): takes same argument pattern with
+ rb_ary_aref.
+
+Sat Jan 1 10:12:26 2000 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ruby.h,util.c (rb_special_const_p): peep hole optimization.
+
+ * ruby.h,util.c (rb_test_false_or_nil): removed.
+
+ * ruby.h (RTEST, SPECIAL_CONST_P): peep hole optimization.
+
+ * ruby.h (FL_ABLE, FL_SET, FL_UNSET, FL_REVERSE): made expressions
+ not statements.
+
+ * ruby.h (OBJ_INFECT): newly added macro which copies taint from
+ `s' to `x'.
+
+Sat Jan 1 02:04:18 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_safe_level): new method.
+
+ * eval.c (rb_yield_0): recycle dyna_var_map to reduce object
+ allocation.
+
+Fri Dec 31 00:52:48 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c: thread independent trace_func not needed.
+
+Thu Dec 30 14:47:31 1999 akira yamada <akira@ruby-lang.org>
+
+ * configure.in: specifies -soname in LIBRUBY_DLDFLAGS on linux
+ platforms.
+
+Thu Dec 30 10:51:27 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c,io.c,hash,c,re.c,string.c: `_m' suffix instead of
+ `_method' for wrapper functions to implement method,
+ e.g. `rb_str_join_m()'.
+
+Thu Dec 30 02:08:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (rb_cstr2inum): non-numeric format check added.
+ currently it works only with base == 0 (i.e. Integer()).
+
+ * bignum.c (rb_str2inum): now takes VALUE to 1st argument. null
+ byte check added.
+
+ * array.c (rb_ary_replace): unless replacement is an array,
+ replacement shall be converted to array by `[replacement]', not
+ by `replacement.to_a'.
+
+ * array.c (rb_ary_plus): right operand must be an array.
+
+ * array.c (rb_ary_concat): argument must be an array.
+
+Mon Dec 27 12:35:47 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/socket/socket.c (sock_finalize): mswin32: fix socket handle leak.
+
+ * win32/win32.c (myfdclose): ditto.
+
+Sun Dec 26 23:15:13 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * win32/win32.c (mypopen): raise catchable error instead of rb_fatal.
+ * win32/win32.c (mypclose): fix process handle leak.
+
+Sun Dec 26 16:17:11 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/Win32API/Win32API.c (Win32API_initialize): use UINT2NUM
+ instead of INT2NUM to set __dll__ and __proc__.
+
+Sat Dec 25 00:08:59 1999 KANEKO Naoshi <wbs01621@mail.wbs.ne.jp>
+
+ * ext/Win32API/Win32API.c (Win32API_Call): remove 'dword ptr'
+ from _asm.
+
+Fri Dec 24 10:26:47 1999 Koji Oda <oda@bsd1.qnes.nec.co.jp>
+
+ * win32/win32.h: use "C++" linkage.
+
+Fri Dec 24 02:00:57 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (THREAD_ALLOC): should initialize th->trace.
+
+Fri Dec 24 00:43:39 1999 KANEKO Naoshi <wbs01621@mail.wbs.ne.jp>
+
+ * io.c (pipe_open): check for `fptr->f == NULL'.
+ * win32/win32.c (mypopen): STDERR does not work during ` function.
+
+Wed Dec 22 22:50:40 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.2.
+
+ * lib/net/http.rb: HTTP support is enhanced a little
+
+ * lib/net/http.rb: support proxy
+
+Tue Dec 21 17:21:28 1999 Koji Oda <oda@bsd1.qnes.nec.co.jp>
+
+ * ext/socket/socket.c (sock_finalize): mswin32: fix FILE* leak.
+
+Tue Dec 21 05:33:56 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.1.
+
+ * lib/net/http.rb: support HTTP chunk
+
+Mon Dec 20 19:08:12 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c (rb_file_s_expand_path): handle dir separator correctly.
+
+Sun Dec 19 22:56:31 1999 KANEKO Naoshi <wbs01621@mail.wbs.ne.jp>
+
+ * lib/find.rb: support dosish root directory.
+ * win32/Makefile: ditto.
+ * win32/config.status: ditto.
+ * win32/win32.c (opendir): ditto.
+ * win32/win32.c (opendir): use CharPrev() to get last character
+ of the directory name.
+
+Sat Dec 18 03:00:01 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * file.c (path_check_1): check should be done by absolute path.
+
+ * marshal.c (r_ivar): should restore generic_ivar too.
+
+ * marshal.c (w_ivar): should dump generic_ivar too.
+
+Fri Dec 17 22:46:46 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/session.rb, smtp.rb, pop.rb, http.rb: 1.1.0.
+
+ * lib/net/http.rb: test release
+
+ * lib/net/session.rb: support class swapping
+
+ * lib/net/session.rb: Socket#flush_rbuf
+
+ * lib/net/session.rb: doquote -> Net.quote
+
+Fri Dec 17 19:27:43 1999 IWAMURO Motonori <iwa@mmp.fujitsu.co.jp>
+
+ * eval.c (rb_load): should initialize ruby_frame->last_class.
+
+Wed Dec 15 01:35:29 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (proc_options): option to change directory changed to
+ `-C' like tar.
+
+ * ruby.c (proc_options): argv boundary check for `-X'.
+
+Mon Dec 13 15:15:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_adjust_startpos): separate startpos adjustment
+ because of major performance drawback.
+
+ * class.c (rb_singleton_class): tainted status of the singleton
+ class must be synchronized with the object.
+
+ * eval.c (rb_thread_schedule): implement thread priority.
+
+Sat Dec 11 03:34:38 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * gc.c (mark_hashentry): key should be VALUE, not ID.
+
+ * io.c (argf_eof): should check next_p too.
+
+Thu Dec 9 18:09:13 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * error.c (exc_set_backtrace): forgot to declare a VALUE argument.
+
+Thu Dec 9 14:19:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (rb_obj_taint): explicit tainting must be prohibited at
+ level 4 to prevent polluting trusted object by untrusted code.
+
+ * file.c: file operations (stat, lstat, chmod, chown, umask,
+ truncate, flock) are prohibited in level 2 (was level 4).
+
+Wed Dec 8 11:48:23 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_f_require): prohibiting require() in the secure mode
+ cause serious autoloading error.
+
+ * variable.c (rb_obj_instance_variables): don't need to prohibit
+ to get list of instance variable names of untainted objects.
+
+ * variable.c (rb_ivar_get): don't need to prohibit to get instance
+ variables of untainted objects.
+
+ * variable.c (rb_mod_remove_const): should prohibit constant
+ removals too.
+
+Wed Dec 8 09:23:01 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): should try autoloading before defining
+ class/module at the toplevel.
+
+Tue Dec 7 22:15:30 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * configure.in: Modified rb_cv_rshift_sign detect routine and
+ more simple/fast RSHIFT() for hpux-10.x.
+
+Tue Dec 7 11:16:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (Init_eval): calculate stack limit from rlimit where
+ getrlimit(2) is available.
+
+Tue Dec 7 09:57:33 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * file.c (rb_file_ftype): should have removed mode_t.
+
+Mon Dec 6 15:55:30 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * numeric.c (fix_rshift): Fix -1 >> 32 returned 0 (should be -1).
+
+ * numeric.c (fix_rshift): Fix 1 >> -1 returned 0 (should be 2).
+
+Mon Dec 6 11:47:23 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sprintf.c (rb_f_sprintf): formatted string must be tainted if
+ any of parameters is a tainted string.
+
+ * file.c (rb_file_s_expand_path): expanded file path need not to
+ be tainted always.
+
+Sun Dec 5 20:25:29 1999 Katsuhiro Ueno <unnie@blue.sky.or.jp>
+
+ * eval.c (Init_Proc): simple typo.
+
+ * gc.c (add_heap): sizeof(RVALUE*), not sizeof(RVALUE).
+
+Sat Dec 4 01:40:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_search): adjust startpos for multibyte match unless
+ the first pattern is forced byte match.
+
+ * bignum.c (rb_big_rand): should not use rand/random where drand48
+ may be available. RANDOM_NUMBER should be provided from outside.
+
+Fri Dec 3 09:54:59 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (moreswitches): there may be trailing garbage at #!
+ line.
+
+ * eval.c (rb_f_require): should check require 'feature.o' too.
+
+Thu Dec 2 11:58:15 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * eval.c (rb_thread_loading): should maintain loading_tbl.
+
+Thu Dec 2 10:21:43 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_loading_done): wrong parameter to st_delete().
+
+Wed Dec 1 11:24:06 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ruby.c (process_sflag): process -s properly (should not force `--').
+
+Wed Dec 1 09:47:33 1999 Kazunori NISHI <kazunori@swlab.csce.kyushu-u.ac.jp>
+
+ * string.c (rb_str_split_method): should increment end too.
+
+Tue Nov 30 18:00:45 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * marshal.c: MARSHAL_MINOR incremented; format version is 4.2.
+
+ * marshal.c (w_object): distinguish class and module.
+
+ * marshal.c (w_object): save hash's default value.
+
+ * marshal.c (r_object): restore hash's default value.
+
+Tue Nov 30 01:46:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (rb_reg_source): generated source string must be tainted if
+ regex is tainted.
+
+ * file.c (rb_file_s_basename): basename should not be tainted
+ unless the original path is tainted.
+
+ * file.c (rb_file_s_dirname): ditto.
+
+Mon Nov 29 20:42:13 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c (stat_new): Struct::Stat -> File::Stat; Stat is no longer
+ a Struct.
+
+Mon Nov 29 15:28:52 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (rb_path2class): evaluated value from path should be
+ module or class.
+
+Fri Nov 26 18:12:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_exec_end_proc): should remove only end_procs defined
+ within load wrapper.
+
+ * eval.c (rb_load): save and restore ruby_wrapper around loading.
+
+ * eval.c (rb_mark_end_proc): mark end procs registered by END{} or
+ at_exit{}.
+
+ * eval.c (rb_set_end_proc): should not call rb_global_variable()
+ on heap address; it crashed mod_ruby.
+
+Mon Nov 22 14:07:24 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * ruby.c (proc_options): variable e_script should be visited by
+ garbage collector.
+
+Sat Nov 20 10:10:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (inspect_i): value may be nil, check revised.
+
+Fri Nov 19 18:06:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * dir.c (glob): recursive wildcard match by `**' ala zsh.
+
+Fri Nov 19 11:44:26 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * variable.c: was returning void value.
+
+Fri Nov 19 03:57:22 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * file.c: add methods Stat struct class to reduce stat(2).
+
+Thu Nov 18 16:18:27 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * lib/pstore.rb: mutual lock by flock(2).
+
+Thu Nov 18 11:44:13 1999 Masahiro Tomita <tommy@tmtm.org>
+
+ * io.c (read_all): should check bytes too.
+
+Wed Nov 17 02:40:40 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (Init_IO): $defout (alias of $>) added.
+
+Tue Nov 16 09:47:14 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * lib/pstore.rb: add mutual lock using symlink.
+
+Mon Nov 15 16:50:34 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * enum.c (enum_grep): non matching grep returns an empty array, no
+ longer returns nil.
+
+ * enum.c (enum_grep): grep with block returns collection of
+ evaluated values of block over matched elements.
+
+Mon Nov 15 04:50:33 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * re.c (rb_reg_source): should not call rb_reg_expr_str()
+ everytime.
+
+Sat Nov 13 07:34:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (rb_mod_constants): traverse superclasses to collect
+ constants.
+
+ * eval.c (assign): modified for shared variables.
+
+ * eval.c (rb_eval): search nested scope, then superclasses to
+ assign shared variables within methods.
+
+ * eval.c (rb_eval): remove warnings from constants modification,
+ because they are no longer constants.
+
+ * parse.y (node_assign): modified for shared variables.
+
+ * parse.y (assignable): allow constant assignment in methods;
+ constants should be called `shared variable'.
+
+Fri Nov 12 23:52:19 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * process.c (rb_f_system): argument check for NT, __EMX__, DJGPP.
+
+Wed Nov 10 21:54:11 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * hash.c (rb_any_cmp): Fixed return without value.
+
+Wed Nov 10 17:57:06 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sprintf.c: incorporate <yasuf@big.or.jp>'s sprintf patch at
+ [ruby-dev:7754].
+
+Wed Nov 10 08:28:53 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_call0): supply class parameter for each invocation.
+
+Tue Nov 9 13:21:04 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * configure.in: AC_MINIX move to before AC_EXEEXT and AC_OBJEXT.
+
+Mon Nov 8 19:52:29 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * configure.in: Renamed AC_CHAR_UNSIGNED to AC_C_CHAR_UNSIGNED.
+
+ * configure.in: Added default to AC_CHECK_SIZEOF().
+
+Mon Nov 8 14:28:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (stmt): rescue modifier added to the syntax.
+
+ * keywords: kRESCUE_MOD added.
+
+ * eval.c (rb_f_eval): fake outer scope when eval() called without
+ bindings.
+
+ * eval.c (rb_f_binding): should copy last_class in the outer frame too.
+
+Sun Nov 7 18:31:04 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
+
+ * eval.c (is_defined): last_class may be 0.
+
+Sat Nov 6 19:26:55 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * Makefile.in: Added depend entry make parse.@OBJEXT@ from parse.c
+ for UCB make
+
+Thu Nov 4 17:41:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): \< (wordbeg), \> (wordend) disabled.
+
+Wed Nov 3 08:52:57 1999 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
+
+ * io.c (Init_IO): forgot to use INT2FIX() around SEEK_SET, etc.
+
+Wed Nov 3 00:25:20 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_split_method): use mbclen2() to handle kcode
+ option of regexp objects.
+
+Mon Nov 1 14:22:15 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * eval.c (rb_eval): reduce recursive calls to rb_eval()
+ case of ||= and &&= .
+
+Sun Oct 31 13:12:42 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * regex.c (re_compile_pattern): wrong [\W] match.
+
+Fri Oct 29 16:57:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/nkf/lib/kconv.rb: new String methods (kconv, tojis, toeuc,
+ tosjis).
+
+ * time.c (time_s_at): now accepts optional second argument to
+ specify micro second.
+
+Thu Oct 28 13:35:40 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_split_method): should be mbchar aware with
+ single char separators.
+
+Wed Oct 27 12:57:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * random.c (rb_f_srand): random seed should be unsigned.
+
+Tue Oct 26 23:58:15 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_collect): collect for better performance.
+
+Tue Oct 26 19:20:54 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * marshal.c (r_object): should register class/module objects.
+
+Sat Oct 23 15:59:39 1999 Takaaki Tateishi <ttate@jaist.ac.jp>
+
+ * process.c (rb_f_system): should require at least one argument.
+
+Sat Oct 23 12:42:44 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * enum.c (enum_collect): collect without block will collect
+ elements in enumerable.
+
+Thu Oct 21 16:14:19 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (moreswitches): function to process string option;
+ the name is stolen from perl (not implementation).
+
+ * ruby.c (proc_options): use RUBYOPT environment variable to
+ retrieve the default options.
+
+ * dir.c (fnmatch): use eban's fnmatch; do not depend on system's
+ fnmatch (which may have portability problem) anymore.
+
+Wed Oct 20 15:14:24 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * marshal.c (marshal_load): should protect the generated object
+ table (arg->data) from GC.
+
+Mon Oct 18 16:15:52 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/nkf/nkf.c (rb_nkf_kconv): output should be NUL terminated.
+
+Mon Oct 18 09:03:01 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/session.rb, smtp.rb, pop.rb: 1.0.3
+
+ * lib/net/pop.rb: new methods POP3Command#uidl, POPMail#uidl.
+
+Sun Oct 17 03:35:33 1999 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
+
+ * array.c (rb_ary_pop): forgot some freeze checks.
+
+Sat Oct 16 12:57:53 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * array.c (rb_ary_sort): always returns the copied array.
+
+Fri Oct 15 22:50:41 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * error.c (sys_nerr): on CYGWIN, it is _sys_nerr.
+
+Fri Oct 15 01:32:31 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * io.c (rb_io_ctl) :need to use NUM2ULONG, not NUM2INT.
+
+ * ext/Win32API/Win32API.c (Win32API_Call): need to use NUM2ULONG,
+ not NUM2INT.
+
+Fri Oct 15 00:22:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (Init_Regexp): super class of the MatchingData, which was
+ Data, to be Object.
+
+ * eval.c (ruby_run): evaluate required libraries before load &
+ compiling the script.
+
+ * parse.y (lex_getline): retrieve a line from the stream, saving
+ lines in the table in debug mode.
+
+ * eval.c (call_trace_func): treat the case ruby_sourcefile is null.
+
+Thu Oct 14 02:00:10 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (string): compile time string concatenation.
+
+Wed Oct 13 07:28:09 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/session.rb, smtp.rb, pop.rb: 1.0.2
+
+ * lib/net/session.rb: new method Session#set_pipe.
+
+ * lib/net/session.rb, smtp.rb, pop.rb: add RD documentation.
+
+Wed Oct 13 02:17:05 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * array.c (rb_ary_plus): remove recursion.
+
+ * array.c (rb_ary_sort_bang): detect modify attempt.
+
+Wed Oct 13 02:17:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (block_pass): should copy block to prevent modifications.
+ tag in the structure should be updated from latest prot_tag.
+
+ * eval.c (proc_s_new): tag in struct BLOCK should not point into
+ unused stack.
+
+ * dir.c (dir_s_glob): iterate over generated matching filenames if
+ the block is given to the method.
+
+ * array.c (rb_ary_at): new methods; at, first, last.
+
+ * hash.c (rb_hash_fetch): raises exception unless the default
+ value is supplied.
+
+ * hash.c (rb_hash_s_create): need not remove nil from value.
+
+ * hash.c (rb_hash_aset): setting value to nil does not remove key
+ anymore.
+
+Tue Oct 12 22:29:04 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_read): length may be 0 or negative.
+
+Tue Oct 12 13:26:27 1999 Jun-ichiro itojun Hagino <itojun@itojun.org>
+
+ * signal.c (posix_signal): RETSIGTYPE may be void.
+
+Tue Oct 12 03:28:03 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * array.c (rb_ary_delete_at): allows negative position.
+
+Mon Oct 11 17:42:25 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * parse.y (rb_intern): should generate distinct ID_ATTRSET symbols
+ for the name with multiple `='s at the end.
+
+ * Makefile.in (CPPFLAGS): separate cpp flags from CFLAGS.
+
+Mon Oct 11 07:27:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): should not execute the `else' clause on the
+ case the exceptions are handled by the `rescue' clause.
+
+ * signal.c (Init_signal): ignore SIGPIPE by default.
+
+Wed Oct 6 17:13:19 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * ruby.c (addpath): rubylib_mangled_path() modified.
+
+Mon Oct 4 12:42:32 1999 Kazuhiko Izawa <izawa@erec.che.tohoku.ac.jp>
+
+ * pack.c (pack_unpack): % in printf format should be %%.
+
+Mon Oct 4 10:01:40 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (rb_obj_instance_variables): should always return
+ array for all object can have instance variables now.
+
+Mon Oct 4 00:08:34 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * pack.c (OFF16): need to adjust pointer address to pack/unpack on
+ 64bit machines.
+
+Sun Oct 3 03:05:59 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * time.c (time_arg): mktime y2k problem.
+
+Sun Sep 26 16:54:45 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * parse.y (here_document): `\r' handling for here documents.
+
+Wed Sep 22 09:20:11 1999 Masahiro Tomita <tommy@tmtm.org>
+
+ * ext/socket/socket.c: SOCKS5 support.
+
+Wed Sep 22 07:33:23 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/session.rb, smtp.rb, pop.rb: 1.0.1
+
+ * lib/net/pop.rb: APOP did not work.
+
+ * lib/net/pop.rb: modify the way to make APOP challenge.
+
+Wed Sep 22 00:35:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_include): should return boolean value.
+
+ * regex.c (re_compile_fastmap): wrong comparison with mbc.
+
+ * eval.c (specific_eval): default sourcefile name should be
+ "(eval)" for module_eval etc.
+
+Wed Sep 22 00:06:07 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * win32/Makefile: update rules.
+
+ * io.c (io_fread): should not assign in char, it maybe -1.
+
+Tue Sep 21 23:57:54 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (call_trace_func): should not propagate retval in
+ trace_func.
+
+Mon Sep 20 21:35:39 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * win32/win32.c (myselect): assume non socket files are always
+ readable/writable.
+
+Mon Sep 20 01:08:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_fread): should not block other threads.
+
+ * io.c (rb_io_synchronized): renamed from rb_io_unbuffered(); do
+ not call setbuf(NULL) anymore.
+
+Sat Sep 18 13:45:43 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * stable version 1.4.2 released.
+
+Fri Sep 17 23:24:17 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * eval.c (rb_f_missing): dumped core if no argument given.
+
+Fri Sep 17 23:21:06 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * win32/win32.c (myselect): translate WSAEINTR, WSAENOTSOCK into
+ UNIX errno constants.
+
+Fri Sep 17 00:52:27 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (arg): assignable() may return 0.
+
+Thu Sep 16 20:46:23 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * eval.c (rb_eval): was doubly evaluating the return expression.
+
+Thu Sep 16 18:40:08 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * stable version 1.4.1 released.
+
+Thu Sep 16 11:33:22 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * string.c (rb_str_match): should return nil.
+
+Wed Sep 15 22:46:37 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (rb_reg_s_quote): should quote `-' too.
+
+Tue Sep 14 15:23:22 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * parse.y (yylex): no need to ignore `\r' here.
+
+ * parse.y (nextc): strip `\r' from text.
+
+ * parse.y (nextc): support `__END__\r\n' type terminator.
+
+Mon Sep 13 10:49:19 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * eval.c (rb_eval): needless RTEST(ruby_verbose) removed.
+
+Mon Sep 13 09:10:11 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/session.rb, smtp.rb, pop.rb: 1.0.0
+
+Wed Sep 8 11:37:38 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * time.c (make_time_t): bit more strict comparison.
+
+Tue Sep 7 00:50:56 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * range.c (range_each): use rb_str_upto() for strings.
+
+ * string.c (rb_str_upto): set upper limit by comparing curr <= end.
+
+ * range.c (range_each): should check equality to handle magic
+ increment.
+
+Mon Sep 6 22:43:33 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): break/next/redo available within -n/-p loop.
+
+Fri Sep 3 11:14:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * compar.c (cmp_equal): should not raise exception; protect by
+ rb_rescue().
+
+Thu Sep 2 05:23:05 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * file.c (rb_file_s_expand_path): use dirsep, instead of character
+ literal '/'.
+
+ * file.c (rb_file_s_expand_path): reduce multiple dirsep at the top.
+
+Wed Sep 1 00:28:27 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_call): call rb_undefined() if a method appears not to
+ be exist explicitly from cache.
+
+ * eval.c (rb_method_boundp): check method cache before calling
+ rb_get_method_body().
+
+ * eval.c (rb_get_method_body): store method non-existence
+ information in the cache.
+
+ * random.c (rb_f_srand): use getpid(2) to generate seed.
+
+ * regex.c (re_match): do not apply partial mbc match for
+ charset_not.
+
+ * regex.c (re_compile_pattern): put extended literal prefix (0xff)
+ only before numeric literals, not before all >0x80 char.
+
+ * regex.c (re_compile_pattern): put numeric literal in extended
+ charset region, not normal charset bits.
+
+ * regex.c (re_compile_fastmap): calculate fastmap for charset and
+ charset_not to treat numeric literal (e.g. \246) specially.
+
+Fri Aug 28 17:32:55 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
+
+ * eval.c (rb_eval): should set return value (nil) explicitly if a
+ value is omitted for return statement.
+
+Sun Aug 26 20:26:40 2001 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * ext/readline/readline.c: restore terminal mode
+ even if readline() interrupted.
+
+ * ext/readline/readline.c: returned string need to
+ be tainted.
+
+ * ext/readline/readline.c: fixed memory leak.
+
+ * ext/readline/readline.c: allow negative index.
+
+ * ext/readline/readline.c: added Readline::HISTORY.size
+ same as Readline::HISTORY.length
+
+ * ext/readline/readline.c: allow conditional parsing
+ of the ~/.inputrc file by `$if Ruby'.
+
+ * ext/readline/extconf.rb: check whether the
+ libreadline has the variable `rl_completion_append_character'
+ (this feature was implemented from GNU readline 2.1).
+
+Thu Aug 26 15:06:11 1999 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
+
+ * gc.c (rb_gc): local variables may be placed beyond stack_end, so
+ use an address from alloca(1) on non C_ALLOCA platforms.
+
+Thu Aug 26 01:24:17 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sprintf.c (rb_f_sprintf): "%%" is legal, but "%3.14%" is not.
+
+Mon Aug 23 00:00:54 1999 Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
+
+ * regex.c (re_compile_fastmap): wrong macro caused memory leak.
+
+Sat Aug 21 11:30:51 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (ADJ): should not adjust addresses to data on heap.
+
+Fri Aug 20 20:50:58 1999 Kenji Nagasawa <kenn@hma.att.ne.jp>
+
+ * defines.h (PATH_SEP): path separator is ";" for OS/2.
+
+Thu Aug 19 10:50:43 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * gc.c (rb_gc): add volatile to avoid GCC optimize bug(?).
+
+Wed Aug 18 23:48:10 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * due to disk trouble, some change records were lost. several
+ modification made to eval.c, gc.c, io.c, pack.c,
+ ext/extmk.rb.in, and lib/mkmf.rb.
+
+Fri Aug 13 15:41:39 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * stable version 1.4.0 released.
+
+Fri Aug 13 03:16:07 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (argf_forward): since $stdout may be non-IO, ARGF.file is
+ not guaranteed to be IO. check and forwarding added to every ARGF
+ method.
+
+ * io.c (set_outfile): $stdout/$stderr may not be IO now.
+
+ * io.c (set_stdin): $stdin may not be IO now.
+
+ * range.c (rb_range_beg_len): round `end' to length as documented.
+
+ * io.c (Init_IO): preserve original stdin/stdout/stderr.
+
+Thu Aug 12 13:44:33 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (Init_load): require receives 1 argument.
+
+ * eval.c (frame_dup): should clear tmp to avoid dangling
+ references.
+
+Wed Aug 11 13:33:13 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * eval.c (rb_eval): no automatic aggregate initialization.
+
+ * eval.c (module_setup): ditto.
+
+Wed Aug 11 18:18:41 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * eval.c (yield_under_i): automatic aggregate initialization is an
+ ANSI feature.
+
+Wed Aug 11 10:10:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): parse `[].length==0' as `([].length)==0', not
+ `([].length=)=0'
+
+ * parse.y (yylex): parse `[].length!=0' as `([].length)!=0', not
+ `([].length!)=0'
+
+ * parse.y (peek): peek-in lexical buffer.
+
+Wed Aug 11 00:34:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): bug on backward jump adjustment concerning
+ stop_paren.
+
+Tue Aug 10 14:54:25 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/nkf/nkf.c (rb_nkf_guess): binary detection was wrong.
+
+Tue Aug 10 00:07:36 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_clone): should use CLONESETUP().
+
+Mon Aug 9 23:57:07 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.h (CLONESETUP): should have copied generic instance
+ variables too.
+
+Mon Aug 9 10:46:54 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/socket/extconf.rb: add check for <arpa/nameser.h> and
+ <resolv.h>.
+
+Sat Aug 7 13:19:06 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * numeric.c (flo_cmp): comparing NaN should not return value.
+ raises FloatDomainError.
+
+Sat Aug 7 03:09:08 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (blk_free): free copied frames too.
+
+ * eval.c (frame_dup): should copy previous frames from stack to
+ heap to preserve frame information.
+
+Fri Aug 6 15:01:07 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.3.7 - version 1.4 beta
+
+ * ext/socket/socket.c (s_recv): UDPsocket#recvfrom now returns
+ IPsocket#addr information.
+
+ * array.c (rb_ary_subary): ary[-3,3] should not return nil.
+
+Thu Aug 5 10:58:01 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (thread_mark): protect old ruby_frame from GC during it
+ replaced by eval().
+
+ * eval.c (eval): do not modify frame.prev; binding should preserve
+ information about calling() too.
+
+ * eval.c (rb_yield_0): no arity check for mere yield; but only for
+ Proc#call.
+
+Tue Aug 3 22:07:13 1999 Kazuhiro HIWADA <hiwada@kuee.kyoto-u.ac.jp>
+
+ * object.c (rb_mod_clone): should check if iv_tbl, m_tbl are
+ initialized.
+
+Tue Aug 3 19:03:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (rb_any_cmp): use rb_with_disable_interrupt() to ensure
+ clearance of rb_prohibit_interrupt even on failure.
+
+ * eval.c (rb_with_disable_interrupt): new function added.
+
+Sat Jul 31 23:23:44 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_create_0): set THREAD_RAISED flag on thread
+ termination by exception.
+
+ * eval.c (rb_thread_join): `$!' may not be nil for the threads
+ created in rescue clause.
+
+ * eval.c (rb_thread_status): ditto.
+
+ * eval.c (rb_thread_join): should re-raise exception for already
+ dead threads too.
+
+Fri Jul 30 17:56:54 1999 GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp>
+
+ * object.c (rb_mod_ge): wrong comparison.
+
+Fri Jul 30 12:15:44 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/tcltklib/extconf.rb: win32 support.
+
+ * lib/mkmf.rb: use append_library().
+
+ * ext/extmk.rb.in: ditto.
+
+Fri Jul 30 02:11:48 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_delete): should return nil for deleting non
+ existing item.
+
+ * io.c (rb_io_close): call rb_sys_wait() on explicit close.
+
+ * io.c (rb_io_fptr_close): do not call rb_sys_wait() on finalize.
+
+ * eval.c (yield_under_i): cbase context should be maintained for
+ Module#module_eval(). suggested by <inaba@st.rim.or.jp>.
+
+Wed Jul 28 01:18:28 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * Makefile.in: add -I$(hdrdir)/lib to install using ftools.
+
+ * util.c: use HAVE_FCNTL_H, not HAVE_FCNTL
+
+Wed Jul 28 18:24:45 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.3.6 - version 1.4 alpha
+
+Tue Jul 27 09:38:08 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * eval.c (rb_eval): reduce recursive rb_eval() calls by
+ NODE_BLOCKs.
+
+Tue Jul 27 01:20:40 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * file.c (rb_file_s_expand_path): drive letter patch.
+
+Mon Jul 26 02:36:31 1999 Shugo Maeda <shugo@netlab.co.jp>
+
+ * eval.c (rb_load): should clear ruby_nerr.
+
+ * eval.c (rb_thread_join): oldbt should not be empty to unshift.
+
+Sun Jul 25 12:09:16 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * dir.c (push_braces): should treat nested braces.
+
+Fri Jul 23 02:49:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (rb_hash_clear): dummy argument added; suggested by
+ <eguchi@shizuokanet.ne.jp>. thanks.
+
+Thu Jul 22 19:37:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_join): get_backtrace() may return Qnil.
+ typecheck added.
+
+Tue Jul 20 14:36:43 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * range.c (range_each): do not treat String specially (for future
+ override).
+
+Tue Jul 20 02:28:34 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_gets): $_ should be nil, when get returns nil.
+
+ * io.c (rb_f_gets): ditto.
+
+Mon Jul 19 17:13:09 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_fastmap): should continue fastmap compile
+ for anychar_repeat, for it's repeat anyway.
+
+Mon Jul 26 13:33:45 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * lib/jcode.rb: replaced by faster code.
+
+Mon Jul 19 01:57:28 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * lib/mkmf.rb: no longer use install program.
+
+ * ext/extmk.rb.in: use miniruby to install programs.
+
+Sat Jul 17 00:06:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c (ipaddr): don't do reverse lookup if
+ attribute do_not_reverse_lookup is set for socket classes.
+ Experimental. Note this is a global attribute.
+
+Fri Jul 16 22:18:29 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_eof): use feof() to check EOF already met.
+
+ * io.c (read_all): should return nil at EOF.
+
+Fri Jul 16 13:39:42 1999 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/telnet.rb: version 0.231.
+
+Fri Jul 16 10:58:22 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * regex.c (re_match): debug print removed.
+
+Fri Jul 16 09:58:15 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * many files: clean up unused variables found by gcc -Wall.
+
+ * lib/mkmf.rb: better cygwin support etc.
+
+ * ext/extmk.rb.in: ditto.
+
+ * instruby.rb: ditto.
+
+Fri Jul 16 01:37:50 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * string.c (rb_str_squeeze_bang): the type of local variable `c'
+ should be int, not char.
+
+ * string.c (rb_str_reverse): should always return copy.
+
+Thu Jul 15 23:25:57 1999 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
+
+ * lib/debug.rb: better display & frame treatment.
+
+Thu Jul 15 21:16:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_each): returns self for normal termination;
+ returns nil for break.
+
+ * string.c: non bang methods (e.g. String#sub) should always
+ return copy of the receiver.
+
+Thu Jul 15 21:09:15 1999 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
+
+ * eval.c (find_file): do not add empty string to the path.
+
+ * configure.in (with-search-path): should not add empty string if
+ the option is not supplied.
+
+Thu Jul 15 17:49:08 1999 Ryo HAYASAKA <hayasaka@univ21.u-aizu.ac.jp>
+
+ * ext/tcltklib/tcltklib.c: move `#include "ruby.h"' forward.
+
+Thu Jul 15 16:54:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.3.5 - version 1.4 alpha
+
+Wed Jul 14 23:45:33 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * eval.c (ruby_init): initialize for the first time only.
+
+Tue Jul 13 00:15:19 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (rb_hash_index): re-defined; method to retrieve a key
+ from the value.
+
+ * hash.c (Init_Hash): member? should be re-defined for Hash.
+
+Tue Jul 12 13:54:51 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * io.c (rb_file_sysopen): wrong number of argument.
+
+Mon Jul 12 11:52:35 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_f_missing): class name included in message.
+
+ * eval.c (print_undef): better error message.
+
+Sun Jul 11 05:36:17 1999 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
+
+ * lib/debug.rb: patch to show proper position.
+
+Fri Jul 9 23:56:14 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * dln.c (dln_find_1): path conv. moved to conv_to_posix_path.
+
+ * dln.c (conv_to_posix_path): path conv. should be done.
+
+Fri Jul 9 10:26:47 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * random.c (RANDOM_NUMBER): should place parentheses.
+
+Fri Jul 8 11:00:51 1999 Shugo Maeda <shugo@netlab.co.jp>
+
+ * numeric.c (fix_div): division may be out of fixnum range.
+
+ * bignum.c (bigdivmod): proper sign calculation to result.
+
+Wed Jul 7 18:27:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * st.c (st_delete_safe): was modifying wrong slot.
+
+Mon Jul 5 13:17:46 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * gc.c (rb_gc_call_finalizer_at_exit): close all files at exit.
+
+Fri Jul 2 18:00:21 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/Mail/README: Mail-0.3.0 added to the distribution.
+
+Fri Jul 2 01:45:32 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_fastmap): avoid allocation of register
+ variables for each invocation of re_match(). Suggested by
+ Zasukhin Ruslan <ruslan@paradigmasoft.com>. Thanks.
+
+Tue Jun 29 20:39:24 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * ext/tk/lib/tk.rb (TkVariable): bug fix; should value type check
+ be added?
+
+ * string.c (rb_str_each_line): a bug in paragraph mode.
+
+ * ruby.c (load_file): shifted too much to skip #!.
+
+Tue Jun 29 06:50:21 1999 Wakou Aoyama <wakou@fsinet.or.jp>
+
+ * lib/CGI.rb: 0.30 - cleanup release, incompatible.
+
+ * lib/telnet.rb: 0.22 - timeout added.
+
+Tue Jun 29 10:49:25 1999 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
+
+ * configure.in: better Rhapsody support.
+
+ * lib/mkmf.rb: Rhapsody/NEXTSTEP support.
+
+Tue Jun 29 01:42:13 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/pty/pty.c (chld_changed): should use POSIX.1 style wait.
+
+Mon Jun 28 21:07:36 1999 KIMURA Koichi <kbk@kt.rim.or.jp>
+
+ * ext/extmk.rb.nt: wrong result for have_library().
+
+Mon Jun 28 15:24:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * missing/isinf.c: OSF/1 raises SIGFPE on one()/zero().
+
+ * regex.c (re_search): should search til EOS, for patterns may
+ match beyond the end of range.
+
+Mon Jun 28 12:49:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_f_select): should not accept Time objects as an
+ argument for it is time interval.
+
+ * process.c (rb_f_sleep): ditto.
+
+ * file.c (test_s): should return nil for false condition.
+
+Mon Jun 28 12:23:52 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * bignum.c (rb_dbl2big): typo.
+
+ * file.c (rb_f_test): ditto.
+
+ * string.c (rb_str_crypt): wrong message.
+
+Sun Jun 27 19:50:11 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * eval.c (rb_f_exit): should have treat signed integer status, not
+ VALUE.
+
+ * process.c (rb_f_exit_bang): should work like exit().
+
+Sun Jun 27 16:21:32 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * string.c (rb_str_rindex): wrong position to search.
+
+Sat Jun 26 04:05:30 1999 Takaaki Tateishi <ttate@jaist.ac.jp>
+
+ * configure.in (configure_args): --with-search-path to specify
+ additional ruby search path.
+
+ * ruby.c (ruby_prog_init): additional search path.
+
+Fri Jun 25 13:09:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * pack.c (pack_unpack): needed to initialize natint.
+
+ * regex.c (re_compile_pattern): add start_paren to avoid too much
+ finalization on maybe_finalize_jump.
+
+Fri Jun 25 13:07:20 1999 Koji Oda <oda@bsd1.qnes.nec.co.jp>
+
+ * missing/isinf.c: include "config.h" added.
+
+Fri Jun 25 07:25:05 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * lib/mkmf.rb: initialize $(topdir).
+
+ * ext/extmk.rb.in (install_rb): install lib/*.rb properly.
+
+ * configure.in (linux): specifies -rpath on --enable-shared.
+
+ * configure.in (aix): ruby.imp must reside in $(topdir).
+
+Thu Jun 24 19:11:29 1999 Yoshida Masato <yoshidam@yoshidam.net>
+
+ * parse.y (rb_str_extend): multi-byte identifier in expression
+ interpolation in strings.
+
+ * parse.y (yylex): support multi-byte char identifiers.
+
+Thu Jun 24 15:27:13 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (f_arg): check duplicate argument names.
+
+ * gc.c (rb_gc_mark): marking wrong member for NODE_ARGS.
+
+ * string.c (rb_str_rindex): POSITION specifies start point, not
+ end point.
+
+Thu Jun 24 13:00:17 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (print_mbc): wrong boundary.
+
+ * pack.c (uv_to_utf8): raises ArgError for too big value.
+
+Thu Jun 24 11:02:51 1999 Yoshida Masato <yoshidam@yoshidam.net>
+
+ * pack.c (uv_to_utf8): mask needed.
+
+Wed Jun 23 21:03:56 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * ruby.h (struct RFile): remove iv_tbl from struct. instance
+ variables are handled as generic ivs.
+
+Wed Jun 23 22:06:26 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * pack.c (utf8_to_uv): pack to 7 bytes sequence.
+
+ * pack.c (uv_to_utf8): wrong boundary.
+
+ * pack.c (pack_unpack): should treat as unsigned long.
+
+Wed Jun 23 15:10:11 1999 Inaba Hiroto <inaba@sdd.tokyo-sc.toshiba.co.jp>
+
+ * parse.y (parse_string): failed to parse nested braces.
+
+ * parse.y (parse_regx): nested braces within #{} available.
+
+Wed Jun 23 11:18:38 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (slow_search): wrong shift width for mbcs.
+
+ * eval.c (rb_thread_save_context): should not clear th->locals.
+
+Wed Jun 23 02:06:14 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): UMINUS binds too tight with digits. changed so
+ that -2**2 => -4.
+
+ * parse.y (close_paren): `do' for expr termination now works it
+ used to be.
+
+Wed Jun 22 18:26:42 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * pack.c (pack_pack): should initialize local variable `j'.
+
+Wed Jun 22 15:24:59 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * parse.y (here_document): a bug for multiline heredoc.
+
+Tue Jun 22 15:06:36 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ext/socket/socket.c (ruby_socket): forgot to return fd
+ explicitly.
+
+Tue Jun 22 13:34:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * rubyio.h (MakeOpenFile): should initialize member `iv_tbl'.
+
+Wed Jun 22 10:35:51 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * io.c (rb_io_gets_internal): getc(3) may not set errno on
+ interrupt.
+
+Mon Jun 21 22:39:28 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (call_required_libraries): ruby_sourceline should be
+ cleared before loading libraries.
+
+ * io.c (set_stdin): do not use reopen(), so that we don't need to
+ dup original stdin before assigning $stdin.
+
+Mon Jun 21 18:04:27 1999 Ryo HAYASAKA <hayasaka@univ21.u-aizu.ac.jp>
+
+ * ext/dbm/dbm.c: include <cdefs.h> for solaris 2.6.
+
+Mon Jun 21 15:59:47 1999 Nobuyoshi Nakada <nobu.nokada@softhome.net>
+
+ * ext/socket/socket.c (ip_addrsetup): forgot to put `else'.
+
+Mon Jun 21 15:38:37 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (fptr_finalize): remove rb_syswait() invocation to avoid
+ wait4(2) within GC. rb_syswait() moved to rb_io_fptr_close().
+
+Mon Jun 21 12:05:59 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * dir.c (dir_s_glob): remove MAXPATHLEN restriction.
+
+ * ext/md5/md5init.c (md5_hexdigest): should have used "%02x".
+
+Sun Jun 20 19:50:38 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * string.c (rb_str_each_line): should have checked string
+ boundary.
+
+Sat Jun 19 22:24:12 1999 Kenji Nagasawa <kenn@hma.att.ne.jp>
+
+ * OS/2 patch improved.
+
+Fri Jun 18 08:30:17 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * marshal.c (r_byte): add data length check.
+
+ * ext/tcltklib/tcltklib.c (_timer_for_tcl): was doing busy-wait.
+
+Tue Jun 15 10:01:21 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * configure.in: remove trailing slash from interpreter embedded
+ shared library path.
+
+ * configure.in (INSTALL_DLLIB): install shared lib with 0555.
+
+ * instruby.rb: changed mode for shared library into 0555.
+
+Fri Jun 11 23:27:00 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * ext/etc/etc.c (etc_passwd): should return nil, not exception for
+ call after last passwd entry.
+
+Fri Jun 11 15:21:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * gc.c (rb_gc_mark_locations): add safety margin 1.
+
+ * eval.c (ruby_run): should protect toplevel node tree.
+
+ * ext/etc/etc.c (etc_group): dumps core if there's no more group.
+
+Fri Jun 11 01:50:25 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (ruby_run): Init_stack() was called too late; local
+ variables happened to be higher (or lower) than stack_start.
+
+Thu Jun 10 16:41:48 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c: do not call `initialize' for IO objects. So with Array,
+ Hash, Range, and Time objects.
+
+ * ext/curses/curses.c (curses_getch): made thread aware using
+ rb_read_check().
+
+ * ext/curses/curses.c (window_getch): ditto.
+
+ * ext/curses/curses.c (curses_getstr): made (partially) thread
+ aware using rb_read_check().
+
+ * ext/curses/curses.c (window_getstr): ditto.
+
+ * io.c (rb_read_check): new function to help making something
+ (like extension libraries) thread aware.
+
+ * eval.c (is_defined): `defined? super' should be true even for
+ private superclass methods.
+
+Fri Jun 10 13:42:10 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * pack.c (pack_pack): template `Z' should be allowed.
+
+Wed Jun 9 13:26:38 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_loading): modified to avoid nested race
+ condition of require().
+
+ * ext/tcltklib/tcltklib.c (ip_invoke): queue invocation on non
+ main threads.
+
+ * ext/tcltklib/tcltklib.c (lib_mainloop): flush invocation
+ queues periodically.
+
+ * version.c (ruby_show_version): now print the message to stdout.
+
+ * version.c (ruby_show_copyright): ditto.
+
+Tue Jun 8 00:00:34 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * pack.c (pack_unpack): append sentinel (NUL) to the string.
+
+ * ext/md5/md5init.c (md5_hexdigest): new method to obtain
+ printable hash string.
+
+ * ext/md5/md5init.c (md5_update): should return self.
+
+ * pack.c (pack_pack): undocumented template 'U' for UTF8.
+
+ * pack.c (pack_unpack): ditto.
+
+ * marshal.c (r_byte): should replace getc() with rb_getc().
+
+ * io.c (rb_getc): getc() replacement uses READ_DATA_PENDING() and
+ rb_thread_wait_fd().
+
+Mon Jun 7 23:23:38 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (rb_mod_clone): should call CLOSESETUP().
+
+ * eval.c (bind_clone): should call CLONESETUP() for new clone.
+
+Sat Jun 5 10:32:40 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_oct): binary (e.g. 0b10111) support.
+
+ * variable.c (rb_const_set): raise warning, not exception.
+
+ * parse.y (yycompile): initialize parser internal variables.
+
+ * parse.y (close_paren): set lex_state to EXPR_PAREN after closing
+ parenthesis.
+
+ * parse.y (yylex): returns kDO for `do' right after method_call.
+
+Thu Jun 3 11:05:30 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * regex.c (read_backslash): should decode \b within class.
+
+Thu Jun 3 01:06:18 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * dln.c (dln_load): AIX improvement (aix_findmain removed).
+
+Wed Jun 2 00:41:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * pack.c (pack_unpack): new undocumented template Z which strips
+ stuff after first null.
+
+ * pack.c (pack_pack): should preserve specified length of the
+ resulting string.
+
+Tue Jun 1 15:29:33 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c (ruby_socket): retry after GC, if socket(2)
+ failed on EMFILE or ENFILE.
+
+ * ext/socket/socket.c (sock_s_socketpair): ditto.
+
+ * eval.c (module_setup): need to add PUSH_VAR/POP_VAR to clear
+ dyna vars link list.
+
+ * version.h (RUBY_RELEASE_CODE): integer macro constant for source
+ version detection.
+
+Sun May 30 22:19:12 1999 Kenji Nagasawa <kenn@tcp-ip.or.jp>
+
+ * ext/socket/socket.c: emx/gcc 0.9d now fixes things about
+ AF_UNIX.
+
+ * process.c: OS/2 EMX kludge.
+
+ * Makefile.in (strncasecmp.o): added dependency.
+
+Mon May 31 16:06:28 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.3.4 - preliminary release for 1.4
+
+Mon May 31 15:57:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_fptr_close): close on IO which main_thread is
+ waiting cause serious exception, that vanishes the actual fd
+ closing. Invocation of rb_thread_fd_close() is deferred
+ a little.
+
+Sat May 29 18:27:13 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * regex.c (re_match): stack boundary check needed.
+
+Sat May 29 12:27:00 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/tcltklib/tcltklib.c (ip_invoke): proper ref count management
+ to avoid leak. I HATE REF COUNTING!!
+
+ * eval.c (ruby_run): moved ruby_require_libraries() to handle `-r'
+ from ruby_options() to avoid stack corruption for threads
+ created in libraries.
+
+Sat May 29 02:22:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_yield_0): when `for' appeared in blocks, it
+ introduced new scope for local variables.
+
+Fri May 28 17:16:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_squeeze_bang): squeeze AND of the arguments.
+ UNDOCUMENTED.
+
+ * string.c (rb_str_count): new UNDOCUMENTED method.
+
+ * string.c (rb_str_delete_bang): delete AND of the arg ranges.
+ UNDOCUMENTED FEATURE for 1.3.x.
+
+ * ext/socket/socket.c (setipaddr): re-wrote using ip_addrsetup().
+
+ * ext/socket/socket.c (ip_addrsetup): decode symbolic address
+ <broadcast>.
+
+Thu May 27 12:27:42 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (tr_trans): should handle NUL (\0) within strings.
+
+Tue May 25 16:45:11 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_f_syscall): syscall may return values other than zero
+ on success.
+
+ * regex.c (re_match): handle empty loop properly (hopefully).
+
+ * regex.c (re_match): remove empty group check, because it does
+ not help non-grouping parentheses (?:..).
+
+ * regex.c (re_compile_fastmap): treating try_next, finalize_push
+ wrong way.
+
+ * regex.c: remove some obsolete functions such as
+ group_match_null_string_p().
+
+Mon May 24 14:47:54 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (read_backslash): read backslash by regex.
+
+Sun May 23 19:44:58 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ext/pty/pty.c (getDevice): portability patch.
+
+Fri May 21 23:01:26 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/socket/getaddrinfo.c (GET_AI): should set error code.
+
+Thu May 20 03:43:44 1999 Jun-ichiro itojun Hagino <itojun@itojun.org>
+
+ * ext/socket/socket.c: you should use sockaddr_storage to handle
+ IPv6 addresses.
+
+ * ext/socket/getaddrinfo.c (getaddrinfo): prevent retrieving
+ AF_INET6 address if hints.ai_flags == AI_PASSIVE.
+
+Wed May 19 12:27:07 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (exec_end_proc): should protect exceptions.
+
+ * gc.c (run_final): ditto.
+
+ * parse.y (f_rest_arg): allow just * for rest arg.
+
+ * parse.y (mlhs_basic): allow * without formal argument.
+
+ * regex.c (re_match): the variable `part' should be initialized.
+
+Tue May 18 15:25:45 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_search): a bug in range adjustment.
+
+Tue May 18 11:35:59 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * dln.c (conv_to_posix_path): path_len argument added.
+
+Mon May 17 12:26:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * numeric.c (fix_rev): should treat Fixnum as signed long.
+
+ * eval.c (massign): add strict number check for yield (and call).
+
+ * eval.c (proc_arity): new method to return number of arguments.
+
+ * eval.c (method_arity): new method to return number of arguments.
+
+ * parse.y (read_escape): char may be unsigned.
+
+ * string.c (rb_str_succ): ditto.
+
+ * string.c (tr_trans): ditto.
+
+ * object.c (Init_Object): methods `&', `|', `^' are added to nil.
+
+ * range.c (rb_range_beg_len): it should be OK for [0..-len-1].
+
+ * regex.c (re_search): search for byte literal within mbcs.
+
+ * regex.c (is_in_list): parsh
+
+ * regex.c (re_compile_fastmap): should have not alter the loop
+ variable `j' if TRASLATE_P().
+
+ * regex.c (re_compile_pattern): escaped characters should be read
+ by PATFETCH_RAW(c).
+
+Sat May 15 11:23:51 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): endline2 (\Z) should not match at the point
+ between a newline and end-of-line, like endline ($).
+
+ * class.c (include_class_new): should initialize iv_tbl to share
+ between module and iclass.
+
+Fri May 14 08:50:27 1999 Akira Endo <akendo@t3.rim.or.jp>
+
+ * regex.c (re_compile_fastmap): it should be k != 0 to skip.
+
+Fri May 14 12:46:56 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_load): a bug in old marshal format support.
+
+ * instruby.rb: make site_ruby directory.
+
+Fri May 14 10:18:02 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * regex.c (re_match): a bug in inline `.*' etc.
+
+Fri May 14 09:58:46 1999 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * ruby.c (addpath): should have specified string length.
+
+Thu May 13 10:40:44 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval_string_wrap): new function.
+
+ * regex.c (re_compile_pattern): POSIX line match should alter
+ behavior for `^' and `$' to begbuf and endbuf2 respectively.
+
+ * ext/pty/pty.c: un-ANSI-fy function arguments.
+
+Wed May 12 14:19:38 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * struct.c (iv_get): in case of inheritance of generated struct
+ class, __member__ and __size__ should also be inherited.
+ Thanks for Pros Yeboah <yeboah@tu-harburg.de>.
+
+ * io.c (rb_f_gets_internal): should check number of arguments
+ before checking rb_rs == rb_default_rs. Thanks for Koji Arai
+ <JCA02266@nifty.ne.jp>.
+
+Tue May 11 08:29:28 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): .?, .+ did not work.
+
+Mon May 10 00:59:33 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * lib/jcode.rb: forgot to squeeze on reverse (complement) case.
+
+ * string.c (tr_squeeze): should not set modify flag to be honest,
+ if the string is not modified.
+
+ * signal.c (Init_signal): SIGTERM should not be handled.
+
+ * regex.c (re_match): seeking for longest match is now optional,
+ which can be set using RE_OPTION_POSIXMATCH. This satisfies
+ POSIX longest match as much as Emacs's posix-* functions, which
+ are known to be incomplete.
+
+Sun May 9 13:04:01 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/socket/socket.c (sock_s_getaddrinfo): conversion from
+ Fixnums to C integers needed.
+
+Sun May 9 11:51:43 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * range.c (range_eqq): reverse condition.
+
+ * range.c (range_s_new): default should be end inclusive.
+
+Sat May 8 03:27:51 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c (thread_connect): replace nasty
+ rb_thread_fd_writable() with rb_thread_select().
+
+Fri May 7 20:49:00 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * ext/socket/getaddrinfo.c (inet_pton): wrong parameter to
+ inet_aton().
+
+ * ext/socket/addrinfo.h (__P): silly cut and paste typo.
+
+Fri May 7 17:03:57 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * dir.c (glob): removed GPL'ed glob.c completely.
+
+Fri May 7 08:17:19 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/sdbm/extconf.rb: sdbm extension added to the distribution.
+
+Fri May 7 01:42:20 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c (tcp_s_gethostbyname): avoid using struct
+ sockaddr_storage.
+
+Thu May 6 13:21:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_indexes): should not use rb_ary_concat().
+
+Thu May 4 12:34:18 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * parse.y (parse_string): there should be newline escape by
+ backslashes in strings.
+
+ * parse.y (parse_qstring): ditto.
+
+Mon May 3 04:37:20 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * ext/tcltklib/extconf.rb: better search for libX11.
+
+ * range.c (range_s_new): embarrassing =/== typo.
+
+ * re.c (Init_Regexp): failed to set default kcode.
+
+Mon May 3 02:39:55 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * ext/socket/socket.c (open_inet): typo (res and res0).
+
+Tue May 4 02:07:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * mkconfig.rb: leave undefined $(VARIABLE) unexpanded in the
+ Config::CONFIG hash table.
+
+Mon May 3 09:37:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): expand exactn{n} at compile time.
+ handles stop_paren specially.
+
+ * regex.c (re_compile_pattern): expand x{n} at compile time.
+
+ * regex.c (re_search): posix line match should be checked.
+
+ * regex.c (re_search): a bug in anchor condition.
+
+Fri Apr 30 18:57:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.3.3
+
+ * string.c (rb_str_rindex): position should be END point, not
+ START point.
+
+ * re.c (rb_reg_search): pos means end point on reverse now.
+
+ * array.c (rb_ary_s_create): should clear ary->ptr to avoid
+ potential gc crash.
+
+Fri Apr 30 15:24:58 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/addrinfo.h: compatibility hack for ipv4.
+
+ * ext/socket/socket.c: itojun's ipv6 patches applied.
+
+ * ext/socket/extconf.rb: detect ipv6 features based on itojun's
+ ipv6 patches.
+
+ * ext/extmk.rb.in (enable_config): can handle --enable-xxx now.
+
+ * lib/mkmf.rb (enable_config): ditto.
+
+Fri Apr 30 05:22:23 1999 Shugo Maeda <shugo@netlab.co.jp>
+
+ * string.c (rb_str_aset): last index should not append.
+
+Thu Apr 29 18:55:31 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * dln.c (conv_to_posix_path): remove const from args.
+
+ * ruby.c (rubylib_mangle): remove Fatal(), the obsolete function.
+
+Tue Apr 27 14:11:45 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (fname): lazy workaround for keywords did not work well.
+
+ * ext/extmk.rb.in: `--with-xxx=yyy' argument configuration.
+
+ * lib/mkmf.rb: ditto.
+
+ * misc/ruby-mode.el: forgot to handle $`.
+
+ * ext/extmk.rb.in: better AIX link support proposed by
+ <komatsu@sarion.co.jp>.
+
+Mon Apr 26 16:46:59 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/extmk.rb.in: AIX shared library support modified.
+
+ * ext/aix_mksym.rb: ditto.
+
+ * configure.in: ditto.
+
+ * sprintf.c (rb_f_sprintf): should allocate proper sized buffer
+ for float numbers.
+
+Sat Apr 24 00:00:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (operation): syntax like `a.[]=(1,2)' is allowed.
+
+Fri Apr 23 23:54:09 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (argf_binmode): binmode method added to ARGF.
+
+Fri Apr 23 13:55:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_f_chomp): should assign the result to $_. or maybe
+ sub/gsub/chop/chomp should NOT assign $_ altogether.
+
+Thu Apr 22 16:50:54 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_callcc): call scope_dup() for all scopes in
+ the interpreter stack.
+
+Tue Apr 20 11:24:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_dump): `#' should be escaped.
+
+Tue Apr 20 02:32:42 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (parse_regx): option /p for posix match added.
+
+ * re.c (rb_reg_desc): did not print options properly.
+
+ * io.c (rb_file_s_open): initialize was called twice.
+
+Mon Apr 19 18:56:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * configure.in (DEFAULT_KCODE): can specify default code for
+ $KCODE by --with-default-kcode=(euc|sjis|utf8|none).
+
+ * regex.c (IS_A_LETTER): a byte sequence shorter than mbc should
+ not match with \w etc.
+
+Mon Apr 19 13:49:11 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (eval): should restore ruby_dyna_vars.
+
+Fri Apr 16 21:40:43 1999 Nobuyoshi Nakada <gea02117@nifty.ne.jp>
+
+ * io.c (f_backquote): pipe_open may return nil.
+
+ * io.c (f_open): rb_io_open may return nil.
+
+ * io.c (io_s_foreach): ditto.
+
+ * io.c (io_s_readlines): ditto.
+
+ * io.c (io_defset): wrong message.
+
+Fri Apr 16 15:09:20 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (rb_str2inum): strtoul() returns long, not int.
+
+ * eval.c (rb_load): size of VALUE and ID may be different.
+
+ * util.c (mmprepare): int is too small to cast from pointers.
+
+ * config.guess: avoid 'linux-gnu' for alpha-unknown-linux.
+
+Thu Apr 15 23:46:20 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ruby.c (rubylib_mangle): mangle path by RUBYLIB_PREFIX.
+
+Wed Apr 14 23:52:51 1999 SHIROYAMA Takayuki <psi@fortune.nest.or.jp>
+
+ * node.h (NODE_LMASK): should be long to avoid overflow.
+
+Wed Apr 14 13:14:35 1999 Katsuyuki Komatsu <komatsu@sarion.co.jp>
+
+ * dln.c: AIX dynamic link.
+
+ * ext/aix_ld.rb: ditto.
+
+Wed Apr 14 12:19:09 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * lib/thread.rb: Queue#{enq,deq} added.
+
+Tue Apr 13 17:43:56 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (rb_hash_s_create): Hash::[] acts more like casting.
+
+Tue Apr 13 00:33:52 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_stdio_set): warning for assignment to the variables
+ $std{in,out,err}.
+
+Mon Apr 12 23:12:32 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_reopen): check for reopening same IO.
+
+Fri Apr 9 17:45:11 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (rb_compile_string): bug for nested eval().
+
+ * regex.c (re_match): should pop non-greedy stack items on
+ failure, after best_regs are fixed.
+
+Thu Apr 8 17:30:40 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * pack.c (PACK_LENGTH_ADJUST): need to adjust for `*' length.
+
+Tue Apr 6 23:28:44 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (void_check): add void context checks.
+
+Mon Apr 5 12:23:42 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_s_at): should copy gmt-mode.
+
+ * eval.c (eval_node): preserve ruby_eval_tree.
+
+Fri Apr 2 14:00:34 1999 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
+
+ * lib/debug.rb: wrong command interpreting.
+
+Fri Apr 2 11:46:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.3.2
+
+Fri Apr 2 10:40:04 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_s_pipe): forgot to define IO::pipe.
+
+Thu Apr 1 14:40:46 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (assign): modified for rhs change.
+
+ * parse.y (stmt): unparenthesisized method calls can be right hand
+ side expression of the assignment.
+
+Sat Mar 27 22:42:47 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * ext/nkf/nkf.c (rb_nkf_kconv): check size output_ctr before
+ decrement.
+
+Thu Mar 25 09:11:03 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_s_at): preserve gmt-mode for result.
+
+ * parse.y (rb_compile_string): do not use cur_mid, use
+ compile_for_eval instead.
+
+ * st.c (PTR_NOT_EQUAL): wrong logical condition.
+
+Wed Mar 24 13:06:43 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yycompile): should clear cur_mid after compilation.
+
+ * io.c (next_argv): need to check type for ARGV.shift.
+
+ * eval.c (blk_copy_prev): need to preserve outer scope as well as
+ outer frames.
+
+ * parse.y (rb_compile_string): return can appear within eval().
+
+Tue Mar 23 10:15:07 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * configure.in: AC_C_CONST check added.
+
+Tue Mar 23 02:07:35 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_plus): preserve gmt-mode for result.
+
+Mon Mar 22 01:32:37 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): adjust line numbers before expression
+ interpolation within strings.
+
+ * eval.c (rb_eval): defined? returns nil for false condition.
+
+ * numeric.c (num_nonzero_p): returns nil for false condition.
+
+Sat Mar 20 13:07:43 1999 Keiju Ishitsuka <keiju@rational.com>
+
+ * lib/weakref.rb: avoid leak for two weakrefs for one object.
+
+Fri Mar 19 11:26:45 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * eval.c (ruby_run): needed to eval END{} on exit.
+
+ * eval.c (rb_exit): ditto.
+
+Fri Mar 19 02:17:27 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * signal.c (Init_signal): handles terminating signals HUP, TERM,
+ QUIT, PIPE, etc.
+
+Thu Mar 18 15:47:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (rb_big_and): bug in sign calculation.
+
+ * bignum.c (rb_big_or): ditto.
+
+ * io.c (rb_f_select): forgot to use to_io to retrieve IO, after
+ calling select(2).
+
+Tue Mar 16 19:54:31 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ext/extmk.rb.in: static linking cause infinite make loop.
+
+Tue Mar 16 18:50:04 1999 Yoshida Masato <yoshidam@yoshidam.net>
+
+ * ext/socket/socket.c (tcp_s_gethostbyname): typo, not NUM2INT(),
+ but INT2NUM().
+
+ * ext/socket/socket.c (mkhostent): ditto.
+
+Tue Mar 16 12:31:44 1999 Ryo HAYASAKA <hayasaka@cheer.u-aizu.ac.jp>
+
+ * file.c (utime_internal): suppress warning by const.
+
+ * time.c (time_gmtime): ditto.
+
+Tue Mar 16 10:23:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_clone): Time object can be cloned.
+
+Tue Mar 16 03:13:10 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * ruby.c (load_file): argv[argc] should be NULL.
+
+Mon Mar 15 22:12:08 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * sprintf.c (rb_f_sprintf): typo in arg_num check at exit.
+
+Mon Mar 15 16:42:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_dup): dup2 should copy class too.
+
+Mon Mar 15 15:12:53 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
+
+ * lib/mkmf.rb: install program relative path check.
+
+Mon Mar 15 14:05:25 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (rb_reg_s_new): 2nd argument is now option.
+ Regexp::EXTENDED can be specified.
+
+Fri Mar 12 10:47:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_index): str.index("") should always match at
+ offset point.
+
+ * string.c (rb_str_upto): can specify end point exclusion.
+
+ * string.c (rb_str_index): negative offset.
+
+ * regex.c (re_match): begline should not match at the point
+ between a newline and end-of-string. endline neither.
+
+ * regex.c (re_compile_pattern): context_indep_anchors .
+
+ * parse.y (parse_regx): need not to push backslashes before
+ escaped characters.
+
+ * eval.c (rb_thread_join): re-raises exception within target.
+
+Fri Mar 12 01:09:36 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * ext/readline/readline.c (readline_s_vi_editing_mode): wrong
+ number of arguments.
+
+Fri Mar 12 02:12:50 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * pack.c (PACK_ITEM_ADJUST): "a".unpack("C3") => [97, nil, nil]
+
+Thu Mar 11 18:23:50 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * ext/socket/socket.c (Init_socket): UDPsocket was omitted.
+
+Thu Mar 11 16:43:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * pack.c (PACK_LENGTH_ADJUST): push fixed number of items per
+ template to result array.
+
+ * pack.c (pack_unpack): I/N/C etc. push nil in the array for "".
+
+Tue Mar 9 00:19:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (ruby_unsetenv): use ruby_setenv(name, 0).
+
+ * hash.c (env_delete): ditto.
+
+ * string.c (rb_str_upto): do not check `beg<end' to generate
+ strings for the pattern like "a".upto("#a").
+
+ * range.c (range_each): treat strings as special case.
+
+ * range.c (range_each): no longer use upto for generic cases.
+
+Sun Mar 7 14:21:32 1999 IKARASHI Akira <ikarashi@itlb.te.noda.sut.ac.jp>
+
+ * string.c (rb_str_index): wrong end point calculation.
+
+Sat Mar 6 02:19:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (match_index): MatchingData#index(n) added.
+
+ * array.c (rb_ary_subseq): ary[n..-1] returns an sub-array unless
+ n is too small negative index.
+
+ * re.c (rb_reg_match_method): Regexp#match(str) added.
+
+ * array.c (rb_ary_indexes): understands ranges as indexes.
+
+ * re.c (match_size): MatchingData#size added.
+
+Fri Mar 5 01:04:57 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_fill): modified for range.
+
+ * array.c (rb_ary_aset): a[n..m] revisited.
+
+Thu Mar 4 14:23:29 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_subseq): a[n..m] revisited.
+
+ * parse.y (method_call): allow Const::method{}.
+
+ * array.c (rb_ary_replace_method): should replace original array.
+
+Thu Mar 4 02:30:22 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * configure.in: remove --disable-thread, thread feature is no
+ longer optional.
+
+Thu Mar 4 00:32:17 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
+
+ * parse.y (read_escape): wrong arguments for scan_oct,scan_hex.
+
+Wed Mar 3 11:51:53 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c (Init_socket): rename class names as
+ TCPsocket -> TCPSocket etc.
+
+Tue Mar 2 19:46:42 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * configure.in (LDSHARED): use gcc -Wl,-G for solaris with gcc.
+
+Tue Mar 2 17:04:19 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): backslashes do not concatenate comment lines
+ anymore.
+
+Mon Mar 1 14:05:12 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_call0): adjust argv for optional arguments. super
+ without arguments emit superclass method with the value from
+ optional arguments. enabled as experiment.
+
+Sun Feb 28 14:04:07 1999 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * parse.y (nextc): backslash at the eof cause infinite loop
+
+Sun Feb 28 11:01:26 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * time.c (make_time_t): month range check added.
+
+Sat Feb 27 02:36:05 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (Init_Regexp): add escape as alias of quote.
+
+ * re.c (rb_reg_s_quote): char-code can be specified now.
+
+Fri Feb 26 18:45:36 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
+
+ * eval.c (error_print): bug for error message with newlines.
+
+Fri Feb 26 12:00:04 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (make_time_t): future check modified to allow 1969-12-31
+ at certain timezone.
+
+ * time.c (time_arg): year >= 1000 should be past.
+
+ * version.c (Init_version): constant RELEASE_DATE added.
+
+Fri Feb 26 01:08:30 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_substr): returns nil for out-of-range access.
+
+ * array.c (rb_ary_subseq): returns nil for out-of-range access.
+
+ * array.c (rb_ary_store): negative index message has changed.
+
+ * string.c (rb_str_aset): reallocation needed.
+
+ * string.c (rb_str_aset): allow char append to the string.
+
+Thu Feb 25 23:30:17 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * time.c (time_load): tm_year should be packed in 17 bits, not 18.
+
+Thu Feb 25 12:50:25 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * missing/dup2.c: replaced by public domain version.
+
+ * time.c (make_time_t): add `future check' in loops.
+
+ * object.c (rb_num2dbl): forbid implicit conversion from nil, or
+ strings. thus `Time.now + str' should raise error.
+
+ * object.c (rb_Float): convert nil into 0.0.
+
+ * object.c (rb_Integer): conversion method improved.
+
+Thu Feb 25 03:27:50 1999 Shugo Maeda <shugo@netlab.co.jp>
+
+ * eval.c (rb_call): should handle T_ICLASS properly.
+
+Thu Feb 25 00:04:00 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * error.c (Init_Exception): global function Exception() removed.
+
+ * variable.c (rb_class2name): returns "nil"/"true"/"false" for them.
+
+ * time.c (time_dump): time marshaling format compressed size from
+ 11 bytes to 8 bytes. thanx to tadf@kt.rim.or.jp.
+
+ * eval.c (rb_obj_call_init): should specify arguments explicitly.
+
+Wed Feb 24 15:43:28 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): comment concatenation requires preceding space
+ before backslash at the end of line.
+
+ * io.c (rb_f_pipe): global pipe is obsolete now.
+
+ * object.c (Init_Object): remove true.to_i, false.to_i.
+
+Tue Feb 23 14:21:41 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): warn if identifier! immediately followed by `='.
+
+Tue Feb 23 12:32:41 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * eval.c (rb_load): tilde expansion moved to find_file.
+
+ * eval.c (find_file): tilde expansion added.
+
+Tue Feb 23 10:50:20 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (require_method): require can handle multiple fnames.
+
+ * hash.c (rb_hash_foreach_iter): hash key may be nil.
+
+Mon Feb 22 17:44:02 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): should not pop failure point on success for
+ non-greedy matches.
+
+ * io.c (Init_IO): remove global_functions getc, readchar, ungetc,
+ seek, tell, rewind.
+
+Sat Feb 20 22:54:26 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * numeric.c (rb_num2long): no implicit conversion from boolean.
+
+Sat Feb 20 09:58:42 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * numeric.c (flo_to_s): portable Infinity and NaN support.
+
+Sat Feb 20 07:13:31 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * io.c (rb_file_sysopen): forgot to initialize a local variable.
+
+Fri Feb 19 23:05:07 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_subseq): range check changed.
+
+ * marshal.c: increment MARSHAL_MINOR for Time format change.
+
+ * time.c (time_old_load): support old marshal format.
+
+ * time.c (time_load): changed for new format Y/M/D/h/m/s/usec.
+
+ * time.c (time_dump): marshal dump format has changed.
+
+Fri Feb 19 00:25:57 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_arg): should reject "sep\0" and such.
+
+ * time.c (time_plus): Time#+ should not receive Time object
+ operand.
+
+ * string.c (rb_str_substr): negative length raises exception now.
+
+ * array.c (beg_len): if end == -1, it points end of the array.
+
+ * array.c (rb_ary_subseq): negative length raises exception now.
+
+Thu Feb 18 20:57:04 1999 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * time.c (rb_strftime): strftime() may return 0 on success too.
+
+ * time.c (time_strftime): `\0' within format string should not be
+ omitted in the result.
+
+ * time.c (rb_strftime): zero length format.
+
+ * time.c (time_to_a): yday start with 1 now.
+
+ * time.c (time_zone): support for long timezone name.
+
+ * time.c (time_yday): yday start with 1 now.
+
+ * time.c (time_minus): minus calculation was wrong.
+
+ * time.c (time_minus): sec, usec should be at least `long', maybe
+ they should be `time_t'.
+
+ * time.c (time_plus): addition with float was wrong.
+
+ * time.c (time_to_s): support for long timezone name.
+
+ * time.c (time_gm_or_local): too far future check moved.
+
+ * time.c (time_arg): treat 2 digit year as 69-99 => 1969-1999,
+ 00-68 => 2000-2068
+
+Thu Feb 18 03:56:47 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * missing/fnmatch.c: moved to missing directory.
+
+Wed Feb 17 16:22:26 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * struct.c (rb_struct_alloc): actual initialization now be done in
+ `initialize'.
+
+Wed Feb 17 09:47:15 1999 okabe katsuyuki <hgc02147@nifty.ne.jp>
+
+ * regex.c (re_search): use mbclen() instead of ismbchar().
+
+ * re.c (rb_reg_s_quote): should handle mbchars properly.
+
+Wed Feb 17 01:25:26 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): stop comment concatenation by backslash follows
+ after >= 0x80 char. may cause problem with Latin chars.
+
+ * eval.c (error_print): exception in rb_obj_as_string() caused
+ SEGV. protect it by PUSH_TAG/POP_TAG.
+
+ * error.c (exc_exception): `Exception#exception' should return self.
+
+Wed Feb 17 01:12:22 1999 Hirotaka Ichikawa <hirotaka.ichikawa@tosmec.toshiba.co.jp>
+
+ * configure.in: BeOS patch.
+
+Tue Feb 16 14:25:00 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): should reallocate mbc space for
+ character class unless current_mbctype is ASCII.
+
+Mon Feb 15 15:48:30 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * configure.in: specify `-Wl,-E' only for GNU ld.
+
+Mon Feb 15 11:43:22 1999 GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp>
+
+ * array.c (rb_inspecting_p): should return Qfalse.
+
+Sun Feb 14 22:36:40 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * sprintf.c (rb_f_sprintf): `%G' was omitted.
+
+Sun Feb 14 12:47:48 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * numeric.c (Init_Numeric): allow divide by zero on FreeBSD.
+
+ * numeric.c (Init_Numeric): FloatDomainError added.
+
+ * configure.in (AC_REPLACE_FUNCS): add checks for functions
+ isinf, isnan, and finite.
+
+Sat Feb 13 01:24:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_create_0): should protect th->thread.
+
+Fri Feb 12 16:16:47 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
+
+ * string.c (rb_str_inspect): wrong mbc position.
+
+Fri Feb 12 16:21:17 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_fd_close):
+
+ * io.c (rb_io_fptr_close): tell scheduler that fd is closed.
+
+ * io.c (rb_io_reopen): ditto.
+
+ * io.c (READ_CHECK): check if closed after thread context switch.
+
+ * ext/socket/socket.c (bsock_close_read): do not check
+ the return value from shutdown(2).
+
+ * ext/socket/socket.c (bsock_close_write): ditto.
+
+ * ext/socket/socket.c (sock_new): need to dup(fd) for close_read
+ and close_write.
+
+ * parse.y (here_document): handle newlines within #{}.
+
+ * regex.h: should replace symbols for ruby.
+
+Fri Feb 12 00:46:28 1999 Shugo Maeda <shugo@netlab.co.jp>
+
+ * marshal.c (r_object): should update the method name in message.
+
+ * marshal.c (w_object): limit should be converted into Fixnum.
+
+Wed Feb 10 15:20:03 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): empty pattern should not cause infinite
+ pattern match loop.
+
+ * regex.c (re_compile_pattern): RE_OPTIMIZE_ANCHOR for /.*/, not
+ for /(.|\n)/.
+
+ * numeric.c (fix_pow): `fixnum**nil' should raise TypeError.
+
+ * bignum.c (rb_big_pow): need to normalize results.
+
+Wed Feb 10 01:42:41 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * numeric.c (fix_pow): `(5**1).type' should be Integer.
+
+Tue Feb 9 01:22:49 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): do not ignore newlines in mbchars.
+
+ * io.c (rb_file_s_open): mode can be specified by flags like
+ open(2), e.g. File::open(path, File::CREAT|File::WRONLY).
+
+ * io.c (rb_f_open): bit-wise mode flags for pipes
+
+ * io.c (Init_IO): bit flags for open.
+
+Sat Feb 6 22:56:21 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_sub_bang): should not overwrite match data by
+ regexp match within the block.
+
+ * string.c (rb_str_gsub_bang): ditto.
+
+Sat Feb 6 03:06:17 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (match_getter): accessing $~ without matching caused SEGV.
+
+Fri Feb 5 22:11:08 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * parse.y (yylex): binary literal support, like 0b01001.
+
+ * parse.y (yylex): octal numbers can contain `_'s.
+
+ * parse.y (yylex): warns if non-octal number follows immediately
+ after octal literal.
+
+ * parse.y (yylex): now need at least one digit after prefix such
+ as 0x, or 0b.
+
+ * bignum.c (rb_str2inum): recognize binary numbers like 0b0101.
+
+Fri Feb 5 03:26:56 1999 Yasuhiro Fukuma <yasuf@big.or.jp>
+
+ * ruby.c (proc_options): -e without program prints error.
+
+Fri Feb 5 00:01:50 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (terms): needed to clear heredoc_end.
+
+ * numeric.c (flo_div): allow float division by zero.
+
+Thu Feb 4 11:56:24 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * missing/strtod.c: for compatibility.
+
+ * configure.in (strtod): add strtod compatible check.
+
+ * numeric.c (rb_num2long): missing/vsnprintf.c does not support
+ floating points.
+
+ * numeric.c (flo_to_s): ditto.
+
+Wed Feb 3 23:02:12 1999 Yoshida Masato <yoshidam@yoshidam.net>
+
+ * regex.c (re_compile_pattern): use ismbchar() to get next char.
+
+ * regex.c (re_search): wrong mbchar shift.
+
+ * re.c (rb_reg_search): needed to reset $KCODE after match.
+
+ * regex.c (re_compile_fastmap): mbchars should match with \w.
+
+Wed Feb 3 22:35:12 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * parse.y (yylex): too big float raise warning, not error.
+
+Tue Feb 2 23:41:42 1999 Yoshida Masato <yoshidam@yoshidam.net>
+
+ * regex.c (re_match): wrong boundary.
+
+ * regex.c (IS_A_LETTER): re_mbctab[c] may not be 1 for mbc.
+
+ * regex.c (re_search): mbchar support for shifting ranges.
+
+ * regex.c (MBC2WC): wrong conversion.
+
+Wed Feb 3 15:03:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (parse_regx): need to escape parens if terminators are
+ not any kind of parenthesis.
+
+ * parse.y (parse_qstring): ditto.
+
+ * parse.y (parse_string): ditto.
+
+Tue Feb 2 17:11:26 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * string.c (rb_str_gsub_bang): too small realloc condition.
+
+Mon Feb 1 10:01:17 1999 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * parse.y (yylex): range check for the float literal.
+
+Sat Jan 30 18:34:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (usage): -h option to show brief command description.
+
+Sat Jan 30 08:45:16 1999 IKARASHI Akira <ikarashi@itlb.te.noda.sut.ac.jp>
+
+ * lib/cgi-lib.rb: cookie support added.
+
+Sat Jan 30 13:38:24 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): mbchars should match with \w
+ within character class. Was matching with \W.
+
+ * regex.c (re_match): \w should match with multi byte characters,
+ not its first byte.
+
+Sat Jan 30 10:06:41 1999 Yoshida Masato <yoshidam@yoshidam.net>
+
+ * re.c (rb_reg_s_new): UTF-8 flag handle (/u, /U).
+
+ * re.c (rb_kcode): $KCODE handle for UTF-8.
+
+Sat Jan 30 01:51:16 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_delete_if): RTEST() missing.
+
+ * hash.c (delete_if_i): ditto.
+
+ * enum.c (Init_Enumerable): select (=find_all), detect (=find)
+ added as aliases.
+
+Fri Jan 29 21:32:19 1999 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * hash.c (rb_f_setenv): SEGV caused by small typo.
+
+Fri Jan 29 00:15:58 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * lib/parsedate.rb (parsedate): support date format like
+ 23-Feb-93, which is required by HTTP/1.1.
+
+ * variable.c (find_class_path): avoid calling rb_iv_set().
+
+ * eval.c (backtrace): do not need to modify $SAFE internally.
+
+ * variable.c (classname): inline __classid__ access.
+
+ * eval.c (THREAD_ALLOC): needed to initialize wrapper.
+
+ * lib/ftools.rb (makedirs): allows slash at the end of the path.
+
+ * numeric.c (rb_fix_induced_from): ensure result to be Fixnum.
+
+Thu Jan 28 17:31:43 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * numeric.c (flo_to_s): float format changed to "%16.10g".
+
+Thu Jan 28 02:13:11 1999 Yoshinori Toki <toki@freedom.ne.jp>
+
+ * array.c (rb_ary_store): expand allocated buffer by 3/2.
+
+Wed Jan 27 17:50:02 1999 Kazuhiro HIWADA <hiwada@kuee.kyoto-u.ac.jp>
+
+ * bignum.c (dbl2big): raised error if double is too big to cast
+ into long. check added.
+
+Wed Jan 27 03:16:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (rb_mod_const_at): can't list constants of the
+ untainted objects in safe mode.
+
+ * class.c (method_list): can't list methods of untainted objects
+ in safe mode.
+
+Tue Jan 26 02:40:41 1999 GOTO Kentaro <gotoken@math.sci.hokudai.ac.jp>
+
+ * prec.c: Precision support for numbers.
+
+Thu Jan 21 19:08:14 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_f_raise): calls `exception' method, not `new'.
+
+ * error.c (exc_exception): renamed from `new'.
+
+Wed Jan 20 03:39:48 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yycompile): rb_in_compile renamed to ruby_in_compile.
+
+ * ruby.c (load_file): define DATA if __END__ appeared in script.
+
+Tue Jan 19 14:57:51 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (here_document): need to protect lex_lastline.
+
+ * parse.y (yylex): disable %//, %'', %``.
+
+Tue Jan 19 05:01:16 1999 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * array.c (beg_len): round range value too much.
+
+Mon Jan 18 13:02:27 1999 Kuroda Jun <jkuro@dwe.co.jp>
+
+ * hash.c (env_keys): strchr() may return NULL.
+
+Mon Jan 18 17:51:47 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * instruby.rb (wdir): install libruby.a in archdir.
+
+ * lib/ftools.rb (install): removes file before installing.
+
+Mon Jan 18 16:55:31 1999 MAEDA shugo <shugo@aianet.ne.jp>
+
+ * eval.c (rb_callcc): experimental continuation support.
+
+Sun Jan 17 19:45:37 1999 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * pack.c (pack_pack): nil packing caused SEGV.
+
+Sat Jan 16 13:18:03 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_concat): character (fixnum) can be append to
+ strings
+
+ * array.c (rb_ary_unshift): unshift returns array.
+
+Sat Jan 16 01:39:19 1999 Yoshida Masato <yoshidam@tau.bekkoame.ne.jp>
+
+ * string.c (rb_str_split_method): UTF-8 support.
+
+ * regex.c: UTF-8 support.
+
+Thu Jan 14 00:42:55 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_gsub_bang): forget to add offset for null match.
+
+ * eval.c (rb_thread_local_aset): can't modify in tainted mode.
+
+ * hash.c (env_each_key): avoid generating temporary array.
+
+Wed Jan 13 23:58:50 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (rb_f_setenv): name and value can be tainted.
+
+Wed Jan 6 02:42:08 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (Init_Bignum): forgot to define Bignum#===.
+
+ * gc.c (gc_sweep): if add_heap() is called during GC, objects on
+ allocated heap page(s) are not marked, should not be recycled.
+
+ * gc.c (gc_sweep): should refer latest freelist.
+
+ * gc.c (id2ref): modified to support performance patch.
+
+ * object.c (rb_obj_id): performance patch (no bignum for id).
+
+Tue Jan 5 01:56:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * config.guess: merge up-to-date from autoconf 2.12.
+
+ * array.c (rb_ary_join): avoid calling rb_protect_inspect() till
+ it is really needed.
+
+ * object.c (rb_obj_inspect): show detailed information for the
+ instance variables (infinite loop can avoid now).
+
+ * struct.c (rb_struct_inspect): avoid infinite loop.
+
+Sun Jan 3 01:37:58 1999 Takao KAWAMURA <kawamura@ike.tottori-u.ac.jp>
+
+ * misc/ruby-mode.el (ruby-end-of-defun): moved too much.
+
+ * misc/ruby-mode.el (ruby-mode-variables): set paragraph-separator
+ for the mode.
+
+ * misc/ruby-mode.el: proper font-lock for `def' and `nil' etc.
+
+Sat Jan 2 17:09:06 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_jump_tag): new api to invoke JUMP_TAG. tag values
+ can obtained from rb_eval_string_protect()/rb_load_protect().
+
+ * eval.c (rb_rescue): now catches all exceptions but SystemExit.
+
+ * eval.c (rb_eval_string_protect): eval string with protection.
+
+ * eval.c (rb_load_protect): load file with protection.
+
+ * io.c (rb_io_puts): avoid infinite loop for cyclic arrays.
+
+ * eval.c (rb_thread_local_aref): thread local hash tables.
+
+ * object.c (rb_equal): check exact equal before calling `=='.
+
+Thu Dec 31 22:28:53 1998 MAEDA shugo <shugo@aianet.ne.jp>
+
+ * eval.c (rb_f_require): feature names should be provided with
+ DLEXT extension.
+
+ * marshal.c (Init_marshal): need to provide `marshal.so'.
+
+Wed Dec 30 02:29:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (classname): do not call rb_ivar_set().
+
+ * eval.c (ruby_run): finalizers were called too early.
+
+Fri Dec 25 12:19:30 1998 Fukuda Masaki <fukuda@wni.co.jp>
+
+ * gc.c (rb_gc_mark): should not return on FL_EXIVAR.
+
+Fri Dec 25 11:56:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * gc.c (gc_mark): proper scanning for temporary region.
+
+ * eval.c (TMP_ALLOC): protection for C_ALLOCA was broken.
+
+Thu Dec 24 18:26:04 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * development version 1.3 released.
+
+Thu Dec 24 00:17:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_load): top self should be set properly.
+
+ * variable.c (classname): check __classpath__ if it is defined.
+
+ * variable.c (classname): invalid warning at -v with static linked
+ ruby interpreter.
+
+ * eval.c (is_defined): modified for expr::Const support.
+
+ * eval.c (rb_eval): invoke method expr::Const if expr is not class
+ nor module.
+
+ * parse.y (primary): enable expr::identifier as method
+ invocation.
+
+Wed Dec 23 03:04:36 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): avoid too many loop pops for (?:..).
+
+Tue Dec 22 18:01:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental version 1.1d1 released.
+
+Mon Dec 21 01:33:03 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (TMP_PROTECT): add volatile to ensure GC protection.
+
+ * string.c (rb_str_gsub_bang): calculate buffer size properly.
+
+ * parse.y (lex_get_str): needed to return Qnil at EOS.
+
+ * eval.c (find_file): check policy modified, raise exception
+ immediately for tainted load_path.
+
+ * hash.c (rb_f_setenv): do not depend on setenv() nor putenv().
+
+Thu Dec 17 06:29:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/tk/tkutil.c (tk_s_new): use rb_obj_instance_eval(), instead
+ of rb_yield_0().
+
+ * eval.c (rb_f_require): forgot to call find_file in some cases.
+
+ * eval.c (rb_f_require): `require "feature.so"' to load dynamic
+ libraries. old `require "feature.o"' is still OK.
+
+ * eval.c (rb_eval): yield without value dumped core.
+
+Wed Dec 16 16:28:31 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental version 1.1d0 (pre1.2) released.
+
+Wed Dec 16 10:43:34 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_search): bound check before calling re_match().
+
+Tue Dec 15 13:59:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * error.c (exc_to_s): returns class name for unset mesg.
+
+ * error.c (exc_initialize): do not initialize @mesg by "".
+
+ * parse.y (nextc): __END__ should handle CR+LF newlines.
+
+Wed Dec 9 13:37:12 1998 MAEDA shugo <shugo@aianet.ne.jp>
+
+ * pack.c (encodes): use buffering for B-encoding.
+
+ * pack.c (pack_pack): Q-encoding by 'M'.
+
+Tue Dec 8 14:10:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (generic_ivar_get): any object can have instance
+ variables now. great improvement.
+
+ * variable.c (rb_name_class): do not set __classpath__ by default,
+ use __classid__ instead.
+
+Mon Dec 7 22:08:22 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.h (struct RFile): IO objects can have instance variables now.
+
+ * parse.y (primary): allows `def obj::foo; .. end'.
+
+Mon Dec 7 18:24:50 1998 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * ruby.c (set_arg0): $0 support for HP-UX.
+
+Mon Dec 7 01:30:28 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * dln.c (dln_strerror): better error messages on win32.
+
+Sat Dec 5 23:27:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (here_document): indentable here-doc delimiter by
+ `<<-'. Proposed by Clemens <c.hintze@gmx.net>. Thanks.
+
+Thu Dec 3 16:50:17 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/extmk.rb.in (realclean): trouble on install.
+
+Sun Nov 29 22:25:39 1998 Takaaki Tateishi <ttate@jaist.ac.jp>
+
+ * process.c (f_exec): check number of argument.
+
+Thu Nov 26 17:27:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1c9 released.
+
+Wed Nov 25 13:07:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_dup): do not copy additional data (STR_NO_ORIG).
+
+ * parse.y (yycompile): reduce known memory leak (hard to remove).
+
+Wed Nov 25 03:41:21 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * st.c (st_init_table_with_size): round size up to prime number.
+
+Sat Nov 21 23:27:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (rb_hash_aset): reduce copying key strings.
+
+ * gc.c (looks_pointerp): declare as inline function if possible.
+
+ * st.c (PTR_NOT_EQUAL): compare hash values first before calling
+ comparing function.
+
+ * st.c (ADD_DIRECT): save hash value in entries to reduce hash
+ calculation.
+
+ * string.c (rb_str_gsub_bang): avoid rb_scan_args() to speed-up.
+
+ * string.c (rb_str_sub_bang): ditto.
+
+Sat Nov 21 18:44:06 1998 Masaki Fukushima <fukusima@goto.info.waseda.ac.jp>
+
+ * time.c (time_s_now): had memory leak.
+
+ * ext/md5/md5init.c (md5_new): had memory leak.
+
+ * ext/md5/md5init.c (md5_clone): ditto.
+
+Fri Nov 20 23:23:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * lib/delegate.rb: do not propagate hash and eql?.
+
+Thu Nov 19 01:40:52 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sample/ruby-mode.el (ruby-expr-beg): failed to find reserved
+ word boundary.
+
+ * eval.c (rb_eval): avoid calling `concat' method. calls
+ rb_ary_concat() directly for efficiency.
+
+ * eval.c (rb_eval): actual rest arguments extended arrays too much.
+
+Wed Nov 18 14:30:24 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * class.c (rb_define_global_function): global functions now be
+ module function of the Kernel.
+
+Wed Nov 18 10:48:09 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (read_all): SEGV on large files.
+
+Tue Nov 17 18:11:20 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1c8 released.
+
+Tue Nov 17 16:58:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (arg): assignment to attribute name start with capital
+ should be allowed.
+
+ * eval.c (thread_alloc): needed to mark terminated threads too.
+
+Tue Nov 17 12:33:48 1998 Motoyuki Kasahara <m-kasahr@sra.co.jp>
+
+ * ext/extmk.rb.in (create_makefile): Set `libdir' to `@libdir@',
+ Set `pkglibdir' to `$libdir/$(RUBY_INSTALL_NAME)'.
+
+Tue Nov 17 10:30:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sprintf.c (f_sprintf): %l%%c -> %%l%c
+
+Tue Nov 17 01:08:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (ret_args): distinguish `a' and `*a' for the arguments
+ of yield and return.
+
+ * eval.c (rb_eval): flip3 should work like sed.
+
+ * eval.c (rb_eval): flip{2,3} now have independent state for each
+ scope to work fine with thread.
+
+Mon Nov 16 23:26:29 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (primary): exec else clause if no exception raised.
+
+Sun Nov 15 15:44:07 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * ext/extmk.rb.in (install): bug in target.
+
+Sat Nov 14 11:02:05 1998 Motoyuki Kasahara <m-kasahr@sra.co.jp>
+
+ * Makefile.in (install): Give the argument `$(DESTDIR)' to
+ `instruby.rb'.
+
+ * instruby.rb: Recognize ARG[0] as `destdir'.
+
+ * instruby.rb: Give the argument `destdir' to `extmk.rb'.
+
+ * ext/extmk.rb.in: Recognize ARG[1] as `$destdir'.
+
+ * instruby.rb: Create the installation directories (bindir, libdir,
+ archdir, pkglibdir, archdir, and mandir) under `destdir', and
+ install all files under there.
+
+ * ext/extmk.rb.in: Likewise.
+
+Sat Nov 14 10:56:55 1998 Motoyuki Kasahara <m-kasahr@sra.co.jp>
+
+ * instruby.rb: Add the variable `pkglibdir'.
+
+ * instruby.rb: Set the variable `libdir' to `$(libdir)', not
+ `$(libdir)/$(ruby_install_name)'. `libruby.so' and `libruby.so.LIB'
+ are installed at `libdir'.
+
+ * instruby.rb: Set the variable `archdir' to `$(pkglibdir)/$(arch)'.
+
+Fri Nov 13 19:43:29 1998 KIMURA Koichi <kbk@kt.rim.or.jp>
+
+ * missing/nt.c (SafeFree): wrong free offset.
+
+Thu Nov 12 20:11:53 1998 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * sample/ruby-mode.el: wrong highlight.
+
+ * parse.y (parse_regx): newline in regexp was ignored.
+
+Wed Nov 11 10:54:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (here_document): <<'FOO' should not escape anything.
+
+ * parse.y (here_document): bare << here-doc available, even though
+ it's deprecated.
+
+ * file.c (rb_file_s_readlink): return value should be tainted.
+
+ * ext/etc/etc.c (setup_passwd): information (eg. GCOS name) should
+ be tainted (modified at Perl Conference).
+
+Tue Nov 10 00:22:11 1998 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * configure.in: elf support for FreeBSD 3.x
+
+Tue Nov 10 00:05:43 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): here document available in eval.
+
+Mon Nov 9 17:55:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1c7 released.
+
+Fri Nov 6 19:25:27 1998 Takao KAWAMURA <kawamura@ike.tottori-u.ac.jp>
+
+ * sample/ruby-mode.el: font-lock patch.
+
+Thu Nov 5 15:42:22 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sample/README, lib/README: simple description for each file.
+
+Wed Nov 4 18:14:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (assign): attribute assignment should be called as public.
+
+Tue Nov 3 23:36:39 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_dump): dumps core for negative char value.
+
+ * regex.c (re_compile_pattern): out of boundary access for empty
+ regexp.
+
+Mon Nov 2 22:54:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_aset): `str[str]' replaces first match.
+
+Mon Nov 2 18:24:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (thread_create): was accessing modified status.
+
+Sun Nov 1 01:18:52 1998 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * gc.c (xrealloc): size 0 needs round up to 1.
+
+Sat Oct 31 23:18:34 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_split_method): negative LIMIT means number of
+ split fields are unlimited, as in perl.
+
+ * string.c (rb_str_split_method): if LIMIT is unspecified,
+ trailing null fields are stripped.
+
+Sat Oct 31 04:16:14 1998 Inaba Hiroto <inaba@st.rim.or.jp>
+
+ * string.c (str_aref): regexp index SEGVed.
+
+Fri Oct 30 14:33:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (reg_match): returns nil for unmatch.
+
+ * dir.c (dir_entries): new method.
+
+ * eval.c (block_pass): do not push block, substitute it.
+
+Fri Oct 30 01:28:52 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * range.c (range_check): avoid <=> check for Fixnums.
+
+ * array.c (rb_ary_aset): accept negative index.
+
+Wed Oct 28 22:00:54 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): access out of boundary fixed.
+
+Wed Oct 28 11:37:42 1998 TAMITO <tommy@valley.ne.jp>
+
+ * io.c (f_select): fd number comparison bug.
+
+Tue Oct 27 23:07:11 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sample/ruby-mode.el (ruby-parse-region): forgot to support %w()
+ style array literal.
+
+ * eval.c (rb_eval): unused block raises warning.
+
+Mon Oct 26 09:37:53 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (dvar_asgn_push): dvar pushed too many times if
+ variable-in-block first appear in loops.
+
+Sun Oct 25 22:59:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (set_list_bits): was using wrong offset.
+
+Thu Oct 22 00:07:11 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_obj_method): method retrieved from tainted object
+ should be tainted too.
+
+ * eval.c (method_call): safe_level should be restored during
+ Method#call.
+
+Wed Oct 21 14:21:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (Init_IO): new constants IO::SEEK_{SET,CUR,END}.
+
+ * io.c (rb_f_ungetc): ungetc pushes a char back into STDIN.
+
+Mon Oct 19 11:50:00 1998 Motoyuki Kasahara <m-kasahr@sra.co.jp>
+
+ * ext/extmk.rb: Load '@top_srcdir@/lib/find.rb', not
+ '../lib/find.rb'.
+
+ * ext/extmk.rb: Distinguish between `top_srcdir' and `topdir'.
+
+ * Makefile.in (CFLAGS): Add `-I.'.
+
+ * Makefile.in (lex.c): Give `@srcdir@/keywords' to gperf, not
+ `keywords'.
+
+ * instruby.rb: Use `CONFIG["bindir"]', instead of `prefix + "/bin"'.
+
+ * instruby.rb: Use `CONFIG["libdir"]', instead of `prefix + "/lib"'.
+
+ * instruby.rb Use `CONFIG["mandir"]', instead of `prefix + "/man"'.
+
+ * instruby.rb (wdir): Add the variable to preserve the current
+ working directory.
+
+ * instruby.rb: Chdir to wdir before install `config.h' and
+ `rbconfig.rb'.
+
+Mon Oct 19 10:07:01 1998 EGUCHI Osamu <eguchi@shizuokanet.ne.jp>
+
+ * eval.c (rb_eval): reduce recursive calls to rb_eval().
+
+Fri Oct 16 15:31:45 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_new_internal): timeval must be positive.
+
+Thu Oct 15 13:54:48 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (arg): local variables can be accessed within right side
+ expression in assignment, notably in blocks.
+
+Wed Oct 14 00:18:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (Init_Array): Array#=== is now for equal check, not
+ inclusion check.
+
+ * parse.y (when_args): `when a, *b' style new syntax for array
+ expansion in `case'.
+
+Tue Oct 13 14:30:32 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (rb_obj_untaint): taint marks can be unset.
+
+ * eval.c (rb_eval): taint propagation for embedded strings.
+
+Mon Oct 12 13:27:15 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_call0): check stack depth more frequently.
+
+Mon Oct 12 08:08:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_p): can print even in secure mode.
+
+Sun Oct 11 22:50:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (rb_const_set): taint check for modification.
+
+ * variable.c (rb_ivar_set): taint check for modification.
+
+ * string.c (rb_str_modify): taint check for modification.
+
+ * hash.c (rb_hash_modify): taint check for modification.
+
+ * array.c (rb_ary_modify): taint check for modification.
+
+ * ruby.h (FL_TAINT): taint for all objects, not only strings.
+
+Fri Oct 9 17:01:14 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (read_all): read() returns "" at immediate EOF.
+
+ * io.c (io_read): read(nil) read all until EOF.
+
+Thu Oct 8 13:32:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_dump): marshal can dump Time object now.
+
+ * marshal.c (Init_marshal): rename marshal methods `_dump_to' to
+ `_dump', `_load_from' to `_load'.
+
+ * parse.y (rb_intern): "+=".intern generates proper symbol.
+
+Mon Oct 5 18:31:53 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1c6 released.
+
+Fri Oct 2 14:22:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_search): `/\s*(--)$/ =~ "- --"' did not match,
+ because of wrong optimize condition.
+
+Mon Oct 1 01:55:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (rb_intern): should not raise exceptions.
+
+ * parse.y (yylex): symbol like `:foo?=' should not be allowed.
+
+ * ext/extmk.rb.in: makes *.a for static link modules.
+
+Wed Sep 30 14:13:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_start): supports making a subclass of the
+ Thread class.
+
+Tue Sep 29 17:46:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_thread_join): join is now an instance method.
+
+Fri Sep 25 12:01:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): `@foo!' should be an error.
+
+Thu Sep 24 14:55:06 1998 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * ext/etc/etc.c (Init_etc): wrong field definition.
+
+Thu Sep 17 17:09:05 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_reopen): was creating FILE* for wrong fd.
+
+Tue Sep 15 05:28:11 1998 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * regex.c (re_compile_pattern): forgot to fixup for the pattern
+ like (?=(A)|(B)).
+
+Tue Sep 15 01:06:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (rb_io_gets_internal): do not set $_ by default, only
+ gets/readline set the variable.
+
+ * eval.c (rb_f_load): load toplevel class is set to anonymous
+ module if safe_level >= 5, to encapsulate modification.
+
+ * eval.c (rb_f_load): set frame properly.
+
+ * string.c (rb_str_each_line): do not set $_.
+
+Mon Sep 14 14:42:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): beginning and end of the string, do not
+ automatically match `\b'.
+
+ * string.c (scan_once): consume at least on character.
+
+ * regex.c (re_search): wrong behavior for negative range.
+
+Sat Sep 12 21:21:26 1998 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * regex.c (re_search): range value should be maintained.
+
+Thu Sep 10 10:55:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (backref_error): yyerror does not understand formats.
+
+Tue Sep 8 18:05:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1c5 released.
+
+Tue Sep 8 10:03:39 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_each_line): wrong line splitting with newline at
+ top of the string.
+
+ * string.c: non bang methods return copied string.
+
+ * eval.c (f_END): needed to initialize frame->argc;
+
+Fri Sep 4 11:27:40 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (bigadd): proper sign combination.
+
+ * regex.c (re_search): wrong return value for \A.
+
+Thu Sep 3 14:08:14 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1c4 released.
+
+Tue Sep 1 10:47:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (slow_search): do not compare llen and blen. llen may
+ be longer than blen, if little contains 0xff.
+
+ * regex.c (mbctab_euc): set 0x8e as multibyte character.
+
+ * string.c (str_inspect): mask character for octal output.
+
+Mon Aug 31 15:32:41 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_search): use calculated offset if exactn is the
+ first opcode in the compiled regexp.
+
+ * regex.c (bm_search): use Boyer-Moore search for simple search.
+
+ * regex.c (must_instr): wrong length check if pattern includes
+ byte escape by 0xff.
+
+ * regex.c (re_compile_pattern): need not to check current_mbctype.
+
+Sat Aug 29 16:31:40 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_check_safe_str): avoid calling rb_id2name() in normal
+ cases to speed-up.
+
+ * eval.c (thread_raise): do not save context of terminated thread.
+
+ * regex.c (re_compile_pattern): mask \nnn over 256.
+
+Sat Aug 29 02:09:46 1998 Koji Arai <JCA02266@nifty.ne.jp>
+
+ * sprintf.c (f_sprintf): wrong buffer size check.
+
+Fri Aug 28 01:57:04 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): accepts (?ix-ix) and (?ix-ix:...).
+
+Fri Aug 28 12:25:33 1998 Hiroshi Igarashi <igarashi@ueda.info.waseda.ac.jp>
+
+ * ruby.c (ruby_require_modules): load modules in appearing order.
+
+Fri Aug 28 01:57:04 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): accepts (?ix-ix) and (?ix-ix:...).
+
+Thu Aug 27 12:54:28 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1c3 released.
+
+Wed Aug 26 14:40:56 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): check whether ruby_class is properly set,
+ before accessing it.
+
+ * eval.c (rb_obj_instance_eval): ruby_class should be Qnil for
+ special objects like Fixnums.
+
+ * ext/tkutil/tkutil.c (Init_tkutil): removes calls to
+ rb_yield_0(). used instance_eval() instead in the tk.rb.
+
+Wed Aug 26 11:47:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): pop non-greedy stack elements on success.
+
+Wed Aug 26 09:25:35 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ruby.h: add #define environ for cygwin32.
+
+Tue Aug 25 08:57:41 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (rb_ary_sort_bang): temporarily freeze sorting array.
+
+Mon Aug 24 18:46:44 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * dln.c (dln_find_1): path check was too strict.
+
+Mon Aug 24 15:28:11 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * parse.y (f_arglist): opt_nl added after f_args.
+
+Fri Aug 21 01:06:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c: grand renaming on socket.c.
+
+ * ext/socket/socket.c (inet_aton): supply inet_aton for those
+ systems that do not have it.
+
+ * ext/socket/socket.c (setipaddr): use inet_aton instead of
+ inet_addr.
+
+ * ext/socket/socket.c (tcp_s_gethostbyname): new method: works
+ like Socket.gethostbyname but returning array contains ip-addrs
+ as octet decimal string format like "127.0.0.1".
+
+ * ext/socket/socket.c (mkhostent): return format changed to
+ [host, aliases, type, ipaddr..] as documented.
+
+Wed Aug 19 00:31:09 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_ctl): forgot to place TRAP_END at right position.
+
+Fri Aug 14 11:01:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (call_trace_func): save __FILE__, __LINE__ before
+ executing trace_func, since trace function should not corrupt
+ line number information.
+
+Thu Aug 13 15:09:02 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (ary_s_new): was marking unallocated region on GC.
+
+Tue Aug 11 11:57:35 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1c2 released.
+
+Mon Aug 10 14:05:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * process.c (f_system): removed fflush(stdin).
+
+Fri Aug 7 17:44:44 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * error.c (err_snprintf): replace sprintf for fixed sized buffer,
+ with snprintf to avoid buffer over-run. For systems which does
+ dot provide snprintf, missing/snprintf.c added.
+
+Wed Aug 5 00:47:35 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (rb_reg_search): recycle match object.
+
+Mon Aug 3 09:17:55 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (rb_str_gsub_bang): do not allocate temporary string.
+
+ * string.c (rb_str_sub_bang): use inline replace.
+
+Wed Jul 29 00:36:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (hash_s_new): the default value can be specified.
+
+ * hash.c (hash_default): method to set the default value.
+
+ * hash.c (hash_aref): now returns the default value.
+
+Tue Jul 28 13:03:25 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (ary_s_new): argument to specify initial value is added.
+
+ * array.c (ary_s_new): specifies size, not capacity.
+
+Mon Jul 27 12:39:34 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_replace): zero fill for expansion gap.
+
+ * regex.c (mbctab_euc): set flags on for 0xA1-0xFE. suggested by
+ <inaba@st.rim.or.jp>.
+
+ * string.c (str_inspect): consider current_mbctype.
+
+Sun Jul 26 15:37:11 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * array.c (ary_s_new): Array.new(1<<30) dumps core.
+
+Fri Jul 24 13:40:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1c1 released.
+
+Fri Jul 24 02:10:22 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * marshal.c (r_bytes2): allocated buffer size was too short.
+
+ * marshal.c (w_object): saves all options, not only casefold flag.
+
+ * re.c (reg_clone): now copies options properly.
+
+ * re.c (reg_get_kcode): code number was wrong.
+
+Thu Jul 23 13:11:32 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_attr): argument should be symbol or string.
+
+Wed Jul 22 11:59:34 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (calculate_must_string): wrong offset added.
+
+Wed Jul 22 11:59:59 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * st.c (rehash): still had a GC problem. fixed.
+
+Tue Jul 21 13:19:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (gc_mark_threads): crashed on GC before thread allocation.
+
+ * st.c (rehash): GC during rehash caused SEGV.
+
+Tue Jul 21 01:25:10 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sprintf.c (f_sprintf): integer formatter totally re-written.
+
+ * sprintf.c (remove_sign_bits): support uppercase hexadecimal.
+
+Sat Jul 18 00:14:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sprintf.c (f_sprintf): proper sign position for %X and %O.
+
+Fri Jul 17 14:10:20 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1c0 released.
+
+Fri Jul 17 08:01:49 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * process.c (f_exec): Check_SafeStr() added.
+
+ * process.c (f_system): Check_SafeStr() moved before fork().
+
+Thu Jul 16 22:58:48 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (scan_once): substrings to the block should not be
+ tainted. use reg_nth_match(), not str_substr().
+
+ * string.c (str_substr): needed to transfer taint.
+
+Thu Jul 16 16:15:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * gc.c (xmalloc): object allocation count added to GC trigger.
+
+ * eval.c (thread_save_context): avoid marking uninitialized stack
+ in thread_mark. GC may be triggered by REALLOC_N().
+
+Wed Jul 15 15:11:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_31.
+
+Wed Jul 15 15:05:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (thread_create): exit() and abort() in threads now
+ forwarded to main_thread.
+
+Tue Jul 14 14:03:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (obj_instance_variables): list names that is not
+ instance variables.
+
+ * gc.c (GC_MALLOC_LIMIT): choose smaller limit value.
+
+Mon Jul 13 12:39:38 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (str2cstr): should not return NULL.
+
+Fri Jul 10 11:51:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (gettable): needed to add dyna_in_block() check.
+
+Thu Jul 9 17:38:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_30.
+
+Thu Jul 9 16:01:48 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sprintf.c (fmt_setup): format specifier for long needed.
+
+ * sprintf.c (f_sprintf): ditto.
+
+ * numeric.c (fix2str): ditto.
+
+ * eval.c (thread_create): no more ITIMER_REAL.
+
+ * eval.c (thread_create): thread finalization needed before
+ aborting thread if thread_abort is set.
+
+Wed Jul 8 18:17:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (big_pow): abandon power by bignum (too big).
+
+Tue Jul 7 13:58:43 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_catch): add C level catch/throw feature.
+
+Mon Jul 6 15:18:09 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (arg): proper return values for `||=' and `&&='.
+
+Fri Jul 3 16:05:11 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_29.
+
+Fri Jul 3 11:20:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * marshal.c (r_byte): byte should not extend sign bit.
+
+ * numeric.c (fix_mul): use FIX2LONG() instead of FIX2INT() for
+ 64bit architectures.
+
+ * marshal.c (r_bytes): remove weird casting between pointer and int.
+
+ * process.c (proc_setsid): new method Process#setsid().
+
+Thu Jul 2 12:49:21 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * marshal.c (w_object): remove `write_bignum' label for 64bit
+ architectures.
+
+ * marshal.c (r_bytes): needs int, not long.
+
+Wed Jul 1 14:21:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * numeric.c (flo_plus): should not allow addition with strings.
+
+Wed Jul 1 13:09:01 1998 Keiju ISHITSUKA <keiju@rational.com>
+
+ * numeric.c (num_uminus): wrong coerce direction.
+
+Tue Jun 30 10:13:44 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (f_p): accepts arbitrary number of arguments.
+
+ * eval.c (rb_yield_0): there's some case that iterator_p() returns
+ true even if the_block was not set. check added.
+
+Tue Jun 30 01:05:20 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (BEGIN_CALLARGS): adjust the_block before evaluating the
+ receiver's value and the arguments.
+
+Fri Jun 26 18:02:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_28.
+
+Fri Jun 26 11:01:26 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * string.c (str_aset_method): needed to convert to string.
+
+Thu Jun 25 02:05:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_search): optimize for `.*' at beginning of the
+ pattern.
+
+ * regex.c (re_search): optimize for character class repeat at
+ beginning of the pattern.
+
+ * regex.c (re_compile_pattern): detect optimization potential for
+ the compiled patterns.
+
+Thu Jun 25 00:02:26 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * re.c (reg_s_new): flag value was wrong.
+
+Wed Jun 24 23:45:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_search): wrong anchor handling for reverse search.
+
+Wed Jun 24 02:18:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (mlhs): `((a,b)),c = [[1,2]],3' assigns a=1,b=2,c=3.
+
+Tue Jun 23 11:46:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): `&&=' and `||=' added.
+
+Sat Jun 20 02:53:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (assignable): nesting local variables should have higher
+ priority than normal local variables for assignment too.
+
+Fri Jun 19 18:28:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_27.
+
+Fri Jun 19 14:34:49 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (assign): support hack for nested multiple assignment.
+
+ * parse.y (mlhs): nested multiple assignment.
+
+ * eval.c (rb_eval): in-block variables now honors static scope.
+
+ * configure.in: RSHIFT check moved to configure.
+
+Thu Jun 18 16:46:04 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_26.
+
+Thu Jun 18 13:37:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * file.c (file_s_ftype): uses lstat(2) instead of stat(2).
+
+ * dir.c (dir_s_glob): there can be buffer overrun, check added.
+
+ * eval.c (f_binding): handles in-block variables declared after
+ binding's generation.
+
+ * numeric.c (flo_floor): floor, ceil, round added to Float.
+
+Wed Jun 17 11:20:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (gettable): nesting local variables should have higher
+ priority than normal local variables.
+
+Tue Jun 16 12:30:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (str2inum): handles `+ddd'.
+
+ * struct.c (make_struct): name parameter can be nil for unnamed
+ structures.
+
+Mon Jun 15 16:30:10 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (class_s_inherited): prohibiting to make subclass of
+ class Class.
+
+ * object.c (module_s_new): support for making subclass of Module.
+
+ * parse.y (yycompile): clear eval_tree before compiling.
+
+Fri Jun 12 17:58:18 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (eval): write back the_dyna_var into the block.
+
+Thu Jun 11 18:19:18 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_25.
+
+ * eval.c (dvar_add_compiling): register dyna_var at compile time.
+
+ * regex.c (re_compile_pattern): RE_DUP_MAX iteration is too big.
+
+Wed Jun 10 15:12:04 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_eof): do not block other threads.
+
+ * signal.c (trap): reserve SIGALRM for thread.
+
+ * eval.c (thread_create): use ITIMER_REAL also to avoid system
+ call blocking.
+
+ * io.c (f_syscall): add TRAP_BEG, TRAP_END around system calls.
+
+ * io.c (io_ctl): add TRAP_BEG, TRAP_END around system calls.
+
+ * enum.c (enum_collect): did not collect false values.
+
+ * array.c (ary_new2): forgot to initialize capa field.
+
+Tue Jun 9 18:36:15 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * string.c (str_split_method): split dumped core for "\xff".
+
+Tue Jun 9 16:22:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_24.
+
+Tue Jun 9 16:04:07 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ext/kconv/kconv.c (kconv_guess): more precise decision for EUC,
+ using jless algorithm (3 sequential EUC hiragana characters).
+
+Tue Jun 9 15:12:44 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/kconv/kconv.c (kconv_guess): wrong guess for EUC as SJIS in
+ some cases (0xe0 - 0xef).
+
+ * gc.c (xmalloc): insert size check for big (negative in signed)
+ allocation size.
+
+Tue Jun 9 02:54:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * lib/parsedate.rb: wday moved to the last in the return values.
+
+Mon Jun 8 10:40:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_split_method): split dumped core for "\0".
+
+Sat Jun 6 22:50:52 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (calculate_must_string): wrong condition for
+ {start,stop}_nowidth.
+
+ * regex.c (re_match): various features imported from GNU regex.c
+ 0.12, such as nested grouping, avoiding infinite loop with empty
+ match, etc.
+
+ * regex.c (register_info_type): now use union.
+
+ * regex.c (re_search): more precise anchor(^) check.
+
+Wed Jun 3 18:07:54 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (reg_raise): check rb_in_compile, not rb_in_eval.
+
+Mon Jun 1 05:26:06 1998 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * string.c (trnext): casting to signed char* needed.
+
+Tue Jun 2 16:00:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c (udp_addrsetup): error check enhanced.
+
+ * ext/socket/socket.c (sock_s_getservbyaname): use strtoul(), if
+ possible.
+
+Sat May 30 07:10:02 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (reg_prepare_re): no more needless regular expression
+ recompile on casefold conditions.
+
+Thu May 28 18:02:55 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (nil_plus): no more `+' method for nil.
+
+Wed May 27 17:33:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (hash_fetch): new method.
+
+ * regex.c (re_search): check whether translate table is set.
+
+Tue May 26 11:39:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_23.
+
+ * parse.y (yylex): no UPLUS/UMINUS for 1st argument if
+ parenthesises are omitted.
+
+Tue May 26 01:09:55 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): (?XI) for turns off the
+ corresponding option.
+
+Mon May 25 12:38:56 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): inline i option (?i).
+
+ * regex.c (re_compile_pattern): inline x option (?x).
+
+ * regex.c (re_compile_pattern): x option for regexp.
+
+ * dir.c (dir_s_open): returns block's evaluated value.
+
+ * io.c (f_open): returns block's evaluated value.
+
+ * ext/curses/curses.c (curses_addstr): nil argument caused SEGV.
+
+Fri May 22 11:52:45 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): push mark on (?:), so that
+ laststart check for {a,b} can be done.
+
+Thu May 21 17:31:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_match): wrong match (too non-greedy) for `{a,b}?'.
+
+ * io.c (io_lineno): new method IO#lineno, IO#lineno=.
+
+Wed May 20 06:04:43 1998 MAEDA shugo <shugo@aianet.ne.jp>
+
+ * BeOS patch.
+
+Wed May 20 16:32:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (BIGDN): use RSHIFT(), instead of mere `>>'.
+
+Tue May 19 16:36:26 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_22.
+
+Tue May 19 16:31:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (assignable): specification changed for in-block
+ variable definition.
+
+ * eval.c (dyna_var_asgn): error in in-block variables' compile
+ time definition.
+
+ * parse.y (str_extend): wrong nesting detection.
+
+Tue May 19 09:47:55 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * numeric.c (num2int): re-defined (extensions may use this).
+
+Mon May 18 16:40:50 1998 MAEDA shugo <shugo@aianet.ne.jp>
+
+ * error.c (get_syserr): BeOS support.
+
+ * configure.in: modified for BeOS.
+
+ * string.c (str_dump): do not call isascii().
+
+ * sprintf.c (remove_sign_bits): forgot to initialize end pointer.
+
+ * glob.c: #include <alloca.h> added.
+
+Mon May 18 14:52:21 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_21.
+
+Mon May 18 03:27:57 1998 MAEDA shugo <shugo@aianet.ne.jp>
+
+ * file.c (file_s_expand_path): optional second argument
+ `default_directory' added.
+
+Sat May 16 22:06:52 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * error.c (RAISE_ERROR): wrong error message
+
+Fri May 15 14:43:25 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_20.
+
+Thu May 14 14:44:21 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * sun4 cc patches for intern.h and regex.h.
+
+Thu May 14 14:03:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * random.c (RANDOM_MAX): guessing proper maximum value for random
+ numbers.
+
+ * random.c (f_rand): use drand48 if possible.
+
+Wed May 13 19:05:20 1998 MAEDA shugo <shugo@aianet.ne.jp>
+
+ * BeOS patches for io.c, error.c and config.guess.
+
+Wed May 13 14:56:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_19.
+
+ * most of the Mac and BeOS patches merged, except path separators.
+
+ * error.c (err_append): generated SyntaxError was String.
+
+ * ruby.h: xxx2INT, xxx2UINT checks values as int, not long.
+
+ * ruby.h: remove typedef's. INT, UINT, UCHAR, USHORT.
+
+Tue May 12 17:38:00 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_18.
+
+Tue May 12 11:38:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * error.c (syserr_errno): returns errno of the SystemCallError.
+
+ * error.c (rb_sys_fail): saves errno in the Exception.
+
+ * error.c (set_syserr): no need to protect syserr_list.
+
+ * error.c (rb_sys_fail): no more bufsize limit.
+
+ * error.c (set_syserr): integer value of errno can be accessed by
+ Errno::EXXX::Errno.
+
+Sun May 10 03:10:33 1998 WATANABE Tetsuya <tetsu@jpn.hp.com>
+
+ * io.c (io_tell etc.): moved from File class to IO class.
+
+Fri May 8 12:26:37 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * pack.c (pack_unpack): should be unsigned int (was signed int).
+
+Thu May 7 16:34:10 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * pack.c (pack_pack): `V', `N' uses newly created NUM2UINT().
+
+ * ruby.h (NUM2UINT): new macro.
+
+ * bignum.c (big2uint): try to convert bignum into UINT.
+
+ * re.c (reg_match): needed to return false for match with nil.
+
+ * gc.c (obj_free): wrong condition to free string.
+
+Wed May 6 21:08:08 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ruby.c (ruby_process_options): modified for DJGPP.
+
+Wed May 6 15:48:03 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_17.
+
+Wed May 6 01:37:39 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c: remove global variable `errat'.
+
+ * eval.c (rb_longjmp): embed error position information in the
+ exception object.
+
+Sat May 2 12:20:02 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (reg_search): supports reverse search.
+
+ * string.c (str_index_method): does update $~ etc.
+
+ * eval.c (f_load): needed to clear the_dyna_vars.
+
+ * eval.c (dyna_var_asgn): do not push dyna_var, which is id == 0.
+
+ * error.c (Init_Exception): NotImplementError is no longer
+ StandardError, which is not handled by default rescue.
+
+Fri May 1 00:35:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (proc_options): `-d' turns on verbose flag too.
+
+ * error.c (exception): last argument may be the superclass of the
+ defining exception(s).
+
+ * io.c (Init_IO): EOFError is now subclass of the IOError.
+
+ * io.c (Init_IO): forgot to define IOError.
+
+ * error.c (Init_Exception): old Exception class renamed to
+ StandardError. Exception now replaces old GlobalExit.
+
+ * error.c (Init_Exception): Exception is now the root of the
+ Global Exits. There's no longer GlobalExit class.
+
+ * util.c (ruby_mktemp): check TMP, TMPDIR first.
+
+Thu Apr 30 01:08:35 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * lib/tk.rb: call 'unknown', if proc not defined.
+
+ * eval.c (handle_rescue): default rescue handles `Exceptional' not
+ only the instance of the `Exception's.
+
+ * eval.c (f_raise): exception can be any object.
+
+ * time.c (time_gm_or_local): call time_gmtime or time_localtime.
+
+ * eval.c (f_raise): raises TypeError if the class which is not a
+ subclass of String is specified (checked in exc_new()).
+
+ * error.c (exc_new): need to check whether invalid class (not a
+ subclass of String) is specified.
+
+Wed Apr 29 21:05:44 1998 WATANABE Hirofumi <eban@os.rim.or.jp>
+
+ * ruby.c (proc_options): option '-e' via tempfile.
+
+Tue Apr 28 15:27:58 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_16.
+
+Tue Apr 28 00:07:38 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (obj_is_proc): type check predicate.
+
+ * eval.c (obj_is_block): ditto.
+
+Mon Apr 27 16:59:17 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/gtk/gtk.c (Init_gtk): use timeout, not idle to avoid
+ consuming CPU too much.
+
+ * lib/tk.rb: use tcltklib#_invoke instead of `_eval'.
+
+Mon Apr 27 16:59:17 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (ary_sort): use dup, not clone.
+
+Mon Apr 27 13:46:27 1998 Tadahiro Maebashi <maebashi@iij.ad.jp>
+
+ * ext/tcltklib/tcltklib.c (ip_invoke): invoke tcl command
+ directly. need not worry about escaping tcl characters.
+
+Mon Apr 27 12:04:43 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * random.c (f_rand): do not call srand() implicitly.
+
+Fri Apr 24 14:35:45 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_15.
+
+ * parse.y (assignable): dyna_var_asgn actually defines nested
+ local variables in outer context.
+
+ * random.c (f_rand): call srand(), if it has not called yet.
+
+ * random.c (f_srand): use tv_usec as the default seed.
+
+ * eval.c (rb_eval): values of nested local variables should be
+ independent.
+
+ * eval.c (rb_yield_0): local variables wrong nested conditions.
+
+Wed Apr 22 23:27:17 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (select_get_io): get IO object by `to_io'.
+
+ * io.c (io_to_io): method to retrieve IO object, from delegating
+ object for example.
+
+Wed Apr 22 16:52:37 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_14.
+
+ * string.c (str_modify): check for embedded pointer reference.
+
+ * gc.c (obj_free): ditto.
+
+ * pack.c (pack_pack): p/P template to embed pointers.
+
+Wed Apr 22 00:07:10 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * array.c (ary_rindex): embarrassing typo.
+
+Tue Apr 21 12:31:48 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_13.
+
+ * configure.in (RUBY_LIB): supports --program-{prefix,suffix}.
+
+ * array.c (ary_rindex): new method.
+
+ * io.c (io_binmode): should return self.
+
+Tue Apr 21 08:23:04 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * parse.y (here_document): calling parse_string with wrong
+ arguments.
+
+ * struct.c (struct_aset): problem member assignment with name.
+
+Mon Apr 20 14:47:49 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_12.
+
+ * time.c (time_arg): args may be string (support for reduced
+ implicit type conversion).
+
+ * lib/base64.rb: changed to use pack/unpack with `m' template.
+
+Mon Apr 20 06:23:20 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (mod_remove_const): new method.
+
+Sat Apr 18 03:53:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (hash_each_with_index): removed. use Enumerable's
+ each_with_index instead.
+
+ * class.c (rb_include_module): check for super modules, since
+ module's included modules may be changed.
+
+Fri Apr 17 21:50:47 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * marshal.c (r_long): r_byte() may return signed byte.
+
+Fri Apr 17 11:58:30 1998 NAGAI Hidetoshi <nagai@dumbo.ai.kyutech.ac.jp>
+
+ * ext/tcltklib/tcltklib.c (lib_mainloop): thread and interrupt check.
+
+Fri Apr 17 11:06:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (find_file): try to fopen() to check whether file exists.
+
+ * ruby.c (load_file): ditto.
+
+ * struct.c (struct_aset): struct member can be set by member name.
+
+Fri Apr 17 00:47:19 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ext/extmk.rb.in: added m68k-human support
+
+ * file.c (LOCK_SH): defines moved.
+
+ * array.c (ary_flatten_bang): simplified loop.
+
+Thu Apr 16 16:52:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_11.
+
+ * lib/tk.rb: thread support (experimental - maybe slow).
+
+ * eval.c (rb_longjmp): trace event on exception in raising
+ context, just before raising exception.
+
+ * struct.c (struct_s_members): forgot to check singletons.
+
+ * struct.c (struct_aref): members can be accessed by names too.
+
+ * array.c (ary_flatten): new method.
+
+ * eval.c (rb_longjmp): prints exception information with `-d'.
+
+ * object.c (any_to_s): remove class name restriction.
+
+Thu Apr 16 01:38:02 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * file.c (thread_flock): do not block other threads.
+
+ * eval.c (thread_trap_eval): signals are now delivered to the
+ current thread again. In case that the current thread is dead,
+ signals are forwarded to the main thread.
+
+ * string.c (str_new4): need not to duplicate frozen strings.
+
+Wed Apr 15 08:33:47 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * struct.c (struct_inspect): remove restriction for struct names.
+
+Wed Apr 15 02:55:02 1998 Kazuya 'Sharl' Masuda <sharl@www.ufo.co.jp>
+
+ * x68 patches to config.sub, ext/extmk.rb.in
+
+Wed Apr 15 01:22:56 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_dup_frozen): do not duplicate frozen strings.
+
+ * parse.y (yylex): allow nested parenthesises.
+
+ * io.c (obj_displayln): prints newline after `display'ing the
+ receiver.
+
+ * io.c (io_puts): avoid generating "\n" each time. use RS_default
+ instead.
+
+ * io.c (f_p): ditto.
+
+Tue Apr 14 22:18:17 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * struct.c (struct_aref): should not subtract negative index.
+
+Tue Apr 14 11:34:50 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_10.
+
+ * parse.y: token names prefixed by `t'.
+
+ * struct.c (struct_s_def): supports subclassing of Struct.
+
+ * io.c (io_s_new): supports subclassing of IO.
+
+Mon Apr 13 11:07:39 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (f_binding): need to restore method name.
+
+ * eval.c (rb_call0): raises SystemStackError, not Fatal.
+
+ * io.c (obj_display): same as `print self'.
+
+ * io.c (f_p): can now be called in the method form.
+
+ * re.c (reg_regsub): needed to be mbchar aware.
+
+Mon Apr 13 13:18:32 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (thread_trap_eval): all signals delivered to main_thread.
+
+Mon Apr 13 12:47:03 1998 TAKAHASHI Masayoshi <maki@inac.co.jp>
+
+ * re.c (kcode_set_option): did not set SJIS on SJIS condition.
+
+Sun Apr 12 22:14:07 1998 Kazunori NISHI <kazunori@swlab.csce.kyushu-u.ac.jp>
+
+ * array.c (ary_uniq_bang): should be `==', not `='. embarrassing.
+
+Sat Apr 11 02:13:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (ary_subseq): SEGVed for `[][1,1]'.
+
+Fri Apr 10 21:29:06 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * array.c (ary_subseq): add check for beg larger than array length.
+
+Wed Apr 8 17:24:11 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
+
+ * dir.c (dir_s_open): can be called with block (like IO#open).
+
+ * dir.c (dir_s_chdir): print directory path on error.
+
+ * dir.c (dir_s_chroot): ditto
+
+ * dir.c (Init_Dir): needed to override `new'.
+
+Thu Apr 9 18:24:58 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_09.
+
+ * string.c (str_cmp): do not depend on sentinel at the end of the
+ strings.
+
+ * string.c (str_chomp_bang): forgot to set the sentinel.
+
+Wed Apr 8 00:59:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * bignum.c (big2int): converted int may be too big to fit in
+ signed int.
+
+ * parse.y (arg): `foo += 1' should not cause an error.
+
+ * variable.c (rb_const_defined): returned false even if the
+ constant is defined at the top level.
+
+ * eval.c (f_local_variables): dyna_var->id may be null. should
+ have checked before calling str_new2().
+
+Tue Apr 7 01:15:15 1998 Kaneko Naoshi <wbs01621@mail.wbs.or.jp>
+
+ * re.c (reg_regsub): need to check string boundary.
+
+Tue Apr 7 19:19:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_cmp): returns either 1, 0, -1.
+
+ * array.c (ary_cmp): should check array length, too
+
+Tue Apr 7 18:50:16 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_08.
+
+Tue Apr 7 18:31:27 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * instruby.rb (mandir): dll installation for cygwin32
+
+Tue Apr 7 01:16:45 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * config.sub (maybe_os): TOWNS support?
+
+ * config.guess: too strict check for libc versions on linuxes.
+
+ * experimental release 1.1b9_07.
+
+ * array.c (ary_cmp): compare each element using `<=>'.
+
+ * hash.c (hash_each_with_index): yields [value, key] pair.
+
+ * class.c (class_protected_instance_methods): list protected
+ method names.
+
+ * class.c (ins_methods_i): exclude protected methods.
+
+ * eval.c (PUSH_BLOCK): dynamic variables can be accessed from
+ eval() with bindings.
+
+Mon Apr 6 14:49:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (thread_yield): must return evaluated value.
+
+Fri Apr 3 13:07:29 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (thread_schedule): context switch bypassed on wrong
+ conditions.
+
+ * variable.c (rb_name_class): set classname by id before String
+ class is initialized (1.0 behavior restored).
+
+Fri Apr 3 11:25:45 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * numeric.c (num2int): no implicit conversion from string.
+
+ * numeric.c (num2int): check whether `to_i' returns an Integer.
+
+ * numeric.c (num_zero_p): new method.
+
+ * numeric.c (num_nonzero_p): new method. returns the receiver if
+ it's not zero.
+
+ * eval.c (obj_instance_eval): the_class should be the object's
+ singleton class.
+
+ * error.c (exc_s_new): message is converted into a string.
+
+Thu Apr 2 18:31:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (obj_call_init): every object call `initialize'.
+
+Wed Apr 1 08:51:53 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * parse.y (stmt): UNTIL_MOD should be for stmt, not only for expr.
+
+Wed Apr 1 01:20:31 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (true_and): boolean operators &, | and ^.
+
+Tue Mar 31 13:23:58 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (ary_compact_bang): returns nil, if it does not modify
+ the array like String's bang methods.
+
+ * array.c (ary_uniq_bang): new method to remove duplicate items.
+
+ * eval.c (bind_s_new): new method.
+
+ * numeric.c (num2int): raise exception if Fixnums too big to
+ convert into `int' in case that sizeof(int) < sizeof(INT).
+
+ * string.c (str_center): SEGV on negative width.
+
+ * eval.c (eval): forgot to set sourcefile.
+
+Mon Mar 30 11:12:29 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * file.c (f_test): raises exception for unknown command.
+
+ * eval.c (Init_eval): `class_eval': alias to the module_eval.
+
+Mon Mar 30 18:50:42 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * string.c (str_capitalize_bang): did not check string modification.
+
+ * string.c (str_delete_bang): wrong conversion.
+
+ * string.c (str_intern): typo in error message.
+
+Mon Mar 30 01:44:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (obj_instance_eval): accepts block as evaluation body.
+ No compilation needed each time.
+
+ * eval.c (mod_module_eval): ditto
+
+ * file.c (file_s_umask): umask did not return old values, if no
+ argument given.
+
+Sun Mar 29 00:54:23 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (f_throw): nil returned always.
+
+Sat Mar 28 20:40:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_06.
+
+Sat Mar 28 16:07:11 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * io.c (io_closed): should not cause exception for closed IO.
+
+ * string.c (str_tr): returned nil for success.
+
+Sat Mar 28 00:47:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (f_local_variables): new method to return an array of
+ local variable names.
+
+ * variable.c (obj_instance_variables): now returns an array of
+ variable names, as described in the reference.
+
+ * eval.c (rb_attr): honors default method visibility of the
+ current scope.
+
+Fri Mar 27 13:49:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_05.
+
+ * ruby.c (ruby_prog_init): `site_ruby' added to load_path.
+
+ * ruby.c (ruby_prog_init): load-path order changed. Paths in
+ the RUBYLIB environment variable comes first in non-tainted
+ mode.
+
+Thu Mar 26 11:51:09 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_call): new feature: `protected' methods.
+
+ * string.c (str_dump): new method.
+
+ * eval.c (block_pass): block argument can be nil, which means no
+ block is supplied for the method.
+
+Wed Mar 25 21:20:13 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * string.c (str_reverse_bang): string copied to wrong place.
+
+Wed Mar 25 08:12:07 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * numeric.c (flo_modulo): caused SEGV if left operand is not a
+ float value.
+
+ * eval.c (f_eval): optional third and fourth argument to specify
+ file-name and line-number.
+
+ * eval.c (eval): file-name and line-number set properly.
+
+ * parse.y (assign_in_cond): literal assignment is now warning, not
+ compile error.
+
+ * error.c (Warn): Warn() always print message, OTOH Waring()
+ prints when verbose flag is set.
+
+Tue Mar 24 12:50:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (ruby_prog_init): `.' should come last in the load-path.
+
+ * eval.c (Init_eval): `__send__', alias for `send'.
+
+Mon Mar 23 12:44:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_chomp_bang): now takes `rs' as an argument.
+
+ * eval.c (thread_free): main_thread should not be freed.
+
+Fri Mar 20 16:40:34 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_chomp_bang): chomp! (and other ! methods) returns
+ nil if it does not modify the string.
+
+ * string.c (str_sub_iter_s): should check last pattern since it
+ may be matched to null.
+
+Thu Mar 19 13:48:55 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_04.
+
+ * parse.y (yylex): `10e0.9' should cause syntax error.
+
+Wed Mar 18 17:46:31 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (load_file): new file object constant DATA. Only
+ available for the script from the file.
+
+ * regex.c (re_match): forwarding failure point popped too much.
+
+Tue Mar 17 18:23:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * math.c (math_frexp): newly added.
+
+ * math.c (math_ldexp): ditto.
+
+ * bignum.c (bigdivmod): calculates modulo.
+
+ * numeric.c (fix_remainder): returns reminder, formerly introduced
+ as modulo.
+
+ * numeric.c (fix_modulo): calculates proper `modulo'.
+
+ * bignum.c (bigdivmod): wrong sign for reminder.
+
+Mon Mar 16 17:07:28 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_03.
+
+Mon Mar 16 16:33:53 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * io.c (pipe_finalize): needed to add pipe_finalize to pipes on
+ cygwin32.
+
+Mon Mar 16 14:11:06 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * class.c (ins_methods_i): needed to consider NOEX_UNDEF.
+
+Mon Mar 16 13:23:53 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * io.c (io_check_closed): check for `fptr->f2 == NULL'.
+
+ * io.c (io_fptr_close): ditto.
+
+Mon Mar 16 11:49:25 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (pipe_atexit): free()ing referencing pipe_list.
+
+ * range.c (range_length): returns zero, if the first is greater
+ than the last.
+
+ * signal.c (trap_restore_mask): restore signal mask before raising
+ exceptions and throws.
+
+Fri Mar 13 13:49:24 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_02.
+
+ * object.c (mod_clone): need to dups constants and instance
+ variables.
+
+ * eval.c (rb_eval): forgot to initialize body for NODE_DEFS.
+
+ * eval.c (rb_eval): retrieve self from calling frame, since self
+ changes sometimes.
+
+ * env.h (FRAME): need to save self in the calling frame.
+
+ * io.c (f_gets_method): rs should be initialized by RS.
+
+Thu Mar 12 15:33:57 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * experimental release 1.1b9_01.
+
+ * range.c (range_s_new): check values by `first <= last'.
+
+ * parse.y (lastline_set): fixed offset for $_ and $~ in the local
+ variable space.
+
+Wed Mar 11 02:14:17 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_gets): handle normal case specially for speed.
+
+ * eval.c (rb_disable_super): function to disable superclass's
+ method explicitly.
+
+ * eval.c (rb_eval): inherits previous method definition's
+ NOEX_UNDEF-ness, if exists.
+
+ * class.c (rb_define_method): disables superclass's overriding
+ method by default.
+
+Wed Mar 11 01:40:48 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
+
+ * numeric.c (flo_gt,etc.): do not depend on `<=>', to handle NaN.
+
+Tue Mar 10 00:03:24 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (load_file): understands multiple options in #! line.
+
+ * regex.c (re_compile_pattern): support for [:alpha:] etc.
+
+Mon Mar 9 16:53:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.h (GetOpenFile): embed io_check_closed in GetOpenFile.
+
+ * sprintf.c (f_sprintf): zero padding failed for negative
+ integers.
+
+ * sprintf.c (remove_sign_bits): failed to remove some bits.
+
+Sat Mar 7 21:51:46 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
+
+ * class.c (ins_methods_i): body may be NULL for some case.
+
+Fri Mar 6 17:23:07 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (mbcinit): table driven mbchar detection.
+
+ * object.c (obj_alloc): check for allocating instance for the
+ primitive classes (mostly perfect).
+
+ * ext/curses/curses.c (curses_finalize): restore original state at
+ interpreter termination.
+
+ * ext/curses/curses.c (curses_addstr): forgot to check argument
+ type (caused SEGV). now uses STR2CSTR() macro.
+
+Thu Mar 5 13:47:39 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (block_pass): accepts method object as block args.
+
+ * eval.c (f_missing): use any_to_s() for stringify.
+
+Wed Mar 4 01:39:52 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (block_arg): new syntax - block argument in the
+ calling arglist.
+
+ * eval.c (rb_call): no module search. simplified a lot.
+
+ * eval.c (rb_eval): block arg support.
+
+ * parse.y (f_block_arg): new syntax - block argument in the
+ formal arglist.
+
+Tue Mar 3 14:20:15 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (obj_method): returns bound method object.
+
+ * eval.c (rb_call): argument check for empty methods.
+
+ * ruby.h (NUM2CHR): new macro, originally from curses module.
+
+Tue Mar 3 13:03:35 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
+
+ * io.c (io_putc): new method.
+
+Tue Mar 3 11:21:28 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_inspect): more strict charcode detection.
+
+ * eval.c (thread_stop): stopping only thread raises ThreadError
+ exception.
+
+Tue Mar 3 08:04:56 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp>
+
+ * struct.c (struct_alloc): incomplete struct initialization made
+ GC to access unallocated addresses.
+
+Mon Mar 2 16:28:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (thread_stop_method): remove Thread#stop.
+
+Fri Feb 27 18:16:26 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1b9 released.
+
+Fri Feb 27 09:36:35 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (hash_delete_nil): needed to compare value to nil, since
+ nil is the valid key for hashes.
+
+ * hash.c (hash_foreach_iter): rehashing causes IndexError.
+
+ * hash.c (hash_foreach_iter): rehash check by pointer comparison.
+
+Thu Feb 26 17:22:13 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (fname): convert reswords into symbols.
+
+ * parse.y (reswords): reserved words are now embedded in the
+ syntax (sigh).
+
+ * parse.y: now reserved words can be method names safely.
+
+Wed Feb 25 15:50:07 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (mod_module_eval): clear the_scope's PRIVATE flag before
+ calling eval().
+
+ * gc.c (gc_call_finalizer_at_exit): run finalizers before any data
+ object being freed.
+
+ * eval.c (rb_eval): needed to keep prot_tag->retval before
+ evaluating the ensure clause.
+
+Tue Feb 24 11:16:32 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): reserved words can be appear as method names at
+ right after 'def' and `.'(dot), like foo.next.
+
+ * eval.c (return_check): checks for return out of thread (formerly
+ done in return_value).
+
+ * eval.c (POP_TAG): copy retval to outer level.
+
+ * eval.c (return_value): just set retval, no check, no unwinding.
+
+ * parse.y (nextc): line continuation by backslash at end of line.
+
+ * regex.c (re_compile_pattern): forgot to clear pending_exact on
+ closing parentheses.
+
+ * parse.y (assignable): should not assign dyna_var to true, if it
+ is already defined.
+
+Mon Feb 23 14:35:03 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (obj_is_kind_of): no longer accepts true/false/nil.
+
+ * object.c ({true,false,nil}_to_i): can be converted into integers.
+
+Mon Feb 23 12:11:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (reg_s_quote): needed to be mbchar aware.
+
+ * eval.c (proc_s_new): wrong iter mark.
+
+Sat Feb 21 22:59:30 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
+
+ * io.c (f_syscall): no argument check.
+
+Fri Feb 20 10:17:51 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1b8 released.
+
+ * ext/kconv/kconv.c (kconv_kconv): default output code now be
+ determined according to the value of $KCODE.
+
+ * re.c (rb_get_kcode): can retrieve $KCODE from C code.
+
+ * parse.y (stmt): if/unless modifiers returns nil, if condition is
+ not established.
+
+Thu Feb 19 11:06:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/kconv/kconv.c (kconv_kconv): charcode can be specified by
+ code name (JIS, SJIS, EUC like value of $KCODE).
+
+ * regex.c (re_compile_pattern): forgot to fixup_jump for (?:..).
+
+ * regex.c (re_compile_pattern): needed to clear pending_exact on
+ non-registering grouping (?:...).
+
+Wed Feb 18 19:54:21 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (here_document): needed to set lex_state to EXPR_END.
+
+Wed Feb 18 18:45:10 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * patches for cygwin32 applied.
+
+Wed Feb 18 00:41:31 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_sub_s): needed to be mbchar aware to increment one
+ character.
+
+ * regex.c (re_match): \Z matches newline just before the end of
+ the string.
+
+Tue Feb 17 00:04:32 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_arg): Time.gm and Time.local now understands
+ Time#to_a format.
+
+ * string.c (str_sub_s): replace happened twice for null pattern.
+
+ * regex.c (re_search): null pattern should not match after newline
+ at the end of string.
+
+ * time.c (time_isdst): now returns boolean value.
+
+ * error.c (rb_check_type): treat special constants in messages.
+
+ * parse.y (yylex): new form `::Const' to see toplevel constants.
+
+ * parse.y (cond): SEGV on `if ()'.
+
+ * gc.c (obj_free): some data needed explicit free().
+
+Mon Feb 16 23:55:40 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (blk_free): release duplicated block informations.
+
+ * eval.c (blk_copy_prev): duplicate outer block information into
+ the heap, when proc/binding created.
+
+Mon Feb 16 14:38:25 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_mon): now 1 for January and so on.
+
+ * time.c (time_year): year in 19xx (no + 1900 needed anymore).
+
+Mon Feb 16 13:28:33 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): need to fetch mbchar's second byte
+ without translation.
+
+Mon Feb 16 12:29:27 1998 MAEDA shugo <shugo@po.aianet.ne.jp>
+
+ * eval.c (f_pass_block): pass iterator block to other method.
+
+Fri Feb 13 08:16:11 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (parse_regx): handle \s before read_escape().
+
+ * parse.y (read_escape): `\s' in strings as space.
+
+Tue Feb 10 17:29:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1b7 released.
+
+ * string.c (str_aset): string insertion by `str[n] = str2'.
+
+ * string.c (str_oct): does recognize `0x'.
+
+ * sprintf.c (f_sprintf): use base 10 for conversion from string to
+ integer.
+
+Mon Feb 9 14:51:56 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * numeric.c (do_coerce): proper error message.
+
+ * string.c (str_sum): bug - masked by wrong value. (sigh..)
+
+Sat Feb 7 15:11:14 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_empty): new method
+
+Fri Feb 6 01:42:15 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c (time_asctime): use asctime(3), not strftime(3).
+
+Thu Feb 5 18:58:46 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_fptr_close): do not free path on close().
+
+ * array.c (ary_filter): new method.
+
+ * enum.c (enum_each_with_index): new method.
+
+Thu Feb 5 14:10:35 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (primary): singleton class def can be appeared inside
+ method bodies.
+
+ * hash.c (hash_replace): replace content.
+
+ * string.c (str_replace_method): replace content.
+
+ * array.c (ary_replace_method): replace elements.
+
+ * string.c (str_succ_bang): String#succ!
+
+Thu Feb 5 18:20:30 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * string.c (str_upcase_bang): multi byte character support.
+
+Wed Feb 4 13:55:26 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (ary_reverse): SEGV on empty array reverse.
+
+Tue Feb 3 12:24:07 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (match_to_a): non matching element should be nil.
+
+ * ruby.c (ruby_load_script): load script after all initialization.
+
+ * bignum.c (str2inum): need to interpret prefix `0' of `0x'.
+
+Tue Feb 3 10:00:18 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * numeric.c (fix_rshift): use `sizeof(INT)*8' instead of 32.
+
+Mon Feb 2 14:09:24 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (set_arg0): grab environment region too.
+
+Thu Jan 29 18:36:25 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * process.c (rb_proc_exec): check `sh' to be exist.
+
+Thu Jan 29 18:18:19 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_stdio_set): assignment to $stdin or $stdout does
+ reopen() as well as $stderr.
+
+Thu Jan 29 14:18:40 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * class.c (mod_ancestors): should not include singleton classes.
+
+ * object.c (obj_type): should not return internal class.
+
+ * io.c (io_reopen): unwillingly closes stdio streams.
+
+Thu Jan 29 11:50:35 1998 Toshihiko SHIMOKAWA <toshi@csce.kyushu-u.ac.jp>
+
+ * ext/socket/socket.c (udp_addrsetup): forgot to use htons().
+
+Tue Jan 27 23:15:24 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * keywords: __FILE__, __LINE__ are available again.
+
+Fri Jan 23 14:19:28 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1b6 released.
+
+ * object.c (mod_to_s): need to duplicate classpath.
+
+ * error.c (exc_inspect): need to duplicate classpath.
+
+Thu Jan 22 00:37:47 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.h (STR2CSTR): new macro to retrieve char*.
+
+ * class.c (rb_define_method): `initialize' should always be
+ private, even if it defined by C extensions.
+
+ * eval.c (rb_eval): `initialize' should always be private.
+
+Thu Jan 22 16:21:08 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): some singleton class def cause SEGV.
+
+ * eval.c (TMP_ALLOC): replace ALLOCA_N, where thread context
+ switch may happen.
+
+Wed Jan 21 01:43:42 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (PUSH_FRAME): do not use ALLOCA_N(). crash on some
+ platforms that use missing/alloca.c.
+
+ * regex.c (re_compile_pattern): too many pops for non register
+ subexpr.
+
+ * parse.y (yylex): open parentheses after identifiers are argument
+ list, even if whitespaces have seen.
+
+Tue Jan 20 15:19:59 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (terms): quoted word list by %w(a b c).
+
+ * ext/tcltklib/extconf.rb: more accurate check for tcl/tk libs.
+
+ * file.c (rb_stat): most of the FileTest methods (and function
+ `test') accept File objects as the argument.
+
+Tue Jan 19 18:19:24 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ext/extmk.rb.in (install): there should be no newline after install:
+
+ * re.c (MIN): renamed from min(). there's a local variable named
+ min in the file, so that some cpp will raise an error.
+
+Mon Jan 19 16:30:05 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1b5 released.
+
+ * process.c (rb_syswait): no exception raised.
+
+Fri Jan 16 00:43:43 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.h (CLONESETUP): copies its singleton classes too.
+
+ * class.c (singleton_class_attached): saves binded object in the
+ singleton classes.
+
+ * eval.c (rb_eval): calls singleton_method_added even in the
+ singleton class clauses.
+
+Fri Jan 15 23:22:43 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ruby.c (proc_options): -S does not recognize PATH.
+
+Thu Jan 15 02:03:12 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_clear_cache_by_id): clear only affected cache
+ entries.
+
+Wed Jan 14 02:14:48 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c: new UDP/IP socket classes.
+
+Tue Jan 13 10:00:18 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_cmp): ignorecase($=) works wrong.
+
+Fri Jan 9 13:19:55 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1b4 released.
+
+ * eval.c (f_missing): class name omitted from the error message.
+
+ * error.c (exc_inspect): description changed.
+
+ * string.c (Init_String): GlobalExit's superclass did not filled,
+ since GlobalExit created earlier than String.
+
+Thu Jan 8 12:10:09 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (aryset): expr in the brackets can be null.
+
+Wed Jan 7 21:13:56 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_reopen): keep stderr unclosed.
+
+ * io.c (io_errset): keep stderr unclosed.
+
+Tue Jan 6 00:27:43 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y: syntax modified for `while expr do .. end' etc.
+
+ * process.c (f_exec,f_system): can supply arbitrary name for the
+ new process.
+
+Mon Jan 5 16:59:13 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * file.c (file_s_basename): removes any extension by ".*".
+
+Sun Jan 4 19:36:22 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * parse.y (yylex): needed to update lex_p (reading point).
+
+Sat Jan 3 19:14:14 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * class.c,object.c: duplicate defines mKernel and cFinxnum.
+
+Fri Jan 2 20:38:59 1998 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/curses/curses.c (NUM2CHAR): uses the first character for
+ string arguments.
+
+ * array.c (ary_fill): did not extend array for ranges.
+
+ * array.c (beg_len): did not return end pos bigger than size.
+
+Fri Jan 2 02:09:16 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * dir.c (dir_s_chdir): bug in nil check.
+
+ * array.c (ary_fill): bug in nil check.
+
+Tue Dec 30 11:46:23 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * hash.c (env_path_tainted): checks directories in PATH
+ environment variable are not world writable.
+
+ * ruby.c (load_file): invoke specified interpreter if the #! line
+ does not contain the word `ruby'.
+
+Fri Dec 26 03:26:41 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (uscore_get): type information included in the error
+ message.
+
+ * variable.c (f_untrace_var): does not free trace-data within
+ trace procedure.
+
+Thu Dec 25 02:50:29 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1b3 released.
+
+ * ruby.h: inlining some functions on gcc 2.x
+
+Tue Dec 23 02:47:33 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): public/private information kept in the current
+ scope, to remove undesired state from the class/module.
+
+ * time.c (time_strftime): remove hidden limit of 100 bytes of
+ result string, using malloc'ed buffer.
+
+ * hash.c (hash_update): merges the contents of another hash,
+ overriding existing keys.
+
+ * regex.c (must_instr): totally re-written.
+
+ * io.c (read_all): try to allocate proper sized buffer using
+ fstat(2) for speedup.
+
+Sat Dec 20 00:27:28 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (must_instr): need to skip 2 bytes for mbchars.
+
+Fri Dec 19 01:18:29 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1b2 released.
+
+ * eval.c (check_errat): check and convert (if necessary) traceback
+ information before assigning to the variable $@.
+
+ * eval.c (f_raise): optional third argument to specify traceback
+ information.
+
+ * io.c (f_open): prevent infinite recursive call.
+
+Thu Dec 18 19:33:47 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_rindex): now accepts regexp as index.
+
+Thu Dec 18 18:42:50 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ext/socket/extconf.rb: modified to detect win32 socket lib.
+
+Thu Dec 18 00:25:03 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * re.c (reg_equal): checks for source and casefold and kcode matching.
+
+ * marshal.c: became built-in module.
+
+ * ext/marshal/marshal.c (r_object): displays struct name for
+ non-compatible struct.
+
+ * string.c (str_index_method): now searches character (fixnum) in
+ the string.
+
+ * string.c (str_include): redefine `include?'.
+
+ * regex.c (re_match): start_nowidth saves current stack position
+ to stop_nowidth.
+
+ * regex.c (re_compile_pattern): add space to stop_nowidth to save
+ runtime stack position.
+
+Tue Dec 16 14:57:43 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (scan_once): wrong exception for regexp that match with
+ null string (use substr instead of subseq).
+
+Sat Dec 13 00:13:32 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (expr): remove bare assocs from expr rule.
+
+ * rbconfig.rb: renamed from config.rb (it was too generic name).
+
+Fri Dec 12 00:50:25 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (expr): warns if BEGIN or END appear in the method
+ bodies.
+
+ * string.c (str_match): calls y =~ x if y is neither String nor
+ Regexp so that eregex.rb works.
+
+ * eval.c (f_at_exit): to register end proc.
+
+ * class.c (rb_define_module_function): define 'function' method
+ for the Module, not private method.
+
+ * class.c (rb_define_function): function to define `function' method.
+
+ * eval.c (rb_eval): inherit visibility from superclass's method
+ except when it is set to `function'
+
+ * eval.c (rb_eval): new visibility status `function'.
+
+ * parse.y (yycompile): do not clear eval_tree. thus enable multiple
+ command line script by option `-e'.
+
+ * eval.c (rb_eval): END execute just once.
+
+ * parse.y (expr): BEGIN/END built in the syntax.
+
+Thu Dec 11 13:14:35 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (mod_le): Module (or Class) comparison.
+
+ * eval.c (rb_remove_method): raises NameError if named method does
+ not exist.
+
+ * ext/curses/curses.c: remove CHECK macro for BSD curses.
+
+Thu Dec 11 12:44:01 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * pack.c: sun4 cc patch
+
+Wed Dec 10 15:21:36 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/marshal/marshal.c (marshal_load): can supply evolution proc
+ object as optional second argument.
+
+ * re.c (reg_source): get source string of the regular expression.
+
+Tue Dec 9 10:05:17 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1b1 released.
+
+ * parse.y (tokadd): token buffer overrun.
+
+ * ruby.c (ruby_prog_init): forgot to protect rb_argv0 from gc.
+
+ * eval.c (ruby_run): call finalizers at process termination.
+
+ * gc.c (gc_call_finalizer_at_exit): call free proc for every Data
+ Wrapper, and finalizer for specified objects at termination.
+
+ * version.c (show_version): version format changed.
+
+ * regex.c (re_match): wrong match with non-greedy if they appear
+ more than once in regular expressions.
+
+ * sample/ruby-mode.el (ruby-expr-beg): forgot to handle modifiers.
+
+Mon Dec 8 19:00:15 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_puts): just put a newline if no argument given.
+
+ * ext/tcltklib/tcltklib.c (lib_mainloop): thread-aware tk handle
+ when $tk_thread_safe is set.
+
+ * ext/tcltklib/tcltklib.c (lib_mainloop): use Tcl_DoOneEvent()
+ instead of Tk_MainLoop().
+
+Mon Dec 6 07:11:16 1997 MAEDA shugo <shugo@po.aianet.ne.jp>
+
+ * io.c (io_puts): core dumped without any argument.
+
+Fri Dec 5 18:17:17 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (mod_remove_method): remove (not undef) a method from the
+ class/module.
+
+ * variable.c (obj_remove_instance_variable): method to remove
+ instance variables.
+
+Thu Dec 4 13:50:29 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1b0 released.
+
+ * string.c (str_aref): called str_index for regexp.
+
+Mon Dec 1 15:24:41 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * compar.c (cmp_between): wrong comparison made.
+
+Wed Nov 26 18:18:05 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * lib/mkmf.rb: generate Makefile for extension modules out of ruby
+ source tree. use like `ruby -r mkmf extconf.rb'.
+
+ * numeric.c (fix2str): enlarge buffer to prevent overflow on some
+ machines.
+
+ * parse.y (here_document): wrong line number generated after here-doc.
+
+Fri Nov 21 13:17:12 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (yylex): skip multibyte characters in comments.
+
+Wed Nov 19 17:19:20 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (nil_to_a): nil.to_a => [].
+
+ * parse.y (call_args): wrong node generation.
+
+Tue Nov 18 10:13:08 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * array.c (Init_Array): Array#=== works as Array#include?
+
+ * regex.c (re_compile_pattern): insert initialize code for jump_n,
+ before entering loops.
+
+ * re.c (reg_search): does not save registers unless $& etc appear
+ in the script.
+
+Mon Nov 17 13:01:43 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (is_defined): add defined? check for receivers and
+ arguments for calls.
+
+ * re.c (reg_search): cache last match object.
+
+ * re.c (match_aref): $[0] etc. are available.
+
+Sat Nov 15 00:11:36 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * io.c (io_s_popen): "rb" detection
+
+Fri Nov 14 18:28:40 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (scan_once): returns whole match if the pattern does
+ not contain any parentheses.
+
+Thu Nov 13 14:39:06 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (str_sub): returns copy of the receiver string, even if
+ any substitution occurred.
+
+ * regex.c (re_compile_pattern): no-width match by (?=..), (?!..).
+
+Wed Nov 12 13:44:47 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * time.c: remove coerce from Time class.
+
+ * regex.c (re_match): non-greedy match by ??, *? +?, {n,m}?.
+
+Mon Nov 10 11:24:51 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): non-registering parens (?:..).
+
+ * regex.c (re_compile_pattern): new meta character \< (wordbeg)
+ and \> (wordend).
+
+ * regex.c (re_compile_pattern): embedded comment for regular
+ expression by (?#...).
+
+Fri Nov 7 16:58:24 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * regex.c (re_compile_pattern): perl5 regexp \A and \Z available.
+
+ * regex.c (re_compile_pattern): can expand compile stack dynamically.
+
+ * regex.c (PUSH_FAILURE_POINT): wrong compare condition.
+
+Wed Nov 2 16:00:00 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * string.c (str_sub_s): "".sub! "", "" => "\000"
+
+Fri Oct 31 15:52:10 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (assoc): keyword assoc like {fg->"black"}.
+
+Thu Oct 30 17:33:38 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_println): print with newline, which is not affected by
+ the values of $/ and $\.
+
+Thu Oct 30 16:54:01 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * string.c (str_chop_bang): "".chop caused SEGV.
+
+ * string.c (str_chomp_bang): method to chop out last newline.
+
+Mon Oct 27 13:49:13 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/extmk.rb.in: library may have pathname contains `.'
+
+ * eval.c (rb_rescue): should not protect SystemError.
+
+Fri Oct 24 10:58:53 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_s_with_open_stream): ensures to close stream.
+
+Thu Oct 23 11:17:44 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_errset): value of $stderr can be changed (to any IO
+ object).
+
+ * io.c (next_argv): $< can be anything that responds to `write'.
+
+ * file.c (file_s_with_open_file): ensures to close file.
+
+ * error.c (exception): create error under the current class/module.
+
+ * range.c (range_eqq): fixnum check for last needed too.
+
+Wed Oct 22 12:52:30 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/socket/socket.c: Socket::Constants added.
+
+ * file.c: File::Constants added for inclusion.
+
+ * array.c (ary_join): call ary_join() recursively for the 1st
+ array element.
+
+Mon Oct 20 12:18:29 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ruby.c (load_file): wrong condition for #! check with -x.
+
+ * file.c (file_s_dirname): did return "" for "/a".
+
+Fri Oct 17 14:29:09 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c: now works on alpha-linux.
+
+ * bignum.c (bigadd): some undefined side effect order assumed.
+
+Wed Oct 15 17:49:24 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * intern.h: function prototypes added.
+
+Mon Oct 13 16:54:18 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * class.c (rb_define_class_id): call superclass's `inherited'
+ method when making subclasses.
+
+ * parse.y (nextc): clear lex_lastline at the end of file.
+
+ * object.c (Init_Object): need to undef Class#append_features.
+
+ * eval.c (rb_eval): no warning on extending classes or modules.
+
+Thu Oct 9 11:17:50 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (error_print): the exception name follows after the error
+ message.
+
+ * eval.c (compile_error): error message slightly changed.
+
+ * parse.y (nextc): script parsing will be terminated by __END__ at
+ beginning of line.
+
+ * eval.c (compile_error): `__END__' is no longer a keyword.
+
+ * parse.y (nextc): protect lastline read from script stream.
+
+Tue Oct 7 14:06:06 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1 alpha9 released.
+
+ * eval.c (mod_append_features): renamed from extend_class.
+
+ * eval.c (rb_eval): defining method calls `method_added'.
+
+ * eval.c (ruby_options): exception while processing options must
+ terminate the interpreter.
+
+ * error.c (Init_Exception): wrong method configuration. `new'
+ should have been a singleton method.
+
+Mon Oct 6 18:55:38 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/kconv/kconv.c (kconv_guess): code to guess character code
+ from string.
+
+Mon Oct 6 18:38:17 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * pack.c: now encode/decode base64 by `m' template.
+
+Fri Oct 3 10:51:10 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * MANIFEST: needed to include lex.c in the distribution.
+
+ * eval.c (ruby_options): f_require() called too early.
+
+ * eval.c (rb_provide): module extensions should always be `.o'.
+
+Thu Oct 2 11:38:31 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1 alpha8 released.
+
+ * ext/marshal/marshal.c (r_object): remove temporal regist for
+ structs. (caused problem if structs form cycles.)
+
+ * parse.y (match_gen): static binding for match(=~) calls
+ with regexp literals.
+
+Wed Oct 1 15:26:55 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c: protect retval in struct tag from GC for C_ALLOCA.
+
+ * eval.c: no more pointer value from setjmp/longjmp.
+
+Wed Oct 1 14:01:49 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ext/marshal/marshal.c (w_byte): argument must be char.
+
+Wed Oct 1 10:30:22 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (mod_const_at): global constants now belongs to the
+ class Object.
+
+ * object.c (Init_Object): new global constant NIL.
+
+ * ext/marshal/marshal.c (marshal_dump): try to set binmode.
+
+ * ext/marshal/marshal.c (r_object): forgot to re-regist structs in
+ the object table.
+
+ * eval.c (ruby_options): call Init_ext() before any require()
+ calls by `-r'.
+
+Fri Sep 30 14:29:22 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ext/marshal/marshal.c (w_object): marshal dumped core.
+
+Tue Sep 30 10:27:39 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sample/test.rb: bignum test suits added.
+
+ * eval.c (rb_eval): new pseudo variable `true' and `false'.
+
+ * parse.y: new keywords `true' and `false' added.
+
+Mon Sep 29 13:37:58 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (forbid_setid): forbid some options in suid mode.
+
+ * ruby.h (NUM2DBL): new macro to convert into doubles.
+
+Mon Sep 27 09:53:48 1997 EGUCHI Osamu <eguchi@shizuokanet.or.jp>
+
+ * bignum.c: modified for speeding.
+
+Fri Sep 26 18:27:59 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * sample/from.rb: some extensions.
+
+Mon Sep 29 13:15:56 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (lhs): no more syntax error on `obj.CONSTANT = value'.
+
+Fri Sep 26 14:41:46 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (ruby_run): deferred calling Init_ext() just before eval_node.
+
+Fri Sep 26 13:27:24 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * io.c (io_isatty): forgot to return TRUE value.
+
+Fri Sep 25 11:10:58 1997 EGUCHI Osamu <eguchi@shizuokanet.or.jp>
+
+ * eval.c: use _setjmp/_longjmp instead of setjmp/longjmp on some
+ platforms.
+
+Wed Sep 24 17:43:13 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * string.c (Init_String): String#taint and String#taint? added.
+
+ * class.c (mod_ancestors): ancestors include the class itself.
+
+Wed Sep 24 00:57:00 1997 Katsuyuki Okabe <HGC02147@niftyserve.or.jp>
+
+ * X68000 patch.
+
+Tue Sep 23 20:42:30 1997 EGUCHI Osamu <eguchi@shizuokanet.or.jp>
+
+ * parse.y (node_newnode): SEGV on null node setup.
+
+Mon Sep 22 11:22:46 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (ruby_prog_init): wrong safe condition check.
+
+Sun Sep 21 14:46:02 1997 MAEDA shugo <shugo@po.aianet.ne.jp>
+
+ * error.c (exc_inspect): garbage added to classpath.
+
+Fri Sep 19 11:49:23 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (newtok): forgot to adjust buffer size when shrinking
+ the token buffer.
+
+ * enum.c (enum_find): rb_eval_cmd() does not return value.
+
+ * io.c (pipe_open): close fds on pipe exec. fcntl(fd, F_SETFD, 1)
+ no longer used.
+
+Tue Sep 16 17:54:25 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * file.c (f_test): problem if wrong command specified.
+
+ * ruby.c (ruby_prog_init): close stdaux and stdprn for MSDOS.
+
+ * ruby.c (ruby_prog_init): should not add path from environment
+ variable, if ruby is running under setuid.
+
+ * process.c (init_ids): check suid check for setuid/seteuid etc.
+
+Mon Sep 15 00:42:04 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * regex.c (re_compile_pattern): \w{3} and \W{3} did not work.
+
+Thu Sep 11 10:31:48 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1 alpha7 released.
+
+ * ext/socket/socket.c (sock_new): no setbuf() for NT.
+
+ * io.c (rb_fopen,rb_fdopen): set close-on-exec for every fd.
+
+Wed Sep 10 15:55:31 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ext/marshal/marshal.c (r_bytes0): extra big length check.
+
+Tue Sep 9 16:27:14 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (pipe_fptr_atexit): clean up popen()'ed fptr.
+
+ * error.c (set_syserr): some system has error code that is bigger
+ than sys_nerr. grrr.
+
+Mon Sep 8 18:33:33 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * io.c (io_s_new): dereferenced nil for optional mode.
+
+Fri Sep 5 10:26:03 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * class.c (class_instance_methods): do not include methods which
+ are changed to private in subclasses.
+
+Thu Sep 4 12:38:53 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * variable.c (f_global_variables): list name of the global
+ variables.
+
+ * object.c (obj_id): returns unique integer.
+
+Wed Sep 3 14:05:16 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1 alpha6 released.
+
+ * eval.c (mod_s_constants): context sensitive constant list.
+
+ * variable.c (mod_constants): no more `all' option.
+
+ * variable.c (mod_const_of): the values for autoload classes are
+ their name strings.
+
+ * class.c (class_instance_methods): no special treatment for
+ singleton classes.
+
+ * object.c (obj_singleton_methods): returns list of singleton
+ method names.
+
+ * parse.y (yylex): no here document after `class' keyword.
+
+ * eval.c (f_load): expand path if fname begins with `~'.
+
+Tue Sep 2 13:19:48 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * class.c (ins_methods_i): do not list undef'ed methods.
+
+Mon Sep 1 13:42:48 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1 alpha5 released.
+
+ * object.c (mod_attr_reader): create methods to define attribute
+ reader/write/accessor.
+
+ * class.c (rb_define_attr): always defines accessors.
+
+ * eval.c (rb_call): alias occurred in the module body caused SEGV.
+
+ * parse.y: did not generate here document strings properly.
+
+Mon Sep 1 11:43:57 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * parse.y (yylex): heredoc dropped an extra character.
+
+Fri Aug 29 11:10:21 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * class.c (class_instance_methods): same method names should not
+ appear more than once.
+
+ * parse.y (yylex): spaces can follow =begin/=end.
+
+ * variable.c (find_class_path): look for class_tbl also for
+ unnamed fundamental classes, such as Object, String, etc.
+
+ * variable.c (rb_name_class): can't name class before String class
+ is initialized.
+
+ * inits.c (rb_call_inits): unrecognized dependency from GC to
+ Array.
+
+ * variable.c (find_class_path): could not find class if Object's
+ iv_tbl is NULL.
+
+Thu Aug 28 13:12:05 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1 alpha4 released.
+
+ * variable.c (mod_constants): wrong condition for singleton
+ class.
+
+ * parse.y (yylex): revised `=begin' skip code.
+
+ * parse.y (here_document): forgot to free(eos).
+
+ * parse.y (yylex): spaces after `<<' prohibited for here
+ documents to avoid confusing with operator `<<'.
+
+ * eval.c (is_defined): separated from rb_eval().
+
+Wed Aug 27 11:32:42 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1 alpha3 released.
+
+ * variable.c (mod_name): returns name of the class/module.
+
+ * parse.y (here_document): finally here document available now.
+
+ * variable.c (fc_i): some classes/modules does not have iv_tbl.
+
+ * variable.c (find_class_path): avoid infinite loop.
+
+Tue Aug 26 13:43:47 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (rb_eval): undef'ing non-existing method will raise
+ NameError exception.
+
+ * object.c (class_s_new): needed to create metaclass too.
+
+ * eval.c (error_print): no class name print for anonymous class.
+
+ * eval.c (rb_longjmp): proper exception raised if raise() called
+ without arguments, with $! or $@ set.
+
+ * object.c (Init_Object): superclass()'s method argument setting
+ was wrong again.
+
+ * class.c (mod_ancestors): list superclasses and included modules
+ in priority order.
+
+Mon Aug 25 11:53:11 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1 alpha2 released.
+
+ * sample/ruby-mode.el (ruby-parse-region): auto-indent now
+ supports "\\" in the strings.
+
+ * struct.c (struct_getmember): new API to get member value from C
+ language side.
+
+Sat Aug 23 21:39:05 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * parse.y (assignable): remove unnecessary local variable
+ initialize by nil.
+
+Fri Aug 22 14:26:40 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (error_print): modified exception print format.
+
+Thu Aug 21 16:10:58 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * sample/ruby-mode.el (ruby-calculate-indent): wrong indent level
+ calculated with keyword operators.
+
+Thu Aug 21 11:36:58 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * parse.y (arg): ary[0] += 1 cause SEGV
+
+Wed Aug 20 17:28:50 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * ruby.c (ruby_process_options): require() all modules after
+ processing all options
+
+ * process.c (rb_proc_exec): more security checks added.
+
+ * process.c (rb_proc_exec): insecure path on exec.
+
+ * hash.c (f_getenv): PATH modification security check.
+
+Tue Aug 19 00:15:38 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1 alpha1 released.
+
+ * eval.c (mod_eval): work as normal eval() if second binding
+ argument given.
+
+ * eval.c (rb_call): did not raise ArgumentError if too many
+ arguments more than optional arguments (without rest arg).
+
+ * eval.c (rb_eval): did not work well for op_asgn2 (attribute
+ self assignment).
+
+ * eval.c (Init_Thread): returns main thread.
+
+Mon Aug 18 09:25:56 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * object.c (inspect_i): did not display T_DATA instance variables.
+
+ * parse.y: provides more accurate line number information.
+
+ * eval.c (thread_value): include value's backtrace information in
+ the variable `$@'.
+
+ * eval.c (f_abort): print backtrace and exit.
+
+Sat Aug 16 00:17:44 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (class_new_instance): do not make instance from virtual
+ classes.
+
+ * object.c (class_s_new): do not make subclass of singleton class.
+
+Fri Aug 15 15:49:46 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * eval.c (call_trace_func): block context switch in the trace
+ function.
+
+ * eval.c (rb_eval): clear method cache at class extension.
+
+ * object.c (obj_type): returns object's class even if it defines
+ singleton methods.
+
+Fri Aug 15 19:40:43 1997 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp>
+
+ * ext/socket/socket.c (Init_socket): small typo caused SEGV.
+
+Wed Aug 13 17:51:46 1997 Yukihiro Matsumoto <matz@netlab.co.jp>
+
+ * version 1.1 alpha0 released.
+
+Local variables:
+add-log-time-format: (lambda ()
+ (let* ((time (current-time))
+ (diff (+ (cadr time) 32400))
+ (lo (% 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
+end:
diff --git a/doc/ChangeLog-1.9.3 b/doc/ChangeLog-1.9.3
new file mode 100644
index 0000000000..b8e3162511
--- /dev/null
+++ b/doc/ChangeLog-1.9.3
@@ -0,0 +1,92772 @@
+Sun Jul 10 22:50:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (rmpd_power_by_big_decimal): fix
+ precision treatment errors.
+
+ * test/bigdecimal/test_bigdecimal.rb: add tests for the above change.
+ fix precision treatment errors.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_power): precision argument
+ should be optional for its compatibility.
+
+Sun Jul 10 22:38:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (var_ref): distinguish vcall from local variable
+ references. based on a patch by Michael Edgar michael.j.edgar
+ AT dartmouth.edu. Bug #5002
+
+Sun Jul 10 21:51:29 2011 Koichi Sasada <ko1@atdot.net>
+
+ * internal.h: add comments (cautions).
+
+Sun Jul 10 20:59:38 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit.rb: Add new class variable `@@testfile_prefix`.
+ This is for changing test name prefix. (For testing)
+
+ * test/testunit/tests_for_parallel/ptest_first.rb: Renamed from
+ test_first.rb
+
+ * test/testunit/tests_for_parallel/ptest_second.rb: Renamed from
+ test_second.rb
+
+ * test/testunit/tests_for_parallel/ptest_third.rb: Renamed from
+ test_third.rb
+
+ * test/testunit/tests_for_parallel/ptest_forth.rb: Renamed from
+ test_forth.rb
+
+ * test/testunit/tests_for_parallel/runner.rb: Remove misc.rb
+
+ * test/testunit/tests_for_parallel/ptest_first.rb: ditto.
+
+ * test/testunit/tests_for_parallel/ptest_second.rb: ditto.
+
+ * test/testunit/tests_for_parallel/ptest_third.rb: ditto.
+
+ * test/testunit/tests_for_parallel/ptest_forth.rb: ditto.
+
+ * test/testunit/tests_for_parallel/misc.rb: Removed because no longer
+ needed.
+
+ * test/testunit/test_parallel.rb: Fix assertions for above.
+
+Sun Jul 10 16:57:08 2011 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_throw): check a class frame.
+ Fixes Bug #4648.
+ The patch is contributed by Kazuki Tsujimoto.
+
+ * bootstraptest/test_proc.rb: add tests for above.
+
+Sun Jul 10 17:28:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (mutex_debug): use exit(EXIT_FAILURE) instead of
+ exit(1).
+ * thread_pthread.c (add_signal_thread_list): ditto.
+ * thread.c (rb_thread_call_with_gvl): ditto.
+ * util.c (Bug): ditto.
+
+Sun Jul 10 15:58:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json: Merge json gem 1.5.4+ (f7f78896607b6f6226cd).
+ [Bug #4700]
+
+Sun Jul 10 16:41:32 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * vm_core.h (typedef struct rb_vm_struct): create a new
+ 'inhibit_thread_creation' field.
+ * thread.c (rb_thread_terminate_all): set inhibit_thread_creation.
+ * thread.c (thread_s_new): don't permit to create new thread
+ if the VM is under destruction. Otherwise evil finalizer code
+ can make SEGV. [Bug #4992][ruby-core:37858]
+
+ * bootstraptest/test_objectspace.rb: new test for this fix.
+
+Sun Jul 10 16:06:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * signal.c (sigsegv): use abort() instead of exit() when nested
+ SEGV was happen. Because unnested SEGV use abort().
+ [Bug #5013][ruby-dev:44078]
+
+Sun Jul 10 15:30:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * load.c (rb_f_autoload): prevent to autoload for singleton
+ classes. fixes [Bug #4886] [ruby-dev:43816]
+
+ * bootstraptest/test_autoload.rb: add tests for the above change.
+
+Sun Jul 10 15:09:17 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit/assertions.rb: Import documentation patch by Justin
+ Collins. [ruby-core:37225] [Feature #4903]
+
+Sun Jul 10 14:57:36 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: canonicalizes nth and sf.
+
+Sun Jul 10 14:13:50 2011 Koichi Sasada <ko1@atdot.net>
+
+ * internal.h (rb_thread_call_with_gvl, rb_thread_call_without_gvl):
+ make them visible as experimental C APIs. fixes Feature #4328.
+
+Sun Jul 10 12:18:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_power): support non-integral
+ exponent. fixes [Bug #3271]
+
+ * ext/bigdecimal/bigdecimal.c (rmpd_power_by_big_decimal): ditto.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_power_op): add a function to
+ only use for "**" operator.
+
+ * test/bigdecimal/test_bigdecimal.rb: add a bunch of tests for the
+ above changes.
+
+ * ext/bigdecimal/bigdecimal.c (is_integer): add an utility function.
+
+ * ext/bigdecimal/bigdecimal.c (is_negative): ditto.
+
+ * ext/bigdecimal/bigdecimal.c (is_positive): ditto.
+
+ * ext/bigdecimal/bigdecimal.c (is_zero): ditto.
+
+ * ext/bigdecimal/bigdecimal.c (is_one): ditto.
+
+ * ext/bigdecimal/bigdecimal.c (is_even): ditto.
+
+Sun Jul 10 12:08:39 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (when_vals): when a string literal is written on when
+ clause, skip string creation to make it faster. [ruby-dev:44068]
+ [Feature #5000]
+
+Sun Jul 10 11:35:29 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (reduce_nodes_gen): NODE_RETURN in rescue body must not be
+ reduced when there is an else clause. This caused bizarre behavior
+ in [Bug #4473] [ruby-core:35629] [ruby-core:37884].
+
+Sun Jul 10 09:46:14 2011 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * range.c (range_max): fix behavior with excluded end value.
+ [Bug #4591]
+
+Sun Jul 10 09:13:18 2011 Eric Hodel <drbrain@segment7.net>
+
+ * NEWS: Fix RubyGems version. [Ruby 1.9 - Bug #5004]
+
+Sat Jul 9 20:01:59 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * internal.h: rb_rational_reciprocal is defined in rational.c.
+
+Sat Jul 9 19:48:31 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * internal.h: added declarations.
+ * complex.c: followed the above change.
+
+Sat Jul 9 17:24:41 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * NEWS: bigdecimal is not a builtin.
+
+Sat Jul 9 17:17:53 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: some improvements for performance.
+
+Sat Jul 9 16:56:01 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * atomic.h (ATOMIC_OR): _InterlockedOr is unavailable in VC6.
+
+ * numeric.c (ULLONG_MAX): fallback definition.
+
+Sat Jul 9 15:59:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_{read,write}): should be signed.
+ Bug #5001
+
+Sat Jul 9 14:02:20 2011 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb: fix multipart form parsing bug. [Bug #3866]
+
+Sat Jul 9 11:41:03 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Add Vector#normalize [ruby-dev:43829]
+
+Sat Jul 9 09:25:06 2011 Eric Hodel <drbrain@segment7.net>
+
+ * enumerator.c: Remove "enumeration sequenced by".
+ [Ruby 1.9 - Bug #4757]
+
+Sat Jul 9 09:14:56 2011 Eric Hodel <drbrain@segment7.net>
+
+ * io.c: Note that methods other than IO#gets may increase IO#lineno.
+ [Ruby 1.9 - Bug #4902]
+
+Sat Jul 9 08:39:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (RUN_OPT): disable gems.
+
+Sat Jul 9 08:37:05 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_close): close(2) on a fd which is being read by
+ another thread causes deadlock on Mac OS X 10.5
+
+Fri Jul 8 21:20:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c: use USE_ELF instead of __ELF__ because Solaris
+ doesn't define it. USE_ELF is already provided by configure.
+ patched by Naohisa Goto. [ruby-dev:44066] [Bug #4998]
+
+ * addr2line.h: ditto.
+
+ * vm_dump.c: ditto.
+
+Fri Jul 8 16:40:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/json/parser/parser.rl (convert_encoding): should not modify
+ the argument.
+
+ * ext/json/parser/parser.rl (convert_encoding): no needs to use
+ force_encoding.
+
+Fri Jul 8 15:53:31 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_bug): get rid of segfault after all threads
+ disposed.
+
+Fri Jul 8 15:01:06 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/openssl/ossl.h: include openssl/e_os2.h before checking the
+ definition of OPENSSL_SYS_WIN32.
+
+Fri Jul 8 14:40:39 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (wunlink): reverted a part of r32426. it was mistakenly
+ mixed.
+
+Fri Jul 8 14:29:47 2011 Narihiro Nakamura <authornari@gmail.com>
+
+ * configure.in: can't subtract void *.
+
+Fri Jul 8 14:33:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): define GC_MARK_STACKFRAME_WORD.
+ fixed build problem of r32438. the value (30) is temporary value.
+ maybe it's enough by 20~24 according to my observation.
+
+Fri Jul 8 13:47:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_mutex_unlock_all): folded into
+ rb_threadptr_unlock_all_locking_mutexes.
+ * thread.c (rb_threadptr_unlock_all_locking_mutexes) ditto.
+
+Fri Jul 8 13:36:02 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (thread_unlock_all_locking_mutexes): rename to
+ rb_threadptr_unlock_all_locking_mutexes and remove static.
+ * vm_core.h: add rb_threadptr_unlock_all_locking_mutexes declaration.
+ * thread.c (thread_start_func_2): adjust the above rename.
+
+ * eval.c (ruby_cleanup): call rb_threadptr_unlock_all_locking_mutexes
+ again after finalizer. [Bug #4988] [ruby-dev:44049]
+
+Fri Jul 8 13:06:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * cont.c (FIBER_MACHINE_STACK_ALLOCATION_SIZE): Fiber stack size
+ don't need to keep multiple number of sizeof(VALUE).
+
+Fri Jul 8 11:39:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (sudo-precheck): true command is not standard on
+ Windows.
+
+Fri Jul 8 10:39:52 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (gvl_destroy): fix cond_t leak.
+
+Fri Jul 8 09:17:59 2011 Eric Hodel <drbrain@segment7.net>
+
+ * gc.c: Improve documentation
+
+Thu Jul 7 23:35:31 2011 Narihiro Nakamura <authornari@gmail.com>
+
+ * gc.c: change water_mark value that may call
+ gc_mark(lev <= GC_LEVEL_MAX) in gc_mark().
+ In ruby_stack_check(), water_mark is a value that may call some
+ C function. Fixes Bug #3781
+
+ * configure.in: define GC_MARK_STACKFRAME_WORD that approximate
+ size of gc_mark() and gc_mark_children() stackframes.
+
+Thu Jul 7 17:55:05 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/testunit/test_parallel.rb (TestParallelWorker#teardown): wait
+ the child process even if the communication pipe is broken.
+
+Thu Jul 7 15:44:42 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_set_index, rb_enc_associate_index): should
+ check if frozen.
+
+ * parse.y (rb_intern3), ruby.c (process_options, ruby_script):
+ defer freezing after associating encodings.
+
+Thu Jul 7 15:16:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (rb_num2ull): use own switch sentence.
+ Current implementation can't convert 18446744073709551615.
+
+Thu Jul 7 06:56:15 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * cont.c (FIBER_STACK_FLAGS): workaround fix for r32420 on FreeBSD.
+
+Thu Jul 7 06:46:12 2011 Eric Hodel <drbrain@segment7.net>
+
+ * benchmark/driver.rb: Add difference column to report that averages
+ across all runs of a benchmark. [Ruby 1.9 - Feature #4982]
+
+Thu Jul 7 06:19:38 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems.rb: Reduce requires to improve `make benchmark`.
+ [#4962]
+ * lib/rubygems/specification.rb: Delay initialization of rubygems
+ until require is called.
+
+Thu Jul 7 04:31:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (arg): rescue_mod is in inverse order from other
+ modifiers. patched by michael.j.edgar AT dartmouth.edu at
+ [ruby-core:36248]. fixed #4716.
+
+Thu Jul 7 00:40:16 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (kill): check that the process exited or not before
+ terminating it. [Bug #4943]
+
+Wed Jul 6 23:13:19 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (opt_call_args): allow trailing comma after assoc
+ argument e.g. 'foo(bar:1,)'. fixed #3456
+
+Wed Jul 6 22:11:12 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * test/cgi/test_cgi_header.rb(test_cgi_header_nph): Validate date in
+ "Date:" header
+
+Wed Jul 6 21:29:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * cont.c (fiber_machine_stack_alloc): cleanup pointer arithmetic.
+ "size/sizeof(VALUE)" is ugly and easy confusing.
+ * cont.c (fiber_initialize_machine_stack_context): ditto.
+
+Wed Jul 6 21:24:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * cont.c (fiber_machine_stack_alloc): fix mprotect misuse. A stack
+ guard page should have PROT_NONE.
+ * cont.c (fiber_initialize_machine_stack_context):
+ th->machine_stack_maxsize shouldn't be included guard pages size.
+ [Bug #4983][ruby-dev:44043]
+
+Wed Jul 6 21:23:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * cont.c (fiber_machine_stack_alloc): use MAP_STACK if it's provided.
+
+Wed Jul 6 21:22:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * cont.c (fiber_machine_stack_alloc): use MAP_FAILED instead of -1.
+
+Wed Jul 6 21:21:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * cont.c (fiber_machine_stack_alloc): remove unnecessary cast.
+
+Wed Jul 6 18:10:13 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * test/cgi/test_cgi_header.rb(test_cgi_header_nph): Adding space after
+ comma.
+
+ * test/cgi/test_cgi_header.rb(test_cgi_header_nph): Remove variable
+ `now`. Suppress warning.
+
+Wed Jul 6 12:18:09 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * test/cgi/test_cgi_header.rb(test_cgi_header_nph): Fix bug depends to
+ time. The test fails if time past 1 second in line 136-145
+
+Tue Jul 5 15:28:04 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_here_document): should dispatch heredoc_end
+ scanner event on an empty here document. fixed Bug#4543.
+
+Tue Jul 5 13:49:26 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * addr2line.c: fix r32407 to check HAVE_ALLOCA_H.
+
+Tue Jul 5 14:05:43 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/webrick/httpauth/digestauth.rb (_authenticate):
+ Literal texts in HTTP ABNF is case-insensitive (RFC2616 2.1),
+ and a sample implementation in RFC2617 also ignores the case
+ of algorithms. So now this ignores those cases.
+ [ruby-dev:43965] [Feature #4936]
+
+ * lib/webrick/httpauth/digestauth.rb (initialize):
+ Because of above, opera_hack is useless and removed.
+
+Tue Jul 5 01:30:01 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread_pthread.c (native_sleep): cut the waiting time up to
+ 100,000,000 because Solaris cond_timedwait() return EINVAL if an
+ argument is greater than current_time + 100,000,000. This is
+ considered as a kind of spurious wakeup. The caller to native_sleep
+ should care about spurious wakeup.
+
+Tue Jul 5 01:24:26 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * cont.c: disable FIBER_USE_NATIVE on Solaris because resuming any
+ Fiber caused SEGV. I haven't follow up the issue deeply, but it
+ works when disabling the feature.
+
+Tue Jul 5 01:22:46 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * addr2line.c: include <alloca.h> to fix a build issue on Solaris.
+
+Tue Jul 5 00:49:05 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * ext/coverage/coverage.c: resurrect r32071 + add GC guard for
+ rb_coverages. [ruby-core:37352] [Bug #4927]
+ [ruby-core:36539] [Feature #4796]
+
+ * test/coverage/test_coverage.rb resurrect r32071.
+
+Mon Jul 4 22:24:46 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (get_stack): For NetBSD/FreeBSD, use
+ pthread_attr_getstack() if possible. and, remove an assumption
+ of stack growing direction.
+
+Mon Jul 4 20:42:31 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/coverage/coverage.c: revert r32071. The commit caused SEGV on
+ some minor nonfree OS. I have no means of debugging the bug. My
+ personal opinion is that such OS should be unsupported unless there
+ is an active maintainer. [ruby-core:37352]
+
+ * test/coverage/test_coverage.rb: ditto.
+
+Mon Jul 4 07:14:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * thread_pthread.c (get_stack): the return address of get_stack
+ must be the highest address of the current thread's stack.
+
+Mon Jul 4 06:37:22 2011 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/intern.h, thread_pthread.c (rb_reserved_fd_p,
+ RB_RESERVED_FD_P): added. This C API is to limit to access
+ fds which are used by RubyVM internal. In this version of
+ CRuby, return 1 if fd is communication pipe.
+ If your application needs to close all file descriptors to
+ present resource leak, skip internal fds using this C API.
+ We also define a macro RB_RESERVED_FD_P(fd). So you can write
+ #ifndef RB_RESERVED_FD_P
+ #define RB_RESERVED_FD_P(fd) 0
+ #endif
+ for Ruby 1.9.2 or previous version to write compatible extensions.
+ See [ruby-core:37727]
+
+ * thread_win32.c (rb_reserved_fd_p): added (return 0 for any fds).
+
+ * io.c (rb_io_initialize): raise ArgumentError if given fd is reserved by Ruby.
+
+Sun Jul 3 23:43:56 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * ext/extmk.rb (extmake): suppresses outputs from extconf.rb.
+ (extmake) warns a failure in extconf.rb.
+
+Sun Jul 3 13:44:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (ary_reject_bang): should not remove elements which are
+ not yielded. [Bug #2545]
+
+Sun Jul 3 06:10:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (get_stack): pthread_attr_getstack() doesn't
+ return stack start address, but stack base address. Thus,
+ we need to add stack size for getting stack start address.
+ And, we don't have to decrease guard size twice.
+ * thread_pthread.c (thread_start_func_1): don't use inaccurate
+ stack start guess if native_thread_init_stack() can be used.
+ [Bug #1813] [ruby-core:24540]
+
+Sun Jul 3 04:50:08 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (get_stack): add to a care of guard page on Mac
+ OS X. [Bug #1813] [ruby-core:24540]
+ * signal.c (ruby_signal): SIGBUS use alternative stack too.
+ * signal.c (sigbus): On Mac, thread stack overflow makes SIGBUS
+ instead of SIGSEGV. thus, added stackoverflow check.
+ * signal.c (default_handler): get rid of compilation warning.
+ * signal.c (Init_signal): ditto.
+
+Sat Jul 02 08:59:20 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/test_ocsp.rb
+ * test/openssl/test_x509_cert.rb: Perform SHA-256 tests only if
+ supported by the available OpenSSL version. Versions < 0.9.8 don't
+ support it. [ruby-core:37724]
+
+Sat Jul 2 07:17:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_reject_bang, rb_ary_delete_if): rejected
+ elements should be removed. fixed [Bug #2545]
+
+Sat Jul 2 01:57:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * NEWS: remove a description of Kernel#respond_to? because it has
+ been reverted at revision 28564.
+
+Sat Jul 2 00:58:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * NEWS: describe a change of multiplication of Bignum.
+
+Fri Jul 1 18:52:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * benchmark/bm_app_erb.rb: increase loop count. too short
+ measurement time makes less accuracy.
+ * benchmark/bm_app_factorial.rb: ditto.
+ * benchmark/bm_app_mandelbrot.rb: ditto.
+ * benchmark/bm_app_strconcat.rb: ditto.
+
+ * benchmark/bm_io_file_create.rb: ditto.
+ * benchmark/bm_io_file_read.rb: ditto.
+ * benchmark/bm_io_file_write.rb: ditto.
+
+ * benchmark/bm_so_concatenate.rb: ditto.
+ * benchmark/bm_so_lists.rb: ditto.
+ * benchmark/bm_so_matrix.rb: ditto.
+ * benchmark/bm_so_random.rb: ditto.
+ * benchmark/bm_so_sieve.rb: ditto.
+
+ * benchmark/bm_vm_thread_mutex1.rb: ditto.
+ * benchmark/bm_vm_thread_mutex2.rb: ditto.
+ * benchmark/bm_vm_thread_mutex3.rb: ditto.
+
+ * benchmark/bm_vm1_block.rb: cleanup.
+ * benchmark/bm_vm1_const.rb: cleanup.
+ * benchmark/bm_vm1_ensure.rb: cleanup.
+ * benchmark/bm_vm1_ivar.rb: cleanup.
+ * benchmark/bm_vm1_length.rb: cleanup.
+ * benchmark/bm_vm1_neq.rb: cleanup.
+ * benchmark/bm_vm1_not.rb: cleanup.
+ * benchmark/bm_vm1_rescue.rb: cleanup.
+ * benchmark/bm_vm1_simplereturn.rb: cleanup.
+ * benchmark/bm_vm1_swap.rb: cleanup.
+
+ * benchmark/bm_vm2_array.rb: cleanup.
+ * benchmark/bm_vm2_case.rb: cleanup.
+ * benchmark/bm_vm2_defined_method.rb: cleanup.
+ * benchmark/bm_vm2_eval.rb: cleanup.
+ * benchmark/bm_vm2_method.rb: cleanup.
+ * benchmark/bm_vm2_mutex.rb: cleanup.
+ * benchmark/bm_vm2_poly_method.rb: cleanup.
+ * benchmark/bm_vm2_poly_method_ov.rb: cleanup.
+ * benchmark/bm_vm2_proc.rb: cleanup.
+ * benchmark/bm_vm2_regexp.rb: cleanup.
+ * benchmark/bm_vm2_send.rb: cleanup.
+ * benchmark/bm_vm2_super.rb: cleanup.
+ * benchmark/bm_vm2_unif1.rb: cleanup.
+ * benchmark/bm_vm2_zsuper.rb: cleanup.
+
+ * benchmark/bm_vm_thread_alive_check1.rb: cleanup.
+
+Fri Jul 1 15:23:00 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix: Add LUP decomposition
+
+Fri Jul 1 15:21:14 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Allow non integer exponents for Matrix#**
+
+Fri Jul 1 15:13:25 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix: Add Eigenvalue Decomposition
+
+Fri Jul 1 15:10:22 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix: Add Matrix#round
+
+Fri Jul 1 11:41:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (tr_trans): free heap ptr when the str is not embedded.
+ patched by Eric Wong. [Bug #4956] [ruby-core:37708]
+
+Fri Jul 1 11:07:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (do_select): fix memory leak.
+ Patch by Eric Wong. Thank you! [Bug #4953] [ruby-core:37702]
+
+Fri Jul 1 08:21:28 2011 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_getivar): check vm state version
+ to invalidate inline cache (ivar index).
+ fixes Bug #4926.
+
+ * vm_insnhelper.c (vm_setivar): ditto.
+
+Fri Jul 1 08:03:15 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c, thread_pthread.c (WRITE_CONST): suppress warnings
+ `ignoring return value'.
+
+Fri Jul 1 06:41:36 2011 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_threadptr_check_signal): only wake up main thread.
+
+ * thread.c (rb_threadptr_execute_interrupts_common): check signal
+ delivery if it is main thread.
+ fixes [ruby-dev:44005] [Ruby 1.9 - Bug #4950]
+
+ * bootstraptest/test_fork.rb: add a test for above.
+
+ * signal.c (rb_get_next_signal): skip if signal_buff is empty.
+ (check signal_buff.size first)
+
+ * vm_core.h: remove unused variable rb_thread_t::exec_signal.
+
+ * thread.c (rb_thread_check_trap_pending): check
+ rb_signal_buff_size() because rb_thread_t::exec_signal
+ is no longer available.
+
+Fri Jul 1 03:28:25 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (Init_class_hierarchy): should name BasicObject
+ explicitly.
+
+ * variable.c (rb_const_defined_0): should not check for
+ superclasses as const_get.
+
+Fri Jul 1 03:24:03 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: mathn is still alive (should die soon).
+
+Thu Jun 30 23:50:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * misc/ruby-mode.el (ruby-indent-beg-re): Fix broken regular
+ expression. Fixes #4546
+
+Thu Jun 30 23:43:30 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl.c/.h: Added ossl_x509_name_sk2ary.
+ * ext/openssl/ossl.c: Replaced ossl_x509_ary2k by generic macro to
+ simplify future conversions.
+ * ext/openssl/ossl_ssl.c: Implement SSLSocket#client_ca.
+ * test/openssl/test_ssl.rb: Add test for SSLSocket#client_ca.
+ Thanks to Ippei Obayashi for providing the patch!
+ [ Ruby 1.9 - Feature #4481 ] [ruby-core:35461]
+
+Thu Jun 30 22:38:58 2011 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/bm_vm2_defined_method.rb: added to measure performance of
+ bmethod (method defined by define_method()).
+
+Thu Jun 30 22:17:04 2011 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_call_bmethod): fix to hook call/return event
+ for methods defined by define_method(). fixes Bug #4613.
+
+ * thread.c (call_trace_proc): Fix to skip if class is not given (0).
+ Note that ID and Class object are passed for call/return event
+ if the called method was defined by define_method().
+ If you are author of tracer/profiler/debugger, this may be an
+ important change. You should check passed class as zero or
+ non-zero instead of checking the event type.
+
+ * test/ruby/test_settracefunc.rb: add a test for above.
+
+Thu Jun 30 21:18:35 2011 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * configure.in: Add warnflags for XL/C on AIX during configure
+ to avoid [Bug #3971]. See [ruby-core:32859]
+
+Thu Jun 30 21:16:04 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (m_ajd): refers a constant.
+
+Thu Jun 30 20:54:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/console/io-console.gemspec: spin-off gem for 1.9.2.
+
+Thu Jun 30 20:36:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: trivial changes.
+
+Thu Jun 30 20:12:36 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_module.rb: tests for [Bug #3422] and [Bug #3423].
+
+Thu Jun 30 20:03:39 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: modified doc.
+
+Thu Jun 30 19:09:19 2011 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (thread_timer): ignore unknown errno.
+ (we observed that select(2) was canceled by errno=514 on
+ boron == Linux/Xen environment)
+
+Thu Jun 30 17:33:25 2011 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/objspace.c (ObjectSpace.count_tdata_objects):
+ Fix rdoc. Fixes Bug #3892.
+
+ * ext/objspace/objspace.c (ObjectSpace.count_tdata_objects):
+ Change key type if the klass of a object is zero (internal object).
+ Read rdoc for details.
+
+ * internal.h: export rb_objspace_data_type_name().
+
+Thu Jun 30 17:25:08 2011 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (ping_signal_thread_list, thread_timer):
+ fix to keep polling state if there are any ping-tasks.
+
+Thu Jun 30 12:25:34 2011 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (rb_thread_create_timer_thread): allocate
+ machine stack for the timer thread at least 12KB. FreeBSD 8.2
+ AMD64 causes machine stack overflow (SIGSEGV) only with
+ PTHREAD_STACK_MIN (maybe defined as 2KB).
+
+Thu Jun 30 09:36:37 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/weakref.rb: Attach documentation to WeakRef and add missing
+ documentation
+
+Thu Jun 30 09:30:14 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/yaml.rb: Document toplevel YAML and YAML::ENGINE to describe
+ Psych vs Syck engines.
+
+Thu Jun 30 09:21:52 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/cmath.rb: Hide handle_no_method_error from RDoc.
+ * error.c: Document or hide undocumented error classes.
+
+Thu Jun 30 07:49:04 2011 Eric Hodel <drbrain@segment7.net>
+
+ * hash.c: Document ENV
+
+Thu Jun 30 06:37:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe): ensure RUBYLIB_PREFIX stored
+ before RUBYLIB, even if MANGLED_PATH is enabled. fixed #1679.
+ MANGLED_PATH is disabled by the default and will be removed
+ completely in the future.
+
+Thu Jun 30 06:32:21 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/drb/drb.rb: Hide deprecated toplevel DRb constants.
+
+Thu Jun 30 06:17:02 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/cmath.rb (CMath.log): second argument: b can be nil.
+
+Thu Jun 30 06:23:28 2011 Eric Hodel <drbrain@segment7.net>
+
+ * thread.c (ruby_thread_s_pass): Fix typo.
+
+Thu Jun 30 06:16:53 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Update to RDoc 3.8 which contains fixes for documentation
+ in trunk.
+
+Thu Jun 30 02:53:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_threadptr_execute_interrupts_common): remove
+ meaningless native_thread_yield(). It never close a race.
+
+Thu Jun 30 02:41:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_thread_schedule_limits): minor optimization.
+ eliminate machine context saving when running time is enough small.
+
+Thu Jun 30 02:28:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_thread_schedule_rec): move interrupt_flag check to
+ rb_thread_schedule().
+ And also rename to rb_thread_schedule_limits() and remove
+ sched_depth argument. It's no longer called recursive.
+ * thread.c (rb_thread_schedule): add to check interrupt_flag as
+ above explained.
+
+ * thread.c (rb_threadptr_execute_interrupts_rec): rename to
+ rb_threadptr_execute_interrupts_common() and remove sched_depth
+ argument. It's no longer called recursive.
+
+ * thread.c (rb_thread_sleep): adapt the renaming.
+ * thread.c (rb_threadptr_execute_interrupts): ditto.
+ * thread.c (rb_thread_execute_interrupts): ditto.
+
+Thu Jun 30 01:31:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (thread_s_pass): change RDoc description and remove
+ a sample code. The actual implementation never behave as explained by
+ an example. It's a documentation bug.
+
+Thu Jun 30 00:54:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_thread_stop): change RDoc sample code. The old
+ example is buggy and may cause deadlock. The patch is
+ suggested by Heesob Park <phasis@gmail.com>. Thank you!
+ [Bug #3606][ruby-core:31454]
+
+Thu Jun 30 00:49:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_thread_wakeup): change RDoc sample code. The old
+ example is buggy and may not display anything by a race.
+ The patch is suggested by Heesob Park <phasis@gmail.com>.
+ Thank you! [Bug #3606][ruby-core:31454]
+
+Thu Jun 30 00:43:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_thread_run): change RDoc. The old example is buggy
+ and may cause deadlock. The patch is suggested by Heesob Park
+ <phasis@gmail.com>. Thank you! [Bug #3606][ruby-core:31454]
+
+Thu Jun 30 00:30:15 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/cmath.rb: make same exception for Math. fix [Bug #3137].
+
+Thu Jun 30 00:03:20 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/irb/completion.rb: complement correctly string literal. fix
+ [Bug #1145].
+
+Wed Jun 29 23:42:51 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: avoided using timev.
+ * ext/date/date_strftime.c: ditto.
+ * ext/date/date_tmx.h: ditto.
+
+Wed Jun 29 23:17:57 2011 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/openssl/ossl.h (OPENSSL_SYS_WIN32): support for mingw(msys).
+
+Wed Jun 29 23:09:14 2011 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/tk/extconf.rb (intptr_t, uintptr_t): support for the latest ActiveTcl with mingw.
+
+Wed Jun 29 22:49:10 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/irb/cmd/help.rb: support RDoc 3.7. fix [Bug #3760].
+
+Wed Jun 29 22:04:14 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * lib/tracer.rb: Tracer.on only if required by -r command-line option.
+ and consider --disable-gems option.
+ * test/test_tracer.rb: add tests for it.
+
+Wed Jun 29 13:55:36 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_const_get_0): should not look for superclasses if
+ the second optional argument is given for #const_get().
+ fix [Bug #3422] [Bug #3423]
+
+Wed Jun 29 12:07:27 2011 Eric Hodel <drbrain@segment7.net>
+
+ * math.c: Attach documentation for Math.
+ * object.c: Document NIL, TRUE, FALSE.
+ * io.c: Improve grammar in ARGF comment. Document STDIN/OUT/ERR.
+ Document ARGF global constant.
+ * lib/rake: Hide deprecated toplevel constants from RDoc (import from
+ rake trunk).
+ * lib/thwait.rb: Document ThWait.
+ * lib/mathn.rb: Hide Math redefinition from RDoc
+ * lib/sync.rb: Add a basic comment for Sync_m, Synchronizer_m, Sync,
+ Synchronizer.
+ * parse.y: Document SCRIPT_LINES__.
+ * hash.c: Document ENV class and global constant.
+ * vm.c: Document TOPLEVEL_BINDING.
+ * version.c: Document RUBY_* constants.
+ * ruby.c: Document DATA and ARGV.
+
+Wed Jun 29 10:13:12 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Matrix.zero can build rectangular matrices.
+ Vector#r should be called #magnitude
+
+Wed Jun 29 10:11:08 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Add Matrix#diagonal?, hermitian?, normal?,
+ orthogonal?
+ permutation?, symmetric?, {lower|upper}triangular?, unitary?, zero?
+
+Wed Jun 29 10:09:35 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Specialize Matrix#find_index to return [row, col]
+ and accept the same optional argument as #each
+
+Wed Jun 29 10:07:32 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Matrix#each{_with_index} can iterate over a subset
+ of the Matrix
+
+Wed Jun 29 06:21:02 2011 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (native_stop_timer_thread): skip to close
+ communication pipe to avoid timing bug (process termination timing).
+ The communication pipe will closed by OS.
+
+Wed Jun 29 06:09:54 2011 Koichi Sasada <ko1@atdot.net>
+
+ * error.c (rb_async_bug_errno): async-safe bug report function.
+ In timer thread, signal handler should use it.
+ The patch is contributed by Eric Wong <normalperson@yhbt.net>.
+ Refs: [ruby-core:37644] and [ruby-core:37647]
+
+ * thread_pthread.c: use rb_async_bug_errno().
+ And replace all fprintf() to write().
+
+ * internal.h (rb_async_bug_errno): add decl. of above func.
+
+Tue Jun 28 23:46:08 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/tracer.rb: count only non-internal libraries in stack trace,
+ ignoring custom_require.
+
+Tue Jun 28 21:44:58 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/irb/ruby-lex.rb: recognize '\char' in ruby statement.
+
+Tue Jun 28 20:39:29 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * lib/debug.rb (var_list): Command 'var *' did not work on 1.9(!).
+ global_variables, local_variables, and instance_variables returns
+ Symbols from 1.9 and need to stringify before evaling it.
+ See #4931.
+
+Tue Jun 28 19:23:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * signal.c: Now, USE_TRAP_SIGMASK depend on HAVE_PTHREAD_SIGMASK.
+ The code have already depended on pthread_sigmask since r27464.
+
+Tue Jun 28 15:09:21 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/benchmark.rb: merge eregon/benchmark.
+ https://github.com/eregon/ruby/tree/benchmark
+ patched by Benoit Daloze. [ruby-core:37593] [Bug #4940]
+
+ * lib/benchmark (Benchmark#bmbm): bmbm should be consistent with bm
+ for the return value.
+
+ * test/benchmark: remove preemptive test instead of skipping
+ I removed the preemptive test I wrote for Feature #4197.
+ I'll add it back when the implementation will be able to satisfy it.
+
+ * lib/benchmark (Benchmark#bmbm): remove useless explicit call,
+ #format is an alias of #to_s test/benchmark: add a test for
+ format of long time.
+
+ * lib/benchmark: fix label width: always add 1 to ensure there is a
+ space delimiter even with times over 100s
+ When I asked for Feature #4197, I wanted to make delimiting spaces
+ consistent for #bm and #bmbm.
+ But with times over 100s, the output contains no space between the
+ label and the first time (user).
+ Now both ensure there is always a space, even if that means 3 spaces
+ with times under 10s (because it is formatted as %10.6f)
+
+ * test/benchmark: let labels be a constant
+ lib/benchmark (Benchmark#realtime): avoid creating an unused Proc
+ lib/benchmark (Benchmark#benchmark): use ensure clause to restore
+ STDOUT.sync, as in #bmbm
+
+Tue Jun 28 13:41:51 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (native_stop_timer_thread): fixed commit miss of
+ r32244. grep sources before changing the signature of a function.
+
+Tue Jun 28 11:49:14 2011 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (consume_communication_pipe):
+ Make "buff" as static. (Maybe) "buff" can be shared between
+ any caller (any threads) because no one use the read values.
+ "buff" (1024 byte) on stack may cause stack overflow on
+ several environment (we found a crash on FreeBSD).
+ And remove const value "buff_size", and define CCP_READ_BUFF_SIZE
+ macro.
+
+Tue Jun 28 11:45:30 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rake: Update rake to fix some bugs and hide deprecated features
+ from RDoc.
+ * lib/rake/version.rb: Bump version to 0.9.2.1 to distinguish it from
+ the released version.
+ * NEWS: ditto
+
+Tue Jun 28 11:17:28 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Update to RDoc 3.7 (final)
+ * NEWS: ditto
+
+Tue Jun 28 10:18:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * process.c (rb_daemon): fix wrong #endif position.
+
+Tue Jun 28 07:50:32 2011 Eric Hodel <drbrain@segment7.net>
+
+ * object.c (Init_Object): Teach RDoc what Init_class_hierarchy does to
+ hook up ri for BasicObject, Object, Module and Class.
+
+Tue Jun 28 05:03:32 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * thread.c (rb_thread_local_aref): RDoc fix. Thread#[] example
+ had a race. See #4480.
+
+Tue Jun 28 01:22:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigMath_s_log): move BigMath.log from
+ bigdecimal/math.rb.
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb: ditto.
+
+ * test/bigdecimal/test_bigdecimal.rb: move test for BigMath.log from
+ test/bigdecimal/test_bigmath.rb.
+
+ * test/bigdecimal/test_bigmath.rb: ditto.
+
+Tue Jun 28 01:19:52 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/irb/ruby-lex.rb: fix [Bug #4232].
+
+Tue Jun 28 00:14:13 2011 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/drb.rb: fix [Bug #4409]. add DRbServer#here?.
+
+ * test/drb/test_drb.rb: ditto.
+
+ * test/drb/drbtest.rb: ditto.
+
+ * test/drb/ut_eq.rb: ditto.
+
+Tue Jun 28 00:08:43 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/irb/workspace.rb: fix BUG#4793.
+
+Mon Jun 27 22:06:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (consume_communication_pipe): don't use C99
+ style variable length array.
+
+Mon Jun 27 22:04:27 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (consume_communication_pipe): change return
+ type to void. caller doesn't use it.
+
+Mon Jun 27 21:29:50 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.h (rb_global_vm_lock_struct): add volatile to
+ gvl->waiting. now thread_timer() access it w/o lock.
+
+Mon Jun 27 21:16:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c: s/__gvl_acquire/gvl_acquire_common/ and
+ s/__gvl_release/gvl_release_common/.
+
+Mon Jun 27 11:41:47 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * thread_pthread.c (rb_thread_create_timer_thread):
+ the type of return value of write(2) is ssize_t.
+
+Mon Jun 27 09:57:02 2011 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (rb_thread_create_timer_thread):
+ Fixes missing initialization of oflags.
+
+Mon Jun 27 09:07:42 2011 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c: Stop polling in the timer thread when there are
+ no waiting thread. If there are 2 or more runnable threads,
+ the timer thread does polling. Avoid polling makes power save
+ for several computers (0.2W per a Ruby process, when I measured).
+ If outside-event such as signal or Thread#kill was occurred
+ when the timer thread does not do polling, then wake-up
+ the timer thread using communication-pipe (the timer thread
+ waits this communication-pipe with select(2)).
+ The discussion about this modification can be found from the post
+ [ruby-core:33456] and other related posts.
+ Note that Eric Wong and KOSAKI Motohiro give us the huge
+ contributions for this modification. Thanks.
+
+ * thread_pthread.c (rb_thread_wakeup_timer_thread): add a function.
+ This function wakes up the timer thread using communication-pipe.
+
+ * thread.c (rb_thread_stop_timer_thread): add a parameter which
+ specify closing communication-pipe or not.
+
+ * thread.c (rb_thread_terminate_all): do not stop timer thread here
+ (ruby_cleanup() terminate timer thread).
+
+ * signal.c: wake up timer thread using
+ rb_thread_wakeup_timer_thread() from signal handler.
+
+ * eval.c (ruby_cleanup): use rb_thread_stop_timer_thread(1).
+
+ * process.c: use rb_thread_stop_timer_thread(0)
+ (reuse communication-pipe).
+
+ * thread_win32.c (rb_thread_wakeup_timer_thread): add a dummy
+ function.
+
+ * vm_core.h: add and fix decl. of functions.
+
+Mon Jun 27 08:01:19 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_parse.c: should use ALLOCA_N.
+
+Mon Jun 27 01:34:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/etc/test_etc.rb (TestEtc#test_get{pw,gr}nam): skip entries
+ start with + sign, which means NIS. these are returned in the
+ case that passwd and group entries in /etc/nsswitch.conf are set
+ to use "nis" explicitly on Debian. fixed #3683
+
+Mon Jun 27 00:44:53 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * parse.y (rb_parser_end_seen_p): fix documentation about return
+ value. patched by Sho Hashimoto. [Bug #4511]
+
+Mon Jun 27 00:40:47 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * hash.c (rb_hash_reject): add documentation that Hash#reject
+ without block returns enumerator.
+ patched by Michael Edgar [Bug #4847] [ruby-core:36800]
+
+Sun Jun 26 23:49:21 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/test_switch_hitter.rb: added a test.
+
+ Sun Jun 26 22:21:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: refactoring.
+
+Sun Jun 26 18:03:30 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * parse.y: comma at the end of line is no longer allowed.
+ A patch from Yukihiro Matsumoto <matz AT ruby-lang.org>.
+ (fixed #3456).
+
+Sun Jun 26 13:35:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * vm_dump.c (rb_vm_bugreport): change CrashReporter suggestion messages
+ on Mac. It should be placed after "-- C level backtrace" line.
+ Suggested by Endoh-san.
+
+ <before>
+ -- See Crash Report log file under ~/Library/Logs/CrashReporter or ---------
+ -- /Library/Logs/CrashReporter, for the more detail of ---------------------
+ -- C level backtrace information -------------------------------------------
+
+ <after>
+ -- C level backtrace information -------------------------------------------
+
+ See Crash Report log file under ~/Library/Logs/CrashReporter or
+ /Library/Logs/CrashReporter, for the more detail of.
+
+Sun Jun 26 10:08:28 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/extconf.rb
+ * ext/openssl/ossl_missing.h/.c: add ASN1_put_eoc if missing.
+
+ * ext/openssl/ossl_asn1.c: introduce ossl_asn1_object_size and
+ ossl_asn1_put_object to wrap functionality depending on OpenSSL
+ version in use.
+ Fixes [ Ruby 1.9 - Bug #4916 ] reported by Hiroshi Nakamura.
+ [ruby-core:37286]
+
+Sun Jun 26 01:00:15 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (date_strftime_internal): removed meaningless braces.
+ * ext/date/date_core.c (gengo): the value should be int.
+
+Sat Jun 25 23:45:30 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * vm_insnhelper.c (vm_search_superclass): avoid control frame
+ stack overrun. currently super() in Proc created in a method
+ defined by Module#define_method raise NoMethodError. [Bug #4881]
+ * test/ruby/test_method.rb t_super_in_proc_from_define_method):
+ add test for it.
+
+Sat Jun 25 23:23:14 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * thread.c (sleep_forever): now Kernel#sleep don't wakeup by
+ signal handler execution. [Bug #4072]
+
+Sat Jun 25 23:14:47 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * thread.c (rb_threadptr_check_signal): remove unnecessary th->status
+ backup. fix race condition which may results unexpected main thread's
+ status transition. see #4072
+
+Fri Jun 24 19:57:30 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * lib/webrick/httprequest.rb (setup_forwarded_info): Parsing request
+ header failed when the request is from 2 or more Apache reverse
+ proxies. It's said that all X-Forwarded-* headers will contain more
+ than one (comma-separated) value if the original request already
+ contained one of these headers. Since we could use these values as
+ Host header, we choose the initial(first) value. See #4922.
+
+ * test/webrick/test_httprequest.rb (test_forwarded): Test it.
+
+Fri Jun 24 17:06:33 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (proc_daemon): should not start timer thread
+ twice. fixed Bug#4920.
+
+Fri Jun 24 15:54:14 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_shutdown): Try to shutdown SSL
+ connection more gracefully. Call SSL_shutdown() max 4 times until it
+ returns 1 (success). Bi-directional SSL close has several states but
+ SSL_shutdown() kicks only 1 transition per call. Max 4 is from
+ mod_ssl.c of Apache httpd that says 'max 2x pending + 2x data = 4'.
+ See #4237.
+
+Fri Jun 24 07:24:37 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rake/version.rb: Fixed VERSION to work with tool/rbinstall.rb
+ * bin/rake: Import bin/rake from 0.9.2
+ * tool/rbinstall.rb (install): Rake::VERSION is now in
+ lib/rake/version.rb. Fixes `make install`
+
+Fri Jun 24 07:11:37 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rake: Import Rake 0.9.2
+
+Fri Jun 24 00:44:15 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (c_valid_{julian,gregorian}_p): fixed the range of month.
+
+Fri Jun 24 00:14:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: trivial changes on text.
+
+Thu Jun 23 22:46:57 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_x509name.c: Add X509::Name#hash_old as a wrapper
+ for X509_NAME_hash_old in OpenSSL 1.0.0. See #4805
+
+ * test/openssl/test_x509name.rb (test_hash): Make test pass with
+ OpenSSL 1.0.0.
+
+ * NEWS: Add it.
+
+Thu Jun 23 19:30:53 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_set_time): Check
+ argument type with NUM2LONG if the arg is not a Time object.
+ See #4919.
+
+ * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_set_timeout): Check
+ type with NUM2LONG. Time as an arg is not allowed. See #4919.
+
+ * test/openssl/test_ssl_session.rb (test_session_time,
+ test_session_timeout): Test it.
+
+Wed Jun 23 13:30:30 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * signal.c(ruby_atomic_exchange): Fix definition style.
+
+Wed Jun 22 22:34:05 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_session_new_cb): Return 0 to
+ OpenSSL from the callback for SSL_CTX_sess_set_get_cb().
+ Returning 0 means to OpenSSL that the session is still valid
+ (since we created Ruby Session object) and was not freed by us with
+ SSL_SESSION_free(). Call SSLContext#remove_session(sess) in
+ session_get_cb block if you don't want OpenSSL to cache the session
+ internally.
+ This potential issue was pointed by Ippei Obayashi. See #4416.
+
+ * test/openssl/test_ssl_session.rb (test_ctx_server_session_cb): Test
+ it.
+
+Wed Jun 22 22:21:17 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_ssl_session.c: Respect T_BIGNUM time values. Patch by
+ Tomoyuki Chikanaga.
+ [ Ruby 1.9 - Bug #4919 ] [ruby-dev:43869]
+
+Wed Jun 22 21:29:25 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/socket/depend (SOCK_HEADERS): use $(top_srcdir) instead of
+ $(topdir). sorry!
+
+Wed Jun 22 19:47:03 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * cont.c (cont_capture): add volatile.
+ On clang -O, it is needed to avoid the optimization.
+ With this and llvm/clang's recent fix, clang 3.0 can
+ build ruby-trunk with -O option.
+
+ * cont.c (cont_capture): use for-loop.
+
+ * array.c (rb_ary_each): add volatile and use it.
+
+ * vm_insnhelper.c (vm_call_cfunc): ditto.
+
+Wed Jun 22 18:20:46 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_session_remove_cb):
+ OpenSSL::SSL::SSLContext#session_remove_cb was broken. It wrongly
+ tried to call the session_*new*_cb callback.
+
+ * test/openssl/test_ssl_session.rb (class OpenSSL): Test it.
+
+Wed Jun 22 17:37:49 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl.h: Introduced OSSL_BIO_reset macro for PEM/DER
+ fallback scenarios.
+
+ * ext/openssl/ossl_pkey_dsa.c
+ * ext/openssl/ossl_x509req.c
+ * ext/openssl/ossl_pkey_rsa.c
+ * ext/openssl/ossl_pkey_ec.c
+ * ext/openssl/ossl_ssl_session.c
+ * ext/openssl/ossl_x509crl.c
+ * ext/openssl/ossl_pkey.c
+ * ext/openssl/ossl_pkey_dh.c
+ * ext/openssl/ossl_x509cert.c
+ * ext/openssl/ossl_pkcs7.c: Use OSSL_BIO_reset.
+
+ * ext/openssl/ossl_ssl.c
+ * ext/openssl/ossl_cipher.c
+ * ext/openssl/ossl_pkey_ec.c
+ * ext/openssl/ossl_pkcs12.c
+ * ext/openssl/ossl_ssl_session.c: Replace rb_raise occurrences by
+ ossl_raise. This automatically flushes OpenSSL's error queue.
+
+ * ext/openssl/ossl_pkcs7.c: Raise error if DER fallback for parsing
+ fails.
+
+ * test/openssl/test_pkey_ec.rb
+ * test/openssl/test_pkey_dsa.rb
+ * test/openssl/test_pkey_rsa.rb: Add assertions that OpenSSL.errors is
+ empty.
+
+ * test/openssl/test_pkey_rsa.rb: Remove initial OpenSSL.errors call in
+ test_new.
+ [ Ruby 1.9 - Bug #4885 ] [ruby-core:37134]
+
+Wed Jun 22 15:01:24 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_ssl.c: Use SSL_MODE_RELEASE_BUFFERS if available.
+ Thanks, Eric Wong, for providing the patch.
+ [ Ruby 1.9 - Feature #4672 ] [ruby-core:36127]
+
+Wed Jun 22 14:47:53 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/test_buffering.rb
+ * test/openssl/test_pkcs12.rb: Inherit from Test::Unit::TestCase
+ instead of MiniTest::Unit::TestCase. [ruby-core:37275]
+
+Wed Jun 22 12:41:03 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_to_der):
+ OpenSSL::SSL::Session#to_der was broken. Fix buffer handling.
+
+ * test/openssl/test_ssl_session.rb (test_session): Test it.
+
+Wed Jun 22 12:38:52 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * test/openssl/test_ssl_session.rb: Split out SSL::Session related
+ tests from test_ssl.rb
+
+Wed Jun 22 03:20:52 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: Fix cyclic references of
+ objects. Thanks to CvX for reporting the bug and a test case.
+ * test/psych/test_object.rb: test for cyclic object references.
+
+Wed Jun 22 02:39:54 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTP.post_form): Do not ignore query part of
+ the given URI to post. See #655.
+
+ * test/net/http/test_http.rb, test/net/http/utils.rb: Test it.
+
+Wed Jun 22 01:28:13 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * test/openssl/test_x509store.rb (test_set_errors): Redhat is
+ distributing a patched version of OpenSSL that allows multiple CRL
+ for a key (multi-crl.patch.) Make test pass on such env. See #4122,
+ #4554.
+
+Tue Jun 21 21:50:37 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * lib/webrick/httpresponse.rb (HTTPResponse#setup_header): Close
+ HTTP/1.1 connection when returning an IO object as response body
+ without setting HTTPResponse#chunked to true. See #855 no.1.
+
+ * test/webrick/test_httpserver.rb: Test it.
+
+Tue Jun 21 21:27:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * internal.h: move rb_thread_io_blocking_region() declaration
+ from intern.h to internal.h. It's still experimental API and
+ need more discussion. [ruby-dev:43698]
+ * include/ruby/intern.h: ditto.
+
+ * ext/socket/rubysocket.h: include internal.h.
+ * ext/socket/depend: add internal.h dependency.
+ * ext/socket/extconf.rb: add $INCFLAGS to topdir.
+
+Tue Jun 21 20:38:47 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (datetime_s_*): canonicalize 24 o'clock.
+
+Tue Jun 21 19:46:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_thread.rb (TestThread#test_priority): enable
+ this test again. Current GVL respect thread priority rather
+ than past.
+
+Tue Jun 21 13:25:35 2011 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/readline.c (readline_getc): applied a patch in
+ #3827 by by Akio Tajima <artonx AT yahoo.co.jp>. (see #3827)
+
+Tue Jun 21 13:16:31 2011 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/extconf.rb: fixed bug, specify --disable-libedit
+ then disable libedit, does not specify then check readline and
+ libedit if failed checking readline. (fixes #3375)
+
+Mon Jun 20 22:52:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (before_exec): use sig_do_nothing instead of SIG_DFL
+ for avoiding a race.
+ * process.c (sig_do_nothing): new function.
+
+Mon Jun 20 21:31:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (thread_timer): rename timeout_10ms to
+ time_quantum. it's no longer 10ms.
+
+Mon Jun 20 18:46:02 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_cipher.c, ext/openssl/lib/openssl/cipher.rb:
+ Documentation fix by Ippei Obayashi. See #4419.
+
+Mon Jun 20 15:41:33 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * lib/webrick/cookie.rb (WEBrick::Cookie.parse): Revert r31228.
+ r31228 was for allowing the 'Cookie:' header which did not have no
+ SP after ';' for separating cookie-pairs but RFC6265 requires single
+ SP after ';' there. We allow multiple SPs here for compatibility
+ with older WEBrick version.
+
+ * test/webrick/test_cookie.rb: Test it.
+
+Sun Jun 19 13:31:26 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * NEWS: Introduce --hide-skip on test/unit.
+
+Sun Jun 19 10:05:16 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit/parallel.rb: Override Test::Unit::TestCase#on_parallel_worker?
+ only when $0 == __FILE__.
+
+ * lib/test/unit/parallel.rb: Run Test::Unit::Worker.run only when
+ $0 == __FILE__.
+
+Sat Jun 18 23:59:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (fill_cbuf): finish reading at EOF, and the readconv has
+ been cleared by another thread while io_fillbuf() is waiting at
+ select(). a patch in [ruby-core:37197] by Hiroshi Shirosaki
+ <h.shirosaki AT gmail.com>. fixed #3840
+
+Sat Jun 18 21:36:29 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c: remove GVL_DEBUG
+
+Sat Jun 18 21:32:02 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * vm.c, vm_core.h (rb_vm_stack_to_heap): remove const.
+ It makes compilations warnings.
+
+Sat Jun 18 18:54:15 2011 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c, vm_core.h (rb_vm_stack_to_heap): fix "const" place.
+
+Sat Jun 18 17:23:38 2011 Tanaka Akira <akr@fsij.org>
+
+ * eval.c, hash.c, load.c, proc.c, range.c, thread.c, time.c: don't
+ declare internal functions.
+
+ * internal.h, vm_core.h: declare internal functions.
+
+ * array.c: include internal.h.
+
+ * common.mk: update dependency for array.o.
+
+Sat Jun 18 13:39:33 2011 Tanaka Akira <akr@fsij.org>
+
+ * internal.h: declarations declared in include/ruby/*.h removed.
+
+Sat Jun 18 12:42:17 2011 Tanaka Akira <akr@fsij.org>
+
+ * method.h, internal.h iseq.h: declare internal functions.
+
+ * compile.c, eval.c, iseq.c, object.c, parse.y, proc.c, process.c,
+ thread.c, vm.c, vm_eval.c, vm_insnhelper.c, vm_method.c: don't
+ declare internal functions.
+
+ Note that rb_method_entry_eq() is defined in vm_method.c but
+ there was a declaration in proc.c with different const-ness.
+ Now it is declared in method.h with same const-ness to the
+ definition.
+
+ * object.c (rb_mod_module_exec): don't declare functions declared in
+ include/ruby/intern.h.
+
+Sat Jun 18 12:05:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/backward/classext.h: for evil gems. fixed #4803
+
+Sat Jun 18 11:12:13 2011 Tanaka Akira <akr@fsij.org>
+
+ * common.mk: update dependencies.
+
+Sat Jun 18 11:09:03 2011 Tanaka Akira <akr@fsij.org>
+
+ * io.c: suppress warnings.
+
+Sat Jun 18 10:22:39 2011 Tanaka Akira <akr@fsij.org>
+
+ * internal.h: declare more internal functions.
+
+ * iseq.h (rb_method_get_iseq): declared.
+
+ * compile.c, eval.c, eval_error.c, iseq.c, parse.y, proc.c, range.c,
+ ruby.c, time.c, util.c, vm.c: don't declare internal functions.
+
+ * eval.c, parse.y, thread_pthread.c: non-existing function declarations
+ removed.
+
+Sat Jun 18 08:12:54 2011 Tanaka Akira <akr@fsij.org>
+
+ * common.mk: dependencies updated.
+
+ * tool/update-deps: new file to assist update dependencies in
+ common.mk.
+
+Sat Jun 18 07:27:27 2011 Tanaka Akira <akr@fsij.org>
+
+ * internal.h: declare internal functions here.
+
+ * node.h: declare NODE dependent internal functions here.
+
+ * iseq.h: declare rb_iseq_t dependent internal functions here.
+
+ * vm_core.h: declare rb_thread_t dependent internal functions here.
+
+ * bignum.c, class.c, compile.c, complex.c, cont.c, dir.c, encoding.c,
+ enumerator.c, error.c, eval.c, file.c, gc.c, hash.c, inits.c, io.c,
+ iseq.c, load.c, marshal.c, math.c, numeric.c, object.c, parse.y,
+ proc.c, process.c, range.c, rational.c, re.c, ruby.c, string.c,
+ thread.c, time.c, transcode.c, variable.c, vm.c,
+ tool/compile_prelude.rb: don't declare internal functions declared
+ in above headers. include above headers if required.
+
+ Note that rb_thread_mark() was declared as
+ void rb_thread_mark(rb_thread_t *th) in cont.c but defined as
+ void rb_thread_mark(void *ptr) in vm.c. Now it is declared as
+ the later in internal.h.
+
+Sat Jun 18 02:36:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (VpNewRbClass): fix type of the 2nd
+ argument.
+
+ * ext/bigdecimal/bigdecimal.h: ditto.
+
+Sat Jun 18 02:30:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): move BigMath.exp from
+ bigdecimal/math.rb.
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb: ditto.
+
+ * test/bigdecimal/test_bigdecimal.rb: move test for BigMath.exp from
+ test/bigdecimal/test_bigmath.rb.
+
+ * test/bigdecimal/test_bigmath.rb: ditto.
+
+Sat Jun 18 00:20:54 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: do not define wnum[01].
+
+Fri Jun 17 18:57:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): fix return value of obj[a,*b]=c.
+
+Fri Jun 17 13:09:45 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/curses/curses.c: Clean up documentation.
+
+Fri Jun 17 09:25:14 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/curses/curses.c: Document curses constants. Patch by Vincent
+ Batts. [Ruby 1.9 - Bug #4880]
+
+Fri Jun 17 09:11:05 2011 Eric Hodel <drbrain@segment7.net>
+
+ * object.c: Document Module#method_added and #method_removed.
+ Patch by Bryce Kerley. [Ruby 1.9 - Feature #4867]
+
+Fri Jun 17 08:50:16 2011 Eric Hodel <drbrain@segment7.net>
+
+ * io.c: Improve documentation of IO and File open and new.
+ Patch by Roger Pack. [Ruby 1.9 - Bug #4790]
+
+Fri Jun 17 07:53:50 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/csv.rb: Document #raw_encoding. Patch by David Czarnecki.
+ [Ruby 1.9 - Bug #4874]
+
+Fri Jun 17 07:46:50 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/benchmark.rb: Document Benchmark::Tms#memberwise. Patch by
+ David Czarnecki. [Ruby 1.9 - Bug #4873]
+
+Fri Jun 17 07:38:31 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/prettyprint.rb: Improve documentation. Patch by Ysiad
+ Ferreiras. [#4834]
+
+Fri Jun 17 07:23:03 2011 Eric Hodel <drbrain@segment7.net>
+
+ * array.c (rb_ary_drop): Improve documentation. Patch by Caley Woods.
+ [Ruby 1.9 - Bug #4858]
+
+Fri Jun 17 06:11:31 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/webrick/log.rb: Improve documentation of BasicLog and Log.
+ Patch by Olivier Brisse. [Ruby 1.9 - Bug #4833]
+ * lib/webrick/httpstatus.rb: Improve documentation of
+ WEBrick::HTTPStatus. Patch by Olivier Brisse.
+ [Ruby 1.9 - Bug #4833]
+
+Fri Jun 17 04:48:22 2011 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c, thread_pthread.h: remove unused variables.
+ (native_thread_data_t::gvl_cond, native_thread_data_t::gvl_next)
+
+Thu Jun 16 14:32:31 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * time.c (rb_time_new): prevent overflow by "* 1000".
+
+Fri Jun 17 03:07:36 2011 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/bm_vm4_thread_create_join.rb,
+ benchmark/bm_vm4_thread_mutex[1-3].rb: renamed to
+ bm_thread_* (fix last rename).
+
+Fri Jun 17 02:26:47 2011 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (native_thread_create): fix debug message.
+ (add last newline)
+
+Thu Jun 16 23:40:49 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_thread_schedule_rec): fix {UN,}LIKELY macro misuse.
+ * gc.c (rb_newobj): ditto.
+ * vm_insnhelper.c (vm_method_search): ditto.
+
+Thu Jun 16 20:06:15 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * test/testunit/test_parallel.rb: Fix Regexp for test.
+
+ * test/testunit/tests_for_parallel/test_third.rb: Use
+ Test::Unit::TestCase#on_parallel_worker? for detecting worker.
+
+ * lib/test/unit/testcase.rb(Test::Unit::TestCase#on_parallel_worker?):
+ New Method Test::Unit::TestCase#on_parallel_worker? returns true
+ when a testcase is running on parallel worker.
+ * lib/test/unit/parallel.rb(Test::Unit::TestCase#on_parallel_worker?):
+ ditto.
+
+Thu Jun 16 19:27:12 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * test/test_securerandom.rb: Add testcase. This testcase does NOT aim
+ to test cryptographically strongness and randomness. It includes
+ the test for PID recycle issue of OpenSSL described in #4579 but
+ it's disabled by default.
+
+Thu Jun 16 17:55:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_io.rb (TestIO#test_copy_stream_socket): fix
+ test hanging up issue. Patch by CHIKANAGA Tomoyuki.
+
+Thu Jun 16 15:17:39 2011 Eric Hodel <drbrain@segment7.net>
+
+ * variable.c (const_missing): Add simple example of const_missing.
+ Patch by Anuj Dutta. [Ruby 1.9 - Bug #4794]
+
+Thu Jun 16 15:09:29 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/monitor.rb: Improve documentation. Patch by Sandor Szucs.
+ [Ruby 1.9 - Bug #4823]
+
+Thu Jun 16 14:54:09 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/webrick/utils.rb: Document WEBrick::Utils. Patch by Olivier
+ Brisse. [Ruby 1.9 - Bug #4819]
+
+Thu Jun 16 14:26:46 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/webrick/httpservlet/erbhandler.rb: Allow the ERB document to
+ alter the content-type of the response. [Ruby 1.9 - Bug #4685]
+
+Thu Jun 16 14:15:47 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/timeout.rb: Clarify timeout duration types. Patch by Alf Mikula.
+ [Ruby 1.9 - Bug #4791]
+ * lib/net/http.rb: ditto
+
+Thu Jun 16 13:25:25 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc*: Import RDoc 3.7 release candidate
+
+Thu Jun 16 11:35:09 2011 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (search_response): parses SEARCH responses from
+ the Yahoo IMAP server correctly. patched by Mark Nadig. [Bug #4509]
+
+Thu Jun 16 09:12:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * fix for build on solaris 10.
+
+Thu Jun 16 09:08:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/io/console/test_io_console.rb (TestIO_Console#test_sync):
+ fix for daemon process.
+
+Thu Jun 16 07:58:01 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * test/testunit/test_parallel.rb(test_ignore_tzero): Test for r32109.
+
+ * test/testunit/tests_for_parallel/test_third.rb: Use another way to
+ detect that test is running on worker. This fixes sometimes
+ TestParallel failing.
+
+Thu Jun 16 07:20:06 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit.rb(Test::Unit::Runner#_run_parallel): Ignore -j0
+ because it makes blocking forever by IO.select.
+
+Thu Jun 16 03:08:11 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/testunit/test_parallel.rb (TestParallel::TestParallelWorker#
+ setup): now can run on Windows, probably.
+
+ * test/testunit/test_parallel.rb (TestParallel::TestParallel#setup):
+ ditto.
+
+Thu Jun 16 03:00:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread.c (do_select): Windows: no need to poll if select(2) is
+ cancelable.
+
+ * thread_win32.c (native_fd_select): new function to make select(2)
+ cancelable.
+
+ * thread_win32.c (rb_w32_check_interrupt): new function for checking
+ interrupt.
+
+ * win32/win32.c (rb_w32_select_with_thread): new function. cancelable
+ select(2).
+
+ * win32/win32.c (rb_w32_select): use above function internally.
+
+Wed Jun 15 23:30:45 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * gc.c: fix a regression by r31690 on AIX because AIX malloc
+ return NULL if it's passed 0. But some caller don't expect it.
+ patch by Yutaka Kanemoto. [ruby-dev:43779]
+ (vm_malloc_prepare): return calculated size.
+ (vm_xmalloc): use above result.
+ (vm_xcalloc): ditto.
+
+Wed Jun 15 23:11:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c: remove BLOCKING_REGION_CORE() macro. It's no longer used
+ since r32022.
+
+Wed Jun 15 21:00:47 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/test_config.rb: execute based on the existence of the
+ OpenSSL module.
+
+Wed Jun 15 12:35:11 2011 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_io.rb (test_copy_stream_socket): wait a child process
+ before SIGUSR1 handler is removed.
+
+ * test/pathname/test_pathname.rb (define_assertion): use line number
+ for test method names.
+
+Wed Jun 15 10:37:43 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (rb_stat_rdev): use DEVT2NUM.
+
+ * file.c (rb_stat_rdev_major): ditto.
+
+ * file.c (rb_stat_rdev_minor): ditto.
+
+Wed Jun 15 05:12:59 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/tcltklib.c (lib_eventloop_core): revert the last change (it's
+ the part for ruby_1_8), and use rb_thread_check_ints() when RUBY_VM
+ is defined.
+
+Wed Jun 15 04:42:47 2011 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/bm_vm3_thread_*.rb: renamed bm_vm3_thread_*.rb to
+ benchmark/bm_vm_thread_*.rb.
+
+Wed Jun 15 04:28:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * benchmark/bm_vm4_thread_pass.rb: rename bm_vm4* to
+ bm_vm_thread_*. suggested by ko1.
+ * benchmark/bm_vm4_pipe.rb: ditto.
+ * benchmark/bm_vm4_alive_check1.rb: ditto.
+ * benchmark/bm_vm4_pass_flood.rb: ditto.
+
+Wed Jun 15 03:52:50 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * benchmark/bm_vm4_pass_flood.rb: new benchmark for GVL fairness.
+ * benchmark/bm_vm4_alive_check1.rb: ditto.
+
+Wed Jun 15 01:27:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (gvl_yield): fix live lock issue on 1-2 cpus
+ system. It's additional fix for r32021.
+ * thread_pthread.c (gvl_init): add switch_wait_cond.
+ * thread_pthread.h (typedef struct rb_global_vm_lock_struct): ditto.
+
+Tue Jun 14 23:16:22 2011 Tanaka Akira <akr@fsij.org>
+
+ * bootstraptest/runner.rb (show_progress): refine verbose mode.
+ (exec_test): ditto.
+
+Tue Jun 14 23:02:36 2011 Tanaka Akira <akr@fsij.org>
+
+ * bootstraptest/runner.rb (show_progress): extracted from assert_check.
+ (assert_check): use show_progress.
+ (assert_normal_exit): ditto.
+ (assert_finish): ditto.
+ (flunk): ditto.
+
+Tue Jun 14 22:51:42 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/test_*.rb: added tests.
+
+Tue Jun 14 22:09:58 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: renamed some functions.
+ * ext/date/date_core.c: modified doc.
+
+Tue Jun 14 21:26:01 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * cont.c (cont_save_thread): add new utility function.
+ rb_context_t::saved_thread.machine_stack_start and
+ machine_stack_end should be cleared immediately after a snapshot of
+ current thread is stored to saved_thread. [ruby-dev:43680] [Bug #4855]
+ this change aims to get rid of unnecessary GC mark at machine stack.
+
+Tue Jun 14 19:50:49 2011 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_autoload.rb: remove temporary directory.
+
+Tue Jun 14 11:05:03 2011 Narihiro Nakamura <narihiro@netlab.jp>
+
+ * gc.c (rb_gc_set_params): call initial_expand_heap if
+ initial_heap_min_slots is set.
+
+Tue Jun 14 11:02:08 2011 Narihiro Nakamura <narihiro@netlab.jp>
+
+ * gc.c: use size_t.
+
+Tue Jun 14 01:10:38 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/coverage/test_coverage.rb: add a test for restart. a patch
+ from Xavier Shay. [ruby-core:36745]
+
+Tue Jun 14 01:05:10 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/coverage/coverage.c: make it restartable. [ruby-core:36539]
+
+Mon Jun 13 23:55:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_thread_schedule_rec): call gvl_yield() unconditionally.
+ * thread_pthread.c: remove HAVE_GVL_YIELD macro.
+ * thread_win32.c (gvl_yield): new. this fallback logic was moved from
+ rb_thread_schedule_rec().
+
+Mon Jun 13 23:50:25 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/io/console/console.c (console_dev): typo.
+
+Mon Jun 13 23:38:23 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_parse_string): flush delayed token. based on a
+ patch by Masaya Tarui in [ruby-dev:43762]. Bug #4544
+
+ * parse.y (yylex): revert r24557. delayed token at the end of
+ string should be flushed already by the above change.
+
+Mon Jun 13 23:33:31 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/console/console.c (console_dev): console should be
+ unbuffered.
+
+ * ext/io/console/console.c (console_dev): take care of no-ctty
+ case.
+
+Mon Jun 13 23:06:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c: rewrite GVL completely. This fix improve some
+ benchmark dramatically (e.g. vm3_thread_mutex result changed
+ form 120.601sec to 3.426sec).
+ * thread_win32.c: ditto.
+ * thread_pthread.h: ditto.
+ * vm_core.h: ditto.
+ * thread.c: ditto.
+
+Mon Jun 13 23:11:52 2011 Tanaka Akira <akr@fsij.org>
+
+ * test/socket/test_unix.rb: don't use Thread.abort_on_exception.
+
+Mon Jun 13 23:05:01 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/unixsocket.c (unix_send_io): race condition fixed.
+ (unix_recv_io): ditto.
+ fixed by Eric Wong. [ruby-core:35574]
+
+ * test/socket/test_unix.rb: test added for above problem.
+
+Mon Jun 13 21:41:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_win32.c (native_cond_signal): remove unnecessary rb_bug().
+ It's additional fix for r32021. [Bug #4696]
+
+Mon Jun 13 20:50:49 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/test_ec.rb
+ test/openssl/test_pkey_ec.rb: merge both files into test_pkey_ec.rb.
+ Removed redundant group instantiation from PKey tests.
+ * test/openssl/utils.rb: only create TEST_PKEY_EC_P256V1 if EC is
+ defined.
+
+Mon Jun 13 20:28:24 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/digest.rb: remove MDC2 from test, it is not available
+ by default in an OpenSSL installation.
+
+Mon Jun 13 20:18:55 2011 Koichi Sasada <ko1@atdot.net>
+
+ * vm_core.h, vm_insnhelper.h: move decl. of
+ ruby_vm_global_state_version and related macros
+ from vm_core.h to vm_insnhelper.h.
+
+ * vm.c (vm_clear_all_cache): added. This function is called
+ when ruby_vm_global_state_version overflows.
+ TODO: vm_clear_all_inline_method_cache() is only place holder.
+ We need to implement it ASAP.
+
+ * vm_method.c (vm_clear_global_method_cache): added.
+
+Mon Jun 13 19:46:21 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/cmath.rb: add new method Object#real?. fix #3137
+
+Mon Jun 13 18:52:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (is_kind_of_BigDecimal): new function to
+ examine the whether the object is kind of BigDecimal.
+
+Mon Jun 13 18:49:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): use GetVpValueWithPrec
+ for Float and Rational arguments.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_new, test_cmp, test_power):
+ add and modify tests for the above change.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): modify coding style to
+ match ruby's standard.
+
+Mon Jun 13 18:33:04 2011 Tanaka Akira <akr@fsij.org>
+
+ * lib/securerandom.rb (SecureRandom.random_bytes): modify PRNG state
+ to prevent random number sequence repetition at forked child
+ process which has same pid.
+ reported by Eric Wong. [ruby-core:35765]
+
+Mon Jun 13 17:02:34 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTP#use_ssl?): require 'openssl' only when
+ https is needed. fixes r31933.
+
+Mon Jun 13 14:35:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * lib/cmath.rb (CMath.cbrt): returns the principal value of the cube
+ root of the argument. fix #3676
+
+ * test/test_cmath.rb (test_cbrt_returns_principal_value_of_cube_root):
+ test for the above change.
+
+Mon Jun 13 14:17:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * lib/test/unit.rb (Test::Unit::GlobOption#non_options): fix typo.
+
+Mon Jun 13 13:04:20 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_digest.c: fix error for digests that have no oid
+ (e.g. DSS1).
+ * test/openssl/test_digest.c: add tests for this.
+
+Mon Jun 13 12:51:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/yaml.rb: load psych only when syck is not loaded.
+
+Mon Jun 13 12:23:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+Mon Jun 13 12:23:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/psych/lib/psych/deprecated.rb (Object#to_yaml_properties):
+ undef to_yaml_properties before redefine it.
+
+ * ext/syck/lib/syck/rubytypes.rb: ditto.
+
+Mon Jun 13 11:30:10 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_digest.c: allow Digests to be created by sn, ln or
+ oid.
+ * test/openssl/test_digest.rb: add tests for this.
+ [Ruby 1.9 - Feature #4412] [ruby-core:35319]
+
+Mon Jun 13 10:54:03 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/pkey_dh.c: corrected documentation.
+ * test/openssl/utils.rb: add test key for DH.
+ * test/openssl/test_pkey_dh.rb: add tests.
+
+Mon Jun 13 10:13:08 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/pkey_dh.c: clarify difference between DH#public_key and
+ DH#pub_key in documentation.
+
+Mon Jun 13 05:50:43 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * NEWS: introduce PKey.read.
+
+Mon Jun 13 05:17:29 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_pkey.c: added PKey.read module function that allows
+ reading arbitrary public/private keys from DER-/PEM-encoded File or
+ string instances.
+ * ext/openssl/ossl_pkey_dh.c: improved documentation.
+ * test/openssl/utils.rb: added EC test key.
+ * test/openssl/test_pkey_rsa.rb
+ test/openssl/test_pkey_dsa.rb: Test PKey.read. Reuse keys from
+ OpenSSL::TestUtils.
+ * test/openssl/test_pkey_ec.rb: Created test file for EC tests.
+ Test PKey.read.
+ [Ruby 1.9 - Feature #4424] [ruby-core:35330]
+
+Mon Jun 13 04:42:24 2011 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/objspace.c (total_i): fix to skip no ruby objects.
+
+Mon Jun 13 03:07:38 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/benchmark/test_benchmark.rb (capture_output):
+ replace '-' as space. On NetBSD, subtract between two Process.times
+ after and before the short process may return negative value like:
+ t0=Process.times; yield; t1=Process.times; p t1.utime-t0.utime
+
+Mon Jun 13 02:40:23 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/test_pkey_dsa.rb: Test for DSA#syssign/sysverify.
+
+Mon Jun 13 01:59:19 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_pkey_dh.c: completed documentation.
+ * ext/openssl/ossl_pkey_dsa.c: corrected examples. Improved parameter
+ sections.
+
+Mon Jun 13 00:25:10 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_pkey_dsa.c: completed documentation.
+
+Sun Jun 12 23:36:46 2011 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/drb.rb (kill_sub_thread): remove the method. [ruby-core:34185]
+
+Sun Jun 12 21:01:56 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (d_lite_marshal_load): should give converted value.
+
+Sun Jun 12 20:36:30 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: edited doc.
+
+Sun Jun 12 18:12:07 2011 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/bm_vm3_clearmethodcache.rb: added.
+
+Sun Jun 12 17:40:29 2011 Koichi Sasada <ko1@atdot.net>
+
+ * vm_method.c (rb_clear_cache*): update only vm state version.
+
+ * vm_method.c (rb_method_entry_get_without_cache, rb_method_entry):
+ Fill method cache entry with vm state version, and
+ check current vm state version for method (cache) look up.
+ This modification speed-up invalidating of global method cache table.
+ [Ruby 1.9 - Feature #3905] [ruby-core:36908]
+
+Sun Jun 12 16:19:48 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: fail on Mac OS X. [Bug #4853][ruby-dev:43655]
+
+Sun Jun 12 15:56:08 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c: remove th->transition_for_lock. It's thread unsafe.
+ [Bug #4723][ruby-dev:43563]
+
+Sun Jun 12 15:47:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c: introduce spurious wakeup safe deadlock check.
+ [Bug #4696][ruby-dev:43554]
+
+Sun Jun 12 13:33:52 2011 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/bm_vm3_thread_mutex.rb: remove it.
+
+ * benchmark/bm_vm3_thread_mutex[1-3].rb: added 3 benchmarks.
+ 1: one thread with one mutex (no contention).
+ 2: two threads with one mutex (contention).
+ 3: 1000 threads with one mutex (huge number of contention)
+ Above removed benchmark was type 3.
+ Therefore, this commit adds type 1 and 2 benchmark.
+
+Sun Jun 12 11:16:59 2011 Tanaka Akira <akr@fsij.org>
+
+ * io.c: use select() appropriately for sendfile().
+ Fixed by Eric Wong. [ruby-core:36150]
+ (maygvl_copy_stream_wait_readwrite): removed.
+ (nogvl_copy_stream_sendfile): use nogvl_copy_stream_wait_write and
+ maygvl_copy_stream_wait_read instead of
+ maygvl_copy_stream_wait_readwrite.
+
+Sun Jun 12 09:32:13 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * atomic.h (ATOMIC_OR): _InterlockedOr is not available on mingw.h
+ * gc.c (rb_gc_set_params): VM_OBJSPACE is disabled on mingw.
+
+Sun Jun 12 01:07:09 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: edited doc.
+
+Sat Jun 11 23:18:00 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * vm_core.h (RUBY_VM_SET_TIMER_INTERRUPT, RUBY_VM_SET_INTERRUPT,
+ RUBY_VM_SET_FINALIZER_INTERRUPT): use atomic ops for preventing
+ interrupt_flag bit lost. [Bug #4770][ruby-dev:43467]
+ * thread.c (rb_threadptr_execute_interrupts_rec): ditto.
+ * vm_core.h (typedef struct rb_thread_struct): change type of
+ interrupt_flag to rb_atomic_t.
+ * atomic.h: move atomic ops definition from signal.c.
+ * signal.c: remove atomic ops definition.
+ * common.mk (gc, signal, thread, cont): add to dependency to atomic.h.
+
+Sat Jun 11 23:23:52 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: edited doc.
+
+Sat Jun 11 23:02:36 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * ext/openssl/lib/openssl/buffering.rb (module OpenSSL):
+ Buffering#each_byte should return String in accordance with IO in
+ 1.9.
+
+ * test/openssl/test_buffering.rb (class OpenSSL): add tests for getc
+ and each_byte.
+
+Sat Jun 11 22:41:37 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * time.c: a correction of doc for strftime (%v).
+
+Sat Jun 11 22:30:53 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: replaced doc for strftime based on Time's one.
+
+Sat Jun 11 22:07:56 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (datetime_s_{iso8601,rfc3339,xmlschema,rfc2822,httpdate}):
+ do not take argument comp.
+
+Sat Jun 11 21:58:31 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: added examples.
+
+Sat Jun 11 19:40:45 2011 Narihiro Nakamura <authornari@gmail.com>
+
+ * gc.c: expand heap if initial_heap_min_slots is bigger than
+ HEAP_MIN_SLOTS.
+
+Sat Jun 11 19:42:50 2011 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ChangeLog (vim): set shiftwidth to 2.
+
+Sat Jun 11 19:27:06 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_x509req.c: raise RequestError instead of
+ CertificateError when Request#to_der gets an error from OpenSSL.
+ Patch from Ippei Obayashi, see #4420. I cannot write a test for
+ this... Request does not allow to create broken bytes...
+
+Sat Jun 11 19:34:51 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (Date::(ABBR_)?(MONTH|DAY)NAMES): should be usascii.
+
+Sat Jun 11 19:24:33 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: rewrote doc.
+
+Sat Jun 11 19:04:15 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit::GlobOption#non_options): should run
+ with 1.8.
+
+Sat Jun 11 18:05:57 2011 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * bootstraptest/runner.rb: should initialize $stress to avoid warnings.
+
+Sat Jun 11 18:02:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_getc): should be 7bit if ascii. fixes #4557
+
+Sat Jun 11 16:52:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (rb_enc_uint_chr): fix message format. Bug#4869
+
+Sat Jun 11 16:28:25 2011 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/formatters/pretty.rb
+ (REXML::Formatters::Pretty#write_text),
+ test/rexml/test_core.rb
+ (Tester#test_pretty_format_long_text_finite): don't ignore
+ 'width' parameter in pretty formatter. fixes #4498
+ Reported by Michael Frasca. Thanks!!!
+
+Sat Jun 11 16:11:36 2011 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_core.rb
+ (Tester#test_pretty_format_long_text_finite): remove needless
+ assert_nothing_raised.
+
+Sat Jun 11 16:04:03 2011 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/parsers/xpathparser.rb
+ (REXML::Parsers::XPathParser#parse),
+ test/rexml/test_elements.rb
+ (ElementsTester#test_each_with_frozen_condition):
+ don't modify original XPath. fixes #4161
+ Reported by Pavel Shved. Thanks!!!
+
+Sat Jun 11 15:53:27 2011 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_elements.rb (ElementsTester): remove needless
+ prefix from test name.
+
+Sat Jun 11 15:36:36 2011 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * common.mk: fixed a grammatical error
+
+Sat Jun 11 14:20:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * vm.c (thread_memsize): don't ignore size of th->local_storage.
+
+Sat Jun 11 10:32:46 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb: should quote arch_hdrdir and libpath for the case
+ installed prefix contains spaces.
+
+Sat Jun 11 10:20:52 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (native_cond_timeout): wrap conditionally used
+ label.
+
+ * thread_pthread.c (native_sleep): remove unused variable.
+
+Sat Jun 11 10:15:50 2011 Tanaka Akira <akr@fsij.org>
+
+ * thread.c (rb_thread_execute_interrupts): use GetThreadPtr to extract
+ rb_thread_t from VALUE.
+ reported by Motohiro KOSAKI. [ruby-dev:43700]
+
+Sat Jun 11 10:00:49 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_process_options): add missing return type.
+
+Fri Jun 10 23:18:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/tk/tcltklib.c (lib_eventloop_core): replace CHECK_INTS with
+ rb_thread_check_ints(). Because current code can't be compiled.
+
+Fri Jun 10 16:38:13 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_locale_charmap): When ruby process is run as Windows
+ Service the console codepage is not set, GetConsoleCP returns 0.
+ So on such environment, use GetACP().
+ http://blogs.msdn.com/b/michkap/archive/2005/02/08/369197.aspx
+ patched by Rafal Bigaj [ruby-core:36832] [Bug #4854]
+
+Fri Jun 10 14:34:24 2011 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk: restore TESTRUN_SCRIPT to "$(srcdir)/test.rb".
+ TESTRUN_SCRIPT is used by "make run", "make gdb" and so on.
+
+Fri Jun 10 13:01:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_module.rb (TestModule#remove_rake_mixins): remove all
+ module related to Rake.
+
+Fri Jun 10 09:52:38 2011 Eric Hodel <drbrain@segment7.net>
+
+ * encoding.c: Mention that Encoding.compatible? can work with more
+ than just Strings.
+
+Fri Jun 10 02:25:53 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych.rb: updating version to match released gem.
+
+Fri Jun 10 01:06:29 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/bigdecimal (BigDecimal_to_i): Integer#** may return flonum.
+
+Fri Jun 10 00:35:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (string_to_c_internal): uses rb_reg_nth_match;
+ * rational.c (string_to_r_internal): ditto.
+
+Fri Jun 10 00:25:03 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * gc.c: remove an unused declaration.
+
+Fri Jun 10 00:24:04 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (string_to_r): Rational#** may return flonum.
+
+Thu Jun 9 23:57:53 2011 Tanaka Akira <akr@fsij.org>
+
+ * io.c: fix IO.copy_stream interrupt handling.
+ based on the patch by Eric Wong. [ruby-core:36156]
+
+ * vm_core.h (rb_thread_call_with_gvl): don't declare here.
+
+ * thread.c: include internal.h.
+ (rb_thread_execute_interrupts): new function.
+
+ * internal.h (rb_thread_execute_interrupts): declared.
+ (rb_thread_call_with_gvl): declared.
+
+Thu Jun 9 23:34:01 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * gc.c (rb_objspace_call_finalizer): use rb_typeddata_is_kind_of() for
+ type check to get rid of a double free when main Thread has singleton
+ class. [ruby-core:36741] [Bug #4828]
+ * thread.c (rb_obj_is_mutex): add a new utility function.
+ * vm.c (rb_obj_is_thread): ditto.
+
+Thu Jun 9 22:53:49 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * test/ruby/test_thread.rb (TestThread#test_kill_thread_subclass):
+ add test for Thread.kill with Thread subclass instance.
+
+Thu Jun 9 22:31:47 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * test/ruby/test_thread.rb (TestThread#test_kill_wrong_argument):
+ test for [ruby-core:35086].
+ partially forward porting r31402 from ruby_1_9_2 branch.
+
+Thu Jun 9 18:36:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * string.c: Fix the ambiguous description of the behavior of
+ rb_str_aref_m with a range. It returns nil when the beginning of
+ the range is greater than the end of the string rather than the range.
+
+Thu Jun 9 10:57:03 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: Hash subclasses can be read
+ from YAML files.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: Hash subclasses can be
+ dumped to YAML files.
+ * test/psych/test_hash.rb: corresponding test.
+
+Thu Jun 9 09:18:51 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: Ruby modules can be loaded
+ from YAML files.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: Ruby modules can be
+ dumped to YAML files.
+ * test/psych/test_class.rb: corresponding test.
+
+Thu Jun 9 09:05:04 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: Ruby classes can be loaded
+ from YAML files.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: Ruby classes can be
+ dumped to YAML files.
+ * test/psych/test_class.rb: corresponding test.
+
+Wed Jun 8 21:38:57 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * cont.c (root_fiber_alloc): set root fiber's status RUNNING.
+ in cont_mark() only RUNNING fiber's machine stack is marked.
+ root fiber's status should be RUNNING at the beginning regardless of
+ FIBER_USE_NATIVE. [ruby-core:36735] fixes #4827
+
+Tue Jun 7 20:50:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * doc/irb/irb.rd: fix typo. patch by Nobuhiro IMAI.
+ [Bug #4843] [ruby-dev:43639]
+ * doc/irb/irb.rd.ja: ditto.
+ * doc/ChangeLog-YARV: ditto.
+
+Tue Jun 7 18:52:55 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/rubygems/user_interaction.rb (Gem::StreamUI#tty?): IO#tty? of
+ Windows has been fixed at r29969.
+
+ * test/rubygems/test_gem_stream_ui.rb: now can run tests.
+
+Tue Jun 7 18:36:41 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/rubygems/test_gem.rb (TestGem#{test_self_user_home_userprofile,
+ test_self_user_home_user_drive_and_path}): should simply ignore
+ meaningless tests instead of skipping them.
+
+Tue Jun 7 18:15:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_set_program_name):
+ should show some messages when skipping tests.
+
+Tue Jun 7 13:59:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/date/date_core.c (date_s_today, datetime_s_now): check the
+ result of localtime_r().
+
+Tue Jun 7 13:36:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/tk/extconf.rb: use $defs not $CPPFLAGS to get rid of
+ command line escape issues on Windows. fixed #4835.
+
+Tue Jun 7 03:18:45 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_io.rb (TestIO#test_s_{,bin}write): do not create a
+ file under /tmp. [Bug #4846]
+
+Mon Jun 6 22:51:43 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * cont.c: use #if FIBER_USE_NATIVE instead of #ifdef.
+ you can suppress use of setcontext for Fiber with compile option
+ -DFIBER_USE_NATIVE=0
+
+Mon Jun 6 21:59:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/test_switch_hitter.rb: added a test.
+
+Mon Jun 6 21:37:45 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: added notes.
+
+Mon Jun 6 21:02:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: flattened format to strftimev.
+ * ext/date/date_core.c (date_strftime_internal): taints run.
+
+Mon Jun 6 15:10:17 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/{defines,missing}.h (rb_infinity, rb_nan): move from
+ defines.h to missing.h. (couldn't use RUBY_EXTERN there.)
+
+Mon Jun 6 14:35:48 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/rdoc/test_rdoc_markup_pre_process.rb (TestRDocMarkupPreProcess#
+ {test_include_file,test_include_file_encoding_incompatible}): no
+ need to write such workaround. don't hide the bug of ruby. (and the
+ bug is already fixed.)
+
+Mon Jun 6 14:11:11 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/date/date_core.c (valid_jd_sub): need to convert from VALUE to
+ double.
+
+ * ext/date/date_core.c (offset_to_sec): get rid of a compiler warning.
+
+Mon Jun 6 14:09:08 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/defines.h (rb_infinity, rb_nan): export for Windows.
+
+Mon Jun 6 10:54:45 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit.rb(Test::Unit::Runner#puke):
+ Add overriding from MiniTest::Unit#puke. This reverts minitest's fix
+ that skip messages are hidden when not verbose mode (-v option).
+ To hide skip messages, use --hide-skip option instead.
+
+Mon Jun 6 10:52:13 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb: don't use autoload.
+
+Mon Jun 6 09:39:43 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/parser.c (parse): release event objects to plug memory
+ leak. Thanks Mark J. Titorenko!
+
+Sun Jun 5 23:26:15 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * eval.c: remove rb_thread_stop_timer_thread function declaration.
+ Instead, include vm_core.h.
+ * process.c: ditto.
+
+Sun Jun 5 21:38:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (thread_timer): add to care a spurious wakeup.
+ When native_cond_timedwait() return 0 by spurious wakeup, we
+ don't have to neither 1) call timer_thread_function and 2)
+ exit the timer thread.
+
+Sun Jun 5 17:50:01 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (m_real_cwyear): new. derived from m_cwyear.
+ * ext/date/date_strftime.c: trivial changes.
+
+Sun Jun 5 17:22:01 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/config_list.in: add new options for tcltklib.
+
+Sun Jun 5 10:06:50 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_tmx.h: now does not place decoded data. allows to
+ access indirectly via functions on demand.
+ * ext/date/date_strftime.c: ditto.
+ * ext/date/date_core.c: ditto.
+ * ext/date/date_core.c ({d|dt}_lite_to_s): use strftime.
+
+Sun Jun 5 06:22:02 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * NEWS: wrote about changes of date.
+
+Sat Jun 4 16:59:26 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (d_lite_inspect): changed the format.
+ * ext/date/date_core.c: refactoring and fixing some bugs.
+
+Sat Jun 4 11:30:57 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (check_mix_method_i, do_mix_method_i): not mix methods
+ renamed as nil.
+
+Sat Jun 4 04:04:41 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/rubygems/test_gem_commands_which_command.rb:
+ "missing" exists on ruby's top source directory. [Bug #4815]
+
+Fri Jun 3 21:48:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rubygems/test_case.rb: Refix for test-all in separate directory.
+ r31147 + r31151.
+
+Fri Jun 3 20:58:47 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/date/date_core.c (d_lite_plus): get rid of compiler warnings.
+
+Fri Jun 3 20:56:40 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/missing.h, numeric.c (round): moved prototype of round()
+ from numeric.c to missing.h. (note: round() is C99 feature, so ruby
+ provides it if not exist in C runtime.)
+
+Fri Jun 3 20:42:04 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit/parallel.rb: Keep $stdin, $stdout before run testcase
+ and restore after run. Because some test break $stdin, $stdout.
+ Fixes [Bug #4433] [ruby-core:35353]
+
+Fri Jun 3 19:58:14 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (io_fflush): windows -- call fsync() only when the FD is tied to
+ file, because if the FD is pipe, it blocks.
+
+Fri Jun 3 09:27:31 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb (URI::HTTP#request_uri): return nil when the uri
+ is path-rootless form. Bug #4759
+
+Thu Jun 2 23:51:03 2011 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Improve the line ending detection algorithm
+ patch by Alexey).
+
+Thu Jun 2 20:05:57 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (rb_io_s_write, rb_io_s_binwrite): return!!!
+
+Thu Jun 2 16:29:34 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * io.c: Add File.write, File.binwrite. [Feature #1081] [ruby-core:21701]
+
+ * test/ruby/test_io.rb: Test for File.write, File.binwrite.
+
+ * NEWS: News for above.
+
+Thu Jun 2 12:33:09 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (io_fflush, rb_io_flush): need to fsync() when ruby calls
+ internal flush. [ruby-core:36670] [Bug #4813]
+
+Thu Jun 2 07:56:24 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/tcltklib.c: reduce CPU power required by an eventloop.
+
+Tue May 31 21:28:33 2011 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_signal.rb (TestSignal#test_signal_requiring):
+ redirect stderr to null device.
+
+Thu Jun 2 00:45:26 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: fix for uninitialized global variables.
+ [Ruby 1.9 - Bug #4811]
+
+Wed Jun 1 21:57:08 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (native_sleep): fix 1000times calculation error.
+ this is a regression since r31457. [Bug #4808] [ruby-dev:43606]
+
+Wed Jun 1 17:19:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c: remove unused macro.
+
+Wed Jun 1 15:42:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (peek_n): new macro to see next nth char.
+
+Wed Jun 1 15:40:46 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb (gem): fix for rubygems change.
+
+Wed Jun 1 14:07:57 2011 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*: Imported minitest 2.2.2 (r6281)
+ * test/minitest/*: ditto
+
+Wed Jun 1 12:35:50 2011 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/rubygems*: Import rubygems 1.8.5 (released @ 137c80f)
+ * test/rubygems: Ditto
+
+Wed Jun 1 12:34:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * NEWS: add new features of bigdecimal.
+
+Wed Jun 1 09:41:14 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/cgi/util.rb: Improve documentation. Patch by Kuba Fietkiewicz.
+ [Ruby 1.9 - Bug #4775]
+ * lib/cgi/core.rb: ditto
+
+Wed Jun 1 09:26:05 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/mathn.rb: Improve documentation and attach it to Numeric.
+ Modified from patch by Anil V. [Ruby 1.9 - Bug #4762]
+
+Wed Jun 1 09:21:30 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/prime.rb: Indent examples enough to appear as code sections.
+ Note that Prime is Enumerable. [#4762]
+
+Wed Jun 1 07:34:57 2011 Eric Hodel <drbrain@segment7.net>
+
+ * hash.c (key_i): Change rdoc from "the first occurrence" to "an
+ occurrence" since first occurrence is not a specification of
+ Hash#key. [Ruby 1.9 - Bug #4760]
+
+Wed Jun 1 07:26:19 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/pty/pty.c (pty_check): Restore "not reached" comment.
+ [Ruby 1.9 - Bug #4756]
+
+Wed Jun 1 07:21:40 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/zlib/zlib.c: Fix document-method declarations for set_sync and
+ set_comment. [Ruby 1.9 - Bug #4695]
+
+Wed Jun 1 06:43:13 2011 Masaya Tarui <tarui@ruby-lang.org>
+
+ * load.c (loaded_feature_path): cut nonsense loop execution to fix
+ performance bug.
+
+Wed Jun 1 01:16:02 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (rb_mix_module): implement Module#mix.
+
+Wed Jun 1 01:15:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_encoding_set): should honor already set ecflags since it
+ might be set by mode option. fixed #4804
+
+Wed Jun 1 00:34:04 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): remove unused
+ variable.
+
+Wed Jun 1 00:32:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): support instantiation from
+ a Float through Rational.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_new): ditto.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_global_new_float): add a test for
+ the above changes.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_new_with_float): ditto.
+
+Wed Jun 1 00:07:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_coerce): support coerce with a
+ Rational. The precision used for instantiate a BigDecimal from the
+ given Rational is obtained from the receiver BigDecimal.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_coerce): add a test for the
+ above change.
+
+Tue May 31 23:49:08 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (offset_to_sec): fixed invalid validation.
+
+Tue May 31 23:43:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): replace the algorithm for
+ coercing from a Rational to stop requiring "bigdecimal/util.rb".
+ [ruby-core:34318]
+
+ * ext/bigdecimal/bigdecimal.c (GetVpValue): refactoring.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_new): support instantiation from a
+ Rational.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_global_new_with_rational): add a
+ test for the above change.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_new_with_rational): ditto.
+
+Tue May 31 22:44:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_new): support instantiation a
+ BigDecimal object from an Integer.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_new_with_integer):
+ add for testing the above change.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_global_new): replace its body
+ with a BigDecimal_new call.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_global_new_with_integer):
+ add for testing the above change.
+
+Tue May 31 22:24:39 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: use simple/complex mode instead of light/right mode.
+ * test/date/*.rb: followed the above changes.
+
+Tue May 31 21:28:33 2011 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_signal.rb (TestSignal#test_signal_requiring):
+ initialize SIGINT handler.
+
+Tue May 31 17:03:24 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * lib/net/http.rb, lib/net/protocol.rb: Allow to configure to wait
+ server returning '100 continue' response before sending HTTP request
+ body. See NEWS for more detail. See #3622.
+ Original patch is made by Eric Hodel <drbrain@segment7.net>.
+
+ * test/net/http/test_http.rb: test it.
+
+ * NEWS: Add new feature.
+
+Tue May 31 14:17:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (rb_io_s_pipe): potential bug. the mode of read IO is set as
+ DEFAULT_TEXTMODE in call of io_set_encoding(), and of write IO is
+ also set as it in call of io_new_instance() via rb_protect().
+ so, if DEFAULT_TEXTMODE is not 0, we should check the result of
+ extract_binmode() and avoid crush of default IO mode and the result.
+
+Tue May 31 13:00:17 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * strftime.c (rb_strftime_with_timespec): improved style consistency.
+ constified some variables.
+
+ * test/test_time.rb (TestTime#test_huge_precision): test for #4456.
+
+Tue May 31 12:53:10 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/io/wait/test_io_wait.rb (TestIOWait#{test_nread,test_ready?,
+ test_wait}: give system some time to process the written data.
+
+Tue May 31 12:40:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_io.rb (TestIO#test_open_mode): MUST release resources
+ explicitly. fix problem of r31671
+
+Tue May 31 10:49:55 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_exec.c: remove conditions for clang
+ because clang version 3.0 (trunk 132165) doesn't need them.
+
+Mon May 30 22:19:33 2011 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_signal.rb (TestSignal#test_signal_requiring): don't
+ close stderr.
+
+Mon May 30 20:22:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_signal.rb (TestSignal#test_signal_requiring): small
+ but critical typo of r31642. sorry...
+ [Bug #4798] [ruby-core:36550]
+
+Mon May 30 15:44:16 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * insns.def (opt_mult): as r31805, volatile it.
+ Without this, clang -O fails calculation.
+
+ * numeric.c (fix_mul): ditto.
+
+ * rational.c (f_imul): ditto.
+
+Mon May 30 10:26:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (int_pow): make sure to assign the result of x * z.
+ If xz is optimized out, the value won't overflow.
+
+Sun May 29 23:17:29 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_match): fix rdoc of Regexp#=~.
+ patched by Tsuyoshi Sawada. [Bug #4781]
+
+Sun May 29 23:10:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/webrick/https.rb (WEBrick::HTTPRequest#parse_uri):
+ keep parse_uri as private. patched by okkez. [Bug #4773]
+
+Sun May 29 17:53:03 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * numeric.c: add #include "internal.h" for rb_big_uminus() prototype.
+
+Sun May 29 15:09:05 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_round): fix for negative value.
+
+Sun May 29 02:16:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/net/http/utils.rb (TestNetHTTPUtils#teardown): add nil check.
+
+Sun May 29 00:22:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (before_exec, after_exec): change from macro to function.
+
+Sat May 28 19:30:17 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (before_exec, after_exec): change SIGPIPE handler to SIG_DFL
+ before calling execve(). Because r31760 reintroduced an issue that
+ system() may hang up (i.e. [ruby-dev:12261]).
+ * process.c (save_sigpipe, restore_sigpipe): new.
+
+Sat May 28 16:08:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * signal.c (Init_signal, default_handler): change default SIGPIPE handler
+ from empty function to SIG_IGN. [ruby-dev:43215]
+ * signal.c (sigpipe): removed.
+
+Sat May 28 03:04:27 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (fill_cbuf): return MORE_CHAR_SUSPENDED when cbuf is not empty.
+
+Sat May 28 02:22:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * string.c (rb_str_bytesize): rb_str_bytesize() should use LONG2NUM().
+ Patch by Nikolai Weibull. [Bug #4789] [ruby-core:36511]
+
+Sat May 28 02:06:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (fill_cbuf): Fix test-all crash.
+
+Sat May 28 00:58:40 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/ostruct.rb (method_missing): Handle [] and []= correctly.
+ Based on a patch by Caius Durling, bug #4179 [ruby-core:33792]
+
+Fri May 27 23:56:54 2011 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_core.rb (Tester::test_text_frozen): split frozen
+ string test. refs #4783
+
+Fri May 27 22:46:23 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb (gem): install gemspec of json. fixed #4784
+
+Fri May 27 22:45:10 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (validate_enc_binmode): do not clear textmode flag if
+ default. fixed #4732
+
+ * io.c (fill_cbuf): finish reading at EOF.
+
+Fri May 27 11:31:51 2011 misfo <tedwardo2@gmail.com>
+
+ * lib/rexml/text.rb (REXML::Text#initialize): prevent an error
+ when passing a frozen string to REXML::Text.new
+
+ dup the string passed in instead of cloning so that it's frozen
+ state is ignored
+
+Fri May 27 08:47:26 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * thread.c (ppoll): typo bug fix.
+
+Fri May 27 08:35:04 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: hang-up at exit before calling Tk.mainloop.
+
+ * ext/tk/lib/tk/extconf.rb: cannot make on MinGW [Ruby 1.9 - Bug #4141].
+
+Thu May 27 00:34:07 2011 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Enhance each() to support Enumerator.
+
+Thu May 26 10:32:11 2011 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Documentation improvements from Ysiad Ferreiras.
+ [Ruby 1.9 - Bug #4785]
+
+Thu May 26 15:42:02 2011 Cezary Baginski <cezary.baginski@gmail.com>
+
+ * lib/xmlrpc/parser.rb (FaultException): fix to_s and inspect
+
+ * test/xmlrpc/parser.rb: test for the above
+
+Wed May 25 11:54:31 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/curses/curses.c: Remove color constants block.
+ [Ruby 1.9 - Bug #4748]
+
+Wed May 25 09:56:45 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/curses/curses.c: Add missing documentation for button state, MIN
+ and MAX comments. Add Curses. to TABSIZE= and ESCDELAY= methods.
+ [Ruby 1.9 - Bug #4747]
+
+Wed May 25 09:35:31 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/benchmark.rb: Restore nodoc for Benchmark::Job and
+ Benchmark::Report. [Ruby 1.9 - Bug #4726]
+
+Wed May 25 09:29:38 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/pop.rb: Hide implementation details from RDoc.
+ [Ruby 1.9 - Bug #4711]
+
+Wed May 25 09:26:29 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/ftp.rb: Add :nodoc: for private methods.
+ [Ruby 1.9 - Bug #4710]
+
+Wed May 25 09:19:17 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/zlib/zlib.c: Fix Document-method declarations. Improve
+ Zlib::GzipFile's method catalog. [Ruby 1.9 - Bug #4695]
+
+Wed May 25 08:22:12 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/erb.rb: Hide documentation for implementation details of ERB.
+ [Ruby 1.9 - Bug #4694]
+
+Wed May 25 07:58:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile.{mkdir,rmdir}): revert for backward
+ compatibility.
+
+Wed May 25 07:13:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * spec/README: update the description.
+
+Wed May 25 07:12:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile.{lock,unlock}_tempfile): refactor.
+
+Tue May 24 17:30:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * spec/README: fix typo.
+ patched by bowsersenior. https://github.com/ruby/ruby/pull/24
+
+Tue May 24 07:06:34 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: fail to start Tk.mainloop (exit immediately) on
+ some environment (reported on [ruby-talk:381444]).
+
+ * ext/tk/lib/tk/canvas.rb: support creating a canvas item object from
+ an item ID number.
+
+ * ext/tk/lib/tk/image.rb: import documents which are pull-requested.
+ [Ruby 1.9 - Feature #4595]
+
+ * ext/tk/lib/tk/extconf.rb: search directories for 64bit library (e.g.
+ /usr/lib64), add some new configure options (see README.tcltklib),
+ and bug fix.
+
+ * ext/tk/lib/tk/README.tcltklib: modify docs for some new configure
+ options.
+
+Tue May 24 04:01:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/yaml.rb: switch default YAML engine to Psych, old syck engine
+ may be enabled via YAML::ENGINE.yamler = "syck". [ruby-core:36374]
+
+Mon May 23 09:45:26 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * include/ruby/defines.h (CASEFOLD_FILESYSTEM): Revert r30508. Forgot to
+ include this file in the commit r31692. __APPLE__ is not
+ CASEFOLD_FILESYSTEM again, from this time.
+
+Mon May 23 10:01:02 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_asn1.c: Do not parse zero-tagged values as EOC. Do
+ not let current length become negative for infinite length constructed
+ values. Support constructed values of length zero. Added tests.
+
+Mon May 23 09:19:53 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/smtp.rb: Document Net::SMTP::Response. Patch by J.R. Garcia.
+ [Ruby 1.9 - Bug #4768]
+
+Mon May 23 09:03:52 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit/parallel.rb: Never Ignore SIGINT. When received
+ Interrupt, immediately puts result and exit. [ruby-dev:43571]
+
+ * lib/test/unit.rb: When received Interrupt, wait results from workers
+ and collect them. [ruby-dev:43571]
+
+Mon May 23 09:08:07 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/mathn.rb: Improve documentation. Patch by Sandor Szucs.
+ [Ruby 1.9 - Bug #4767]
+
+Mon May 23 08:45:55 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/ostruct.rb: Improve documentation. Patch by Franklin Webber.
+ [Ruby 1.9 - Bug #4761]
+
+Mon May 23 08:35:24 2011 Eric Hodel <drbrain@segment7.net>
+
+ * hash.c: Improve documentation of Hash#key. Patch by Utkarsh
+ Kukreti. [Ruby 1.9 - Bug #4760]
+
+Mon May 23 08:32:59 2011 Eric Hodel <drbrain@segment7.net>
+
+ * enumerator.c: Improve documentation. Patch by Dave Copeland.
+ [Ruby 1.9 - Bug #4757]
+
+Mon May 23 07:19:45 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * NEWS (openssl): Infinite length support. Different behavior of
+ Constructive and Primitive constructors.
+
+Mon May 23 06:58:33 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_asn1.c: Forbid Constructives whose value is not an
+ Array to prevent segfault. Added test.
+
+Mon May 23 06:33:17 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_asn1.c: Forbid Constructive without infinite
+ length. This also prevents a segfault. Added test and improved
+ documentation.
+
+Mon May 23 05:58:14 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_asn1.c: Fix decoding of infinite length values.
+ Simplified ossl_asn1_decode0 by splitting it into three separate
+ functions. Add tests.
+ [Ruby 1.9 - Bug #4374][ruby-core:35123]
+
+Mon May 23 04:03:46 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_asn1.c (ossl_asn1_initialize): Allow creation of
+ Constructives with an explicit tag_class parameter without
+ automatically setting tagging to :EXPLICIT. Fixes a bug when encoding
+ infinite length primitive values.
+
+Mon May 23 04:03:46 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_asn1.c (ossl_asn1_cons_to_der): Add an additional
+ EOC for infinite length Constructives that are supposed to be encoded
+ with explicit tagging. Also tabify method correctly.
+
+Mon May 23 03:44:39 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_asn1.c (ossl_asn1data_to_der): Remove redundant
+ flag tmp_cons.
+
+Mon May 23 00:35:00 2001 Kenta Murata <mrkn@mrkn.jp>
+
+ * bignum.c (dump_bignum, bigmul1_balance, big_split, biglsh_bang),
+ (bigrsh_bang, big_split3, bigmul1_toom3, bigmul0): implement Toom3 (Toom-Cook)
+ multiplication.
+
+ * include/ruby/defines.h: add format prefixes for BDIGIT and BDIGIT_DBL.
+
+Sun May 22 23:24:02 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_asn1.c: Instead of rb_intern use static symbols to
+ improve performance.
+
+Sun May 22 21:56:51 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_asn1.c: Use OpenSSL constants V_ASN1_xxx instead of
+ hardcoded numbers for initializing class_tag_map.
+
+Sun May 22 21:29:29 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * include/ruby/defines.h (CASEFOLD_FILESYSTEM): Revert r30508. See #4255.
+ Now __APPLE__ is not CASEFOLD_FILESYSTEM again.
+
+ * load.c (loaded_feature_path, rb_feature_p, load_lock): Revert r30508.
+ See #4255. Make $LOADED_FEATURES scanning case-sensitive again.
+
+Sun May 22 18:59:27 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_asn1.c(ossl_asn1_default_tag): avoid using RCLASS_SUPER
+ to make it compilable. Plus, tabify and change variable definition style.
+
+Sun May 22 18:26:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (vm_xcalloc): use calloc provided by platforms.
+ fixes #4754
+
+Sun May 22 11:44:53 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/pty/pty.c: Improve documentation. Patch by David Copeland.
+ [Ruby 1.9 - Bug #4756]
+
+Sun May 22 11:26:39 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/timeout.rb: Improve documentation. Patch by David Copeland.
+ [Ruby 1.9 - Bug #4755]
+
+Sun May 22 11:21:41 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/ipaddr.rb: Improve documentation. Patch by Sandor Szucs.
+ [Ruby 1.9 - Bug #4753]
+
+Sun May 22 11:14:40 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/forwardable.rb: Document def_delegator. Patch by Sandor Szucs.
+ [Ruby 1.9 - Bug #4752]
+
+Sun May 22 11:11:41 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/fileutils.rb: Document block behavior of FileUtils.cd. Patch by
+ Bil Kleb. [Ruby 1.9 - Bug #4751]
+
+Sun May 22 11:07:47 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/curses/curses.c: Complete documentation. Patch by Vincent
+ Batts. [Ruby 1.9 - Bug #4748]
+
+Sun May 22 09:29:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_set_program_name):
+ use spawn. it prevent that other tests inherit renamed $0.
+
+Sun May 22 08:57:13 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_asn1.c: Default tag lookup in constant time via hash
+ instead of previous linear algorithm.
+ [Ruby 1.9 - Feature #4309][ruby-core:34813]
+
+Sun May 22 07:54:16 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_digest.c: Explain DSS and DSS1 in documentation.
+
+Sun May 22 07:10:25 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/test_pkey_dsa.rb: Add tests for sign/verify.
+
+Sun May 22 06:07:17 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/test_x509cert.rb: Merge DSA-related tests from ruby_1_8
+ branch.
+
+Sun May 22 04:11:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (Init_Thread): add a code comment why the meaningless
+ line is necessary.
+
+Sun May 22 01:35:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: modified documentation.
+
+Sat May 21 22:46:26 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_strftime(date_strftime_with_tmx): "%v" means "%e-%b-%Y".
+
+Sat May 21 22:14:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_io_extract_modeenc): accept combination hash and
+ File::Constants. (eg. File.open('yo', :mode => File::WRONLY))
+ [Feature #4742][ruby-core:36338]
+ * test/ruby/test_io.rb (TestIO#test_open_mode): new test.
+
+Sat May 21 21:44:14 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/test_switch_hitter.rb: new.
+
+Sat May 21 21:18:29 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_{core,parse}.c: moved nearly all core code from ext/date/lib.
+ * ext/date/lib/{date,date/format}.rb: removed nearly all code.
+
+Sat May 21 02:58:46 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/.document: Add curses to documented extensions.
+ * ext/curses/curses.c: Improve documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #4747]
+
+Sat May 21 02:51:01 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/bigdecimal/lib/bigdecimal/util.rb: Improve documentation. Patch
+ by Pete Higgins. [Ruby 1.9 - Bug #4746]
+
+Sat May 21 02:44:10 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/bigdecimal/lib/bigdecimal/jacobian.rb: Document isEqual. Patch
+ by Kuba Fietkiewicz. [Ruby 1.9 - Bug #4744]
+
+Sat May 21 02:22:34 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/date/lib/date/format.rb: Document date formats. Patch by
+ Clinton Nixon. [Ruby 1.9 - Bug #4743]
+
+Fri May 20 05:15:19 2011 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+
+ * gc.c: Fix build on m68k by 'error: too few arguments to
+ function 'mark_locations_array''.
+
+Fri May 20 04:23:42 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/scanf.rb: Improve documentation. Patch by Gabe McArthur.
+ [Ruby 1.9 - Bug #4735]
+
+Fri May 20 00:58:01 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/trans/ibm737-tbl.rb: greek code page. fixes #4738
+
+Thu May 19 14:44:05 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_signal.rb (test_signal_requiring): skip on Windows.
+ we can send SIGINT only to pid 0 and the process itself.
+
+Thu May 19 09:07:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib: revert r31635-r31638 and untabify with expand(1).
+
+Thu May 19 07:47:26 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/test_pkey_rsa.rb: Add tests for sign/verify.
+
+Thu May 19 07:19:16 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_pkey.c: Add documentation.
+
+Thu May 19 07:06:56 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/benchmark.rb: Fix indentation.
+ * lib/net/imap.rb: Fix indentation of regular expressions.
+
+Thu May 19 06:36:11 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/imap.rb: Fix indentation of EOF for heredoc.
+ * lib/debug.rb (Commands): Fix indentation of EOHELP for heredoc.
+
+Thu May 19 06:30:38 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/mkmf.rb: Fix indentation of EOM for heredoc.
+
+Thu May 19 06:16:41 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib: Convert tabs to spaces for ruby files per
+ http://bugs.ruby-lang.org/projects/ruby/wiki/DeveloperHowto#coding-style
+ Patch by Steve Klabnik [Ruby 1.9 - Bug #4730]
+ Patch by Jason Dew [Ruby 1.9 - Feature #4718]
+
+Thu May 19 06:06:07 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/cgi/util.rb: Improve documentation. Patch by Clinton Nixon.
+ [Ruby 1.9 - Bug #4733]
+ * lib/cgi/core.rb: ditto
+ * lib/cgi/cookie.rb: ditto
+
+Thu May 19 06:02:21 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/tempfile.rb: Document Dir.mkdir and Dir.rmdir. Patch by Clinton
+ Nixon. [Ruby 1.9 - Bug #4728]
+
+Thu May 19 05:57:52 2011 Eric Hodel <drbrain@segment7.net>
+
+ * encoding.c: Improve documentation for Encoding#default_external and
+ Encoding#default_internal.
+
+Wed May 18 22:45:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/console/lib/console/size.rb (IO#console_size): new
+ method. (EXPERIMENTAL)
+
+Wed May 18 22:41:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * internal.h: add for internal use only.
+
+Wed May 18 22:36:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (setup_exception): internal exception should be hidden
+
+Wed May 18 20:25:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * lib/timeout.rb (Timeout#timeout): don't leak "execution expired"
+ exception. [Bug #4283] [ruby-core:34534].
+
+Wed May 18 06:09:24 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/cmath.rb: Add some examples and improve documentation. Patch by
+ Sandor Szucs. [Ruby 1.9 - Bug #4727]
+
+Wed May 18 05:40:31 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/benchmark.rb: Remove nodoc from Benchmark::Job and
+ Benchmark::Report. Patch by Sandor Szucs. [Ruby 1.9 - Bug #4726]
+
+Wed May 18 05:29:26 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/webrick/compat.rb: Improve documentation. Patch by Sandor
+ Szucs. [Ruby 1.9 - Bug #4725]
+
+Wed May 18 05:10:35 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/tracer.rb: Improve documentation. Patch by Richard Ramsden.
+ [Ruby 1.9 - Feature #4720]
+
+Wed May 18 04:53:41 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/cmath.rb: Improve documentation. Patch by Jason Dew.
+ [Ruby 1.9 - Feature #4717]
+
+Wed May 18 04:50:24 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/ftp.rb: Improve documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #4710]
+
+Wed May 18 03:14:49 2011 Eric Hodel <drbrain@segment7.net>
+
+ * test/test_singleton.rb: Add tests from lib/singleton.rb. Patch by
+ Pete Higgins. [Ruby 1.9 - Bug #4715]
+
+Wed May 18 03:03:07 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/singleton.rb: Improve documentation. Patch by Pete Higgins.
+ [Ruby 1.9 - Bug #4709]
+
+Tue May 17 21:24:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_mutex_lock): remove remove_signal_thread_list() call.
+ It's meaningless because lock_interrupt doesn't call
+ add_signal_thread_list().
+
+Tue May 17 20:20:49 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * vm_core.h (rb_thread_struct): add volatile to
+ transition_for_lock because it is not protected by lock.
+
+Tue May 17 20:08:53 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * LEGAL (missing/{elf,tgamma,lgamma_r}.c): they've been replaced by
+ public domain implementations.
+
+ * LEGAL (vsnprintf.c): it has moved to srcdir from missing/.
+
+ * LEGAL (missing/crypt.c): list its original license.
+
+Tue May 17 19:54:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * LEGAL (configure): add missing/setproctitle.c
+
+Tue May 17 19:35:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ Fix FreeBSD test failure.
+
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_set_program_name):
+ use ps -o command instead of ps -o cmd. FreeBSD doesn't support
+ -o cmd option.
+
+Tue May 17 08:04:26 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_digest.c: Add documentation.
+
+Tue May 17 07:14:58 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/http.rb: Improve documentation of proxy configuration
+ methods. Patch by Alf Mikula. [Ruby 1.9 - Bug #4714]
+
+Tue May 17 07:09:01 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/pop.rb: Improve documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #4711]
+ * lib/net/telnet.rb: ditto
+
+Tue May 17 07:00:41 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/http.rb: Fix nodoc for Net::HTTP::version_1_1?. Patch by
+ Alf Mikula. [Ruby 1.9 - Bug #4713]
+
+Tue May 17 06:56:26 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/optparse.rb: Add link to make_switch to improve documentation.
+ Patch by David Copeland. [Ruby 1.9 - Bug #4708]
+
+Tue May 17 06:50:40 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/observer.rb: Improve documentation. Patch by David Copeland.
+ [Ruby 1.9 - Bug #4707]
+
+Tue May 17 06:42:53 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/logger.rb: Improve documentation. Patch by David Copeland.
+ [Ruby 1.9 - Bug #4706]
+
+Tue May 17 06:28:14 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/gserver.rb: Improve documentation. Patch by David Copeland.
+ [Ruby 1.9 - Bug #4705]
+
+Tue May 17 06:21:15 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/cgi.rb: Add toplevel documentation to class CGI
+ * lib/cgi/session.rb: Add overview documentation to CGI::Cookie
+ * lib/cgi/html.rb: Don't add CGI::TagMaker documentation to CGI.
+ Patch by David Copeland. [Ruby 1.9 - Bug #4704]
+ * lib/cgi/core.rb: Clean up CGI documentation. Patch by David
+ Copeland. [Ruby 1.9 - Bug #4704]
+ * lib/cgi/cookie.rb: Clean up CGI::Cookie documentation. Patch by
+ David Copeland. [Ruby 1.9 - Bug #4704]
+
+Tue May 17 05:52:30 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/digest: Improve documentation of Digest, Digest::HMAC and
+ Digest::SHA2. Patch by Pete Higgins. [Ruby 1.9 - Bug #4702]
+
+Tue May 17 03:51:42 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/abbrev.rb: Hide copyright and revision information from RDoc.
+ Inspired by patch from David Copeland, bug #4703.
+
+Tue May 17 03:33:21 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/timeout.rb (module Timeout): Hide internal constants. Patch by
+ Pete Higgins. [Ruby 1.9 - Bug #4701]
+
+Mon May 16 11:21:09 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * configure.in, win32/Makefile.sub (RUBY_SO_NAME): add CPU as prefix
+ of RUBY_SO_NAME on x64/ia64 mswin/mingw.
+ [Feature #4602]
+
+Mon May 16 08:00:05 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc.rb: Update to RDoc 3.6.1, allows OpenSSL::Digest to be
+ found.
+
+Mon May 16 05:49:54 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/drb/acl.rb: Add documentation.
+
+Mon May 16 05:13:20 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_asn1.c: Add documentation.
+
+Mon May 16 00:32:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_signal.rb (TestSignal#test_signal_process_group):
+ skip if the platform doesn't have :pgroup capability. (i.e. skip
+ if mswin32)
+
+Sun May 15 23:53:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/intern.h: resurrect old rb_fd_copy().
+ * thread.c (rb_fd_copy): ditto.
+
+Sun May 15 23:45:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/intern.h: remove rb_fd_copy() to rb_fd_dup() and
+ rb_w32_fdcopy() to rb_w32_fd_dup().
+ * win32/win32.c: ditto.
+ * thread.c: ditto.
+
+Sun May 15 22:26:39 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * signal.c (rb_f_kill): accept '-SIGXXX' style signal with Symbol or
+ implicit convertion with #to_str. [ruby-dev:43169] fixes #4362
+ * test/ruby/test_signal.rb (test_signal_process_group): add a test
+ for send signal to process group.
+
+Sun May 15 21:22:35 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * cont.c (cont_init): clear macihne_stack_start/end of saved thread to
+ prevent mark machine stack of GC'ed Thread. root Fiber is not
+ initialized by fiber_init().
+ based on a patch by Serge Balyuk [ruby-core:35891] fixes #4612
+ * test/ruby/test_fiber.rb (test_gc_root_fiber): add test for it.
+
+Sun May 15 21:04:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (econv_init): revert r31353. [ruby-dev:43512]
+
+Sun May 15 03:39:35 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/zlib/zlib.c: Improve documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #4695]
+
+Sun May 15 03:23:46 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/erb.rb: Document ERB::Compiler. Patch by Simon Chiang.
+ [Ruby 1.9 - Bug #4694]
+
+Sun May 15 00:58:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ fix mswin32 build error.
+
+ * missing/setproctitle.c: add #ifdef HAVE_UNISTD_H.
+ * win32/Makefile.sub (MISSING): add setproctitle.obj
+
+Sat May 14 22:45:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * missing/setproctitle.c: add to include "ruby/util.h".
+
+Sat May 14 19:52:22 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_set_program_name):
+ add for $0 test.
+
+Sat May 14 19:50:46 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * missing/setproctitle.c (compat_init_setproctitle): use
+ ruby_strdup() instead of strdup().
+
+Sat May 14 19:37:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/missing.h: add setproctitle() declaration.
+ * missing/setproctitle.c: added.
+ * configure.in: add check for missing/setproctitle.c.
+
+ * ruby.c (ruby_process_options): add to call compat_init_setproctitle().
+ * ruby.c (set_arg0): remove all platform specific code. it's
+ moved to missing/setproctitle.c.
+ * ruby.c (origarg): remove len field. It's no longer used.
+ * ruby.c (get_arglen): removed.
+
+ This patch makes a lot of cleanup set_arg0 related code and fixes
+ [Feature #4689].
+
+Sat May 14 17:42:21 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * process.c (rb_proc_times): improve documentation.
+ [ruby-core:35785] fixes #4581, reported by Andrew Grimm.
+
+Sat May 14 12:12:54 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/test_pkey_dsa.rb: Add basic tests and tests that
+ ensure new public key PEM encoding behavior and ensure backward
+ compatibility.
+ [Ruby 1.9 - Bug #4422] [ruby-core:35328]
+ * test/openssl/test_pkey_rsa.rb: Remove line with 'puts'.
+
+Sat May 14 12:06:49 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/context.rb (class RDoc): Fix infinite loop caused by
+ re-encountering BasicObject.
+
+Sat May 14 10:32:36 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * test/openssl/test_pkey_rsa.rb: Add tests that ensure new public key
+ encoding behavior and also ensure backward compatibility.
+ [Ruby 1.9 - Bug #4421] [ruby-core:35327]
+
+Sat May 14 09:50:10 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/yaml/dbm.rb: Add documentation. Patch by Justin Collins.
+ [Ruby 1.9 - Bug #4693]
+ * lib/yaml/store.rb: ditto
+
+Sat May 14 09:31:43 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc.rb: Updated to RDoc 3.6
+
+Sat May 14 07:30:29 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych.rb: released a new gem, so increasing version.
+
+Sat May 14 05:08:32 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_digest.c
+ * ext/openssl/ossl_pkey.c
+ * ext/openssl/ossl_pkey.h
+ * test/openssl/pkey/test_pkey_rsa.rb
+ Reverted premature commit. Sorry for the noise!
+
+Sat May 14 05:02:58 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/uri.rb: Add toplevel documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #4690]
+
+Sat May 14 04:19:06 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * NEWS: Describe altered behaviour for RSA and DSA public key
+ encoding. [Ruby 1.9 - Bug #4421, Bug #4422]
+ [ruby-core:35327,35328]
+
+Sat May 14 02:57:52 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/ipaddr.rb (unless Socket): Document valid*? methods. Patch by
+ Sebastian Martinez. [Ruby 1.9 - Feature #4687]
+
+Sat May 14 02:54:04 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rexml/functions.rb: Add some documentation for REXML::Functions.
+ Patch by Sebastian Martinez. [Ruby 1.9 - Feature #4688]
+
+Sat May 14 02:51:42 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/resolv.rb: Hide private method and state-tracking constants from
+ RDoc. Patch by Mark Turner. [Ruby 1.9 - Feature #4691]
+
+Fri May 13 19:23:21 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * numeric.c (flo_coerce): Add #flo_coerce documentation.
+ Patch by Sebastian Martinez.
+ https://github.com/ruby/ruby/pull/21
+
+Fri May 13 18:42:22 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * README.EXT: fix typo. Patch by William Blackerby.
+ https://github.com/ruby/ruby/pull/19
+
+ * README.EXT.ja: ditto.
+
+Fri May 13 15:22:34 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_select): check invalid handle before doing
+ select operations. see [ruby-dev:43513], [ruby-dev:43535]
+
+Fri May 13 08:34:00 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/rdoc.rb: Output summary after documentation report.
+ * lib/rdoc/stats/normal.rb: Don't output information for users when
+ we're not on a TTY
+
+Fri May 13 07:49:02 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/fileutils.rb: Hide internal methods from RDoc. Patch by Darragh
+ Curran. [Ruby 1.9 - Bug #4684]
+
+Fri May 13 07:36:23 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/webrick/httpservlet/erbhandler.rb: Add documentation.
+
+Fri May 13 07:04:33 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/mathn.rb: Fix indentation. Patch by Jason Dew.
+ [Ruby 1.9 - Feature #4682]
+
+Fri May 13 06:50:43 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/mathn.rb: Add documentation. Patch by Jason Dew. [Ruby 1.9 -
+ Feature #4667]
+
+Fri May 13 05:44:19 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/logger.rb (class Logger): Document Logger#datetime_format.
+ Patch by Sergio Gil Perez de la Manga. [Ruby 1.9 - Bug #4678]
+
+Fri May 13 05:39:11 2011 Eric Hodel <drbrain@segment7.net>
+
+ * re.c (Init_Regexp): Document option constants. Patch by Vincent
+ Batts. [Ruby 1.9 - Bug #4677]
+ * lib/uri/common.rb (module URI): Documentation for URI. Patch by
+ Vincent Batts. [Ruby 1.9- Bug #4677]
+ * lib/uri/ftp.rb (module URI): ditto
+ * lib/uri/generic.rb (module URI): ditto
+ * lib/uri/http.rb (module URI): ditto
+ * lib/uri/https.rb (module URI): ditto
+ * lib/uri/ldap.rb (module URI): ditto
+ * lib/uri/ldaps.rb (module URI): ditto
+ * lib/uri/mailto.rb (module URI): ditto
+ * process.c (Init_process): Document Process constants. Patch by
+ Vincent Batts. [Ruby 1.9- Bug #4677]
+
+Fri May 13 05:16:38 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rss/atom.rb (module RSS): Document URIs. Patch by Mark Turner.
+ [Ruby 1.9 - #4671]
+ * lib/rss/rss.rb (module RSS): Document exception classes. Patch by
+ Mark Turner. [Ruby 1.9 - #4671]
+
+Fri May 13 02:15:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (select_internal): remove unused variable (interrupt_flag).
+
+Thu May 12 18:24:34 2011 Kouhei Sutou <kou@clear-code.com>
+
+ * configure.in: limit to "T" type for prefix of external symbols
+ because x86_64-w64-mingw32-gcc on Debian GNU/Linux generates the
+ following symbol:
+ 0000000068483390 D _GLOBAL__F__conftest_external
+
+ Approved by nobu.
+
+Thu May 12 14:50:52 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/dl/test_base.rb (Fiddle::LIBC_SO): its always msvc*.dll on
+ mswin/mingw.
+
+Thu May 12 14:47:53 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (Logging.postpone): copy only when temporary logfile
+ exists.
+
+Thu May 12 12:24:22 2011 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+
+ * ext/openssl/ossl_ssl.c: By trunk@31346, function check of SSLv2 is
+ executed.
+ However, the problem is not revised in this.
+ This adds the control of using function of SSLv2 in made macro by
+ function check.
+
+Thu May 12 08:10:46 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/set.rb (class Set): Add nodoc to internal-use methods. Patch
+ by Pete Higgins. [Ruby 1.9 - Bug #4665]
+
+Thu May 12 08:01:14 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_pkey_ec.c: Allow encryption when PEM-encoding
+ Elliptic Curve private keys.
+ [ruby-core:35329] [Bug #4423]
+
+Thu May 12 07:54:59 2011 Eric Hodel <drbrain@segment7.net>
+
+ * object.c (rb_obj_equal): Add documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #4664]
+ * lib/rexml: ditto
+ * lib/mkmf.rb: ditto
+ * ext/socket/lib/socket.rb: ditto
+
+Thu May 12 07:30:08 2011 Eric Hodel <drbrain@segment7.net>
+
+ * Various .document files: Update .document files to match files which
+ have documentation.
+
+Thu May 12 07:18:45 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_pkey_dsa.c: Use generic X.509 SubjectPublicKeyInfo
+ format for PEM-encoding DSA public keys.
+ [ruby-core:35328] [Bug #4422]
+
+Thu May 12 06:27:31 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+
+ * ext/openssl/ossl_pkey_rsa.c: Use generic X.509 SubjectPublicKeyInfo
+ format for encoding RSA public keys.
+ [ruby-core:35327] [Bug #4421]
+
+Wed May 11 19:45:27 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/forwardable.rb: support 'delegate :foo => :bar' for to meet
+ by specification of RDOC.
+
+Wed May 11 08:36:38 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/webrick: Add documentation for WEBrick::HTTPAuth
+
+Wed May 11 03:06:35 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rss.rb: Add documentation for RSS. Patch by Steve Klabnik.
+ [Ruby 1.9 - Bug #4663]
+
+Tue May 10 14:50:32 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit.rb: Add option for hiding skip messages when test
+ ends. #4657
+
+ * test/testunit/test_hideskip.rb, test/testunit/test4test_hideskip.rb:
+ test for above.
+
+Tue May 10 10:53:04 2011 Eric Hodel <drbrain@segment7.net>
+
+ * common.mk (rdoc): Add rdoc-coverage rule
+
+Tue May 10 09:13:21 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/webrick: Add Documentation
+
+Tue May 10 04:22:09 Eric Hodel <drbrain@segment7.net>
+
+ * lib/webrick/log.rb: Hide copyright info from ri
+ * lib/webrick/httpstatus.rb: ditto
+ * lib/webrick/htmlutils.rb: ditto
+ * lib/webrick/httpversion.rb: ditto
+ * lib/webrick/version.rb: ditto
+ * lib/webrick/httpauth/userdb.rb: ditto
+ * lib/webrick/httpauth/authenticator.rb: ditto
+ * lib/webrick/accesslog.rb: ditto
+
+Mon May 9 20:57:13 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/ruby/test_{complex,rational}.rb: added tests.
+
+Mon May 9 20:29:44 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (string_to_c_internal): a refactoring.
+
+Mon May 9 18:33:05 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c: Improve documentation for String#start_with? and
+ String#end_with?. fixes #4652
+ patched by Andrew Grimm <andrew.j.grimm at gmail.com>
+
+Mon May 9 13:49:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * complex.c (string_to_c_internal): support scientific notation.
+ patched by Tinco Andringa. https://github.com/ruby/ruby/pull/16
+ [ruby-core:36046][Bug #4655]
+
+Mon May 9 11:52:48 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (int_ord): remove K&R style.
+ patched by Daehyub Kim. https://github.com/ruby/ruby/pull/17
+
+Sun May 8 22:17:24 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/ruby/test_{complex2,complexrational}.rb: use skip.
+ * test/date/*.rb: ditto.
+
+Sun May 8 21:02:31 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/ruby/test_{complex2,complexrational}.rb: NEVER SKIP.
+
+Sun May 8 21:01:21 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/test_date_base.rb: fixed.
+
+Sun May 8 20:54:11 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/*.rb: NEVER SKIP.
+
+Sun May 8 20:37:33 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/*.rb: reverted 31432.
+
+Sun May 8 20:32:43 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/*.rb: reverted 31483.
+
+Sun May 8 19:39:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (native_cond_timedwait): add to care EINTR.
+ * thread_pthread.c (thread_timer): remove EINTR check.
+
+Sun May 8 19:04:15 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/time.rb (xmlschema): avoid passing any negative numbers.
+
+Sun May 8 18:40:03 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_{parse,strptime}.c: introduced some macros.
+
+Sun May 8 17:17:13 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/*.rb: use skip /w messages.
+
+Sun May 8 17:04:55 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/lib/date/format.rb (_httpdate): omitted to call zone_to_diff.
+
+Sun May 8 16:56:19 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (date_s_test_*): use macros.
+
+Sun May 8 10:24:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c: cleanup signal_thread_list related ifdef.
+ 1) we don't have to use #ifdef FOO-PLATFORM directly 2) About
+ half #ifdef didn't care symbian properly.
+
+Sun May 8 05:19:37 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/io/wait/test_io_wait.rb: Linux socketpair(2) only support
+ AF_UNIX, but windows socketpair doesn't support it. we can't
+ avoid platform check. sigh!
+
+Sun May 8 00:13:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/io/wait/test_io_wait.rb: use Socket.pair instead of pipe.
+ Windows can only treat a socket.
+
+Sat May 7 22:43:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_fd_zero): remove redundant zero fill.
+
+Sat May 7 22:38:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_fd_init): remove volatile qualifier.
+
+Sat May 7 22:34:29 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_fd_init_copy): new internal api. It provide efficient
+ copy constructor semantics.
+ * thread.c (do_select): use rb_fd_init_copy().
+
+Sat May 7 15:18:06 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ fix incorrect native_cond_signal call when deadlock was detected.
+
+ * thread.c (lock_func): decrement cond_waiting if timeout was happen.
+
+Sat May 7 18:28:37 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (USE_MONOTONIC_COND): check the availability
+ more strictly.
+
+ * thread_pthread.h (rb_thread_cond_t): ditto.
+
+Sat May 7 15:15:10 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ fix win32 native_cond_timedwait() makes SIGSEGV.
+
+ * thread_win32.h (rb_thread_cond_struct): add prev field instead of
+ last. (ie cond_event_entry is now using double linked list instead of
+ single)
+ * thread_win32.c (cond_event_entry): add prev field.
+
+ * thread_win32.c (__cond_timedwait): remove entry properly if timeout
+ was happen.
+
+ * thread_win32.c (native_cond_signal): change for double linked list.
+ * thread_win32.c (native_cond_broadcast): ditto.
+ * thread_win32.c (native_cond_initialize): ditto.
+
+Sat May 7 12:41:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ fix mutex deadlock test hang-up.
+
+ * thread_win32.c (abs_timespec_to_timeout_ms): fix 1000x calculation
+ mistake. (ie fix hang-up native_cond_timedwait())
+
+Sat May 7 03:14:13 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ sleep_cond use monotonic time if possible.
+
+ * thread_pthread.c (native_thread_init): change sleep_cond
+ attribute to monotonic.
+ * thread_pthread.c (native_sleep): use native_cond_timeout().
+
+ * thread_pthread.c (native_cond_timeout): add overflow care.
+ * thread_win32.c (native_cond_timeout): ditto.
+
+Sat May 7 02:49:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ fix win32 compile error.
+
+ * thread_win32.c (RB_CONDATTR_CLOCK_MONOTONIC): define
+ RB_CONDATTR_CLOCK_MONOTONIC always.
+ * thread_pthread.c (RB_CONDATTR_CLOCK_MONOTONIC): ditto.
+
+Sat May 7 02:29:41 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ mutex: deadlock check timeout use monotonic time.
+
+ * thread_pthread.c (native_cond_timeout): new internal api.
+ it calculate a proper time for argument of native_cond_timedwait().
+ * thread_win32.c (native_cond_timeout): ditto.
+
+ * thread_pthread.c (thread_timer): use native_cond_timeout()
+ instead of get_ts.
+ * thread.c (lock_func): ditto.
+
+ * thread_pthread.c (get_ts): removed. use native_cond_timeout().
+ * thread.c (init_lock_timeout): ditto.
+
+Sat May 7 01:54:21 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (get_ts): add monotonic clock capability.
+ * thread_pthread.c (rb_thread_create_timer_thread): use monotonic
+ clock if possible.
+
+Sat May 7 01:43:37 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.h (rb_thread_cond_t): add clockid field. it's
+ no longer an alias of pthread_cond_t.
+ * thread_pthread.c: adapt new rb_thread_cond_t type.
+ * thread.c (mutex_alloc): ditto.
+ * thread_win32.c (native_cond_initialize): ditto.
+ * configure.in: add check for pthread_cond_attr_setclock() and
+ clockid_t type.
+
+Fri May 6 23:29:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_wait_for_single_fd): use ppoll() instead of poll()
+ if possible. based on a patch from Eric Wong. [ruby-core:36003].
+
+Fri May 6 23:13:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: remove nanosleep check. we no longer use it.
+ r20124 removed last usage.
+
+Fri May 6 22:35:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/syck/rubyext.c (mktime_do): extra digits are not used.
+
+Fri May 6 17:43:07 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/syck/rubyext.c (mktime_do): remove unused variable offset.
+
+ * ext/syck/syck.h: use #ifdef instead of #if DEBUG.
+
+Fri May 6 16:27:33 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/date/date_core.c (DAY_IN_NANOSECONDS): refix: 31438.
+ check with LONG_MAX and cast as long; without this the calculation
+ will be done as int and overflow.
+
+Fri May 6 15:01:11 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * ext/syck/rubyext.c (mktime_do): avoid buffer overrun, by
+ silently ignoring lesser significant digits. Required buffer
+ length can be computable so you might at first think of
+ allocating enough memory space on the fly using alloca(). That
+ is a wrong idea because when using alloca there is always risk
+ of integer overflow. A function that accepts outer-process
+ resources like this should not blindly trust its inputs. In
+ this particular case we just want to generate milliseconds
+ resolution by strtod() so the string in question needs no more
+ length than what we originally have. Ignoring lesser
+ significant digits should suffice I believe.
+
+Fri May 6 14:25:53 2011 Tinco Andringa <mail@tinco.nl>
+
+ * ext/syck/rubyext.c (mktime_do): YAML.load time correctly parse
+ usecs smaller than 1 fixes #4571
+
+Thu May 5 22:23:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (native_mutex_reinitialize_atfork): removed
+ unused macro.
+ * thread_win32.c (native_mutex_reinitialize_atfork): ditto.
+
+Thu May 5 22:09:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/date/date_core.c (DAY_IN_NANOSECONDS): long long int is not
+ available on all platforms.
+
+Thu May 5 17:36:31 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * eval.c (frame_func_id): store result of method_entry_of_iseq() to
+ cfp->me because method_entry_of_iseq() might become expensive.
+
+Thu May 5 15:03:51 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * eval.c (frame_func_id): __method__ return different name from
+ methods defined by Module#define_method with a same block.
+ [ruby-core:35386] fixes #4606
+ * eval.c (method_entry_of_iseq): new helper function. search control
+ frame stack for a method entry which has given iseq.
+ * test/ruby/test_method.rb: add tests for #4606
+
+Wed May 4 22:13:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * benchmark/bm_vm4_pipe.rb: Reduced iterations. Too slow benchmark
+ is bad.
+ * benchmark/bm_vm4_thread_pass.rb: ditto.
+
+Wed May 4 22:08:22 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/date/test_date_base.rb: don't use no message skip().
+
+Wed May 4 21:11:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * benchmark/bm_io_select2.rb: reduce number of using file
+ descriptors. because gdb need some fds.
+
+Wed May 4 19:00:59 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_wait_for_single_fd): Fix wrong return value.
+ * test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb
+ (TestWaitForSingleFD#test_wait_for_closed_pipe): test for it.
+
+Wed May 4 18:46:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/-test-/wait_for_single_fd: New. for testing
+ rb_wait_for_single_fd() internal function.
+ The patch was written by Eric Wong. [ruby-core:35991]
+
+ * test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb: ditto.
+
+Wed May 4 12:46:25 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_wait_for_single_fd): Added POLLNVAL check.
+ based on a patch from Eric Wong at [ruby-core:35991].
+
+Wed May 4 11:51:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_f_select): remove useless ifdef.
+
+Wed May 4 11:42:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/socket/init.c (wait_connectable): fix error handling code.
+ RB_WAITFD_OUT is turned on even though an error occur.
+
+Wed May 4 10:12:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/readline/readline.c (readline_event): use rb_wait_for_single_fd().
+ The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
+
+Wed May 4 10:10:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/socket/init.c (wait_connectable): use rb_wait_for_single_fd().
+ The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
+
+ * ext/socket/init.c (try_wait_connectable, wait_connectable_ensure):
+ removed.
+
+Wed May 4 10:07:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/io/wait/wait.c (io_wait): use rb_wait_for_single_fd().
+ The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
+
+Wed May 4 10:01:27 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_wait_for_single_fd): new. poll(2) based backend for
+ rb_wait_for_single_fd().
+ Now only Linux uses it.
+
+ The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
+
+Wed May 4 09:56:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_wait_for_single_fd): new.
+ * thread.c (select_single): select(2) based backend for
+ rb_wait_for_single_fd().
+
+ * io.c (make_writeconv): use rb_wait_for_single_fd() instead of
+ rb_thread_fd_select().
+ * io.c (rb_io_wait_readable): ditto.
+ * thread.c (rb_thread_wait_fd_rw): ditto.
+
+ * io.c (wait_readable): removed.
+ * thread.c (init_set_fd): new helper function.
+ * include/ruby/io.h (RB_WAITFD_IN, RB_WAITFD_PRI, RB_WAITFD_OUT):
+ new constant for rb_single_wait_fd().
+
+ The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
+
+Wed May 4 08:04:59 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: fix time dumping so that
+ Syck can load UTC times that Psych dumps.
+
+Wed May 4 07:33:00 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_fd_copy): fix wrong argument.This issue was pointed
+ out by Eric Wong. [ruby-core:35982]
+
+Tue May 3 20:29:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/fileutils/test_fileutils.rb (TestFileUtils#test_chmod_symbol_mode):
+ Skip sticky bit test if the platform is FreeBSD. It doesn't allow to
+ change sticky bit if a target is regular file.
+
+Tue May 3 18:23:57 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/date/test_date.rb (TestDate#test_coerce):
+ test for [ruby-core:35127].
+
+Tue May 3 04:27:53 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_select): preserve errno if no error
+ occurred.
+
+Tue May 3 03:57:04 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_w32_fdcopy): add prototype. fixes
+ #4640
+
+Mon May 2 01:02:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * lib/fileutils.rb (FileUtils#chmod): accept symbolic mode argument.
+ The patch was written by takkanm. [ruby-core:26029][Feature #2190]
+
+ * lib/fileutils.rb (FileUtils#fu_mode): new helper function.
+ * lib/fileutils.rb (FileUtils#symbolic_modes_to_i): ditto.
+ * lib/fileutils.rb (FileUtils#mode_mask): ditto.
+ * lib/fileutils.rb (FileUtils#user_mask): ditto.
+
+ * test/fileutils/test_fileutils.rb (TestFileUtils#test_chmod_symbol_mode):
+ new test for the above symbolic mode.
+ * test/fileutils/test_fileutils.rb (TestFileUtils#test_chmod_R): ditto.
+
+Mon May 2 00:36:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/socket/init.c (rsock_connect): add to care EINTR. based
+ on a patch from Eric Wong at [ruby-core:35621][Bug #4555]
+
+Sun May 1 01:06:24 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_thread_select): release GVL while waiting select().
+
+Sat Apr 30 23:10:15 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * win32/win32.c (rb_w32_fdcopy): New. This can copy even though
+ fdset size exceed FD_SETSIZE.
+ * include/ruby/intern.h (rb_fd_copy): use rb_w32_fdcopy()
+
+Sat Apr 30 20:18:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (do_select): Change argument type to rb_fdset_t.
+ Now do_select() is free from unexpected hangup if
+ HAVE_RB_FD_INIT=1 [Bug #4636]
+
+ * thread.c (rb_thread_fd_select, rb_thread_wait_fd_rw):
+ adapt new argument type.
+
+ * thread.c (rb_thread_select): make dummy implementation.
+
+Sat Apr 30 20:16:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_fd_copy): Change function argument. Now
+ rb_fd_copy() has fully copy semantics.
+ * include/ruby/intern.h: ditto.
+
+Sat Apr 30 20:11:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/intern.h (rb_thread_select): mark as deprecated.
+
+ * ext/io/wait/wait.c (wait_readable): use rb_thread_fd_select
+ instead of rb_thread_select.
+ * ext/socket/init.c (wait_connectable0): ditto.
+ * ext/readline/readline.c (readline_event): ditto.
+ * io.c (rb_io_wait_readable, wait_readable, rb_io_wait_writable,
+ wait_writable): ditto.
+
+Sat Apr 30 20:06:36 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (do_select): remove useless ifdef. time calculation
+ is not heavy weight.
+
+Sat Apr 30 16:48:36 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * benchmark/bm_io_select3.rb: New.
+
+Sat Apr 30 16:27:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (copy_stream_body, rb_io_s_copy_stream): move rb_fd_init()
+ from copy_stream_body to rb_io_s_copy_stream. fds of passing
+ rb_fd_term() have to be guaranteed initialized.
+
+Sat Apr 30 16:13:17 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * benchmark/bm_io_select.rb, benchmark/bm_io_select2.rb: New.
+ based on a patch from Eric Wong at [Feature #4531]
+
+Sat Apr 30 03:25:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/io/wait/test_io_wait.rb: New. for testing ext/io/wait.
+ the patch was written by Eric Wong. [Feature #4531]
+
+Sat Apr 30 00:34:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/win32.h: remove redundant declaration of
+ rb_w32_time_subtract().
+
+Sat Apr 30 00:16:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (gvl_init): fix hangup if GVL_SIMPLE_LOCK=1.
+ We don't have to call mutex_unlock() before initialize it!
+
+Fri Apr 29 13:15:15 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_win32.c (native_cond_timedwait): New. r31373 caused
+ win32 build failure.
+
+ * thread_win32.c (__cond_timedwait, abs_timespec_to_timeout_ms):
+ New helper functions.
+
+ * win32/win32.c (rb_w32_time_subtract): rename from subtract and
+ remove static.
+
+Fri Apr 29 10:43:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * benchmark/bm_vm4_pipe.rb: Add two new benchmark for GVL
+ performance. They was written by Koichi Sasada.
+ * benchmark/bm_vm4_thread_pass.rb: ditto.
+
+Fri Apr 29 10:25:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * vm_method.c (rb_clear_cache_by_class): Revert r29673. It made
+ a segmentation fault regression. [Bug #4289][ruby-core:34554].
+
+Fri Apr 29 10:24:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (make_writeconv): do not add textmode newline decorator if any
+ newline decorator is set already. fixes #4618, fixes #4619
+
+Fri Apr 29 10:17:42 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (lock_func): small cleanup.
+
+Fri Apr 29 10:07:13 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_mutex_lock, lock_func): Avoid busy loop and
+ performance regression. bm_vm3_thread_mutex.rb performance
+ change from 109.064sec to 16.331sec. [Feature #4607]
+
+ * thread.c (init_lock_timeout): New helper function.
+
+Thu Apr 28 16:15:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/{win32.c,dir.h} (rb_w32_uopendir): new API to pass UTF-8 path.
+
+ * win32/win32.c (opendir_internal, rb_w32_opendir): extract and merge
+ common part of rb_w32_opendir() and rb_w32_uopendir().
+
+ * dir.c (do_opendir, glob_helper): encoding.
+
+ * dir.c (dir_initialize, do_opendir): convert path to UTF-8 and call
+ rb_w32_uopendir() instead of rb_w32_opendir() on Windows.
+ fixes #4491, reported by Joey Zhou.
+
+Thu Apr 28 15:32:53 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/dl/test_base.rb (DL::LIBC_SO): its always msvc*.dll on
+ mswin/mingw.
+
+Thu Apr 28 06:07:06 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/csv.rb (CSV::open): suppress universal newline decorator.
+ fixes #4603
+
+ * lib/csv.rb (CSV.read): no mode is needed.
+
+Thu Apr 28 06:06:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_extract_modeenc, rb_f_backquote): set default text
+ mode. fixes #4619
+
+ * io.c (pipe_open): set universal newline decorator if needed.
+
+Wed Apr 27 11:33:08 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/emoji_iso2022_kddi.trans: ISO-2022-JP-KDDI doesn't have
+ CP932 UDA. Another reason is emacs-mule: the implementation of
+ stateless-iso-2022-jp doesn't support beyond 94x94 (0x7fxx);
+ but CP932 UDA is in 7Fxx-92xx.
+
+Wed Apr 27 07:42:44 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (STRIP): use proper toolchain. based on a patch
+ from Jon Forums at [ruby-core:35909]. fixes #4617
+
+Wed Apr 27 01:20:59 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (date_zone_to_diff): renamed.
+ * ext/date/date_parse.c: ditto.
+ * ext/date/date_strptime.c: ditto.
+
+Wed Apr 27 01:16:59 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (enc_find): accept Encoding objects.
+
+Wed Apr 27 00:55:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (econv_opts): add newline option.
+
+ * io.c (validate_enc_binmode, rb_io_extract_modeenc): set newline
+ decorator according to open mode.
+
+ * transcode.c (rb_econv_prepare_options): new function, to prepare
+ econv options with newline flags.
+
+ * include/ruby/encoding.h (ECONV_NEWLINE_DECORATOR_MASK): add.
+
+Wed Apr 27 00:51:01 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_truncate): fix function.
+
+ * include/ruby/win32.h (ftruncate, truncate, ftello, fseeko): non-64
+ versions on mingw are useless because they use int32_t. fixes #4564
+
+Wed Apr 27 00:50:33 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: modified validation methods.
+ * ext/date/lib/date.rb: ditto.
+
+Wed Apr 27 00:00:37 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c (dt_lite_set_tmx): should get df value.
+
+Tue Apr 26 22:34:04 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/lib/date/format.rb (_iso8601): allowed day only civil
+ date. disallowed separatorless day only ordinal date.
+
+Mon Apr 25 21:31:36 2011 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+
+ * ext/openssl/extconf.rb: Should check SSLv2_*method.
+ openssl compiled with "no-ssl2" the extconf don't fail
+ when running `make' having this compilation errors.
+ Patched by Laurent Arnoud. fixes #4562, #4556
+
+Mon Apr 25 20:53:32 2011 Tajima, Akio <artonx@yahoo.co.jp>
+
+ * win32/win32.c (kill): accept 0 only sig is SIGINT #4596
+
+Mon Apr 25 19:59:47 2011 Tajima, Akio <artonx@yahoo.co.jp>
+
+ * win32/win32.c (kill): accept 0 as pid, fixes #4596
+
+Mon Apr 25 16:43:45 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * random.c (random_rand): remove unused variables.
+
+ * struct.c (rb_struct_define_without_accessor): ditto.
+
+ * strftime.c (rb_strftime_with_timespec): ditto.
+
+ * sprintf.c: ditto.
+
+ * time.c (time_asctime): remove useless GetTimeval().
+
+ * thread_pthread.c: cast to (void *) for %p.
+
+Mon Apr 25 11:02:11 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/ripper/lib/ripper/sexp.rb: fix rdoc around sexp.
+ patched by Sho Hashimoto. fixes #4599
+
+Mon Apr 25 08:24:04 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * random.c (rb_f_rand, random_s_rand): RDocs for them.
+
+Mon Apr 25 07:18:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * random.c (random_s_rand, Init_Random): Random.rand should behave as
+ Random::DEFAULT.rand rather than Kernel#rand.
+
+ * random.c (rand_range, random_rand): rand_range function extracted
+ from random_rand function.
+
+ * random.c (rb_f_rand): accept a Range argument as Random#rand
+ [ruby-dev:43427] #4605
+
+Mon Apr 25 03:31:06 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/time.rb: require 'date'.
+ * ext/date/lib/date/format.rb: removed require line.
+
+Mon Apr 25 03:08:39 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/lib/date/format.rb: require 'date'.
+
+Mon Apr 25 03:04:16 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/lib/date/format.rb (_iso8601): added a pattern.
+
+Mon Apr 25 02:51:22 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/date/lib/date/format.rb: require 'date_core.so'.
+ date/format needs methods which are now in date_core.so.
+ This breaks make rdoc which uses Date._parse from time.rb.
+
+Mon Apr 25 02:47:46 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/lib/date/format.rb (_iso8601): fixed a bug of regex.
+
+Mon Apr 25 02:12:26 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/lib/date/format.rb: an adjustment of regex.
+
+Mon Apr 25 01:58:50 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/lib/date/format.rb: omitted to call _parse.
+
+Mon Apr 25 01:03:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * string.c (rb_to_id): remove unused variable.
+
+Sun Apr 24 22:19:05 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c, rational.c: omitted some method calls.
+
+Sun Apr 24 02:57:27 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_parse.c (n2i): takes long.
+
+Sun Apr 24 02:51:06 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_parse.c: reverted.
+
+Sun Apr 24 02:25:23 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/intern.h: pcc can't use __builtin_constant_p.
+
+ * vm_exec.c: change condition.
+
+Sun Apr 24 01:58:01 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/date/date_core.c (leap_p): suppress warning: parentheses.
+
+ * ext/date/date_core.c (date_s__parse_internal): remove unused
+ variable "str".
+
+ * ext/date/date_parse.c (parse_ddd_cb): use RSTRING_LENINT.
+
+ * ext/date/date_strftime.c (date_strftime_with_tmx): remove unused
+ variable.
+
+Sun Apr 24 00:34:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_parse.c: removed some unused macros. use strchr()
+ instead of index().
+
+Sat Apr 23 21:29:42 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: replacement of implementation of
+ _parse. [experimental]
+ * ext/date/date_parse.c: new.
+ * ext/date/lib/date/format.rb: removed ruby version of _parse.
+
+Fri Apr 22 12:04:15 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * array.c (rb_ary_sort_bang): fix rdoc.
+ patched by burningTyger. https://github.com/ruby/ruby/pull/11
+
+Fri Apr 22 11:49:49 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/xmlrpc/create.rb (XMLRPC::Create#conv2value):
+ XML-RPC's int is 32bit int, and Fixnum also may be beyond 32bit.
+
+ * lib/xmlrpc/create.rb (XMLRPC::Create#conv2value):
+ XML-RPC doesn't allow Infinity and NaN.
+ http://www.xmlrpc.com/spec
+
+Fri Apr 22 04:16:14 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/parser.c (parse): strings from psych have proper taint
+ markings.
+
+ * test/psych/test_tainted.rb: test for string taint
+
+Thu Apr 21 01:30:02 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * random.c (rb_f_srand): fix rdoc: srand(0)'s 0 is a seed.
+ [ruby-core:35833] fixes #4590
+
+Thu Apr 21 01:01:28 2011 Masaya Tarui <tarui@ruby-lang.org>
+
+ * win32/win32.c (CreateChild): maximum length of lpCommandLine is
+ 32,768 characters, including the Unicode terminating null character.
+
+Wed Apr 20 21:32:11 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_strptime.c (date__strptime_internal): do not
+ overwrite local variables.
+
+Wed Apr 20 14:41:28 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_each_line): check string's length when compare
+ separator and string. [ruby-core:35815] fixes #4586
+
+Wed Apr 20 00:02:13 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-parse-partial): use position of open paren.
+
+Tue Apr 19 01:00:21 2011 Tajima Akio <artonx@yahoo.co.jp>
+
+ * test/ruby/test_io.rb (TestIO#test_cross_thread_close_fd):
+ skip cross thread pipe close if windows
+
+Mon Apr 18 12:15:46 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_range.rb (TestRange#test_step_ruby_core_35753):
+ avoid float error. [ruby-core:35804]
+
+Sun Apr 17 00:20:14 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_{core,strftime}.c: use struct tmx instead of vtm.
+ * ext/date/date_tmx.h: new.
+
+Sat Apr 16 22:23:52 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_strftime.c (date_strftime_wo_timespec): changed
+ the way of validation of locale modifiers.
+
+Sat Apr 16 21:55:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: replacement of implementation of
+ _strptime. [experimental]
+ * ext/date/date_strptime.c: new.
+ * ext/date/lib/date/format.rb: removed ruby version of _strptime.
+
+Sat Apr 16 10:18:30 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * vm.c (Init_VM): suppress warning: "OPT_BASIC_OPERATIONS" is not
+ defined.
+
+Fri Apr 15 23:41:18 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * ruby.c (proc_options): suppress warning:
+ "ALLOW_DEFAULT_SOURCE_ENCODING" is not defined.
+
+Fri Apr 15 15:10:29 2011 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/uri/generic.rb (#route_from_path): Fix a bug where
+ URI('http://h/b/').route_to('http://h/b') wrongly returned './'
+ (should be '../b'). [Bug #4476]
+
+Fri Apr 15 14:58:06 2011 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/fileutils.rb (FileUtils#touch): Fix corrupted output when
+ mtime is specified in addition to nocreate (and verbose).
+ ref [ruby-dev:43401]
+
+Thu Apr 14 23:43:43 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (ruby_float_step): wrong loop condition.
+ fixes [ruby-core:35753], reported by Joey Zhou.
+
+ * test/ruby/test_range.rb (TestRange#test_step_ruby_core_35753):
+ test above change.
+
+Thu Apr 14 22:48:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit::Options#setup_options): set possible
+ values for completion. no conversion is needed.
+
+ * lib/test/unit.rb (Test::Unit::Runner::Worker#initialize): use
+ positional arguments instead of keyword arguments.
+
+ * lib/test/unit.rb (Test::Unit::Runner#jobs_status): io/console may
+ not be available. use 80 as the last resort if IO#winsize and
+ COLUMNS are unavailable.
+
+ * lib/test/unit.rb (Test::Unit::Runner::Worker#died): rename using a
+ verb.
+
+ * lib/test/unit.rb (Test::Unit::Runner#_run_parallel): check if worker
+ is signaled and use its exit status.
+
+ * lib/test/unit.rb (Test::Unit::Runner::Worker#dead): no longer @in
+ and @out are separated.
+
+Thu Apr 14 21:23:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_autoload_p): search superclasses as same as actual
+ loading. fixes [ruby-core:35679]
+
+Thu Apr 14 21:21:06 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/win32.h (frexp, modf): wrongly declared as pure in
+ mingw math.h.
+
+ * include/ruby/win32.h (ftruncate, truncate): mingw64 misses
+ prototypes.
+
+ * win32/win32.c (rb_w32_read): suppress warning.
+
+Thu Apr 14 19:55:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * lib/fileutils.rb (FileUtils#touch): fix corrupted output when
+ FileUtils.touch(:nocreate => true, :verbose => true) case.
+ The patch was written by Hiroyuki Iwatsuki. [ruby-dev:43401]
+
+Thu Apr 14 16:01:45 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * io.c (rb_f_syscall): suppress warning: "HAVE___SYSCALL" is not
+ defined.
+
+Thu Apr 14 00:41:09 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * thread.c (thread_fd_close_i): IOError exception should be assigned
+ to rb_thread_t::thrown_errinfo.
+
+Wed Apr 13 20:12:26 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * io.c (rb_io_fdatasync): remove unused variable.
+
+Tue Apr 12 20:54:12 2011 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/st.h: parenthesize macro arguments.
+
+Tue Apr 12 19:19:50 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb: avoid race condition. fixes #4572
+
+Tue Apr 12 18:07:13 2011 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/extconf.rb: --disable-libedit to disable
+ libedit. fixes #4550
+
+Tue Apr 12 10:37:39 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h: VC doesn't have ftruncate() and others, but
+ ruby needs HAVE_ macros to use our emulation functions.
+ (fix the problem of 31262)
+
+Tue Apr 12 01:33:00 2011 Luis Lavena <luislavena@gmail.com>
+
+ * configure.in: properly evaluate existence of truncate, ftruncate
+ and ftello for MinGW. [ruby-core:35678]
+ * win32/win32.c: rename truncate, ftruncate and ftello to avoid
+ redefinitions.
+ * win32/win32.h: ditto.
+
+Mon Apr 11 21:51:52 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c: revert r31230. Because it made a regression.
+ [ruby-core:35631]
+
+Mon Apr 11 21:49:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_io.rb: Added TestIO#test_cross_thread_close_stdio
+ and TestIO#test_cross_thread_close_fd.
+ The patch was written by Eric Wong. [ruby-core:35669]
+
+Mon Apr 11 21:15:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * file.c (rb_group_member): kill 256K of stack usage.
+ the patch was written by Eric Wong. [ruby-core:35699]
+
+Mon Apr 11 07:24:13 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/openssl/ossl.c: Fix typo, document version constants.
+
+Sun Apr 10 22:23:45 2011 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h: parenthesize macro arguments.
+
+Sat Apr 9 23:31:47 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * ext/stringio/stringio.c (strio_each, strio_readlines):
+ Use `NUM2LONG` instead of `FIX2INT`. Fixes [ruby-dev:43395].
+
+Sat Apr 9 23:22:27 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * ext/stringio/stringio.c (strio_each):
+ Fix exception message and don't raise immediately if block is not
+ given.
+ Fixes [ruby-dev:43394].
+
+ * test/stringio/test_stringio.rb (test_each_line_limit_0):
+ Fix test for above.
+
+Sat Apr 9 21:54:15 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * ext/stringio/stringio.c (strio_each, strio_readlines):
+ limit must not be zero. Fixes [ruby-dev:43392].
+
+ * test/stringio/test_stringio.rb: Add tests for above.
+
+Sat Apr 9 18:01:36 2011 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/util.h: parenthesize macro arguments.
+
+Fri Apr 8 16:01:56 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_getline): check whether str is
+ a string when str and lim are given.
+ https://twitter.com/watson1978/status/56225052152168449
+
+Thu Apr 7 20:03:52 2011 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h: parenthesize macro arguments.
+
+Wed Apr 6 21:08:31 2011 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h: parenthesize macro arguments.
+
+Wed Apr 6 15:12:40 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl_pkey_dh.c (ossl_dh_initialize):
+ pop pushed error after each try of reading. fixes #4550
+
+ * ext/openssl/ossl_pkey_dsa.c (ossl_dsa_initialize): ditto.
+
+ * ext/openssl/ossl_pkey_ec.c (ossl_ec_initialize): ditto.
+
+Wed Apr 6 11:36:44 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_initialize):
+ pop pushed error after each try of reading. fixes #4550
+
+Tue Apr 5 20:33:43 2011 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h: parenthesize macro arguments.
+
+Mon Apr 4 22:02:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/io/nonblock/nonblock.c (io_nonblock_set): Avoid F_SETFL if
+ we're not changing the O_NONBLOCK bit. F_SETFL is an expensive
+ operation since it needs to affect all processes with the same
+ file object.
+ The patch is written by Eric Wong. [ruby-core:35556]
+
+Mon Apr 4 21:41:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_io_syswrite): While local FS writes are usually
+ buffered, the buffers can be full or the file opened with
+ O_SYNC. IO#syswrite can also be used on blocking IOs
+ (pipe/socket) just like IO#write.
+ The patch is written by Eric Wong. [ruby-core:35554]
+
+Mon Apr 4 11:50:40 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/test_tempfile.rb: simply ignore platform dependent testcases
+ instead of skipping.
+
+Sun Apr 3 22:52:22 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * ext/syslog/syslog.c: improve rdoc.
+ a patch by Jonas Pfenniger. [ruby-core:35592] fixes #4545
+
+Sun Apr 3 22:10:09 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/zlib/zlib.c: parenthesize macro arguments.
+
+Sun Apr 3 21:33:58 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: disable fdatasync again on Mac OS X.
+ [ruby-core:35493][Bug #4500]
+
+Sun Apr 3 21:16:20 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (io_reopen): IO#close releases GVL if possible.
+ close() may block for certain file types (NFS, SO_LINGER
+ sockets, inotify), so let other threads run. The patch was
+ created by Eric Wong [ruby-core:35555][Bug #4527]
+
+ * io.c (fptr_finalize): ditto.
+
+ * io.c (maygvl_fclose): new.
+ * io.c (nogvl_fclose): ditto.
+ * io.c (maygvl_close): ditto.
+ * io.c (nogvl_close): ditto.
+
+Fri Apr 1 22:25:50 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/syslog/syslog.c: parenthesize macro arguments.
+
+Fri Apr 1 18:53:06 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/webrick/cookie.rb (WEBrick::Cookie.parse): 'white space is
+ permitted between tokens' according to RFC2965. Though 'Netscape
+ spec' does not define the syntax clearly, make it tolerant as a
+ server. As a real-world example, rest-client gem sends
+ 'Cookie: foo=1;bar=2'
+
+ * test/webrick/test_cookie.rb (test_parse_non_whitespace): test it.
+
+Fri Apr 1 13:19:20 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (RUBY_VM_CHECK_INTS_TH): merge a patch by ko1
+ in [ruby-dev:43373].
+
+Thu Mar 31 23:15:46 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-brace-to-do-end, ruby-do-end-to-brace):
+ adjust space between block beginning and block arguments
+
+Thu Mar 31 20:42:05 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/strscan/strscan.c: parenthesize macro arguments.
+
+Thu Mar 31 18:06:12 2011 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_get_ev_const): should ignore crefs with
+ the NODE_FL_CREF_PUSHED_BY_EVAL flag.
+
+Thu Mar 31 16:49:56 2011 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_get_ev_const): search root cref properly.
+ [ruby-dev:43365]
+
+Thu Mar 31 14:50:25 2011 Shugo Maeda <shugo@ruby-lang.org>
+
+ * eval.c (rb_mod_s_constants): should ignore crefs with
+ the NODE_FL_CREF_PUSHED_BY_EVAL flag.
+
+Wed Mar 30 22:55:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-toggle-block): toggle do/end and {}.
+
+ * misc/ruby-mode.el (ruby-move-to-block): move to opening of
+ block.
+
+Wed Mar 30 14:35:15 2011 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_insnhelper.h (COPY_CREF): should copy
+ the NODE_FL_CREF_PUSHED_BY_EVAL flag to hide constants from
+ methods defined by class_eval. [ruby-dev:43365]
+
+Wed Mar 30 00:24:53 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/stringio/stringio.c: parenthesize macro arguments.
+
+Tue Mar 29 21:51:31 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * object.c (rb_String): Kernel#String should call to_str before to_s.
+
+Tue Mar 29 10:28:08 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/webrick/test_filehandler.rb
+ (WEBrick::TestFileHandler#test_short_filename): the cgi doesn't exist
+ on current directory.
+
+Tue Mar 29 05:19:57 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c: parenthesize macro arguments.
+
+Tue Mar 29 00:03:51 2011 Tajima Akio <artonx@yahoo.co.jp>
+
+ * test/webrick/test_filehandler.rb (test_short_filename):
+ read real short filename by cmd because smb mounted files
+ have different naming convention.
+
+Mon Mar 28 11:38:08 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/date/date_core.c (date_s_today): use int for year.
+
+ * ext/date/date_core.c (datetime_s_now): ditto.
+
+Mon Mar 28 11:07:41 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/extmk.rb: set MFLAGS from MAKEFLAGS when using nmake.
+
+Mon Mar 28 11:07:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (love): all you need is love.
+
+Sun Mar 27 23:16:31 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ipsocket.c: parenthesize macro arguments.
+
+Sun Mar 27 16:55:34 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-mode-map): remove unnecessary
+ binding. fixes
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468952
+
+ * misc/ruby-mode.el: suppress warnings at byte compile. fixes
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=502926
+
+Sun Mar 27 11:18:35 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: removed unused variables.
+
+Sat Mar 26 15:16:09 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/getaddrinfo.c: parenthesize macro arguments.
+
+Sat Mar 26 05:27:34 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/date/lib/date/format.rb (DateTime#strftime): removed because
+ date_core defines it.
+
+Fri Mar 25 21:59:45 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: should not force cast with macros.
+
+Fri Mar 25 21:56:10 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/sdbm/init.c: parenthesize macro arguments.
+
+Fri Mar 25 19:39:40 2011 Ben Walton <bwalton@artsci.utoronto.ca>
+
+ * test/test_syslog.rb:
+ Skip syslog tests that rely on LOG_PERROR unless it's defined
+
+ Instead of checking looking at the platform to determine if the tests
+ relying on LOG_PERROR should be run, look for the definition of the
+ constant as this will be robust against all platforms as long as the
+ underlying syslog.c code sets it up correctly.
+
+ This specifically addresses failures on Solaris 9.
+
+ Use LOG_PID instead of LOG_PERROR in Syslog.open test
+
+ LOG_PERROR isn't a POSIX option for syslog, so it fails on platforms
+ that don't define it. Solaris 9 and 10 are examples of this.
+
+ Use LOG_PID instead.
+
+Fri Mar 25 15:42:17 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/sdbm/_sdbm.c (sdbm_open): use size_t.
+
+ * ext/syck/bytecode.c: ditto.
+
+ * ext/sdbm/_sdbm.c (delpair): use ptrdiff_t.
+
+ * ext/sdbm/init.c: use RSTRING_LENINT.
+
+ * ext/dl/handle.c: suppress warning: shorten-64-to-32.
+
+ * ext/strscan/strscan.c: ditto.
+
+ * ext/syck/emitter.c: ditto.
+
+ * ext/syck/implicit.c: ditto.
+
+ * ext/syck/syck.c: ditto.
+
+ * ext/syck/token.c: ditto.
+
+Fri Mar 25 12:14:58 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: import nkf 7f18e30.
+
+Fri Mar 25 11:49:29 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_process.rb (TestProcess#test_no_curdir): skip silently
+ on Windows, because this tests a platform specific feature and it'll
+ never be supported on ruby on Windows.
+
+ * test/ruby/test_dir_m17n.rb
+ (TestDir_M17N#test_filename_extutf8_invalid,
+ TestDir_M17N#test_filename_as_bytes_extutf8): ditto.
+
+ * test/open-uri/test_open-uri.rb
+ (TestOpenURI#test_find_proxy_case_sensitive_env): ditto.
+
+ * test/dl/test_handle.rb (DL::TestHandle#test_NEXT,
+ DL::TestHandle#test_DEFAULT): ditto.
+
+Thu Mar 24 23:06:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_get_ev_const): should not autoload in
+ defined? mode.
+
+ * variable.c (rb_const_defined_0): fix autoloading base.
+ [ruby-core:35509]
+
+Thu Mar 24 22:48:43 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/sdbm/_sdbm.c: parenthesize macro arguments.
+
+Thu Mar 24 14:45:57 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl.c: suppress warning: shorten-64-to-32.
+
+ * ext/openssl/ossl.h: ditto.
+
+ * ext/openssl/ossl_asn1.c: ditto.
+
+ * ext/openssl/ossl_bio.c: ditto.
+
+ * ext/openssl/ossl_bn.c: ditto.
+
+ * ext/openssl/ossl_cipher.c: ditto.
+
+ * ext/openssl/ossl_hmac.c: ditto.
+
+ * ext/openssl/ossl_ns_spki.c: ditto.
+
+ * ext/openssl/ossl_ocsp.c: ditto.
+
+ * ext/openssl/ossl_pkcs5.c: ditto.
+
+ * ext/openssl/ossl_pkey.c: ditto.
+
+ * ext/openssl/ossl_pkey_dh.c: ditto.
+
+ * ext/openssl/ossl_pkey_dsa.c: ditto.
+
+ * ext/openssl/ossl_pkey_ec.c: ditto.
+
+ * ext/openssl/ossl_pkey_rsa.c: ditto.
+
+ * ext/openssl/ossl_rand.c: ditto.
+
+ * ext/openssl/ossl_ssl.c: ditto.
+
+ * ext/openssl/ossl_x509ext.c: ditto.
+
+ * ext/openssl/ossl_x509name.c: ditto.
+
+Thu Mar 24 11:48:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl_rand.c (ossl_rand_egd_bytes): use NUM2INT because
+ the result is used with functions whose argument is int.
+
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_setup): ditto.
+
+ * ext/openssl/ossl_x509store.c (ossl_x509store_set_purpose): ditto.
+
+ * ext/openssl/ossl_x509store.c (ossl_x509store_set_trust): ditto.
+
+ * ext/openssl/ossl_x509store.c (ossl_x509stctx_set_purpose): ditto.
+
+ * ext/openssl/ossl_x509store.c (ossl_x509stctx_set_trust): ditto.
+
+Thu Mar 24 11:36:55 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl_x509name.c: id_aref's type is ID.
+
+Thu Mar 24 10:04:35 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/io/console/console.c (console_set_winsize):
+ suppress warning: shorten-64-to-32.
+
+Thu Mar 24 09:56:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl_ocsp.c (ossl_ocspreq_verify): flags is VALUE,
+ so it should use NUM2INT.
+
+ * ext/openssl/ossl_ocsp.c (ossl_ocspbres_verify): ditto.
+
+Wed Mar 23 21:09:29 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/readline/readline.c: parenthesize macro arguments.
+
+Wed Mar 23 08:07:33 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_round): fix inaccurate results.
+
+Wed Mar 23 00:12:16 2011 Tajima Akio <artonx@yahoo.co.jp>
+
+ * win32/win32.c: wait process real termination after reading
+ exit code. fixes #4518
+
+Tue Mar 22 21:20:10 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rubygems/test_case.rb: save current dir to @current_dir
+ before Dir.chdir.
+
+Tue Mar 22 20:10:04 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/psych/parser.c: parenthesize macro arguments.
+
+Tue Mar 22 20:10:01 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ruby_missing.h: parenthesize macro arguments.
+
+Tue Mar 22 13:33:22 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * ext/openssl/lib/openssl/buffering.rb: removed circular require of
+ openssl.rb.
+
+ * ext/openssl/lib/openssl/*: removed following comment for transition
+ measures of avoiding circular require. No one claimed about this as
+ far as I know.
+ ##
+ # Should we care what if somebody require this file directly?
+ # require "openssl"
+
+Tue Mar 22 10:57:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/runner.rb: set Gem::TestCase's @@project_dir.
+
+ * lib/rubygems/test_case.rb: set Gem::TestCase's @@project_dir only
+ when it is not defined.
+
+Tue Mar 22 09:38:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (flo_round): use pow instead of while-loop. fixes #4510
+ patched by Alex Young [ruby-core:35526]
+
+Tue Mar 22 06:47:46 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/date/date_strftime.c (date_strftime_wo_timespec):
+ suppress warning: shorten-64-to-32.
+
+Tue Mar 22 06:42:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/date/date_core.c: suppress warning: shorten-64-to-32.
+
+Tue Mar 22 06:41:37 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/test/unit/parallel.rb: remove unused variable.
+
+Tue Mar 22 06:19:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/utf_16le.c: suppress warning: shorten-64-to-32.
+
+ * ext/dbm/dbm.c: ditto.
+
+ * ext/gdbm/gdbm.c: ditto.
+
+ * parse.y (Init_ripper): suppress warning: unused value.
+
+Mon Mar 21 11:21:32 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit.rb: Refactoring. Unified if and elsif.
+
+Sun Mar 20 23:09:34 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_strftime.c: checks duplicated modifiers.
+
+Sun Mar 20 22:32:30 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_strftime.c: removed unused code and arguments.
+
+Sun Mar 20 21:34:49 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: replacement of implementation of
+ strftime. It has some limitations that is same as Time's
+ one. [experimental]
+ * ext/date/date_strftime.c: new.
+ * ext/date/lib/date/format.rb: removed ruby version of strftime.
+
+Sun Mar 20 12:43:12 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_x509store.c: parenthesize macro arguments.
+
+Sun Mar 20 01:39:48 2011 Tajima Akio <artonx@yahoo.co.jp>
+
+ * hash.c (ruby_setenv): check env process block size with OS ver.
+ * win32/win32.c: export rb_w32_osver for above patch.
+ * include/ruby/win32.h: declare rb_w32_osver for Win32 Libs.
+
+Sat Mar 19 18:35:05 2011 Tajima Akio <artonx@yahoo.co.jp>
+
+ * hash.c (ruby_setenv): calculate total env block size for win32.
+ * test/ruby/test_env.rb: add test for above patch.
+
+Sat Mar 19 17:14:46 2011 Tajima Akio <artonx@yahoo.co.jp>
+
+ * hash.c (ruby_setenv): checking with max process environment
+ block size for Win32. 32767 for 2000/XP, 2003. if failed to
+ read the block, then checking with 5120 for earlier Windows.
+
+Sat Mar 19 12:30:25 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_x509revoked.c: parenthesize macro arguments.
+
+Fri Mar 18 20:44:36 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_x509req.c: parenthesize macro arguments.
+
+Fri Mar 18 08:48:06 2011 Oleg Shaldybin <oleg.shaldybin@gmail.com>
+
+ * lib/fileutils.rb (FileUtils::Entry_#copy_file): updated FileUtils.cp
+ to still copy file permissions when :preserve is false (as cp does
+ this even when -p isn't set).
+
+Fri Mar 18 00:59:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/win32ole/extconf.rb (create_docfile): removed. should not
+ modify source directory unnecessarily, platform dependent
+ documentation should be dealt with by rdoc. [ruby-core:35495]
+
+Fri Mar 18 00:54:20 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_funcall_passing_block): add prototype.
+ a patch by James M. Lawrence at [ruby-core:35501]
+
+Wed Mar 17 06:23:31 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_x509name.c: parenthesize macro arguments.
+
+Wed Mar 16 20:36:56 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ipsocket.c (init_inetsock_internal): raise an error on
+ listen(2) failure.
+ reported by Xavier Shay. [ruby-core:35505]
+
+Wed Mar 16 15:06:21 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/openssl/lib/openssl/buffering.rb (module OpenSSL): #flush should
+ not change sync mode on exception.
+ * test/openssl/test_buffering.rb: added
+
+Wed Mar 16 13:45:28 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/openssl/lib/openssl/buffering.rb: de-nest Buffering module
+
+ * ext/openssl/lib/openssl/buffering.rb: add RDoc
+
+Wed Mar 16 08:40:39 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_x509ext.c: parenthesize macro arguments.
+
+Tue Mar 15 18:34:27 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_x509crl.c: parenthesize macro arguments.
+
+Tue Mar 15 09:49:03 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * test/misc/test_ruby_mode.rb (test_singleton_class): Skip for Pending.
+
+Mon Mar 14 21:20:44 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * test/ruby/test_require.rb (test_require_too_long_filename):
+ increase path length, because MAXPATHLEN is defined as 4096 on linux.
+
+ * test/ruby/test_require.rb (test_require_path_home_1): ditto.
+
+ * test/ruby/test_require.rb (test_require_path_home_2): ditto.
+
+Mon Mar 14 19:54:37 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_x509cert.c: parenthesize macro arguments.
+
+Sun Mar 13 18:11:28 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_x509attr.c: parenthesize macro arguments.
+
+Sun Mar 13 16:07:58 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/pstore.rb: Fix don't raise "nested transaction" when thread_safe
+ is true. Patch by Masaki Matsushita (Glass_saga). [ruby-dev:43337]
+
+ * test/test_pstore.rb: Test for above.
+ Patch by Masaki Matsushita (Glass_saga) [ruby-dev:43337]
+
+Sat Mar 12 04:12:41 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_ssl_session.c: parenthesize macro arguments.
+
+Sat Mar 12 02:27:07 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c ({d,dt}_lite_marshal_load): checks the given
+ argument.
+
+Sat Mar 12 01:26:24 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c: changed some directives.
+
+Sat Mar 12 01:16:02 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/date_core.c, ext/date/lib/*: moved rdoc descriptions.
+
+Sat Mar 12 00:06:24 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * ext/date/lib: moved from lib.
+
+Fri Mar 11 23:32:38 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/delta*: removed undocumented delta.
+
+Fri Mar 11 18:42:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (find_executable0): should exclude directories.
+
+Fri Mar 11 01:40:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (proc_getmaxgroups, proc_setmaxgroups): Process#maxgroups
+ and Process#maxgroups= now raise NotImplementedError if the
+ platform don't support supplementary groups concept.
+
+Fri Mar 11 01:25:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (get_sc_ngroups_max): return -1 if platform don't
+ support NGROUPS_MAX.
+
+Thu Mar 10 22:28:15 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_ssl.h: parenthesize macro arguments.
+
+Thu Mar 10 21:59:37 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * parse.y (parser_encode_length): add exception as UTF8-MAC for
+ magic comment's emacs newline specifier
+ patched by James M. Lawrence [ruby-core:35476] fixes #4489
+
+Thu Mar 10 16:00:22 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * parse.y (parser_encode_length): fix typo: the length of
+ "-dos" and "-mac" is not 5 but 4.
+ patched by James M. Lawrence [ruby-core:35476] fixes #4489
+
+Thu Mar 10 10:52:01 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_require.rb: setting too long string to ENV causes
+ Errno::EINVAL on Windows. long path name errors may causes over
+ about 1024 bytes, then limit it about 4000 bytes.
+
+Thu Mar 10 10:09:35 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit::Runner::Worker#read): fix for the case
+ when IO#read or IO#gets returns nil.
+
+Thu Mar 10 07:12:03 2011 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/rubygems*: Import rubygems 1.6.2 (release candidate @ 2026fbb5)
+ * test/rubygems: Ditto
+ * test/runner.rb: Added test to load path to fix test requires.
+
+Thu Mar 10 03:00:43 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_ssl.c: parenthesize macro arguments.
+
+Wed Mar 9 23:51:26 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * test/ruby/test_io_m17n.rb (test_io_new_enc): "sjis" is now an alias
+ of Windows-31J.
+
+Wed Mar 9 23:06:13 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-parse-partial): fix indent after aref.
+
+Wed Mar 9 12:50:24 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: Rescue exceptions when
+ people implement the method method. Thanks Lin Jen-Shin.
+ [ruby-core:35255]
+
+ * test/psych/visitors/test_yaml_tree.rb: test for implementation of
+ method method.
+
+Wed Mar 9 11:53:31 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/shift_jis.c: Change SJIS as an alias of Windows-31J.
+ [ruby-dev:43027] fixes #4280
+
+ * enc/shift_jis.c: Add PCK as an alias of Windows-31J.
+
+Wed Mar 9 00:45:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb: nmake substitutes all occurrences in macro.
+
+ * ext/extmk.rb: workaround for nmake.
+
+Tue Mar 8 23:49:45 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (proc_setgroups): cleanup.
+
+Tue Mar 8 23:40:30 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/misc/test_ruby_mode.rb: test for ruby-mode.el.
+
+Tue Mar 8 23:27:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (get_sc_ngroups_max): try to use NGROUPS_MAX at first if
+ _SC_NGROUP_MAX is not defined.
+
+Tue Mar 8 23:10:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-parse-partial): fix for array in block.
+
+Tue Mar 8 21:44:49 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_rand.c: parenthesize macro arguments.
+
+Tue Mar 8 16:45:31 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * hash.c (ruby_setenv): MSDN says that Windows XP or earlier limits
+ the total size of environment block to 5,120 chars. and on such
+ OS, putenv() causes SEGV. So, ruby should limit the size of an
+ environment variable to 5,120 bytes for workaround.
+
+Tue Mar 8 15:57:20 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/rubygems/test_gem_spec_fetcher.rb
+ (TestGemSpecFetcher#test_cache_dir_escapes_windows_paths): cache_dir
+ may have driveletter and `:' for base of cache_dir itself, so need
+ to skip it for checking.
+
+Tue Mar 8 12:30:06 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-deep-indent-paren-p, ruby-calculate-indent):
+ do not apply deep-indent inside parens at the beginning of
+ expressions.
+
+Tue Mar 8 09:32:48 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (configure-ext, build-ext), ext/extmk.rb (extmake):
+ support parallel-make under ext.
+
+Tue Mar 8 09:25:23 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (proc_setgroups): use getgrnam() if getgrnam_r() is
+ not available.
+
+ * process.c: RARRAY_LEN() returns long int.
+
+Tue Mar 8 09:07:03 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_REPLACE_TYPE): enclose in quotes for multiple
+ type names.
+
+Tue Mar 8 01:43:11 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * process.c (get_sc_ngroups_max): define to wrap sysconf(3).
+ this also supports Windows which doesn't have sysconf(3).
+
+ * process.c (maxgroups): use get_sc_ngroups_max.
+
+ * process.c (proc_setmaxgroups): ditto.
+
+Tue Mar 8 01:16:49 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * gc.c (rb_objspace): an initializer must be a constant.
+
+Tue Mar 8 01:11:44 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * process.c (maxgroups): cast because sysconf(3)'s return value is long.
+
+ * process.c (proc_setmaxgroups): ditto.
+
+ * process.c (proc_setgroups): cast because RARRAY_LEN() is long.
+
+Tue Mar 8 00:02:47 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_pkey_rsa.c: parenthesize macro arguments.
+
+Mon Mar 7 22:59:39 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/pstore.rb: Delete variable @transaction and fix #4474. Patch by
+ Masaki Matsushita (Glass_saga).
+
+ * test/test_pstore.rb(test_thread_safe): Add test for #4474.
+
+Mon Mar 7 21:31:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (proc_setgroups): replace getgrnam() with getgrnam_r()
+ because getgrnam() isn't thread safe.
+
+Mon Mar 7 20:49:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (proc_getmaxgroups, proc_setmaxgroups): reflect
+ platform maxgroups limitation by default instead hardcoded 65536.
+
+Mon Mar 7 17:13:00 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (rb_gc_set_params): allow GC parameter configuration by
+ environment variables. based on a patch from funny-falcon at
+ https://gist.github.com/856296, but honors safe level.
+
+Mon Mar 7 09:05:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c: NUM2RLIM is defined but no getrlimit and setrlimit on
+ mingw.
+
+Mon Mar 7 08:38:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/date/date_core.c (DateTimeData): should not use bare 'long long'
+ and 'long double', which are not defined by C89.
+
+ * ext/date/date_core.c (dt_lite_plus): get rid of overflow at casting
+ down double to integer.
+
+Mon Mar 7 00:21:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (proc_getgroups): get rid of maxgroups dependency.
+ ngroups can be calculated dynamically.
+
+Sun Mar 6 23:45:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: rlim_t use standard RUBY_REPLACE_TYPE mechanism.
+
+Sun Mar 6 23:26:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (proc_setmaxgroups): added negative value check.
+ This was suggested by Daniel Berger. Thanks Daniel!
+ [ruby-core:35426][Bug#4467]
+
+Sun Mar 6 23:18:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (maxgroups, proc_setmaxgroups): increase max groups
+ limitation up to 65536.
+
+Sun Mar 6 22:20:59 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_pkey_ec.c: parenthesize macro arguments.
+
+Sun Mar 6 21:49:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * sample/list.rb (MyElem#initialize): initialize @head
+ explicitly. Otherwise -W2 option makes following warning.
+ "warning: instance variable @head not initialized".
+ This issue was founded by Andrew Grimm. Thanks Andrew!
+ [ruby-core:35435][Bug#4471]
+
+Sun Mar 6 05:21:41 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * class.c: fix camelCase to snake_case in documentation code examples.
+ patched by Andrew Grimm. fixes Bug #4469
+
+ * marshal.c: ditto.
+
+ * proc.c: ditto.
+
+ * sample/biorhythm.rb: ditto.
+
+ * vm_eval.c: ditto.
+
+ * vm_method.c: ditto.
+
+
+Sun Mar 6 03:22:27 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (io_cntl): use rb_thread_io_blocking_region() instead
+ rb_thread_blocking_region().
+
+Sat Mar 5 22:54:36 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * include/ruby/intern.h: fix a typo of prototype declaration.
+ rb_mutex_try_lock -> rb_mutex_trylock [ruby-dev:43213]
+
+Sat Mar 5 19:44:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_io.rb (TestIO#test_fcntl_lock): small clean up.
+
+Sat Mar 5 01:33:46 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (io_cntl, nogvl_io_cntl): IO.fcntl() and IO.ioctl()
+ release GVL during calling kernel interface.
+ Suggested by Eric Wong. [ruby-core:35417][Bug #4463]
+
+ * test/ruby/test_io.rb (TestIO#test_fcntl_lock): add new test for
+ IO.fcntl().
+
+Fri Mar 4 23:09:12 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * test/testunit/test_parallel.rb
+ (test_should_run_all_without_any_leaks): consider that the order of
+ testcase could change. [ruby-dev:43300] [Bug #4466]
+
+Fri Mar 4 22:01:14 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (io_cntl): change 'cmd' type to int. ioctl and fcntl need to
+ be passed int.
+ * io.c (rb_io_ctl): ditto.
+
+Fri Mar 4 21:10:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: save warnflags. the patch is created by Eric Wong.
+ [Bug #4465]
+
+Wed Mar 2 21:15:00 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_pkey_dsa.c: parenthesize macro arguments.
+
+Thu Mar 3 22:10:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (check_exec_redirect_fd, check_exec_redirect): raise
+ ArgumentError if fd >= 3 on Windows because the feature is not
+ supported.
+
+ * test/ruby/test_process.rb (test_execopts_redirect): remove meaningless
+ argument.
+
+Thu Mar 3 21:21:42 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_process.rb (test_execopts_redirect): redirecting fd
+ >= 3 is not supported on Windows, so should not specify such options
+ when calling spawn or others.
+
+Thu Mar 3 18:59:04 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_slice_bang): raise error when the string is frozen.
+
+Thu Mar 3 14:25:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * strftime.c (STRFTIME): return 0 and ERANGE when precision is too
+ large. [ruby-dev:43284] fixes #4456
+
+Thu Mar 3 00:46:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c (uleb128): cast the value to unsigned long.
+
+ * addr2line.c (fill_lines): print error when lseek fails.
+
+Thu Mar 3 00:36:29 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rexml/encoding.rb (REXML::Encoding#encoding=): store @encoding
+ a String which means the name of the encoding.
+ this partially revert r29646.
+
+ * lib/rexml/document.rb: follow above.
+
+ * lib/rexml/output.rb: ditto.
+
+ * lib/rexml/parsers/baseparser.rb: ditto.
+
+ * lib/rexml/source.rb: ditto.
+
+ * lib/rexml/xmldecl.rb: ditto.
+
+Wed Mar 2 23:19:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_byte_substr): return nil for negative length.
+
+Wed Mar 2 21:15:00 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_pkey_dh.c: parenthesize macro arguments.
+
+Wed Mar 2 14:24:04 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit/parallel.rb: Fix name from `inclement_io` to
+ `increment_io`.
+
+Wed Mar 2 14:06:01 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_slice_bang): move treatments which is only needed
+ when the result is not nil.
+
+Wed Mar 2 14:02:29 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * test/testunit/test_parallel.rb(TestParallel#spawn_runner):
+ Fix outputing empty line in running test.
+
+ * test/testunit/tests_for_parallel/test_third.rb: Remove `sleep`
+
+Tue Mar 1 22:29:10 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_pkey.h: parenthesize macro arguments.
+
+Tue Mar 1 22:02:35 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit/parallel.rb: Fix number.
+
+Tue Mar 1 21:48:22 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit/parallel.rb: For Windows.
+
+ * test/testunit/test_parallel.rb(TestParallelWorker#test_quit_in_test):
+ Fix for above specification change.
+ * test/testunit/test_parallel.rb(TestParallel#spawn_runner):
+ Fix outputing empty line in running test.
+
+Tue Mar 1 20:51:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_system.rb (TestSystem#test_system_at):
+ remove tests for [bug#4396]. because we decided to reject this
+ ticket.
+
+Tue Mar 1 19:46:19 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/{test_date.rb,test_date_attr.rb}: [ruby-dev:43280]
+
+Tue Mar 1 18:40:38 2011 Ryan Davis <ryan@YPCMC09457>
+
+ * lib/rubygems*: Import rubygems 1.6.0 (released version @ 58d8a0b9)
+ * test/rubygems: Ditto
+
+Tue Mar 1 16:22:22 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c: revert r30987 because it causes some failures in
+ test-all, especially webrick.
+
+Tue Mar 1 15:59:53 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_byteslice): the resulted encoding should keep
+ original encoding. this also fixes the encoding when the result
+ shares internal string. [ruby-core:35376]
+
+Tue Mar 1 13:25:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (VpMemAlloc): CVE-2011-0188.
+ Fixes a bug reported by Drew Yao <ayao at apple.com>
+
+Tue Mar 1 10:34:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_byteslice): Add String#byteslice. [ruby-core:35376]
+
+Tue Mar 1 00:12:49 2011 Tajima Akio <artonx@yahoo.co.jp>
+
+ * include/ruby/win32.h: define WIN32 if neither _WIN64 nor WIN32
+ defined. it forces to use push/pop for pack(4) pragma.
+
+Mon Feb 28 23:52:13 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * test/testunit/test_rake_integration.rb (test_with_rake_runner):
+ use assert_in_out_err for suppress messages.
+
+Mon Feb 28 22:48:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * win32/win32.c (rb_w32_spawn): use shell if a commandline contain
+ double-quote character.
+ * win32/win32.c (is_internal_cmd): similar, use shell if a commandline
+ contain caret character.
+
+ * test/ruby/test_system.rb (TestSystem#test_system_at): fix
+ wrong test case. if system() invoke a command by using shell,
+ system() never return nil. Also, "" quotation must not appear
+ twice in a command line.
+
+Mon Feb 28 17:36:57 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_pkcs7.c: parenthesize macro arguments.
+
+Mon Feb 28 16:48:42 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_pkcs12.c: parenthesize macro arguments.
+
+Mon Feb 28 16:28:15 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (tr_trans): when the hash for multibyte repl is empty,
+ tr is inverse mode, and a character doesn't much the table, the
+ character should be replaced by last replacement. Bug #4449
+
+Mon Feb 28 16:38:56 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_ocsp.c: parenthesize macro arguments.
+
+Mon Feb 28 13:02:15 2011 Danial Pearce <github@tigris.id.au>
+
+ * lib/tempfile.rb: Fix example file paths in docs for tempfile.
+ https://github.com/ruby/ruby/pull/5
+
+Mon Feb 28 12:56:18 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * ext/openssl/ossl_cipher.c (ossl_cipher_init): typo fix.
+ https://github.com/ruby/ruby/pull/8
+
+Mon Feb 28 12:28:13 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/date/date_core.c (datetime_s_now): localtime() and localtime_r()
+ required time_t pointer as 1st parameter, and tv_sec member of struct
+ timeval is long.
+
+Mon Feb 28 11:57:40 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * test/testunit/test_parallel.rb: Temporally disable test on Windows.
+
+Mon Feb 28 07:28:35 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit.rb(Test::Unit::Runner#after_worker_quit):
+ method name more be natural English.
+
+ * lib/test/unit.rb(Test::Unit::Runner::Worker.launch):
+ IO.sync doesn't need. Should use "b" for mode.
+
+Sun Feb 27 21:59:37 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_system.rb (TestSystem#test_system_redirect_win):
+ add test for system().
+
+Sun Feb 27 18:00:09 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit.rb: Refactoring; Worker never use Hash for internal
+ storage.
+
+ * lib/test/unit.rb: Never use Kernel#spawn. Use IO.popen instead.
+
+Sun Feb 27 13:16:48 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_ns_spki.c: parenthesize macro arguments.
+
+Sat Feb 26 17:07:53 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb: [Feature #4257]
+
+ * ext/date/extconf.rb: new
+
+ * ext/date/date_core.c: new
+
+Sat Feb 26 16:10:23 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit.rb: --jobs-status won't puts over 2 lines.
+
+ * test/testunit/test_parallel.rb: Fix test for above.
+
+ * lib/test/*: refactoring.
+
+Sat Feb 26 07:10:05 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/scalar_scanner.rb: fix parsing timezone's whose
+ whose format is (+/-)hhmm. Thanks Goncalo Silva!
+
+ * test/psych/test_scalar_scanner.rb: test for bug.
+
+Thu Feb 24 23:02:55 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_hmac.c: parenthesize macro arguments.
+
+Thu Feb 24 22:53:10 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (love): for the birthday.
+
+Thu Feb 24 22:51:54 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (ruby_vm_destruct): run vm exit hooks after all objects are
+ destructed.
+
+Thu Feb 24 14:40:33 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * ChangeLog (vim): Modeline for vim
+
+Thu Feb 24 13:39:25 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * common.mk: Use $RUNRUBY for worker process.
+
+ * lib/test/unit.rb: Fix bug.
+
+ * lib/test/unit.rb: @options[:ruby](@opts[:ruby]) is now Array.
+
+ * test/testunit/parallel.rb: Fix for above.
+
+Thu Feb 24 10:05:55 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * test/testunit/tests_for_parallel/misc.rb: Fix bug in r30947.
+
+ * lib/test/unit.rb, lib/test/unit/assertions.rb: For this test.
+
+Wed Feb 23 23:07:38 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * test/testunit/test_parallel.rb, test/testunit/parallel/*:
+ Test for r30939.
+
+ * lib/test/unit.rb: For test.
+
+ * lib/test/parallel.rb: For test.
+
+ * lib/test/unit/testcase.rb: For test.
+
+Wed Feb 23 22:05:13 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_engine.c: parenthesize macro arguments.
+
+Tue Feb 22 23:15:17 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit.rb: Fix --ruby option doesn't effect.
+
+ * lib/test/unit.rb: Fix typo.
+
+Tue Feb 22 21:39:28 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_digest.c: parenthesize macro arguments.
+
+Tue Feb 22 14:34:26 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit.rb: Fix merging miss.
+
+Tue Feb 22 12:27:26 2011 Shota Fukumori <sorah@tubusu.net>
+
+ * lib/test/unit.rb: Add new options; --jobs,-j,--ruby,--jobs-status,
+ --no-retry.
+ [Feature #4415] [ruby-dev:43226],[ruby-dev:43222],[ruby-core:35294]
+
+ * lib/test/unit/parallel.rb: Used at test/unit --jobs(-j) option.
+
+ * test/csv/test_serialization.rb: test/unit parallel running ready.
+
+ * test/rake/test_file_task.rb: test/unit parallel running ready.
+
+Tue Feb 22 06:09:10 2011 Eric Hodel <drbrain@segment7.net>
+
+ * ext/syslog/syslog.c: Apply documentation patch from mathew murphy.
+ [Bug #4149]
+
+Tue Feb 22 03:09:10 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych.rb: increase Psych to 1.1.0 for help with
+ debugging.
+
+Tue Feb 22 03:04:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/streaming.rb: refactor streaming methods to a
+ module.
+ * ext/psych/lib/psych/stream.rb: extracted streaming specific methods
+ to a module.
+ * ext/psych/lib/psych/json/stream.rb: JSON stream inherits from
+ JSONTree and includes streaming methods.
+ * ext/psych/lib/psych/visitors/json_tree.rb: JSON does not support
+ object references, so remove object reference testing when building
+ JSON trees.
+
+Tue Feb 22 02:41:51 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb (accept): use Hash#key?
+ when looking up object references to err on the side of cache
+ misses.
+
+Mon Feb 21 10:58:39 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/json/yaml_events.rb: refactoring JSON event
+ handling methods to a module for reuse.
+ * ext/psych/lib/psych/json/tree_builder.rb: AST builder uses JSON
+ event methods.
+ * ext/psych/lib/psych/json/stream.rb: stream emitter uses JSON event
+ methods.
+
+Mon Feb 21 10:54:29 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/json/stream.rb: do not emit custom tags in maps
+ or sequences when emitting JSON.
+ * ext/psych/lib/psych/json/tree_builder.rb: do not emit custom tags in
+ sequences when emitting JSON.
+ * test/psych/json/test_stream.rb: tests for custom stream emits.
+ * test/psych/test_json_tree.rb: tests for JSON emits.
+
+Mon Feb 21 10:05:10 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/json/ruby_events.rb: DRY up ruby event handling
+ for JSON.
+ * ext/psych/lib/psych/visitors/json_tree.rb: use ruby events module
+ * ext/psych/lib/psych/json/stream.rb: ditto
+
+Mon Feb 21 10:01:01 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/json/stream.rb: fix JSON stream emits to use
+ double quotes during stream.
+ * test/psych/json/test_stream.rb: tests to reflect changes.
+
+Mon Feb 21 00:38:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_system.rb (TestSystem#test_system_at):
+ add testcase for bug4396.
+
+Sun Feb 20 19:59:32 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_cipher.c: parenthesize macro arguments.
+
+Sun Feb 20 16:26:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (exec_recursive): prevent temporary objects from GC.
+
+ * prevent temporary objects from GC, and should not use
+ RSTRING_PTR() for function calls since it evaluates the argument
+ a couple of times.
+
+Sun Feb 20 16:22:53 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_flock): use rb_thread_io_blocking_region for the
+ time being.
+
+Sun Feb 20 05:33:17 2011 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 2.0.2 r6207.
+ * test/minitest/*: ditto
+
+Sun Feb 20 02:14:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * signal.c (sig_trap): avoid pthread_sigmask(xx, &mask, &mask) usage
+ because FreeBSD don't permit it. If it's used, it behave as
+ pthread_sigmask(xx, NULL, &mask).
+
+ * signal.c (init_sigchld): ditto.
+
+Sun Feb 20 00:46:51 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_bn.c: parenthesize macro arguments.
+
+Sat Feb 19 22:37:42 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * vm_insnhelper.c (vm_check_if_namespace): guard temporary object
+ from GC.
+
+Sat Feb 19 06:36:27 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/test/unit.rb: partial revert of r30849. [ruby-core:32864]
+
+ * test/testunit/test_rake_integration.rb: adding an integration test
+ with the rake loader to prevent regressions.
+
+Fri Feb 18 19:31:31 2011 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/fileutils.rb (FileUtils::remove_entry_secure): there is a
+ race condition in the case where the given path is a directory,
+ and some other user can move that directory, and create a
+ symlink while this method is executing.
+ Reported by: Nicholas Jefferson <nicholas at pythonic.com.au>
+
+Fri Feb 18 00:28:39 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * compile.c (get_exception_sym2type): guard temporary object from GC.
+
+Thu Feb 17 23:54:29 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * iseq.c (prepare_iseq_build): initialize iseq_compile_data::err_info
+ with nil. this fix exception in rb_iseq_load().
+
+Thu Feb 17 22:32:35 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * test/ruby/test_marshal.rb (test_marshal_dump_extra_iv):
+ fix a typo of local variable. [Bug #3720] [ruby-dev:42083]
+
+Thu Feb 17 21:32:53 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl.h: parenthesize macro arguments.
+
+Wed Feb 16 20:37:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * eval_jump.c (rb_exec_end_proc): changed at_exit and END proc
+ evaluation order. [Bug #4400] [ruby-core:35237]
+ * eval_jump.c (rb_mark_end_proc): ditto.
+
+ * test/ruby/test_beginendblock.rb (TestBeginEndBlock#test_nested_at_exit):
+ added a test for nested at_exit.
+ * test/ruby/test_beginendblock.rb (TestBeginEndBlock#test_beginendblock):
+ changed the test to adopt new spec.
+
+Wed Feb 16 20:17:06 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/openssl_missing.h: parenthesize macro arguments.
+
+Tue Feb 15 21:37:45 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/gdbm/gdbm.c: parenthesize macro arguments.
+
+Tue Feb 15 20:34:53 2011 Tanaka Akira <akr@fsij.org>
+
+ * array.c (ary_join_1): fix array size.
+
+Tue Feb 15 19:43:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: fix and resubmit r30621. [ruby-dev:43203]
+
+Tue Feb 15 15:41:30 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * array.c (array_join): copy the encoding of the first element as
+ an initial encoding.
+
+ * array.c (array_join_0): ditto.
+
+ * array.c (array_join_1): ditto.
+
+ * array.c (inspect_ary): ditto.
+
+ * array.c (array_join_1): add an argument to check the appending is
+ first one or not.
+
+Tue Feb 15 15:40:53 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * hash.c (inspect_i): copy the encoding of the first key as
+ an initial encoding.
+
+Mon Feb 14 15:00:16 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * array.c (inspect_ary): don't taint the inspected result of a
+ recursive array.
+
+Tue Feb 15 15:43:29 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_compatible): change the rule for empty strings:
+ remove the special treatment of the US-ASCII encoded empty string.
+ Now Encoding.compatible? usually respect the encoding of the
+ receiver.
+
+Tue Feb 15 15:39:37 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_enc_cr_str_buf_cat): remove special treatment of
+ ASCII-8BIT receivers.
+
+ * string.c (str_gsub): set initial encoding of the buffer as the
+ same of the receiver. [ruby-core:35141]
+
+Tue Feb 15 09:49:33 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_system.rb (TestSystem#test_system_at): use findstr
+ command instead of find command, because the latter is confusing
+ another famous Unix command.
+
+Mon Feb 14 23:01:19 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * thread.c (rb_thread_io_blocking_region): reset th->waiting_fd
+ after blocking region, because remaining waiting_fd might
+ cause unnecessary IOError.
+
+Mon Feb 14 21:06:50 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * configure.in: revert r30621. That revision introduced mkmf test
+ failures and it turned out to be OK to revert. [ruby-dev:43203]
+
+Mon Feb 14 21:04:01 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/fiddle/conversions.h: parenthesize macro arguments.
+
+Mon Feb 14 18:41:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * win32/setup.mak (USE_RUBYGEMS): fixed r30835. It didn't work on
+ mswin32 port. If you changed win32/configure.bat, you should change
+ setup.mak too.
+
+Mon Feb 14 17:28:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_system.rb (TestSystem#test_system_at):
+ added test. [ruby-core:35218] (#4393)
+
+Mon Feb 14 13:15:35 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (is_internal_cmd): if the first char of prog is '@',
+ execute it via shell. [ruby-core:35218] (#4393)
+
+Mon Feb 14 10:33:45 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/test/unit.rb: revert r30863, because it causes too many noise.
+
+Mon Feb 14 07:34:55 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/curses/curses.c: parenthesize macro arguments.
+
+Sun Feb 13 19:41:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit::RequireFiles#non_options): skip
+ test suites failed to load instead of mere messages.
+
+Sun Feb 13 09:56:44 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/openssl/test_config.rb (OpenSSL#test_freeze): fix error
+ message assertion.
+
+ * test/io/nonblock/test_flush.rb (TestIONonblock#flush_test):
+ return true to finish the test.
+
+ * test/syck/test_string.rb (Syck::TestString#test_non_binary_string):
+ use assert_not instead of refute, unless required minitest
+ explicitly.
+
+ * test/test_prime.rb (TestPrime::sieve.Integer): ditto.
+
+ * test/xmlrpc/webrick_testing.rb (WEBrick_Testing#start_server):
+ catch IOError when server socket was closed.
+
+Sun Feb 13 07:39:51 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_inject): typo fixed. a patch from Gaku Ueda in
+ [ruby-core:35216].
+
+Sun Feb 13 00:48:47 2011 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (Date#===): [ruby-core:35127]
+
+Sun Feb 13 00:29:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit::Options#process_args): always
+ return options.
+
+ * lib/test/unit.rb (Test::Unit::RequireFiles#non_options): return
+ if any test case get loaded.
+
+ * lib/test/unit.rb (Test::Unit::AutoRunner#initialize): do not add
+ default directory if it is nil.
+
+ * lib/test/unit.rb (Test::Unit::AutoRunner#process_args): return
+ true if any test cases to run.
+
+Sat Feb 12 23:17:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (assert_include): add alias.
+
+Sat Feb 12 14:44:20 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_io_blocking_region): new function to run
+ blocking region with GIL released, for fd.
+
+ * thread.c (rb_thread_fd_close): implement. [ruby-core:35203]
+
+ * vm.c (th_init): rename from th_init2.
+
+Sat Feb 12 14:41:36 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit::AutoRunner#initialize): use
+ default_dir if no test case given.
+
+ * lib/test/unit.rb (Test::Unit::Runner): rename from Test::Unit::Mini.
+
+ * lib/test/unit.rb (Test::Unit::GlobOption#non_options): run tests
+ under base directory if no argument given.
+
+Sat Feb 12 08:03:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_settracefunc.rb (TestSetTraceFunc): ensure to use
+ method_added hook defined in Module.
+
+Sat Feb 12 01:04:02 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options): enable rubygems if --gem option is given.
+
+ * ruby.c (process_options): load rubygems if it is disabled but
+ --gem option is given.
+
+Fri Feb 11 23:27:50 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * ruby.c (proc_options): add --gem=enabled as an alias of
+ --enable=gems and --gem=disabled as an alias of --disable=gems.
+ Gem named "enabled" or "disabled" has already been reserved
+ legitimately for this purpose.
+
+Fri Feb 11 23:17:04 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/dl/cfunc.c: parenthesize macro arguments.
+
+Fri Feb 11 21:41:53 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bin/testrb, test/runner.rb, lib/test/unit.rb: improve backward
+ compatibility.
+
+Fri Feb 11 19:45:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_cleanup): use rb_ary_free to free internal object.
+
+ * gc.h (RUBY_FREE_UNLESS_NULL): get rid of double free.
+ [ruby-core:35192]
+
+Fri Feb 11 16:57:03 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_transcode.rb (test_from_cp50221): fix wrong
+ assertion and move back.
+
+Fri Feb 11 14:33:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (assert_no_match): alias for
+ backward compatibility.
+
+Fri Feb 11 12:06:48 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (add_gems, require_libraries, proc_options): add
+ --require and --gem options.
+
+Fri Feb 11 12:03:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rubygems): add --disable-rubygems option.
+
+Fri Feb 11 11:39:03 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/fake.rb.in (CROSS_COMPILING): get rid of NameError.
+
+Thu Feb 10 23:12:34 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/dl/dl.h: parenthesize macro arguments.
+
+Wed Feb 9 23:11:27 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/pty.c: parenthesize macro arguments.
+
+Tue Feb 8 11:47:11 2011 Loren Sands-Ramshaw <lorensr@gmail.com>
+
+ * array.c: documentation clarification in rotate, rotate!,
+ index, and rindex. [ruby-core:35144]
+
+Wed Feb 9 09:45:43 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/rdoc/test_rdoc_encoding.rb: remove unnecessary (and wrong)
+ platform-dependent hacks.
+
+Wed Feb 9 00:47:18 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/etc/etc.c: parenthesize macro arguments.
+
+Tue Feb 8 19:38:00 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-expr-beg): fix for invalid nest errors.
+
+Tue Feb 8 19:22:59 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in (AC_MSG_CHECKING): fixed typo. the patch is
+ created by Benoit Daloze. Thanks a lot. [Bug #4384][ruby-core:35148]
+
+Tue Feb 8 16:04:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_io_s_sysopen): use NUM2MODET() instead NUM2UINT().
+
+Tue Feb 8 15:59:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (rb_run_exec_options_err): use MODET2NUM() instead
+ LONG2NUM().
+
+Tue Feb 8 13:59:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: revert r30725. Now we have proper runtime fallback.
+ Therefore, no need compile time disabling. (see r30762).
+
+Tue Feb 8 01:00:21 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * process.c (proc_setgroups): add GC guard to prevent intermediate
+ variable from GC.
+
+Tue Feb 8 00:56:33 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-expr-beg, ruby-in-here-doc-p): tell
+ singleton class definitions from here documents.
+
+ * misc/ruby-mode.el (ruby-expr-beg, ruby-parse-partial): keyword
+ followed by colon is label.
+
+Mon Feb 7 22:56:16 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * lib/benchmark.rb (Benchmark#bmbm): use ensure clause instead of
+ Object#tap to restore STDOUT.sync.
+
+Mon Feb 7 22:34:20 2011 Tanaka Akira <akr@fsij.org>
+
+ * lib/net/http.rb (Net::HTTP#connect): support SNI (Server Name
+ Indication) for HTTPS. [ruby-dev:43164]
+ http://stackoverflow.com/questions/4685736/openssl-server-name-indication-support-in-ruby
+
+Mon Feb 7 16:05:32 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Upgrade to RDoc 3.5.3 Fixes [Bug #4376]
+
+Mon Feb 7 11:46:59 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk (rdoc): add --encoding=UTF-8; ruby's rdoc must be UTF-8.
+
+Mon Feb 7 10:21:50 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/rdoc/test_rdoc_options.rb (TestRDocOptions#test_check_files):
+ there is no easy way to create owner unreadable file on Windows.
+ So, skip the test.
+
+Sun Feb 6 13:48:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/json/lib/json/common.rb (JSON::MissingUnicodeSupport.iconv):
+ should not drop rest of the result. use Iconv.conv instead.
+
+Sun Feb 6 12:46:02 2011 Eric Hodel <drbrain@segment7.net>
+
+ * string.c (gsub): Ensure result encoding is the same as input
+ encoding. [Bug #4340].
+
+Sun Feb 6 12:18:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (words, qwords): dispatch array events. based on a
+ patch from Michael Edgar. [Bug #4365].
+
+Sun Feb 6 12:12:59 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/fileutils/fileasserts.rb (FileAssertions): separate module.
+
+Sun Feb 6 11:29:23 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/dbm/dbm.c: parenthesize macro arguments.
+
+Sat Feb 5 22:01:59 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ revert r30796. r30797 and r30798 are an alternative fix.
+ [ruby-dev:43174]
+
+Sat Feb 5 21:47:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (mlhs_basic): include mlhs_post for ripper. a patch
+ from Michael Edgar at [ruby-core:35078].
+
+Sat Feb 5 21:22:21 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (assert_block): move from
+ test/fileutils/fileasserts.rb.
+
+ * test/fileutils/fileasserts.rb (assert_block): pass arguments
+ as-is. [ruby-dev:43174]
+
+Sat Feb 5 16:47:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ msg can be passed nil. [Bug #4371] [ruby-dev:43174]
+
+Sat Feb 5 15:18:25 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Upgrade to RDoc 3.5.2
+
+Sat Feb 5 12:05:27 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/syck/rubyext.c (syck_node_init_copy): SyckNode is not
+ copiable. [ruby-core:35094]
+
+Sat Feb 5 11:48:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/ossl_cipher.c (ossl_cipher_alloc): leave data ptr
+ NULL.
+
+ * ext/openssl/ossl_cipher.c (ossl_cipher_new, ossl_cipher_initialize):
+ allocate internal structure. [ruby-core:35094]
+
+ * ext/openssl/ossl_cipher.c (ossl_cipher_copy): ditto.
+
+Sat Feb 5 11:29:10 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/json/parser/parser.h (GET_PARSER): raise TypeError.
+
+ * ext/json/parser/parser.rl (cParser_initialize): ditto.
+
+ * ext/json/parser/parser.h (GET_PARSER): check if initialized.
+ [ruby-core:35079]
+
+ * ext/json/parser/parser.rl (cParser_initialize): ditto.
+
+Sat Feb 5 10:09:31 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_get_expanded_load_path): always expand load paths.
+
+Sat Feb 5 09:38:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (encoded_dup): extract.
+
+Sat Feb 5 03:37:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/fileutils.rb (FileUtils::LowMethods): make low level methods
+ in NoWrite and DryRun to do nothing. [ruby-dev:43129]
+
+ * test/fileutils/fileasserts.rb: add message arguments.
+
+ * test/fileutils/fileasserts.rb (Test::Unit::Assertions#assert_block):
+ show the given message.
+
+Sat Feb 5 02:09:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (lex_getline, parser_set_encode): set encoding of lines
+ in SCRIPT_LINES__ as source encoding. [ruby-dev:43168]
+
+Sat Feb 5 02:08:37 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (ruby_thread_data_type): add prefix.
+
+Sat Feb 5 00:59:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * vm_core.h (GetThreadPtr): use TypedData_Get_Struct() instead
+ CoreDataFromValue() because we need type check. Otherwise,
+ type mismatch can cause segmentation fault crash.
+ [ruby-core:35086] [Ruby 1.9-Bug#4367]
+
+ * vm.c (thread_data_type): remove static.
+
+Fri Feb 4 19:14:27 2011 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/utf8_mac.trans: parenthesize macro arguments.
+
+Fri Feb 4 12:11:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * string.c (str_utf8_nth): fixed a condition of optimized lead
+ byte counting. [Bug #4366][ruby-dev:43170]
+
+Fri Feb 4 01:50:13 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * string.c (count_utf8_lead_bytes_with_word): wrote function
+ comments.
+
+Fri Feb 4 00:14:55 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/zlib/zlib.c (gzfile_reader_get_unused): no need to dup
+ before rb_str_resurrect.
+
+Thu Feb 3 20:04:44 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/curses/curses.c (CHECK): unused macro removed.
+
+Thu Feb 3 18:33:26 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/zlib/zlib.c (gzfile_reader_get_unused): use rb_str_resurrect
+ because gz->z.input is hidden string. [ruby-core:35057]
+
+Thu Feb 3 16:34:10 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/shift_jis.c (code_to_mbc): cast as int from the subtraction of
+ pointers.
+
+ * enc/utf_16le.c (utf16le_mbc_enc_len): use ptrdiff_t.
+
+ * enc/utf_32be.c (utf32be_left_adjust_char_head): ditto.
+
+ * enc/utf_32le.c (utf32le_left_adjust_char_head): ditto.
+
+Thu Feb 3 16:31:43 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/missing.h: don't use HAVE_STDDEF_H because it never
+ defined by configure though configure.bat defines it.
+
+ * include/ruby/ruby.h: move include stddef.h to defines.h
+
+ * include/ruby/defines.h: ditto.
+
+Wed Feb 2 20:25:04 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/encoding.h (rb_enc_step_back): cast 4th argument 'n'
+ as int because Ruby usually treats length value as long but
+ onigenc_step_back's 4th argument is int.
+
+Thu Feb 3 07:20:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: use Regexp::NOENCODING
+ rather than magic number.
+
+ * ext/syck/lib/syck/rubytypes.rb: ditto
+
+Thu Feb 3 07:16:11 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * re.c (Init_Regexp): added a constant for ARG_ENCODING_NONE
+ [ruby-core:35054]
+
+ * test/ruby/test_regexp.rb: corresponding test.
+
+Thu Feb 3 07:02:16 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: ARG_ENCODING_NONE regular
+ expressions can round trip. [ruby-core:34969]
+
+ * test/psych/test_yaml.rb: test for ARG_ENCODING_NONE regex
+
+ * ext/sych/lib/syck/rubytypes.rb: ARG_ENCODING_NONE regular
+ expressions can round trip.
+
+ * test/syck/test_yaml.rb: test for ARG_ENCODING_NONE regex
+
+Wed Feb 2 17:09:22 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_io_fdatasync): Use fsync(2) if the underlying
+ operating system does not support fdatasync(2).
+
+Wed Feb 2 14:51:08 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/markup/to_tt_only.rb: commit miss
+ * test/rdoc/test_rdoc_markup_to_tt_only.rb: ditto
+ * test/rdoc/test_rdoc_single_class.rb: ditto
+
+Wed Feb 2 09:27:53 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Upgrade to RDoc 3.5.1
+
+Wed Feb 2 00:30:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/st.h (st_table): Added comment why we need __extension__.
+
+Tue Feb 1 20:45:44 2011 Tanaka Akira <akr@fsij.org>
+
+ * enc/encdb.c: parenthesize macro arguments.
+
+Tue Feb 1 15:12:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_require.rb (TestRequire#test_require_with_unc):
+ use ``127.0.0.1'' instead of ``localhost'' as host name, because
+ XP or earlier cannot resolv it as NBT hostname.
+
+Tue Feb 1 13:20:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/benchmark/test_benchmark.rb (#capture_bench_output):
+ Added explicit sleep. Windows have imprecise time support.
+ Thus Tms.new.Add!{} may be or may be not equal 0. The
+ test failure started since r30747.
+
+Tue Feb 1 11:03:47 2011 Ryan Davis <ryan@lust.local>
+
+ * lib/rubygems*: Import rubygems 1.5.0 (released version @ 1fb59d0)
+ * test/rubygems: Ditto
+
+Tue Feb 1 08:01:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/console/console.c (console_set_winsize): new method to set
+ console size. [EXPERIMENTAL]
+
+ * ext/io/console/console.c (console_winsize): use GetWriteFD.
+
+Tue Feb 1 02:28:14 2011 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * include/ruby/win32.h, win32/win32.c: add rb_w32_inet_ntop.
+ inet_ntop's minimum supported client is Vista.
+
+Tue Feb 1 00:10:30 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/benchmark.rb: fix benchmark to work with current ruby.
+ patched by Benoit Daloze [ruby-core:33846] [ruby-dev:43143]
+ merged from https://github.com/eregon/ruby/commits/benchmark
+
+ * lib/benchmark (Report#width): update documentation
+ * lib/benchmark: document the return value of #benchmark and the
+ :list attribute in Report
+ * lib/benchmark (Tms#format): rename variables, use String#%
+ instead of Kernel.format
+ * lib/benchmark: remove undocumented Benchmark::times (an alias
+ of Process::times used twice)
+ * lib/benchmark (#benchmark): use label_width for the caption
+ * lib/benchmark (Tms#initialize): rename variables
+ * lib/benchmark: allow title to not be a String and call #to_s
+ * lib/benchmark (Benchmark#bm): return an Array of the times with
+ the labels
+ * lib/benchmark: correct output for Benchmark#bmbm
+ (remove the extra space)
+ * lib/benchmark: add a few tests for Benchmark::Tms output
+ * lib/benchmark: improve style (enumerators, ljust, unused vars)
+ * lib/benchmark: add spec about output and return value
+ * lib/benchmark: improve basic style and consistency
+ no parenthesis for print and use interpolation instead of printf
+ * lib/benchmark: remove unnecessary conversions and variables
+ * lib/benchmark: correct indentation
+ * lib/benchmark: rename the FMTSTR constant and variable to FORMAT
+ * lib/benchmark: remove useless exception
+
+ * test/benchmark: remove unused variable warnings
+
+Mon Jan 31 23:27:23 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * node.c (add_id): remove duplicated rb_id2str() call.
+
+Sun Jan 30 17:19:46 2011 Tanaka Akira <akr@fsij.org>
+
+ * missing/langinfo.c: parenthesize macro arguments.
+
+Mon Jan 31 21:57:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: revert r30698.
+
+Mon Jan 31 21:32:44 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * thread.c (thread_start_func_2): check deadlock condition before
+ release thread stack. fix memory violation when deadlock detected.
+ reported by Max Aller. [Bug #4009] [ruby-core:32982]
+
+Mon Jan 31 14:45:47 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/irb/locale.rb (IRB::Locale::#search_file):
+ Gem might be undefined if --disable-gems. [ruby-core:34990]
+
+Mon Jan 31 12:26:14 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c: suppressed shorten-64-to-32 warnings.
+ * regcomp.c: ditto.
+ * regexec.c: ditto.
+ * regint.h: ditto.
+ * regparse.c: ditto.
+ * regparse.h: ditto.
+ * time.c: ditto.
+ * variable.c: ditto.
+
+Mon Jan 31 04:45:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * array.c (rb_ary_uniq_bang): call ARY_SET_LEN(ary, 0) before
+ ary_resize_capa because ary_resize_capa expects resized length is
+ smaller than current array length. call rb_ary_unshare before
+ ary_resize_capa because ary_resize_capa lost the reference to
+ original shared array. [ruby-core:34997]
+
+Sun Jan 30 17:19:46 2011 Tanaka Akira <akr@fsij.org>
+
+ * missing/crypt.c: parenthesize macro arguments.
+
+Sun Jan 30 16:40:27 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/rubygems/test_gem_security.rb (TestGemSecurity): valid only
+ if OpenSSL is available.
+
+ * test/dl/test_dl2.rb (TestDL#test_sin): math functions do not
+ work on x86_64 due to the design of DL2.
+
+ * test/dl/test_func.rb (DL::TestFunc#test_{sinf,sin): ditto.
+
+Sun Jan 30 16:09:22 2011 Tanaka Akira <akr@fsij.org>
+
+ * strftime.c (rb_strftime_with_timespec): %G produces 4 digits.
+
+Sun Jan 30 15:13:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/emacs_mule.c (emacsmule_islead): 7bit range is also leading
+ byte.
+
+Sun Jan 30 13:03:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_hash_fetch_m): use useful message for longer key, not a
+ nonsense id value.
+
+ * string.c (rb_str_ellipsize): new function to ellipsize a string.
+
+ * include/ruby/encoding.h (rb_enc_step_back): new function to step
+ back n characters.
+
+Sun Jan 30 12:53:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/emacs_mule.c (emacsmule_islead): fix inverse condition.
+
+Sun Jan 30 09:37:25 2011 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * io.c (struct argf): char behaves like an unsigned char
+ by default on AIX.
+
+Sun Jan 30 08:02:55 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: Mac OS X wrongly reports it has fdatasync(3).
+
+Sun Jan 30 03:29:47 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl_bn.c (GetBNPtr): add missing nil case.
+ patched by Martin Bosslet. [ruby-core:34987]
+
+Sun Jan 30 01:02:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * include/ruby/ruby.h: Added NUM2MODET() and MODET2NUM() default
+ definition.
+ Because r30686 introduced win32 build failure.
+
+Sat Jan 29 22:16:26 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * array.c (rb_ary_join): [].join.encoding must be US-ASCII.
+ [ruby-list:47790]
+
+Sat Jan 29 20:22:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * benchmark/driver.rb (BenchmarkDriver#measure): Show command line
+ when abnormal exiting occur.
+
+Sat Jan 29 10:53:16 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_insnhelper.c (vm_get_ev_const): no-scope reference to toplevel
+ private constant has been prohibited incorrectly.
+
+ * test/ruby/test_module.rb (test_toplevel_private_constant): add a
+ test for above.
+
+Sat Jan 29 08:43:23 2011 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/rubygems*: Import rubygems 1.5.0 (release candidate @ 09893d9)
+ * test/rubygems: Ditto
+
+Sat Jan 29 02:02:37 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * variable.c (rb_mod_const_of, sv_i): Module#constant should exclude
+ private constants. see [ruby-core:32912].
+
+ * test/ruby/test_module.rb (test_constants_with_private_constant): add
+ a test for above.
+
+Sat Jan 29 01:36:41 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * variable.c (rb_const_set): const_set should preserve constant
+ visibility. see [ruby-core:32912].
+
+ * test/ruby/test_module.rb: add a test for above.
+
+Sat Jan 29 01:24:57 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (NODE_CLASS, NODE_MODULE), insns.def (defineclass): raise
+ an exception when "class Foo::Bar" is evaluated and Foo::Bar is
+ private. To implement this, define_type of "defineclass" is added
+ so that the instruction can distinguish whether the class definition
+ is scoped (class Foo::Bar) or not (class Bar).
+
+ * test/ruby/test_class.rb (test_redefine_private_class),
+ test/ruby/test_module.rb
+ (test_define_module_under_private_constant): add tests for above.
+
+Sat Jan 29 01:19:17 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * constant.h, variable.c: to ensure compatibility, rb_const_get_* must
+ not raise an exception even when the constant is private. Instead,
+ rb_public_const_get_* and rb_public_const_defined_* are introduced,
+ which raise an exception when the referring constant is private.
+ see [ruby-core:32912].
+
+ * vm_insnhelper.c (vm_get_ev_const): use rb_public_const_get_* instead
+ of rb_const_get_* to follow the constant visibility when user code
+ refers a constant.
+
+ * test/ruby/test_marshal.rb (test_marshal_private_class): add a test.
+ This test had failed because of incompatibility of rb_const_get.
+
+Sat Jan 29 00:30:44 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * variable.c (set_const_visibility): fix typo. a patch from Tomoyuki
+ Chikanaga in [ruby-core:32919].
+
+Fri Jan 28 23:20:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/gdbm/test_gdbm.rb (TestGDBM#test_s_open_no_create,
+ TestGDBM2#test_writer_open_notexist): We only need to skip libgdbm
+ 1.8.0, not all 1.8.x. 1.8.1 or later don't have GDBM_WRITER sickness.
+
+Fri Jan 28 21:56:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/dbm/extconf.rb: Added new header places for Fedora13.
+
+Fri Jan 28 21:49:30 2011 Tanaka Akira <akr@fsij.org>
+
+ * ext/zlib/zlib.c: parenthesize macro arguments.
+
+Fri Jan 28 17:47:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/gdbm/test_gdbm.rb (TestGDBM2#test_writer_open_notexist):
+ gdbm 1.8.x changed GDBM::WRITER behavior. Thus our testcase need
+ to be changed too.
+
+Fri Jan 28 17:33:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/gdbm/test_gdbm.rb (TestGDBM#test_s_open_no_create): skip
+ the test if gdbm version is 1.8.x.
+
+Fri Jan 28 16:30:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_require.rb (TestRequire#test_require_too_long_filename):
+ Added -w option because too long path error don't output a message
+ by default since r30660. [Bug #4336] [ruby-dev:43134]
+
+Fri Jan 28 16:19:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_require.rb (TestRequire#test_require_path_home_{1,2}):
+ Added -w option because too long path error don't output a message
+ by default since r30660. [Bug #4336] [ruby-dev:43134]
+
+Fri Jan 28 16:04:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_require.rb (TestRequire#test_require_path_home_{1,2,3}):
+ split from test_require_path_home.
+
+Fri Jan 28 13:04:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in (--with-valgrind): Fixed r29683. Now this option
+ is really default on.
+
+Fri Jan 28 12:05:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: Add #include<sys/stat.h> when struct stat is
+ tested. Otherwise, incomplete type dereference error will occur.
+
+Fri Jan 28 11:53:19 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: redundant variable names made strange conftest
+ error. Fixed it.
+
+Fri Jan 28 11:47:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_process.rb (TestProcess#test_too_long_path{,2}):
+ should handle Errno::E2BIG, because this test checks crash of ruby,
+ not the error type system.
+
+Fri Jan 28 11:23:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_io_open): Use NUM2MODET() instead NUM2UINT().
+ * io.c (rb_scan_open_args): ditto.
+
+Fri Jan 28 10:58:20 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: Added mode_t type checking.
+ * process.c (rb_exec_arg_addopt): Use NUM2MODET() instead
+ NUM2LONG because clang makes compile error by this narrowing
+ conversion.
+ * process.c (rb_run_exec_options_err): ditto.
+
+Fri Jan 28 02:37:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * re.c (rb_reg_raise): add GC guard to prevent intermediate
+ variable from GC.
+
+Fri Jan 28 02:35:41 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * hash.c (rb_hash_fetch_m): add GC guard to prevent intermediate
+ variable from GC.
+
+Fri Jan 28 01:33:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_process.rb (TestProcess#test_too_long_path)
+ TestProcess#test_too_long_path): Reduced string size from 100MB
+ to 10MB. 100MB may cause no memory error. It isn't intended.
+
+Fri Jan 28 01:27:42 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_process.rb (TestProcess#test_too_long_path2):
+ Factored out from test_too_long_path. A test should only do
+ one test.
+
+Thu Jan 27 23:29:36 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * st.c (st_foreach): check if unpacked.
+
+Thu Jan 27 23:14:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-mode-map): remove deprecated binding.
+ use M-; instead.
+
+Thu Jan 27 21:58:32 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * bignum.c (rb_str_to_inum): get rid of too huge alloca().
+
+Thu Jan 27 21:43:29 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * object.c (rb_str_to_dbl): rewrite again. use ALLOCV instead
+ rb_str_tmp_new().
+
+Thu Jan 27 21:41:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * win32/win32.c: get rid of STRNDUPA(). It's dangerous API.
+
+Thu Jan 27 21:31:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * win32/win32.c (rb_w32_aspawn): get rid of too huge alloca().
+ [Bug #4330] [ruby-core:34898]
+
+Thu Jan 27 20:30:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * win32/win32.c (rb_w32_spawn): get rid of too huge alloca().
+
+Thu Jan 27 18:49:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * win32/win32.c (open_dir_handle): get rid of too huge alloca().
+
+Thu Jan 27 18:34:58 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * file.c (w32_io_info): get rid of too huge alloca().
+ [Bug #4313] [ruby-core:34830]
+
+Thu Jan 27 18:19:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * win32/win32.c (wstati64): get rid of too huge alloca().
+ [Bug #4316] [ruby-core:34834]
+
+Thu Jan 27 15:11:52 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): get rid of too huge
+ alloca(). this is the real fix of [ruby-core:34833].
+
+Thu Jan 27 12:46:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (ALLOC_ARGV_WITH_STR): fix void pointer arithmetic.
+
+Thu Jan 27 08:41:40 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (proc_exec_v, rb_proc_exec_n, rb_proc_exec)
+ (proc_spawn_n, proc_spawn): get rid of too huge alloca().
+ [ruby-core:34827], [ruby-core:34833]
+
+Thu Jan 27 08:32:17 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (ALLOCV): new API for exception-safe
+ temporary buffer. [ruby-core:34844]
+
+ * string.c (rb_alloc_tmp_buffer, rb_free_tmp_buffer):
+ implementation of the API.
+
+Thu Jan 27 08:22:49 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln_find.c (dln_find_1): use rb_warning and return immediately
+ if fname is longer than buffer.
+
+Wed Jan 26 22:57:30 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * class.c (clone_method): add GC guard to prevent intermediate
+ variable from GC. [Bug #4321] [ruby-dev:43107]
+
+Wed Jan 26 22:45:16 2011 Tanaka Akira <akr@fsij.org>
+
+ * template/id.h.tmpl: parenthesize macro arguments.
+
+Wed Jan 26 22:28:49 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
+
+ * vm_eval.c (rb_throw_obj): add GC guard to prevent intermediate
+ variable from GC. [Bug #4322] [ruby-dev:43108]
+
+Wed Jan 26 17:08:59 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_asn1.c (ossl_asn1_decode0): OpenSSL::ASN1.decode
+ should reject indefinite length primitive encodings as that is
+ illegal. Patch by Martin Bosslet. See #4324.
+
+Wed Jan 26 10:36:28 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (=~): documentation fix; the return value is nil when
+ it doesn't match. patched by Andrei Kulakov [ruby-core:34562]
+
+Tue Jan 25 08:41:58 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln_find.c (dln_find_1): omit too long pathnames.
+
+Tue Jan 25 08:28:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_resize): get rid of out-of-bound access.
+
+Tue Jan 25 07:48:22 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_thread.rb: remove unused variables.
+
+Tue Jan 25 07:45:44 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_thread.rb (TestThread#test_condvar_nolock_2): get
+ rid of method redefined.
+
+Tue Jan 25 07:00:52 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_string_value_cstr): rb_str_modify can change
+ RSTRING_PTR.
+
+Tue Jan 25 03:24:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ruby/test_thread.rb: Added various ConditionVariable tests.
+
+Mon Jan 24 22:26:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * object.c (rb_str_to_dbl): Fix again. use rb_str_tmp_new()
+ instead ALLOC_N.
+
+Mon Jan 24 21:50:48 2011 Tanaka Akira <akr@fsij.org>
+
+ * vm_insnhelper.h: parenthesize macro arguments.
+
+Mon Jan 24 21:28:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * object.c (rb_str_to_dbl): use ALLOC_N instead ALLOCA_N because
+ ALLOC_N may cause stack overflow.
+
+Mon Jan 24 21:04:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_invalid_str): prevent intermediate variable from GC.
+ [ruby-core:34820]
+
+Sun Jan 23 23:01:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/io/console/test_io_console.rb: Don't run test if the system
+ don't support io/console.
+
+Sun Jan 23 22:17:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/fiddle/test_fiddle.rb: Don't run test if the system don't support
+ fiddle.
+
+ * test/fiddle/test_function.rb: ditto.
+ * test/fiddle/test_closure.rb: ditto.
+
+Sun Jan 23 11:39:18 2011 Tanaka Akira <akr@fsij.org>
+
+ * vm_exec.h: parenthesize macro arguments.
+
+Sun Jan 23 10:33:02 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/fake.rb.in (ruby): suppress warnings.
+
+Sun Jan 23 08:00:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_nth_len, str_utf8_nth): return the rest length together.
+
+ * string.c (rb_str_substr): get rid of measure the length always
+ to improve performance for huge string. [ruby-core:34648]
+
+Sun Jan 23 00:40:10 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/test_syslog.rb: Fix to make a lot of test failure if
+ the platform doesn't support syslog.
+
+Sat Jan 22 11:49:55 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: fixing merge key support
+ when multiple merge keys are specified.
+
+ * test/psych/test_merge_keys.rb: tests for multi-merge key support
+
+Sat Jan 22 11:33:04 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: merge keys are actually
+ part of YAML 1.1, so they should be supported. Remove warning and
+ merge keys to parent. [ruby-core:34679]
+
+ * test/psych/test_merge_keys.rb: test for merge keys
+
+Sat Jan 22 10:25:19 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/parser.c (parse): add the file name to the exception when
+ parse errors occur.
+
+ * test/psych/test_parser.rb: test for parse error file name
+
+Sat Jan 22 10:12:30 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/parser.c (parse): fix assertion error when reusing a
+ parser after an exception has been raised
+
+ * test/psych/test_parser.rb: test for assertion error
+
+Sat Jan 22 04:09:22 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/nodes/node.rb: Make Psych::Nodes::Node
+ enumerable.
+
+ * ext/psych/lib/psych/visitors/depth_first.rb: Add a depth-first
+ visitor to enumerate over a YAML AST in a depth-first fashion
+
+ * test/psych/nodes/test_enumerable.rb: test for enumerating nodes
+
+ * test/psych/visitors/test_depth_first.rb: test for depth-first
+ visitor
+
+Sat Jan 22 00:53:42 2011 Tanaka Akira <akr@fsij.org>
+
+ * vm_core.h: parenthesize macro arguments.
+
+Fri Jan 21 18:15:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: should not use -Werror=* flags while conftests.
+
+Fri Jan 21 09:17:00 2011 Luis Lavena <luislavena@gmail.com>
+
+ * configure.in: Fix incorrectly detected x86_64-w64-mingw32 due
+ canonalization of target_os. Bug #3889 [ruby-core:32634]
+
+Thu Jan 20 23:44:00 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: Fix rb_cv_va_args_macro was broken. We are using
+ -Werror=implicit-function-declaration compile option. therefore
+ we need a function declaration explicitly.
+
+Thu Jan 20 23:58:02 2011 Tanaka Akira <akr@fsij.org>
+
+ * node.h: parenthesize macro arguments.
+
+Thu Jan 20 23:25:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: Add '#include <stdlib.h>' to
+ rb_cv_localtime_overflow test too. It's reported by Tomoyuki
+ Chikanaga. Thanks.
+
+Thu Jan 20 16:11:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * README.EXT, README.EXT.ja: You shouldn't choose ``conftest.c'' as a
+ name of a source file.
+
+Thu Jan 20 12:15:44 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: Add stdlib.h inclusion into rb_cv_negative_time_t
+ test because it's required for exit(3). The patch is
+ created by Tomoyuki Chikanaga. [Bug #4287] [ruby-dev:43060]
+
+Thu Jan 20 11:39:41 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/webrick/utils.rb (TestWEBrick::RubyBin): test CGI does not need
+ to load rubygems. if it activated, ruby raises LoadError about
+ rbconfig.rb.
+
+Thu Jan 20 09:19:42 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/json_tree.rb: Fix JSON emit for
+ DateTime and Time classes.
+
+ * test/psych/test_json_tree.rb: test for JSON emit
+
+Thu Jan 20 08:02:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/coder.rb (represent_object): arbitrary objects
+ may be passed to the Psych::Coder object.
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: support for visiting
+ arbitrary objects set on the coder.
+
+ * test/psych/test_coder.rb: supporting test case.
+
+Thu Jan 20 06:03:17 2011 Tanaka Akira <akr@fsij.org>
+
+ * method.h: parenthesize macro arguments.
+
+Wed Jan 19 13:16:05 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/commands/sources_command.rb: Finish removing code,
+ (fixes sources command test).
+
+Wed Jan 19 13:04:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * proc.c (proc_call): Add gc guard to avoid segfault. The fix
+ is created by Tomoyuki Chikanaga. [Bug #4238][ruby-dev:42963]
+
+Wed Jan 19 12:31:28 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems.rb: Since gem_prelude requires rubygems, enable
+ custom_require always.
+
+Wed Jan 19 12:08:08 2011 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/commands/dependency_command.rb: Remove require of
+ deleted file.
+ * lib/rubygems/commands/fetch_command.rb: ditto
+ * lib/rubygems/commands/setup_command.rb: ditto
+ * lib/rubygems/commands/sources_command.rb: ditto
+ * lib/rubygems/commands/specification_command.rb: ditto
+
+Wed Jan 19 08:13:59 2011 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/rubygems*: Import rubygems 1.5.0 (release candidate)
+ * test/rubygems: Ditto
+
+Tue Jan 18 23:31:01 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y: avoid NULL reference. [ruby-dev:43067]
+
+Wed Jan 19 02:54:04 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vsnprintf.c (cvt): set first byte of buf to NUL for the case when
+ no bytes are written to the buf. [ruby-dev:43062]
+
+Tue Jan 18 23:04:51 2011 Tanaka Akira <akr@fsij.org>
+
+ * gc.h: parenthesize macro arguments.
+
+Tue Jan 18 18:31:14 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
+
+ * lib/irb/completion.rb: Irb tab completion support for XX::method
+ forms.
+
+Tue Jan 18 15:05:55 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/logger.rb: added RDoc document for logging message escape
+ by Hal Brodigan. See #3869
+
+Tue Jan 18 07:53:52 2011 Tanaka Akira <akr@fsij.org>
+
+ * eval_intern.h: parenthesize macro arguments.
+
+Tue Jan 18 04:42:44 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/parser.rb (Mark): Adding a class to wrap
+ marker information
+
+ * ext/psych/parser.c (mark): Add a method to return the mark object
+ for the parser
+
+ * test/psych/test_parser.rb: tests for the Mark class.
+
+Tue Jan 18 02:46:55 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/json_tree.rb (visit_String): JSON
+ strings should be dumped with double quotes. [ruby-core:34186]
+
+ * test/psych/test_json_tree.rb: test for double quotes
+
+Mon Jan 17 23:36:33 2011 Tanaka Akira <akr@fsij.org>
+
+ * array.c (rb_ary_times): less MEMCPY calls.
+
+Mon Jan 17 22:54:33 2011 Tanaka Akira <akr@fsij.org>
+
+ * debug.h: parenthesize macro arguments.
+
+Mon Jan 17 21:40:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): revert r30549.
+
+Sun Jan 16 20:55:45 2011 Tanaka Akira <akr@fsij.org>
+
+ * vsnprintf.c: parenthesize macro arguments.
+
+Sat Jan 15 11:57:30 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (warnflags): add -Werror=implicit-function-declaration
+ if available.
+
+ * lib/mkmf.rb (init_mkmf): ignore warnings in mkmf tests.
+
+ * test/mkmf/base.rb (setup, teardown): restore config values.
+
+ * test/mkmf/test_flags.rb: split from test_find_executable.rb.
+
+Sat Jan 15 10:04:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): autoload rubygems.
+
+ * tool/compile_prelude.rb (Prelude#initialize): ignore empty
+ preludes.
+
+ * ruby.c (ruby_init_prelude): get rid of global namespace
+ pollution.
+
+Sat Jan 15 09:42:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/io.h: missing prototypes.
+
+Fri Jan 14 23:25:55 2011 Tanaka Akira <akr@fsij.org>
+
+ * vm_method.c: parenthesize macro arguments.
+
+Fri Jan 14 15:32:29 2011 Shugo Maeda <shugo@ruby-lang.org>
+
+ * test/net/imap/test_imap.rb: call neither logout nor disconnect
+ unless connected. patch by Kazuhiro NISHIYAMA. [ruby-dev:42860]
+
+Fri Jan 14 14:56:57 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/imap.rb: use bytesize for binary strings.
+ patched by Yoshimasa Niwa. [ruby-core:34222]
+
+Fri Jan 14 14:01:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * pack.c (pack_unpack): the resulted string of unpack('M') must have
+ ASCII-8BIT encoding (and ENC_CODERANGE_VALID). [ruby-core:34482]
+
+Fri Jan 14 13:38:58 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/zlib/zlib.c (gzfile_check_footer): ISIZE (Input SIZE) in
+ gzip's header is the size of uncompressed input data modulo 2^32.
+ [ruby-core:34481] http://www.ietf.org/rfc/rfc1952.txt
+
+Fri Jan 14 11:36:25 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * configure.in, win32/Makefile.sub (RUNRUBY): require path should
+ include "." because rbconfig.rb is there.
+
+Fri Jan 14 10:40:11 2011 Ryan Davis <ryan@lust.local>
+
+ * gem_prelude.rb: Just require rubygems. Fixes rubygems 1.4.
+ * lib/rubygems.rb: removed all Gem::Quickloader code.
+ * ruby.c: renamed ruby_init_gems to ruby_init_prelude. Set
+ $disable_rubygems since there is no fine grained mechanism to
+ skip parts of the prelude. Open to suggestions on how to do this
+ better.
+ * test/*.rb: Load path isn't set up correctly, so add
+ --disable-gems as needed to failing tests that are explicitly
+ testing stderr w/ ==.
+
+Fri Jan 14 07:30:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_next_argv): go advance when the next file cannot be
+ read. [ruby-core:34446]
+
+Thu Jan 13 20:49:19 2011 Tanaka Akira <akr@fsij.org>
+
+ * vm_insnhelper.c: parenthesize macro arguments.
+
+Thu Jan 13 13:21:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * vm_dump.c: delete dashes to make lines 80 chars, Patched by
+ Shota Fukumori (sora_h). [Bug #4275] [ruby-dev:43021]
+
+Thu Jan 13 13:21:00 2011 Kenta Murata <mrkn@mrkn.jp>
+
+ * vm_dump.c: fix misspelling of CrashReporter, Patched by Shota
+ Fukumori (sora_h). [Bug #4275] [ruby-dev:43021]
+
+Thu Jan 13 06:27:29 2011 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * error.c: Exception#to_s should actually call to_s.
+
+Thu Jan 13 00:32:54 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c (get_nth_dirname): decrement the directory index
+ because the index specifies the index of given included_directories
+ which is separated by NUL and its index is begun from 1.
+ Note that 0 specifies the current directory of the compilation.
+ see also http://www.dwarfstd.org/doc/dwarf-2.0.0.pdf
+
+Thu Jan 13 00:06:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_f_syscall): Add warning messages. [ruby-core:34062]
+
+Thu Jan 13 00:00:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_f_syscall): Some syscall return unsigned or pointer value.
+ Therefore we should only check the result is -1 or not.
+ [ruby-core:34062]
+
+Wed Jan 12 23:55:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_f_syscall): Add 64bit Linux support. Some syscall takes
+ long type arguments.
+
+Wed Jan 12 19:37:10 2011 Tanaka Akira <akr@fsij.org>
+
+ * vm_dump.c: parenthesize macro arguments.
+
+Wed Jan 12 19:28:23 2011 Tanaka Akira <akr@fsij.org>
+
+ * vm.c (thread_free): reset ruby_current_thread if it points the
+ thread to free.
+ * gc.c (slot_sweep): don't call RUBY_VM_SET_FINALIZER_INTERRUPT if
+ there is no current thread.
+ [ruby-dev:43000]
+
+Wed Jan 12 19:09:29 2011 Tanaka Akira <akr@fsij.org>
+
+ * enum.c (sort_by_i): reenter check more strictly.
+ (sort_by_cmp): ditto.
+ [ruby-dev:43003] reported by Usaku NAKAMURA.
+
+Wed Jan 12 16:25:12 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/net/http.rb (Net::HTTP#connect): makes it timeout during
+ SSL handshake too. [ruby-core:34203]
+ Patch by Marc Slemko.
+
+ * test/net/http/test_http.rb (TestNetHTTP_v1_2#test_timeout_during_HTTP_session):
+ test for [ruby-core:34203]
+
+ * test/net/http/test_https.rb (TestNetHTTPS#test_timeout_during_SSL_handshake):
+ ditto.
+
+Wed Jan 12 16:24:53 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * ext/readline/extconf.rb: new checks for RL_PROMPT_START_IGNORE
+ and RL_PROMPT_END_IGNORE. [ruby-core:34331]
+
+ * ext/readline/readline.c: enables USE_INSERT_IGNORE_ESCAPE only if
+ RL_PROMPT_{START,END}_IGNORE are available to get rid of compilation
+ error with libedit.
+
+Wed Jan 12 15:53:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * README.EXT.ja (rb_ensure): typo.
+
+Wed Jan 12 11:33:46 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c: OpenBSD uses the elf_abi.h header file instead of the
+ elf.h header file. patched by Jeremy Evans [ruby-core:34384]
+
+Wed Jan 12 03:59:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/webrick/test_cgi.rb: Removes usage of deprecated
+ :RequestHandler option.
+ patched by Peter Weldon [ruby-core:34010]
+
+ * test/webrick/test_httpproxy.rb: ditto.
+
+ * test/webrick/test_httpserver.rb: Add a test of the deprecation
+ behaviour.
+
+Wed Jan 12 08:37:07 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (hash_i): return different values for inverse hash.
+ [ruby-core:34334]
+
+Tue Jan 11 20:32:59 2011 Tanaka Akira <akr@fsij.org>
+
+ * variable.c: parenthesize macro arguments.
+
+Tue Jan 11 13:06:38 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * array.c (rb_ary_resize): should care of embeded array when extending
+ the array.
+
+ * array.c (rb_ary_resize): need to set capa when changing the real
+ size of the array.
+ these are latent bugs.
+
+Mon Jan 10 22:46:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/defines.h (CASEFOLD_FILESYSTEM): HFS+ is case
+ insensitive.
+
+ * load.c (loaded_feature_path, rb_feature_p, load_lock): on a
+ case-insensitive filesystem, loaded features search should
+ ignore case. [ruby-core:34297]
+
+Mon Jan 10 21:34:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (showflags): show LD commands.
+
+Mon Jan 10 14:32:55 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_method.rb (TestMethod#test_define_method): method
+ transplanting between class and module is impossible.
+
+Mon Jan 10 13:51:17 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/rdoc-mode.el (rdoc-mode): show trailing whitespace.
+
+Mon Jan 10 11:22:02 2011 Tanaka Akira <akr@fsij.org>
+
+ * util.c: parenthesize macro arguments.
+
+Mon Jan 10 07:41:31 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * misc/README: mention rdoc-mode.el and ruby-style.el.
+
+Sun Jan 9 20:37:21 2011 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c: parenthesize macro arguments.
+
+Sun Jan 9 16:31:53 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * io.c (Kernel.#syscall): implemented on LP64/LLP64 environments too.
+ also uses __syscall if available for *BSD on 64bit architecture.
+ [ruby-core:34062]
+
+Sun Jan 9 16:31:34 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/irb/locale.rb (IRB::Locale::LOCALE_NAME_RE):
+ some platform has a locale without territory but with
+ encoding.
+ (#each_sub_locale): ditto.
+
+Sun Jan 9 14:47:50 2011 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/readline.c: apply a patch from Nobuyoshi Nakada.
+ fixed #3616 [ruby-core:31484] IRB + readline incorrectly counts
+ non-printing characters in prompt
+
+Sat Jan 8 21:47:26 2011 Tanaka Akira <akr@fsij.org>
+
+ * enum.c (enum_sort_by): use rb_ary_resize.
+ (ary_cutoff): removed.
+
+Sat Jan 8 21:24:17 2011 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (swapf): compilation condition simplified.
+ (swapd): ditto.
+
+Sat Jan 8 20:51:25 2011 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (swapd): remove duplicated code.
+
+Sat Jan 8 19:28:55 2011 Tanaka Akira <akr@fsij.org>
+
+ * thread.c: parenthesize macro arguments.
+
+Fri Jan 7 23:07:40 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (configuration): backref needs to capture.
+
+Fri Jan 7 21:57:22 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-mode-variables), misc/ruby-style.el:
+ show trailing whitespace.
+
+ * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): highlight
+ regexp after open bracket. [ruby-core:34183]
+
+Fri Jan 7 00:37:35 2011 Tanaka Akira <akr@fsij.org>
+
+ * string.c: parenthesize macro arguments.
+
+Thu Jan 6 22:42:02 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigmul1_karatsuba): avoid overflow that make assertion
+ fail in certain case. this patch is contributed from Ray Chason
+ <chasonr at gmail.com> in personal communication.
+
+Thu Jan 6 20:55:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): ignore rest from first dot from
+ TARGET to generate init function name.
+ this is followup of r30464.
+
+Thu Jan 6 11:27:01 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/json/tree_builder.rb (start_mapping): tags
+ should not be included in JSON mapping
+
+Thu Jan 6 09:23:33 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/net/protocol.rb (eof?): BufferedIO should proxy eof? to the
+ underlying IO object.
+
+Thu Jan 6 09:12:31 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/mkmf.rb (configuration): fixing gsub when multiple error flags
+ are passed to GCC.
+
+Thu Jan 6 05:25:49 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_modify): export.
+
+Thu Jan 6 05:14:41 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (get_strio, strio_set_string)
+ (strio_reopen): check if frozen. [ruby-core:33648]
+
+Thu Jan 6 05:10:58 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_resize): new utility function. [ruby-dev:42912]
+
+Thu Jan 6 05:03:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (init_funcname_len): ignore rest from first dot.
+ [ruby-dev:41774]
+
+Thu Jan 6 02:55:48 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: use YAML 1.0 output
+ format for serializing nil values. Thanks Eric Hodel!
+
+ * test/psych/test_nil.rb: test for nil values
+
+Wed Jan 5 14:21:34 2011 Mark Dodwell <hi@mkdynamic.co.uk>
+
+ * string.c: fix rdoc typo.
+ https://github.com/shyouhei/ruby/pull/3
+
+Wed Jan 5 14:06:01 2011 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/rdoc/test_rdoc_options.rb (TestRDocOptions#test_check_files):
+ skip on Windows because chmod 0 doesn't mean unreadable by owner.
+
+Wed Jan 5 13:56:54 2011 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/net/http.rb (Net::HTTP#get): A header hash given should not
+ be modified.
+
+Wed Jan 5 12:10:08 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/dl/{cfunc.c,dl.h,handle.c}, ext/fiddle/fiddle.{h,c}: Use _WIN32
+ rather than checking for windows.h. Thanks Jon Forums!
+ [ruby-core:33977]
+
+Sat Jan 1 17:02:50 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/irb/locale.rb (IRB::Locale#search_file): make it possible
+ to load a localization from a gem.
+ (IRB::Locale#lc_path): obsoleted because of the change of #search_file
+ (IRB::Locale#each_localized_path): new private method, based on
+ lc_path
+ (IRB::Locale#find): follows the change of #search_file.
+ (IRB::Locale#load): removed duplicate with #find.
+
+Sat Jan 1 11:44:42 2011 Tanaka Akira <akr@fsij.org>
+
+ * strftime.c: parenthesize macro arguments.
+
+Sat Jan 1 11:10:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/zlib/zlib.c: take care of platforms where long is bigger
+ than int.
+
+Sat Jan 1 11:03:58 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * NEWS (optparse): shell completion support.
+
+ * misc/README (rb_optparse.{bash,zsh}): for shell completion.
+
+ * include/ruby/intern.h (VALUE rb_ary_print_on): I have never seen
+ this function anywhere.
+
+Sat Jan 1 04:20:11 2011 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_write_console): don't raise exception when
+ the conversion is for writing to console.
+ Patched by Heesob Park [ruby-core:33999]
+
+Fri Dec 31 12:02:06 2010 Tanaka Akira <akr@fsij.org>
+
+ * enum.c (enum_sort_by): use less temporary objects.
+
+Fri Dec 31 11:46:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (warnflags), lib/mkmf.rb (configuration): turn
+ warnings into errors only for bundled extensions.
+ [ruby-core:33815]
+
+Fri Dec 31 11:15:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/zlib/zlib.c (sizeof): zlib.h mistakenly assumes the result
+ of sizeof to be int, not size_t.
+
+Fri Dec 31 10:27:34 2010 Tanaka Akira <akr@fsij.org>
+
+ * st.c: parenthesize macro arguments.
+
+Fri Dec 31 03:23:26 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vsnprintf.c (BSD__uqtoa): Fix overflow when long != quad_t.
+ patched by Peter Weldon <peter.weldon AT null.net>
+ [ruby-core:33985]
+
+Fri Dec 31 03:00:34 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * Makefile.in: remove unnecessary semicolons.
+
+Thu Dec 30 23:09:47 2010 wanabe <s.wanabe@gmail.com>
+
+ * vm.c (vm_define_method): guard iseq from GC while method definition.
+ [ruby-dev:42832]
+
+Thu Dec 30 20:18:32 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * win32/Makefile.sub: ditto.
+
+Thu Dec 30 20:57:09 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * Makefile.in: Check V=1 argument if run "make clean" or similar.
+
+Thu Dec 30 20:41:50 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * Makefile.in: Kill ugly line continuation.
+
+Thu Dec 30 11:49:40 2010 Tanaka Akira <akr@fsij.org>
+
+ * sprintf.c: parenthesize macro arguments.
+
+Wed Dec 29 21:20:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (maygvl_copy_stream_wait_readwrite): define if USE_SENDFILE
+
+Wed Dec 29 20:37:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb: strip current directory prefix.
+
+ * enc/depend (clean): remove name2ctype.h when out-of-place build.
+
+ * win32/Makefile.sub (clean-enc): pass V to inferior make.
+
+Wed Dec 29 18:23:46 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * re.c (rb_reg_expr_str): need to escape if the coderange is invalid.
+
+Wed Dec 29 10:06:51 2010 Tanaka Akira <akr@fsij.org>
+
+ * signal.c: parenthesize macro arguments.
+
+Wed Dec 29 07:22:15 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rake/rdoctask.rb: Deprecate in favor of rdoc/task.
+
+Wed Dec 29 07:07:06 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Import RDoc 3.1
+
+Tue Dec 28 18:36:38 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * error.c, include/ruby/intern.h (rb_compile_error_with_enc): new
+ function to raise syntax error, with source encoding'ed message.
+
+ * parse.y (compile_error): use above function.
+ [ruby-core:33951] (#4217)
+
+Tue Dec 28 07:37:38 2010 Tanaka Akira <akr@fsij.org>
+
+ * ruby.c: parenthesize macro arguments.
+
+Tue Dec 28 07:17:11 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: add ARGF.write and so on.
+
+Tue Dec 28 07:12:38 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: add new magic-comment. (warn-indent) [ruby-core:25442]
+
+Tue Dec 28 04:32:37 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/fiddle/extconf.rb: check for windows.h while building fiddle.
+ Thanks Jon Forums! [ruby-core:33923]
+
+Tue Dec 28 01:45:12 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: Add Zlib.deflate and Zlib.inflate.
+ [ruby-dev:42833]
+
+Mon Dec 27 21:22:33 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * win32/configure.bat: Remove obsoleted coding rule. Now, we
+ don't support to build on Windows 95/98 and Me.
+
+Mon Dec 27 18:27:13 2010 Tanaka Akira <akr@fsij.org>
+
+ * re.c: parenthesize macro arguments.
+
+Mon Dec 27 15:22:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/README.win32: note to need NT based OS to build ruby.
+
+Mon Dec 27 12:14:46 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (EXTMK_ARGS): specify to pass macro V, because nmake
+ doesn't pass it via MAKEFLAGS.
+
+Mon Dec 27 10:33:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/zlib/zlib.c (Init_zlib): Add Zlib.deflate and Zlib.inflate.
+ [ruby-dev:42833]
+
+Mon Dec 27 07:38:07 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * misc/rb_optparse.zsh: add compdef for generator.
+
+Mon Dec 27 07:32:07 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * lib/optparse.rb (OptionParser#compsys): escape brackets too.
+ [ruby-dev:42754]
+
+Mon Dec 27 01:30:08 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: add IF_NAMESIZE.
+ add a default for INET6_ADDRSTRLEN.
+
+Sun Dec 26 23:49:47 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * win32/Makefile.sub: suppress a strange error message when RMALL
+ found no such file.
+ * win32/rmall.bat: new.
+
+Sun Dec 26 21:23:23 2010 <kosaki.motohiro@gmail.com>
+
+ * win32/Makefile.sub: fix 'nmake clean-enc' breakage since r28322.
+
+Sun Dec 26 22:25:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/ripper/depend (ripper.y): fix messages with nmake.
+ [ruby-dev:42896]
+
+Sun Dec 26 22:24:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): get rid of warnings caused by
+ -Wdeclaration-after-statement on cygwin.
+
+Sun Dec 26 20:28:34 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * process.c (before_exec): add small comment.
+
+Sun Dec 26 20:52:21 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: define INET_ADDRSTRLEN as 16 if not
+ available. fix compilation error on mswin32-60. reported by nobu.
+
+Sun Dec 26 19:37:37 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c: define IFNAMSIZ if not available.
+ fix compilation error on mingw32. reported by nobu.
+
+Sun Dec 26 12:16:29 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/ri/paths.rb (RDoc::RI::Paths::HOMEDIR): no exception if
+ HOME is not set. [ruby-core:33867]
+
+Sun Dec 26 11:39:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (stmt): missing ripper rule. i.e., `a::B ||= c 1'.
+ http://twitter.com/#!/wannabe53/status/18797576396472321
+ http://twitter.com/#!/wannabe53/status/18798416150663168
+
+Sun Dec 26 11:15:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/with_different_ofs.rb (DifferentOFS): should not affect
+ original classes.
+
+Sun Dec 26 09:35:07 2010 Tanaka Akira <akr@fsij.org>
+
+ * rational.c: parenthesize macro arguments.
+
+Sun Dec 26 09:22:19 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (rb_if_indextoname): new function to abstract
+ environments without if_indextoname.
+ (inspect_ipv6_multicast_if): new function to inspect
+ IPV6_MULTICAST_IF.
+ Socket::Option.new(:INET6, :IPV6, :MULTICAST_IF,
+ [2].pack("I!")).inspect is
+ "#<Socket::Option: INET6 IPV6 MULTICAST_IF eth0>".
+
+Sun Dec 26 04:31:15 2010 Luis Lavena <luislavena@gmail.com>
+
+ * ext/dl/win32/registry.rb: Corrected RegCreateKeyExA signature.
+ Patch by Rafal Michalski [ruby-core:33874] [Ruby 1.9-Bug#4203]
+
+Sun Dec 26 02:31:58 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (advice_arg_check): Change argument check.
+ Now, an unsupported advice makes NotImplementedError.
+ [ruby-dev:42887] [Ruby 1.9-Feature#4204]
+
+Sun Dec 26 03:00:53 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/socket/extconf.rb: Fix build error which was introduced r30372.
+
+Sun Dec 26 01:37:10 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/extconf.rb: check the existence of if_indextoname().
+
+ * ext/socket/option.c: yesterday's akr's commits destroyed the build of
+ some unrelated platforms (such as Windows).
+
+Sat Dec 25 23:29:11 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_ipv4_add_drop_membership): new function
+ to inspect struct ip_mreq and struct ip_mreqn for
+ IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
+ Socket::Option.new(:INET, :IP, :ADD_MEMBERSHIP,
+ [239,255,99,81, 0,0,0,0].pack("CCCCCCCC")).inspect is now
+ "#<Socket::Option: INET IP ADD_MEMBERSHIP 239.255.99.81 0.0.0.0>".
+ (inspect_ipv4_multicast_if): new function to inspect struct in_addr
+ and struct ip_mreqn for IP_MULTICAST_IF.
+ Socket::Option.new(:INET, :IP, :MULTICAST_IF,
+ [192,168,0,7].pack("CCCC")).inspect is now
+ "#<Socket::Option: INET IP MULTICAST_IF 192.168.0.7>".
+
+ * ext/socket/extconf.rb: check struct ip_mreq and struct ip_mreqn.
+
+Sat Dec 25 22:49:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/csv: DifferentOFS needs to be include in each classes.
+
+ * test/digest/test_digest_extend.rb (TestDigestExtend#setup):
+ should not depend on the result of previous tests
+
+ * test/with_different_ofs.rb (DifferentOFS::WithDifferentOFS): give
+ name.
+
+ * test/with_different_ofs.rb (DifferentOFS): test suite for test
+ suites affected by $,.
+
+ * test/digest/test_digest_extend.rb (TestDigestExtend): should not
+ assume $, invariant.
+
+ * test/csv/test_data_converters.rb, test/csv/test_table.rb: don't
+ call setup within tests.
+
+Sat Dec 25 20:01:40 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (pipe_open): Added rb_thread_atfork(). We must reinitialize
+ GVL at new process creation.
+
+Sat Dec 25 18:26:55 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_ipv6_mreq): new function to inspect
+ struct ipv6_mreq for IPV6_JOIN_GROUP and IPV6_LEAVE_GROUP.
+ Socket::Option.new(:INET6, :IPV6, :JOIN_GROUP,
+ [0xff12,0,0,0,0,0,0,1, 2].pack("nnnnnnnnI!")).inspect is now
+ "#<Socket::Option: INET6 IPV6 JOIN_GROUP ff12::1 eth0>".
+
+ * ext/socket/extconf.rb: check struct ipv6_mreq.
+
+Sat Dec 25 18:04:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/csv.rb (CSV.foreach): 'rb' mode is defaulted in open.
+
+ * lib/csv.rb (CSV#init_separators): cannonicalize encoding options
+ as Encoding objects.
+
+Sat Dec 25 18:30:34 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (rb_thread_atfork): Add small comment why we need
+ reset random seed.
+
+Sat Dec 25 17:33:55 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/csv/base.rb (TestCSV.with_different_ofs): give name to
+ anonymous classes.
+
+ * lib/csv.rb (CSV#init_separators): use IO#gets with length
+ parameter to get rid of wrong convertion.
+
+ * lib/csv.rb (CSV::foreach, CSV#initialize): directly use encoding
+
+ * lib/csv.rb, test/csv: should not assume $, invariant.
+
+Sat Dec 25 16:08:06 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * signal.c: change rb_atomic_t definition from uchar to uint.
+
+Sat Dec 25 15:04:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/csv/test_encodings.rb (TestEncodings#setup): fix evil test
+ suite writing to the source directory.
+
+Sat Dec 25 15:08:08 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/pty/pty.c (chfunc): Added rb_thread_atfork_before_exec().
+ We must reinitialize GVL at new process creation. Otherwise
+ we may meet an insane deadlock. [Bug#4121][ruby-dev:42686]
+
+Sat Dec 25 14:27:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_extract_encoding_option): accept Encoding object as
+ encoding: optional argument. [ruby-dev:42884]
+
+Sat Dec 25 13:37:55 2010 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 2.0.2 r6093.
+
+Sat Dec 25 13:05:59 2010 Tanaka Akira <akr@fsij.org>
+
+ * random.c: parenthesize macro arguments.
+
+Sat Dec 25 12:48:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_f_require_relative): don't omit return type.
+
+Sat Dec 25 11:06:00 2010 Eric Hodel <drbrain@segment7.net>
+
+ * load.c (rb_f_require_relative): Add documentation.
+
+Sat Dec 25 11:02:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/zlib/zlib.c (gzreader_gets): support optional length
+ parameter.
+
+ * ext/zlib/zlib.c (gzfile_read, gzfile_readpartial): length should
+ be long.
+
+Sat Dec 25 10:51:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/json/generator/generator.{c,h} (fbuffer_free_only_buffer):
+ unused.
+
+ * ext/openssl/ossl_pkcs5.c (ossl_pkcs5_pbkdf2_hmac): add casts.
+
+Fri Dec 24 08:46:04 2010 Tanaka Akira <akr@fsij.org>
+
+ * process.c: parenthesize macro arguments.
+
+Thu Dec 23 19:17:14 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/net/imap/cacert.pem: updated because it has been expired.
+
+ * test/net/imap/server.crt: signed again because CA cert was expired.
+
+Thu Dec 23 11:16:52 2010 Tanaka Akira <akr@fsij.org>
+
+ * parse.y: parenthesize macro arguments.
+
+Thu Dec 23 11:00:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_check_type): check for type from extensions for ruby
+ 1.8. see [ruby-core:33797].
+
+Thu Dec 23 08:12:59 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/net/smtp.rb: refactoring Net::SMTP#esmtp= to use an
+ attr_accessor
+
+Thu Dec 23 06:35:41 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/net/smtp.rb: Net::SMTP should close the SSL connection if the
+ connection verification fails.
+
+Thu Dec 23 01:47:58 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: remove #object_id. [ruby-dev:42840]
+
+Wed Dec 22 08:56:39 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: add Module#private_constant and Module#public_constant.
+ [ruby-dev:39685][ruby-core:32698]
+
+Wed Dec 22 07:59:23 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: add IO#advise. [ruby-core:33110] [Ruby 1.9-Feature#4038]
+
+Tue Dec 21 23:45:31 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (Init_GC): move back object_id to Kernel. [ruby-dev:42840]
+
+Tue Dec 21 12:45:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (target_archs): remove temporary objects.
+
+ * enc/Makefile.in, enc/depend (clean): remove work directories.
+
+Tue Dec 21 07:39:12 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c: parenthesize macro arguments.
+
+Tue Dec 21 06:25:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/rexml/test_contrib.rb (ContribTester#test_pos): should not
+ use fixed path name for tests. [ruby-dev:42827]
+
+ * test/rexml/test_sax.rb (SAX2Tester#test_socket): should not use
+ fixed port for tests. [ruby-dev:42828]
+
+Tue Dec 21 06:10:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (setup_args), vm.c (invoke_block_from_c),
+ vm_insnhelper.c (caller_setup_args): reverted r30241 and r30243
+ except for the test.
+
+Tue Dec 21 01:41:42 2010 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * io.c : add an extra byte to buffer for the specification of read
+ in Windows. see [ruby-core:33460] and r29980. and, we have to
+ discuss how to do this one byte.
+
+Tue Dec 21 01:18:06 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * error.c: Fix build error for win32. This regression was
+ introduced by r30271.
+
+Tue Dec 21 00:59:40 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (thread_cleanup_func): Moved interrupted_lock
+ destroying code from native_thread_destroy() to
+ thread_cleanup_func() because it's platform independent logic.
+
+ * thread_win32.c (native_thread_destroy): ditto.
+ * thread_pthread.c (native_thread_destroy): ditto.
+
+Tue Dec 21 00:46:20 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (thread_cleanup_func): Don't touch native threading
+ resource at fork. Sadly this is purely bandaid. We need to
+ implement proper fix later. [Bug #4169] [ruby-core:33767]
+
+Tue Dec 21 00:22:44 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * error.c (exit_success_p): Check status code more carefully.
+ status code may have garbage in upper bit.
+
+Mon Dec 20 23:12:37 2010 Tanaka Akira <akr@fsij.org>
+
+ * node.c: parenthesize macro arguments.
+
+Mon Dec 20 20:04:41 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: add #__id__ and #object_id. [ruby-dev:42778]
+
+Mon Dec 20 20:03:21 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread_pthread.c (native_thread_destroy): Fixed gvl_cond leak.
+
+Mon Dec 20 13:49:05 2010 Eric Hodel <drbrain@segment7.net>
+
+ * NEWS: Add item for RDoc 3.0.1
+
+ * lib/rdoc: Import RDoc 3.0.1, remove require for perl parser.
+
+Mon Dec 20 12:15:32 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Import RDoc 3.0.
+
+Mon Dec 20 01:55:03 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (Init_IO): Added O_DIRECT. This feature was proposed by
+ Run Paint Run Run.
+ [Feature #4015] [ruby-core:33018]
+
+Sun Dec 19 19:15:23 2010 Tanaka Akira <akr@fsij.org>
+
+ * marshal.c: parenthesize macro arguments.
+
+Sat Dec 18 21:52:37 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * vsnprintf.c (BSD_vfprintf): suppress warning: "_WIN32" is not
+ defined.
+
+Sat Dec 18 16:02:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (setup_args), vm.c (invoke_block_from_c),
+ vm_insnhelper.c (caller_setup_args): fix of r30241. lambda block
+ should check argument number.
+
+Sat Dec 18 14:42:29 2010 Tanaka Akira <akr@fsij.org>
+
+ * load.c: parenthesize macro arguments.
+
+Sat Dec 18 10:07:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (setup_args, iseq_compile_each): optimize AMPER LAMBDA
+ combination as block.
+
+Fri Dec 17 22:07:16 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (Init_GC): move #__id__ and #object_id to BasicObject.
+ [ruby-dev:42778]
+
+Fri Dec 17 19:35:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/mkmf/base.rb (TestMkmf::FakeLog): capture output from mkmf.
+
+ * test/mkmf/test_find_executable.rb (test_find_executable):
+ suppress meaningless differences for chkbuild.
+
+Fri Dec 17 13:26:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/setup.mak (BASERUBY): quit with an error when BASERUBY was not
+ able to set, just like configure.in does. [ruby-dev:42782]
+
+Fri Dec 17 07:04:09 2010 Tanaka Akira <akr@fsij.org>
+
+ * iseq.c: parenthesize macro arguments.
+
+Fri Dec 17 04:18:37 2010 Eric Hodel <drbrain@segment7.net>
+
+ * transcode.c (str_encode): Alter comment for better wording and ri
+ output.
+
+Fri Dec 17 00:05:40 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * io.c (rb_io_advise): New API. IO#advise() allows to tell the
+ ruby runtime how it expects to use a file handle. This feature
+ can be improved a performance some situations.
+ Note: This feature is mainly developed by Run Paint Run Run.
+ Thank you! [ruby-core:33110] [Ruby 1.9-Feature#4038]
+
+ * io.c (do_io_advise): Helper function.
+ * io.c (io_advise_sym_to_const): ditto.
+
+Thu Dec 16 23:29:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb (bin-comm): use transformed name.
+ [ruby-dev:42777]
+
+Thu Dec 16 21:52:07 2010 Tanaka Akira <akr@fsij.org>
+
+ * io.c: parenthesize macro arguments.
+
+Thu Dec 16 21:46:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/mkconfig.rb (RbConfig): honor ARCHFLAGS and RC_ARCHS to
+ override embedded ARCH_FLAG value on universal-darwin.
+
+Thu Dec 16 19:50:12 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/{configure.bat,setup.mak,Makefile.sub} (PROGRAM_PREFIX,
+ PROGRAM_SUFFIX): unite the differences of the names of macros of
+ prefix and suffix.
+ reported by HANEDA Norikatsu. [ruby-dev:42775]
+
+Thu Dec 16 08:04:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * node.h (RNode): match the type of flags to RBasic, and renamed
+ nd_file as nd_reserved.
+
+ * iseq.c (set_relation), vm_insnhelper.c (vm_cref_push): nd_file
+ is always zero-cleared.
+
+Thu Dec 16 07:22:30 2010 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/unit.rb: Imported minitest 2.0.1 r6079.
+
+Wed Dec 15 20:45:02 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/test/unit.rb (process_args): need to setup @help to print options.
+
+Wed Dec 15 11:19:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/zlib/test_zlib.rb (test_to_io): forgotten to fix with r30201.
+
+Wed Dec 15 11:07:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (simple_sendfile): enable on Mac OS X.
+
+ * io.c (nogvl_copy_stream_sendfile): moved precheck of copy length.
+
+ * io.c (nogvl_copy_stream_sendfile): should wait for both of
+ read/write fds.
+
+Wed Dec 15 07:11:55 2010 Tanaka Akira <akr@fsij.org>
+
+ * hash.c: parenthesize macro arguments.
+
+Wed Dec 15 04:02:00 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509extfactory_set_config):
+ fix compile error when !HAVE_X509V3_SET_NCONF. Thanks
+ Chikanaga-san. [ruby-dev:42761] [Ruby 1.9-Bug#4158]
+
+Wed Dec 15 03:41:31 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * test/ripper/test_parser_events.rb (TestRipper#test_block_variables):
+ Limit address space 100MB instead 100KB. Quite frankly, This
+ margin is too narrow to contain ruby. [ruby-dev:42763] [Bug#4159]
+
+Tue Dec 14 23:53:52 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (simple_sendfile): improve linux compatibility on FreeBSD,
+ and now it works. But without cpuset -l 0, it still gets stuck.
+
+Tue Dec 14 20:31:33 2010 Tanaka Akira <akr@fsij.org>
+
+ * gc.c: parenthesize macro arguments.
+
+Tue Dec 14 18:31:48 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/test/unit.rb: help messages.
+
+Tue Dec 14 18:19:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (help): there is no reason to use the abbreviation for here.
+
+Tue Dec 14 15:03:46 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_io.rb (test_reopen, test_reinitialize): should close
+ the temporary files.
+
+Tue Dec 14 14:24:15 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_io.rb (make_tempfile): change the prefix from 'foo'
+ to 'test_io' because the old one is meaningless and inconvenient.
+
+ * test/ruby/test_io.rb (test_binmode_after_closed): the temporary file
+ maked by make_temfile is already closed.
+
+Tue Dec 14 13:52:19 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_io.rb (test_flush_in_finalizer[12]): should close
+ temporary file because it's only used for taking pathname and
+ unlinking the file after the end of the test (in GC phase).
+
+Tue Dec 14 13:34:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/zlib/zlib.c (gzfile_s_open): should close the IO if some error
+ occurs in initializing.
+
+Tue Dec 14 13:04:16 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTPRequest#send_request_body_data):
+ set binmode to tempfile.
+
+Tue Dec 14 12:55:46 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/zlib/test_zlib.rb (*): should close files associated with zlib.
+
+Tue Dec 14 11:30:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_argf.rb (test_inplace_rename_impossible): unlink
+ the renamed temporary file on no_safe_rename platforms.
+
+ * test/ruby/test_argf.rb (test_readlines_limit_0,
+ test_each_line_limit_0): should close argf because the associated
+ Tempfile object cannot unlink the temporary file when it's gc'ed
+ on some platforms (Windows, etc.)
+
+Tue Dec 14 11:27:07 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/minitest/unit.rb (Minitest::Unit#_run_suite): split test
+ name and its time. Thiw allows to know test's name when you are
+ running tests and meet a test which spends long time at realtime.
+
+Tue Dec 14 11:25:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: Add -Werror=declaration-after-statement to default
+ warning flag. If you are using GCC, this flag is useful to
+ prevent breaking VC build.
+
+Tue Dec 14 10:25:57 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/openssl/ossl_asn1.c (ossl_asn1_decode0): how many gcc-c99isms
+ must a man mend; before he can build with VC? r30178
+
+Mon Dec 13 21:26:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (simple_sendfile): disable the use of sendfile(2) on
+ FreeBSD. It blocks on TestIO#test_copy_stream_socket.
+
+Mon Dec 13 18:35:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c: define USE_SENDFILE on FreeBSD or DragonFly BSD.
+ Remove Mac OS X because its argument is different from them.
+
+Mon Dec 13 12:00:09 2010 Tanaka Akira <akr@fsij.org>
+
+ * file.c: parenthesize macro arguments.
+
+Mon Dec 13 11:21:14 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (simple_sendfile): added for BSD version of sendfile(2).
+
+Mon Dec 13 09:50:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTPRequest#set_form): Added to support
+ both application/x-www-form-urlencoded and multipart/form-data.
+ There is a similar API, Net::HTTPRequest#set_form_data, but
+ to keep its compatibility this is newly added. [ruby-dev:42729]
+
+Sun Dec 12 23:45:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): fix for __goto__ and __label__
+ where were totally broken.
+
+Sun Dec 12 22:45:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (ID_H_INCLUDES): now id.h depends on vm_opts.h.
+
+Sun Dec 12 20:42:47 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * template/id.h.tmpl: suppress all warning: "SUPPORT_JOKE" is not
+ defined. [ruby-dev:42730]
+
+Sun Dec 12 20:35:07 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * misc/rb_optparse.zsh: update how to install.
+
+ * misc/rb_optparse.zsh: avoid error when setopt noclobber.
+
+ * lib/optparse.rb: fix typo. pointed out at
+ <http://d.hatena.ne.jp/nagachika/20101207>.
+
+Sun Dec 12 13:27:35 2010 Tanaka Akira <akr@fsij.org>
+
+ * eval_error.c: parenthesize macro arguments.
+
+Sun Dec 12 11:53:24 2010 Tanaka Akira <akr@fsij.org>
+
+ * error.c: parenthesize macro arguments.
+
+Sun Dec 12 04:01:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): fix: extra back slash is added when
+ the string is dummy encoding and includes \x22 or \x5C.
+
+Sun Dec 12 02:42:24 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/openssl/ossl_asn1.c: indefinite length BER to DER encoding is
+ properly supported. Thanks Martin Bosslet! [ruby-core:33082]
+
+Sat Dec 11 17:43:34 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * ext/bigdecimal/bigdecimal.h: suppress "warning: 'VPrint' declared
+ 'static' but never defined".
+
+Sat Dec 11 09:24:57 2010 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c: parenthesize macro arguments.
+
+Sat Dec 11 08:12:48 2010 Eric Hodel <drbrain@segment7.net>
+
+ * ext/openssl/ossl.c, ext/openssl/ossl_pkey_rsa.c: Document RSA, RSA
+ encryption/decryption and PKCS #5 encryption/decryption.
+
+Sat Dec 11 06:23:41 2010 Eric Hodel <drbrain@segment7.net>
+
+ * ext/openssl/ossl_x509name.c: include Comparable to provide #==.
+ Document OpenSSL::X509::Name#<=>. [Ruby 1.9-Feature#4116]
+
+Sat Dec 11 05:48:28 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/multi-tk.rb: infinite loop on method_missing at loading.
+ [ruby-dev:42716] [Ruby 1.9-Bug#4129]
+
+ * ext/tk/lib/multi-tk.rb: when no eventloop is running, ruby freezes at
+ exit.
+
+Sat Dec 11 02:23:15 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/openssl/extconf.rb: try pkgconfig first, then fall back to
+ normal have_library, etc. Thanks Erik Hollensbe. [ruby-core:32406]
+
+Fri Dec 10 22:33:39 2010 Tanaka Akira <akr@fsij.org>
+
+ * dln_find.c: parenthesize macro arguments.
+
+Fri Dec 10 20:05:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/id.h.tmpl (ruby_method_ids): suppress warnings.
+ [ruby-dev:42730]
+
+Fri Dec 10 18:29:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe): relatively called non-shared
+ binary cannot be found in PATH, so use given pathname.
+
+Fri Dec 10 18:28:40 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cygwin/GNUmakefile.in (SCRIPTPROGRAMS): ignore backup files and etc.
+
+ * cygwin/GNUmakefile.in (scriptbin): set executable bit.
+
+ * tool/rbinstall.rb (install_recursive): always skip default ignored
+ files. if block is given, call it instead of calling install.
+
+ * tool/rbinstall.rb (bin-comm): use install_recursive.
+
+Fri Dec 10 18:12:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/mkmf/base.rb (TestMkmf#config_value): extract macro value from
+ config.h.
+
+ * test/mkmf/test_sizeof.rb (TestMkmf::TestSizeof#test_sizeof_builtin),
+ (TestMkmf::TestSizeof#test_sizeof_struct): more tests.
+
+ * lib/mkmf.rb (check_signedness): should use the prelude code.
+ [ruby-dev:42731]
+
+ * lib/mkmf.rb (Logging.log_close): separate from Logging.logfile.
+
+ * test/mkmf/base.rb (TestMkmf::MKMFLOG): show mkmf.log at failures.
+
+ * test/mkmf/base.rb (TestMkmf#teardown): close log file for each tests.
+
+Fri Dec 10 11:36:43 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * compile.c (enum): remove a comma at end of enumerator list.
+
+ * constant.h (rb_const_flag_t): ditto.
+
+ * iseq.h (enum catch_type): ditto.
+
+ * iseq.h (enum defined_type): ditto.
+
+ * vm_core.h (enum iseq_type): ditto.
+
+ * vm_core.h (enum vm_special_object_type): ditto.
+
+Fri Dec 10 10:47:53 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * sprintf.c (_HAVE_SANE_QUAD_): Don't forget LP64, r30156.
+
+Fri Dec 10 10:37:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * sprintf.c (_HAVE_SANE_QUAD_): if a certain platform has LONG_LONG in
+ 8 byte, it might be sane quad. [ruby-core:33634]
+
+Fri Dec 10 10:07:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb: remove version 1.1 features.
+
+Fri Dec 10 02:18:02 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/openssl/ossl_x509store.c (ossl_x509stctx_cleanup): removing C
+ implementation of `cleanup`.
+
+ * ext/openssl/lib/openssl/x509.rb: adding ruby implementation of
+ `cleanup`. OpenSSL::X509::StoreContext#cleanup is deprecated since
+ reusing the underlying struct doesn't make sense. [ruby-dev:42546]
+
+Thu Dec 9 20:14:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (lvar_defined_gen, shadowing_lvar_gen, dvar_defined): no
+ warnings for unused method and block arguments.
+ [ruby-dev:42718] [ruby-dev:42724]
+
+Thu Dec 9 19:25:49 2010 Tanaka Akira <akr@fsij.org>
+
+ * dln.c: parenthesize macro arguments.
+
+Thu Dec 9 18:51:06 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/webrick/accesslog.rb (WEBrick::AccessLog#format): support
+ %{remote}p for logging remote (client) port number.
+ [ruby-dev:42670]
+
+Thu Dec 9 11:00:30 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_dup): should copy contents only. no instance
+ variable, no class would be copied. it would affect methods
+ #sort, #reject, #transpose, #uniq, #compact, and #shuffle.
+ [ruby-core:33640]
+
+ * array.c (rb_ary_reverse_m): ditto.
+
+ * array.c (rb_ary_rotate_m): ditto.
+
+Wed Dec 8 21:38:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/dl/lib/dl/struct.rb: clean a warning: assigned but unused
+ variable. patched by Kouhei Yanagita. [ruby-dev:42722]
+
+ * ext/dl/lib/dl/import.rb: ditto.
+
+Wed Dec 8 21:36:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (shadowing_lvar_gen): fix line number. [ruby-dev:42718]
+
+Wed Dec 8 20:37:11 2010 Tanaka Akira <akr@fsij.org>
+
+ * dir.c: parenthesize macro arguments.
+
+Tue Dec 7 22:37:15 2010 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * io.c (io_read): duplicate string if shared. [ruby-dev:42719]
+
+Tue Dec 7 22:31:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser::Officious): separate completion
+ options from --help. [ruby-dev:42690]
+
+ * lib/optparse.rb (OptionParser::Completion#candidate),
+ (OptionParser::Switch#compsys): remove unused variables.
+
+Tue Dec 7 22:05:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (transcode_loop): call default handler of the given
+ hash, method, proc or [] method as fallback. [ruby-dev:42692]
+
+Tue Dec 7 21:59:37 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/light/node.rb: remove circular require.
+
+Tue Dec 7 21:56:01 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_light.rb: really suppress a warning.
+
+Tue Dec 7 21:51:57 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_light.rb: suppress a warning.
+
+Tue Dec 7 21:14:03 2010 Tanaka Akira <akr@fsij.org>
+
+ * debug.c: parenthesize macro arguments.
+
+Tue Dec 7 21:06:38 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/doctype.rb, test/rexml/test_doctype.rb: suppress warnings.
+ [ruby-core:33305]
+ Reported by Aaron Patterson. Thanks!!!
+
+Tue Dec 7 18:56:52 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/lib/kconv.rb (String#kconv): fix typo and update rdoc.
+ patched by Kouhei Yanagita [ruby-dev:42696]
+
+Tue Dec 7 20:32:11 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_doctype.rb: add Accessor to test case name.
+
+Tue Dec 7 20:31:02 2010 Kouhei Sutou <kou@clear-code.com>
+
+ * test/rexml/test_doctype.rb: Doctype -> DocType.
+
+Tue Dec 7 20:29:23 2010 Kouhei Sutou <kou@clear-code.com>
+
+ * test/rexml/test_doctype_mixin.rb: rename to ...
+ * test/rexml/test_doctype.rb: ... this to remove needless name.
+
+Tue Dec 7 17:03:16 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (xlist): supported the XLIST command, which is an
+ extension by Apple and Google. patch by Geoff Youngs.
+ [ruby-core:33521]
+
+Tue Dec 7 08:00:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, win32/Makefile.sub (WERRORFLAG): flag to treat
+ warnings as errors.
+
+ * lib/mkmf.rb (Logging.postpone): yield log file object.
+
+ * lib/mkmf.rb (xsystem): add options, :werror only right now.
+
+ * lib/mkmf.rb (with_werror): check as if warnings are errors.
+
+ * lib/mkmf.rb (convertible_int): make declaration conflict
+ warnings errors not to pass wrong type. [ruby-dev:42684]
+
+ * lib/mkmf.rb (COMMON_MACROS): get rid of conflicts.
+
+ * win32/Makefile.sub (WARNFLAGS): make declaration conflict
+ warnings errors if possible.
+
+Sun Dec 7 21:16:10 2010 Tanaka Akira <akr@fsij.org>
+
+ * cont.c: parenthesize macro arguments.
+
+Tue Dec 7 00:27:14 2010 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * win32/win32.c (rb_w32_read): fixed more for readline,
+ and so on. [ruby-core:33511]
+
+Mon Dec 6 23:18:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/mkmf/base.rb (TestMkmf#setup): run quietly.
+
+ * test/mkmf/test_find_executable.rb (test_find_executable): use
+ configured results.
+
+ * common.mk (test-build): test for build process.
+
+Mon Dec 6 22:47:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser#candidate): skip separators.
+
+ * sample/optparse/opttest.rb: should not override --help.
+ [ruby-dev:42690]
+
+Mon Dec 6 19:00:48 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * misc/rb_optparse.zsh: fix typos.
+
+Mon Dec 6 18:59:04 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: add new encodings.
+
+Mon Dec 6 18:56:42 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_string.rb (TestString#test_scan): add a test for
+ [ruby-core:33338] #4087.
+
+Mon Dec 6 18:55:36 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/uri/test_common.rb (TestCommon#test_encode_www_form): add
+ tests for r30015.
+
+Mon Dec 6 10:39:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (URI::Parser#initialize_pattern):
+ refix for restrict the pattern.
+
+Mon Dec 6 09:45:11 2010 Eric Hodel <drbrain@segment7.net>
+
+ * ext/openssl (OpenSSL): add toplevel documentation
+ * ext/openssl/ossl_ssl.c (SSLContext, SSLSocket: add additional
+ documentation
+ * ext/openssl: move "let rdoc know about mOSSL" comments so they don't
+ show up in output
+
+Mon Dec 6 09:16:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (URI::Parser#initialize_pattern):
+ workaround fix pattern of hostname for RFC 3986. [ruby-dev:42672]
+
+Mon Dec 6 09:14:38 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/mkmf.rb (check_signedness): rename unused variable prelude.
+
+Sun Dec 5 17:56:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (make_metaclass): fix probable typo. builtin type flag
+ cannot be used with FL_TEST.
+
+Sun Dec 5 12:09:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/irb/init.rb (IRB.parse_opts): fix typo. [ruby-core:33574]
+
+Sun Dec 5 11:27:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (load_file_internal): decrement for ungotten line.
+ [ruby-dev:42680]
+
+Sun Dec 5 10:32:11 2010 Tanaka Akira <akr@fsij.org>
+
+ * complex.c: parenthesize macro arguments.
+
+Sat Dec 4 11:39:17 2010 Eric Hodel <drbrain@segment7.net>
+
+ * ext/openssl/ossl_x509ext.c (initialize): add documentation.
+
+Sat Dec 4 11:21:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_hash_update_by): new API for Hash#update.
+
+Sat Dec 4 11:18:10 2010 Tanaka Akira <akr@fsij.org>
+
+ * class.c: parenthesize macro arguments.
+
+Sat Dec 4 11:07:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (rb_vm_inc_const_missing_count): missing prototype.
+
+Sat Dec 4 08:50:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (Init_iconv): no warnings if $VERBOSE is nil.
+
+Sat Dec 4 08:25:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_call_method): revert r30064 and r30071,
+ because of [ruby-core:26761]. Bug#4106 rejected.
+
+Sat Dec 4 07:46:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (String#tr_cpp): substitute * with P like as
+ autoconf.
+
+Fri Dec 3 22:36:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_call_method): protected methods should be
+ checked against the real class.
+
+Fri Dec 3 20:23:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (convertible_int): define printf format prefix too.
+
+ * lib/mkmf.rb (convertible_int): detect convertible integer type.
+ port RUBY_REPLACE_INT from configure.in.
+
+ * lib/mkmf.rb (check_sizeof): should return integer always.
+
+Fri Dec 3 12:54:48 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (RCFLAGS): VC10 and after only. fixed the problem
+ of r30015. [ruby-core:33530]
+
+Fri Dec 3 12:41:52 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * gc.c (rb_objspace_free): With our "lazy-sweep" GC engine, it is
+ possible for an object to survive until its surrounding object
+ space is about to be freed. Those objects, if any, remains
+ leaked for the rest of a process life. This is problematic
+ because for instance a T_DATA object may have its own destructor
+ to terminate something.
+
+ * vm.c (ruby_vm_destruct): ruby_current_vm termination should be
+ somewhere after rb_objspace_free for above reason.
+
+Fri Dec 3 12:17:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_call_method): protected singleton methods should
+ be visible from same real class methods. [ruby-core:33506]
+
+Fri Dec 3 07:08:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_getline): round upto next char
+ boundary. [ruby-dev:42674]
+
+Fri Dec 3 06:52:46 2010 Tanaka Akira <akr@fsij.org>
+
+ * compile.c: parenthesize macro arguments.
+
+Fri Dec 3 04:08:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_alias_internal): use st_insert2 and change return
+ value to int.
+
+ * encoding.c (enc_alias): follow enc_alias_internal.
+
+Fri Dec 3 01:52:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_alias_internal): use xfree instead of free.
+
+Thu Dec 2 23:52:26 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * NEWS: entry for ruby_vm_at_exit().
+
+ * eval.c (ruby_cleanup): bug fix around at_exit (1) timing was
+ wrong. (2) execution order was opposite.
+
+Thu Dec 2 23:05:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (RCFLAGS): -nologo switch is only available in
+ newer versions of rc.exe. fixed the problem of r30012.
+
+Thu Dec 2 21:28:07 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/lib/json/add/rails.rb: removed.
+
+Thu Dec 2 21:22:05 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_alias_internal): free the copied key and
+ return NULL when given key is already registered.
+
+ * encoding.c (enc_alias): call set_encoding_const only when the
+ alias is not registered yet.
+
+Thu Dec 2 19:58:24 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * vm.c (ruby_vm_at_exit): new API. This enables extension libs to
+ hook a VM termination. Right now, because the VM we have is
+ process global, most extensions do not deallocate resources and
+ leave them to Operating System's reaping userland processes. But
+ in a future we plan to have multiple VMs to run simultaneously in
+ a single process (MVM project). At that stage we can no longer
+ rely on OSes and have to manage every resources to be reclaimed
+ properly. So it is. For a forward-compatibility reason this API
+ is introduced now, encouraging you to be as gentle as you can for
+ your resources; that is, tidy up your room.
+
+ * include/ruby/vm.h: ditto.
+
+ * vm_core.h (rb_vm_struct): new field.
+
+ * vm.c (vm_init2): initialize above new field.
+
+ * eval.c (ruby_cleanup): trigger those hooks.
+
+Thu Dec 2 17:00:44 2010 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: parenthesize macro arguments.
+
+Thu Dec 2 15:31:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_read): more fix. [ruby-core:33513]
+
+Thu Dec 2 13:41:43 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_read): workaround for console reading troubles.
+ fixed [ruby-core:33511]
+
+Thu Dec 2 13:10:42 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (URI.encode_www_form):
+ split key-value when the value is Array like object.
+
+Thu Dec 2 10:39:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTP#set_form_data):
+ use URI.encode_www_form for application/x-www-form-urlencoded.
+
+Thu Dec 2 10:38:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/extmk.rb: remove $makeflags.defined?, it should be $mflags.
+
+Thu Dec 2 10:19:47 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (rc): suppress meaningless message.
+
+Thu Dec 2 10:09:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/generator/extconf.rb: remove the lines which set -O3
+ when -O option is not set.
+ Note that -O3 doesn't always exist.
+
+ * ext/json/parser/extconf.rb: ditto.
+
+Thu Dec 2 10:01:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/extmk.rb: define $makeflags.defined? like $mflags.
+
+Thu Dec 2 07:20:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit::GCStressOption): --gc-stress
+ option.
+
+ * lib/test/unit.rb (Test::Unit::Mini#_run_suites): show the result
+ even when interrupted on the way.
+
+Thu Dec 2 07:08:38 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/console/console.c (setattr): should retry on EINTR.
+ [ruby-dev:42666]
+
+Thu Dec 2 02:30:50 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/http.rb: fixed positional wording to match revised order.
+
+Thu Dec 2 01:24:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/lib/json/common.rb: don't use iconv on 1.9.
+ patched by Shota Fukumori [ruby-core:33164]
+
+Thu Dec 2 01:02:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json: Update github/flori/json from 1.4.2+ to
+ e22b2f2bdfe6a9b0. this fixes some bugs.
+
+Thu Dec 2 00:05:44 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb: improve rdoc.
+ This change the order of chapter because such overview should
+ begin with simple examples.
+ patched by Eric Hodel [ruby-core:33469]
+
+Wed Dec 1 22:01:49 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (Init_Numeric): fixed a potential bug when using bccwin32
+ ruby with Microsoft's dll, though we already gave up of supporting
+ bccwin32. [ruby-core:33503]
+
+Wed Dec 1 21:43:21 2010 Tanaka Akira <akr@fsij.org>
+
+ * array.c: parenthesize macro arguments.
+
+Wed Dec 1 21:41:57 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/socket/test_addrinfo.rb: extract Errno::EADDRINUSE as a method.
+
+ * test/socket/test_socket.rb: ditto.
+
+Wed Dec 1 15:08:32 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/openssl/test_ssl.rb (test_not_started_session): non socket
+ argument of SSLSocket.new is not supported on Windows.
+
+Wed Dec 1 14:36:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_memhash): zero-filled strings should return
+ different values. [ruby-core:33500]
+
+Wed Dec 1 14:27:49 2010 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 2.0.0 r5952.
+ * test/minitest/*.rb: ditto.
+ * lib/test/unit.rb: Compatibility fix for minitest changes.
+
+Wed Dec 1 10:16:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): fix typo (not 0xFD but 0xFE).
+
+Wed Dec 1 09:28:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c: Follow .gnu_debuglink section.
+ A user of distribution provided ruby will see line
+ info if s/he has a debug package for ruby.
+ patched by Shinichiro Hamaji [ruby-dev:42655]
+
+Wed Dec 1 01:29:15 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): inspect as a dummy encoding string
+ when a UTF-16/32 (not BE/LE) string does not have a BOM.
+ Unicode and some RFCs say that a string labeled as UTF-16/32
+ doesn't have a BOM, it should be considered big endian.
+ But many Windows programs generates little endian UTF-16
+ strings without a BOM. So String#inspect treats a string
+ labeled UTF-16/32 without a BOM as a dummy encoding string.
+ patched by Martin Duerst. [ruby-core:33461]
+
+Tue Nov 30 17:04:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c (parse_debug_line_cu): ignore DW_LNE_set_discriminator.
+ To ignore, it needs to read a single unsigned LEB128 integer.
+
+Tue Nov 30 16:29:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_dump.c: undef HAVE_BACKTRACE when the OS is FreeBSD (in other
+ words backtrace() is libexecinfo) and it is optimized.
+ This temporary hack may be also applied to other libexecinfo
+ environments.
+
+Tue Nov 30 16:23:23 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb: improve rdoc.
+ patched by Eric Hodel ref #4100
+
+Tue Nov 30 12:23:52 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_read): read only 1 byte at once on console.
+ workaround of Windows bug. see [ruby-core:33460].
+ this is not the final solution.
+
+Tue Nov 30 11:39:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb: improve rdoc.
+ patched by mathew murphy [ruby-core:33472] ref #4100
+
+Tue Nov 30 05:03:44 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/uri/common.rb (encode_www_form, encode_www_form_component):
+ Improve English in documentation.
+
+ * ext/openssl/ossl_ssl.c (ssl_version=, ciphers=): Document
+ #ssl_version=, add documentation for #ciphers=.
+
+Mon Nov 29 22:55:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/uri/common.rb (URI::WFKV_): get rid of backtrack explosion
+ by nested repeat operators. [ruby-core:33464]
+
+Mon Nov 29 22:53:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (scriptbin.mk): fix generated rules.
+
+ * win32/win32.c (rb_w32_write_console): fix argument type.
+
+Mon Nov 29 21:12:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-forward-sexp): stop after literal hash
+ key labels.
+
+ * misc/ruby-mode.el (ruby-font-lock-keywords): highlight literal
+ hash key labels as symbols.
+
+Mon Nov 29 18:31:31 2010 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * test/ruby/test_transcode.rb (test_unicode_public_review_issue_121):
+ - Removed commented-out options that are no longer under discussion.
+ - Added two more tests for forthcomming clarifications.
+
+Mon Nov 29 14:31:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_isatty): use GetConsoleMode() to determine the
+ fd is console or not, just like rb_w32_write_console(). [experimental]
+
+Mon Nov 29 14:19:40 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h (rb_w32_write_console): wrong prototype.
+
+Mon Nov 29 14:10:55 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_write_console): fixed indentation.
+
+Sun Nov 28 22:13:39 2010 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (NATIVE_MUTEX_LOCK_DEBUG): move and use it.
+
+ * ChangeLog: fix my timezone.
+
+Mon Nov 28 21:58:58 2010 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c: remove pthread_atfork().
+
+Mon Nov 28 21:54:22 2010 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (native_cond_*): Check return code.
+ (Some OSes except Linux return error code).
+
+Sun Nov 28 21:46:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (thread_start_func_1): initialize native thread
+ data immediately before starting.
+
+Sun Nov 28 14:56:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (struct argf): make lineno long, and reorder members.
+
+Sun Nov 28 14:55:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_win32.c (gvl_release, gvl_init): suppress warnings.
+
+Sun Nov 28 14:48:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (gvl_release, gvl_init): suppress warnings.
+
+ * vm_core.h (rb_vm_gvl_destroy): add prototype.
+
+Sun Nov 28 14:46:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (gvl_reinit): register atfork handler only in
+ the parent process, to get rid of dead lock.
+
+Sun Nov 28 12:23:57 2010 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c, vm_core.h: make gvl_acquire/release/init/destruct
+ APIs to modularize GVL implementation.
+
+ * thread_pthread.c, thread_pthread.h: Two GVL implementations.
+ (1) Simple locking GVL which is same as existing GVL.
+ (2) Wake-up queued threads. The wake-up order is simple FIFO.
+ (We can make several queues to support exact priorities, however
+ this causes some issues such as priority inversion and so on.)
+ This impl. prevents spin-loop (*1) caused on SMP environments.
+ *1: Only one Ruby thread acquires GVL again and again.
+ Bug #2359 [ruby-core:26694]
+
+ * thread_win32.c, thread_win32.h: Using simple lock
+ not by CRITICAL_SECTION but by Mutex.
+ Bug #3890 [ruby-dev:42315]
+
+ * vm.c (ruby_vm_destruct): ditto.
+
+Sun Nov 28 04:40:00 2010 Luis Lavena <luislavena@gmail.com>
+
+ * io.c (io_fwrite): use rb_w32_write_console under Windows.
+
+ * win32/win32.c (rb_w32_write_console): added to write to write
+ Unicode using WriteConsoleW for stdout/stderr. [ruby-core:33166]
+
+Sun Nov 28 03:58:47 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb: improve rdoc.
+ patched by Mike Perham [ruby-core:33433]
+
+Sat Nov 27 19:12:10 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c: parenthesize macro arguments.
+
+Sat Nov 27 18:08:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (leap_year_v_p): fixed typo. [ruby-dev:42631]
+
+Sat Nov 27 17:57:08 2010 Tanaka Akira <akr@fsij.org>
+
+ * resolv.rb (Resolv::DNS): use the same DNS server when retry using
+ TCP. reported by Julian Mehnle. [ruby-core:32970]
+
+Sat Nov 27 15:45:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_dump.c (rb_vm_bugreport): see CrashReport log on Mac OS X.
+
+ * configure.in: link addr2line only for ELF.
+
+Sat Nov 27 13:58:55 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser#candidate): : was missing. Thanks,
+ Shota Fukumori. [ruby-dev:42634]
+
+Sat Nov 27 12:07:05 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * man/ruby.1: Ruby man page from Arthur Gunn in [ruby-core:33412]
+
+Sat Nov 27 11:29:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser#candidate): get rid of 1.9 syntax
+ so that BASERUBY can be 1.8.
+
+Sat Nov 27 08:16:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * addr2line.c (rb_dump_backtrace_with_lines): should close fd on
+ edge case.
+
+Fri Nov 26 13:33:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c: apply a patch from shinichiro.h.
+
+Fri Nov 26 12:21:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * addr2line.c: added to show source filename and line number of
+ functions in backtrace. [ruby-dev:42625]
+ a patch from shinichiro.h <shinichiro.hamaji AT gmail.com>
+
+ * addr2line.h: ditto.
+
+ * common.mk: add addr2line.$(OBJEXT).
+
+ * configure.in: check dl_iterate_phdr.
+
+ * vm_dump.c (rb_vm_bugreport): use rb_dump_backtrace_with_lines in
+ addr2line.c when the binary is ELF.
+
+Fri Nov 26 12:12:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regcomp.c (setup_tree): restart setup_tree() for a node whose
+ AnchorNode's type is ANCHOR_PREC_BEHIND or ANCHOR_PREC_BEHIND_NOT
+ and divide_look_behind_alternatives() divided it to NT_ALT or
+ NT_LIST. [ruby-core:33370]
+
+Fri Nov 26 11:40:11 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vm_dump.c (dump_thread): get only required rights of the target
+ thread because THREAD_ALL_ACCESS causes an access error on XP.
+ reported by Masaya TARUI via IRC.
+
+Fri Nov 26 11:09:07 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vm_dump.c (dump_thread): show the displacement from the beginning
+ of the symbol.
+
+Fri Nov 26 10:48:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vm_dump.c (dump_thread): follow the output of glibc.
+ see [ruby-dev:42627]
+
+Fri Nov 26 09:48:45 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * re.c (rb_reg_initialize_str): should succeed the taint status from
+ the origin. [ruby-core:33338]
+
+Fri Nov 26 09:32:37 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vm_dump.c (dump_thread): seems to be necessary the 3rd argument of
+ SymGetLineFromAddr64(), even though MSDN says it can be zero.
+
+Fri Nov 26 09:03:38 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regcomp.c (onig_is_prelude): added to check whether ruby is still
+ in prelude (or other boot processes) or not.
+
+ * regcomp.c (optimize_node_left): use onig_is_prelude for printing.
+
+ * regcomp.c (set_optimize_info_from_tree): ditto.
+
+ * regcomp.c (onig_compile): ditto.
+
+ * regcomp.c (print_compiled_byte_code_list): print its address.
+
+ * regcomp.c (print_indent_tree): print its contents tree of
+ ANCHOR_PREC_READ(_NOT) and ANCHOR_PREC_BEHIND(_NOT).
+
+Thu Nov 25 23:10:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regcomp.c (print_distance_range): use PRIuSIZE.
+
+ * regcomp.c (print_optimize_info): use %ld because the type of
+ calculated value of integers is long.
+
+ * regexec.c (onig_print_compiled_byte_code): add prototype.
+
+ * regexec.c (match_at): add 2nd argument.
+
+Thu Nov 25 10:29:55 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/callback/mkcallback.rb (gencallback): shouldn't assume that
+ VALUE is the same size with long.
+
+Thu Nov 25 10:03:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/win32ole/test_err_in_callback.rb (teardown): remove tmp file
+ only when it exists.
+
+Thu Nov 25 01:38:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/big5-hkscs-tbl.rb: Update table as HKSCS-2008.
+ patched by oCameLo oTnTh [ruby-core:33256]
+
+ * enc/big5.c: add alias Big5-HKSCS:2008 to Big5-HKSCS.
+
+Wed Nov 24 15:18:07 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vsnprintf (BSD_vfprintf): use QUADINT macro only when _HAVE_SANE_QUAD_
+ macro is defined.
+
+Wed Nov 24 12:47:16 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vsnprintf (BSD_vfprintf): added VC++ compatible size specifications
+ (I, I32, I64).
+
+Wed Nov 24 11:19:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): treat UTF-16 and UTF-32 as BE or LE.
+
+Wed Nov 24 06:35:32 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/utf_16_32.trans: add the UTF-32 converter.
+
+Wed Nov 24 05:40:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+Wed Nov 24 06:13:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (filecp, wstr_to_mbstr, mbstr_to_wstr):
+ refactored.
+
+Wed Nov 24 05:40:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/utf_16_32.trans: add a converter from UTF-8 to UTF-16.
+
+Wed Nov 24 03:21:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/utf_16_32.trans: raise error on unpaired upper
+ surrogates.
+
+Wed Nov 24 01:40:23 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/utf_16_32.h: add UTF-16 and UTF-32 as a dummy encoding.
+
+ * enc/trans/utf_16_32.trans: add a converter from UTF-16 to UTF-8.
+
+Tue Nov 23 21:59:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (wlink, rb_w32_getppid): use typedef instead of
+ repeating complicated function prototypes.
+
+Tue Nov 23 18:54:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (rb_thread_mark): should mark self in control
+ frames. [ruby-core:33289]
+
+Tue Nov 23 07:57:31 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/delta/parser.{ry,rb}: fixed a bug of token scanner.
+
+Tue Nov 23 07:29:24 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c, rational.c ({nucomp,nurat}_expt): added a check.
+
+Tue Nov 23 07:27:27 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (daynum): should be private.
+
+Tue Nov 23 07:22:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ChangeLog (change-log-indent-text): hanging indent.
+
+Tue Nov 23 06:30:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (SITE_DIR, VENDOR_DIR),
+ version.c (ruby_initial_load_paths): exclude directories that
+ are configured without them from $LOAD_PATH. [ruby-core:33267]
+
+ * configure.in (rubylibprefix): No ruby, No libprefix.
+
+Tue Nov 23 01:05:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vsnprintf.c (BSD_vfprintf): don't output floating point
+ when the precision is 0. [ruby-dev:42615]
+
+Mon Nov 22 21:30:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_inspect): fix for ascii-compatible external
+ encoding and different encoding string. [ruby-core:33283]
+
+Mon Nov 22 18:45:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): should not duplicate rules.
+ bug fix of r29842.
+
+Mon Nov 22 18:04:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/big5.c: split CP950 from Big5.
+
+ * enc/big5.c: split CP951 from Big5-HKSCS.
+
+ * enc/trans/big5.trans: import conversion table of Big5, Big5-HKSCS,
+ CP950, and CP951 from ICU. they need fallback conversions.
+ ref [ruby-core:33256]
+ http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/
+
+ * tool/transcode-tblgen.rb (import_ucm): add to import ucm files.
+
+Mon Nov 22 18:33:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_inspect): append for each chars instead of bulk
+ copy if encoding conversion is needed. [ruby-core:33283]
+
+Mon Nov 22 14:22:45 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * time.c (time_zone): use rb_locale_str_new_cstr to set encoding
+ as locale and convert its content to internal encoding.
+ [ruby-core:33278]
+
+Mon Nov 22 11:58:11 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_concat): set ENC_CODERANGE_VALID when the
+ receiver is 7BIT and the argument is non ASCII.
+
+Mon Nov 22 01:48:58 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb: some improvements for performance.
+
+Sat Nov 20 07:45:50 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/mkmf.rb: adding compilation support for ObjC/ObjC++ extensions.
+ Thanks Scott Gonyea! [ruby-core:33260]
+
+Sat Nov 20 01:57:55 2010 Akio Tajima <artonx@yahoo.co.jp>
+
+ * common.mk: add dependency(insns.inc) to compile.obj
+
+Fri Nov 19 23:05:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (insns_rules.mk): remove extra backslash.
+
+ * cygwin/GNUmakefile.in, win32/Makefile.sub (clean): rc files are
+ made at compile time, so should be removed by clean.
+
+Fri Nov 19 22:09:46 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_core.rb
+ (Tester#test_pretty_format_long_text_finite): skip a test that
+ uses long string on small memory system. [ruby-dev:42599]
+
+Fri Nov 19 21:07:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb: shell completion support for zsh. based on
+ <http://d.hatena.ne.jp/rubikitch/20071002/zshcomplete>
+
+ * lib/optparse.rb: shell completion support for bash.
+
+Fri Nov 19 00:00:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cygwin/GNUmakefile.in (SCRIPTPROGRAMS): no needs on cygwin.
+
+ * win32/Makefile.sub (scriptbin): create script binaries.
+
+Thu Nov 18 23:21:23 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/formatters/pretty.rb (REXML::Formatters::Pretty#wrap):
+ REXML::Formatters::Pretty#wrap used a recursive method call to
+ format text. This switches it to use an iterative approach.
+ [ruby-core:33245]
+ Patch by Jeremy Evans. Thanks!!!
+
+ * test/rexml/test_core.rb: add a test for it.
+
+Thu Nov 18 22:58:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/io.h (rb_io_buffer_t): extract from rb_io_t.
+
+Thu Nov 18 07:37:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (reconfig): force reconfigure with previous options.
+
+ * common.mk (showconfig): show configure flags, like as
+ `config.status --config' generated by recent autoconf.
+
+Thu Nov 18 07:16:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * missing/langinfo.c (strncasecmp): get rid of redefinition.
+
+Thu Nov 18 00:02:17 2010 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Upgrading output encoding with ASCII content
+ as needed. [ruby-core:33229]
+
+Wed Nov 17 23:19:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/configure.bat: remove quotes from arguments to be quoted.
+
+ * lib/mkmf.rb (create_makefile): use forward slashes in messages.
+
+ * lib/mkmf.rb (create_makefile): make extension libraries messages
+ brief.
+
+ * win32/Makefile.sub (MAKEDIRS): should not include silent flag.
+
+ * common.mk (ext/ripper/ripper.c, ext/json/parser/parser.c): pass
+ Q and ECHO. [ruby-core:33226]
+
+Wed Nov 17 16:09:52 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/test_tracer.rb: new test case.
+ minimal regression test for r29280.
+
+Wed Nov 17 16:04:23 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/envutil.rb (Test::Unit::Assersions#assert_warn):
+ new assertion to assert that a particular warning message is
+ displayed.
+ forward port from branches/ruby_1_9_2@29795.
+
+Wed Nov 17 15:16:48 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regint.h (OnigOpInfoType): constify name.
+
+ * regcomp.c (op2name): constify return value.
+
+ * regcomp.c (onig_print_compiled_byte_code): use PRIuPTR and
+ uintptr_t to clean warnings.
+
+ * regcomp.c (print_indent_tree): use PRIxPTR and intptr_t.
+
+ * regexec.c (match_at): use PRIdPTR and intptr_t.
+
+Wed Nov 17 09:49:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/shift_jis.c (property_name_to_ctype): fix memory leak.
+
+ * enc/euc_jp.c (property_name_to_ctype): ditto.
+
+Wed Nov 17 08:54:04 2010 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Upgrading output encoding as needed. [ruby-core:33135]
+
+Tue Nov 16 22:30:39 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_insnhelper.c (vm_throw): remove fear of undefined behavior :-)
+ Coverity Scan found this bug.
+
+Tue Nov 16 09:33:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/lib/bigdecimal/util.rb (to_digits): avoid unused
+ variables warning, reported by Aaron Patterson.
+
+Tue Nov 16 06:39:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (PACK_ITEM_ADJUST): return nil not result array and yield
+ values if block is given. [ruby-core:33193]
+
+Tue Nov 16 00:21:20 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * regparse.c (and_cclass, or_cclass): fix memory leak. Coverity Scan
+ found this bug. [ruby-dev:42579]
+
+Tue Nov 16 00:07:32 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * gc.c (assign_heap_slot): fix fear of memory leak and memory
+ violation. Coverity Scan found this bug.
+
+Mon Nov 15 23:54:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * eval_intern.h (CHECK_STACK_OVERFLOW): it was not intended to add
+ size_t to a pointer typed VALUE*. Coverity Scan found this defect.
+
+Mon Nov 15 23:41:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (iseq_set_exception_local_table, iseq_set_local_table,
+ rb_iseq_build_from_ary): fix type inconsistency (which is benign
+ because sizeof(ID) == sizeof(ID*), though). Coverity Scan found
+ these bugs.
+
+Mon Nov 15 22:47:27 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_eval.c (rb_funcall): ensure va_end after va_init_list. Coverity
+ Scan found this bug.
+
+Mon Nov 15 08:36:12 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/racc/parser.rb (do_parse, yyparse): using class eval to define
+ method and avoid __send__.
+
+Mon Nov 15 06:43:48 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * etc/openssl/ossl_ssl.c (ossl_ssl_get_cert): raise exception if
+ pointer is invalid. Thanks Ippei Obayashi! [ruby-dev:42573]
+
+Sun Nov 14 17:57:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/Makefile.in (distclean): should not remove sources which are
+ distributed in tarball.
+
+Sun Nov 14 16:48:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_set_token_info): turn on/off with directives.
+ [ruby-core:25442]
+
+Sun Nov 14 12:05:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_readlines): forward to current_file for arguments
+ check. http://twitter.com/nagachika/status/3634254856589312
+
+Sun Nov 14 08:48:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/setup.mak (-basic-vars-, -runtime-): suppress trailing
+ space and compiler command line.
+
+Sun Nov 14 04:22:32 2010 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/setup (config.h): Added HAVE_LABS and HAVE_LLABS to config.h.
+
+ * symbian/configure.bat: Changed packaging version in line with API
+ style 3 versioning.
+
+Sat Nov 13 16:37:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (showflags, help): emit messages at once.
+
+ * win32/Makefile.sub (MSG, EOM): remove surrounding quotes by %~I.
+
+Sat Nov 13 01:31:30 2010 Akio Tajima <artonx@yahoo.co.jp>
+
+ * win32/Makefile.sub: reorder variable End Of Message (don't display it)
+
+Fri Nov 12 20:52:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (showflags, help): use caret to quote leading spaces on
+ Windows.
+
+ * Makefile.in, common.mk, cygwin/GNUmakefile.in, enc/depend,
+ ext/ripper/depend, lib/mkmf.rb, win32/Makefile.sub: caddle up.
+
+Fri Nov 12 16:35:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: support C level backtrace information on FreeBSD.
+ When devel/libexecinfo is installed on FreeBSD, now ruby
+ can show C level backtrace information.
+ http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/libexecinfo/
+
+Fri Nov 12 09:58:30 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/setup.mak: use findstr.exe instead of find.exe, because all
+ target build platforms should have findstr.exe, and, find.exe often
+ means another command such as cygwin's.
+
+Fri Nov 12 00:30:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): need PRI_LL_PREFIX.
+
+Thu Nov 11 23:38:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: ANSI C-conforming const and volatile are mandatory
+
+ * configure.in (AC_C_CONST, AC_C_INLINE, AC_C_VOLATILE): check
+ before used in other checks.
+
+ * configure.in (RUBY_CHECK_PRINTF_PREFIX): should not break from
+ RUBY_WERROR_FLAG, so that ac_c_werror_flag gets restored.
+
+Thu Nov 11 23:04:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (warn_deprecated): show caller position.
+
+Thu Nov 11 23:03:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_close): untie tied io before closing.
+
+ * io.c (argf_write): add ARGF.write and so on.
+
+ * io.c (argf_read_nonblock): add ARGF.read_nonblock.
+
+Thu Nov 11 21:49:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/stats.rb (RDoc#print): get rid of NaN.
+
+Thu Nov 11 21:47:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (SHOWFLAGS): show compile flags.
+
+ * common.mk: hide long command lines by default. verbose-mode is
+ turned on by V=1 as before.
+ http://jarp.does.notwork.org/diary/200605b.html#200605121
+
+Thu Nov 11 21:32:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (try_func): accept variable address.
+
+ * ext/win32ole/extconf.rb: libuuid is needed on cygwin.
+
+Thu Nov 11 21:24:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): use cygwin_conv_path on cygwin 1.7 or
+ later.
+
+ * ruby.c (push_include_cygwin): ditto.
+
+Thu Nov 11 20:49:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (PRI_LL_PREFIX): format type specifier for
+ LONG_LONG may vary on platforms.
+
+Thu Nov 11 20:45:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (SYMBOL_PREFIX): separate from EXPORT_PREFIX.
+
+ * win32/mkexports.rb (Exports#each_export): use SYMBOL_PREFIX.
+
+Wed Nov 10 07:20:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cygwin/GNUmakefile.in (scriptbin): make executable file from
+ scripts with stub.
+
+ * ruby.c (load_file_internal): assume xflag for exe file as well
+ as no-shebang file.
+
+ * tool/rbinstall.rb: install script programs.
+
+ * win32/mkexports.rb (Exports#initialize): alias ruby_sysinit for
+ stub.
+
+ * win32/stub.c: stub for scripts. [EXPERIMENTAL]
+
+Tue Nov 9 21:57:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (init_funcname): allocate and build initialization
+ funciton name at once.
+
+Tue Nov 9 21:14:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (AC_FUNC_GETPGRP, AC_FUNC_SETPGRP): no need when
+ not used.
+
+ * configure.in (EXPORT_PREFIX): check generic prefix.
+
+Tue Nov 9 13:24:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regenc.c (onigenc_minimum_property_name_to_ctype):
+ \p{...} should be case insensitive. [ruby-core:33000]
+
+ * regenc.c (onigenc_property_list_add_property):
+ ditto.
+
+ * enc/euc_jp.c (init_property_list, property_name_to_ctype):
+ to lowercase property names.
+
+ * enc/shift_jis.c (init_property_list, property_name_to_ctype):
+ ditto.
+
+Tue Nov 9 13:29:36 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (overlapped_socket_io): get rid of a warning of 64bit
+ mingw.
+
+Tue Nov 9 10:44:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * util.c (ruby_strtod): this code uses FPU's rounding system.
+ But x86's FPU calculates double precision floating-point
+ numbers in 80bit precision, so it fails to round the value.
+ So ensure the value is assigned a variable. [ruby-dev:42551]
+ see also [ruby-math:00802]
+ http://www.shudo.net/java-grandprix99/strictfp/
+
+Tue Nov 9 07:30:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_syserr_new): new function to make SystemCallError
+ instance without errno. [EXPERIMENTAL]
+
+ * error.c (rb_syserr_fail, rb_mod_syserr_fail): ditto.
+
+Tue Nov 9 05:54:57 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/*.rb: Remove unused variable warnings.
+ Patch by Run Paint [ruby-core:30991]
+
+ * lib/rubygems/*, lib/rdoc/*.rb, lib/rake/*.rb: ditto
+
+Mon Nov 8 18:26:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * util.c (ruby_hdtoa): fix type cast and bufsize.
+
+Mon Nov 8 15:40:56 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vsnprintf.c (BSD_vfprintf): fix precision specifier doesn't
+ work well on %f. [ruby-dev:42552]
+
+Mon Nov 8 14:41:40 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (get_wsa_extension_function): typos.
+
+Mon Nov 8 13:41:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/enc-unicode.rb,
+ enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
+ enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
+ Add Age property to regexp. [ruby-core:33019]
+ patched by Ammar Ali, tested by Run Paint Run Run
+
+Mon Nov 8 12:16:39 2010 Ben Walton <bwalton@artsci.utoronto.ca>
+
+ * configure.in: support -h for solaris linker when gcc not used
+
+Mon Nov 8 11:47:39 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (finish_overlapped_socket): refactoring.
+
+Mon Nov 8 11:02:21 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (get_proc_address): refactoring.
+
+ * win32/win32.c (get_wsa_exetinsion_function): refactoring.
+
+Mon Nov 8 09:45:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/gbk-tbl.rb: Add euro sign. [ruby-core:33094]
+ CP936, which is de facto definition of GBK, has it.
+ http://msdn.microsoft.com/en-us/goglobal/cc305153.aspx
+
+Mon Nov 8 07:26:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: check only the first symbol to get rid of
+ duplication. [ruby-core:33084] #4031
+
+Sun Nov 7 10:13:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (NM): check on all platforms. #4031
+
+Sun Nov 7 06:16:33 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * test/openssl/test_ocsp.rb: adding test for r29699. Thanks Elise
+ Huard! [ruby-core:32460]
+
+Sat Nov 6 07:33:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rb_cv_export_prefix): check for prefixed
+ underscore of exported symbols
+
+ * tool/rbinstall.rb (bin-comm): prepend prolog shell script if
+ necessary.
+
+ * configure.in (LIBRUBY_RELATIVE): use rpath token expansion.
+
+Sat Nov 6 07:24:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/ruby.pc.in (arch, sitearch): reordered.
+
+ * configure.in: keep failed file.
+
+Sat Nov 6 07:03:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_fork_err): save errinfo before fdopen.
+
+Sat Nov 6 00:43:58 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/openssl/ossl_ocsp.c (ossl_ocspcid_initialize): an optional
+ parameter may be used to specify the OpenSSL::OCSP::CertificateId on
+ initialization. Thanks Elise Huard! [ruby-core:32460]
+
+Fri Nov 5 12:23:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_{process,system}.rb (test_fallback_to_sh):
+ meaningless and wrong tests where /bin/sh does not exist.
+
+ * process.c (proc_spawn_v): should spawn, not exec.
+
+Fri Nov 5 01:21:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (proc_exec_v, proc_spawn_v): try to execute with sh if
+ no shebang. [ruby-core:32745] [EXPERIMENTAL]
+
+Fri Nov 5 00:39:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_readlines, rb_io_each_line): limit must not be zero.
+ a patch from Tomoyuki Chikanaga at [ruby-dev:42538]. #4024
+
+Fri Nov 5 00:14:15 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/fiddle/extconf.rb: fixing ffi library location on windows.
+ Thanks Usa! [ruby-core:32930]
+
+Thu Nov 4 20:04:44 2010 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_newobj): force garbage_collect() if GC.stress == true.
+
+Thu Nov 4 19:48:22 2010 Koichi Sasada <ko1@atdot.net>
+
+ * ChangeLog: missed to write a last ChangeLog.
+
+ * gc.c (gc_finalize_deferred): removed.
+
+ * gc.c (rb_gc_finalize_deferred): Do not invoke a free_unused_heaps().
+
+Thu Nov 4 19:45:27 2010 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (run_final): do not need argument obj.
+
+Thu Nov 4 19:26:10 2010 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (before_gc_sweep): fix commit miss.
+
+Thu Nov 4 19:20:46 2010 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (after_gc_sweep, before_gc_sweep):
+ invoke rb_sweep_method_entry() as soon as possible.
+
+Thu Nov 4 19:13:58 2010 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (after_gc_sweep, slot_sweep): finalizers should be invoked
+ as soon as possible.
+
+Thu Nov 4 10:30:40 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * configure.in (--with-valgrind): Now this option is default on.
+ You can still explicitly disable this feature by specifying
+ --without-valgrind.
+
+Thu Nov 4 02:06:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * cont.c (fiber_t_alloc): raise an error when fiber is going to be
+ initialized twice. [ruby-dev:42524]
+
+Thu Nov 4 02:04:25 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * cont.c (rb_fiber_resume): raise an "double resume" error when root
+ fiber is going to be resumed. [ruby-dev:42523]
+
+Wed Nov 3 14:17:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/ostruct.rb (OpenStruct#delete_field): also undefine
+ accessor methods. [ruby-core:33010]
+
+Wed Nov 3 14:13:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_enc_cr_str_buf_cat): concatenation of valid
+ encoding string and invalid encoding string should result
+ invalid encoding. [ruby-core:33027]
+
+Wed Nov 3 08:58:59 2010 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c, vm.c, vm_core.h: remove USE_VALUE_CACHE option.
+
+Wed Nov 3 07:47:25 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/irb/ruby-lex.rb (RubyLex#identify_string): parse multiple
+ regex options. a patch from Heesob Park in [ruby-core:32988].
+
+Wed Nov 3 07:33:57 2010 Tanaka Akira <akr@fsij.org>
+
+ * vm_method.c (rb_clear_cache_by_class): just return if the class has
+ no method. reported by Eric Wong. [ruby-core:32689]
+
+Tue Nov 2 22:50:25 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/visitor.rb (initialize): push accessor
+ methods to subclass that actually uses them.
+
+Tue Nov 2 22:47:08 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/visitor.rb (accept): switch to
+ a dispatch cache rather than case / when statement.
+
+Tue Nov 2 21:46:52 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * NEWS: fix a typo.
+
+Tue Nov 2 20:10:32 2010 Tajima Akio <artonx@yahoo.co.jp>
+
+ * test/rake/test_tasks.rb: clear env var which is used by the test.
+ [ruby-dev:42508]
+
+Tue Nov 2 00:25:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/extconf.rb: win64 is just same with win32 about socket.
+ notice: but wince is not same.
+
+Mon Nov 1 21:25:57 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * main.c: <stdlib.h> is needed, to introduce the getenv(3)
+ prototype declaration. Without it a C compiler shall infer
+ the getenv type as "int getenv(...);", but this is totally
+ wrong, especially when your machine's sizeof(int) and
+ sizeof(char*) differs. On such environment a return value
+ of getenv(3), which is in fact a char*, might first casted
+ into a int (loses data here), and then casted back to char*
+ by automatic integral promotion to fit to the prototype of
+ ruby_set_debug_option().
+
+Sun Oct 31 23:27:09 2010 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (finalizer_table, objspace->final.table):
+ Create finalizer_table at Init_heap().
+ Remove all null checks of finalizer_table.
+
+ * gc.c (mark_tbl): skip if no table entries.
+
+ * gc.c (slot_swee): remove useless need_call_final check.
+
+Sun Oct 31 22:32:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_objspace_free): finalizers should be called separately
+ from freeing objspace. [ruby-dev:42479]
+
+Sun Oct 31 22:24:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_cleanup): free current VM and its objspace even
+ when exiting by SystemExit.
+
+Sun Oct 31 22:10:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (new_child_iseq): adjust argument types.
+
+ * iseq.c (prepare_iseq_build, rb_iseq_new),
+ (rb_iseq_new_with_bopt_and_opt, rb_iseq_new_with_opt),
+ (rb_iseq_new_with_bopt): ditto.
+
+ * compile.c (iseq_set_exception_table): suppress warnings.
+
+ * insns.def (putspecialobject, defined): ditto.
+
+ * iseq.c (iseq_load): ditto.
+
+Sun Oct 31 09:30:51 2010 Koichi Sasada <ko1@atdot.net>
+
+ * vm_core.h: some refactoring.
+ - move decl. of rb_compile_option_struct to iseq.h.
+ - define enum iseq_type.
+ - define enum vm_special_object_type.
+
+ * compile.c: some refactoring.
+ - apply above changes.
+ - (struct iseq_link_element): change value of type.
+ - remove unused decl.
+ - fix comment.
+ - rename iseq_build_body and iseq_build_exception to
+ iseq_build_from_ary_body and iseq_build_from_ary_exception.
+
+ * iseq.h: define enum catch_type and enum defined_type.
+
+ * insns.def: apply above changes.
+
+ * iseq.c: define ISEQ_MAJOR_VERSION and ISEQ_MINOR_VERSION.
+
+Sat Oct 30 23:38:59 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/encoding.rb: untabify.
+
+Sat Oct 30 21:06:37 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/encoding.rb: use Ruby native encoding mechanism.
+ [ruby-dev:42464]
+ * lib/rexml/encodings/: remove.
+
+ * lib/rexml/document.rb, lib/rexml/formatters/default.rb,
+ lib/rexml/output.rb, lib/rexml/parseexception.rb,
+ lib/rexml/parsers/baseparser.rb, lib/rexml/source.rb,
+ lib/rexml/xmldecl.rb: use Ruby's native Encoding object.
+
+ * test/rexml/, test/rss/: follow the above encoding changes.
+
+ * NEWS: add REXML's incompatible change about encoding.
+
+Sat Oct 30 17:23:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_strtod): get rid of overflow/underflow as possible.
+
+Sat Oct 30 14:37:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (ruby_pc): erase runtime-defined variables and
+ check if generated pc file is valid.
+
+ * template/ruby.pc.in (DEFFILE): need for mingw.
+
+ * template/ruby.pc.in (LIBRUBY): fix the order.
+
+Sat Oct 30 11:33:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (ruby_pc): ignore missing variables.
+
+ * template/ruby.pc.in: add missing variables for mswin.
+
+Sat Oct 30 10:24:35 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * object.c: Make BasicObject.new accept no parameter.
+ Revert of r26135 [ruby-core:27080], as per [ruby-core:32952].
+
+Sat Oct 30 09:40:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enum.c: use constants in id.h.
+
+Sat Oct 30 09:08:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/fiddle/closure.c (fiddle_closure): embed cif not reference
+ so that the content surely get initialized. [ruby-dev:42480]
+
+Sat Oct 30 07:01:53 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv-replace.rb: suppress warning.
+
+ * lib/open-uri.rb: ditto.
+
+Sat Oct 30 06:32:52 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/pathname/test_pathname.rb (TestPathname#test_grpowned?): the
+ group of the created file is inherited from the parent
+ directory on BSDs and MacOS X. Linux also inherit the group if
+ the setgid bit of the directory is set. It causes the test fail.
+ fixed by Shota Fukumori. [ruby-dev:42458]
+
+Sat Oct 30 05:58:54 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb: retry via TCP if UDP reply is truncated.
+ fixed by Julian Mehnle. [ruby-core:32407]
+
+Sat Oct 30 00:35:13 2010 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c (iseq_s_compile): fix optional argument.
+ a patch from Yutaka HARA [ruby-core:32953] [Ruby 1.9-Bug#4001]
+
+Sat Oct 30 00:24:42 2010 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/objspace.c (memsize_of): take care of
+ T_CLASS/const_tbl.
+ a patch from nagachika <nagachika00@gmail.com> [ruby-dev:42490]
+
+Fri Oct 29 23:32:36 2010 Koichi Sasada <ko1@atdot.net>
+
+ * test/profile_test_all.rb: added.
+ You can use test-all profiler with the following command:
+ RUBY_TEST_ALL_PROFILE=true make test-all
+ This command generates ./test_all_profile and you can analyze
+ which tests consume memories.
+
+ * test/runner.rb: ditto.
+
+Fri Oct 29 10:02:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/enc-unicode.rb,
+ enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
+ enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
+ Add 'Unknown' Script.
+ patched by Run Paint Run Run. [ruby-core:32937] #3998
+
+Fri Oct 29 05:13:34 2010 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/objspace.c (ObjectSpace.memsize_of_all): rename
+ ObjectSpace.total_memsize_of_all_objects() to
+ ObjectSpace.memsize_of_all([klass]).
+ Accept Class object to filter the objects.
+
+ * test/objspace/test_objspace.rb: fix test for above change.
+
+Fri Oct 29 03:04:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_dump): fix expected length. [ruby-core:32935]
+
+Thu Oct 28 23:31:39 2010 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (before_gc_sweep, run_final): fix decrement timing of final_num.
+
+Thu Oct 28 20:11:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/enc-unicode.rb,
+ enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
+ enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
+ Update Oniguruma for Unicode 6.
+ patched by Run Paint Run Run. [ruby-core:32923] #3989
+
+Thu Oct 28 20:06:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/oniguruma.h (ONIGENC_CTYPE_SPECIAL_MASK):
+ change mask from 128 to 256. [ruby-core:32931]
+
+Thu Oct 28 12:06:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/webrick/httprequest.rb (read_request_line): extend max
+ length to 2083. This is from Internet Explorer's max uri
+ length. http://support.microsoft.com/kb/208427 [ruby-core:32924]
+
+Thu Oct 28 04:00:08 2010 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (GC.stat): added. [ruby-dev:38607]
+
+ * test/ruby/test_gc.rb: add a test for above.
+
+Thu Oct 28 03:13:06 2010 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace/objspace.c (memsize_of): fix rdoc.
+
+ * ext/objspace/objspace.c (total_memsize_of_all_objects): added.
+
+ * test/objspace/test_objspace.rb:
+ - add a test for ObjectSpace.total_memsize_of_all_objects.
+ - add two tests for ObjectSpace.memsize_of (for nil and Fixnum).
+
+Wed Oct 27 23:55:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (Init_iconv): warn deprecated use.
+
+Wed Oct 27 18:50:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bignum.c (rb_big2long, rb_big2ulong): rb2ulong() returns VALUE, but
+ its real range is ulong. So, if the size of VALUE is bigger than
+ ulong, upper bits are always zero even if the actual value is
+ negative.
+ fixed #3490
+
+Wed Oct 27 18:27:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_io.rb (TestIO#pipe): should close write end of pipe
+ before closing read end, to get rid of timing problem.
+
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#pipe): ditto.
+
+Wed Oct 27 18:14:27 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_getppid): support Win64.
+
+Wed Oct 27 15:07:19 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (w32_error): should get error no only once, because
+ the result of the second getting will indicate the error of the
+ first FormatMessage() call.
+
+Wed Oct 27 13:51:25 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_io.rb (TestIO#pipe): need to propagate exceptions
+ in read/write thread. fix r29541.
+
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#pipe): ditto.
+
+Wed Oct 27 12:05:40 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * class.c (clone_const): need to return value. fix r29602.
+
+Wed Oct 27 11:58:58 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/ruby.h (NUM2LONG_internal): add cast to get rid of a
+ non GCC compiler warning. this is intentional type conversion.
+
+Wed Oct 27 09:25:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * cont.c: apply documentation patch by Run Paint Run Run.
+ [ruby-core:32915]
+
+Wed Oct 27 02:12:10 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * object.c (Init_Object), constant.h, variable.c
+ (rb_mod_private_constant, rb_mod_public_constant,
+ set_const_visibility, rb_const_get_0): add Module#public_constant
+ and private_constant. [ruby-dev:39685][ruby-core:32698]
+
+ * test/ruby/test_module.rb: add tests for above.
+
+Wed Oct 27 02:02:54 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * class.c, constant.h, gc.c, method.h, object.c, variable.c,
+ vm_insnhelper.c: use struct rb_constant_entry_t as entry of
+ RCLASS_CONST_TBL. RCLASS_CONST_TBL has contained VALUE of constant
+ directly. Now instead rb_const_entry_t is contained in
+ RCLASS_CONST_TBL, rb_const_entry_t is managed by malloc, and
+ have not only the value itself but also visibility flag.
+ This is another preparation for private constant (see
+ [ruby-dev:39685][ruby-core:32698]).
+
+Wed Oct 27 01:56:34 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * class.c, gc.c, object.c, variable.c, vm_insnhelper.c,
+ include/ruby/ruby.h: separate RCLASS_CONST_TBL from RCLASS_IV_TBL.
+ RCLASS_IV_TBL has contained not only instance variable table but
+ also constant table. Now the two table are separated to
+ RCLASS_CONST_TBL and RCLASS_IV_TBL. This is a preparation for
+ private constant (see [ruby-dev:39685][ruby-core:32698]).
+
+Tue Oct 26 18:51:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/scanf.rb (extract_float): allow 2.e+2 style.
+ [ruby-dev:42452] #3978
+
+Tue Oct 26 18:09:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (ASFLAGS): needs INCFLAGS.
+
+ * configure.in (rb_cv_dynamic_alloca): check if extra source for
+ dynamic size alloca.
+
+ * missing/x86_64-chkstk.s (___chkstk): necessary for alloca of
+ amd64-mingw32msvc-gcc on Ubuntu.
+
+ * thread_win32.c (ruby_alloca_chkstk): check stack overflow
+
+Tue Oct 26 18:04:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/ruby.pc.in (Libs): needs DLDFLAGS.
+
+Tue Oct 26 12:47:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (pkgconfig-data): moved from Makefile.in.
+
+ * tool/rbinstall.rb: install pc file only if non-empty.
+ [ruby-core:32901] #3983
+
+ * win32/Makefile.sub (ruby_pc): create pc file.
+
+Tue Oct 26 09:13:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rb_cv_gcc_atomic_builtins): check for atomic
+ builtins, all are not available in Apple derivative gcc.
+
+Tue Oct 26 00:29:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (pkgconfig-data): create pkg-config metadata file.
+
+ * tool/rbinstall.rb: install pkg-config metadata file.
+
+ * template/ruby.pc.in: template of pkg-config metadata file.
+
+Mon Oct 25 16:38:07 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * signal.c (rb_atomic_t): GCC (of at least recent versions)
+ has ubiquitous support for atomic operations. On that
+ compiler a C program can issue a memory barrier using these
+ dedicated instructions. According to the GCC manual they
+ cargo culted this feature form the Itanium ABI so chances
+ are that other compilers could also support this feature.
+ But so far GCC is the only compiler that I know to have it.
+ Also note that this works on non-Itanium machines.
+
+Mon Oct 25 06:21:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vsnprintf.c (BSD_vfprintf): prec digits fractal part should be
+ appended to 0 if prec is given. [ruby-dev:42453] #3979
+
+Mon Oct 25 02:57:21 2010 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk (run.gdb): Quit gdb on 'make gdb' when
+ no signals are received.
+
+Mon Oct 25 00:25:23 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb: some corrections of documentation.
+
+Sun Oct 24 17:14:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c, gc.c, hash.c, object.c, string.c, struct.c,
+ transcode.c, variable.c, vm.c, vm_insnhelper.c, vm_method.c:
+ replace calls to rb_error_frozen() with rb_check_frozen(). a
+ patch from Run Paint Run Run at [ruby-core:32014]
+
+ * include/ruby/intern.h (rb_check_frozen): optimize.
+ [ruby-core:32878]
+
+Sun Oct 24 15:16:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit::Mini#run): abort if interrupted.
+
+ * lib/test/unit.rb (Test::Unit::Mini#run_test_suites): show the
+ result even when interrupted on the way.
+
+ * lib/test/unit.rb (Test::Unit::Mini#run_test_suites): ensure
+ output sync mode to be restored.
+
+Sun Oct 24 14:11:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_define_method): defined method is run with the default
+ public visibility regardless the visibility context of definition.
+ [ruby-core:30638]
+
+Sun Oct 24 12:08:54 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/test/unit.rb: make test/unit play nicely with the rake test
+ loader. [ruby-core:32864]
+
+Sun Oct 24 00:25:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_rubyoptions.rb (test_segv_test): follow up the
+ change at r29556.
+
+Sat Oct 23 14:39:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb: $extmk should be true for test/runner.
+
+Sat Oct 23 10:55:37 2010 Koichi Sasada <ko1@atdot.net>
+
+ * vm_dump.c (rb_vm_bugreport): fix to add bug outputs.
+ - loaded script ($0)
+ - loaded features ($")
+ - process memory map on Linux (/proc/self/maps)
+
+ * vm_dump.c (rb_vmdebug_stack_dump_raw): fix header message.
+
+Fri Oct 22 14:50:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ assertion message must not be nil.
+
+Fri Oct 22 13:59:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ treat nil case. Please run test-all before commit such change.
+
+Thu Oct 21 23:58:14 2010 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_lazy_sweep): Variable declarations should be at
+ the head of block.
+
+Thu Oct 21 23:56:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (objspace_each_objects, rb_objspace_each_objects): use
+ struct.
+
+ * gc.c (objspace_each_objects): fix return with no value.
+
+Thu Oct 21 23:47:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (dir_initialize): remove useless intermediate variable.
+
+Thu Oct 21 16:07:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_f_select): change rdoc.
+ patched by Eito Katagiri [ruby-core:31805]
+
+Thu Oct 21 15:55:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/webrick/httpauth/digestauth.rb
+ (WEBrick::HTTPAuth::ProxyDigestAuth#check_uri): privated.
+ [ruby-dev:42344]
+
+Thu Oct 21 15:50:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_f_select): add correct rdoc.
+ patched by Dave Thomas [ruby-core:32467]
+
+Thu Oct 21 15:42:01 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/telnet.rb (Net::Telnet#close): added.
+ patched by Erik Hollensbe [ruby-dev:42260] #3830
+
+Thu Oct 21 13:08:00 2010 Narihiro Nakamura <authornari@gmail.com>
+
+ * gc.c (rb_objspace_each_objects): don't lazy sweep in
+ rb_objspace_each_objects. [Bug #3940] [ruby-dev:42369]
+
+Thu Oct 21 00:05:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_io.rb (TestIO#pipe): get rid of deadlock on pipe.
+ a patch from Tomoyuki Chikanaga at [ruby-dev:42435]. #3970
+
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#pipe): ditto.
+
+Wed Oct 20 23:54:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dbm/dbm.c: rdoc based on a patch by mathew meta AT
+ pobox.com, at [ruby-core:32853].
+
+Wed Oct 20 10:47:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * util.c (ruby_strtod): reject 0x1.p+0. [ruby-dev:42432] #3966
+
+Wed Oct 20 10:00:57 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vsnprintf.c (BSD_vfprintf): print floating point on "%#a".
+ [ruby-dev:42431] Bug#3965
+
+Tue Oct 19 19:30:11 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vsnprintf.c (BSD_vfprintf): clear ALT flag for %a.
+ [ruby-core:32841] [ruby-core:32848]
+
+Tue Oct 19 12:19:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vsnprintf.c (BSD_vfprintf): fix over-count of field size.
+
+Tue Oct 19 03:08:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vsnprintf.c (BSD_vfprintf): use HEXPREFIX flag for prefix of %a.
+ [ruby-core:32841]
+
+Mon Oct 18 13:18:01 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/digest.c (rb_digest_class_init): Define
+ Digest::Class.new(). [Feature #3954]
+
+Mon Oct 18 12:58:40 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (pack_pack): refine the document. [ruby-dev:42397]
+ (pack_unpack): ditto.
+
+Mon Oct 18 10:19:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb (transport_request): @socket may be nil.
+ patched by Egbert Eich [ruby-core:32829]
+
+Mon Oct 18 09:57:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * sprintf.c (BSD_vfprintf): wrong padding around prefix and
+ floating point with %a. [ruby-dev:42403] Bug #3956
+
+Sun Oct 17 22:36:33 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/delta.rb: added an rdoc tag.
+
+Sun Oct 17 10:47:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_mod_remove_const): update rdoc.
+ [ruby-core:31957]
+
+Sun Oct 17 10:40:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (rb_define_{class,module}_id_under): register to be
+ marked, which probably are defined and used internally.
+
+Sat Oct 16 11:10:55 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_encoding2cp): set codepage 20936
+ according to GB2312. [Bug #3937] [ruby-core:32758]
+
+Sat Oct 16 10:54:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (CPP): already used in .c.i rule.
+
+ * cygwin/GNUmakefile.in (DLLWRAP, WINDRES): add --driver-name and
+ --preprocessor options explicitly. [ruby-core:32776]
+
+Sat Oct 16 10:06:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/sdbm/_sdbm.c (SEEDUPS, BADMESS): make settable using command
+ line options.
+
+ * ext/sdbm/_sdbm.c (makroom): suppress unused result warning.
+
+ * ext/sdbm/extconf.rb: disable BADMESS, a library should not emit
+ messages directly.
+
+Sat Oct 16 08:39:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (dln_strerror): get English message first, instead of
+ system default. see [ruby-dev:42358].
+
+Sat Oct 16 00:08:00 2010 Koichi Sasada <ko1@atdot.net>
+
+ * hash.c (rb_hash_aref): skip calling "default" method
+ if it is not needed, for speed-up.
+
+Fri Oct 15 23:36:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (NUM2DEVT, DEVT2NUM, PRI_DEVT_PREFIX): fallback to
+ unsigned int.
+
+Fri Oct 15 22:54:46 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_hresult2msg): get English message first,
+ instead of system default. [ruby-core:32765]
+
+Fri Oct 15 22:47:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (VALUE): prefer long over uintptr_t,
+ FIX2LONG expects VALUE to be long at least.
+
+ * include/ruby/ruby.h (FIX2LONG): parenthesize the argument.
+
+Fri Oct 15 20:30:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (dev_t): use RUBY_REPLACE_TYPE.
+
+ * file.c (rb_stat_inspect): use PRI_DEVT_PREFIX.
+
+Fri Oct 15 17:26:57 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * pack.c (pack_pack): simplify comparison of explicit_endian
+ as pointed by nobu.
+
+ * pack.c (pack_unpack): ditto.
+
+Fri Oct 15 16:40:37 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * pack.c (pack_pack): fix more than one modifiers appear in the
+ format string. [ruby-core:32793]
+
+ * pack.c (pack_unpack): ditto.
+
+Thu Oct 14 23:20:42 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_folderitem2_invokeverb.rb: refactoring.
+
+Thu Oct 14 22:18:29 2010 Koichi Sasada <ko1@atdot.net>
+
+ * insns.def, iseq.c, vm_insnhelper.c: rename variable name
+ (ip -> iseq).
+
+Thu Oct 14 20:41:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * pack.c (pack_pack): support endian modifiers: < and >.
+ [ruby-dev:42376] Feature #3491
+
+ * pack.c (pack_unpack): ditto.
+
+Thu Oct 14 20:50:51 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (reg_get_val): expand environment in
+ the pathname. [Bug #3907]
+
+Thu Oct 14 07:35:07 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (DEVT2NUM): added. Size of dev_t is depend on the
+ environment even if POSIX defines dev_t as unsigned integer.
+ For example, OpenVMS, 64bit Solaris 9, and NetBSD 6 defines
+ dev_t as 64bit unsigned integer.
+
+ * file.c (rb_stat_dev): use DEVT2NUM.
+
+ * file.c (rb_stat_dev_major): dev_t is not long. major(3)'s return
+ value is int.
+
+ * file.c (rb_stat_dev_minor): dev_t is not long. minor(3)'s return
+ value is int.
+
+ * configure.in: check size of dev_t.
+
+Thu Oct 14 07:22:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_and, rb_ary_or), class.c (rb_mod_init_copy),
+ gc.c (undefine_final), time.c (time_mload): get rid of
+ type-punning casts.
+
+Thu Oct 14 04:16:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (ruby_float_step): fix Numeric#step with infinity unit
+ doesn't works well. [ruby-core:32779]
+
+Wed Oct 13 23:16:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/enc-unicode.rb: get rid of lots of warnings.
+
+ * iseq.c (insn_operand_intern, rb_iseq_disasm): fix format specifiers.
+
+ * vm.c (thread_free): ditto.
+
+ * numeric.c (check_uint): get rid of overflow on LLP64 platforms.
+
+ * insns.def (opt_case_dispatch): use st_data_t.
+
+Wed Oct 13 22:32:34 2010 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/util.rb (CGI::unescape): bugfix to unescape the multibyte
+ string. Thanks nobu and tDiary dev members. [Bug #3909]
+
+Wed Oct 13 21:13:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (int_chr): raise error when the value is negative.
+
+Wed Oct 13 19:24:08 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * vm.c (ruby_vm_destruct): This function type was wrong; correct to the prototype.
+
+Wed Oct 13 14:58:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (rb_num_to_uint): fix 32bit logic.
+
+Wed Oct 13 12:53:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (rb_num_to_uint): added to check the range of arguments.
+ Mainly for negative value with NUM2UINT on 32bit environment.
+
+ * string.c (rb_str_concat): use rb_num_to_uint.
+
+Wed Oct 13 12:10:02 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (w32_error): get English message first, instead
+ of system default. see [ruby-core:32765].
+ [experimental]
+
+Wed Oct 13 11:04:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * debug.c (ruby_set_debug_option): define always for binary
+ compatibility with debug env enabled binary.
+
+ * signal.c (ruby_enable_coredump): ditto.
+
+Wed Oct 13 10:52:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (ruby_executable_node): missing prototype.
+
+Wed Oct 13 05:23:04 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * missing/strchr.c: add strlen's prototype.
+
+ * missing/strstr.c: ditto.
+
+Wed Oct 13 00:21:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/syck/rubyext.c (struct mktime_arg): constified.
+
+ * ext/syck/rubyext.c (mktime_do, mktime_r, rb_syck_mktime): fix
+ function signatures.
+
+Wed Oct 13 00:18:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * st.c (MurmurMagic): get rid of literal overflow.
+
+ * configure.in (RUBY_CHECK_PRINTF_PREFIX): check for printf format
+ specifier if possible.
+
+Tue Oct 12 23:58:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_open_osfhandle, rb_w32_wopen, rb_w32_pipe):
+ use uintptr_t instead of long for win64.
+
+ * win32/win32.c (socketpair_internal): suppress warnings.
+
+ * win32/win32.c (ftruncate): use HANDLE instead of long for win64.
+
+ * vsnprintf.c (BSD_vfprintf): fix cast.
+
+ * numeric.c (rb_num2fix): result of rb_num2long is SIGNED_VALUE.
+
+ * compile.c (iseq_build_body), error.c (set_syserr, get_syserr),
+ (syserr_initialize), gc.c (define_final, rb_gc_copy_finalizer),
+ (run_final), hash.c (rb_hash_aref, rb_hash_lookup2),
+ (rb_hash_fetch_m, rb_hash_clear, rb_hash_aset, eql_i),
+ iseq.c (iseq_load, iseq_data_to_ary), marshal.c (r_symlink),
+ thread.c (rb_thread_local_aref),
+ variable.c (generic_ivar_remove, ivar_get, rb_const_get_0),
+ (rb_cvar_get), vm.c (rb_vm_check_redefinition_opt_method),
+ vm_insnhelper.c (vm_get_ev_const), vm_method.c (remove_method),
+ ext/iconv/iconv.c (map_charset): use st_data_t.
+
+ * compile.c (iseq_build_body), insns.def (getglobal, setglobal),
+ iseq.c (iseq_load, iseq_data_to_ary), util.c (valid_filename):
+ use VALUE.
+
+ * gc.c (obj_free, rb_objspace_call_finalizer): fix truncating
+ cast.
+
+ * gc.c (mark_current_machine_context): suppress warnings.
+
+ * compile.c (iseq_compile_each): fix truncating cast.
+
+ * cont.c (fiber_setcontext): missing variable definition.
+
+Tue Oct 12 19:25:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * error.c (exc_to_s): use OBJ_INFECT.
+
+ * error.c (name_err_to_s): ditto.
+
+ * error.c (name_err_mesg_to_str): ditto.
+
+ * error.c (syserr_initialize): ditto.
+
+Tue Oct 12 19:07:55 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * error.c (syserr_initialize): taint message if mesg is given
+ and it is tainted.
+
+Tue Oct 12 18:25:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_io_ungetc): always see Bignum. On 32bit valid value
+ may be a Bignum. On 64bit for errors. [ruby-dev:42366]
+
+Tue Oct 12 18:25:04 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_concat): use unsigned int for GB18030.
+
+Tue Oct 12 17:53:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric (check_uint): the mask must refer to VALUE.
+
+Tue Oct 12 17:47:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric (check_uint): set MSB for negative value.
+
+ * numeric (rb_num2uint): return value's type of rb_num2ulong
+ is VALUE.
+
+ * numeric (int_chr): variable i can't be negative.
+
+Tue Oct 12 16:04:37 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_strerror): get English message first, instead
+ of system default. see [ruby-dev:42358].
+ [experimental]
+
+Tue Oct 12 15:52:35 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_strerror): unmap some range of errno for
+ workaround of VC10's strerror() and sys_nerr problem.
+ based on a patch from Akio Tajima, [ruby-dev:42355].
+
+Tue Oct 12 15:36:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_io_ungetc): use unsigned int for GB18030.
+
+Tue Oct 12 15:14:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_io_putc): support multibyte characters.
+ [ruby-core:30697]
+
+Tue Oct 12 15:10:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (rb_enc_uint_chr): split from int_chr.
+
+ * numeric.c (int_chr): use rb_enc_uint_chr.
+
+ * include/ruby/encoding.h (rb_enc_uint_chr): added.
+
+Tue Oct 12 14:04:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (int_chr): a codepoint of Ruby M17N must be 32bit
+ unsigned int; GB18030 uses MSB. Also note that OnigCodePoint
+ is defined as unsigned int.
+
+Tue Oct 12 12:20:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vm_dump.c (dump_thread): foolish mistake.
+
+Tue Oct 12 10:39:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_MINGW32): canonicalize only on mingw.
+
+Mon Oct 11 20:20:23 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb (HTTP.get): specify ASCII-8BIT as the result
+ encoding of Zlib::GzipReader.
+ http://hibari.2ch.net/test/read.cgi/tech/1281473294/271
+
+Mon Oct 11 17:42:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * error.c (syserr_initialize): use mesg's encoding when locale
+ encoding is US-ASCII. If locale encoding is not US-ASCII,
+ assume err has non ASCII characters. [ruby-dev:42358]
+
+Mon Oct 11 14:03:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * error.c (syserr_initialize): set the encoding of Errno::*#message
+ as locale. [ruby-dev:42358]
+
+Mon Oct 11 06:38:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_set_encoding):
+ StringIO#set_encoding can get 2nd argument and optional hash
+ for API compatibility to IO. [ruby-dev:42356]
+
+Mon Oct 11 06:11:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_io_set_encoding): use rb_funcall2 when the io is not
+ a T_FILE. [ruby-dev:42356]
+
+Sun Oct 10 18:42:23 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#replace): Apply a bit of optimization.
+
+Sun Oct 10 10:20:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_MINGW32): canonicalize as like mswin version.
+
+Sun Oct 10 05:33:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (rb_signal_buff_size, rb_signal_exec): moved
+ declarations from thread.c.
+
+Sat Oct 9 16:54:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RSHIFT): quote to get rid of argument expansion
+ for autoconf 2.68.
+
+Sat Oct 9 11:00:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_reset_event_flags, exec_event_hooks): ignore
+ hooks marked as removed.
+
+ * thread.c (thread_exec_event_hooks): remove hooks to be removed.
+
+ * thread.c (rb_threadptr_remove_event_hook, rb_remove_event_hook):
+ defer removing hooks if running the hooks. [ruby-dev:42350]
+
+Sat Oct 9 10:51:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_threadptr_exec_event_hooks): suppress each event
+ hooks separately.
+
+ * thread.c (thread_suppress_tracing): split from
+ ruby_suppress_tracing, accepting thread pointer and event mask.
+
+Sat Oct 9 08:16:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_threadptr_remove_event_hook): fix typo.
+
+Fri Oct 8 10:52:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (RBCONFIG): depends on version.h due to
+ RUBY_PATCHLEVEL. [ruby-core:32709]
+
+Fri Oct 8 00:24:54 2010 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Fixing documentation typos. [ruby-core:32712]
+
+Thu Oct 7 09:14:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_exec.c (vm_exec_core): Treat clang as non gcc on this
+ context: It has __asm__ but doesn't works well.
+
+Wed Oct 6 12:28:22 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/uri/generic.rb (URI::Generic#hostname): new method.
+ (URI::Generic#hostname=): ditto.
+
+ * lib/open-uri.rb: use URI#hostname
+
+ * lib/net/http.rb: ditto.
+
+ reported by Adam Majer. [ruby-core:32056]
+
+Wed Oct 6 11:52:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (fptr_finalize): write_mutex might have been destroyed
+ already in finalization phase, as the order of finalizers is not
+ guaranteed. rb_mutex_t should be used in place of Mutex object
+ in the future.
+
+Tue Oct 5 22:17:02 2010 wanabe <s.wanabe@gmail.com>
+
+ * win32/mkexports.rb: revert r29320 and r29402.
+
+Mon Oct 4 12:43:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (regexp): dregexp has literal string only at the head
+ and successors are array. [ruby-core:32682]
+
+Mon Oct 4 10:22:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * random.c (rand_init): This checks the value is in 32bit or not,
+ so use int32_t, not int.
+
+Mon Oct 4 09:47:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * random.c (rand_init): remove useless assignment.
+
+ * re.c (update_char_offset): remove unused variable.
+
+ * re.c (read_escaped_byte): ditto.
+
+Mon Oct 4 09:30:42 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/lib/openssl/bn.rb (Integer#to_bn): OpenSSL::BN.new
+ accepts only Strings, so call Integer#to_s(16).
+ 16 is for an optimization. [ruby-dev:42336]
+
+Mon Oct 4 07:57:51 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * cont.c (fiber_memsize): Return size.
+ Before this change, fiber_memsize always returns 0.
+
+Mon Oct 4 07:16:55 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/unicode.c (onigenc_unicode_property_name_to_ctype):
+ remove useless assignment.
+
+ * vm.c (vm_make_proc_from_block): ditto.
+
+ * variable.c (rb_ivar_count): ditto.
+
+Mon Oct 4 06:40:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * Makefile.in (clean-rdoc): Don't use \ in variable expansion.
+ BSD make treats it as an escape character.
+
+Mon Oct 4 00:01:53 2010 wanabe <s.wanabe@gmail.com>
+
+ * tool/config.sub: revert r29320, r29324, r29347, r29354, r29365
+ to automake-1.11.1. [ruby-core:32634]
+
+ * win32/mkexports.rb: no longer use 'mingw64'. a patch from Luis Lavena
+ at [ruby-core:32678].
+
+Sun Oct 3 20:36:37 2010 Akio Tajima (arton) <artonx@yahoo.co.jp>
+
+ * test/win32ole/test_folderitem2_invokeverb.rb: Change creating
+ shortcut verb to 'Link' [Bug #3339]
+
+Sun Oct 3 19:44:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (Makefile): get rid of duplicated ruby target when
+ already there it was.
+
+Sat Oct 2 22:59:32 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_thread.rb: add for win32ole with Thread.
+
+Fri Oct 1 17:03:00 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * test/webrick/test_httpproxy.rb (TestWEBrickHTTPProxy::test_upstream_proxy):
+ My machine fails this test at this line, saying 503 service unavailable.
+
+Thu Sep 30 16:11:08 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_getenv): should return NULL if specified name
+ is empty. a patch from Heesob Park at [ruby-core:32650]
+
+Thu Sep 30 15:18:23 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (command_asgn): allow command_call to be right hand side
+ expression of chained assignment. [ruby-dev:42313]
+
+Thu Sep 30 10:55:38 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * hash.c (ruby_setenv): workaround for old Windows. a patch from
+ Heesob Park. [ruby-core:32353]
+
+Thu Sep 30 09:29:06 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (URI.encode_www_form): change treatment of
+ undefined value in given array as latest internet draft for
+ application/www-form-urlencoded.
+ http://tools.ietf.org/html/draft-hoehrmann-urlencoded-01
+
+Thu Sep 30 09:34:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vm_dump.c (dump_thread): fixed wrong type of return value of
+ SymGetModuleBase64(). [ruby-dev:42306]
+
+Wed Sep 29 21:04:05 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions::test_script_from_stdin):
+ As usual, PTY is not always available.
+
+Wed Sep 29 18:38:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/config.sub (x64): regularize only for pc vendor, and strip
+ useless 64 suffix.
+
+Wed Sep 29 17:53:02 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BIGDECIMAL_ENABLE_VPRINT):
+ VPrint is usually disabled. It's only used in debugging.
+
+Wed Sep 29 17:41:34 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_save_limit):
+ return the result of a block.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_save_limit):
+ add a test for the above change.
+
+Wed Sep 29 16:18:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vm_dump.c (dump_thread): remove unused optional arguments.
+
+Wed Sep 29 13:26:30 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_save_rounding_mode):
+ return the result of a block.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_save_rounding_mode):
+ add a test for the above change.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_save_exception_mode):
+ add a test for the return value of BigDecimal.save_exception_mode.
+
+Wed Sep 29 12:45:30 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_div2, BigDecimal_add2,
+ BigDecimal_sub2, BigDecimal_mult2, VpLimitRound): remove meaningless
+ casts to get rid of compiler warnings.
+
+Wed Sep 29 12:35:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (VPrint, VpToString): fix format.
+
+Wed Sep 29 12:31:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/known_classes.rb (RDoc::KNOWN_CLASSES): add Encoding.
+
+Tue Sep 28 20:50:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/config.sub (x64): regularize same as mswin.
+
+Tue Sep 28 20:06:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vm_dump.c (rb_vm_bugreport): add windows support.
+ based on patches from Peter Weldon at [ruby-core:32551]
+
+Mon Sep 27 23:30:34 2010 Koichi Sasada <ko1@atdot.net>
+
+ * insns.def (opt_case_dispatch), vm_insnhelper.c:
+ execute the procedures of "when" clauses by bytecode
+ instead of st_foreach() when the object does not hit
+ prepared hash. [ruby-dev:42304]
+
+Mon Sep 27 15:54:03 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * test/net/http/test_https.rb: As always, localhost is not
+ guaranteed to be resolved as 127.0.0.1. But a SSL
+ certificate needs a socket to listen on a specific address
+ where a CN resolves to. On situations where localhost is
+ not 127.0.0.1, these tests are not possible.
+
+Mon Sep 27 15:25:05 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * test/net/imap/test_imap.rb: resurrection of r29259.
+ this change depends on minitest 1.7.1.
+
+ * lib/test/unit/assertions.rb: ditto.
+
+Sun Sep 26 22:59:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/config.sub (x86_64-pc-mingw64): regularize.
+
+Sun Sep 26 22:21:07 2010 wanabe <s.wanabe@gmail.com>
+
+ * ext/openssl/ossl_hmac.c (ossl_hmac_hexdigest, ossl_hmac_s_hexdigest),
+ ext/openssl/ossl_pkey_ec.c (ossl_ec_group_set_seed),
+ ext/openssl/ossl_ssl_session.c (ossl_ssl_session_to_der),
+ ext/openssl/ossl_pkcs7.c (numberof): suppress warnings.
+ [ruby-core:31932]
+
+Sun Sep 26 10:25:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/config.{guess,sub}: updated to automake-1.11.1.
+
+Sat Sep 25 22:48:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (LIBRUBY_DLDFLAGS): fix quoting.
+
+Sat Sep 25 10:30:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (LIBRUBY_DLDFLAGS): use -unexported_symbol only
+ when available. http://trac.macports.org/ticket/26341
+
+Sat Sep 25 10:05:49 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * configure.in: Always add -mieee for Renesas SH4.
+ Thanks, Nobuhiro Iwamatsu. [Feature #3874] [ruby-core:32548]
+
+Sat Sep 25 01:34:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (install-cross): target to install cross-compiling
+ stuff.
+
+Fri Sep 24 23:44:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (sym_call), vm.c (invoke_block_from_c),
+ vm_insnhelper.c (vm_yield_with_cfunc): pass given block.
+ [ruby-core:32075]
+
+ * vm_eval.c (rb_funcall_passing_block): new function to call
+ method with passing given block.
+
+Fri Sep 24 15:50:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_to_i): fix rdoc: String#to_i raises an
+ exception when base is invalid. [ruby-core:31685]
+
+Fri Sep 24 15:28:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_rindex): use rb_enc_prev_char instead of repeated
+ str_nth.
+ patched by Michael Selig [ruby-core:32498]
+
+Fri Sep 24 14:19:12 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * test/test_pty.rb: Same as 229281; existence of PTY class do not
+ guarantee a successful pty operation.
+
+Fri Sep 24 06:25:55 2010 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 1.7.2 r5879.
+ * test/minitest/*.rb: ditto.
+
+Thu Sep 23 23:09:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_get_cref0): cref is stacked only in normal
+ iseqs, so check if it is the case first.
+
+Thu Sep 23 23:08:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/config.sub: mingw64 should use x86_64. [ruby-core:32514]
+
+Thu Sep 23 21:40:40 2010 wanabe <s.wanabe@gmail.com>
+
+ * ext/socket/raddrinfo.c (init_addrinfo, inspect_sockaddr): suppress
+ warnings. see [ruby-core:31932].
+
+Thu Sep 23 19:27:57 2010 wanabe <s.wanabe@gmail.com>
+
+ * thread_win32.c (w32_wait_events, w32_close_handle): suppress warnings.
+ see [ruby-core:31932].
+
+Thu Sep 23 18:54:39 2010 wanabe <s.wanabe@gmail.com>
+
+ * tool/config.sub: add mingw64.
+
+ * win32/mkexports.rb (Exports::Mingw64): added.
+
+ * win32/mkexports.rb (Exports::Mingw32): renamed from Exports::Mingw.
+
+Thu Sep 23 09:01:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_cref_push): no outer cref is needed for proc
+ from method. Bug #3786, Bug #3860, [ruby-core:32501]
+
+Wed Sep 22 17:12:01 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/openssl/utils.rb (OpenSSL#silent): always restore $VERBOSE.
+ [ruby-dev:42285]
+
+Wed Sep 22 16:59:40 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/test_prime.rb (TestPrime#test_new): the warning expected have
+ not been displayed when $VERBOSE == nil. Patch by Shota Fukumori
+ a.k.a. sora_h. [ruby-dev:42272]
+ Recovers $stderr even if StringIO.new fails. Reported by unak.
+
+Wed Sep 22 01:55:48 2010 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_method.rb: fix last commit.
+
+Wed Sep 22 01:49:52 2010 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_method.rb: add a test for [ruby-core:30534].
+
+Wed Sep 22 00:52:44 2010 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * lib/rdoc/ri/store.rb (save_cache): remove duplicate entries.
+
+Wed Sep 22 00:00:05 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_f_pathname): Pathname() translated
+ from pathname.rb.
+
+Tue Sep 21 22:18:30 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * tool/mkconfig.rb: fixed build problem on mswin64 introduced in r29278.
+
+Tue Sep 21 02:42:35 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/pathname/test_pathname.rb (TestPathname#test_mkdir): fix typo.
+
+Mon Sep 20 23:23:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (bracket): get rid of scanning at the end of the pattern
+ string, not to raise an exception while globbing command line.
+ [ruby-core:32478]
+
+Mon Sep 20 11:25:49 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (Init_pathname): Pathname#=~ undefinition
+ translated from pathname.rb.
+
+Mon Sep 20 02:34:11 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (check_rounding_mode, BigDecimal_mode):
+ raise ArgumentError instead of TypeError passing invalid modes.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_mode, test_round):
+ change against the above modifications.
+
+Sun Sep 19 22:08:39 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/mkmf.rb (try_link): rdoc
+ (try_compile): ditto
+ (try_cpp): ditto
+ (try_func): ditto
+ (try_var): ditto
+ (try_run): ditto
+ (egrep_cpp): ditto
+
+Sun Sep 19 20:43:33 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * configure.in (--disable-install-doc): disables capi too, in addition
+ to rdoc.
+ (--disable-install-rdoc): a new option for disabling only rdoc.
+ (--disable-install-capi): a new option for disabling only capi.
+
+Sun Sep 19 20:37:45 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (clean): removes all documents on cleaning.o
+ (CAPIOUT): new variable.
+ (clean-capi, distclean-capi, realclean-capi): new targets
+
+ * Makefile.in (clean-capi, distclean-capi, realclean-capi): ditto.
+
+ * win32/Makefile.sub (clean-capi, distclean-capi, realclean-capi):
+ ditto.
+
+Sun Sep 19 13:44:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (LIBRUBY_SO): fix an oversight of replace
+ RUBY_INSTALL_NAME with RUBY_SO_NAME. a patch from Jeremy Evans
+ at [ruby-core:32474].
+
+Sun Sep 19 07:48:20 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_unlink): Pathname#unlink and
+ Pathname#delete translated from pathname.rb.
+
+Sun Sep 19 06:06:07 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (check_rounding_mode): added for
+ converting symbol to rounding mode number.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_mode, BigDecimal_round):
+ support to specify rounding mode by symbol.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_mode, test_round):
+ add tests for above changes.
+
+Sun Sep 19 05:14:35 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c: fix rounding algorithms for half-down
+ and half-even. This change is based on the patch created by Matthew
+ Willson, the reporter of this bug. [Bug #3803] [ruby-core:32136]
+
+ * test/bigdecimal/test_bigdecimal.rb: add tests for above changes.
+
+Sat Sep 18 20:09:51 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_each_entry): Pathname#each_entry
+ translated from pathname.rb.
+
+Fri Sep 17 23:44:07 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rexml/xpath_parser.rb, test/rexml/test_xpath.rb:
+ add missing method availability check. [ruby-core:32447]
+ Reported by Wiebe Cazemier. Thanks!!!
+
+Fri Sep 17 23:23:26 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_sax.rb: don't use thread and sleep to avoid slow test.
+
+Fri Sep 17 23:10:44 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_core.rb: enable.
+
+Fri Sep 17 22:46:02 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/: untabify.
+
+Fri Sep 17 22:29:56 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/: fix fixture data path. All REXML tests are worked.
+
+Fri Sep 17 22:15:15 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/test_listener.rb: remove needless codes.
+
+Fri Sep 17 22:12:23 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rexml/: import REXML tests from
+ http://www.germane-software.com/repos/rexml/trunk/test/.
+ Many tests are failed temporary. I'll fix them quickly. Sorry.
+
+Fri Sep 17 16:48:49 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * test/io/console/test_io_console.rb (TestIO_Console::helper):
+ PTY.open is not guaranteed to work. On my machine opening a
+ pty is prohibited via process control group. On those cases
+ exceptions shall occur, and that doesn't mean our fault.
+ Skip those tests on such situations.
+
+Fri Sep 17 08:30:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tracer.rb: count only non-internal libraries in stack trace,
+ ignoring custom_require. [ruby-core:31858]
+
+Fri Sep 17 02:18:41 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * tool/mkconfig.rb: Fix build with m4 1.4.15 generating duplicate
+ lines in config.status. According to nobu, the mswin32 port may
+ depend on the piece of code in question, so the behavior is left
+ unchanged on mswin32.
+
+Thu Sep 16 23:47:59 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_opendir): Pathname#opendir translated
+ from pathname.rb.
+
+Thu Sep 16 21:40:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit::GlobOption): merged RejectOption.
+
+ * test/runner.rb: utilize GlobOption.
+
+Thu Sep 16 21:31:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/ri/driver.rb (RDoc::RI::Driver.setup_options)
+ (RDoc::RI::Driver.fixup_options): split from process_args.
+ libraries should not parse ARGV inside, since it's a task of
+ applications, not libraries.
+
+Thu Sep 16 21:02:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/ri/paths.rb (RDoc::RI::Paths.each): HOMEDIR can be nil
+ if $HOME is unset.
+
+Thu Sep 16 14:50:42 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * test/ruby/test_file_exhaustive.rb (TestFileExhaustive::test_expand_path):
+ ENV["HOME"] might not be set. On those cases without it an
+ exception raises here, which effectively disables later
+ tests on this method.
+
+Thu Sep 16 08:30:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_f_sprintf): fix rdoc. pointed out by Tomoyuki
+ Chikanaga at [ruby-core:32395], and a patch from Daniel
+ Bovensiepen at [ruby-core:32403].
+
+Thu Sep 16 08:27:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/etc/extconf.rb: use expanded sysconfdir with empty DESTDIR.
+ [ruby-core:32394]
+
+Thu Sep 16 06:07:24 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_rmdir): Pathname#rmdir translated
+ from pathname.rb.
+
+Thu Sep 16 00:36:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/readline/extconf.rb: Remove Readline 6 check because
+ Ruby's license is now GPLv3 compatible. [ruby-core:28736]
+
+Thu Sep 16 00:26:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * COPYING: change Ruby's License from a dual license with GPLv2
+ to a dual license with 2-clause BSDL.
+ [ruby-dev:42166] [ruby-core:31971]
+ [ruby-dev:39167] [ruby-core:25272]
+
+ * COPYING.ja: ditto.
+
+ * BSDL: added. this is from The FreeBSD License.
+
+Wed Sep 15 21:07:06 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_mkdir): Pathname#mkdir translated
+ from pathname.rb.
+
+Wed Sep 15 13:37:00 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * test/net/imap/test_imap.rb: "localhost" not guaranteed to
+ resolve to "127.0.0.1". On my machine it is "::1" instead.
+ The problem is, you have to connect to the imaps server via
+ the canonical name written in a server certificate, and that
+ of the server.cert is "localhost". So you have to listen to
+ the address of what "localhost" resolves to. I think this
+ situation cannot be resolved in a handy manner because the
+ test "test_imaps_post_connection_check" is actually
+ expecting to connect to a server via an address other than
+ the CN. On my machine several assertions won't pass because
+ the test cannot connect to the server.
+
+Wed Sep 15 09:12:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_puts): fix for wide char encoding strings.
+ [ruby-dev:42212]
+
+Wed Sep 15 07:27:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_format_m): mentioned about Hash argument. a patch
+ from Daniel Bovensiepen at [ruby-core:32386].
+
+ * sprintf.c (get_hash): ditto, and fix typo.
+
+Wed Sep 15 07:22:20 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_entries): Pathname#entries translated
+ from pathname.rb.
+
+Wed Sep 15 02:13:44 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/fiddle/closure.c : Don't use FFI closure alloc on OpenBSD.
+ Thanks Jeremy Evans! [ruby-core:32384]
+
+Tue Sep 14 20:17:48 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_s_getwd): Pathname.getwd and
+ Pathname.pwd translated from pathname.rb.
+
+Tue Sep 14 05:13:04 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_s_glob): Pathname.glob translated
+ from pathname.rb.
+
+Tue Sep 14 01:24:51 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * ext/socket/raddrinfo.c (ruby_getaddrinfo__aix): suppress a
+ warning.
+
+Mon Sep 13 20:48:30 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_zero_p): Pathname#zero? translated
+ from pathname.rb.
+
+Mon Sep 13 19:56:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/rubysocket.h (__DARWIN_ALIGNBYTES): workaround of a
+ bug in system header of darwin 9. [ruby-core:32341]
+
+Mon Sep 13 18:11:55 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (try_do): fix typo. a patch from Peter Weldon
+ at [ruby-core:32327].
+
+Mon Sep 13 10:12:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * util.c (ruby_strtod): reject Float('0x0.').
+ [ruby-dev:42239] Bug #3820
+
+Mon Sep 13 09:23:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl_bn.c (ossl_bn_is_prime): fix comparison
+ with rb_scan_args. Before this fix, OpenSSL::BN#prime?
+ is fully broken. [ruby-dev:42225]
+
+Mon Sep 13 06:45:24 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_writable_real_p):
+ Pathname#writable_real? translated from pathname.rb.
+
+Sun Sep 12 21:21:50 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb: [ruby-core:32096] Thanks Colin Bartlett.
+
+Sun Sep 12 19:30:27 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_world_writable_p):
+ Pathname#world_writable? translated from pathname.rb.
+
+Sun Sep 12 09:16:06 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_writable_p): Pathname#writable?
+ translated from pathname.rb.
+
+Sun Sep 12 08:36:15 2010 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rlimit_resource_name2int): support more limits:
+ RLIMIT_MSGQUEUE, RLIMIT_NICE, RLIMIT_RTPRIO, RLIMIT_RTTIME and
+ RLIMIT_SIGPENDING.
+ (Init_process): ditto.
+ patch by Run Paint Run Run. [ruby-core:32262]
+
+Sun Sep 12 04:27:13 2010 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rlimit_resource_name2int): use STRCASECMP to avoid
+ ALLOCA_N.
+
+Sat Sep 11 16:47:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (ruby_setenv): raise if putenv and SetEnvironmentVariable
+ failed, because of the restriction of the size on Windows.
+ based on a patch from Peter Weldon at [ruby-core:32304]. fix:
+ Bug#3812, [ruby-core:32250]
+
+Sat Sep 11 15:19:57 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/webrick/httpauth/digestauth.rb (WEBrick::Config::DigestAuth):
+ Add documentation
+
+ * lib/webrick/config.rb (WEBrick::Config::DigestAuth): Add
+ documentation
+
+Sat Sep 11 12:32:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_set_kcode, rb_get_kcode): removed
+ zombie prototype declarations. a patch from Eric Hodel
+ at [ruby-core:32305].
+
+Sat Sep 11 06:53:12 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_symlink_p): Pathname#symlink?
+ translated from pathname.rb.
+
+Fri Sep 10 23:03:43 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_sticky_p): Pathname#sticky? translated
+ from pathname.rb.
+
+Fri Sep 10 19:11:13 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#continue): add
+ method for generating HTTP/1.1 100 continue response if the client
+ expects it, otherwise does nothing. Patch by Brian Candler.
+ ref #855.
+
+ * test/webrick/test_httprequest.rb: test added.
+
+Fri Sep 10 17:49:34 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * ext/openssl/lib/openssl/x509-internal.rb: removed unused local
+ variable.
+
+ * test/openssl/*: less warnings while test running with -w.
+
+Fri Sep 10 16:49:20 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * class.c (rb_scan_args): Add support for optional keyword
+ argument hash. [ruby-dev:42221] [ruby-dev:38048]
+
+ * README.EXT, README.EXT.ja: Update documentation accordingly.
+
+ * dir.c (dir_initialize): Make use of the new rb_scan_args()
+ feature.
+
+ * io.c (rb_io_s_popen, rb_scan_open_args, rb_io_initialize)
+ (rb_io_s_pipe, open_key_args, io_s_foreach, io_s_readlines)
+ (rb_io_s_read, rb_io_set_encoding): Ditto.
+
+ * transcode.c (str_transcode, econv_args)
+ (econv_primitive_convert): Ditto.
+
+ * ext/zlib/zlib.c (rb_gzreader_initialize): Ditto.
+
+Fri Sep 10 10:33:18 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * random.c (rb_genrand_ulong_limited): renamed from
+ rb_rand_internal and now this is public API.
+
+ * include/ruby/ruby.h (rb_genrand_ulong_limited): added.
+
+ * bignum.c (big_sparse_p): use rb_genrand_ulong_limited.
+
+Fri Sep 10 13:07:22 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * ext/digest/lib/digest.rb: removed unused exception variable
+ assignment to avoid a warning.
+
+Fri Sep 10 07:29:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/etc/etc.c (etc_systmpdir): assume system default tmpdir
+ safe. [ruby-dev:42089]
+
+Fri Sep 10 07:03:23 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_size_p): Pathname#size? translated from
+ pathname.rb.
+
+Fri Sep 10 02:15:29 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_peercred): support OpenBSD-current.
+ patch by Jeremy Evans. [ruby-core:32240]
+
+Thu Sep 9 23:25:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_backtrace_each): skip allocator frames which have no
+ name. [ruby-core:32231]
+
+Thu Sep 9 22:39:08 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_size): Pathname#size translated from
+ pathname.rb.
+
+Thu Sep 9 22:34:48 2010 wanabe <s.wanabe@gmail.com>
+
+ * compile.c (case_when_optimizable_literal): When float value can be
+ treated as integer, add to table hash of case that way.
+ based on a patch from Ikuo KOBORI. [ruby-dev:42038]
+
+ * insns.def (opt_case_dispatch): ditto.
+
+ * test/ruby/test_case.rb: add tests.
+
+Thu Sep 9 17:15:15 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/net/http/test_https.rb (test_identity_verify_failure): follows
+ the SSL hostname check error message of openssl.
+
+Thu Sep 9 10:44:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ruby/test_env.rb (test_aset): OpenBSD acts like NetBSD in
+ that it ignores characters after = in ENV.
+ patched by Jeremy Evans [ruby-core:32184]
+
+Thu Sep 9 09:02:01 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/rbinstall.rb (install?): gemspec filename should include
+ its version. patched by Luis Lavena [ruby-core:32165]
+
+Wed Sep 8 22:46:31 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_ssl.c (ssl_get_error): Thread context switch was
+ blocked on Windows while blocking call for SSLSocket. Need to
+ convert errno for letting rb_io_wait_readable detect EWOULDBLOCK.
+ Patch by arton. ref #3794.
+
+Wed Sep 8 20:56:57 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_setgid_p): Pathname#setgid? translated
+ from pathname.rb.
+
+Wed Sep 8 06:25:41 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_setuid_p): Pathname#setuid? translated
+ from pathname.rb.
+
+Tue Sep 7 21:03:35 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_readable_real_p):
+ Pathname#readable_real? translated from pathname.rb.
+
+Mon Sep 6 23:07:25 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_world_readable_p):
+ Pathname#world_readable? translated from pathname.rb.
+
+Mon Sep 6 11:03:13 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * Fixed wrong check of missing functions. Patch by Adrian Quark.
+ ref #3400
+ The patch contains following comment:
+ This patch should avoid unnecessary incompatibility with future
+ versions of Openssl. Changes suggested by bmaher_at_amazon.com.
+
+Mon Sep 6 10:46:55 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * Fixed exception message for SSL post connection check failure. Patch
+ by Paul Betteridge. ref [Bug #3704]
+
+Mon Sep 6 10:31:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_s_get_line_buffer):
+ Readline.line_buffer should return locale string.
+ [ruby-dev:42184] #3791
+
+Mon Sep 6 09:47:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * util.c (ruby_strtod): check there is at least 1 digit after
+ "0x" before ".". [ruby-dev:42183] #3790
+
+Mon Sep 6 09:44:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * util.c (ruby_strtod): check integer overflow.
+ [ruby-dev:42180] #3789
+
+Mon Sep 6 06:17:21 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_readable_p): Pathname#readable?
+ translated from pathname.rb.
+
+Sun Sep 5 23:02:34 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_owned_p): Pathname#owned?
+ translated from pathname.rb.
+
+Sat Sep 4 23:48:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_readlink): symlink target should be in
+ filesystem encoding.
+
+Sat Sep 4 10:40:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (ruby_init_ext): export for golfers.
+
+ * vm_core.h (rb_iseq_eval, rb_iseq_compile_with_option): ditto.
+
+Sun May 23 17:29:41 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (capi): uses a timestamp file to get rid of
+ generating twice.
+
+Fri Jun 18 01:33:21 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * enc/Makefile.in (realclean): has been missing. necessary
+ for make realclean-enc.
+
+Fri Sep 3 23:51:26 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_socket_p): Pathname#socket?
+ translated from pathname.rb.
+
+Fri Sep 3 06:40:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/pty/pty.c (chfunc): pass through exceptions.
+
+ * io.c (rb_io_bufwrite, rb_io_bufread): added.
+
+ * process.c (rb_fork_err): protect from exceptions.
+
+Fri Sep 3 06:16:07 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_pipe_p): Pathname#pipe?
+ translated from pathname.rb.
+
+Fri Sep 3 06:14:40 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/pty/pty.c (chfunc): restore errno from SystemCallError and
+ propagate proper exception to the parent. [ruby-dev:41965]
+
+Thu Sep 2 22:10:38 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_file_p): Pathname#file?
+ translated from pathname.rb.
+
+Thu Sep 2 09:12:02 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): don't forget to free
+ memory.
+
+Thu Sep 2 09:01:13 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (CreateChild): unicodize.
+
+ * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): convert arguments of
+ CreateChild() from ACP to WideChar.
+
+Thu Sep 2 06:53:43 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_directory_p): Pathname#directory?
+ translated from pathname.rb.
+
+Wed Sep 1 22:03:41 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_grpowned_p): Pathname#grpowned?
+ translated from pathname.rb.
+
+Wed Sep 1 17:39:02 2010 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 1.7.1 r5835.
+ * test/minitest/*.rb: ditto.
+
+Wed Sep 1 16:50:42 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (tr_setup_table): optimized. don't create hash objects
+ when given pattern is ASCII only.
+
+ * string.c (tr_find): ditto.
+
+Wed Sep 1 14:35:29 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * array.c (rb_ary_rotate_m): fix typo of rdoc.
+ patched by Andrei Kulakov [ruby-core:31975]
+
+Wed Sep 1 14:33:36 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enum.c (enum_zip): fix typo of rdoc.
+ patched by Andrei Kulakov [ruby-core:31974]
+
+Wed Sep 1 12:56:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (ruby_suppress_tracing): restore the state and invoke
+ the func with normal state. a patch from Satoshi Shiba <shiba
+ AT rvm.jp> at [ruby-dev:42162]. [ruby-core:31783]
+
+Tue Aug 31 21:10:23 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_exist_p): Pathname#exist? translated
+ from pathname.rb.
+
+Tue Aug 31 17:32:34 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/stubs.c: fix [Bug #3771] "VC++ can't make ext/tk with enabling
+ stubs". Thanks, Akio Tajima [ruby-dev:42159].
+
+Tue Aug 31 03:42:14 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (tr_setup_table): fix bug in r29146.
+ Initialize table even if cflag is 0; tr_find see whether
+ del is empty or not.
+
+ * string.c (tr_find): nodel can't be NULL; if NULL, it means
+ it is not specified.
+
+Mon Aug 30 21:29:21 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_executable_real_p):
+ Pathname#executable_real? translated from pathname.rb.
+
+Mon Aug 30 15:00:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (tr_setup_table): initialize negating table when
+ negating string is given. [ruby-core:31851]
+
+ * string.c (tr_find): add a sentence for the time when
+ target characters include negating one.
+
+ * string.c (rb_str_count): move definition.
+
+Mon Aug 30 07:32:41 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_executable_p): Pathname#executable?
+ translated from pathname.rb.
+
+Sun Aug 29 23:54:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/parser/ruby.rb (RDoc#parse_call_parameters): don't
+ include assignment. [Bug #3759], [ruby-dev:42154]
+
+ * lib/rdoc/parser/ruby.rb (RDoc#parse_class): ignore non-constant
+ name singleton class. [Bug #3759], [ruby-dev:42154]
+
+Sun Aug 29 23:25:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_get_path_check): clarify error message for
+ ASCII-incompatible path name.
+
+Sun Aug 29 16:02:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk (node_name.inc): remove command option -n and give
+ file as stdin, because IronRuby 1.1 still doesn't support it.
+ So now we can use ir.exe as BASERUBY.
+
+ * tool/node_name.rb: read stdin with while gets.
+
+Sun Aug 29 13:22:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (rb_thread_method_id_and_class): curried proc has no
+ method. [ruby-core:31871]
+
+Sun Aug 29 12:51:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_provide_feature): clarify error message for frozen
+ $LOADED_FEATURES. based on a patch from Run Paint Run Run at
+ [ruby-core:31913].
+
+Sun Aug 29 12:19:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (load_failed): should honor encoding. [ruby-core:31915]
+
+Sun Aug 29 09:35:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk (clean): exclude *.inc. [ruby-dev:41931]
+
+ * common.mk (distclean): include *.inc.
+
+ * common.mk (help): change description about clean and distclean.
+
+Sat Aug 29 06:34:52 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_chardev_p): Pathname#chardev?
+ translated from pathname.rb.
+
+Sat Aug 28 17:39:33 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_save_exception_mode,
+ BigDecimal_save_rounding_mode, BigDecimal_save_limit): added.
+
+ * test/bigdecimal/test_bigdecimal.rb: added tests for the above
+ features.
+
+Sat Aug 28 08:11:05 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_blockdev_p): Pathname#blockdev?
+ translated from pathname.rb.
+
+Fri Aug 27 16:20:01 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * string.c (rb_str_prepend): new method by Shota Fukumori (sora_h)
+ [Feature #3765]
+
+Fri Aug 27 15:24:20 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * math.c (math_atan2): you should know that M_PI is not the feature
+ of C90.
+ fixed build failure caused by r29115.
+
+Fri Aug 27 15:26:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (null_device): move from io.c.
+
+Fri Aug 27 12:47:44 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * math.c (math_atan2): change the behavior when x and y are zero.
+ [ruby-dev:42090] [Bug #3736] [ruby-dev:42116]
+
+ * test/ruby/test_math.rb (test_atan2): add tests for the above
+ changes.
+
+Fri Aug 27 12:26:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * object.c (rb_obj_class): remove mention of obsolete method.
+ a patch from Run Paint Run Run at [ruby-core:31842].
+
+Fri Aug 27 12:25:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (null_device): the name of null device. [ruby-dev:41791]
+
+Fri Aug 27 07:57:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_shuffle_bang): bail out from modification during
+ shuffle.
+
+ * array.c (rb_ary_sample): ditto.
+
+Fri Aug 27 05:11:51 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_sysopen): Pathname#sysopen translated
+ from pathname.rb.
+
+Thu Aug 26 22:53:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_shuffle): rdoc fix. argument name was missing.
+ a patch from Run Paint Run Run at [ruby-core:31848].
+
+Thu Aug 26 21:49:46 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_readlines): Pathname#readlines
+ translated from pathname.rb.
+
+Thu Aug 26 10:37:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regint.h (OnigStackIndex): the type should be intptr_t.
+ Original Oniguruma assumes the size of long and that of void *
+ are equal, but it's not true on LLP64 platform: mswin64.
+ originally patched by shintaro kuwamoto [ruby-dev:42133]
+
+Thu Aug 26 10:38:11 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * test/dl/test_base.rb: AIX does not have dynamically loadable lib[cm].
+
+ * test/fiddle/helper.rb: AIX does not have dynamically loadable lib[cm].
+
+Thu Aug 26 09:49:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_shuffle_bang): check number of argument.
+
+Tue Aug 26 09:11:40 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (Init_bigdecimal,
+ rmpd_set_thread_local_exception_mode, VpGetException,
+ VpSetException): thread-local exception mode.
+
+ * ext/bigdecimal/bigdecimal.c (Init_bigdecimal,
+ rmpd_set_thread_local_precision_limit, VpGetPrecLimit,
+ VpSetPrecLimit): thread-local precision limit.
+
+ * ext/bigdecimal/bigdecimal.c (Init_bigdecimal,
+ rmpd_set_thread_local_rounding_mode, VpGetRoundMode,
+ VpSetRoundMode, VpException, VpInternalRound):
+ thread-local rounding mode.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_mode, BigDecimal_round,
+ VpIsRoundMode, VpGetRoundMode, VpSetRoundMode, VpActiveRound,
+ VpMidRound, VpLeftRound), ext/bigdecimal/bigdecimal.h:
+ use unsigned short for rounding mode.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_mode): add test for
+ setting rounding mode.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_thread_local_mode):
+ add test for setting mode thread-locally.
+
+Thu Aug 26 07:29:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_{shuffle_bang,sample}): use Random class object.
+
+ * random.c (try_get_rnd): use default_rand for Random as same as
+ singleton methods.
+
+ * random.c (rb_random_real): check the range of result.
+
+Wed Aug 25 22:11:11 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_binread): Pathname#binread translated
+ from pathname.rb.
+
+Wed Aug 25 03:42:43 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/cfunc.c (rb_dlcfunc_call): workaround for VC9 for x64.
+ reported by kuwamoto shintaro in [ruby-dev:42125].
+
+Tue Aug 24 23:28:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * .gitignore: updated.
+
+Tue Aug 24 22:07:28 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_read): Pathname#read translated from
+ pathname.rb.
+
+Tue Aug 24 10:11:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: read API version from include/ruby/version.h.
+
+ * {bcc,win}32/setup.mak (-version-): ditto.
+
+ * version.h (RUBY_LIB_VERSION): use API version numbers.
+
+Tue Aug 24 07:07:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_shuffle_bang, rb_ary_sample): add optional
+ argument random. [ruby-dev:41923] [EXPERIMENTAL]
+
+ * random.c (rb_random_{int32,real,bytes}): fallback to normal
+ method invocation.
+
+Tue Aug 24 06:08:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/version.h (RUBY_API_VERSION_*): renamed and moved
+ from version.h. [ruby-dev:42103]
+
+Tue Aug 24 05:58:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ChangeLog: flushed. [ruby-dev:42050]
+
+Tue Aug 24 01:14:58 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): to_f must underflow
+ when the exponent is less than DBL_MIN_10_EXP - BASE_FIG.
+
+ * test/bigdecimal/test_bigdecimal.rb (test_to_f): added test for the above changes.
+
+Mon Aug 23 23:14:21 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_each_line): Pathname#each_line
+ translated from pathname.rb.
+
+Mon Aug 23 22:30:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (version.o): depends on both of version.h and
+ include/ruby/version.h. [ruby-dev:42063]
+
+Mon Aug 23 13:09:27 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * backport r29071 from ruby_1_8;
+
+ * ext/openssl/ossl_asn1.c (obj_to_asn1bool): fixed ASN1::Boolean
+ encoding issue for OpenSSL 1.0.0 compatibility.
+ ASN1::Boolean.new(false).to_der wrongly generated "\1\1\377" which
+ means 'true'.
+
+ ASN1_TYPE_set of OpenSSL <= 0.9.8 treats value 0x100 as 'false'
+ but OpenSSL >= 1.0.0 treats it as 'true'. ruby-ossl was using
+ 0x100 for 'false' for backward compatibility. Just use 0x0 for
+ the case OpenSSL >= OpenSSL 0.9.7.
+
+ * test/openssl/test_asn1.rb: test added.
+
+Mon Aug 23 12:28:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_search): fix: 4th argument should be regexp
+ object. patched by shintaro kuwamoto [ruby-dev:41667] #3459
+
+Mon Aug 23 02:23:05 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * util.c (ruby_strtod): make sure to have digit-sequence after 'p'
+ for hexadecimal-floating-constant. [ruby-dev:42105]
+
+Mon Aug 23 00:23:07 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb, lib/date/format.rb: [ruby-core:31695]
+
+Sun Aug 22 09:08:02 2010 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (UINT2NUM): fix ifdef condition for LLP64.
+ reported by Daniel Gutmanas. [ruby-core:31778]
+
+Sun Aug 22 06:46:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (RAND_UPTO): macro for random number.
+
+Sun Aug 22 05:55:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: fix typo. a patch from Eric Wong at
+ [ruby-core:31810].
+
+Sat Aug 21 20:09:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm.c: add missing prototype of rb_iseq_clone for r29063.
+
+Sat Aug 21 18:54:56 2010 wanabe <s.wanabe@gmail.com>
+
+ * vm.c (vm_define_method): copy iseq to avoid overwriting iseq->klass.
+ #2502, #3136. see #2420.
+
+Sat Aug 21 17:36:42 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_split): Pathname#split translated from
+ pathname.rb.
+
+Fri Aug 20 10:40:04 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_expand_path): Pathname#expand_path
+ translated from pathname.rb.
+
+Thu Aug 19 22:44:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot (usage): add usage.
+
+ * tool/make-snapshot (package): accept revision as BRANCH@REV.
+
+Thu Aug 19 19:53:26 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_timestamp): fix a constant type.
+
+ * ext/socket/raddrinfo.c (get_afamily): suppress a warning.
+
+Thu Aug 19 19:28:47 2010 Tanaka Akira <akr@fsij.org>
+
+ * thread_pthread.c (native_sleep): suppress a warning for platforms
+ which time_t is int.
+
+Thu Aug 19 18:15:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/merger.rb: Add a tool to merge commits between branches.
+ developed by URABE Shyouhei
+
+Thu Aug 19 17:19:09 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * backport r28621 and r28632 from ruby_1_8;
+
+ * ext/openssl/ossl_config.c, ext/openssl/lib/openssl/config.rb,
+ ext/openssl/lib/openssl.rb: reimplement OpenSSL::Config in Ruby.
+ Now it should work on windows.
+
+ * test/openssl/test_config.rb: added tests for OpenSSL::Config#dup.
+
+ * test/openssl/test_config.rb: added tests for Config#clone.
+
+Thu Aug 19 12:04:39 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * array.c (rb_ary_permutation, rb_ary_repeated_permutation,
+ rb_ary_repeated_combination, rb_ary_product):
+ use ary_make_shared_copy instead of ary_make_substitution.
+ [ruby-dev:42067] [Bug #3708]
+
+ * test/ruby/test_array.rb (test_product, test_repeated_permutation,
+ test_repeated_combination): append assertions against [Bug #3708].
+
+Thu Aug 19 11:11:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enum.c (enum_inject): fix typo of rdoc.
+ patched by Andrei Kulakov [ruby-core:31768]
+
+Thu Aug 19 10:06:08 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_extname): Pathname#extname translated
+ from pathname.rb.
+
+Thu Aug 19 06:03:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_push_frame): initialize block_iseq. a patch
+ from Peter Weldon at [ruby-core:31757].
+
+Wed Aug 18 19:08:17 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * array.c (ary_make_shared): revert r29037, it occurs SEGV some
+ situations.
+
+Wed Aug 18 18:36:32 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * array.c (ary_make_shared),
+ test/ruby/test_array.rb (test_permutation):
+ always return the original array when it is shared.
+ [ruby-dev:42067] [Bug #3708]
+
+Wed Aug 18 01:37:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regcomp.c: revert r26701; it introduces Bug #3681.
+ [ruby-core:31677]
+
+Tue Aug 17 20:05:29 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_io.rb (test_threaded_flush): test "hi" is not output
+ twice.
+
+Tue Aug 17 15:13:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/date.rb: Re-revert the part of r28950.
+ It reverted the part of r28619.
+
+Tue Aug 17 13:00:07 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_dirname): Pathname#dirname translated
+ from pathname.rb.
+
+Tue Aug 17 07:50:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/readline/extconf.rb: check functions more.
+ [ruby-core:31722]
+
+Tue Aug 17 07:42:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_make_independent_expand): set capacity properly. a
+ patch from Peter Weldon at [ruby-core:31734]. [ruby-core:31653]
+
+Tue Aug 17 07:38:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gem_prelude.rb, lib/rubygems.rb (Gem.suffixes): include empty
+ suffix. [ruby-core:31730]
+
+Mon Aug 16 22:16:12 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_basename): unused variable removed.
+
+Mon Aug 16 21:39:33 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_basename): Pathname#basename translated
+ from pathname.rb.
+
+Mon Aug 16 20:26:13 2010 Narihiro Nakamura <narihiro@netlab.jp>
+
+ * gc.c (gc_profile_result): Index begins with 1.
+
+Mon Aug 16 20:21:17 2010 Narihiro Nakamura <authornari@gmail.com>
+
+ * gc.c (gc_profile_result): use size_t. based on patches from
+ Tomoaki NISHIYAMA <tomoakin@kenroku.kanazawa-u.ac.jp> at
+ [ruby-dev:42042].
+
+Mon Aug 16 19:23:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_dtoa, ruby_hdtoa): use same representations for
+ Infinity and NaN. a part of a patch from Peter Weldon at
+ [ruby-core:31725].
+
+ * util.c (ruby_hdtoa): fixed buffer overrun. based on a patch
+ from Peter Weldon at [ruby-core:31725].
+
+Mon Aug 16 17:44:55 2010 Tanaka Akira <akr@fsij.org>
+
+ * common.mk (capi): use -b option for doxygen. It disables stdout
+ buffering and prevents wrong reordering between stdout and stderr
+ even when the output of "make" is redirected.
+
+Sun Aug 15 19:59:58 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/webrick/httpresponse.rb (WEBrick::HTTPResponse#set_error):
+ Fix for possible cross-site scripting (CVE-2010-0541).
+ Found by Apple, reported by Hideki Yamane.
+ Patch by Hirokazu Nishio <nishio.hirokazu AT gmail.com>.
+
+Mon Aug 16 12:29:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, win32/Makefile.sub (test-rubyspec-precheck): split
+ from test-rubyspec.
+
+ * common.mk (test-rubyspec): moved from Makefile.in.
+
+Mon Aug 16 10:00:45 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.h (llabs): never never never never never
+ use "long long".
+
+ * ext/bigdecimal.bigdecimal.c (BigDecimal_to_i): get rid of a warning.
+
+Sun Aug 15 18:14:20 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_dump, BigDecimal_inspect,
+ VPrint, VpToString, VpVarCheck): use PRIuSIZE, PRIdSIZE, PRIdVALUE,
+ and PRIxVALUE.
+
+Sun Aug 15 16:14:31 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (Logging.postpone): close @log only when it's available.
+
+Sun Aug 15 13:30:35 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.h (VpVtoD): fix a type of e.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_dump, BigDecimal_inspect):
+ fix format for size_t.
+
+Sun Aug 15 00:22:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/extconf.rb, ext/bigdecimal/bigdecimal.h
+ (labs, llabs): support environments missing labs and llabs.
+
+ * ext/bigdecimal/bigdecimal.h (vabs): added.
+
+ * ext/bigdecimal/extconf.rb, ext/bigdecimal/bigdecimal.h,
+ ext/bigdecimal/bigdecimal.c, test/bigdecimal/test_bigdecimal.rb
+ (TestBigDecimal#test_new): replace U_LONG, S_LONG, S_INT, and U_INT
+ with appropriate standard or ruby-provided types.
+
+Sun Aug 15 00:15:45 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_utime): Pathname#utime translated
+ from pathname.rb.
+
+Sat Aug 14 21:04:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_gc_mark_threads): deprecated.
+
+Sat Aug 14 19:12:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/{coverage,objspace}/extconf.rb ($INCFLAGS): explicitly add
+ topdir and top_srcdir. [ruby-dev:42031]
+
+Sat Aug 14 17:48:41 2010 Narihiro Nakamura <authorNari@gmail.com>
+
+ * test/objspace/test_objspace.rb: added test for objspace.
+
+ * ext/objspace/objspace.c: considers T_ZOMBIE by lazy sweep GC.
+
+ * gc.c: considers that dsize was 0. [ruby-dev:42022]
+
+Sat Aug 14 15:33:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, include/ruby/defines.h (RUBY_FUNC_EXPORTED): macro
+ to declare exported function.
+
+ * array.c (rb_ary_memsize), string.c (rb_str_memsize),
+ variable.c (rb_objspace_data_type_memsize): used in
+ objspace. [ruby-dev:42022]
+
+ * io.c (rb_io_memsize): constified.
+
+ * regcomp.c (onig_memsize): constified.
+
+ * gc.h (rb_objspace_each_objects): used in objspace.
+
+ * vm_core.h (rb_{get,set,reset}_coverages): used in coverage.
+
+ * include/ruby/intern.h (rb_time_interval): used in io/wait.
+
+ * include/ruby/intern.h (rb_make_backtrace, rb_make_exception):
+ used in ripper.
+
+ * node.h (rb_parser_{malloc,realloc,calloc,free}): ditto.
+
+Fri Aug 13 22:48:39 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_truncate): Pathname#truncate translated
+ from pathname.rb.
+
+Fri Aug 13 16:11:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (MiniTest::Unit.new): extend before initialize.
+ [ruby-dev:41970]
+
+ * lib/test/unit.rb (MiniTest::Unit.autorun): use Test::Unit::Mini.
+
+Thu Aug 12 23:39:02 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_make_symlink): Pathname#make_symlink
+ translated from pathname.rb.
+
+Thu Aug 12 21:18:27 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_lstat): Pathname#lstat translated
+ from pathname.rb.
+
+Thu Aug 12 05:58:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/encoding.h (rb_char_to_option_kcode): used in
+ ripper.
+
+ * node.h (rb_reserved_word): ditto.
+
+Thu Aug 12 00:19:53 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_rubyoptions.rb (test_script_from_stdin): disable
+ echo. [ruby-dev:41966]
+
+Wed Aug 11 23:28:22 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * lib/cmath.rb (CMath.sqrt): use floating-point value.
+ [ruby-core:31672] [Bug #3678]
+
+ * test/test_cmath.rb: added for testing lib/cmath.rb.
+
+Wed Aug 11 20:57:25 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: merge from branches/ruby_1_9_2, and move io/console.
+ [ruby-dev:41924]
+
+Wed Aug 11 11:01:15 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c: don't use // comment.
+
+Wed Aug 11 06:18:20 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_stat): Pathname#stat translated
+ from pathname.rb.
+
+Tue Aug 10 21:18:04 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_to_[ifr]): don't allow complex with in-exact
+ imaginary zero to be converted.
+
+Tue Aug 10 20:56:31 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/optparse.rb: suppress a warning.
+
+ * test/test_mutex_m.rb: ditto.
+
+Tue Aug 10 20:56:13 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/format.rb (Date::Format::Bag): use Struct.
+ as an experimental.
+
+Tue Aug 10 20:45:35 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_rename): Pathname#rename translated
+ from pathname.rb.
+
+Tue Aug 10 20:16:19 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/win32/lib/win32/resolv.rb (get_info): get rid of a warning.
+
+Tue Aug 10 19:56:13 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/format.rb: [ruby-core:31658]
+
+Tue Aug 10 17:24:56 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * README.EXT.ja: rb_tainted_str_new_cstr() is an alias of
+ rb_tainted_str_new2().
+
+Tue Aug 10 15:24:30 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c, ext/bigdecimal/bigdecimal.h,
+ ext/bigdecimal/extconf.rb: BASE and BASE_FIG are defined
+ based on the size of BDIGIT.
+
+ * ext/bigdecimal/bigdecimal.c, ext/bigdecimal/bigdecimal.h:
+ use BDIGIT for Real#frac.
+
+Tue Aug 10 15:19:45 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.h, ext/bigdecimal/bigdecimal.c:
+ add extern declaration of rb_cBigDecimal.
+
+Tue Aug 10 14:09:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/webrick/httprequest.rb (WEBrick::HTTPRequest::parse_uri):
+ rollup leading slashes. [ruby-core:31657]
+ patched by Jamison Wilde
+ NOTE: //authority/path is valid relative URI both RFC2396 and
+ RFC3986. So when give a relative URI-like string to URI lib,
+ users must care leading slashes.
+
+Tue Aug 10 11:26:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/un.rb (httpd): SIGQUIT and SIGHUP are not guaranteed to exist.
+
+Tue Aug 10 06:26:48 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_readlink): Pathname#readlink translated
+ from pathname.rb.
+
+Mon Aug 9 22:15:19 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_open): Pathname#open translated from
+ pathname.rb.
+
+Mon Aug 9 22:11:09 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_signal.rb (TestSignal#test_exit_action): use
+ Process.spawn instead of Process.fork.
+
+Mon Aug 9 15:59:02 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rubygems/source_index.rb: rename unused variable.
+
+ * lib/rubygems/specification.rb: rename unused variable.
+
+ * lib/rubygems/specification.rb: remove unused variable.
+
+Mon Aug 9 14:10:06 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: Fix type of mimeout_state.buf.
+ [nkf-bug:20079]
+
+Mon Aug 9 06:52:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (sys_warning_1): show error message.
+
+Mon Aug 9 06:50:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_require.rb (test_require_too_long_filename):
+ clear -w option.
+
+Mon Aug 9 00:18:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb ($ignore_error): initialize after $nmake.
+
+Sun Aug 8 19:16:26 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_make_link): Pathname#make_link
+ translated from pathname.rb.
+
+Sun Aug 8 16:42:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems.rb (Gem.find_files): reverted to use globbing.
+
+ * lib/rubygems.rb (Gem.find_files): fixed search order same as
+ default behavior.
+
+ * gem_prelude.rb, lib/rubygems.rb (Gem.suffixes): return truly
+ require-able suffixes only.
+
+Sun Aug 8 13:20:57 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_ftype): Pathname#ftype translated
+ from pathname.rb.
+
+Sun Aug 8 12:41:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_tokadd_escape): no similar messages twice.
+ [ruby-core:31048]
+
+Sun Aug 8 10:07:45 2010 Tanaka Akira <akr@fsij.org>
+
+ * strftime.c (rb_strftime_with_timespec): suppress warnings.
+
+Sun Aug 8 08:58:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (RUBY_H_INCLUDES): add subst.h.
+
+Sun Aug 8 08:55:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (ruby_snprintf): printf attribute.
+
+Sun Aug 8 07:47:29 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/rbconfig/obsolete.rb: show the location which use Config.
+
+Sun Aug 8 07:29:55 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_fnmatch): Pathname#fnmatch and
+ Pathname#fnmatch? translated from pathname.rb.
+
+Sun Aug 8 07:18:22 2010 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/subst.h (snprintf): redefinition moved from ruby.h.
+ (vsnprintf): ditto.
+
+Sun Aug 8 00:41:42 2010 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/subst.h: new file for substitute standard functions.
+
+ * include/ruby/missing.h: don't substitute "close", etc. here.
+
+ * include/ruby/ruby.h: include ruby/subst.h at last.
+ This prevents substituting "close" in unistd.h.
+
+Sat Aug 7 19:51:10 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/envutil.rb (EnvUtil.invoke_ruby): merge stdout and stderr
+ if capture_stderr is :merge_to_stdout.
+ (assert_normal_exit): print abnormal output properly.
+
+Sat Aug 7 19:04:49 2010 Tanaka Akira <akr@fsij.org>
+
+ * missing/close.c: undef the macros "getpeername", "getsockname" and
+ "shutdown" to prevent infinite recursion.
+
+Sat Aug 7 18:37:39 2010 Tanaka Akira <akr@fsij.org>
+
+ * missing/close.c: undef the macro "close" to prevent infinite
+ recursion.
+
+Sat Aug 7 18:20:41 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_lchown): Pathname#lchown translated
+ from pathname.rb.
+
+Sat Aug 7 17:49:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/missing.h: moved BROKEN_CLOSE replacements from
+ include/ruby/ruby.h.
+
+Sat Aug 7 17:40:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * mkconfig.rb, lib/rbconfig/obsolete.rb: warn obsolete and
+ deprecated Config.
+
+Sat Aug 7 17:18:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extract_makefile): follow the change of
+ install-rb-default line format at r28850, which causes second
+ run to create dummy makefiles.
+
+Sat Aug 7 14:08:44 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/mkmf.rb: change instance variable to global.
+
+Sat Aug 7 13:59:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/pathname/pathname.c (path_sub_ext): don't clobber shared string.
+ [ruby-core:31640]
+
+Sat Aug 7 13:33:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (vm_call0): fix for VM_METHOD_TYPE_NOTIMPLEMENTED.
+ [ruby-dev:41953]
+
+Sat Aug 7 09:47:06 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c: fix checking version of GCC.
+
+Sat Aug 7 09:31:48 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (Init_pathname): fix number of arguments for
+ Pathname#chown.
+
+Sat Aug 7 09:28:12 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/envutil.rb (assert_normal_exit): use assert. fix
+ faildesc.
+
+ * test/pathname/test_pathname.rb (test_lchmod): test Pathname#lchmod
+ using assert_normal_exit.
+
+Sat Aug 7 08:26:26 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_chown): Pathname#chown translated
+ from pathname.rb.
+
+Sat Aug 7 02:09:04 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_lchmod): Pathname#lchmod translated
+ from pathname.rb.
+
+Fri Aug 6 21:30:06 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_chmod): Pathname#chmod translated from
+ pathname.rb.
+
+Fri Aug 6 20:13:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * rational.c (nurat_div): divided by infinity should be zero.
+
+ * rational.c (nurat_div): divided by float zero should be
+ infinity. [ruby-core:31626]
+
+Fri Aug 6 18:59:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (realpath_rec): rb_str_modify depends on the length, so
+ resize instead.
+
+Fri Aug 6 18:56:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (clean-ext): fixed directories to be removed.
+
+Fri Aug 6 17:42:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/depend: add space at the beginning of @ignore_error.
+
+ * lib/mkmf.rb: ditto.
+
+Fri Aug 6 17:38:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk (clean): add prelude.c, config.log, and rbconfig.rb.
+
+ * common.mk (distclean): remove encdb.h, config.log, and rbconfig.rb.
+
+Fri Aug 6 17:35:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * Makefile.in: ignore error from RMDIRS.
+
+ * enc/depend: ditto.
+
+ * lib/mkmf.rb: ditto.
+
+Fri Aug 6 05:53:32 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_mtime): Pathname#mtime translated from
+ pathname.rb.
+
+Thu Aug 5 22:09:30 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_ctime): Pathname#ctime translated from
+ pathname.rb.
+
+Thu Aug 5 21:20:31 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (NODE_ARGSCAT, NODE_ARGSPUSH): drop unused ARGSCAT
+ results when poped is true. [ruby-dev:41933], [Bug #3658]
+ This is retry of r28870 and r28873 which were reverted.
+
+Thu Aug 5 20:13:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * README.EXT, README.EXT.ja (String functions): mention
+ rb_str_resize and rb_str_set_len.
+
+Thu Aug 5 19:59:55 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_set_len): bail out when buffer overflowed
+ probably.
+
+Thu Aug 5 18:36:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * complex.c (nucomp_marshal_load): should check the argument.
+ [ruby-core:31622]
+
+ * rational.c (nurat_marshal_load): ditto
+
+ * marshal.c (w_float): should not append a dot if no fractal part
+ exists. [ruby-dev:41936]
+
+Thu Aug 5 17:11:43 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (void_expr_gen): add 'possibly' to warning message.
+ [ruby-core:31611]
+
+Thu Aug 5 16:57:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (glob_make_pattern): fold continuous PLAINs to get rid of
+ snail at too deep path. [ruby-dev:41871]
+
+Thu Aug 5 16:42:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_set_len): should fail to modify shared string.
+
+Thu Aug 5 14:12:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe): ensure sopath to be modifiable
+
+Thu Aug 5 12:39:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_make_independent_expand): fix buffer overflow
+ while shrinking.
+
+Thu Aug 5 06:42:31 2010 Tanaka Akira <akr@fsij.org>
+
+ * file.c (realpath_rec): call rb_str_modify before rb_str_set_len.
+
+Wed Aug 4 19:37:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_set_len): rb_str_modify cannot work before the
+ length is set, which is a precondition for rb_str_modify.
+
+Wed Aug 4 15:47:21 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): no need to create the directory
+ at each library file. this change makes making ext faster.
+
+Wed Aug 4 06:25:04 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_atime): Pathname#atime translated from
+ pathname.rb.
+
+Tue Aug 3 21:16:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (Init_Random): add Random::DEFAULT.
+
+Tue Aug 3 21:01:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_check_hash_type): added.
+
+Tue Aug 3 20:30:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (rb_big_eq): never equal to infinity.
+ [ruby-core:31603]
+
+ * rational.c (nurat_div): hack for integral float divisor.
+
+Tue Aug 3 14:42:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/extmk.rb: remove purelib, fixes a bug in r28440, r28441.
+
+ * spec/default.mspec: ditto.
+
+ * template/Doxyfile.tmpl: ditto.
+
+Tue Aug 3 14:19:42 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/rdoc/ri/driver.rb (setup_pager): no need to check the existence
+ of pagers. the following code checks whether they are executable or
+ not.
+
+Tue Aug 3 12:03:57 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * tool/runruby.rb: no purelib.
+
+Tue Aug 3 07:52:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/purelib.rb: no longer used since the default load path of
+ miniruby is empty.
+
+Tue Aug 3 00:53:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * insns.def, vm_core.h: fixed typo. reported by Rocky Bernstein
+ <rockyb AT rubyforge.org> at [ruby-core:31596].
+
+Mon Aug 2 21:51:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe): rb_str_set_len modifies ptr
+ since r26303.
+
+Mon Aug 2 21:16:03 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c: NONAMELESSUNION defined only if gcc
+ version is older than 3.4.4. [ruby-core:31567] [Bug #3637]
+ * ext/win32ole/extconf.rb: ditto.
+
+Mon Aug 2 16:34:32 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (native_thread_join): need to wait thread, of course.
+ [ruby-dev:41911]
+
+Mon Aug 2 12:22:22 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (file_expand_path): wrong condition. [ruby-core:31591]
+
+Mon Aug 2 05:34:48 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_realdirpath): Pathname#realdirpath
+ translated from pathname.rb.
+
+Sun Aug 1 23:04:49 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/pp.rb: describe superclasses explicitly.
+
+Sun Aug 1 23:04:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_modify_expand, rb_str_resize): get rid of
+ repeating malloc and realloc.
+
+Sun Aug 1 22:16:30 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_hash): use rb_memhash and
+ take care of negative finite numbers properly.
+ [ruby-core:31582][Bug #3640]
+
+Sun Aug 1 20:57:22 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_realpath): Pathname#realpath translated
+ from pathname.rb.
+
+Sun Aug 1 17:27:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub: needs stddef.h for size_t. a patch from
+ Akio Tajima at [ruby-dev:41905].
+
+Sun Aug 1 14:59:04 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_sub_ext): Pathname#sub_ext translated
+ from pathname.rb.
+
+Sun Aug 1 10:23:48 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/irb/init.rb (IRB.parse_opts): set VERBOSE to true when debug
+ switch called in irb. a patch from Andrew Grimm in
+ [ruby-core:31558].
+
+Sun Aug 1 09:35:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (big_op): comparison of bignum and infinity has returned 1
+ or -1, but it must return boolean.
+
+Sun Aug 1 09:44:25 2010 Tanaka Akira <akr@fsij.org>
+
+ * class.c (rb_include_module): don't clear the method cache if the
+ included module has no method.
+ reported by Eric Wong. [ruby-core:31559]
+
+Sun Aug 1 09:21:32 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_sub): Pathname#sub translated
+ from pathname.rb.
+
+Sun Aug 1 09:12:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/win32.h: latest x86_64 mingw defines stati64.
+ [ruby-core:27516]
+
+Sun Aug 1 08:51:52 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c: fix typo. [ruby-core:31564][Bug #3636]
+
+Sat Jul 31 23:15:27 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_inspect): Pathname#inspect translated
+ from pathname.rb.
+
+Sat Jul 31 15:50:03 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (Init_pathname): The alias,
+ Pathname#to_path, is translated from pathname.rb.
+
+Sat Jul 31 09:12:36 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_to_s): Pathname#to_s translated
+ from pathname.rb.
+
+Sat Jul 31 08:20:07 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/webrick/ssl.rb (WEBrick::Utils.create_self_signed_cert):
+ merged r28784 from ruby_1_8: wrongly created dummy SSL certificate
+ with version == 3 (no such version) and serial == 0 (must be >0).
+
+Fri Jul 30 21:43:55 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_hash): Pathname#hash translated
+ from pathname.rb.
+
+Fri Jul 30 12:42:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/net/imap.rb (example): use IO#noecho to read password if
+ possible, and defer until needed. [ruby-dev:41889]
+
+ * lib/net/imap.rb (example): support starttls option.
+ [ruby-dev:41888]
+
+Fri Jul 30 08:51:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): home directory must be absolute.
+ [ruby-core:31537]
+
+Fri Jul 30 08:33:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): should check if could find user.
+ [ruby-core:31538]
+
+Fri Jul 30 07:59:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_add_suffix): fixed a bug returning uninitialized
+ value.
+
+Fri Jul 30 07:48:04 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: use TK_XINCLUDES on tkConfig.sh when not empty,
+ even if MacOS X Aqua version [ruby-dev:41883].
+
+Thu Jul 29 22:28:35 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_cmp): Pathname#<=> translated
+ from pathname.rb.
+
+Thu Jul 29 06:51:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (EXT_SRCS): add ext/json/parser/parser.c.
+
+Thu Jul 29 05:52:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_basename): pass baselen to rmext.
+
+Thu Jul 29 02:38:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: not [freebsd] but [freebsd*] for AS_CASE.
+
+Wed Jul 28 22:23:59 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_eq): Pathname#{==,===,eql?} translated
+ from pathname.rb.
+
+Wed Jul 28 19:37:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): VC6 or later have stddef.h.
+
+ * include/ruby/missing.h: need to include stddef.h for size_t.
+
+ * include/ruby/missing.h: shouldn't declare as dllimport when building
+ ruby itself (for Windows).
+
+Wed Jul 28 17:11:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * missing/*.c: include missing.h
+
+Wed Jul 28 09:38:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * cont.c: typos.
+
+Wed Jul 28 09:24:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * cont.c: (RB_PAGE_SIZE): renamed from PAGE_SIZE. [ruby-dev:41870]
+
+ * cont.c: (RB_PAGE_MASK): renamed from PAGE_MASK.
+
+Tue Jul 27 23:09:09 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_taint): use rb_obj_taint.
+ (path_untaint): Pathname#untaint translated from
+ pathname.rb.
+
+Tue Jul 27 18:59:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (have_framework): added.
+
+Tue Jul 27 18:33:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * defines.h, intern.h, missing.h, ruby.h, st.h, util.h: include
+ config.h and defines.h for autoconf macros.
+
+Tue Jul 27 16:27:38 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (flo_cmp): typo.
+
+Tue Jul 27 16:09:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * class.c, compile.c, dir.c, file.c, iseq.c, parse.y, random.c:
+ clean unused-value warnings.
+
+ * cont.c, process.c, vm_exec.h: clean cast warnings.
+
+Mon Jul 26 22:34:37 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_taint): Pathname#taint translated from
+ pathname.rb.
+
+Mon Jul 26 18:18:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (config.h): add include guard.
+
+ * win32/Makefile.sub, bcc32/Makefile.sub (config.h): ditto.
+
+Mon Jul 26 14:38:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (XCFLAGS): missing.h needs config.h.
+
+Mon Jul 26 14:08:47 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/missing.h: revert a part of r28727. config.h is expected
+ to include only once, before including defines.h.
+ including it here breaks some macro definitions.
+
+Mon Jul 26 13:52:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: define BROKEN_CLOSE only on FreeBSD.
+ This needs to merge to 1.9.2.
+
+Mon Jul 26 13:01:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (rb_thread_mark): should mark iseq itself other than normal
+ iseq. [ruby-dev:41880]
+
+Mon Jul 26 11:51:01 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: define BROKEN_CLOSE on FreeBSD.
+ This fixes build failure on MSVC. [ruby-core:31481]
+
+ * include/ruby/ruby.h, include/ruby/missing.h:
+ use BROKEN_CLOSE for replacing close(2).
+
+Mon Jul 26 09:51:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (rb_thread_mark): mark only self of normal iseqs, not
+ nodes. [ruby-dev:41874]
+
+Sun Jul 25 05:37:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_cmp): honor the result of infinite? method of the
+ other. [ruby-core:31470]
+
+ * test/ruby/envutil.rb (EnvUtil#.suppress_warning): added.
+
+ * test/ruby/test_float.rb (TestFloat#test_Float): suppress
+ warnings under --verbose.
+
+Fri Jul 23 16:07:32 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/mutex_m.rb (sleep): added Mutex_m#sleep to support
+ ConditionVariable.
+
+Fri Jul 23 15:09:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_MINGW32): ignore msvc suffix.
+
+ * configure.in (RUBY_TRY_CFLAGS): try with werror turned on.
+
+Fri Jul 23 09:02:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * re.c (rb_reg_expr_str): fixed out-of-boundary access at invalid
+ multibyte characters.
+
+Fri Jul 23 09:00:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (XCFLAGS): reverted mistakenly removed option.
+ [ruby-dev:41872]
+
+ * include/ruby/missing.h: needs ruby/config.h.
+
+Thu Jul 22 20:58:55 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_EXTERN): unnecessary after all.
+
+Thu Jul 22 17:33:47 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * complex.c (nucomp_to_i): allow complex with imaginary zero to be
+ converted.
+
+ * complex.c (nucomp_to_f, nucomp_to_r): ditto.
+
+Thu Jul 22 20:12:56 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread_pthread.c (get_stack): fix memory leak; pthread_attr_destroy
+ must be called even when pthread_getattr_np is used.
+ [ruby-core:31269]
+
+Thu Jul 22 16:27:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_expr_str): fix broken Regexp#inspect when it
+ is ASCII-8BIT and non-ASCII character.
+ The length of character should be from original byte string.
+ [ruby-core:31431]
+
+Thu Jul 22 14:30:17 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/missing.h: add prototype for ruby_close().
+
+Thu Jul 22 12:58:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_EXTERN): ignore invalid attribute.
+
+ * configure.in: fix for older autoconf.
+
+Thu Jul 22 12:02:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/{intern,io}.h: add missing prototypes.
+
+Thu Jul 22 06:38:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (XCFLAGS): use -fvisibility=hidden if possible.
+
+ * configure.in (RMDIR): use --ignore-fail-on-non-empty if possible.
+
+ * configure.in (RUBY_EXTERN): FUNCTION-BODY was missing.
+
+Thu Jul 22 03:02:55 2010 Eric Hodel <drbrain@segment7.net>
+
+ * README.EXT: fix signature of rb_ensure and rb_rescue to match
+ implementation.
+
+Wed Jul 21 23:07:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/fake.rb.in: get rid of embedding an absolute path.
+
+Wed Jul 21 15:22:17 2010 Evan Phoenix <evan@fallingsnow.net>
+
+ * lib/rubygems/custom_require.rb, gem_prelude.rb: Load code from
+ from gems properly.
+
+Wed Jul 21 15:15:02 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * sprintf.c: add short documentation about named reference.
+ [ruby-core:31294]
+
+Wed Jul 21 15:00:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (local_push_gen): disable unused variable warnings in
+ eval. [ruby-dev:41869]
+
+Wed Jul 21 13:57:37 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_method.c (rb_method_boundp): revert r28543, r28564.
+ They may be merged in Ruby 2.0. [ruby-core:31217]
+
+Wed Jul 21 13:37:35 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/uri/common.rb: Have URI#route_to, URI#route_from accept
+ string-like arguments [ruby-core:30961]
+
+ * lib/uri/generic.rb: ditto for URI.join, URI#merge
+
+Wed Jul 21 12:39:15 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/cmath.rb (CMath#cbrt): cbrt should accept a negative real
+ numbers. [ruby-core:31234]
+
+Wed Jul 21 12:31:30 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/uri/common.rb: Have URI() and URI.join accept URI objects in
+ addition to strings. [ruby-core:30960]
+
+Wed Jul 21 11:55:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_hdtoa): renamed from BSD__hdtoa.
+
+Tue Jul 20 11:35:11 2010 Evan Phoenix <evan@ruby-lang.org>
+
+ * lib/rubygems.rb: Load the custom require if --disable-rubygems
+ was used.
+
+Tue Jul 20 11:27:18 2010 Evan Phoenix <evan@ruby-lang.org>
+
+ * gem_prelude.rb: Pull in rubygem's custom require
+
+ * lib/rubygems.rb: Handle always having custom require available
+
+Tue Jul 20 18:39:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (RSTRING_GETMEM): new macro to get ptr and
+ len at once.
+
+ * string.c (rb_str_cmp, str_eql, rb_str_eql): trivial improvements.
+
+Tue Jul 20 18:23:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/fiddle/closure.c (closure_data_type),
+ ext/fiddle/function.c (function_data_type): rb_data_type_t has
+ changed.
+
+Tue Jul 20 14:21:38 2010 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c: don't call after_gc_sweep() after when garbage_collect()
+ was called, because rb_sweep_method_entry() free live unlinked
+ method entries. [ruby-core:31169]
+
+Tue Jul 20 12:42:06 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * ext/socket/raddrinfo.c (rb_getaddrinfo): according to my
+ valgrind output this variable should be initialized beforehand.
+
+Tue Jul 20 12:50:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_flush_buffer): write and buffer operations should be
+ monolithic. [ruby-core:31348]
+
+Tue Jul 20 12:27:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/fileutils.rb (FileUtils::Entry_#copy): check file name
+ separator boundary. [ruby-core:31360]
+
+Mon Jul 19 18:34:12 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (get_strpath): check the type.
+ (path_initialize): bypass to_path call for T_STRING.
+ (path_freeze): implemented.
+
+ * ext/pathname/lib/pathname.rb (Pathname#freeze): removed.
+
+Mon Jul 19 12:33:29 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_clear): should not unshare embedded array, and
+ should make unshared array embedded.
+
+Mon Jul 19 09:00:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * NEWS (Kernel#instance_eval): add an incompatible change since
+ the 1.9.1 release. [ruby-core:31336]
+
+Mon Jul 19 05:46:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_data_type_t): add new feature macros.
+
+Sun Jul 18 21:20:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_clear): no need to duplicate buffer just before
+ clearing.
+
+Sun Jul 18 16:31:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_data_type_t): restructured. [ruby-dev:41862]
+ add parent member.
+
+ * error.c (rb_typeddata_inherited_p): new function.
+
+Sun Jul 18 01:09:27 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/pathname.c (path_initialize): return a value.
+
+Sun Jul 18 00:02:19 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/lib/pathname.rb (Pathname#initialize): removed.
+
+ * ext/pathname/pathname.c (path_initialize): implemented.
+ (get_strpath): new function.
+ (set_strpath): ditto.
+
+Sat Jul 17 19:01:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (MiniTest::Unit#process_args): refactored.
+
+Sat Jul 17 18:30:05 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/file2lastrev.rb: don't depend on pathname.rb if File.realpath
+ is available.
+
+Sat Jul 17 14:10:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_add_suffix): fixed type warnings.
+
+Sat Jul 17 13:48:22 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pathname/lib/pathname.rb: moved from lib/pathname.rb.
+ require pathname.so.
+
+ * ext/pathname/pathname.c: new file to define empty Pathname class.
+
+ * ext/pathname/extconf.rb: new file.
+
+Sat Jul 17 13:04:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_wakeup_alive): split from rb_thread_wakeup.
+ merged from r13476. c.f. [ruby-core:31320]
+
+Sat Jul 17 10:07:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb: MiniTest::Unit is different class from
+ Test::Unit, and install runner before loading test/minitest.
+
+Fri Jul 16 14:58:38 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit.setup_argv): run tests only when
+ any tests have not run.
+
+ * bin/testrb, test/runner.rb: use Test::Unit.start.
+
+Fri Jul 16 12:06:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb (ext-arch): prune directories start with '-'.
+
+Thu Jul 15 21:43:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * numeric.c (fix_divide): must not use rb_rational_new1 for coercion
+ because it returns an argument itself when canonical mode is set.
+ [ruby-core:31279]
+
+Thu Jul 15 21:38:31 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * proc.c (bm_free): fix memory leak. [ruby-core:30869] [Bug #3466]
+
+Thu Jul 15 15:47:32 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regexec.c (onig_search): don't skip non-ANYCHARs when
+ .* fails to match. This causes to fail matching
+ ANYCHAR_STAR with LOOK_BEHIND. This fix is workaround
+ and disable the optimization. [ruby-dev:41851]
+
+Thu Jul 15 06:11:29 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/rdoc/markup/attribute_manager.rb: fixing ri output when special
+ characters are inside html tags. Thanks Tomo Kazahaya! [Bug #3512]
+
+Thu Jul 15 06:01:42 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (guess_local_offset): use the UTC offset of an older date on
+ 64bit time_t environment.
+
+Thu Jul 15 02:42:51 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/test/unit.rb (setup_argv): convert to using optparse, adding
+ --help and -I. [ruby-core:30154]
+
+Thu Jul 15 00:35:09 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (localtime_with_gmtoff_zone): renamed from
+ localtime_with_gmtoff and return the timezone abbreviation name.
+ (guess_local_offset): return the isdst and timezone abbreviation name.
+ (localtimew): use the returned isdst and timezone abbreviation name.
+ [ruby-core:31275]
+
+Wed Jul 14 20:23:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (frame_func_id), vm_eval.c (rb_iterate),
+ vm_insnhelper.c (vm_yield_with_cfunc): as the name of a C-level
+ block, use the current method ID at the creation point.
+ [ruby-dev:41852]
+
+Wed Jul 14 18:18:05 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regexec.c (match_at): add end point to enclen's argument.
+ This only effect on compiling with -DONIG_DEBUG_MATCH.
+
+Tue Jul 13 21:34:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/readline/readline.c: libedit is missing declaration of
+ rl_getc.
+
+Tue Jul 13 21:31:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_daemon): split from proc_daemon.
+
+ * process.c (rb_fork_err): suppress gcc 4.4 warnings.
+
+ * random.c (fill_random_seed): ditto.
+
+Tue Jul 13 21:01:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/pty/pty.c (establishShell): chfunc must not raise any
+ exceptions.
+
+Tue Jul 13 20:58:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_DEFAULT_ARCH): adjust for target
+ cpu. [ruby-core:31243]
+
+Tue Jul 13 20:46:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/handle.c (rb_dlhandle_close): should not pass a dynamic
+ string to rb_raise directly.
+
+Tue Jul 13 12:04:57 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * missing/close.c: keep original errno.
+
+Mon Jul 12 01:58:56 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/csv.rb: Fix unused variable warnings.
+ Patch by Run Paint [ruby-core:30991]
+
+ * lib/date.rb: ditto
+
+ * lib/debug.rb: ditto
+
+ * lib/drb/drb.rb: ditto
+
+ * lib/drb/invokemethod.rb: ditto
+
+ * lib/irb/ruby-lex.rb: ditto
+
+ * lib/irb/slex.rb: ditto
+
+ * lib/logger.rb: ditto
+
+ * lib/pathname.rb: ditto
+
+Sun Jul 11 21:20:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * README.EXT{,.ja} (rb_block_call): fixed about third/fourth
+ arguments to the block. based on [ruby-core:31192] by Asher
+ Haig. [Bug #3558]
+
+Sun Jul 11 17:01:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in ({,dist-,real-}clean-ext): should also omit
+ semicolon when omitting "in WORDS" of FOR-statement.
+
+ * tool/rmdirs: ditto.
+
+Sun Jul 11 11:07:42 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/rdoc/test_rdoc_ri_driver.rb (test_formatter): add a test. a
+ patch from caleb clausen in [ruby-core:31182].
+
+Sat Jul 10 21:43:11 2010 Tanaka Akira <akr@fsij.org>
+
+ * strftime.c (rb_strftime_with_timespec): fix precision handling for
+ %:z and %::z.
+
+Fri Jul 9 22:32:54 2010 Tanaka Akira <akr@fsij.org>
+
+ * strftime.c: unused declarations removed.
+
+Fri Jul 9 21:20:22 2010 Tanaka Akira <akr@fsij.org>
+
+ * strftime.c (rb_strftime_with_timespec): clear colons at unknown
+ directive.
+
+Fri Jul 9 21:04:10 2010 Tanaka Akira <akr@fsij.org>
+
+ * strftime.c: don't call tzset. strftime.c doesn't depend on
+ the global timezone.
+
+Fri Jul 9 20:30:26 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (find_time_t): 24:00 should be the beginning of the next
+ day even if the leap second, 23:59:60, exists.
+
+Fri Jul 9 01:08:46 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/emitter.rb (initialize): line_width is
+ a valid option passed to the emitter.
+
+ * test/psych/test_psych.rb: corresponding tests.
+
+Fri Jul 9 00:49:46 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/emitter.c (line_width, set_line_width): preferred line may
+ be set on the emitter.
+
+ * test/psych/test_emitter.rb: corresponding tests.
+
+Thu Jul 8 15:47:34 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_conv_enc_opts): fix infinite loop because
+ of ISO-2022-JP conversion with empty string.
+ patched by Brian Buchanan [ruby-core:31107]
+
+Thu Jul 8 08:16:57 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb (push): adding version
+ and header emit options.
+
+ * test/psych/test_psych.rb: corresponding test.
+
+Thu Jul 8 08:01:03 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/emitter.c: updating documentation about emit options
+
+ * ext/psych/lib/psych/core_ext.rb: ditto
+
+ * ext/psych/lib/psych.rb (dump): passing emit options to emitter.
+
+ * ext/psych/lib/psych/nodes/node.rb: ditto
+
+ * ext/psych/lib/psych/visitors/emitter.rb: sending emit options to
+ YAML emitter. [ruby-core:28318]
+
+Thu Jul 8 06:05:58 2010 Tanaka Akira <akr@fsij.org>
+
+ * strftime.c (rb_strftime_with_timespec): support %:z and %::z.
+ [ruby-dev:41841]
+
+Thu Jul 8 00:15:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * gem_prelude.rb: provide workaround for gem activation. Currently,
+ gem activation does not work by default. Now it can be worked
+ around by requiring "rubygems" first. [ruby-core:29486]
+ a patch from Evan Phoenix in [ruby-core:31096].
+
+ * lib/rubygems.rb: ditto.
+
+Wed Jul 7 10:01:34 2010 Adrian Bloomer <adrian.bloomer@gmail.com>
+
+ * numeric.c (fix_rev): Replaced fix_rev with '~num | FIXNUM_FLAG'.
+
+Wed Jul 7 13:22:20 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (ruby_find_basename): set correct baselen.
+
+Wed Jul 7 13:02:59 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * vm_method.c (rb_method_boundp): respond_to?(:protected_method,
+ true) should return true. Pointed out by Marc-Andre Lafortune.
+ [ruby-dev:41837]
+
+Wed Jul 7 12:00:24 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (ruby_find_basename): should initialize f.
+
+Wed Jul 7 11:44:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/zlib/zlib.c (gzfile_raise): add invalid header to
+ exceptions.
+
+Wed Jul 7 10:26:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * missing/close.c: ignore ECONNRESET.
+ FreeBSD wrongly sets ECONNRESET on close(2) and
+ it causes false-negative exceptions. [ruby-dev:41778]
+
+ * configure.in: ditto.
+Tue Jul 6 22:57:21 2010 Tanaka Akira <akr@fsij.org>
+
+ * io.c (nogvl_copy_stream_sendfile): jump to retry_sendfile directly
+ to avoid select() on a socket which TCP state is CLOSED.
+ patch by Eric Wong. [ruby-core:31053]
+
+Tue Jul 6 21:45:34 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io/console/console.c (winsize_row): should return actual screen
+ size, not buffer size.
+
+Tue Jul 6 08:35:58 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/dl/lib/dl/import.rb (handler): add a more helpful error message
+ when calling import_symbol or import_function without calling
+ dlload. Thanks nobu! [ruby-core:30996]
+
+Tue Jul 6 00:34:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm.c (thread_free): free altstack to prevent memory leak. a patch
+ from Tomoyuki Chikanaga in [ruby-dev:41815]. [Bug #3537]
+
+Tue Jul 6 00:29:27 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (NONASCII_MASK): NONASCII_MASK must be unsigned.
+ [ruby-dev:41782]
+
+Mon Jul 5 16:05:39 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * vm_method.c (rb_method_boundp): Return false for protected
+ methods when called from Kernel#respond_to?. [ruby-dev:40461]
+
+Mon Jul 5 12:32:01 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/scalar_scanner.rb (parse_string): support
+ timezones that are not one hour off. [ruby-core:31023]
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto
+
+Sun Jul 4 22:49:54 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_syntax.rb: split test_syntax from test_system.rb.
+
+Sun Jul 4 22:02:02 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_system.rb (test_syntax): unified with test_syntax2.
+
+Sun Jul 4 21:00:39 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_system.rb (test_syntax2): moved from sample/test.rb
+ [ruby-dev:41721]
+
+Sun Jul 4 17:13:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (swallow, prepare_getline_args, rb_io_getline_1): fix for
+ paragraph mode reading in non-ascii-compatible encoding.
+ [ruby-dev:41803]
+
+Sat Jul 3 16:14:10 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.c (Init_bigdecimal): add two new constants
+ BigDecimal::INFINITY and BigDecimal::NAN.
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb (BigMath.exp): modify the
+ behaviors for infinity arguments as same as Math.exp.
+
+Sat Jul 3 09:47:26 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb(visit_Psych_Nodes_Scalar):
+ teaching Psych to deserialize DateTime objects. [Bug #1390]
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb(visit_DateTime): added a
+ method for serializing DateTime objects.
+
+ * ext/psych/lib/psych/scalar_scanner.rb(parse_time): add method for
+ parsing times objects from a string.
+
+ * test/psych/test_date_time.rb: tests for dumping DateTime objects.
+
+Sat Jul 3 09:13:55 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb (visit_Time): use
+ Time#nsec to accurately serialize time objects. [ruby-core:29233]
+
+Fri Jul 2 23:30:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (argf_inplace_mode_set): prohibits an assignment of a tainted
+ value.
+
+ * file.c (ruby_find_basename, ruby_find_extname): split from
+ rb_file_s_basename() and rb_file_s_extname().
+
+ * util.c (ruby_add_suffix): support arbitrary length of the suffix
+ to get rid of the potential buffer overflow.
+ reported by tarui.
+
+Fri Jul 2 05:31:51 2010 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (rb_num2long): accept LONG_MAX < x < LONG_MAX+1 and
+ LONG_MIN-1 < x < LONG_MIN as well because they are converted
+ into the valid range of long by truncation.
+ (rb_num2ulong): accept ULONG_MAX < x < ULONG_MAX+1 and
+ LONG_MIN-1 < x < LONG_MIN as well.
+ (rb_num2ll): accept LLONG_MAX < x < LLONG_MAX+1 and
+ LLONG_MIN-1 < x < LLONG_MIN.
+
+Thu Jul 1 23:10:25 2010 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Improving documentation.
+
+Thu Jul 1 22:15:01 2010 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (rb_num2ulong): fix the lower limit for float.
+ [ruby-dev:41361]
+
+Thu Jul 1 21:37:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/envutil.rb (EnvUtil#invoke_ruby): integrated with
+ runexec.
+
+Thu Jul 1 16:19:53 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * thread_pthread.c (thread_start_func_1): don't call
+ native_thread_init_stack(th) on cygwin to avoid the segv
+ introduced by r27789. Cygwin's signal implementation is half
+ baked so USE_SIGNALSTACK is not defined and it needs another
+ treatment.
+
+Thu Jul 1 13:00:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (test-knownbug): ignore known bugs.
+
+Thu Jul 1 08:40:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_object): suppress empty instance variable entry on
+ compatible dump objects.
+
+Wed Jun 30 07:29:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_rubyoptions.rb (test_script_from_stdin): by using
+ a pipe, get rid of not-well-defined behavior after the child
+ process terminated in pty.
+
+Wed Jun 30 02:30:26 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * thread_pthread.c (get_stack): use pthread_getthrds_np() for AIX.
+
+ * configure.in: ditto.
+
+Tue Jun 29 21:11:15 2010 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * ext/stringio/stringio.c (strio_write): add RB_GC_GUARD.
+
+Tue Jun 29 19:39:59 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_win32ole_method.rb (is_ruby64): check
+ ruby binary is mswin64 or mingw64. [ruby-dev:41756]
+
+Tue Jun 29 14:18:21 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (rb_realpath_internal, realpath_rec): skip UNC share root
+ on DOSISH platforms.
+ http://pc12.2ch.net/test/read.cgi/tech/1272248179/600
+
+Tue Jun 29 11:52:33 2010 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c (unlink_heap_slot, slot_sweep): unlink heaps_slot of
+ heaps_slot linked list if heaps_slot is empty at slot_sweep.
+ fixed [ruby-dev:41543], [ruby-core:24894].
+
+Tue Jun 29 01:22:08 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/fiddle/fiddle.h: added FFI type detection to avoid bug in ffi
+ header files. Thanks Yugui! [ruby-core:30917]
+
+Mon Jun 28 22:14:22 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/rdoc/test_rdoc_ri_driver.rb (TestRDocRIDriver#test_formatter):
+ fix a test accordingly to r28455.
+
+Mon Jun 28 21:56:14 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (rb_fd_resize, rb_fd_copy): avoid NULL dereference upon
+ failed realloc by using xrealloc instead of not realloc. a patch
+ from Jim Meyering <meyering at redhat.com> in [ruby-core:30920]
+ [Bug #3489]
+
+Mon Jun 28 20:32:33 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_win32ole_method.rb (test_offset_vtbl): check
+ that Ruby is 32bit or 64bit binary in order to get correct offset
+ value. [ruby-dev:41741]
+
+Mon Jun 28 05:32:51 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/rdoc/ri/driver.rb (RDoc::RI::Driver#formatter): should use bs
+ format when stdout is piped. [ruby-core:30734]
+
+Mon Jun 28 03:12:03 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bootstraptest/test_class.rb: add a test for [ruby-core:30843].
+
+Mon Jun 28 02:43:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * class.c (rb_mod_init_copy): when class is dup'ed, a metaclass of the
+ class should be attached to the dup'ed class, not the original
+ class. [ruby-core:30843] [Bug #3461]
+
+Sun Jun 27 23:31:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/io.h, io.c: reverted r21709.
+
+ * ruby.c (load_file_internal): nothing to read if EOF reached
+ while reading shebang. [ruby-core:30910]
+
+Sun Jun 27 13:25:07 2010 Tanaka Akira <akr@fsij.org>
+
+ * io.c (simple_sendfile): don't try to send data more than SSIZE_MAX
+ with single sendfile call..
+ based on the patch by Eric Wong. [ruby-core:30908]
+
+Sun Jun 27 10:41:38 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/require_paths_builder.rb (write_require_paths_file_if_needed):
+ no reason that bin directory should be included in $LOAD_PATH.
+ it is for executable files, but not libraries. [ruby-core:25936]
+
+Sat Jun 26 13:07:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (enable-debug-env): option for RUBY_DEBUG env.
+
+Sat Jun 26 11:56:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (clear-installed-list): put redirection before set
+ command, since it seems to be handled by nmake in special way.
+ [ruby-dev:41711]
+
+Sat Jun 26 10:08:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/envutil.rb (EnvUtil#invoke_ruby): no needs to copy the
+ original ENV, since it's done in spawn automatically.
+ [ruby-dev:41733]
+
+Sat Jun 26 08:44:22 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * NEWS (zlib): new methods. [ruby-dev:41706] [Bug #3472]
+
+Sat Jun 26 07:59:18 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_win32ole_method.rb (test_offset_vtbl): check
+ that OS is Windows 32bit or Windows 64bit in order to get
+ correct offset value.
+
+Sat Jun 26 04:39:12 2010 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * ext/dl/lib/dl/func.rb (call): don't overwrite original arguments
+ to defend from GC.
+ * test/dl/test_func.rb (test_string): add test for above.
+
+Fri Jun 25 11:45:36 2010 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Fixing a bug that prevented CSV from parsing
+ all multi-line fields correctly. Patch by Rob Biedenharn.
+
+Fri Jun 25 10:07:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/envutil.rb (Test::Unit::Assertions#assert_in_out_err):
+ return the exit status.
+
+ * test/ruby/envutil.rb (EnvUtil#invoke_ruby): change the
+ environment of spawned process only.
+
+ * test/ruby/envutil.rb (EnvUtil#invoke_ruby): get rid of possible
+ deadlock.
+
+Fri Jun 25 06:24:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/un.rb (httpd): MaxClients also should be integer.
+ [ruby-dev:41724] [Bug #3477]
+
+ * lib/un.rb (setup): fix of word splitting. [ruby-dev:41723]
+ [Bug #3476]
+
+Fri Jun 25 01:07:17 2010 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * include/ruby/ruby.h (static inline rb_gc_guarded_ptr): prevent
+ RB_GC_GUARD_PTR being removed by optimization.
+
+Thu Jun 24 06:22:27 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (ruby_getaddrinfo__darwin): the workaround
+ for Mac OS X moved from rsock_getaddrinfo.
+
+Thu Jun 24 05:44:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (struct dump_arg, struct load_arg): merge taint and
+ untrust flags into infection as bit flags.
+
+ * marshal.c (w_nbyte, clear_dump_arg): infect the buffer as soon
+ as appending, because it might have been finalized already at
+ exit. based on a patch by Tomoyuki Chikanaga
+ at [ruby-dev:41672]. [Bug #3463]
+
+Wed Jun 23 23:49:21 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (str_is_number): renamed from str_isnumber to
+ avoid confusion to str_isnumber in ext/socket/getaddrinfo.c.
+
+Wed Jun 23 23:45:31 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * NEWS (stringio): new methods. [ruby-dev:41687] [Bug #3469]
+
+Wed Jun 23 22:52:00 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c: don't use __P.
+
+Wed Jun 23 21:32:08 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (reg_get_typelib_file_path): try win64
+ registry entry at first. [ruby-dev:41674] [Bug #3464]
+
+Wed Jun 23 21:17:32 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (ruby_getaddrinfo__darwin): new workaround for
+ getaddrinfo problem on Mac OS X Snow Leopard. [ruby-core:29427]
+ patch by Wataru Kimura. [ruby-core:30842]
+
+Wed Jun 23 17:12:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * NEWS (ptr): new method and deprecated methods. [ruby-dev:41681]
+
+ * ext/pty/{README,README.ja}: ditto.
+
+ * ext/pty/pty.c (pty_check): add rdoc.
+
+Wed Jun 23 12:44:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_regexp.rb (test_dup_warn): read in UTF-8
+ encoding regardless environment.
+
+ * test/ruby/envutil.rb (invoke_ruby): add encoding option.
+
+Wed Jun 23 06:44:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (fchown): need to check. a patch by Eric Wong
+ at [ruby-core:30818].
+
+ * io.c (argf_next_argv): check for setting owner/group.
+
+Tue Jun 22 23:10:10 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (num_exact): fix for mathn. [ruby-dev:41599]
+
+Tue Jun 22 22:00:06 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb: suppress warnings.
+
+Tue Jun 22 21:33:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/optparse/test_summary.rb: fixed superclass so that it run
+ solely.
+
+Tue Jun 22 19:57:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (shadowing_lvar_gen): should add lvar to vars and
+ used. [ruby-dev:41666]
+
+Tue Jun 22 13:23:13 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/delegate.rb: Forward #trust, #untrust, #taint and #untaint
+ to both the delegator and __getobj__ [ruby-core:26138]
+
+Mon Jun 21 23:41:08 2010 wanabe <s.wanabe@gmail.com>
+
+ * eval_error.c (error_print): clear raised_flag while error-printing
+ to avoid hang. [ruby-core:27608]
+
+ * test/ruby/test_beginendblock.rb (test_endblock_raise): add test for
+ above.
+
+Sun Jun 20 16:17:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * id.c (Init_id): add underscore name.
+
+ * parse.y (warn_unused_var): ignore underscore name.
+
+ * parse.y (warn_unused_var): use same format as shadowing local
+ variable.
+
+ * parse.y (shadowing_lvar_gen): get rid of adding extra name for
+ shadowing local variable. [ruby-dev:41628]
+
+Sat Jun 19 11:11:37 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/irb.rb: remove double exclamation marks. a patch from Diego
+ Viola. [ruby-core:30589]
+
+Sat Jun 19 03:35:58 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb (resolve_klass): fix the
+ exception message when attempting to load an unknown class. Thanks
+ nobu! [ruby-dev:41399]
+
+ * test/psych/test_psych.rb: test for the exception message
+
+Fri Jun 18 10:37:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * gc.c (gc_lazy_sweep): clean a warning.
+ "suggest parentheses around assignment used as truth value"
+
+ * transcode_data.h (getGB4bt1): clean a warning.
+ "suggest parentheses around arithmetic in operand of |"
+
+ * transcode_data.h (getGB4bt3): ditto.
+
+ * vm.c (thread_free): clean a warning. "format 'p' expects type
+ 'void *', but argument 3 has type 'struct rb_mutex_struct *'"
+
+Fri Jun 18 10:15:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ruby.c: add prototype of rb_realpath_internal.
+
+ * load.c: ditto.
+
+Fri Jun 18 01:50:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * object.c: Object#public_methods, private_methods, etc. returns
+ method ids that belong to the class or the singleton class(es) of
+ the object. [ruby-dev:41613]
+
+ * class.c: on the other hand, Module#public_instance_methods, etc.
+ returns method ids that belong to the module itself (even if the
+ module is singleton, it does not return method ids of super
+ class(es); see [ruby-core:28837]).
+
+Fri Jun 18 01:22:55 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/webrick/httpservlet/filehandler.rb
+ (prevent_directory_traversal): apply filesystem encoding to path
+ only during calling File.expand_path. [ruby-dev:41423]
+
+Thu Jun 17 23:20:14 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * load.c (rb_load_internal): remove call to rb_realpath_internal
+ within rb_load_internal which caused big performance degradation.
+ Instead, call rb_realpath_internal in the caller of
+ rb_load_internal. [ruby-dev:41502] [ruby-dev:41610]
+
+ * vm.c (rb_vm_call_cfunc): ditto.
+
+ * eval_intern.h (rb_vm_call_cfunc): ditto.
+
+ * ruby.c (process_options): ditto.
+
+Thu Jun 17 18:37:47 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (rb_str_encode_ospath): when the encoding of the parameter
+ is ASCII-8BIT, should recognize as filesystem encoding, and convert
+ to UTF-8 on Windows.
+
+ * file.c (realpath_rec): should convert to ospath encoding before
+ calling lstat().
+
+ * file.c (rb_realpath_internal): resolved string should take over
+ the encoding of base string.
+
+ * transcode.c (rb_str_encode): should return new string always.
+ fixed #3444.
+
+Wed Jun 16 18:34:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y: ripper needs warn_unused_var(), too.
+
+Wed Jun 16 18:20:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (warn_unused_var): warn unused variables.
+ [ruby-dev:41620]
+
+Wed Jun 16 15:40:53 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * error.c (rb_bug): existence of _set_abort_behavior() depends on
+ runtime version, not compiler version.
+
+Wed Jun 16 01:38:40 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/fiddle/extconf.rb: check ffi.h even when pkg-config succeeded.
+ On Debian/lenny, which is a "supported" platform, ffi.h is installed
+ in /usr/include/i486-linux-gnu/. This causes build error when using
+ gcc whose target is not i486-linux-gnu.
+
+Wed Jun 16 00:04:38 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_io.rb (safe_4): does not use Timeout because
+ Timeout.timeout uses Thread#kill which raises SecurityError when
+ $SAFE == 4. based on a patch from Tomoyuki Chikanaga.
+ [ruby-dev:41484]
+
+ * test/ruby/test_io.rb (test_print_separators): use pipe (test helper
+ method) instead of IO.pipe. [ruby-dev:41484]
+
+Tue Jun 15 17:14:58 2010 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/fiddle/extconf.rb: De Morgan's laws.
+
+Tue Jun 15 12:09:00 2010 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * ext/fiddle/extconf.rb: use pkg_config to find ffi.h.
+
+Tue Jun 15 02:31:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, common.mk (clean-ext, clean-enc): clean up cleaning
+ targets.
+
+Mon Jun 14 22:36:09 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/socket/test_socket.rb (test_udp_server): rescue Errno::ENOSYS
+ for Windows.
+
+ * test/socket/test_nonblock.rb (test_sendmsg_nonblock_error): ditto.
+
+ [ruby-dev:41597] reported by Masaya Tarui.
+
+Mon Jun 14 17:44:39 2010 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/drb.rb: raise DRbConnError instead of ArgumentError if too
+ many arguments. [ruby-dev:41481]
+
+ * test/drb/test_drb.rb: ditto.
+
+ * test/drb/drbtest.rb: ditto.
+
+Mon Jun 14 04:03:55 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/fiddle/closure.c (dealloc): refix workaround r28300.
+ don't use ffi_closure_alloc, ffi_prep_closure_loc and
+ ffi_closure_free on MACOSX and __linux__.
+ [ruby-dev:41483] [ruby-dev:41214]
+
+Sun Jun 13 15:46:07 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_rubyoptions.rb: add a simple test for __END__ and
+ DATA.
+
+Sun Jun 13 04:24:18 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/delegate.rb: Delegate !=, eql? and hash [ruby-core:26139]
+
+Sun Jun 13 02:12:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/utf8_mac.trans (buf_apply): fix for patterns
+ whose result is 2 bytes. [ruby-core:30751]
+
+Sun Jun 13 01:38:17 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * time.c (rb_localtime_r2): fix mixed declarations and code.
+
+Sun Jun 13 00:27:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/dl/lib/dl.rb: don't require when already loaded.
+
+Sun Jun 13 00:02:56 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/fiddle/closure.c (dealloc): workaround fix for libffi's
+ ffi_closure_free. [ruby-dev:41483] [ruby-dev:41214]
+
+Sat Jun 12 10:02:26 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_f_syscall): should check argument string taint before
+ invoking system calls.
+
+Sat Jun 12 09:18:31 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (uninitialized_constant): process through
+ rb_class_real() to remove "Object::" from error message.
+ [ruby-dev:40951]
+
+Sat Jun 12 00:38:37 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/dbm/extconf.rb: accept Berkley DB version 3, 4 and 5.
+ a patch from Takahiro Kambe. [ruby-dev:41531]
+
+Fri Jun 11 23:21:35 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (init_leap_second_info): check the result of
+ gmtime_with_leapsecond.
+
+Fri Jun 11 23:04:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_get_ciphers):
+ use sk_SSL_CIPHER_num and sk_SSL_CIPHER_value instead of cast.
+ patched by Takahiro Kambe [ruby-dev:41530]
+
+Fri Jun 11 22:59:31 2010 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/missing.h (isnan): fix compilation error on OpenBSD.
+
+Fri Jun 11 22:39:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/rubygems/install_update_options.rb
+ (Gem::InstallUpdateOptions#add_install_update_options): deprecate
+ --test option which has not worked. [ruby-core:21714]
+
+ * test/rubygems/test_gem_command_manager.rb: ditto.
+
+Fri Jun 11 07:34:25 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (find_time_t): test the result of LOCALTIME.
+
+Fri Jun 11 00:42:45 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (rb_localtime_r2): fix localtime overflow check.
+
+Thu Jun 10 23:05:44 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (rb_localtime_r2): refine localtime overflow check for
+ FreeBSD 6.4.
+
+Thu Jun 10 09:10:08 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_putc): documentation updated to mention putc would
+ not work well with multi-byte characters. [ruby-core:30697]
+
+ * io.c (rb_f_putc): ditto.
+
+Wed Jun 9 22:51:50 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (find_time_t): always extrapolate from past.
+ [ruby-core:30672] reported by Benoit Daloze.
+
+Wed Jun 9 22:13:08 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (calc_tm_yday): extracted from timegmw_noleapsecond.
+
+Tue Jun 8 06:27:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gem_prelude.rb: load full rubygems at LoadError for activation
+ check. [ruby-core:29486]
+
+Tue Jun 8 06:04:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (parse_mode_enc): set set_by_bom bit. [ruby-core:30641]
+
+Sun Jun 6 22:37:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_buf_cat_escaped_char): get rid of buffer
+ overflow on platforms int is bigger than 32bit, and warnings.
+
+Sun Jun 6 19:55:21 2010 Tanaka Akira <akr@fsij.org>
+
+ * array.c (rb_ary_product): clear uninitialized elements in temporary
+ array.
+
+Sun Jun 6 12:31:57 2010 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c: set_heaps_increment is not
+ called before gc_marks of lazy sweeping because live_num not
+ contain finalize objects. So call set_heaps_increment after lazy
+ sweeping if free_num are not enough. And move free_min to struct
+ rb_objspace for above. [ruby-dev:41499]
+
+Sun Jun 6 10:44:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_product): need to set the length in order to get
+ the entries marked. [ruby-dev:41540]
+
+Sun Jun 6 08:26:01 2010 Tanaka Akira <akr@fsij.org>
+
+ * vm.c (Init_BareVM): call Init_native_thread here.
+
+ * thread.c (Init_Thread): don't call Init_native_thread.
+
+ * thread_pthread.c (Init_native_thread): exported.
+
+ * thread_win32.c (Init_native_thread): ditto.
+
+ [ruby-dev:41536]
+
+Sun Jun 6 08:21:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * NEWS: Enumerable#join has been reverted. [ruby-core:30604]
+
+Sat Jun 5 20:30:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_expr_str): ASCII incompatible strings
+ must always escape or converted.
+
+ * re.c (rb_reg_expr_str): use rb_str_buf_cat_escaped_char
+ when resenc is given: for Regexp#inspect or error message.
+
+ * re.c (rb_reg_desc): add 'n' for ENCODING_NONE.
+
+Sat Jun 5 01:20:14 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (sym_inspect): Escape when the symbol is not
+ resulted encoding and not ascii_only. It had escaped
+ ascii-incompatible string, but it is wrong.
+
+Sat Jun 5 01:10:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_buf_cat_escaped_char): defined.
+ Splited from rb_str_inspect.
+
+Sat Jun 5 16:39:13 2010 Tanaka Akira <akr@fsij.org>
+
+ * .gdbinit (rp): show type name for RTypedData.
+
+Sat Jun 5 15:59:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options, load_file_internal): $0 seen from
+ required libraries by -r option should be the main script.
+ [ruby-core:23717]
+
+Sat Jun 5 15:15:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/envutil.rb (EnvUtil#invoke_ruby): support for child
+ process env.
+
+Sat Jun 5 14:11:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/net/imap/test_imap.rb (test_exception_during_shutdown):
+ need to raise always.
+
+Sat Jun 5 13:13:30 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb (eql?, ==, minor): Fix bugs when comparing/returning
+ some empty matrices.
+
+Sat Jun 5 11:00:48 2010 Tanaka Akira <akr@fsij.org>
+
+ * error.c (rb_name_err_mesg_new): guard mesg, recv and method.
+ The problem in [ruby-dev:41464] is caused because mesg is collected.
+
+Sat Jun 5 10:03:31 2010 Tanaka Akira <akr@fsij.org>
+
+ * .gdbinit (rp): detect and show RTypedData.
+
+Sat Jun 5 08:30:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_f_test): 'W' should test writable by real uid/git,
+ not world writable. [ruby-core:30587]
+
+Sat Jun 5 06:20:57 2010 Eric Hodel <drbrain@segment7.net>
+
+ * dir.c: Clarification of what '*' matches. Patch by John Wells
+ <john.wells at greatworx.com>
+
+Fri Jun 4 10:46:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/cfunc.c (rb_dlcfunc_inspect): should taint the result.
+ [ruby-dev:41533]
+
+Fri Jun 4 09:37:15 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * gc.c (gc_sweep): suppress a warning on VC, again.
+
+Thu Jun 3 23:34:55 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/lib/digest/hmac.rb: Emit a deprecation warning in
+ verbose mode and add a caution to the overview section of the
+ document. [ruby-dev:41525]
+
+Thu Jun 3 19:33:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/cfunc.c (rb_dlcfunc_inspect): suppress warnings by
+ rb_sprintf.
+
+ * ext/dl/cptr.c (rb_dlptr_s_malloc): suppress warnings.
+
+Thu Jun 3 18:58:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (ruby_init_ext): statically linked extensions have no
+ real path. [ruby-dev:41526]
+
+ * vm.c (rb_vm_call_cfunc): add filepath argument.
+
+Thu Jun 3 18:17:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/rake/test_win32.rb (Rake::TestWin32): update tests.
+ [ruby-core:30309]
+
+ * test/io/nonblock/test_flush.rb (test_flush): try pipe and
+ socketpair. [ruby-dev:41517]
+
+Thu Jun 3 09:36:43 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/dl.h (DLSTACK_TYPE): type of stack is same as VALUE.
+ reported by sakiyama shin in [ruby-dev:41514]
+
+Thu Jun 3 06:30:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_path.rb (test_path): workaround for drive
+ letter.
+
+ * test/ruby/test_path.rb (test_path): get rid of blocking on
+ access to non-existent host.
+
+Thu Jun 3 05:37:46 2010 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * tool/rbinstall.rb (install-bin): Allow bin/* install from dot-dirs.
+ Fixes rvm and multiruby installations.
+
+Thu Jun 3 01:22:45 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: fix typo and race condition.
+
+Thu Jun 3 00:58:45 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/dl/lib/dl/cparser.rb (parse_ctype): add backwards compatibility
+ by supporting "uint" types in the c parser. [ruby-core:29750]
+ * test/dl/test_cparser.rb: adding a test for "uint" changes.
+
+Wed Jun 2 11:40:02 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): should consider block on stack,
+ if block argument is passed. [ruby-core:30534]
+
+ * parse.c (arg_concat_gen): should append to nd_head, not to
+ nd_iter for NODE_BLOCK_PASS.
+
+Tue Jun 1 23:12:06 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (unescape_nonascii): \P{FOO} is also Unicode property in
+ regexp. [ruby-core:30540]
+
+Tue Jun 1 21:29:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb: adding support to rfc5789 patch verb.
+ Added a Net::HTTP::Patch class which expects a message body
+ and response body. It recycles the post method into a patch one,
+ that will send the encoded representation to the server.
+ Summarizing, a new class has been created, the post method
+ extracted into send_entity, including a new argument,
+ which defines which class to use (Post or Patch) and
+ finally a patch method was created. [ruby-core:30426]
+ Patched by Guilherme Silveira
+ <guilherme.silveira AT caelum.com.br>
+
+Tue Jun 1 03:46:08 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/readline/extconf.rb: reject GPLv3 readline. [ruby-dev:39172]
+ [ruby-core:25272] [ruby-dev:39167] [ruby-core:28736]
+
+Tue Jun 1 01:14:31 2010 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * io.c (pipe_open): add RB_GC_GUARD.
+ This caused failure when test/ruby/test_argf.rb is executed with
+ GC.stress = true in mswin32_90
+
+Mon May 31 23:44:22 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: use tclConfig.sh/tkConfig.sh when frameworks
+ are enabled on MacOS X.
+
+ * ext/tk/stubs.c: dirty hack for frameworks and stubs on MacOS X.
+
+ * ext/tk/lib/tk.rb: stop creating a dummy Tcl/Tk interpreter.
+ And hide a root window before starting eventloop. (for ruby 1.9)
+
+ * ext/tk/tcltklib.c: add codes to support Ruby/Tk-Kit (Rubykit).
+
+Mon May 31 21:49:42 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb (Resolv::DNS::Requester#request): rescue ECONNRESET
+ for Windows. reported by U.Nakamura. [ruby-dev:41477]
+
+Mon May 31 19:25:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regparse.c (onig_syntax_warn): do not use external strings as
+ printf format.
+
+Mon May 31 18:22:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-mode-set-encoding): skip shebang line
+ always regardless of ruby.
+
+Mon May 31 15:07:18 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (file_expand_path): Refix r28102: this breaks
+ r28039. test for [ruby-dev:41429] is added. [ruby-core:30516]
+
+Mon May 31 14:47:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): inspect as ASCII when the codepoint
+ of a character in Unicode string is ASCII printable one.
+
+Mon May 31 13:44:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_unicode_p): check the encoding is Unicode
+ or not by the name; not function's pointer. [ruby-dev:41479]
+
+Mon May 31 04:03:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): check if expanded dname encoding is
+ compatible with fname, not just copying. [ruby-core:30516]
+
+ * test/ruby/test_beginendblock.rb (test_endblockwarn): needs
+ encoding comment.
+
+Mon May 31 02:17:54 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * insns.def (defined): respond_to_missing? may not be available
+ (for BasicObject instances).
+
+Mon May 31 01:43:42 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/delegate: Delegator: combine (public|protected) methods with
+ those of the delegated object. [ruby-core:27224]
+ DelegateClass: combine (public|protected) instance methods
+ with those of the delegated superclass.
+
+Sun May 30 22:18:49 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/set.rb (keep_if, select!): New methods [ruby-core:29749]
+
+Sun May 30 21:51:59 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/rake/test_application.rb: update a test because of r28089.
+
+Sun May 30 21:48:07 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/tempfile.rb (Tempfile#unlink): leave @data. Assigning nil to
+ @data caused double closing error of the same IO in finalizer. a
+ patch from Simon Nicholls. [ruby-core:29395]
+
+Sun May 30 18:47:15 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: updated to b856dd07.
+ this cleans warnings.
+
+Sun May 30 18:25:55 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * load.c (load_failed): use more accurate error message.
+ [ruby-core:23851]
+
+Sun May 30 16:54:34 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * file.c (rb_file_directory_p): update rdoc. a patch from Ilkka
+ Laukkanen. [ruby-core:30016]
+
+Sun May 30 14:59:13 2010 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c (gc_mark_all_clear): don't call obj_free() in
+ gc_mark_all_clear(), because obj_free() may make T_ZOMBIE
+ objects.
+
+ * gc.c (gc_clear_mark_on_sweep_slots): renamed.
+
+ * gc.c (rb_objspace_call_finalizer): call
+ gc_clear_mark_on_sweep_slots() before calling mark_tbl().
+ [ruby-dev:41459]
+
+Sun May 30 03:40:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_tokadd_utf8, parser_tokadd_string): allow NUL
+ containing symbol literals, as well as String#to_sym.
+ [ruby-dev:41447]
+
+Sun May 30 03:03:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rdoc/generator/template/darkfish/classpage.rhtml:
+ fix encoding value of XML declaration. [ruby-dev:41452]
+
+Sun May 30 02:20:26 2010 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * thread.c (RB_GC_SAVE_MACHINE_CONTEXT), gc.c (ruby_gc_stress_start):
+ revert r28078.
+
+Sun May 30 02:21:34 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/zlib/zlib.c (zstream_append_input2): add RB_GC_GUARD.
+ This caused failure when test/csv is executed with GC.stress = true.
+
+Sun May 30 01:25:48 2010 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * thread.c (RB_GC_SAVE_MACHINE_CONTEXT): start GC
+ by switching the thread if gc_stress == true
+
+ * gc.c (ruby_gc_stress_start): ditto.
+
+Sun May 30 00:02:39 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * gc.c (force_chain_object, rb_objspace_call_finalizer): delete
+ finalizer entry after corresponding finalizer is executed.
+ This caused SEGV when test/cgi is executed with GC.stress = true.
+
+Sat May 29 23:30:33 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (str_replace_shared): change embedded state atomically.
+ [ruby-core:29953] [ruby-dev:41456]
+
+Sat May 29 12:56:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_filesystem_encindex): avoid infinite require
+ loop. [ruby-core:30467]
+
+Sat May 29 12:05:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/rdoc.rb (RDoc#read_file_contents): take care of BOM.
+ [ruby-dev:41452]
+
+Sat May 29 10:12:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (GC_PROF_TIMER_STOP): regularize `marked' to suppress
+ warnings.
+
+Sat May 29 09:34:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/envutil.rb: fix for --disable-gems.
+
+Sat May 29 09:04:06 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb (Resolv::DNS::Requester#request): rescue ECONNREFUSED.
+
+Sat May 29 08:46:29 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (allocate_sorted_heaps, before_gc_sweep, gc_sweep): removed
+ unused variables.
+
+Fri May 28 20:35:21 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * thread.c (blocking_region_begin): avoid RUBY_VM_CHECK_INTS()
+ call during GVL state transition. [Bug#3354] [ruby-dev:41435]
+
+Fri May 28 19:37:47 2010 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c: use simple lazy sweep algorithm for response performance
+ gain. See [ruby-dev:41067].
+
+ * object.c: FL_MARK of some objects by lazy sweep is copied when
+ RVALUE is cloned. These objects are not marked in the mark phase.
+ So delete FL_MARK.
+
+ * class.c: ditto.
+
+Fri May 28 18:39:38 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (sym_inspect): escape ASCII-compatible strings.
+
+ * string.c (rb_str_inspect): escape ASCII-compatible strings.
+
+Fri May 28 17:34:48 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * array.c (rb_ary_product): Use tmpary instead, to ensure marking
+ arrays by GC.
+
+Fri May 28 11:40:07 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * array.c (rb_ary_product): Do not rely on GC, t0 should be
+ checked explicitly.
+
+Fri May 28 10:40:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (checking_for): ignore toplevel.
+
+Fri May 28 00:47:16 2010 Masaya Tarui <tarui@ruby-lnag.org>
+
+ * error.c (rb_bug): suppress the error report dialog if report_bug()
+ is finished successfully.
+
+Fri May 28 00:32:25 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * insns.def (invokesuper): check consistency between class of self and
+ class of method being invoked by super. This is temporary measure
+ for YARV. See [ruby-core:30313] in detail. See [ruby-dev:40959]
+ [ruby-dev:39772] [ruby-core:27000] [ruby-core:27230]
+
+ * vm_insnhelper.c (vm_search_superclass): ditto.
+
+Thu May 27 23:38:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (rb_home_dir): set filesystem encoding.
+
+Thu May 27 23:29:18 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (file_expand_path): set encoding as the same of fname
+ when _result_ is not filesystem encoding. [ruby-dev:41429]
+
+Thu May 27 23:07:45 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (file_expand_path): use rb_enc_associate_index and
+ rb_filesystem_encindex. Strings related FileSystem should
+ have filesystem_encoding.
+
+ * file.c (SET_EXTERNAL_ENCODING): removed.
+
+Thu May 27 23:03:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/encoding.h (rb_filesystem_encindex): defined.
+
+ * include/ruby/encoding.h (rb_locale_encindex): ditto.
+
+ * encoding.c (rb_filesystem_encindex): remove static.
+
+ * encoding.c (rb_locale_encindex): ditto.
+
+Thu May 27 22:34:27 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_read): call ReadFile() with len = 0 before
+ reading really on console, because the first ReadFile() call after
+ PeekConsoleInput() always returns broken data. (Windows's bug).
+ [ruby-core:29018]
+
+Thu May 27 12:42:23 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * LGPL: Removed. We no longer have LGPL'd source files in our
+ tree.
+
+Wed May 26 20:19:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (random_rand): add the result of random to the
+ beginning of range, not the opposite. [ruby-dev:41415]
+
+Wed May 26 19:55:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (file_expand_path): revert a part of r22392. it's commit miss.
+
+Wed May 26 18:40:23 2010 Masaya Tarui <tarui@ruby-lang.org>
+
+ * test/rinda/test_rinda.rb (TupleSpaceTest, TupleSpaceProxyTest):
+ kill a used thread at teardown. [ruby-dev:41397]
+
+Wed May 26 12:08:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (random_rand): subtraction method of non-numeric can
+ return Float. [ruby-dev:41410]
+
+Wed May 26 11:50:09 2010 Eric Hodel <drbrain@segment7.net>
+
+ * marshal.c (Init_marshal): document marshal_dump and marshal_load.
+
+Wed May 26 10:35:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rb_cv_large_fd_select): needed on mingw, even
+ though fd_mask is not available. [ruby-core:30401]
+
+Tue May 25 14:00:51 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regparse.c (add_code_range_to_buf0): fix false negative
+ warning when given range is just before previous range.
+ [ruby-dev:41406]
+
+Tue May 25 16:37:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-style.el (ruby-style-version): take revision if
+ keyword is expanded. [ruby-dev:41408]
+
+Tue May 25 13:26:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/vm.h, include/ruby/encoding.h: add external
+ linkage.
+
+Tue May 25 01:46:49 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_eval.c (rb_f_caller): update rdoc. a patch from Nobuhiro IMAI
+ <nov at yo.rim.or.jp> in [ruby-dev:41387].
+
+Mon May 24 23:04:41 2010 Tanaka Akira <akr@fsij.org>
+
+ * error.c: fix wrong exception class name in rdoc.
+
+Mon May 24 19:00:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (warn_balanced, parser_yylex): no warnings after closing
+ parens.
+
+Mon May 24 12:52:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (change), tool/change_maker.rb: make a brief template
+ for ChangeLog.
+
+Mon May 24 09:19:59 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * gc.c (gc_sweep): suppress a warning on VC.
+
+Mon May 24 08:16:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_f_spawn): use correct command name for the error
+ message. [ruby-dev:41395]
+
+Sun May 23 17:48:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/lib/openssl/x509-internal.rb, lib/forwardable.rb,
+ lib/irb/cmd/fork.rb, lib/mutex_m.rb,
+ lib/shell/process-controller.rb, lib/sync.rb, object.c:
+ suppress warnings patched by Benoit Daloze at [ruby-core:30366].
+
+ * parse.y (warn_balanced): no warning for singleton class.
+ [ruby-core:30366]
+
+Sun May 23 16:56:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (CONST_ID_CACHE, rb_intern_const): suppress
+ warnings with -Wconversion.
+
+Sun May 23 07:08:34 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/json/stream.rb: adding a JSON streaming API
+
+ * ext/psych/lib/psych/stream.rb: ditto
+
+ * ext/psych/lib/psych.rb: using autoload
+
+ * ext/psych/lib/psych/json.rb: ditto
+
+ * ext/psych/lib/psych/json/tree_builder.rb: refactor
+
+ * ext/psych/lib/psych/visitors/json_tree.rb: refactor
+
+Sat May 22 03:53:05 2010 Satoshi Shiba <shiba@rvm.jp>
+
+ * cont.c (fiber_setcontext): Use swapcontext() instead longjmp().
+ [ruby-dev:41316] [Bug #3295]
+
+Fri May 21 19:11:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/nkf/nkf.c (rb_nkf_convert, rb_nkf_guess): check too huge
+ string.
+
+Fri May 21 18:12:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_intern): C90 needs nonempty macro
+ arguments.
+
+Fri May 21 13:55:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (LIBRUBYARG_SHARED): shared library will not be
+ created unless enable-shared.
+
+ * ruby.c (ruby_init_loadpath_safe): use real path for non-shared
+ build.
+
+Fri May 21 12:25:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_float): use dtoa directly instead of stripping
+ needless trailing .0.
+
+ * numeric.c (flo_to_s): reverted. [ruby-dev:41341]
+
+Fri May 21 01:06:05 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread.c (subtract_tv): if the rest is zero, should finish waiting
+ immediately.
+
+ * win32/win32.c (subtract): ditto.
+ based on a patch from Roger Pack in [ruby-core:27957].
+
+Thu May 20 22:49:04 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * re.c (rb_reg_s_union_m): update rdoc. [ruby-dev:41354]
+
+Thu May 20 22:08:28 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_eval.c (rb_f_caller): update rdoc. a patch from Nobuhiro IMAI
+ <nov at yo.rim.or.jp> in [ruby-dev:41348].
+
+Thu May 20 22:04:05 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm.c (vm_backtrace_each): now takes an init function to distinguish
+ an empty stack from out of stack. [ruby-dev:41366]
+
+ * vm_eval.c (print_backtrace, rb_thread_backtrace): ditto.
+
+Thu May 20 20:47:46 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_invoke): raise NoMethodError
+ when COM method is not found. [ruby-core:30160] [Bug #3277]
+
+ * test/win32ole/test_win32ole.rb (test_no_method_error): ditto.
+
+Thu May 20 16:17:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/psych/emitter: C99(gcc)-ism.
+
+Thu May 20 12:59:49 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/stream.rb: adding YAML streaming API for
+ infinite length streams.
+
+ * ext/psych/lib/psych.rb: refactoring for streaming API
+
+ * ext/psych/lib/psych/{handler, stream, tree_builder}.rb: ditto
+
+Thu May 20 02:12:20 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/emitter.c: output strings are automatically transcoded
+
+Wed May 19 23:36:57 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: [ruby-dev:41334] [Bug #3307] invalid result
+ on searching tcl.h/tk.h. Thanks, Masaya Tarui.
+
+Wed May 19 23:19:30 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (disconnect): closes the socket of a Net::IMAP
+ object only when it is not closed. [ruby-dev:41350]
+
+Wed May 19 20:09:38 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_eval.c (rb_f_caller): return [] instead of nil when the function
+ is called on toplevel. [ruby-dev:41348]
+
+Wed May 19 19:58:01 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/extconf.rb: mswin/mingw ruby has socketpair(), but it's
+ not exist as such name in ruby static library, so mkmf.rb cannot
+ find it.
+
+Wed May 19 19:45:10 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * iseq_compile_each (NODE_DEFINED): put nil first to fix stack
+ consistency. [ruby-core:30293]
+ Now, lfinish[0] of defined_expr seems not to be used. Refactoring
+ may be needed.
+
+Wed May 19 16:55:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (rb_num2ulong): use rb_big2ulong for data from
+ Bignum. Without this 32bit integer on 32bit environment
+ can't converted into long.
+ This fixes 1) and 2) of [ruby-dev:41289]
+
+Mon May 17 22:19:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * process.c: suppress warning for signed and unsigned type
+ inconsistency.
+
+ * ext/psych/parser.c: ditto.
+
+ * ext/sdbm/_sdbm.c: ditto.
+
+ * ext/syck/rubyext.c: ditto.
+
+Mon May 17 21:30:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * .gitignore: updated.
+
+Mon May 17 21:08:53 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (argv_size): merged into join_argv() to maintain the
+ agreement with it. removed code has a calculation bug.
+ fixed [Bug#2388]
+
+ * win32/win32.c (join_argv): calc and return the length of joined
+ argv.
+ the cause of the original bug was clarified by Masaya TARUI
+ <tarui AT prx.jp> and the solution was suggested by him, too.
+
+Mon Apr 5 09:20:08 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/iso_2022_jp.h: add CP50220.
+
+ * enc/trans/iso2022.trans: add converter for CP50220.
+
+Mon May 17 09:37:25 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/fileutils.rb (FileUtils::Entry_#entries): returns pathname in
+ UTF-8 on Windows to allow FileUtils accessing all pathnames
+ internally.
+
+Mon May 17 01:07:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (rb_w32_check_imported): workaround for VC6.
+
+Sun May 16 22:21:32 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * proc.c (mnew): initialize a field. a patch from Takahiro Kambe.
+ [ruby-dev:41312]
+
+Sun May 16 22:17:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * eval.c (setup_exception): let SystemStackError#backtrace return an
+ single element array instead of string itself. [ruby-core:30196]
+
+Sun May 16 21:51:04 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (parser_read_escape, parser_tokadd_escape): allow a hex or
+ octal encoded character after \c. This seemed to be prohibited at
+ r13836, but its ChangeLog mentions nothing about this prohibition.
+ So I assume this prohibition is not intended. [ruby-core:27229]
+
+Sun May 16 21:14:04 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * ruby/test_rubyoptions.rb (TestRubyOptions#test_segv_test):
+ fixes "NoMethodError: undefined method `[]=' for nil:NilClass"
+
+Sun May 16 17:16:09 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * proc.c (proc_binding): don't propagate filename and line_no of
+ binding that is created from C level. [ruby-dev:41322]
+
+ * vm_eval.c (eval_string_with_cref): ditto.
+
+Sun May 16 15:09:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (rb_w32_check_imported): check if extension library to be
+ loaded imports from different ruby dll.
+
+Sun May 16 14:55:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (dln_find.o): fix dependency.
+
+Sun May 16 13:55:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_loaderror): use locale string, not ascii-8bit.
+
+Sun May 16 11:39:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/missing.h (signbit): add missing prototype.
+
+Sun May 16 10:49:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (rb_iconv_sys_fail): fix number of arguments.
+ a patch by Masaya TARUI <tarui AT prx.jp>.
+
+Sun May 16 02:24:27 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * configure.in: can not load libruby.so if gcc is used with
+ --enable-shared on AIX.
+
+Sat May 15 17:16:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (rb_iconv_sys_fail): raise BrokenLibrary if
+ errno is not set. [ruby-dev:41317]
+
+Fri May 14 07:27:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_float): strip ".0" from end for rubyspec.
+
+Fri May 14 01:17:10 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_core.c (rb_thread_struct): add a field for sigaltstack.
+
+ * thread_pthread.c (thread_start_func_1): initialize machine stack
+ information.
+
+ * thread.c (thread_start_func_2): set sigaltstack for each sub thread.
+ [ruby-core:24540] [ruby-core:30207]
+
+Thu May 13 21:40:39 2010 Tanaka Akira <akr@fsij.org>
+
+ * missing/ffs.c (ffs): fixed for non-zero values.
+
+Thu May 13 18:45:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/console/console.c (get_write_fd): return primary fd if no
+ io is tied for writing.
+
+Thu May 13 18:15:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (swallow): should use more_char() instead of fill_cbuf().
+ suggested by akr.
+
+Thu May 13 17:56:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/console/console.c (console_set_echo, console_echo_p): use
+ primary fd. [ruby-dev:41309]
+
+Thu May 13 13:30:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_float): use minimal representation.
+
+ * numeric.c (ruby_dbl2cstr): split from rb_float_new.
+
+Thu May 13 13:09:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (rb_vm_get_sourceline): moved from eval_intern.h for
+ vm_dump.c.
+
+Thu May 13 12:53:13 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (swallow): support text mode and UTF-16/32 as internal encoding.
+ [Bug #1576]
+
+ * io.c (io_shift_cbuf): read and throw it away when str is NULL.
+
+Thu May 13 09:45:27 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub: link with ffs.obj.
+
+Thu May 13 07:37:49 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/sdbm/_sdbm.c: include unistd.h before sdbm.h for off_t.
+ fix compilation problem on FreeBSD 6.4.
+
+Wed May 12 23:48:37 2010 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_quad_pack): deprecated.
+ (rb_quad_unpack): ditto.
+
+Wed May 12 22:22:05 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (rb_big_abs_find_minbit): use ffs().
+
+ * configure.in: check ffs().
+
+ * missing/ffs.c: new file.
+
+ * include/ruby/missing.h (ffs): declared.
+
+Wed May 12 16:43:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_to_s): fixed broken output including nuls.
+
+Wed May 12 16:25:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_to_s): exponent needs 2 digits.
+
+Wed May 12 16:02:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_to_s): fill lower zeros.
+
+Wed May 12 15:45:36 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/rdoc/generator/ri.rb (generate): should load existing cache
+ before generating it.
+
+Wed May 12 15:04:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb (BigMath#log): improved
+ precision and performance. [ruby-dev:41295]
+
+Wed May 12 11:39:10 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/extconf.rb: test all IPPROTO_* constants for recent Win32
+ SDK.
+
+Wed May 12 10:57:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_to_s): make minimum string representation.
+ [ruby-core:30145]
+
+Wed May 12 09:21:05 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_initialize_m): fix wrong index for the lang
+ option's value 'N'. reported by Masaya TARUI via IRC.
+
+Tue May 11 23:07:22 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: test IPPROTO_IP and IPPROTO_IPV6 constants.
+
+ * ext/socket/mkconstants.rb: define macros for enum.
+
+ [ruby-dev:38849]
+
+Tue May 11 21:53:18 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/rake/test_task_arguments.rb: makes ENV empty during tests
+ because ENV may change the behavior of Rake::TaskArguments.
+ [ruby-core:29984]
+
+Tue May 11 15:14:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/utf_8.c: Add new alias UTF-8-HFS for UTF8-MAC.
+ http://www.gnu.org/software/emacs/NEWS.23.2
+
+Tue May 11 13:46:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb (atan),
+ test/bigdecimal/test_bigmath.rb (test_atan): explicitly specify
+ the precision for calculating a reciprocal number of an argument.
+ [Bug #3267]
+
+Tue May 11 11:49:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/sdbm/sdbm.h (DBM): large file support on win32.
+ [ruby-core:23039]
+
+ * ext/sdbm/depend: objects depend on sdbm.h.
+
+Tue May 11 09:57:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_intern.h (rb_vm_get_sourceline): add prototype.
+
+Tue May 11 09:53:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/psych/parser.c (PSYCH_TRANSCODE): get rid of bare use of gcc
+ extension.
+
+Tue May 11 01:20:43 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/parser.c (parse): Return strings encoded as
+ Encoding.default_internal if set.
+
+Mon May 10 23:50:19 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (pack_unpack): add a missing break.
+
+Mon May 10 14:13:04 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * time.c (rb_big_abs_find_minbit): get rid of a warning of VC.
+
+Mon May 10 13:59:42 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c, include/ruby/win32.h (rb_w32_has_cancel_io): new
+ function.
+
+ * io.c (WAIT_FD_IN_WIN32): check only when it's not cancelable.
+
+Mon May 10 06:59:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk (rdoc): rdoc should depend main. Moreover when XRUBY
+ is miniruby, it can run after miniruby is built.
+
+Mon May 10 03:36:56 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_eval.c (eval_string_with_cref): propagate filename and line_no
+ of binding. [ruby-dev:38767] [ruby-core:28307]
+
+ * vm_core.h (rb_binding_t), proc.c: add filename and line_no fields to
+ preserve them.
+
+Mon May 10 02:58:33 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (iseq_compile_each), vm_insnhelper.c (vm_invoke_block,
+ vm_throw): allow "return" and "yield" even in singleton class
+ definition. based on a patch from wanabe <s.wanabe AT gmail.com>
+ for "return". [ruby-core:21379] [ruby-dev:40975]
+
+ * insns.def (defineclass): ditto (straightforwardly push block ptr,
+ instead of dfp ptr with special flag).
+
+ * vm_core.h (RUBY_VM_CLASS_SPECIAL_P): ditto (no longer needed).
+
+ * proc.c (proc_new): ditto (remove handling for special flag).
+
+ * bootstraptest/test_jump.rb: add tests for above.
+
+Mon May 10 02:29:51 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * cont.c (fiber_switch): raise FiberError when returning to dead
+ fiber. [ruby-dev:40833]
+
+Mon May 10 02:07:20 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/thread.rb (ConditionVariable#wait): ensure to remove the current
+ thread from waiters. [ruby-core:29835]
+
+Mon May 10 00:54:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/console/console.c (console_set_raw): new method.
+
+ * ext/io/console/console.c (ttymode): reverted previous commit.
+
+Sun May 9 23:53:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (RB_GC_GUARD_PTR): get rid of removal by
+ optimization.
+
+Sun May 9 23:07:53 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * proc.c (proc_dup): copy blockprocval. proc_dup is used by
+ define_method, which made blockprocval be GC'ed mistakenly.
+ [ruby-core:30023]
+
+Sun May 9 16:28:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (fiber_initialize_machine_stack_context): try to release
+ unnecessary fibers and retry to create. based on a patch from
+ masaya tarui at [ruby-dev:41230].
+
+Sun May 9 08:32:56 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/generator/generator.c (fbuffer_inc_capa):
+ fix the use of REALLOC_N. [ruby-dev:41227]
+
+Sun May 9 09:30:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/json/{generator/generator.c,parser/parser.rl}: fixed indent.
+
+ * ext/json/{generator,parser}/depend: added.
+
+Sun May 9 09:15:03 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * test/net/imap/test_imap.rb: use IPv4 for
+ test_imaps_post_connection_check. [ruby-dev:41189]
+
+Sun May 9 08:24:24 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (disconnect): terminates @receiver_thread even if
+ @sock.shutdown raises an exception. [ruby-dev:34881]
+
+Sun May 9 06:15:21 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * io.c (nogvl_copy_stream_sendfile): ISO C90 forbids mixed
+ declarations and code.
+
+Sun May 9 02:57:02 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/fiddle/lib/fiddle.rb: only require DL if it hasn't been required
+ yet. [ruby-core:30095]
+
+Sun May 9 01:15:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (stackgrowdirection): removed duplicated code, use
+ STACK_UPPER macro instead.
+
+ * gc.h (STACK_DIR_UPPER): moved from thread_pthread.c.
+
+Sun May 9 00:35:56 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/dl/test_base.rb (libc_so, libm_so): supports solaris.
+
+Sat May 8 19:03:31 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * spec/default.mspec (config): . is no longer in $:.
+
+Sun May 9 00:27:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_aset): fixed argument type.
+
+Sat May 8 23:09:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * NEWS (io/console): IO#noecho and IO#raw without block are
+ obsolete already. [ruby-dev:41226]
+
+ * ext/io/console/console.c (ttymode): save duped file descriptors
+ and restore tty modes using them, so that original modes can be
+ restored even if original fds are closed. [ruby-dev:41225]
+
+Sat May 8 13:48:31 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * array.c (rb_ary_fetch, rb_ary_splice, rb_ary_store): Improve
+ IndexError
+ messages [ruby-core:28394]
+
+ * hash.c (rb_hash_fetch_m): Improve KeyError message
+
+Sat May 8 13:11:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/user_interaction.rb (Gem::StreamUI#ask_for_password):
+ use io/console.
+
+ * ext/io/console: imported. [ruby-dev:40897]
+
+Sat May 8 12:25:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/etc/etc.c (etc_systmpdir): moved from ext/tmpdir.
+
+ * ext/etc/etc.c (etc_sysconfdir): added.
+
+ * lib/rubygems/config_file.rb, lib/tmpdir.rb: use etc.
+
+Sat May 8 11:07:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (VpAlloc): ensure buf does not get
+ collected. based on a patch masaya tarui at [ruby-dev:41213].
+
+Sat May 8 10:03:39 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (BasicSocket#connect_address): MacOS X 10.6
+ returns "::ffff:a.b.c.d" for IPv4-mapped IPv6 address.
+ [ruby-dev:41215] patch by Tomoyuki Chikanaga.
+
+Fri May 7 23:51:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * version.h: bump up to 1.9.3.
+
+Fri May 7 11:30:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb (install-man): install mdocs directly without
+ temporary files. [ruby-dev:41204]
+
+Fri May 7 09:16:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/tk/extconf.rb (get_tclConfig_dirs): glob with EXEEXT.
+
+ * ext/tk/extconf.rb (search_tclConfig): fixed typo.
+
+Fri May 7 06:45:28 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: search directories on PATH, only if containing
+ tclsh or wish command (probably right fix for [ruby-core:30010]).
+
+Fri May 7 03:40:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (VpCtoV): fix to check overflow.
+
+Thu May 6 22:19:38 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * cont.c: define FIBER_USE_NATIVE only when _WIN32_WINNT >= 0x0400
+ on Windows because Fiber APIs are supported only such building
+ (and running) environments.
+ [ruby-dev:41192]
+
+Thu May 6 19:13:43 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/openssl/test_ec.rb: added test_dsa_sign_asn1_FIPS186_3. dgst is
+ truncated with ec_key.group.order.size after openssl 0.9.8m for
+ FIPS 186-3 compliance.
+
+ WARNING: ruby-openssl aims to wrap an OpenSSL so when you're using
+ openssl 0.9.8l or earlier version, EC.dsa_sign_asn1 raises
+ OpenSSL::PKey::ECError as before and EC.dsa_verify_asn1 just returns
+ false when you pass dgst longer than expected (no truncation
+ performed).
+
+ * ext/openssl/ossl_pkey_ec.c: rdoc typo fixed.
+
+Thu May 6 18:12:43 2010 Koichi Sasada <ko1@atdot.net>
+
+ * cont.c (fiber_setcontext): Fix last commit.
+
+Thu May 6 17:16:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (rb_localtime_r2): get rid of infinite loop bug of
+ localtime() on x86_64-darwin. [ruby-core:30031]
+
+Thu May 6 15:56:12 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/fiddle/*: Adding fiddle library to wrap libffi
+ * test/fiddle/*: testing fiddle extension
+ * ext/dl/lib/dl.rb: Requiring fiddle if it is available
+ * ext/dl/lib/dl/callback.rb: using Fiddle if it is available
+ * ext/dl/lib/dl/func.rb: ditto
+
+Thu May 6 15:04:37 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_match_m): add description about optional
+ position parameter. [ruby-list:47064]
+ patched by KISHIMOTO, Makoto <ksmakoto AT dd.iij4u.or.jp>
+
+Thu May 6 14:12:39 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/tmpdir.rb: test RUBY_PLATFORM for loading tmpdir.so to avoid
+ LoadError.
+
+Thu May 6 12:41:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * NEWS: add rationalize methods of Complex, Float, Integer, NilClass,
+ and Rational classes.
+
+Thu May 6 12:12:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * README: update.
+
+Thu May 6 03:34:29 2010 Koichi Sasada <ko1@atdot.net>
+
+ * cont.c: apply FIBER_USE_NATIVE patch. This patch improve
+ Fiber context switching cost using system APIs. Detail comments
+ are written in cont.c.
+
+Thu May 6 02:16:48 2010 Koichi Sasada <ko1@atdot.net>
+
+ * vm_method.c (rb_unlink_method_entry, rb_sweep_method_entry):
+ added. Unlinked method entries are collected to
+ vm->unlinked_method_entry_list. On the GC timing, mark all method
+ entries which are on all living threads. Only non-marked method
+ entries are collected. This hack prevents releasing living method
+ entry.
+ [Performance Consideration] Since this Method Entry GC (MEGC)
+ doesn't occur frequently, MEGC will not be a performance bottleneck.
+ However, to traverse living method entries, every control frame push
+ needs to clear cfp->me field. This will be a performance issue
+ (because pushing control frame is occurred frequently).
+ Bug #2777 [ruby-dev:40457]
+
+ * cont.c (fiber_init): init cfp->me.
+
+ * gc.c (garbage_collect): kick rb_sweep_method_entry().
+
+ * method.h (rb_method_entry_t): add a mark field.
+
+ * vm.c (invoke_block_from_c): set passed me.
+
+ * vm.c (rb_thread_mark): mark cfp->me.
+
+ * vm_core.h (rb_thread_t): add a field passed_me.
+
+ * vm_core.h (rb_vm_t): add a field unlinked_method_entry_list.
+
+ * vm_insnhelper.c (vm_push_frame): clear cfp->me at all times.
+
+ * vm_insnhelper.c (vm_call_bmethod): pass me.
+
+ * bootstraptest/test_method.rb: add a test.
+
+Wed May 5 22:22:51 2010 wanabe <s.wanabe@gmail.com>
+
+ * compile.c (iseq_set_sequence): fix check range of ic_index.
+ a patch from Tomoyuki Chikanaga. #3236
+
+Wed May 5 21:49:31 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * dln.c (aix_loaderror): use execerror for load error on AIX.
+ This can avoid SEGV reported by Perry Smith. [Bug #2063]
+
+Wed May 5 20:37:54 2010 wanabe <s.wanabe@gmail.com>
+
+ * thread_win32.c (w32_wait_events): get GVL before handle interrupt
+ event. [ruby-core:27199], [ruby-core:29698]
+
+Wed May 5 19:00:01 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: revert. enbugged by last commit.
+ ([ruby-dev:41133], [ruby-dev:41134], [ruby-core:30010])
+
+ * ext/tk/README.tcltklib: ditto.
+
+Wed May 5 15:54:35 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (rb_stat): use STAT macro instead of calling stat() directly.
+ reported by Bill Kelly. [ruby-core:30012]
+
+Wed May 5 11:43:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bootstraptest/test_io.rb (megacontent-copy_stream): get rid of
+ deadlock.
+
+Wed May 5 07:27:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_mark_method_entry): renamed.
+
+Wed May 5 05:20:27 2010 Koichi Sasada <ko1@atdot.net>
+
+ * method.h, vm_method.c: rename some internal functions related to
+ rb_method_entry_t.
+ rb_add_method_me() -> rb_method_entry_set().
+ rb_get_method_entry() -> rb_method_entry_without_cache().
+ rb_gc_mark_method_entry() -> rb_mark_method_entry().
+
+ * class.c, proc.c: ditto.
+
+Tue May 4 22:59:48 2010 wanabe <s.wanabe@gmail.com>
+
+ * compile.c (iseq_build_body): update iseq->ic_size.
+ a patch from Tomoyuki Chikanaga. see #3236.
+
+Tue May 4 18:51:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (name_err_mesg_to_str): preserve encoding of inspection.
+ [ruby-core:29948]
+
+Tue May 4 18:38:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/fileutils/test_fileutils.rb (test_copy_stream):
+ IO.copy_stream support binmode only currently.
+ [ruby-core:23724]
+
+Tue May 4 12:46:09 2010 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (argument_error): push correct backtrace.
+ Bug #2281 [ruby-core:26333]
+
+Tue May 4 12:38:40 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (sockopt_inspect): use rb_str_cat2 and
+ rb_str_append.
+
+ * ext/socket/ancdata.c (ancillary_inspect): refined.
+
+Tue May 4 11:48:06 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_inspect): use rb_str_cat2 and
+ rb_str_append.
+
+Tue May 4 07:52:33 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/net/http.rb (Net::HTTPResponse#read_chunked): ensure to skip the
+ last newline of chunk. [ruby-core:29229]
+
+ * test/net/http/utils.rb: add an option for chunked response test.
+
+ * test/net/http/test_http.rb: add tests for chunked response.
+
+Tue May 4 03:37:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: Update nkf 2010-04-28.
+
+Mon May 3 21:08:16 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * sample/README: update file list. [ruby-core:28981]
+
+Mon May 3 08:15:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/syck/emitter.c (syck_scan_scalar): set SCAN_WHITEEDGE flag
+ when scalar begins with newline. patches from Dave B <daz AT
+ d10.karoo.co.uk> at [ruby-core:23019] and caleb clausen at
+ [ruby-core:25851]. [ruby-core:23006][ruby-core:29925]
+
+Sun May 2 17:52:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/task.rb (RDoc::Task): should not override newer code.
+
+Sun May 2 17:25:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/cfunc.c (rb_dlcfunc_call): ignore signedness.
+
+Sun May 2 12:04:30 2010 wanabe <s.wanabe@gmail.com>
+
+ * iseq.c (iseq_load): allow filepath to be nil.
+ a patch from Tomoyuki Chikanaga in [Bug #3229].
+
+Sun May 2 08:54:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/cgi.rb (CGI::NEEDS_BINMODE): check if O_BINARY value instead
+ of fragile check by platform name.
+
+Sun May 2 07:38:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (dir_config): should not modify argument arrays
+ themselves.
+
+Sat May 1 22:53:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#size): stat by path name when it is
+ closed.
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ keep the first trace.
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ fixed filtering. [ruby-core:29908]
+
+Sat May 1 16:46:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_IsInfinite): don't use
+ non-ascii character.
+
+Sat May 1 14:08:29 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/server.rb: Fix bug when serving gems.
+
+Sat May 1 14:05:36 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Upgrade to RDoc 2.5.8.
+
+Sat May 1 09:43:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ filter out traces in minitest directory. [ruby-core:29908]
+
+Sat May 1 06:42:57 2010 wanabe <s.wanabe@gmail.com>
+
+ * win32/win32.c: add declaration of wstati64 for gcc.
+
+Sat May 1 02:41:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * merge some patches from win32-unicode-test branch.
+ see #1685.
+
+ * file.c, include/ruby/intern.h (rb_str_encode_ospath): new function
+ to convert encoding for pathname.
+
+ * win32.c, include/ruby/win32.h (rb_w32_ulink, rb_w32_urename,
+ rb_w32_ustati64, rb_w32_uopen, rb_w32_uutime, rb_w32_uchdir,
+ rb_w32_umkdir, rb_w32_urmdir, rb_w32_uunlink): new functions to
+ accept UTF-8 path.
+
+ * win32/win32.c (rb_w32_opendir, link, rb_w32_stati64, rb_w32_utime,
+ rb_w32_unlink): use WCHAR path internally.
+
+ * file.c (rb_stat, eaccess, access_internal, rb_file_s_ftype,
+ chmod_internal, rb_file_chmod, rb_file_chown, utime_internal,
+ rb_file_s_link, unlink_internal, rb_file_s_rename): use UTF-8 version
+ functions on Win32.
+
+ * file.c (apply2files, rb_stat, rb_file_s_lstat, rb_file_symlink_p,
+ rb_file_readable_p, rb_file_writable_p, rb_file_executable_p,
+ check3rdbyte, rb_file_identical_p, rb_file_chmod, rb_file_chown,
+ rb_file_s_link, rb_file_s_symlink, rb_file_s_rename): call
+ rb_str_encode_ospath() before passing the path to system.
+
+ * io.c (rb_sysopen): ditto.
+
+ * dir.c (dir_chdir, dir_s_mkdir, dir_s_rmdir): ditto.
+
+Sat May 1 00:26:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ assertion message must be String or Proc. suggested by caleb
+ clausen at [ruby-core:29884].
+
+Sat May 1 00:14:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_io.rb: skip false tests on Windows.
+ [ruby-core:29886]
+
+Fri Apr 30 22:46:27 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * math.c: Math::DomainError < StandardError [ruby-core:29855]
+
+Fri Apr 30 21:40:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/test_open3.rb (TestOpen3#test_commandline): use simple
+ command via shell. [ruby-dev:41100]
+
+Fri Apr 30 15:38:45 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: better support for MinGW environment.
+
+Fri Apr 30 12:05:20 2010 Tanaka Akira <akr@fsij.org>
+
+ * file.c (file_expand_path): call rb_str_set_len before BUFCHECK to
+ prevent rb_str_resize in BUFCHECK discard the content.
+
+Fri Apr 30 11:48:31 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * string.c (rb_str_sub_bang): String#sub! now raises an error when
+ called on a frozen string, even if no change is made.
+ See [ruby-core:23657]
+
+Fri Apr 30 11:40:44 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * eval.c (make_exception, rb_obj_extend): Fix error messages in case
+ of wrong
+ number of arguments
+
+ * file.c (rb_f_test, rb_file_s_umask): ditto
+
+ * numeric.c (int_chr, num_step): ditto
+
+ * process.c (rb_f_sleep): ditto
+
+ * re.c (rb_reg_initialize_m): ditto
+
+ * signal.c (rb_f_kill, sig_trap): ditto
+
+ * string.c (rb_str_aref_m, rb_str_aset_m, rb_str_count,
+ rb_str_delete_bang,
+ rb_str_slice_bang, rb_str_sub_bang, str_gsub): ditto
+
+ * proc.c (curry): rdoc fix
+
+Fri Apr 30 04:09:30 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * time.c (TIMET_MAX): should be time_t, not unsigned_time_t.
+
+Fri Apr 30 03:59:08 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * time.c (rb_time_unmagnify_to_float): should cast.
+
+Fri Apr 30 03:38:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (fix_mul): the width of fixnum is same as long's on all
+ platforms.
+
+Fri Apr 30 03:17:20 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Improve algorithm for Matrix#determinant and
+ Matrix#rank
+ {determinant,det,rank}_e are now deprecated. [ruby-core:28273]
+ Also fixes a bug in Determinant#rank (e.g. [[0,1][0,1][0,1]])
+ Matrix#singular?, Matrix#regular? now raise on rectangular matrices
+ and use determinant instead of rank.
+
+Fri Apr 30 00:52:56 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): define some constants to select
+ collect code for win64.
+
+Thu Apr 29 20:10:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/test_open3.rb (test_commandline): use dump instead of
+ shellwords. [ruby-core:23797]
+
+Thu Apr 29 18:39:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/thwait.rb (ThreadsWait#join): refined rdoc again.
+ [ruby-core:29863] [ruby-dev:41092]
+
+Thu Apr 29 14:46:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby: use more descriptive assertions.
+
+ * test/ruby: fixed nonsense assertions.
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ reverted. [ruby-core:29872]
+
+Thu Apr 29 12:33:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/thwait.rb (ThreadsWait#join): refined rdoc. [ruby-core:29863]
+
+Thu Apr 29 12:16:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert): reject
+ non-boolean values. [ruby-core:29868]
+
+Thu Apr 29 11:20:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (seek_before_access): renamed. see [ruby-core:29861].
+
+ * io.c (rb_io_s_binread): fixed rdoc. parts of a patch from Roger
+ Pack in [ruby-core:29861].
+
+Thu Apr 29 03:50:49 2010 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/xmlrpc/utils.rb: Fixing an incompatibility with
+ reflection methods returning Symbols. Patch by
+ HD Moore. [ruby-core:29821]
+
+Wed Apr 28 23:53:15 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/thwait.rb: revise rdoc. a patch from Roger Pack in
+ [ruby-core:27362].
+
+Wed Apr 28 23:21:42 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json: Update to JSON 1.4.2.
+
+Wed Apr 28 22:53:57 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread. (rb_thread_terminate_all): revert r24591 which caused SEGV
+ sometimes. [ruby-dev:40936] [ruby-core:27245] [ruby-core:27416]
+
+Wed Apr 28 22:26:55 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/psych/visitors/test_yaml_tree.rb (test_struct_const): remove
+ Struct::Foo which affects test/ruby/test_struct to warn redefining
+ constant.
+
+Wed Apr 28 18:04:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (time_timespec): use rb_check_funcall.
+
+Wed Apr 28 17:14:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/extconf.rb: CMSG_ macros are broken on 64bit darwin,
+ because of use of __DARWIN_ALIGN.
+
+Wed Apr 28 16:44:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h ({RSTRING,RSTRUCT,RBIGNUM}_LENINT): check long
+ to cast to int.
+
+Wed Apr 28 16:28:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/unixsocket.c (sendmsg_blocking, recvmsg_blocking):
+ define only when used.
+
+ * ext/socket/rubysocket.h: non-implemented method definitions need
+ to be shared.
+
+Wed Apr 28 10:27:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vsnprintf.c (ruby_vsnprintf, ruby_snprintf): suppress warnings.
+ why return int in spite of the arguments of size_t?
+
+Wed Apr 28 09:49:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/compile_prelude.rb: enable optimization.
+
+Wed Apr 28 09:43:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (warn_balanced): do not warn for EXPR_ENDFN.
+
+Tue Apr 27 23:57:04 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * eval.c (ruby_cleanup): add exception guard around code running
+ signal handler (of r27513). Absence of the guard made
+ bootstraptest/test_thread.rb fail sometimes.
+
+Tue Apr 27 22:55:29 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * insns.def (onceinlinecache): add exclusion control for a region
+ between onceinlinecache and setinlinecache. [ruby-dev:39768]
+
+Tue Apr 27 22:40:54 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * iseq.c (set_relation): do not use top_wrapper as bottom of cref,
+ which caused constant lookup error when "wrapped load" is used;
+ instead, use Object as bottom, and push top_wrapper on Object.
+ [ruby-core:25039]
+
+Tue Apr 27 21:24:40 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * eval.c (ruby_cleanup): before cleanup, check signal buffer and run
+ handler if any. [ruby-core:20970]
+
+ * thread.c (rb_threadptr_check_signal): separated from
+ timer_thread_function.
+
+Tue Apr 27 18:00:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/net/smtp.rb (Net::SMTP#rcptto_list): fixed typo.
+ [ruby-core:29809]
+
+Tue Apr 27 12:44:23 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Import RDoc 2.5.7. Fixes #1318 and ruby-core:29780.
+
+Tue Apr 27 10:54:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_read_escape): deny extra character escapes.
+ [ruby-core:27228]
+
+Tue Apr 27 06:20:13 2010 Tanaka Akira <akr@fsij.org>
+
+ * io.c (select_internal): IO which cbuf is not empty is readable.
+
+Tue Apr 27 00:07:32 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (program): check void_expr when rb_parse_in_main().
+ [ruby-dev:38717]
+
+Mon Apr 26 20:11:05 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c, rational.c, lib/cmath.rb, lib/date.rb lib/date/delta*:
+ reverted r27484-27486. now official spec.
+
+Mon Apr 26 15:42:59 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/json/generator/generator.c (convert_UTF8_to_JSON_ASCII): get rid
+ of a warning.
+
+Mon Apr 26 13:11:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (ripper_get_value): escape Qundef.
+
+Mon Apr 26 12:42:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (warn_balanced): warn according to last state.
+
+Mon Apr 26 09:05:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json: Update to JSON 1.4.1.
+
+Sun Apr 25 23:50:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (ruby_dup): update max fd.
+
+Sun Apr 25 21:56:49 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (fetch_internal): do not quote message data item
+ names. Thanks, Eric Hodel. [ruby-core:23508]
+
+Sun Apr 25 15:59:02 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/cmath.rb: reverted experimental r23900.
+
+Sun Apr 25 15:51:00 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c, rational.c: reverted experimental r24565.
+
+Sun Apr 25 15:34:48 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb, lib/date/delta*: reverted experimental r24567 and
+ r25393.
+
+Sun Apr 25 11:02:20 2010 wanabe <s.wanabe@gmail.com>
+
+ * hash.c (ruby_setenv): putenv on msvcrt.dll can't remove empty value.
+
+Sat Apr 24 23:40:50 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/pp.rb: use [""].pack("p").size to detect the pointer size.
+
+Sat Apr 24 21:07:27 2010 Tanaka Akira <akr@fsij.org>
+
+ * test/psych/test_psych.rb: don't leave temporary files.
+
+Sat Apr 24 16:27:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (RUBY_PROGRAM_VERSION): added
+
+ * tool/rbinstall.rb: expand target file name.
+
+ * template/fake.rb.in: no need for hook if extmk.
+
+Sat Apr 24 14:40:20 2010 Tanaka Akira <akr@fsij.org>
+
+ * io.c: raise IOError when byte oriented operations occur with
+ non-empty character buffer.
+ [ruby-dev:40493] [ruby-dev:40506]
+
+Sat Apr 24 13:06:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (get_arglen): skip the last terminator of argv before
+ checking environ.
+
+ * ruby.c (get_arglen): duplicate environ area if setenv and unsetenv
+ are provided.
+
+ * ruby.c (set_arg0): keep empty strings.
+
+Sat Apr 24 09:44:40 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/syck/yaml2byte.c (bytestring_append, bytestring_extend):
+ removed wrong extra assignments. a patch from Marcus Rueckert
+ <darix AT opensu.se> at [ruby-core:29759].
+
+Sat Apr 24 00:41:52 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * process.c (rb_f_fork): remove after_exec() which sometimes caused
+ two timer threads started. [ruby-core:25217]
+
+ * signal.c: use pthread_sigmask() instead of sigprocmask().
+ sigprocmask() is unspecified behavior on multi-thread programs.
+ [ruby-core:25217]
+
+Sat Apr 24 00:36:05 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/dl/test_base.rb: add kfreebsd support. based on a patch from
+ Petr Salinger in [ruby-core:29769].
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560293
+
+Sat Apr 24 00:14:41 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/openssl/ossl_ssl_session.c (SSL_SESSION_cmp): remove static for
+ loopy version of openssl (0.9.8l?).
+
+Fri Apr 23 23:27:17 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_config.c: fix compilation failure with
+ OpenSSL 0.9.8.
+
+Fri Apr 23 17:29:35 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/openssl/ossl_config.c: OpenSSL 1.0.0 support.
+ [ruby-core:29256]
+
+ * ext/openssl/extconf.rb: check some functions added/removed at
+ OpenSSL 1.0.0.
+
+ * ext/openssl/ossl_engine.c (ossl_engine_s_load): use engines which
+ exists.
+
+ * ext/openssl/ossl_ssl_session (SSL_SESSION_cmp): removed at 1.0.0,
+ so implement compatible function here.
+
+Fri Apr 23 14:37:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gem_prelude.rb (Gem::QuickLoader.load_full_rubygems_library):
+ get rid of creating same regexps many times.
+
+ * lib/rubygems/custom_require.rb (Kernel#require): ditto.
+
+Fri Apr 23 14:07:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * doc/etc.rd, doc/etc.rd.ja: moved from ext/etc.
+
+ * ext/etc.c (Init_etc): fixed rdoc.
+
+Fri Apr 23 11:31:25 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Update to RDoc 2.5.6.
+
+Fri Apr 23 04:11:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ripper/test_parser_events.rb (test_unterminated_regexp):
+ separate test.
+
+Fri Apr 23 01:47:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_wopen): shouldn't use FILE_FLAG_OVERLAPPED with
+ normal file. #1807, #2510, #2549
+
+Fri Apr 23 01:28:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (ubf_handle): remove unused typedef.
+
+Thu Apr 22 23:10:59 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * proc.c (mnew): fix wrong error message when Kernel#public_method
+ receives name of private method. [Bug #2425]
+
+Thu Apr 22 22:56:42 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bootstraptest/test_thread.rb: fix test. [Bug #2342]
+
+Thu Apr 22 21:50:17 2010 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/irb/ext/multi-irb.rb: fix multi-irb running
+ parallelly. [ruby-dev:41031] [Bug #3182]
+
+Thu Apr 22 17:13:34 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Import RubyGems 1.3.7.pre.1 (as 1.3.6.1).
+
+Thu Apr 22 16:43:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (warn_balanced): removed false warning.
+
+ * parse.y (parser_yylex): skip whitespaces after method name.
+
+Wed Apr 22 02:16:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * ext/bigdecimal/bigdecimal.[ch]: replace _DEBUG with BIGDECIMAL_DEBUG
+ to prevent activating debugging code when compiled with -DEBUG flag
+ on Windows. [ruby-core:22989] #1308
+
+Wed Apr 21 21:24:20 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/digest/sha2/extconf.rb: check SHA256_CTX and SHA512_CTX to fix
+ compilation failure on OpenBSD 4.4.
+
+Wed Apr 21 15:13:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (io_getc): fix incomplete character immediately before EOF
+ with newline converter. [ruby-dev:41024]
+
+Wed Apr 21 13:44:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (regexp): check each fragments. [ruby-core:27374]
+
+Wed Apr 21 13:36:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): reverted r27388 due to backward
+ compatibility.
+
+ * parse.y (parser_yylex): warn confusing binary operators after
+ local variable.
+
+Wed Apr 21 11:53:47 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Update to RDoc 2.5.5. Fixes bugs in ri, Darkfish and
+ rdoc option handling.
+
+Wed Apr 21 11:31:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): abandoned EXPR_VCALL.
+
+Wed Apr 21 03:17:17 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (io_getc): set read_encoding to resulted one character
+ string. [ruby-dev:41023]
+
+Wed Apr 21 00:29:39 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (bigmul1_karatsuba): fix calculation order to prevent
+ underflow. [ruby-core:29088]
+
+Wed Apr 21 00:26:17 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (NODE_NEXT, NODE_REDO): add dummy putnil instruction to
+ fix stack consistency error. [ruby-core:28172]
+
+ * bootstraptest/test_jump.rb: add a test for above.
+
+Wed Apr 21 00:16:44 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/zlib/zlib.c (rb_deflate_params): update buf_filled count because
+ deflateParams writes to out buffer. And, revert r18029 because the
+ flush was not needed now and emits garbage. [ruby-dev:40802]
+
+Wed Apr 21 00:01:05 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_method.c (rb_add_method_def): decrement alias count of
+ rb_method_definition_t to prevent memory leak. see
+ [ruby-dev:41021].
+
+Tue Apr 20 21:33:06 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/win32/lib/win32/registry.rb (PredefinedKey#create): root key
+ name should be a string. fixed [ruby-core:28192]
+
+Tue Apr 20 19:25:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): fix for tLPAREN_ARG.
+
+Tue Apr 20 12:34:23 2010 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/{core, util}.rb (RFC822_DAYS, RFC822_MONTHS):
+ move the constant because used only util.rb.
+
+Tue Apr 20 12:24:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (lex_state_e, IS_END, IS_SPCARG, parser_yylex): separate
+ the state after vcall. [ruby-core:29578]
+
+Tue Apr 20 01:03:00 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bootstraptest/test_fork.rb: add a test for [ruby-core:28924].
+
+Tue Apr 20 00:43:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_extname): skip last directory separators.
+ [ruby-core:29627]
+
+Tue Apr 20 00:41:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (internal_{read,write}_func, rb_{read,write}_internal):
+ reverted r27265, since now rb_thread_blocking_region() preserves
+ errno.
+
+Mon Apr 19 23:14:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (rb_thread_blocking_region, rb_thread_blocking_region_end):
+ preserve errno. [Bug #2606] [ruby-core:28924]
+
+Mon Apr 19 19:41:10 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * lib/fileutils.rb (FileUtils::cp_r): backport r11156 from ruby_1_8.
+
+Mon Apr 19 19:18:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): reduced duplicated conditions.
+
+Mon Apr 19 13:58:04 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Update to RDoc 2.5.4. Fixes #3169, #3160, #3023.
+
+Mon Apr 19 12:46:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/timeout.rb (Timeout#timeout): propagate errors to the
+ caller. [ruby-dev:41010]
+
+Mon Apr 19 00:27:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_method.c (rb_add_method_def): workaround fix for redefinition
+ of methods. This is because cfp->me uses the rb_method_entry
+ which is freed by redefinition of remove_method. Note that
+ reusing may cause another problem when the usage is changed.
+ [ruby-core:27320] [ruby-core:29464]
+
+Sun Apr 18 22:13:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (string_content): cond_stack and cmdarg_stack are VALUE.
+
+Sun Apr 18 18:07:47 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb (Resolv::IPv4::Regex): make it only accept 0 to 255.
+ [ruby-core:29501]
+
+Sun Apr 18 12:48:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): seems like a symbol-literal when spaces
+ are unbalanced. [ruby-core:29578]
+
+Sun Apr 18 12:32:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (string_content): preserve cond_stack and cmdarg_stack.
+ [ruby-core:29579]
+
+Sun Apr 18 05:50:58 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: defaulting binary string
+ format to "literal" format.
+
+Sun Apr 18 02:13:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/irb/ruby-lex.rb (identify_identifier): add '_' to the regexp.
+
+Sat Apr 17 23:21:15 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: use AC_TRY_LINK instead of AC_TRY_COMPILE.
+ On Solaris it can compile with signbit but can't link.
+
+Sat Apr 17 20:34:09 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/envutil.rb: update Gem::ConfigMap to fake environment for
+ tests. Some test of rubygems had failed because envutil.rb changed
+ only RbConfig::CONFIG but not Gem::ConfigMap.
+
+Sat Apr 17 20:31:08 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/irb/ruby-lex.rb (identify_identifier): allow multibyte character
+ as identifier. [ruby-core:27275]
+
+Sat Apr 17 09:19:27 2010 wanabe <s.wanabe@gmail.com>
+
+ * compile.c (iseq_compile_each): fix splat condition in NODE_WHEN.
+ [Bug #2226]
+
+Sat Apr 17 08:57:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/net/smtp.rb (Net::SMTP#rcptto_list): continue when at least
+ one RCPT is accepted. based on a patch from Kero van Gelder at
+ [ruby-core:26190].
+
+Sat Apr 17 07:43:55 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/thread/test_queue.rb (TestQueue#grind): fix typos.
+
+Sat Apr 17 07:27:53 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: add Array#repeated_{combination,permutation} [Feature #2981]
+
+Sat Apr 17 05:30:22 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/core_ext.rb (yaml_as): supporting deprecated
+ "yaml_as" method
+ * ext/syck/lib/syck/tag.rb: ditto
+
+Sat Apr 17 05:25:15 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/coder.rb (scalar): supporting deprecated methods
+ * ext/psych/lib/psych/deprecated.rb: supporting deprecated
+ to_yaml_properties method
+
+Sat Apr 17 01:32:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (rb_io_rewind, rb_io_eof): add rdoc. based on a patch from
+ Roger Pack in [ruby-core:26771] [Bug #2377].
+
+Fri Apr 16 23:42:56 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_folderitem2_invokeverb.rb (test_invokeverb):
+ run test only when "Create Shortcut (&S)" menu is found.
+ [ruby-core:29550] [Bug #1602]
+
+Fri Apr 16 21:52:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (string_content, etc): counts of CMDARG_PUSH and POP were
+ inconsistent. [ruby-core:22637]
+
+Fri Apr 16 21:27:57 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_coerce): revert r23389,
+ which not only is unnecessary but also causes the inconsistency of
+ return type. [ruby-core:25706] [Bug #2129]
+
+Fri Apr 16 20:05:24 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/thread.rb (Queue#push, #pop, SizedQueue#push, #pop): remove
+ code that kicks waiting thread twice, which caused race and
+ deadlock. a patch from James M. Lawrence. [ruby-core:25537]
+
+ * test/thread/test_queue.rb: added.
+
+Fri Apr 16 20:01:47 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * .gitignore: updated.
+
+Fri Apr 16 16:51:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/file2lastrev.rb (VCS::SVN::get_revisions.): remind about
+ DOSISH, sometimes.
+
+Fri Apr 16 16:15:40 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_repeated_permutation): new method added. a patch
+ from Makoto Kishimoto in [ruby-core:29267] [ruby-core:28724]
+
+ * array.c (rb_ary_repeated_combination): ditto.
+
+Thu Apr 15 22:41:47 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (rb_thread_priority, rb_thread_priority_set): fix rdoc.
+ Lower-priority thread may run even if there are higher-priority
+ threads. See [ruby-dev:40977].
+
+Thu Apr 15 22:33:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/uri/ftp.rb (URI::FTP#set_path): added to correct handling of
+ special case where path of ftp is relative. This converts relative
+ path to absolute one, because external representation of ftp path is
+ relative and internal representation is absolute. [ruby-core:24077]
+
+ * lib/uri/ftp.rb (URI::FTP#initialize): converts absolute to relative.
+
+ * lib/uri/generic.rb (URI::Generic#check_path): allow relative path
+ when scheme is ftp.
+
+Thu Apr 15 21:54:39 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/file2lastrev.rb: use backtick for ruby 1.8.
+
+Thu Apr 15 21:13:29 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/file2lastrev.rb: this should run with ruby 1.8.
+
+Thu Apr 15 20:41:10 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/file2lastrev.rb: make -q effective for files not version
+ controlled.
+
+Thu Apr 15 14:50:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_backtrace_each): get rid of use of malloc from signal
+ handler by using ruby_engine_name. [ruby-core:29497]
+
+ * vm_eval.c (print_backtrace): file may be nil when segfaulted in
+ very early stage.
+
+ * vm_dump.c (bugreport_backtrace): ditto.
+
+Thu Apr 15 11:51:49 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (help): small fix.
+
+Wed Apr 14 22:09:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rexml/source.rb: force_encoding("UTF-8") when the input
+ is already UTF-8. patched by Kouhei Sutou [ruby-core:23404]
+
+Wed Apr 14 18:23:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * configure.in (signbit): signbit is a macro in C99.
+
+Wed Apr 14 17:56:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_shift_cbuf): should terminate.
+ http://golf.shinh.org/p.rb?DECimal+number+to+BINary#Ruby
+
+Wed Apr 14 16:29:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (GET_STACK_BOUNDS): fixed macro argument names. a patch from
+ Satoshi Shiba <shiba AT rvm.jp> at [ruby-dev:40973].
+
+ * gc.h (ruby_get_stack_grow_direction): fixed prototype.
+
+ * thread_pthread.c (get_stack, ruby_stack_overflowed_p): both side
+ should be same type. [Bug #3145]
+
+Wed Apr 14 15:58:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_string_value_cstr): make NUL terminated if it is
+ not done.
+
+Wed Apr 14 12:56:21 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap (encode_utf7): encode & properly. Thanks, Kengo
+ Matsuyama. [ruby-dev:38063]
+
+Wed Apr 14 11:39:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/syck/lib/syck/basenode.rb (Syck::BaseNode#match_path): fixed
+ library name.
+
+ * ext/syck/lib/yaml/syck.rb: split from ext/syck/lib/syck.rb for
+ backward compatibility.
+
+Wed Apr 14 09:24:07 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: Refix [nkf-bug:21393]. (explicit -X)
+
+Tue Apr 13 20:36:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: Fix: Windows Codepages wrongly convert
+ Halfwidth Katakana. [nkf-bug:21393]
+
+Tue Apr 13 15:00:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (make_seed_value): fix leading-zero-guard condition on
+ bdigit is smaller than 32bit.
+
+Tue Apr 13 13:57:36 2010 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/irb/completion.rb (CompletionProc): fix [ruby-dev:40953]
+ [Bug #3126]. Thanks Kazuhiro NISHIYAMA.
+
+Tue Apr 13 09:32:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (transcode_loop): insert output the value when
+ fallback hash has a related key. [ruby-dev:40540]
+ [ruby-dev:40829] #3036
+
+ * transcode.c (rb_econv_prepare_opts): pass to newhash
+ a value with the key :fallback.
+
+Tue Apr 13 00:12:04 2010 Tanaka Akira <akr@fsij.org>
+
+ * random.c (rand_init): use the absolute value of seed to
+ make srand(-2**40) portable with 32bit and 64bit.
+ [ruby-core:29292](2)
+
+Mon Apr 12 22:48:47 2010 Tanaka Akira <akr@fsij.org>
+
+ * enumerator.c (inspect_enumerator): don't raise for uninitialized
+ enumerator.
+
+Mon Apr 12 21:47:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * LEGAL: separated the section for parse.c. contributed by Paul
+ Betteridge in [ruby-core:29472].
+
+Mon Apr 12 09:19:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/fileutils.rb (fu_each_src_dest): ensure src is accessible.
+
+ * lib/fileutils.rb (fu_same): use File.identical? to get rid of
+ exceptions. [ruby-core:28141]
+
+ * lib/fileutils.rb (fu_have_st_ino): no longer used.
+
+ * lib/fileutils.rb (fu_have_st_ino): check if required method is
+ defined, instead of platform name.
+
+Mon Apr 12 05:10:20 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: New method Matrix.build [ruby-core:28272]
+
+Mon Apr 12 03:45:25 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Deprecate elements_to_{f/i/r}
+
+Mon Apr 12 03:30:29 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Handle coercion errors by raising TypeErrors
+ [ruby-core:26736]
+
+Mon Apr 12 00:51:21 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * io.c (rb_io_getline_fast, rb_io_getline_1): fix ARGF.lineno
+ behavior. [ruby-core:25205]
+
+ * test/ruby/test_argf.rb (TestArgf#test_lineno3): add a test for
+ above.
+
+Sun Apr 11 23:25:17 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * configure.in: can not load libraries if --with-opt-dir is used
+ on AIX. [Bug #3107]
+
+Sun Apr 11 14:44:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/irb/ruby-lex.rb (RubyLex#getc): revert r10817, which caused
+ regression for handling case when there is no newline at the end of
+ file. [ruby-core:28248]
+
+Sun Apr 11 12:08:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (enc_replicate): new encoding name must be valid
+ c-string. [ruby-dev:40954]
+
+Sun Apr 11 11:58:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/win32.h (ftruncate): rename to get rid of conflict
+ with same name but non-LFS function on MinGW. [ruby-core:24757]
+
+Sun Apr 11 10:33:34 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Update to RDoc 2.5.3. Includes r27288 and r27290.
+
+Sun Apr 11 09:31:39 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * test/syck/*: Moved test/yaml to test/syck since it's actually
+ testing the syck YAML engine.
+
+Sun Apr 11 08:56:44 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rdoc/rdoc.rb (setup_output_dir): compare by Time#to_i.
+ Cached created time doesn't have fractional times,
+ but FileStat#mtime has; so rdoc almost always judged files
+ are updated.
+
+Sun Apr 11 07:40:48 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rdoc/rdoc.rb (setup_output_dir): fix typo. [ruby-core:29415]
+
+Sun Apr 11 07:01:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (decode_www_form_component): validate.
+ [ruby-dev:40938]
+
+ * lib/uri/common.rb (decode_www_form): allow empty string.
+
+ * lib/uri/common.rb: fix nodoc for constant. [ruby-dev:40949]
+
+Sat Apr 10 21:26:22 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rdoc/markup/preprocess.rb (RDoc::Markup::PreProcess#handle):
+ use File.binread to avoid locale dependency.
+
+Sat Apr 10 15:18:26 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Import RDoc 2.5.2
+ * lib/rdoc/parser/ruby.rb (RDoc::Parser::Ruby): Don't parse rdoc
+ files, reverts r24976 in favor of include directive support in C
+ parser.
+
+Sat Apr 10 13:14:22 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/openssl/ossl_ssl.c (Init_ossl_ssl): add SSLContext#ssl_timeout=,
+ which allows net/https to specify timeout. [ruby-core:24812]
+
+Sat Apr 10 07:36:13 2010 wanabe <s.wanabe@gmail.com>
+
+ * vm_method.c (rb_add_method): clear attr.location before rb_ary_new3.
+ a patch from Masaya TARUI in [Bug #3108]
+
+Sat Apr 10 05:27:26 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/deprecated.rb: implementing Psych.quick_emit and
+ adding deprecation warnings.
+ * ext/psych/lib/psych/visitors/to_ruby.rb: supporting deprecated
+ yaml_initialize api.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: supporting deprecated
+ to_yaml api.
+
+Sat Apr 10 01:08:53 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/parser.c: parse raises a TypeError when nil is passed in.
+
+Sat Apr 10 00:01:51 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/pty/lib/expect.rb: preserve buffer read, instead of discard.
+ based on a patch from Luiz Angelo Daros de Luca in
+ [ruby-core:23464].
+
+Fri Apr 9 23:58:58 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/pty/lib/expect.rb: raise an error when argument is unexpected
+ type. based on a patch from Luiz Angelo Daros de Luca in
+ [ruby-core:23464].
+
+Fri Apr 9 23:57:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/pty/lib/expect.rb: add rdoc. based on a patch from Luiz Angelo
+ Daros de Luca in [ruby-core:23464].
+
+Fri Apr 9 23:54:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/irb/init.rb, lib/irb/lc/help-message,
+ lib/irb/lc/ja/help-message: add -w flag. [ruby-core:24594]
+
+Fri Apr 9 23:51:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/socket/ipsocket.c (init_inetsock_internal),
+ ext/socket/unixsocket.c (rsock_init_unixsock): check the result of
+ listen(2). based on a patch from Mike Pomraning. [ruby-core:23698]
+
+Fri Apr 9 21:22:10 2010 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/irb/completion.rb (CompletionProc): irb will be stuck with
+ long variable name at completion. [Bug#1969]. refix [ruby-core:28366].
+
+Fri Apr 9 20:54:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (decode_www_form): don't ignore leading '?'.
+ [ruby-dev:40938]
+
+ * lib/uri/common.rb (decode_www_form): check whether argument is
+ valid application/x-www-form-urlencoded data.
+
+Fri Apr 9 20:29:13 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * dir.c (push_glob): clear up the previous commit (RB_GC_GUARD can
+ precede the last reference). [ruby-dev:40942]
+
+Fri Apr 9 20:05:05 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * dir.c (push_glob): add RB_GC_GUARD to prevent str being free'ed.
+ a patch from Masaya TARUI in [ruby-dev:40939]. [ruby-dev:40514]
+
+Fri Apr 9 10:53:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * compile.c (iseq_compile_each): stop hiding, and freeze unpopped
+ string nodes to allow method redefinition. [ruby-dev:40641]
+
+Fri Apr 9 01:26:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (internal_{read,write}_func, rb_{read,write}_internal):
+ preserve errno. a patch from Takehiro Kubo in [ruby-core:29340].
+ [ruby-core:28924]
+
+Fri Apr 9 01:12:07 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/irb/completion.rb (CompletionProc): calling the method "methods"
+ may raise an exception. [ruby-core:28366]
+
+Thu Apr 8 14:33:24 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * configure.in: --disable-install-doc should prohibit doxygen.
+
+Thu Apr 8 14:23:51 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h: include errno.h before defining errnos.
+ see [ruby-core:29314]
+
+Thu Apr 8 11:45:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/yaml.rb: use Psych if only it is loaded already.
+
+ * lib/yaml.rb (YAML::EngineManager#yamler): set the result after
+ successfully switched.
+
+Thu Apr 8 07:22:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (rand_init): ignore higher bits if all they are same as
+ the lower sign bit. [ruby-core:29292](2)
+
+Thu Apr 8 07:16:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/irb/cmd/help.rb (IRB::ExtendCommand::Help#execute): use RI
+ interactive mode if no argument. [ruby-dev:39839]
+
+Wed Apr 8 02:33:55 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * array.c (rb_ary_permutation): Remove limitation for lengthy permutations
+ [ruby-core:29240]
+
+ * test/ruby/test_array.rb: ditto
+
+Wed Apr 7 23:33:55 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * misc/ruby-mode.el (ruby-mode-map): binded C-c C-c and C-c C-c C-u
+ to comment-region and uncomment-region. Thanks Michael Klishin!
+ [Feature #872] [ruby-core:20552]
+
+Wed Apr 7 21:44:14 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (ASCTIME): unused macro removed.
+
+Wed Apr 7 16:45:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (Makefile): reverted r27244.
+
+Wed Apr 7 11:49:34 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rexml/quickpath.rb (REXML::QuickPath::predicate):
+ fix regexp.
+
+Wed Apr 7 09:44:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (Makefile): quote init-commands.
+
+ * configure.in (Makefile): `make ruby` builds ruby command
+ even if RUBY_INSTALL_NAME is customized or it has extension.
+
+Wed Apr 7 03:28:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/rdoc.rb (RDoc#{initialize,setup_output_dir}):
+ initialize @last_created and use it.
+
+Wed Apr 7 02:05:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/fake.rb.in: not define $extout to make target in cwd.
+
+Tue Apr 6 23:01:35 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * vm_core.h: Introduce UNINITIALIZED_VAR() macro.
+ * thread.c (do_select): Use UNINITIALIZED_VAR() instead FAKE_FD_ZERO().
+ Also, remove FAKE_FD_ZERO completely. [Feature #3018]
+
+Tue Apr 6 14:53:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h: check definition existence before defining
+ errno macros.
+
+ * win32/win32.c (errmap): define winsock errors mappings.
+ these are VC++10 support. see [ruby-core:29278]
+
+Tue Apr 6 21:55:25 2010 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: test localtime(3) overflow. [ruby-dev:40910]
+
+ * time.c (rb_gmtime_r): renamed from rb_gmtime.
+ (rb_localtime_r): renamed from rb_localtime.
+ (rb_localtime_r2): call rb_localtime_r and validate the result if
+ there is overflow problem.
+ (rb_gmtime_r2): call rb_gmtime_r and validate the result if there
+ is overflow problem.
+
+Tue Apr 6 11:21:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/fake.rb.in: hooks for extconf.rb.
+
+Tue Apr 6 06:19:36 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rexml/text.rb (REXML::Text.check): comment out
+ broken logic.
+
+Tue Apr 6 05:59:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rexml/parsers/baseparser.rb (LETTER, DIGIT):
+ always use POSIX charclass.
+
+ * lib/rexml/parsers/baseparser.rb (NAMECHAR):
+ remove duplicated range.
+
+ * lib/rexml/xmltokens.rb (NCNAME_STR, NAMECHAR): ditto.
+
+ * lib/rexml/parsers/xpathparser.rb (PathExpr): ditto.
+
+ * lib/rexml/text.rb (REXML::Text#initialize):
+ initialize @parent.
+
+Mon Apr 5 19:54:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (make_regexp): use onig_new_with_source to keep
+ sourcefile and sourceline.
+
+ * re.c (onig_new_with_source): copied from onig_new in
+ regcomp.c for keep sourcefile and sourceline.
+
+Mon Apr 5 13:20:45 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h, win32/win32.c (EWOULDBLOCK): VC10 already
+ defined EWOULDBLOCK. based on a patch from Charlie Savage,
+ see [ruby-core:29255]
+
+Mon Apr 5 13:10:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/psych/lib/psych/core_ext.rb: remove before alias.
+
+ * ext/syck/lib/syck.rb: don't warn called by itself.
+
+Mon Apr 5 13:08:24 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/mkexports.rb (each_export): VC10 support.
+ a patch from Charlie Savage in [ruby-core:29254]
+
+Sun Apr 4 22:18:32 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (cmp): optimize for fixnums.
+ (lt): use cmp.
+ (gt): ditto.
+ (le): ditto.
+ (ge): ditto.
+ (wlt): use wcmp.
+ (wgt): ditto.
+ (wle): ditto.
+ (wge): ditto.
+ (time_subsec): use wmod.
+
+Sun Apr 4 10:04:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/ruby.h: replace snprintf and vsnprintf by
+ ruby_snprintf and ruby_vsnprintf. [ruby-dev:40909]
+
+ * configure.in: don't check snprintf(3) and vsnprintf(3).
+
+ * include/ruby/missing.h: don't declare snprintf and vsnprintf.
+
+ * include/ruby/ruby.h: include stdarg.h.
+
+ * sprintf.c: include vsnprintf.c
+
+ * vsnprintf.c: renamed from missing/vsnprintf.c.
+
+ * vsnprintf.c: remove useless ifdefs.
+
+ * win32/mkexports.rb: use ruby_snprintf and ruby_vsnprintf.
+
+Sun Apr 4 09:44:01 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (lt): call <=> instead of <.
+
+Sun Apr 4 06:46:16 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/yaml: Moved to ext/syck/lib, Syck only uses Syck constant.
+ * lib/yaml.rb: Added an engine manager for choosing YAML engine.
+ * ext/syck/lib/syck/rubytypes.rb: squashed warnings when using Psych
+
+Sat Apr 3 22:47:51 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c: don't define STRUCT_WIDEVAL.
+
+Sat Apr 3 18:15:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/rdoc.rb (RDoc#{setup,update}_output_dir): store mtimes
+ per files in the flag file.
+
+ * lib/rdoc/rdoc.rb (RDoc#normalized_file_list): skip already
+ processed and unmodified files.
+
+Sat Apr 3 15:09:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (rdoc): no force-update, and add RDOCFLAGS.
+
+ * lib/rdoc/options.rb (RDoc#parse): no-force-update option.
+
+Sat Apr 3 10:51:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (random_rand): raise ArgumentError on nil, as the
+ documentation implies. [ruby-core:29075]
+
+ * random.c (rb_f_rand): mentioned the case of when max is nil.
+
+Sat Apr 3 06:56:11 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * array.c (rb_ary_product): Accept a block [ruby-core:29045]
+
+Sat Apr 3 04:46:00 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/file2lastrev.rb (VCS#relative_to): path and @srcdir may have
+ different relative-ness.
+
+Sat Apr 3 03:19:01 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * lib/benchmark.rb (Benchmark::Tms#add): fix NameError.
+ [ruby-dev:40906]
+
+ * test/benchmark/test_benchmark.rb: add a test for above.
+
+Sat Apr 3 01:50:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/parser/ruby.rb (RDoc#make_message): no empty lines.
+
+ * lib/rdoc/stats.rb (RDoc::Normal#print_file): send to stdout and
+ flush always
+
+Sat Apr 3 00:03:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/class_module.rb (RDoc#merge): get rid of stack overflow.
+
+ * lib/rdoc/parser/c.rb (RDoc#handle_method): see source files in
+ source directory.
+
+Fri Apr 2 22:13:38 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/rdoc.rb: reverted r27186 to add generators.
+
+Fri Apr 2 21:17:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * NEWS: added reverse_lookup option.
+
+Fri Apr 2 15:26:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/rdoc/test_rdoc_ri_driver.rb (with_dummy_pager): don't grasp
+ the terminal.
+
+Fri Apr 2 14:43:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/rdoc.rb (RDoc::Generator): defer by autoload.
+
+ * lib/rdoc/generator/darkfish.rb: use normal library instead of
+ gem.
+
+Fri Apr 2 14:26:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/rdoc.rb (RDoc::RDoc#parse_files): don't branch by
+ RUBY_VERSION. reapplied r24990.
+
+ * lib/rdoc/rdoc.rb (RDoc::RDoc#parse_files): emacs local variables
+ are delimited by a semicolon. supported Vim style. reapplied
+ r24988 with fixing a typo for shebang.
+
+Fri Apr 2 14:16:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/parser/ruby.rb (RDoc::Parser::Ruby): parse also rdoc
+ files. reapplied r24976.
+
+ * lib/rdoc/parser/c.rb: fixed a small error in the documentation.
+ [ruby-core:24744] reapplied r24395.
+
+ * lib/rdoc/parser.rb (RDoc::Parser.binary?): blksize may be nil
+ and is irrelevant to whether a file is binary. TAB and newlines
+ would be usually considered to be included in text data.
+ reapplied r23071 and r24297.
+
+Fri Apr 2 13:59:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/ri/paths.rb (RDoc::RI::Paths): Gem::Enable has been
+ obsolete. reapplied r24599.
+
+ * lib/rdoc/ri/paths.rb: follows $ridir. reapplied r23554.
+
+ * lib/rdoc/ri/paths.rb (RDoc::HOMEDIR): expand_path deals with
+ platform dependent environments. reapplied r21312.
+
+Fri Apr 2 12:52:25 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/rdoc/parser.rb (binary?): regression.
+
+Fri Apr 2 11:54:49 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (init_env): wrong calculation of the head of setenv
+ string. [ruby-core:29216]
+ a patch from Heesob Park in [ruby-core:29218]
+
+Fri Apr 2 08:24:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (ruby_setsid): split from proc_setsid.
+
+ * process.c (proc_daemon): use EXIT_SUCCESS instead of magic number.
+
+Fri Apr 2 07:00:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/cptr.c (rb_dlptr_inspect): fix format specifiers.
+
+Fri Apr 2 05:38:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (InitVM): calls per-VM initialization in
+ single VM, but does nothing in MVM.
+
+Fri Apr 2 02:56:56 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: New instance methods:
+ empty? [ruby-core:26284], each, each_with_index [ruby-core:28400],
+ conjugate, conj, imaginary, imag, real, real?, rectangular, rect
+ [ruby-core:26285]
+
+ Removed compare_by*, inspect_org, cf [ruby-core:26268]
+
+ Matrix.empty: raise on negative sizes
+
+ Matrix.determinant: raise on rectangular matrices [ruby-core:28271]
+
+Thu Apr 1 17:17:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/iso2022.trans: CP50221 supports 8bit JIS.
+
+Thu Apr 1 16:44:00 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc, test/rdoc: Imported RDoc 2.5
+
+Thu Apr 1 14:30:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/utf_16{be,le}.c (utf16{be,le}_mbc_to_code): simplified.
+
+Thu Apr 1 14:07:51 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * util.c (BSD__hdtoa): don't use C99 macros. (FP_NORMAL etc)
+
+Thu Apr 1 13:30:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): support %a format. [ruby-dev:40650]
+
+ * missing/vsnprintf.c (BSD_vfprintf): ditto.
+
+ * missing/vsnprintf.c (cvt): ditto.
+
+ * util.c (BSD__hdtoa): added. This is 2-clause BSDL licensed
+ by David Schultz and from FreeBSD.
+
+ * LEGAL: add about hdtoa() in util.c.
+
+Thu Apr 1 13:24:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * object.c (rb_cstr_to_dbl): return 0.0 if hexadecimal and
+ badcheck is FALSE: Float("0x1p+0") works, but "0x1p+0".to_f
+ doesn't. [ruby-dev:40650]
+
+ * util.c (ruby_strtod): allow hexadecimal integers.
+
+Thu Apr 1 13:20:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/scanf.rb: support %a format. [ruby-dev:40650]
+
+Thu Apr 1 12:04:10 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/ruby.h (PRE_TIMET_PREFIX): define if configure doesn't
+ defines it. [ruby-core:29190]
+
+Thu Apr 1 11:36:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_initialize): fixed a rdoc miss that textmode and
+ binmode flag explanation was reversed each other. a patch from
+ Heesob Park in [ruby-core:29166].
+
+Thu Apr 1 09:54:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (RUBY_{DEFAULT,NEVER}_FREE): added.
+ [ruby-dev:40889]
+
+Thu Apr 1 04:55:08 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (rb_big_abs_find_minbit): fix handling the last word.
+
+Thu Apr 1 04:30:11 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (long_mul): overflow condition changed.
+ (wi_mul): ditto.
+
+Wed Mar 31 23:33:29 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (long_mul): extracted from mul and avoid integer overflow.
+ (wi_mul): extracted from wmul and avoid integer overflow.
+
+Wed Mar 31 21:30:38 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c: less bignum allocations.
+
+ * strftime.c (rb_strftime_timespec): defined to avoid rational for
+ nano second resolution time.
+
+Wed Mar 31 16:05:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/rake/test_{package_task,rules,task_manager}.rb: use
+ temporary directories.
+
+Wed Mar 31 13:53:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/rubygems/gemutilities.rb (setup, teardown):
+ Object#to_yaml must use syck on RubyGem.
+
+Wed Mar 31 06:57:14 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (timew2timespec): fix previous change.
+
+Wed Mar 31 00:32:19 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (wdivmod): renamed from wdivmodv. fix neg/pos and pos/neg.
+ (split_second): return number of seconds as wideval_t.
+ (timet2wv): new function.
+ (wv2timet): new function.
+ (timet2wideval): removed.
+
+Tue Mar 30 22:24:19 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c: use more polymorphic operations.
+
+Tue Mar 30 22:12:38 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: add URI.decode and URI.encode to Obsoleted methods,
+ and fix typos. [ruby-dev:40852]
+
+ * NEWS: add Time#subsec.
+
+Tue Mar 30 22:07:12 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c: reorder wide value implementation.
+
+Tue Mar 30 22:00:44 2010 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/irb.rb: support [Feature#988], [ruby-core:21177].
+ * lib/irb/context.rb: fix Context#verbose?.
+
+Tue Mar 30 21:56:33 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c: make wide value more polymorphic.
+
+Tue Mar 30 21:18:32 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/psych/extconf.rb: install psych .so to not psych/ but direct.
+ This prepends to install *.rb files to psych/psych.
+
+ * ext/psych/lib/psych.rb: require 'psych.so'.
+
+Tue Mar 30 20:55:14 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (w2v): renamed from w2xv.
+ (v2w): renamed from xv2w.
+ (rb_time_magnify): takes wideval_t.
+ (rb_time_unmagnify): returns wideval_t.
+
+Tue Mar 30 19:46:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/psych/lib: moved external library dependent files from lib.
+ [ruby-core:29129]
+
+Tue Mar 30 18:25:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_dirname): split from rb_file_s_dirname.
+
+ * load.c (rb_f_require_relative): use absolute path instead of
+ expanded path.
+
+Tue Mar 30 13:57:08 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * process.c (proc_daemon): Process.daemon should raise an error on
+ failure regardless of whether the implementation uses daemon(3)
+ or not. [ruby-dev:40832]
+
+Tue Mar 30 13:11:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/file2lastrev.rb (VCS::GIT_SVN): removed because git-log can
+ deal with git-svn repository faster than git-svn-info.
+
+ * tool/file2lastrev.rb (VCS#get_revisions): particular commands do
+ not depend on instance.
+
+Tue Mar 30 08:55:50 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/extconf.rb: Making library detection more agnostic.
+
+Tue Mar 30 08:10:59 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/psych.rb: Fix problem with empty and white-space only strings.
+ Thanks Peter McLain!
+ * test/psych/test_psych.rb: tests for change.
+
+Tue Mar 30 05:31:39 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/psych.rb: documentation updates. Thanks Peter McLain!
+ * lib/psych/{coder,tree_builder}.rb: ditto
+
+Tue Mar 30 03:56:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/psych/{emitter,parser,psych}.c: move variable
+ declaration to the first of the block.
+
+Mon Mar 29 21:47:44 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * prelude.rb, .document: Stuff in prelude.rb should be documented
+ as well.
+
+Mon Mar 29 20:23:05 2010 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/matrix.rb(Vector#each2, Vector#collect2): add type check for
+ Integer[Bug #2495].
+
+Mon Mar 29 19:45:09 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c: wide value condition changed.
+
+Mon Mar 29 18:10:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (Numeric): accept rationals.
+
+Mon Mar 29 15:10:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#open): re-open with same mode and
+ options as initialize.
+
+Mon Mar 29 09:16:45 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * random.c: change include order; ruby.h should be at first.
+
+Mon Mar 29 06:47:25 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/*: importing Psych to trunk
+ * test/psych/*: ditto
+ * lib/psych/*: ditto
+
+Sun Mar 28 10:03:51 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/scanf.rb: fix max width modifier for %f.
+
+Sun Mar 28 10:35:45 2010 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 1.6.0 r5717.
+ * test/minitest/*.rb: ditto.
+
+Sun Mar 28 10:12:28 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (rb_time_magnify): fix for LP64.
+
+Sun Mar 28 09:28:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/scanf.rb: fix %[egEFG] isn't accept.
+
+Sun Mar 28 09:53:02 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c: rename small integer specialization related identifiers.
+
+Sun Mar 28 08:20:37 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (weq): specialize for small integer.
+ (wne): ditto.
+ (wlt): ditto.
+ (wgt): ditto.
+ (wle): ditto.
+ (wge): ditto.
+ (rb_time_magnify): ditto.
+ (rb_time_unmagnify): ditto.
+ (rb_time_unmagnify_to_float): new function to avoid rational for
+ Time#to_f and Time#-.
+
+Sun Mar 28 07:12:41 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (mul): condition refined.
+
+Sun Mar 28 02:14:13 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c: fix previous commit.
+
+Sat Mar 27 23:17:52 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c: use 64bit arithmetic even on platforms with 32bit VALUE.
+
+Fri Mar 26 23:52:07 2010 wanabe <s.wanabe@gmail.com>
+
+ * NEWS: add Thread#add_trace_func and Thread#set_trace_func.
+
+Fri Mar 26 22:58:10 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/openssl/ossl_x509store.c (ossl_x509store_initialize): initialize
+ store->ex_data.sk. a patch from Christian Holtje in
+ [ruby-core:28907]. [ruby-core:23971] [ruby-core:18121]
+
+Fri Mar 26 19:55:41 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * Makefile.in (DOXYGEN): Define a missing variable DOXYGEN. Build
+ has been failing when doxygen(1) is found by configure but the
+ variable is not defined by the system and make(1) does not allow
+ an empty command. ("@$(DOXYGEN)" was the cause)
+
+Fri Mar 26 19:28:03 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * test/ruby/test_hash.rb (test_recursive_key): recursive keys are
+ permitted now. [ruby-dev:40735]
+
+Fri Mar 26 12:36:10 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/yaml/basenode.rb: deprecating YPath methods
+
+ * lib/yaml/stream.rb: deprecating YAML::Stream#edit
+
+Fri Mar 26 12:29:28 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * lib/yaml/encoding.rb: YAML.encode, YAML.decode are deprecated.
+
+ * lib/yaml/stringio.rb: yaml/stringio.rb is deprecated.
+
+ * lib/yaml/ypath.rb: YAML::YPath is deprecated.
+
+Fri Mar 26 04:52:19 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: fix [ruby-core:28901] [Bug #2997].
+ Thanks, Michael Graff.
+
+ * ext/tk/tcltklib.c: use xfree() for memories allocated by ALLOC().
+
+ * ext/tk/tkutil/tkutil.c: ditto.
+
+ * ext/tk/lib/tkextlib/version.rb: forgot updating.
+
+Thu Mar 25 23:53:22 2010 wanabe <s.wanabe@gmail.com>
+
+ * thread.c (thread_reset_event_flags): set flags to thread. [Bug #693]
+
+Thu Mar 25 23:17:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * file.c (rb_get_path_check): prefer #to_path over #to_str. a patch
+ originally written by me, and modified by Nobuyoshi Nakada.
+ [ruby-core:24257]
+
+Thu Mar 25 18:10:08 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: Array#{uniq,uniq!} can take a block. see [ruby-dev:37998]
+
+Thu Mar 25 17:21:49 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: add IO#autoclose=, IO#autoclose?, IO#codepoints,
+ IO#each_codepoint.
+
+Thu Mar 25 14:50:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_{read,write}): fix handle leaks. based on
+ a patch from Heesob Park in [ruby-core:28919]. [ruby-core:28833]
+
+Thu Mar 25 12:37:37 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * NEWS: add Kernel#singleton_class.
+
+Thu Mar 25 11:34:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * bignum.c, node.h, strftime.c, enc/trans/utf8_mac.trans:
+ added explicit casts for suppressing warnings.
+
+Thu Mar 25 11:34:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * test/ruby/test_dir_m17n.rb: HFS+ escapes invalid byte sequences of
+ filenames.
+
+Thu Mar 25 05:44:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (ruby_version): needs runnable CPP.
+
+Thu Mar 25 04:42:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot (package): take a breath for HP-UX make
+ [ruby-core:28938].
+
+ * tool/make-snapshot (Dir.mktmpdir): for 1.8.6 backward compatibility.
+
+ * tool/make-snapshot (package): $: no longer contains ".", in trunk.
+
+Thu Mar 25 03:52:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/charset_alias.rb: update of URL. [ruby-dev:38360]
+
+Wed Mar 24 23:43:40 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (thread_create_core): let new thread inherit RUBY_EVENT_VM
+ of event_flags. [ruby-core:25191]
+
+ * thread.c (rb_threadptr_exec_event_hooks): delete RUBY_EVENT_VM if
+ all event_hooks are removed.
+
+Wed Mar 24 22:58:02 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * configure.in: revert the previous commit, which seemed to break make
+ install. The files of standard libraries are directly installed to
+ $(PREFIX)/lib/ruby instead of $(PREFIX)/lib/ruby/1.9.1
+
+Wed Mar 24 18:16:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (LDSHARED, CPP): keep $(CC). [ruby-core:28912]
+
+Wed Mar 24 14:33:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_read): limit read size to 16KB if the file
+ seems to be console. [ruby-core:28902]
+
+Wed Mar 24 10:18:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (file_expand_path): set length of string before calling
+ rb_enc_check because rb_enc_check scans its content.
+ This prevents warnings by valgrind.
+
+Tue Mar 23 23:58:51 2010 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Incorporating the fixes from the recent
+ FasterCSV releases: 1.5.2 and 1.5.3. New parser
+ by Tim Elliott. [ruby-core:25038]
+
+Tue Mar 23 18:35:46 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * object.c (rb_obj_singleton_class): new method
+ Kernel#singleton_class. [ruby-core:21702]
+
+Tue Mar 23 01:13:59 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket: use rsock_ prefix for internal initialization functions.
+
+Mon Mar 22 20:32:22 2010 wanabe <s.wanabe@gmail.com>
+
+ * proc.c (rb_method_location): return attr's location if it is setup.
+ [Feature #2084]
+
+ * NEWS: follow above.
+
+ * vm_method.c (rb_add_method): save attr's location.
+
+ * gc.c (mark_method_entry): mark attr's location.
+
+ * method.h (rb_method_definition_t): add member to save attr's location.
+
+ * vm_eval.c (vm_call0): follow above.
+
+ * vm_insnhelper.c (vm_call_method): ditto.
+
+ * vm_method.c (rb_method_definition_eq): ditto.
+
+Mon Mar 22 19:31:06 2010 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (Date#>>): fixed. [ruby-core:28011]
+
+Mon Mar 22 18:01:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RMDIRS): use rmdir -p if possible.
+
+ * Makefile.in ({dist,real}clean-ext): fix for removing ext
+ directories.
+
+Mon Mar 22 09:06:10 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/.document: extracted from ext/.document.
+
+Mon Mar 22 00:50:33 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h (rsock_revlookup_flag): declared.
+
+Mon Mar 22 00:01:24 2010 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/setup (config.h): RUBY_EXEC_PREFIX defined.
+
+Sun Mar 21 00:46:29 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (URI.encode_www_form_component):
+ convert strings of HTML5 ASCII incompatible encoding
+ to UTF-8.
+
+ * lib/uri/common.rb (URI.encode_www_form_component):
+ "\x83\x41" of Shift_JIS should be encoded as "%83A".
+ This follows real implementations.
+
+ * lib/uri/common.rb (URI.decode_www_form_component):
+ use given encoding for force_encoding. [ruby-dev:40721]
+
+Sun Mar 21 21:09:17 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv-replace.rb: specify super class for rdoc.
+
+ * lib/ipaddr.rb: ditto.
+
+Sun Mar 21 19:52:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_initialize): add autoclose argument to control close
+ at finalization. [ruby-core:26222]
+
+ * io.c (rb_io_autoclose_p, rb_io_set_autoclose): new methods.
+
+Sun Mar 21 19:50:04 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket: make sources rdoc friendly.
+
+Sun Mar 21 17:57:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (IO_RBUF_CAPA_FOR): use large buffer as cbuf if readconv is
+ needed for performance improvement. based on a patch by Roger Pack
+ in [ruby-core:28163]. [ruby-core:28162]
+
+Sun Mar 21 17:14:49 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: reuse hash object.
+
+Sun Mar 21 12:32:39 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (transcode_compile_tree): make
+ valid_encoding mandatory unless from_encoding is registered in
+ ValidEncoding.
+ (transcode_tbl_only): ditto.
+ (transcode_tblgen): ditto.
+ (ValidEncoding): new function.
+
+ * enc/trans/escape.trans: specify valid_encoding.
+
+ * enc/trans/emoji_sjis_docomo.trans: ditto.
+
+ * enc/trans/emoji.trans: ditto.
+
+ * enc/trans/emoji_iso2022_kddi.trans: ditto.
+
+ * enc/trans/big5.trans: ditto.
+
+ * enc/trans/emoji_sjis_softbank.trans: ditto.
+
+ * enc/trans/emoji_sjis_kddi.trans: ditto.
+
+ * enc/trans/chinese.trans: use ValidEncoding() instead of
+ ValidEncoding[].
+
+Sun Mar 21 09:43:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (IO_[CRW]BUF_CAPA_MIN): replaced magic numbers.
+
+Sun Mar 21 09:22:10 2010 Tanaka Akira <akr@fsij.org>
+
+ * object.c (rb_obj_hash): use LONG2FIX to avoid Bignum allocation.
+
+Sat Mar 20 22:51:46 2010 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_sum): use UCHAR_MAX.
+
+Sat Mar 20 19:16:42 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (ActionMap.unambiguous_action): use
+ Array#delete.
+ (ActionMap.merge2): defined.
+ (ActionMap::PostMemo): removed.
+ (transcode_compile_tree): use ActionMap.merge2.
+
+Sat Mar 20 13:26:09 2010 Tanaka Akira <akr@fsij.org>
+
+ * array.c (rb_ary_uniq_bang): the array is already unique if the
+ length is zero or one.
+ (rb_ary_uniq): ditto.
+
+Sat Mar 20 12:30:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib: fixed typo. a patch by Sho Hashimoto in [ruby-dev:40716].
+
+Sat Mar 20 11:32:18 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (each_firstbyte_range): tuned for less
+ method calls.
+
+Sat Mar 20 00:59:50 2010 wanabe <s.wanabe@gmail.com>
+
+ * ext/dl/lib/dl/pack.rb (DL#pack): allow LLP64.
+
+Fri Mar 19 05:26:31 2010 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_sum): don't call method for each byte.
+
+Thu Mar 18 21:24:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (miniruby): link $(NORMALMAINOBJ).
+
+Thu Mar 18 19:52:27 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: scan singleton mappings sequentially.
+
+Thu Mar 18 06:28:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_EXEC_PREFIX): added to config.h.
+
+ * ruby.c (ruby_init_loadpath_safe): TMP_RUBY_PREFIX should be
+ exec_prefix, not rubylibprefix. [ruby-core:28718]
+
+ * version.c (RUBY_LIB_PREFIX): fallback to RUBY_EXEC_PREFIX.
+
+Thu Mar 18 05:58:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_{to_i,mod,divmod,div2}):
+ removed unused variables.
+
+Thu Mar 18 04:40:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_intern3): get rid of type-punning cast.
+
+Thu Mar 18 02:29:42 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (iseq_build_body): add mark to jump table hash of case.
+
+Thu Mar 18 00:58:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * util.c (ruby_strtod): Add support for Hexadecimal
+ floating-point expression [ruby-dev:40650] #2969
+
+Thu Mar 18 00:00:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (URI.{en,de}code_www_form_component):
+ renamed from URI.{en,de}code_www_component. [ruby-dev:40672]
+
+ * lib/uri/common.rb (URI.encode_www_form_component): %-encoded
+ element should have always two hex.
+
+ * lib/uri/common.rb (URI.encode_www_form_component):
+ better treatment for ASCII incompatible encodings and
+ encodings whose lead byte may use 7bit.
+
+ * lib/uri/common.rb (URI.decode_www_form_component): add %20.
+
+ * lib/uri/common.rb (URI.decode_www_form_component): add
+ result's encoding as 2nd argument.
+
+ * lib/uri/common.rb (URI.decode_www_form): added.
+
+Wed Mar 17 16:25:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_hash_aset): allow recursive key. [ruby-core:24648]
+
+Wed Mar 17 06:39:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.h (rb_warning, rb_sys_warning): fixed typo in rdoc.
+ [ruby-core:28696]
+
+Wed Mar 17 02:29:46 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c, iseq.c, ruby.c, vm.c, vm_core.h, vm_eval.c: add absolute
+ path field into rb_iseq_t. The field contains a string representing
+ a path to corresponding source file. or nil when the iseq is created
+ from -e, stdin, eval, etc. This field is used for require_relative.
+ [ruby-dev:40004]
+
+ * load.c (rb_f_require_relative): add C implementation of
+ require_relative.
+
+ * prelude.rb (require_relative): get rid of Ruby implementation of
+ require_relative.
+
+Wed Mar 17 01:24:01 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (rb_intern3): prohibit Symbol with an invalid encoding.
+ [ruby-core:24621]
+
+ * test/ruby/test_m17n_comb.rb: modify a test for above.
+
+Tue Mar 16 22:51:11 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: specialize for singleton mappings.
+
+Tue Mar 16 20:13:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * enc/trans/emoji.trans: added codepoints leading 0xf4 into
+ nomap_table.
+
+Tue Mar 16 17:33:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (VpCtoV): keep e's sign.
+ When e doesn't over flow e * BASE_FIG but overflow e * 10,
+ e will overflow.
+
+Tue Mar 16 17:18:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/encoding.h (rb_str_conv_enc_opts): missing prototype.
+
+Tue Mar 16 15:20:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/tmpdir: split from lib/tmpdir.rb.
+
+ * win32/win32.c (rb_w32_system_tmpdir): extracted from init_env.
+
+ * win32/win32.c (rb_w32_getcwd): removed duplicated code.
+
+Tue Mar 16 14:06:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/encoding.h (ENC_TO_ENCINDEX): suppress warnings.
+
+Tue Mar 16 14:03:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RSHIFT): parenthesize the argument of cast instead
+ of the result.
+
+Tue Mar 16 11:23:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): ignore dname if it has different
+ drive letter or UNC.
+
+Tue Mar 16 07:16:56 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: redundant loop removed.
+
+Tue Mar 16 07:01:43 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: refactored to use tree as memo key.
+
+Tue Mar 16 04:05:13 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: more info in generating macro names.
+
+Mon Mar 15 21:58:03 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: ActionMap#each_firstbyte inlined.
+
+Mon Mar 15 21:22:49 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (transcode_tblgen): add valid_encoding
+ optional argument.
+
+ * enc/trans/single_byte.trans use valid_encoding argument for
+ transcode_tblgen.
+
+ * enc/trans/chinese.trans: ditto.
+
+Mon Mar 15 18:33:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (default_rand): removed initial buffer.
+
+ * random.c (Init_RandomSeed): initialize seed of default random.
+
+ * random.c (Init_RandomSeed2): turn the seed to Bignum object.
+
+Mon Mar 15 17:28:30 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_print): RDoc update. a patch from Daniel Kelley
+ in [ruby-core:28643].
+
+Mon Mar 15 14:06:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (next_state): no initialization here.
+
+ * random.c (default_mt): always return initialized MT.
+
+Mon Mar 15 11:49:48 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * random.c (rb_reset_random_seed): set seed in this.
+ [ruby-core:28655]
+
+Mon Mar 15 10:26:02 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: import latest nkf. [master 9306cb0]
+ this also fixes [ruby-dev:40607]
+
+Mon Mar 15 09:34:17 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (URI.encode_www_component):
+ call str.to_s at first.
+
+Mon Mar 15 09:36:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * symbian/README.SYMBIAN: fixed broken patch and converted to
+ unified diff.
+
+Mon Mar 15 07:51:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (Init_File): do not define File::ALT_SEPARATOR on cygwin.
+
+Mon Mar 15 07:41:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (realpath_rec): use same cache.
+
+ * file.c (realpath_internal): regulate separators in prefix.
+ [ruby-core:28653]
+
+ * file.c (FILE_ALT_SEPARATOR): separated condition.
+
+Mon Mar 15 04:41:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_each_codepoint): read directly when readconv is
+ needed but internal encoding is not set. [ruby-core:28650]
+
+Mon Mar 15 04:18:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/file2lastrev.rb (VCS::{SVN,GIT}#get_revisions):
+ use block argument 'path' to get the path given by super.
+
+Mon Mar 15 02:43:59 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (Action#hash): defined.
+ (Action#eql?): ditto.
+ (Action#==): ditto.
+
+Mon Mar 15 01:52:46 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: refactored.
+
+Mon Mar 15 01:18:31 2010 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/setup (*.pkg): Ruby Core installation separated from standard extensions.
+
+ * symbian/configure.bat: ditto.
+
+ * symbian/README.SYMBIAN: ditto.
+
+ * symbian/setup (config.h): support for 2nd internal drive added.
+
+Mon Mar 15 00:11:23 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/file2lastrev.rb (VCS::GIT_SVN#get_revisions) :
+ use block argument 'path' to get the path given by super.
+
+ * tool/file2lastrev.rb (VCS::GIT#get_revisions):
+ use double quotes for Windows.
+ patched by Vladimir Sizikov [ruby-core:28651]
+
+Sun Mar 14 22:38:31 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: consider valid_encoding for max_input.
+
+Sun Mar 14 15:46:09 2010 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/emoji.trans: fix nomap_table.
+
+Sun Mar 14 09:50:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (insn_data_to_s_detail), iseq.c (insn_operand_intern):
+ fixed format specifiers.
+
+Sun Mar 14 07:20:17 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (EXPAND_PATH_BUFFER): make it back to usascii, to prevent
+ infinite loop on some platform. [ruby-dev:40629]
+
+Sun Mar 14 02:40:38 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: reject ambiguous mapping.
+
+ * enc/trans/single_byte.trans: remove ambiguous mapping such as
+ \xD6 -> U+05F2 and \xD6\xC7 -> U+FB1F in Windows-1255
+
+Sat Mar 13 23:48:27 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (file_expand_path): should not just copy the encoding
+ from fname. [ruby-core:28635]
+
+ * file.c (EXPAND_PATH_BUFFER): set filesystem_encoding, not
+ usascii for path buffer.
+
+Sat Mar 13 17:48:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/file2lastrev.rb: refactored. fixed changed revision of git.
+
+Sat Mar 13 15:44:20 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_print): should not print field separator at the end
+ of arguments. [ruby-talk:358633]
+
+Sat Mar 13 14:49:55 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_join): remove Enumerable#join. [ruby-core:24786]
+
+ * array.c (ary_join_1): use #to_ary to detect recursive array.
+
+Sat Mar 13 12:26:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/io.h (MakeOpenFile): finalize fptr to get rid of
+ memory leak.
+
+Sat Mar 13 11:14:26 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * load.c (rb_get_expanded_load_path): expand paths if any item in $:
+ is not a string.
+
+Sat Mar 13 10:16:32 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * load.c (rb_get_expanded_load_path): does not expand paths if all
+ the items in $: are absolute paths. [ruby-core:28113]
+
+Sat Mar 13 10:03:52 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: fix [Bug #2840] Tk doesn't built in mingw.
+
+Sat Mar 13 03:24:15 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: show consumed time at last.
+
+Sat Mar 13 00:44:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_basename): check encoding of suffix.
+
+Sat Mar 13 00:11:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe): mark initial load paths.
+
+ * gem_prelude.rb (push_all_highest_version_gems_on_load_path):
+ search insertion position by initial load path mark.
+
+ * lib/rubygems.rb (Gem.load_path_insert_index): ditto.
+
+Fri Mar 12 21:34:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * NEWS: emoji encodings.
+
+Fri Mar 12 17:14:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (URI.encode_www_form): new method to
+ generate URL-encoded form data. [ruby-dev:39246]
+
+ * lib/uri/common.rb (URI.encode_www_component,
+ URI.decode_www_component): new method for encode/decode
+ a name/value of HTML form.
+
+Fri Mar 12 17:36:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/webrick/httpservlet/cgihandler.rb
+ (WEBrick::HTTPServlet::CGIHandler#do_GET):
+ set binary mode for tempfile.
+ http://pc12.2ch.net/test/read.cgi/tech/1265467681/286
+
+Fri Mar 12 13:52:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * tool/compile_prelude.rb: TMP_RUBY_PREFIX should replace
+ rubylibprefix but not prefix.
+
+Fri Mar 12 09:43:11 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * complex.c (f_signbit): remove condition for signbit because
+ all platforms have signbit from r26871.
+
+Fri Mar 12 07:25:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (init_env): get rid of alloca() for outer string.
+
+Fri Mar 12 07:17:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/racc/cparse/cparse.c: suppressed warnings for shortening on
+ platforms where pointer is bigger than int.
+
+Fri Mar 12 07:15:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe, ruby_init_gems): set and remove
+ TMP_RUBY_PREFIX.
+
+ * variable.c (rb_const_remove): new function.
+
+ * tool/compile_prelude.rb: split each preludes.
+
+Fri Mar 12 07:09:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (config.status): setup MINIRUBY environment for
+ cross-compiling.
+
+Fri Mar 12 06:48:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/tk/extconf.rb: log() is built-in in some compilers and needs
+ proper declaration.
+
+Fri Mar 12 06:37:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sample/timeout.rb: split from lib/timeout.rb.
+
+Thu Mar 11 22:35:27 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_round): new method Time#round. [ruby-dev:40595]
+
+Thu Mar 11 17:31:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (str_transcode0): confirm the code range.
+
+Thu Mar 11 12:14:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * missing/signbit.c: added.
+
+Thu Mar 11 11:16:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: check if target_archs has changed.
+
+Thu Mar 11 01:33:30 2010 wanabe <s.wanabe@gmail.com>
+
+ * win32/win32.c (signbit): allow x64.
+
+Thu Mar 11 01:04:48 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * iseq.c (rb_iseq_clone): sets local_iseq and klass properly.
+
+Wed Mar 10 21:25:41 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * enum.c (min_ii, max_ii, minmax_ii): remove wrong optimization that
+ reuses array for yield parameter, which caused unexpected behavior.
+ [ruby-core:25989]
+
+Wed Mar 10 12:10:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * enc/x_emoji.h: renamed from enc/x-emoji.c.
+
+Wed Mar 10 04:17:08 2010 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (defined_expr), insns.def (defined): fix to pass a Symbol
+ object such as :$foo for the "defined?($foo)" expression
+ on defined instruction. This patch fixes ISeq#to_a/load.
+
+Tue Mar 9 20:50:09 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/dl/test_method.rb: delete a residual test for dl on libffi.
+
+Tue Mar 9 18:00:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * enc/trans/EMOJI/*.src, enc/trans/emoji*,
+ enc/x-emoji.c, test/ruby/enc/test_emoji.rb,
+ tool/enc-emoji-citrus-gen.rb, tool/enc-emoji4unicode.rb,
+ tool/jisx0208.rb, tool/test/test_jisx0208.rb:
+ new encodings to support emoji charsets, which are used by
+ Japanese mobile phones [ruby-dev:40528].
+ Thanks Yoji Shidara for a lot of contribution.
+
+ * tool/transcode-tblgen.rb: modified for enc-emoji4unicode.rb.
+
+Tue Mar 9 14:57:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/transcode-tblgen.rb (ActionMap#generate_node):
+ remove useless dup.
+
+ * tool/transcode-tblgen.rb (transcode_tbl_only): remove duplicated
+ method call for encode_utf8.
+
+Tue Mar 9 14:55:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_to_s): remove unused variable.
+
+Tue Mar 9 12:17:34 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * tool/transcode-tblgen.rb (StrSet#parse, ActionMap#generate_node):
+ optimization (reusing object and improving memoize).
+ [ruby-dev:40582]
+
+Sun Mar 7 02:27:03 2010 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * dln.c [DLN_NEEDS_ALT_SEPARATOR] (translit_separator): small typo
+ fixed.
+
+ * symbian/setup (*.pkg): Shared library installation path fixed to
+ match changes in version.c.
+
+ * symbian/setup (ruby.mmp): SOURCE dln_find.c added.
+
+Sun Mar 7 23:14:22 2010 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_big_pack): use DIGSPERLONG and BITSPERDIG.
+ (rb_big_unpack): use DIGSPERLONG.
+
+Sun Mar 7 19:21:10 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * io.c: Fix documentation for each/each_line/lines, bytes/each_byte,
+ codepoints/each_code_point [ruby-core:23948]
+
+ * string.c: ditto
+
+ * ext/stringio/stringio.c: ditto
+
+Sun Mar 7 13:49:49 2010 Tanaka Akira <akr@fsij.org>
+
+ * file.c: add optional basedir argument for realpath/realdirpath.
+ (realpath_internal): handle basedir.
+ (rb_file_s_realpath): extract basedir from argument list.
+ (rb_file_s_realdirpath): extract basedir from argument list.
+
+ * lib/pathname.rb (realpath): pass basedir.
+ (realdirpath): ditto.
+
+Sun Mar 7 02:05:38 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_set_filesystem_encoding):
+ filesystem encoding on Mac OS X is now
+ default external encoding. so Mac OS X is now
+ treated as one of Unix. [ruby-dev:40439]
+
+ * file.c (file_path_convert): ditto.
+
+Sat Mar 6 22:07:09 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c: fix the prototype of rb_big2ulong_pack.
+
+Sat Mar 6 13:45:37 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (rb_io_s_write, rb_io_s_binwrite): delete File#write and
+ #binwrite. It may take a long time to make them stable, so 1.9.2
+ should not include them. We need refactoring to implement them
+ again.
+
+ * test/ruby/test_io.rb: delete tests for them.
+
+Sat Mar 6 10:03:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (rb_io_s_binwrite): use mode "r+b" instead of "ab" to handle
+ offset correctly. [ruby-core:28517]
+
+ * test/ruby/test_io.rb: use assert_equal instead of assert.
+
+Sat Mar 6 01:08:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): VC6 has __int64.
+
+Fri Mar 5 19:36:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (econv_opts): set :undef => :replace when
+ :replace is given and :invalid is not given. [ruby-dev:40554]
+
+Fri Mar 5 17:51:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (pipe_open): suppressed a warning.
+
+ * win32/win32.c (rb_w32_map_errno, winnt_stat, rb_chsize): ditto.
+
+ * win32/win32.c (rb_w32_aspawn): get rid of overflow.
+
+Fri Mar 5 11:59:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (signbit): defined on mingw.
+
+Thu Mar 4 22:49:42 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * eval.c (setup_exception): avoid line number 0 when setting
+ $DEBUG=true. [ruby-dev:39116]
+
+Thu Mar 4 22:45:02 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (io_s_write, io_s_binwrite): add File#write and #binwrite.
+ [ruby-core:21701]
+
+ * test/ruby/test_io.rb: add tests for above.
+
+Mon Mar 4 13:14:34 2010 wanabe <s.wanabe@gmail.com>
+
+ * gc.c (gc_profile_total_time): add GC::Profiler.total_time.
+ [ruby-core:27169]
+
+ * NEWS: ditto.
+
+Thu Mar 4 10:15:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * complex.c (m_log, m_exp): remove unused functions.
+
+Thu Mar 4 02:34:59 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_env.rb (TestEnv#test_select_bang): add tests.
+
+Thu Mar 4 02:29:52 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_hash.rb (TestHash#test_keep_if): fix typo.
+
+Thu Mar 4 00:10:54 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (HEX2): extracted from regexps.
+
+Wed Mar 3 23:16:32 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * complex.c (nucomp_real_check): raise TypeError instead of
+ ArgumentError when argument is not a real as expected
+ [ruby-core:28395]
+
+ * rational.c (nurat_int_check): ditto (for integers)
+
+Wed Mar 3 23:07:08 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb (Vector#each): Return self and optimization
+ [ruby-core:28405]
+
+Wed Mar 3 18:35:55 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_select_bang): add #select! and keep_if to Hash.
+
+ * hash.c (env_select_bang): ..and to ENV.
+
+Wed Mar 3 15:54:20 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/matrix.rb (Vector#each2, collect2): small refactoring.
+
+Wed Mar 3 16:14:24 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/matrix.rb (Vector#each): make Vector enumerable.
+ [ruby-core:28405]
+
+Wed Mar 3 14:28:23 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_select_bang): select! removes all elements for
+ which block returns false. [ruby-core:27286]
+
+ * array.c (rb_ary_keep_if): #keep_if, new method.
+
+Wed Mar 3 06:19:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (signbit): defined.
+
+ * win32/Makefile.sub, symbian/setup (config.h): pack.c requires
+ SIZEOF_INT*_T now.
+
+Tue Mar 2 21:16:48 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (rb_io_lines, rb_io_bytes, rb_io_chars, rb_io_codepoints):
+ change to alias to each_*, in similar way to ARGF and String.
+ [ruby-core:23948]
+
+Tue Mar 2 15:54:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regcomp.c (noname_disable_map): add NT_ANCHOR case.
+ Without this change, captured groups in anchors (look-ahead,
+ look-behind, and so on) are not removed and
+ unintended invalid backref error occur. [ruby-core:28235]
+
+ * regcomp.c (renumber_by_map): ditto.
+
+Tue Mar 2 14:42:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * test/dl/test_closure.rb: forget to revert at r26764.
+
+Tue Mar 2 14:29:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_find_file_ext_safe, rb_find_file_safe): skip argument
+ checks in file_expand_path().
+
+Tue Mar 2 13:54:44 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * test/ruby/test_math.rb: Fix lgamma test
+
+Mon Mar 1 23:26:56 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/pty.c (pty_open): refine the path for master IO.
+
+Mon Mar 1 20:07:06 2010 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * ext/zlib/zlib.c (zstream_expand_buffer_into): remove compare
+ different type values warning.
+
+Mon Mar 1 17:42:45 2010 wanabe <s.wanabe@gmail.com>
+
+ * configure.in (mingw): do not detect snprintf/vsnprintf.
+
+Mon Mar 1 16:54:21 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * include/ruby/oniguruma.h: updated to follow Oniguruma 5.9.2.
+
+ * re.c (make_regexp): use onig_new() instead of onig_alloc_init().
+
+ * re.c (rb_reg_to_s): ditto.
+Sun Feb 28 21:32:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/pty/pty.c (get_device_once): raise on error when fail is
+ non-zero.
+
+Sun Feb 28 18:58:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * math.c (rb_eMathDomainError): new exception class
+ for representing mathematical domain error instead
+ of Errno::EDOM.
+
+ * math.c (domain_check, infinity_check): removed,
+ no longer needed.
+
+ * math.c (math_atan2, math_acos, math_asin, math_acosh,
+ math_atanh, math_log, math_log2, math_log10, math_sqrt,
+ math_gamma, math_lgamma): mathematical domain errors
+ are checked and raised before calling libm's functions.
+
+ * test/ruby/test_math.rb: updated for changes of math.c.
+
+Sun Feb 28 15:07:28 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (pack_pack): use union to avoid pointer cast.
+ (pack_unpack): ditto.
+
+Sun Feb 28 11:49:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * openssl/ossl.c (OSSL_IMPL_SK2ARY): for OpenSSL 1.0.
+ patched by Jeroen van Meeuwen at [ruby-core:25210]
+ fixed by Nobuyoshi Nakada [ruby-core:25238],
+ Hongli Lai [ruby-core:27417],
+ and Motohiro KOSAKI [ruby-core:28063]
+
+ * ext/openssl/ossl_pkcs7.c (pkcs7_get_certs, pkcs7_get_crls):
+ split pkcs7_get_certs_or_crls.
+
+Sun Feb 28 11:42:55 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/openssl/{test_x509cert.rb,openssl,test_x509crl.rb,
+ test_x509req.rb}:
+ fix false positive tests because of OpenSSL spec change.
+ patched by originally Hongli Lai [ruby-core:27417],
+ and fixed by Motohiro KOSAKI [ruby-core:28063]
+
+Sun Feb 28 11:21:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/openssl/{test_x509cert.rb,openssl,test_x509req.rb}:
+ remove false positive tests because of OpenSSL spec change.
+ patched by Motohiro KOSAKI [ruby-core:28063]
+ see also [ruby-dev:40077]
+
+Sun Feb 28 11:25:16 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (pack_pack): generalized integer packer implemented.
+ (pack_unpack): generalized integer unpacker implemented.
+
+Sun Feb 28 06:58:53 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (swap32): use __builtin_bswap32 on gcc 4.3.0 or later.
+ (swap64): ditto.
+
+Sun Feb 28 00:38:18 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c: use integer types with explicit size.
+
+Sat Feb 27 15:54:55 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c: check assumption on QUAD_SIZE and SIZEOF_LONG.
+
+ * bignum.c: check assumption on SIZEOF_LONG and SIZEOF_BDIGITS.
+
+Sat Feb 27 03:48:18 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c: fix q and Q for big endian environments which have no
+ 8 bytes integer type.
+ (pack_pack): use rb_big_pack.
+ (pack_unpack): use rb_big_unpack.
+
+ * include/ruby/intern.h (rb_big_pack): declared.
+ (rb_big_unpack): ditto.
+
+ * bignum.c (rb_big_pack): new function.
+ (rb_big_unpack): ditto.
+
+Fri Feb 26 21:36:51 2010 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c: fix rb_quad_pack and rb_quad_unpack for environments
+ which don't have 8bytes integer type. This still depends on little
+ endian.
+ (rb_quad_pack): use quad_buf_complement. don't raise for large
+ values.
+ (rb_quad_unpack): use quad_buf_complement.
+ (quad_buf_complement): new function extracted from rb_quad_pack.
+ add one after bitwise negation.
+
+Fri Feb 26 21:29:48 2010 Tanaka Akira <akr@fsij.org>
+
+ * configure.in (RSHIFT): add parenthesis to suppress warning.
+
+Fri Feb 26 20:51:47 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/socket/raddrinfo.c, ext/socket/udpsocket.c: avoid illegal cast
+ from void-returning function to VALUE-returning one. It causes SEGV
+ on RubySpec with mingw32.
+
+Fri Feb 26 20:07:48 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (QUAD_SIZE): it should be always 8.
+
+ * bignum.c (rb_quad_pack): use LONG_LONG version only if
+ SIZEOF_LONG_LONG == QUAD_SIZE.
+
+Fri Feb 26 16:49:29 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (swap64): fix for VC6.
+
+Fri Feb 26 14:17:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (pack_pack, pack_unpack): suppressed warnings.
+
+Fri Feb 26 07:44:51 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/dl: revert dl with libffi because it can't run on mswin now.
+
+Thu Feb 25 22:59:46 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c: consider DYNAMIC_ENDIAN. refactored.
+
+Thu Feb 25 11:17:01 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * rational.c (nurat_expt): use Float#** when Rational ** Float.
+ This fixes Rational(3,1)**3.0=>26.99999999999999 on FreeBSD.
+
+ * complex.c (rb_fexpt): removed.
+ Note that this function is not static but is private.
+
+Thu Feb 25 00:43:57 2010 Koichi Sasada <ko1@atdot.net>
+
+ * insns.def: Change the operand type of setinlinecache
+ (OFFSET to IC). This IC must be same as corresponding
+ getinlinecache instruction's IC operand.
+ This change is for a little performance improvement
+ (getting IC directly) and is for the AOT compilation development.
+
+ * compile.c, iseq.c, insns.def: Change the approach to handling inline
+ cache (IC) type operand to enable the above change.
+ This change also affects ISeq#to_a method. The inline cache operand
+ will be dumped by fixnum, the index of inline cache, in other words,
+ inline cache identity.
+
+ * template/insns_info.inc.tmpl, tool/instruction.rb: No need to count
+ inline cache size (insn_iclen()).
+
+Thu Feb 25 00:57:59 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (swap64): don't redefine.
+
+Thu Feb 25 00:29:55 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (pack_unpack): don't use OFF32 for gcc 4.5.
+
+Wed Feb 24 22:39:15 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb: fix [ruby-core:28320] reported by Paul Clegg.
+ (Resolv::DNS::Requester#request): raise ResolvTimeout
+ consistently for timeout.
+
+Wed Feb 24 14:38:16 2010 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/indexer: Removed obsolete files.
+
+Wed Feb 24 11:52:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (translit_separator): moved back from load.c again.
+
+ * dln_find.c: split from dln.c.
+
+Wed Feb 24 09:31:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/digest/extconf.rb: use OpenSSL only when all transform
+ functions are available.
+
+Wed Feb 24 00:39:17 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (str_new_empty): String#split, partition, rpartition
+ taints the resulting strings if self is tainted.
+
+Mon Feb 22 21:35:33 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/digest/sha2/sha2init.c: test OpenSSL more strictly.
+
+Mon Feb 22 11:52:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems: update to 1.3.6.
+
+Mon Feb 22 11:21:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/digest/sha2: Use OpenSSL's SHA1 engine if available.
+
+Sun Feb 21 21:20:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile, install_files): honor srcprefix
+ argument if given. [ruby-dev:40449]
+
+Sun Feb 21 13:29:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/rubygems_version.rb: outdated. [ruby-core:28275]
+
+Sun Feb 21 06:24:12 2010 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/setup (config.h): HAVE_STRUCT_TIMEZONE, VOID_UNSETENV, and RUBY_LIB_VERSION_STYLE defined.
+ * symbian/setup (ruby.mmp): SOURCE node.c added.
+
+Mon Feb 22 09:15:45 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (gc_mark_children): lost comment added.
+
+Sat Feb 20 14:42:19 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (r_object0): should prepare placeholder before
+ processing instance variables. [ruby-dev:40414]
+
+ * marshal.c (id2encidx): no longer need arg.
+
+Sat Feb 20 14:36:16 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm.c (vm_backtrace_each): use called_id when method definition
+ structure is already freed. [ruby-dev:40234] [ruby-core:27959]
+
+Fri Feb 19 00:04:19 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/drb/drb.rb (DRbServer#stop_service): join killed thread to
+ ensure service stops. [ruby-dev:40441]
+
+Thu Feb 18 22:31:15 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * math.c (math_atanh): raise ERANGE without calling atanh if absolute
+ value is 1 to achieve platform-independent math. [ruby-core:28219]
+
+ * math.c (math_lgamma): return [Infinity, 1] without calling lgamma_r
+ if argument is infinity or -infinity. [ruby-core:28219]
+
+Thu Feb 18 22:28:00 2010 Kenta Murata <mrkn@mrkn.jp>
+
+ * configure.in: new --with-ext and --with-out-ext options for extmk.
+ * tool/mkconfig.rb: normalizing --with-out-ext to --without-ext.
+
+Thu Feb 18 21:50:00 2010 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (pack_unpack): call PACK_ITEM_ADJUST for 'Q'.
+
+Thu Feb 18 02:14:26 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (io_fread, io_getpartial, io_read, io_sysread): by using lock,
+ prohibit modification of buffer string during read (which had caused
+ EFAULT or SEGV). [ruby-dev:40437]
+
+ * test/ruby/test_io.rb: rewrite tests for the old behavior.
+
+Wed Feb 17 21:34:01 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * regcomp.c (setup_tree, onig_compile): optimize .* at last by
+ converting into (?>.*), which does not backtrack. [ruby-core:27791]
+
+ * test/ruby/test_regexp.rb: add a test for above.
+
+Wed Feb 17 21:26:53 2010 Tanaka Akira <akr@fsij.org>
+
+ * bootstraptest/runner.rb (assert_normal_exit): add :timeout option.
+
+Wed Feb 17 17:05:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_call_cfunc): removed unused variable.
+
+ * vm.c (vm_frametype_name): define only when VMDEBUG.
+
+Wed Feb 17 15:34:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/dl_conversions.c (rb_dl_type_to_ffi_type): support signed
+ long long.
+
+ * ext/dl/cfunc.c (rb_dlcfunc_inspect): get rid of overflow.
+
+ * ext/dl/closure.c (dlc_callback, rb_dlclosure_init): ditto.
+
+ * ext/dl/cptr.c (rb_dlptr_s_malloc): ditto.
+
+ * ext/dl/method.c (rb_dlfunction_initialize): ditto.
+
+Wed Feb 17 01:16:12 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * hash.c (hash_update): always raise an exception when adding a new
+ key during iteration. Traditionally, an exception was raised only
+ when rehash occurs, but it may lead to difficult bug to reproduce.
+ [ruby-core:23614]
+
+Tue Feb 16 22:09:27 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * gc.c (chain_finalized_object): fix precedence.
+
+Tue Feb 16 21:32:01 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * gc.c (rb_objspace_call_finalizer): always run finalizer at exit,
+ before object is free'd. [ruby-dev:40382]
+
+Tue Feb 16 20:56:39 2010 Tanaka Akira <akr@fsij.org>
+
+ * file.c (rb_group_member): renamed from group_member.
+ don't use group_member() in glibc because it's not valgrind clean.
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=570047
+
+Tue Feb 16 19:19:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/cfunc.c (rb_dlcfunc_call): convert signed value to
+ unsigned.
+
+Tue Feb 16 19:02:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/dl/test_{base,handle}.rb: use more verbose assertions.
+
+ * test/dl/test_import.rb (DL::LIBC::BoundQsortCallback): renamed
+ to get rid of overwriting warning.
+
+Tue Feb 16 11:03:19 2010 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/dl/method.c: Adding DL::Method as a superclass for DL::Function
+
+Mon Feb 15 23:37:30 2010 Tanaka Akira <akr@fsij.org>
+
+ * io.c: check lseek error by errno. NetBSD 4.0.1 may return -1 as
+ a file position of tty.
+
+Mon Feb 15 23:08:56 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/pstore.rb (PStore#initialize): initialize @thread_safe.
+ [ruby-core:27853]
+
+Mon Feb 15 22:45:26 2010 Tanaka Akira <akr@fsij.org>
+
+ * st.c (st_foreach): don't access ptr->hash after func call.
+ It may access freed area.
+
+Mon Feb 15 22:25:16 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/zlib/zlib.c (zlib_mem_alloc): suppress valgrind warnings.
+ http://www.zlib.net/zlib_faq.html#faq36
+
+Mon Feb 15 22:18:49 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_add): propagate fixed time offset.
+
+Mon Feb 15 17:42:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * signal.c (USE_SIGALTSTACK): NetBSD can't use sigaltstack(2)
+ with pthread.
+ http://netbsd.gw.com/cgi-bin/man-cgi?sigaltstack++NetBSD-current
+
+Mon Feb 15 13:11:47 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * array.c (rb_ary_push_m): use rb_ary_modify instead of
+ rb_ary_modify_check. This fixes regression due to r26632.
+
+Sun Feb 14 12:54:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (r_object0): removed duplicated entry for regexp.
+ [ruby-dev:40416]
+
+Sun Feb 14 04:45:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (r_object0): register regexp object before encoding
+ name. [ruby-dev:40414]
+
+ * re.c (rb_reg_alloc, rb_reg_init_str): split from rb_reg_new_str.
+
+Sat Feb 13 17:07:20 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_delete): RDoc update. a patch from Hugh Sasse.
+ [ruby-core:28128]
+
+ * array.c (rb_ary_compact_bang): ditto.
+
+Sat Feb 13 15:01:24 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (id2encidx): duplicated entry for encoding name.
+ [ruby-dev:40388]
+
+Sat Feb 13 12:17:52 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/tempfile.rb (Tempfile::Remover): new class to replace
+ Tempfile.callback. port r24902 from Ruby 1.8.
+
+Fri Feb 12 17:55:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (thread_free): fixed typo.
+
+Fri Feb 12 02:27:39 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#initialize, Set#replace, Set#merge)
+ (Set#subtract, Set#&): Fix duck type tests. [ruby-core:28078]
+
+ * lib/set.rb (Set#initialize, Set#replace, Set#merge)
+ (Set#subtract, Set#&): Try #each if #each_entry fails.
+
+Thu Feb 11 20:43:00 2010 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_oflags_modestr): return "r" for O_RDONLY|O_APPEND.
+ [ruby-dev:40379]
+
+Thu Feb 11 19:19:21 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * missing/alloca.c: s/RUBY_LIB/RUBY_LIB_PREFIX/ [ruby-dev:40395]
+
+Thu Feb 11 17:52:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_exec): reset thread state before restarting vm loop
+ from catch scope. [ruby-core:28129], [ruby-core:28143]
+
+Thu Feb 11 14:43:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (r_object0): read sequentially since marshal source
+ may not be possible to rewind. [ruby-dev:40386]
+
+ * marshal.c (r_object0): replace non-1.8 escapes directly.
+
+Thu Feb 11 09:49:31 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb: fix [ruby-core:28144] reported by Hans de Graaff.
+ (Resolv::DNS#make_requester): pass nameserver_port to
+ UnconnectedUDP.new.
+ (Resolv::DNS.bind_random_port): change the is_ipv6 argument to
+ bind_host.
+ (Resolv::DNS::Requester#initialize): change instance variable to
+ store multiple sockets.
+ (Resolv::DNS::Requester#request): pass readable sockets to
+ recv_reply.
+ (Resolv::DNS::Requester#close): close all sockets.
+ (Resolv::DNS::Requester::UnconnectedUDP#initialize): allocate
+ a socket for each address family of name servers.
+ (Resolv::DNS::Requester::UnconnectedUDP#recv_reply): read from the
+ passwd readable socket.
+ (Resolv::DNS::Requester::UnconnectedUDP#sender): use appropriate
+ socket for the target nameserver.
+ (Resolv::DNS::Requester::ConnectedUDP): follow the instance variable
+ change.
+ (Resolv::DNS::Requester::TCP#sender): ditto.
+ (Resolv::DNS::Config#nameserver_port): new method.
+
+Thu Feb 11 01:45:04 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm.c (vm_exec): temporarily revert r26628, which causes SEGV when
+ executing rubyspec.
+
+Wed Feb 10 16:31:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_push_m, rb_ary_unshift_m, rb_ary_aset),
+ (rb_ary_insert, rb_ary_replace, rb_ary_concat),
+ (rb_ary_uniq_bang, rb_ary_flatten_bang): check if frozen after
+ wrong number of arguments but before TypeError.
+ [ruby-core:28140]
+
+ * hash.c (rb_hash_replace): ditto.
+
+ * string.c (rb_str_replace): ditto.
+
+Wed Feb 10 04:06:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_exec): reset thread state before starting vm loop.
+ [ruby-core:28129]
+
+Tue Feb 9 23:48:25 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_divide): fix precision too.
+
+Tue Feb 9 23:26:07 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): fix precision.
+ [ruby-core:17472][ruby-dev:35372][ruby-dev:40105][ruby-dev:40358]
+
+Tue Feb 9 22:23:27 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (READ_CHECK): do not select fd before reading, that had made
+ TCPServer#gets stuck. [ruby-dev:40317]
+
+Tue Feb 9 21:27:38 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/rexml/text.rb (REXML::Text#initialize): REXML::Text.new checks
+ raw text for illegal characters without entity check, for the sake
+ of 1.8 compatibility. This had caused rubyspec error.
+
+Mon Feb 8 23:49:24 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_getline_fast): wrong calculation of new position
+ from rb_str_coderange_scan_restartable(). [ruby-core:28103]
+
+ * io.c (read_all): ditto.
+
+ * sprintf.c (rb_str_format): ditto.
+
+Mon Feb 8 21:03:53 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (socket_s_ip_address_list): obtain the scope_id
+ of IPv6 link local address on OpenSolaris.
+
+Mon Feb 8 16:27:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dmyversion.c: empty load path in miniruby.
+
+ * common.mk (COMPILE_PRELUDE): rbconfig is loaded on demand.
+
+ * tool/eval.rb, win32/{mkexports,resource}.rb: miniruby no longer
+ contains "." in $:.
+
+Mon Feb 8 15:15:07 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_clone): call initialize_clone hook method to
+ call initialize_copy.
+
+ * object.c (rb_obj_dup): call initialize_dup hook.
+
+ * lib/delegate.rb (Delegator#initialize_clone): use new hook to
+ implement deep copy. [ruby-dev:40242]
+
+ * lib/delegate.rb (Delegator#initialize_dup): ditto.
+
+ * test/test_delegate.rb (TestDelegateClass#test_copy_frozen): add
+ a test to ensure #clone copies frozen status.
+
+Mon Feb 8 10:28:58 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * configure.in: check pthread_attr_getstack to prevent obsolete
+ warning for pthread_attr_getstackaddr.
+
+Sun Feb 7 23:12:34 2010 Tanaka Akira <akr@fsij.org>
+
+ * sample/test.rb: sort files for syntax validation.
+
+Sun Feb 7 23:08:53 2010 Tanaka Akira <akr@fsij.org>
+
+ * bootstraptest/runner.rb: sort test files.
+
+Sun Feb 7 12:53:12 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/rake.rb (Rake::FileList::ARRAY_METHODS): fix test failure by <=>
+ definition at Kernel.
+
+Sun Feb 7 03:01:46 2010 Tanaka Akira <akr@fsij.org>
+
+ * math.c (math_lgamma): initialize sign because
+ lgamma(NaN) doesn't set the sign in OpenSolaris.
+
+Sun Feb 7 00:23:21 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * class.c (rb_class_init_copy): raise a TypeError if the argument is
+ BasicObject. [ruby-core:27060]
+
+Sat Feb 6 23:37:11 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (initialize): set @sock to a NullSocket instance to
+ raise FTPConnectionError when not connected. [ruby-dev:40258]
+
+Sat Feb 6 23:25:57 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * ext/curses/view2.rb: replaced with Hugh Sasse's version.
+ [ruby-core:27894]
+
+Sat Feb 6 22:57:00 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (receive_responses): does not hang when an
+ unexpected BYE response received. fixed [ruby-core:27944].
+ Thanks, Bob Potter.
+
+Sat Feb 6 21:31:23 2010 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/monitor.rb (wait): supported timeout.
+
+ * test/net/imap/test_imap.rb (test_exception_during_idle): use timeout.
+
+Sat Feb 6 19:35:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * tool/compile_prelude.rb: fix require path.
+
+Sat Feb 6 12:02:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator#method_missing),
+ (Delegator.delegating_block): don't hide backtrace from
+ __getobj__ and reduced exception messages when $DEBUG.
+
+Sat Feb 6 11:35:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/ipsocket.c (ip_addr, ip_peeraddr),
+ ext/socket/socket.c (sock_s_getaddrinfo): added optional
+ reverse_lookup flag. [ruby-core:28007]
+
+Sat Feb 6 01:55:02 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/stringio/stringio.c (strio_ungetc): pads with \000 when the
+ current position is after the end. [ruby-dev:40271]
+
+Sat Feb 6 01:14:54 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/purelib.rb, common.mk: to simulate ruby command more precisely,
+ remove "." from $: of virtual environment for build and test.
+
+Sat Feb 6 00:02:31 2010 Tanaka Akira <akr@fsij.org>
+
+ * random.c (fill_random_seed): don't use O_NOFOLLOW because
+ /dev/urandom is a symlink in OpenSolaris.
+
+ * lib/securerandom.rb (SecureRandom.random_bytes): ditto.
+
+Fri Feb 5 16:38:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator): include copy of Kernel.
+ [ruby-dev:40314]
+
+ * lib/delegate.rb (Delegator#{dup,clone}): class of copy should be
+ Delegator. [ruby-dev:40313]
+
+Fri Feb 5 09:26:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * bignum.c (big_op): remove unused variables.
+
+Fri Feb 5 02:06:57 2010 Aaron Patterson <tenderlove@ruby-lang.org>
+
+ * lib/yaml/rubytypes.rb: Struct members are emitted without a leading
+ colon. Thanks Yusuke Endoh! [ruby-core:28052]
+
+ * test/yaml/test_struct.rb: fixed tests to go with Struct changes
+
+ * test/yaml/test_yaml.rb: fixed tests to go with Struct changes
+
+Fri Feb 5 00:34:24 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (big_gt, big_ge, big_lt, big_ge): added Bignum#>, >=, < and
+ <= to allow to compare with BigDecimal. [ruby-dev:40167]
+
+Thu Feb 4 15:47:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * thread_pthread.c (native_thread_init_stack): use get_stack.
+ patched by KOSAKI Motohiro [ruby-dev:40309]
+
+ * thread_pthread.c (ruby_init_stack): use get_stack
+ on platforms which have pthread_attr_get_np.
+ (FreeBSD, DragonFlyBSD and NetBSD)
+ This is because FreeBSD and DragonFly BSD must use
+ pthread_attr_get_np to get stack size of main thread,
+ but Mac OS X and Linux with LinuxThreads must use getrlimit.
+ <http://www.nminoru.jp/~nminoru/programming/stackoverflow_handling.html>
+ <http://d.hatena.ne.jp/nurse/20100204>
+
+Thu Feb 4 09:55:38 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: FreeBSD, DragonFly BSD and OpenBSD needs
+ pthread_np.h to use pthread_*_np functions.
+ OpenBSD's pthread_*_np also depend sys/signal.h,
+ but it is included at signal.h via vm_core.h via thread.c.
+
+Thu Feb 4 08:15:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator): now inherits BasicObject.
+ [ruby-dev:39154], [Bug #2679], [ruby-dev:40242]
+
+Thu Feb 4 03:00:59 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): get red of
+ floating point exception.
+
+Thu Feb 4 01:24:01 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): fix infinity
+ handling. 1 / Infinity was evaluated to NaN.
+
+Thu Feb 4 00:37:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (time_mdump, time_mload): dump/load utc_offset.
+ [ruby-dev:40063]
+
+Wed Feb 3 22:22:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: check for non-portable stack attribute functions.
+
+Wed Feb 3 20:10:52 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/iconv/charset_alias.rb: pass block argument to outer local
+ variable.
+
+Wed Feb 3 20:08:05 2010 Tanaka Akira <akr@fsij.org>
+
+ * file.c (realpath_rec): rb_path_last_separator may return NULL.
+
+Wed Feb 3 13:15:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * thread_pthread.c: DragonFlyBSD is also the same as FreeBSD
+ on getting the stack size of the main thread.
+
+Wed Feb 3 12:30:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * thread_pthread.c (ruby_init_stack): use pthread_get_attr_np
+ to get the stack size of the main thread on FreeBSD.
+
+ * thread_pthread.c: include pthread_np.h on FreeBSD.
+
+Wed Feb 3 11:38:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/{closure,function}.c: removed C99 features and warnings.
+
+Wed Feb 3 10:12:09 2010 Aaron Patterson <tenderlove@ruby-lang.org>
+
+ * ext/dl/function.c: DL::Function now uses libffi
+
+ * ext/dl/cfunc.c (rb_dl_set_last_error): set to non static so errors
+ can be exposed.
+
+ * ext/dl/closure.c: DL::Closure will now be used in place of
+ ext/dl/callback/*.
+
+ * ext/dl/dl.c: legacy callbacks removed in favor of libffi
+
+ * ext/dl/dl_conversions.(c,h): used for converting ruby types to FFI
+ types.
+
+ * ext/dl/callback/*: replaced by libffi callbacks.
+
+ * ext/dl/lib/dl/callback.rb: Converting internal callbacks to use
+ DL::Closure
+
+ * ext/dl/lib/dl/closure.rb: Ruby parts of the new DL::Closure object
+
+ * ext/dl/lib/dl/import.rb: More conversion to use DL::Closure object
+
+ * ext/dl/lib/dl/value.rb (ruby2ffi): adding private method for
+ DL::CPtr to ffi value conversion.
+
+Tue Feb 2 18:15:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/socket.c: turn on do_not_reverse_lookup by default,
+ which has been reverted in r9880 probably unintentionally,
+ according to matz. [ruby-core:24530]
+
+Tue Feb 2 14:46:06 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enumerator.c: move implementation of each_slice, each_cons,
+ each_with_object to enum.c.
+
+ * enum.c (each_slice_i): convert multiple values from yield into
+ an array.
+
+ * enum.c (each_cons_i): ditto.
+
+ * enum.c (each_with_object_i): ditto.
+
+Tue Feb 2 14:30:27 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_each_entry): new method #each_entry to pack values
+ from yield into an array.
+
+ * lib/set.rb (Set#merge): use Enumerable#each_entry to implement
+ Set compatible to 1.8 behavior. [ruby-core:27985]
+
+ * lib/set.rb: replace is_a?(Enumerable) with respond_to?(:each)
+ for duck typing.
+
+ * lib/set.rb (SortedSet#add): typo fixed.
+
+Tue Feb 2 11:13:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator#marshal_dump): exclude
+ delegator-specific instance variables.
+
+Mon Feb 1 21:26:41 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/matrix.rb (Vector#each2): returns a self. [ruby-dev:40241]
+
+Mon Feb 1 17:08:42 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flo_minus): RDoc update. a patch from red stun
+ in [ruby-core:27951]
+
+Mon Feb 1 07:36:33 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/tkutil/tkutil.c: fix SEGV on TkUtil::CallbackSubst._setup_subst_table.
+
+ * ext/tk/lib/tk.rb: [ruby1.9] fix freeze at exit.
+
+ * ext/tk/lib/tk.rb: [POTENTIAL INCOMPATIBLE] return NoMethodError
+ for TkWindow#to_ary and to_str.
+
+ * ext/tk/lib/tkextlib/tcllib/plotchart.rb: wrong arguments.
+
+ * ext/tk/sample/tkballoonhelp.rb: fail to support TkEntry widgets.
+
+Sun Jan 31 23:20:43 2010 wanabe <s.wanabe@gmail.com>
+
+ * io.c (rb_io_each_codepoint): use cbuf when needs readconv.
+
+Sun Jan 31 23:07:23 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_dir.rb: use string instead of symbol as file name.
+
+Sun Jan 31 22:41:33 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (rb_string_value): fix the previous commit.
+
+Sun Jan 31 21:43:35 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (rb_string_value): make no exception for Symbol.
+ [ruby-dev:40274]
+
+Sun Jan 31 21:10:15 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_insnhelper.c (vm_throw): fixed infinite loop. [ruby-core:27969]
+
+Sun Jan 31 21:29:58 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/rexml/text.rb (REXML::Text#initialize): do Text.check only when
+ parent is specified, since Text.check may need doctype. partially
+ revert r26518.
+
+Sun Jan 31 15:50:34 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/rexml/text.rb (REXML::Text#initialize): fix typo and a bug that
+ seems to be caused by refactoring.
+
+Sun Jan 31 15:46:37 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/rexml/parent.rb (REXML::Parent#delete): return the deleted node
+ because the rdoc of REXML::Element#delete_element says it returns
+ "the element that was removed." [REXMLTracker#161]
+
+Sun Jan 31 14:33:00 2010 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: A bug fix for deleting blank Table rows from Andy Hartford.
+
+Sun Jan 31 13:31:43 2010 wanabe <s.wanabe@gmail.com>
+
+ * gc.c (obj_free): free rb_classext_t of eigenclass. [Bug #1392]
+
+Sun Jan 31 13:00:14 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/rexml/document.rb (REXML::Document#add): fix duplicate XMLDecls
+ and bad DocTypes in REXML::Document. (Bug #19058) [ruby-core:27979]
+ based on the patch by Federico Builes.
+
+Fri Jan 29 22:49:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/getoptlong.rb (set_options): ensure that the type of argument is
+ Array, restoring this check that was deleted at r10239. This caused
+ rubyspec error.
+
+Fri Jan 29 12:59:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (mingw): needs $(DEFFILE) for extension libraries.
+ [ruby-core:27946]
+
+Fri Jan 29 11:09:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (try_do): log no source when no development env.
+
+ * lib/mkmf.rb (create_makefile): srcprefix always needs $(srcdir).
+
+ * lib/mkmf.rb (create_makefile): yield configuration if a block is
+ given.
+
+Fri Jan 29 09:43:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/utf8_mac.trans (buf_shift_char): don't see uninitialized
+ value. [ruby-dev:40233]
+
+Fri Jan 29 01:42:24 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator#initialize_copy): use initialize_copy
+ instead of overriding clone/dup. [ruby-dev:40221]
+ it now always clones the target, it might cause incompatibility.
+
+Fri Jan 29 01:26:53 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_to_i): update RDoc to
+ denote that #to_i raises FloatDomainError for Inf and NaN.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_to_i): fast #to_i using
+ BigDecimal_split().
+
+ * bignum.c (conv_digit): use faster ISDIGIT() assuming ASCII.
+
+Fri Jan 29 00:18:54 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/cgi.rb: set autoload to CGI::HtmlExtension. [ruby-dev:40194]
+
+Thu Jan 28 09:44:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regcomp.c (onig_compile): initialize ScanEnv.
+ mainly to initialize env->warnings_flag [ruby-dev:40196]
+
+ * regparse.c (scan_env_clear): clear warnings_flag.
+
+Wed Jan 27 23:33:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/matrix/test_matrix.rb, test/matrix/test_vector.rb: add some
+ tests.
+
+Wed Jan 27 23:29:36 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/thread.rb (ConditionVariable#wait, signal, broadcast): return
+ self (for 1.8 compatibility).
+
+Wed Jan 27 23:27:54 2010 Keiju Ishitsuka <keiju@emperor2.pendome>
+
+ * lib/matrix.rb: add exception Matrix::ErrOperationNotImplemented
+ [ruby-dev:40149].
+ * lib/matrix.rb: change message of exception
+ Matrix::ErrOperationNotDefined [ruby-dev:40150], [ruby-dev:40176].
+ * lib/matrix.rb: add method Vector#/ [ruby-dev:40151].
+ * lib/matrix.rb(Matrix::Scalar#+,-,/): delete meaningless when
+ switch. [ruby-dev:40149]
+
+Wed Jan 27 23:22:54 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * vm_dump.c (bugreport_backtrace): trivial change.
+
+ * vm_dump.c (rb_vm_bugreport): uninitialized local variable i.
+ [ruby-dev:40169]
+
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_segv_test):
+ follow above change.
+
+Wed Jan 27 23:20:52 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_exception.rb
+ (TestException#test_thread_signal_location):
+ change test method name.
+
+Wed Jan 27 22:48:40 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/matrix.rb (determinant): fix name error.
+
+Wed Jan 27 22:26:25 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_eval.c (rb_backtrace): "circular require" warning was output to
+ stdout except the first line. All line is output to stderr now.
+ [ruby-dev:40147]
+
+Wed Jan 27 00:22:20 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod, BigDecimal_mod,
+ BigDecimal_divmod, BigDecimal_div2): BigDecimal#% and #div returned
+ an array itself that was returned by #divmod.
+
+Wed Jan 27 00:19:30 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (VpCtoV): do not raise infinity
+ exception for BigDecimal("0E200000000000").
+
+Tue Jan 26 21:50:31 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (VpCtoV): BigDecimal("0E200000000000")
+ was Infinity, not 0.
+
+ * test/bigdecimal/test_bigdecimal.rb: add a test for above.
+
+Tue Jan 26 21:36:22 2010 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: test unsetenv returns a value.
+ unsetenv is void in older BSDs (FreeBSD 6 and OpenBSD 4.5 at least).
+
+ * hash.c (ruby_setenv): don't use the result of unsetenv if unsetenv
+ doesn't return a value.
+
+Tue Jan 26 21:32:03 2010 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: suppress a warning.
+
+ * ext/extmk.rb: ditto.
+
+Tue Jan 26 20:23:22 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm.c (rb_vm_invoke_proc): this function must not catch TAG_RETURN
+ because vm_exec does. This caused rubyspec error. [ruby-dev:40158]
+
+Tue Jan 26 20:21:28 2010 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/eq.rb: fix circular require in drb.
+ reported by akr. see [ruby-dev:40156] [ruby-core:27661]
+
+Tue Jan 26 19:59:17 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/zlib/zlib.c (rb_gzfile_s_wrap): add rdoc. [Bug #2656]
+ patched by Hugh Sasse [ruby-core:27692] [ruby-core:27852]
+
+ * ext/zlib/doc/zlib.rd: removed.
+
+Tue Jan 26 16:43:34 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/strscan/strscan.c: fix rdoc. (length -> bytesize)
+ reported by Kornelius Kalnbach. see [ruby-core:27792]
+
+Tue Jan 26 07:06:05 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/matrix.rb: suppress warnings.
+
+Tue Jan 26 03:16:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * cont.c, vm_core.h, eval.c: because rb_protect must not be jumped by
+ callcc, revert r26407. And rename trap_tag to protect_tag and
+ change exception message (across trap -> across stack rewinding
+ barrier).
+
+Mon Jan 25 23:08:10 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread.c (do_select): wrong conditions. [ruby-core:27753]
+
+Mon Jan 25 22:31:53 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/envutil.rb: use method_defined? instead of
+ instance_methods.include?.
+
+Mon Jan 25 22:08:20 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * cont.c (rb_cont_call, cont_restore_1): remove trap_tag check because
+ it seems not to make sense. [ruby-dev:40121]
+
+ * vm_core.h, eval.c (rb_protect): ditto.
+
+Mon Jan 25 21:43:05 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/envutil.rb: fix the check if instance method `ruby' is
+ defined or not.
+
+Mon Jan 25 21:17:32 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_rubyoptions.rb (test_segv_test): add a test for
+ bugreport trace dumper.
+
+Mon Jan 25 17:47:02 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/pty/pty.c (pty_check): needs WNOHANG to poll, return $?, and
+ call raise_from_check() with pid_t. [ruby-dev:40141]
+
+Mon Jan 25 17:36:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * version.c (RUBY_LIB, RUBY_*_LIB): moved from configures.
+
+Mon Jan 25 12:11:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * signal.c (USE_SIGALTSTACK): only when SA_SIGINFO also is
+ available. see [ruby-core:27768].
+
+Mon Jan 25 12:02:34 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dln.c, file.c, io.c, signal.c: add __HAIKU__.
+ patched by Alexander von Gluck [ruby-core:27767]
+
+Mon Jan 25 11:45:47 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * math.c (domain_check): ignore errno if y is inf.
+ r26335 is because NetBSD 5.0's asin and acos returns
+ 0.0 with errno EDOM. But it breaks Linux whose gamma returns inf
+ with errno ERANGE on.
+
+Sun Jan 24 22:48:05 2010 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c, vm.c, vm_eval.c, vm_insnhelper.c: fix issues about
+ return and c-return trace. This issue skips (c-)return event
+ with global jump such as break or return. This fix make vm invoke
+ hooks at stack rewind timing. fix [ruby-core:27606] [Bug #2610].
+
+ * test/ruby/test_settracefunc.rb: add a test for above.
+
+Sun Jan 24 14:21:48 2010 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_enc_strlen_cr): increment by rb_enc_mbminlen(enc) for
+ broken byte sequence. [ruby-core:27748]
+ (rb_str_inspect): ditto.
+
+Sun Jan 24 05:18:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_start_func_2): unlock all locking mutexes
+ before clean up. [ruby-core:26877]
+
+ * thread.c (rb_thread_atfork): no other threads to be joined.
+
+ * vm_core.h (rb_thread_lock_unlock, rb_thread_lock_destroy):
+ new functions.
+
+ * vm.c (ruby_vm_destruct): unlock and destroy global VM lock.
+
+Sun Jan 24 00:31:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rdoc/parser/ruby.rb: fix typo.
+ patched by Hal Brodigan [ruby-core:21536]
+
+Sun Jan 24 00:02:18 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rdoc/markup/to_html_crossref.rb: fix failure of the test.
+ patched by Tomoyuki Chikanaga and nobu [ruby-core:20564]
+
+Sat Jan 23 23:27:12 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dir.c (dir_s_glob): add rdoc by Roger Pack. [ruby-core:27669]
+
+Sat Jan 23 23:12:56 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rdoc/generator/html.rb (RDoc::Generator::HTML#gen_into):
+ make the rdoc(generating html) run faster and use less memory.
+ patch by Tetsu Soh [ruby-core:27656]
+
+Sat Jan 23 19:54:48 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c: add WIN32OLE.ole_initialize,
+ WIN32OLE.ole_uninitialize to use in win32ole.rb.
+ You must not use these methods.
+
+ * ext/win32ole/lib/win32ole.rb: add win32ole.rb
+ re-define Thread#initialize (fix ruby-core:27634)
+
+Sat Jan 23 00:25:19 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * sample/coverage.rb: preserve exit status.
+
+Sat Jan 23 00:21:18 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_dir.rb: get rid of debug print.
+
+ * test/ruby/test_module.rb: fixed to make test-all work.
+
+Fri Jan 22 23:54:04 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_array.rb: add a test for Array#rotate, rotate!.
+
+ * test/ruby/test_dir.rb, test/ruby/test_fnmatch.rb: add some tests
+ (for coverage of dir.c).
+
+ * test/ruby/test_enum.rb: add a test for Enumerable#minmax.
+
+ * test/ruby/test_enumerator.rb: add some tests for Enumerator#inspect,
+ Enumerator::Generator and Yielder.
+
+ * test/ruby/test_env.rb: add a test for ENV#index.
+
+ * test/ruby/test_exception.rb: add some tests (for coverage of
+ error.c).
+
+ * test/ruby/test_hash.rb: add a test for recursive check.
+
+ * test/ruby/test_integer.rb: add a test for number of argument of
+ Integer.
+
+ * test/ruby/test_method.rb: add a test for define_method.
+
+ * test/ruby/test_module.rb: add a test for constant of included
+ module.
+
+ * test/ruby/test_proc.rb: add a test for parameters with cfunc.
+
+Fri Jan 22 23:50:03 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_regexp.rb, test/ruby/test_symbol.rb,
+ test/ruby/test_variable.rb: add some tests (for coverage of
+ compile.c).
+
+Fri Jan 22 21:05:34 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_mload): add submicro into vtm.subsecx. [ruby-dev:40133]
+
+Fri Jan 22 14:26:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (rdoc): needs encodings and exts.
+
+Fri Jan 22 14:16:18 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: add missing comma.
+
+Fri Jan 22 01:07:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_bignum.rb, test/ruby/test_class.rb,
+ test/ruby/test_defined.rb, test/ruby/test_hash.rb,
+ test/ruby/test_primitive.rb, test/ruby/test_variable.rb: add some
+ tests (for coverage).
+
+Fri Jan 22 01:03:28 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_require.rb (test_define_class): expect TypeError
+ instead of NameError. [ruby-core:27504]
+
+Thu Jan 21 15:09:35 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * configure.in: some tidy.
+
+Thu Jan 21 11:15:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_rotate): new methods, Array#rotate! and
+ Array#rotate. [ruby-dev:17194]
+
+ * array.c (rb_ary_reverse_m): copy directly.
+
+Thu Jan 21 09:38:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: use AS_CASE instead of when, to get rid of
+ an unintentional substitution.
+
+Thu Jan 21 08:45:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (iseq_s_disasm): check for proc first. based on the
+ patch by Roger Pack in [ruby-core:27626]. [ruby-core:27227]
+
+Wed Jan 20 16:09:59 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * common.mk (compile.$(OBJEXT)): dependencies lacking.
+
+ * vm_method.c (rb_add_method_cfunc): invalid initializer for C89
+
+ * compile.c (iseq_insns_unification): int might be smaller than int*
+
+Tue Jan 19 20:00:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/resolv.rb (Resolv::Config.default_config_hash): return an
+ empty hash when resolv.conf is not available. [ruby-core:27620]
+
+ * lib/resolv.rb (Resolv::DNS::Config#lazy_initialize): fixed the
+ defaults of nameserver and port.
+
+Tue Jan 19 14:29:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (clean-ext): allow glob patterns.
+
+ * ext/extmk.rb: ditto.
+
+Tue Jan 19 14:19:26 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/zlib/{extconf.rb, zlib.c): crc32_combine and adler32_combine is
+ supported on Zlib 1.2.2.1, so check them for old zlib.
+
+Tue Jan 19 09:03:37 2010 Aaron Patterson <tenderlove@ruby-lang.org>
+
+ * ext/zlib/zlib.c: added Zlib.crc32_combine and Zlib.adler32_combine
+
+ * test/zlib/test_zlib.rb: corresponding tests [ruby-core:27551]
+
+Tue Jan 19 02:02:32 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_array.rb: add some tests (for coverage).
+
+ * test/ruby/test_bignum.rb: ditto.
+
+Tue Jan 19 01:57:12 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_bignum.rb: some coerce definitions (for test) was
+ wrong.
+
+Tue Jan 19 01:53:11 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (bigsub_int): remove nonsense loop.
+
+Tue Jan 19 01:42:36 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (top_compstmt, top_stmts, top_stmt): prohibit BEGIN {} in
+ non-toplevel scope. [ruby-core:21657]
+
+ * test/ruby/test_beginendblock.rb (test_begininclass): add a test for
+ above.
+
+Mon Jan 18 17:16:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/webrick/httpservlet/filehandler.rb (make_partial_content):
+ add bytes-unit. [ruby-dev:40030]
+
+Mon Jan 18 15:49:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTPHeader#{content_range,range_length}):
+ use inclusive range same as the header representation.
+
+Mon Jan 18 03:59:57 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/digest.c (rb_digest_instance_hexdigest_bang): Fix
+ rdoc.
+
+ * ext/digest/lib/digest.rb (Digest::Class.base64digest)
+ (Digest::Instance#base64digest{,!}): New methods.
+
+Sun Jan 17 22:48:44 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/digest.c (rb_digest_instance_digest)
+ (rb_digest_instance_hexdigest): Save a method call of reset()
+ for a disposable clone.
+
+Sun Jan 17 19:24:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * math.c (domain_check): check errno first.
+ NetBSD 5.0's asin and acos returns 0.0 with errno EDOM.
+
+Sun Jan 17 14:24:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (rb_str_derive): use long.
+
+ * ext/iconv/iconv.c (iconv_convert): suppress a warning.
+
+ * lib/mkmf.rb (check_signedness): new method.
+
+ * lib/mkmf.rb (have_header, create_header): use String#tr_cpp.
+
+Thu Jan 14 13:06:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_hash, int_chr): fixed type.
+
+Thu Jan 14 12:50:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_concat): fixed range check for Fixnum, and
+ added checks for integer overflow and invalid char code.
+
+Thu Jan 14 09:34:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_concat): raise RangeError when the argument is
+ negative value. [ruby-core:27583]
+
+Thu Jan 14 08:49:59 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_to_r): convert to rational if internal representation
+ is not rational.
+
+Thu Jan 14 04:01:50 2010 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_mdump): use nano_num and nano_den instead of subnano to
+ avoid Rational class in marshaled data which prevent unmarshal by
+ Ruby 1.8.
+ (time_mload): use nano_num and nano_den.
+
+Wed Jan 13 11:57:38 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * object.c (rb_class_initialize): Make sure BasicObject doesn't get
+ initialized twice [ruby-core:27577]
+
+ * class.c (rb_class_init_copy): ditto
+
+Wed Jan 13 06:54:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: check for if struct timezone is defined.
+
+ * missing.h (struct timezone): define if not defined.
+
+ * win32/win32.h (struct timezone): defined in the newer w32api.
+ [ruby-core:27515]
+
+Wed Jan 13 00:33:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/shell/command-processor.rb: fix typo by Sho Hashimoto.
+ reported and patched at [ruby-dev:40058] [Bug #2599]
+
+Tue Jan 12 23:48:29 2010 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker/base.rb, test/rss/test_maker_0.9.rb:
+ accept any time format in maker. [ruby-core:26923]
+
+Tue Jan 12 21:56:00 2010 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_set_len): call rb_str_modify.
+
+ * file.c (realpath_rec): don't call rb_str_modify before
+ rb_str_set_len.
+
+Tue Jan 12 20:44:14 2010 Tanaka Akira <akr@fsij.org>
+
+ * file.c (realpath_internal): call rb_secure.
+
+Tue Jan 12 16:48:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTP.start): options may not be given.
+
+Tue Jan 12 16:48:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_readline): check if instream
+ is closed instead of fd 0.
+
+ * ext/readline/readline.c (Init_readline): use STDIN for input.
+ Reported by Sora Harakami. See
+ http://d.hatena.ne.jp/codnote/20100111/1263174134
+
+Tue Jan 12 16:09:02 2010 wanabe <s.wanabe@gmail.com>
+
+ * test/ruby/test_process.rb (test_execopts_env): MANDATORY_ENVS might
+ not be a part of ENV. e.g. TMPDIR.
+
+Tue Jan 12 14:07:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTP.start): add hash argument to
+ set ssl related options. when use_ssl is set default value
+ of verify_mode is OpenSSL::SSL::VERIFY_PEER. [ruby-dev:40003]
+
+Tue Jan 12 14:53:07 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (init_env): use _wputenv() instead of
+ SetEnvironmentVariableW() because latter doesn't set msvcrt's environ
+ work area, of course.
+ [Bug #2552]
+
+Tue Jan 12 13:33:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (realpath_rec): trace symbolic link only when supporting
+ readlink().
+
+Tue Jan 12 12:49:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-here-doc-beg-match): fix for here-doc
+ which ends with an underscore.
+
+Tue Jan 12 09:58:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * hash.c: need to include errno.h for EINVAL.
+
+ * hash.c (ruby_setenv): fixed typo. see [ruby-dev:40026]
+
+Tue Jan 12 09:22:43 2010 Tanaka Akira <akr@fsij.org>
+
+ * prelude.rb (require_relative): use File.realpath. [ruby-dev:40040]
+
+ * include/ruby/intern.h: declare rb_dir_getwd.
+
+ * dir.c (rb_dir_getwd): copied from dir_s_getwd to export.
+ (dir_s_getwd): use rb_dir_getwd.
+
+ * file.c (rb_file_s_realpath): new method File.realpath.
+ (rb_file_s_realdirpath): new method File.realdirpath.
+
+ * lib/pathname.rb (Pathname#realpath): use File.realpath.
+ (Pathname#realdirpath): use File.realdirpath.
+
+Mon Jan 11 22:45:08 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * hash.c (ruby_setenv): Improve the emulation of setenv(3) on
+ environments where putenv(3) is used. Raise EINVAL If a
+ variable name contains an '='.
+
+Mon Jan 11 18:16:38 2010 wanabe <s.wanabe@gmail.com>
+
+ * vm_insnhelper.h (GET_BLOCK_PTR): return 0 when in class frame.
+ [Bug #2583]
+
+Mon Jan 11 16:52:05 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_strlen): added. [ruby-dev:40028]
+
+ * include/ruby/intern.h (rb_str_strlen): declared.
+
+Mon Jan 11 13:30:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/webrick/accesslog.rb (WEBrick::AccessLog#format): fixed typo.
+
+ * lib/webrick/httpstatus.rb (WEBrick::HTTPStatus::Status#initialize):
+ accept 0 or more arguments. [ruby-dev:40021]
+
+Mon Jan 11 12:47:58 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * hash.c (ruby_setenv): ENV.[]= should raise an error if setenv(3)
+ or putenv(3) fails. [ruby-dev:40023]
+
+Sun Jan 10 17:25:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/webrick/accesslog.rb : Escape needed.
+
+ * lib/webrick/httpstatus.rb : ditto.
+
+ * lib/webrick/httprequest.rb : ditto.
+
+ * lib/webrick/httputils.rb : ditto.
+
+ * test/webrick/test_cgi.rb (TestWEBrickCGI::test_bad_): Test for it.
+
+Sun Jan 10 04:54:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (rb_define_class): raise TypeError same as class
+ statement. [ruby-core:27504]
+
+Sun Jan 10 04:41:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (configuration): needs ARCH_FLAG.
+
+Sat Jan 9 14:20:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (install-all): maybe typo.
+
+Sat Jan 9 14:01:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * missing/vsnprintf.c (BSD_vfprintf): get rid of a warning of VC++ x64.
+
+Sat Jan 9 08:40:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/configure.bat (WIN32DIR): regularise file separators.
+
+Fri Jan 8 23:35:18 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * proc.c (mnew): don't check visibility of method body if public
+ ZSUPER method is found. [ruby-dev:39767]
+
+ * test/ruby/test_method.rb: add a test for above.
+
+Fri Jan 8 22:59:40 2010 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_method.c (rb_alias): skip ZSUPER method when searching body of
+ source method. [ruby-dev:39760]
+
+ * test/ruby/test_alias.rb: add a test for above.
+
+Fri Jan 8 21:15:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http, lib/net/https: move content from net/https to
+ net/http. [ruby-dev:39986]
+
+Fri Jan 8 14:06:01 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (rb_io_s_read): close the IO if an exception is raised on
+ seeking. [ruby-core:27429]
+
+Fri Jan 8 13:12:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_symbol): dump no encoding for 7bit only coderange
+ symbol. [ruby-core:27375]
+
+Thu Jan 7 07:56:09 2010 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 1.5.0 r5596.
+ * test/minitest/*.rb: ditto.
+
+Tue Jan 5 19:30:53 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_exception.rb: add a test. cf [ruby-dev:39116]
+
+Tue Jan 5 02:03:34 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in (DTRACE): clear this when `dtrace -l` fails.
+ Note that current FreeBSD needs privilege to call it;
+ so to use DTrace on FreeBSD, you should run configure as root.
+
+Mon Jan 4 21:24:18 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * gc.c: added UNLIKELY to probes for optimization.
+
+ * vm.c: ditto.
+
+ * thread.c: ditto.
+
+Mon Jan 4 09:30:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (TRACING_MODEL): follow yugui's previous changes.
+
+Mon Jan 4 09:30:25 2010 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (InterlockedExchangePointer): old SDK support.
+
+Sun Jan 3 23:54:51 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * trace.h: new file. wraps tracing mechanisms.
+
+ * defs/dtrace.d: new file. defined a dtrace provider "ruby".
+
+ * include/ruby/ruby.h (LIKELY): moved from vm.c.
+ (UNLIKELY): ditto.
+ (OBJSETUP): probe "object-create".
+ (RUBY_EVENT_RESCUE): new event.
+
+ * vm_exec.c (DEBUG_ENTER_INSN): embedded a probe insn-entry into it.
+ (DEBUG_END_INSN): insn-return.
+
+ * vm.c (LIKELY): moved into ruby.h.
+ (UNLIKELY): ditto.
+ (Init_BareVM): embedded a probe "raise" into it.
+
+ * variable.c (rb_class2name_without_alloc): new utility function.
+
+ * tool/rbinstall.rb (install?(:ext, :arch, :'ext-arch')): installs
+ dtrace.d if necessary.
+
+ * thread_pthread.c (add_signal_thread_list): probe "raise".
+ (rb_thread_create_timer_thread): ditto.
+
+ * thread.c (rb_thread_schedule_rec): probes "thread-enter" and
+ "thread-leave",
+ (thread_start_func_2): ditto.
+ (thread_cleanup_func): probe "thread-term"
+
+ * lib/mkmf.rb: supports dtrace postprocessor on making an extension.
+
+ * iseq.c (rb_vm_insn_name): new utility function.
+ (rb_vm_insn_len): ditto.
+
+ * insns.def (hook): probes "method-entry", "method-return", "line",
+ and "rescue".
+
+ * compile.c (iseq_compile_each): adds a trace op for "rescue" probe.
+
+ * gc.c (garbage_collect): probes "gc-begin" and "gc-end".
+ (obj_free): probe "object-free"
+ (garbage_collect_with_gvl): probe "raise"
+ (negative_size_allocation_error): ditto.
+ (rb_memerror): ditto.
+
+ * eval.c (rb_rescue2): probe "rescue"
+ (rb_longjmp): probe "raise"
+
+ * ext/probe/probe.c: new extension for application defined probes.
+
+ * ext/probe/extconf.rb: ditto.
+
+ * configure.in (--with-tracing-model): new option to choose a tracing
+ mechanism.
+ (DTRACE): new substitution. name of dtrace(1).
+ (RUBY_TRACING_MODEL): new substitution.
+ (DTRACE_OBJ): ditto.
+ (MINIDTRACE_OBJ): ditto.
+ (GOLFDTRACE_OBJ): ditto.
+ (LIBRUBY_DTRACE_OBJ): ditto.
+ (RUBY_DTRACE_POSTPROCESS): new macro. checks whether the dtrace on
+ the system needs postprocessing.
+ (RUBY_DTRACE_BSD_BROKEN): new macro. checks whether the dtrace
+ supports USDT.
+
+ * Makefile.in:
+ (DTRACE): new variable. name of dtrace(1).
+ (TRACING_MODEL): new variable. name of the chosen tracing mechanism.
+ (DTRACE_OBJ): same as the one in configure.in.
+ (MINIDTRACE_OBJ): ditto.
+ (GOLFDTRACE_OBJ): ditto.
+ (LIBRUBY_DTRACE_OBJ): ditto.
+ (CPPOUTFILE): new substitution. necessary for generating dtrace.d
+ (trace_none.h): new target for TRACING_MODEL=none
+ (RUBY_H_INCLUDES): appended a header for tracing.
+ (distclean-local): also removes preprocessed version of dtrace.d
+ ($(LIBRUBY_A)): needs $(LIBRUBY_DTRACE_OBJ) if dtrace needs
+ postprocessing.
+ ($(PROGRAM)): ditto.
+ (golf): ditto.
+ (miniruby): ditto.
+ ($(arch_hdrdir)/ruby/dtrace.d): new target. preprocessed version
+ of defs/dtrace.d. generated if necessary.
+ ($(arch_hdrdir)/ruby/trace_dtrace.h): new target.
+ definition of probes.
+ ($(LIBRUBY_DTRACE_OBJ)): new target. generated if dtrace needs
+ postprocessing.
+ ($(DTRACE_OBJ)): ditto.
+ ($(MINIDTRACE_OBJ)): ditto.
+ ($(GOLFDTRACE_OBJ)): ditto.
+
+Sun Jan 3 15:34:19 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/rexml/text.rb: String no longer has #each.
+ Patch by Mitsutaka Mimura (takkanm). [ruby-dev:39949].
+
+Sun Jan 3 01:29:18 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb (Resolv::DNS::Message::MessageDecoder#inspect):
+ implemented.
+
+Sat Jan 2 15:57:54 2010 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb (Resolv::DNS#initialize): new option :nameserver_port.
+ (Resolv::DNS#each_resource): pass port number.
+ (Resolv::DNS#make_requester): ditto.
+ (Resolv::DNS::Config#lazy_initialize): initialize @nameserver_port
+ instead of @nameserver.
+ (Resolv::DNS::Config#single?): return port number addition to the
+ nameserver.
+ (Resolv::DNS::Config#generate_timeouts): use @nameserver_port.
+ (Resolv::DNS::Config#resolv): yield port number.
+
+Sat Jan 2 00:43:22 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (initialize_regexp): allow leading
+ and trailing white space, and forbid extra characters
+ on another lines. [ruby-core:26223]
+ RFC 3986 Appendix C. Delimiting a URI in Context
+ draft-duerst-iri-bis-07 7.2. Web Address processing
+
+Fri Jan 1 23:17:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/generic.rb (URI#normalize!): normalize case of
+ scheme. [ruby-core:27309]
+
+Fri Jan 1 00:47:57 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/digest.c (rb_digest_instance_method_unimpl): Suppress
+ compiler warnings.
+
+Fri Jan 1 00:00:00 2010 Tanaka Akira <akr@fsij.org>
+
+ * tool/mkconfig.rb: generate RbConfig.ruby in rbconfig.rb.
+
+ * lib/webrick/httpservlet/cgihandler.rb: use RbConfig.ruby.
+
+ * test/ruby/envutil.rb: ditto.
+
+ * benchmark/report.rb: ditto.
+
+ * benchmark/runc.rb: ditto.
+
+ * tool/eval.rb: ditto.
+
+Thu Dec 31 18:18:55 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/rubysocket.h: include addrinfo.h only when using our own
+ getaddrinfo.c.
+
+Thu Dec 31 14:20:11 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (save_redirect_fd): consider EBADF that the fd is not used.
+ [ruby-dev:39938]
+
+Thu Dec 31 06:03:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/raddrinfo.c (addrinfo_type): typed.
+
+ * ext/socket/extconf.rb: fix for wide-getaddrinfo option.
+
+ * ext/socket/addrinfo.c: rename {addr,name}info functions to ensure
+ those are used on darwin.
+
+Thu Dec 31 03:27:53 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (native_thread_destroy): decreased the probability of
+ using the interrupt event in the thread termination.
+ see [ruby-core:27199].
+
+Thu Dec 31 02:35:57 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (w32_error): should report the function.
+
+Thu Dec 31 01:58:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb: fix for extstatic.
+
+Wed Dec 30 19:43:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/ruby.h (RREGEXP_SRC_END): added.
+
+Wed Dec 30 19:40:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/defines.h (INFINITY): this is float.
+
+ * include/ruby/defines.h (NAN): ditto.
+
+ * numeric.c (rb_infinity): change content as float.
+
+ * numeric.c (rb_nan): ditto.
+
+Wed Dec 30 17:59:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gem_prelude.rb (push_all_highest_version_gems_on_load_path):
+ simplified.
+
+ * lib/rubygems/command_manager.rb (Gem#load_and_instantiate):
+ rescue only NameError from const_get.
+
+ * lib/rubygems/source_index.rb (Gem#load_specification): don't use
+ RUBY_VERSION to branch.
+
+ * lib/rubygems/validator.rb (Gem::TestRunner, Gem#alien): ditto.
+
+ * lib/rubygems.rb: Kernel#gem is already defined, and workaround
+ for home directory and custom_require are no longer needed.
+
+Tue Dec 29 16:03:33 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (Init_Numeric): Add Float::INFINITY and Float::NAN.
+ [ruby-dev:1657] [ruby-dev:4760] [ruby-list:7023]
+ [ruby-list:46690]
+ [ruby-core:26632] [ruby-talk:41352] [ruby-talk:203333]
+
+ * include/ruby/defines.h (INFINITY): defined.
+
+ * include/ruby/defines.h (NAN): defined.
+
+ * include/ruby/util.h (ruby_div0): removed.
+
+ * numeric.c (fix_pow): use INFINITY and NAN
+ instead of ruby_div0(1.0).
+
+ * marshal.c (r_object0): ditto.
+
+ * bignum.c (big_fdiv): ditto.
+
+Tue Dec 29 10:36:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rexml/parsers/baseparser.rb (REXML::Parsers::BaseParser::STANDALONE):
+ any number spaces can be placed between equal-sign and the value.
+ patch from Ed Howland in [ruby-core:27345].
+
+Mon Dec 28 22:33:58 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (CreateChild): force to inherit standard I/O handles.
+ this change fixes [ruby-core:27273], but other side effects might
+ exist.
+
+Mon Dec 28 22:00:10 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/ruby/test_marshal.rb: added tests for taintness/untrustness
+ propagation.
+
+Mon Dec 28 18:13:26 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * sample/occur2.rb: reimplemented in modern style. [ruby-dev:39927].
+
+Mon Dec 28 17:19:37 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * tool/install-sh: correction by Hiro Asari.
+ https://gist.github.com/264558/58ad1cae45cde49600bbb39286af2aae23e639d5
+
+Mon Dec 28 13:18:52 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * tool/install-sh: wrote the intention. [ruby-dev:39928]
+
+Sun Dec 27 10:45:00 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (foleparam_initialize): add foleparam_initialize
+ to check argument of WIN32OLE_PARAM.new
+
+ * test/win32ole/test_win32ole_param.rb (test_s_new): add some assertion
+ to test WIN32OLE_PARAM.new
+
+Sun Dec 27 09:41:54 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * tool/rbinstall.rb (install?(:local, :comm, :bin, :'bin-comm')):
+ Makes it vim friendly. __END__ in a heredoc is confusing with
+ the script end for vim.
+
+Sun Dec 27 09:13:55 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * sample/occur2.rb: have been broken. fixed for Ruby 1.9 feature.
+
+Thu Dec 24 16:32:30 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/uri/generic.rb (eql?): Check the class of the compared object.
+ Based on a patch by Peter McLain [ruby-core:27019]
+
+Thu Dec 24 15:20:03 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regexec.c (match_at): follow enclen's change.
+
+Thu Dec 24 12:08:00 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/delegate.rb (marshal_dump/load): dump & load instance variables
+ by default [ruby-core:24211]
+
+Thu Dec 24 10:31:50 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/object.c (rb_obj_cmp): Default <=> operator returns 0 if
+ objects are == [ruby-core:24063]
+
+Wed Dec 23 09:12:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/cgi/test_cgi_multipart.rb (CGIMultipartTest#_prepare):
+ always must be binary mode. c.f. Bug#2341
+
+Thu Dec 10 09:20:58 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (Init_Encoding): undef Encoding.new because
+ a class which is rb_undef_alloc-func-ed can't call new method.
+ [ruby-dev:39862]
+
+ * vm.c (Init_VM): undef RubyVM.new and RubyVM::Env.new.
+
+Mon Dec 21 17:51:44 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regcomp.c (optimize_node_left): include equal on the condition of for-loop.
+ This bug also affects original Oniguruma. [ruby-core:27247]
+
+Mon Dec 21 10:03:33 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regcomp.c (print_enc_string): follow enclen's change.
+
+ * regcomp.c (onig_print_compiled_byte_code): ditto.
+
+ * regcomp.c (onig_print_compiled_byte_code): change prototype.
+
+ * regint.c (onig_print_compiled_byte_code): comment out.
+
+Mon Dec 21 08:04:34 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * object.c: BasicObject#initialize accepts any number of arguments
+ [ruby-core:27080]
+
+Mon Dec 21 02:45:46 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_eval.c (rb_iterate): remove SEGV (retry).
+
+Sun Dec 20 23:18:23 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_eval.c (rb_iterate): remove SEGV (use the original patch).
+ [ruby-dev:39874]
+
+Sun Dec 20 21:26:05 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_eval.c (rb_iterate): pass current block when the argument bl_proc
+ is NULL. This behavior can be used to make enumerator faster
+ [ruby-dev:39874]
+
+ * enumerator.c (enumerator_each): pass current block directly instead
+ of trampoline block (enumerator_each_i).
+
+ * io.c (argf_each_line, argf_each_byte, argf_each_char): ditto.
+
+Sat Dec 19 14:59:30 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gem_prelude.rb (Kernel#gem): should make gem private. a patch
+ from Sho Hashimoto in [ruby-dev:39838].
+
+Sat Dec 19 14:57:17 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/webrick/config.rb (WEBrick::Config): typo fixed. a patch
+ from Sho Hashimoto in [ruby-dev:39835].
+
+Sat Dec 19 11:06:48 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb (each2,collect2,map2): Fix enumerator
+ [ruby-core:27225]
+
+Sat Dec 19 09:58:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (check_funcall): reset method_missing_reason before
+ trying the call. based on a patch from Yehuda Katz in
+ [ruby-core:27219].
+
+Sat Dec 19 09:29:22 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/set.rb: Add checks that passed argument is Enumerable.
+ [ruby-core:23844]
+
+Wed Dec 16 20:28:46 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/envutil.rb: fix a typo in assert message.
+
+Wed Dec 16 16:57:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/un.rb (httpd): try to convert port number to integer.
+
+Wed Dec 16 11:18:30 2009 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * configure.in(MINIRUBY): use "$BASERUBY" as a default ruby executable
+ name.
+
+Wed Dec 16 00:53:14 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/find.rb (Find.find): rescue more exceptions which is possible to
+ occur by other process change the directory tree.
+
+Tue Dec 15 09:06:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/find.rb (Find.find): get rid of race condition.
+
+Mon Dec 14 22:33:21 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/find.rb (Find.find): rescue only ENOENT and EACCES for lstat.
+
+Mon Dec 14 21:49:30 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/find.rb (Find.find): narrow rescue region.
+
+Mon Dec 14 09:20:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/find.rb (Find.find): removed already unnecessary code.
+
+Sun Dec 13 23:48:25 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/find.rb (Find.find): sort directory entries. [ruby-dev:39847]
+
+Sun Dec 13 20:55:30 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/envutil.rb (invoke_ruby): call to_str for stdin_data to
+ reject non-string.
+
+Sun Dec 13 20:26:57 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ruby.c (rb_parser_dump_tree): add prototype.
+
+Thu Dec 10 20:55:55 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode_data.h, transcode.c, tool/transcode-tblgen.rb: Added
+ support for new transcoding instruction FUNsio (with Tatsuya Mizuno)
+
+ * enc/trans/gb18030.trans: Significantly reduced GB18030 conversion
+ table footprint using FUNsio and differences (with Tatsuya Mizuno)
+
+ * test/ruby/test_transcode.rb: Minor name fix (from Tatsuya Mizuno)
+
+Thu Dec 10 17:22:36 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_eval.c (yield_under): yields self the same as 1.8.
+
+Thu Dec 10 15:49:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (native_mutex_reinitialize_atfork): release and
+ re-acquire the lock at re-initialization.
+
+Thu Dec 10 12:56:02 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_replicate): add Encoding#replicate(name).
+
+ * encoding.c (enc_replicate_with_index): renamed from old
+ enc_replicate.
+
+ * encoding.c (rb_enc_from_encoding_index): split from
+ rb_enc_from_encoding.
+
+Thu Dec 10 09:15:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): CHAR_ESC_LEN should be 13.
+
+Thu Dec 10 01:12:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (dyna_pop_gen): pop dvars. [ruby-dev:39861]
+
+Thu Dec 10 00:46:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * node.c (dump_node): fixed for long members.
+
+Wed Dec 9 22:57:04 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * node.c: node management added. Currently, only pretty-dumper is
+ implemented. [ruby-dev:39853]
+
+ * ruby.c: --dump=parsetree and --dump=parsetree_with_comment options
+ added. This is just for debug or research purpose. Note that the
+ compatibility of these options are not supported at all.
+
+Wed Dec 9 09:50:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_justify): fixed the case a fill size is a
+ multiple of the length of the padding. [ruby-dev:39856]
+
+Tue Dec 8 23:41:34 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/configure.bat: now recognize --with-*-{dir,include,lib} options
+ and pass them to mkmf.
+
+ * win32/configure.bat: general conversion from ``/'' to ``\'' of
+ configure_args is not necessary any longer.
+
+ * win32/setup.mak: BASERUBY is used as command, so always need to
+ convert ``/'' to ``\'' within it.
+
+Tue Dec 8 23:39:52 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (flo_eq): suppress a warning on VC++ for x64.
+
+Tue Dec 8 16:19:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems: update to 1.3.5.
+
+ * lib/rubygems/defaults.rb (Gem::default_dir): removed a clause
+ doing nothing.
+
+Tue Dec 8 03:50:24 2009 Tanaka Akira <akr@fsij.org>
+
+ * file.c (rb_f_test): use string form in unknown command error
+ message.
+
+Mon Dec 7 14:11:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_object): reverted r26007. [ruby-dev:39845]
+
+ * test/test_delegate.rb (test_marshal): moved from test_marshal.rb.
+
+Mon Dec 7 13:05:59 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * string.c (rb_str_justify): CVE-2009-4124.
+ Fixes a bug reported by
+ Emmanouel Kellinis <Emmanouel.Kellinis AT kpmg.co.uk>, KPMG London;
+ Patch by nobu.
+
+Sun Dec 6 23:50:46 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * strftime.c: %l should be 1..12 instead of 0..12 [ruby-core:27072]
+
+Sun Dec 6 23:16:35 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/find.rb (Find.find): reduce stat system call.
+
+Sun Dec 6 16:02:15 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/webrick/httpservlet/filehandler.rb: escape filename of index.
+ [ruby-dev:37768]
+
+Sun Dec 6 00:35:16 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/setup (config.h): EXECUTABLE_EXTS moved from
+ dln.c:dln_find_1().
+
+Sat Dec 5 15:35:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_object): dump instance variables when using
+ marshal_dump. [ruby-core:24211]
+
+ * variable.c (rb_ivar_count): added.
+
+Sat Dec 5 13:19:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: default ac_cv_prog_CC to CC.
+
+Sat Dec 5 10:18:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/irb/extend-command.rb (def_extend_command): fixed argument
+ number for negative arity.
+
+Fri Dec 4 16:50:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (k_def): adjust the location of method definition to the
+ line of def. [Bug #2427]
+
+Fri Dec 4 19:05:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * insns.def (defined): should respect #respond_to_missing? as
+ #respond_to? does.
+
+Fri Dec 4 15:50:18 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_eval.c (yield_under): does not yield self, and passes blockptr
+ instead of &block to vm_cref_push(). [ruby-dev:39833]
+
+Fri Dec 4 15:15:43 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (num_exact): should not accept strings as operands, even
+ though they respond to #to_r. ideally, strict rational
+ conversion should be done by a method like #to_rational, not #to_r.
+ [ruby-core:23729]
+
+Fri Dec 4 13:10:23 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * ext/stringio/stringio.c (ungetc): RDoc updated. trunk allows
+ pushing back behind the beginning of the pseudo stream.
+
+Fri Dec 4 03:10:38 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * compile.c (compile_cpath, iseq_compile_each): reverted
+ constant/class variable lookup in instance_eval etc. to the
+ behavior of 1.8.
+
+ * eval.c (rb_mod_nesting): ditto.
+
+ * insns.def (putspecialobject, defineclass): ditto.
+
+ * node.h (NODE_FL_CREF_PUSHED_BY_EVAL): ditto.
+
+ * vm_core.h (VM_SPECIAL_OBJECT_CONST_BASE): ditto.
+
+ * vm_eval.c (yield_under, eval_under): ditto.
+
+ * vm_insnhelper.c (vm_cref_push, vm_get_const_base,
+ vm_get_ev_const, vm_get_cvar_base): ditto.
+
+Thu Dec 3 20:27:27 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/gb18030-tbl.rb: Fix omission of C1 region in code table
+ (from Tatsuya Mizuno)
+
+ * test/ruby/test_transcode.rb: Added test for converting full range of
+ Unicode codepoints from/to GB18030 (from Tatsuya Mizuno)
+
+Wed Dec 2 23:51:28 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * ext/openssl/ossl_ssl.c: initialize @hostname of SSLSocket to avoid
+ warning at SSLSocket#connect.
+
+Tue Dec 1 18:01:43 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/digest/test_digest_extend.rb: added tests for digest framework.
+
+Tue Dec 1 12:01:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (dyna_push_gen, dyna_pop_gen): no needs to save both of
+ args and vars. [ruby-core:26961]
+
+ * parse.y (dyna_push_gen): use rb_node_newnode() for ripper.
+ [ruby-core:26961]
+
+ * parse.y (dyna_push_gen, dyna_pop_gen): adjust local vtable level
+ for the case of syntax errors in method name or argument inside
+ do block. [ruby-core:26961]
+
+Mon Nov 30 16:57:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (command_output): $makeflags are already quoted.
+
+Mon Nov 30 16:54:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, win32/Makefile.sub (EXECUTABLE_EXTS): moved from
+ dln.c:dln_find_1().
+
+ * lib/mkmf.rb (def find_executable0): use EXECUTABLE_EXTS, not
+ only EXEEXT. [ruby-core:26821]
+
+Mon Nov 30 11:00:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): suppress an extra error message after
+ numeric literal without digits. based on a patch from ujihisa .
+ in [ruby-dev:39811]. [ruby-dev:39798]
+
+Sun Nov 29 16:56:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (check_funcall_failed): pass ID. [ruby-core:26934]
+
+Sun Nov 29 06:37:53 2009 Aaron Patterson <tenderlove@ruby-lang.org>
+
+ * lib/rexml/formatters/default.rb (write_attribute): fix an
+ exception when printing a document when duplicate namespaced
+ attributes exist. Thanks, Alexey Froloff [ruby-core:26837]
+
+Sat Nov 28 09:05:53 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_eval.c (check_funcall_failed): should rescue user raised
+ NoMethodError. rescue all NoMethodError if receiver does not
+ respond to the method name. [ruby-dev:39796]
+
+Thu Nov 26 21:14:30 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/test_complex.rb (@unify): fix the detection if math
+ loaded. This makes test_complex.rb work fine with the previous
+ commit.
+
+ * test/ruby/test_rational.rb (@unify): ditto.
+
+Thu Nov 26 21:13:36 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/test_mathn.rb (TestMathn): new test case.
+ test for r25067.
+
+Thu Nov 26 21:11:23 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/openssl/test_config.rb (OpenSSL::TestConfig): new test case.
+ test for r25017.
+
+Thu Nov 26 21:08:54 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/test_range.rb (TestRange#test_comparison_when_recursive):
+ test for r25010.
+
+ * test/ruby/test_struct.rb (TestStruct#test_comparison_when_recursive):
+ ditto.
+
+Thu Nov 26 20:18:02 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * gem_prelude.rb (Gem.set_home): must dup before force_encoding
+ and must force_encoding before gsub.
+ cf. Yen Sign problem of SJIS [ruby-core:26910]
+
+Thu Nov 26 17:54:37 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/{configure.bat, setup.mak, Makefile.sub}: add new configure
+ option ``--with-ntver''.
+
+Thu Nov 26 11:42:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/mkmf/base.rb: use $INCFLAGS to add -I option. [Bug#2387]
+
+Thu Nov 26 07:17:58 2009 wanabe <s.wanabe@gmail.com>
+
+ * marshal.c (mark_dump_arg): mark str. see also [ruby-dev:39735]
+
+Thu Nov 26 00:05:58 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * test/digest/test_digest_extend.rb: Added tests for current digest
+ framework.
+
+Wed Nov 25 20:46:37 2009 Tanaka Akira <akr@fsij.org>
+
+ * vm_eval.c (rb_search_method_entry): refine error message.
+
+Wed Nov 25 19:29:05 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/digest.c (rb_digest_instance_method_unimpl): Do not
+ call rb_inspect() on an object that does not implement necessary
+ methods; reported by NaHi.
+
+Wed Nov 25 19:30:30 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c: Added a check for an internal error
+ (with Tatsuya Mizuno)
+
+Tue Nov 24 22:57:46 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/envutil.rb (EnvUtil.invoke_ruby): raise Timeout::Error
+ instead of flunk. reported by Yusuke Endoh.
+
+Tue Nov 24 22:31:44 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm.c (ruby_vm_destruct, thread_memsize): fix argument type to make
+ RUBY_MARK_FREE_DEBUG available.
+
+Tue Nov 24 21:25:21 2009 Tanaka Akira <akr@fsij.org>
+
+ * error.c: include errno.h at beginning.
+
+Tue Nov 24 20:11:37 2009 Tanaka Akira <akr@fsij.org>
+
+ * strftime.c: %Y format a year with 4 digits at least.
+
+ * lib/time.rb: format a year with 4 digits at least.
+
+Tue Nov 24 20:05:27 2009 Tanaka Akira <akr@fsij.org>
+
+ * defs/known_errors.def: more errors.
+
+Tue Nov 24 20:01:49 2009 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (rb_bug_errno): declared.
+
+ * include/ruby/intern.h (rb_strerrno): declaration removed.
+
+ * error.c (rb_strerrno): make it static. return NULL for unknown
+ errors.
+ (rb_bug_errno): defined.
+
+ * thread_pthread.c: use rb_bug_errno.
+
+ * signal.c (ruby_signal): use rb_bug_errno.
+
+Tue Nov 24 10:17:38 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (file_path_convert): fix fs_encoding is not assign.
+
+Tue Nov 24 10:00:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_strerrno): constified.
+
+Tue Nov 24 09:49:31 2009 Tanaka Akira <akr@fsij.org>
+
+ * error.c (rb_strerrno): return "UNKNOWNERROR" for non-zero unknown
+ error.
+
+Tue Nov 24 09:18:33 2009 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_strerrno): declared.
+
+ * template/known_errors.inc.tmpl: generate defined_error() and
+ undefined_error() instead of set_syserr.
+
+ * error.c (Init_syserr): define defined_error() and undefined_error()
+ to follow the above change.
+ (rb_strerrno): defined.
+
+ * thread_pthread.c: show error message and errno macro name with
+ rb_bug.
+
+Mon Nov 23 16:06:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (RUBY_STACK_MIN, RUBY_STACK_SPACE): delay for
+ platforms where PTHREAD_STACK_MIN is not compile time constant.
+ [ruby-dev:39751]
+
+Mon Nov 23 11:26:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (dln_find_1): removed duplication.
+
+Mon Nov 23 04:12:00 2009 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/newline.trans (fun_so_universal_newline): generate \n
+ after \r\n detection instead of just after \r.
+ [ruby-list:45988] [ruby-core:25881] [ruby-core:26788]
+
+Sat Nov 21 18:48:35 2009 Tanaka Akira <akr@fsij.org>
+
+ * vm_eval.c (rb_search_method_entry): show flags and klass value in
+ not implemented error message.
+
+Sat Nov 21 16:38:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (marshal_dump): use normal object as the buffer so
+ that no hidden object is exposed to ruby-level. [ruby-dev:39744]
+
+Sat Nov 21 15:58:43 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (read_all): fix: false negative invalid byte sequence
+ on reading from pipes. [ruby-dev:39743]
+ fix: assign the variable 'pos' as relative value from recent pos.
+
+Sat Nov 21 14:44:16 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (file_path_convert): delay getting UTF8-MAC encoding
+ while really needed. [ruby-core:26807]
+
+Fri Nov 20 21:16:54 2009 Tanaka Akira <akr@fsij.org>
+
+ * vm_eval.c (rb_search_method_entry): avoid trigraph.
+
+Thu Nov 19 23:17:06 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (putbinaryfile): use APPE for resume.
+ Thanks, Tomoyuki Chikanaga.
+
+Thu Nov 19 22:50:05 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (flag_list): untaint strings to intern in the safe
+ level 1.
+
+ * lib/net/imap.rb (max_flag_count=): new methods to set the max
+ number of flags interned to symbols.
+
+Thu Nov 19 20:43:39 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/getnameinfo.c: need to include extconf.h for HAVE_* macros.
+ reported by Kenta Murata <mrkn AT mrkn.jp> via IRC.
+
+Thu Nov 19 17:00:59 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub: nmake execute the file named echo if it exists
+ in the PATH. reported by Kenta Murata <mrkn AT mrkn.jp> via IRC.
+
+Thu Nov 19 02:50:47 2009 Tanaka Akira <akr@fsij.org>
+
+ * vm_eval.c (rb_search_method_entry): show the type of the hidden
+ object.
+ (rb_type_str): new function for above.
+
+Thu Nov 19 00:47:09 2009 Tanaka Akira <akr@fsij.org>
+
+ * io.c (MORE_CHAR_SUSPENDED): renamed from MORE_CHAR_CBUF_FULL.
+
+Wed Nov 18 22:00:13 2009 Tanaka Akira <akr@fsij.org>
+
+ * io.c (fill_cbuf): extracted from more_char.
+ (io_shift_cbuf): fix memmove condition.
+ (read_all): use fill_cbuf directly to avoid ECONV_AFTER_OUTPUT.
+ [ruby-dev:39708]
+
+Wed Nov 18 18:25:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_atfork_internal): reinitialize global lock
+ at fork to get rid of deadlock. based on the patch from Hongli
+ Lai in [ruby-core:26783]. [ruby-core:23572]
+
+Wed Nov 18 17:48:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (terminate_atfork_i): all mutex locks by other threads
+ have been abandoned at fork.
+
+Wed Nov 18 15:27:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (file_path_convert): delay getting filesystem encoding
+ while really needed.
+
+Wed Nov 18 12:33:42 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_set_default_encoding): reset filesystem
+ encoding because on resetting default_external because
+ Unix's filesystem encoding depends on default_external.
+
+ * encoding.c (enc_set_filesystem_encoding): added.
+
+ * ruby.c (process_options): don't call rb_filesystem_encoding
+ because filesystem encoding is reset when default_external
+ is reset.
+
+Wed Nov 18 11:57:32 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * math.c (math_gamma): fix incorrect comparison expression.
+ see also [ruby-dev:39709] [Bug #2381]
+
+Wed Nov 18 11:37:05 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_scan_open_args): move path encoding conversion
+ for filesystem encoding of Mac OS X.
+
+ * file.c (file_path_convert): added for convert encoding
+ of file path.
+
+ * file.c (rb_get_path_check): add file_path_convert.
+
+Wed Nov 18 10:17:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_utf8_nth): no count_utf8_lead_bytes_with_word
+ optimization for short string. [ruby-core:26787]
+
+ * string.c (str_utf8_offset): str_utf8_nth never return NULL.
+
+Wed Nov 18 10:12:34 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_method.c (rb_undef): should raise TypeError if klass is nil.
+ 1.instance_eval { undef to_s } causes SEGV before this fix.
+
+ * test/ruby/test_undef.rb: new tests for undef.
+
+Wed Nov 18 08:41:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_utf8_nth): fixed overrun. [ruby-core:26787]
+
+Wed Nov 18 07:51:01 2009 Tanaka Akira <akr@fsij.org>
+
+ * io.c (parse_mode_enc): fix invalid access.
+
+Tue Nov 17 23:50:06 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_method.c (rb_alias): should raise TypeError if klass is nil.
+ 1.instance_eval { alias to_string to_s } causes SEGV before this
+ fix.
+
+ * test/ruby/test_alias.rb (test_special_const_alias): ditto.
+
+Tue Nov 17 17:53:53 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/big5.c, enc/trans/big5.trans, enc/trans/big5-uao-tbl.rb,
+ test/ruby/test-transcode.rb: Added Encoding 'Big5-UAO' and transcoding
+ for it (from Tatsuya Mizuno) (see Bug #1784)
+
+Tue Nov 17 16:26:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * insns.def (opt_case_dispatch): runtime value cannot be used as
+ an element initializer.
+
+ * vm_insnhelper.c (opt_case_dispatch_i): gets rid of type-punning
+ calls.
+
+Mon Nov 16 15:51:53 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_call_method): protected singleton methods of
+ an object should not be able to called from other instances of the
+ class of the object. [ruby-core:26761]
+
+ * vm_eval.c (rb_method_call_status): ditto.
+
+ * test/ruby/test_module.rb (test_protected_singleton_method): ditto.
+
+Mon Nov 16 14:03:53 2009 wanabe <s.wanabe@gmail.com>
+
+ * io.c (read_all): shift read buffer if exception occurred.
+ pointed out in [ruby-dev:39702].
+
+Mon Nov 16 07:59:38 2009 wanabe <s.wanabe@gmail.com>
+
+ * io.c (read_all): don't call io_shift_cbuf until buffering enough or
+ econv_finished. [ruby-dev:39696]
+
+ * io.c (more_char): don't call clear_readconv to read buffer after
+ econv_finished.
+
+ * io.c (appendline, rb_io_each_codepoint): clear readconv when done.
+
+Mon Nov 16 01:58:08 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * include/ruby/ruby.h (rb_classext_t): annotate @internal.
+
+Mon Nov 16 01:35:34 2009 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_filesystem_encindex): use default external encoding
+ instead of locale encoding in Unix.
+
+ * ruby.c (process_options): delay filesystem encoding
+ initialization until default external encoding initialization.
+
+Mon Nov 16 00:06:26 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (thread_cleanup_func): delete locking_mutex when thread
+ object become dummy because of fork. [ruby-core:26744]
+ [ruby-core:26745]
+
+ * bootstraptest/test_thread.rb: add a test for above.
+
+Sat Nov 14 21:54:46 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * class.c (rb_mod_init_copy): fix memory leak of Class#dup.
+ [ruby-dev:39687]
+
+Sat Nov 14 17:09:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (--with-opt-dir): ignore and suppress a warning.
+ [ruby-dev:39684]
+
+Sat Nov 14 16:43:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (ruby_setenv): get rid of crash in Solaris 8 and 10.
+ [ruby-core:26668]
+
+Sat Nov 14 09:16:54 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): Fix comparisons
+ [ruby-core:26646]
+
+ * test/bigdecimal/test_bigdecimal.rb (class): Fix and improve tests.
+
+Sat Nov 14 04:07:06 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/variable.rb (TkVariable::coerce): fix bug on a
+ numeric value.
+
+Sat Nov 14 03:35:29 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/variable.rb: TkVariable#*(other) and /(other) have a
+ bug on handling of the "other" value.
+
+Fri Nov 13 21:18:15 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/zlib/zlib.c (rb_zlib_adler32): fix typo.
+
+Fri Nov 13 16:22:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_start_func_2): see first_func, not first_proc,
+ to decide which to use.
+
+ * gc.c (vm_xrealloc): use the given object space.
+
+Fri Nov 13 00:46:24 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/util.rb (CGI::pretty): fix the overflow bug
+ if stripped string.[ruby-dev:37975]
+
+Thu Nov 12 23:08:11 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb (read_from_cmdline): this code is better.
+ [ruby-core:25991]
+
+Thu Nov 12 22:55:42 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/net/telnet.rb: don't use simple delegate.
+ because SimpleDelegate behavior changed.
+
+Thu Nov 12 14:33:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_win32.c (thread_errno): CreateThread does not set errno.
+
+ * thread.c (thread_create_core): moved failure handling from
+ native_thread_core().
+
+ * thread_pthread.c (native_thread_create): constified.
+
+Thu Nov 12 10:08:56 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * .document: remove documents not in rdoc format until
+ rdoc supports non rdoc files. [ruby-core:26459]
+
+Thu Nov 12 06:42:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#initialize): option hash may not be
+ given. [ruby-core:26681]
+
+Thu Nov 12 01:29:15 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * enumerator.c (yielder_yield_push): Yielder#<< should return self.
+ [ruby-dev:39660]
+
+Wed Nov 11 19:17:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#initialize): merge mode option.
+
+ * lib/tmpdir.rb (Dir::Tmpname#create): splat options.
+
+Wed Nov 11 12:54:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (ruby_setenv): use ruby_strdup().
+
+Wed Nov 11 12:19:27 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * hash.c (ruby_setenv): also set CRT workarea. ref [ruby-core:25010]
+
+Wed Nov 11 09:36:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_object, r_object0): use RHASH_IFNONE but not ifnone
+ directly.
+
+Wed Nov 11 08:32:45 2009 Tanaka Akira <akr@fsij.org>
+
+ * thread.c (blocking_region_begin): define before BLOCKING_REGION.
+ reported by Luis Lavena. [ruby-core:26670]
+
+Wed Nov 11 08:22:19 2009 Tanaka Akira <akr@fsij.org>
+
+ * util.c (ruby_strtod): use dval() consistently.
+
+Wed Nov 11 02:14:48 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/matrix/test_matrix.rb (TestMatrix#test_rank):
+ added a test method for r24969.
+
+Tue Nov 10 08:23:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_f_exec, rb_f_system, rb_f_spawn): mentioned about
+ the shell to be used when the command line is single string.
+ See [ruby-core:26652]
+
+Mon Nov 9 20:15:16 2009 Tanaka Akira <akr@fsij.org>
+
+ * thread.c (rb_gc_save_machine_context): don't save the stack pointer
+ in this function.
+ (RB_GC_SAVE_MACHINE_CONTEXT): call rb_gc_save_machine_context and
+ save the stack pointer at caller side.
+ (rb_thread_schedule_rec): use RB_GC_SAVE_MACHINE_CONTEXT instead of
+ rb_gc_save_machine_context.
+ (blocking_region_begin): changed to a macro. use
+ RB_GC_SAVE_MACHINE_CONTEXT instead of rb_gc_save_machine_context.
+ [ruby-dev:39659]
+
+Mon Nov 9 11:28:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (warnflags): add -Wno-long-long.
+
+Sun Nov 8 18:13:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c: use RHASH_IFNONE but not ifnone directly.
+
+Sat Nov 7 21:02:57 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/pp.rb (PP::ObjectMixin#pretty_print): use to_s regardless of
+ instance variables.
+
+Sat Nov 7 20:59:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_push_frame): get rid of out-of-bounds
+ access.
+
+Sat Nov 7 12:41:19 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_insnhelper.c (VM_CALLEE_SETUP_ARG): revert r25521.
+ [ruby-core:26427] [ruby-core:26447]
+
+Fri Nov 6 18:33:47 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_push_frame): add CHECK_STACK_OVERFLOW.
+ [ruby-dev:39592]
+
+ * eval.c (rb_longjmp): add 1 level backtrace for sysstack_error
+ without calling any method to prevent further stack overflow.
+
+ * eval.c (make_exception): don't call #exception for
+ sysstack_error to prevent stack overflow.
+
+ * proc.c (Init_Proc): don't freeze sysstack_error.
+
+ * eval.c (rb_longjmp): move reentrant check after exception
+ preparation.
+
+Fri Nov 6 17:13:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (create_header): split the line by tabs.
+
+Fri Nov 6 12:02:32 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in (MINIDLNOBJ): set default as dmydln.o.
+ Now LLVM clang seems to be able to build Ruby 1.9.
+
+Fri Nov 6 09:29:32 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_filesystem_encindex): add fallback to
+ ASCII-8BIT on Windows.
+
+Fri Nov 6 07:29:07 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_case.rb: merged r25658 from ruby_1_8.
+
+Thu Nov 5 12:27:07 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * gem_prelude.rb (Gem.user_home): force_encoding(
+ Encoding.find('filesystem')). [ruby-core:26525]
+
+Thu Nov 5 07:47:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (BEGIN): now local_push and local_pop are necessary in
+ ripper.
+
+Wed Nov 4 21:39:10 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * .document: add some README files to default rdoc's of trunk.
+ patched by Roger Pack [ruby-core:26459]
+
+Wed Nov 4 16:06:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/st.h (SIZEOF_ST_INDEX_T): moved from st.c for
+ Init_RandomSeed().
+
+Wed Nov 4 15:50:16 2009 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * include/ruby/ruby.h (NUM2CHR): prefix __extension__ for
+ braced-groups within expressions.
+
+Wed Nov 4 15:46:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (set_{internal,external}_encoding_once): fixed typos.
+
+Wed Nov 4 12:49:18 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * proc.c (mnew): Fix scope issue [ruby-core:26069]
+
+Wed Nov 4 08:50:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (rb_hash_start): moved from string.c.
+
+ * random.c (Init_RandomSeed2): register global address before set.
+
+ * random.c (Init_RandomSeed): initialize hashseed.
+
+Wed Nov 4 08:26:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (dir_check): moved other checks from GetDIR.
+
+ * dir.c (GetDIR): fixed a variable name.
+
+Wed Nov 4 08:19:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (rb_fiber_start): fixed unconditional test.
+
+Wed Nov 4 02:08:14 2009 Aaron Patterson <tenderlove@ruby-lang.org>
+
+ * ext/dl/cptr.c (rb_dlptr_eql, rb_dlptr_cmp): DL::CPtr#== and DL::CPtr#<=>
+ should not raise an exception when compared to a different object.
+
+Wed Nov 4 00:05:36 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_upto): make next object before yield its block.
+ fix: can modify original begin string of String#upto.
+ [ruby-dev:26384] [ruby-dev:39626]
+
+Mon Nov 2 18:33:21 2009 wanabe <s.wanabe@gmail.com>
+
+ * cont.c (fiber_free): don't free unallocated local_storage. see #1325.
+
+ * cont.c (cont_init): clear local_storage not to use current thread's.
+
+ * cont.c (fiber_t_alloc, root_fiber_alloc): link itself always for
+ a case that fiber_link_remove() is called before fiber_link_join().
+
+ * cont.c (fiber_init): clear cont->vm_stack and th->stack before
+ root_fiber_alloc() in rb_fiber_current().
+
+Mon Nov 2 14:52:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_exc_raise, rb_exc_fatal, rb_make_exception):
+ suppressed shorten-64-to-32 warnings.
+
+Mon Nov 2 14:43:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_pthread.c (native_stop_timer_thread): delay joining timer
+ thread after unlocking mutex.
+
+Mon Nov 2 13:31:14 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_pthread.c (native_stop_timer_thread): need to join timer thread
+ only when really stopping it.
+
+Mon Nov 2 12:55:50 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_{pthread,win32}.c (native_stop_timer_thread): join the thread
+ here.
+
+ * thread_{pthread,win32}.c (native_reset_timer_thread): new function.
+
+ * thread.c (rb_thread_stop_timer_thread, rb_thread_reset_timer_thread):
+ call above function instead of simply setting 0.
+
+Mon Nov 2 11:22:19 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/dl/win32/lib/win32/registry.rb: update rdoc. [ruby-core:26022]
+
+Sun Nov 1 20:16:03 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c: fixed rdoc. [ruby-core:26457]
+
+Sun Nov 1 16:24:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rb_cv_stack_grow_dir): fix for universal binary.
+
+ * configure.in (sitehdrdir, vendorhdrdir): fixed default values.
+
+Sun Nov 1 13:31:16 2009 wanabe <s.wanabe@gmail.com>
+
+ * win32/win32.c (overlapped_socket_io, recvmsg, sendmsg): pass handle
+ instead of pointer to CloseHandle().
+
+Sun Nov 1 13:11:27 2009 wanabe <s.wanabe@gmail.com>
+
+ * ext/socket/socket.c (socket_s_ip_address_list): use FreeLibrary() to
+ free HMODULE.
+
+Sun Nov 1 08:17:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (GET_STACK_BOUNDS): refactored common code. based on a
+ patch from Suraj N. Kurapati <sunaku AT gmail.com> in
+ [ruby-core:26443].
+
+Sat Oct 31 23:44:35 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_count): remove optimization using #size.
+ revert r25560.
+
+ * vm_eval.c (rb_funcall_no_recursive): remove method.
+
+Sat Oct 31 23:28:49 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_eval.c (check_funcall): logic updated according to
+ [ruby-dev:39594]. search method entry, call if it exists;
+ otherwise check method_missing, call if it was overridden,
+ protecting exceptions; if NoMethodError happens, check method
+ name.
+
+ * vm_eval.c (vm_call0): use idMethodMissing.
+
+ * vm_eval.c (rb_search_method_entry): typo fixed.
+
+Sat Oct 31 17:19:28 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTPResponse#each_response_header):
+ cosmetic: '?\ ' -> '?\s'
+
+Fri Oct 30 22:09:47 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTPResponse#each_response_header):
+ accept multiline message header of HTTP response. see #1796.
+ cf. RFC 2616 '4.2 Message Header'.
+
+ * test/net/http/test_httpresponse.rb: added.
+
+Fri Oct 30 18:54:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (trnext): detect empty range and raise exception.
+ [ruby-dev:39108]
+
+Fri Oct 30 17:01:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (enum call_type): get rid of last comma.
+
+ * vm_eval.c (vm_call0, vm_call_super, rb_f_send, rb_f_public_send):
+ fixed call_type. [ruby-dev:39581]
+
+ * vm_eval.c (rb_search_method_entry, rb_method_call_status): split
+ from rb_call0().
+
+ * vm_eval.c (rb_check_funcall): get rid of raising exceptions and
+ hiding further exceptions. [ruby-dev:39584]
+
+ * vm_eval.c (rb_funcall_no_recursive): ditto.
+
+Fri Oct 30 13:36:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_blocking_region): reverted r25566, and added
+ description that no exception is allowed inside `func', instead.
+ see [ruby-dev:39582]
+
+Fri Oct 30 13:13:16 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32.c (recvmsg, sendmsg, link): shouldn't raise ruby's exceptions
+ in the functions expected as system API. see [ruby-dev:39579] and
+ [ruby-dev:39582]
+
+Fri Oct 30 12:59:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread.c (rb_thread_blocking_region): standard C doesn't accept
+ preprocessing directive within macro expansion.
+
+Fri Oct 30 10:55:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_blocking_region): must ensure to unlock GVL.
+ [ruby-dev:39579]
+
+Fri Oct 30 04:47:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (RSTRING_END): trivial optimization.
+
+ * string.c (rb_str_sub_bang): trivial optimization.
+
+Fri Oct 30 02:11:36 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_count): call #size using rb_funcall_no_recursive()
+ to prevent infinite recursive calls. [ruby-core:24794]
+
+ * vm_eval.c (rb_funcall_no_recursive): utility function to check
+ direct recursive call.
+
+ * vm_eval.c (rb_check_funcall): move from eval.c. [refactoring]
+
+Thu Oct 29 18:37:02 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (Init_Encoding): revert previous commit.
+
+ * ruby.c (process_options): ditto.
+
+Thu Oct 29 15:35:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (Init_Encoding): set locale and filesystem encindex.
+
+ * ruby.c (process_options): move setting func of filesystem
+ encoding to Init_Encoding.
+
+Thu Oct 29 15:43:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (rb_name_err_mesg_new): added prototype.
+
+Thu Oct 29 13:53:18 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_to_ary): do not use #respond_to? to detect
+ to_ary. Just call. [ruby-core:23738]
+
+ * eval.c (rb_check_funcall): new function with method existence
+ check. returns Qundef when the method does not exist.
+
+ * enumerator.c (enumerator_rewind): just call method, using
+ rb_check_funcall(). [ruby-core:23738]
+
+ * error.c (exc_equal): ditto.
+
+ * object.c (convert_type): ditto.
+
+ * error.c (rb_name_err_mesg_new): export function.
+
+ * eval.c (make_exception): ditto.
+
+ * io.c (pop_last_hash): return early when the last argument is nil.
+
+ * io.c (rb_io_puts): treat T_STRING specially for small
+ optimization.
+
+ * vm_eval.c (raise_method_missing): skip method call if possible
+ using rb_method_basic_definition_p().
+
+ * vm_eval.c (method_missing): ditto.
+
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_debug): test
+ suites changed to ignore exceptions caused by just-call policy.
+
+Thu Oct 29 04:41:44 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ruby.c (process_options): call rb_filesystem_encoding().
+
+Thu Oct 29 04:40:36 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (Init_IO): rb_default_rs should be US-ASCII.
+
+Thu Oct 29 01:22:01 2009 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * ext/socket/extconf.rb : Compilation failure on AIX.
+ ss_len (a member of struct sockaddr_storage) has preceding __,
+ but ss_family does not have it from AIX 5.2.
+
+Wed Oct 28 16:32:49 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (get_filesystem_encoding): removed.
+
+ * encoding.c (rb_locale_encindex): added.
+
+ * encoding.c (rb_filesystem_encindex): added.
+
+ * encoding.c (rb_filesystem_encindex): add an alias 'filesystem'.
+ [ruby-dev:39574]
+
+ * encoding.c (enc_find): add rdoc about special aliases.
+
+ * gem_prelude.rb (Gem.set_home): use Encoding.find('filesystem').
+
+ * gem_prelude.rb (Gem.set_paths): ditto.
+
+Wed Oct 28 15:02:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * gem_prelude.rb (Gem.set_home):
+ force_encoding(Encoding.filesystem_encoding)
+ [ruby-core:25959]
+
+ * gem_prelude.rb (Gem.set_paths): ditto.
+
+Wed Oct 28 14:24:45 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (get_filesystem_encoding):
+ add Encoding.filesystem_encoding [ruby-dev:39546]
+ also see [ruby-core:25959]
+
+Wed Oct 28 14:51:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/etc/etc.c (etc_each_group): fixed typo.
+
+Wed Oct 28 13:02:10 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (Net::FTP#initialize): sets @binary to true.
+
+ * lib/net/ftp.rb (Net::FTP#binary=): sends a TYPE command only when
+ logged in. [ruby-dev:39548]
+
+ * lib/net/ftp.rb (Net::FTP#send_type_command): new private method
+ which sends an appropriate TYPE command according to the value of
+ @binary.
+
+ * lib/net/ftp.rb (Net::FTP#login): calls send_type_command instead
+ of binary=.
+
+Wed Oct 28 12:26:51 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_setup_method): should push call frame before
+ raising exception, to put the Ruby-defined method name in the
+ error message. [ruby-core:26333]
+
+ * vm_insnhelper.c (VM_CALLEE_SETUP_ARG): macro modified.
+
+ * vm_insnhelper.c (vm_yield_setup_args): modified for new
+ VM_CALLEE_SETUP_ARG macro.
+
+Tue Oct 27 22:46:44 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/ftp.rb (Net::FTP#initialize): @sock = nil.
+
+ * lib/net/ftp.rb (Net::FTP#binary=): send command only when
+ socket is open. [ruby-dev:39548]
+
+Tue Oct 27 22:22:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (Init_stringio): added read_nonblock and
+ write_nonblock aliases. [ruby-dev:39551]
+
+ * ext/stringio/stringio.c (strio_data_type): typed.
+
+Tue Oct 27 21:20:35 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/variable.rb: add TkVariable#+@ and -@ method.
+
+Tue Oct 27 16:36:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (chopped_length): get rid of unexpected exception.
+ see [ruby-core:26336].
+
+Tue Oct 27 15:53:10 2009 Tanaka Akira <akr@fsij.org>
+
+ * gc.h (SET_MACHINE_STACK_END): use __i386.
+ Some compiler may not define __i386__.
+ Solaris 64-bit Developer's Guide:
+ http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view
+
+Tue Oct 27 15:44:48 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (getbinaryfile, list): call to_s to convert
+ a Pathname instance into a string. [ruby-core:26237]
+
+Tue Oct 27 12:30:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.h (SET_MACHINE_STACK_END): use __i386__ instead of __i386,
+ and explicit size qualifiers.
+
+Tue Oct 27 09:40:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * gc.h (SET_MACHINE_STACK_END): add x86_64 version by nobu.
+
+Tue Oct 27 09:27:59 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_exec.c (DECL_SC_REG): use __clang__.
+
+Tue Oct 27 08:56:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * mkconfig.rb: reverted r25443 because build_os is used in mkmf.rb
+ on some platforms. [ruby-core:26332]
+
+Tue Oct 27 08:01:57 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * parse.y (ripper_filename): add Ripper#filename. [ruby-dev:37856]
+
+ * test/ripper/test_filter.rb: add more tests.
+
+Tue Oct 27 07:53:25 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (garbage_collect_with_gvl): do not garbage_collect when
+ dont_gc flag turned on. [ruby-core:26327]
+
+Tue Oct 27 07:38:39 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/tcltklib.c,stubs.c: remove errors or warnings when compiled
+ with old ruby 1.8.x.
+
+ * ext/tk/tkutil/tkutil.c: ditto.
+
+Tue Oct 27 05:56:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm.c (invoke_block_from_c): return Qnil when its iseq is
+ SPECIAL CONST. [ruby-core:26335]
+
+Tue Oct 27 05:11:49 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * vm_exec.c (DECL_SC_REG): check defined(__asm__) before use it.
+ LLVM/clang defines __GNUC__ but doesn't have __asm__.
+
+Tue Oct 27 03:45:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): added RUBY_SITEARCH to use
+ different name from RUBY_ARCH. [ruby-core:26324]
+
+Mon Oct 26 20:04:13 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * array.c (rb_ary_cmp): Array#<=> returns nil when comparison fails
+ [ruby-core:26316]
+
+Mon Oct 26 18:37:57 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (default_proc_arity_check): new support function.
+
+ * hash.c (rb_hash_initialize): should do arity check as #default_proc=.
+ [ruby-core:26281]
+
+Mon Oct 26 13:24:17 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/remote-tk.rb: typo fixed.
+
+Mon Oct 26 12:34:08 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ruby.c (usage): -T and -W descriptions updated. see
+ [ruby-dev:39539]
+
+ * man/ruby.1: ditto.
+
+Mon Oct 26 12:06:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_fwrite): adjust stdio file position after direct write on
+ BSDish platforms. [ruby-core:26300]
+
+Sun Oct 25 15:44:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/handle.c (dlhandle_sym): fixed an invalid local variable
+ declaration.
+
+Sun Oct 25 13:33:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_cntl): F_DUPFD is platform dependent.
+
+Sun Oct 25 10:19:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/handle.c (rb_dlhandle_close): fixed an invalid local
+ variable declaration.
+
+Sun Oct 25 05:44:34 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb (**): Optimization (up to 45% faster)
+
+Sat Oct 24 14:28:40 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_set_default_proc): checks arity of default_proc
+ of a Hash. [ruby-core:26087]
+
+Sat Oct 24 13:38:45 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_cmp): defines Object#<=>. [ruby-core:24063]
+
+Sat Oct 24 09:51:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_flat_map): new method that concatenates the values
+ from given block. also provides alias #collect_concat.
+
+Sat Oct 24 00:36:47 2009 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_cntl): update max file descriptor by the result of
+ fcntl(F_DUPFD).
+
+Fri Oct 23 16:31:14 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_class_new): move class check to rb_check_inheritable().
+
+ * class.c (rb_check_inheritable): should not allow subclass of
+ class Class. [ruby-core:26225]
+
+Fri Oct 23 14:25:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (target, target_alias): replace with real cpu.
+
+ * mkconfig.rb: build* are not needed in rbconfig.rb.
+
+ * configure.in (warnflags): use -Wextra only when
+ -Wno-missing-field-initializers is available.
+
+ * configure.in (optflags): removed -fomit-frame-pointer by default.
+
+Fri Oct 23 09:12:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/pathname.rb (Pathname::SAME_PATHS): FNM_SYSCASE is always
+ non-nil.
+
+Fri Oct 23 07:32:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, Makefile.in, win32/Makefile.sub (XRUBY): runnable
+ ruby without current libraries.
+
+ * common.mk (rdoc): use XRUBY.
+
+Fri Oct 23 07:28:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (warnflags): use -Wextra instead of -Wall.
+
+ * gc.c (mark_current_machine_context): get rid of warning.
+
+Thu Oct 22 21:10:39 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * class.c (rb_obj_basic_to_s_p): typo. Please become familiar with
+ the ANSI style.
+
+Thu Oct 22 20:20:27 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/envutil.rb (assert_in_out_err): test_stdout and
+ test_stderr should be an array.
+
+ * test/ruby/test_rubyoptions.rb (test_notfound): test_stdin of
+ assert_in_out_err should be a string.
+
+Thu Oct 22 17:49:05 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/fileutils.rb (FileUtils#fu_get_uid, fu_get_gid): Do not
+ convert an integer back and forth.
+
+Thu Oct 22 17:29:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (arg_prepend): removed. a patch from Mikhail T. in
+ [ruby-core:26217].
+
+Thu Oct 22 04:54:41 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_inspect): print instance variables only when
+ Object#to_s is not overridden. [ruby-core:24425]
+
+ * class.c (rb_obj_basic_to_s_p): new function.
+
+Wed Oct 21 19:32:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_obj_inspect): fixed rdoc about the case that to_s
+ is called. [ruby-core:24425]
+
+Wed Oct 21 08:17:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/logger/test_logger.rb (TestLogDevice#test_write): check
+ also error message.
+
+Wed Oct 21 03:54:41 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb:
+ Creator functions now strict with their arguments
+ Support for empty matrices (see new method Matrix.empty)
+ Matrix#trace raises an ErrDimensionMismatch if the matrix is not square
+ Enumerators are returned when no block given
+ Consistent results when accessing elements with out of bounds indices
+ Details in [ruby-core:23598].
+
+Wed Oct 21 00:27:15 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/webrick/httpauth/digestauth.rb: typo in exception message fixed.
+
+Wed Oct 21 00:17:28 2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/logger.rb: imported upstream version (logger/1.2.7) see #2238.
+ * do not raise an exception even if log writing failed.
+ * do not raise ShiftingError if an aged file already exists.
+ (no ShiftingError will be raised from 1.2.7, just warn() instead)
+ * test/logger/test_logger.rb: ditto.
+
+Tue Oct 20 22:29:06 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/matrix.rb: Bug fix. See detail [ruby-core:23598].
+
+Tue Oct 20 17:57:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_symbol, r_symreal): fixed the order of symbol and
+ its encoding modifier, in order to make the dump readable from
+ 1.8. [ruby-dev:39515]
+
+Tue Oct 20 16:41:18 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h (finite, scalb): inline'ed non-standard
+ identifier macros. [ruby-core:26166]
+
+Tue Oct 20 15:38:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (ripper_intern): enable literal optimization.
+
+ * parse.y (method_call): dispatch symbols. a patch from Andy Keep in
+ [ruby-core:26169]. [ruby-core:26165]
+
+ * parse.y (mlhs_basic): fixed handling splat in middle of mlhs. a
+ patch from Andy Keep in [ruby-core:26163]
+
+ * parse.y (parser_here_document): dispatch delayed heredoc
+ contents. based on a patch from Andy Keep in [ruby-core:24855].
+
+Mon Oct 19 15:17:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * .gdbinit (rb_method_entry): search method entry by class and id.
+
+Mon Oct 19 15:03:31 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (enc/unicode/name2ctype.h): no need to create
+ directory if it already exists.
+
+Mon Oct 19 11:34:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * .gdbinit (rb_ps): dump all threads and their callstacks. based
+ on [ruby-core:26155] by Joshua ben Jore <twists AT gmail.com>.
+
+Mon Oct 19 10:59:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (prepare_iseq_build, rb_iseq_build_for_ruby2cext):
+ untrust mark array. [ruby-core:26137]
+
+Mon Oct 19 05:49:53 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/rexml/element.rb (text=): false should be converted to string.
+ A patch by Teruo Oshida [ruby-dev:38351]
+
+Sun Oct 18 22:33:25 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb: do not require lib/delta.rb.
+
+ * lib/date/delta.rb: follows the above change.
+
+Sun Oct 18 19:14:21 2009 Tanaka Akira <akr@fsij.org>
+
+ * parse.y (is_special_global_name): add boundary check.
+
+Sun Oct 18 18:31:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe): should not dup tmp string. a
+ patch from neomjp neomjp in [ruby-core:24251].
+
+Sun Oct 18 09:49:14 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/test_prime.rb
+ (TestPrime#test_eratosthenes_works_fine_after_timeout):
+ test for [ruby-dev:39465].
+
+ * lib/prime.rb (Prime::EratosthenesSieve):
+ fixed [ruby-dev:39465].
+ suppressed memory reallocation.
+ constantified some magic numbers.
+
+Sat Oct 17 22:11:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (id2encidx): register encoding name.
+ (r_object0): register object before encoding name.
+ [ruby-core:24882]
+
+Sat Oct 17 17:56:58 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/rake/test_fileutils.rb (Rake::TestFileUtils#test_sh): uses
+ FileUtils::RUBY instead of fixed "ruby" so that the ruby command
+ works fine in Ruby's "make test-all".
+ (test_sh_with_a_single_string_argument): ditto.
+ (test_sh_with_multiple_arguments): ditto.
+ (test_sh_failure): ditto
+ (test_sh_special_handling): ditto.
+
+Sat Oct 17 17:30:06 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (big_split): fix off-by-one error. [ruby-dev:39501]
+
+Sat Oct 17 16:34:27 2009 Tanaka Akira <akr@fsij.org>
+
+ * parse.y (parser_yylex): fix token even after trailing under score.
+
+Sat Oct 17 11:27:44 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_method.c (basic_obj_respond_to): call #respond_to_missing?
+ always with two arguments. [ruby-core:26090]
+
+Sat Oct 17 08:51:44 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator#respond_to_missing): warn only when
+ specified method is a private. [ruby-dev:39498]
+
+Fri Oct 17 00:05:53 2009 wanabe <s.wanabe@gmail.com>
+
+ * st.c (unpack_entries): save table->bins and never change the table
+ during unpacking. Because st_insert() may cause GC and refer the
+ table, i.e. st_foreach(). [Bug #2196]
+
+Fri Oct 16 22:20:25 2009 Tanaka Akira <akr@fsij.org>
+
+ * prelude.rb (require_relative): defined as a module function of
+ Kernel.
+
+Fri Oct 16 20:18:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator#method_missing): remove backtrace
+ lines _until_ `method_missing'.
+
+Fri Oct 16 20:09:55 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator#freeze): #freeze should freeze self
+ and the target at once. [ruby-core:26118]
+
+Fri Oct 16 19:39:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator#respond_to_missing): warn if optional
+ include_private argument is not false. Delegator does (and
+ should) not forward private methods. [ruby-core:26080]
+
+ * lib/delegate.rb (Delegator#respond_to_missing): instead of
+ redefining #respond_to?, use #respond_to_missing?. [ruby-core:26081]
+
+Fri Oct 16 18:42:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bootstraptest/test_gc.rb: added tests based on [ruby-dev:39484]
+ from wanabe <s.wanabe AT gmail.com>.
+
+Fri Oct 16 16:09:01 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_spawn): `\'' is also quote character.
+
+Fri Oct 16 13:40:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.h (rb_gc_debug_body): constified.
+
+Fri Oct 16 13:20:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (VpMidRound): remove warnings.
+ patch from Charlie Savage. [ruby-core:22869]
+
+ * ext/digest/bubblebabble/bubblebabble.c (bubblebabble_str_new): ditto.
+
+ * ext/digest/digest.c (hexencode_str_new): ditto.
+
+ * ext/iconv/iconv.c (iconv_convert): ditto.
+
+ * ext/socket/socket.c (inspect_sockaddr): ditto.
+
+ * ext/socket/raddrinfo.c (sockaddr_obj): ditto.
+
+ * ext/syck/emitter.c (syck_emitter_write): ditto.
+
+ * ext/syck/emitter.c (syck_emitter_flush): ditto.
+
+ * ext/syck/emitter.c (syck_emit_tag): ditto.
+
+Fri Oct 16 12:03:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/csv.rb (CSV#raw_encoding): returns ASCII-8BIT when the io
+ doesn't have encoding.
+
+Fri Oct 16 03:15:52 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/csv.rb (CSV#read_to_char): set encoding and verify data
+ which read from io before encode it to @encoding.
+
+ * lib/csv.rb (CSV#raw_encoding): add to get @io's encoding.
+
+ * lib/csv.rb (CSV#read_io): add to read string and set @io's
+ encoding.
+
+Thu Oct 15 18:26:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_intern3): check symbol table overflow before generate
+ next id. [ruby-core:26092]
+
+Thu Oct 15 15:14:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_encoding_set): get rid of parsing non-ascii string, and
+ refine messages for invalid name encoding.
+
+ * io.c (io_reopen): unread current buffer before telling the
+ position, for the case of reopening same file. [ruby-dev:39479]
+
+Thu Oct 15 14:20:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (iconv_create): cannot retry with given block.
+ [ruby-dev:39487]
+
+Thu Oct 15 09:25:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/init.c (rsock_init_sock): mswin doesn't have S_IFSOCK
+ flag in st_mode of struct stat. so, use rb_w32_issocket() function
+ instead of S_ISSOCK macro.
+
+Thu Oct 15 00:47:42 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/enc-unicode.rb,
+ enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
+ enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
+ use UTS#18 for POSIX character class.
+ http://rubyspec.org/issues/show/161
+
+Thu Oct 15 00:26:07 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/init.c (rsock_init_sock): validate file descriptor.
+
+Wed Oct 14 13:24:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): script name should not be shown in an
+ error message before loaded.
+
+Wed Oct 14 09:06:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_run_node): need to call ruby_cleanup() always even
+ if any error occurred so far.
+
+Wed Oct 14 08:08:12 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * proc.c (mnew): Method#new checks for respond_to_missing? with
+ private set to true
+ [ruby-core:26069]
+
+Tue Oct 13 21:05:01 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/enc-unicode.rb,
+ enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
+ enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
+ Add DerivedCoreProperties, PropList (Binary Property),
+ PropertyAlias and PropertyValueAlias.
+ Now users of tool/enc-unicode.rb should specify
+ the directory of UCD files.
+
+Tue Oct 13 18:54:25 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/variable.rb: bug fix. additional trace definition changes the
+ option of first trace definition.
+
+Tue Oct 13 18:23:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (token_info_push, token_info_pop): reduced ifdefs.
+
+ * parse.y (parser_magic_comment): fixed normalization.
+
+Tue Oct 13 09:04:14 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * thread.c: Revert changes to Thread#raise made in r25278
+ [ruby-core:25367]
+
+ * eval_intern.h: ditto
+
+Mon Oct 12 23:27:57 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (login): use "anonymous@" as a default password.
+ [ruby-dev:39451]
+
+Mon Oct 12 22:48:25 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (retrlines): added a new block parameter.
+
+ * lib/net/ftp.rb (gettextfile): preserve missing end-of-line at end
+ of files. [ruby-core:24590]
+
+Mon Oct 12 19:48:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_run_node): if an exception occurred in ruby_option,
+ the result is not executable.
+
+Mon Oct 12 05:51:11 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regparse.c (fetch_token): warn invalid back reference
+ and subexp call. (\k and \g).
+
+Mon Oct 12 03:47:42 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * marshal.c (has_encoding): added for check the regexp
+ is dumped by 1.8 or 1.9.
+
+ * marshal.c (r_object0): use has_encoding.
+
+Sun Oct 11 15:54:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/gdbm/gdbm.c (fgdbm_select): fixed rdoc. a patch from Justin
+ Collins in [ruby-core:26050].
+
+Sun Oct 11 10:27:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/irb/context.rb (IRB::Context#irb_name): removed duplicated
+ attr_reader. [ruby-core:26047]
+
+ * lib/irb/ruby-lex.rb (RubyLex#lex_int2): removed duplicated
+ character class range.
+
+Sun Oct 11 10:04:35 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regparse.c (fetch_token_in_cc): warn when \p is not
+ followed by property name.
+
+ * regparse.c (fetch_token): ditto.
+
+Sun Oct 11 09:44:46 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regerror.c (onig_vsnprintf_with_pattern): added.
+
+ * regparse.c (onig_syntax_warn): use above.
+
+Sun Oct 11 09:04:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (RB_GC_GUARD_PTR): workaround for gcc
+ optimization.
+
+ * include/ruby/ruby.h (ruby_exec_node): declared.
+
+Sun Oct 11 03:10:50 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regparse.c (onig_syntax_warn): added.
+
+ * regparse.c (CC_ESC_WARN, CLOSE_BRACKET_WITHOUT_ESC_WARN,
+ CC_DUP_WARN, UNKNOWN_ESC_WARN): use onig_syntax_warn.
+
+Sun Oct 11 00:14:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (marshal_dump, marshal_load): prevent from GC.
+
+Sat Oct 10 23:57:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (path_check_0): prevent from GC.
+
+Sat Oct 10 23:51:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (rb_transcoding, str_transcoding_resize): fixed
+ types.
+
+Sat Oct 10 20:35:27 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * math.c (math_atanh): reverted r25279.
+
+Sat Oct 10 19:03:29 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/curses/curses.c: use rb_thread_blocking_region to avoid
+ rb_read_check. This makes other threads runnable in getstr and
+ wgetstr.
+ (getch_func): extracted from curses_getch.
+ (curses_getch): use rb_thread_blocking_region with getch_func.
+ (getstr_func): extracted from curses_getstr.
+ (curses_getstr): use rb_thread_blocking_region with getstr_func.
+ (wgetch_func): extracted from window_getch.
+ (window_getch): use rb_thread_blocking_region with wgetch_func.
+ (wgetstr_func): extracted from window_getstr.
+ (window_getstr): use rb_thread_blocking_region with wgetstr_func.
+
+ * include/ruby/io.h (rb_read_check): deprecated because it access
+ internal of stdio.
+
+Sat Oct 10 18:59:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (cflags, cxxflags): remove duplicating options.
+
+Sat Oct 10 18:19:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, Makefile.in (LIBRUBY_SO), common.mk (ruby.imp),
+ win32/mkexports.rb (each_export): exclude _threadptr_ functions.
+
+Sat Oct 10 17:55:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_threadptr_errinfo): renamed.
+
+Sat Oct 10 17:03:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_exec_node): removed unused argument.
+
+Sat Oct 10 14:55:55 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * math.c (math_atanh): Fix bug for Math.atanh(+/-1). It now returns
+ +-Infinity. [ruby-core:26028]
+
+Sat Oct 10 14:09:40 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * thread.c (rb_threadptr_execute_interrupts_rec, rb_threadptr_raise):
+ Thread#raise with no argument will now re-raise the current exception
+ if there is one [ruby-core:25367]
+
+ * eval.c (get_errinfo, rb_rubylevel_thread_errinfo): Getter for
+ current exception for a given thread
+
+Fri Oct 9 23:10:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_method.c (rb_method_boundp): should exclude NOEX_RESPONDS.
+ based on the patch from Nikolai Lugovoi. [ruby-core:25949]
+
+Fri Oct 9 21:14:40 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb (Resolv::DNS::Requester::ConnectedUDP): disable
+ reverse lookup.
+ (Resolv::DNS::Requester::UnconnectedUDP): ditto.
+
+Fri Oct 9 10:12:13 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/irb/context.rb (IRB::Context#initialize):
+ remove warnings when $VERBOSE is set as true in .irbrc.
+
+Fri Oct 9 02:58:18 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/enc-unicode.rb: optimized.
+
+ * enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
+ enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
+ U+100000-U+10FFFD is assigned, not Cn.
+
+Fri Oct 9 02:12:02 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * ext/curses/curses.c: Many functions of module Curses could cause a
+ crash if the ncurses library was not properly initialized.
+ Fix pointed out by Alexander Beisig [ruby-core:22592]
+ Functions fixed: attroff, attron, attrset, bkgd, bkgdset,
+ can_change_color, close_screen, closed, color_content, curs_set,
+ def_prog_mode, delch, deleteln, getmouse, getstr, has_colors,
+ init_color, init_pair, insertln, keyname, mouseinterval, mousemask,
+ pair_content, pair_number, reset_prog_mode, resizeterm, scrl,
+ setscrreg, standend, standout, start_color, timeout, ungetmouse,
+ use_default_colors
+
+Fri Oct 9 01:07:34 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (ADD_TRACE): fire coverage event in ensure clause.
+ [ruby-dev:39303]
+
+ * iseq.h, iseq.c: ditto.
+
+Fri Oct 9 00:33:29 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/net/telnet.rb (cmd): Pass FailEOF options: patch by Brian
+ Candler [ruby-core:22723]
+
+Fri Oct 9 00:01:17 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket.udp_server_recv): extracted from
+ Socket.udp_server_loop_on.
+
+Thu Oct 8 05:45:14 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/enc-unicode.rb: parse range notation of UnicodeData.txt.
+
+ * enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
+ enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
+ follow above change. [ruby-dev:39444]
+
+Thu Oct 8 02:46:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_inspect): copy by chunks.
+
+Thu Oct 8 01:23:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (iseq_s_disasm): accept proc objects. [ruby-core:18762]
+
+Wed Oct 7 16:42:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (mark_dump_arg, mark_load_arg): ignore already cleaned
+ data. [ruby-core:25969]
+
+ * marshal.c (clear_dump_arg, clear_load_arg): clear freed fields.
+
+Wed Oct 7 16:06:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_long2int): evaluates the argument only
+ once.
+
+ * struct.c (rb_struct_alloc): check array length overflow.
+
+Wed Oct 7 09:23:49 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): don't assign -1 to unsigned int.
+
+Wed Oct 7 00:27:01 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb (Resolv::DNS.bind_random_port): bind to "::" for IPv6.
+ (Resolv::DNS::ConnectedUDP#initialize): specify is_ipv6 argument of
+ bind_random_port.
+ [ruby-core:25970]
+
+Tue Oct 6 23:32:38 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_upto): RDoc updated. a patch from Nobuhiro
+ IMAI <nov at yo.rim.or.jp> in [ruby-dev:39440]. [ruby-dev:39439]
+
+Tue Oct 6 21:30:58 2009 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_reopen): avoid close if possible.
+
+Tue Oct 6 18:56:09 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * struct.c (rb_struct_select): Struct#select should return
+ enumerator when no block given.
+
+Tue Oct 6 06:26:00 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * * ext/tk/lib/tk/canvas.rb: *** POTENTIALLY INCOMPATIBLE ***
+ 'tags' option of a TkcItem object should give a list of TkcTag objs.
+
+ * ext/tk/lib/tkextlib/vu/dial.rb: fix logical bug.
+
+ * ext/tk/lib/tk/canvas.rb, ext/tk/lib/tkextlib/blt/component.rb:
+ lack of support for methodcall_optkeys.
+
+Mon Oct 5 17:19:33 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator::public_api): take snapshot of
+ public method at the beginning time.
+
+ * lib/delegate.rb (SimpleDelegator#initialize): use
+ Delegator.public_api since public_method might be added after
+ initialization. [ruby-dev:39383]
+
+ * lib/delegate.rb (DelegateClass): ditto.
+
+Mon Oct 5 12:22:12 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_{times, shuffle_bang, sample}): reducing macro
+ calls inside of the loop by keeping pointers in local
+ variables. a patch from Masahiro Kanai (CanI) in [ruby-dev:39406].
+ It was found and fixed at Security and Programming camp 2009.
+
+ * string.c (rb_str_{times, split_m}): ditto.
+
+ * struct.c (rb_struct_{getmember, set, aref_id, aset_id}, {make,
+ inspect}_struct, recursive_{equal, hash, eql}): ditto.
+
+Mon Oct 5 00:09:57 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_method.c (basic_obj_respond_to): should not call
+ #respond_to_missing? for not implemented methods.
+ [ruby-core:25909]
+
+ * vm_method.c (rb_method_boundp): returns exceptional value 2 for
+ not-implemented methods when called from #respond_to? (specifies
+ by new constant NOEX_RESPONDS).
+
+ * method.h (enum): new constant NOEX_RESPONDS added.
+
+Sun Oct 4 22:16:29 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/cookie.rb: add default value to @@accept_charset
+ if have not defined. [ruby-dev:38987]
+
+ * lib/cgi/util.rb: ditto.
+
+Sun Oct 4 19:30:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (struct {dump,load}_arg): manage with dfree, instead
+ of using local variable which may be moved by context switch.
+ [ruby-dev:39425]
+
+Sun Oct 4 15:00:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (NATINT_LEN, pack_pack): suppressed warnings.
+
+Sun Oct 4 14:01:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems.rb (Gem::binary_mode): binary mode uses binary
+ encoding.
+
+Sun Oct 4 08:27:10 2009 Tanaka Akira <akr@fsij.org>
+
+ * enum.c (slicebefore_ii): use id_eqq.
+
+Sun Oct 4 06:40:09 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/setup (ruby.mmp): added macro RUBY_EXPORT to match the
+ change in dln.c
+
+Sun Oct 4 05:34:34 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/variable.rb: add TkVariable#to_hash,to_proc,to_int,
+ to_str,to_ary
+
+Sun Oct 4 00:59:52 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb: fix command-line option of
+ non-interactive terminal. [ruby-core:23016]
+
+Sun Oct 4 00:40:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rake/contrib: added. [ruby-core:25918]
+
+Sat Oct 3 22:14:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (bv_decls, bvar): fix for block variables.
+ [ruby-dev:39423]
+
+Sat Oct 3 21:19:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_add_method_def): no redefinition warning on
+ undef.
+
+Sat Oct 3 18:51:11 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_f_integer): now Integer() takes optional base
+ argument. base will be ignored for non string values.
+ suggested by Sam Carr at RubyFoo Lounge at London.
+
+ * test/ruby/test_integer.rb (TestInteger#test_Integer): test
+ updated.
+
+Sat Oct 3 04:34:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (assignable_gen): parser_yyerror takes two arguments.
+
+Sat Oct 3 04:07:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rake: updated to rake code to rake-0.8.7 source code base.
+
+ * lib/rake/loaders/makefile.rb (Rake::MakefileLoader#process_line):
+ respace dependencies too.
+
+Sat Oct 3 02:59:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (assignable_gen): get rid of macro collision.
+
+Sat Oct 3 02:49:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (ary_make_shared): should count frozen array itself.
+
+Sat Oct 3 01:01:20 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/unicode/name2ctype.h: Updated to Unicode 5.2.0.
+
+Sat Oct 3 01:01:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: workaround for regexp metacharacters of expr in
+ prefix path.
+
+Sat Oct 3 00:47:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ripper/dummyparser.rb (DummyParser): improvement by Magnus
+ Holm in [ruby-core:25884].
+ * remove scanner events which simply returned the first argument.
+ * all parser events are now automatically generated.
+ * simplify blocks.
+
+Sat Oct 3 00:43:52 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * method.h (rb_method_type_t): remove a comma at end of
+ enumerator list.
+
+Sat Oct 3 00:31:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * range.c (discrete_object_p): needs the argument type to get rid
+ of truncation on platforms where VALUE is larger than int.
+
+Fri Oct 2 22:30:15 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/unicode/name2ctype.h.blt, enc/unicode/name2ctype.kwd,
+ enc/unicode/name2ctype.src: Updated to Unicode 5.2.0.
+ NOTE: when you update these data, download UnicodeData.txt
+ and Scripts.txt from http://www.unicode.org/Public/UNIDATA/
+ and run
+ ruby1.9 tool/enc-unicode.rb UnicodeData.txt Scripts.txt \
+ > enc/unicode/name2ctype.kwd
+
+ * enc/unicode/Scripts.txt: removed.
+
+ * enc/unicode/UnicodeData.txt: removed.
+
+Fri Oct 2 20:49:19 2009 Tanaka Akira <akr@fsij.org>
+
+ * enum.c (enum_slice_before): take a pattern if no block given.
+
+Fri Oct 2 20:37:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (ripper_yylval_id, ripper_get_{id,value}): wrap ID by
+ NODE to track local variable assignment.
+
+ * parse.y (lvar_defined_gen, assignable_gen): enable local
+ variable check. [ruby-core:24923]
+
+ * parse.y (validate): use value only.
+
+ * test/ripper/test_parser_events.rb (test_local_variables): tests
+ based on a patch from Magnus Holm in [ruby-core:25885].
+
+Fri Oct 2 15:34:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (ruby_suppress_tracing): get rid of clobbering by
+ longjmp.
+
+Fri Oct 2 09:20:35 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * eval.c (rb_origenviron): remove unused old variable.
+ [ruby-dev:39412]
+
+Thu Oct 1 14:16:39 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/{setup.mak,Makefile.sub,win32.c},include/ruby/win32.h (RT_VER):
+ split compiler specification and runtime library specification.
+
+ * win32/Makefile.sub (LD_SHARED*, config.status): no need to embed
+ manifest if not exist.
+
+Thu Oct 1 13:23:14 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_getpid): simply call GetCurrentProcessId()
+ instead of calling MSVCRT's getpid().
+
+Wed Sep 30 13:15:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_add_method_def): show the location where
+ overwritten method was defined. [ruby-dev:39400]
+
+Wed Sep 30 00:37:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enumerator.c (enumerator_block_call): extracted.
+
+Wed Sep 30 00:00:25 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): escape as \x{XXXX} when the encoding is
+ other than Unicode. [ruby-dev:39388]
+
+Wed Sep 30 00:00:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (THREAD_MODEL): modified message when no thread
+ model is available.
+
+Tue Sep 29 23:17:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_scan_open_args): rb_utf8mac_encoding is undefined.
+
+Tue Sep 29 22:25:41 2009 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_struct_iv_get): deprecated because it is
+ not used and access internal structure.
+
+Tue Sep 29 22:19:36 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit/assertions.rb (assert_equal): use Time#subsec if nsec
+ is not enough to distinguish arguments.
+
+Tue Sep 29 21:16:35 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_scan_open_args): add UTF8-MAC to no-convertion encoding.
+
+Tue Sep 29 21:21:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (--enable-pthread): deprecated.
+
+Tue Sep 29 21:03:59 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/pp.rb (Kernel#pp): returns its arguments, like Kernel#p.
+ [ruby-dev:34830]
+
+Tue Sep 29 17:02:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/json/lib/json/common.rb (recurse_proc): removed needless
+ module_function, since visibility is already module_function.
+
+Tue Sep 29 13:48:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_method_definition_eq): non-null definition is
+ not equal to null definition.
+
+ * vm_method.c (rb_add_method_def): nothing to do if old method had
+ same definition. [ruby-dev:39397]
+
+Tue Sep 29 06:50:32 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): dump as \uXXXX when the
+ string is in Unicode. [ruby-dev:39388]
+
+Tue Sep 29 06:49:16 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_unicode_p): defined.
+ Returns 1 when the encoding is Unicode series
+ other than UTF-7 else 0.
+
+Tue Sep 29 04:14:08 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_filesystem_encoding): On Unix systems,
+ filesystem encoding should be locale encoding.
+ [ruby-dev:39393]
+
+Tue Sep 29 04:07:58 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * hash.c (rb_f_getenv): use rb_filesystem_str_new_cstr
+ instead of rb_str_new2.
+ ENV['PATH'].encoding should be Filesystem Encoding
+ because its content is related to filesystem.
+ see [ruby-dev:39393]
+
+ * hash.c (env_fetch): ditto.
+
+ * string.c (rb_filesystem_str_new): defined.
+
+ * string.c (rb_filesystem_str_new_cstr): ditto.
+
+ * include/ruby/intern.h (rb_filesystem_str_new): added.
+
+ * include/ruby/intern.h (rb_filesystem_str_new_cstr): ditto.
+
+Tue Sep 29 04:06:18 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/st.h: include inttypes.h and stdint.h.
+
+Tue Sep 29 00:07:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_f_getenv, env_fetch): env string may be overwritten.
+
+Mon Sep 28 23:30:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (load_lib, dln_find_exe_r): env string may be overwritten.
+
+ * dln.c (dln_{exit,loaderror,memerror,notimplement}): renamed as
+ independent names.
+
+ * dln.c (aix_loaderror): needs format string.
+
+Mon Sep 28 19:36:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (LK_ERR): with overlapped I/O, LockFileEx() returns
+ ERROR_IO_PENDING if the file is locked.
+
+Mon Sep 28 19:05:05 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * include/ruby/st.h: aligned prototype of st_hash_uint32 with function
+ definition (fixing compiling problem on cygwin)
+
+Mon Sep 28 12:13:15 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * method.h (enum): new method type VM_METHOD_TYPE_MISSING.
+
+ * vm_eval.c (vm_call0): invoking VM_METHOD_TYPE_MISSING method
+ objects.
+
+ * vm_insnhelper.c (vm_call_method): invoking method defined from
+ VM_METHOD_TYPE_MISSING.
+
+ * proc.c (rb_method_entry_arity): ditto.
+
+ * vm_method.c (rb_method_entry_eq): two method object wraps
+ method_missing with same symbol should be equal.
+ [ruby-core:25755]
+
+ * proc.c (mnew): should always return method object.
+
+Mon Sep 28 11:38:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y (parser_tokadd_string): the byte after ``\'' may be a part of
+ multibyte character, so pushback it. [ruby-list:46416]
+
+Mon Sep 28 10:06:38 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * stringio/stringio.c (strio_read): set ASCII-8BIT encoding
+ when length argument is given.
+
+Mon Sep 28 01:28:17 2009 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * Makefile.in (miniruby): suppress duplication warning on AIX.
+
+Mon Sep 28 01:13:25 2009 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * common.mk (ruby.imp): add text section [Bug #2064].
+
+ * common.mk (ruby.imp): do not export Init_*.
+
+Sun Sep 27 13:06:43 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/pp.rb (PP:ObjectMixin#pretty_print): delegates has no inspect
+ method. [ruby-core:25804]
+
+Sun Sep 27 12:01:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_buf_cat2): optimize since all second arguments are
+ constant literals.
+
+ * string.c (str_cat_char): unused now.
+
+ * string.c (rb_hash_{uint{32,},end}): removed.
+
+Sun Sep 27 11:58:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (optflags): add -fomit-frame-pointer by default.
+
+Sun Sep 27 11:28:15 2009 Tanaka Akira <akr@fsij.org>
+
+ * enum.c (enum_minmax): use struct for memo.
+ (enum_minmax_by): ditto.
+
+Sun Sep 27 10:21:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (warnflags): check all flags if each are available.
+
+Sun Sep 27 05:35:17 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/ext/generator/generator.c: Documentation patch by okkez.
+ [Bug #2075]
+
+Sun Sep 27 04:20:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): result's encoding should be fixed.
+ If default_internal is not nil, the encoding is default_internal.
+ Else if default_external is not nil, the encoding is default_external.
+ But the encoding is not ASCII-compatible, the encoding is replaced by
+ US-ASCII.
+ Characters in ASCII-incompatible encoding or non ASCII characters
+ in other than the encoding will be \xXX escaped.
+ [ruby-dev:39343]
+
+ * string.c (str_buf_cat2): defined.
+
+ * string.c (prefix_escape): removed.
+
+Sun Sep 27 05:37:45 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/missing-pips.c: Updated to work with the latest PIPS 1.6.
+
+ * symbian/setup: ditto.
+
+ * symbian/README.SYMBIAN: ditto.
+
+Sun Sep 27 02:00:46 2009 Koichi Sasada <ko1@atdot.net>
+
+ * string.c: use rename-macro instead of RUBY_ALIAS_FUNCTION_TYPE.
+ Because build causes failure.
+
+Sat Sep 26 23:29:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * st.c: moved murmur hash from string.c. [ruby-dev:39376]
+
+Sun Sep 26 00:24:14 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/setup: Updated .mmp file generation due to blockinlining.c removal.
+
+Sat Sep 26 22:39:24 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * Makefile.in(test-rubyspec): explicitly executes run subcommand of
+ mspec.
+
+ * spec/README: typo fix
+
+Sat Sep 26 17:53:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * st.c (COLLISION): improved collision log feature.
+
+ * string.c (hash): updated to MurmurHash 2.0 2009-09-19.
+
+ * string.c (rb_hash_start): fixed shift width on 128bit platform.
+
+ * include/ruby/intern.h (rb_hash_{start,uint32,uint,end}): fixed
+ prototypes.
+
+Sat Sep 26 13:26:55 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/net/http.rb (transport_request): Handle timeout error by
+ closing socket if exception raised. [ruby-core:20976]
+
+Sat Sep 26 12:08:17 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_method.c (rb_method_entry_eq): method defined from same
+ block/proc should be equal. [ruby-core:25755] [ruby-core:24791]
+
+Sat Sep 26 08:35:12 2009 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c (compile_string): rename to parse_string(), because
+ this function only parse String to NODE.
+
+Fri Sep 25 16:01:45 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c, include/ruby/win32.h (rb_w32_access): new function to
+ replace MSVCRT's access().
+ [ruby-core:25761]
+
+ * file.c (eaccess): workaround for recent MSVCRT is no longer needed.
+
+Fri Sep 25 13:04:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (mnew): fix for instance method of Module, BasicObject
+ and subclass of a class which overrides respond_to_missing?.
+ based on a patch from Nikolai Lugovoi <nlugovoi AT gmail.com> in
+ [ruby-core:25748].
+
+Fri Sep 25 11:56:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_mod_method_defined): should return true or false.
+
+Thu Sep 24 13:32:53 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * proc.c (mnew): generate method object that wraps method_missing,
+ when #respond_to_missing? is defined.
+
+ * test/ruby/test_object.rb (test_respond_to_missing): add test
+ suites for #respond_to_missing? changes.
+
+Thu Sep 24 09:41:42 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/mathn.rb (Bignum#**): Fixed bignum**fixnum that was broken when
+ requiring lib/mathn
+ [ruby-core:25740]
+
+Thu Sep 24 02:21:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb (atan): atan(Infinity) is
+ PI/2.
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb (atan): reduce loop with
+ the double-angle formula. based on a patch from Masahiro
+ Kanai (CanI) in [ruby-dev:39367].
+
+Thu Sep 24 01:14:18 2009 Yutaka Kanemoto <kanemoto@ruby-lang.org>
+
+ * dln.c (aix_loaderror): fixed typo. suppress warnings.
+
+Thu Sep 24 00:17:06 2009 Tanaka Akira <akr@fsij.org>
+
+ * enum.c (enum_minmax): reduce comparison.
+ (enum_minmax_by): ditto.
+
+Wed Sep 23 22:58:57 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/thread.rb (ConditionVariable#wait): add timeout argument.
+ [ruby-talk:346154]
+
+Wed Sep 23 21:25:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb (atan): refined.
+
+Wed Sep 23 17:08:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (assign_in_cond): also should warn assignment to dvar in
+ conditional. [ruby-dev:39363]
+
+Wed Sep 23 13:14:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_upto): keep first width. [ruby-dev:39361]
+
+Wed Sep 23 11:28:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/instruction.rb (make_header_prepare_stack): check stack
+ overflow. [ruby-core:25714]
+
+ * tool/instruction.rb (make_footer_stack_val): ditto.
+
+Wed Sep 23 05:03:36 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * proc.c (umethod_bind, rb_mod_define_method): Fix bug that
+ disallowed methods from singleton classes to be used for
+ UnboundMethod#bind, Kernel#define_singleton_method and
+ Module#define_method, even when that singleton class was of the right
+ kind_of. A patch by Shane O'Brien [ruby-core:25632]
+
+Tue Sep 22 22:56:48 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_method.c (basic_obj_respond_to): new function to fundamental
+ behavior for #respond_to?
+
+ * vm_method.c (basic_obj_respond_to): calls #respond_to_missing
+ method if overridden, to check responsiveness of methods
+ implemented by #method_missing.
+
+Tue Sep 22 16:34:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * st.c (st_table_entry, st_get_key): use st_index_t.
+
+Tue Sep 22 16:28:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regenc.h (PosixBracketEntryType): constified.
+
+ * regenc.h (PosixBracketEntryInit): suppress warnings.
+
+ * regerror.c (onig_error_code_to_str, onig_snprintf_with_pattern):
+ fixed type.
+
+ * regparse.c (st_str_end_key, str_end_cmp, str_end_hash):
+ constified.
+
+ * tool/transcode-tblgen.rb (transcode_generated_code): fixed type.
+
+Tue Sep 22 10:29:06 2009 Tanaka Akira <akr@fsij.org>
+
+ * enum.c (enum_chunk): new method Enumerable#chunk.
+ * enum.c (enum_slice_before): new method Enumerable#slice_before.
+ [ruby-dev:38392] [ruby-dev:39240]
+
+Tue Sep 22 05:58:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c, cont.c, gc.c, insns.def, iseq.c, iseq.h, process.c,
+ thread.c, vm.c, vm_core.h, vm_dump.c, vm_eval.c,
+ vm_insnhelper.c, vm_method.c, template/insns_info.inc.tmpl,
+ tool/instruction.rb: fixed types.
+
+Tue Sep 22 05:04:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/lib/bigdecimal/{ludcmp,math}.rb: depend on
+ bigdecimal.
+
+ * ext/bigdecimal/lib/bigdecimal/*.rb: made module functions.
+
+Tue Sep 22 04:47:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (GetVpValue): support conversion from
+ Rational. [ruby-core:25697]
+
+Tue Sep 22 04:43:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, win32/Makefile.sub (INSNS): depend on tools.
+
+Tue Sep 22 01:10:22 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * ossl_ocsp.c (ossl_ocspres_to_der): Bug fix in Response#to_def.
+ Patch by Chris Chandler [ruby-core:18411]
+
+Tue Sep 22 01:10:02 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * ossl_config.c (ossl_config_add_value_m, ossl_config_set_section):
+ Check if frozen (or untrusted for $SAFE >= 4) [ruby-core:18377]
+
+Mon Sep 21 17:12:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (proc_binding): allow proc from method. [ruby-core:25589]
+
+ * vm.c (collect_local_variables_in_env): block iseq can be NULL.
+
+Mon Sep 21 10:50:37 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (rb_time_succ): make Time#succ obsolete since time is not
+ a discrete value.
+
+ * range.c (discrete_object_p): treat time objects specially to
+ determine discrete values, since time objects have #succ yet are
+ discrete (for now at least).
+
+Mon Sep 21 10:13:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (cont_new, cont_capture, fiber_t_alloc): needs already
+ running thread. cf. [ruby-core:25681]
+
+Mon Sep 21 00:07:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/lib/bigdecimal/math.rb (sin, cos, atan, exp, log):
+ improved precision and performance. based on a patch from Makoto
+ Yamashita in [ruby-core:25600] and [ruby-core:25602].
+
+Sun Sep 20 11:11:34 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * struct.c (rb_struct_equal, rb_struct_eql): Handle comparison of
+ recursive structures [ruby-core:24759]
+
+ * range.c (range_eq, range_eql): ditto for ranges
+
+Sat Sep 19 17:46:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (ENABLE_VM_OBJSPACE): socklist needs st_table in
+ rb_w32_sysinit(), before object space initialization.
+
+Sat Sep 19 17:32:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (GlobPathValue), file.c (rb_get_path_check): path names
+ must be ASCII compatible.
+
+Sat Sep 19 00:02:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_type): forward declaration to suppress a
+ warning. a patch from Naohisa Goto at [ruby-dev:39350]
+
+Fri Sep 18 23:59:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (GlobPathValue): adjust return types. based on a patch
+ from Naohisa Goto at [ruby-dev:39350].
+
+Fri Sep 18 23:51:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (r_object0): entry regexp object before its encoding
+ name. [ruby-core:25625]
+
+Fri Sep 18 16:29:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (eval.o): needs vm.h.
+
+ * eval.c (ruby_cleanup): destruct current VM before exit.
+
+ * gc.c (rb_objspace_free): free object space.
+
+ * vm.c (ruby_vm_destruct): destruct and free VM struct.
+
+Fri Sep 18 16:15:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each), parse.y (stmt, arg): arg_concat()
+ on op_asgn was inversed. [ruby-core:25629] [Bug #2050]
+
+Fri Sep 18 16:06:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (GlobPathValue): glob allows null bytes as separators.
+
+Fri Sep 18 10:11:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * doc/re.rdoc: use rdoc mode.
+
+ * misc/rdoc-mode.el: added.
+
+Fri Sep 18 09:02:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/rdoc.rb (RDoc::RDoc#parse_files): don't branch by
+ RUBY_VERSION.
+
+ * lib/rdoc/rdoc.rb (RDoc::RDoc#parse_files): emacs local variables
+ are delimited by a semicolon. supported Vim style.
+
+Fri Sep 18 07:06:41 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/fileutils/test_fileutils.rb: add a test for [ruby-dev:39345]
+
+Fri Sep 18 06:47:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (push_glob): str should be a string always.
+
+ * dir.c (rb_push_glob, dir_globs): use #to_path to convert non-
+ string values. cf. [ruby-dev:39345]
+
+Fri Sep 18 06:36:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (rm_f, rm_rf): FileUtils.rm can take an array.
+ [ruby-dev:39345]
+
+ * lib/mkmf.rb (create_header): open in binmode.
+
+Thu Sep 17 18:34:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (vm_xrealloc): free as like standard free if size is zero.
+
+Thu Sep 17 15:41:02 2009 Koichi Sasada <ko1@atdot.net>
+
+ * eval_intern.h: use rb_node_newnode() directly.
+
+Thu Sep 17 15:01:32 2009 Koichi Sasada <ko1@atdot.net>
+
+ * blockinlining.c: removed.
+
+ * README.EXT: ditto.
+
+ * README.EXT.ja: ditto.
+
+Thu Sep 17 13:50:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_s_debug_set): set level, not only boolean.
+
+Thu Sep 17 13:12:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/parser/ruby.rb (RDoc::Parser::Ruby): parse also rdoc
+ files.
+
+ * doc/re.rdoc: renamed from re.rb.
+
+Thu Sep 17 09:37:28 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * doc/re.rb: New document for Ruby's fork of Oniguruma.
+ written by Run Paint Run Run [ruby-core:25420]
+
+ * re.c: import document in doc/re.rb.
+
+ * .document: add doc/re.rb.
+
+Thu Sep 17 06:03:40 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb (Matrix#rank): Two bug fixes. One made
+ Matrix[[0,0],[0,0],[1,0]].rank raise a NoMethodError while the other
+ one had Matrix[[0,1],[0,0],[1,0]].rank raise a TypeError.
+
+Thu Sep 17 06:02:04 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: Optimizations
+
+Thu Sep 17 00:36:01 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_mdump): error message refined.
+
+Wed Sep 16 19:27:43 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_thread.rb (TestThread#test_recursive): remove
+ implementation dependent test.
+
+Wed Sep 16 17:42:52 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.status): install-capi needs docdir. And,
+ mandir, infodir and ridir are also depend on datadir like docdir.
+
+Wed Sep 16 17:20:49 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb (Matrix#/): Fix obvious bug
+
+Wed Sep 16 16:59:34 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (DOCTARGETS): rdoc is default.
+
+Wed Sep 16 16:27:40 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub: typo.
+
+Wed Sep 16 16:20:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (CAPITARGET): enable iff doxygen is available.
+
+ * configure.in (INSTALLDOC): enable if rdoc or doxygen are enabled.
+
+ * common.mk (docs): target to make documents.
+
+ * Makefile.in, win32/Makefile.sub (install-{all,nodoc}): trigger
+ by $(INSTALLDOC) from install.
+
+Wed Sep 16 13:39:10 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb (determinant): Bug fix where determinant failed on
+ some matrices [ruby-core:23597]
+
+Wed Sep 16 13:30:20 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/matrix.rb: trivial optimizations
+
+Wed Sep 16 13:15:17 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * template/Doxyfile.tmpl: RbConfig::CONFIG['DOT'] is sometimes nil.
+
+Wed Sep 16 10:14:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * README.EXT, README.EXT.ja (rb_protect, rb_jump_tag): added.
+
+Wed Sep 16 10:12:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (main): makes also encs.
+
+Wed Sep 16 06:30:07 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * thread.c (rb_exec_recursive_outer, rb_exec_recursive): Added method
+ to short-circuit to the outermost level in case of recursion
+
+ * test/ruby/test_thread.rb (test_recursive_outer): Test for above
+
+ * hash.c (rb_hash_hash): Return a sensible hash for in case of
+ recursion [ruby-core:24648]
+
+ * range.c (rb_range_hash): ditto
+
+ * struct.c (rb_struct_hash): ditto
+
+ * array.c (rb_array_hash): ditto
+
+ * test/ruby/test_array.rb (test_hash2): test for above
+
+Wed Sep 16 06:17:33 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * vm_eval.c (rb_catch_obj, rb_catch, rb_f_catch): No longer use the
+ obsolete function rb_iterate.
+
+Tue Sep 15 21:48:12 2009 Tanaka Akira <akr@fsij.org>
+
+ * configure.in (--enable-frame-address): removed.
+
+Tue Sep 15 15:21:01 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/{configure.bat,Makefile.sub} (RDOCTARGET): the meaning of this
+ macro was changed at r24923.
+
+Tue Sep 15 15:16:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (install-rdoc), configure.in (RDOCTARGET): removed
+ circular dependency. [ruby-dev:39339]
+
+Tue Sep 15 15:09:13 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/configure.bat: need a space before a tab to output the tab by
+ echo.
+
+Tue Sep 15 14:24:52 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_split_m): use rb_isspace when the
+ string may be ASCII-incompatible.
+
+ * string.c (rb_str_lstrip_bang): ditto.
+
+ * string.c (rb_str_rstrip_bang): ditto.
+
+Tue Sep 15 12:12:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_USE_BUILTIN_FRAME_ADDRESS): check after real
+ target CPU is set.
+
+ * configure.in (RUBY_UNIVERSAL_ARCH): check real target CPU after
+ AC_PROG_CC.
+
+Tue Sep 15 06:42:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (install-all): target to install all.
+
+ * tool/rbinstall.rb (parse_args): accept all install targets.
+
+ * tool/rbinstall.rb (parse_args): show help message and exit if
+ rbconfig could not load.
+
+Tue Sep 15 04:25:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RDOCTARGET): use install-all. [ruby-dev:39334]
+
+Tue Sep 15 03:00:35 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_lstrip_bang): use ascii_isspace(). [ruby-dev:39322]
+
+ * string.c (rb_str_rstrip_bang): ditto.
+
+ * string.c (rb_str_split_m): ditto.
+
+Mon Sep 14 16:39:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * debug.c, parse.y: fixed types.
+
+ * node.h (nd_line): limit to int.
+
+Mon Sep 14 11:23:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, common.mk, */configure.bat (rdoc): make before
+ install if rdoc is enabled. [ruby-dev:39325]
+
+Mon Sep 14 10:56:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (check-ruby): run all test of ruby itself.
+
+Mon Sep 14 10:44:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (RB_TYPE_P): should not use BUILTIN_TYPE for
+ special constants.
+
+Mon Sep 14 10:08:19 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): use rb_enc_mbc_to_codepoint
+ because we already knew char is found and got length.
+
+Mon Sep 14 09:59:03 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/ruby.h (NUM2INT, NUM2LL, INT2NUM, UINT2NUM),
+ (LONG2NUM, ULONG2NUM, NUM2CHR): get rid of backward references of
+ macros. the code couldn't compile by VC.
+
+Mon Sep 14 08:33:11 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/net/http.rb (each_*): return enumerator if no block present.
+ Patch by Arthur Schreiber [ruby-core:18310]
+
+Mon Sep 14 06:42:21 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/cgi/cookie.rb (value): Keep CGI::Cookie#value in sync with the
+ cookie itself. Based on a patch by Arthur Schreiber [ruby-core:17634]
+
+Mon Sep 14 05:21:12 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/net/http.rb (fetch): Handle properly default values; a patch by
+ Arthur Schreiber [ruby-core:18308]
+
+Mon Sep 14 04:07:09 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/set.rb (==): Optimization; patch by Arthur Schreiber [ruby-core:17203]
+
+Mon Sep 14 03:30:23 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/pre-build: added rule to generate id.h for Symbian build.
+
+ * symbian/configure.bat: fixed harmless error message.
+
+Sun Sep 13 22:18:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_mod_remove_const): do not change VM state when an
+ exception will occur.
+
+Sun Sep 13 21:25:01 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (oletypelib_get_libattr): some refactoring
+ by adding oletypelib_get_libattr.
+
+Sun Sep 13 20:55:19 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (oletypelib_get_typelib): some refactoring
+ by adding oletypelib_get_typelib.
+
+Sun Sep 13 20:18:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_sflag, proc_options, load_file_internal): fixed
+ types.
+
+Sun Sep 13 19:39:59 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c: some refactoring.
+
+Sun Sep 13 19:38:34 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (load_file_internal): no need to define DATA when error.
+
+Sun Sep 13 18:48:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (XLDFLAGS): link startup code with ObjC support.
+
+Sun Sep 13 13:38:00 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * thread.c (recursive_*): refactored the access to the inspect
+ table used by rb_exec_recursive_*. The functions recursive_push,
+ pop and check now assume a valid hash table as their first
+ argument. Added documentation.
+
+Sun Sep 13 12:07:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (SYM2ID): needs parens.
+
+ * include/ruby/ruby.h (NUM2INT, NUM2LL, INT2NUM, UINT2NUM),
+ (LONG2NUM, ULONG2NUM, NUM2CHR, rb_type_p, rb_special_const_p):
+ GCC specific optimization.
+
+Sun Sep 13 11:06:12 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb (OpenURI::Meta#content_type_parse): strip quotes.
+
+Sun Sep 13 09:38:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/prime.rb (EratosthenesGenerator#initialize): call super.
+ (TrialDivisionGenerator, Generator23): ditto. [ruby-core:25539]
+
+Sun Sep 13 09:34:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_add_method_def): no warning for inherited
+ method.
+
+Sun Sep 13 08:30:30 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c: fix WIN32OLE_TYPELIB.new when the 1st
+ argument is the non-registered file.
+
+Sun Sep 13 02:08:43 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_core.h: change members of iseq_inline_cache_entry.
+ make cache value members to one union member "ic_value".
+
+ * insns.def: ditto.
+
+ * vm_insnhelper.c: ditto.
+
+Sun Sep 13 01:15:49 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb (URI::FTP#buffer_open): fix the %2F handling.
+
+Sun Sep 13 00:46:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (CALL_METHOD_HOOK): refined with macro.
+
+ * vm_method.c (rb_remove_method_id): no definition body is
+ undefined.
+
+ * vm_method.c (rb_add_method, rb_add_method_me): call method added
+ hook after definition. [ruby-core:25536]
+
+ * vm_method.c (rb_alias): hooks are called from rb_add_method_def.
+
+Sat Sep 12 22:47:24 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb (URI::FTP#buffer_open): use the port specified in
+ the URI.
+
+Sat Sep 12 17:31:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (GCC): subst for GCC depending extension libraries.
+
+Sat Sep 12 07:52:59 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (EVENTSINK_Invoke): initialize result
+ variant value.
+
+Fri Sep 11 21:52:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * NEWS: update for 1.9.2. based on a patch from Run Paint Run Run
+ in [ruby-core:25534].
+
+Fri Sep 11 21:38:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: check for real target cpu on darwin 10.
+
+Fri Sep 11 18:51:57 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/fileutils: use require_relative to require fileasserts.
+
+Fri Sep 11 14:22:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (debugflags): use gdb by default on linux and
+ darwin.
+
+ * configure.in (XLDFLAGS): keep ARCHFILE macro on AIX.
+
+ * configure.in (RUBY_REPLACE_TYPE): define typename to default
+ type if the latter is found.
+
+Fri Sep 11 13:57:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/win32.h (fstat): override if large file support is
+ enabled.
+
+Fri Sep 11 11:33:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/config.{guess,sub}: updated to automake-1.11.
+
+Fri Sep 11 10:38:33 2009 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTPHeader::encode_kvpair): also call to_s
+ to k. A patch from swdyh <youhei@gmail.com>
+ http://github.com/swdyh/ruby/tree/c847f43c2ccb679b9ff728f8b1b16c6ceeb57f39
+
+Fri Sep 11 09:45:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (aix_loaderror): get rid of using uninitialized value in the
+ case loadquery fails. fixed wrong index variable usage. see
+ [ruby-core:25479].
+
+Fri Sep 11 07:52:43 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * unicode.c (onigenc_unicode_property_name_to_ctype):
+ ignore case of properties.
+
+ * tool/enc-unicode.rb: downcase properties list.
+
+ * enc/unicode/name2ctype.h, enc/unicode/name2ctype.h.blt,
+ enc/unicode/name2ctype.kwd, enc/unicode/name2ctype.src:
+ follow above.
+
+Fri Sep 11 05:00:19 2009 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h (rb_data_type_t): Add comments.
+ And add a member variable "data", a multi-purpose storage
+ area for rb_data_type.
+
+Fri Sep 11 02:14:21 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/dl: use require_relative to require test_base.rb.
+
+Fri Sep 11 02:06:44 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * parse.y (rb_char_to_option_kcode): ASCII-8BIT should
+ also delay.
+
+ * re.c (parser_regx_options): return rb_ascii8bit_encindex on
+ ASCII-8BIT. [ruby-dev:39300]
+
+Fri Sep 11 01:14:00 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+
+ * lib/net/http.rb (fetch): rdoc fix, patch by Arthur Schreiber.
+ [ruby-core:18309].
+
+Thu Sep 10 23:00:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): fix for parallel execution.
+ [ruby-core:25509]
+
+Thu Sep 10 21:22:01 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/dl/test_cptr.rb (test_free=): test SEGV at first.
+ [ruby-dev:39269]
+
+Thu Sep 10 21:20:59 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/envutil.rb (assert_normal_exit): Don't use
+ AssertionMessage.
+
+Thu Sep 10 15:59:05 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regparse.c (UNKNOWN_ESC_WARN): added.
+
+ * regparse.c (conv_backslash_value): Warn unknown
+ escaped chars in regexp. [ruby-dev:39104]
+
+Wed Sep 9 22:02:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/fileutils.rb (FileUtils::Entry_#copy_file): open the source
+ file first to ensure it can be copied. [ruby-core:25498]
+
+Wed Sep 9 21:20:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_data_type): typed.
+
+ * ext/dl/cfunc.c (dlcfunc_data_type): typed.
+
+ * ext/dl/cptr.c (dlptr_data_type): ditto.
+
+ * ext/dl/handle.c (dlhandle_data_type): ditto.
+
+Wed Sep 9 17:17:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (parser_regx_options): only one kcode should effect
+ options [ruby-core:25411]
+
+Wed Sep 9 15:46:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_feature_provided): fixed for autoloading extension
+ library without suffix.
+
+Wed Sep 9 15:24:32 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * include/ruby/st.h : revert previous commit.
+
+ * ext/objspace/objspace.c : remove st_memsize declare.
+
+Wed Sep 9 14:07:19 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * include/ruby/st.h : fix duplicate st_memsize declare.
+
+Wed Sep 9 13:33:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_autoload): initialize typed data.
+
+Wed Sep 9 13:10:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * st.c (st_free_table): constified.
+
+Wed Sep 9 13:09:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (dir_data_type): typed.
+
+ * enumerator.c (enumerator_data_type): typed.
+ (yielder_data_type, generator_data_type): ditto.
+
+ * error.c (name_err_mesg_data_type): typed.
+
+ * file.c (stat_data_type): typed.
+
+ * thread.c (thgroup_data_type, mutex_data_type, barrier_data_type):
+ typed.
+
+ * time.c (time_data_type): typed.
+
+ * transcode.c (econv_data_type): typed.
+
+ * variable.c (autoload_data_type): typed.
+
+Wed Sep 9 11:11:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_data_type_struct): constified dsize.
+
+Wed Sep 9 11:07:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (cont_memsize): fixed wrong expression on IA64.
+
+Wed Sep 9 10:51:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (cont_restore_1, rb_cont_call): should be Fiber.
+
+Wed Sep 9 00:27:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (cont_data_type, fiber_data_type): typed.
+
+Tue Sep 8 22:37:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb, lib/tmpdir.rb (Tmpname): extracted new module.
+ [ruby-dev:39197]
+
+Tue Sep 8 22:18:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * st.c (st_init_*table_with_size): use st_index_t.
+
+ * include/ruby/st.h (st_hash_func): use st_index_t.
+
+Tue Sep 8 21:48:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (rb_thread_mark): mark callers iseqs. [ruby-core:25474]
+ [Bug #2062]
+
+Tue Sep 8 11:53:58 2009 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c (iseq_mark): no need to mark inline cache entries.
+
+ * insns.def (onceinlinecache, setinlinecache): save a value
+ to mark cached value.
+
+Tue Sep 8 08:32:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/dl/test_{cfunc,ptr}.rb: added tests from Aaron Patterson.
+ see [ruby-dev:39249].
+
+Mon Sep 7 17:22:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_tell): adjustment for ungotten data.
+
+Mon Sep 7 17:13:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_encname_bom_p): removed magic number.
+
+Mon Sep 7 12:26:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/irb/inspector.rb (IRB::INSPECTORS.def_inspector): support
+ object without #inspect defined. a patch from Daniel
+ Bovensiepen. [ruby-core:25200]
+
+Mon Sep 7 05:38:34 2009 Koichi Sasada <ko1@atdot.net>
+
+ * insns.def (opt_*): add IC operands.
+
+ * vm_insnhelper.h (CALL_SIMPLE_METHOD): add a version which
+ use an inline cache. USE_IC_FOR_SPECIALIZED_METHOD macro
+ switches the behaviour. This change also removes
+ CALL_SIMPLE_METHOD_IC() macro.
+
+ * tool/instruction.rb: fix elimination process to ignore
+ variable "ic".
+
+Mon Sep 7 05:21:09 2009 Koichi Sasada <ko1@atdot.net>
+
+ * Makefile.in, common.mk: move a id.h generation rule.
+
+Mon Sep 7 05:07:59 2009 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/driver.rb: remove RUBY_VERSION output.
+
+Mon Sep 7 05:06:16 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c: rename macro name ENABLE_IC_FOR_IVAR
+ to USE_IC_FOR_IVAR.
+
+Mon Sep 7 03:21:40 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/common.rb (URI.escape): obsoleted.
+
+ * lib/uri/common.rb (URI.unescape): ditto.
+
+Sun Sep 6 18:13:54 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.h (CALL_SIMPLE_METHOD_IC): make a macro
+ invoke simple method with inline cache entry.
+
+ * insns.def (opt_length, opt_size): fix to use inline method cache.
+
+Sun Sep 6 17:47:21 2009 Koichi Sasada <ko1@atdot.net>
+
+ * template/id.h.tmpl: fix this.
+
+ * id.h: removed. Because this file is generated automatically.
+
+Sun Sep 6 17:31:28 2009 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_specialized_instruction), insns.def (opt_size):
+ optimize #size methods (by specialized instruction).
+
+ * id.c, id.h, vm.c, vm_insnhelper.h: ditto.
+
+Sun Sep 6 16:13:06 2009 Koichi Sasada <ko1@atdot.net>
+
+ * insns.def (setinstancevariable), vm_insnhelper.c (vm_setivar):
+ fix to use inline cache (trivial optimization).
+
+Sun Sep 6 10:34:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c: fixed rdoc, a patch from Nobuhiro IMAI at [ruby-core:25433].
+
+Sun Sep 6 05:19:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c: Add rdoc for ARGF.
+ contributed by Run Paint Run Run. [ruby-core:23854]
+
+Sat Sep 5 15:21:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): op_asgn to aref should return rhs.
+ [ruby-core:25387]
+
+Sat Sep 5 10:38:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): &&= and ||= should return rhs.
+ [ruby-dev:39163] (#1996), [ruby-core:25143]
+
+Sat Sep 5 08:51:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * re.c (update_char_offset): position should be long.
+
+ * re.c (match_hash, match_equal): new methods. [ruby-core:24748]
+
+ * re.c (reg_match_pos, rb_reg_eqq, rb_reg_s_quote): get rid of use
+ VALUE as int.
+
+Fri Sep 4 20:40:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (round): added declaration. [ruby-dev:39222]
+
+Fri Sep 4 06:15:39 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (Init_Dir): alias Dir#path to Dir#to_path. [ruby-core:25326]
+
+Fri Sep 4 04:49:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (random_rand): fixed rdoc. [ruby-core:25332]
+
+Fri Sep 4 04:46:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/webrick/httpservlet/abstract.rb (do_OPTIONS): method names
+ are symbols now. [ruby-core:24580]
+
+Thu Sep 3 17:56:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (literal_concat_gen): concat body from dstr instead of
+ nd_next. [ruby-core:25284]
+
+Wed Sep 2 16:49:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * math.c (math_gamma): get rid of direct comparison between too
+ big double and integer, with gcc on x86_64. [ruby-core:25257]
+
+Wed Sep 2 13:47:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * math.c (domain_check): simplified.
+
+Wed Sep 2 11:32:24 2009 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (obj_free): fix to free method table (fix memory leak).
+
+Wed Sep 2 07:42:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/instruction.rb (RubyVM::InstructionsLoader#make_stackcaching_insns):
+ simplified.
+
+Wed Sep 2 02:32:46 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/lib/json/common.rb (NaN): Change definition
+ of NaN to 0.0/0 for 1.8/1.9 compatibility.
+
+Wed Sep 2 01:16:32 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json: Update to JSON 1.1.9.
+
+Tue Sep 1 19:56:28 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_eval.c (eval_string_with_cref): fix to check local_table_size.
+ [ruby-dev:39205] [Bug #2024]
+
+Mon Aug 31 16:20:41 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * class.c (make_singleton_class): variable name changed.
+ removed an unnecessary conditional.
+
+Mon Aug 31 14:17:09 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * class.c: refactored singleton class related matters.
+ Handles eigenclasses and plain classes transparently.
+
+ (make_metaclass): renamed from make_metametaclass.
+ (METACLASS_OF): new utility macro
+ (META_CLASS_OF_CLASS_CLASS): ditto.
+ (ENSURE_EIGENCLASS): ditto.
+ (make_singleton_class): extracted from rb_singleton_class.
+ (boot_defclass): moved from object.c
+ (Init_class_hierarchy): extracted from Init_Object.
+ (rb_make_metaclass): refactored.
+ (singleton_class_of): extracted from rb_singleton_class.
+ (rb_singleton_class): refactored.
+ (rb_define_singleton_method): it needs a metaclass only
+ but not its metametaclass.
+
+ * object.c: booting class hierarchy was moved to class.c
+ for keeping dependency between compilation units least.
+ (Init_Object): extracting the booting into
+ Init_class_hierarchy.
+ (boot_defclass): moved to class.c.
+
+Sun Aug 30 23:44:09 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (find_time_t): use mktime for the first guess.
+
+Sun Aug 30 16:38:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_enc_symname2_p): not depend on nul terminator.
+
+Sun Aug 30 14:11:45 2009 Tanaka Akira <akr@fsij.org>
+
+ * common.mk: dependencies updated.
+
+Sun Aug 30 13:00:11 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (add): shortcut implemented for fixnums.
+ (sub): ditto.
+ (mul): ditto.
+
+Sun Aug 30 10:24:43 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (eq): apply RTEST.
+ (ne): ditto.
+ (add): avoid method dispatch for bignums.
+ (sub): ditto.
+ (mul): ditto.
+ (mod): ditto.
+
+Sun Aug 30 09:45:11 2009 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigmul1_single): new function specialized respect to
+ multiply two single digit bignums.
+ (bigmul0): use bigmul1_single.
+
+Sun Aug 30 03:59:43 2009 Tanaka Akira <akr@fsij.org>
+
+ * timev.h (TIME_SCALE): defined as 1000000000.
+ (struct vtm): subsec is replaced by subsecx.
+ subsec * TIME_SCALE == subsecx.
+
+ * time.c: avoid rational in most cases.
+ (struct time_object): timev is replaced by timexv.
+ timev * TIME_SCALE == timexv.
+
+Sun Aug 30 03:17:25 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (init_leap_second_info): use TIMET_MAX.
+
+Sun Aug 30 01:15:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/zlib/zlib.c (gzfile_read_all): use gzfile_newstr;
+ set and convert its encoding. [ruby-dev:38304]
+
+Sat Aug 29 20:40:02 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * vm_eval.c (rb_call0): gets rid of checking method cache twice.
+
+ * method.h (rb_get_method_entry): added a prototype of the function.
+ (rb_method_entry_without_cache): more friendly name.
+
+Sat Aug 29 12:16:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tmpdir.rb (Dir.mktmpdir): rolled back r24699. [ruby-dev:39193]
+
+Sat Aug 29 03:27:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#make_tmpname): removed thread race
+ condition.
+
+ * lib/tmpdir.rb (Dir.mktmpdir): ditto.
+
+Fri Aug 28 20:29:34 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/tempfile.rb (Tempfile#callback): Debug information should be
+ output to stderr, not stdout; pointed out by akira yamada.
+ cf. [ruby-dev:39072]
+
+Fri Aug 28 20:34:24 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c: use SafeStringValue instead of
+ Check_SafeStr.
+
+Fri Aug 28 13:30:43 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread.c (do_select): rollback r24680. void struct initializer is
+ invalid.
+
+Fri Aug 28 11:45:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * method.h (rb_method_definition_t): split from rb_method_entry_
+ to deal aliases. [ruby-dev:39165]
+
+ * proc.c (struct METHOD): contains rb_method_entry_t copy.
+
+Fri Aug 28 10:21:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (iseq_mark): skip outdated cache entries.
+
+ * vm_core.h ({GET,INC}_VM_STATE_VERSION): moved from
+ vm_insnhelper.h.
+
+Fri Aug 28 07:25:25 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enumerator.c (next_i): typo fixed (reached at end -> reached an
+ end). pointed out by James Edward Gray II at LoneStar RubyConf.
+
+Thu Aug 27 18:31:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_remove_method_id): exported.
+
+ * numeric.c (num_sadded): fix for non-ascii method name.
+
+Thu Aug 27 14:32:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_preprocess_dregexp): set encoding as ASCII-8BIT
+ when /n is specified and the embedded string is escaped text.
+
+Thu Aug 27 13:51:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (random_rand): random integer can be a fixnum for
+ bignum range. [ruby-dev:39173]
+
+Thu Aug 27 08:16:34 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/strscan/strscan.c (strscan_set_string): set string should not be
+ duped or frozen, because freezing it causes #concat method failure,
+ and unnecessary to dup without freezing. a patch from Aaron
+ Patterson at [ruby-core:25145].
+
+Thu Aug 27 02:06:11 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * Makefile.in (enc/unicode/name2ctype.kwd):
+ remove rules to generate name2ctype.kwd from
+ UnicodeData.txt and Scripts.txt.
+ if you want to generate, use tool/enc-unicode.rb.
+
+Thu Aug 27 02:00:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * unicode.c (PROPERTY_NAME_MAX_SIZE): use MAX_WORD_LENGTH.
+
+Wed Aug 26 23:59:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (random_rand): refined error message.
+
+ * random.c (random_rand): fixed for edge cases of ranges.
+ [ruby-dev:39166]
+
+Wed Aug 26 21:49:23 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/tempfile.rb: add documents from Hongli Lai's fork.
+ cf [ruby-core:25131].
+
+Wed Aug 26 19:51:13 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/mkconfig.rb (program_transform_name): fix for multiple trans
+ rules for autoconf 2.61 or earlier.
+
+ * tool/rbinstall.rb (program_transform_name): ditto.
+
+Wed Aug 26 19:20:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (random_rand): unified random_int and random_float.
+ [ruby-dev:39158]. and fixes [ruby-core:24655], [ruby-core:24677],
+ [ruby-core:24679].
+
+Wed Aug 26 18:59:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/test_tempfile.rb: merged from Hongli Lai's fork.
+ cf [ruby-core:25131].
+
+Wed Aug 26 18:49:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#close!): should not undefine finalizer
+ by just unlink.
+
+Wed Aug 26 17:00:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/mkconfig.rb (program_transform_name): fix for autoconf 2.61
+ or earlier.
+
+Wed Aug 26 14:34:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#close!, Tempfile#path): added side
+ notes from Hongli Lai's fork.
+
+ * lib/tempfile.rb (Tempfile#unlink, Tempfile.callback): do nothing
+ any more once unlinked.
+
+Wed Aug 26 13:48:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#unlink): reverted r23494, since the
+ usage in RubyInline is considered wrong.
+
+Wed Aug 26 12:36:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (collect_local_variables_in_env): skips internal variables.
+ [ruby-core:25125]
+
+Tue Aug 25 23:51:07 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/enc-unicode.rb: added for generate name2ctype.kwd.
+ contributed by Run Paint Run Run [ruby-core:24775]
+
+ * enc/unicode.c (CodeRanges): move definitions to name2ctype.h.
+
+ * enc/unicode/name2ctype.h.blt, enc/unicode/name2ctype.kwd,
+ enc/unicode/name2ctype.src: updated to v5.1.
+
+ * enc/unicode/UnicodeData.txt, enc/unicode/Scripts.txt: added v5.1.
+
+ * Makefile.in: add rule to generate name2ctype.kwd from
+ UnicodeData.txt and Scripts.txt.
+
+Tue Aug 25 22:31:51 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in (MKDIR_P): Set 'mkdir -p' to MKDIR_P
+ when AC_PROG_MKDIR_P doesn't set MKDIR_P.
+
+Tue Aug 25 17:38:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (rb_big_clone, bigmul1_normal, bigdivrem): trivial
+ optimization.
+
+ * bignum.c (big2dbl): truncates zero digits to get rid of possible
+ underflow.
+
+Tue Aug 25 12:22:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (enc/unicode/name2ctype.h): explicitly ignores the
+ result of diff and turns -e option off, because *BSD make passes
+ it by default.
+
+Tue Aug 25 02:16:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (DLDFLAGS): use linker_flag and changed undefined
+ and multiply_defined behaviors. cf [ruby-core:25086].
+
+Mon Aug 24 21:31:37 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker/base.rb, test/rss/test_maker_2.0.rb: fix a bug
+ that RSS Maker doesn't accept 'false' as guid's isPermaLink.
+ Reported by Joe Holt. Thanks!!!
+
+Mon Aug 24 18:58:56 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/missing.h (vsnprintf): rollback a part of r24179, because
+ it's meaningless.
+
+Mon Aug 24 16:35:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * st.c (st_delete_safe): deals with packed entries.
+ [ruby-core:25080]
+
+ * st.c (st_cleanup_safe): ditto. [ruby-core:25081]
+
+Mon Aug 24 13:24:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (MAKEDIRS): define.
+
+ * common.mk (capi): using $(MAKEDIRS), so depends on $(PREP).
+
+Mon Aug 24 13:14:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_CHECK_SIZEOF): set cross_compiling only when
+ universal binary.
+
+Mon Aug 24 12:55:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (enc/unicode/name2ctype.h): use md instead of
+ $(MAKEDIRS).
+
+Sun Aug 23 15:22:45 2009 Tanaka Akira <akr@fsij.org>
+
+ * bootstraptest/runner.rb (main): "usage" description updated.
+
+Sun Aug 23 15:12:22 2009 Tanaka Akira <akr@fsij.org>
+
+ * bootstraptest/runner.rb (Dir.mktmpdir): updated to latest.
+ (in_temporary_working_directory): temporary directory name changed.
+
+Sun Aug 23 00:56:13 2009 Tanaka Akira <akr@fsij.org>
+
+ * thread.c (rb_thread_schedule): don't recur infinitely.
+ (rb_threadptr_execute_interrupts): ditto.
+ [ruby-dev:38060]
+
+Sat Aug 22 15:07:23 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/syck/rubyext.c (id_hash_new): new function to create a hash
+ which key is compared by object id.
+ (syck_emitter_reset): use id_hash_new for bonus->data.
+
+ * lib/yaml.rb (YAML.quick_emit): give the object itself to emitter.
+ don't use object_id and hash.
+
+Sat Aug 22 13:05:22 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * Makefile.in: use CP and MV macros.
+
+Sat Aug 22 01:29:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (rm_f, rm_rf): pass the last hash through if exists.
+ [ruby-dev:39153]
+
+Sat Aug 22 00:48:08 2009 Tanaka Akira <akr@fsij.org>
+
+ * enumerator.c (ary2sv): add dup argument.
+ (enumerator_next): call ary2sv with dup=0.
+ (enumerator_peek): call ary2sv with dup=1 to return duplicated array.
+ (enumerator_peek_values_m): new function to return duplicated array.
+ (Init_Enumerator): use enumerator_peek_values_m as
+ Enumerator#peek_value.
+
+Sat Aug 22 00:03:19 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (rb_check_deadlock): decrease number of sleepers before
+ deadlock detection because the deadlock exception makes main thread
+ run. [ruby-dev:39142]
+
+Fri Aug 21 22:34:58 2009 Tanaka Akira <akr@fsij.org>
+
+ * enumerator.c (get_next_values): extracted from
+ enumerator_next_values.
+ (enumerator_next_values): use get_next_values.
+ (enumerator_peek_values): ditto.
+
+Fri Aug 21 17:01:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/unicode/name2ctype.h: split from enc/unicode.c and made a
+ perfect hash.
+
+Fri Aug 21 15:13:08 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/io.h, io.c (FMODE_SETENC_BY_BOM):
+ renamed from FMODE_STRIP_BOM.
+
+Thu Aug 20 01:24:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_io_fmode_modestr): change modestr syntax for BOM
+ to "BOM|UTF-*". [ruby-dev:39106]
+
+ * io.c (parse_mode_enc): ditto.
+
+Fri Aug 21 15:01:35 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_readline): use rb_prep_terminal
+ only on Windows.
+
+Fri Aug 21 07:25:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/ri/gemdirs.rb: split from lib/rdoc/ri/paths.rb to ge
+ rid of loading rubygems and searching all gems always.
+
+Fri Aug 21 07:14:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_PROGRAM_VERSION, RUBY_RELEASE_DATE): extracts
+ from version.h for cross-compiling.
+
+ * template/fake.rb.in (RUBY_VERSION, RUBY_DESCRIPTION): use above.
+
+Fri Aug 21 00:08:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/ri/paths.rb (RDoc::RI::Paths): Gem::Enable has been obsolete.
+
+Thu Aug 20 23:56:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_sysopen): moved sysopen_struct from rb_sysopen_internal.
+
+Thu Aug 20 23:39:51 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (reduce_nodes_gen): preserve NODE_FL_NEWLINE flag during
+ node reducing. [ruby-core:24463]
+
+Thu Aug 20 14:39:47 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_get): add rl_prep_terminal(1).
+ incited by jitte [ruby-list:43546]
+
+Thu Aug 20 12:09:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (ivar2_hash_type): disabled for now.
+
+Thu Aug 20 08:39:50 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (rb_thread_terminate_all): do not ignore interrupt when
+ reaping threads on termination. [ruby-dev:39107]
+
+Thu Aug 20 02:32:08 2009 Tanaka Akira <akr@fsij.org>
+
+ * enumerator.c (next_init): don't clear feedvalue.
+
+Thu Aug 20 01:28:42 2009 Tanaka Akira <akr@fsij.org>
+
+ * enumerator.c: implement Enumerator#{next_values,peek_values,feed}
+ and StopIteration#result. [ruby-dev:39109]
+ (struct enumerator): replace no_next by stop_exc.
+ new field feedvalue.
+ (enumerator_mark): mark feedvalue and stop_exc.
+ (enumerator_init): initialize feedvalue and stop_exc.
+ (enumerator_init_copy): initialize feedvalue.
+ (next_ii): send yield arguments as an array. return feedvalue.
+ (next_i): generate StopIteration exception here. set result.
+ (next_init): initialize feedvalue.
+ (enumerator_next_values): new method Enumerator#next_values.
+ (ary2sv): new function.
+ (enumerator_peek_values): new method Enumerator#peek_values.
+ (enumerator_feed): new method Enumerator#feed.
+ (yielder_yield): return the yield value.
+ (generator_each): return the iterator value.
+ (stop_result): new method StopIteration#result.
+
+Thu Aug 20 01:06:48 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (DEFINE_STRUCT_DIRENT): use union to allocate sufficient
+ memory space for Solaris. a patch from Naohisa GOTO
+ <ngoto at gen-info.osaka-u.ac.jp> in [ruby-dev:39132].
+ [ruby-dev:39062]
+
+ * configure.in (SIZEOF_STRUCT_DIRENT_TOO_SMALL): Solaris dirent
+ check.
+
+Wed Aug 19 11:32:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/unicode.c (CodeRanges): initialized statically.
+
+Wed Aug 19 02:54:01 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_settracefunc.rb (test_return, test_return2): add two
+ tests for [ruby-dev:38701] and [ruby-core:24463].
+
+Wed Aug 19 01:08:34 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (NODE_RETURN): fire return event at explicit return.
+ [ruby-dev:38701]
+
+Tue Aug 18 21:00:26 2009 Tanaka Akira <akr@fsij.org>
+
+ * enumerator.c (enumerator_peek): new method Enumerator#peek.
+ (enumerator_next): don't rewind at end.
+ [ruby-dev:38932]
+
+Tue Aug 18 13:46:14 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * touch test/rdoc/empty.dat to run test_rdoc_parser.rb
+
+Tue Aug 18 11:37:24 2009 wanabe <s.wanabe@gmail.com>
+
+ * vm_insnhelper.c (vm_call_cfunc): ensure hook c-return.
+ [Bug #1588]
+
+ * test/ruby/test_settracefunc.rb (TestSetTraceFunc#test_raise):
+ follow above.
+
+Tue Aug 18 01:57:00 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_step): treat symbols specially so that iterating
+ over symbols should work like strings. [ruby-core:24780]
+
+ * range.c (range_each): ditto.
+
+Tue Aug 18 01:21:31 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_each): should honor to_str conversion.
+
+Mon Aug 17 23:45:40 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/delta.rb: removed require 'date'. added to_c.
+
+Mon Aug 17 14:35:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (lex_get_str, lex_io_gets, rb_parser_compile_string):
+ must be ascii compatible.
+
+Mon Aug 17 10:37:41 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regparse.c (add_code_range_to_buf0): added with checkdup argument.
+
+ * regparse.c (add_code_range_to_buf): use above.
+
+ * regparse.c (add_code_range0): added with checkdup argument.
+
+ * regparse.c (add_code_range): use above.
+
+ * regparse.c (i_apply_case_fold): don't warn if the duplicate is
+ caused by case folding.
+
+Mon Aug 17 08:31:56 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/delta.rb: merged from date4. [experimental]
+
+ * lib/date/delta/parser.*: ditto.
+
+ * lib/date.rb: followed the above changes.
+
+Mon Aug 17 08:19:03 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/format.rb (strptime): removed \v; since \s includes \v.
+
+Mon Aug 17 08:14:26 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_rationalize) added. [experimental]
+
+ * rational.c ({nurat,nilclass,integer,float}_rationalize) ditto.
+
+Mon Aug 17 08:11:53 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/cmath.rb: use num#i.
+
+Mon Aug 17 07:59:00 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c (flo_pow,fix_pow): may return complex number.
+
+ * bignum.c (rb_big_pow): ditto.
+
+Mon Aug 17 07:16:10 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_imaginary): num#i to return imaginary counterpart
+ of the given numeric.
+
+ * complex.c (Init_Complex): undef #i for complex numbers.
+
+Mon Aug 17 00:17:33 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/complex.rb, lib/rational.rb: added warning messages.
+
+Sun Aug 16 23:58:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (yylex): should dispatch scan-event even when follows
+ just after delayed-token. [ruby-dev:37855] [Bug #1071]
+
+Sun Aug 16 22:20:16 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/format.rb: reverted.
+
+Sun Aug 16 21:31:21 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/date/format.rb: suppressed a warning.
+
+ * lib/irb/ruby-lex.rb: ditto.
+
+Sun Aug 16 15:25:26 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/csv.rb: Change magic comment to US-ASCII in order to
+ make literals as US-ASCII.
+
+Sun Aug 16 10:45:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regparse.c (parse_char_class, parse_exp, parse_branch),
+ (parse_subexp): fixed memory leak. a patch from Ralf Junker
+ <ralfjunker AT gmx.de> at [ruby-core:24921].
+
+Sun Aug 16 10:38:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_backtrace_each, vm_backtrace_push),
+ vm_eval.c (print_backtrace), vm_dump.c (bugreport_backtrace):
+ rb_backtrace_iter_func now takes VALUE as file and method names.
+
+Sun Aug 16 03:06:59 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (opt_eq_func): fix optimization bug. This issue
+ was found out and debugged with Takuto Hayashi at Security and
+ Programming camp 2009.
+
+Sun Aug 16 01:10:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regparse.c (add_ctype_to_cc_by_range): fix the first
+ character bigger than sb_out was dropped.
+
+ * test/ruby/test_regexp.rb (TestRegexp#test_posix_bracket):
+ add tests for above.
+
+Sun Aug 16 00:30:33 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/oniguruma.h
+ (ONIGENC_CTYPE_SPECIAL_MASK): added.
+ (ONIGENC_CTYPE_D): ditto.
+ (ONIGENC_CTYPE_S): ditto.
+ (ONIGENC_CTYPE_W): ditto.
+
+ * regparse.c: \d, \s and \w are now non Unicode class.
+ [ruby-dev:39026]
+ (fetch_token_in_cc): use ONIGENC_CTYPE_[DSW] for \d/\s/\w.
+ (fetch_token): ditto.
+ (add_ctype_to_cc): add routines for ONIGENC_CTYPE_[DSW].
+ (parse_exp): ditto.
+
+ * test/ruby/test_regexp.rb (TestRegexp#test_char_class):
+ add tests for above.
+
+Sat Aug 15 10:39:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (fname, string_dvar, sym, dsym, f_arglist): removed
+ duplications.
+
+Fri Aug 14 20:03:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_check_safe_str): deprecated.
+
+ * ext/openssl/ossl_x509store.c (ossl_x509store_add_{file,path}):
+ replaced deprecated function.
+
+Fri Aug 14 17:59:12 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_preprocess_dregexp): change Exception class to
+ RegexpError.
+
+ * test/ruby/test_m17n.rb (test_regexp_usascii): follow above.
+
+ * test/ruby/test_m17n.rb (test_regexp_embed): ditto.
+
+Fri Aug 14 17:17:42 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/Makefile.in (MKDIRS): revert r24525.
+
+Fri Aug 14 16:28:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/digest/lib/digest/hmac.rb (Digest::HMAC#initialize): faster
+ code.
+
+Fri Aug 14 14:31:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rubyhdrdir): fixed typo. [ruby-dev:39079]
+
+Fri Aug 14 00:29:22 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * doc/ChangeLog-1.8.0: add forgotten entry contributed by
+ TAKAHASHI Kaoru. [ruby-dev:39065]
+
+Fri Aug 14 00:19:49 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator#method_missing): __FILE__ may contain
+ multi-byte characters. a patch from Kenta Murata in [ruby-dev:39066].
+
+Thu Aug 13 21:01:03 2009 wanabe <s.wanabe@gmail.com>
+
+ * vm.c (vm_exec): returning from lambda runs ensure section.
+ [Bug #1729]
+
+Thu Aug 13 18:40:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_CHECK_SIZEOF): set cross_compiling to yes
+ only when AC_COMPUTE_INT, and inverted the arguments.
+
+Thu Aug 13 18:22:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_CHECK_SIZEOF): use AC_COMPUTE_INT instead of
+ _AC_COMPUTE_INT_COMPILE with cross compiling, since its arguments
+ have been changed at autoconf 2.64.
+
+Thu Aug 13 16:31:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * insns.def (opt_case_dispatch): suppressed a warning.
+
+ * vm_insnhelper.c (opt_case_dispatch_i): ditto.
+
+Thu Aug 13 16:20:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, Makefile.in (MAKEDIRS): used MKDIR_P instead of
+ as_mkdir_p. [ruby-dev:39063]
+
+Thu Aug 13 15:37:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regenc.c (onigenc_strlen_null, onigenc_str_bytelen_null): fixed
+ infinite loop for wide encodings. reported by Ralf Junker a
+ [ruby-core:24892]. [ruby-core:24904]
+
+Wed Aug 12 21:07:46 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/extconf.rb: if ipv6 is enabled, the version of Windows
+ must be XP or later.
+ [ruby-core:24601]
+
+Wed Aug 12 15:59:29 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (yes-test-knownbug): use RUNRUBY instead of MINIRUBY.
+
+Wed Aug 12 15:52:04 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * class.c (rb_define_module_id_under): fix the name.
+
+ * class.c (rb_define_module_under): fix for previous changes.
+
+Wed Aug 12 15:32:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * class.c (rb_define_class_id_under, rb_define_module_id_under):
+ new functions to define a nested class/module with non-ascii
+ name.
+
+ * struct.c (make_struct): use name with encoding.
+
+ * struct.c (inspect_struct): ditto. [ruby-core:24849]
+
+Wed Aug 12 Wed Aug 12 14:54:34 2009 Koichi Sasada <ko1@atdot.net>
+
+ * insns.def, vm.c, vm_insnhelper.c, vm_insnhelper.h: check
+ definition of (classes)#=== for case/when optimization.
+ Fix Bug #1376 [ruby-core:23190].
+
+ * string.c (Init_String), bignum.c (Init_Bignum),
+ numeric.c (Init_Numeric): define String#===, Symbol#===,
+ Bignum#===, Fixnum#===, Float#=== as same as (classes)#==.
+
+Wed Aug 12 14:14:42 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (readdir_internal): free old temporary filename.
+ [ruby-core:24820]
+
+Wed Aug 12 12:59:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_new_frozen): must not change encoding of frozen
+ shared string. [ruby-dev:39068]
+
+Wed Aug 12 11:51:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rb_cv_broken_crypt): needs more checks.
+
+Wed Aug 12 07:41:31 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_compatible): If a string is empty and
+ other's encoding is US-ASCII, returns the empty string's encoding.
+ [ruby-list:46274]
+
+Wed Aug 12 07:38:12 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (is_data_encoding): fix condition.
+
+ * encoding.c (enc_capable): ditto.
+
+Tue Aug 11 23:12:31 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (complete_frags): Monday must be suitable for %W's
+ default day.
+
+Tue Aug 11 21:42:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (num_divmod): fixed rdoc. [ruby-core:24862]
+
+Mon Aug 10 21:45:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_path2class): no deprecation.
+
+Mon Aug 10 10:57:59 2009 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c: reject unused longlife gc. longlife gc target is longlife
+ NODE by method table and vm inline cache. but, fixed it at
+ r24085, r24128. so I rejected longlife gc.
+
+ * debug.c: ditto.
+
+ * include/ruby/intern.h: ditto.
+
+ * include/ruby/ruby.h: ditto.
+
+ * iseq.c: ditto.
+
+ * node.h: ditto.
+
+ * vm_insnhelper.c: ditto.
+
+ * vm_insnhelper.h: ditto.
+
+Mon Aug 10 06:55:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (class2path, w_unique, w_extended, w_class, w_uclass):
+ deal with non-ascii class path. [ruby-core:24790]
+
+ * marshal.c (r_unique, path2class, path2module, obj_alloc_by_path),
+ (r_object0): ditto.
+
+ * variable.c (rb_path_to_class): new encoding-aware function to
+ get a class from its name.
+
+Sun Aug 9 21:14:03 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb (search_tclConfig): last change isn't enough.
+ fixed it.
+
+Sun Aug 9 16:36:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (ruby.imp): excluded prelude.o to get rid of circular
+ dependency. [ruby-dev:39052]
+
+Sun Aug 9 14:49:24 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (rb_big_cmp, bigsub, big_real_len, bigmul1_normal,
+ bigmul1_balance, big_split): remove BDIGITS() inside of the loops.
+ same as r24444.
+
+Sat Aug 8 17:03:21 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_ascii_compatible_p): added. [ruby-core:24793]
+ (Init_Encoding): New API Encoding#ascii_compatible?.
+
+Sun Aug 9 07:25:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/ripper/eventids2.c (token_to_eventid): added
+ keyword_do_LAMBDA. [ruby-dev:39049]
+
+Sun Aug 9 02:07:41 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * tool/compile_prelude.rb: fixes a regexp pattern for require.
+ It had matched 'require("foo"('.
+
+Sat Aug 8 11:42:44 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigzero_p): removing BDIGITS() inside of the
+ loop. inspired by Masahiro Kanai's blog entry
+ <http://d.hatena.ne.jp/CanI/20090807/1249657492>.
+
+Sat Aug 8 06:18:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_symbol r_symlink, r_symbol, r_object0): fix for
+ non-ascii symbols. loading such symbols can cause segfaults in
+ older versions. [ruby-core:24788]
+
+Fri Aug 7 03:25:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_error.c (error_print): removed an extra argument.
+
+Fri Aug 7 03:22:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_exc_raise, rb_exc_fatal): nil is used to reraise.
+
+Fri Aug 7 01:49:41 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/sha2/sha2.c: The ULL suffix is not supported by
+ pre-C99 compilers, so resurrect the ULL() macro to regain
+ portability. [ruby-dev:39032]
+
+Fri Aug 7 01:35:26 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/*/extconf.rb: inttypes.h and unistd.h need not be
+ checked here. [ruby-dev:39032]
+
+Fri Aug 7 01:04:17 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb (search_tclConfig): fix logic bug.
+
+Thu Aug 6 21:18:15 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/digest/sha2/lib/sha2.rb: should require sha2.so.
+
+Thu Aug 6 21:11:40 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/digest/sha2/sha2.c (*_Final): typos.
+
+Thu Aug 6 19:46:56 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/sha2/sha2.h (BYTE_ORDER): Define BYTE_ORDER as
+ necessary. [ruby-dev:39029]
+
+Thu Aug 6 16:36:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (valid_encoding_name_p): rejects too long encoding
+ names.
+
+ * encoding.c (encoding_data_type): typed data.
+
+ * encoding.c (enc_capable, rb_enc_get_index): Symbol is encoding
+ capable.
+
+ * encoding.c (rb_enc_associate_index): cannot set encoding on
+ special constants.
+
+Thu Aug 6 15:44:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_method_entry_eq): deals with optimized method
+ properly. [ruby-core:24789]
+
+Thu Aug 6 13:30:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/mkmf/base.rb (TestMkmf): was turned into a class, because
+ MiniUnit doesn't complain even if a testcase has no tests.
+
+Thu Aug 6 13:00:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (check_sizeof): added optional compiler option
+ argument. [ruby-core:24785]
+
+ * lib/mkmf.rb (create_makefile): suppressed shadowing outer local
+ variable warnings.
+
+Thu Aug 6 12:05:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/testcase.rb (Test::Unit): removes silly TestCase
+ class.
+
+Thu Aug 6 01:37:20 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/digest/sha2/sha2.[ch]: Update to 1.0 RELEASE which fixes an
+ off-by-one bug in SHA-256 hashing. Reduce differences from
+ the original while at it. [Bug #1799]
+
+Thu Aug 6 00:09:56 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/ipaddr.rb (IPAddr#hash): Take account of netmask; submitted
+ by Nobuhiro IMAI in [ruby-dev:39011]
+
+Wed Aug 5 19:19:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (load_file_internal): assumes -x flag if no "ruby" is in
+ the shebang line. [ruby-dev:39015]
+
+Wed Aug 5 19:11:01 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ruby.c (rb_stdio_set_default_encoding): declared.
+
+Wed Aug 5 18:46:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * debug.c (ruby_dummy_gdb_enums): made public. [ruby-dev:39001]
+
+Wed Aug 5 13:49:09 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_upto): generate numerical sequence when
+ characters in both edges are all digits. [ruby-talk:343186]
+
+Wed Aug 5 12:54:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_exc_raise, rb_exc_fatal): require exception object.
+ [ruby-core:24767]
+
+Wed Aug 5 12:39:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_longjmp): reset raised flag before fatal error.
+
+Wed Aug 5 10:20:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_preprocess_dregexp): add options to arguments.
+
+ * re.c (rb_reg_new_ary): follow above.
+
+ * re.c (rb_reg_preprocess_dregexp): change error message when
+ /.../n has a non escaped non ASCII character in non ASCII-8BIT
+ script. [ruby-dev:38524]
+
+Wed Aug 5 03:28:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit.setup_argv): expands paths before
+ requiring. [ruby-dev:39012]
+
+Wed Aug 5 01:38:27 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/pp.rb (guard_inspect_key): untrust internal hash to prevent
+ unexpected SecurityError.
+
+ * test/ruby/test_object.rb: add a test for [ruby-dev:38982].
+
+Wed Aug 5 00:33:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/parser/c.rb: fixed a small error in the documentation.
+ [ruby-core:24744]
+
+Tue Aug 4 22:10:34 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (has_redirection): need to execute shell if commandline
+ includes newline. cf. [ruby-core:24560]
+
+Tue Aug 4 15:06:58 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/ipaddr.rb (IPAddr#{eql?,hash}): Add IPAddr#{eql?,hash} so
+ that an IPAddr object can be used as a hash key, a set element,
+ etc.; suggested by Nick Brown <nick@nick-brown.com>.
+
+Tue Aug 4 13:07:10 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/oniguruma.h (ONIG_SYN_WARN_CC_DUP): defined.
+ * regparse.h (ScanEnv): add warnings_flag.
+ * regparse.c (CC_DUP_WARN): defined for warn duplicated characters in
+ character class of regexp. [ruby-core:24593]
+ (add_code_range_to_buf): add CC_DUP_WARN.
+ (next_state_val): add CC_DUP_WARN.
+ (OnigSyntaxRuby): add ONIG_SYN_WARN_CC_DUP.
+ (SET_ALL_MULTI_BYTE_RANGE): add env to arguments.
+ (add_code_range): ditto.
+ (add_code_range_to_buf): ditto.
+ (not_code_range_buf): ditto.
+ (or_code_range_buf): ditto.
+ (and_code_range1): ditto.
+ (and_code_range_buf): ditto.
+ (and_cclass): ditto.
+ (or_cclass): ditto.
+ (add_ctype_to_cc_by_range): ditto.
+ (add_ctype_to_cc): ditto.
+ (parse_char_class): ditto.
+
+Tue Aug 4 12:40:45 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/encdb.c (ENC_SET_BASE): fix typo.
+ patch by ujihisa [ruby-dev:39004]
+
+Tue Aug 4 11:57:39 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_eql, range_eq): fixed equality to work for
+ subclasses of Range. a patch from Marc-Andre Lafortune.
+ [ruby-core:22190]
+
+ * test/ruby/test_range.rb: add assertions for above.
+
+Tue Aug 4 09:41:11 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/big5.c (EncLen_Big5): back to original Big5 table.
+ (EncLen_Big5_HKSCS): for Big5-HKSCS.
+ (trans): add the lead byte table for Big5-HKSCS.
+ (big5_mbc_enc_len): abstract function for Big5 series.
+ (big5_mbc_enc_len): for Big5.
+ (big5_hkscs_mbc_enc_len): for Big5-HKSCS.
+ (BIG5_HKSCS_P): added.
+ (BIG5_ISMB_FIRST): add routine for Big5-HKSCS.
+ (big5_hkscs): add for Big5-HKSCS.
+
+Tue Aug 4 09:33:54 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_set_base): Add for setting base encoding
+ with their names. this is internal function.
+
+ * template/encdb.h.tmpl: specify ENC_SET_BASE for second encodings in
+ each encoding files.
+
+ * enc/encdb.c (rb_enc_set_base): add a declaration.
+ (ENC_SET_BASE): ditto.
+
+Tue Aug 4 06:30:01 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_replace): should copy compare_by_identity status as well.
+ [ruby-core:24728]
+
+Tue Aug 4 05:43:03 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (recursive_push): need to set UNTRUST. [ruby-dev:38997]
+
+Tue Aug 4 03:56:51 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tcltklib.c: fix trouble on old-style C function
+ declarations [ruby-core:22871].
+
+ * ext/tk/lib/tcltklib.c: (ruby_1_8) fix warning about RUBY_RELEASE_DATE
+
+ * ext/tk/lib/tk/multi-tk.rb: kill zombie threads.
+
+ * ext/tk/lib/tk/fontchooser.rb: fix typo and support OptionObj.
+
+ * ext/tk/lib/tk/{canvas.rb,virtevent.rb,image.rb,timer.rb}:
+ don't create unnecessary array.
+
+Mon Aug 3 22:19:24 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * eval.c (rb_mod_include): fix document. [ruby-core:24675]
+
+Mon Aug 3 18:25:08 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sample/svr.rb: obsolete TCPserver renamed. [ruby-core:24712]
+
+ * sample/tsvr.rb: ditto.
+
+ * sample/dualstack-httpd.rb: ditto.
+
+Mon Aug 3 18:12:54 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (recursive_push): untrust internal hash to prevent
+ unexpected SecurityError. a patch from Kazuhiro NISHIYAMA.
+ Fix: #1864 [ruby-dev:38982]
+
+Mon Aug 3 17:06:05 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/README: updated. a patch from Daniel Bovensiepen.
+ [ruby-core:24693]
+
+Mon Aug 3 16:28:09 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_connect): return value was broken when some
+ error occurred.
+ [ruby-core:24234]
+
+Mon Aug 3 15:56:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (permute0): use chars for boolean array.
+
+ * array.c (rb_ary_{permutation,combination}): disallow reentrance
+ with continuation since work-buffers cannot restore.
+
+ * array.c (rb_ary_{permutation,combination,product}): must not use
+ ary_discard on strings.
+
+Mon Aug 3 06:43:25 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flo_hash): normalize -0.0 to 0.0. [ruby-core:24577]
+
+Mon Aug 3 00:32:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (rb_random_int): arguments have to be converted to
+ integer. [ruby-core:24679]
+
+Sun Aug 2 21:04:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (literal_concat0): tail can be nil. [ruby-dev:38980]
+
+Sun Aug 2 20:09:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_combination, rb_ary_product): prevent from GC.
+
+Sun Aug 2 16:53:19 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_rand.rb: add tests for Random#float's rejection
+ against Infinity and NaN.
+
+Sun Aug 2 14:20:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (rand_int): prevent from GC.
+
+Sat Aug 1 19:23:27 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (tr_trans): change condition of singlebyte
+ optimization.
+
+Sat Aug 1 18:50:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (random_float): rejects Infinity and NaN.
+ [ruby-core:24651]
+
+Sat Aug 1 18:34:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb (gem): suppressed warnings.
+ cf: [ruby-dev:38975]
+
+Sat Aug 1 05:18:36 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (tr_trans): can't use singlebyte optimization when
+ the replacement is multibyte. [ruby-core:24612]
+
+Fri Jul 31 18:01:34 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/securerandom.rb (SecureRandom.random_bytes): return string should
+ be ASCII-8BIT. [ruby-core:24640]
+
+Fri Jul 31 16:28:33 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_stdio_set_default_encoding): added.
+
+ * ruby.c (process_options): call rb_stdio_set_default_encoding
+ after setting default internal and external.
+
+Fri Jul 31 15:06:33 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * tool/compile_prelude.rb: too long string literal causes compile error
+ on some platforms.
+
+Fri Jul 31 13:15:27 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * transcode.c (str_encode_bang): C99ism.
+
+Fri Jul 31 11:48:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): used more appropriate construct.
+
+Fri Jul 31 10:54:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (literal_concat_gen): reduced unnecessary node at string
+ literal concatenation with empty head dstr. [ruby-dev:38968]
+
+Fri Jul 31 02:57:39 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (literal_concat_gen): NODE_DSTR was incorrectly handled as
+ NODE_STR. [ruby-dev:38968]
+
+ * bootstraptest/test_syntax.rb: add a test for above.
+
+Fri Jul 31 00:55:48 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_module.rb (test_ancestors, test_included_modules):
+ ignore rake mixins.
+
+Fri Jul 31 00:30:54 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_insnhelper.c (vm_call_cfunc): let set_trace_func use called_id
+ instead of original_id.
+
+Thu Jul 30 23:04:32 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * gem_prelude.rb (Gem.path): uses Gem.default_path as a default value
+ so that ruby finds gems in ~/.gem/.
+ (Gem.user_home): reduced version of lib/rubygems.rb's.
+ Gem.default_path needs it.
+
+Thu Jul 30 22:28:04 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * tool/compile_prelude.rb: replaces "require" with in-place evaluation
+ so that copy & paste for lib/rubygems/default.rb is not necessary.
+
+ * gem_prelude.rb: removes copied codes from lib/rubygems/defaults.rb.
+ uses require instead.
+
+ * common.mk (prelude.c): adds dependency for lib/rubygems/defaults.rb.
+
+Thu Jul 30 21:56:18 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_rand.rb: add tests for Random class.
+
+Thu Jul 30 21:48:56 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * random.c (init_genrand): ensure invariant of mt->next and mt->left.
+ mt->next should always equal mt->state + N + 1 - mt->left.
+ In fact, 'r = Random.new(0); r == r.dup' has returned false.
+
+Thu Jul 30 21:43:41 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * random.c (random_bytes): use NUM2LONG instead of FIX2LONG because
+ Random#bytes may receive bignum.
+
+Thu Jul 30 21:39:42 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (iseq_compile_each): fix stack consistency error.
+ [ruby-core:24611]
+
+ * bootstraptest/test_method.rb: add tests for above.
+
+Thu Jul 30 18:39:39 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c: added check for frozen string for encode! (see Bug #1836)
+
+ * test/ruby/test_transcode.rb: added tests for the above
+
+Thu Jul 30 16:45:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * insns.def (defineclass): preserve encoding of class/module
+ names. [ruby-core:24600]
+
+ * variable.c (rb_set_class_path_string): set class path with a
+ string value.
+
+Thu Jul 30 16:12:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (Init_var_tables): initializes __classid__ ID.
+
+ * variable.c: use st_data_t for st functions.
+
+Thu Jul 29 14:25:14 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/util.rb (CGI::unescape): support encoding option.
+
+ * lib/cgi/cookie.rb (CGI::Cookie.parse): fix for the encoded value.
+
+Wed Jul 29 08:08:07 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * parse.y (regexp): regexp literal at the top of dstr is still needed
+ even if it is empty.
+
+Wed Jul 29 03:36:24 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/json/lib/json/common.rb (JSON#recurse_proc): remove
+ unnecessary private specifier. [ruby-dev:38929]
+
+Wed Jul 29 03:34:46 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_core.h, vm_insnhelper.c (vm_call_method): revive
+ VM_CALL_OPT_SEND_BIT and use it to recognize "send" method.
+
+Wed Jul 29 03:11:59 2009 Koichi Sasada <ko1@atdot.net>
+
+ * proc.c (rb_method_entry_arity): support not_implemented method.
+ (I have no idea to test it)
+
+Tue Jul 28 19:36:26 2009 Koichi Sasada <ko1@atdot.net>
+
+ * proc.c (rb_method_entry_arity): support optimized method (send).
+
+ * test/ruby/test_method.rb: add a test for above.
+
+Tue Jul 28 04:34:05 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/extconf.rb: bug fix and ignore invalid Tcl/Tk libraries.
+
+ * ext/tk/lib/config_list.in: bug fix and add a new option.
+
+ * ext/tk/lib/README.tcltklib: update for a new option.
+
+Mon Jul 27 19:03:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_*str_new_cstr, rb_str_buf_new_cstr),
+ (rb_str_buf_cat2, rb_str_cat2, rb_exc_new2): suppress warnings.
+
+Mon Jul 27 10:24:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/parser.rb (RDoc::Parser.binary?): fix for empty files.
+ [ruby-dev:38848]
+
+Mon Jul 27 06:51:41 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_eof): should call next_argv() before testing.
+ [ruby-core:24561]
+
+Sun Jul 26 19:17:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_eof): go to the next file if called after ARGF.close
+ or ARGF.skip. a patch from Mike Kasick at [ruby-core:24561].
+
+Sun Jul 26 18:30:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_call_method): __send__ can call protected
+ methods. [ruby-core:24500]
+
+Sun Jul 26 01:09:14 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * ext/bigdecimal.c: moved BASE_FIG definition before it is used
+ first time.
+
+ * include/ruby/defines.h [__SYMBIAN32__]: defined TRUE and FALSE to match
+ changes in bignum.c and array.c.
+
+Sat Jul 25 17:49:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_eof): should not have reached EOF before trying to
+ read. based on a patch by Heesob Park <phasis AT gmail.com> in
+ [ruby-core:24559]. [ruby-core:24557]
+
+Sat Jul 25 13:44:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * complex.c (nucomp_hash), rational.c (nurat_hash): not to use
+ hash value of class so that equality against subclasses can
+ work. [ruby-dev:38850]
+
+Sat Jul 25 01:05:59 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/big5.c: Fix EncLen_BIG5 for Big5-HKSCS. see [ruby-core:24390]
+
+Fri Jul 24 19:19:19 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/big5.trans, big5-hkscs-tbl.rb:
+ new Chinese BIG5-HKSCS transcoding (with Tatsuya Mizuno)
+ see [ruby-core:24390]
+
+ * test/ruby/test_transcode.rb: added tests for the above
+ (with Tatsuya Mizuno)
+
+ * enc/big5.c: Added BIG5-HKSCS as a replicate encoding of BIG5
+ (short term solution, needs more work; with Tatsuya Mizuno)
+
+ * tool/transcode-tblgen.rb: made 'pat' directly accessible in
+ class StrSet
+
+Fri Jul 24 18:03:01 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (idle): leaves IDLE in a ensure clause. a patch
+ from Eric Hodel.
+
+ * test/net/imap/test_imap.rb (setup, teardown): turn on
+ Socket.do_not_reverse_lookup in tests.
+
+Fri Jul 24 00:13:41 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (resp_text_code): accepts response codes without
+ text. [ruby-core:24194]
+
+ * lib/net/imap.rb (idle, idle_done): new methods for the IMAP4 IDLE
+ command (RFC 2177). Thanks, Eric Hodel.
+
+ * lib/net/imap.rb (format_date, format_datetime): new method to
+ format IMAP-style date/datetime. Thanks, Eric Hodel.
+
+Thu Jul 23 17:31:02 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/irb/ruby-lex.rb: make irb be able to parse
+ string_dvar. [ruby-core: 24051]
+
+Thu Jul 23 17:26:51 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: should not create "config_list" in a $srcdir.
+
+Thu Jul 23 14:35:02 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_{open,wopen}): fixed typos. these conditions
+ mean to call runtime's open() if textmode.
+
+Thu Jul 23 08:53:24 2009 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/markup/simple_markup/: Remove useless directory.
+ [Bug #1343]
+
+Thu Jul 23 08:52:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (random_{state,left}): internal/debug use.
+
+Wed Jul 22 19:29:26 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_module.rb (TestModule#test_alias): warning
+ message updated.
+
+Thu Jul 23 00:39:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (class.o): depends on vm_core.h.
+
+Thu Jul 23 00:10:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (init_leap_second_info): checks the result of gmtime to
+ suppress warnings.
+
+Wed Jul 22 22:23:24 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_core.h (struct rb_iseq_t): add a new field line_no. This field
+ represents line number from which the original code of the iseq
+ starts. [ruby-dev:38698]
+
+ * iseq.c, compile.c: ditto.
+
+ * parse.y: line number hack (for Proc#source_location) is no longer
+ needed.
+
+ * test/ruby/test_settracefunc.rb: line number of set_trace_func is now
+ compatible with 1.8's.
+
+Wed Jul 22 22:16:48 2009 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * method.h: Commas at end of enum list not allowed as of C89
+
+ * vm_method.c (rb_add_method): avoid C++ comment
+
+ * vm_insnhelper.c (vm_call_cfunc): ditto.
+
+Wed Jul 22 20:42:52 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/extconf.rb: define IPPROTO_IPV6 macro for recent Windows
+ SDK.
+
+Wed Jul 22 19:32:10 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/mkconstants.rb: define IPV6_* constants only when INET6
+ is defined.
+
+Wed Jul 22 19:23:04 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/extconf.rb: ipv6 support is disabled by default on mswin.
+
+Wed Jul 22 17:41:08 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/ipsocket.c (init_inetsock_internal): drop IPv6 addresses
+ if INET6 is not defined.
+
+Wed Jul 22 17:29:59 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/extconf.rb: enable ipv6 support for win32.
+
+Wed Jul 22 16:38:39 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * hash.c (Hash::[]): rdoc. patch by Marc-Andre Lafortune.
+ #1385.
+
+Wed Jul 22 10:00:53 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (WSAMSG): get rid of compile error on VC9 and mingw.
+
+Wed Jul 22 06:35:56 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_enum.rb (TestEnumerable#each): recursive join now
+ raises ArgumentError.
+
+Wed Jul 22 02:33:57 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/irb.rb: forget svn commit.
+
+Wed Jul 22 01:20:54 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bootstraptest/test_io.rb: block write may block for long time.
+
+Wed Jul 22 00:34:39 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/irb.rb, lib/irb/init.rb, lib/irb/ext/save-history.rb: add
+ IRB::irb_at_exit. no use finalizer saving history. [ruby-dev-38563]
+
+Tue Jul 21 23:47:38 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * random.c (rand_init): array length of random seed was broken, which
+ causes memory error with srand(2**1000000-1).
+
+ * test/ruby/test_rand.c: test for above.
+
+Tue Jul 21 21:37:19 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/irb/cmd/help.rb: fixed irb's "help" command. [ruby-core:22310].
+
+ * lib/tracer.rb: no show lines unknown line number. [ruby-core:22096],
+ no trace display c-call and c-return as default.
+
+Tue Jul 21 16:24:41 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (vtdate2rbtime): VT_DATE variant object
+ is converted to Time object now.
+
+ * test/win32ole/test_win32ole_variant.rb (test_s_new_with_nil,
+ test_conversion_time2date, test_conversion_str2date,
+ test_conversion_vt_date, test_set_value): ditto.
+
+ * ext/win32ole/win32ole.c (rbtime2vtdate): refactoring.
+
+Tue Jul 21 16:07:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tracer.rb: toplevel caller exists now. [ruby-core:24454]
+
+Tue Jul 21 13:36:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.[ch] (recvmsg, sendmsg): new functions to support recvmsg/
+ sendmsg like UNIX. these functions are experimental and not tested
+ well. bug reports are welcome.
+
+Tue Jul 21 13:35:21 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (TEST_RUNNABLE): follow r24209.
+
+Tue Jul 21 12:45:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_gc_enable, rb_gc_disable): should return Qtrue/Qfalse.
+
+Tue Jul 21 12:38:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_generic_ivar_memsize): should not remove generic
+ instance variable table.
+
+Mon Jul 20 20:35:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_f_open): add rdoc about specifying ext_enc as *-bom.
+
+Mon Jul 20 19:00:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (compile_dstr_fragments): reduced needless literal.
+
+ * parse.y (xstring, regexp, dsym, literal_concat, evstr2dstr):
+ literal at the top of dstr is no longer needed if it is empty,
+ since concatstrings and toregexp always create new strings.
+
+Mon Jul 20 12:51:39 2009 wanabe <s.wanabe@gmail.com>
+
+ * lib/matrix.rb (Matrix#rank): revert a part of r20859 to avoid
+ infinite loop. [Bug #1020]
+
+Mon Jul 20 11:12:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, Makefile.in (TEST_RUNNABLE): tests are no
+ runnable if cross-compiling.
+
+ * common.mk (btest*, test*): ditto.
+
+Mon Jul 20 10:55:18 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Addrinfo#family_addrinfo): fix a typo in
+ error message. patch by Nobuhiro IMAI. [ruby-dev:38828]
+
+Sun Jul 19 22:22:54 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (float_to_r): an improvement.
+
+Sun Jul 19 20:41:24 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (make_patterns): do not use \d.
+
+ * rational.c (make_patterns): ditto.
+
+Sun Jul 19 17:32:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_read): should taint the result. [ruby-dev:38826]
+
+Sun Jul 19 11:00:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (me_opts): fixed optimized method aliasing.
+ [ruby-dev:38824]
+
+Sun Jul 19 10:54:56 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket.accept_loop): rescue
+ IO::WaitReadable instead of Errno::EWOULDBLOCK.
+ (Socket.udp_server_loop_on): ditto.
+
+Sat Jul 18 23:44:59 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (reg_enc_error): use rb_enc_get to get the encoding of
+ a Regexp object. REGEXP(re)->ptr->enc is the encoding of the
+ regexp engine for patterns and target strings.
+ [ruby-core:23208]
+
+Sat Jul 18 17:43:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_hash_cmp): got rid of overflow.
+
+Sat Jul 18 16:03:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/defines.h (TRUE, FALSE): for internal use.
+
+Sat Jul 18 11:39:49 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * random.c: workaround for VC++ 6.0.
+
+Sat Jul 18 09:16:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (rb_random_{int32,real,bytes,int}): added functions for
+ extension libraries.
+
+Sat Jul 18 09:07:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (fill_random_seed): use cryptographic service on Windows.
+
+Sat Jul 18 07:56:00 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: fail to create a widget object for an unknown
+ widget path.
+
+Sat Jul 18 07:06:31 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb,ext/tk/lib/tk/grid.rb: Bug fix on grid_slaves().
+ Extend usage pattern of grid_column()/grid_row().
+
+Sat Jul 18 06:30:35 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h: include winsock headers in extern "C++" for
+ C++ extension libraries.
+
+ * include/ruby/missing.h (vsnprintf): workaround for VC++.
+ [ruby-core:23096]
+
+Sat Jul 18 00:23:47 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * ext/readline/readline.c (Init_readline): rl_catch_signals does
+ not exist on some platform like Mac OS X 10.5.
+
+ * ext/readline/extconf.rb: checks existence of rl_catch_signals.
+
+Fri Jul 17 22:37:22 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (socket_s_ip_address_list): drop inactive
+ adapters.
+
+ * test/socket/test_{nonblock,addrinfo,socket}.rb: skip some tests on
+ Windows.
+ [ruby-core:23051]
+
+Fri Jul 17 22:29:21 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/readline/readline.c (Init_readline): use rl_catch_sigwinch only
+ when existing.
+
+ * ext/readline/extconf.rb: check existence of rl_catch_sigwinch, and
+ workaround for native Win32 readline port.
+
+Fri Jul 17 18:18:23 2009 Tanaka Akira <akr@fsij.org>
+
+ * range.c (recursive_hash): extracted from range_hash. reject
+ recursive key.
+ (range_hash): use recursive_hash.
+
+Fri Jul 17 18:11:32 2009 Tanaka Akira <akr@fsij.org>
+
+ * struct.c (recursive_hash): extracted from rb_struct_hash. reject
+ recursive key.
+ (rb_struct_hash): use recursive_hash.
+
+Fri Jul 17 16:45:22 2009 Tanaka Akira <akr@fsij.org>
+
+ * array.c (recursive_hash): reject recursive key.
+
+Fri Jul 17 15:20:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (DIGSPERINT): fix for LP64.
+
+ * random.c (fill_random_seed): /dev/urandom is not available on
+ DOSISH systems.
+
+ * random.c (random_equal): new method Random#==.
+
+Fri Jul 17 13:35:47 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/init.c (rsock_getfamily): return AF_UNSPEC if getsockname
+ is failed. [ruby-core:24383]
+
+Fri Jul 17 01:22:57 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (recursive_join): raise ArgumentError for joining
+ recursive array.
+
+ * array.c (ary_join_1): ditto.
+
+ * test/ruby/test_array.rb (TestArray#test_join2): test updated for
+ recursive join.
+
+Thu Jul 16 23:32:16 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb,ext/tk/config_list.in: ignore paths which includes
+ white space characters on Windows.[ruby-dev:38794]
+
+ * ext/tk/lib/tk.rb: works on Cygwin (limitation:: Tk.mainloop works on
+ the main thread only).
+
+Thu Jul 16 20:58:18 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_win32ole.rb (test_s_codepage_changed,
+ test_s_locale_set, test_s_locale_change): skip test if Japanese
+ locale is not installed. [ruby-core:23806]
+
+ * test/win32ole/test_win32ole_variant.rb (test_conversion_str2cy):
+ ditto.
+
+Thu Jul 16 19:02:28 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/lib/socket.rb (Socket.tcp_server_sockets_port0): servers
+ is nil if an error occurs before setting it.
+
+Thu Jul 16 18:42:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (fill_random_seed): suppress a warning.
+
+Thu Jul 16 18:30:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_hash_aset, recursive_hash): rejects recursive hash.
+ [ruby-core:22921]
+
+Thu Jul 16 18:28:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * id.c (Init_id), vm.c (vm_exec): @#__ThrowState__ is no longer
+ used. [ruby-dev:38760]
+
+Thu Jul 16 17:41:28 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_method.c (rb_alias): fix a case which try non-existing method alias.
+
+ * test/ruby/test_alias.rb: add a test.
+
+Thu Jul 16 16:00:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_reopen): discards read buffer. [ruby-core:24240]
+
+Thu Jul 16 15:52:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (rb_big_new, rb_bigzero_p), range.c (rb_range_values):
+ added for random.c.
+
+ * random.c (rb_random_t): objectified. [EXPERIMENTAL]
+ [ruby-dev:30954]
+
+Thu Jul 16 14:08:44 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_sample): RDoc update. a patch from Florian
+ Frank. [ruby-core:24347]
+
+Thu Jul 16 12:42:10 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_readline): rl_free_line_state
+ before rl_cleanup_after_signal.
+
+ * ext/readline/readline.c (Init_readline): set rl_catch_signals and
+ rl_catch_sigwinch as 0. [ruby-core:21884]
+
+Thu Jul 16 08:59:22 2009 Koichi Sasada <ko1@atdot.net>
+
+ * node.h, vm_core.h, variable.c: rename global_entry to rb_global_entry.
+
+ * compile.c, insns.def, iseq.c, vm_insnhelper.h: ditto.
+
+Thu Jul 16 08:57:44 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_method.c: separate clearing cache entry code.
+
+Thu Jul 16 08:56:32 2009 Koichi Sasada <ko1@atdot.net>
+
+ * dir.c (push_glob): re-fix GC problem.
+
+Thu Jul 16 08:55:27 2009 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk: add method.h.
+
+Thu Jul 16 08:53:26 2009 Koichi Sasada <ko1@atdot.net>
+
+ * io.c (argf_free): free data body.
+
+Wed Jul 15 23:46:55 2009 Koichi Sasada <ko1@atdot.net>
+
+ * method.h, vm_core.h: add rb_method_entry_t. Remove nodes around
+ method management. This change affect some VM control stack structure.
+
+ * vm.c, vm_insnhelper.c, vm_method.c, vm_eval.c: ditto. and make some
+ refactoring.
+
+ * insns.def, class.c, eval.c, proc.c, vm_dump.c : ditto.
+
+ * vm_core.h, compile.c (iseq_specialized_instruction): remove
+ VM_CALL_SEND_BIT. use another optimization tech for Kernel#send.
+
+ * node.h: remove unused node types.
+
+ * ext/objspace/objspace.c (count_nodes): ditto.
+
+ * gc.c: add mark/free functions for method entry.
+
+ * include/ruby/intern.h: remove decl of
+ rb_define_notimplement_method_id(). nobody can use it
+ because noex is not opened.
+
+ * iseq.c (iseq_mark): fix to check ic_method is available.
+
+ * iseq.c (rb_iseq_disasm): fix to use rb_method_get_iseq().
+
+Wed Jul 15 23:45:11 2009 Koichi Sasada <ko1@atdot.net>
+
+ * dir.c (push_glob): fix GC problem.
+
+Wed Jul 15 17:33:52 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * ext/purelib.rb: translates a fake path to rubygems in $" into
+ an alternative in $: so that Kernel.#require does not load
+ more rubygems.rb.
+ Resolves many failures in test/rubygems/*.
+
+ * gem_prelude.rb (Gem.load_full_rubygems_library): supports case
+ the rubygems to load is not in $(rubylibprefix).
+ (Gem.path_to_full_rubygems_library): new method for the changes in
+ purelib.rb and Gem.load_full_rubygems_library.
+ (Gem.fake_rubygems_as_loaded): new method.
+
+Wed Jul 15 16:29:35 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (LIBPATHFLAG): path is already quoted in mkmf.rb.
+
+Wed Jul 15 06:21:50 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: --with-{tcl,tk}-dir doesn't work.[ruby-dev:38782]
+
+Wed Jul 15 04:22:54 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/cgi/test_cgi_multipart.rb (CGIMultipartTest#_prepare):
+ set tempfile name with literal.
+
+Tue Jul 14 21:53:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/nonblock: moved from ext/io/wait/lib.
+
+Tue Jul 14 17:29:20 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_index_m): return nil if pos is out of string.
+ [ruby-core:23660]
+
+Tue Jul 14 16:13:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_initialize): check if the descriptor can be accessed
+ in the specified open mode. [ruby-dev:38571]
+
+Tue Jul 14 09:26:14 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/multi-tk.rb: Long-term-callback support isn't stable yet.
+ So, disable the feature and waiting for improvement in the future.
+
+Tue Jul 14 01:28:17 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ruby/test_m17n.rb (TestM17N#test_env): the encoding of
+ ENV is now locale encoding.
+
+Tue Jul 14 01:24:56 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * marshal.c (r_object0): should return real object.
+
+Tue Jul 14 01:06:31 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * enumerator.c (yielder_yield_i): use rb_proc_new instead of
+ rb_iterate. [ruby-dev:38518]
+
+ * README.EXT: rb_iterate is obsolete since 1.9; use rb_block_call
+ instead.
+
+ * README.EXT.ja: ditto.
+
+Tue Jul 14 00:45:41 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/test_case.rb (TestCase#test_deoptimization):
+ test for [ruby-core:23190].
+
+Mon Jul 13 22:49:50 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/prime.rb (Prime#prime_division): now decomposes
+ negative integer into a decomposition with element [-1, 1].
+
+ * test/test_prime.rb: test for it.
+
+Mon Jul 13 22:28:03 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (pipe_open): handles leaked on win32 when an error occurs.
+
+Mon Jul 13 20:21:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (r_object0): should not shadow outer variable not to
+ return Qnil always.
+
+Mon Jul 13 19:41:05 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * marshal.c (r_object0): copy instance variables to new regexp.
+
+Mon Jul 13 17:49:11 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_core.h, compile.c: declare struct iseq_inline_cache_entry.
+ Inline cache (IC) entries are no longer GC managed object.
+ IC entries are freed when ISeq is freed.
+
+ * iseq.c: fix mark, free, memsize functions for above change.
+
+ * insns.def: remove rb_gc_write_barrier().
+
+ * vm_insnhelper.c (vm_method_search): ditto.
+
+ * tool/instruction.rb, template/insns_info.inc.tmpl (insn_iclen):
+ added.
+
+Mon Jul 13 13:35:08 2009 Koichi Sasada <ko1@atdot.net>
+
+ * insns.def, vm_insnhelper.c (getinstancevariable):
+ fix to use inline cache.
+
+ * compile.c: fix to skip inline cache entry (IC). IC is added
+ automatically by compiler.
+
+ * insns.def, vm_insnhelper.h: fix IC positions.
+
+ * iseq.c: increment minor_version of ISeq because of above change.
+
+Mon Jul 13 08:01:00 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/extconf.rb: New strategy for searching Tcl/Tk libraries.
+
+ * ext/tk/*: Support new features of Tcl/Tk8.6b1 and minor bug fixes.
+ ( [KNOWN BUG] Ruby/Tk on Ruby 1.9 will not work on Cygwin. )
+
+ * ext/tk/*: Unify sources between Ruby 1.8 & 1.9.
+ Improve default_widget_set handling.
+
+ * ext/tk/*: Multi-TkInterpreter (multi-tk.rb) works on Ruby 1.8 & 1.9.
+ ( [KNOWN BUG] On Ruby 1.8, join to a long term Thread on Tk
+ callbacks may freeze. On Ruby 1.9, cannot create a second
+ master interpreter (creating slaves are OK); supported master
+ interpreter is the default master interpreter only. )
+
+ * ext/tk/lib/tkextlib/*: Update supported versions of Tk extensions.
+ Tcllib 1.8/Tklib 0.4.1 ==> Tcllib 1.11.1/Tklib 0.5
+ BWidgets 1.7 ==> BWidgets 1.8
+ TkTable 2.9 ==> TkTable 2.10
+ TkTreeCtrl 2005-12-02 ==> TkTreeCtrl 2.2.9
+ Tile 0.8.0/8.5.1 ==> Tile 0.8.3/8.6b1
+ IncrTcl 2005-02-14 ==> IncrTcl 2008-12-15
+ TclX 2005-02-07 ==> TclX 2008-12-15
+ Trofs 0.4.3 ==> Trofs 0.4.4
+
+Mon Jul 13 01:18:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (time_timespec): rounds subsecond toward zero.
+
+Sun Jul 12 23:51:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * hash.c (env_str_new): use rb_locale_str_new instead of
+ rb_tainted_str_new. rb_locale_str_new set string locale
+ encoding and tainted.
+
+Sun Jul 12 23:56:40 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: added some shortcuts.
+
+ * rational.c: ditto.
+
+Sun Jul 12 23:30:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_to_integer, rb_check_to_integer): return Bignum
+ as-is.
+
+Sun Jul 12 21:07:46 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: use k_exact_{zero,one}_p macro.
+
+ * rational.c: ditto.
+
+Sun Jul 12 20:42:58 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c (fix_divide): added an entry to rational.
+
+ * rational.c (rb_rational_reciprocal): added.
+
+ * complex.c (f_reciprocal): added.
+
+Sun Jul 12 02:24:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (rand_init): use fixed buffer for small numbers.
+
+Sat Jul 11 14:43:34 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ruby/test_io_m17n.rb (test_strip_bom): added.
+
+Sat Jul 11 07:11:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_attempted_completion_function):
+ array length is long.
+
+ * ext/readline/readline.c (readline_s_get_filename_quote_characters):
+ missing type of self.
+
+Sat Jul 11 02:37:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (limited_rand): expands to long before shift so that
+ the result does not overflow.
+
+Sat Jul 11 00:16:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (rand_init): got rid of buffer overflow.
+
+Sat Jul 11 00:11:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (ary_join_1): should recurse for element array.
+
+Fri Jul 10 23:10:11 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (io_strip_bom): ungetbyte third byte when UTF-16LE.
+
+Fri Jul 10 23:04:16 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (io_strip_bom): Fix condition of second byte of
+ UTF-16LE/UTF-32LE.
+
+Fri Jul 10 21:45:30 2009 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/extconf.rb: checked rl_refresh_line in readline.
+
+ * ext/readline/readline.c (readline_s_refresh_line): add new
+ method, a patch from Koichiro Ohba. see [ruby-list:45922].
+
+Fri Jul 10 21:00:05 2009 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/extconf.rb: checked rl_line_buffer and rl_point in
+ readline.
+
+ * ext/readline/readline.c (readline_s_get_line_buffer): new method.
+ (readline_s_get_point): new method.
+
+Fri Jul 10 16:30:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (recursive_join): use obj to tell if recursion occurs.
+ [ruby-core:24150]
+
+ * enum.c (enum_join): reverted r23966. [ruby-core:24196]
+
+Fri Jul 10 14:41:34 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * marshal.c (r_object0): set encoding only if the encoding
+ is not US-ASCII.
+
+Fri Jul 10 14:44:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (struct MT): ruby already assumes int has 32bit a
+ least, so no needs to use long.
+
+ * random.c (rand_init): copies data to be used really only.
+
+Fri Jul 10 11:41:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_obj_{untrust,untrusted,trust}): added
+ prototypes. [ruby-dev:38756]
+
+Fri Jul 10 10:25:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_search_superclass): checks for implicit
+ argument passing before method search. [ruby-core:24244]
+
+Fri Jul 10 07:22:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_data_type): typed.
+
+Thu Jul 9 23:28:48 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/io.h (FMODE_STRIP_BOM): new constant.
+
+ * io.c (io_encname_bom_p): judge whether the encoding name
+ is *-bom or not.
+ (parse_mode_enc): drop "-bom".
+ (rb_io_modestr_fmode): set FMODE_STRIP_BOM if needed.
+ (rb_io_extract_modeenc): ditto.
+ (io_strip_bom): strip bom if exists.
+ (io_set_encoding_by_bom): set encoding if there is bom.
+ Set encoding and strip bom when modeenc string is "r:foo-bom"
+ [ruby-dev:37236]
+
+Thu Jul 9 21:56:59 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * marshal.c (r_object0): replace \u by u when the regexp is
+ made by Ruby 1.8. [ruby-dev:36750]
+
+Wed Jul 8 23:13:54 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_div): omitted zero division check.
+
+Wed Jul 8 21:00:37 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/irb/inspector.rb: forget svn add.
+
+Wed Jul 8 19:10:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_check_type): rejects typed data.
+
+Wed Jul 8 18:28:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c ({proc,binding,method}_data_type): typed.
+
+Wed Jul 8 16:47:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_basename): returns new string instead of
+ shared string from FilePathStringValue(). [ruby-core:24199]
+
+Wed Jul 8 04:28:16 2009 Eric Hodel <drbrain@segment7.net>
+
+ * ext/.document: Update with extensions that appear to have
+ documentation. [ruby-core:24181]
+
+Wed Jul 8 04:28:16 2009 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h:
+ rename
+ "...TypeStruct" and "typed_struct" to
+ "TypedData..." and "typeddata", respectively.
+ rename
+ rb_data_type_t#name to
+ rb_data_type_t#wrap_struct_name.
+
+ * error.c, gc.c, iseq.c, vm.c: ditto.
+
+Tue Jul 7 20:23:27 2009 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * bin/irb, lib/irb.rb lib/irb/*: irb-0.9.6, extend inspect-mode
+
+Tue Jul 7 17:00:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_gc_call_finalizer_at_exit): deal with typed struct like
+ as obj_free().
+
+ * error.c (rb_typed_struct_is_kind_of): new function to see if the
+ given typed struct.
+
+ * error.c (rb_check_typed_struct): new function to check typed
+ struct.
+
+ * include/ruby/ruby.h (Check_TypedStruct, Data_Get_TypedStruct):
+ new macro to check typed struct.
+
+Tue Jul 7 13:36:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enum.c (DEFINE_ENUMFUNCS): included function signature.
+
+ * enum.c (rb_enum_join): non-nil separator must be convertible to
+ String. [ruby-core:24172]
+
+Tue Jul 7 12:47:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (rb_enum_join): should propagate taint to the return
+ value. the change was overridden by r23967. [ruby-core:24176]
+
+Tue Jul 7 11:56:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (GC_PROF_SET_MALLOC_INFO, GC_PROF_SET_HEAP_INFO): simplified.
+
+Tue Jul 7 10:12:37 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_io_ext_int_to_encs): Set external encoding if
+ ext==intern. [ruby-dev:38278]
+
+Mon Jul 6 09:31:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (make_curry_proc): should propagate lambda-ness.
+ [ruby-core:24127]
+
+ * proc.c (proc_hash): use long.
+
+Mon Jul 6 09:06:49 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_module.rb (TestModule#test_undef): adjust to
+ message change.
+
+ * test/ruby/test_object.rb (TestObject#test_redefine_method_which_may_case_serious_problem): ditto.
+
+ * test/ruby/test_object.rb (TestObject#test_remove_method): ditto.
+
+Mon Jul 6 09:04:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enum.c (enum_join): deals with self recursive objects to get rid
+ of infinite recursion. [ruby-core:24150]
+
+Mon Jul 6 08:00:10 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_to_a): should propagate taint to the return value.
+ [ruby-core:24152]
+
+ * enum.c (enum_sort_by): ditto.
+
+Mon Jul 6 00:41:41 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c: edited rdoc.
+
+Sun Jul 5 23:55:57 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (find_time_t): fix Time.local(2009,2,31) failure on 64bit
+ time_t environment.
+
+Sun Jul 5 22:43:13 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_s_polar): now arg is optional.
+
+Sun Jul 5 20:40:35 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (float_arg): returns PI for -0.0.
+
+Sun Jul 5 14:04:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_threadptr_exec_event_hooks): new function to
+ execute event hooks, with preserving errinfo. [ruby-core:24118]
+
+Sun Jul 5 08:14:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_add_method, remove_method, rb_undef): fixed
+ minor grammatical errors in warnings. a patch from Run Pain
+ Run Run at [ruby-core:24141].
+
+ * vm_method.c (Init_eval_method): registers notimplement_body as a
+ mark-object.
+
+ * vm_insnhelper.c (vm_yield_setup_block_args): restores the firs
+ arg where is overwritten at funcall. [ruby-core:24139]
+
+Sat Jul 4 08:20:03 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (dbl2ival): should raise FloatDomainError on Infinity
+ and NaN as 1.8 does. [ruby-dev:38726]
+
+Fri Jul 3 22:48:45 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (find_time_t): less number of guesses for hh:mm:60.
+
+Fri Jul 3 21:30:14 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_equal_p): removed.
+
+Fri Jul 3 21:07:29 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c: renamed equal_p to eqeq_p.
+
+ * complex.c: ditto.
+
+ * complex.c (nucomp_equal_p): added.
+ Complex(NaN).equal?(Complex(NaN)) should return true.
+
+Fri Jul 3 19:48:40 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: undef-ed some methods. [ruby-core:24110]
+
+ * complex.c (Numeric#arg): NaN for NaN. [ruby-core:24116]
+
+Fri Jul 3 18:35:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (struct rb_iseq_struct): fixed types.
+
+ * vm_core.h (ic_vmstat): VM state version is VALUE.
+
+Fri Jul 3 02:52:20 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (find_time_t): time guess strategy refined again.
+
+Fri Jul 3 00:36:16 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (find_time_t): time guess strategy refined.
+
+Thu Jul 2 11:16:25 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb: added response to Net::IMAP::ResponseError.
+ a patch from Eric Hodel in [ruby-core:24111].
+
+Thu Jul 2 08:04:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (num_exact): rb_check_to_integer() can deal with both of
+ Fixnum and Bignum together.
+
+Thu Jul 2 07:53:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_yylex): fixed wrong variable.
+
+Thu Jul 2 05:37:38 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (num_exact): use to_r for T_FLOAT.
+
+Thu Jul 2 05:15:54 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (quo): return an integer if possible.
+
+Wed Jul 1 21:09:25 2009 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_time_num_new): declared.
+
+ * time.c (nsec2timev): extracted from time_new_internal.
+ (time_new_internal): change argument to VALUE.
+ (rb_time_new): follow the argument change.
+ (rb_time_nano_new): ditto.
+ (rb_time_num_new): new function.
+
+ * ext/socket/ancdata.c (ancillary_timestamp): use rb_time_num_new to
+ represent struct bintime preciously.
+
+Wed Jul 1 08:46:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_encoding): encodings need extra depth.
+ [ruby-core:24100]
+
+Wed Jul 1 06:47:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enum.c (enum_grep): gets rid of type-punning calls.
+
+Wed Jul 1 06:36:28 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_join): add Enumerable#join.
+
+ * array.c (ary_join_1): recursive join for Enumerators (and
+ objects with #to_a).
+
+ * array.c (rb_ary_join): performance tune.
+
+Tue Jun 30 18:19:07 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_hash): documentation fix. a patch from
+ Marc-Andre Lafortune. [ruby-core:23943]
+
+ * object.c (rb_mod_cmp): ditto.
+
+ * range.c (range_eq): ditto.
+
+ * string.c (rb_str_partition, rb_str_rpartition): ditto.
+
+ * struct.c (rb_struct_s_def): ditto.
+
+Tue Jun 30 17:44:24 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (reg_match_pos): adjust offset based on characters, not
+ bytes. [ruby-dev:38722]
+
+ * string.c (rb_str_offset): new function.
+
+ * string.c (rb_str_index_m): no call to rb_reg_adjust_startpos().
+
+Tue Jun 30 16:57:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/rbinstall.rb: renamed to get rid of collision against
+ instruction.rb on command line completion of shell.
+
+ * tool/mkconfig.rb (RbConfig.expand): get rid of exceptions on
+ frozen strings unless really changed.
+
+ * tool/file2lastrev.rb: get rid of global variables.
+
+ * tool/compile_prelude.rb: use US-ASCII name.
+
+Tue Jun 30 16:46:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * insns.def, tool/instruction.rb: fixed types.
+
+Tue Jun 30 11:08:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/oniguruma.h, include/ruby/re.h, re.c, regcomp.c,
+ regenc.c, regerror.c, regexec.c, regint.h, regparse.c: use long.
+
+Tue Jun 30 11:05:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (dln_find_1): fixed index overrun.
+
+Tue Jun 30 08:42:34 2009 Eric Hodel <drbrain@segment7.net>
+
+ * tool/instruby.rb: summary is required in a .gemspec.
+
+Tue Jun 30 01:35:12 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * tool/strip-rdocs.rb: supports QT style doxy-comments.
+
+Tue Jun 30 01:24:10 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/cmath.rb (log2, cbrt): added. [experimental]
+
+Tue Jun 30 01:19:53 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_expt): do not use rb_fexpt.
+
+Mon Jun 29 22:50:10 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * Doxyfile.in: removed. merged into template/Doxyfile.template
+
+ * configure.in: new checking for dot and doxygen.
+
+ * template/Doxyfile.template: merged with Doxyfile.in.
+ configured some options.
+
+ * common.mk (capi): use $(DOXYGEN) instead of "doxygen".
+ (Doxyfile): removed a duplicate entry in the dependency.
+
+Mon Jun 29 21:01:31 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_expt): checks exactness.
+
+Mon Jun 29 20:29:11 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (float_to_r): always returns rational.
+
+Mon Jun 29 18:55:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (dln_find_1): fix for files with dots. [ruby-dev:38588]
+
+Mon Jun 29 17:14:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): should copy original encoding.
+ [ruby-dev:38612]
+
+Sun Jun 28 23:10:55 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * gem_prelude.c (Gem.default_dir): follows the change on
+ lib/rubygems/default.rb in r23879
+
+Sun Jun 28 23:32:11 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_div): raises ZeroDivisionError immediately
+ when the given second argument is zero.
+
+ * rational.c (nurat_fdiv): never raise even if the given second
+ argument is zero.
+
+ * rational.c (rb_raise_zerodiv): changed the message (zero to 0).
+
+Sun Jun 28 22:25:07 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_expt): convert to a float when the given power
+ is a bignum.
+
+ * rational.c (nurat_expt): ditto.
+
+Sun Jun 28 21:16:48 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/cmath.rb (sqrt): fixed an issue [ruby-list:45852].
+
+Sun Jun 28 19:48:29 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_expt): some improvements.
+
+ * rational.c (nurat_expt): ditto.
+
+Sun Jun 28 19:03:46 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * tool/instruby.rb (:gem): registers the bundled version
+ of minitest as a gem as rdoc or rake.
+ c.f. [ruby-dev:38692].
+
+Sun Jun 28 19:02:07 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/rubygems.rb (ConfigMap[:rubylibprefix]): new entry.
+
+ * lib/rubygems/defaults.rb (Gem.default_dir): considers
+ "--with-rubylibprefix" configure option.
+
+Sun Jun 28 09:21:00 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: renamed some static functions.
+
+ * rational.c: ditto.
+
+Sat Jun 27 19:06:22 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_addsub): new
+
+ * complex.c (nucomp_{add,sub}): use nucomp_addsub.
+
+ * complex.c (nucomp_divide): changed the algorithm.
+
+ * complex.c (nucomp_abs): added shortcuts.
+
+Sat Jun 27 16:56:33 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_cmp): use rb_num_coerce_cmp.
+
+Sat Jun 27 16:45:10 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: revised rdoc.
+
+ * rational.c: ditto.
+
+ * numeric.c: ditto.
+
+Sat Jun 27 13:44:48 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * NEWS, lib/rss/maker/base.rb, test/rss/test_maker_2.0.rb: add
+ item.guid.permanent_link? and item.guid.permanent_link=.
+
+Sat Jun 27 13:41:00 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * NEWS: rss: 0.2.5 -> 0.2.7.
+
+ * lib/rss/rss.rb, test/rss/test_version.rb: 0.2.6 -> 0.2.7.
+
+Sat Jun 27 03:16:56 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (int_chr): use default_internal encoding as default
+ destination encoding if set. [ruby-core:23997]
+
+Sat Jun 27 03:09:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_rewind): need to rewind $. and ARGF.lineno.
+ [ruby-core:24046]
+
+ * io.c (struct argf): refactoring on $. and ARGF.lineno behavior.
+
+Fri Jun 26 21:48:30 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/pty.c (pty_getpty): check dup failure.
+
+Fri Jun 26 17:33:46 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_rubyopt):
+ test suite add '.' to RUBYLIB. remove checks.
+
+ * test/ruby/test_require.rb (TestRequire#test_tainted_loadpath):
+ the default tempdir directory /tmp is world writable, so
+ SecurityError would be raised. check removed.
+
+Fri Jun 26 16:32:59 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (COMPILE_PRELUDE): need -I. before -rrbconfig.
+ [ruby-dev:38714]
+
+Thu Jun 25 18:41:51 2009 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 1.4.2 r5269.
+ * test/minitest/*.rb: ditto.
+
+Thu Jun 25 17:58:39 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_binmode_m): should call rb_io_ascii8bit_binmode() to
+ set its encoding to ASCII-8BIT. [ruby-core:24029]
+
+Thu Jun 25 13:04:58 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * instruby.rb: '&' in sed s command's replacement is '\&' in ruby.
+ [ruby-dev:38713]
+
+Thu Jun 25 06:50:23 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_each_codepoint): uninitialized local variable enc.
+
+Thu Jun 25 06:25:49 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (first_i): wrong condition for no argument #first.
+ [ruby-core:24017]
+
+Wed Jun 24 20:19:11 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_s_now): new function. Time.now don't take arguments.
+
+Wed Jun 24 16:08:03 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/resource.rb: CONFIG["TEENY"] is not ruby's version but API's
+ one. So need to use RUBY_VERSION instead.
+
+Wed Jun 24 16:07:04 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/mkexports.rb: rbconfig.rb exists at ".".
+
+Wed Jun 24 15:02:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_set_encode): show the erred file name instead of
+ the file that requires it. [ruby-core:24006]
+
+Wed Jun 24 11:41:20 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-style.el: It is too late to set c-file-style in
+ c-mode-hook (at least on Emacs 23). Call c-set-style instead.
+
+Tue Jun 23 21:28:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_get_path_check): check with given safe level.
+
+ * file.c (rb_find_file_ext_safe, rb_find_file_safe): ditto.
+
+ * safe.c (rb_insecure_operation): function to raise security
+ error.
+
+Tue Jun 23 20:32:43 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * gc.c: remove the definition of GC_DEBUG (debugging macro).
+
+Tue Jun 23 16:16:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (ruby_version): defaults revision to 0 when no
+ revision.h exists.
+
+Tue Jun 23 16:04:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_find_file_ext, rb_find_file): no needs to expand
+ paths with tilde twice.
+
+ * load.c (rb_f_load): load the given path directly if not found in
+ load_path.
+
+ * load.c (search_required): search file in specified safe level.
+
+ * load.c (rb_require_safe): path to load is already searched in
+ search_required().
+
+Tue Jun 23 12:43:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: remove PACKAGE_* macros generated by autotools.
+ [ruby-core:20938]
+
+Tue Jun 23 01:17:38 2009 Tanaka Akira <akr@fsij.org>
+
+ * ruby.c (process_options): don't specify .so for encdb here.
+ "." is replaced by "_" in load_encoding.
+
+ * encoding.c (load_encoding): add .so here.
+
+Mon Jun 22 23:24:22 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_generic_ivar_memsize): typo fixed. a patch from
+ Kazuhiro NISHIYAMA. [ruby-dev:38700]
+
+ * ext/objspace/objspace.c (memsize_of): ditto.
+
+Mon Jun 22 21:21:59 2009 Tanaka Akira <akr@fsij.org>
+
+ * io.c: remove __CHECKER__ test.
+
+ * dir.c: ditto.
+
+ * dln.c: ditto.
+
+ * file.c: ditto.
+
+ * process.c: ditto.
+
+Mon Jun 22 17:15:38 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_each_codepoint): new method.
+ [ruby-core:23949]
+
+ * ext/stringio/stringio.c (strio_each_codepoint): ditto.
+
+Mon Jun 22 16:26:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe): removed "." from load_path.
+
+Mon Jun 22 16:14:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_set_arguments, iseq_compile_each): internal
+ arrays must be hidden. [ruby-dev:38613]
+
+ * vm.c (Init_top_self): ditto.
+
+Mon Jun 22 14:41:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options), enc/prelude.rb: encdb and transdb are
+ extension libraries.
+
+ * ruby.c (process_options): set progname earlier.
+
+Mon Jun 22 13:50:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_fdatasync): new method IO#fdatasync.
+
+Sun Jun 21 22:33:05 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * load.c (Init_load): $: must be readonly. [ruby-dev:38690]
+
+ * ruby.c (ruby_prog_init): $-W must be readonly. [ruby-dev:38691]
+
+Sun Jun 21 10:47:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/fileutils.rb (FileUtils::Entry_#copy_file): open with
+ default umask. [ruby-core:23952]
+
+Sun Jun 21 10:46:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (enc_arg): default internal encoding may not be set.
+ [ruby-core:23932]
+
+Sat Jun 20 21:11:43 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c (num_div): don't use num_floor which is actually
+ flo_floor.
+
+ * numeric.c (num_modulo): don't call '%'.
+
+ * numeric.c (num_divmod): use num_modulo.
+
+ * numeric.c: defined '%'.
+
+ * rational.c (nurat_idiv,nurat_mod,nurat_divmod,nurat_rem): removed.
+
+Sat Jun 20 20:28:44 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: edited rdoc.
+
+ * numeric.c: ditto.
+
+Sat Jun 20 08:56:47 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: edited rdoc.
+
+ * rational.c: ditto.
+
+ * numeric.c: ditto.
+
+Sat Jun 20 07:17:52 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/monitor.rb (MonitorMixin::extend_object): should use
+ #__send__ instead of #send to avoid possible name conflict.
+ [ruby-core:23907]
+
+Sat Jun 20 06:56:31 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: edited rdoc.
+
+ * rational.c: ditto.
+
+Sat Jun 20 05:08:59 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: edited rdoc.
+
+ * rational.c: ditto.
+
+Sat Jun 20 04:30:35 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_abs): removed.
+
+Sat Jun 20 03:34:16 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: added rdoc.
+
+Fri Jun 19 23:43:38 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c: edited rdoc.
+
+Fri Jun 19 22:58:16 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c: edited rdoc.
+
+Fri Jun 19 22:21:17 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c: edited rdoc.
+
+Fri Jun 19 21:56:01 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_expt): delegates to complex when self is
+ negative. because Float#** does not produce complex.
+
+Fri Jun 19 21:40:58 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c: edited rdoc.
+
+ * rational.c: ditto.
+
+Fri Jun 19 20:53:54 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * encoding.c (rb_enc_name_list): update RDoc. [ruby-core:23926]
+
+Fri Jun 19 20:44:45 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: constant COMPLEX_NAME has been removed.
+
+ * rational.c: constant RATIONAL_NAME has been removed.
+
+Fri Jun 19 20:39:46 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c: added rdoc. a patch from Run Paint Run Run.
+
+Fri Jun 19 17:04:59 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flo_cmp): should always return nil for NaN.
+
+ * numeric.c (flo_cmp): handle infinite value specially using
+ infinite? method internally. [ruby-dev:38681]
+
+Fri Jun 19 09:28:45 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c (*_numerator,*_denominator): moved to rational.c.
+
+ * rational.c (*_numerator,*_denominator): moved from numeric.c.
+
+Fri Jun 19 08:14:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (big_lshift, big_rshift): return Bignum always without
+ normalization. [ruby-dev:38679]
+
+Thu Jun 18 22:31:38 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_s_convert): calls to_r when the given argument
+ is non-integer.
+
+ * rational.c (nurat_s_convert): raises TypeError when the given
+ argument is nil.
+
+ * complex.c (nucomp_s_convert): ditto.
+
+Thu Jun 18 20:32:11 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c (num_numerator, num_denominator): use
+ to_r [ruby-core:23910].
+
+Thu Jun 18 16:21:05 2009 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 1.4.0 r5083.
+ * test/minitest/*.rb: ditto.
+
+Thu Jun 18 10:12:49 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): went infinity too
+ early. add BASE_FIG margin. [ruby-dev:38673]
+
+Thu Jun 18 01:35:51 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flo_cmp): Infinity is greater than any bignum
+ number. [ruby-dev:38672]
+
+ * bignum.c (rb_big_cmp): ditto.
+
+Thu Jun 18 01:29:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): drive letter is ascii only.
+ [ruby-dev:38612]
+
+Thu Jun 18 01:09:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (ridir, RI_BASE_NAME): fixed for path expansion.
+ [ruby-core:23876]
+
+Wed Jun 17 23:46:08 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_coerce): accepts Complex when the imag is
+ exact zero.
+
+Wed Jun 17 21:25:54 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * bignum.c (rb_big_fdiv): checks whether the given second argument
+ can be converted to float properly.
+
+ * numeric.c (fix_fdiv): calls rb_big_fdiv when the given second
+ argument is a bignum.
+
+ * rational.c (nurat_fdiv): should calculate Float(x/y), not
+ Float(x)/Float(y).
+
+Wed Jun 17 16:57:40 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * load.c (rb_f_require): RDoc updated. a patch from Run Paint Run
+ Run in [ruby-core:23833].
+
+ * load.c (rb_mod_autoload): ditto. [ruby-core:23835]
+
+Wed Jun 17 14:37:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sample/test.rb (valid_syntax?): skips BOM. [ruby-dev:38666]
+
+ * test/ruby/test_system.rb (TestSystem#valid_syntax?): ditto.
+
+Wed Jun 17 13:54:18 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/strscan/strscan.c (Init_strscan): remove obsolete
+ matchedsize method, use matched_size instead. [ruby-dev:38591]
+
+Wed Jun 17 12:37:37 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (ruby_thread_stack_overflow): call rb_exc_raise() on
+ stack overflows in the signal handler, if sigaltstack is
+ available. On stack overflow (and with sigaltstack), the signal
+ handler is more likely to have room to create an exception
+ object. [ruby-core:23813]
+
+Wed Jun 17 08:10:38 2009 Koichi Sasada <ko1@atdot.net>
+
+ * ext/objspace: added. objspace library extends some methods to
+ ObjectSpace module.
+
+Wed Jun 17 08:14:01 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_coerce): accepts Complex instances.
+
+ * rational.c (nurat_coerce): accepts Rational
+ instances. [ruby-core:23859]
+
+Wed Jun 17 07:36:22 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/webrick/httputils.rb (parse_form_data): escape boundary of
+ multipart/form-data when embed in regexp.
+
+Wed Jun 17 07:24:26 2009 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (rb_ary_memsize): added.
+
+ * io.c (rb_io_memsize): added.
+
+ * regcomp.c (onig_memsize): added.
+
+ * string.c (rb_str_memsize): added.
+
+ * transcode.c (rb_transcoding_memsize, rb_econv_memsize): added.
+
+ * variable.c (rb_geneic_ivar_memsize): added.
+
+Wed Jun 17 07:04:33 2009 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c (iseq_memsize): added. Use RTypedData instead of RData
+ for ISeq.
+
+ * vm.c (env_memsize, vm_memsize, thread_memsize): added. Use
+ RTypedData instead of RData for Env, VM, Thread.
+
+Wed Jun 17 06:48:28 2009 Koichi Sasada <ko1@atdot.net>
+
+ * st.c, include/ruby/st.h (st_memsize): added. This function returns
+ the memory usage of st_table.
+
+Wed Jun 17 06:19:06 2009 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: New structure RTypedData, added.
+ This structure includes more explicit type information for
+ T_DATA objects. If RData(obj)->dfree is immediate value `1' on
+ T_DATA object obj, obj is needed to be accessed with RTYPEDDATA(obj)
+ instead of RDATA(obj). A RTypedData structure points the structure
+ rb_typed_data_t. rb_typed_data_t includes information such as the
+ type name of this data, mark and free function what RData includes,
+ and memsize function show how data consuming the memory size.
+ Note that you do not need any change existing T_DATA objects.
+ If you use RDataType instead of RData on T_DATA object,
+ you can specify explicit type information.
+
+ * gc.c (rb_data_typed_object_alloc, rb_objspace_data_type_memsize,
+ rb_objspace_data_type_name): added.
+
+Wed Jun 17 06:14:23 2009 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: fix indent.
+
+Wed Jun 17 06:05:03 2009 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (rb_objspace_each_objects): New C API, added.
+
+Wed Jun 17 00:31:30 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_argf.rb (TestArgf#test_skip): updated test
+ according to clarified behavior.
+
+Tue Jun 16 22:47:37 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (fptr_finalize): revert last change. [ruby-dev:38648]
+
+ * io.c (fptr_finalize): skip close(2) for fd 0,1,2.
+
+Tue Jun 16 20:07:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (transcode_restartable0): refix can't build with VC9.
+
+Tue Jun 16 16:09:59 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * parse.y (parser_read_escape, parser_tokadd_escape):
+ replace scan_oct as ruby_scan_oct.
+
+Tue Jun 16 06:40:31 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (fptr_finalize): should close stdin/stdout/stderr when
+ closed explicitly. [ruby-core:23853]
+
+ * io.c (argf_skip): should close only when current_file is available.
+
+Tue Jun 16 01:50:02 2009 Tanaka Akira <akr@fsij.org>
+
+ * vm_eval.c (rb_call0): refine exception message for hidden objects.
+
+Mon Jun 15 22:35:31 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * bignum.c (rb_big2db): (-Float::MAX.to_i*2).to_f should return
+ -HUGE_VAL (-Infinity).
+
+Mon Jun 15 18:48:41 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (argf_each_line): should return self. [ruby-core:23852]
+
+ * io.c (argf_each_byte, argf_each_char): ditto.
+
+Mon Jun 15 17:48:42 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (os_obj_of): invoke garbage collection before iteration, to
+ avoid accessing half recycled object references. [ruby-dev:38613]
+
+Mon Jun 15 11:04:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * .gdbinit (rp, iseq): load dummy_gdb_enums on demand.
+ [ruby-dev:38606]
+
+Sun Jun 14 14:57:57 2009 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c, vm_eval.c: add Thread.backtrace.
+
+ * test/ruby/test_thread.rb: add a test.
+
+Sun Jun 14 13:58:32 2009 Koichi Sasada <ko1@atdot.net>
+
+ * transcode.c (transcode_restartable0): revert last commit because
+ this change cause SEGV at test-all.
+
+Sun Jun 14 10:49:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_find_file_ext, rb_find_file): canonicalize absolute
+ paths. [ruby-core:23845]
+
+ * file.c (rb_file_size): added rdoc. a patch from Run Paint Run
+ Run at [ruby-core:23839].
+
+Sun Jun 14 07:53:26 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_fdiv): use fdiv recursively.
+
+ * complex.c (nucomp_expt): reduced code.
+
+Sun Jun 14 03:37:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/utf8_mac.trans: remove wrong optimization.
+
+Sun Jun 14 01:53:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (transcode_restartable0): can't build with VC9.
+
+Sun Jun 14 01:23:41 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_to_f): use fdiv.
+
+Sat Jun 13 15:03:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (load_lock): show backtrace at circular require.
+
+ * load.c (rb_provide): assumes us-ascii only.
+
+ * load.c (rb_require_safe): FilePathValue() implies rb_str_new4().
+
+ * load.c (rb_mod_autoload): try conversion to path like as
+ require. [ruby-core:23834]
+
+Sat Jun 13 09:58:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (r_ivar): should not set internal encoding ivar as an
+ ordinary ivar. [ruby-dev:38596]
+
+Sat Jun 13 07:08:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (rb_f_local_variables): now returns symbols. a patch from
+ Run Paint Run Run at [ruby-core:23828].
+
+Sat Jun 13 07:06:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (rb_f_catch): updated rdoc about generalized argument,
+ and the case without arguments. [ruby-core:23827]
+
+Sat Jun 13 06:50:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/net/protocol.rb (Net::BufferedIO#rbuf_fill): TimeoutError is
+ obsolete, use Timeout::Error instead. [ruby-core:23821]
+
+Sat Jun 13 06:45:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (rb_f_throw): fixed rdoc about exception.
+ [ruby-core:23824]
+
+Fri Jun 12 14:56:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): associate the input encoding when
+ copying an absolute path. [ruby-dev:38594]
+
+Fri Jun 12 02:41:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_replace_shared): shared target must be frozen.
+ [ruby-core:23727]
+
+Thu Jun 11 21:05:09 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/cmath.rb (exp): omitted redundant function call.
+
+Thu Jun 11 17:49:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (gfCheckVal): never used.
+
+ * ext/bigdecimal/bigdecimal.c (VpInit): fixed format modifiers.
+
+ * ext/bigdecimal/bigdecimal.c (VPrint): constified.
+
+Thu Jun 11 15:27:17 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/prime.rb: documentation typo fixed. a patch from okkez.
+ [ruby-dev:38586]
+
+Wed Jun 10 18:15:17 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * dir.c (dir_s_getwd): directory path's encoding should be filesystem's
+ one.
+
+ * lib/tmpdir.rb: ditto (but not finished yet.)
+
+Wed Jun 10 06:28:15 2009 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems*: Upgrade to RubyGems 1.3.4 r2223.
+
+Tue Jun 9 22:38:09 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/cmath.rb (log10): raised exception when the given number is
+ a negative real.
+
+Tue Jun 9 15:13:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (dir_s_glob): fixed rdoc. a patch from Joseph Pecoraro a
+ [ruby-core:23767].
+
+ * dir.c (sys_warning): get rid of type-punning function cast.
+
+ * dir.c (ruby_glob0): get rid of possible overflow.
+
+Tue Jun 9 10:58:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, win32/Makefile.sub (RMALL): need for distclean-rdoc.
+
+Tue Jun 9 01:07:33 2009 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c: rename functions which require a parameter
+ "rb_thread_t *", the prefix to be rb_threadptr_ instead of
+ rb_thread_.
+
+ * thread.c (rb_thread_add_event_hook(), rb_thread_remove_event_hook):
+ change the parameter type from rb_thread_t * to VALUE.
+
+ * eval.c, eval_error.c, eval_intern.h, signal.c, vm_core.h, vm_eval.c:
+ ditto.
+
+ * include/ruby/intern.h: remove decl of rb_thread_signal_raise() and
+ rb_thread_signal_exit().
+
+Mon Jun 8 05:07:41 2009 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (rb_thread_create_timer_thread): print fatal error
+ message to stderr instead of using rb_bug().
+
+ * KNOWNBUGS.rb, bootstraptest/test_fork.rb: move a fixed test.
+
+Sun Jun 7 22:44:20 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/cmath.rb (log): avoided redundant expression.
+
+Sat Jun 6 02:49:05 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_reject_bang): always check frozen status.
+ [ruby-core:23715]
+
+ * hash.c (rb_hash_update): ditto.
+
+ * hash.c (rb_hash_reject_bang): call rb_hash_foreach() directly.
+
+ * hash.c (rb_hash_update_i): call st_insert() directly.
+
+ * hash.c (rb_hash_update_block_i): ditto.
+
+Fri Jun 5 07:12:32 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/mkmf.rb (#link_command): should dup CONFTEST_C which is
+ frozen. ref [ruby-core:23675]. [ruby-core:23702]
+
+Thu Jun 4 02:25:51 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/base64.rb: typo fixed. a patch from okkez. [ruby-dev:38564]
+
+Wed Jun 3 09:03:23 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_first): should check negative length.
+
+Tue Jun 2 17:32:40 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (first_i): Enumerator#first should consume only what is
+ needed. a patch from Marc-Andre Lafortune. [ruby-core:23661]
+
+ * enum.c (enum_first): call to_int once for an argument. based on
+ a patch from Marc-Andre Lafortune.
+
+Tue Jun 2 13:27:21 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ripper/test_filter.rb: add tests. see [ruby-dev:37856]
+
+Tue Jun 2 07:44:43 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_gsub_bang): modify check at the beginning.
+ [ruby-core:23662] ref [ruby-core:23657]
+
+ * string.c (rb_str_rstrip_bang): ditto. [ruby-core:23657]
+
+ * string.c (rb_str_chop_bang): ditto.
+
+ * string.c (rb_str_chomp_bang): ditto.
+
+ * string.c (rb_str_reverse_bang): modify check added. [ruby-core:23671]
+
+Mon Jun 1 11:21:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (cont_capture, fiber_store): reraise transferred error.
+
+ * cont.c (fiber_switch): transfers dead fiber error to the previous
+ or root fiber if the current fiber is dead. [ruby-core:23651]
+
+Mon Jun 1 10:41:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_exc_new2): optimization for literal.
+
+Mon Jun 1 07:20:02 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): returns Inf if
+ exp is bigger than DBL_MANT_DIG.
+
+Sun May 31 23:28:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): checks for duplication of source
+ files.
+
+Sun May 31 23:26:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (istrailinggarbage): fixed typo.
+
+Fri May 29 17:10:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * struct.c (Init_Struct): made #to_s an alias to #inspect to
+ reduce the result of recursive struct. a patch from ujihisa a
+ [ruby-dev:38554].
+
+Fri May 29 17:08:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (Init_Hash): made #to_s an alias to #inspect to reduce
+ the result of recursive hash. a patch from ujihisa a
+ [ruby-core:23601]. [ruby-dev:38555]
+
+Fri May 29 09:30:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enum.c (collect_all): checks interrupts. [ruby-core:23594]
+
+Thu May 28 07:39:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (THREAD_MODEL): reject unknown value and checks
+ pthread.h only when pthread. [ruby-core:23577]
+
+Thu May 28 03:47:46 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sample/optparse/opttest.rb: typo fixed. [ruby-dev:38544]
+
+Thu May 28 03:43:10 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_strftime): update RDoc according to info from
+ Marc-Andre Lafortune in [ruby-core:23575]. [ruby-core:23564]
+
+Thu May 28 02:40:54 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/uri: don't set @parser if it is DEFAULT_PARSER for marshaling
+ URI objects between Ruby 1.8 and Ruby 1.9.
+ [ruby-dev:38377]
+
+Wed May 27 23:00:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (struct parser_params): lex_gets_ptr should be long.
+
+Wed May 27 18:00:15 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigand_int): new function to calculate bignum and
+ fixnum without allocating internal bignum.
+
+ * bignum.c (bigor_int): ditto.
+
+ * bignum.c (bigxor_int): ditto.
+
+ * bignum.c (bigand_int): even less object allocation.
+
+Wed May 27 14:29:55 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * marshal.c (w_encoding): more compact encoding information for
+ US-ASCII and UTF-8. [incompatible] [experimental]
+
+ * marshal.c (r_ivar): restore :E encoding information.
+
+Wed May 27 14:08:39 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * st.c (st_insert2): new function with processing new key,
+ e.g. copy.
+
+ * hash.c (rb_hash_aset): use st_insert2() to reduce redundant
+ st_lookup calls.
+
+Wed May 27 02:31:38 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_getc): the function for
+ rl_getc_function must be a byte function.
+ so use getbyte method. [ruby-dev:38535]
+
+Tue May 26 14:24:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c: fixed types.
+
+ * common.mk (bignum.o, numeric.o): depend on util.h.
+
+ * bignum.c, marshal.c: fixed types.
+
+ * numeric.c (infinite_value): use ruby_div0.
+
+ * include/ruby/util.h (ruby_div0): moved from marshal.c.
+
+Tue May 26 11:01:41 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * lib/mkmf.rb: use map! to replace strings in $objs array.
+
+Tue May 26 10:12:08 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bignew_1): inline memory allocation.
+
+ * bignum.c (bigtrunc): call rb_big_resize() only when needed.
+
+ * bignum.c (bigfixize): declare inline.
+
+Tue May 26 05:39:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (FilePathValue): prevent from GC.
+
+ * include/ruby/ruby.h (NUM2LONG): added GCC specific optimization.
+
+Tue May 26 03:41:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (rb_gmtime, rb_localtime): gmtime and localtime return
+ NULL on error. [ruby-core:23551]
+
+Tue May 26 03:38:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_each_char, rb_str_each_codepoint): string
+ length must be long.
+
+Mon May 25 13:27:32 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * lib/mkmf.rb: dont use gsub! method for frozen string.
+
+Mon May 25 11:47:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/mkconfig.rb, tool/instruby.rb: removed redundant code.
+
+Mon May 25 09:34:09 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_hash): avoid calling rb_enc_str_asciionly_p().
+
+ * string.c (rb_str_replace): avoid redundant calling rb_str_new4().
+
+ * string.c (str_replace): factor out replacement from
+ rb_str_replace() without type check nor discarding the
+ destination contents.
+
+Mon May 25 08:06:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_partition): should use the converted result. a
+ patch from Marc-Andre Lafortune at [ruby-core:23540].
+
+ * string.c (rb_str_rpartition): ditto.
+
+Mon May 25 06:25:38 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_hash.rb (TestHash::test_equal2): recursive hashes
+ are handled properly now. ref: [ruby-core:23402]
+
+ * test/ruby/test_m17n.rb (TestM17N#test_sprintf_p): test fixed
+
+Mon May 25 05:32:19 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/cgi/core.rb (CGI::HTTP_STATUS): typo fixed. a patch from
+ Nobuhiro IMAI. [ruby-dev:38538]
+
+Sun May 24 22:48:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_exec_recursive_paired): new function for proper
+ handling of recursive arrays. [EXPERIMENTAL] [ruby-core:23402]
+
+ * array.c (rb_ary_equal, rb_ary_eql, rb_ary_cmp): use above.
+
+ * hash.c (hash_equal): ditto.
+
+Sun May 24 22:39:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (syserr_initialize): errno is int.
+
+Sun May 24 00:52:54 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * configure.in ($ridir): new configuration. [ruby-core:23520].
+ c.f. [ruby-core:23519].
+
+ (--with-ridir): new configure option.
+
+ * tool/instruby.rb (:doc, :rdoc): uses $ridir instead of
+ a fixed path.
+
+ * lib/rdoc/ri/paths.rb: follows $ridir.
+
+ * Makefile.in: removes RIDATADIR which is no longer used.
+
+ * bcc32/Makefile.sub: generates the 'ridir' entry for RbConfig.
+ removes RIDATADIR which is no longer used.
+
+ * win32/Makefile.sub: ditto.
+
+Sat May 23 23:52:33 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_each_char): return original string.
+ [ruby-core:23499]
+
+ * string.c (rb_str_each_codepoint): protect string from
+ modification.
+
+Sat May 23 21:48:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/handle.c (rb_dlhandle_s_sym): added a method to access
+ using RTLD_NEXT. [ruby-dev:38152]
+
+ * ext/dl/handle.c (Init_dlhandle): added constants DEFAULT and
+ NEXT which correspond to RTLD_DEFAULT and RTLD_NEXT.
+
+Sat May 23 18:53:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/lib/dl/cparser.rb (DL::CParser#parse_struct_signature):
+ splitting with regexp source string is obsolete. a patch from
+ Minwoo Lee at [ruby-core:23494].
+
+ * ext/dl/cptr.c (rb_dlptr_cmp): return signed value, and restrict
+ to Fixnum. [ruby-dev:38533]
+
+Fri May 22 23:22:53 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * missing/vsnprintf.c (errno): [BUG] fixes a compilation
+ error on SIZEOF_LONG > SIZEOF_INT.
+ (BSD_vfprintf): ditto.
+
+Fri May 22 23:20:48 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * spec/default.mspec: follows runruby.rb's move at r23542.
+
+Fri May 22 21:38:55 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * NEWS: add Time#to_r.
+
+Fri May 22 20:29:01 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * config.guess: moved into tool/.
+
+ * config.sub: ditto.
+
+ * install-sh: ditto
+
+ * configure.in: follows the moves.
+
+ * LEGAL: ditto.
+
+Fri May 22 20:10:18 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * instruby.rb: moved into tool/.
+
+ * mkconfig.rb: ditto.
+
+ * rubytest.rb: ditto.
+
+ * runruby.rb: ditto.
+
+ * common.mk: follows the moves.
+
+ * configure.in: ditto.
+
+ * win32/Makefile.sub: ditto.
+
+Fri May 22 05:09:43 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_slice_bang): avoid call of rb_scan_args() unless
+ it's really necessary.
+
+Thu May 21 22:17:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/id.h.tmpl, id.h (enum ruby_method_ids): added some IDs.
+
+ * debug.c (dummy_gdb_enums): added enum ruby_method_ids.
+
+ * .gdbinit (rp): improved output of Symbol.
+
+Thu May 21 21:07:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * missing/vsnprintf.c (BSD_vfprintf): support for 'z' modifier.
+
+Thu May 21 18:55:33 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * gem_prelude.rb (Gem.default_dir and misc.): use rubylibprefix.
+ follows the change in r23368.
+
+Thu May 21 12:07:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (RB_EVENT_HOOKS_HAVE_CALLBACK_DATA):
+ new macro for compatibility check.
+
+Thu May 21 01:43:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_long2int, RARRAY_LENINT): check long to
+ cast to int. [ruby-dev:38508]
+
+ * struct.c, vm_eval.c, vm_insnhelper.c: use RARRAY_LENINT.
+
+Wed May 20 21:00:27 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * rb_enc_get_index: allows an arbitrary RData as the argument but not
+ only what points a rb_encoding.
+
+Wed May 20 20:54:37 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * spec/.gitignore: ignores rubyspec/ and mspec/.
+
+Wed May 20 19:41:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * struct.c (rb_struct_new): get rid of too large alloca.
+
+ * struct.c (rb_struct_hash): use long.
+
+Wed May 20 18:58:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c, vm_insnhelper.c: argument number is restricted to
+ int, and fixed overflow.
+
+Wed May 20 18:34:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enum.c (zip_ary): should use long.
+
+ * enumerator.c (inspect_enumerator): should use long.
+
+Wed May 20 09:18:44 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_count): optimized for 1byte string count by
+ avoiding tr_setup_table().
+
+Wed May 20 06:25:29 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * encoding.c (rb_enc_fast_mbclen): faster mbclen for strings known
+ to be valid.
+
+ * string.c (enc_strlen): coderange specified version of
+ rb_enc_strlen(). use rb_enc_fast_mbclen() if coderange is 7bit
+ or valid.
+
+ * string.c (str_gsub): use rb_enc_fast_mbclen().
+
+ * string.c (rb_str_reverse, rb_str_split_m, rb_str_each_char,
+ scan_once): ditto.
+
+Wed May 20 06:20:05 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#unlink): close first for Windows. a
+ patch from Florian Frank. [ruby-core:23505]
+
+Wed May 20 00:13:38 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * encoding.c (rb_enc_codepoint_len): combine rb_enc_codepoint()
+ and rb_enc_codelen() in one function to reduce calls.
+
+ * encoding.c (rb_enc_codepoint): compatibility function.
+
+ * sprintf.c (rb_str_format): use rb_enc_codepoint_len().
+
+ * string.c (rb_str_inspect, rb_str_upcase_bang,
+ rb_str_downcase_bang, rb_str_capitalize_bang,
+ rb_str_swapcase_bang, trnext, tr_trans, rb_str_delete_bang,
+ rb_str_squeeze_bang, rb_str_count, rb_str_split_m,
+ rb_str_each_line, rb_str_each_codepoint, rb_str_lstrip_bang,
+ sym_printable): ditto.
+
+ * transcode.c (make_econv_exception): use rb_enc_mbc_to_codepoint()
+
+Wed May 20 00:05:52 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_method.c (rb_attr): should preserve encoding info.
+ [ruby-dev:38498]
+
+Tue May 19 22:54:35 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * time.c (time_minus): always return a Float. [ruby-dev:38446]
+
+ * time.c (time_to_r): new method. [ruby-dev:38461]
+
+Tue May 19 13:59:35 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (clone_method): add cast to remove warning from
+ rb_gc_write_barrier().
+
+Tue May 19 13:54:15 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * struct.c (struct_ivar_get): new function to avoid repeated
+ rb_intern() calls.
+
+ * struct.c (rb_struct_iv_get): use struct_ivar_get()
+
+ * struct.c (num_members): ditto.
+
+ * struct.c (rb_struct_s_members): ditto.
+
+ * class.c (rb_singleton_class): cache symbol to reduce calls to
+ rb_intern().
+
+Tue May 19 07:52:05 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/test_time.rb: make tests timezone independent.
+ reported by zunda. [ruby-dev:38492]
+
+Mon May 18 21:40:11 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/pathname.rb (Pathname#sub): suppress a warning. [ruby-dev:38488]
+
+Sun May 17 23:23:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (SRC_EXT): should be flat.
+ http://twitter.com/_tad_/status/1825862632
+
+Sun May 17 23:05:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe): VARIABLE_LIBPATH is always
+ defined, see its value instead.
+
+Sun May 17 18:59:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * node.h (nd_line): NODE_LMASK is not needed.
+
+ * node.h (NOEX_SAFE): made int.
+
+Sun May 17 14:23:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (rb_parse_in_eval): returns true in true eval, not in
+ main. [ruby-dev:38382]
+
+ * parse.y (program): inherits dvars in eval or main.
+
+Sun May 17 14:02:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_script): sets also VM toplevel program name.
+
+ * ruby.c (process_options): no longer needs additional frame.
+
+ * vm.c (rb_vm_get_sourceline): should not access out of bound.
+
+Sun May 17 09:47:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (cmdline_options_init): initialize encodings.
+
+ * ruby.c (add_modules, require_libraries, process_sflag):
+
+ * ruby.c (process_sflag): not process twice.
+
+ * ruby.c (moreswitches): get rid of possible overflow.
+
+Sun May 17 09:31:05 2009 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (foletypelib_name): should return
+ encoded name corresponding to WIN32OLE.codepage.
+
+Sun May 17 09:02:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe): support for cygwin 1.7. see
+ [ruby-core:23241].
+ gets rid of possible buffer overflow with realpath().
+
+ * ruby.c (set_arg0): get rids of overrun.
+
+Sat May 16 18:38:32 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/parser.rb: add nil check.
+
+Sat May 16 18:36:01 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rss/test_maker_atom_feed.rb: suppress warnings.
+
+Sat May 16 18:33:15 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * NEWS: add RSS::Maker.supported?(version).
+
+Sat May 16 18:26:42 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/parser.rb, test/test_parser_1.0.rb: fix foaf:Image
+ element causes parse error even if ignore_unknown_element mode.
+
+Sat May 16 18:14:19 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker.rb, lib/rss/maker/0.9.rb,
+ test/test_maker_*.rb: add RSS::Maker.supported?
+
+Sat May 16 18:12:39 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/content/*, lib/rss/dublincore/*: fix circular require.
+ * test/test_maker_atom_feed.rb,
+ test/test_maker_atom_entry.rb: suppress warnings.
+
+Sat May 16 18:07:17 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker/feed.rb, test/test_maker_atom_feed.rb:
+ remove needless codes.
+
+Sat May 16 18:05:07 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker/entry.rb: fix a typo.
+
+Sat May 16 18:02:57 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker/feed.rb, test/test_maker_atom_entry.rb,
+ test/test_maker_atom_feed.rb: fix duplicated dc:date.
+ Reported by Kazuhiro NISHIYAMA. Thanks!!! [ruby-list:46014]
+
+Sat May 16 18:02:16 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker/base.rb, lib/rss/maker/1.0.rb, lib/rss/maker/feed.rb,
+ test/rss/test_maker_1.0.rb, test/rss/test_maker_atom_feed.rb:
+ RSS 1.0 and Atom feed maker treat maker.channel.language as
+ maker.channel.dc_language.
+
+Sat May 16 17:57:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/lib/dl/callback.rb (DL#remove_callback_internal): ignore
+ unbound function. [ruby-dev:38474]
+
+Sat May 16 17:51:11 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * sample/rss/rss_recent.rb, sample/rss/list_description.rb: use
+ UTF-8.
+
+Sat May 16 17:47:55 2009 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb, test/rss/test_version.rb (RSS::VERSION):
+ 0.2.5 -> 0.2.6.
+
+Sat May 16 17:26:04 2009 Narihiro Nakamura <authorNari@gmail.com>
+
+ * iseq.c (rb_iseq_clone): use longlife object and insert write barrier.
+
+ * vm_insnhelper.c (vm_cref_push): ditto.
+
+ * vm_insnhelper.h (COPY_CREF): insert write barrier.
+
+Sat May 16 13:49:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_autoload_load): gets rid of false warning.
+ [ruby-core:23466]
+
+Sat May 16 10:59:54 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sample/drb/dhasenc.rb: add magic comment for encoding.
+
+ * sample/mine.rb: ditto.
+
+ * ext/tk/sample/tcltklib/sample1.rb: ditto.
+
+Sat May 16 09:49:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (magic_comment_encoding): ignores unused emacs-style
+ encoding comment, as like Vim styles. [ruby-core:23470]
+
+Sat May 16 09:30:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * defs/keywords (reserved_word): made inline function static.
+ [ruby-core:23210]
+
+ * parse.y (rb_reserved_word): ordinary function for ripper.
+
+Sat May 16 09:19:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (magic_comment_encoding): use rb_compile_warning() to
+ show the currently parsing file name. [ruby-core:23469]
+
+Sat May 16 09:03:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (ruby_version): now version.h includes
+ include/ruby/version.h, so need to tell to cpp to see
+ $(srcdir)/include. [ruby-core:23468]
+
+Fri May 15 17:35:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_shift, rb_ary_shift_m): clears unused elements.
+ [ruby-dev:38448]
+
+Fri May 15 15:15:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_autoload_load): checks if iv_tbl is valid.
+ [ruby-dev:38456]
+
+Fri May 15 11:17:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/setup.mak (-version-): now version.h includes
+ include/ruby/version.h, so need to tell to cpp to check
+ $(srcdir)/include.
+ reported by KIMURA Koichi at http://www.kt.rim.or.jp/%7ekbk/zakkicho/09/zakkicho0905b.html#D20090514-6
+
+Thu May 14 16:13:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/etc/etc.c (etc_getpwuid): use rb_uid_t. [ruby-dev:38443]
+
+ * ext/stringio/stringio.c (strio_ungetbyte): encoding should no
+ be effective.
+
+Thu May 14 10:17:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sample/test.rb (valid_syntax?): defaults to us-ascii.
+
+Wed May 13 22:34:31 2009 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c: add longlife garbage collection. [ruby-dev:38423]
+ (NORMAL_HEAPS_USED): new macro.
+ (LONGLIFE_ALLOCATE_HEAPS_MIN): ditto.
+ (add_longlife_heaps_slot): new function.
+ (rb_newobj_from_longlife_heap): ditto.
+ (rb_newobj_longlife): ditto.
+ (rb_node_newnode_longlife): ditto.
+ (rb_gc_write_barrier): ditto.
+ (remembered_set_recycle): ditto.
+ (rb_gc_mark_remembered_set): ditto.
+ (clear_mark_longlife_heaps): ditto.
+ (gc_sweep_for_longlife): ditto.
+ (assign_heap_slot): new argument to longlife heaps slot.
+ (add_freelist): ditto.
+ (gc_sweep): avoid longlife heap slot. set longlife_collection
+ flag at add heap.
+ (rb_gc_force_recycle): avoid mark object and remembered_set
+ object.
+ (garbage_collect): add longlife collection.
+ (rb_gc_start): invoke longlife collection.
+ (gc_profile_record_get): for longlife collection profile.
+ (gc_profile_result): ditto.
+
+ * include/ruby/intern.h (rb_gc_write_barrier): declared.
+
+ * include/ruby/ruby.h (FL_REMEMBERED_SET): renamed from FL_RESERVED.
+
+ * debug.c (FL_REMEMBERED_SET): ditto.
+
+ * insns.def (setinlinecache): insert write barrier.
+
+ * vm_insnhelper.c (vm_method_search): ditto.
+
+ * set_relation (set_relation): use longlife object.
+
+ * vm.c (vm_define_method): ditto.
+
+ * vm_core.h (NEW_INLINE_CACHE_ENTRY): ditto.
+
+ * vm_method.c (rb_add_method): ditto.
+
+ * class.c (rb_add_method): ditto.
+
+ * node.h (NEW_NODE_LONGLIFE): new macro.
+ (rb_node_newnode_longlife): declared.
+
+Wed May 13 15:23:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/version.h: extracted the extensions interface and
+ the never-changeable info.
+
+Wed May 13 03:20:47 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_init_1): unused variable removed.
+
+Tue May 12 21:03:02 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c: support fixed UTC offset. [ruby-dev:38326]
+ (leap_year_v_p): new macro.
+ (TIME_FIXOFF_P): new macro.
+ (TIME_SET_FIXOFF): new macro.
+ (time_init_0): renamed from time_init.
+ (time_set_utc_offset): new function.
+ (vtm_add_offset): new function.
+ (utc_offset_arg): new function.
+ (time_init_1): new function.
+ (time_init): call time_init_0 or time_init_1 according argc.
+ (validate_utc_offset): new function.
+ (time_localtime_m): new function.
+ (time_fixoff): new function.
+ (time_getlocaltime): take optional UTC offset argument.
+ (time_get_tm): support fixed UTC offset time.
+ (Init_Time): make Time#{initialize,localtime,getlocal} varargs.
+
+ * strftime.c (rb_strftime): vtm->zone can be NULL now.
+
+Tue May 12 18:23:40 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * yarvtest: removed because it's outdated.
+
+Mon May 11 21:46:20 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y: add semicolons to some grammar rules not terminated
+ with them. a patch from Dave B in [ruby-core:23422].
+
+Mon May 11 20:08:33 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * io.c (Init_IO): add constant File::NOATIME. [ruby-core:23194]
+
+Mon May 11 13:08:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * mkconfig.rb (rubylibdir): use rubylibprefix. [ruby-dev:38426]
+
+Mon May 11 08:37:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_coerce): support
+ coercing into Rational. [ruby-core:23415]
+
+Mon May 11 04:39:45 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/net/smtp.rb (Net::SMTP#check_auth_args): should not change
+ number of methods for the sake of compatibility.
+
+Sun May 10 11:36:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/cfunc.c (rb_dlcfunc_instance_p): new function to check if
+ the argument is an instance of DL::CFunc.
+
+ * ext/dl/cptr.c (rb_dlptr_initialize, rb_dlptr_s_malloc): checks
+ if DL::CFunc. [ruby-dev:38403].
+
+ * ext/dl/lib/dl/cparser.rb (DL::CParser#parse_signature): strips
+ spaces. based on a patch from Takashi Tamura in [ruby-dev:38398].
+
+ * ext/dl/lib/dl/value.rb (DL::ValueUtil#wrap_arg): block must be
+ given if arg is not bound. [ruby-dev:38404]
+
+ * ext/dl/cfunc.c (rb_dlcfunc_instance_p): new function to check if
+ the argument is an instance of DL::CFunc.
+
+Sat May 9 19:57:00 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_float.rb (TestFloat#test_sleep_with_Float): add a
+ test. see [ruby-core:23282]
+
+Sat May 9 19:23:46 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb: use subsec instead of nsec.
+
+Sat May 9 12:19:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c: 3rd argument of rb_hash_foreach() is VALUE.
+
+ * hash.c (rb_any_hash, recursive_hash): use VALUE for hash.
+
+Sat May 9 11:14:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (rb_f_catch): gets rid of issue with gcc 4.4. a patch
+ from Alexey Froloff in [ruby-core:23398]. [ruby-core:22924]
+
+Fri May 8 19:38:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (try_link0): removes waste dSYM directories left
+ when debug and universal-binary are enabled.
+
+ * lib/mkmf.rb (check_sizeof): fixed wrong recurring result for
+ intrinsic types.
+
+Fri May 8 10:14:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, configure.in, win32/Makefile.sub (RUBY_BASE_NAME):
+ program base name. [ruby-dev:38241]
+
+ * configure.in (--with-soname): base name of shared library.
+ [ruby-dev:38290]
+
+Fri May 8 10:07:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_flatten_bang): clears temporary array.
+
+Fri May 8 02:30:14 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (SortedSet#add): Do not require each newly added
+ element to be Comparable but to respond to <=>. [ruby-dev:38371]
+
+Thu May 7 21:42:51 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_rubyoptions.rb (test_indentation_check): add a test
+ for indentation check. [ruby-dev:38382]
+
+Thu May 7 16:40:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_flatten_bang): returns nil if nothing changed.
+ a patch from Marc-Andre Lafortune in [ruby-core:23382].
+
+Thu May 7 14:26:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_sample): negative sample number is invalid.
+ [ruby-core:23374]
+
+Thu May 7 14:16:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c, include/ruby/encoding.h: fixed types.
+
+ * include/ruby/encoding.h (rb_enc_nth): long is used for index.
+
+Thu May 7 14:01:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * range.c (r_le): fixed types.
+
+ * range.c (range_eql): fixed rdoc.
+
+Thu May 7 13:10:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (pipe_open): should be rb_pid_t.
+
+Wed May 6 16:50:20 2009 Tanaka Akira <akr@fsij.org>
+
+ * math.c (math_gamma): use a table for positive small integers.
+
+Wed May 6 09:27:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * README.ja: code for THINK_C does not exist already. [Bug #1435]
+
+Wed May 6 05:33:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (CFLAGS, CXXFLAGS): strips extra spaces.
+
+Tue May 5 11:29:07 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/ifchange: Fix: arguments which begin with minus sign may
+ parsed as options. Because of older systems, don't use --
+ but use parentheses.
+
+Tue May 5 10:42:28 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json: Update to JSON 1.1.4.
+
+Tue May 5 07:22:37 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c: NOMAP is now multibyte direct map.
+
+ * transcode.c: remove ASIS.
+
+ * transcode_data.h: ditto.
+
+ * tool/transcode-tb (ActionMap#generate_info): remove :asis.
+
+ * tool/transcode-tb (ActionMap#generate_info): add :nomap0.
+
+ * enc/trans/utf8_mac.trans: replace :asis by :nomap0.
+
+Sat May 2 22:53:02 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (SortedSet): Fix document. [Bug #1429]
+
+Sat May 2 10:34:29 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/utf8_mac-tbl.rb: don't use Unicode escape.
+
+ * enc/trans/utf8_mac.trans: follow above.
+
+Sat May 2 09:19:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (Init_Array): made #to_s an alias to #inspect to reduce
+ the result of recursive array. a patch from ujihisa at
+ [ruby-dev:38362]
+
+Fri May 1 16:50:05 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#merge): Only directly use the passed objects
+ @hash instance variable when self and the passed object are
+ instances of the same class. [Bug #118]
+
+Fri May 1 16:44:11 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (SortedSet#add): Do not let an incomparable object
+ in. [Bug #118]
+
+Fri May 1 13:18:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_intern.h (_longjmp): never return. see [ruby-core:23241]
+
+Fri May 1 01:31:19 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/extmk.rb: use RbConfig instead of Config.
+
+ * instruby.rb: ditto.
+
+ * lib/rubygems.rb: ditto.
+
+ * test/rubygems/test_config.rb: ditto.
+
+Thu Apr 30 21:23:30 2009 Tanaka Akira <akr@fsij.org>
+
+ * runruby.rb: use RbConfig::CONFIG instead of Config::CONFIG.
+
+ * spec/default.mspec: ditto.
+
+ * yarvtest/yarvtest.rb: ditto.
+
+ * instruby.rb: ditto.
+
+ * benchmark/report.rb: ditto.
+
+ * benchmark/runc.rb: ditto.
+
+ * tool/eval.rb: ditto.
+
+ * test/rubygems/test_gem.rb: ditto.
+
+ * test/rubygems/test_config.rb: ditto.
+
+ * test/rubygems/test_gem_platform.rb: ditto.
+
+Thu Apr 30 18:18:13 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/net/http.rb: documentation typo fixed. [ruby-core:23335]
+
+Thu Apr 30 15:27:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/trans/utf8_mac.trans: get rid of a 1.9 feature for cross
+ compile.
+
+Thu Apr 30 11:35:30 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_filesystem_encoding): Change filesystem_encoding of
+ Mac OS X to UTF-8.
+
+Wed Apr 29 21:23:40 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/iso_2022_jp.h: add CP50221.
+
+ * enc/trans/iso2022.trans: add converter for CP50221.
+
+Wed Apr 29 15:22:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_join): recursive array has no meaning as path
+ name. [ruby-core:23329]
+
+Tue Apr 28 19:09:45 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/test_timeout.rb (TestTimeout#test_timeout): add a test.
+
+Tue Apr 28 07:13:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/pp.rb (Struct#pretty_print): coerce to a string since
+ anonymous class has name no longer. [ruby-dev:38349]
+
+Mon Apr 27 16:47:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (ruby_version): uses sed instead of grep if the
+ result is need, to get rid of GREP_OPTIONS. [ruby-dev:38336]
+
+Mon Apr 27 01:25:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_getc): use rl_getc_function if
+ possible, to get rid of hang up at EOF without a newline.
+
+Sun Apr 26 23:19:32 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/utf8_mac.trans: Add converter for UTF8-MAC.
+
+ * enc/trans/utf8_mac-tbl.rb: ditto.
+
+ * test/ruby/test_econv.rb: tests for above.
+
+Sun Apr 26 22:17:02 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/transcode-tb (ActionMap#each_firstbyte):
+ if :asis collides other mappings, use another.
+
+ * tool/transcode-tb (ActionMap#generate_info):
+ add :asis for ASIS.
+
+Sun Apr 26 21:59:43 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (ASIS): added for multi byte direct map.
+
+ * transcode.c (transcode_restartable0): ditto.
+
+Sun Apr 26 20:33:12 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/transcode-tb (ActionMap#generate_node):
+ Use ActionMap#gennode instead of generate_node
+ because of initialization.
+
+Sun Apr 26 20:21:39 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * .gitignore: added.
+
+Sun Apr 26 20:17:24 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/rake.rb: use RbConfig::CONFIG instead of Config::CONFIG.
+
+ * lib/rbconfig/datadir.rb: ditto.
+
+Sun Apr 26 19:30:29 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_arg): unused variable removed.
+
+Sun Apr 26 18:35:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_reopen): keeps pathv for prep_stdio. [ruby-dev:38131]
+
+Sun Apr 26 15:13:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser#parse_in_order): do not make an
+ option from non-option argument. [ruby-dev:38333]
+
+Sat Apr 25 19:11:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (ac_cv_func_daemon): use daemon(3) only on *BSD.
+
+ * process.c (proc_daemon): double fork to ensure not having ctty.
+ [ruby-core:23305]
+
+Sat Apr 25 16:19:48 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (month_arg): extracted from time_arg.
+ (validate_vtm): ditto.
+
+Sat Apr 25 16:03:21 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (TIME_COPY_GMT): new macro.
+ (time_s_at): use TIME_COPY_GMT.
+ (time_succ): ditto.
+
+Sat Apr 25 15:54:04 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_mload): use TIME_SET_UTC.
+
+Sat Apr 25 15:47:54 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_get_tm): take time_object instead of gmt.
+
+Sat Apr 25 15:39:44 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_succ): refactored to avoid gmt variable.
+ (strftimev): use TIME_UTC_P.
+ (time_strftime): ditto.
+
+Sat Apr 25 15:21:33 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (TIME_UTC_P): new macro.
+ (TIME_SET_UTC): ditto.
+ (TIME_LOCALTIME_P): ditto.
+ (TIME_SET_LOCALTIME): ditto.
+ (time_utc_p): use the above macro.
+ (time_localtime): ditto.
+ (time_localtime): ditto.
+ (time_gmtime): ditto.
+ (time_to_s): ditto.
+ (time_add): ditto.
+ (time_sec): ditto.
+ (time_min): ditto.
+ (time_hour): ditto.
+ (time_mday): ditto.
+ (time_mon): ditto.
+ (time_year): ditto.
+ (time_wday): ditto.
+ (wday_p): ditto.
+ (time_yday): ditto.
+ (time_isdst): ditto.
+ (time_zone): ditto.
+ (time_utc_offset): ditto.
+ (time_to_a): ditto.
+ (strftimev): ditto.
+ (time_strftime): ditto.
+ (time_mdump): ditto.
+
+Thu Apr 23 01:30:37 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/zlib/zlib.c (Zlib::GzipFile#path): New method.
+
+Wed Apr 22 20:25:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (time_timespec): check out-of-range. [ruby-core:23282]
+ [Bug #1396]
+
+Wed Apr 22 19:33:13 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time.parse): use year completion in Date._parse.
+
+Wed Apr 22 11:12:15 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * time.c (GMTIME, LOCALTIME): should set result if not have *_r().
+
+ * time.c (localtime_with_gmtoff): now always needed tmbuf.
+
+Wed Apr 22 10:38:47 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * dir.c (glob_helper): C99(gcc)-ism.
+
+ * time.c (find_time_t): GUESS macro needs the variable named ``result''
+ always.
+
+Wed Apr 22 09:27:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (localtime_with_gmtoff): fixed cross function jump.
+
+Wed Apr 22 03:06:56 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time#rfc2822): pad leading zeros for year.
+ (Time#httpdate): ditto.
+ (Time#xmlschema): ditto.
+
+Wed Apr 22 02:10:48 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time#xmlschema): use subsec instead of nsec.
+
+Wed Apr 22 01:27:38 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_arg): use the year argument as-is. [ruby-dev:38194]
+
+ * lib/time.rb (Time.parse): interpret small year 0..99 as 1950..2049.
+
+Wed Apr 22 00:32:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (find_time_t): constified.
+
+Wed Apr 22 00:11:19 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (leap_year_v_p): removed.
+
+Tue Apr 21 23:52:45 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c: remove time_t restriction from Time class.
+
+ * timev.h: new file to define struct vtm.
+
+ * strftime.c: format struct vtm instead of struct tm.
+
+ * ext/syck/rubyext.c (mktime_do): don't use time_t;
+
+ [ruby-dev:38191]
+
+Tue Apr 21 09:25:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (dir_path, dir_each, glob_helper): use readdir_r() if
+ available.
+
+Tue Apr 21 09:20:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (init_mkmf): needs default library path even if
+ cross compiling.
+
+Tue Apr 21 07:07:45 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_push): bypass rb_ary_store().
+
+Tue Apr 21 01:25:16 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigsub_int): subtraction without making internal
+ bignum values.
+
+ * bignum.c (bigadd_int): ditto for addition.
+
+ * bignum.c (bigtrunc): declare inline.
+
+ * bignum.c (rb_quad_pack): fix condition.
+
+Tue Apr 21 01:13:42 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/setup (config.h): added TIMET2NUM and NUM2TIMET to match
+ the change in time.c
+
+Mon Apr 20 20:29:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_split_m): faster processing on 7bit strings.
+
+ * string.c (ascii_isspace): faster isspace() for 7bit strings.
+
+Sun Apr 19 14:43:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_cleanup): the order of local variables on stack is
+ undefined. should use outermost VALUE for ruby_init_stack.
+
+ * gc.c (ruby_get_stack_grow_direction, Init_stack): allows volatile
+ pointer.
+
+ * thread_*.c (ruby_init_stack): ditto.
+
+Sun Apr 19 13:17:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gem_prelude.rb (Gem::QuickLoader#push_gem_version_on_load_path):
+ check for requirement if the gem is installed. a patch from
+ Kyosuke MOROHASHI at [ruby-dev:38020].
+
+Sun Apr 19 01:39:17 2009 Tanaka Akira <akr@fsij.org>
+
+ * process.c (proc_seteuid_m): defined to use rb_f_notimplement if not
+ implemented.
+ (proc_setegid_m): ditto.
+
+Sun Apr 19 01:03:56 2009 Tanaka Akira <akr@fsij.org>
+
+ * process.c (proc_setuid): use rb_f_notimplement if not implemented.
+ (proc_setgid): ditto.
+
+Sat Apr 18 23:07:18 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/readline/readline.c: use rb_f_notimplement for methods not
+ implemented.
+
+ * ext/openssl/ossl_engine.c: ditto.
+
+ * ext/openssl/ossl_config.c: ditto.
+
+ * ext/openssl/ossl_cipher.c: ditto.
+
+ * ext/openssl/ossl_pkcs5.c: ditto.
+
+ * ext/openssl/ossl_x509ext.c: ditto.
+
+ * ext/socket/socket.c: ditto.
+
+ * ext/socket/basicsocket.c: ditto.
+
+ * ext/socket/ancdata.c: ditto.
+
+ * ext/socket/unixsocket.c: ditto.
+
+ * ext/iconv/iconv.c: ditto.
+
+Sat Apr 18 21:07:34 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/curses/curses.c: use rb_f_notimplement for methods not
+ implemented.
+
+Fri Apr 17 01:51:17 2009 Tanaka Akira <akr@fsij.org>
+
+ * node.h (rb_notimplement_body_p): declared.
+
+ * vm_method.c (Init_eval_method): suppress a warning.
+
+ * io.c (rb_io_fsync): use rb_f_notimplement if not implemented.
+ (rb_io_close_on_exec_p): ditto.
+ (rb_io_set_close_on_exec): ditto.
+ (rb_io_fcntl): ditto.
+ (rb_f_syscall): ditto.
+
+ * dir.c (dir_tell): ditto.
+ (dir_seek): ditto.
+ (dir_s_chroot): ditto.
+
+ * process.c (proc_getpgrp): ditto.
+ (proc_setpgrp): ditto.
+ (proc_getpgid): ditto.
+ (proc_setpgid): ditto.
+ (proc_setsid): ditto.
+ (proc_getpriority): ditto.
+ (proc_setpriority): ditto.
+ (proc_getrlimit): ditto.
+ (proc_setrlimit): ditto.
+ (p_sys_setuid): ditto.
+ (p_sys_setruid): ditto.
+ (p_sys_seteuid): ditto.
+ (p_sys_setreuid): ditto.
+ (p_sys_setresuid): ditto.
+ (p_sys_setgid): ditto.
+ (p_sys_setrgid): ditto.
+ (p_sys_setegid): ditto.
+ (p_sys_setregid): ditto.
+ (p_sys_setreuid): ditto.
+ (p_sys_setresgid): ditto.
+ (p_sys_issetugid): ditto.
+ (proc_getgroups): ditto.
+ (proc_setgroups): ditto.
+ (proc_initgroups): ditto.
+ (proc_daemon): ditto.
+ (rb_proc_times): ditto.
+
+ * file.c (rb_file_s_lchown): ditto.
+ (rb_file_s_link): ditto.
+ (rb_file_s_symlink): ditto.
+ (rb_file_s_readlink): ditto.
+ (rb_file_s_truncate): ditto.
+ (rb_file_truncate): ditto.
+
+Fri Apr 17 00:53:47 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/cgi/core.rb (read_multipart): When path is not defined,
+ define local_path as a method always returning nil instead of
+ aliasing. This is because StringIO#path no longer exists.
+
+Fri Apr 17 00:45:09 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * dir.c (bracket): fix escape handling for range character in bracket
+ of fnmatch pattern. e.g., '[a\-c]' should not match 'b'.
+
+Thu Apr 16 23:09:03 2009 Tanaka Akira <akr@fsij.org>
+
+ * class.c (rb_define_method_id): use rb_define_notimplement_method_id
+ if rb_f_notimplement is given.
+ (rb_define_protected_method): ditto.
+ (rb_define_private_method): ditto.
+ (rb_define_method): use rb_define_method_id.
+
+ * include/ruby/intern.h (rb_f_notimplement): declared.
+ (rb_define_notimplement_method_id): declared.
+
+ * proc.c (method_inspect): show not-implemented.
+
+ * vm_method.c (notimplement_body): new variable.
+ (rb_notimplement_body_p): new function.
+ (rb_method_boundp): return false if not implemented.
+ (rb_f_notimplement): new function.
+ (rb_define_notimplement_method_id): new function.
+
+ * process.c (rb_f_fork): use rb_f_notimplement if not implemented.
+
+ * file.c (rb_file_s_lchmod): use rb_f_notimplement if not implemented.
+
+Wed Apr 15 20:24:49 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * array.c (rb_ary_flatten): flatten(0) works as Array#dup.
+ [ruby-core:23168]
+
+ * test/ruby/test_array.rb: add a test for above.
+
+Wed Apr 15 11:53:35 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dir.c (fnmatch_helper): use rb_enc_precise_mbclen and
+ fail if bytes are invalid. [ruby-dev:38307]
+
+Tue Apr 14 18:11:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (bracket): if same in bytes, path is matching.
+ [ruby-dev:38305]
+
+Mon Apr 13 17:21:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): scan coderange incrementally.
+
+Mon Apr 13 11:35:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): optimize previous commit.
+ [ruby-list:45954]
+
+Mon Apr 13 10:58:54 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): check encoding compatibility only on
+ real parts.
+
+Sun Apr 12 19:54:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (bracket, fnmatch_helper): compare bytewise first, to get
+ rid of invalid byte sequence. [ruby-dev:38303]
+
+Sat Apr 11 08:45:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (Makefile): phony ruby target needs empty command.
+
+Fri Apr 10 11:32:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (up): updates timestamp file.
+
+Fri Apr 10 04:54:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (Makefile): info-program needs common.mk.
+
+Fri Apr 10 03:46:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_INSTALL_NAME): use --program-transform-name.
+
+ * instruby.rb, mkconfig.rb: deal with --program-transform-name
+ better. now supports s, y commands and single addressing.
+
+Thu Apr 9 23:59:11 2009 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: don't override the rule for ruby.
+
+Wed Apr 8 21:58:12 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (rb_str_dump): buffer length plus one byte for null
+ terminator. [ruby-dev:38294]
+
+ * test/ruby/test_m17n.rb (test_str_dump): add a test for above.
+
+Wed Apr 8 20:08:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_rstrip_bang): should not sign-expand non-ascii.
+ [ruby-core:23158]
+
+Wed Apr 8 17:29:29 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_chop_bang): reset coderange. [ruby-core:23155]
+
+Wed Apr 8 14:00:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (what_type?): fixed typo, and refined for member of
+ aggregation types.
+
+ * lib/mkmf.rb (Logging.postpone): copy postponed output always.
+
+Wed Apr 8 09:45:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (LIBRUBY_SO): removed redundant additional version
+ numbers.
+
+Tue Apr 7 13:35:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (info): shows configured names.
+
+ * configure.in (Makefile): works even if RUBY_INSTALL_NAME
+ contains macro.
+
+ * configure.in (LIBRUBY_DLDFLAGS): compatibility version is
+ ruby_version.
+
+ * configure.in (RUBY_REPLACE_TYPE): defines type modifier prefix
+ for printf.
+
+Tue Apr 7 02:27:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_DEFINT): should pass includes to
+ AC_CHECK_SIZEOF and RUBY_CHECK_SIZEOF.
+
+ * configure.in (CFLAGS, CXXFLAGS): need ARCH_FLAG for universal
+ binary.
+
+Tue Apr 7 01:08:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_to_s): reduce fragments if no precision lost.
+ c.f. [ruby-core:23075]
+
+Mon Apr 6 23:16:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (CFLAGS, CXXFLAGS): override with $cflags and
+ $cxxflags if not given. [ruby-core:23130]
+
+Mon Apr 6 19:26:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (utime_failed): refined the error message for EINVAL on
+ DOSISH platforms, where it may fail depending on filesystems.
+ see [ruby-dev:38277].
+
+Mon Apr 6 16:38:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (sys_fail2, rb_file_s_readlink, BUFCHECK, rmext),
+ (rb_file_s_basename): get rid of overflow.
+
+Mon Apr 6 15:11:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (int_chr): checks overflow.
+
+Mon Apr 6 10:49:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/stringio/test_stringio.rb (test_path): StringIO#path is no
+ longer defined. [ruby-dev:38254]
+
+Mon Apr 6 10:47:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_path): removed. [ruby-dev:38254]
+
+Sun Apr 5 18:02:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_fd_resize): does nothing on Win32.
+
+Sat Apr 4 17:05:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (RB_NUM_COERCE_FUNCS_NEED_OPID): macro to
+ check compatibility. [ruby-dev:38162]
+
+Sat Apr 4 07:38:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * mkconfig.rb (sitearch): default to arch.
+
+Fri Apr 3 14:02:42 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/irb/completion.rb (IRB::InputCompletor::Operators): Add
+ overloadable negative operators.
+
+ * lib/irb/ruby-lex.rb (RubyLex#lex_init): Support overloadable
+ negative operators.
+
+ * lib/irb/ruby-lex.rb (RubyLex#identify_identifier): Minus signs
+ need to be escaped in regexp character class.
+
+ * misc/ruby-mode.el (ruby-font-lock-keywords, ruby-parse-partial):
+ Support overloadable negative operators.
+
+Fri Apr 3 12:45:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb: quotes arguments with spaces always.
+
+Thu Apr 2 14:50:06 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/getoptlong.rb: remove unused rdoc/usage from example.
+ [ruby-core:23098]
+
+Thu Apr 2 07:42:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): updated.
+
+Wed Apr 1 20:37:49 2009 Tanaka Akira <akr@fsij.org>
+
+ * configure.in (rb_cv_fork_with_pthread): fail if the child process
+ fail.
+
+Wed Apr 1 19:46:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): support for parallel make. a
+ patch from Takuto Matsuu at [ruby-dev:38220].
+
+Wed Apr 1 19:39:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (LIBRUBY_LDSHARED): use $(CC) instead of cc.
+ a patch from Wataru Kimura at [ruby-dev:38225].
+
+Wed Apr 1 18:53:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_dump.c (rb_vm_bugreport): should not #include inside a
+ function, since headers may have declarations.
+ c.f. [ruby-core:23095]
+
+Wed Apr 1 18:44:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * mkconfig.rb: ignores version numbers in config.status. replaces
+ all $$s in program_transform_name.
+
+Wed Apr 1 15:12:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (.c.i): use CPP instead of CC, since gcc -E can'
+ work with multiple -arch options.
+
+Wed Apr 1 13:46:20 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (rb_thread_fd_select): new function to call select
+ using rb_fdset_t.
+
+ * io.c (select_internal): use rb_thread_fd_select instead of
+ rb_thread_select. based on the patch from Kengo Matsuyama.
+ [ruby-dev:38221]
+
+Wed Apr 1 13:16:19 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * process.c (rb_f_sleep): RDoc disambiguation. [ruby-talk:332632]
+
+Tue Mar 31 15:17:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: fixed the help strings for the header and library
+ dir switches, and updated to use AS_HELP_STRING. patches from
+ Richard Brown, c.f. [ruby-core:23067].
+
+Mon Mar 31 08:18:57 2009 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * test/csv/test_interface.rb, test/csv/test_serialization.rb:
+ Trying more fixes some failing tests on Windows.
+
+Mon Mar 30 19:04:25 2009 Tanaka Akira <akr@fsij.org>
+
+ * .gdbinit (rp): show negative fixnum correctly.
+
+Mon Mar 30 12:12:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (eval_string_with_cref): replaces the message if
+ frozen. [ruby-dev:38208]
+
+Mon Mar 30 01:00:20 2009 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * test/csv/test_interface.rb: Trying a fix for some failing tests
+ on Windows.
+
+Sun Mar 29 08:59:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/pathname.rb (Pathname#relative_path_from): compares path
+ components according to system default case-sensitiveness.
+ [ruby-core:22829]
+
+Sat Mar 28 11:10:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (ruby.imp): all symbols in static library need to be
+ exported, so that encoding-extensions can be loaded. based on a
+ patch from Yutaka Kanemoto <kinpoco AT gmail.com> in
+ [ruby-talk:332282].
+
+Sat Mar 28 08:49:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): checks if named argument given twice.
+
+ * sprintf.c (GETNAMEARG): remembers named arg is used, to get rid
+ of too many arguments warning.
+
+Sat Mar 28 03:16:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (link_command, cc_command, cpp_command): should no
+ override extout defined in extmk.rb.
+
+Fri Mar 27 12:56:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (what_type?): checks more restrictively, and
+ supports universal binary.
+
+Fri Mar 27 01:33:37 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_cmp): negate the result of reverse comparison.
+
+Fri Mar 27 01:19:50 2009 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (rb_cmpint): FIX2INT may fail on LP64 platforms.
+
+Thu Mar 26 12:22:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/yaml/rubytypes.rb (String#is_binary_data?): TAB would be
+ usually considered to be included in text data.
+
+ * lib/rdoc/parser.rb (RDoc::Parser.binary?): blksize may be nil
+ and is irrelevant to whether a file is binary. copied from
+ above since TAB and newlines would be usually considered to be
+ included in text data.
+
+Thu Mar 26 11:33:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/ri/paths.rb (RDoc::RI::Paths): considers
+ --program-prefix and --program-suffix. reapplied r19923.
+
+Wed Mar 25 07:45:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (target_alias): replaces cpu with universal too.
+
+ * configure.in (target): replaces cpu with arch by --with-arch.
+
+ * mkconfig.rb (TOPDIR): chops arch in config instead of
+ RUBY_PLATFORM which varies on universal_binary.
+
+ * mkconfig.rb (MAJOR, MINOR, TEENY): reads from version.h always.
+
+Tue Mar 24 19:23:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_CHECK_SIZEOF): need to include $4.
+
+Tue Mar 24 17:08:52 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * io.c (rb_io_inspect): Cannot access fptr->fd if fptr is NULL.
+ This fixes a coredump caused by: ruby -e "class X < IO; def
+ initialize; end; end; p X.new.inspect"
+
+Mon Mar 23 22:01:00 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_timespec): use NUM2TIMET.
+ (time_s_at): ditto.
+
+Mon Mar 23 21:52:26 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * process.c (Init_process): Better patch for eliminating an
+ "unused variable".
+
+Mon Mar 23 21:41:14 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/dbm/dbm.c (fdbm_initialize): Make the file variable
+ volatile, because FilePathValue() currently does not protect the
+ given variable from GC. (Probably it should)
+
+ * ext/sdbm/init.c (fsdbm_initialize): Ditto.
+
+Mon Mar 23 19:22:14 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * file.c (rb_file_s_lstat): Back out.
+
+Mon Mar 23 18:54:57 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * file.c (rb_file_s_stat, rb_file_s_lstat): Remove repeated type
+ checks.
+
+Mon Mar 23 14:57:48 2009 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c (init_heap): set default to heap slots length
+ if HEAP_OBJ_LIMIT is larger than HEAP_MIN_SLOTS. [Bug #1310]
+ (set_heaps_increment): increment next_heaps_length if
+ next_heaps_length and heaps_used are same.
+
+Mon Mar 23 14:32:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_spawn): use original command if not found.
+
+Mon Mar 23 06:51:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend (link_so): replaces $(TARGET) with basename of the
+ target. [ruby-talk:330286]
+
+Sun Mar 22 14:51:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): use NULL as
+ application name for batch files.
+
+Sat Mar 21 15:54:41 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_ssl.c (write_would_block): defined.
+ (read_would_block): defined.
+ (ossl_start_ssl): add nonblock argument.
+ (ossl_ssl_connect): follow ossl_start_ssl change.
+ (ossl_ssl_connect_nonblock): new method.
+ (ossl_ssl_accept): follow ossl_start_ssl change.
+ (ossl_ssl_accept_nonblock): new method.
+ (ossl_ssl_read_internal): use write_would_block and
+ read_would_block.
+ (ossl_ssl_write_internal): ditto.
+
+Sat Mar 21 08:19:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_exec): prints error message only on platforms
+ neither close-on-exec nor spawnv is supported.
+
+Sat Mar 21 08:17:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): omit program name
+ if actual program path is found. [ruby-core:22960]
+
+Sat Mar 21 07:25:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (pipe_open): should pass program name even if multiple
+ arguments are given. fix for TestProcess::test_argv0.
+
+Sat Mar 21 02:37:07 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/lib/openssl/buffering.rb
+ (OpenSSL::Buffering#write_nonblock): new method.
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_write_nonblock): new method.
+ (ossl_ssl_write_internal): defined.
+ (ossl_ssl_write): use ossl_ssl_write_internal.
+
+Fri Mar 20 18:25:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (errmap): added ERROR_MOD_NOT_FOUND.
+
+Fri Mar 20 09:22:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (libprefix): must not append "lib" after $(libdir),
+ when load_relative is not used on darwin. a patch from Kenta
+ Murata at [ruby-dev:38182].
+
+Thu Mar 19 20:29:40 2009 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_mWaitReadable): defined.
+ (rb_mWaitWritable): defined.
+ (io_getpartial): extend IO::WaitReadable on EWOULDBLOCK and EAGAIN.
+ (rb_io_write_nonblock): extend IO::WaitWritable on EWOULDBLOCK and
+ EAGAIN.
+
+ * error.c (make_errno_exc): extracted from rb_sys_fail.
+ (rb_mod_sys_fail): new function.
+
+ * include/ruby/ruby.h (rb_mod_sys_fail): declared.
+ (rb_mWaitReadable): declared.
+ (rb_mWaitWritable): declared.
+
+ * ext/socket/init.c (rsock_s_recvfrom_nonblock): extend
+ IO::WaitReadable on EWOULDBLOCK and EAGAIN.
+ (rsock_s_accept_nonblock): extend IO::WaitReadable on EWOULDBLOCK,
+ EAGAIN, ECONNABORTED and EPROTO.
+
+ * ext/socket/socket.c (sock_connect_nonblock): extend IO::WaitWritable
+ on EINPROGRESS.
+
+ * ext/socket/ancdata.c (bsock_sendmsg_internal): extend
+ IO::WaitWritable on EWOULDBLOCK and EAGAIN.
+ (bsock_recvmsg_internal): extend IO::WaitReadable on EWOULDBLOCK and
+ EAGAIN.
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_read_internal): raise SSLError
+ extended by IO::WaitReadable/IO::WaitWritable on
+ SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE.
+
+ * ext/openssl/ossl.c (ossl_make_error): extracted from ossl_raise.
+ (ossl_exc_new): new function.
+
+ * ext/openssl/ossl.h (ossl_exc_new): declared.
+
+ * lib/net/protocol.rb (rbuf_fill): rescue IO::WaitReadable and
+ IO::WaitWritable.
+
+ [ruby-core:22539], [ruby-dev:38140]
+
+Thu Mar 19 18:49:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_CHECK_SIZEOF): allows qualified name.
+
+ * configure.in (RUBY_REPLACE_TYPE): checks more strictly.
+
+ * configure.in (struct stat.st_size, struct stat.st_blocks),
+ (struct stat.st_ino): check for size.
+
+ * lib/mkmf.rb (check_sizeof): allows qualified name.
+
+ * file.c (rb_stat_ino, rb_stat_blocks): check by size.
+
+Wed Mar 18 16:59:48 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/test_syslog.rb (TestSyslog#test_open): check
+ param after block again. because detect not to call block.
+
+Wed Mar 18 16:54:04 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * ext/socket/ancdata.c: not use pktinfo.ipi_spec_dst if not defined
+ * ext/socket/extconf.rb: define HAVE_IPI_SPEC_DST
+
+Wed Mar 18 16:38:11 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/test_syslog.rb (TestSyslog#test_open): check
+ block parameter in block. [ruby-dev:38180]
+
+Wed Mar 18 12:48:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (report_bug): rb_bug can be caused by extension
+ libraries.
+
+Wed Mar 18 02:41:33 2009 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/drb.rb (open_server_inaddr_any): fixed multiple network
+ families problem. a patch from Charl Matthee at [ruby-core:21033].
+
+Tue Mar 17 21:42:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot (package): creates .revision.time and passes
+ CHDIR to create prerequisite files.
+
+Tue Mar 17 18:00:55 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (Enumerator#{each_,}{with_index,with_object}): Fix
+ a bug where any parameter but the first one is dropped even if
+ multiple values are yielded with. [Bug #1198]
+
+Tue Mar 17 14:25:16 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/pathname.rb (Pathname#sub): set $~ in block.binding.
+ [ruby-dev:38173]
+
+Tue Mar 17 13:48:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): added RUBY_COREDLL.
+
+ * ext/dl/handle.c (rb_dlhandle_initialize): returns msvcrt if libc
+ or RUBY_COREDLL is given. [ruby-core:22828]
+
+Tue Mar 17 10:29:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c, dln.c, parse.y, re.c, ruby.c, sprintf.c, strftime.c,
+ string.c, util.c, variable.c: use strlcpy, memcpy and snprintf
+ instead of strcpy, strncpy and sprintf.
+
+Mon Mar 16 17:15:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/dl/test_win32.rb (Win32API): enclosed by DL::TestWin32.
+ [ruby-core:22827]
+
+Mon Mar 16 16:37:22 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/tk/tcltklib.c (eventloop_sleep, lib_eventloop_core),
+ (lib_watchdog_core): tv_usec is not time_t.
+
+Mon Mar 16 12:30:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (REVISION_H): keeps timestamp of revision.h.
+ [ruby-core:22900]
+
+ * tool/ifchange, win32/ifchange.bat: extended --timestamp option.
+
+Mon Mar 16 09:28:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, common.mk, win32/Makefile.sub: added preprocessing rules.
+
+Sun Mar 15 12:34:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/minitest/test_mini_test.rb: fixed tests depending on the
+ detail of floating point representation.
+
+Sun Mar 15 12:01:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/installer.rb (Gem::Installer#shebang): fix for env
+ shebang.
+
+Sun Mar 15 11:15:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h ({RSTRING,RBIGNUM}_EMBED_LEN_MAX): made int.
+
+ * include/ruby/ruby.h (OBJ_{TAINTED,UNTRUSTED,FROZEN}): return int.
+
+ * include/ruby/encoding.h (ENC_CODERANGE): ditto.
+
+Sun Mar 15 11:11:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_hash_uint, rb_hash_start, rb_hash_end): use VALUE
+ rather than unsigned int.
+
+Sun Mar 15 11:00:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (load_file_internal): stop the timer thread before exec.
+
+Sun Mar 15 09:17:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (.y.c): use SRC_FILE which contains slashes instead of
+ backslashes. [ruby-core:22891]
+
+Sun Mar 15 08:26:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (srcs-ext): creates ext/dl/callback/callback.c also.
+
+Sun Mar 15 03:29:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (SAVED_GROUP_ID, p_gid_switch): should be rb_gid_t.
+
+Sun Mar 15 02:53:13 2009 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_subpat): accept capture name.
+ (rb_str_aref): follow above change.
+ (rb_str_aref_m): pass the 2nd argument to rb_str_subpat.
+ (rb_str_subpat_set): accept capture name.
+ (rb_str_aset): follow above change.
+ (rb_str_partition): ditto.
+ (rb_str_aset_m): pass the 2nd argument to rb_str_subpat_set.
+
+ * include/ruby/intern.h (rb_reg_backref_number): declared.
+
+ * re.c (rb_reg_backref_number): defined.
+
+ [ruby-core:21057]
+
+Sun Mar 15 02:09:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (bmcall): should not uninitialized variable. a patch from
+ pegacorn at [ruby-dev:38169].
+
+Sat Mar 14 18:25:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_scan_oct, ruby_scan_hex): use size_t.
+
+Sat Mar 14 18:18:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (rb_proc_call, rb_node_arity, bmcall, curry): checks
+ overflow.
+
+ * proc.c (rb_proc_parameters): unnamed_parameters() expects in
+ not VALUE.
+
+Sat Mar 14 17:54:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_each_words): assume no string exceeds INT_MAX.
+
+Sat Mar 14 15:59:04 2009 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_spawn_internal): use int variable for status.
+
+Sat Mar 14 14:45:51 2009 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_f_system): use rb_pid_t for pid.
+ (rb_spawn_internal): local variable renamed.
+
+Sat Mar 14 14:16:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_strdup, Balloc, rv_alloc): use size_t.
+
+Sat Mar 14 13:53:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_qsort): the result of cmp must be signed, so ge
+ rid of reuse of a variable.
+
+Sat Mar 14 10:56:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (init_funcname_len, dln_find_exe_r, dln_find_file_r): use
+ size_t.
+
+ * file.c (rb_stat_inspect, file_expand_path): ditto.
+
+ * util.c (ruby_qsort): ditto.
+
+Sat Mar 14 10:39:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (CXX_EXT): checks for case-sensitive filesystem with
+ FNM_SYSCASE rather than build_os.
+
+Fri Mar 13 23:03:40 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/init.c (wait_connectable0): remove unreachable code.
+
+Fri Mar 13 23:00:02 2009 Tanaka Akira <akr@fsij.org>
+
+ * configure.in (RUBY_CHECK_SIZEOF): pass [include] to AC_CHECK_SIZEOF.
+
+Fri Mar 13 20:58:11 2009 Tanaka Akira <akr@fsij.org>
+
+ * dln.c (dln_find_1): compare fspace in size_t world.
+
+Fri Mar 13 18:58:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (CFLAGS, CXXFLAGS): moved after warnflags.
+
+Fri Mar 13 18:10:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (rb_throw_obj): inverted call flow. [ruby-core:22872]
+
+Fri Mar 13 17:04:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (bool): not define to get rid of conflict
+ against curses.
+
+Fri Mar 13 16:45:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/openssl_missing.h (i2d_of_void): cast for callbacks.
+ [ruby-core:22860]
+
+ * ext/openssl/ossl_engine.c (ossl_engine_s_by_id): suppress a
+ warning.
+
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_flush_sessions): time_t may
+ be larger than long.
+
+ * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_get_time),
+ (ossl_ssl_session_get_timeout): use TIMET2NUM() to convert
+ time_t.
+
+Fri Mar 13 15:10:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509ext_set_value): should use
+ OPENSSL_free instead of free. a patch from Charlie Savage at
+ [ruby-core:22858].
+
+Fri Mar 13 21:11:51 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/sdbm/_sdbm.c: should include "ruby/defines.h" as well for
+ prototypes of compatibility functions on Win32 platform.
+ [ruby-core:22870]
+
+Fri Mar 13 10:42:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (AC_HEADER_STDBOOL): added.
+
+ * include/ruby/ruby.h (NUM2INT, rb_special_const_p): returns true
+ and false instead of Qtrue and Qfalse for platforms where VALUE
+ is bigger than int.
+
+ * gc.c (gc_stress_set), ext/openssl/ossl_asn1.c (decode_bool): go
+ rid of variables named `bool'.
+
+Fri Mar 13 10:16:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (struct stat.st_size): may be huge.
+
+Fri Mar 13 09:30:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (bigfixize): zero length Bignum is 0.
+
+Fri Mar 13 09:17:12 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/fileutils.rb (FileUtils#fu_get_gid): stringify group
+ argument before making regexp match. [ruby-dev:38155]
+
+Fri Mar 13 08:06:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (rv_strdup): macro to duplicate nul-terminated string.
+ [ruby-core:22852]
+
+Thu Mar 12 22:41:41 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl: suppress warnings.
+
+ * ext/openssl/ossl.h (OSSL_Debug): don't use gcc extension for
+ variadic macro.
+
+Thu Mar 12 22:29:36 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (WARNFLAGS): warning 4996 is only in VC++8 or
+ later.
+
+Thu Mar 12 22:14:01 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_def_const): use INT2NUM because
+ OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG doesn't fit into Fixnum.
+
+Thu Mar 12 18:16:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c, bignum.c, dln.c, error.c, gc.c, io.c, marshal.c,
+ numeric.c, pack.c, strftime.c, string.c, thread.c, transcode.c,
+ transcode_data.h, util.c, variable.c, vm_dump.c,
+ include/ruby/encoding.h, missing/crypt.c, missing/vsnprintf.c:
+ suppress VC type warnings. [ruby-core:22726]
+
+ * marshal.c (div0), numeric.c (infinite_value): new functions to
+ get rid of VC division by 0 warnings.
+
+ * st.c: use st_index_t for indexes instead of int.
+
+ * vm.c (rb_vm_get_sourceline), vm_insnhelper.c (vm_throw): use
+ rb_num_t.
+
+Thu Mar 12 09:30:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_CHECK_SIZEOF): if same size type is found, no
+ more calculation is needed.
+
+ * configure.in (RUBY_DEFINT): falls back to RUBY_CHECK_SIZEOF if
+ size is not immediate.
+
+Thu Mar 12 09:24:24 2009 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h: suppress warnings of overflow.
+
+Thu Mar 12 09:15:14 2009 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h: suppress warnings of overflow.
+
+Thu Mar 12 05:49:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (warnflags): added some default flags,
+ pointer-arith, write-strings and shorten-64-to-32, but suppress
+ unused-parameter and missing-field-initializers, if possible.
+
+ * configure.in (RUBY_CHECK_HUGE): checks whether a value range is
+ larger than long.
+
+ * file.c (rb_stat_blocks): struct stat.st_blocks may be larger
+ than long.
+
+ * io.c (copy_stream_fallback_body): off_t may be larger than long.
+
+ * iseq.c (rb_iseq_disasm): RSTRING_LEN() returns long.
+
+ * process.c (rb_f_sleep): time() needs time_t.
+
+ * random.c (fill_random_seed): enclosed conditionally used
+ variables.
+
+ * thread_pthread.c (ruby_init_stack): range of rlim_cur may be
+ larger than int.
+
+ * missing/vsnprintf.c (BSD_vfprintf): commented out code which has
+ no effect at all.
+
+Thu Mar 12 02:10:57 2009 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: strip spaces from ruby_version.
+ Sun C 5.9 SunOS_i386 Build47_dlight 2007/05/22 generates
+ `ruby_version= 1 "." 9 "." 1'.
+
+Thu Mar 12 01:18:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (dir_seek): use long for seekdir().
+
+Thu Mar 12 01:08:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/ytab.sed: replaces backslashes with slash for nmake.
+
+Wed Mar 11 21:23:06 2009 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_mload): don't clear tm_mday.
+
+Wed Mar 11 20:13:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/handle.c (rb_dlhandle_sym): RTLD_NEXT is not for symbol
+ name. [ruby-dev:38150]
+
+Wed Mar 11 17:26:38 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/win32/lib/Win32API.rb: call by :stdcall as default.
+ [ruby-core:22826]
+
+Wed Mar 11 13:27:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (stack_type): uses VALUE which is able to be stored
+ parser stack.
+
+Wed Mar 11 13:22:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (init_env): set TMPDIR if none of TMPDIR, TMP,
+ TEMP is set.
+
+ * win32/win32.c (rb_w32_telldir, rb_w32_seekdir): should use long,
+ as defined by SUSv3.
+
+Wed Mar 11 13:03:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/handle.c (rb_dlhandle_sym): fixed heap corruption.
+ [ruby-core:22822]
+
+Wed Mar 11 06:12:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_loadpath_safe): expands libpath and removes
+ last /lib.
+
+Wed Mar 11 04:47:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (time_to_i, time_hash): time_t may be bigger than long
+ and int.
+
+ * time.c (time_timeval, rb_time_timeval, obj2nsec, time_strftime),
+ (time_mdump, time_mload): suppress warnings.
+
+ * win32/Makefile.sub (config.h): added TIMET2NUM and NUM2TIMET.
+
+Wed Mar 11 04:29:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c: suppress warnings. based on a patch from Charlie
+ Savage at [ruby-core:22804].
+
+Wed Mar 11 04:22:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * signal.c (sig_trap): suppress warnings.
+
+Tue Mar 10 20:07:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (WARNFLAGS): uses -wd4996 instead of
+ CRTDEFFLAGS. cf. [ruby-core:22725]
+
+Tue Mar 10 19:58:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/win32.h (strcasecmp, strncasecmp): use _ prefixed
+ versions to suppress warnings.
+
+ * ext/dl/callback/mkcallback.rb (DLTYPE[FLOAT]): cast to suppress
+ warnings. [ruby-core:22792]
+
+ * array.c, bignum.c, gc.c, numeric.c, string.c, util.c, insns.def,
+ missing/crypt.c, missing/vsnprintf.c, : suppress warnings.
+ [ruby-core:22792]
+
+Tue Mar 10 13:45:54 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (LDFLAGS): moved -link to TRY_LINK, LINK_SO
+ and so on. based on a patch by Charlie Savage at
+ [ruby-core:22794]
+
+ * win32/Makefile.sub (config.h): passes LDFLAGS to rbconfig.rb so
+ that extconf.rb could refer it. [ruby-core:22725]
+
+Tue Mar 10 11:36:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (prepare_iseq_build): too few arguments to function
+ rb_ary_tmp_new().
+
+Tue Mar 10 10:53:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (rb_iseq_compile_with_option): argument may be converted.
+
+Tue Mar 10 04:56:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (MINIRUBY): keep macro into Makefile.
+
+ * configure.in (RUBY_CHECK_SIZEOF): fix for fallback.
+
+ * configure.in (MANGLED_PATH): defines for RUBYLIB_PREFIX.
+
+ * ruby.c (ruby_init_loadpath_safe): uses string as buffer.
+
+ * symbian/setup (config_h): defines MANGLED_PATH.
+
+Tue Mar 10 03:48:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/callback/depend: fix for parallel build.
+
+ * ext/dl/callback/extconf.rb: callback.h is no longer created.
+
+ * ext/dl/callback/mkcallback.rb: creates main source first.
+
+ * ext/dl/callback/extconf.rb ($distcleanfiles): added callback.c.
+
+Tue Mar 10 00:06:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (load_relative): new option to enable load path
+ relative to libruby_so.
+
+ * ruby.c (ruby_init_loadpath_safe): added the case using dladdr().
+
+Mon Mar 9 16:49:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rake: updated to rake code to rake-0.8.4 source code base.
+
+Mon Mar 9 16:03:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/installer.rb (Gem::Installer#initialize): env may
+ not be under /usr/bin.
+
+ * lib/rubygems/installer.rb (Gem::Installer#shebang): uses /bin/sh
+ if shebang has any options, since env shebang trick does no
+ work with options.
+
+Mon Mar 9 15:19:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * instruby.rb (manpages): use basename to compare and for Tempfile.
+
+Mon Mar 9 14:55:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * instruby.rb (default gems): installs default gemspecs.
+
+Mon Mar 9 14:48:08 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (OPTFLAGS): simplified. see [ruby-core:22725]
+
+Mon Mar 9 14:33:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * instruby.rb: prints names of the directories where files are
+ installed to.
+
+Mon Mar 9 02:25:54 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_proc.rb: add some tests.
+
+Mon Mar 9 01:38:00 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_enum.rb: add some tests.
+
+Mon Mar 9 01:12:37 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_object.rb: add a test for Object#method_missing.
+
+Mon Mar 9 01:11:17 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_file_exhaustive.rb: add tests for File#size and
+ File.absolute_path.
+
+Sun Mar 8 23:02:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (LDFLAGS): always prepends -link.
+
+Sun Mar 8 11:39:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_CHECK_SIZEOF): dirty hack to compute multiple
+ sizeof, for apple's universal binary.
+
+Sat Mar 7 22:06:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (universal_binary): checks if sizes are same on all
+ architectures.
+
+Sat Mar 7 18:45:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: checks if cd really succeeded.
+
+Sat Mar 7 14:24:47 2009 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: don't use CONFIG_SHELL for testing shell feature in
+ Makefile.
+
+Sat Mar 7 14:07:31 2009 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: fix the location of cdcmd.
+
+Sat Mar 7 13:52:01 2009 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: the shell which runs configure may be different from
+ the shell for make. configure likes bash but Makefile specifies
+ SHELL=/bin/sh.
+
+Sat Mar 7 12:31:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/erb/test_erb.rb: reverted space sensitive test results.
+
+ * test/rdoc/test_rdoc_parser_c.rb: ditto.
+
+ * test/rdoc/test_rdoc_ri_default_display.rb: ditto.
+
+Fri Mar 6 23:35:59 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/securerandom.rb (SecureRandom.urlsafe_base64): add optional
+ argument to add padding.
+
+Fri Mar 6 19:25:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_LIB_VERSION_STYLE): sets full or minor style
+ not to show RUBY_VERSION_MAJOR and so on.
+
+ * version.h (RUBY_LIB_VERSION): makes from RUBY_LIB_VERSION_STYLE.
+
+ * configure.in, Makefile.in, win32/Makefile.sub (CHDIR): cd using
+ physical directory.
+
+ * Makefile.in (update-mspec): split from update-rubyspec.
+
+ * win32/Makefile.sub (update-{rubyspec,mspec}): added.
+
+Fri Mar 6 14:28:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, win32/Makefile.sub (INSNS): moved variable
+ definition before rule.
+
+Fri Mar 6 13:47:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rake/loaders/makefile.rb (Rake::MakefileLoader#load): deals with
+ escaped spaces. incorporated from rake 0.8.4.
+
+ * lib/rake/testtask.rb (Rake::TestTask#define): passes each libs
+ as each arguments with expanded. incorporated from rake 0.8.4.
+
+Thu Mar 5 18:36:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_to_s): keeps enough precision for round trip.
+ [ruby-core:22325]
+
+Thu Mar 5 17:42:06 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_fill): doc for Array#fill misses indication
+ about negative value for the start argument. [ruby-core:22497]
+
+Thu Mar 5 16:56:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tmpdir.rb (Dir.tmpdir): not use USERPROFILE, and ignores
+ non-existent directory.
+
+Thu Mar 5 14:52:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_sysinit): initializes version info first.
+
+ * win32/win32.c (rb_w32_osid): always define for binary compatibility.
+
+Thu Mar 5 11:52:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (make_insns_rules): rule to make rules for insns.
+
+Thu Mar 5 11:27:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (miniruby.exe): workaround for a failure of
+ mt.exe on Windows 7 beta. [ruby-talk:330284]
+
+Thu Mar 5 10:32:17 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/dl/test_base.rb: Add dragonfly to libc and libm switch.
+
+Thu Mar 5 10:29:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_eql): extracted from rb_str_equal and rb_str_eql.
+
+ * string.c (rb_str_chomp_bang): keeps 7bit coderange.
+
+Thu Mar 5 10:10:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/encoding.h (enc_initialized_p): ENC_UNINITIALIZED
+ is not defined already.
+
+ * include/ruby/encoding.h (ENC_FROM_ENCINDEX): removed because
+ depending on a static variable.
+
+Thu Mar 5 04:42:52 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_array.rb: fix wrong test, and add a test for
+ sort_by!.
+
+Thu Mar 5 04:32:38 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_array.rb: add some tests for coverage.
+
+Thu Mar 5 00:06:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/README.win32 (Requirement): added unicows.lib and dll.
+
+Wed Mar 4 23:29:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, win32/configure.bat (--enable-win95): new option
+ to enable/disable win95 support.
+
+Wed Mar 4 21:21:51 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/thread.rb (SizedQueue#push): fix limit condition.
+ [ruby-dev:38135]
+
+Wed Mar 4 20:27:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (mingw): checks if unicows.lib is available.
+
+ * include/ruby/win32.h (WIN95): moved to config.h
+
+ * win32/Makefile.sub (LIBS): links unicows.lib if available.
+
+ * win32/Makefile.sub (config.h): defines WIN95 only if unicows.lib
+ is available.
+
+ * win32/setup.mak (-unicows-): checks if unicows.lib is available.
+
+Tue Mar 3 17:10:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): removes object files no longer used and
+ files to be removed by old distclean.
+
+Tue Mar 3 16:51:51 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/win32/lib/win32/resolv.rb: get rid of warning.
+
+ * ext/dl/lib/dl/func.rb: ditto.
+
+Tue Mar 3 16:25:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake), lib/mkmf.rb (create_makefile): $objs and
+ $srcs are always Array or nil now.
+
+Tue Mar 3 15:54:11 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/win32/lib/win32/{registry,resolv}.rb: use dl/import instead
+ of Win32API.
+
+Tue Mar 3 15:53:20 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/lib/dl/func.rb (DL::Function.name): delegate to @cfunc.
+
+Tue Mar 3 15:40:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/dl.c (rb_dl_init_callbacks): autoloads callbacks.
+
+ * ext/dl/callback: split from dl.
+
+ * ext/dl/lib/dl/cparser.rb (DL::CParser::parse_signature): fixed
+ variable name.
+
+ * ext/dl/lib/dl/pack.rb (DL::PackInfo): reduced redundant
+ initialization.
+
+ * ext/dl/lib/dl/stack.rb (DL::Stack): ditto.
+
+ * ext/dl/lib/dl/value.rb (DL::ValueUtil#wrap_arg): NULL for nil.
+
+ * test/dl: moved from ext/dl/test.
+
+Tue Mar 3 14:57:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (main): passes $(MAKE) to mkmain_cmd
+
+ * ext/extmk.rb (command_output): uses arguments to invoke make.
+
+Tue Mar 3 01:56:03 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/securerandom.rb (SecureRandom.urlsafe_base64): delete padding.
+
+Mon Mar 2 21:39:08 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/sockport.h (SS_LEN): defined unconditionally.
+
+Mon Mar 2 21:26:42 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (anc_inspect_socket_creds): suppress warnings.
+
+Mon Mar 2 21:13:42 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (rsock_discard_cmsg_resource): defined
+ unconditionally.
+
+Mon Mar 2 21:06:40 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (addrinfo_mload): don't use "sun" variable
+ for Solaris.
+
+Mon Mar 2 21:01:36 2009 Tanaka Akira <akr@fsij.org>
+
+ * file.c: include fcntl.h for O_RDONLY on Solaris.
+
+Mon Mar 2 19:43:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/uri/common.rb (URI::Parser#escape): escaped string is ascii
+ only.
+
+ * lib/uri/common.rb (URI::Parser#unescape): converts bytewise.
+ [ruby-dev:38005], [ruby-dev:38110]
+
+Mon Mar 2 16:40:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * README.EXT, README.EXT.ja (Macros): added HAVE_RUBY_*_H.
+
+Mon Mar 2 12:22:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (init_env): keeps wide chars as wide chars.
+
+Mon Mar 2 11:01:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/dl.h (dlerror): fixed on Windows.
+
+ * ext/dl/handle.c (rb_dlhandle_initialize): returns handle to
+ libruby if nil is given on Windows as dlopen.
+
+ * ext/dl/handle.c (rb_dlhandle_sym): get rid of buffer overrun,
+ and try ASCII WINAPI versions too.
+
+Mon Mar 2 10:29:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_longjmp), include/ruby/intern.h (ruby_cleanup): fixed
+ prototypes.
+
+Mon Mar 2 00:56:45 2009 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/observer.rb: The module observable uses now a hash to
+ store listeners. merged a patch from Alessandro Di Maria in
+ [ruby-core:22560].
+
+Sun Mar 1 22:59:41 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c: suppress warnings.
+
+ * ext/socket/socket.c: ditto.
+
+ * ext/socket/unixsocket.c: ditto.
+
+Sun Mar 1 20:57:41 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ (rsock_getfamily): renamed from rb_sock_getfamily.
+
+Sun Mar 1 19:52:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/win32/lib/Win32API.rb (initialize): passes res
+ arguments to DL.
+
+Sun Mar 1 19:38:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/zlib/zlib.c (zstream_run): suppress a warning. a patch from
+ Charlie Savage at [ruby-core:22607].
+
+Sun Mar 1 19:36:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_dtoa): allocates one more byte to get rid of buffer
+ overrun. a patch from Charlie Savage at [ruby-core:22604].
+
+Sun Mar 1 19:10:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (.y.c): removed extra backslash. [ruby-core:22602]
+
+Sun Mar 1 19:02:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/cfunc.c (rb_dlcfunc_call): fix for stdcall and missing
+ argument numbers. [ruby-core:22601]
+
+ * ext/dl/dl.h (DLSTACK_PROTO0_): added.
+
+ * ext/dl/mkcallback.rb (gencallback, gen_callback_file),
+ (rb_dl_init_callbacks): omit stdcall functions unless supported.
+
+ * lib/rubygems/config_file.rb (SHGetFolderPath): stdcall.
+
+Sun Mar 1 17:27:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (gfDebug): uncommented out.
+ [ruby-core:22600]
+
+Sun Mar 1 16:15:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_waitpid): use wait_each() on no waitpid platforms.
+ [ruby-dev:38054]
+
+Sun Mar 1 16:01:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (proc_daemon): stops and restarts timer thread because
+ daemon(3) implies fork(2). [ruby-dev:38055]
+
+Sun Mar 1 15:45:49 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ (rsock_make_hostent): renamed from sock_make_hostent.
+ (rsock_addrinfo): renamed from sock_addrinfo.
+ (rsock_getaddrinfo): renamed from sock_getaddrinfo.
+ (rsock_socket): renamed from ruby_socket.
+ (rsock_sock_s_socketpair): renamed from sock_s_socketpair.
+ (rsock_connect): renamed from ruby_connect.
+
+ * ext/socket/socket.c (sock_listen): make it static.
+
+Sun Mar 1 15:29:31 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket: add rsock_ prefix.
+
+Sat Feb 28 21:52:37 2009 Tanaka Akira <akr@fsij.org>
+
+ * vm_eval.c (rb_iterate): use volatile to suppress warnings.
+
+ * eval.c (ruby_cleanup): ditto.
+
+Sat Feb 28 20:09:40 2009 Tanaka Akira <akr@fsij.org>
+
+ * eval_error.c (error_print): use volatile to suppress warnings.
+
+ * vm_eval.c (eval_string_with_cref): ditto.
+
+ * thread.c (rb_exec_recursive): ditto.
+
+ * eval_jump.c (rb_exec_end_proc): ditto.
+
+ * eval.c (ruby_exec_node): ditto.
+ (rb_longjmp): ditto.
+
+Sat Feb 28 18:28:58 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_unix_rights): check message type.
+
+Sat Feb 28 16:18:39 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/net/http.rb: suppress warnings of non-existing instance variable
+ access for SSL.
+
+Sat Feb 28 14:50:47 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (BasicSocket#connect_address): returns ::1
+ if the address is IPv4-mapped IPv6 address for 0.0.0.0 for MacOS X.
+
+Sat Feb 28 00:18:40 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c: suppress strict-aliasing warning with
+ gcc version 4.4.0 20090219 (Red Hat 4.4.0-0.21) on Fedora 11 Alpha.
+
+ * ext/socket/socket.c: ditto.
+
+ * ext/socket/unixsocket.c: ditto.
+
+ * ext/socket/sockport.h (SS_LEN): defined.
+ (SET_SS_LEN): ditto.
+
+Fri Feb 27 22:30:18 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): close FDs passed by
+ SCM_RIGHTS unless :scm_rights=>true is given.
+ (discard_cmsg): extracted from rsock_discard_cmsg_resource.
+
+Fri Feb 27 22:14:22 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/lib/openssl/buffering.rb: define Buffering module under
+ OpenSSL. [ruby-dev:37906]
+
+Fri Feb 27 22:09:24 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit/assertions.rb: don't define assert_not_* if already
+ overridden.
+
+Fri Feb 27 22:02:34 2009 Tanaka Akira <akr@fsij.org>
+
+ * util.c: fix SEGV by test_time.rb with
+ gcc version 4.4.0 20090219 (Red Hat 4.4.0-0.21) on Fedora 11 Alpha.
+
+Fri Feb 27 18:30:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (cdhash_type, iseq_set_sequence): should not call
+ methods of the argument of case, to keep the semantics of
+ case/when. [ruby-dev:38079]
+
+Fri Feb 27 18:01:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (ruby_get_stack_grow_direction): no needs to use thread
+ here, and not initialized yet. [ruby-core:22439]
+
+Fri Feb 27 17:45:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_load_ok): checks if regular file, except for the
+ platform disallows to open directories, e.g. dosish.
+ [ruby-dev:38097], [Bug #1221]
+
+Fri Feb 27 14:39:40 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (flo_eq, flo_gt, flo_ge, flo_lt, flo_le, flo_eql): revert
+ isnan() checks for VC++6.
+
+ * insns.def (opt_lt, opt_gt): ditto.
+
+Fri Feb 27 14:23:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/ostruct.rb (modifiable): check if really frozen.
+ [ruby-core:22559]
+
+Thu Feb 26 23:14:46 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (BasicSocket#connect_address): new method.
+
+Thu Feb 26 19:29:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (hash_foreach_iter): fix for prototype.
+
+Thu Feb 26 18:36:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (INSNS, newline.c, miniprelude.c, prelude.c),
+ (node_name.inc, known_errors.inc): unified from Makefile.in and
+ win32/Makefile.sub.
+
+Thu Feb 26 13:30:34 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * util.c (valid_filename): use our own implementation of open(),
+ close() and unlink().
+
+Thu Feb 26 13:23:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (cdhash_each): resurrects internal literals.
+
+Thu Feb 26 10:56:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h (rb_w32_wopen): prototype forgotten.
+
+ * io.c (rb_sysopen_internal): shouldn't replace undefined chars in this
+ case.
+
+Thu Feb 26 01:34:38 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: more MSG_* constants.
+
+Thu Feb 26 00:21:21 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (sockopt_level): extracted from sockopt_level_m.
+ (sockopt_optname): extracted from sockopt_optname_m.
+ (sockopt_data): apply StringValue.
+ (sockopt_s_linger): new method.
+ (sockopt_linger): new method.
+ (inspect_linger): show onoff value if it is neither 0 nor 1.
+
+Wed Feb 25 23:23:03 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_unix_rights): raise
+ NotImplementedError if no fd passing feature.
+ (ancillary_timestamp): raise NotImplementedError if no timestamp
+ feature.
+
+Wed Feb 25 23:18:53 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_s_unix_rights): new method.
+
+Wed Feb 25 23:01:26 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/unixsocket.c (unix_recv_io): prevent FD leak when 2 fd is
+ sent on LP64 platform.
+
+ * ext/socket/rubysocket.h (rsock_discard_cmsg_resource): declared.
+
+ * ext/socket/ancdata.c (rsock_discard_cmsg_resource): renamed from
+ discard_cmsg_resource. export it.
+
+Wed Feb 25 17:31:32 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (sysopen_func, rb_sysopen_internal, rb_sysopen): open file
+ by UTF-16'ed filename on Windows.
+
+ * io.c (rb_file_open_generic, rb_io_s_sysopen, rb_io_reopen,
+ argf_next_argv): follow above change.
+
+ * io.c (rb_scan_open_args): no longer need to convert filepath here on
+ Windows.
+
+ * win32/wio32.c (rb_w32_wopen): new function to open file by UTF-16'ed
+ filename.
+
+ * win32/win32.c (rb_w32_open): call rb_w32_open().
+
+Wed Feb 25 15:05:35 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.status): use un.rb as cp instead of
+ cmd.exe's copy command.
+
+ * lib/mkmf.rb (create_makefile): no longer need to convert path
+ separator when copying file.
+
+Wed Feb 25 12:27:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_force_encoding): should clear coderange at changing
+ encoding. [ruby-core:22437]
+
+Wed Feb 25 12:06:09 2009 <nobu@ruby-lang.org>
+
+ * io.c (rb_io_getline_1): enables limit even if rs is given.
+ [ruby-core:22434]
+
+Wed Feb 25 02:28:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_chomp_bang): coderange may change.
+ [ruby-core:22414]
+
+Wed Feb 25 02:17:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_delete_bang): should recalculate coderange.
+ [ruby-talk:329267]
+
+Wed Feb 25 00:41:21 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * class.c (rb_scan_args): Allow specifying the number of trailing
+ mandatory arguments right after the number of optional arguments
+ only if the number of leading mandatory arguments is not omitted.
+
+ * ext/socket/tcpserver.c (tcp_svr_init): Make use of it.
+
+Wed Feb 25 00:28:25 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_file_size): new method added. [ruby-core:22088]
+
+Wed Feb 25 00:15:15 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/curses/curses.c (curses_colors): new method added. a patch
+ from Alexander Beisig in [ruby-core:22331].
+
+ * ext/curses/curses.c (curses_color_pairs): ditto.
+
+Wed Feb 25 00:05:13 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * class.c (rb_scan_args): Revamp rb_scan_args() to compute the
+ number of required and optional arguments precisely to prepare
+ for a more informative error message.
+
+Tue Feb 24 23:58:52 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * array.c (rb_ary_index, rb_ary_rindex): Emit a warning that a
+ given block is unused when an argument is specified.
+
+Tue Feb 24 22:00:37 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sockaddr_obj): convert fe80:1::1 to fe80::1%1.
+
+Tue Feb 24 19:56:11 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_timestamp): support SCM_BINTIME.
+
+Tue Feb 24 19:45:15 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_timestamp): new method.
+
+Tue Feb 24 19:01:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (main): split from exts and makes main program after
+ building exts with miniruby, to get rid of overwriting running
+ program. [ruby-core:22339]
+
+ * Makefile.in, win32/Makefile.sub (RUNCMD, MKMAIN_CMD): macros to
+ run script file.
+
+ * ext/extmk.rb (parse_args): added --command-output option which
+ creates script file to make main program.
+
+Tue Feb 24 17:58:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (ripper.c): exec can't work on Windows.
+
+ * ext/ripper/depend (.SUFFIXES): nmake doesn't have .y by default.
+
+ * Makefile.in (id.h): overwrites unconditionally.
+
+Tue Feb 24 13:13:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * missing/vsnprintf.c (BSD_vfprintf): ptrdiff_t may be larger than
+ long.
+
+Tue Feb 24 11:21:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * signal.c (rb_disable_interrupt, rb_enable_interrupt): see
+ USE_TRAP_MASK.
+
+Tue Feb 24 10:49:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_waitpid): last argument was missing.
+
+ * process.c (waitall_each): fixed typo. a patch from shinichiro.h
+ <shinichiro.hamaji AT gmail.com> at [ruby-dev:38054].
+
+Tue Feb 24 01:53:40 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flo_eq): remove unnecessary NaN check using isnan().
+ comparison regarding NaN is false anyway.
+
+ * numeric.c (flo_gt, flo_ge, flo_lt, flo_le, flo_eql): ditto.
+
+Tue Feb 24 01:22:19 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bootstraptest/test_thread.rb: fix for environment where fork is not
+ available.
+
+Tue Feb 24 01:19:38 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (thread_cleanup_func): unlock all locked mutexes even when
+ forking. [ruby-core:22269]
+
+Tue Feb 24 00:54:16 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * insns.def (opt_minus): inline float operation.
+
+ * insns.def (opt_lt, opt_gt): ditto.
+
+Tue Feb 24 00:24:13 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_each): check #succ only when it is really
+ needed. small performance improvement.
+
+ * math.c (Need_Float): call rb_to_float() only when it is really
+ needed. small performance improvement.
+
+Tue Feb 24 00:19:33 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/pathname.rb (Pathname#foreachline): removed wrongly
+ resurrected method. [ruby-dev:38065]
+
+Mon Feb 23 20:39:21 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (inspect_timespec_as_abstime): new function to
+ show struct timespec.
+ (ancillary_inspect): use it for SCM_TIMESTAMPNS on GNU/Linux.
+
+Mon Feb 23 20:30:06 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (inspect_bintime_as_abstime): new function to
+ show struct bintime.
+ (ancillary_inspect): use it for SCM_BINTIME on FreeBSD.
+
+ * ext/socket/mkconstants.rb: define SCM_BINTIME.
+
+Mon Feb 23 20:18:49 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (inspect_timeval_as_abstime): use time_t
+ variable to avoid a warning on environments which use long as
+ tv_sec as NetBSD.
+
+Mon Feb 23 15:53:30 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * array.c (rb_ary_index, rb_ary_rindex): We know that argc is not
+ zero when we reach here.
+
+ * array.c (rb_ary_initialize, rb_ary_index): Shrink a double
+ space. (NFC)
+
+Mon Feb 23 14:47:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/fileutils.rb (mv): added description for the case of
+ different partitions. [ruby-talk:329072]
+
+Mon Feb 23 10:19:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (USE_SYMBOL_AS_METHOD_NAME): Module#methods,
+ #singleton_methods and so on return Symbols. [ruby-talk:328775]
+
+Mon Feb 23 10:15:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * README.EXT, README.EXT.ja: added macros for the Compatibilities.
+
+Mon Feb 23 03:19:37 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: define SO_TIMESTAMPNS and SCM_TIMESTAMPNS
+ if available.
+
+Mon Feb 23 02:54:31 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_inspect): use SCM_TIMESTAMP instead
+ of SO_TIMESTAMP. SCM_TIMESTAMP != SO_TIMESTAMP on MacOS X.
+
+Mon Feb 23 02:44:42 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (inspect_timeval_as_abstime): new function.
+ (ancillary_inspect): use it for SO_TIMESTAMP.
+
+Mon Feb 23 02:26:44 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_timeval_as_interval): renamed from
+ inspect_timeval.
+
+Mon Feb 23 02:10:09 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_timeval): fix the size test.
+
+Sun Feb 22 22:42:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (tr_trans): should recalculate coderange.
+ [ruby-core:22326] (reopened at [ruby-core:22328])
+
+Sun Feb 22 20:09:29 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_linger): message refined.
+
+Sun Feb 22 19:28:08 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/init.c (s_recvfrom): use rb_io_wait_readable after
+ recvfrom.
+
+Sun Feb 22 18:40:04 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_errno): new function.
+ (sockopt_inspect): use inspect_errno for SO_ERROR.
+
+Sun Feb 22 15:11:51 2009 Tanaka Akira <akr@fsij.org>
+
+ * re.c (Init_Regexp): define Regexp::FIXEDENCODING. [ruby-dev:38066]
+
+Sun Feb 22 14:33:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (tr_trans): should not be affected by the encoding of
+ replacement unless actually modified. [ruby-talk:328967]
+ [ruby-core:22326]
+
+Sun Feb 22 13:38:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/init.c (s_recvfrom_nonblock): handles EAGAIN too.
+
+ * ext/socket/init.c (s_accept_nonblock): ditto, and EPROTO depends
+ on platforms.
+
+Sun Feb 22 13:03:12 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * eval.c (ruby_options): the evaluator now expects iseq instead of tree.
+
+ * ruby.c (ruby_process_options): ditto.
+
+Sun Feb 22 13:03:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (configure): unset PWD to use symlink to building
+ directory.
+
+ * Makefile.in (up): cd doesn't need LC_TIME, VCS needs.
+
+Sun Feb 22 10:43:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (method_missing): should not pop cfp if missing method
+ is method_missing. [ruby-core:22298]
+
+ * vm_eval.c (rb_raise_method_missing): new function to directly
+ raise NoMethodError.
+
+ * vm_insnhelper.c (vm_call_method): fixed the case method_missing
+ is missing.
+
+Sun Feb 22 02:15:40 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): handle EMSGSIZE as
+ well.
+
+Sun Feb 22 02:03:46 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): check max length
+ overflow.
+
+Sun Feb 22 01:52:30 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): don't call
+ discard_cmsg_resource when EMFILE.
+
+Sun Feb 22 01:48:51 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): gc when SCM_RIGHTS
+ hit the file descriptor limit.
+
+Sun Feb 22 00:51:58 2009 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_getpartial): error message describes what should be
+ waited after nonblocking error.
+ (rb_io_write_nonblock): ditto.
+
+ * ext/socket/init.c (s_recvfrom_nonblock): ditto.
+ (s_accept_nonblock): ditto.
+
+ * ext/socket/socket.c (sock_connect_nonblock): ditto.
+
+ * ext/socket/ancdata.c (bsock_sendmsg_internal): ditto.
+ (bsock_recvmsg_internal): ditto.
+
+Sun Feb 22 00:31:42 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): check recvmsg error
+ earlier.
+
+Fri Feb 20 23:28:11 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * util.c (rv_alloc, freedtoa): use our normal xmalloc()/xfree() because
+ couldn't free the returned pointer from ruby_dtoa().
+
+ * missing/vsnprintf.c (cvt): receive buffer and use/return it instead
+ of returning the pointer returned from BSD__dtoa().
+
+ * missing/vsnprintf.c (BSD_vfprintf): pass buf to cvt() as the buffer.
+ [ruby-core:22184]
+
+Thu Feb 19 22:59:09 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (make_io_for_unix_rights): cmsg_len may be
+ bigger than msg_controllen on 4.4BSD at least.
+ freeze unix_rights array.
+
+Thu Feb 19 22:17:38 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): fix exception.
+
+Thu Feb 19 21:13:03 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_unix_rights): method renamed.
+
+Thu Feb 19 15:47:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/fake.rb.in: extracted from Makefile.in.
+
+ * configure.in (fake.rb): prefixed with $(arch)-.
+
+Thu Feb 19 15:39:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/ossl_ocsp.c (ossl_ocspbres_verify): OCSP_basic_verify
+ returns positive value on success, not non-zero. [ruby-core:21762]
+
+Thu Feb 19 15:17:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/tmpdir.rb (@@systmpdir): File.expand_path also joins paths.
+
+Thu Feb 19 15:14:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/etc/etc.c (etc_each_group): defines only when Etc::Group is
+ available.
+
+Thu Feb 19 15:11:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_intern.h (translit_char): moved from ruby.c.
+
+ * load.c (load_ext): transliterates file separators and back if
+ needed.
+
+ * symbian/setup (DLN_NEEDS_ALT_SEPARATOR): defined.
+
+Thu Feb 19 14:48:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, */Makefile.sub (LOAD_RELATIVE): moved from ruby.c
+
+Thu Feb 19 14:39:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (darwin): uses -unexported_symbol option of ld instead
+ of objcopy
+
+ * configure.in (darwin): makes dylib instead of so.
+
+Thu Feb 19 14:22:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): added phony targets.
+
+ * lib/mkmf.rb (create_makefile): creates target directories before
+ copying. [ruby-core:21958]
+
+ * lib/mkmf.rb (create_makefile): removes directories in the depth
+ order.
+
+Thu Feb 19 13:56:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_home_dir): checks if HAVE_PWD_H. [ruby-dev:38049]
+
+Thu Feb 19 08:45:48 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * ext/socket/rubysocket.h: add "#include <sys/stat.h>"
+
+Thu Feb 19 03:42:48 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_rights): new method.
+ (make_io_for_rights): new function to allocate
+ IOs for FDs in SCM_RIGHTS message.
+ (bsock_recvmsg_internal): use make_io_for_rights. So the FDs can be
+ closed by GC.
+
+Thu Feb 19 03:28:59 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * README.EXT, README.EXT.ja: Improve the document about
+ rb_scan_args() even more.
+
+Thu Feb 19 03:12:51 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_file_exhaustive.rb: skip some tests if euid == 0.
+ a patch from Lucas Nussbaum in [ruby-core:22209].
+
+Thu Feb 19 03:00:49 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * README.EXT, README.EXT.ja: Improve the document about
+ rb_scan_args().
+
+Wed Feb 18 22:47:01 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (discard_cmsg_resource): new function to close
+ file descriptors in control message.
+ (bsock_recvmsg_internal): call discard_cmsg_resource before retrying
+ recvmsg.
+
+Wed Feb 18 21:47:37 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): prevent misalignment.
+
+Wed Feb 18 21:34:30 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_sendmsg_internal): prevent misalignment.
+
+Wed Feb 18 21:09:43 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): reduce code on
+ environments which have no control message.
+
+Wed Feb 18 20:27:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (OBJCOPY): set ac_cv_prog_ac_ct_OBJCOPY to do nothing
+ on cygwin and mingw because symbols are exported by def file.
+
+Wed Feb 18 15:35:36 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_chown): use chown unless HAVE_FCHOWN.
+
+ * io.c (pipe_open): sarg is always used unless HAVE_FORK.
+
+Wed Feb 18 15:23:34 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * bootstraptest/runner.rb: Use RUBY_DESCRIPTION if defined.
+
+Wed Feb 18 14:33:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_resurrect), string.c (rb_str_resurrect): new
+ functions based on [ruby-dev:37983]
+
+ * insns.def (putstring, duparray): use rb_{ary,str}_resurrect().
+
+ * iseq.c (iseq_data_to_ary): needs to result TS_VALUE.
+
+Wed Feb 18 12:35:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_extname): fix for spaces before extension.
+ [ruby-dev:38044]
+
+Wed Feb 18 12:00:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): suppress a warning. named magic
+ numbers.
+
+Wed Feb 18 10:29:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_start_func_2): do not delete main thread from
+ living_threads. [ruby-core:19385], [ruby-core:22158]
+
+Wed Feb 18 01:05:05 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl: avoid cyclic require.
+
+ * ext/openssl/lib/openssl/ssl-internal.rb: renamed from ssl.rb
+
+ * ext/openssl/lib/openssl/x509-internal.rb: renamed from x509.rb.
+
+ * lib/net/imap.rb: require openssl, instead of openssl/ssl.
+
+ * lib/net/pop.rb: require openssl, instead of openssl/ssl.
+
+ [ruby-dev:38018]
+
+Wed Feb 18 00:55:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/etc/etc.c (Etc::Passwd.each, Etc::Group.each): new methods.
+ [ruby-dev:37999]
+
+Tue Feb 17 23:25:01 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_sendmsg_internal): make the padding
+ removing only on NetBSD.
+
+Tue Feb 17 19:39:04 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_sendmsg_internal): should not remove the
+ last padding of control messages, basically.
+
+Tue Feb 17 12:50:57 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_shared_replace): no need for
+ str_make_independent.
+
+Tue Feb 17 05:41:08 2009 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c: fix to add "ensure" codes across "while" clause
+ before "return" expression. [ruby-dev:37967]
+
+ * bootstraptest/test_flow.rb: add a test.
+
+Tue Feb 17 01:53:35 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: generate rb_define_const directly for
+ rdoc.
+
+ * ext/.document: add socket/constdefs.c.
+
+ * ext/socket/constants.c (sock_define_const): removed.
+ (sock_define_uconst): ditto.
+ (rb_mSockConst): new static variable.
+
+Mon Feb 16 23:14:51 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (bsock_sendmsg_internal) [OpenBSD]: don't remove
+ the last padding to prevent sendmsg failure in test_udp_server in
+ test/socket/test_socket.rb on OpenBSD 4.4.
+
+Mon Feb 16 21:59:32 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/setup: Update Symbian config to match recent changes in missing/alloca.c
+
+Mon Feb 16 17:04:14 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * class.c (rb_scan_args), README.EXT, README.EXT.ja: Add support
+ for specifying the number of the trailing mandatory arguments.
+ Update the documents accordingly. [ruby-dev:37995]
+
+Mon Feb 16 16:46:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * debug.c (set_debug_option): added rtc_error option.
+
+ * win32/Makefile.sub (CRTDEFFLAGS): separated from DEFS.
+
+ * win32/win32.c (rtc_error_handler): ignores RTC errors unless
+ rtc_error debug option is given.
+
+ * win32/win32.c (rb_w32_sysinit): suppress useless CRT assertions.
+ [ruby-core:22116]
+
+Sun Feb 15 21:43:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/ostruct.rb (OpenStruct#new_ostruct_member): checks if frozen.
+ [ruby-talk:328195], [ruby-core:22142]
+
+Sun Feb 15 21:22:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions): aliases
+ assert_not_ methods.
+
+Sun Feb 15 16:57:35 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/securerandom.rb (SecureRandom.urlsafe_base64): new method.
+
+Sun Feb 15 14:58:07 2009 Tanaka Akira <akr@fsij.org>
+
+ * hash.c (hash_i): use Murmurhash.
+
+Sun Feb 15 11:45:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_define_hooked_variable): suppress false assertion
+ with VC9. [ruby-core:22115]
+
+Sun Feb 15 08:35:33 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/test_pp.rb: extract from lib/pp.rb.
+
+ * test/test_prettyprint.rb: extract from lib/prettyprint.rb.
+
+ * test/test_tsort.rb: extract from lib/tsort.rb.
+
+Sun Feb 15 06:34:22 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time.parse): raise ArgumentError if Date._parse don't
+ extract date information. [ruby-core:20912]
+
+Sun Feb 15 04:48:08 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (rb_hash_uint32, rb_hash_uint, rb_hash_start, rb_hash_end),
+ include/ruby/intern.h: add Murmurhash API. [ruby-dev:37784]
+
+ * complex.c (nucomp_hash), array.c (rb_ary_hash), time.c (time_hash),
+ string.c (rb_str_hash), object.c (rb_obj_hash), range.c
+ (range_hash), struct.c (rb_struct_hash), hash.c (rb_any_hash),
+ rational.c (nurat_hash): use Murmurhash. [ruby-dev:37784]
+
+Sun Feb 15 03:50:21 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * hash.c (rb_hash): always return a fixnum value because a return
+ value of rb_hash may be used as a hash value itself and bignums have
+ no unique VALUE.
+
+ * test/ruby/test_hash.rb: add a test for above.
+
+Sun Feb 15 00:45:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_uniq_bang, rb_ary_uniq): unique by the result of
+ given block. [ruby-dev:37998]
+
+Sun Feb 15 00:39:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (ary_resize_capa): should not overwrite outside embedded
+ array.
+
+Sat Feb 14 20:18:19 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/test_time.rb: extracted from lib/time.rb.
+
+Sat Feb 14 19:20:15 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/pathname.rb: obsolete methods removed.
+ [ruby-core:21564]
+
+Sat Feb 14 15:46:01 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/pathname.rb (Pathname#binread): added. [ruby-dev:37952]
+
+Sat Feb 14 13:14:18 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * iseq.c: remove nil parameter from Proc#parameters
+ after rest appeared.
+
+Sat Feb 14 07:23:52 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_external_str_new_with_enc): change evaluation order
+ for speed.
+
+Sat Feb 14 02:20:04 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/sockport.h (SET_SA_LEN): cast to void for suppressing a
+ warning.
+
+Fri Feb 13 23:37:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/win32/lib/Win32API.rb (Win32API#initialize): DL.dlopen
+ raises DLError.
+
+Fri Feb 13 21:13:19 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (Init_socket): define TCPServer#listen and
+ UNIXServer#listen here for rdoc.
+
+Fri Feb 13 20:59:48 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (extract_ipv6_pktinfo): set sa_len for 4.4BSD.
+
+Fri Feb 13 15:34:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (simple_default_value): removed. default values of optional
+ parameters are not available still now. [ruby-dev:37980]
+
+Fri Feb 13 15:11:11 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_eval.c (eval_string_with_cref): use rb_vm_get_ruby_level_next_cfp()
+ instead of vm_get_ruby_level_caller_cfp(). checking a upper frame
+ is not enough. [ruby-dev:37984]
+
+ * proc.c, vm_core.h: declare rb_vm_get_ruby_level_next_cfp()
+ on vm_core.h.
+
+Fri Feb 13 15:01:40 2009 Koichi Sasada <ko1@atdot.net>
+
+ * cont.c (rb_fiber_alive_p): fix to return true instead of 0.
+ [ruby-dev:37991]
+
+ * test/ruby/test_fiber.rb: add a test for Fiber#alive?
+
+Fri Feb 13 09:43:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (ac_cv_func_flock): using flock defined in
+ win32/win32.c on mingw.
+
+Fri Feb 13 01:45:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_set_sequence, compile_dstr_fragments),
+ (iseq_compile_each): hides other internal objects.
+
+ * compile.c (iseq_compile_each): just freeze xstr.
+
+Fri Feb 13 00:48:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * insns.def (defineclass): try to autoload const to be overridden.
+
+Thu Feb 12 23:22:29 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/socket/test_socket.rb (test_udp_server): filter out unreachable
+ addresses. [ruby-dev:37970]
+
+Thu Feb 12 22:51:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (hide_obj): OBJ_FREEZE() is not an expression. a patch
+ from nagachika <nagachika00 AT gmail.com> at [ruby-dev:37977].
+
+ * compile.c (insn_set_sc_state): fixed typo.
+
+Thu Feb 12 12:36:35 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/basicsocket.c (bsock_getpeereid): implemented for Solaris
+ using getpeerucred.
+
+ * ext/socket/extconf.rb: check ucred.h and getpeerucred.
+
+ * ext/socket/rubysocket.h: include ucred.h if available.
+
+Thu Feb 12 19:42:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (compile_array_, defined_expr, iseq_compile_each): hide
+ and freeze internal literal objects, to prevent from modifying.
+ [ruby-dev:37959]
+
+ * iseq.c (insn_operand_intern): copy internal literal objects.
+
+ * insns.def (putstring, duparray): ditto.
+
+ * string.c (rb_str_replace): exported.
+
+Thu Feb 12 17:17:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_ungetc): calculates new position
+ before reallocation. [Bug#1099]
+
+Thu Feb 12 16:50:27 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: a patch to build on GNU/kOpenSolaris from Rober
+ Millan at [ruby-core:21888].
+
+Thu Feb 12 15:28:04 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * iseq.c (simple_default_value): allow plain strings as default
+ values.
+
+Wed Feb 11 18:09:41 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * gc.c (define_final, undefine_final): shouldn't add/remove finalizer
+ of frozen objects.
+
+ * gc.c (undefine_final): should remove FL_FINALIZE flag.
+ [ruby-dev:37964] (also see [ruby-dev:37959])
+
+Wed Feb 11 17:37:41 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket.udp_server_sockets): call the block
+ if given. close the sockets when the block exits.
+ (Socket.udp_server_loop): use udp_server_sockets in block form.
+
+Wed Feb 11 17:34:16 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket.tcp_server_sockets): call the block
+ if given. close the sockets when the block exits.
+ (Socket.tcp_server_loop): use tcp_server_sockets in block form.
+
+Wed Feb 11 17:01:52 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket.unix_server_loop): use
+ unix_server_socket with a block.
+
+Wed Feb 11 16:54:26 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket.unix_server_socket): close the
+ socket when the block exits.
+
+Wed Feb 11 16:50:59 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket.unix_server_socket): call the block
+ if given. remove the socket file when the block exits.
+
+Wed Feb 11 16:44:20 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_s_ip_pktinfo): make 3rd argument
+ optional.
+
+Wed Feb 11 15:47:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (ary_make_shared): returns shared root array itself, and
+ frozen array can be shared.
+
+Wed Feb 11 14:46:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * insns.def (setspecial, putstring): fixed typos in rdoc.
+
+ * insns.def (toregexp): uses rb_ary_tmp_new(), and clears it after
+ used.
+
+Wed Feb 11 14:08:23 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (anc_inspect_socket_rights): return 1 on
+ success. 0 on failure.
+ (anc_inspect_passcred_credentials): ditto.
+ (anc_inspect_socket_creds): ditto.
+ (anc_inspect_socket_creds): ditto.
+ (anc_inspect_socket_creds): ditto.
+ (anc_inspect_ip_recvdstaddr): ditto.
+ (anc_inspect_ip_pktinfo): ditto.
+ (anc_inspect_ipv6_pktinfo): ditto.
+ (ancillary_inspect): check family.
+
+Wed Feb 11 12:55:07 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (anc_inspect_ip_pktinfo): make result bit
+ succinct.
+ (Init_ancdata): fix number of arguments.
+
+Wed Feb 11 11:47:41 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ipsocket.c (Init_ipsocket): undef getpeereid at IPSocket.
+
+Wed Feb 11 10:16:34 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: check getpeereid.
+
+ * ext/socket/basicsocket.c (bsock_getpeereid): new method.
+
+Wed Feb 11 09:58:59 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket::UDPSource#inspect): fix variable
+ name.
+
+Wed Feb 11 00:38:16 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sock_gethostname): use HOST_NAME_MAX.
+
+ * ext/socket/raddrinfo.c (make_ipaddr): local variable renamed.
+
+Tue Feb 10 23:44:53 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/init.c (struct recvfrom_arg): use struct
+ sockaddr_storage.
+ (recvfrom_blocking): follow struct recvfrom_arg change.
+ (s_recvfrom): ditto.
+ (s_recvfrom_nonblock): use struct sockaddr_storage.
+
+ * ext/socket/socket.c (sock_accept): use struct sockaddr_storage.
+ (sock_accept_nonblock): ditto.
+ (sock_sysaccept): ditto.
+
+ * ext/socket/ancdata.c (bsock_recvmsg_internal): use struct
+ sockaddr_storage.
+
+Tue Feb 10 23:30:32 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/basicsocket.c (bsock_getpeername): use struct
+ sockaddr_storage.
+ (bsock_local_address): ditto.
+ (bsock_remote_address): ditto.
+
+Tue Feb 10 21:26:33 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket.udp_server_sockets): new method.
+ (Socket.udp_server_loop_on): new method.
+ (Socket.udp_server_loop): new method
+ (Socket.ip_sockets_port0): extracted from tcp_server_sockets_port0.
+ (Socket::UDPSource): new class.
+
+Tue Feb 10 21:14:43 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sockaddr_obj): fill pfamily.
+
+Tue Feb 10 21:09:23 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (sockopt_s_bool): new method.
+ (sockopt_bool): new method.
+
+Tue Feb 10 20:58:47 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (sockopt_family_m): renamed from sockopt_family.
+ (sockopt_level_m): renamed from sockopt_level.
+ (sockopt_optname_m): renamed from sockopt_optname.
+ (inspect_local_peercred): follow the renaming.
+ (Init_sockopt): ditto.
+
+Tue Feb 10 20:56:07 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (anc_inspect_socket_creds): refactored to avoid
+ a rb_str_cat2 call.
+
+Tue Feb 10 04:34:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (when): makes parentheses balanced.
+
+Tue Feb 10 01:28:49 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ip_cmsg_type_to_sym): renamed from
+ cmsg_type_to_sym.
+
+Tue Feb 10 01:22:56 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (sockopt_inspect): refactored.
+
+Tue Feb 10 01:02:16 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: generate intern_family_noprefix.
+
+ * ext/socket/option.c (sockopt_inspect): use intern_family_noprefix
+ not to show AF_ prefix.
+
+ * ext/socket/ancdata.c (ancillary_inspect): ditto.
+
+Mon Feb 9 23:21:29 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/constants.c (level_arg): use unknown_level_to_int for
+ non internet protocol.
+ (optname_arg): use only so_optname_to_int for non internet protocol.
+ (cmsg_type_arg): use only scm_optname_to_int for non internet
+ protocol.
+
+ * ext/socket/mkconstants.rb: generate unknown_level_to_int.
+ rename iplevel_to_int to ip_level_to_int.
+
+Mon Feb 9 23:04:27 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: rename level_to_int to iplevel_to_int.
+ rename intern_level to intern_iplevel.
+
+ * ext/socket/constants.c: follow the renaming.
+
+ * ext/socket/option.c: ditto.
+
+ * ext/socket/ancdata.c: ditto.
+
+Mon Feb 9 22:52:13 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h (level_arg): add family argument.
+ (optname_arg): ditto.
+ (cmsg_type_arg): ditto.
+ (rb_sock_getfamily): declared.
+
+ * ext/socket/constants.c (level_arg): add family argument.
+ (optname_arg): ditto.
+ (cmsg_type_arg): ditto.
+
+ * ext/socket/init.c (rb_sock_getfamily): defined.
+
+ * ext/socket/option.c (sockopt_initialize): give family for level_arg
+ and optname_arg.
+ (sockopt_s_int): ditto.
+
+ * ext/socket/basicsocket.c (bsock_setsockopt): ditto.
+ (bsock_getsockopt): ditto.
+
+ * ext/socket/ancdata.c (ancillary_initialize): ditto.
+ (ancillary_s_int): ditto.
+ (ancillary_cmsg_is_p): ditto.
+ (bsock_sendmsg_internal): ditto.
+ (bsock_recvmsg_internal): use rb_sock_getfamily.
+
+Mon Feb 9 21:48:59 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_inspect): show address family.
+
+Mon Feb 9 20:19:36 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/basicsocket.c (bsock_getsockname): use sockaddr_storage.
+
+Mon Feb 9 20:11:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/win32ole/win32ole.c (load_conv_function51932): fixed for the
+ case IMultiLanguage is not available. [ruby-dev:37950]
+
+Mon Feb 9 20:04:35 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_int): return 1/0 on success/failure.
+ (inspect_uint): ditto.
+ (inspect_linger): ditto.
+ (inspect_socktype): ditto.
+ (inspect_timeval): ditto.
+ (inspect_peercred): ditto.
+ (inspect_local_peercred): ditto.
+ (sockopt_inspect): refactored.
+
+Mon Feb 9 20:00:26 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: more constants for Solaris.
+
+Mon Feb 9 19:59:18 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/basicsocket.c (bsock_getsockopt): refine address family
+ examination.
+
+Mon Feb 9 19:52:32 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (sockopt_initialize): argument conversion
+ reordered.
+
+Mon Feb 9 19:46:22 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (ancillary_initialize): add family argument.
+ (ancdata_new): ditto.
+ (ancillary_s_int): ditto.
+ (ancillary_family): new function.
+ (ancillary_family_m): new method.
+ (ancillary_s_ip_pktinfo): follow ancdata_new change.
+ (ancillary_s_ipv6_pktinfo): ditto.
+ (bsock_recvmsg_internal): examine the socket address family.
+
+Mon Feb 9 11:31:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (io_encoding_set): ignore second argument when external and
+ internal are same. [ruby-dev:37939]
+
+Mon Feb 9 09:05:12 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_local_peercred): check version.
+ (sockopt_inspect): suppress warning.
+
+Mon Feb 9 02:04:03 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_peercred): struct ucred contains
+ effective uid/gid.
+
+Mon Feb 9 00:44:45 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (sockopt_inspect): add ifdef guard for
+ LOCAL_PEERCRED.
+
+Mon Feb 9 00:37:06 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_local_peercred): cr_uid is a effective
+ uid, not a real uid.
+
+Mon Feb 9 00:30:56 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: check sys/param.h and sys/ucred.h.
+
+ * ext/socket/rubysocket.h: include sys/param.h and sys/ucred.h.
+
+ * ext/socket/option.c (inspect_local_peercred): new function to show
+ LOCAL_PEERCRED socket option on FreeBSD.
+ (sockopt_inspect): show as LOCAL_* socket option if AF_UNIX and level
+ is 0.
+
+Mon Feb 9 00:01:47 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h (sockopt_new): add family argument.
+
+ * ext/socket/option.c (sockopt_initialize): add vfamily argument.
+ (sockopt_new): add family argument and record it in the object.
+ (sockopt_family): new method.
+ (sockopt_s_int): add vfamily argument.
+ (sockopt_inspect): show family.
+
+ * ext/socket/basicsocket.c (bsock_getsockopt): check address family
+ using getsockname.
+
+Sun Feb 8 23:37:17 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * enumerator.c (enumerator_with_index): receives one argument which
+ represents a start offset. [ruby-dev:37921]
+
+Sun Feb 8 23:28:05 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * include/ruby/st.h, st.c: order entries by a linked list instead of
+ a loop to fix iteration miss when hash is modified during iteration.
+ [ruby-dev:37910]
+
+Sun Feb 8 23:22:35 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c (inspect_peercred): new function to show
+ SO_PEERCRED socket option on GNU/Linux.
+
+Sun Feb 8 22:44:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/backward/rubysig.h (rb_thread_blocking_region_begin),
+ (rb_thread_blocking_region_end): marked as deprecated.
+
+ * include/ruby/backward/rubysig.h (TRAP_BEG): fix for C++. a
+ patch from Aman Gupta at [ruby-core:21934]
+
+Sun Feb 8 21:47:50 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: check struct cmsgcred.
+
+ * ext/socket/ancdata.c (anc_inspect_passcred_credentials): add
+ "(ucred)".
+ (anc_inspect_socket_creds): show struct cmsgcred too, for FreeBSD.
+
+Sun Feb 8 21:05:35 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/drb/extservm.rb (DRb::ExtServManager#invoke_service_command):
+ detach spawned process. [ruby-dev:37936]
+
+Sun Feb 8 20:30:29 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: check struct sockcred.
+
+ * ext/socket/ancdata.c (anc_inspect_socket_creds): new function to
+ show SCM_CREDS on NetBSD.
+
+Sun Feb 8 19:05:24 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/backward/rubysig.h: extern "C" was missing.
+ [ruby-core:21929]
+
+Sun Feb 8 18:46:15 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (anc_inspect_passcred_credentials): new
+ function to show SCM_CREDENTIALS on GNU/Linux.
+
+Sun Feb 8 18:34:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_s_binread): ensures file path. [ruby-dev:37940]
+
+Sun Feb 8 13:52:02 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (init_unix_addrinfo): add socktype argument.
+ (addrinfo_initialize): follow init_unix_addrinfo change.
+ (addrinfo_s_unix): add optional argument: socktype
+
+Sun Feb 8 13:09:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_APPEND_OPTION, RUBY_APPEND_OPTIONS),
+ (RUBY_PREPEND_OPTION, RUBY_PREPEND_OPTIONS): add option(s)
+ without duplication.
+
+ * configure.in (RUBY_DEFINE_IF): changed parameter order, now
+ condition comes first.
+
+ * configure.in (universal_binary): checks architecture macros, and
+ improved thin load paths.
+
+Sun Feb 8 09:41:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * runruby.rb: gets extout and arch from rbconfig.rb.
+
+Sat Feb 7 21:26:15 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/socket/test_addrinfo.rb (test_family_addrinfo): don't use
+ www.ruby-lang.org.
+ http://d.hatena.ne.jp/nagachika/20090204/working_for_0f0e
+
+Sat Feb 7 18:02:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (--with-arch): added new option to support
+ universal binary. replaced --enable-fat-binary option which
+ didn't work actually.
+
+ * configure.in (RUBY_FUNC_ATTRIBUTE): added conditional test.
+
+ * configure.in (ac_cv_type_getgroups): declared because getgroups()
+ fills rest of the buffer with garbage on Rosetta.
+
+ * configure.in (alloca): defines only for powerpc, but always
+ create empty object to suppress ld warning.
+
+ * configure.in (LIBRUBY_DLDFLAGS): set compatibility version with
+ TEENY.
+
+ * configure.in (CFLAGS, LDFLAGS): separates ARCH_FLAG.
+
+ * configure.in (arch): renamed to "universal" from "fat".
+
+ * Makefile.in (ARCH_FLAG): added.
+
+ * include/ruby/defines.h (WORDS_BIGENDIAN): uses
+ AC_APPLE_UNIVERSAL_BUILD.
+
+ * missing/alloca.c (alloca): defines only if C_ALLOCA is defined.
+
+Sat Feb 7 12:31:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * runruby.rb: added --precommand and --show options.
+
+ * runruby.rb: added --cpu option.
+
+ * runruby.rb: skips version check in rbconfig.rb.
+
+Sat Feb 7 11:44:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (have_header): needs dependent headers if trying to
+ compile.
+
+ * ext/socket/extconf.rb: net/if.h depends on other headers.
+
+Sat Feb 7 04:02:37 2009 Tanaka Akira <akr@fsij.org>
+
+ * dir.c (dir_read): don't disable rdoc.
+
+Fri Feb 6 23:28:33 2009 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_fread): use rb_io_wait_readable for retry
+ avoid Errno::EINTR on ruby -e 'trap(:CHLD) {}; spawn("sleep 1"); STDIN.read'
+
+Fri Feb 6 22:36:11 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * thread_pthread.c (native_thread_create) [__SYMBIAN32__]: reduced pthread stack size.
+
+ * thread_pthread.c (thread_timer) [__SYMBIAN32__]: compiled out unsupported yet signal-related functionality.
+
+ * io.c (pipe_open) [__SYMBIAN32__]: fixed compile time error.
+
+Fri Feb 6 22:11:46 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * include/ruby/defines.h [__SYMBIAN32__]: included <sys/select.h> for fd_set definition
+
+Fri Feb 6 21:58:24 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/missing-pips.c: added a stub for missing PIPS function execl.
+
+ * process.c (rb_proc_exec) [__SYMBIAN32__]: removed conditional around execl function call.
+
+Fri Feb 6 20:37:42 2009 Tanaka Akira <akr@fsij.org>
+
+ * signal.c (register_sigaltstack): ignore sigaltstack error.
+ It fails on OpenBSD 4.4 when pthread library is linked.
+
+Fri Feb 6 18:18:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_readdir_with_enc): fallback to OS's conversion
+ when ASCII-8BIT is passed.
+
+Fri Feb 6 17:19:23 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/{dir.h, win32.c} (rb_w32_readdir_with_enc): new function to
+ read entry with specified enc.
+
+ * win32/win32.c (readdir_internal): extract from rb_w32_opendir().
+
+ * win32/win32.c (opendir_internal): extract from rb_w32_readdir().
+
+ * dir.c (dir_read, dir_each): use new READDIR macro instead of readdir()
+ to pass enc for special version of readdir, such as above.
+
+Fri Feb 6 12:11:24 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ruby.c (process_options): set initial default_external before -r.
+
+Fri Feb 6 12:03:47 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ruby.c (process_options): -K and -E in shebang should be reflect to
+ default_external. [ruby-dev:37920]
+
+Fri Feb 6 07:52:57 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/pty.c (chfunc): type fixed.
+
+Fri Feb 6 02:51:59 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_each_codepoint): update RDoc for
+ String#codepoints. a patch from Radoslaw Bulat in
+ [ruby-core:21835]
+
+Fri Feb 6 01:09:13 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * cont.c (cont_mark, cont_capture, cont_restore_1): use #else instead
+ of #elif. a patch from NISHIMATSU Takeshi <t_nissie at yahoo.co.jp>
+ in [ruby-list:45856].
+
+Thu Feb 5 20:28:27 2009 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_run_exec_options_err): renamed from
+ rb_run_exec_options.
+ (rb_exec_err): renamed from rb_exec.
+ (rb_fork_err): renamed from rb_fork.
+ (rb_spawn_err): renamed from rb_spawn.
+ (rb_run_exec_options): declared with 1.9.1 compatible signature.
+ (rb_exec): ditto.
+ (rb_fork): ditto.
+ (rb_spawn): ditto.
+
+ * process.c (rb_run_exec_options_err): renamed from
+ rb_run_exec_options.
+ (rb_exec_err): renamed from rb_exec.
+ (rb_fork_err): renamed from rb_fork.
+ (rb_spawn_err): renamed from rb_spawn.
+ (rb_run_exec_options): defined.
+ (rb_exec): ditto.
+ (rb_fork): ditto.
+ (rb_spawn): ditto.
+
+ * io.c: follow above change.
+
+ * ext/pty/pty.c: follow above change.
+
+ [ruby-dev:37893]
+
+Thu Feb 5 19:58:40 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket: AddrInfo is renamed to Addrinfo. [ruby-dev:37876]
+
+Thu Feb 5 16:18:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_SITE_LIB_PATH, RUBY_VENDOR_LIB_PATH): fix for
+ NetBSD.
+
+Thu Feb 5 16:04:29 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): follow recent changes about paths.
+
+Thu Feb 5 14:26:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (MAJOR, MINOR, TEENY): uses RUBY_VERSION_*.
+
+ * mkconfig.rb (prefix): uses ruby_version in config.status.
+
+Thu Feb 5 12:24:18 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_uniq): gets rid of copying.
+
+Thu Feb 5 12:01:53 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (ary_add_hash): split from ary_make_hash().
+
+ * array.c (ary_make_hash): hide a Hash used internally.
+
+ * array.c (ary_recycle_hash): clears internally used hash. this
+ name came from [ruby-dev:37908].
+
+ * array.c (rb_ary_diff, rb_ary_and, rb_ary_or, rb_ary_uniq_bang):
+ recycle hashes.
+
+Thu Feb 5 11:21:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_LIB_VERSION): added for library version, to
+ split from core version. [ruby-dev:37748]
+
+ * configure.in (RUBY_LIB_PATH, etc): moved actual version
+ dependent stuff to version.c.
+
+ * ruby.c (ruby_init_loadpath_safe): ditto.
+
+ * version.c (ruby_initial_load_paths): moved initial load path
+ version depending on version from ruby.c.
+
+ * version.h (RUBY_VERSION_{MAJOR,MINOR,TEENY}): now mean library
+ and API version, and reverted to 1.9.1. [ruby-dev:37889]
+
+Thu Feb 5 07:39:33 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * ext/readline/readline.c (Init_readline): remove_history(0) may be
+ NULL. [ruby-dev:37891]
+
+Thu Feb 5 03:55:22 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (LOCALTIME): should call tzset() before localtime_r().
+ [ruby-dev:37896]
+
+Thu Feb 5 02:12:35 2009 Alexander Zavorine <alexandre.zavorine@nokia.com>
+
+ * symbian/configure.bat: Updated Symbian configuration procedure to
+ avoid creating files outside build directory
+
+ * symbian/pre-build: ditto
+
+ * symbian/setup: ditto
+
+ * symbian/rubyu.def: removed
+
+Thu Feb 5 01:44:02 2009 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (make_econv_exception): refine error message for
+ undefined conversion. [ruby-core:21828]
+
+Thu Feb 5 01:18:25 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sock_s_socketpair): make 3rd argument optional.
+
+ * ext/socket/unixsocket.c (unix_s_socketpair): follow the above
+ change.
+
+ * ext/socket/rubysocket.h (sock_s_socketpair): ditto.
+
+Thu Feb 5 00:09:39 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (addrinfo_ipv6_to_ipv4): new method.
+
+Wed Feb 4 21:59:31 2009 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (make_econv_exception): show U+XXXX form for undefined
+ conversion error from UTF-8.
+
+Wed Feb 4 21:57:37 2009 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_dump): use MBCLEN_CHARFOUND_P properly.
+
+Wed Feb 4 21:55:38 2009 Tanaka Akira <akr@fsij.org>
+
+ * bootstraptest/runner.rb: refine success message.
+
+Wed Feb 4 19:10:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (id.h): updates from parse.h.
+
+Wed Feb 4 11:45:06 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/mkexports.rb: shouldn't export DllMain.
+ reported at http://pc11.2ch.net/test/read.cgi/tech/1233686068/21
+
+Wed Feb 4 10:12:05 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * missing/vsnprintf.c (BSD_vfprintf): should support 't' format
+ modifier to handle PRIdPTRDIFF. thanks for the info from
+ Kazuhiro NISHIYAMA. [ruby-core:21807]
+
+Wed Feb 4 01:28:46 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/extconf.rb: fix struct in_pktinfo and struct in6_pktinfo
+ detection.
+
+Wed Feb 4 00:32:59 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/etc/test_etc.rb(test_getpwnam, test_getgrgid, test_getgrnam):
+ support an environment that has duplicative entries. a patch from
+ Tomoyuki Chikanaga <chikanag at nippon-control-system.co.jp> in
+ [ruby-dev:37882].
+
+Wed Feb 4 00:17:52 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket.tcp_server_sockets_port0): skip
+ socket creation error.
+
+Tue Feb 3 23:37:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (load_file_internal): resets EOF flag after parse.
+
+Tue Feb 3 23:13:34 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_backtrace): always returns non-nil array if lev is
+ negative. [ruby-core:21795]
+
+Tue Feb 3 21:19:06 2009 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/extconf.rb: checked rl_set_screen_size and
+ rl_get_screen_size.
+
+ * ext/readline/readline.c (readline_s_set_screen_size): added
+ Readline.set_screen_size.
+
+ * ext/readline/readline.c (readline_s_get_screen_size): added
+ Readline.get_screen_size.
+
+Tue Feb 3 21:07:19 2009 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/readline.c (readline_s_set_completion_proc): set
+ default if proc is nil. fix #1095
+
+Tue Feb 3 16:36:06 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * array.c (rb_ary_sort_by_bang): RDoc update.
+
+ * NEWS: add Array#sort_by!.
+
+Tue Feb 3 16:23:16 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket.tcp_server_sockets_port0): new
+ private function for allocating same port both IPv4 and IPv6.
+ (Socket.tcp_server_sockets): use tcp_server_sockets_port0 for port 0.
+
+Tue Feb 3 14:12:10 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb: validate data before sending to a server.
+ [ruby-core:20320]
+
+Tue Feb 3 12:35:41 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (match_array): replace match_check().
+
+ * re.c (match_values_at): ditto.
+
+Tue Feb 3 12:09:08 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (hmac_md5): should use String#ord to get ascii
+ code from the one-character string.
+
+Tue Feb 3 11:25:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (load_lock): warn for circular require. [ruby-core:20794],
+ [ruby-core:20797]
+
+Tue Feb 3 08:35:12 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb (Socket.tcp_server_sockets): extracted from
+ Socket.tcp_server_loop.
+ (Socket.accept_loop): ditto.
+ (Socket.unix_server_socket): extracted from Socket.unix_server_loop.
+ (Socket.unix_server_loop): use Socket.accept_loop.
+
+Tue Feb 3 08:21:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_readpartial.rb (make_pipe): readpartial does not
+ work in text mode.
+
+Tue Feb 3 08:18:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cygwin/GNUmakefile.in (RUBYDEF): uses mkexports.rb on cygwin too.
+
+ * win32/mkexports.rb (Exports::Cygwin): added.
+
+Tue Feb 3 08:10:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (Doxyfile): moved from Makefile.in.
+
+ * template/Doxyfile.tmpl: split from Doxyfile.in.
+
+Tue Feb 3 08:01:38 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_write): use of cast expressions as lvalues
+ is deprecated.
+
+Tue Feb 3 07:57:58 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/extconf.rb (in_pktinfo, in6_pktinfo),
+ ext/socket/ancdata.c: defined in w32api/ws2tcpip.h on cygwin but
+ cannot compile for some reason.
+
+Tue Feb 3 07:02:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * missing/langinfo.c (nl_langinfo_codeset): accepts iso-8859
+ fragment. [ruby-core:21757]
+
+Tue Feb 3 07:01:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * mkconfig.rb (patchlevel): config.status may not contain
+ PATCHLEVEL even if other version numbers exist.
+
+Mon Feb 2 23:43:00 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (Init_addrinfo): add AddrInfo#to_s as an
+ alias of AddrInfo#to_sockaddr.
+
+ * ext/socket/option.c (Init_sockopt): add Socket::Option#to_s as an
+ alias of Socket::Option#data.
+
+ [ruby-dev:37873]
+
+Mon Feb 2 21:04:13 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_sort_by_bang): RDoc update. [ruby-core:21742]
+
+Mon Feb 2 20:49:24 2009 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c: Introduce id_each to save rb_intern() and SYM2ID()
+ calls.
+
+Mon Feb 2 19:55:51 2009 Tanaka Akira <akr@fsij.org>
+
+ * test/socket/test_addrinfo.rb: use AddrInfo.getaddrinfo to generate
+ IPv6 address. AddrInfo.ip generates IPv4 address for IPv4 mapped
+ IPv6 address if --with-lookup-order-hack=INET.
+ [ruby-dev:37868]
+
+Mon Feb 2 19:17:16 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * doc/NEWS-1.9.1: typo fixed: collect_all -> collect.
+ [ruby-core:21706]
+
+Mon Feb 2 17:23:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cygwin/GNUmakefile.in (dir.o, win32.o): depend on win32/dir.h.
+
+Mon Feb 2 17:13:46 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * mkconfig.rb: patchlevel is sometimes minus.
+
+ * win32/resource.rb: ditto.
+
+Mon Feb 2 17:11:23 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/ancdata.c (cmsg_type_to_sym): add #ifdef for no IPv6
+ environment.
+
+Mon Feb 2 17:05:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_find_file_ext): should not be infected from other
+ load paths.
+
+Mon Feb 2 16:33:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (dir_s_home): new method. [ruby-core:21454]
+
+Mon Feb 2 16:06:10 2009 Tanaka Akira <akr@fsij.org>
+
+ * version.h: bump up to 1.9.2 patchlevel -1.
+ yugui recommend "-1" strongly.
+
+ * lib/rubygems/version.rb: accept negative patchlevel.
+
+Mon Feb 2 14:53:35 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sock_initialize): make 3rd argument, protocol,
+ optional.
+
+Mon Feb 2 14:47:53 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_sort_by_bang): new method. requested in
+ [ruby-core:21709]
+
+Mon Feb 2 14:22:56 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/constants.c (cmsg_type_arg): INET6 check.
+
+Mon Feb 2 14:18:20 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/option.c: use INET6 instead of IPV6.
+
+Mon Feb 2 12:47:47 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/{options,raddrinfo}.c: use INET6 instead of AF_INET6 for
+ VC++6.
+
+Mon Feb 2 12:41:52 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * complex.c (f_signbit): regard NaN as a positive value.
+ [ruby-dev:37861].
+
+Mon Feb 2 12:39:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sample/test.rb (valid_syntax?), test/ruby/test_system.rb
+ (TestSystem::valid_syntax?): use catch and throw instead of
+ return inside BEGIN block.
+
+Mon Feb 2 11:45:10 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h (cmsg_type_arg): declared.
+ (Init_ancdata): ditto.
+
+ * ext/socket/init.c (Init_socket_init): call Init_ancdata.
+
+ * ext/socket/constants.c (cmsg_type_arg): defined.
+
+ * ext/socket/depend: add dependency for ancdata.o.
+
+ * ext/socket/mkconstants.rb: generate scm_optname_to_int.
+ more constants.
+
+ * ext/socket/extconf.rb: add ancdata.o.
+
+ * ext/socket/ancdata.c: new file. new method
+ BasicSocket#{sendmsg,sendmsg_nonblock,recvmsg,recvmsg_nonblock}
+
+Mon Feb 2 10:57:27 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c, win32/dir.h (open_dir_handle, rb_w32_opendir,
+ move_to_next_entry, rb_w32_readdir, check_valid_dir): change backend
+ API from A to W.
+
+Mon Feb 2 10:48:38 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/basicsocket.c (bsock_setsockopt): accept Socket::Option
+ object.
+ (bsock_getsockopt): return Socket::Option object.
+
+ * ext/socket/option.c: new file.
+
+ * ext/socket/rubysocket.h (rb_cSockOpt): declared.
+ (sockopt_new): ditto.
+ (Init_sockopt): ditto.
+
+ * ext/socket/init.c (Init_socket_init): call Init_sockopt.
+
+ * ext/socket/depend: add dependency for option.o
+
+ * ext/socket/mkconstants.rb: generate intern_level, intern_so_optname,
+ intern_ip_optname, intern_ipv6_optname, intern_tcp_optname,
+ intern_udp_optname and intern_scm_optname.
+
+ * ext/socket/extconf.rb: add option.o.
+
+Mon Feb 2 09:49:39 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_backtrace_each): progname is not available at
+ initializing phase.
+
+Mon Feb 2 08:12:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/xmlrpc/server.rb (Server#serve): gets rid of hardcoded
+ platform names.
+
+ * lib/resolv.rb (Resolv::Hosts::DefaultFileName),
+ (Resolv::DNS::Config.default_config_hash): tries win32/resolv on
+ mswin64 too.
+
+ * lib/rubygems/specification.rb (Gem::Specification#ruby_code):
+ added mswin64.
+
+ * lib/drb/extservm.rb (DRb::ExtServManager#invoke_service_command):
+ spawn is better to start a process in background.
+
+ * ext/extmk.rb: uses FNM_SYSCASE.
+
+ * instruby.rb: installs win32.h on mswin64 platform.
+ [ruby-core:21722]
+
+Mon Feb 2 07:36:13 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_backtrace_each): now takes an iterator function.
+
+ * vm_core.h (rb_make_backtrace, rb_backtrace_each): added
+ prototypes.
+
+ * vm_dump.c (rb_vm_bugreport), vm_eval.c (rb_backtrace): gets rid
+ of allocating objects. [ruby-core:21619]
+
+ * vm_eval.c (rb_backtrace_each): new function which iterates over
+ each backtrace info.
+
+Mon Feb 2 06:51:36 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * encoding.c (rb_filesystem_encoding): Windows' filesystem encoding is
+ sometimes ANSI code page and sometimes OEM code page. we should check
+ whether code page is used.
+
+Sun Feb 1 21:27:55 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (addrinfo_ipv4_private_p): new method.
+ (addrinfo_ipv4_loopback_p): ditto.
+ (addrinfo_ipv4_multicast_p): ditto.
+
+Sun Feb 1 16:10:06 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (Switch#summarize): strips an equal sign from
+ short option, and fills right sides in shorter lines.
+ [ruby-talk:326414]
+
+Sun Feb 1 05:19:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (rb_const_get_0), vm_insnhelper.c (vm_get_ev_const):
+ avoids infinite self recursion autoload. [ruby-core:21696]
+
+Sat Jan 31 22:50:38 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit/assertions.rb (assert_equal): show class in failure
+ message if meaningful.
+
+Sat Jan 31 22:38:46 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/resolv.rb (Resolv::DNS#each_address): don't query IPv6 address
+ if the host has no global IPv6 address.
+
+Sat Jan 31 22:29:05 2009 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (STR2CSTR): removed.
+ (rb_str2cstr): removed.
+
+ * object.c (rb_str2cstr): removed.
+
+Sat Jan 31 20:07:59 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (addrinfo_ipv6_unspecified_p): new method.
+ (addrinfo_ipv6_loopback_p): ditto.
+ (addrinfo_ipv6_multicast_p): ditto.
+ (addrinfo_ipv6_linklocal_p): ditto.
+ (addrinfo_ipv6_sitelocal_p): ditto.
+ (addrinfo_ipv6_v4mapped_p): ditto.
+ (addrinfo_ipv6_v4compat_p): ditto.
+ (addrinfo_ipv6_mc_nodelocal_p): ditto.
+ (addrinfo_ipv6_mc_linklocal_p): ditto.
+ (addrinfo_ipv6_mc_sitelocal_p): ditto.
+ (addrinfo_ipv6_mc_orglocal_p): ditto.
+ (addrinfo_ipv6_mc_global_p): ditto.
+
+Sat Jan 31 19:09:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_require_safe): raises when the path to be loaded is
+ tainted. [ruby-dev:37843]
+
+Sat Jan 31 18:08:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (optflags): defaulted to -O3 to get rid of slug of
+ gcc 4.3.
+
+Sat Jan 31 18:03:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (List#accept, parse_in_order): n option is no
+ longer needed.
+
+Sat Jan 31 14:12:43 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/pathname.rb (Pathname#each_child): new method.
+
+Sat Jan 31 00:07:49 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit/assertions.rb
+ (Test::Unit::Assertions#assert_nothing_raised): suppress warning.
+ [ruby-core:21312]
+
+Fri Jan 30 21:49:32 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/pathname.rb (Pathname#realdirpath): new method based on the
+ patch in [ruby-dev:36560] by Akinori MUSHA.
+ [ruby-dev:36290]
+
+Fri Jan 30 18:04:23 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_write): limit write size to 32KB if the file
+ seems to be console. [ruby-core:21613]
+
+Fri Jan 30 16:12:32 2009 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/curses/curses.c (Init_curses): Curses#crmode and
+ Curses#nocrmode changes to the module function.
+ fix #916
+
+Fri Jan 30 14:31:14 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * tool/make-snapshot (prereq): remove enc.mk from tarball because
+ BSD make checks $(srcdir)/enc.mk and try to run $(builddir)/enc.mk.
+
+Fri Jan 30 14:11:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * enc/depend: extract compile rules to each target for nmake.
+
+Fri Jan 30 12:59:49 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cygwin/GNUmakefile.in (RUBYDEF): depends on makefiles.
+
+ * cygwin/GNUmakefile.in (RUBYDEF): adds DATA to non-function symbols
+ which is not marked as T.
+
+Fri Jan 30 11:03:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (assert_respond_to): gets rid of
+ overcounting. [ruby-dev:37703]
+
+Fri Jan 30 02:55:56 2009 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_init_by_convpath_i): make it static.
+
+Thu Jan 29 16:22:41 2009 Shugo Maeda <shugo@ruby-lang.org>
+
+ * load.c (rb_feature_provided): should not calculate len by pointer
+ subtraction because feature may be a expanded path.
+ [ruby-core:21267]
+
+Thu Jan 29 14:12:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (BASERUBY): erases RUBYOPT at the test.
+
+ * configure.in (OBJCOPY): not used on Windows.
+
+Thu Jan 29 13:16:11 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/securerandom.rb (SecureRandom.uuid): uses unpacked array
+ instead of string, because String#[] returns one length string.
+
+Thu Jan 29 12:29:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rake.rb (FileUtils#rake_system): no longer needs workaround
+ on Windows. [ruby-core:21339]
+
+ * lib/rake/win32.rb (Rake::Win32#rake_system): ditto.
+
+ * lib/rake/win32.rb (Rake::Win32#win32_system_dir): no longer
+ needs environment variables other than APPDATA now.
+
+ * lib/rake.rb (Rake::Application#standard_system_dir): uses
+ platform specific definition on Windows system.
+
+Thu Jan 29 12:18:54 2009 Technorama Ltd. <oss-ruby@technorama.net>
+
+ * lib/securerandom.rb: new method SecureRandom#uuid
+
+Thu Jan 29 11:22:19 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/raddrinfo.c (inspect_sockaddr): if defined AF_INET6,
+ perhaps can inspect IPv6 addresses if not defined INET6.
+
+ * ext/socket/socket.c (socket_s_ip_address_list): support Windows XP
+ or later. (Win2k or earlier is still not supported)
+
+Thu Jan 29 00:24:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/zlib/zlib.c (zstream_run): previous change didn't resolve the
+ problem.
+
+Wed Jan 28 22:51:12 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/zlib/zlib.c (zstream_run): desperately guard the variable.
+ [ruby-core:20576]
+
+Wed Jan 28 15:24:11 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * math.c: SEGV is caused by implicit rb_to_float declaration
+ test_complexrational.rb: [BUG] in IA-64 architecture
+
+Tue Jan 27 20:02:07 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/init.c (socks_connect_blocking): moved from
+ sockssocket.c. [ruby-dev:37834]
+
+ * sockssocket.c (socks_init): don't omit "int" type.
+
+Tue Jan 27 14:41:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cygwin/GNUmakefile.in (RUBYDEF): needs DATA marks to export
+ non-function symbols. [ruby-core:21582]
+
+ * win32/mkexports.rb (Exports::Mingw#each_export): ditto.
+
+Tue Jan 27 12:59:55 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/ripper/depend: use VPATH.
+ If a platform doesn't support VPATH, Ruby doesn't support it:
+ for example MSYS. [ruby-core:21570]
+
+Tue Jan 27 12:21:17 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/ripper/depend: lex.c's correct path is ../../lex.c.
+
+Tue Jan 27 11:09:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (try_header): checks the header depending on
+ platform.
+
+ * lib/mkmf.rb (have_header, find_header): use try_header.
+
+ * win32/Makefile.sub (try_header): uses try_compile to get rid of
+ slow -E option of VC.
+
+Tue Jan 27 11:03:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (distclean-enc, realclean-enc): do not call clean of
+ enc.mk twice or more.
+
+ * enc/depend (cleanobjs): added deffile.
+
+ * lib/mkmf.rb (create_makefile): removes deffile at clean instead
+ of distclean.
+
+ * win32/Makefile.sub (miniruby, LIBRUBY_SO): removes lib and exp
+ files.
+
+ * win32/Makefile.sub (clean, distclean): have moved to common.mk.
+
+ * win32/rmdirs.bat: omits `not empty' message.
+
+Tue Jan 27 10:15:33 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (struct rb_transcoding): added ary member for debug.
+
+Tue Jan 27 10:10:14 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Doxyfile.in (FILE_VERSION_FILTER, INPUT_FILTER): should not use
+ ./miniruby directly for cross compiling.
+
+Tue Jan 27 04:02:53 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/ripper/depend: fixed dependency path to lex.c.
+ [ruby-core:21570]
+
+Tue Jan 27 03:43:34 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_any_hash): fixed performance issues with nil, true,
+ false as hash keys. a patch from Matthias Waechter.
+ [ruby-core:21568]
+
+Tue Jan 27 03:23:43 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): should point correct path to
+ ruby.h and defines.h. [ruby-core:21569]
+
+Mon Jan 26 16:00:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_aset): fixed arguments evaluation order.
+
+Mon Jan 26 15:49:42 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/pathname.rb (chop_basename, prepend_prefix): use o option.
+
+Sun Jan 25 16:35:44 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (socket_s_ip_address_list): renamed from
+ socket_s_list_ip_address. [ruby-dev:37806]
+
+Sun Jan 25 12:17:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cygwin/GNUmakefile.in (RUBYDEF): needs read-only section too.
+
+Sun Jan 25 12:02:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (clean-ext): condition of EXTS was inverted.
+
+Sun Jan 25 11:50:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): fixed the variables order because
+ converter proc refers the separator.
+
+Sun Jan 25 11:25:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, win32/Makefile.sub (RMDIRS): remove directory and
+ parents.
+
+ * Makefile.in, win32/Makefile.sub (distclean-rdoc): added to remove
+ temporary rdoc.
+
+ * Makefile.in, win32/Makefile.sub (clean-ext): skips non-existent
+ directories.
+
+ * common.mk (clean, distclean): cleans rdoc.
+
+ * common.mk (clean-extout): removes extout directory.
+
+ * configure.in (RMDIRS, RMALL): added to clean extout.
+
+ * lib/fileutils.rb (FileUtils#rmdir): added :parents option.
+
+ * lib/mkmf.rb (create_makefile): cleans installed files at clean
+ instead of distclean.
+
+ * lib/mkmf.rb (create_makefile): added clean-so and clean-rb.
+
+ * lib/mkmf.rb (def init_mkmf): added DISTCLEANDIRS.
+
+ * lib/un.rb (rmdir): added -p option.
+
+ * tool/rmdirs, win32/rmdirs.bat: removes directory and the parents.
+
+ * win32/rm.bat: added -r option.
+
+Sun Jan 25 09:09:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (join_path): use strlcat() to force link.
+
+ * dir.c (glob_helper): no strcpy() is needed since len is known.
+
+Sun Jan 25 06:44:58 2009 Technorama Ltd. <oss-ruby@technorama.net>
+
+ * ext/openssl/ossl_ssl.c: Server Name Indication support.
+ new methods SSLContext#server_name_cb=, SSLSocket#hostname=.
+
+ * test/openssl/test_ssl.rb: Tests for above.
+
+Sat Jan 24 08:22:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (configuration): tools under the top source
+ directory are not installed, so unusable outside extmk.rb.
+
+Fri Jan 23 17:24:31 2009 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * golf_prelude.rb (Enumerator#inspect): avoid warning.
+
+Fri Jan 23 15:12:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (mkintpath): new function which converts native path
+ to format acceptable in Makefile.
+
+ * lib/mkmf.rb (configuration): leaves PATH_SEPARATOR unchanged.
+
+ * lib/mkmf.rb (configuration): converts srcdir, topdir and hdrdir.
+ a patch by Alexey Borzenkov <snaury AT gmail.com> at
+ [ruby-core:21448].
+
+ * lib/mkmf.rb (try_func): got rid of c-mode confusion.
+
+Fri Jan 23 13:26:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * signal.c (trap_handler): also accepts symbols. [ruby-dev:37823]
+
+Thu Jan 22 18:14:04 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): removes installed files under
+ extout at distclean.
+
+Thu Jan 22 17:12:37 2009 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb (CGI.parse): generate only key on params hash
+ if request have only key uri parameters.
+ (ex. index.cgi?aaa&bbb=1 # params=>{:aaa=>[],:bbb=>["1"]})
+
+ * test/cgi/test_cgi_core.rb: fix test for key only params.
+
+Thu Jan 22 16:29:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/installer.rb (Gem::Installer#initialize): fixed
+ typos.
+
+ * test/rubygems/test_gem.rb (test_self_dir): removed false
+ assertions.
+
+ * test/rubygems/test_gem.rb (test_self_set_paths): checks if paths
+ are included.
+
+ * test/rubygems/test_gem_commands_install_command.rb
+ (test_execute_remote): checks diagnostic message too.
+
+ * test/rubygems/test_gem_installer.rb (load): uses Gem.ruby.
+
+ * test/rubygems/gemutilities.rb (Gem.ruby): initializes from the
+ environment variable to run without installation.
+
+ * test/rubygems/gemutilities.rb (RubyGemTestCase#util_build_gem):
+ creates cache directory.
+
+Thu Jan 22 16:12:51 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * revert previous revision. it's already out-of-date.
+
+Thu Jan 22 15:54:02 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h, win32/win32.c (rb_w32_is_valid_fd): new function
+ to validate fd.
+
+ * io.c (rb_io_initialize): check fd with above function.
+
+Thu Jan 22 14:53:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_process.rb (MANDATORY_ENVS): needs RUBYLIB to run
+ tests without install.
+
+Thu Jan 22 12:19:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (define_final): cannot define finalizer for immediate
+ values. [ruby-core:21500]
+
+ * gc.c (define_final): freezes or hides internal values.
+
+Thu Jan 22 11:33:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_time_timeval): made a real prototype. a patch from
+ Marcus Rueckert <darix AT opensu.se> at [ruby-core:21492].
+
+Wed Jan 21 21:43:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_ungetbyte, rb_io_ungetc): allows nil to reset EOF
+ flag with ungetting nothing.
+
+ * ruby.c (load_file_internal): rests EOF flag to make possible to
+ load from stdin after reading data.
+
+Wed Jan 21 17:17:18 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (ary_double_capa): a new function to expand array more
+ aggressively. [ruby-core:21460]
+
+ * array.c (rb_ary_store): use ary_double_capa().
+
+ * array.c (rb_ary_unshift_m): ditto.
+
+ * array.c (rb_ary_splice): ditto.
+
+Wed Jan 21 15:32:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_ungetbyte, rb_io_ungetc): clears EOF flag.
+
+Wed Jan 21 14:41:48 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * array.c (take_items): to_ary() raises ArgumentError if cannot to
+ convert to Array. [ruby-dev:37797]
+
+Wed Jan 21 14:32:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (debug_lines): calls rb_intern() once.
+
+Wed Jan 21 13:58:17 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/io.h (FMODE_EOF): EOF flag on TTY.
+
+ * io.c (io_set_eof): sets EOF flag for TTY.
+
+ * io.c (io_seek): clears EOF flag.
+
+ * io.c (io_fillbuf): returns EOF if already met EOF. [ruby-dev:37798]
+
+ * io.c (io_fillbuf, io_fread, io_getpartial): sets EOF.
+
+Wed Jan 21 08:22:04 2009 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 1.3.1 r4532.
+ * test/minitest/*.rb: ditto.
+
+Tue Jan 20 20:16:21 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (socket_s_list_ip_address): new method.
+ (sockaddr_obj): new function.
+
+ * ext/socket/rubysocket.h: include ifaddrs.h, sys/ioctl.h,
+ sys/sockio.h, net/if.h if available.
+ (addrinfo_new): declared.
+
+ * ext/socket/raddrinfo.c (addrinfo_new): exported.
+
+ * ext/socket/extconf.rb: check ifaddrs.h, sys/ioctl.h, sys/sockio.h,
+ net/if.h and getifaddrs.
+
+Tue Jan 20 20:05:21 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h (pseudo_AF_FTIP): moved from mkconstants.rb.
+
+ * ext/socket/mkconstants.rb: prepend header if -H is not given.
+
+Tue Jan 20 17:50:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (nkf_buf): use nkf_char.
+
+Tue Jan 20 16:17:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (ruby_Init_{Continuation_body,Fiber_as_Coroutine}): prefixed
+ with ruby_ to export.
+
+ * ext/continuation/continuation.c, ext/fiber/fiber.c: ditto.
+
+Tue Jan 20 15:32:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (miniruby): renames and then removes, to get rid of
+ EPERM on cygwin and mingw.
+
+ * Makefile.in ($(LIBRUBY_SO)): use wildcard option of objcopy.
+
+ * configure.in (DLDFLAGS): do not export all symbols.
+
+ * cygwin/GNUmakefile.in (RUBYDEF): rejects symbols prefixed with
+ Init_.
+
+ * win32/mkexports.rb (Exports::Mingw): includes all symbols as
+ well as mswin32, except for prefixed with Init_.
+
+Tue Jan 20 13:03:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (hash): fixed the tail bytes handling in the aligned
+ access case.
+
+Tue Jan 20 09:26:05 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (nkf_buf_push): maybe a bug.
+
+ * ext/nkf/nkf-utf8/nkf.c (options): no need to support help option.
+
+Tue Jan 20 06:48:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (take_items), enum.c (enum_zip): tries to convert to
+ array first. [ruby-core:21442]
+
+Tue Jan 20 03:50:37 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: Update nkf to 2.0.9.
+ revert -s meaning as Shift_JIS, etc.
+
+Tue Jan 20 03:42:32 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (hash): fixed typo. [ruby-dev:37791]
+
+Tue Jan 20 01:15:27 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb (SOMAXCONN): defined.
+
+Mon Jan 19 22:31:35 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: use erb for generating code.
+
+Mon Jan 19 17:33:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (hash): defaulted to MurmurHash 2.0.
+
+Mon Jan 19 17:29:34 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/defines.h (RUBY_ALIAS_FUNCTION_TYPE): added.
+
+Mon Jan 19 17:24:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_dump.c (vm_stack_dump_each): used only if debug mode.
+
+Mon Jan 19 16:32:35 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (hash): added MurmurHash 2.0.
+
+Mon Jan 19 14:31:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_execute_interrupts): needs
+ rb_signal_buff_size to be declared.
+
+Mon Jan 19 13:34:25 2009 Koichi Sasada <ko1@atdot.net>
+
+ * ruby.c (require_libraries): reset th->parse_in_eval while
+ loading libraries. fixes [ruby-dev:37780]
+
+Mon Jan 19 11:46:39 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_eval.c, eval.c (rb_f_block_given_p): move definition of
+ "iterator?" and "block_given?" to make static.
+
+ * vm.c (vm_get_ruby_level_caller_cfp): make it static.
+
+ * eval_intern.h, vm_insnhelper.c: move decl. of
+ vm_get_ruby_level_caller_cfp()
+ from eval_intern.h to vm_insnhelper.c.
+
+Mon Jan 19 11:27:39 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c: add a prefix "rb_" to exposed functions
+ vm_get_ruby_level_next_cfp(), rb_vm_make_env_object(),
+ vm_stack_to_heap(), vm_make_proc(), vm_invoke_proc(),
+ vm_get_sourceline(), vm_cref(), vm_localjump_error(),
+ vm_make_jump_tag_but_local_jump(), vm_jump_tag_but_local_jump().
+ This changes may affect only core because most of renamed functions
+ require a pointer of not-exposed struct such as rb_thread_t or NODE.
+ In short, they are core functions.
+
+ * cont.c, eval.c, eval_intern.h, load.c, proc.c, thread.c,
+ vm_core.h, vm_dump.c, vm_eval.c, vm_exec.c, vm_insnhelper.c:
+ ditto.
+
+Mon Jan 19 11:22:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/rubysocket.h (rb_cUNIXSocket, rb_cUNIXServer),
+ (unixpath, unixaddr): UNIX domain sockets depend on sys/un.h.
+
+Mon Jan 19 11:02:30 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm_dump.c: add a prefix "rb_vmdebug_" to
+ vm_stack_dump_raw(), vm_stack_dump_raw_current(),
+ vm_env_dump_raw(), vm_proc_dump_raw(), vm_stack_dump_th(),
+ vm_debug_print_register(), vm_thread_dump_regs(),
+ vm_debug_print_pre(), vm_debug_print_post(),
+ vm_thread_dump_state().
+ This change also may affect core (in fact, user of
+ above functions may be only ko1).
+
+ * vm_core.h: ditto.
+
+ * vm_exec.h (SDR2): remove duplicate definition.
+
+Mon Jan 19 11:00:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/raddrinfo.c (addrinfo_ip_port): use AF_INET6 only when
+ defined, as well as addrinfo_ipv6_p().
+
+Mon Jan 19 10:43:38 2009 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (garbage_collect_with_gvl): suppress warnings.
+
+Mon Jan 19 10:34:32 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/depend: workaround for nmake. files in depend without
+ paths should converted by RULE_SUBST, but mkmf.rb cannot recognize
+ macros currently.
+
+Mon Jan 19 09:53:43 2009 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c:
+ rename ruby_iseq_disasm_insn() -> rb_iseq_disasm_insn().
+ rename ruby_iseq_disasm() -> rb_iseq_disasm().
+
+ * compile.c:
+ rename ruby_iseq_compile() -> rb_iseq_compile_node().
+ rename ruby_iseq_translate_threaded_code() ->
+ rb_iseq_translate_threaded_code().
+ rename ruby_insns_name_array() -> rb_insns_name_array().
+ rename ruby_iseq_build_from_ary() -> rb_iseq_build_from_ary().
+
+ * iseq.c, compile.c: remove ruby_insn_make_insn_table() and make
+ static function insn_make_insn_table().
+
+ * iseq.h, ruby.c, vm.c, vm_core.h, vm_eval.c, vm_dump.c,
+ blockinlining.c: ditto.
+ Rename strange "ruby_" prefix to "rb_" prefix.
+ This changes may affect only core because renamed functions
+ require a pointer of rb_iseq_t which is not exposed.
+
+Mon Jan 19 09:21:04 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/mkconstants.rb: define macros with default value in
+ constdefs.h if not exist them.
+
+ * ext/socket/raddrinfo.c (addrinfo_mdump, addrinfo_mload): support
+ UNIX socket only on platforms which support it.
+
+Mon Jan 19 08:56:53 2009 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c, vm_eval.c (rb_f_local_variables): move definition from eval.c
+ to vm_eval.c because vm_collect_local_variables_in_heap() should
+ be static function.
+
+ * vm.c (vm_collect_local_variables_in_heap): make it static.
+
+Mon Jan 19 04:06:10 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (rb_iseq_load): renamed from ruby_iseq_load, since it is
+ for C extensions or the ruby core. [ruby-core:21407]
+
+Mon Jan 19 03:06:22 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (str_transcode0): fix: :xml option doesn't
+ work on str.encode([options]) form without default_internal.
+
+Sun Jan 18 16:56:46 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (addrinfo_inspect_sockaddr): new
+ method AddrInfo#inspect_sockaddr.
+ (inspect_sockaddr): extracted from addrinfo_inspect.
+ (addrinfo_inspect): use inspect_sockaddr.
+ (Init_addrinfo): define the new method.
+
+Sun Jan 18 16:46:37 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (addrinfo_ip_address): new method
+ AddrInfo#ip_address.
+ (addrinfo_ip_port): new method AddrInfo#ip_port.
+ (Init_addrinfo): define the methods above.
+
+Sun Jan 18 14:29:52 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/unixsocket.c: redundant #ifdef removed.
+
+Sun Jan 18 03:33:23 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (addrinfo_mdump): don't use symbol.
+ (addrinfo_mload): ditto.
+
+Sun Jan 18 03:05:20 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (addrinfo_mdump): new method.
+ (addrinfo_mload): new method.
+ (Init_addrinfo): define the method above.
+
+ * ext/socket/constants.c (constant_arg): str_to_int's first argument
+ constified.
+
+ * ext/socket/mkconstants.rb (gen_name_to_int_decl): generated
+ function's first argument constified.
+ (gen_name_to_int_func_in_guard): ditto.
+ (ipproto_to_int): generated.
+
+ * ext/socket/rubysocket.h (IS_IP_FAMILY): moved from raddrinfo.c.
+
+Sun Jan 18 01:37:50 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sock_s_getnameinfo): accept AddrInfo object.
+
+ * ext/socket/raddrinfo.c (rb_check_sockaddr_string_type): defined.
+
+ * ext/socket/rubysocket.h (rb_check_sockaddr_string_type): declared.
+
+Sat Jan 17 22:01:15 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/lib/socket.rb: new file.
+
+Sat Jan 17 19:33:48 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * configure.in (VCSUP): fixed the cases for git-svn or git.
+
+ * win32/Makefile.sub (VCSUP): ditto.
+
+ * Makefile.in (up): `cd' is necessary for git and git-svn.
+
+Sat Jan 17 19:16:16 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: generate a header file for generated
+ functions.
+
+ * ext/socket/rubysocket.h: include constdefs.h. don't declare
+ generated functions.
+
+ * ext/socket/constants.c: include constdefs.c instead of constants.h.
+
+ * ext/socket/depend: dependency updated.
+
+Sat Jan 17 17:58:22 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/irb/xmp.rb: multilingualizes XMP::StringInputMethod.
+ [ruby-core:21383].
+
+Sat Jan 17 15:01:22 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/raddrinfo.c (make_inspectname): add a res argument to
+ suppress numeric inspectname.
+ (init_addrinfo_getaddrinfo): call make_inspectname here.
+ (addrinfo_firstonly_new): follow make_inspectname change.
+ (addrinfo_list_new): ditto.
+ (addrinfo_initialize): follow init_addrinfo_getaddrinfo change.
+
+Sat Jan 17 14:52:27 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: don't cause an error for duplicate names.
+
+Sat Jan 17 12:46:17 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket: split files for each class.
+
+ * ext/socket/rubysocket.h: common header.
+
+ * ext/socket/basicsocket.c: new file for BasicSocket.
+
+ * ext/socket/ipsocket.c: new file for IPSocket.
+
+ * ext/socket/tcpsocket.c: new file for TCPSocket.
+
+ * ext/socket/tcpserver.c: new file for TCPServer.
+
+ * ext/socket/sockssocket.c: new file for SOCKSSocket.
+
+ * ext/socket/udpsocket.c: new file for UDPSocket.
+
+ * ext/socket/unixsocket.c: new file for UNIXSocket.
+
+ * ext/socket/unixserver.c: new file for UNIXServer.
+
+ * ext/socket/socket.c: now for Socket.
+
+ * ext/socket/raddrinfo.c: new file for AddrInfo and name resolution.
+
+ * ext/socket/constants.c: new file for constants.
+
+ * ext/socket/init.c: new file for utilities.
+
+ * ext/socket/mkconstants.rb: export *_to_int.
+
+ * ext/socket/extconf.rb: add new object files.
+
+ * ext/socket/depend: add dependencies for new files.
+
+ * ext/.document: add new files.
+
+Sat Jan 17 11:12:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (cont_restore_0): padding size doesn't need to be large
+ if alloca is used. suppress warnings.
+
+Sat Jan 17 11:12:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_dump.c (vm_stack_dump_each): initialized at declarations.
+
+ * vm_dump.c (rb_vm_bugreport): constified to suppress a warning.
+
+Fri Jan 16 22:30:27 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c: move addrinfo code.
+
+Fri Jan 16 18:51:11 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (up): tell nmake that need to run command via
+ shell.
+
+Fri Jan 16 18:43:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot (package): includes all rules and expand
+ configured values from the environment to create *.inc, sets RM
+ for ripper.c, and needs chdir if absolute path is given with
+ -exported option.
+
+Fri Jan 16 18:26:47 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (VALUE): use unsigned long or long long
+ instead of uintptr_t, since many %lx and so on are still used.
+
+Fri Jan 16 17:33:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (Makefile): set VCS and VCSUP to support `git svn'
+ and git.
+
+ * Makefile.in, win32/Makefile.sub (up): split from common.mk.
+
+Fri Jan 16 12:24:39 2009 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (thread_start_func_2): call ruby_cleanup() if thread is
+ main thread. [ruby-dev:37624]
+
+Fri Jan 16 12:27:50 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub ($(INSNS), node_name.inc, known_errors.inc,
+ miniprelude.c, newline.c): if dependencies is newer than targets or
+ targets don't exist, try to create targets with BASERUBY. no need to
+ detect errors there because the absence of BASERUBY is not abnormal.
+ after the try, if the targets still don't exist, copy them from
+ $(srcdir).
+
+Fri Jan 16 12:15:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/ruby.h (PRI_PTRDIFF_PREFIX): must define as string.
+ if not, cause compile error in using PRI?VALUE.
+
+ * win32/Makefile.sub (config.h): add SIZEOF_INTPTR_T and
+ SIZEOF_UINTPTR_T for SIZEOF_VALUE.
+
+Fri Jan 16 11:51:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * symbian/pre-build (COMSPEC): should not overridden.
+
+Fri Jan 16 11:47:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_parse_in_main): fixed typo.
+
+Fri Jan 16 11:41:23 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_REPLACE_TYPE): does not define rb_ prefixed
+ name if no default type is given.
+
+ * configure.in (RUBY_DEFINT): checks size.
+
+ * include/ruby/ruby.h (PRI_PTRDIFF_PREFIX, PRI_SIZE_PREFIX):
+ assumes usable if PRIdPTR is defined.
+
+Fri Jan 16 02:25:46 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (rb_thread_execute_interrupts): if signal is already
+ buffered, main thread should wait until timer thread delivers it.
+
+ * thread.c (timer_thread_function): should defer delivery of a signal
+ if main thread does not yet trap a previous one. [ruby-dev:37676]
+
+Fri Jan 16 02:05:55 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (addrinfo_s_ip): new method AddrInfo.ip.
+
+Fri Jan 16 01:42:50 2009 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (call_trace_proc): as Matz said ([ruby-core:21183]),
+ should skip rb_str_new2() if rb_sourcefile() returns NULL.
+ rb_sourcefile() returns NULL if frame is toplevel of Fiber.
+ [ruby-core:21161] [Bug #985]
+
+Fri Jan 16 01:09:37 2009 Koichi Sasada <ko1@atdot.net>
+
+ * ruby.c (process_options): decrement parse_in_eval to recognize
+ parsing main or normal eval script.
+
+ * compile.c (rb_parse_in_main): return 1 if parsing main script.
+ (if parse_in_eval is negative value, it means main script)
+
+ * parse.y (yycompile0): check rb_parse_in_main() to accumulate
+ script text. Bug #848 [ruby-core:20450]
+
+Fri Jan 16 00:57:34 2009 Koichi Sasada <ko1@atdot.net>
+
+ * lib/debug.rb: as wanabe-san pointed out,
+ set_trace_func should be completely final task in debug.rb.
+ Bug #847 [ruby-core:20449]
+
+Fri Jan 16 00:27:03 2009 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (rb_vm_inc_const_missing_count, ruby_vm_const_missing_count):
+ added.
+
+ * vm_insnhelper.h: ditto.
+
+ * variable.c (rb_const_get_0), insns.def: Constants should not be
+ cached if const_missing is called. [ruby-core:21059] [Bug #967]
+
+ * bootstraptest/test_class.rb: add a test.
+
+Fri Jan 16 00:25:09 2009 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk: btest-ruby should receive option with OPTS.
+
+Fri Jan 16 00:21:10 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub ($(INSNS), node_name.inc, known_errors.inc,
+ miniprelude.c, newline.c): shouldn't copy when $(srcdir) != ".", too.
+ (this is a workaround. we need more strict check.)
+
+ * win32/Makefile.sub ($(INSNS)): shouldn't remove BASERUBY.
+
+Fri Jan 16 00:19:55 2009 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_with_gvl): suppress warnings.
+
+Thu Jan 15 20:44:30 2009 Tanaka Akira <akr@fsij.org>
+
+ * tool/file2lastrev.rb: RUBY_REVISION must be an integer.
+
+Thu Jan 15 15:55:31 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * encoding.c (enc_set_default_encoding): should not treat US-ASCII
+ special here. a patch from Yui NARUSE in [ruby-dev:37769].
+ [ruby-dev:37699]
+
+Thu Jan 15 14:27:27 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * LEGAL: Added information for missing/langinfo.c
+
+Thu Jan 15 14:17:57 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (stmt): explicit error for "Object::Far += foo 1" just
+ as "Object::Far += 1".
+
+ * parse.y (command): moved return/break/next from command_call for
+ better error message.
+
+ * parse.y (call_args): void value check added.
+
+Thu Jan 15 13:10:58 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (COMPILERFLAG): for enc/trans/gb18030.c.
+
+Thu Jan 15 13:10:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, win32/Makefile.sub (MISSING): added langinfo on mingw
+ and mswin.
+
+ * encoding.c (rb_locale_charmap): use environments on mingw and mswin.
+
+ * missing/langinfo.c (nl_langinfo_codeset): MS-Windows Japanese
+ environment uses Windows-31J derived from Shift_JIS, not EUC-JP.
+
+Thu Jan 15 12:10:39 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub ($(INSNS), node_name.inc, known_errors.inc,
+ miniprelude.c, newline.c): copy only when $(srcdir) != pwd.
+
+Thu Jan 15 11:40:44 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (pipe_open): revert a part of previous commit. it may be a
+ mistake.
+
+Thu Jan 15 10:45:52 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * symbian/README.SYMBIAN: symbian support added. great appreciate
+ to <alexandre.zavorine at symbian.com>.
+
+Thu Jan 15 00:06:12 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/trans/gb18030.trans: get rid of a 1.9 feature for cross
+ compile. [ruby-core:21345]
+
+Wed Jan 14 23:57:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_locale_charmap): fallback to codepage if no
+ locale is found. [ruby-core:21110]
+
+ * missing/langinfo.c (nl_langinfo_codeset): returns NULL if no
+ locale is found.
+
+Wed Jan 14 22:38:30 2009 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (negative_size_allocation_error_with_gvl): abolish a warning.
+ (negative_size_allocation_error): ditto.
+
+ * ext/openssl/ossl.c (ossl_raise): ditto.
+
+Wed Jan 14 20:05:05 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/gb18030.trans, gb18030-tbl.rb:
+ new Chinese GB18030 transcoding (from Yoshihiro Kambayashi)
+
+ * test/ruby/test_transcode.rb: added tests for the above
+ (from Yoshihiro Kambayashi)
+
+ * transcode_data.h, transcode.c, tool/transcode_tblgen.rb:
+ added support for GB18030-specific 4-byte sequences
+ (with Yoshihiro Kambayashi)
+
+Wed Jan 14 16:16:19 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/curses/extconf.rb: check ncursesw earlier than ncurses to
+ support UTF-8 strings. non UTF-8 strings should be converted
+ explicitly. [ruby-core:21094]
+
+Wed Jan 14 14:42:30 2009 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * cont.c: fix prototype declare of register_stack_extend
+
+Wed Jan 14 13:19:21 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_aspawn): should not escape with caret
+ unless using cmd.exe.
+
+Wed Jan 14 13:09:00 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/extconf.rb (gai_strerror): checks if available and if
+ returns const pointer.
+
+ * ext/socket/getaddrinfo.c (gai_strerror): defines only if non
+ available. [ruby-core:21328]
+
+Wed Jan 14 12:39:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_wait_readable, rb_io_wait_writable): need rb_fd_ptr.
+
+ * io.c (appendline): reformed.
+
+ * io.c (rb_io_s_pipe): reduced nest of rb_ensure of main block.
+
+Tue Jan 13 22:56:57 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/addrinfo.h (AI_NUMERICSERV): defined.
+ (AI_MASK): add AI_NUMERICSERV.
+
+ * ext/socket/getaddrinfo.c (getaddrinfo): support AI_NUMERICSERV.
+
+Tue Jan 13 21:45:53 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/ostruct.rb (OpenStruct#inspect): fixed the recursion check.
+ Patch by Kornelius Kalnbach. [ruby-core:20992].
+
+ * test/ostruct/test_ostruct.rb: test for inspect.
+ Patch by Kornelius Kalnbach. [ruby-core:20992].
+
+Tue Jan 13 21:44:30 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (io_reopen, rb_io_init_copy): should register fptr to pipe_list
+ when copying pipe fptr.
+
+Tue Jan 13 21:38:07 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (rb_getaddrinfo): use getaddrinfo with GVL if
+ getaddrinfo.c/getnameinfo.c is used. They are not thread safe
+ because gethostbyname/gethostbyaddr is used.
+ (rb_getnameinfo): ditto.
+
+ * extconf.rb: define GETADDRINFO_EMU if getaddrinfo.c/getnameinfo.c is
+ used.
+
+Tue Jan 13 21:28:14 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * object.c (rb_obj_not_match): rdoc.
+ Patch by Kornelius Kalnbach. [ruby-core:20991]
+
+Tue Jan 13 18:21:44 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (rb_io_close_read): call rb_io_fptr_cleanup() instead of
+ fptr_finalize() because the fptr has special finalizer if it is a
+ pipe. [ruby-dev:37757] (3)
+
+Tue Jan 13 18:19:49 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (rb_io_initialize): workaround for Windows. [ruby-dev:37686]
+ (also see [ruby-dev:37721])
+
+Tue Jan 13 17:29:02 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/trans/make_transdb.rb (converters): should not depend on the
+ hash order for cross compile.
+
+Tue Jan 13 16:39:11 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/intern.h, thread.c, win32/Makefile.sub (rb_fdset_t,
+ rb_fd_init, rb_fd_term, rb_fd_zero, rb_fd_set, rb_fd_clr, rb_fd_isset,
+ rb_fd_select, rb_fd_ptr, rb_fd_max, HAVE_RB_FD_INIT): new type,
+ functions, and macros for Windows.
+
+ * win32/win32.c (extract_fd, rb_w32_select): use rb_fdset_t to expand
+ fd_array if needed. [ruby-core:19946]
+
+ * win32/win32.c (copy_fd): new function for rb_w32_select().
+
+Tue Jan 13 12:31:54 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * tool/file2lastrev.rb (get_revisions): fixes problem with
+ svn on cygwin. [ruby-dev:37702].
+ Patch by Kouhei Sutou.
+
+Tue Jan 13 11:58:04 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/irb/input-method.rb: IRB did not prompt for MSwin32.
+ [ruby-dev:37686].
+ Patch by arton <artonx AT yahoo.co.jp>.
+
+Tue Jan 13 12:10:42 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/{getaddrinfo,getnameinfo}.c: need to include ws2tcpip.h
+ on Windows.
+
+Tue Jan 13 09:49:49 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * ext/socket/socket.c: removed warning about unused variable 'rai'.
+
+Tue Jan 13 03:07:28 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * instruby.rb: require "tool/mdoc2man.rb" before chdir if needed.
+
+Tue Jan 13 02:54:54 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/extconf.rb: use headers instead of "netdb.h" in checking
+ getnameinfo() and getaddrinfo() because Windows doesn't have it.
+ [ruby-dev:37757] (1)
+
+ * ext/socket/sockport.h (SA_LEN): use sockaddr_in6 when defined AF_INET6
+ if INET6 is not defined. winsock2's getaddrinfo() returns
+ sockaddr_in6 if ipv6 is available.
+
+Tue Jan 13 02:21:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (internal_cmd_match): extracted from
+ is_internal_cmd.
+
+ * win32/win32.c (argv_size, join_argv): escapes redirection, pipe
+ and caret punctuations with carets.
+
+ * win32/win32.c (rb_w32_aspawn): ditto, and redirections and pipe
+ have no meanings.
+
+Tue Jan 13 02:07:38 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: use Encoding.find("locale") instead of
+ Encoding.locale_charmap
+
+Tue Jan 13 00:57:56 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sock_s_unpack_sockaddr_in): check too short
+ sockaddr.
+ (sock_s_unpack_sockaddr_un): ditto.
+
+Mon Jan 12 23:55:19 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (addrinfo_ip_unpack): new method
+ AddrInfo#ip_unpack.
+ (addrinfo_unix_path): new method AddrInfo#unix_path.
+ (Init_socket): define above methods.
+
+Mon Jan 12 23:31:42 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (IS_IP_FAMILY): defined.
+ (addrinfo_ip_p): use it.
+
+Mon Jan 12 17:23:05 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (assert_nothing_raised): removes the
+ current trace to get rid of an issue of MiniTest::Unit#location.
+
+Mon Jan 12 16:49:20 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * instruby.rb (install): erased a garbage.
+
+Mon Jan 12 16:45:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (open_dir_handle): extracted from rb_w32_opendir.
+
+ * win32/win32.c (winnt_stat): gets rid of strange behavior of
+ GetFileAttributes(). [ruby-core:21269]
+
+Mon Jan 12 12:43:55 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * instruby.rb (parse_args, install): added --strip option.
+
+ * instruby.rb (install_recursive): skips the directory if matched
+ to a no_install pattern ending with a file separator.
+
+Mon Jan 12 12:33:56 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: don't use bytesize because 1.9 dependent.
+ [ruby-core:21266]
+
+Mon Jan 12 11:59:19 2009 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (ruby_xmalloc, ruby_xrealloc, ruby_xfree):
+ enable to use them without GVL.
+ if GC is invoked, acquire GVL during GC.
+ if NoMemoryError is raised, acquire GVL and raise it.
+
+Mon Jan 12 10:39:19 2009 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c: fix comment (terminology: Global VM Lock).
+
+ * thread.c (blocking_region_begin, blocking_region_end):
+ save and clear th->blocking_region_buffer.
+
+ * thread.c (rb_thread_call_with_gvl): check if it has GVL.
+
+ * thread.c (ruby_thread_has_gvl_p): added.
+
+ * vm_core.h: add decls.
+
+Mon Jan 12 10:21:11 2009 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c: remove unused decl.
+
+Sun Jan 11 16:53:14 2009 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/erb.rb (PercentScanner): remove PercentScanner. fixed % after
+ %> bug. [ruby-dev:37751] [Bug #997]
+
+ * test/erb/test_erb.rb: ditto
+
+Sun Jan 11 09:53:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/mkconstants.rb (c_str): get rid of a 1.9 feature for
+ cross compile. [ruby-core:21243]
+
+Sun Jan 11 09:47:30 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_hash_s_create): set nil as the value if assoc length
+ is not enough. [ruby-core:21249]
+
+Sat Jan 10 21:17:28 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: don't generate unintended newlines.
+
+Sat Jan 10 20:50:02 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: refactored to nest properly in statically
+ and dynamically.
+
+Sat Jan 10 20:26:17 2009 Tanaka Akira <akr@fsij.org>
+
+ * version.h: make version string succinct:
+ "ruby 1.9.1p5000 (2009-01-10 trunk 21414) [i686-linux]".
+
+Sat Jan 10 19:05:13 2009 Koichi Sasada <ko1@atdot.net>
+
+ * cont.c (cont_restore_1): should not be inlined.
+
+Fri Jan 9 21:52:47 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sock_define_const): use INT2NUM.
+
+Fri Jan 9 15:40:07 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/mkconstants.rb: define macro if default_value is passed.
+
+Fri Jan 9 13:20:08 2009 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: rescue abnormal Encoding.locale_charmap value.
+
+Fri Jan 9 12:29:46 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (test-sample), rubytest.rb: use runruby.rb
+
+Fri Jan 9 10:40:52 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_process.rb (TestProcess::MANDATORY_ENVS): some
+ platforms need environments for shared objects.
+
+Thu Jan 8 23:19:38 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (bsock_shutdown): accept symbol/string as how.
+ (shutdown_how_arg): new function.
+
+ * ext/socket/mkconstants.rb: generate shutdown_how_to_int.
+
+Thu Jan 8 23:16:37 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * instruby.rb: easy code contains fewer bugs.
+
+Thu Jan 8 22:59:30 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb (gen_name_to_int_func): generate
+ name_to_int functions, not only body.
+
+Thu Jan 8 22:44:10 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c: don't use AI_NUMERICSERV for platforms which
+ not define it as old Windows.
+ [ruby-dev:37736]
+
+Thu Jan 8 17:32:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * instruby.rb: should not depend on a library which does not exist
+ in 1.8.
+
+Thu Jan 8 07:52:55 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (init_unix_addrinfo): don't return a value.
+
+Thu Jan 8 07:30:52 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb (OpenURI.redirectable?): reverted https redirection.
+
+Thu Jan 8 00:31:58 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit/assertions.rb (assert_no_match): don't count up as two
+ assertions.
+
+Thu Jan 8 00:26:35 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (addrinfo_getnameinfo): use NI_DGRAM if socktype
+ is SOCK_DGRAM.
+
+Thu Jan 8 00:16:22 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (host_str): add flags_ptr argument to specify
+ AI_NUMERICHOST if host is numeric form.
+ (port_str): add flags_ptr argument to specify AI_NUMERICSERV if port
+ is numeric form.
+
+Wed Jan 7 22:24:12 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (rb_cAddrInfo): new class AddrInfo.
+ (s_recvfrom): return AddrInfo as address.
+ (s_recvfrom_nonblock): ditto.
+ (sock_accept): ditto.
+ (sock_accept_nonblock): ditto.
+ (sock_sysaccept): ditto.
+ (bsock_send): accept AddrInfo as address argument.
+ (sock_connect): ditto.
+ (sock_connect_nonblock): ditto.
+ (sock_bind): ditto.
+ (sock_s_unpack_sockaddr_in): ditto.
+ (sock_s_unpack_sockaddr_un): ditto.
+ (bsock_local_address): new method BasicSocket#local_address.
+ (bsock_remote_address): new method BasicSocket#remote_address.
+ (addrinfo_initialize): new method AddrInfo#initialize.
+ (addrinfo_inspect): new method AddrInfo#inspect.
+ (addrinfo_afamily): new method AddrInfo#afamily.
+ (addrinfo_pfamily): new method AddrInfo#pfamily.
+ (addrinfo_socktype): new method AddrInfo#socktype.
+ (addrinfo_protocol): new method AddrInfo#protocol.
+ (addrinfo_to_sockaddr): new method AddrInfo#to_sockaddr.
+ (addrinfo_canonname): new method AddrInfo#canonname.
+ (addrinfo_ip_p): new method AddrInfo#ip?.
+ (addrinfo_ipv4_p): new method AddrInfo#ipv4?.
+ (addrinfo_ipv6_p): new method AddrInfo#ipv6?.
+ (addrinfo_unix_p): new method AddrInfo#unix?.
+ (addrinfo_getnameinfo): new method AddrInfo#getnameinfo.
+ (addrinfo_s_getaddrinfo): new method AddrInfo.getaddrinfo.
+ (addrinfo_s_tcp): new method AddrInfo.tcp.
+ (addrinfo_s_udp): new method AddrInfo.udp.
+ (addrinfo_s_unix): new method AddrInfo.unix.
+ (Init_socket): define new class and methods.
+ (sock_getaddrinfo): apply socktype hack regardless of ai_flags.
+ (addrinfo_new): defined.
+ (get_afamily): ditto.
+ (fd_socket_addrinfo): ditto.
+ (io_socket_addrinfo): ditto.
+ (SockAddrStringValue): ditto.
+ (SockAddrStringValuePtr): ditto.
+ (sockaddr_string_value): ditto.
+ (sockaddr_string_value_ptr): ditto.
+ (rb_addrinfo_t): ditto.
+ (addrinfo_mark): ditto.
+ (addrinfo_free): ditto.
+ (addrinfo_s_allocate): ditto.
+ (IS_ADDRINFO): ditto.
+ (check_addrinfo): ditto.
+ (get_addrinfo): ditto.
+ (alloc_addrinfo): ditto.
+ (init_addrinfo): ditto.
+ (addrinfo_new): ditto.
+ (call_getaddrinfo): ditto.
+ (init_addrinfo_getaddrinfo): ditto.
+ (make_inspectname): ditto.
+ (addrinfo_firstonly_new): ditto.
+ (addrinfo_list_new): ditto.
+ (init_unix_addrinfo): ditto.
+ (ai_get_afamily): ditto.
+
+ * ext/socket/mkconstants.rb: generate intern_protocol_family,
+ intern_socktype and intern_ipproto.
+
+ [ruby-dev:37692]
+
+Wed Jan 7 22:13:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * instruby.rb (man, gem): fixed errors.
+
+Wed Jan 7 17:14:40 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * instruby.rb: use installed libraries. [ruby-core:21006]
+
+ * instruby.rb (gem), lib/rubygems/defaults.rb (Gem.default_dir):
+ use version invariant configuration.
+
+Tue Jan 6 19:09:51 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (cont_restore_0): streamlined to ensure O(1) time. based on
+ a patch by Brent Roman <brent AT mbari.org>.
+
+Tue Jan 6 00:34:25 2009 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_close_before_exec): more heuristics to detect maximum fd.
+
+Mon Jan 5 17:59:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (cygwin): needs properly implemented nl_langinfo().
+ [ruby-core:21110]
+
+ * missing/langinfo.c: added as suggested at [ruby-core:21015], from
+ http://www.cl.cam.ac.uk/~mgk25/ucs/langinfo.c.
+
+ * missing/langinfo.c (nl_langinfo_0): fixed typos for SJIS.
+
+Mon Jan 5 17:38:40 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * encoding.c (rb_locale_charmap): use GetConsoleCP() instead of
+ GetACP() because external encoding should be console's one.
+
+ * encoding.c (rb_filesystem_encoding): use GetOEMCP() instead of
+ GetACP() because VFAT/FAT32 uses OEM CP.
+
+Mon Jan 5 16:26:48 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_filesystem_encoding): use ANSI codepage for file
+ system on cygwin.
+
+ * encoding.c (rb_locale_charmap): reverted. [ruby-core:21110]
+
+Mon Jan 5 16:15:00 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * ext/curses/curses.c (free_window): use xfree instead of free.
+ [ruby-dev:37200]
+
+Mon Jan 5 15:49:45 2009 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * ext/gdbm/gdbm.c (rb_gdbm_fetch): remove needless cast.
+
+Mon Jan 5 12:52:08 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (init_env): use user profile folder than personal
+ folder.
+
+Mon Jan 5 08:41:13 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_file_s_stat): need type check for non string values.
+ [ruby-dev:37673] fix: #964
+
+ * file.c (rb_file_s_size, rb_file_s_atime, rb_file_s_mtime,
+ rb_file_s_ctime, rb_f_test): ditto.
+
+Mon Jan 5 08:17:56 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_step): should not add up errors on loops.
+ [ruby-dev:37691]
+
+Mon Jan 5 07:58:37 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * random.c (rb_f_srand): update RDoc. [ruby-core:21113]
+
+Mon Jan 5 06:39:56 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_max): max value from ... not defined for non
+ Integer Numeric end values. [ruby-dev:37690] fix: #974
+
+Sun Jan 4 22:37:19 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (rb_getaddrinfo): defined for address lookup without GVL.
+ (struct getaddrinfo_arg): defined.
+ (nogvl_getaddrinfo): defined.
+ (rb_getnameinfo): defined for name lookup without GVL.
+ (getnameinfo_arg): defined.
+ (nogvl_getnameinfo): defined.
+
+Sun Jan 4 18:10:10 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/gbk.trans, gbk-tbl.rb:
+ new Chinese GBK transcoding (from Yoshihiro Kambayashi)
+
+ * test/ruby/test_transcode.rb: added tests for the above
+ (from Yoshihiro Kambayashi)
+
+Sun Jan 4 17:55:55 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * test/ruby/test_transcode.rb: added tests for GB2312
+ (from Yoshihiro Kambayashi)
+
+ * enc/trans/chinese.trans: set valid byte patterns for
+ GB2312 and GB12345
+
+Sun Jan 4 17:39:39 2009 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/big5.trans, big5-tbl.rb:
+ new Chinese Big5 transcoding (from Yoshihiro Kambayashi)
+
+ * test/ruby/test_transcode.rb: added tests for the above
+ (from Yoshihiro Kambayashi)
+
+Sun Jan 4 17:07:45 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems.rb (Gem.set_home, Gem.set_paths): should not create
+ directories stealthily. [ruby-core:20990]
+
+ * lib/rubygems.rb (Gem.find_home): expand_path deals with platform
+ dependent environments.
+
+ * lib/rdoc/ri/paths.rb (RDoc::HOMEDIR): ditto.
+
+ * instruby.rb (gem): creates gem directories at installation.
+
+Sun Jan 4 15:41:37 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_filesystem_encoding, rb_locale_charmap): uses
+ codepage on cygwin. [ruby-core:20994]
+
+Sun Jan 4 11:58:43 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (ruby_float_step): extracted from num_step().
+
+ * range.c (range_step): uses ruby_float_step() for float range.
+ [ruby-dev:37691]
+
+Sun Jan 4 11:11:31 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): does not use both of makefile.rb and
+ extconf.rb at the same time.
+
+ * lib/mkmf.rb (DLLIB): depends on Makefile. [ruby-core:21096]
+
+Sun Jan 4 09:27:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/socket.c (constant_arg): constified.
+
+ * ext/socket/socket.c (optname_arg): cygwin does not have
+ IPPROTO_IPV6.
+
+ * ext/socket/mkconstants.rb (ipv6_optname_to_int): ditto.
+
+Sun Jan 4 04:33:14 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c: redundant #ifdef removed.
+
+Sun Jan 4 03:30:18 2009 Tanaka Akira <akr@fsij.org>
+
+ * io.c (maygvl_copy_stream_wait_read): renamed to add prefix to
+ express GVL state.
+ (nogvl_copy_stream_wait_write): ditto.
+ (nogvl_copy_stream_sendfile): ditto.
+ (maygvl_copy_stream_read): ditto.
+ (nogvl_copy_stream_write): ditto.
+ (nogvl_copy_stream_read_write): ditto.
+ (nogvl_copy_stream_func): ditto.
+
+Sun Jan 4 00:30:50 2009 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/erb.rb: merged r20850, r17881, r16811, r16763, r16748, r15829,
+ r15794 and r15698 from ruby_1_8.
+
+ * test/erb/test_erb.rb: ditto.
+
+Sat Jan 3 22:24:36 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk, Makefile.in, win32/Makefile.sub (INSNS): move the macro
+ definition from common.mk to {Makefile.in,win32/Makefile.sub}.
+ [ruby-dev:37678]
+
+Sat Jan 3 15:30:09 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/chinese.trans: added for transcoding EUC-CN and GB12345.
+
+ * enc/trans/GB/: ditto.
+
+Sat Jan 3 15:26:30 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/euc-cn.c: renamed from gb2312.c because GB2312 is
+ the name of a CSS. it's encoding name is "EUC-CN".
+
+Sat Jan 3 03:00:42 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk, Makefile.in, win32/Makefile.sub ($(INSNS), node_name.inc,
+ known_errors.inc, miniprelude.c, newline.c): move rules from common.mk
+ to {Makefile.in,win32/Makefile.sub} for nmake.
+ [ruby-core:20993]
+
+Fri Jan 2 23:51:41 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_sleep.rb (test_sleep_5sec): stop gc.
+
+Fri Jan 2 23:36:10 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c: don't apply socktype hack [ruby-core:184] for
+ sock_s_getaddrinfo.
+ (sock_getaddrinfo): add socktype_hack argument.
+ (sock_addrinfo): call sock_getaddrinfo with socktype_hack.
+ (sock_s_getaddrinfo): call sock_getaddrinfo without socktype_hack.
+ [ruby-dev:37674]
+
+Fri Jan 2 23:33:38 2009 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/missing.h, sprintf.c: get rid of a warning of VC++.
+
+Fri Jan 2 22:25:46 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * process.c: use sigaction instead of sigset. [ruby-core:21021]
+
+Fri Jan 2 22:22:04 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bootstraptest/test_proc.rb: suppress error message.
+
+Fri Jan 2 22:20:46 2009 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_process.rb (test_wait_and_sigchild): remove debug
+ output.
+
+Fri Jan 2 17:45:19 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: rename family_to_str to intern_family.
+ it returns ID now.
+
+ * ext/socket/socket.c (ipaddr): use intern_family.
+
+Fri Jan 2 17:20:31 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: use ID in the values of
+ family_to_str_hash. family_to_str returns a VALUE.
+
+ * ext/socket/socket.c (ipaddr): follow family_to_str change.
+
+Fri Jan 2 17:01:51 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: refactored to gather stringizer
+ description.
+
+Fri Jan 2 15:30:57 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: make common prefix optional.
+
+Fri Jan 2 14:59:52 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: use hash for family_to_str to avoid
+ linear search. lenp argument removed.
+
+ * ext/socket/socket.c (ipaddr): call family_to_str without lenp
+ argument.
+
+Fri Jan 2 14:33:12 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb (gen_int_to_name): don't compare constants
+ in preprocessor because the constants may be enum.
+
+Fri Jan 2 14:11:07 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb (gen_int_to_name): add lenp argument.
+
+ * ext/socket/socket.c (ipaddr): follow argument change.
+
+Fri Jan 2 10:20:24 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/singleton.rb: fix documentation. [ruby-core:21038]
+
+Fri Jan 2 06:43:58 2009 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * signal.c (rb_signal_buff_size): defined for check whether signal
+ is in the buffer or not.
+
+ * thread_pthread.c (thread_timer): don't exit the loop when signal
+ is in the buffer. [ruby-dev:37637]
+
+Fri Jan 2 04:40:00 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: check duplicates.
+
+Fri Jan 2 02:39:08 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (optname_arg): defined.
+ (bsock_setsockopt): use optname_arg.
+ (bsock_getsockopt): ditto.
+
+ * ext/socket/mkconstants.rb: generate so_optname_to_int,
+ ip_optname_to_int, ipv6_optname_to_int, tcp_optname_to_int and
+ udp_optname_to_int.
+ more constants.
+
+Fri Jan 2 02:08:36 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (constant_arg): extracted from family_arg.
+ (family_arg): use constant_arg.
+ (socktype_arg): ditto.
+ (level_arg): ditto.
+
+Fri Jan 2 01:15:11 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (level_arg): defined.
+ (bsock_setsockopt): use level_arg.
+ (bsock_getsockopt): ditto.
+
+ * ext/socket/mkconstants.rb: generate level_to_int.
+
+Fri Jan 2 00:58:40 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (family_arg): accept symbols as well.
+ (socktype_arg): ditto.
+
+Fri Jan 2 00:49:44 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sock_s_getaddrinfo): use socktype_arg.
+
+Fri Jan 2 00:12:27 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (family_arg): extracted from
+ setup_domain_and_type.
+ (socktype_arg): ditto.
+ (udp_init): use family_arg.
+ (sock_s_gethostbyaddr): ditto.
+ (sock_s_getaddrinfo): ditto.
+ (sock_s_getnameinfo): ditto.
+
+Thu Jan 1 22:27:55 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * spec/default.mspec: fix for builddir != srcdir
+
+ * Makefile.in: ditto.
+
+Thu Jan 1 21:26:05 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sock_s_getnameinfo): use family_to_int.
+
+Thu Jan 1 21:08:34 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: check all alias possibility.
+
+Thu Jan 1 20:59:55 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: more possible aliases.
+
+Thu Jan 1 20:54:02 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: AF_ISO and AF_OSI may be aliased.
+
+Thu Jan 1 20:50:09 2009 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * process.c (before_exec): it makes no sense for a conditional
+ expression to return a void value.
+
+Thu Jan 1 20:47:09 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sock_s_getaddrinfo): use family_to_int.
+
+Thu Jan 1 20:17:47 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c: include constants.h at top.
+
+Thu Jan 1 19:53:33 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: add valp argument for family_to_int and
+ socktype_to_int.
+
+ * ext/socket/socket.c (setup_domain_and_type): use valp argument.
+
+Thu Jan 1 19:36:57 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: generate family_to_str.
+
+ * ext/socket/socket.c (ipaddr): use family_to_str.
+
+Thu Jan 1 17:37:12 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: generate socktype_to_int.
+
+ * ext/socket/socket.c (setup_domain_and_type): use socktype_to_int.
+
+Thu Jan 1 17:26:47 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (setup_domain_and_type): initialize ptr.
+
+Thu Jan 1 17:01:50 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: refine family_to_int.
+
+Thu Jan 1 16:48:07 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: generate family_to_int().
+
+ * ext/socket/socket.c (setup_domain_and_type): use family_to_int.
+
+Thu Jan 1 15:08:46 2009 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * tool/file2lastrev.rb: supports git repositories which are cloned
+ from a git-svn gateway.
+ Patch by Hongli Lai. [ruby-core:21020]
+
+Thu Jan 1 16:08:11 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: generate init_constants function.
+
+ * ext/socket/socket.c (Init_socket): call init_constants.
+
+Thu Jan 1 16:03:04 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb (Socket::AF_INET6): moved from socket.c.
+ (Socket::PF_INET6): ditto.
+
+Thu Jan 1 15:27:07 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: use erb.
+
+Thu Jan 1 15:07:56 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: add -o option.
+
+ * ext/socket/depend: use mkconstants.rb with -o option.
+
+Thu Jan 1 07:42:36 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/singleton.rb: fix indentation of RDoc text. [ruby-core:21029]
+
+Thu Jan 1 07:16:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (distclean-ext, realclean-ext): use EXTS as default.
+
+ * win32/Makefile.sub (distclean-ext, realclean-ext): try to remove ext
+ directory.
+
+Thu Jan 1 06:56:28 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/file2lastrev.rb: unset PWD.
+
+Wed Dec 31 23:37:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (sock_s_socketpair): yield if a block is given.
+ (io_call_close): defined.
+ (io_close): defined.
+ (pair_yield): defined.
+
+Wed Dec 31 19:35:57 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * spec/README: follows the change of directory structure in rubyspec.
+
+ * spec/default.mspec: ditto. Also follows change of mspec command.
+
+ * Makefile.in: ditto.
+
+Wed Dec 31 17:16:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_read_internal): show openssl error
+ code in EWOULDBLOCK error.
+
+Wed Dec 31 15:45:18 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (copy_stream_body): don't check to_io because
+ Zlib::GzipWriter#to_io returns the underlying IO.
+
+Wed Dec 31 14:52:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_digest.c (GetDigestPtr): use StringValueCStr
+ instead of STR2CSTR.
+
+ * ext/openssl/ossl_pkey_ec.c (ossl_ec_key_initialize): ditto.
+ (ossl_ec_group_initialize): ditto.
+
+Wed Dec 31 14:12:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_to_float): replaced by to_flo definition from
+ math.c [ruby-dev:37668]
+
+ * math.c (Need_Float): use rb_to_float().
+
+Wed Dec 31 13:49:06 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/lib/openssl/buffering.rb (Buffering#read_nonblock):
+ implemented.
+
+ * ext/openssl/ossl_ssl.c (rb_sys_fail_path): removed.
+ (fcntl.h): don't include.
+ (ossl_ssl_read_internal): defined.
+ (ossl_ssl_read): use ossl_ssl_read_internal.
+ (ossl_ssl_read_nonblock): use ossl_ssl_read_internal.
+ (Init_ossl_ssl): define sysread_nonblock, instead of read_nonblock.
+
+Wed Dec 31 00:27:54 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_to_float): prohibit conversion from nil to float.
+ [ruby-dev:37663]
+
+ * pack.c (pack_pack): replace all rb_Float() to rb_to_float().
+ [ruby-dev:37663]
+
+Tue Dec 30 21:17:00 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: use sock_define_uconst for INADDR_*
+ constants because Socket::INADDR_LOOPBACK should be 0x7f000001
+ instead of -0xffffff.
+
+ * ext/socket/socket.c (sock_define_uconst): defined.
+
+Tue Dec 30 18:23:10 2008 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 1.3.1 r4506.
+ * test/minitest/*.rb: ditto.
+
+Tue Dec 30 17:59:59 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c: Minor fixes and tweaks in documentation.
+
+Tue Dec 30 17:03:51 2008 Koichi Sasada <ko1@atdot.net>
+
+ * ext/dl/test/test_import.rb: fix a prototype decl.
+ pointed out by Takehiro Kubo [ruby-core:20971].
+
+Tue Dec 30 16:56:09 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_thread_blocking_region): add a comment.
+
+ * thread.c (rb_thread_call_without_gvl): added as a alias of
+ rb_thread_blocking_region().
+
+ * thread.c (rb_thread_call_with_gvl): added.
+
+ * vm_core.h (rb_thread_t#blocking_region_buffer): added for
+ rb_thread_call_with_gvl().
+
+Mon Dec 29 23:41:42 2008 Koichi Sasada <ko1@atdot.net>
+
+ * ext/dl/test/test_base.rb: add libc search logic.
+ this patch is written by Takehiro Kubo.
+ [ruby-core:20963] [Bug #932]
+
+ * ext/dl/dl.h: Add ",..." as the last argument.
+ this patch is written by Takehiro Kubo.
+ Bug #633 [ruby-core:19289]
+
+ * ext/dl/lib/dl/stack.rb: add add_padding() to calculate
+ alignment. this patch is written by Takehiro Kubo.
+ Bug #633 [ruby-core:19289]
+
+ * ext/dl/test/test_func.rb: atof()'s return value is double.
+ this patch is written by Takehiro Kubo.
+ Bug #633 [ruby-core:19289]
+
+ * ext/dl/test/test_import.rb:
+ - atof()'s return value is double.
+ - The types of qsort's second and third argument are size_t.
+ - fprintf()'s return value is int.
+ this patch is written by Takehiro Kubo.
+ Bug #633 [ruby-core:19289]
+
+Mon Dec 29 22:37:17 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * process.c (rb_waitpid): retries waitpid when EINTR.
+ [ruby-core:19744].
+
+Mon Dec 29 23:18:52 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * bignum.c (rb_cstr_to_inum): changed an error message.
+
+ * complex.c (string_to_c_strict): ditto.
+
+ * rational.c (string_to_r_strict): ditto.
+
+Mon Dec 29 22:37:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): template f should not accept non float
+ values. [ruby-dev:37656]
+
+ * object.c (rb_to_float): new function to type check floats.
+
+Mon Dec 29 22:27:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * random.c (rb_f_rand): type check simplified. strings are no
+ longer allowed for argument. [ruby-dev:37655]
+
+ * test/ruby/test_rand.rb (TestRand::o.to_int): need override
+ to_int.
+
+Mon Dec 29 21:22:31 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c: Infinity.numerator returns self. [experimental]
+
+ * numeric.c: Infinity.denominator returns 1. [experimental]
+
+Mon Dec 29 20:57:14 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * man/ri.1: new manpage.
+
+Mon Dec 29 20:45:25 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c: floor, ceil, truncate and round accept an extra
+ argument like Float#round. [experimental]
+
+Mon Dec 29 18:24:49 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * Makefile.in (distclean-local): removes Doxyfile and
+ run.gdb at distclean'ing.
+
+Mon Dec 29 17:53:24 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * bin/erb: accepts options in more flexible styles.
+
+Mon Dec 29 17:25:17 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/erb.rb (ERB): m17n of ERB. adds rdoc.
+ fixes #712. c.f. [ruby-dev:37516].
+
+ * lib/erb.rb (ERB::Compiler#compile): recognizes magic comments.
+ returns a pair of compiled script and its script encoding.
+
+ * lib/erb.rb (ERB#set_eoutvar): make generated scripts return a
+ string in correct encoding.
+
+ * lib/erb.rb (ERB#def_method): use Kernel#eval for encoding-awareness
+ of the evaluated string.
+
+ * bin/erb.rb (ERB::Main.run): adds -E and -U options.
+ String is no longer Enumerable.
+
+ * man/erb.1: new manpage.
+
+ * test/erb/test_erb_m17n.rb: new test case for m17n features.
+
+Mon Dec 29 18:02:45 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/io/wait/wait.c (io_nread): returns number of bytes available
+ for read. response to feature request #936 in [ruby-core:20917].
+
+Mon Dec 29 17:52:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/io/wait/wait.c (io_ready_p): updated to follow RDoc.
+
+Mon Dec 29 16:52:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (s_recvfrom_nonblock): revert r21162.
+
+Mon Dec 29 16:16:20 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (vm_set_eval_stack, vm_set_main_stack, vm_set_top_stack):
+ check stack overflow. [ruby-dev:37646]
+
+Sun Dec 28 18:36:33 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/rubygems/test_gem_command.rb
+ (test_add_option_overlapping_common_and_local_options):
+ follows r21066.
+
+Mon Dec 29 14:50:19 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * Makefile.in (ext-clean): ext-clean always fails.
+
+ * ext/dl/ripper/extconf.rb: adds y.output into the clean list.
+
+Mon Dec 29 11:58:39 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_mutex_trylock): return false if Mutex owned
+ by current thread. [ruby-core:20943]
+
+ * thread.c (rb_mutex_lock): check dead lock (recursive lock) here.
+
+ * test/ruby/test_thread.rb: add a test.
+
+Mon Dec 29 10:58:54 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (rb_get_path): move encoding conversion of file path
+ from rb_scan_open_args.
+
+ * io.c (rb_scan_open_args): ditto.
+
+Mon Dec 29 07:15:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * cont.c: small RDoc fix mentioned from <radek.bulat at gmail.com>
+ in [ruby-core:20921].
+
+Mon Dec 29 03:43:25 2008 Koichi Sasada <ko1@atdot.net>
+
+ * ruby.c (process_options): set th->base_block only while
+ it is needed. [ruby-dev:37634] [Bug #939]
+
+ * ruby.c (require_libraries): clear th->base_block before
+ require libraries.
+
+Sun Dec 28 21:33:52 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ext/dl/test_base.rb: add BSD's case.
+
+Sun Dec 28 21:09:12 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * ext/dl/lib/dl/import.rb (DL::Importer#sizeof): follows
+ a feature change in 1.9.
+
+Sun Dec 28 21:03:07 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * ext/dl/lib/dl/import.rb (DL::Importer#extern): adds filename and
+ line number to module_eval'ing for readability of backtrace.
+ (DL::Importer#bind): ditto.
+
+ * ext/dl/lib/dl/struct.rb (DL::CStructBuilder#create): ditto.
+
+Sun Dec 28 19:11:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): do not use snprintf/vsnprintf in
+ msvcrt.
+
+ * sprintf.c: not force to override snprintf/vsnprintf.
+ [ruby-core:20824]
+
+Sun Dec 28 17:21:36 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/rubygems/test_ext_configure_builder.rb (test_self_build_fail):
+ Extends pattern for FreeBSD's error message.
+
+Sun Dec 28 17:10:13 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * ext/dl/test/test_dl2.rb: modify strncpy, strcpy, qsort, types.
+ Patch by Takehiro Kubo.
+ Bug #633 [ruby-core:19289]
+ * ext/dl/test/test_base.rb: /lib/libc.so is x86_64 binary in x86_64 architecture.
+
+Sun Dec 28 12:53:10 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * ext/dl/test/test_base.rb: use libc.dylib when the platform is darwin.
+
+Sun Dec 28 12:24:14 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (mutex_free, mutex_unlock): add qualifiers.
+
+Sun Dec 28 10:28:04 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (mutex_free): GC thread (main thread) has failed to unlock
+ a mutex that is locked by another thread, which makes the mutex
+ dangling in keeping_mutexes and causes [BUG] or stuck finally.
+ Now unlocking is performed as locking thread.
+
+ * thread.c (mutex_unlock, rb_mutex_unlock, rb_mutex_unlock_all):
+ mutex_unlock receives a thread.
+
+Sun Dec 28 05:44:44 2008 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 1.3.1 r4505.
+ * test/minitest/*.rb: ditto.
+
+Sun Dec 28 00:43:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * runruby.rb: refactored to modify ENV as once.
+
+Sat Dec 27 22:41:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/rdoc/test_rdoc_info_formatting.rb (setup, teardown): uses
+ mktmpdir and removes it after the test.
+
+ * test/cgi/test_cgi_session.rb (setup, teardown): ditto.
+
+Sat Dec 27 21:46:10 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * ext/dl/test/test_base.rb: use lib64 when the architecture is x86_64.
+
+Sat Dec 27 20:26:59 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_argv_size): if an argument is empty, it's size
+ is 2, not 0, because it will be converted to "".
+
+Sat Dec 27 19:40:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (after_exec): needs to reset before restart timer
+ thread.
+
+ * thread.c (thread_start_func_2): stops timer thread if forked in
+ the new thread. [ruby-core:19385]
+
+ * thread.c (rb_thread_atfork, rb_thread_atfork_before_exec): DRY.
+
+Sat Dec 27 18:25:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_eval.c (rb_f_loop): return enumerator if no block given.
+ [ruby-list:45747]
+
+Sat Dec 27 17:08:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * .gdbinit (dummy_gdb_enums.special_consts): forces to load debug
+ info on Mac OS X.
+
+ * .gdbinit (rp): added T_ZOMBIE.
+
+Sat Dec 27 16:18:02 2008 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c (rb_frame_callee, rb_frame_caller): rb_frame_callee()
+ should return method id on current frame.
+ add rb_frame_caller() to get method id on parent frame.
+ Bug #884 [ruby-dev:37446]
+
+ * eval.c (rb_f_method_name): use rb_frame_caller()
+ instead of rb_frame_callee().
+
+Sat Dec 27 15:28:12 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (make_econv_exception): show source and destination
+ encoding. [ruby-dev:37285]
+
+Sat Dec 27 15:23:38 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_yield_with_cfunc): rename parameter name
+ "blockptr" to "blockargptr".
+
+Sat Dec 27 15:15:56 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (revision.h): ignores failure of file2lastrev.
+
+Sat Dec 27 15:02:38 2008 Koichi Sasada <ko1@atdot.net>
+
+ * ruby.c (process_options): fix to untouch th->mild_compile_error.
+ [ruby-dev:37621], [ruby-dev:37620]
+
+Sat Dec 27 14:48:26 2008 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.h, iseq.c (rb_iseq_new_main): add a type ISEQ_TYPE_MAIN.
+ [ruby-dev:37619]
+
+ * compile.c (rb_dvar_defined, ruby_iseq_compile): ditto.
+
+ * iseq.c (iseq_data_to_ary, iseq_load): ditto.
+
+ * compile.c (iseq_compile_each): fix to check ip->compile_data.
+
+Sat Dec 27 14:29:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb (OpenURI.redirectable?): permit https redirection.
+ patch from Roman Shterenzon. [ruby-core:20485]
+
+Sat Dec 27 13:36:55 2008 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c (get_errinfo): return th->errinfo value
+ if normal errinfo place (dynamic local variable) is not found.
+ fixes Bug #732 [ruby-dev:37046].
+
+ * bootstraptest/test_proc.rb: add a test.
+
+Sat Dec 27 13:10:43 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * man/irb.1: adds -v, -h, -E and -U.
+
+Sat Dec 27 11:41:45 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_call_method, vm_call_cfunc): use original id instead of
+ calling id when NODE_CFUNC or NODE_BMETHOD.
+ fixes Bug #632 [ruby-core:19282].
+
+ * vm_eval.c (vm_call0, vm_call_super): ditto.
+
+ * vm_method.c (rb_add_method, rb_alias): store original id
+ in nd_file field of NODE_METHOD.
+
+ * test/stringio/test_stringio.rb: add a test.
+
+Sat Dec 27 09:48:54 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (Init_VM): create and define TOPLEVEL_BINDING at first.
+
+ * vm.c (vm_set_main_stack, rb_iseq_eval_main): added.
+
+ * parse.y (rb_parser_compile_file): fix to check parse_in_eval flag.
+
+ * eval.c (ruby_exec_node): use rb_iseq_eval_main()
+ instead of rb_iseq_eval().
+
+ * iseq.c (rb_iseq_new_main), vm_core.h: added.
+ main script (specified by -e or script name) should be run
+ under TOPLEVEL_BINDING using Kernel#eval. Above changes
+ simulate Kernel#eval behaviour. [ruby-dev:37240]
+
+ * compile.c (make_name_for_block): skip iseq except block type.
+ this fix is needed for [ruby-dev:37240], and also fixes
+ [ruby-dev:35392].
+
+Sat Dec 27 09:14:17 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * cont.c: rdoc for Fiber. patch by Muhammad Ali.
+ [ruby-core:20894]
+
+Sat Dec 27 05:38:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (after_fork): ignores a termination request in the
+ parent process. [ruby-dev:37447]
+
+Sat Dec 27 01:52:39 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Using a more robust transcoding scheme to produce
+ ASCII compatible inspect() messages. [ruby-dev:37591]
+
+Fri Dec 26 18:04:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (fptr_finalize): don't allocate objects if noraise.
+ (finish_writeconv): add noalloc argument to be able to avoid
+ object allocation.
+ (finish_writeconv_arg): introduced again.
+ (finish_writeconv_sync): follow the above change.
+
+Fri Dec 26 17:04:14 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/irb/input-method.rb (IRB::StdioInputMethod#initialize):
+ removed a 'p' for debugging.
+
+Fri Dec 26 15:50:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser::List#summarize): gives priority
+ to latter switches. [ruby-dev:36692]
+
+ * lib/optparse.rb (OptionParser#summarize): do not append
+ unnecessary line terminator.
+
+Fri Dec 26 14:01:38 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (fptr_finalize): close the IO object even if finish_writeconv or
+ flush is failed.
+ (finish_writeconv): don't raise. return errno or exception.
+ (finish_writeconv_arg): removed.
+ (finish_writeconv_sync): follow finish_writeconv change.
+
+ * transcode.c (rb_econv_make_exception): new function.
+
+ * include/ruby/encoding.h (rb_econv_make_exception): declared.
+
+Thu Dec 25 20:57:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (str_transcode0): set encoding when String#encode was
+ given explicit but the same destination and source encoding.
+
+Thu Dec 25 20:01:50 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_s_pipe): unused variable removed.
+
+Thu Dec 25 19:35:51 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (sym_ignore): remove useless symbol.
+
+Thu Dec 25 18:36:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (pipe_close): removed.
+ (pipe_yield): defined.
+ (rb_io_s_pipe): use pipe_yield.
+
+Thu Dec 25 17:49:45 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (decorate_convpath): show type of escaping for
+ xml_attr_quote or some conversions.
+
+Thu Dec 25 17:06:13 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_initialize): check fd validity. [ruby-dev:36646]
+
+Thu Dec 25 16:23:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (flush_before_seek): check io_fflush result.
+ (rb_io_check_readable): ditto.
+ (rb_io_flush): ditto.
+ (rb_io_fsync): ditto.
+ (remain_size): ditto.
+ (rb_io_write_nonblock): ditto.
+ (finish_writeconv): ditto.
+ (fptr_finalize): ditto.
+ (io_reopen): ditto.
+ (rb_io_reopen): ditto.
+ (copy_stream_body): ditto.
+
+Thu Dec 25 15:54:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_fflush): flush write buffer without write lock in
+ finalizers. [ruby-dev:37572]
+
+ * io.c (rb_io_fptr_finalize): clear write lock before finalizing.
+
+Thu Dec 25 15:07:22 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (fptr_finalize): close the IO object even if close(2) is failed.
+
+Thu Dec 25 14:51:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/rdoc/parser.rb (RDoc::Parser.binary?): should read in binary mode.
+
+Thu Dec 25 14:32:23 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_method_search): fix control flow bug.
+ (commited at r20981)
+
+Thu Dec 25 13:28:20 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (rb_io_flush): fsync() after buffer is flushed on win32.
+ [ruby-core:20043]
+
+Thu Dec 25 13:13:00 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_method_search): return rb_cObject if there is no
+ super class. [ruby-dev:37587]
+
+ * bootstraptest/test_method.rb: add tests for above.
+
+Thu Dec 25 12:49:12 2008 Koichi Sasada <ko1@atdot.net>
+
+ * proc.c (proc_new): should use proc_dup() if block has Proc.
+
+ * vm.c (vm_make_proc_from_block): should use rb_cProc for block.
+
+ * vm.c (vm_make_proc): add an assertion.
+
+ * bootstraptest/test_proc.rb: add a test.
+
+Thu Dec 25 12:44:27 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_yield_with_cfunc): check block has Proc.
+
+Thu Dec 25 05:53:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * template/id.h.tmpl, id.h (ruby_method_ids): not depend on if
+ token are defined as macros. [ruby-dev:37553]
+
+ * template/id.h.tmpl, id.h (ruby_method_ids_check): enclosed in a
+ struct.
+
+Thu Dec 25 01:52:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_start_func_2): sets native thread key.
+
+Thu Dec 25 01:09:23 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * test/readline/test_readline_history.rb: check the encoding that
+ is in the Readline::HISTORY.
+
+Thu Dec 25 00:59:06 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * test/readline/test_readline_history.rb: did not check the
+ encoding that is in the Readline::HISTORY. I will fix it.
+
+Wed Dec 24 22:36:06 2008 Koichi Sasada <ko1@atdot.net>
+
+ * error.c, vm_dump.c: change message by rb_bug().
+
+Wed Dec 24 21:57:39 2008 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_peephole_optimize): fix typo.
+
+Sun Dec 21 13:38:04 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (invoke_block_from_c): fix to point right cfp.
+
+ * vm.c (vm_make_proc, vm_make_proc_from_block), vm_core.h:
+ remove unused parameter cfp.
+
+ * vm_insnhelper.c, proc.c (proc_new): ditto.
+
+Wed Dec 24 20:59:12 2008 Koichi Sasada <ko1@atdot.net>
+
+ * error.c (exc_equal): == method should not raise Exception.
+ [ruby-dev:37519]
+
+ * sample/test.rb: fix test.
+
+Wed Dec 24 20:33:45 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_call_method): use class of method defined
+ instead of receiver's class on bmethod. fixes [ruby-core:20786]
+
+ * bootstraptest/test_method.rb: add a test for above.
+
+ * vm_insnhelper.c (vm_setup_method): remove unused parameter klass.
+
+ * vm_insnhelper.h (CALL_METHOD): ditto.
+
+ * insns.def, vm_eval.c: ditto.
+
+Wed Dec 24 20:15:50 2008 Koichi Sasada <ko1@atdot.net>
+
+ * tool/file2lastrev.rb (get_revisions): fix to ignore end of line.
+
+Wed Dec 24 13:33:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (HAVE_LONG_LONG, HAVE_OFF_T): revised for autoconf
+ 2.62 or later.
+
+Wed Dec 24 06:29:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (OBJDUMP, OBJCOPY): autoconf list is not comma
+ separated.
+
+ * configure.in (AC_HEADER_STDC, AC_CHECK_HEADERS, AC_CHECK_FUNCS):
+ removed duplicated checks.
+
+Wed Dec 24 03:21:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * misc/ruby-mode.el: added comment to mention newer version
+ bundled with Emacs 23 or later. a patch from Phil Hagelberg
+ <phil at hagelb.org> in [ruby-core:20838].
+
+Tue Dec 23 23:49:37 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_init_copy): call io_seek only if io_tell succeeds.
+
+Tue Dec 23 22:57:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_fork): don't propagate an error message if error
+ buffer not given.
+
+Tue Dec 23 21:55:05 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_fork): propagate an error message from child to parent.
+ (rb_f_exec): show details of error in child process on
+ exception.
+ (save_redirect_fd): add error message arguments.
+ (run_exec_dup2): ditto.
+ (run_exec_close): ditto.
+ (run_exec_open): ditto.
+ (run_exec_dup2_child): ditto.
+ (run_exec_pgroup): ditto.
+ (run_exec_rlimit): ditto.
+ (rb_run_exec_options): ditto.
+ (rb_exec): ditto.
+ (rb_exec_atfork): ditto.
+ (rb_spawn_internal): ditto.
+ (rb_spawn): ditto.
+ (rb_f_system): follow arguments change.
+ (proc_daemon): ditto.
+ (rb_f_spawn): show details of error in child process on exception.
+
+ * io.c (popen_exec): add error message arguments.
+ (pipe_open): show details of error in child process on exception.
+
+ * include/ruby/intern.h (rb_run_exec_options): add error message
+ arguments.
+ (rb_exec): ditto.
+ (rb_fork): ditto.
+ (rb_spawn): ditto.
+
+ * ext/pty/pty.c (chfunc): add error message arguments.
+
+Tue Dec 23 20:28:28 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * io.c: rdoc for File::open and 1.9 feature in file modes.
+
+ * transcode.c: rdoc for String#encode
+
+Tue Dec 23 19:51:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_spawn): deals with quoted commands.
+
+Tue Dec 23 18:44:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * strftime.c (rb_strftime): use locale insensitive functions for tr_TR
+ locale.
+
+Tue Dec 23 17:38:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit/assertions.rb (assert_equal): show small differences
+ for Regexp and Float.
+
+Tue Dec 23 16:49:48 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_spawn): support normal commands with arguments.
+
+Tue Dec 23 16:22:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_inspect): show fd number if there is no pathname.
+
+Tue Dec 23 15:48:55 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * tool/file2lastrev.rb: shouldn't use single quote in shell's command
+ line if you want to support Windows.
+
+Tue Dec 23 15:46:43 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/mathn.rb: Math.sqrt(NaN) should be NaN. [ruby-dev:37537]
+
+Tue Dec 23 15:46:47 2008 Eric Hodel <drbrain@segment7.net>
+ * gem_prelude.rb: Match full RubyGems behavior when a gem can't be
+ found.
+
+Tue Dec 23 15:36:58 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * tool/file2lastrev.rb: detects vcs directory properly on building
+ outside of srcdir. [ruby-dev:37555] [ruby-dev:37561]
+
+Tue Dec 23 15:30:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (pipe_open): need to initialize args.
+
+Tue Dec 23 14:18:14 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/st.h: need to include defines.h because LONG_LONG is
+ defined there.
+
+Tue Dec 23 13:52:05 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/parser/c.rb: Don't coalesce adjacent comment blocks.
+ [bug#901]
+
+Tue Dec 23 12:00:00 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (pipe_close): fix coding style. [ruby-dev:37554]
+
+Tue Dec 23 08:10:05 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/installer.rb: Fix documentation. [bug#827]
+
+Tue Dec 23 08:04:58 2008 Eric Hodel <drbrain@segment7.net>
+
+ * gem_prelude.rb: Don't remove methods twice. [bug#555]
+
+Tue Dec 23 00:16:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * sprintf.c (rb_str_format): fix buffer overflow.
+
+Mon Dec 22 19:31:19 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (revision.h): uses tool/file2lastrev.rb to support
+ git-svn.
+
+ * version.h: changed version string as
+ `ruby 1.9.1 (2008-12-22 patchlevel-5000 trunk 20912)
+ [i386-darwin9.6.0]'.
+
+Mon Dec 22 16:32:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): encoding of packed string only from 'm',
+ 'M', and 'u' should be US-ASCII. [ruby-dev:37284]
+
+ * pack.c (pack_pack): encoding of packed string only from 'U'
+ should be UTF-8. also upgrade US-ASCII strings to UTF-8.
+
+Mon Dec 22 15:56:49 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * Doxyfile.in: new file. Template of a configuration file.
+ Introduces C-level API reference generation with Doxygen.
+
+ * tool/file2lastrev.rb: wrapper script that abstracts subversion
+ and git-svn.
+
+ * tool/strip-rdoc.rb: filter for preventing doxygen from processing
+ rdoc comments.
+
+ * configure.in: (Doxyfile): Doxyfile is generated together with
+ Makefile.
+ (PACKAGE): configuration $(PACKAGE) is necessary for $(docdir).
+
+ * instruby.rb: adds a new install target 'capi'
+
+ * common.mk (capi): new target that generates C API documents with
+ Doxygen.
+ (install-capi): new target.
+ (pre-install-capi): ditto.
+ (do-install-capi): ditto.
+ (post-install-capi): ditto.
+
+Mon Dec 22 21:31:11 2008 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (int_ord): Integer#ord implemented.
+
+Mon Dec 22 21:26:12 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_s_pipe): IO.pipe can take a block.
+ (pipe_close): new function.
+
+Mon Dec 22 21:08:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit/assertions.rb (assert_nothing_raised): increment
+ assertion count. [ruby-dev:37480]
+
+Mon Dec 22 19:10:44 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (Init_native_thread): need to call
+ ruby_thread_set_native() here.
+
+Mon Dec 22 18:00:36 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/tcltklib.c: fix wrong flag value.
+
+Mon Dec 22 15:15:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/net/protocol.rb (Net::BufferedIO#rbuf_fill): avoid calling
+ read_nonblock in rescue. use retry instead.
+
+Mon Dec 22 14:35:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_external_str_new_with_enc): set ASCII-8BIT if
+ encoding is US-ASCII and string contains 8bit characters.
+
+Mon Dec 22 12:26:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cygwin/GNUmakefile.in (rubydll.def), win32/mkexports.rb
+ (Exports#exports): added VERSION.
+
+Mon Dec 22 12:25:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * missing/vsnprintf.c (BSD_vfprintf): fix for test_sprintf_comb.rb, by
+ wanabe in [ruby-dev:36935].
+
+Mon Dec 22 12:05:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (mingw): no longer uses snprintf and vsnprintf of
+ msvcrt. [Bug#6]
+
+ * win32/win32.c (rb_w32_vsnprintf, rb_w32_snprintf): removed.
+
+ * win32/Makefile.sub (config.h): vsnprintf exists in VC7 or later.
+
+ * win32/mkexports.rb (Exports#initialize): aliases
+ rb_w32_vsnprintf and rb_w32_snprintf for binary compatibility.
+
+ * sprintf.c (rb_str_format): uses snprintf instead of sprintf.
+
+ * numeric.c (flo_to_s, rb_num2long, rb_num2ll): ditto.
+
+Mon Dec 22 10:59:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_upto): should return enumerator if called
+ without block. [ruby-dev:37526]
+
+Mon Dec 22 09:54:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (gettable_gen): the encoding of __FILE__ should be
+ rb_filesystem_encoding(). [ruby-list:45733]
+
+ * parse.y (gettable_gen): __FILE__ should be ASCII-8BIT when
+ filesystem encoding is US-ASCII and __FILE__ contains non 7bit
+ characters.
+
+Mon Dec 22 02:54:56 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: temporary patch for trouble on TkAqua (> Tk8.4.9).
+
+ * ext/tk/sample/demos-jp/widget: set encoding to a demo-code string to
+ avoid garbled text on the Code Window.
+
+Sun Dec 21 14:55:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (SPLAT_PROC): splat values by hand.
+
+Sun Dec 21 13:50:37 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * test/readline/test_readline.rb
+ (TestReadline#test_some_characters_methods): checked encoding.
+
+Sun Dec 21 12:23:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (SPLAT_PROC): fix for regexp. [ruby-dev:37514]
+
+Sun Dec 21 10:43:10 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * sample/test.rb: rescue exception.
+
+Sat Dec 20 18:28:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (dln_find_1): supplements an extension for executable
+ files on DOSish platforms.
+
+ * io.c (pipe_open): use rb_w32_aspawn() for array form.
+
+ * win32/win32.c (rb_w32_pipe_exec): no longer used.
+
+ * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): deals with batch
+ files and commands with extensions. [ruby-core:20695]
+
+ * win32/win32.c (has_redirection): supports environment variables
+ references.
+
+Sat Dec 20 15:34:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rake.rb (Rake::FileList#egrep): change open mode to "rb",
+ i.e. default to binary. [ruby-dev:37385]
+
+ * lib/rake.rb (Rake::FileList#egrep): allow specifying reading
+ encoding, e.g. FileList['*.rb'].egrep(/require/, encoding:
+ "ascii-8bit")
+
+ * lib/rake.rb (Rake::MultiTask): invoke_prerequisites should be
+ private. a patch from okkez in [ruby-dev:37399]
+
+Sat Dec 20 10:59:16 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/irb/locale.rb (IRB::Locale#initialize)
+ initializes instance variables to suppress warnings.
+ typo fix to ignore LoadError: [ruby-dev:37508]
+
+Fri Dec 19 17:01:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_extract_encoding_option): "internal_encoding: nil"
+ to specify no-transcoding. and other corner case fixed.
+ [ruby-dev:37496]
+
+ * hash.c (rb_hash_lookup2): new function to look-up hash with
+ default value.
+
+Fri Dec 19 15:51:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): get rid of warning on DOSISH.
+
+Fri Dec 19 07:45:37 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (exc_equal): duck typing equal to make it transitive.
+ [ruby-dev:34808]
+
+Thu Dec 18 19:31:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/irb/init.rb (IRB.opt_parse): (M17N) adds -U and -E as command
+ line options. [ruby-dev:37161]. Fixes #711.
+ improved long options.
+
+ * lib/irb/init.rb (IRB.set_encoding): new subroutine for IRB.opt_parse
+
+ * lib/irb/input-method.rb (IRB::StdioInputMethod): (M17N) regards
+ scripts that user types as encoded in the external_encoding.
+
+ * lib/irb/input-method.rb (IRB::ReadlineInputMethod): ditto.
+
+ * lib/irb/input-method.rb (IRB::FileInputMethod): (M17N) respects
+ magic comment.
+
+ * lib/irb/help.rb (IRB.print_usage): (M17N) respects magic comment
+ in the resource file.
+
+ * lib/irb/lc/help-message: adds -U and -E.
+
+ * lib/irb/lc/ja/help-message: ditto. re-encoded from ISO-2022-JP into UTF-8.
+
+ * lib/irb/lc/ja/encoding_aliases.rb: new file. provides Japanese specific
+ character encoding name table for backward compatibility.
+
+ * lib/irb/lc/ja/error.rb: re-encoded from ISO-2022-JP into UTF-8.
+ magic comment.
+
+ * lib/irb/locale.rb: integrated with Ruby 1.9's M17N support.
+
+ * lib/irb/magic-file.rb: new file. utility to handle files with magic
+ comment and opens in the correct encoding.
+
+ * lib/irb/ruby-lex.rb (RubyLex#each_top_level_statement): recovers
+ character encoding for a statement after it lexed so that irb can
+ eval the statement in correct encoding.
+
+ * lib/irb/src_encoding.rb: new file. utility.
+
+Thu Dec 18 21:12:28 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/session.rb: fix bug for ignore session_id option.
+ report from [ruby-core:18635], [Bug #572]
+
+ * lib/cgi/core.rb: use Encoding#find when encoding set.
+
+ * test/cgi/test_cgi_session.rb: test for session_id specified.
+
+Thu Dec 18 17:00:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_aset): string key copying only happen if key is
+ an exact instance of String, not a subclass. based on a patch
+ from Mike Gold <mike.gold.4433 at gmail.com> in [ruby-talk:322667].
+ [incompatible] [ruby-talk:322417]
+
+Thu Dec 18 16:48:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/optparse/version.rb: remove variable shadowing to stop
+ warning. [ruby-core:20612]
+
+ * lib/irb/completion.rb, lib/net/imap.rb, lib/prime.rb,
+ lib/rinda/ring.rb, lib/racc/parser.rb,
+ lib/shell/command-processor.rb, lib/yaml/yamlnode.rb: ditto.
+
+ * lib/racc/parser.rb: remove space before parentheses.
+
+ * lib/shell/command-processor.rb, lib/shell/process-controller.rb:
+ use parentheses around arguments.
+
+ * lib/irb/ext/change-ws.rb, lib/rexml/validation/relaxng.rb,
+ lib/yaml/baseemitter.rb: indentation fix.
+
+ * lib/matrix.rb: small cosmetic change.
+
+Thu Dec 18 08:15:04 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/xmlrpc/server.rb: Restricting method inspection to show only
+ non-inherited public methods. [ruby-core:20603]
+
+ * lib/xmlrpc/server.rb: Fixing method inspection so it doesn't
+ trigger XMLRPC::FaultException when used. [ruby-core:20604]
+
+Wed Dec 17 19:39:44 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (unix_recv_io): relax msg_controllen error
+ check for x86_64-openbsd4.4.
+
+Wed Dec 17 19:37:30 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/extconf.rb: check util.h for OpenBSD.
+
+ * ext/pty/pty.c: include util.h if available. fix variable name.
+
+Wed Dec 17 19:23:28 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/matrix.rb: shut up warning. [ruby-dev:37481] [Bug #899]
+
+Wed Dec 17 15:44:28 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_pop_m): use enum ary_take_pos_flags.
+
+ * array.c (rb_ary_push_m): add modification check before actual
+ operation. [ruby-dev:37440]
+
+Wed Dec 17 15:35:39 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * configure.in (OBJDUMP, OBJCOPY):
+ *BSD's ports and MacPorts prefix GNU binutils with 'g'.
+
+Wed Dec 17 11:39:39 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/bigdecimal/test_bigdecimal.rb (TestBigDecimal#test_hash):
+ shut up warning. see [ruby-dev:37437]
+
+Wed Dec 17 11:01:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_hash): gets rid of collisions between different
+ encoding strings. [ruby-core:20526]
+
+Wed Dec 17 09:50:19 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/test_metaclass.rb: removed codes for my debugging.
+ sorry. [ruby-dev:37470]
+
+Tue Dec 16 22:55:11 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bin/testrb: set $0.
+
+Tue Dec 16 22:42:16 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit.setup_argv): sorry, fixed wrong commit.
+
+Tue Dec 16 22:15:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/minitest/unit.rb (MiniTest::Assertions#assert_instance_of):
+ should assert by instance_of?, not ===. [ruby-dev:37458]
+
+ * lib/minitest/unit.rb (MiniTest::Assertions#assert_instance_of):
+ typo fixed.
+
+Tue Dec 16 21:59:29 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit.setup_argv): ALT_SEPARATOR support.
+
+Tue Dec 16 21:59:02 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (VpToString): reverted modification
+ (that caused a bug) in r20359. [ruby-dev:37370]
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_limit): comment update.
+ [ruby-dev:37465]
+
+Tue Dec 16 20:34:44 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/pty.c (getDevice): add nomesg argument.
+ (get_device_once): add nomesg argument. chmod slave tty to 0600
+ if nomesg. more error tests.
+ (no_mesg): new function.
+ (pty_open): make slave tty's mode 0600.
+
+Tue Dec 16 20:24:20 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/format.rb (_parse): m17n compliant.
+
+Tue Dec 16 19:48:18 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/extconf.rb: check posix_openpt.
+
+ * ext/pty/pty.c (get_device_once): use posix_openpt if available.
+
+Tue Dec 16 19:43:53 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c: use strlcpy for error messages.
+
+Tue Dec 16 16:41:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (stmt): returns dispatched result.
+
+ * parse.y (primary): also in ripper, saves in_def before restoring.
+
+Tue Dec 16 12:30:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (ac_cv_header_ucontext_h): do not use ucontext.h on Mac
+ OS X 10.5 or later. merged from MacPorts.
+
+ * configure.in (ac_cv_func_daemon): daemon(3) is deprecated on Mac OS
+ X 10.5 or later.
+
+Tue Dec 16 11:37:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ruby.c (set_arg0): use strlcpy() instead of strncpy().
+
+ * load.c (rb_feature_p): ditto.
+
+ * dln.c (dln_load): ditto.
+
+Tue Dec 16 09:14:28 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (block_call): block should not be given to yield.
+ [ruby-core:20583]
+
+Mon Dec 15 23:48:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (sleep_timeval): cast tv_usec to long to shut up
+ warnings on OSX. [ruby-dev:37449]
+
+Mon Dec 15 23:34:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/pty.c (pty_open): set FMODE_SYNC and FMODE_DUPLEX.
+
+Mon Dec 15 23:29:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (process_options): revive global sub, gsub, chop, chomp
+ only when auto looping options (-p/-n) is specified.
+ [ruby-core:20570]
+
+Mon Dec 15 22:48:11 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/pty.c (pty_open): new method PTY.open.
+
+Mon Dec 15 21:24:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/pty.c (get_device_once): use DEVICELEN instead of
+ sizeof SlaveName.
+
+Mon Dec 15 21:01:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/pty.c (chfunc): make it static.
+
+Mon Dec 15 20:59:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/pty.c (child_info): add slavename.
+ (chfunc): use slavename.
+ (establishShell): set slavename.
+
+Mon Dec 15 20:16:46 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (EXTMK_ARGS): shouldn't use ``\"'' because cmd.exe eat
+ ''\'' in such quotes.
+
+Mon Dec 15 19:07:31 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): define CANONICALIZATION_FOR_MATHN
+ to follow r20683.
+
+Mon Dec 15 18:12:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rake/packagetask.rb (Rake::PackageTask): small document
+ update from okkez in [ruby-dev:37443]
+
+Mon Dec 15 16:28:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_callee_setup_arg_complex): uses cfp from
+ blockptr instead of the current cfp. [ruby-core:20544]
+
+Mon Dec 15 14:56:59 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/test_metaclass.rb: new test case for metaclass hierarchy.
+
+ * class.c (make_metametaclass): new function. extracted from
+ rb_make_metaclass.
+
+ * class.c (rb_make_metaclass): uses make_metametaclass when called for a
+ metaclass.
+
+ * class.c (rb_singleton_class): creates a meta^(n+2)-class in
+ addition to a meta^(n+1)-class when called for a meta^(n)-class.
+ This is because the returned meta^(n+1) class must acts as an instance of
+ Class, metaclass of Class, ..., meta^(n+1)-class of Class,
+ Module, metaclass of Module, ..., meta^(n+1)-class of Module,
+ Object, metaclass of Object, ..., meta^(n+2)-class of Object,
+ BasicObject, metaclass of BasicObject, ..., meta^(n+2)-class of
+ and BasicObject even when Class, Module, Object or BasicObject has
+ not have its meta^(i)-class yet.
+
+Mon Dec 15 15:13:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * id.h, template/id.h.tmpl (ruby_method_ids): sees YYTOKENTYPE too.
+ [ruby-dev:37436]
+
+Mon Dec 15 15:02:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (EXTMK_ARGS): needs MINIRUBY for cross-compile.
+ [ruby-core:20131]
+
+Mon Dec 15 14:39:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_eval.c (vm_call0): NODE_ZSUPER supported. [ruby-core:20480]
+
+ * vm_eval.c (vm_call_super): uses method_missing().
+
+ * vm_eval.c (method_missing): get rid of too large alloca.
+
+ * vm_eval.c (rb_call0, method_missing): uses idMethodMissing.
+
+ * vm_method.c (rb_add_method, remove_method, rb_undef): uses
+ id__send__.
+
+ * vm_method.c (Init_eval_method): removed IDs which are defined as
+ immediate values.
+
+Mon Dec 15 11:35:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_backtrace): defaults to script name for C functions.
+
+Mon Dec 15 11:32:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (rubylib_mangled_path, rubylib_mangled_path2): cannot use
+ locale encoding before load path is initialized
+
+ * ruby.c (ruby_init_loadpath_safe): ditto.
+
+ * ruby.c (process_options): loads encdb so that encodings can be
+ loaded, then associates script name and load paths with the
+ locale encoding.
+
+Mon Dec 15 10:00:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (btest-ruby): use RUNRUBY instead of MINIRUBY to load the
+ shared library. [Bug #849]
+
+Sun Dec 14 22:31:19 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (bigmul1_karatsuba): remove temporal bignum.
+
+ * bignum.c (bigsqr): call bigmul0(x, x) because it is faster than the
+ original bigsqr at this point.
+
+ * bignum.c (rb_big_pow): a value returned from bigsqr is already
+ truncated.
+
+Sun Dec 14 21:13:02 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (bigmul1_karatsuba): fix comment and refactoring.
+
+Sun Dec 14 14:53:41 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (bigmul1_balance, bigmul1_karatsuba): remove all
+ rb_gc_force_recycle which causes memory leak.
+
+Sun Dec 14 14:26:11 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * spec/README: directory structure changed
+
+Sun Dec 14 09:14:37 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * reverts r20713.
+
+Sun Dec 14 12:51:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (rb_big_mul): faster multiplication by Karatsuba method and
+ twice faster square than normal multiplication. [ruby-dev:37392]
+
+ * random.c (rb_rand_internal): used by Bignum#*.
+
+ * test/ruby/test_bignum.rb: add some tests for above.
+
+Sun Dec 14 01:35:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (forked_child): new variable.
+ (before_exec): don't call rb_thread_stop_timer_thread if
+ forked_child.
+ (after_exec): reset forked_child after rb_thread_start_timer_thread.
+ (rb_fork): set forked_child just after fork in child.
+
+ * ext/pty/pty.c (chfunc): extracted from establishShell.
+ (establishShell): use rb_fork.
+
+ [ruby-dev:37418]
+
+Sat Dec 13 22:17:30 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (help): describes more targets.
+ based on a patch by Michael Klishin. [ruby-core:20523].
+
+Sat Dec 13 18:34:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (sym_printable): wrong condition for string iteration.
+
+Sat Dec 13 16:04:48 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * encoding.c (default_external): endless recursion during
+ loading a locale encoding on some locale.
+ fixed by Nobuyoshi Nakada.
+
+Sat Dec 13 15:55:37 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * ruby.c (process_options): fixed default_internal is nil.
+ (closes #862)
+
+Sat Dec 13 15:52:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (sym_equal): remove documentation error "Otherwise,
+ compares them as strings". [ruby-dev:37398]
+
+ * string.c (sym_inspect): quote if symbol contains non-printable
+ characters. [ruby-dev:37398]
+
+Sat Dec 13 14:24:38 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/enc/test_utf16.rb: feature changed in r20626.
+ follows it.
+
+Sat Dec 13 13:41:44 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/test_m17n_comb.rb: feature changed in r20626.
+ follows it.
+
+Sat Dec 13 13:03:20 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: use rb_usascii_str_new2 instead of rb_str_new2.
+
+ * rational.c: ditto.
+
+Sat Dec 13 12:48:57 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/test_m17n.rb: feature changed in r20626.
+ follows it.
+
+Sat Dec 13 12:38:16 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/minitest/test.rb (MinTest::Unit#location):
+ skips user-defined assertions as MiniTest's.
+ e.g. for test/ruby/test_m17n.rb.
+
+Sat Dec 13 09:17:33 2008 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/*.rb: Imported minitest 1.3.1 r4503.
+ * test/minitest/test_mini_test.rb: ditto.
+ * lib/miniunit/autorun.rb: added (as part of r4503).
+
+Sat Dec 13 08:35:14 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_canonicalization): renamed.
+
+ * ext/math/complex.c: followed the above change.
+
+ * rational.c (nurat_canonicalization): renamed.
+
+ * ext/math/rational.c: followed the above change.
+
+ * configure.in: defines a new macro.
+
+Sat Dec 13 01:10:03 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/readline.c
+ (readline_s_get_completion_append_character): uses locale
+ encoding but not ASCII-8BIT.
+
+Fri Dec 12 22:12:46 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c, rational.c: do not use RUBY_VERSION_CODE.
+
+Fri Dec 12 21:41:36 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/readline.c: r20662 reverted.
+
+Fri Dec 12 19:29:07 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * encoding.c (rb_enc_set_default_external): default_internal can be
+ nil, but default_external cannot.
+
+ * encoding.c (rb_set_default_internal): adds rdoc.
+
+ * encoding.c (enc_find): ditto.
+
+Fri Dec 12 19:24:47 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (run, runruby, parse, gdb, gdb-ruby): you can also run
+ other scripts than $(srcdir)/test.rb.
+
+Fri Dec 12 19:13:43 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/readline.c (readline_readline): changed the message
+ of IOError to 'closed stdin' from 'stdin closed' if stdin was
+ closed.
+
+Fri Dec 12 19:00:49 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/readline.c: used the ExportStringValue macro
+ instead of the OutputStringValue macro. removed the
+ OutputStringValue macro.
+
+Fri Dec 12 16:23:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (yycompile0): ruby_eval_tree_begin is always 0 when
+ ruby_eval_tree is 0.
+
+Fri Dec 12 14:09:55 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * encoding.c (enc_get_default_encoding): removed.
+ Generalizing rb_default_{external,internal}_encoding seems to be
+ difficult.
+ default_external cannot be NULL even before detected. [ruby-dev:37390]
+
+ * encoding.c (rb_default_external_encoding): has its own
+ implementation again.
+
+ * encoding.c (rb_default_internal_encoding): ditto.
+
+ * gem_prelude.rb: added notice.
+
+ * ruby.c (rubylib_mangled_path, rubylib_mangled_path2): uses locale
+ encoding but not ASCII-8BIT.
+
+ * ruby.c (process_options): refers less to default_external.
+
+Fri Dec 12 11:00:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_feature_p): load path must be expanded.
+ [ruby-dev:37388]
+
+Fri Dec 12 10:28:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rb_version): greps only the line that defines version.
+
+ * version.h (RUBY_VERSION_CODE, RUBY_RELEASE_CODE): removed.
+
+Fri Dec 12 10:20:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * complex.c, rational.c: do not use RUBY_VERSION_CODE.
+
+Fri Dec 12 10:19:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_string_value_ptr, rb_to_id): do not use a side
+ effect expression in RSTRING_PTR.
+
+ * string.c (rb_str_split_m): simplified the argument of
+ RSTRING_LEN.
+
+Thu Dec 11 23:48:00 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/cmath.rb (sqrt): should pass nan to the original method.
+
+Thu Dec 11 21:04:04 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker.rb, lib/rss/maker/0.9.rb, lib/rss/maker/base.rb:
+ RSS::Maker.[] returns a maker class corresponds to passed version.
+
+ * test/rss/test_maker_*.rb: add tests for RSS::Maker.[].
+
+Thu Dec 11 20:05:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_aliases_enc_i): skips default internal.
+
+Thu Dec 11 19:31:45 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit/assertions.rb: extracted from lib/test/unit.rb.
+ lib/test/unit/testcase.rb: ditto.
+ at asakusa.rb. [ruby-core:20014]
+
+Thu Dec 11 19:23:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_io.rb (test_dup_many): extracted from test_dup.
+ test in ruby subprocess. at asakusa.rb. [ruby-dev:35648]
+
+Thu Dec 11 19:16:30 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/pathname.rb (Pathname#=~): undefed. at asakusa.rb.
+ [ruby-core:19690]
+
+Thu Dec 11 13:09:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (reg_enc_error): raise EncodingCompatibilityError for
+ encoding incompatibility. [ruby-core:18600]
+
+ * re.c (rb_reg_prepare_enc): more consistent error message.
+ [ruby-core:18611]
+
+Thu Dec 11 13:36:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (enc_set_default_encoding): allowed to set default
+ encoding.
+
+ * encoding.c (rb_locale_encoding): removed Encoding::LOCALE.
+
+ * encoding.c (rb_enc_set_default_external): ditto.
+
+ * encoding.c (rb_enc_set_default_internal): ditto.
+
+ * encoding.c (rb_enc_set_default_internal): defines internal
+ encoding as nil.
+
+Thu Dec 11 11:11:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/st.h (size_t): needs stddef.h or stdlib.h.
+ [ruby-core:20339]
+
+Thu Dec 11 10:25:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_bignum.rb (TestBignum#test_convert): remove
+ platform dependent call of Process.wait. coverage should be
+ accomplished by other method. [ruby-dev:36062]
+
+Thu Dec 11 10:18:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rexml/document.rb (REXML::Document#write): require
+ rexml/formatters/transitive if transitive flag is on. a patch
+ from akira yamada in [ruby-dev:36230]. fix #553
+
+ * lib/rexml/element.rb (REXML::Element#write): ditto.
+
+ * lib/rexml/formatters/transitive.rb (REXML::Formatters::Transitive#write_element):
+ add hack for IE. [ruby-dev:36230]
+
+Thu Dec 11 02:37:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * math.c (domain_check): should not raise EDOM exception for NaN
+ value if operand is also NaN. affects acos, asin, acosh, atanh,
+ log, log2, log10, sqrt, gamma, lgamma. [ruby-dev:37357]
+
+Thu Dec 11 02:23:51 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open3.rb (Open3.pipeline_start): return an array of threads if a
+ block is not given.
+
+Thu Dec 11 01:48:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_round): should be round
+ to integer. [ruby-dev:37355]
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_divmod): division should
+ be integer. [incompatible] [ruby-dev:37355]
+
+Thu Dec 11 01:21:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (rb_mutex_unlock): shut up warning. a patch from
+ Kazuhiro NISHIYAMA in [ruby-dev:37345]. fix #846
+
+Wed Dec 10 23:58:56 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: avoided warnings on cpp. [ruby-dev:37344]
+
+ * rational.c: ditto.
+
+Wed Dec 10 21:32:02 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker.rb (RSS::Maker.[]): add.
+ Suggested by Akinori MUSHA. Thanks!!! [ruby-dev:37210]
+
+Wed Dec 10 12:56:32 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (enumerator_rewind): If the enclosed object
+ responds to a "rewind" method, call it; cf. [ruby-dev:37268]
+
+Wed Dec 10 12:46:52 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (enumerator_next): Fix a typo: s/rewinded/rewound/.
+
+ * lib/prime.rb (Prime::OldCompatibility#each): Ditto.
+
+Wed Dec 10 11:25:53 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_initialize): raise RegexpError when encoding
+ is dummy encoding. [ruby-dev:37091]
+
+Wed Dec 10 01:28:16 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (win32.obj): depend on headers.
+
+Tue Dec 9 18:35:35 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/single_byte.trans, cp850-tbl.rb, cp852-tbl.rb,
+ cp855-tbl.rb, koi8-r-tbl.rb, koi8-u-tbl.rb, tis-620-tbl.rb:
+ new single-byte transcodings (from Yoshihiro Kambayashi)
+
+ * test/ruby/test_transcode.rb: added tests for the above
+ (from Yoshihiro Kambayashi), small cosmetic fixes
+
+Tue Dec 9 13:33:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each), gc.c (assign_heap_slot),
+ (gc_mark_children), parse.y (vtable_alloc, vtable_free, vtable_add),
+ proc.c (proc_to_s), thread.c (terminate_i, rb_thread_terminate_all),
+ (thread_start_func_2, blocking_region_begin, blocking_region_end),
+ (rb_thread_kill), thread_pthread.c (native_thread_create),
+ (ubf_pthread_cond_signal), vm.c (check_env, thread_free), vm_dump.c
+ (vm_env_dump_raw, vm_stack_dump_each, vm_thread_dump_state),
+ (vm_call0): use void pointer for %p.
+
+ * cont.c (fiber_status), template/insns.inc.tmpl (ruby_vminsn_type),
+ vm_insnhelper.h (BOP): ISO C forbids comma at end of enumerator
+ list.
+
+ * vm_insnhelper.c (check_cfunc): use function pointer.
+
+Tue Dec 9 13:23:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/curses/curses.c (curses_use_default_colors): add new
+ method. a patch from Giancarlo F Bellido
+ <support at coaxialhost.com> in [ruby-core:20434].
+
+ * ext/curses/curses.c (curses_tabsize_set): ditto.
+
+ * ext/curses/curses.c (curses_tabsize_get): ditto.
+
+Tue Dec 9 12:08:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * .gdbinit (rp): fixed typo for T_STRUCT.
+
+Tue Dec 9 11:50:46 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * pack.c (pack_pack): fixed [ruby-dev:37295].
+ Array#pack always has returned an US-ASCII string when
+ the given format ended with 'u', 'M' or 'm'.
+
+Tue Dec 9 03:21:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * mkconfig.rb: fix for continued lines. based on a patch from
+ Marcus Rueckert <darix AT opensu.se> at [ruby-core:20420].
+
+Tue Dec 9 00:54:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot (package): enc.mk in snapshot is dummy and should
+ not deal with objects. [ruby-core:20422]
+
+Tue Dec 9 00:17:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend (clean-srcs): split out from clean.
+
+Mon Dec 8 23:34:18 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * pack.c (pack_pack): fixed odd act of 'm*', 'M*', and 'P*'.
+ just ignores '*' in these cases.
+ [ruby-dev:37289]
+
+Mon Dec 8 18:31:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (pack_pack): fixed length for odd length string.
+ [ruby-dev:37283]
+
+Mon Dec 8 11:28:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options): added version, copyright, usage, yydebug,
+ syntax to --dump option.
+
+Mon Dec 8 11:15:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options): source-encoding option.
+
+Mon Dec 8 10:32:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (set_option_encoding_once): dry.
+
+ * ruby.c (proc_options): checks extra argument for -E/--encoding.
+
+Sun Dec 7 23:47:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (LIBPATHFLAG): use numbered specifier if RPATHFLAG
+ is set. [ruby-talk:322136]
+
+Sun Dec 7 23:17:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (LIBRUBY_SO): localizes non-public symbols.
+
+ * configure.in (OBJDUMP, OBJCOPY): for dealing with binary files.
+
+Sun Dec 7 17:44:06 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open3.rb (Open3.capture3): renamed from Open3.poutput3.
+ (Open3.capture2): renamed from Open3.poutput2.
+ (Open3.capture2e): renamed from Open3.poutput2e.
+
+Sun Dec 7 11:48:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open3.rb (Open3.poutput3): :binmode option implemented.
+ (Open3.poutput2): ditto.
+ (Open3.poutput2e): ditto.
+
+Sat Dec 6 18:33:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot (package): added RM and CP. [ruby-dev:37288]
+
+Sat Dec 6 17:51:35 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * pack.c (pack_pack): 'u0' is not special differently from 'm0'.
+
+Sat Dec 6 14:35:06 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * pack.c (pack_pack): set US-ASCII and CODERANGE_7BIT
+ when quoted-printable ('M') and base64 ('m').
+ [ruby-dev:37284]
+
+ * pack.c (pack_unpack): ditto.
+
+Fri Dec 5 22:56:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_make_exception): single argument to raise may be
+ string compatible object.
+
+Fri Dec 5 21:45:45 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_{to_s,inspect}): performance improvement.
+
+Fri Dec 5 21:42:44 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: inspect should not depend on to_s.
+
+Fri Dec 5 21:18:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_truncate): return
+ integer if no optional argument given. [incompatible]
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_floor): ditto.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_ceil): ditto.
+
+Fri Dec 5 19:06:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open3.rb (Open3.pipeline_start): new method.
+ (Open3.pipeline): ditto.
+
+Fri Dec 5 18:55:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (run_exec_dup2): !save is false if Qnil.
+
+Fri Dec 5 18:07:32 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_read, rb_w32_write, rb_w32_isatty): check
+ whether fd is valid.
+
+Fri Dec 5 13:05:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (rb_iseq_parameters): proc arguments are always optional.
+
+ * proc.c (get_proc_iseq, rb_proc_parameters): ditto.
+
+Fri Dec 5 12:38:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_set_sequence): uses rb_compile_warning() for
+ warning at compilation time.
+
+Fri Dec 5 12:35:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (ruby_iseq_compile, ruby_iseq_translate_threaded_code),
+ (ruby_insns_name_array, ruby_iseq_build_from_ary): prefixed with
+ ruby_.
+
+ * iseq.c (ruby_iseq_load, ruby_insn_make_insn_table): ditto.
+
+Fri Dec 5 10:01:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_cmp_m): fixed rdoc. pointed out by <Thomas
+ C. Mitchell AT gmail.com> at [ruby-talk:321967]
+
+Fri Dec 5 07:58:30 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_binwrite): arg.offset should be updated after retry.
+
+Fri Dec 5 03:29:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_get_load_path): returns the load path without
+ touching.
+
+ * load.c (rb_feature_provided): new function to return the loading
+ path in addition to rb_provided().
+
+ * load.c (search_required): sets path if loading.
+
+ * variable.c (autoload_provided): load paths are expanded to check
+ if loading.
+
+ * variable.c (autoload_node): keeps autoload mark while loading.
+ [ruby-core:20235]
+
+ * variable.c (rb_const_get_0): loops while autoload mark is set.
+
+Fri Dec 5 01:37:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_read): ERROR_BROKEN_PIPE is not a real error
+ at this point.
+
+ * io.c (pipe_open): use rb_w32_spawn() instead of rb_w32_pipe_exec()
+ to use our own redirection scheme.
+
+Fri Dec 5 01:35:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (sym_to_proc): use hidden object.
+
+Fri Dec 5 01:19:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): propagate taint status from format string to
+ result string.
+
+Fri Dec 5 00:34:10 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (run_exec_dup2): need to sort by reverted order when
+ restoring fds.
+
+Fri Dec 5 00:17:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (sym_to_proc): caches Symbol procs, based on a patch from
+ Shumpei Akai <admin AT flexfrank.net>. [ruby-dev:37265]
+
+Thu Dec 4 23:29:34 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (waitpid): fix bug of checking child slot.
+
+ * win32/win32.c (FindChildSlotByHandle): new.
+
+Thu Dec 4 23:24:05 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open3.rb (Open3.poutput3): new method.
+ (Open3.poutput2): ditto.
+ (Open3.poutput2e): ditto.
+
+Thu Dec 4 23:02:13 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * spec/default.mspec: follows changes in rubyspec project.
+ inherits configurations from ruby.1.9.mspec.
+
+Thu Dec 4 22:13:55 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/ruby/test_complex.rb: added some tests.
+
+ * test/ruby/test_rational.rb: ditto.
+
+Thu Dec 4 19:56:20 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open3.rb (Open3.popen3): simplified.
+ (Open3.popen_run): extracted from Open3.popen3.
+ (Open3.popen2): new method.
+ (Open3.popen2e): new method.
+ (Open3.pipeline_rw): new method.
+ (Open3.pipeline_r): new method.
+ (Open3.pipeline_w): new method.
+ (Open3.pipeline_run): new private method.
+
+Thu Dec 4 19:16:28 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (check_exec_fds): resolve cascaded child fd reference.
+
+Thu Dec 4 16:58:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rubygems/validator.rb (Gem#remove_leading_dot_dir): make
+ this method private. a patch from okkez in [ruby-dev:37245]
+
+Thu Dec 4 16:19:18 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_read_nonblock):
+ OpenSSL::SSL::SSLSocket should implement read_nonblock. a patch
+ from Aaron Patterson in [ruby-core:20277]. fix: #814 [ruby-core:20241]
+
+Thu Dec 4 16:16:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/gserver.rb: fixed type in sample code. a report from Oleg
+ Puchinin.
+
+Thu Dec 4 14:54:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rubygems/local_remote_options.rb (Gem#add_update_sources_option):
+ little documentation fix. a patch from okkez. [ruby-dev:37271]
+
+Thu Dec 4 13:56:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/curses/curses.c (window_getch): avoid ISPRINT() macro which
+ has an issue with OpenSolaris. [ruby-core:20189]
+
+ * ext/curses/curses.c (curses_getch): no ISPRINT(). [ruby-core:20294]
+
+ * signal.c (ruby_signal): EINVAL from sigaction(2) is not a bug.
+
+Thu Dec 4 11:40:56 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (inspect_enumerator): Implement #inspect.
+ [ruby-dev:37248]-[ruby-dev:37263]
+
+Thu Dec 4 11:38:40 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * vm_method.c (rb_obj_respond_to): Remove a duplicated rdoc
+ comment and fix a markup error.
+
+Thu Dec 4 06:04:16 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk/menu.rb: TkOptionMenubutton.new fails to treat
+ 'parent' and 'variable' options on a Hash argument.
+
+Thu Dec 4 05:06:47 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: bug fix. use ::RubyVM instead of ::VM
+ [ruby-list:45676]
+
+ * ext/tk/tcltklib.c: update RELEASE_DATE
+
+Thu Dec 4 01:37:47 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nurat_{to_s,inspect}): provides better representation
+ for in-finite imag part.
+
+Thu Dec 4 01:22:41 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (f_signbit): NaN may be signed value.
+
+Wed Dec 3 23:59:32 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (EXEC_OPTION_DUP2_CHILD): defined.
+ (check_exec_redirect_fd): check :in, :out and :err.
+ (check_exec_redirect): check [:child, fd].
+ (check_exec_fds): validate EXEC_OPTION_DUP2_CHILD array.
+ (run_exec_dup2_child): new function.
+ (rb_run_exec_options): call run_exec_dup2_child.
+
+Wed Dec 3 22:54:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (expr): keyword_not can continue across newline.
+ [ruby-core:20252]
+
+Wed Dec 3 22:40:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (simple_default_value): returns simplest assignment only.
+ [ruby-core:20237]
+
+Wed Dec 3 21:30:06 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (check_exec_redirect): accept :in, :out, :err as redirect
+ target.
+
+Wed Dec 3 21:18:27 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/ruby/test_rational.rb: revert.
+
+Wed Dec 3 14:48:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/tk/tcltklib.c (ip_ruby_cmd, ip_invoke_with_position): must
+ not access internal union directly. [ruby-list:45670]
+
+Wed Dec 3 12:24:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_getc, rb_io_readchar): documentation correction from
+ Emiel van de Laar. [ruby-core:20212]
+
+ * ext/stringio/stringio.c (strio_readchar): ditto.
+
+Wed Dec 3 09:26:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rexml/xpath.rb (REXML::XPath.first): apply documentation
+ patch from Ken Bloom in [ruby-core:20213].
+
+ * lib/rexml/xpath.rb (REXML::XPath.each): ditto.
+
+Wed Dec 3 02:56:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_rational.rb: add a test.
+
+Wed Dec 3 02:53:24 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_range.rb: add a test.
+
+Wed Dec 3 02:26:07 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_string.rb: add some tests.
+
+Wed Dec 3 02:04:21 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/pty/pty.c (Init_pty): fix typo.
+
+Tue Dec 2 19:22:13 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open3.rb (Open3.popen3): merge hash options if given.
+
+Tue Dec 2 15:31:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/net/protocol.rb (Net::BufferedIO#rbuf_fill): use
+ read_nonblock instead of sysread wrapped by timeout to boost
+ performance. a patch from Aaron Patterson in [ruby-core:20191].
+ fix #806
+
+Mon Dec 1 23:23:52 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * set 1.9.1-p5000 into version number. [ruby-dev:36998]
+
+Mon Dec 1 15:48:47 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * signal.c (register_sigaltstack): no need to define on non-sigaltstack
+ platform.
+
+Mon Dec 1 12:00:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (rb_fiber_start): calls with exact argument number.
+ [ruby-core:20088]
+
+Sun Nov 30 21:41:10 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * man/rake.1: new manual page
+
+Sun Nov 30 18:01:50 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/test_regexp.rb (TestRegexp#test_parse_curly_brace):
+ now accepts quantifier on anchors again by r20391.
+
+Sat Nov 29 23:56:44 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * man/irb.1 (EXAMPLES): new section
+
+Sat Nov 29 19:19:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regparse.c (is_invalid_quantifier_target): Perl and old Ruby
+ accepts quantifier on anchors. [ruby-core:20161]
+
+Sat Nov 29 18:28:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_getaddrinfo): should have updated for
+ Mac OS X. a patch from Shumpei Akai in [ruby-dev:37234]
+
+Sat Nov 29 00:18:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * cont.c (fiber_alloc): separate allocation and initialization.
+ allow subclass to override #initialize. [ruby-core:20086]
+
+Fri Nov 28 18:31:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_s_getaddrinfo): refactored to remove
+ code duplication regarding getaddrinfo.
+
+Fri Nov 28 17:52:26 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/forwardable.rb: should be usable def_single_delegator for
+ Class and Module.
+
+Fri Nov 28 13:19:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (simple_default_value): extracts simplest default
+ argument value.
+
+ * iseq.c (rb_iseq_parameters): returns parameter list.
+
+ * proc.c (get_proc_iseq, get_method_iseq): handles ifunc and
+ bmethod.
+
+ * proc.c (rb_proc_parameters, rb_method_parameters): added
+ Proc#parameters and Method#parameters. [ruby-core:19759]
+
+Fri Nov 28 02:18:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_DoDivmod): bigdecimal
+ division (including modulo) should raise ZeroDivisionError as
+ integer division. [incompatible]
+
+Fri Nov 28 00:12:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flodivmod): floating point division should raise
+ ZeroDivisionError as integer division. [incompatible]
+
+Thu Nov 27 23:54:37 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (gc_mark): still needs to check stack depth during GC.
+
+ * gc.c (stack_check): ditto.
+
+Thu Nov 27 21:41:29 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * strftime.c (rb_strftime): should add padding for %%.
+
+Thu Nov 27 16:32:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * signal.c (register_sigaltstack): stores alt stack for debug
+ purpose.
+
+Thu Nov 27 16:12:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * signal.c (ruby_sigaction_t): added.
+
+Thu Nov 27 15:59:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (ruby_stack_check): no check if using sigaltstack.
+
+ * signal.c (ALT_STACK_SIZE): default minimum size is insufficient
+ for method calls.
+
+ * signal.c (sigsegv): handles stack overflow if possible.
+
+ * thread.c (ruby_thread_stack_overflow): helper function to raise
+ sysstack_error.
+
+ * thread_pthread.c (ruby_stack_overflowed_p): checks for stack
+ overflow.
+
+Thu Nov 27 10:40:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_div2): should return
+ Integer for #div operation.
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_div2): should raise
+ ZeroDivisionError if divisor is zero. [ruby-dev:37207]
+
+Wed Nov 26 23:15:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * strftime.c (STRFTIME): use rb_strftime() recursively, instead of
+ platform's strftime().
+
+Wed Nov 26 22:46:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (VpException): bigdecimal zero
+ division should raise FloatDomainError if mode
+ VP_EXCEPTION_ZERODIVIDE is set. [ruby-dev:37204]
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_mode): should handle
+ VP_EXCEPTION_ZERODIVIDE.
+
+Wed Nov 26 15:16:07 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * ext/gdbm/gdbm.c (rb_gdbm_nextkey): fix memory leak.
+
+Wed Nov 26 03:17:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_to_r): raise exception
+ for nan/inf conversion. [ruby-dev:37187] fix #793
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_to_i): ditto.
+
+Wed Nov 26 03:00:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (VpAlloc): avoid ALLOCA_N() to avoid
+ segmentation fault caused by (insanely) long decimal values.
+ [ruby-dev:37189] fix #794
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_dump, BigDecimal_to_i,
+ BigDecimal_to_f, BigDecimal_to_s, BigDecimal_split,
+ BigDecimal_inspect): ditto.
+
+ * ext/bigdecimal/bigdecimal.c (VpToString): small performance
+ improvement.
+
+Wed Nov 26 00:26:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * strftime.c (STRFTIME): should add padding for %[xXrR] etc.
+ [ruby-dev:37185] fix: #792
+
+Tue Nov 25 16:26:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_times): taint (and untrust) status should be
+ inherited by "ary * 0". [ruby-dev:37024]
+
+Tue Nov 25 15:54:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * strftime.c (rb_strftime): should not swallow incomplete
+ formatter, e.g. "%E". [ruby-dev:37170] fix: #787
+
+ * strftime.c (rb_strftime): clear flags before processing unknown
+ formatter, e.g. "%i". [ruby-dev:37180]
+
+Tue Nov 25 10:35:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * strftime.c (rb_strftime): "%^P" should convert to upper case.
+ [ruby-dev:37180]
+
+Tue Nov 25 07:51:18 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * strftime.c (FMT): use "%0d" formatter for zero padding, not "%.d".
+ [ruby-dev:37168] fix: #768
+
+ * strftime.c (rb_strftime): %s to use zero padding by default.
+ [ruby-dev:37180]
+
+Tue Nov 25 03:37:42 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tkextlib/blt/tabset.rb,
+ ext/tk/lib/tkextlib/blt/tabnotebook.rb:
+ fix many bugs. Now, those work properly.
+
+Tue Nov 25 03:26:04 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_step): treat infinite step specially.
+ [ruby-dev:37157] fix: #781.
+
+Tue Nov 25 01:23:25 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/format.rb (strftime): ignores '_' flag for %[LN].
+
+Tue Nov 25 00:08:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_fork): stops the timer thread during fork.
+ [ruby-dev:37117]
+
+ * thread.c (rb_thread_start_timer_thread): timer thread needs
+ system_working to be set.
+
+Mon Nov 24 23:27:28 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * strftime.c (rb_strftime): The # flag should work with %a, %A, %b,
+ %B, and %h. [ruby-dev:37162]
+
+ * test/ruby/test_time.rb (test_strftime): ditto.
+
+Mon Nov 24 23:16:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * signal.c (register_sigaltstack): should not add external
+ variable (with some cosmetic changes). [ruby-dev:37158]
+
+Mon Nov 24 22:57:25 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * strftime.c (rb_strftime): A width specifier for %t and %n should
+ work. [ruby-dev:37160]
+
+ * test/ruby/test_time.rb (test_strftime): ditto.
+
+Mon Nov 24 22:07:07 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * strftime.c (rb_strftime): The precision of %0N should be 9.
+ [ruby-dev:37156]
+
+ * test/ruby/test_time.rb (test_strftime): ditto.
+
+Mon Nov 24 21:38:23 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * strftime.c (rb_strftime): The default precision should be 1, not
+ 0. [ruby-dev:37155]
+
+ * test/ruby/test_time.rb (test_strftime): ditto.
+
+Mon Nov 24 19:53:47 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (inspect): changed again.
+
+Mon Nov 24 18:35:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/time.rb: r20251 reverted. The patched behavior do not round
+ trip. [ruby-core:19988]
+
+Sun Nov 23 16:04:05 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * signal.c (default_handler, Init_signal): compile error if
+ USE_SIGALTSTACK is not defined.
+
+Sun Nov 23 00:04:14 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * signal.c (ALT_STACK_SIZE): 4KB is not enough on Mac OS X.
+ Uses SIGSTKSZ.
+
+Sat Nov 22 21:29:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/test_method.rb (test_default_accessibility): test case for
+ [ruby-dev:37124].
+
+Sat Nov 22 18:24:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_file_world_writable_p): should return nil for non
+ world-writable files.
+
+Sat Nov 22 10:31:25 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tkextlib/blt.rb, ext/tk/lib/tkextlib/blt/vector.rb:
+ fix NameError bug.
+
+Sat Nov 22 03:41:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/pty/pty.c (get_device_once): abandon asynchronous exception
+ that might cause serious problem if a program terminated early.
+ asynchronous exception is a very bad thing anyway. use
+ Process.waitpid(pid) or PTY.check(pid) to poll program
+ termination. if PTY.check is called with optional second
+ argument being true, it raises an exception same as one from
+ previous behavior. [incompatible] fix: [ruby-core:19583]
+
+Fri Nov 21 22:24:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/curses/curses.c (curses_escdelay_set): support ESCDELAY. a
+ patch from Giancarlo F Bellido <support at coaxialhost.com> in
+ [ruby-core:19961].
+
+Fri Nov 21 22:17:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (usage): -W description updated. [ruby-core:19858]
+
+Fri Nov 21 21:50:54 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * signal.c (register_sigaltstack): use alternative stack for
+ SIGSEGV to avoid uncaught stack overflow. based on a patch from
+ Hiro Yoshioka <hyoshiok at miraclelinux.com> in [ruby-dev:37134].
+ [ruby-dev:36993]
+
+Fri Nov 21 16:06:54 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm.c (thread_free): th->vm may be NULL when pthread_create
+ failed for ENOMEM. [ruby-dev:37095]
+
+Thu Nov 20 07:33:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/logger.rb (Logger): should handle the case that cvs/svn do
+ not expand $Id keyword. [ruby-core:19991]
+
+Thu Nov 20 07:27:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/minitest/unit.rb (MiniTest::Assertions#capture_io): adjust
+ indentation to shut up warning. [ruby-core:19993]
+
+Wed Nov 19 17:48:05 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/syck/rubyext.c (rb_syck_mktime): return DateTime for a value
+ out of range of Time. [ruby-core:19919]
+
+Wed Nov 19 14:14:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * node.h (NOEX_MODFUNC): should be include NOEX_PRIVATE.
+ [ruby-dev:37124]
+
+Wed Nov 19 03:01:04 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * test/rinda/test_rinda.rb: fixed fails occasionally [ruby-dev:37119].
+ thanks, shinichiro.h.
+
+Wed Nov 19 02:39:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (Init_syserr): moved function definition itself from
+ template/known_errors.inc.tmpl.
+
+Wed Nov 19 01:10:52 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/drb/drb.rb (DRbConn::alive?): fixed NoMethodError problem
+ from NaHi [ruby-dev:37110].
+
+Wed Nov 19 01:05:26 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * cont.c (cont_mark, cont_capture, cont_restore_1): speed up
+ continuation by copying only valid YARV stack. [ruby-dev:37106]
+
+Wed Nov 19 00:03:13 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/time.rb: according to RFC2822, -0000 means local time, +0000
+ means UTC. a patch from Chun Wang. [ruby-core:19578]
+
+Tue Nov 18 23:02:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * proc.c (proc_eq): equivalence check should not done by pointer
+ comparison, but should be based on iseq contents. [ruby-dev:37101]
+
+Tue Nov 18 20:30:08 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/net/ftp.rb (Net::FTP#open_socket): SOCKSsocket is obsolete.
+ a patch from Alan Johnson <alan.wayne.johnson at gmail.com> in
+ [ruby-core:19982].
+
+Tue Nov 18 16:18:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/logger.rb (ProgName): fixed for svn, based on a patch from
+ Nobuhiro IMAI at [ruby-dev:37108].
+
+Tue Nov 18 15:56:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#read_request_line):
+ use possessive match for path retrieval to avoid huge recursion
+ for insanely long path.
+
+Tue Nov 18 15:50:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_desc): re might be NULL.
+
+ * regerror.c (onig_error_code_to_format): message updated.
+
+Tue Nov 18 09:42:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser::make_switch): makes default
+ conversion to splat. [ruby-list:45645]
+
+Mon Nov 17 18:05:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend (LIBS): fixed for disable-shared. [ruby-dev:37103]
+
+Mon Nov 17 11:12:24 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * bin/erb: remove -K option.
+
+Mon Nov 17 02:19:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (LIBRUBYARG_STATIC): fixed for --enable-rpath.
+
+Sat Nov 15 22:46:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * re.c (rb_reg_regsub): returns -1 unless ascii as well as
+ rb_enc_ascget(). [ruby-dev:37097]
+
+Sat Nov 15 22:23:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (LDSHARED): do not suppress debug info if higher debug
+ level is given, on cygwin and mingw.
+
+Fri Nov 14 20:27:46 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * README.EXT, README.EXT.ja, vm_exec.c, vm_insnhelper.c: update
+ filenames.
+
+Thu Nov 13 11:31:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_barrier_wait): gets rid of recursive deadlock.
+
+Thu Nov 13 06:08:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_barrier_{new,wait,release,destroy}): use Mutex so that
+ circular requires fail with deadlock. [ruby-core:19821]
+
+Wed Nov 12 07:16:01 2008 David Flanagan <david@think32>
+
+ * ruby.c (set_internal_encoding_once): fix typo in error string
+
+Wed Nov 12 03:30:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_{external,locale}_str_new_cstr): optimized
+ versions for literal strings.
+
+Wed Nov 12 03:28:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_require_safe): destroys barrier after successfully
+ loaded, to get rid of loading same library again. [ruby-core:19798]
+
+ * thread.c (rb_barrier_wait): can not wait destroyed barrier.
+
+ * thread.c (rb_barrier_destroy): destroys barrier so that no longer
+ waited.
+
+Tue Nov 11 23:02:27 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * man/ruby.1 (RUBYOPT): wrote which option can appear.
+ (--yydebug): wrote "do not use".
+ (--dump): wrote "do not use".
+
+Tue Nov 11 21:22:28 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/uri/generic.rb (URI::Generic#check_path): REL_PATH should a
+ symbol. [ruby-core:19805]
+
+Tue Nov 11 20:49:29 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * configure.in: fix SEGV on Mac OS X 10.5.3 with pthread.
+ a patch from Wataru Kimura in Bug #193 [ruby-core:17333].
+
+Tue Nov 11 20:39:27 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (inspect): reverted the previous change.
+
+Tue Nov 11 17:35:25 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_accept): secure fd before accept because if
+ error causes in securing, cannot restore the state of accepted
+ socket.
+ fixed [ruby-core:19728]
+
+Tue Nov 11 14:40:40 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * test/ruby/test_transcode.rb: unnecessary setup method
+ (setup_really_needed?) removed
+
+Tue Nov 11 14:25:25 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/single_byte.trans, macgreek-tbl.rb, macroman-tbl.rb,
+ macromania-tbl.rb, macturkish-tbl.rb, macukraine-tbl.rb,
+ ibm437-tbl.rb, ibm852-tbl.rb, ibm855-tbl.rb, ibm857-tbl.rb,
+ ibm860-tbl.rb, ibm861-tbl.rb, ibm862-tbl.rb, ibm863-tbl.rb,
+ ibm865-tbl.rb, ibm866-tbl.rb, ibm869-tbl.rb, ibm775-tbl.rb:
+ new single-byte transcodings (from Yoshihiro Kambayashi)
+
+ * test/ruby/test_transcode.rb: added tests for the above
+ (from Yoshihiro Kambayashi)
+
+Tue Nov 11 13:20:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_to_r): moved from
+ bigdecimal/util, converted into C. [ruby-dev:36805]
+
+Tue Nov 11 07:55:57 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (inspect): changed the format.
+
+Mon Nov 10 17:34:50 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * test/sdbm/test_sdbm.rb (TestSDBM#test_index): Reflect the method
+ name change from #index to #key and remove a duplicated test
+ method.
+
+Mon Nov 10 10:50:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator.delegating_block): should not refer
+ DelegateClass specific @delegate_dc_obj. a patch from Erik
+ Hollensbe in [ruby-core:19671].
+
+Mon Nov 10 09:54:21 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (ifs_open_socket): should retry without proto_buffer
+ if cannot find the suitable protocol. a patch from Heesob Park.
+ fixed [ruby-core:19713]
+
+Sun Nov 9 13:04:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * struct.c (rb_struct_initialize_m): avoid unnecessary array
+ allocation.
+
+Sun Nov 9 04:10:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_dump.c (control_frame_dump): suppresses finished method name.
+
+Sun Nov 9 00:30:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (thread_timer): checks working flags again.
+
+Sun Nov 9 00:02:01 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/session/pstore.rb: fix indentation.
+
+Sat Nov 8 23:47:45 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/session.rb (FileStore): use marshalized data.
+
+ * test/cgi/session_dir: add a session directory in test.
+
+ * test/cgi/test_cgi_session.rb: add a test.
+
+Sat Nov 8 21:57:03 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/session.rb: remove debug code.
+
+Sat Nov 8 21:33:53 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/session.rb: fix indentation.
+
+Sat Nov 8 18:11:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#do_CONNECT):
+ use #bytesize instead of #size. a patch submitted from
+ raspberry lemon in [ruby-core:18571].
+
+ * lib/webrick/httpauth/digestauth.rb, lib/webrick/httpproxy.rb,
+ lib/webrick/httprequest.rb, lib/webrick/httpservlet/cgi_runner.rb,
+ lib/webrick/httpservlet/abstract.rb, lib/webrick/httpresponse.rb,
+ lib/webrick/httpservlet/cgihandler.rb, lib/webrick/utils.rb: ditto.
+
+Sat Nov 8 17:31:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_ungetc): ungetc position should
+ not be changed from 1.8. [ruby-core:19632]
+
+Sat Nov 8 17:15:08 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser#make_switch): 1.9 Symbols respond
+ to :match. a patch from keith cascio, <keith at ucla.edu>.
+ [ruby-core:19730]
+
+Sat Nov 8 12:10:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/gdbm/gdbm.c (fgdbm_index): make #index warn like Hash.
+ [ruby-dev:37039]
+
+ * ext/sdbm/init.c (Init_sdbm): typo fixed. [ruby-dev:37039]
+
+Sat Nov 8 07:07:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * configure.in: detect stdio buffer pointers for uClibc. a patch
+ from Brian Candler <B.Candler at pobox.com> in [ruby-core:12020].
+ [ruby-core:19713]
+
+Sat Nov 8 06:51:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/dbm/dbm.c (fdbm_index): make #index warn like Hash.
+
+ * ext/dbm/dbm.c (fdbm_key): new method.
+
+ * ext/sdbm/init.c: ditto.
+
+Sat Nov 8 06:20:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/curses/curses.c: curses encoding should obey locale.
+
+ * ext/curses/curses.c (curses_getch): 1.9 getch should return one
+ character string for single byte string. wchar_t support may
+ follow in the future.
+
+Sat Nov 8 05:46:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/io.h (rb_io_t): added write_lock to serialize.
+ [ruby-core:19668]
+
+ * gc.c (gc_mark_children): mark write_lock.
+
+ * gc.c (rb_gc_call_finalizer_at_exit): Mutex also needs to be
+ deferred.
+
+ * io.c (io_fflush, io_binwrite, fptr_finalize): serializes writing.
+
+Sat Nov 8 05:31:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * safe.c (safe_setter): add warning for $SAFE=3.
+
+Sat Nov 8 01:48:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (rb_thread_create_timer_thread): do not wait never
+ coming signal if failed to create timer thread.
+
+ * thread_pthread.c (native_cond_timedwait): returns error code.
+
+ * thread_pthread.c (thread_timer): typo fixed.
+
+Sat Nov 8 01:14:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (thread_timer, rb_thread_create_timer_thread):
+ handshakes properly.
+
+Fri Nov 7 22:51:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * inits.c (rb_call_inits): do not repeat.
+
+Fri Nov 7 22:46:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (thread_timer): initializes mutex each time.
+
+Fri Nov 7 21:23:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_win32.c (thread_start_func_1): use already gotten stack info.
+
+Fri Nov 7 12:26:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/irb.rb (IRB::Irb#eval_input): remove extra @context.prompt_i.
+ [ruby-core:19718]
+
+Fri Nov 7 11:55:30 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * nkf.c: update to r1.188. fixes for 16bit environment.
+
+Fri Nov 7 07:43:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_timer): pthread_cond_timedwait returns ETIMEDOUT
+ when timed out.
+
+Fri Nov 7 07:32:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/yaml/rubytypes.rb: support Rational and Complex as 1.8
+ does. a patch from Hiroshi Moriyama in [ruby-dev:36899].
+
+Fri Nov 7 07:12:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (thread_timer): uses pthread_cond_timedwait always
+ instead of pthread_kill.
+
+Fri Nov 7 06:58:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (Init_String): remove Symbol#===. [ruby-dev:37026]
+
+Fri Nov 7 04:02:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_timer): uses timedwait on cygwin.
+
+Fri Nov 7 02:00:12 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/rexml/entity.rb (unnormalized): do not call
+ document.record_entity_expansion if document is nil.
+ see <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=502535>.
+ Thanks, Naohisa Goto.
+
+ * test/rexml/test_document.rb: ditto.
+
+Fri Nov 7 01:24:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot: binary encoding spec is no longer needed in 1.9.
+
+Thu Nov 6 22:21:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_stop_timer_thread): terminates timer thread
+ immediately.
+
+Thu Nov 6 21:21:46 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (fole_s_connect, fole_initialize,
+ folevariant_initialize): check argument type of WIN32OLE.connect,
+ WIN32OLE.new, WIN32OLE_VARIANT.new.
+
+ * test/win32ole/test_win32ole.rb (test_s_new_exc, test_s_connect_exc):
+ ditto.
+
+ * test/win32ole/test_win32ole_variant.rb (test_s_new_exc): ditto.
+
+ * test/win32ole/test_win32ole_method.rb: add assertion of
+ WIN32OLE_METHOD.new.
+
+Tue Nov 4 13:08:01 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/test/unit.rb (Test::Unit.setup_argv): now can specify ``-xname''
+ instead of ``-x name''.
+
+Tue Nov 4 08:00:00 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * test/zlib/test_zlib.rb(test_readchar): compare in same type.
+
+Tue Nov 4 03:28:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_join): do not repeat self in a recursive array.
+ [ruby-dev:37019]
+
+Tue Nov 4 01:56:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_mutex_synchronize): fixed prototype.
+
+ * thread.c (rb_mutex_synchronize): fixed function name.
+
+Mon Nov 3 16:32:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * missing.h: needs RUBY_EXTERN instead of extern for mswin.
+
+Mon Nov 3 13:01:13 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * array.c (rb_ary_take_first_or_last): renamed rb_ary_partial more
+ appropriately.
+ (ary_take_pos_flags): new enum. makes the fourth argument of
+ rb_ary_take_first_or_last more descriptive.
+ (rb_ary_partial): renamed rb_ary_partial0 more appropriately.
+ takes a new parameter klass for what class to instantiate.
+
+Mon Nov 3 13:00:26 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * range.c (rb_range_beg_len): rb_raise takes C values as arguments.
+ [BUG] ranges turned into other value in a message of RangeError.
+
+Mon Nov 3 00:36:44 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_win32ole_event.rb: rename test class.
+
+ * test/win32ole/test_win32ole_variant_outarg.rb: add in order
+ to use ADO instead of Internet Explorer.
+ remove test/win32ole/test_win32ole_variant_with_ie.rb.
+
+ * test/win32ole/orig_data.csv: ditto.
+
+Sun Nov 2 23:08:08 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_err_in_callback.rb: add teardown.
+
+Sun Nov 2 22:12:41 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_event_free): invoke IConnectionPoint::Unadvise
+ before invoking IConnectionPoint::Release.
+
+ * test/win32ole/test_win32ole_event.rb, test/win32ole/err_in_callback.rb,
+ test/win32ole/test_err_in_callback.rb: Use ActiveX Data Object
+ Library instead of InternetExplorer.
+
+Sun Nov 2 22:06:55 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * win32/Makefile.sub: add RUNRUBYOPT. [ruby-dev:37009]
+
+Sun Nov 2 16:41:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/zlib/zlib.c (Init_zlib): defines readbyte instead redefining
+ readchar.
+
+Sat Nov 1 07:09:40 2008 Eric Hodel <drbrain@segment7.net>
+
+ * gem_prelude.rb: Don't require rubygems/defaults.rb.
+
+Fri Oct 31 21:58:50 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/converter.rb (RSS::Converter): use String#encode.
+
+Fri Oct 31 21:28:14 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/webrick/httpauth/digestauth.rb
+ (WEBrick::HTTPAuth::DigestAuth#initialize): fix typo.
+
+Fri Oct 31 18:51:42 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/test_array.rb (test_array_subclass): test for r20076.
+
+Fri Oct 31 18:42:19 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * array.c (ary_partial0): recovers the mistakenly changed feature at r19723.
+ Array#[m,n] had returned an Array even for an instance of a
+ subclass.
+
+Fri Oct 31 18:05:05 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/single_byte.trans, maccroatioan-tbl.rb,
+ maccyrillic-tbl.rb, maciceland-tbl.rb: new single-byte
+ transcodings (from Yoshihiro Kambayashi)
+
+ * test/ruby/test_transcode.rb: added tests for the above
+ (from Yoshihiro Kambayashi)
+
+Fri Oct 31 12:51:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dir.c (dir_globs): need taint check. reported by steve
+ <oksteev at gmail.com>
+
+Fri Oct 31 12:42:45 2008 wanabe <s.wanabe@gmail.com>
+
+ * array.c (rb_ary_decrement_share): fix to work recycling
+ shared-array without the following. [ruby-dev:36991]
+
+ * array.c (ary_make_substitution): don't recycle substitution array.
+
+Fri Oct 31 12:27:52 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * spec/default.mspec: supports that the build directory != srcdir.
+
+Fri Oct 31 11:35:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_set_default_internal): no alias "internal" if
+ default internal is not set. [ruby-dev:37000]
+
+Fri Oct 31 08:16:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): delays setting safe level.
+ [ruby-dev:36997]
+
+Thu Oct 30 21:32:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * array.c (rb_ary_permutation): hide temporal array.
+
+Thu Oct 30 14:45:45 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/single_byte.trans: refactoring to make it easier
+ to add more transcodings (with Yoshihiro Kambayashi)
+
+ * enc/trans/iso-8859-1-tbl.rb: new file to avoid having to
+ treat ISO-8859-1 as special
+
+Thu Oct 30 14:10:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): templates a, A, Z should propagate encoding
+ of original strings. templates b, B, h, H brings ASCII-8BIT to
+ the result.
+
+Thu Oct 30 10:34:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (moreswitches): splits option string and passes arguments.
+
+ * ruby.c (proc_options): checks if allowed in RUBYOPT.
+
+ * ruby.c (process_options): allows long style options in RUBYOPT.
+
+ * ruby.c (load_file_internal): ditto in shebang. [ruby-dev:36979]
+
+Thu Oct 30 09:31:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_locale_encoding): makes an alias for locale.
+ [ruby-dev:36976]
+
+ * encoding.c (rb_enc_set_default_external): ditto for external.
+
+ * encoding.c (rb_enc_set_default_internal): ditto for internal.
+
+Thu Oct 30 03:30:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (load_file_internal): should not set script encoding to
+ ASCII-8BIT.
+
+ * ruby.c (load_file_internal): do not auto convert scripts even
+ when default_internal is set. [ruby-core:19579]
+
+Thu Oct 30 02:20:33 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * array.c (rb_ary_sort_bang): remove SEGV when replacing array with
+ embedded one during sort. [ruby-dev:36983]
+
+ * test/ruby/test_array.rb (test_sort!): add tests for above.
+
+Thu Oct 30 01:44:23 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_array.rb: add some tests.
+
+Thu Oct 30 01:32:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * array.c (rb_ary_splice): remove redundant check.
+
+Thu Oct 30 01:24:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (rb_str_cmp): fix condition which always returned true
+ because ENCODING_GET returns unsigned long.
+
+Thu Oct 30 01:10:32 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_array.rb (test_permutation): add a test that replaces
+ array during permutation.
+
+Wed Oct 29 23:31:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_check_dummy_enc): new function to check dummy
+ encoding.
+
+ * string.c (rb_str_upcase_bang): case conversion functions should
+ not be applicable to strings in dummy encoding. [ruby-dev:36985]
+
+Wed Oct 29 23:57:29 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * array.c (rb_ary_sort_bang): replacing array during sort broke
+ invariant of array. [ruby-dev:36983]
+
+Wed Oct 29 21:06:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_rewind): should reset fptr->readconv if it's
+ available.
+
+ * io.c (more_char): clear readconv at EOF.
+
+ * test/ruby/test_file.rb: should not read after EOF. use rewind
+ instead.
+
+Wed Oct 29 20:45:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/webrick/utils.rb (start_server): provide a reference to log of
+ webrick.
+
+ * test/webrick/test_httpproxy.rb, test/webrick/test_httpauth.rb,
+ test/webrick/test_cgi.rb, test/webrick/test_httpserver.rb,
+ test/webrick/test_server.rb, test/webrick/test_filehandler.rb: use
+ webrick log as an assertion message.
+
+Wed Oct 29 16:41:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (pack_pack): set encoding from packing string and UTF-8 for
+ "U". [ruby-core:19590]
+
+Wed Oct 29 15:50:00 2008 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
+
+ * complex.c (imp1, imp2): should declare type.
+ [BUG] at IA-64
+
+Wed Oct 29 14:36:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (revision.h): have to be updated daily or by non-trivial
+ commits.
+
+Wed Oct 29 13:18:02 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * README, README.ja: Update the portability section.
+
+Wed Oct 29 13:02:17 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * configure.in (rb_cv_lib_xpg4_needed): Drop legacy FreeBSD
+ support regarding libxpg4. Those old versions of FreeBSD
+ shipped with the library don't have a working pthread library
+ anyway.
+
+Wed Oct 29 11:50:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (dln-a-out): cannot make shared library nor work with
+ ELF. [ruby-core:19571]
+
+Wed Oct 29 11:00:25 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_open): shouldn't seek here.
+
+ * win32/win32.c (rb_w32_write): write to the end of the file when
+ FAPPEND is specified.
+
+Wed Oct 29 09:30:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (load_file_internal): cache common interned IDs.
+
+Wed Oct 29 00:43:39 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: uses macro in declarations.
+
+Wed Oct 29 00:26:00 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_open): need to seek to the end of the file when
+ O_APPEND is specified.
+
+Wed Oct 29 00:08:05 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * math.c (rb_math_{atan2,cos,cosh,hypot,log,sin,sinh,sqrt}): added.
+
+ * complex.c: follows the above change.
+
+Tue Oct 28 23:29:06 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (kanji_convert): output unicode chars.
+ [ruby-dev:36957]
+
+ * ext/nkf/nkf-utf8/nkf.c (numchar_getc): increase buffer size.
+ reported and patched at [ruby-dev:36957] by mame.
+
+Tue Oct 28 23:03:46 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/test_proc.rb: filled all patterns for testing
+ vm_yield_setup_args.
+
+Tue Oct 28 23:05:35 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: continues to support canonicalization *unofficially*
+ for an odd library mathn for the time being (only 1.9.x).
+ since grand mathn must be very very special library for us.
+
+ * rational.c: ditto.
+
+ * ext/mathn/*/*: follow the above changes.
+
+Tue Oct 28 21:31:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (parser_yylex): check EOF explicitly.
+
+Tue Oct 28 20:59:12 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (extract_binmode): new function to extract binmode/textmode
+ options from hash.
+
+ * io.c (rb_io_extract_modeenc): use above function.
+
+ * io.c (rb_io_s_pipe): recognize binmode/textmode options.
+
+Tue Oct 28 20:15:49 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (make_readconv): now can specify the size of cbuf.
+
+ * io.c (read_all, appendline, io_getc, rb_io_ungetc): follow above
+ change.
+
+Tue Oct 28 19:00:51 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_pipe_exec): internal fds should be always
+ binmode.
+
+Tue Oct 28 17:21:18 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * tool/make-snapshot.rb: merged from ruby_1_9_1.
+
+Tue Oct 28 16:56:31 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * gem_prelude.rb: merged from ruby_1_9_1 branch.
+ considers --program-suffix and prefix configure options.
+
+ * lib/rubygems/defaults.rb: ditto.
+
+ * test/rubygems/test_gem.rb (@default_dir_re): ditto.
+
+Tue Oct 28 16:13:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot: use String#bytesize.
+
+Tue Oct 28 09:51:48 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bootstraptest/test_thread.rb: ignore some exceptions.
+ [ruby-dev:36951]
+
+Tue Oct 28 09:19:40 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (RUNRUBY): now ruby requires something from
+ gem_prelude, so need to set library path.
+
+Mon Oct 27 22:29:11 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * vm_insnhelper.c (vm_yield_setup_args): supports optional parameters.
+ Fixed [ruby-core:19503].
+
+ * vm_insnhelper.c (vm_yield_setup_block_args): a new function. extracted
+ from vm_yield_setup_args.
+
+ * vm_insnhelper.c (vm_yield_setup_block_args_complex): ditto.
+
+ * test/ruby/test_proc.rb: added tests for arguments on a Proc from
+ Kernel#proc called.
+
+Mon Oct 27 20:03:05 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/mathn/complex/complex.c: no need to define rb_cComplex because
+ it's already defined at $(srcdir)/complex.c.
+
+ * ext/mathn/rational/rational.c: no need to define rb_cRational because
+ it's already defined at $(srcdir)/rational.c.
+
+Mon Oct 27 15:58:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (load_file): preserves $.. [ruby-dev:36937]
+
+ * io.c (argf_init): initial value of $. should be 0.
+ see [ruby-dev:36937].
+
+Mon Oct 27 15:38:38 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/minitest/test_mini_test.rb
+ (test_assert_raises_triggered_different): the test failed when a
+ file path in the backtrace contains something except [\w\/\.],
+ e.g. hyphen, Japanese characters or backslash.
+
+ * test/minitest/test_mini_test.rb
+ (test_assert_raises_triggered_subclass): ditto.
+
+Mon Oct 27 15:32:08 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/minitest/test_mini_test.rb: fixed that r19958 made
+ test-all fail when the ruby was built at $(srcdir).
+
+Mon Oct 27 12:04:58 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/ruby/envutil.rb: reverted the changeset 19948 because it
+ concealed unexpected behaviours of ruby.
+
+ * test/ruby/test_io.rb: ditto.
+
+Mon Oct 27 12:02:53 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * ext/nkf/nkf.c (rb_nkf_convert): should specify type of variable.
+
+Mon Oct 27 11:34:56 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/minitest/test_mini_test.rb (test_filter_backtrace):
+ fixed failure on Ruby built at out of $(srcdir).
+
+ * test/minitest/test_mini_test.rb (test_Filter_backtrace_unit_starts):
+ ditto.
+
+Mon Oct 27 10:02:47 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (read_all): the 3rd argument maybe Qnil.
+
+Mon Oct 27 01:29:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/nkf/test_nkf.rb: add a test for [ruby-dev:36909].
+
+Mon Oct 27 01:05:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf.c (rb_nkf_convert): avoid GC.
+ reported in [ruby-dev:36909] and patched [ruby-dev:36941] by mame.
+
+Sun Oct 26 21:28:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/json/test_json.rb: remove dependency on permutation gem.
+
+Sun Oct 26 19:18:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (blocking_region_{begin,end}): declared as inline.
+
+ * util.c (freedtoa): used only when MULTIPLE_THREADS is not defined.
+
+ * win32/win32.c (rb_w32_pipe): serial is DWORD.
+
+ * ext/etc/etc.c (sGroup): getgrent may not be available.
+
+Sun Oct 26 18:11:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/wait/{extconf.rb,wait.c}: needs sys/ioctl.h for fcntl on
+ cygwin.
+
+Sun Oct 26 18:18:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gem_prelude.rb: disables debug and verbose flags to suppress failure
+ messages. interpolation does not occur inside single quotes.
+
+Sun Oct 26 18:42:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/envutil.rb (assert_in_out_err): disables builtin rubygems
+ to get rid of the interference.
+
+ * test/ruby/test_io.rb (ruby): ditto.
+
+Sun Oct 26 13:30:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (read_all): use the given buffer to read when needs readconv.
+ based on the patch by wanabe <s.wanabe AT gmail.com> at
+ [ruby-dev:36931].
+
+Sun Oct 26 07:57:35 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems*: Update to RubyGems 1.3.1 r1909.
+
+Sun Oct 26 07:35:56 2008 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/minitest/unit.rb: Imported minitest 1.3.0 r4429.
+ * test/minitest/*: ditto.
+
+Sun Oct 26 02:16:29 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * configure.in ($MANTYPE): followed ruby.1, which had moved.
+
+ * instruby.rb (:man): ditto.
+
+ * mdoc2man.rb: fixed for the case Xr with 2 arguments.
+
+Sun Oct 26 01:42:45 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * man/irb.1: new manual page.
+
+Sun Oct 26 00:11:48 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * man/ruby.1: moved into man/. added some descriptions.
+
+ * man/goruby.1: new file.
+
+ * instruby.rb (:man): followed ruby.1.
+
+Sat Oct 25 20:05:22 2008 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c (gc_profile_result): bug fix. The millisecond is 1/1000.
+
+Sat Oct 25 11:12:40 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * ruby.c (usage): updated the description of -E option.
+
+Sat Oct 25 09:54:10 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Fixed a bug in read_to_char() that would slurp
+ whole files if the encoding was invalid. It will now read
+ up to 10 bytes ahead to find a valid character boundary or
+ give up. [ruby-core:19465]
+
+ * test/csv/test_features.rb, test/csv/test_table.rb, test/csv/test_row.rb:
+ Loosened some tests to check for a compatible? Encoding instead
+ of an exact Encoding. [ruby-core:19470]
+
+Sat Oct 25 07:42:49 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc*: Update to RDoc 2.2.2 r192.
+
+Sat Oct 25 04:00:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/us_ascii.c (us_ascii_mbc_enc_len): made static. a patch by
+ Tadashi Saito <shiba AT mail2.accsnet.ne.jp> at [ruby-dev:36916]
+
+ * signal.c (signal_buff): made static. a patch by Tadashi Saito
+ <shiba AT mail2.accsnet.ne.jp> at [ruby-dev:36915]
+
+ * util.c (freedtoa): made static to get rid of name clash. a patch by
+ Tadashi Saito <shiba AT mail2.accsnet.ne.jp> at [ruby-dev:36913]
+
+ * util.c (ruby_dtoa): added prefix, ditto.
+
+Sat Oct 25 03:43:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (lambda): need to adjust lpar_beg for both of the parser and
+ ripper.
+
+Sat Oct 25 01:29:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/mathn/rational/rational.c: undef duplicated macro definition
+ first to shut up the warning.
+
+ * ext/mathn/rational/rational.c (rb_rational_new_mathn): specify
+ omitted return value.
+
+Sat Oct 25 00:14:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_sample): fixed sizes and randomness.
+
+Fri Oct 24 23:04:42 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * configure.in (sitedir): considers --program-prefix and
+ --program-suffix.
+ (vendordir): ditto.
+ (rubyhdrdir): ditto.
+
+ * mkconfig.rb (CONFIG["rubylibdir"]): ditto.
+
+ * win32/Makefile.sub: ditto.
+
+ * instruby.rb (:rdoc): ditto.
+
+ * lib/rdoc/ri/paths.rb (RDoc::RI::Paths): ditto.
+
+Fri Oct 24 22:59:27 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_array.rb (test_sample): add tests for size of
+ returned array and randomness.
+
+Fri Oct 24 21:50:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * id.h, template/id.h.tmpl (enum ruby_method_ids): reordered.
+
+Fri Oct 24 21:19:45 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * ext/mathn/rational.c: change several global functions.
+
+Fri Oct 24 21:05:38 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/html.rb: allow symbolized key.
+
+ * test/cgi/test_cgi_tag_helper.rb: add a test.
+
+Fri Oct 24 20:54:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (exts): renamed to get rid of the existent directory.
+
+Fri Oct 24 20:45:41 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * ext/mathn/rational.c: change several global functions to static
+ function.
+
+Fri Oct 24 19:57:19 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_dump): should have removed commented out
+ unnecessary code. [ruby-cvs:27131]
+
+Fri Oct 24 19:16:36 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * id.h (enum ruby_method_ids): ISO C forbids comma at end of
+ enumerator list.
+
+Fri Oct 24 18:29:00 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/mathn.rb: moved into ext/mathn/rational/rational.c and
+ ext/mathn/complex/complex.c.
+ * ext/mathn: new mathn ext-libraries.
+
+Fri Oct 24 18:21:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_array.rb (TestArray#test_join): should restore
+ global variable after the test. [ruby-dev:36896]
+
+ * test/ruby/test_hash.rb (TestHash#test_to_s): ditto.
+
+Fri Oct 24 17:43:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (lambda): need to adjust lpar_beg for ripper as well.
+ [ruby-dev:36702]
+
+Fri Oct 24 16:13:12 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb (read_multipart): change field value as String
+ from StringIO or Tempfile when multipart parse except file field.
+ add files method that can get uploaded files. [ruby-dev:36547]
+
+ * test/cgi/test_cgi_multipart.rb: fix the test for core.rb.
+
+Fri Oct 24 14:22:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (ext): split out the target for extension library.
+
+ * common.mk (encs): depends on enc and trans.
+
+Fri Oct 24 10:23:24 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_signal.rb (TestSignal#test_exit_action): Thread
+ may terminate before sysread. [ruby-dev:36835]
+
+Thu Oct 23 22:06:23 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * distruby.rb: removed. "make dist" uses tool/make-snapshot for the 1.9
+ series. distruby.rb has been no longer used.
+
+Thu Oct 23 17:30:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (rb_class_instance_methods): rdoc fixed. [ruby-core:19458]
+
+Thu Oct 23 16:19:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/irb/init.rb (IRB.load_modules): catch LoadError explicitly.
+ a patch from Daniel Berger <Daniel.Berger at qwest.com> in
+ [ruby-core:19451]. fix [ruby-core:19450]
+
+Thu Oct 23 16:16:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_s_getservbyport): check if the port range.
+ [ruby-core:19460]
+
+Thu Oct 23 14:08:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_s_getservbyname): unuse unnecessary
+ object.
+
+ * ext/socket/socket.c (sock_s_getservbyport): the port should be
+ converted before the proto so that the #to_int of the former cannot
+ alter the latter.
+
+Thu Oct 23 10:55:08 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_dump): use \u{ff} escape for UTF-8 encoding
+ string.
+
+Thu Oct 23 09:26:22 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_s_getservbyport): cast to get rid of
+ warning.
+
+Thu Oct 23 08:06:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c (sock_s_getservbyport): port should be
+ network byte order. a patch from Dave Thomas in [ruby-core:19454].
+
+Thu Oct 23 01:26:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_conv_enc_opts): new function to convert with
+ specifying ecflags and ecopts.
+
+ * ext/zlib/zlib.c (gzfile_newstr): specify ecflags and ecopts for
+ conversion using above function.
+
+ * ext/zlib/zlib.c (gzfile_newstr): use own rb_econv_t for dummy
+ encoding to handling stateful encoding (e.g. iso-2022-jp).
+ [ruby-dev:36857]
+
+ * ext/zlib/zlib.c (gzfile_getc): ditto.
+
+Thu Oct 23 01:24:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (create_tmpsrc): get rid of side effects.
+
+Thu Oct 23 00:10:01 2008 Koichi Sasada <ko1@atdot.net>
+
+ * cont.c: separate data structure between rb_fiber_t and
+ rb_context_t (rb_fiber_t includes rb_context_t).
+ rb_fiber_t has double linked list of fibers in same threads.
+
+Wed Oct 22 17:25:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (pipe_open): remove unnecessary flush before fork.
+ a patch from Kazuhiro NISHIYAMA <zn at mbf.nifty.com>
+ in [ruby-dev:36840].
+
+Wed Oct 22 16:27:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_yield_setup_args): should not drop arguments
+ corresponding to default parameters.
+
+Wed Oct 22 14:59:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (f_larglist): should not allow semicolon separated local
+ variable declarations if formal argument list is not surrounded
+ by parentheses, mostly because semicolon outside of parentheses
+ appears to terminate the expression.
+
+Wed Oct 22 14:52:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_external_str_new_with_enc): no implicit strlen call.
+ [ruby-dev:36854]
+
+ * string.c (rb_external_str_new_cstr): new function to create
+ string from external NUL terminated C string.
+
+ * string.c (rb_locale_str_new_cstr): ditto.
+
+ * ext/readline/readline.c: now use rb_locale_str_new_cstr().
+
+ * test/sdbm/test_sdbm.rb (TestSDBM#test_delete_with_block):
+ deleted key to the block may be a copy of specified key.
+
+ * test/dbm/test_dbm.rb (TestDBM#test_delete_with_block): ditto.
+
+Wed Oct 22 13:16:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (unescape_escaped_nonascii): back out the last change on
+ the function. [ruby-dev:36818]
+
+Wed Oct 22 07:09:19 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/zlib/zlib.c (rb_gzreader_ungetc): should be able to unget
+ Fixnum.
+
+ * ext/stringio/stringio.c (strio_ungetc): should convert unget
+ string.
+
+ * ext/stringio/stringio.c (strio_ungetbyte): new method.
+
+Wed Oct 22 05:46:25 2008 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/vm.h: write a comment.
+
+ * common.mk: remove vm.h from any rules.
+ vm.h is not needed on this version.
+
+ * vm_core.h: ditto.
+
+Wed Oct 22 05:39:39 2008 Koichi Sasada <ko1@atdot.net>
+
+ * parse.y (arg_concat_gen): concat target node should be NODE_ARRAY.
+ [ruby-core:19413]
+
+ * bootstraptest/test_method.rb: add tests.
+
+Wed Oct 22 00:29:13 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * test/rinda/test_rinda.rb (test_core_03_notify): Fixed test failures
+ [ruby-dev:36837].
+
+Wed Oct 22 00:22:06 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_external_str_new_with_enc): wrong condition to
+ calculate strlen().
+
+ * ext/readline/readline.c: add encoding support.
+
+Tue Oct 21 23:12:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_write): should convert writing
+ string to the encoding of the buffer.
+
+ * hash.c (rb_any_hash): typo fixed.
+
+ * ext/zlib/zlib.c (rb_gzwriter_write): oops, IO string conversion
+ need to be done by to_s.
+
+Tue Oct 21 22:38:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (open_key_args): should adjust argc, argv in struct
+ foreach_arg.
+
+Tue Oct 21 21:52:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/zlib/zlib.c (rb_gzwriter_write): conversion should be done
+ using to_str, not to_s.
+
+ * ext/zlib/zlib.c (rb_gzwriter_write): need proper conversion
+ according to gz encoding.
+
+ * ext/zlib/zlib.c (rb_gzreader_ungetc): convert string encoding
+ before unget.
+
+Tue Oct 21 21:33:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit.rb (assert_nothing_raised): raise with backtrace.
+
+Tue Oct 21 20:12:19 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit.rb (assert_nothing_raised): set backtrace.
+
+Tue Oct 21 18:17:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/zlib/zlib.c: remove obsolete prototype macros.
+
+ * ext/zlib/zlib.c (struct gzfile): add encoding field to gzfile
+ structure.
+
+ * ext/zlib/zlib.c (rb_gzreader_getc): now works on characters.
+
+ * ext/zlib/zlib.c (rb_gzreader_getbyte): new method to retrieve
+ single byte.
+
+ * ext/zlib/zlib.c (rb_gzreader_readbyte): ditto.
+
+ * ext/zlib/zlib.c (rb_gzreader_each_byte): renamed from each_char
+
+ * ext/zlib/zlib.c (rb_gzreader_ungetc): allow unget strings.
+
+ * ext/zlib/zlib.c (rb_gzreader_ungetbyte): renamed from ungetc.
+
+Tue Oct 21 13:28:42 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * io.c, include/ruby/intern.h (rb_io_ascii8bit_binmode): externed.
+
+ * ext/socket/socket.c (init_sock): use rb_io_ascii8bit_binmode()
+ instead of rb_io_binmode().
+
+Tue Oct 21 13:17:39 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * mdoc2man.rb: moved into tools/.
+
+ * instruby.rb: followed the change of mdoc2man.
+
+Tue Oct 21 11:34:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (strip_glibc_option, map_charset): check if
+ encoding is a string. based on the patch by Hiroshi Moriyama at
+ [ruby-dev:36811].
+
+ * test/iconv/test_basic.rb (test_invalid_arguments): added tests.
+
+Tue Oct 21 10:40:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_file_open_internal): should initialize fmode before using.
+
+Tue Oct 21 08:56:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regparse.c (parse_char_class): CCV_SB is only for single
+ byte. [ruby-dev:36786]
+
+Tue Oct 21 01:49:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_extract_modeenc): plain rb/wb should set ASCII-8BIT
+ to the external_encoding.
+
+ * io.c (rb_file_open_internal): ditto.
+
+ * io.c (NEED_WRITECONV): no conversion when the external_encoding
+ is ASCII-8BIT.
+
+ * io.c (do_writeconv): skip ASCII-8BIT.
+
+Tue Oct 21 00:51:59 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_ascii8bit_binmode): renamed from rb_io_binmode.
+ (rb_io_binmode): don't change encoding conversion.
+ (rb_io_binmode_m): call rb_io_ascii8bit_binmode.
+
+Mon Oct 20 21:19:00 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb (read_multipart): file's encoding is ascii-8bit
+ from file field of multipart form.
+
+Mon Oct 20 20:16:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/zlib/zlib.c (Init_zlib): add getbyte as an alias to getc.
+ [ruby-dev:36801]
+
+Mon Oct 20 17:31:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (exc_equal): should not compare recursively.
+ [ruby-dev:36796]
+
+Mon Oct 20 16:48:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * include/ruby/ruby.h (ExportStringValue): new macro to convert
+ string in internal encoding to external to export.
+
+ * string.c (rb_str_export): new function to do conversion to
+ external encoding.
+
+ * ext/sdbm/init.c: encoding conversion support.
+
+ * ext/dbm/dbm.c: ditto.
+
+Mon Oct 20 15:42:02 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_locale_str_new): new function to convert string
+ from locale to internal encoding.
+
+Mon Oct 20 09:47:13 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/runner.rb: search srcdir/test/arg at first to find test/ruby
+ directory when "ruby" is specified.
+
+Mon Oct 20 08:20:01 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: support Encoding.default_internal.
+
+ * ext/tk/tcltklib.c: ditto.
+
+ * ext/tk/extconf.rb: improve the strategy for searching Tcl/Tk headers.
+
+Mon Oct 20 00:57:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit.rb (Test::Unit.setup_argv): call given block for
+ filtering files.
+
+ * test/runner.rb: search srcdir/test/arg, srcdir/arg.
+
+ * bin/testrb: show usage if no files given.
+
+Sun Oct 19 21:19:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (srcs): removed ID_H_TARGET.
+
+ * tool/generic_erb.rb: always overwrites if no if-change option.
+ sends the result to stdout if no output option.
+
+ * template/id.h.tmpl: shows which token differs.
+
+Sun Oct 19 18:15:15 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/single_byte.trans: adding WINDOWS-wwww encodings
+ (wwww = 874/1250/1251/1253/1254/1255/1256/1257)
+ (contributed by Yoshihiro Kambayashi)
+
+ * enc/trans/windows-wwww-tbl.rb: 8 new files
+ (contributed by Yoshihiro Kambayashi)
+
+ * test/ruby/test_transcode.rb: added test_windows_wwww
+ (contributed by Yoshihiro Kambayashi)
+
+Sun Oct 19 07:37:13 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/cmath.rb (log2,cbrt,frexp,ldexp,hypot,erf,erfc,gamma,lgamma):
+ should be also provided as module function. [ruby-dev:36787]
+
+Sun Oct 19 07:25:08 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * keywords, lex.c.src, opt_insn_unif.def, opt_operand.def: moved rarely changed
+ input files for code generators into defs/ directory.
+
+ * Makefile.in (lex.c): followed keywords and lex.c.src.
+
+ * common.mk (parser.o): followed keywords.
+ (INSNS): followed opt_*.def
+
+ * tools/instruction.rb: followed opt_*.def.
+
+Sun Oct 19 12:28:01 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * test/csv/*: Renamed tc_* files to test_* to fit in within Ruby's
+ testing process.
+
+Sun Oct 19 00:15:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit.rb (assert_nothing_thrown): don't intern.
+
+Sat Oct 18 14:40:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_sadded): remove newly defined singleton method
+ that should not exist after exception handling. [ruby-dev:36569]
+
+Sat Oct 18 14:27:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (opt_block_arg): allow trailing comma after usual
+ arguments. not after block argument.
+
+Sat Oct 18 13:30:53 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_external_str_new): a new function to convert from
+ external encoding to internal encoding. if something went
+ wrong, it returns a string with the external encoding.
+
+ * string.c (rb_external_str_new_with_enc): same as above besides
+ you can specify the source encoding.
+
+ * ruby.c (ruby_set_argv): use rb_external_str_new()
+
+ * ruby.c (set_arg0, ruby_script): ditto.
+
+Sat Oct 18 04:08:18 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#initialize): now Tempfile.new takes
+ keyword arguments to open(). [ruby-dev:36756]
+
+Sat Oct 18 17:10:10 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * tool/transcode-tblgen.rb: added set_valid_byte_pattern
+ to reduce coupling between table generation script and
+ specific encodings.
+
+ * enc/trans/single_byte.trans: using set_valid_byte_pattern
+
+Sat Oct 18 16:39:39 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c: in transcode_search_path, eliminated a warning
+ on cygwin about pathlen potentially not being initialized
+
+Sat Oct 18 13:40:27 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit.rb (assert_nothing_thrown): implemented.
+
+Sat Oct 18 01:33:22 2008 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * common.mk: use added options for generic_erb.rb.
+
+Sat Oct 18 00:47:51 2008 wanabe <s.wanabe@gmail.com>
+
+ * array.c: don't recycle shared-array while sort!.
+
+Fri Oct 17 22:04:38 2008 wanabe <s.wanabe@gmail.com>
+
+ * array.c: recycle shared-array when it isn't referenced.
+
+Fri Oct 17 20:29:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_initialize_m): specify ARG_ENCODING_NONE instead of
+ ARG_ENCODING_FIXED for Regexp.new("", nil, "n"). [ruby-dev:36761]
+
+ * test/ruby/test_regexp.rb (TestRegexp#test_initialize): test
+ updated.
+
+Fri Oct 17 19:46:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/ifchange, win32/ifchange.bat: --timestamp option added.
+
+ * tool/generic_erb.rb: --timestamp, --output and --if-change options
+ added.
+
+Fri Oct 17 18:33:12 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * array.c (ary_resize_capa): renamed RESIZE_CAPA.
+
+Fri Oct 17 18:16:51 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/bigdecimal/test_bigdecimal.rb (TestBigDecimal#test_sqrt_bigdecimal):
+ test updated. a patch from TAKANO Mitsuhiro <takano32 at jus.or.jp> in
+ [ruby-dev:36736].
+
+Fri Oct 17 18:14:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (uncommon.mk): ignores failures at loading.
+
+ * test/rubygems/gemutilities.rb (RubyGemTestCase#build_rake_in):
+ get rid of interference with other tests.
+
+Fri Oct 17 18:06:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * transcode.c (str_transcode0): String#encode without argument now
+ behave as if :undef => :replace, :invalid => :replace specified.
+
+ * transcode.c (rb_econv_prepare_opts): should preserve options in
+ any case.
+
+Fri Oct 17 11:48:18 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * ext/socket/socket.c (init_sock): sockets should be binmode.
+
+ * test/socket/test_tcp.rb (test_encoding): ditto.
+
+Fri Oct 17 10:26:13 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * tool/insns2vm.rb: remove -Kn option in shebang line because it's
+ inconsistent with -Ks commandline option in common.mk.
+
+Fri Oct 17 01:26:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (transcode_restartable0): in_pos and out_pos never be
+ NULL, now.
+
+Fri Oct 17 00:39:19 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/test/unit.rb: sort the order of executing tests.
+
+Fri Oct 17 00:24:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_binmode): reset encoding conversion.
+
+Fri Oct 17 00:16:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (rb_getc, rb_io_fread, rb_io_fwrite, rb_read_pending):
+ remove deprecated functions which do not work. [ruby-dev:36697]
+
+Thu Oct 16 23:48:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * common.mk (TESTS): removed to re-enable test for minitest.
+
+Thu Oct 16 23:37:11 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (iseq_set_sequence): fix memory leak.
+
+Thu Oct 16 23:27:27 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit.rb (assert_equal): avoid incompatible character
+ encodings error.
+
+Thu Oct 16 23:23:27 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit.rb (assert_equal): failure message changed.
+
+Thu Oct 16 22:52:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit: removed test/unit.
+
+ * lib/test/unit.rb: new compatibility layer using minitest.
+
+ * bin/testrb: use above.
+
+ * test/runner.rb: ditto.
+
+Thu Oct 16 14:34:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk, enc/depend (enc, trans): targets for sources.
+
+Thu Oct 16 14:30:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * instruby.rb (lib): installs all files other than README etc.
+
+Thu Oct 16 09:48:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_initialize_m): changed the message to clarify the
+ third option argument is now ignored. [ruby-dev:36753]
+
+Thu Oct 16 08:14:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (proc_options): no warning when default_external already
+ set by -E.
+
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_rubyopt):
+ put -K after -E to set script encoding.
+
+Thu Oct 16 06:20:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_transcode.rb (TestTranscode#test_errors):
+ String#encode now works without any argument. [ruby-dev:36740]
+
+Wed Oct 15 23:48:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * .gdbinit (rp): REGEXP handling fixed.
+
+ * string.c (rb_str_rindex_m): need not to call rb_enc_check on
+ regexp.
+
+ * re.c (unescape_escaped_nonascii): try ASCII-8BIT encoding for
+ broken strings.
+
+Wed Oct 15 23:11:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/delegate.rb (DelegateClass): restored 1.8 behavior for
+ DelegateClass as well. [ruby-dev:36739]
+
+Wed Oct 15 22:19:14 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * array.c (RESIZE_CAPA): check whether len is longer than capacity.
+
+ * array.c (rb_ary_compact_bang): resize ary before changing capacity.
+ fixed [ruby-dev:36704]
+
+Wed Oct 15 16:57:30 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * version.h (RUBY_DESCRIPTION): remove unnecessary space.
+
+Tue Oct 14 23:18:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator): simplified and restored 1.8
+ behavior. [ruby-dev:35986]
+
+Tue Oct 14 21:50:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (TESTS): skips minitest by default, since it interferes
+ with test/unit.
+
+Tue Oct 14 21:36:29 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (load_conv_function51932): check
+ having IMultiLanguage2 or IMultiLanguage. [ruby-dev:36716]
+
+ * ext/win32ole/extconf.rb: ditto.
+
+Tue Oct 14 20:45:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (Init_IO): $FILENAME and $* must be read-only. [ruby-dev:36698]
+
+ * variable.c (*_getter, *_setter, *_marker): made public.
+
+ * include/ruby/ruby.h (rb_gvar_*_{getter,setter,marker}): declared.
+
+Tue Oct 14 20:32:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/single_byte.trans (transcode_tblgen_singlebyte): renamed
+ from transcode_tblgen_windows.
+ (transcode_tblgen_iso8859): use transcode_tblgen_singlebyte.
+
+Tue Oct 14 19:32:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (process_options): -U should be allowed in RUBYOPT
+ environment variable. [ruby-dev:36720]
+
+Tue Oct 14 14:11:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options): -U can be followed by other options.
+
+Tue Oct 14 13:30:30 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/single_byte.trans: added windows-1252
+
+ * enc/trans/windows-1252-tbl.rb: new file
+ (contributed by Yoshihiro Kambayashi)
+
+ * tool/transcode-tblgen.rb: listed windows-1252 as '1byte'
+
+ * test/ruby/test_transcode.rb: added test_windows_1252
+ (contributed by Yoshihiro Kambayashi)
+
+Tue Oct 14 12:22:32 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_variable.rb (TestVariable#test_variable): add
+ a test of [ruby-dev:36698].
+
+Tue Oct 14 11:14:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * transcode.c (str_transcode0): should not raise error when
+ default_internal is not set. [ruby-core:19309]
+
+Tue Oct 14 11:14:26 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * lib/net/pop.rb: check for invalid APOP timestamp. (CVE-2007-1558)
+ [ruby-dev:36631]
+
+ * test/net/pop/test_pop.rb: ditto.
+
+Tue Oct 14 09:39:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (set_internal_encoding_once): check double contradicted
+ specification of the encoding from command line.
+
+ * ruby.c (set_external_encoding_once): ditto.
+
+Tue Oct 14 08:28:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (parser_yylex): allow reserved word to be keyword argument.
+
+Mon Oct 13 19:07:52 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * parse.y (token_info_pop): show source filename. [ruby-dev:36710]
+
+Mon Oct 13 08:59:08 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (load_conv_function51932): support
+ CP51932 on cygwin and mingw32. thanks to arton.
+
+ * test/win32ole/test_win32ole.rb (test_cp51932): ditto.
+
+Mon Oct 13 07:54:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (proc_options): add -U command line option to specify
+ utf-8 as default_internal.
+
+Mon Oct 13 07:42:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * transcode.c (str_transcode0): String#encode() with no encoding
+ specified transcode the string into Encoding.default_internal.
+ inspired by [ruby-core:19298].
+
+Sun Oct 12 18:00:18 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (set_ole_codepage, ole_cp2encoding,
+ ole_wc2mb, ole_vstr2wc, ole_mb2wc): support CP51932 (only mswin32).
+
+ * test/win32ole/test_win32ole.rb: ditto.
+
+Sun Oct 12 12:03:38 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c, vm_insnhelper.h (ruby_vm_redefined_flag): apply optimization
+ patch proposed by Paul Brannan. [ruby-core:19171]
+
+Sun Oct 12 09:46:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * strftime.c (rb_strftime): suppressed warnings on cygwin.
+
+Sat Oct 11 19:49:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_prepare): use utf-8 encoding directly.
+
+Sat Oct 11 10:20:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (CLEANINGS): uses escaped form tabs to preventing the
+ confusion. [ruby-talk:317345]
+
+Sat Oct 11 08:51:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rake.rb (Rake::Application#standard_exception_handling): removed
+ unnecessary SystemExit, and exits with false instead of system
+ dependent value. [ruby-talk:317330]
+
+Sat Oct 11 03:54:05 2008 Koichi Sasada <ko1@atdot.net>
+
+ * parse.y: optimize 'for' statement when one variable given.
+
+ * benchmark/bm_loop_for.rb: added.
+
+ * benchmark/bm_loop_times.rb: modified.
+
+Sat Oct 11 12:09:05 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv/csv.rb: Added support for Encoding::default_internal.
+ * lib/csv/csv.rb: Switched to new Hash syntax.
+
+Fri Oct 10 22:16:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (comment_at_top): needed for ripper too.
+
+Fri Oct 10 22:07:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby.h: updated macros for headers. [ruby-core:19275]
+
+Fri Oct 10 19:21:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (magic_comment_encoding): warns when ignored.
+
+ * parse.y (parser_magic_comment): replaces '-' with '_'.
+
+ * parse.y (parser_yylex): allows magic comments indented and the
+ second line or later.
+
+Fri Oct 10 17:26:50 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/ext/parser/parser.c (JSON_parse_string):
+ associate encoding.
+
+Fri Oct 10 10:18:21 2008 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/test/*: reverted back to test/unit.
+ * test/test/*: ditto
+ * lib/minitest/*: Imported minitest 1.3.0 r4333.
+
+Fri Oct 10 03:41:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): check if codepoint for %c is valid.
+ [ruby-dev:36691]
+
+Fri Oct 10 01:55:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (enc_names): minor improvement.
+
+Fri Oct 10 00:21:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (ParseError.filter_backtrace): removes internal
+ backtrace.
+
+Fri Oct 10 00:11:16 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * transcode.c (rb_econv_add_converter): remove unnecessary NULL check.
+
+Thu Oct 9 23:53:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-style.el (ruby-style-c-mode): buffer may not have file
+ name.
+
+Thu Oct 9 23:30:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * process.c (run_exec_dup2): fix resource leak.
+
+Thu Oct 9 23:19:02 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * process.c (rb_run_exec_options): fix resource leak.
+
+Thu Oct 9 22:13:58 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_module.rb (test_remove_class_variable): add a test
+ for Class#remove_class_variable.
+
+ * test/ruby/test_object.rb (test_remove_instance_variable): add a test
+ for Object#remove_instance_variable.
+
+Thu Oct 9 22:04:38 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * variable.c (rb_mod_remove_cvar): fix r19711.
+
+Thu Oct 9 21:17:50 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/syck/syck.c (syck_lookup_sym): remove reading uninitialized
+ variable.
+
+Thu Oct 9 16:34:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/ext/generator/extconf.rb: fix target.
+
+ * ext/json/ext/parser/extconf.rb: ditto.
+
+Thu Oct 9 14:37:59 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * include/ruby/ruby.h: embeds the elements of an array into its
+ struct RArray for # of elements <= 3.
+
+ * array.c: ditto.
+
+ * gc.c (gc_mark_children): following the change of struct RArray.
+
+ * ext/tk/tcltklib.c (ip_ruby_cmp): ditto.
+
+ * parse.y (coverage): ditto.
+
+ * proc.c (curry): ditto.
+
+ * .gdbinit: ditto.
+
+Thu Oct 9 11:29:33 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (Init_Encoding): new instance method Encoding#names,
+ returns its name and alias names.
+
+ * encoding.c (enc_names): defined for Encoding#names.
+
+ * encoding.c (enc_names_i): defined for enc_names.
+
+Thu Oct 9 08:47:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (rb_thread_wait_fd_rw): should not block by select if
+ there's only one thread living. fixed [ruby-dev:36646].
+
+Wed Oct 8 20:59:52 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_init_cp): initialize WIN32OLE.codepage
+ according to Encoding.default_internal and
+ Encoding.default_external.
+
+Wed Oct 8 17:02:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/lib/json/pure/generator.rb (utf8_to_json):
+ process each unpacked Unicode character.
+
+Wed Oct 8 15:00:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/lib/json/pure/parser.rb
+ (JSON::Pure::Parser#parse_string): force_encoding("UTF-8").
+
+Wed Oct 8 11:56:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb: assert_nothing_thrown,
+ assert_raise, assert_not_equal, assert_no_match, assert_not_nil,
+ assert_not_same are coming back as alias.
+
+Wed Oct 8 11:18:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (autoload_delete, autoload_file): should not delete
+ autoload table, since it may be shared with duplicated modules.
+ [ruby-core:19181]
+
+Wed Oct 8 02:38:28 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * encoding.c (rb_default_internal_encoding): merged a patch from
+ Michael Selig <michael.selig at fs.com.au> in [ruby-core:18985].
+
+ * io.c (rb_io_ext_int_to_encs): ditto.
+
+ * ruby.c (proc_options): support default internal encoding in -E
+ option.
+
+Wed Oct 8 00:03:39 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (today,now): should produce own instances.
+ [ruby-talk:317020]
+
+Tue Oct 7 16:43:51 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/lib/json/pure/generator.rb (utf8_to_json):
+ force_encoding before gsub.
+
+Tue Oct 7 16:35:41 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/lib/json/pure/generator.rb (utf8_to_json):
+ downcase the result of Unicode escape.
+
+Mon Oct 6 16:44:52 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb (CGI::QueryExtension::initialize_query): fix the
+ condition.
+
+ * test/cgi/test_cgi_core.rb: bug fix encoding.
+ thanks to TAKANO Mitsuhiro <takano32 at jus.or.jp> .
+
+ * test/cgi/test_cgi_multipart.rb: temporary comment in.
+
+Mon Oct 6 15:22:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (gc_mark_children): ignores T_ZOMBIE.
+
+Mon Oct 6 12:45:20 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_module.rb (TestModule#_wrap_assertion): add
+ definition. is this really needed?
+
+ * test/ruby/test_module.rb (TestModule#test_mod_constants): should
+ not depend on global Module constants.
+
+Mon Oct 6 12:38:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/test/unit/assertions.rb (Test::Assertions#assert_nothing_raised):
+ should take optional message argument.
+
+Mon Oct 6 12:18:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_comparable): string comparison should be
+ transitive. [ruby-dev:36484]
+
+ * test/ruby/test_m17n_comb.rb (TestM17NComb#test_str_eq): test
+ updated.
+
+Mon Oct 6 09:00:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/bigdecimal/test_bigdecimal.rb (test_sqrt_bigdecimal): test
+ updated. a patch from TAKANO Mitsuhiro <takano32 at jus.or.jp>
+ in [ruby-dev:36669].
+
+Sun Oct 5 23:34:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb ($config_h): now always defines for old libraries.
+
+Sun Oct 5 23:06:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_method.c (rb_mod_modfunc): method undefined in included module
+ may not have nd_body. [ruby-core:18738]
+
+Sun Oct 5 21:28:58 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/rational.rb: resolved conflicts of aliases.
+
+ * lib/mathn.rb: avoided some warnings.
+
+Sun Oct 5 18:51:50 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb: remove debug code introduced by previous change.
+
+Sun Oct 5 17:49:35 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/open-uri.rb (OpenURI.open_uri): set encoding to strio.
+
+Sun Oct 5 17:39:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_set_encoding): defined for
+ StringIO#set_encoding.
+
+Sun Oct 5 11:24:42 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * eval.c: come back definition of environ.
+
+Sun Oct 5 09:19:49 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/utf8tbl.c: update table.
+
+Sat Oct 4 22:50:14 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * dln.c: Ruby no longer supports VMS.
+
+ * error.c: ditto.
+
+ * eval.c: ditto.
+
+ * eval_intern.h: ditto.
+
+ * include/ruby/defines.h: ditto.
+
+ * include/ruby/ruby.h: ditto.
+
+ * io.c: ditto.
+
+ * process.c: ditto.
+
+ * ruby.c: ditto.
+
+ * vms/config.h: removed.
+
+ * vms/vms.h: ditto.
+
+ * vms/vmsruby_private.c: ditto.
+
+ * vms/vmsruby_private.h: ditto.
+
+Sat Oct 4 22:44:23 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * dln.c: Ruby no longer supports Windows CE.
+
+ * eval.c: ditto.
+
+ * include/ruby/defines.h: ditto.
+
+ * include/ruby/win32.h: ditto.
+
+ * ruby.c: ditto.
+
+ * strftime.c: ditto.
+
+ * win32/Makefile.sub: ditto.
+
+ * win32/win32.c: ditto.
+
+ * ext/tk/extconf.rb: ditto.
+
+ * lib/fileutils.rb: ditto.
+
+ * test/fileutils/test_fileutils.rb: ditto.
+
+ * wince/*: removed.
+
+Sat Oct 4 22:35:06 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * dln.c: Ruby no longer supports MacOS 9 or before.
+
+ * eval.c: ditto.
+
+ * eval_intern.h: ditto.
+
+ * ext/extmk.rb: ditto.
+
+ * ext/tk/sample/tkextlib/treectrl/demo.rb: ditto.
+
+ * ext/tk/stubs.c: ditto.
+
+ * file.c: ditto.
+
+ * hash.c: ditto.
+
+ * include/ruby/defines.h: ditto.
+
+ * ruby.c: ditto.
+
+ * signal.c: ditto.
+
+ * vm_core.h: ditto.
+
+Sat Oct 4 22:30:28 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * dln.c: Ruby no longer supports MS-DOS.
+
+ * ext/sdbm/_sdbm.c: ditto.
+
+ * ext/sdbm/sdbm.h: ditto.
+
+ * gc.c: ditto.
+
+ * hash.c: ditto.
+
+ * include/ruby/defines.h: ditto.
+
+ * include/ruby/util.h: ditto.
+
+ * io.c: ditto.
+
+ * process.c: ditto.
+
+ * ruby.c: ditto.
+
+ * strftime.c: ditto.
+
+ * util.c: ditto.
+
+Sat Oct 4 22:14:15 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * djgpp/GNUmakefile.in: removed. Ruby no longer supports djgpp.
+
+ * djgpp/README.djgpp: ditto.
+
+ * djgpp/config.hin: ditto.
+
+ * djgpp/config.sed: ditto.
+
+ * djgpp/configure.bat: ditto.
+
+ * djgpp/mkver.sed: ditto.
+
+ * ext/Setup.dj: ditto.
+
+ * dln.c: removed djgpp supports.
+
+ * file.c: ditto.
+
+ * gc.c: ditto.
+
+ * io.c: ditto.
+
+ * process.c: ditto.
+
+ * ruby.c: ditto.
+
+ * signal.c: ditto.
+
+ * util.c: ditto.
+
+ * vm_core.h: ditto.
+
+ * lib/fileutils.rb: ditto.
+
+ * lib/mkmf.rb: ditto.
+
+ * ext/socket/socket.c: ditto.
+
+ * test/fileutils/test_fileutils.rb: ditto.
+
+ * test/ruby/test_env.rb: ditto.
+
+ * test/ruby/test_path.rb: ditto.
+
+Sat Oct 4 21:59:39 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * x68/_dtos18.c: removed. Ruby no longer supports human68k.
+
+ * x68/_round.c: ditto.
+
+ * x68/fconvert.c: ditto.
+
+ * x68/select.c: ditto.
+
+ * ext/Setup.x68: ditto.
+
+ * missing/x68.c: ditto.
+
+ * dln.c (dln_find_exe_r): removed human68k supports.
+ (dln_find_1): ditto.
+
+ * lib/mkmf.rb: ditto.
+
+ * ext/extmk.rb (Init_ext): ditto.
+
+ * ext/socket/socket.c (init_sock): ditto.
+
+ * gc.c (GC_MALLOC_LIMIT): ditto.
+ (rb_setjmp, rb_jmpbuf): ditto.
+ (mark_current_machine_context): ditto.
+
+ * include/ruby/defines.h (PATH_ENV): ditto.
+
+ * io.c: ditto.
+
+ * process.c: ditto.
+
+ * ruby.c: ditto.
+
+ * test/ruby/test_env.rb: ditto.
+
+ * test/ruby/test_path.rb: ditto.
+
+ * LEGAL
+
+Sat Oct 4 19:02:36 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/format.rb: no need to require the "lib/rational.rb".
+
+Sat Oct 4 19:02:59 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf.c (rb_nkf_enc_get): don't replicate encoding.
+ [ruby-dev:36575]
+
+Sat Oct 4 18:47:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_external_encoding): defined.
+
+ * ext/stringio/stringio.c (strio_internal_encoding): defined.
+
+ * ext/stringio/stringio.c (Init_stringio): define above.
+
+Sat Oct 4 15:52:17 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/mini/test_mini_test.rb: recovered.
+ It had been temporarily removed at r19645.
+
+ * test/mini/test_mini_mock.rb: ditto.
+
+ * test/mini/test_mini_spec.rb: ditto.
+
+ * lib/test/**/*: replaced by miniunit.
+ miniunit had been temporarily reverted at r19643 but
+ now recovered.
+
+Sat Oct 4 15:33:26 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (gdb-ruby): new target. it runs ruby under controlled by
+ gdb.
+
+ * common.mk (dist): accepts RELNAME variable as the second argument of
+ make-snapshot.rb.
+
+Sat Oct 4 12:17:46 2008 Keiju Ishitsuka <keiju@ruby-lang.org>
+
+ * lib/irb/irb/ext/save-history.rb: change load_history using File.expand_path. see [ruby-dev:36660]. Thanks Kouhei Sutou.
+ * lib/irb/irb/context.rb: convert string Symbol of instance variable names in IRB:Context#inspect.
+
+Fri Oct 3 22:43:04 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * ext/dl/extconf.rb ($distcleanfiles): added callback-?.c into
+ the distclean list.
+
+Fri Oct 3 19:33:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/lib/json/pure.rb (module JSON): remove Iconv dependency.
+
+ * ext/json/lib/json/pure/generator.rb (utf8_to_json): process as
+ binary and remove Iconv dependency.
+
+ * ext/json/lib/json/pure/parser.rb (parse_string): ditto.
+
+Fri Oct 3 14:04:05 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/{configure.bat,setup.mak,Makefile.sub): add --program-prefix
+ configure option support.
+
+Thu Oct 2 21:22:43 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb (CGI::QueryExtension): delete MorphingBody
+ and replace like as 1.8's in multipart reading.
+ see [ruby-dev:36443],
+ reference from CGIAlt http://cgialt.rubyforge.org/
+
+ * test/cgi/test_cgi_multipart.rb : fixed multipart test.
+
+Thu Oct 2 20:46:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_sub_bang): fix coderange.
+
+Wed Oct 1 22:54:09 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/rexml/parsers/lightparser.rb, lib/debug.rb: remove unused when
+ clauses.
+
+Wed Oct 1 22:43:59 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/xmlrpc, lib/rexml, test/ruby/test_array.rb,
+ test/ruby/test_unicode_escape.rb, test/scanf/test_scanf.rb,
+ test/rss/rss-assertions.rb: fix indentation to remove warning.
+
+Wed Oct 1 21:36:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_gc_call_finalizer_at_exit): finalize deferred IO and Data.
+
+ * gc.c (rb_gc_call_finalizer_at_exit): defers IO finalization.
+ [ruby-dev:36646]
+
+Wed Oct 1 19:11:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (marshal_dump): fixed for check_dump_arg.
+
+ * marshal.c (marshal_dump): initializes dump_arg before any funcall.
+ [ruby-dev:36648]
+
+Wed Oct 1 00:54:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_split_m): should use rb_str_subseq() which use
+ offset and length by bytes. [ruby-dev:36641]
+
+Wed Oct 1 00:29:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_settracefunc.rb (test_call, test_class): line number
+ was changed at r19592.
+
+Wed Oct 1 00:20:38 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (check_exec_redirect): don't depend on rb_stdout and
+ rb_stderr.
+
+Tue Sep 30 23:06:58 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/mini/test_mini_test.rb: removed.
+ Temporarily removed the tests for miniunit because of
+ they depend on the miniunit version of test/unit,
+ where test/unit was temporarily reverted to the state
+ before importing miniunit.
+
+ * test/mini/test_mini_mock.rb: ditto.
+
+ * test/mini/test_mini_spec.rb: ditto.
+
+Tue Sep 30 23:04:30 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/test/**/*: recovered.
+ Temporarily reverts the changes of lib/test/unit/* in
+ r19502 and r19501, in order to release 1.9.0-5.
+
+Tue Sep 30 23:00:05 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/test/unit.rb: removed.
+ Temporarily reverts the changes of lib/test/unit/* in
+ r19543, r19534 and r19503, in order to release 1.9.0-5.
+
+ * lib/test/unit/assertions.rb: ditto.
+
+ * lib/test/unit/deprecate.rb: ditto.
+
+ * lib/test/unit/error.rb: ditto.
+
+ * lib/test/unit/testcase.rb: ditto.
+
+Tue Sep 30 20:17:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_extract_modeenc): should honor value of the
+ textmode: and binmode: options.
+
+Tue Sep 30 17:04:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/bigdecimal/test_bigdecimal.rb (test_sqrt_bigdecimal): wrong
+ precision specification. a patch from TAKANO Mitsuhiro
+ <takano32 at jus.or.jp> in [ruby-dev:36634].
+
+Tue Sep 30 16:53:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (stmt): returns non zero. [ruby-dev:36633]
+
+Tue Sep 30 16:52:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): add %<name>s style named argument
+ support. a patch from Yusuke Endoh <mame at tsg.ne.jp>
+ in [ruby-dev:35851].
+
+ * sprintf.c (rb_str_format): add gettext style named format
+ (%{name}) support. inspired by [ruby-dev:35852].
+
+ * sprintf.c (GETNAMEARG): should raise KeyError exception when no
+ named argument found.
+
+ * hash.c (rb_hash_fetch): export fetch function.
+
+Tue Sep 30 13:19:01 2008 Eric Hodel <drbrain@segment7.net>
+
+ * test/rubygems/test_gem_installer.rb: remove extra call to setup to
+ fix ENV['HOME'] pollution.
+
+Tue Sep 30 13:04:11 2008 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/mini/test.rb: Updated to 1.3.0 r4257.
+ * test/mini/*: added from r4257.
+
+Tue Sep 30 07:46:07 2008 Eric Hodel <drbrain@segment7.net>
+
+ * test/rdoc/test_rdoc_markup_attribute_manager.rb: Test with clean
+ SPECIALS.
+ * test/rubygems/gemutilities.rb: Restore ENV['HOME'] after test.
+ * test/runner.rb: Pass -n argument down to miniunit.
+
+Tue Sep 30 01:02:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (token_info_push, token_info_pop): do nothing for evaled
+ source.
+
+Tue Sep 30 00:47:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: constified.
+
+Mon Sep 29 23:32:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_subseq): don't use rb_str_drop_bytes for short
+ string.
+
+Mon Sep 29 22:54:29 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/mathn.rb: added String#to_[rc]. moved def_canon.
+
+Mon Sep 29 20:41:19 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_subseq): use rb_str_drop_bytes if possible.
+
+Mon Sep 29 20:22:20 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/*.rb: imported additional tests and some adjustments.
+
+Mon Sep 29 20:13:05 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (fev_initialize): initialization
+ handler instance variable.
+
+ * test/win32ole/test_win32ole_typelib.rb (test_s_typelibs):
+ fix the warning of shadowing outer local variable.
+
+Mon Sep 29 19:59:00 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (rescue_callback): use rb_write_error
+ instead of fprintf.
+
+Mon Sep 29 01:51:54 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/rdoc/test_rdoc_info_formatting.rb (teardown): delete tmpdir for
+ test.
+
+Mon Sep 29 00:30:20 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
+
+ * lib/cgi/html.rb (CGI::HtmlExtension::{radio_group, checkbox_group}):
+ can specify the false as checked or selected value.
+ [ruby-core:18306], [ruby-core:18307]
+
+ * test/cgi/test_cgi_tag_helper.rb: add a test.
+
+Sun Sep 28 23:08:38 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
+
+ * lib/cgi/html.rb (CGI::HtmlExtension::popup_menu):
+ fix the calls #bytesize on array parameters. [ruby-core:18919]
+
+Sun Sep 28 22:44:26 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb (CGI::parse): ignore illegal query params.
+ [ruby-dev:36618]
+
+Sun Sep 28 22:05:07 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (iseq_set_sequence): check duplicated when clause.
+ [ruby-dev:36616]
+
+Sun Sep 28 19:04:03 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/date/*.rb: imported a date test suite ruby 1.9 limited ed.
+
+Sun Sep 28 18:40:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mini/test.rb (MINI_DIR): loaded path is expanded.
+
+ * lib/mini/test.rb (assert_match): get rid of confusion of
+ ruby-mode.el.
+
+Sun Sep 28 12:36:09 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_exec.c (vm_exec_core): add an UNLIKELY() hint.
+
+ * vm_insnhelper.h (BASIC_OP_UNREDEFINED_P): add a LIKELY() hint.
+
+Sun Sep 28 12:04:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_new): sets empty string to coderange 7bit.
+ [ruby-core:18993]
+
+Sun Sep 28 09:39:48 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/mathn.rb ({Fixnum,Bignum,Float}#**): may produce complex
+ value.
+
+Sun Sep 28 09:05:53 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv/csv.rb: Worked around some minor encoding changes in Ruby
+ pointed out by Nobu.
+
+Sun Sep 28 08:37:12 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/mathn.rb: a hack to provide canonicalization. This must be
+ temporary, but this seems to be not bad for the time being.
+
+Sat Sep 27 06:22:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rake.rb (Module#rake_extension, String#ext, String#pathmap): use
+ built-in methods.
+
+ * lib/rake.rb (String#pathmap): fixed typo in rdoc.
+
+Sat Sep 27 04:28:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rmext): preceding dots are not a part of extension.
+
+ * file.c (rb_file_s_extname): ditto.
+
+Sat Sep 27 03:15:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_jump_tag_but_local_jump): exc is not used if val is nil.
+
+Sat Sep 27 03:12:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/socket.c (host_str): numeric address should be unsigned.
+ [ruby-core:18971]
+
+Fri Sep 26 22:46:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (primary, brace_block): fix for line number.
+
+ * proc.c (rb_proc_location, rb_method_location): new methods
+ {Proc,Method,UnboundMethod}#source_location. [ruby-core:18452]
+
+Fri Sep 26 21:36:33 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_core.h (RUBY_VM_CHECK_INTS_TH): add an UNLIKELY hint.
+
+Fri Sep 26 19:33:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_str_encode): renamed from
+ rb_str_transcode. [ruby-dev:36593]
+ (rb_econv_has_convpath_p): renamed from rb_transcode_convertible.
+
+ * transcode.c: follow the renaming.
+
+ * io.c: ditto.
+
+Fri Sep 26 19:01:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/bigdecimal/test_bigdecimal.rb (test_inspect): fixed CPU bit
+ size dependent test. pointed out by TAKANO Mitsuhiro <takano32 AT
+ jus.or.jp>.
+
+Fri Sep 26 18:57:33 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * test/pathname/test_pathname.rb: Fix use of deprecated methods.
+
+Fri Sep 26 18:39:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (dist): nothing is needed to run BASERUBY.
+
+ * tool/make-snapshot: new option -archname.
+
+Fri Sep 26 18:24:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el: safe customizable variables.
+
+Fri Sep 26 17:37:18 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * include/ruby/ruby.h (rb_mPrecision): removed.
+ Precision module was temporarily removed at r19430.
+
+Fri Sep 26 17:25:10 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (dist): Changed its dependencies and action.
+
+Fri Sep 26 17:07:04 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * error.c (Init_syserr): moved to the template.
+ (errno_missing): removed. fixed [ruby-dev:35958].
+
+ * defs/known_errors.def: added. extracted from Init_syserr.
+
+ * templates/known_errors.inc.tmpl: added. Template for Init_syserr.
+ c.f. [ruby-dev:35958].
+
+ * tools/generic_erb.rb: added. general purpose mapper which maps
+ data+template into source code.
+
+ * common.mk (error.$(OBJEXT), incs, known_errors.inc):
+ Fixed dependencies.
+
+Fri Sep 26 17:02:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thlist_signal): clears the woken thread if nothing woke.
+
+ * thread.c (rb_barrier_wait): achieves the lock if no thread was
+ waiting yet.
+
+Fri Sep 26 12:04:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/curses/curses.c: should include <ruby/io.h>.
+
+ * ext/io/wait/wait.c: ditto.
+
+ * ext/openssl/ossl.h: ditto.
+
+Fri Sep 26 11:34:08 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * variable.c (rb_define_hooked_variable): cast to get rid of compiler
+ warnings.
+
+Fri Sep 26 11:05:41 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * transcode.c, include/ruby/encoding.c (rb_transcode_convertible):
+ new function. checking the existence of converter.
+
+Fri Sep 26 10:35:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * variable.c (global_variable, struct trace_var): made function
+ members more strict.
+
+Fri Sep 26 09:55:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby{io,sig}.h: moved to include/ruby/backward.
+
+Fri Sep 26 09:47:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/rubysig.h: old macros for backward compatibility.
+
+ * thread.c (BLOCKING_REGION): rewritten using helper functions.
+
+Fri Sep 26 03:03:32 2008 Tanaka Akira <akr@fsij.org>
+
+ * vm_eval.c (Init_vm_eval): define module_eval, class_eval and eval
+ here for rdoc.
+
+Fri Sep 26 00:40:30 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * range.c (range_inspect): fix SEGV for cyclic range object.
+ [ruby-core:18835]
+
+Thu Sep 25 23:59:56 2008 Tanaka Akira <akr@fsij.org>
+
+ * common.mk: dependency updated.
+
+Thu Sep 25 21:46:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_eUndefinedConversionError): renamed from
+ rb_eConversionUndefinedError.
+ (rb_eConverterNotFoundError): renamed from rb_eNoConverterError.
+
+Thu Sep 25 21:23:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * pack.c (pack_pack, pack_unpack): 'm0' format (base64) complies with
+ RFC 4648. It adds no line feed when encoding, and raise ArgumentError
+ if the encoded string contains non-alphabet (including CR and LF).
+
+ * lib/base64.rb: added. This provides encoding/decoding method for
+ Base64 in standard RFC 2045, Base64 in standard RFC 4648 and ``Base 64
+ Encoding with URL and Filename SafeAlphabet'' in RFC 4648.
+
+ * test_pack.c, test/base64/test_base64.rb: add tests for above.
+
+Thu Sep 25 21:00:32 2008 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk: fix btest-* rules [ruby-dev:36528].
+ and remove obsolete rules.
+
+Thu Sep 25 20:27:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * class.c (rb_make_metaclass): [BUG] Fixed a bus error
+ on the case for metaclass of a class which includes a
+ module.
+
+Thu Sep 25 19:34:33 2008 Eric Hodel <drbrain@segment7.net>
+
+ * test/rubygems/*: Update some new tests to use build_rake_in.
+ * test/rubygems/gemutilities.rb: Fix broken merge of rake detection.
+
+Thu Sep 25 19:13:12 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems*: Update to RubyGems 1.3.0 r1891.
+
+Thu Sep 25 18:40:42 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * class.c (rb_make_metaclass): Made class of class of class
+ from Class into its own eigenclass. Now meta^(n)-class
+ hierarchy regresses infinitely, again.
+ (This feature was decided on developer-meeting-20080922.)
+
+Thu Sep 25 16:01:07 2008 Jim Weirich <jim@tardis.local>
+
+ * lib/rake.rb: Update rake source to version 0.8.3. This
+ version includes some fixes for running Rake on windows.
+ (1) better APPDATA/HOMExxx/USERPROFILE integration for
+ system rakefiles, (2) Better handling of the :ruby command
+ when installed in directory containing spaces.
+
+Thu Sep 25 11:22:51 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc*: Update to RDoc 2.2.1 r185.
+
+Thu Sep 25 02:08:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_mode_enc): make it static.
+
+Thu Sep 25 01:22:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mini/test.rb (Mini::Assertions#assert_raise): fixed typo.
+
+Wed Sep 24 23:39:00 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
+
+ * test/cgi/test_cgi_multipart.rb : revert last change.
+ ( deprecated is assert_raises. )
+ * test/cgi/test_cgi_core.rb : ditto.
+ * test/cgi/test_cgi_header.rb : ditto.
+
+Wed Sep 24 23:12:49 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb (CGI::new, CGI::{accept_charset,accept_charset=}) :
+ accept parameters either in a hash,
+ string as a block. add the encoding validation process.
+ * test/cgi/test_cgi_core.rb : test for query encoding check.
+
+Wed Sep 24 22:58:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * string.c (rb_str_rstrip_bang): raise exception when the encoding of
+ the string is dummy.
+
+ * string.c (rb_str_rstrip_bang): remove nul characters even if the
+ encoding of the string is not single byte optimizable.
+ fixed [ruby-core:18844], reported by Michael Selig.
+
+Wed Sep 24 19:01:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * string.c (rb_str_rstrip_bang): workaround for VC++8 x64.
+
+Wed Sep 24 17:44:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * complex.c (Init_Complex), rational.c (Init_Rational): undefines
+ default #allocate methods which call the allocator.
+
+Wed Sep 24 17:02:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * complex.c (Init_Complex), rational.c (Init_Rational): ID_ALLOCATOR
+ differs from :allocate, and invisible in ruby level.
+
+Wed Sep 24 15:58:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_rstrip_bang): removing mixed spaces and nuls at
+ the end of strings. [ruby-dev:36497]
+
+Wed Sep 24 15:13:04 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
+
+ * test/cgi/test_cgi_multipart.rb : test for miniunit.
+ * test/cgi/test_cgi_core.rb : ditto.
+ * test/cgi/test_cgi_header.rb : ditto.
+
+Wed Sep 24 14:38:29 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/tmpdir.rb: setup buffer with nul characters instead of spaces.
+ fixed [ruby-dev:36493]
+
+Wed Sep 24 11:18:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_s_binread): offset argument was wrongly passed to
+ internal IO#read call. [ruby-core:18810]
+
+Wed Sep 24 07:38:23 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * vm_core.h: ruby/ruby.h should be included at the very first
+ place in an entire compilation unit, as it includes
+ ruby/config.h
+
+Wed Sep 24 06:41:24 2008 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * lib/test/*: removed test/unit.
+ * lib/test/*: added miniunit.
+ * lib/mini/*: ditto.
+
+Wed Sep 24 04:45:35 2008 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/node.h, node.h: move node.h from include path.
+ This change stop to install node.h because of saving ABI
+ (node.h will be changed. Extensions should not depends on
+ this file).
+
+ * blockinlining.c, class.c, compile.c, debug.h, enum.c,
+ gc.c, iseq.c, parse.y, ruby.c, signal.c, variable.c,
+ vm.c, vm_core.h, vm_dump.c: ditto.
+
+ * ext/ripper/depend: ditto.
+
+Wed Sep 24 04:09:13 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_core.h: remove unused frame values.
+
+Wed Sep 24 04:07:07 2008 Koichi Sasada <ko1@atdot.net>
+
+ * signal.c (signal_exec): execute rb_eval_cmd() directly.
+
+Wed Sep 24 03:08:58 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/uri/mailto.rb: fix indentation.
+ * lib/uri/generic.rb: ditto.
+ * lib/yaml.rb: ditto.
+ * lib/uri/cgi/core.rb: fix indentation and ambiguous argument warning.
+
+Tue Sep 23 23:39:25 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv/csv.rb: Improved the idea of whitespace and word characters used
+ in substitutions during header conversion as suggested by Michael Selig.
+
+Tue Sep 23 21:50:53 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_binwrite): allocate wbuf if nosync.
+
+Tue Sep 23 21:45:02 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (copy_stream_body): use io_binwrite instead of io_fwrite.
+
+Tue Sep 23 21:31:16 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * test/ruby/test_rational2.rb: updated.
+
+ * test/ruby/test_complex2.rb: added.
+
+ * test/ruby/test_complexrational.rb: added.
+
+Tue Sep 23 21:26:32 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_casecmp): make the ordering consistent with
+ String#<=>.
+
+Tue Sep 23 20:52:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_binwrite): add nosync argument.
+ (do_writeconv): extracted from io_fwrite.
+ (io_fwrite): add nosync argument. use do_writeconv.
+ (io_write): add nosync argument.
+ (io_write_m): new function for IO#write.
+ (rb_p): don't append record separator.
+
+Tue Sep 23 20:24:41 2008 Koichi Sasada <ko1@atdot.net>
+
+ * signal.c (signal_exec): fix to use rb_proc_call().
+
+Tue Sep 23 20:06:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rexml/formatters/pretty.rb (REXML::Formatters::Pretty#wrap):
+ abandon wrapping if the line contains no space. [ruby-dev:36045]
+
+Tue Sep 23 19:38:03 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (subtract): check tv_sec. reported by ko1.
+
+Tue Sep 23 19:21:03 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_s_canonicalize_internal): does no apply
+ canonicalization rule anymore.
+
+ * rational.c (nurat_s_canonicalize_internal(_no_reduce)?): ditto.
+
+ * complex.c: removed class method new! and new.
+
+ * rational.c: ditto.
+
+Tue Sep 23 19:20:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_s_binread): a new method to read binary chunk from a
+ file. [ruby-core:18674]
+
+ * io.c (open_key_args): wrong permission specified for read-open.
+
+Tue Sep 23 18:24:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * hash.c (rb_obj_is_proc): declaration moved for rdoc.
+
+Tue Sep 23 18:07:55 2008 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk (io.o): remove dependency for vm_core.h.
+
+Tue Sep 23 17:56:44 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_thread_blocking_region): fix typo in a document.
+
+Tue Sep 23 17:50:35 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_thread_blocking_region): write a document.
+
+Tue Sep 23 17:14:31 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c, include/ruby/intern.h (rb_thread_interrupted): added.
+
+ * io.c: use VALUE of thead instead of rb_tread_t to check interrupts.
+
+Tue Sep 23 17:05:14 2008 Koichi Sasada <ko1@atdot.net>
+
+ * class.c, vm_core.h: move decl of rb_iseq_clone() to class.c.
+
+Tue Sep 23 17:02:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * debug.h (ruby_set_debug_option): declared.
+
+ * main.c: include debug.h.
+
+ * common.mk (main.$(OBJEXT)): dependency updated.
+
+Tue Sep 23 16:59:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (ENVMATCH, ENVNMATCH): reduced same code.
+
+Tue Sep 23 16:55:11 2008 Koichi Sasada <ko1@atdot.net>
+
+ * ruby.h: fix comment and rename macro HAVE_RUBY_MVM_H to
+ HAVE_RUBY_VM_H.
+
+Tue Sep 23 16:41:31 2008 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/node.h, vm_core.h: move definition of
+ RUBY_VM_METHOD_NODE to node.h.
+
+ * class.c, common.mk: remove useless inclusion.
+
+ * compile.h, iseq.h, vm_core.h: rename compile.h to iseq.h.
+ move some definitions from vm_core.h to iseq.h.
+
+ * compile.c, iseq.c, vm.c: ditto.
+
+ * eval.c, compile.c: move some functions for parser
+ from eval.c to compile.c.
+
+ * eval_intern.h, vm_core.h: move va_init_list() macro to
+ vm_core.h.
+
+ * iseq.c (rb_iseq_new_top, rb_iseq_first_lineno): added.
+
+ * load.c, ruby.c: use rb_iseq_new_top() instead of
+ rb_iseq_new() with ISEQ_TYPE_TOP constant directly.
+
+ * proc.c: use rb_iseq_first_lineno() instead of accessing
+ iseq structure.
+
+Tue Sep 23 16:17:54 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/ripper/eventids2.c (token_to_eventid): supper __ENCODING__
+ keyword. [ruby-dev:36478]
+
+Tue Sep 23 15:30:53 2008 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk, hash.c: remove unused inclusion.
+
+Tue Sep 23 09:52:07 2008 Koichi Sasada <ko1@atdot.net>
+
+ * eval_safe.c, safe.c: rename eval_safe.c to safe.c.
+
+ * common.mk, eval.c, safe.c, inits.c: separate safe.c from eval.c and
+ make Init_safe().
+
+Tue Sep 23 09:20:00 2008 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk: clean up
+ - remove blockinlining.$(OBJEXT) to built
+ - make ENCODING_H_INCLDUES variable (include/ruby/encoding.h)
+ - make VM_CORE_H_INCLUDES variable (vm_core.h)
+ - simplify rules.
+ - make depends rule to output depend status using gcc -MM.
+
+ * include/ruby/mvm.h, include/ruby/vm.h: rename mvm.h to vm.h.
+
+ * include/ruby.h: ditto.
+
+ * load.c: add inclusion explicitly.
+
+ * enumerator.c, object.c, parse.y, thread.c, vm_dump.c:
+ remove useless inclusion.
+
+ * eval_intern.h: cleanup inclusion.
+
+ * vm_core.h: rb_thread_t should be defined in this file.
+
+ * vm_evalbody.c, vm_exec.c: rename vm_evalbody.c to vm_exec.c.
+
+ * vm.h, vm_exec.h: rename vm.h to vm_exec.h.
+
+ * insnhelper.h, vm_insnhelper.h: rename insnhelper.h to vm_insnhelper.h.
+
+ * vm.c, vm_insnhelper.c, vm_insnhelper.h:
+ - rename vm_eval() to vm_exec_core().
+ - rename vm_eval_body() to vm_exec().
+ - cleanup include order.
+
+ * vm_method.c: fix comment.
+
+Tue Sep 23 09:01:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/pathname.rb (each_filename): return Enumerator if no block
+ given.
+
+ * test/pathname/test_pathname.rb: add a test for above.
+
+Tue Sep 23 08:25:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (env_aset): allow nil value to remove an entry.
+ [ruby-dev:36465]
+
+ * test/ruby/test_env.rb (TestEnv#test_aset): test updated.
+
+Tue Sep 23 08:07:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-keyword-end-re): emacs21 support. a
+ patch from Hiroshi Moriyama <hiroshi at kvd.biglobe.ne.jp> in
+ [ruby-dev:36471].
+
+ * misc/ruby-mode.el (ruby-in-ppss-context-p): ditto.
+
+ * misc/ruby-mode.el (ruby-here-doc-end-syntax):
+
+Tue Sep 23 02:07:52 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * test/readline/test_readline_history.rb
+ (Readline::TestHistory#test_each): checked return value.
+
+Tue Sep 23 02:05:34 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/readline.c (Init_readline): used remove_history to
+ check offset of history if unsupported clear_history.
+
+Mon Sep 22 17:39:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/tempfile.rb (Tempfile#open): should return a value from the
+ block (if given). [ruby-core:18394]
+
+Mon Sep 22 11:17:51 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * include/ruby/encoding.h (enum): ISO C forbids comma at end of
+ enumerator list
+
+Mon Sep 22 10:15:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * LEGAL: updated file names removed and added. [ruby-dev:36426]
+
+Mon Sep 22 02:39:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (get_default_external): add description.
+
+Sun Sep 21 21:52:41 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * math.c (math_log): should check argc.
+
+Sun Sep 21 21:20:24 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: added two macros.
+
+ * rational.c: ditto.
+
+Sun Sep 21 18:06:38 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_s_convert): checks argc.
+
+ * rational.c (nurat_s_convert): ditto.
+
+Sun Sep 21 10:19:04 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_s_canonicalize_internal): checks exactness of
+ imag only.
+
+ * rational.c (nurat_s_convert): accepts non real value
+ (Rational(a,b) as a/b).
+
+ * complex.c (nucomp_s_convert): refined.
+
+Sun Sep 21 09:37:57 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv/csv.rb: Reworked CSV's parser and generator to be m17n. Data
+ is now parsed in the Encoding it is in without need for translation.
+ * lib/csv/csv.rb: Improved inspect() messages for better IRb support.
+ * lib/csv/csv.rb: Fixed header writing bug reported by Dov Murik.
+ * lib/csv/csv.rb: Use custom separators in parsing header Strings as
+ suggested by Shmulik Regev.
+ * lib/csv/csv.rb: Added a :write_headers option for outputting headers.
+ * lib/csv/csv.rb: Handle open() calls in binary mode whenever we can to
+ workaround a Windows issue where line-ending translation can cause an
+ off-by-one error in seeking back to a non-zero starting position after
+ auto-discovery for :row_sep as suggested by Robert Battle.
+ * lib/csv/csv.rb: Improved the parser to fail faster when fed some forms
+ of invalid CSV that can be detected without reading ahead.
+ * lib/csv/csv.rb: Added a :field_size_limit option to control CSV's
+ lookahead and prevent the parser from biting off more data than
+ it can chew.
+ * lib/csv/csv.rb: Added readers for CSV attributes: col_sep(), row_sep(),
+ quote_char(), field_size_limit(), converters(), unconverted_fields?(),
+ headers(), return_headers?(), write_headers?(), header_converters(),
+ skip_blanks?(), and force_quotes?().
+ * lib/csv/csv.rb: Cleaned up code syntax to be more inline with
+ Ruby 1.9 than 1.8.
+
+Sun Sep 21 07:43:16 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: an instance method image has been removed and
+ uses "imag" instead of "image".
+
+ * complex.c: two instance method re and im are removed.
+
+ * rational.c: follows the above changes.
+
+ * include/ruby/ruby.h: ditto.
+
+ * gc.c: ditto.
+
+ * lib/cmath.rb: ditto.
+
+ * lib/mathn.rb: ditto.
+
+ * lib/complex.rb: ditto. and provides some obsolete methods.
+
+Sun Sep 21 02:48:45 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/ext/parser/parse.c: use ruby_xfree().
+
+ * ext/json/ext/parser/parse.rl: ditto.
+
+ * ext/json/ext/parser/unicode.c: ditto.
+
+Sun Sep 21 02:40:20 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json: import JSON v 1.1.3.
+
+Sat Sep 20 11:43:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/optparse.rb (summarize): separator "" should output new line.
+
+Sat Sep 20 08:07:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * parse.y: strings which contain only US-ASCII don't force to have
+ US-ASCII encoding. [ruby-dev:36400]
+
+Sat Sep 20 07:59:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_desc): Regexps of ASCII Compatible encoding may
+ contain non-ASCII characters. So in that case its encoding
+ must keep original encoding.
+
+Sat Sep 20 07:44:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk: prec.c is removed.
+
+Fri Sep 19 22:37:25 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: uses f_(in)?exact_p macro.
+
+ * rational.c: ditto.
+
+ * bignum.c (rb_big_pow): bignum**bignum - should calculate without
+ rational.
+
+ * lib/complex.rb: should override Math module at most once.
+
+ * lib/mathn.rb: requires 'cmath' directly.
+
+Fri Sep 19 20:48:06 2008 Yuki Sonoda <yugui@yugui.jp>
+
+ * prec.c: removed. Precision will be redesigned and be back again.
+ c.f. [ruby-dev:36352].
+
+ * common.mk (COMMON_OBJS): removed prec.o.
+
+ * inits.c (rb_call_inits): removed Init_Precision.
+
+ * numeric.c (Init_Numeric): removed inclusion of Precision.
+ removed #induced_from from each class.
+
+ * rational.c: ditto.
+
+ * ext/bigdecimal/bigdecimal.c: ditto.
+
+ * lib/rdoc/known_classes.rb: removed the entry for Precision.
+
+ * test/ruby/test_prec.rb: removed.
+
+ * test/ruby/test_integer.rb: removed tests for Precision.
+
+ * test/ruby/test_fixnum.rb: ditto.
+
+ * test/ruby/test_float.rb: ditto.
+
+ * test/ruby/test_rational.rb: ditto.
+
+ * test/ruby/test_complex.rb: ditto.
+
+ * test/bigdecimal/test_bigdecimal.rb: ditto.
+
+Fri Sep 19 19:43:40 2008 Yuki Sonoda <yugui@yugui.jp>
+
+ * common.mk : Reverts the changeset 18994.
+ Uses the official repository of rubyspec again.
+
+Fri Sep 19 17:41:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * configure.in: applied OS/2 support patch from Brendan Oakley
+ <gentux2 at gmail.com> in [ruby-core:18707].
+
+Fri Sep 19 09:29:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * dln.c: newer BeOS support. a patch from Pete Goodeve
+ <pete.goodeve at computer.org> in [ruby-core:18712].
+
+Fri Sep 19 03:41:25 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: fix memory violation. mentioned by mame [ruby-dev:36373]
+
+Fri Sep 19 01:07:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * regexec.c (string_cmp_ic): add text_end argument.
+ (slow_search): call enclen with real string end.
+ (map_search): add text_end argument.
+
+Thu Sep 18 22:54:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/openssl/ossl_pkey_ec.c (ossl_ec_key_to_string): comment out
+ fragments of unused code.
+
+Thu Sep 18 22:35:03 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (VpCtoV): 1E1000...000 is interpreted as
+ Infinity. [ruby-dev:36159]
+
+ * ext/bigdecimal/bigdecimal.c (VpPower): Infinity ** 1 returns
+ Infinity instead of NaN. [ruby-dev:36159]
+
+ * test/bigdecimal/test_bigdecimal.rb: add tests for above.
+
+Thu Sep 18 22:20:08 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (Init_Exception): introduce EncodingError which is a
+ superclass for all encoding related exception classes,
+ e.g. Encoding::CompatibilityError. [ruby-dev:36371]
+
+ * transcode.c (Init_transcode): ditto.
+
+Thu Sep 18 21:57:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_comparable): make ascii8bit string to be
+ compatible with any other encoding.
+
+ * string.c (rb_str_cmp): use rb_str_comparable() instead of
+ rb_enc_compatible() since <=> is a comparison anyway.
+
+Thu Sep 18 21:37:14 2008 Tanaka Akira <akr@fsij.org>
+
+ * grapheme cluster implementation reverted. [ruby-dev:36375]
+
+Thu Sep 18 20:50:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rake.rb (Rake::Application#standard_exception_handling):
+ replaced magic numbers for exit status.
+
+Thu Sep 18 20:37:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/optparse.rb (OptionParser::ParseError#set_backtrace): omits
+ OptionParser internal backtraces unless debug flag is set.
+
+Thu Sep 18 20:02:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/uri/common.rb (unescape): skip '%' to make String#hex work
+ correctly.
+
+Thu Sep 18 19:51:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (big2str_karatsuba): free internal buffer eagerly.
+ a patch from TOYOFUKU Chikanobu <nobu_toyofuku at nifty.com>
+ in [ruby-dev:36217].
+
+ * bignum.c (rb_big2str0): ditto.
+
+Thu Sep 18 19:43:04 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * st.c (new_size): raise RuntimeError when st_table is too big.
+ [ruby-dev:36354]
+
+Thu Sep 18 18:23:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (enc_arg): must take pointer argument to avoid GC
+ problem. StringValueCStr modifies the argument and it should be
+ preserved while the string StringValueCStr returns is used.
+ Since the string is used by caller, the modified argument should be
+ hold by caller. Actually
+ GC.stress = true
+ def (o=Object.new).to_str()
+ "universal"+"_newline"
+ end
+ "\u3042".encode(o, "")
+ causes curious warning:
+ rb_define_const: invalid name `' for constant
+
+Thu Sep 18 17:32:44 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * transcode.c: add "Error" suffix for Encoding exception classes.
+ a patch from Tadashi Saito <shiba at mail2.accsnet.ne.jp> in
+ [ruby-dev:36346].
+
+ * encoding.c (Init_Encoding): rename EncodingCompatibilityError to
+ Encoding::CompatibilityError. [ruby-dev:36366]
+
+Thu Sep 18 17:18:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * transcode.c (enc_arg): revert last change. too early exception
+ raising.
+
+ * transcode.c (enc_arg): need not to take pointer argument.
+
+Sun Sep 18 02:22:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/bigdecimal/test_bigdecimal.rb: add tests to achieve over 90%
+ test coverage of bigdecimal.
+
+Wed Sep 17 21:50:14 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_casecmp): don't use rb_enc_codepoint.
+
+Wed Sep 17 19:55:33 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_s_convert): accepts complex
+ value (Complex(a,b) as a+bi).
+
+Wed Sep 17 19:16:47 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_io.rb (TestIO#test_dup): avoid infinite loop.
+ [ruby-dev:36326]
+
+ * test/ruby/test_io.rb (TestIO#test_dup): remove needless open.
+ [ruby-dev:35957]
+
+Wed Sep 17 17:44:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_extract_modeenc): process option mode: and perm: as
+ well.
+
+ * io.c (open_key_args): move mode: and perm: related code to
+ rb_io_extract_modeenc().
+
+Wed Sep 17 13:42:59 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
+
+ * lib/cgi/html.rb (checkbox_group,radio_group): bug fix
+ use size instead of bytesize.
+
+ * test/cgi/test_cgi_tag_helper.rb: test for checkbox_group,radio_group.
+
+Wed Sep 17 06:58:31 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c: provides predicate real? instead of scalar?.
+
+ * complex.c: follows the above change.
+
+ * lib/cmath.rb: ditto.
+
+Wed Sep 17 01:56:27 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_io_m17n.rb: use __FILE__ instead of /dev/null.
+ [ruby-dev:36327]
+
+Wed Sep 17 01:33:11 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/oniguruma.h (OnigEncodingTypeST): add precise_ret
+ argument for mbc_to_code.
+ (ONIGENC_MBC_TO_CODE): provide NULL for precise_ret.
+ (ONIGENC_MBC_PRECISE_CODEPOINT): defined.
+
+ * include/ruby/encoding.h (rb_enc_mbc_precise_codepoint): defined.
+
+ * regenc.h (onigenc_single_byte_mbc_to_code): precise_ret argument
+ added.
+ (onigenc_mbn_mbc_to_code): ditto.
+
+ * regenc.c (onigenc_single_byte_mbc_to_code): precise_ret argument
+ added.
+ (onigenc_mbn_mbc_to_code): ditto.
+
+ * string.c (count_utf8_lead_bytes_with_word): removed.
+ (str_utf8_nth): removed.
+ (str_utf8_offset): removed.
+ (str_strlen): UTF-8 codepoint oriented optimization removed.
+ (rb_str_substr): ditto.
+ (enc_succ_char): use rb_enc_mbc_precise_codepoint.
+ (enc_pred_char): ditto.
+ (rb_str_succ): ditto.
+
+ * encoding.c (rb_enc_ascget): check length with
+ rb_enc_mbc_precise_codepoint.
+ (rb_enc_codepoint): use rb_enc_mbc_precise_codepoint.
+
+ * regexec.c (string_cmp_ic): add text_end argument.
+ (match_at): check end of character after exact string matches.
+
+ * enc/utf_8.c (grapheme_table): defined for extended grapheme cluster
+ boundary.
+ (grapheme_cmp): defined.
+ (get_grapheme_properties): defined.
+ (grapheme_boundary_p): defined.
+ (MAX_BYTES_LENGTH): defined.
+ (comb_char_enc_len): defined.
+ (mbc_to_code0): extracted from mbc_to_code.
+ (mbc_to_code): use mbc_to_code0.
+ (left_adjust_combchar_head): defined.
+ (utf_8): use a extended grapheme cluster as a unit.
+
+ * enc/unicode.c (onigenc_unicode_mbc_case_fold): use
+ ONIGENC_MBC_PRECISE_CODEPOINT to extract codepoints.
+ (onigenc_unicode_get_case_fold_codes_by_str): ditto.
+
+ * enc/euc_jp.c (mbc_to_code): follow mbc_to_code field change.
+ use onigenc_mbn_mbc_to_code.
+
+ * enc/shift_jis.c (mbc_to_code): ditto.
+
+ * enc/emacs_mule.c (mbc_to_code): ditto.
+
+ * enc/gbk.c (gbk_mbc_to_code): follow mbc_to_code field and
+ onigenc_mbn_mbc_to_code change.
+
+ * enc/cp949.c (cp949_mbc_to_code): ditto.
+
+ * enc/big5.c (big5_mbc_to_code): ditto.
+
+ * enc/euc_tw.c (euctw_mbc_to_code): ditto.
+
+ * enc/euc_kr.c (euckr_mbc_to_code): ditto.
+
+ * enc/gb18030.c (gb18030_mbc_to_code): ditto.
+
+ * enc/utf_32be.c (utf32be_mbc_to_code): follow mbc_to_code field
+ change.
+
+ * enc/utf_16be.c (utf16be_mbc_to_code): ditto.
+
+ * enc/utf_32le.c (utf32le_mbc_to_code): ditto.
+
+ * enc/utf_16le.c (utf16le_mbc_to_code): ditto.
+
+Wed Sep 17 01:17:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (enc_arg): raise exception when unknown encoding is
+ given.
+
+Tue Sep 16 22:23:24 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb (CGI#header): performance improvement.
+ From CGIAlt http://cgialt.rubyforge.org/
+
+ * test/cgi/test_cgi_header.rb: exception class fixed.
+
+Tue Sep 16 22:21:33 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_concat): fix rdoc. (codepoint is integer)
+
+ * string.c (rb_str_each_codepoint): use UINT2NUM.
+
+Tue Sep 16 21:48:55 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_desc): Regexp#inspect should be US-ASCII.
+
+Tue Sep 16 21:33:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_crypt): orthodox crypt() sees only first two bytes
+ of salt.
+
+Tue Sep 16 19:18:40 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_marshal_{dump,load}): preserve instance
+ variables.
+
+ * rational.c (nurat_marshal_{dump,load}): ditto.
+
+Tue Sep 16 18:28:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_gets_m): rdoc updated. limit counts in bytes.
+ [ruby-core:18617]
+
+ * io.c (rb_io_readlines, rb_f_gets): ditto.
+
+ * io.c (rb_io_readbyte): rdoc updated. [ruby-core:18617]
+
+Tue Sep 16 11:55:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_each_codepoint): add new methods, #codepoints
+ and #each_codepoint. a patch from Michael Selig
+ <michael.selig at fs.com.au> in [ruby-core:18532].
+
+Tue Sep 16 11:24:44 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/mkconstants.rb: add new constants. a patch from
+ IWAMURO Motonori <deenheart+ruby at gmail.com> in [ruby-dev:36309].
+
+Tue Sep 16 09:20:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_io.rb (TestIO#test_dup): exception should be
+ raised from IO#dup.
+
+Tue Sep 16 08:35:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_io.rb (TestIO#test_dup): this test might fail if
+ there are any garbage IO objects.
+
+Tue Sep 16 02:02:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_buf_cat_ascii): codepoint is unsigned int.
+
+ * string.c (rb_str_concat): ditto.
+
+ * string.c (str_cat_char): ditto.
+
+ * string.c (prefix_escape): ditto.
+
+Tue Sep 16 01:47:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (single_byte_optimizable): make function inline. based
+ on a patch from Michael Selig <michael.selig at fs.com.au> in
+ [ruby-core:18532].
+
+ * string.c (str_modify_keep_cr): new function act as
+ rb_str_modify(), but don't clear coderange
+
+ * string.c (rb_str_casecmp): specialized for single byte strings.
+
+ * string.c (rb_str_splice): preserve coderange.
+
+ * string.c (rb_str_slice_bang, rb_str_reverse_bang,
+ rb_str_upcase_bang, rb_str_downcase_bang, tr_trans,
+ rb_str_capitalize_bang, rb_str_swapcase_bang,
+ rb_str_delete_bang, rb_str_chop_bang, rb_str_chomp_bang,
+ rb_str_lstrip_bang, rb_str_rstrip_bang): ditto.
+
+ * string.c (rb_str_clear): preset coderange.
+
+ * string.c (rb_str_split_m): specialized for splitting with a
+ string.
+
+Tue Sep 16 00:57:56 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_quote): use rb_enc_mbcput to generate ASCII
+ incompatible characters properly.
+
+Tue Sep 16 00:51:59 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (Encoding#base_encoding): removed. [ruby-dev:36270]
+
+Tue Sep 16 00:40:56 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (STR1_LENGTH): defined.
+ (makeSTR1LEN): defined.
+
+ * tool/transcode-tblgen.rb: use makeSTR1LEN. generate STR1 for 4 to
+ 259 bytes.
+
+ * transcode.c (rb_transcoding): new field: output_index.
+ (transcode_restartable0): use STR1_LENGTH.
+
+Mon Sep 15 23:52:45 2008 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c, include/ruby/ruby.h: rename rb_register_mark_object()
+ to rb_gc_register_mark_object().
+
+ * eval.c, vm.c: initialize vm->mark_object_ary at
+ Init_top_self().
+
+ * bignum.c, complex.c, encoding.c, ext/win32ole/win32ole.c,
+ io.c, load.c, marshal.c, rational.c, ruby.c, vm.c:
+ use rb_gc_register_mark_object() instead of
+ rb_global_variable() or rb_gc_register_address().
+
+Mon Sep 15 23:37:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_opts): don't use to_sym.
+
+Mon Sep 15 23:28:28 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_get_index): don't return -1.
+
+ * io.c (rb_scan_open_args): call FilePathValue before encoding
+ conversion.
+
+Mon Sep 15 22:11:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_squeeze_bang): specialized for 7bit characters in
+ ASCII compatible strings.
+
+ * string.c (rb_str_count): ditto.
+
+ * string.c (tr_trans): preserve 7bit/valid coderange flag.
+
+ * string.c (rb_str_squeeze_bang): preserve previous coderange value.
+
+ * string.c (rb_str_lstrip_bang): ditto.
+
+ * string.c (rb_str_rstrip_bang): ditto.
+
+ * encoding.c (rb_default_external_encoding): preserve
+ default_external_encoding in a static variable.
+
+ * string.c (single_byte_optimizable): check coderange first, to
+ reduce number of calling rb_enc_from_index().
+
+Mon Sep 15 20:57:00 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/matrix.rb (Matrix#eql?): fixed [ruby-dev:36298].
+ Reported by an anonymous user.
+
+ * lib/matrix.rb (Vector#eql?): ditto.
+
+ * (Matrix#compare_by_row_vectors): takes comparison
+ strategy as an optional parameter.
+
+ * (Vector#compare_by): ditto.
+
+Mon Sep 15 14:34:32 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (RUBY_MAX_CHAR_LEN): defined.
+
+ * encoding.c (str_cat_char): use RUBY_MAX_CHAR_LEN.
+
+Mon Sep 15 13:53:33 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_compatible): accept other than strings and
+ regexps. [ruby-core:18595]
+
+ * encoding.c (rb_enc_get_index): works files and encodings.
+
+Mon Sep 15 13:17:21 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_eql_p): new.
+
+ * complex.c (nucomp_hash): should use hash values of the elements.
+
+ * rational.c (nurat_hash): ditto.
+
+ * hash.c (rb_any_cmp): removed an unused variable.
+
+Mon Sep 15 11:11:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoder): resetsize_func and resetstate_func
+ also returns ssize_t.
+
+ * enc/trans/iso2022.trans: follow the type change.
+
+Mon Sep 15 10:28:10 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * test/matrix/test_matrix.rb (setup): typo.
+ (test_equality): misdefinition of the expected working.
+ Reported by an anonymous user.
+ (test_hash): added.
+
+ * test/matrix/test_vector.rb: ditto.
+
+Mon Sep 15 03:33:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h: return output functions ssize_t.
+
+ * transcode.c (transcode_restartable0): don't need to cast the result
+ of output functions.
+
+ * enc/trans/newline.trans: follow the type change.
+
+ * enc/trans/escape.trans: ditto.
+
+ * enc/trans/utf_16_32.trans: ditto.
+
+ * enc/trans/iso2022.trans: ditto.
+
+ * enc/trans/japanese.trans: ditto.
+
+Mon Sep 15 03:04:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h: output function takes output buffer size.
+
+ * transcode.c: give output buffer size for output functions.
+
+ * enc/trans/newline.trans: follow the type change.
+
+ * enc/trans/escape.trans: ditto.
+
+ * enc/trans/utf_16_32.trans: ditto.
+
+ * enc/trans/iso2022.trans: ditto.
+
+ * enc/trans/japanese.trans: ditto.
+
+Mon Sep 15 02:37:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (str_encode): returns duplicated string if nothing
+ changed. [ruby-core:18578]
+
+Sun Sep 14 22:09:01 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
+
+ * lib/cgi/core.rb (CGI::parse): performance improvement
+
+Sun Sep 14 18:33:32 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: trivial changes.
+
+Sun Sep 14 16:15:22 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/matrix.rb (Vector#eql?): typo of the method name as "eqn?".
+ (Vector#eqn?): removed. Defined by mistake.
+ Fixes [ruby-dev:36294]. Reported by weda <weda AT
+ issp.u-tokyo.ac.jp> and an anonymous user.
+
+ * test/matrix/test_matrix.rb: added.
+
+ * test/matrix/test_vector.rb: added.
+
+Sun Sep 14 16:07:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): associates the locale encoding with $0 as
+ well as ARGV.
+
+Sun Sep 14 13:48:03 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * object.c (Init_Object): added metameta-class initialization for
+ BasicObject, Object, and Module.
+ The metameta-classes of them are now the metaclass of Class, as the
+ metameta-class of Class is.
+
+ * object.c (boot_defmetametaclass): added.
+
+Sun Sep 14 10:10:43 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (f_{add,mul,sub}): omitted some shortcuts for preserving
+ signed zero anyway.
+
+ * complex.c (nucomp_negate): new.
+
+Sun Sep 14 04:15:16 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/oniguruma.h (OnigEncodingTypeST): add end argument for
+ left_adjust_char_head.
+ (ONIGENC_LEFT_ADJUST_CHAR_HEAD): add end argument.
+ (onigenc_get_left_adjust_char_head): ditto.
+
+ * include/ruby/encoding.h (rb_enc_left_char_head): add end argument.
+
+ * regenc.h (onigenc_single_byte_left_adjust_char_head): ditto.
+
+ * regenc.c (onigenc_get_right_adjust_char_head): follow the interface
+ change.
+ (onigenc_get_right_adjust_char_head_with_prev): ditto.
+ (onigenc_get_prev_char_head): ditto.
+ (onigenc_step_back): ditto.
+ (onigenc_get_left_adjust_char_head): ditto.
+ (onigenc_single_byte_code_to_mbc): ditto.
+
+ * re.c: ditto.
+
+ * string.c: ditto.
+
+ * io.c: ditto.
+
+ * regexec.c: ditto.
+
+ * enc/euc_jp.c: ditto.
+
+ * enc/cp949.c: ditto.
+
+ * enc/shift_jis.c: ditto.
+
+ * enc/gbk.c: ditto.
+
+ * enc/big5.c: ditto.
+
+ * enc/euc_tw.c: ditto.
+
+ * enc/euc_kr.c: ditto.
+
+ * enc/emacs_mule.c: ditto.
+
+ * enc/gb18030.c: ditto.
+
+ * enc/utf_8.c: ditto.
+
+ * enc/utf_16le.c: ditto.
+
+ * enc/utf_16be.c: ditto.
+
+ * enc/utf_32le.c: ditto.
+
+ * enc/utf_32be.c: ditto.
+
+Sun Sep 14 03:43:27 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/oniguruma.h (ONIGENC_STEP_BACK): add end argument.
+ (onigenc_step_back): ditto.
+
+ * regenc.c (onigenc_step_back): add end argument.
+
+ * regexec.c: follow the interface change.
+
+Sun Sep 14 03:20:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/oniguruma.h (onigenc_get_prev_char_head): add end
+ argument.
+
+ * include/ruby/encoding.h (rb_enc_prev_char): ditto.
+
+ * regenc.c (onigenc_get_prev_char_head): add end argument.
+
+ * regparse.c: follow the interface change.
+
+ * regexec.c: ditto.
+
+ * string.c: ditto.
+
+ * parse.y: ditto.
+
+Sun Sep 14 02:04:28 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/oniguruma.h
+ (onigenc_get_right_adjust_char_head_with_prev): add end argument.
+
+ * regenc.c (onigenc_get_right_adjust_char_head_with_prev): use end
+ argument.
+
+ * regexec.c (forward_search_range): follow the interface change.
+
+Sun Sep 14 01:38:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/oniguruma.h (onigenc_get_right_adjust_char_head): add
+ end argument.
+
+ * include/ruby/encoding.h (rb_enc_right_char_head): add end argument.
+
+ * regenc.c (onigenc_get_right_adjust_char_head): use end argument.
+
+ * re.c (rb_reg_adjust_startpos): follow the interface change.
+
+ * string.c (rb_str_index): ditto.
+
+ * regexec.c (backward_search_range): ditto.
+ (onig_search): ditto.
+
+Sun Sep 14 00:43:28 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/ripper/depend (ripper.o): it depends on ruby headers.
+
+Sat Sep 13 19:27:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_encoding_set): don't need argc argument.
+ (rb_io_s_pipe): update io_encoding_set call.
+ (rb_io_set_encoding): ditto.
+
+Sat Sep 13 18:46:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_transcoding): align state field.
+
+Sat Sep 13 18:21:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (DECORATOR_P): renamed from SUPPLEMENTAL_CONVERSION.
+
+Sat Sep 13 18:05:37 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (make_writeconv): use rb_enc_name.
+ (make_readconv): ditto.
+
+ * transcode.c (rb_econv_open_opts): ditto.
+ (econv_args): ditto.
+ (decorate_convpath): ditto.
+ (econv_set_replacement): ditto.
+
+Sat Sep 13 11:15:38 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/rexml/document.rb: fixed typo.
+
+Sat Sep 13 10:53:13 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: refined.
+
+ * rational.c: ditto.
+
+Sat Sep 13 03:44:52 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_prepare_opts): raise ArgumentError if
+ a broken string is specified as a replacement.
+
+Sat Sep 13 03:31:05 2008 Tanaka Akira <akr@fsij.org>
+
+ * iseq.c (iseq_s_compile_file): use rb_file_open_str.
+
+ * io.c (rb_file_open_generic): call validate_enc_binmode.
+ (rb_file_open_str): call FilePathValue.
+
+Sat Sep 13 02:58:05 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (validate_enc_binmode): extracted from rb_io_extract_modeenc.
+ (rb_io_extract_modeenc): use validate_enc_binmode.
+ (io_encoding_set): call validate_enc_binmode.
+
+Sat Sep 13 02:50:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_prepare_opts): initialize *opt and return 0
+ if opthash is nil.
+
+Sat Sep 13 02:29:19 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/escape.trans: transcoder name renamed to use underscore.
+
+ * transcode.c: follow the renaming.
+
+Sat Sep 13 02:12:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_init_by_convpath_i): new function.
+ (rb_econv_init_by_convpath): new function.
+ (econv_init): use rb_econv_init_by_convpath.
+
+Sat Sep 13 01:11:14 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_args): take snamev_p and dnamev_p to prevent
+ possible GC problem.
+
+Sat Sep 13 00:38:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (enc_arg): take arg as VALUE * to prevent possible GC
+ problem.
+
+Fri Sep 12 23:19:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_add_transcoder_at): fix loop condition.
+
+Fri Sep 12 22:39:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (decorator_names): extracted from rb_econv_open.
+ (rb_econv_open): use decorator_names.
+ (econv_args): extracted from econv_init.
+ (econv_init): use econv_args.
+ (decorate_convpath): new function.
+ (search_convpath_i): new function.
+ (econv_s_search_convpath): new method.
+ (Init_transcode): new method defined.
+
+Fri Sep 12 21:55:43 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_t): new field: num_allocated.
+ (rb_econv_alloc): extracted from
+ rb_econv_open_by_transcoder_entries.
+ (rb_econv_add_transcoder_at): extracted from rb_econv_decorate_at
+ and generalized
+ (rb_econv_open_by_transcoder_entries): use rb_econv_alloc and
+ rb_econv_add_transcoder_at.
+ (rb_econv_add_converter): extracted from rb_econv_decorate_at.
+ (rb_econv_decorate_at): use rb_econv_add_converter.
+
+Fri Sep 12 21:22:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_t): new field: started.
+ (rb_econv_open_by_transcoder_entries): initialize started field.
+ (rb_econv_convert): set started field.
+ (rb_econv_insert_output): ditto.
+ (rb_econv_decorate_at): check started field instead of num_finished.
+
+Fri Sep 12 20:28:59 2008 Tanaka Akira <akr@fsij.org>
+
+ * regenc.c (onigenc_single_byte_code_to_mbc): follow OnigEncoding
+ change.
+
+Fri Sep 12 20:00:22 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * regparse.c (parse_exp): fix resource leak.
+
+Fri Sep 12 01:21:22 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/syck/node.c (syck_replace_str2): fix wrong check to free ptr.
+
+Thu Sep 11 20:18:24 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_err_in_callback.rb (teardown): get rid
+ of infinite loop.
+
+Thu Sep 11 19:12:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/oniguruma.h (OnigCodePoint): unsigned long to unsigned int.
+
+ * include/ruby/encoding.h (rb_enc_codepoint): ditto.
+
+ * encoding.c (rb_enc_codepoint): signed int to unsigned int.
+
+ * encoding.c (rb_enc_ascget): ditto.
+
+ * string.c (rb_str_casecmp): ditto.
+
+ * string.c (enc_succ_alnum_char): ditto.
+
+ * string.c (rb_str_inspect): ditto.
+
+ * string.c (rb_str_upcase_bang): ditto.
+
+ * string.c (rb_str_downcase_bang): ditto.
+
+ * string.c (rb_str_capitalize_bang): ditto.
+
+ * string.c (rb_str_swapcase_bang): ditto.
+
+ * string.c (struct tr): ditto.
+
+ * string.c (trnext): ditto.
+
+ * string.c (tr_trans): ditto.
+
+ * string.c (tr_setup_table): ditto.
+
+ * string.c (tr_find): ditto.
+
+ * string.c (rb_str_delete_bang): ditto.
+
+ * string.c (rb_str_squeeze_bang): ditto.
+
+ * string.c (rb_str_count): ditto.
+
+ * string.c (rb_str_split_m): ditto.
+
+ * string.c (rb_str_each_line): ditto.
+
+ * string.c (rb_str_lstrip_bang): ditto.
+
+ * string.c (rb_str_rstrip_bang): ditto.
+
+ * string.c (rb_str_intern): ditto.
+
+ * dir.c (char_casecmp): ditto.
+
+ * sprintf.c (rb_str_format): ditto.
+
+ * enc/emacs_mule.c (mbc_to_code): to be 32bit clean.
+
+ * enc/emacs_mule.c (code_to_mbc): ditto.
+
+ * enc/gb18030.c (mbc_to_code): ditto.
+
+ * enc/gb18030.c (code_to_mbc): ditto.
+
+Thu Sep 11 19:09:25 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/iconv/iconv.c: add attention for machine independent.
+
+Thu Sep 11 15:23:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigdivrem): adjust length for division and remainder.
+ a patch from TOYOFUKU Chikanobu <nobu_toyofuku at nifty.com> in
+ [ruby-dev:36231].
+
+Thu Sep 11 02:59:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_binwrite): extracted from io_fwrite.
+
+Thu Sep 11 02:25:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (make_encoding): new function.
+ (make_encobj): new function.
+ (econv_s_asciicompat_encoding): use make_encoding.
+ (rb_econv_open_exc): use SUPPLEMENTAL_CONVERSION.
+ (econv_convpath): use encoding object in the result.
+
+Thu Sep 11 02:14:38 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_convpath): new method.
+
+Wed Sep 10 23:00:43 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * tool/compile_prelude.rb: print "<internal:prelude>" instead of
+ "prelude.rb" on stack trace. [ruby-dev:36129]
+
+Wed Sep 10 21:19:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (big2str_karatsuba): remove unnecessary fixnum code. a
+ patch from TOYOFUKU Chikanobu <nobu_toyofuku at nifty.com> in
+ [ruby-dev:36217].
+
+Wed Sep 10 21:09:32 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_err_in_callback.rb: InternetExplorer should
+ be closed.
+
+ * test/win32ole/err_in_callback.rb: ditto.
+
+Wed Sep 10 18:25:19 2008 akira yamada <akira@rice.p.arika.org>
+
+ * lib/uri/common.rb (URI::Parser): new class.
+
+ * lib/uri/mailto.rb, lib/uri/generic.rb: follow the above change.
+
+ * test/uri/test_parser.rb: added tests for URI::Parser.
+
+Wed Sep 10 10:35:32 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
+
+ * lib/cgi/cookie.rb (CGI::Cookie#to_s): performance improvement
+ from http://jp.rubyist.net/magazine/?0023-Cgirb.
+
+Wed Sep 10 10:12:29 2008 akira yamada <akira@arika.org>
+
+ * lib/sync.rb (Sync_m#sync_exclusive): fixed
+ typo. [ruby-dev:36233] [RubyForge#11680]
+
+Wed Sep 10 01:57:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (StrSet#hash): cache hash value.
+ (ActionMap#hash): ditto.
+
+Wed Sep 10 01:26:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (econv_after_output): renamed from
+ econv_output_followed_by_input.
+ (ECONV_AFTER_OUTPUT): renamed from ECONV_OUTPUT_FOLLOWED_BY_INPUT.
+
+ * transcode.c: follow the renaming.
+
+ * io.c: ditto.
+
+Wed Sep 10 01:16:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (get_replacement_character): don't return ASCII
+ incompatible replacements.
+ (make_replacement): don't convert the result of
+ get_replacement_character.
+
+Wed Sep 10 01:05:00 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/newline.trans (rb_universal_newline): swap src_encoding
+ and dst_encoding.
+
+ * transcode.c (rb_econv_decorate_at): call get_transcoder_entry only
+ once.
+ (rb_econv_binmode): follow universal_newline change.
+
+Wed Sep 10 00:01:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_t): rename field: writeconv_stateless to
+ writeconv_asciicompat.
+
+ * io.c: follow the renaming.
+
+ * gc.c: ditto.
+
+Tue Sep 9 23:55:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_fwrite): raise an error if ASCII incompatible string
+ written for text mode IO without encoding conversion.
+ (rb_io_extract_modeenc): binmode requirement changed.
+
+Tue Sep 9 21:59:48 2008 Takeyuki Fujioka <xibbar@ruby-lang.org>
+
+ * lib/cgi*: split cgi.rb into four files. [ruby-dev:36041]
+
+Tue Sep 9 21:17:00 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (ECONV_DECORATOR_MASK): merge
+ ECONV_ENCODER_MASK and ECONV_DECORATOR_MASK.
+ (ECONV_UNIVERSAL_NEWLINE_DECORATOR): renamed from
+ ECONV_UNIVERSAL_NEWLINE_DECODER.
+ (ECONV_CRLF_NEWLINE_DECORATOR): renamed from
+ ECONV_CRLF_NEWLINE_ENCODER.
+ (ECONV_CR_NEWLINE_DECORATOR): renamed from ECONV_CR_NEWLINE_ENCODER.
+ (ECONV_XML_TEXT_DECORATOR): renamed from ECONV_XML_TEXT_ENCODER.
+ (ECONV_XML_ATTR_CONTENT_DECORATOR): renamed from
+ ECONV_XML_ATTR_CONTENT_ENCODER.
+ (ECONV_STATEFUL_DECORATOR_MASK): renamed from
+ ECONV_STATEFUL_ENCODER_MASK.
+ (ECONV_XML_ATTR_QUOTE_DECORATOR): renamed from
+ ECONV_XML_ATTR_CONTENT_DECORATOR.
+
+ * io.c: follow the renaming.
+
+ * transcode.c: ditto.
+
+Tue Sep 9 20:55:55 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open0): make it static.
+ (rb_econv_open): place decorators at last.
+
+Tue Sep 9 20:40:15 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/openssl/test_ssl.rb (OpenSSL#test_client_session):
+ Debian's openssl 0.9.8g-13 failed at assert(ssl.session_reused?),
+ when use default SSLContext. [ruby-dev:36167]
+
+Tue Sep 9 20:34:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_t): last_trans_index removed.
+ (rb_econv_open_by_transcoder_entries): follow the type change.
+ (rb_econv_open0): ditto.
+ (rb_econv_decorate_at): ditto.
+ (rb_econv_binmode): ditto.
+ (rb_econv_insert_output): simplified because there are no decorators
+ at last.
+
+Tue Sep 9 20:21:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open): reverse the order of decoders.
+
+Tue Sep 9 20:18:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open0): num_encoders and num_decoders removed.
+
+Tue Sep 9 03:59:13 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (make_writeconv): useless branch removed.
+
+Tue Sep 9 02:18:20 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_decorate_at_first): declared.
+ (rb_econv_decorate_at_last): declared.
+
+ * transcode.c (rb_econv_open_by_transcoder_entries): initialize
+ replacement_enc. allocate outbuf for the last transcoder.
+ (rb_econv_open0): extracted from rb_econv_open.
+ (rb_econv_open): use rb_econv_open0 and decorate the result using
+ rb_econv_decorate_at_first and rb_econv_decorate_at_last.
+ (rb_econv_decorate_at): new function.
+ (rb_econv_decorate_at_first): ditto.
+ (rb_econv_decorate_at_last): ditto.
+ (rb_econv_binmode): fix iteration end condition.
+ (econv_init): don't set source_encoding_name and
+ destination_encoding_name because they are set in rb_econv_open0.
+
+Tue Sep 9 01:10:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open): make ec a local variable.
+
+Tue Sep 9 00:20:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_asciicompat_encoding): check decoder.
+
+Tue Sep 9 00:00:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_t): last_error.partial_input removed.
+
+Mon Sep 8 23:24:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_asciicompat_encoding): renamed
+ from rb_econv_stateless_encoding to apply stateless ASCII
+ incompatible encodings such as UTF-16BE.
+
+ * io.c (make_writeconv): use rb_econv_asciicompat_encoding.
+
+ * transcode_data.h (rb_transcoder_asciicompat_type_t): renamed from
+ rb_transcoder_stateful_type_t.
+ (rb_transcoder): use rb_transcoder_asciicompat_type_t.
+
+ * transcode.c: follow the type change.
+ (asciicompat_encoding_i): renamed from stateless_encoding_i.
+ (rb_econv_asciicompat_encoding): renamed from
+ rb_econv_stateless_encoding.
+ (econv_s_asciicompat_encoding): method renamed.
+
+ * tool/transcode-tblgen.rb: follow the type change.
+
+ * enc/trans/utf_16_32.trans: follow the type change.
+ rb_from_UTF_16BE to UTF-8 is asciicompat_decoder.
+ rb_from_UTF_16LE to UTF-8 is asciicompat_decoder.
+ rb_from_UTF_32BE to UTF-8 is asciicompat_decoder.
+ rb_from_UTF_32LE to UTF-8 is asciicompat_decoder.
+ UTF-8 to rb_to_UTF_16BE is asciicompat_encoder.
+ UTF-8 to rb_to_UTF_16LE is asciicompat_encoder.
+ UTF-8 to rb_to_UTF_32BE is asciicompat_encoder.
+ UTF-8 to rb_to_UTF_32LE is asciicompat_encoder.
+
+ * enc/trans/newline.trans: follow the type change. universal newline
+ decoder is asciicompat_converter.
+
+ * enc/trans/escape.trans: follow the type change.
+
+ * enc/trans/iso2022.trans: ditto.
+
+ * enc/trans/japanese.trans: ditto.
+
+Mon Sep 8 23:05:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_insert_output): "readagain" part should be
+ after replacement.
+
+Mon Sep 8 22:30:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dir.c (dir_initialize): rename option name of Dir.open
+ from :external_encoding to :encoding.
+
+Mon Sep 8 22:16:20 2008 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+
+ * lib/cgi.rb : obsolete regex "n" option. [ruby-dev:36130]
+
+Mon Sep 8 18:13:20 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (getppid): typo. [ruby-dev:36202]
+
+ * process.c (get_ppid): mention the return value on Windows.
+
+Mon Sep 8 18:15:59 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (ArrayCode): less string substitutions.
+
+Mon Sep 8 18:13:13 2008 Tanaka Akira <akr@fsij.org>
+
+ * vm.c (rb_mRubyVMFrozenCore): registered for GC.
+
+ * re.c (rb_reg_preprocess_dregexp): fix GC problem on MacOS X with
+ powerpc-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc.
+ build 5367).
+
+Mon Sep 8 18:09:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.h): define SIZE_MAX for VC++6/7.
+
+Mon Sep 8 17:46:09 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (filetime_to_unixtime): remove unused variable.
+ [ruby-dev:36191]
+
+Mon Sep 8 13:47:39 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_io.rb (TestIO#test_dup): add open in block.
+ see [ruby-dev:35957].
+
+Mon Sep 8 07:09:42 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: some adjustments.
+
+ * rational.c: ditto.
+
+Mon Sep 8 06:50:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (XLDFLAGS): added --enable-auto-import for cygwin and
+ mingw.
+
+Mon Sep 8 02:04:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_set_replacement): renamed from
+ rb_econv_set_replacemenet.
+
+ * transcode.c: follow the renaming.
+
+Mon Sep 8 01:10:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (transcode_tblgen): log message refined.
+
+Mon Sep 8 00:58:04 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c: removed unused code.
+
+Mon Sep 8 00:04:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/iso2022.trans: upcase to iso-2022-jp.
+
+ * enc/emacs_mule.c: ditto.
+
+Sun Sep 7 23:46:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/iso2022.trans: stateless-iso-2022-jp is defined to avoid
+ undefined conversion error between iso-2022-jp and the corresponding
+ stateless encoding.
+
+ * enc/emacs_mule.c: replicate emacs-mule as stateless-iso-2022-jp.
+
+Sun Sep 7 20:03:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/escape.trans (hexstr): renamed from str1.
+
+Sun Sep 7 19:45:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/escape.trans: use transcode_tblgen.
+
+ * tool/transcode-tblgen.rb: generate an empty line after str1.
+
+Sun Sep 7 19:16:38 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (ActionMap#str_name): new method to
+ generate a name base on string content.
+ (ActionMap#gen_str): extracted from generate_info and use str_name.
+
+Sun Sep 7 18:28:05 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (ActionMap#generate_info): use a memo to
+ avoid duplication for STR1.
+
+Sun Sep 7 18:10:28 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (STR1): defined for a string up to 255 bytes.
+ (STR1_BYTEINDEX): defined.
+ (makeSTR1): defined.
+
+ * tool/transcode-tblgen.rb: generate STR1.
+
+ * transcode.c (transcode_restartable0): interpret STR1.
+
+ * enc/trans/escape.trans (fun_so_escape_xml_chref): removed. STR1 is
+ used instead.
+
+Sun Sep 7 17:54:45 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * configure.in: Mac OS X's crypt(2) is broken with invalid salt.
+ [ruby-dev:35899]
+ * string.c (rb_str_crypt): ditto.
+
+Sun Sep 7 17:29:49 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: o4 is usable only if the first byte is
+ f0-f7.
+
+Sun Sep 7 12:44:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (make_writeconv): choose ASCII compatible encoding as
+ intermediate encoding if stateful encoder exists.
+
+Sun Sep 7 12:09:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (ECONV_XML_ATTR_CONTENT_ENCODER): defined.
+ (ECONV_STATEFUL_ENCODER_MASK): defined.
+ (ECONV_XML_ATTR_QUOTE_ENCODER): defined.
+ (ECONV_XML_ATTR_ENCODER): removed.
+
+ * enc/trans/escape.trans (rb_escape_xml_attr_content): defined.
+ (rb_escape_xml_attr_quote): defined.
+ (rb_escape_xml_attr): removed.
+
+ * io.c (NEED_WRITECONV): writeconv is required if supplemental
+ converter is used.
+ (make_writeconv): apply stateful encoder in writeconv.
+
+ * transcode.c: follow the constant change.
+
+Sun Sep 7 07:24:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * misc/*.el: merged the following patches from Nathan Weizenbaum
+ <nex342 at gmail.com>. [ruby-core:18424]
+
+ * misc/ruby-mode.el: improve here-doc performance.
+
+ * misc/ruby-mode.el: don't crash the whole mode if the Subversion
+ $ keyword isn't interpolated.
+
+ * misc/ruby-mode.el: don't highlight keywords when they're the
+ beginning of non-keyword symbols.
+
+ * misc/ruby-mode.el, misc/ruby-electric.el: use regexp-opt where
+ possible for more efficient regexps.
+
+ * misc/*.el: untabify, for internal consistency and consistency
+ with standard Emacs elisp files.
+
+ * misc/ruby-mode.el: fix a variable-name error.
+
+ * misc/emacs-mode.el: don't set case-fold-search globally to nil;
+ instead just set it when we need it.
+
+Sun Sep 7 06:31:51 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (file_expand_path): applied a patch from Nobuhiro Tachino
+ in [ruby-dev:35948]. fix #491
+
+Sun Sep 7 03:37:05 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (f_block_optarg): allow default for block parameters as
+ long as the value is primary. a patch from Eric Mahurin
+ <eric.mahurin at gmail.com> in [ruby-core:16880].
+
+Sun Sep 7 01:07:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (yylex): "1.upto 2 {|i| p i }" should be syntax error.
+ [ruby-dev:36008]
+
+ * test/ruby/test_parse.rb (TestParse): update a test not to use
+ recently fixed inconsistent syntax.
+
+Sun Sep 7 00:37:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (ECONV_ERROR_HANDLER_MASK): defined.
+ (ECONV_DECODER_MASK): defined.
+ (ECONV_ENCODER_MASK): defined.
+
+ * io.c (make_writeconv): restrict ecflags for writeconv with
+ ECONV_ERROR_HANDLER_MASK.
+
+Sat Sep 6 23:03:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (ECONV_XML_TEXT_ENCODER): renamed from
+ ECONV_HTML_TEXT_ENCODER.
+ (ECONV_XML_ATTR_ENCODER): renamed from ECONV_HTML_ATTR_ENCODER.
+
+ * enc/trans/escape.trans: follow the renaming.
+
+ * transcode.c: ditto.
+
+Sat Sep 6 21:35:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/mkconstants.rb: add some IPV6 constants. [ruby-dev:36175]
+
+Sat Sep 6 20:10:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_description): show ECONV_HTML_TEXT_ENCODER and
+ ECONV_HTML_ATTR_ENCODER.
+
+Sat Sep 6 20:06:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_binmode): check actual transcoders.
+
+Sat Sep 6 19:54:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open): fix last_tc.
+
+Sat Sep 6 19:36:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_binmode): clear newline flags in writeconv_pre_ecflags.
+
+Sat Sep 6 18:47:40 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (str_transcode0): check ECONV_HTML_TEXT_ENCODER and
+ ECONV_HTML_ATTR_ENCODER.
+
+Sat Sep 6 18:38:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (allocate_converted_string): fix overflow condition.
+
+Sat Sep 6 15:06:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (sym_html): new variable.
+ (sym_text): ditto.
+ (sym_attr): ditto.
+ (econv_opts): check :html=>:text and :html=>:attr.
+ (Init_transcode): initialize the above variables.
+
+Sat Sep 6 14:46:12 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (ECONV_HTML_TEXT_ENCODER): new constant.
+ (ECONV_HTML_ATTR_ENCODER): ditto.
+
+ * transcode.c (rb_econv_open): check ECONV_HTML_TEXT_ENCODER and
+ ECONV_HTML_ATTR_ENCODER.
+ (Init_transcode): Encoding::Converter::HTML_TEXT_ENCODER and
+ Encoding::Converter::HTML_ATTR_ENCODER defined.
+
+Sat Sep 6 14:15:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (struct trans_open_t): defined to pass num_additional.
+ (trans_open_i): use struct trans_open_t.
+ (rb_econv_open): ditto.
+
+Sat Sep 6 13:43:20 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/escape.trans (fun_so_escape_html_attr): fix return type.
+
+Sat Sep 6 12:43:55 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open): needless branch removed.
+
+Sat Sep 6 12:38:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open): test condition simplified.
+
+Sat Sep 6 12:25:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (stateless_encoding_i): ignore supplemental conversions.
+ Encoding::Converter.stateless_encoding("html-attr-escaped") should be
+ nil.
+
+Sat Sep 6 12:19:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/escape.trans (escape_html_attr_init): new function.
+ (fun_so_escape_html_attr): new function.
+ (escape_html_attr_finish): new function.
+ (rb_escape_html_attr): use them to quote the converted result.
+
+Sat Sep 6 07:54:36 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: uses f_real_p macro.
+
+Sat Sep 6 07:27:00 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open): fail for ASCII incompatible with
+ newline conversion.
+
+Sat Sep 6 07:24:49 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_extract_modeenc): raise an error for ASCII incompatible
+ encoding without binmode.
+
+Sat Sep 6 07:12:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigdivrem1): optimization by skipping zeros at the
+ tail of digits. a patch from TOYOFUKU Chikanobu
+ <nobu_toyofuku at nifty.com> in [ruby-dev:36169].
+
+Sat Sep 6 06:28:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/escape.trans: new file.
+
+Sat Sep 6 06:23:27 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (StrSet.parse): accept upper case
+ hexadecimal digits.
+
+Sat Sep 6 05:37:08 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (output_hex_charref): upcase hexadecimal digits.
+
+Sat Sep 6 05:22:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (ECONV_UNDEF_HEX_CHARREF): defined.
+
+ * transcode.c (output_hex_charref): new function.
+ (rb_econv_convert): call output_hex_charref if
+ ECONV_UNDEF_HEX_CHARREF.
+ (Init_transcode): Encoding::Converter::UNDEF_HEX_CHARREF added.
+
+Sat Sep 6 03:52:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_convert): use ECONV_INVALID_MASK and
+ ECONV_UNDEF_MASK.
+
+Sat Sep 6 06:05:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * include/ruby/ruby.h (DBL2NUM): renamed from DOUBLE2NUM.
+ a patch from Tadashi Saito <shiba at mail2.accsnet.ne.jp>
+ in [ruby-dev:36102].
+
+Sat Sep 6 04:44:06 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * proc.c (Init_Proc): add '===' operator to use procs in when
+ clause of the case statement. inspired by <http://www.aimred.com/news/developers/2008/08/14/unlocking_the_power_of_case_equality_proc/>.
+
+Sat Sep 6 03:18:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (allocate_converted_string): add arguments for a buffer
+ allocated by caller.
+ (rb_econv_insert_output): provide caller allocated buffer to
+ allocate_converted_string.
+
+Sat Sep 6 02:58:53 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (str_transcode_enc_args): local variables renamed.
+ (str_transcode0): ditto.
+
+Sat Sep 6 02:23:18 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_s_stateless_encoding): new method.
+
+Sat Sep 6 02:01:59 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (enc_arg): extracted from str_transcode_enc_args.
+ (str_transcode_enc_args): use enc_arg.
+
+Fri Sep 5 20:27:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_modestr_fmode): renamed from
+ rb_io_mode_flags.
+ (rb_io_modestr_oflags): renamed from rb_io_mode_modenum.
+ (rb_io_oflags_fmode): renamed from rb_io_modenum_flags.
+ (rb_io_mode_flags): defined as a macro.
+ (rb_io_modenum_flags): ditto.
+
+ * io.c: follow the renaming with consistency.
+
+ * process.c (check_exec_redirect): call rb_io_modestr_oflags.
+
+ * ext/pty/depend: pty.o depends on io.h.
+
+Fri Sep 5 20:12:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/newline.trans (universal_newline_finish): new function.
+
+Fri Sep 5 20:07:37 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_mode_modenum): moved from
+ include/ruby/intern.h.
+
+Fri Sep 5 19:59:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (MODENUM_MAX): removed.
+
+Fri Sep 5 18:37:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (copy_stream_fallback_body): use read method unless readpartial
+ is available. [ruby-dev:36124]
+
+Fri Sep 5 18:16:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (iconv_create): strips glibc style option before
+ charset mapping. retries without options if they seemed causing
+ error, and warns. [ruby-dev:36147]
+
+Fri Sep 5 03:09:48 2008 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c (iseq_data_to_ary): make it static.
+
+ * thread.c (thgroup_enclose): ditto.
+
+Fri Sep 5 02:56:37 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (thread_recycle_stack_slot, thread_recycle_stack_count):
+ make it static.
+
+Fri Sep 5 02:40:38 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_thread_critical): removed.
+
+Fri Sep 5 01:22:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (argf_mark): mark p->encs.ecopts.
+
+Fri Sep 5 00:45:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoder): rename fields:
+ from_encoding -> src_encoding, to_encoding -> dst_encoding.
+
+ * transcode.c: follow the renaming.
+
+Fri Sep 5 00:22:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c: variables renamed for consistency.
+
+Fri Sep 5 00:05:27 2008 Tanaka Akira <akr@fsij.org>
+
+ * pack.c (encodes): make buff fixed length to avoid SEGV by
+ ruby -e '["a"*10000000].pack("m1000000000")'
+
+Thu Sep 4 23:47:05 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_mode): set exception mode
+ correctly. In spite of BigDecimal.mode(BigDecimal::EXCEPTION_ALL,
+ true), BigDecimal.new("NaN") did not raise an exception previously.
+
+Thu Sep 4 23:42:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_file_open_str): declared.
+
+ * io.c (rb_file_open_str): defined.
+
+ * ext/zlib/zlib.c (gzfile_s_open): use rb_file_open_str instead of
+ rb_file_open.
+
+Thu Sep 4 23:18:55 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/newline.trans: record newline types met in universal
+ newline decoder.
+
+Thu Sep 4 23:05:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/prime.rb (Prime::OldCompatibility#each): added compatibility to
+ Ruby 1.8.7.
+ (Prime#each): added more rdocs.
+ (Prime#each): remembers the last value of the given block.
+
+Thu Sep 4 21:53:58 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_init): accept an integer as 3rd argument as well.
+
+Thu Sep 4 21:46:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (sym_partial_input): new variable.
+ (econv_primitive_convert): accept a hash as 5th argument as well.
+
+Thu Sep 4 21:04:27 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (sym_universal_newline_decoder): new variable.
+ (sym_crlf_newline_encoder): ditto.
+ (sym_cr_newline_encoder): ditto.
+ (econv_opts): check newline converter options.
+ (econv_init): make 3rd argument hash/nil only.
+
+Thu Sep 4 21:03:28 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_dump.c: rename some debug functions.
+
+Thu Sep 4 20:57:54 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_thread_check_trap_pending): added for compatibility.
+
+ * ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: remove ruby/signal.h
+ dependency.
+
+Thu Sep 4 20:30:24 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (PType): defined unconditionally.
+
+ * transcode.c (PType): don't define here.
+
+Thu Sep 4 20:19:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c: variables renamed for consistency.
+
+Thu Sep 4 19:40:50 2008 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c (gc_profile_record_get): to static function.
+ (gc_profile_result): ditto.
+ (gc_profile_report): ditto.
+
+Thu Sep 4 19:20:24 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_enc_t): rename flags to ecflags.
+ (rb_io_t): rename writeconv_pre_flags to writeconv_pre_ecflags.
+ (MakeOpenFile): follow the renaming.
+
+ * io.c: follow the renaming.
+
+Thu Sep 4 19:10:27 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (ECONV_INVALID_IGNORE): removed because
+ it tend to cause security problem. If the behaviour is really
+ required, ECONV_INVALID_REPLACE with empty string can be used.
+ For example, CVE-2006-2313, CVE-2008-1036, [ruby-core:15645],
+ http://unicode.org/reports/tr36/
+ (ECONV_UNDEF_IGNORE): ditto.
+
+ * transcode.c (rb_econv_convert): follow the above change.
+ (econv_opts): ditto.
+ (Init_transcode): ditto.
+
+Thu Sep 4 13:22:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (struct rb_vm_struct): replaced signal staff with trap
+ staff.
+
+ * signal.c (signal_buff): per process resource now.
+
+ * signal.c (trap_list): moved to VM.
+
+ * signal.c (rb_get_next_signal): reverted.
+
+ * signal.c (rb_trap_exit): trap_pending_list was no longer used.
+
+ * thread.c (timer_thread_function): delivers buffered per-process
+ signals to each VMs.
+
+ * vm.c (rb_vm_mark): marks trap_list.
+
+Thu Sep 4 13:01:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (struct sysopen_struct, rb_sysopen_internal, rb_sysopen):
+ constified.
+
+ * io.c: expanded ARGF members macros.
+
+Thu Sep 4 10:43:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/transcode-tblgen.rb (citrus_decode_mapsrc): support older 1.8.
+
+Thu Sep 4 10:33:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_next_argv, argf_set_encoding): copy struct wise.
+
+Thu Sep 4 09:46:18 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_scan_open_args): follow rb_str_transcode change.
+
+Thu Sep 4 08:59:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * file.c (rb_find_file): fix GC problem on Debian GNU/Linux (IA64)
+ with gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21).
+ There is no register/memory to contain load_path. A register (r35)
+ contains &RARRAY_PTR(load_path), (char*)load_path + 32.
+
+Thu Sep 4 03:10:05 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_t): new fields: encs.ecopts and
+ writeconv_pre_ecopts.
+ (MakeOpenFile): initialize them.
+
+ * include/ruby/encoding.h (rb_str_transcode): take ecopts argument.
+ (rb_econv_flags): removed.
+ (rb_econv_prepare_opts): declared.
+ (rb_econv_open_opts): declared.
+
+ * io.c (make_writeconv): use rb_econv_open_opts.
+ (make_readconv): ditto.
+ (io_fwrite): follow rb_str_transcode change.
+ (rb_io_extract_modeenc): use rb_econv_prepare_opts.
+ (rb_file_open_generic): initialize encs.ecopts.
+ (rb_file_open_internal): ditto.
+ (rb_io_reopen): ditto.
+ (argf_ecopts): defined.
+ (argf_next_argv): set encs.ecopts.
+ (io_encoding_set): use rb_econv_prepare_opts.
+ (argf_set_encoding): set argf_ecopts.
+
+ * gc.c (gc_mark_children): mark encs.ecopts and writeconv_pre_ecopts
+ in T_FILE.
+
+ * transcode.c (transcode_loop): take ecopts argument. use
+ rb_econv_open_opts.
+ (rb_econv_flags): removed.
+ (rb_econv_prepare_opts): defined.
+ (rb_econv_open_opts): defined.
+ (str_transcode0): take ecopts.
+ (str_transcode): use rb_econv_prepare_opts.
+ (rb_str_transcode): take ecopts.
+ (econv_init): accept hash argument.
+ (econv_insert_output): follow rb_str_transcode change.
+
+Thu Sep 4 01:30:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_set_replacemenet): declared.
+
+ * transcode.c (rb_econv_t): new fields: replacement_str,
+ replacement_len, replacement_enc and replacement_allocated.
+ (get_replacement_character): make len as size_t.
+ (rb_econv_open_by_transcoder_entries): initialize the new fields.
+ (rb_econv_close): deallocate replacement_str if it allocated.
+ (make_replacement): new function.
+ (output_replacement_character): use make_replacement.
+ (rb_econv_set_replacemenet): defined.
+ (econv_get_replacement): new method.
+ (econv_set_replacement): new method.
+
+Thu Sep 4 01:12:03 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (filetime_to_timeval): new function, split from
+ gettimeofday().
+
+ * win32/win32.c (gettimeofday): use above function.
+
+ * win32/win32.c (filetime_to_unixtime): ditto. [ruby-dev:36135]
+
+Thu Sep 4 01:00:57 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * transcode.c (transcode_restartable0): avoid VC++6's bug.
+
+Thu Sep 4 00:26:27 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (make_writeconv): follow akr's previous commit.
+
+Thu Sep 4 00:09:05 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_option_t): removed. Since
+ rb_econv_option_t has only one field, int flags, rb_econv_option_t is
+ replaced by int.
+
+ * include/ruby/io.h: follow the above change.
+
+ * io.c: ditto.
+
+ * transcode.c: ditto.
+
+Thu Sep 4 00:04:59 2008 Koichi Sasada <ko1@atdot.net>
+
+ * win32/win32.c: fix ruby/signal.h depending codes.
+
+Thu Sep 4 00:01:45 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/etc/test_etc.rb (test_getpwuid, test_getgrgid): use
+ Process.euid and egid instead of Etc.getlogin to identify current
+ user which may be different from a login one (e.g., su command).
+
+Wed Sep 3 23:52:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/etc/test_etc.rb: check only typical use of
+ setpwent/getpwent/endpwent and setgrent/getgrent/endgrent.
+
+Wed Sep 3 23:33:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_transcoding): moved from transcode_data.h.
+ (TRANSCODING_READBUF): ditto.
+ (TRANSCODING_WRITEBUF): ditto.
+ (TRANSCODING_STATE_EMBED_MAX): ditto.
+ (TRANSCODING_STATE): ditto.
+
+Wed Sep 3 23:03:37 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoding): remove stateful field.
+ add state field.
+ (TRANSCODING_STATE): defined.
+ (rb_transcoder): add fields: state_size, state_init_func,
+ state_fini_func.
+ change rb_transcoding* argument to void*.
+
+ * transcode.c (transcode_restartable0): use TRANSCODING_STATE for
+ first arguments of transcoder functions.
+ (rb_transcoding_open_by_transcoder): initialize state field.
+ (rb_transcoding_close): finalize state field.
+
+ * tool/transcode-tblgen.rb: provide state size/init/fini.
+
+ * enc/trans/newline.trans (universal_newline_init): defined.
+ (fun_so_universal_newline): take void* as a state pointer.
+ (rb_universal_newline): provide state size/init/fini.
+ (rb_crlf_newline): ditto.
+ (rb_cr_newline): ditto.
+
+ * enc/trans/iso2022.trans (iso2022jp_init): defined.
+ (fun_si_iso2022jp_to_eucjp): take void* as a state pointer.
+ (fun_so_iso2022jp_to_eucjp): ditto.
+ (fun_so_eucjp_to_iso2022jp): ditto.
+ (iso2022jp_reset_sequence_size): ditto.
+ (finish_eucjp_to_iso2022jp): ditto.
+ (rb_ISO_2022_JP_to_EUC_JP): provide state size/init/fini.
+ (rb_EUC_JP_to_ISO_2022_JP): ditto.
+
+ * enc/trans/utf_16_32.trans (fun_so_from_utf_16be): take void* as a
+ state pointer.
+ (fun_so_to_utf_16be): ditto.
+ (fun_so_from_utf_16le): ditto.
+ (fun_so_to_utf_16le): ditto.
+ (fun_so_from_utf_32be): ditto.
+ (fun_so_to_utf_32be): ditto.
+ (fun_so_from_utf_32le): ditto.
+ (fun_so_to_utf_32le): ditto.
+ (rb_from_UTF_16BE): provide state size/init/fini.
+ (rb_to_UTF_16BE): ditto.
+ (rb_from_UTF_16LE): ditto.
+ (rb_to_UTF_16LE): ditto.
+ (rb_from_UTF_32BE): ditto.
+ (rb_to_UTF_32BE): ditto.
+ (rb_from_UTF_32LE): ditto.
+ (rb_to_UTF_32LE): ditto.
+
+ * enc/trans/japanese.trans (fun_so_eucjp2sjis): take void* as a state
+ pointer.
+ (fun_so_sjis2eucjp): ditto.
+ (rb_eucjp2sjis): provide state size/init/fini.
+ (rb_sjis2eucjp): provide state size/init/fini.
+
+Wed Sep 3 22:31:11 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/mathn.rb (Integer): moved into prime.rb.
+ (Prime): ditto.
+
+ * lib/prime.rb (Integer): moved from mathn.rb.
+ (Integer.each_prime): added.
+ (Integer#prime?): added.
+ (Prime): moved from mathn.rb.
+ Its implementation was rewritten. see [ruby-dev:35863].
+ And patched by Keiju ISHITSUKA <keiju@ishitsuka.com>,
+ see [ruby-dev:36128].
+ (Prime.new): obsolete.
+ (Prime.instance): added.
+ (Prime.each): added.
+ (Prime.int_from_prime_division): added.
+ (Prime.prime_division): added.
+ (Prime.prime?): added.
+ Patch by TOYOFUKU Chikanobu
+ <nobu_toyofuku at nifty.com> in [ruby-dev:36067].
+ (Prime.cache): removed.
+ (Prime.primes): removed.
+ (Prime.primes_so_far): removed.
+ (Prime#int_from_prime_division): added.
+ (Prime#prime_division): added.
+ (Prime#prime?): added.
+ (Prime#primes): removed.
+ (Prime#primes_so_far): removed.
+ (Prime::PseudoPrmeGenerator): added.
+ (Prime::EratosthenesGenerator): added.
+ (Prime::TrialDivisionGenerator): added.
+ (Prime::Generator23): added.
+ (Prime::TrialDivision): added.
+ Extracted from the previous implementation of Prime
+ by Keiju ISHITSUKA.
+ (Prime::EratosthenesSieve): added.
+
+ * lib/.document (prime.rb): added
+
+ * lib/README (prime.rb): added
+
+ * test/test_prime.rb: added.
+
+Wed Sep 3 21:49:00 2008 David A. Black <dblack@rubypal.com>
+
+ * lib/scanf.rb: fixed bug involving matching literal '['
+
+ * test/scanf/test_scanf.rb: added test for scanf.rb fix
+
+Wed Sep 3 21:31:59 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (WORDINDEX_SHIFT_BITS): defined.
+ (WORDINDEX2INFO): defined.
+ (INFO2WORDINDEX): defined.
+
+ * tool/transcode-tblgen.rb: use WORDINDEX2INFO.
+
+ * transcode.c: use INFO2WORDINDEX.
+
+Wed Sep 3 21:19:51 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * golf_prelude.rb: suppress warnings when goruby -v.
+
+Wed Sep 3 21:07:30 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (BL_MIN_BYTE): defined.
+ (BL_MAX_BYTE): defined.
+ (BL_OFFSET): defined.
+ (BL_ACTION): defined.
+ (transcode_restartable0): use BL_MIN_BYTE, BL_MAX_BYTE and
+ BL_ACTION.
+
+Wed Sep 3 20:58:30 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (BYTE_ADDR): defined.
+ (WORD_ADDR): ditto.
+ (BL_BASE): use BYTE_ADDR and WORD_ADDR.
+ (BL_INFO): use WORD_ADDR.
+
+Wed Sep 3 20:47:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoder): new field: byte_array_length and
+ word_array_length.
+
+ * tool/transcode-tblgen.rb (transcode_generated_code): generate
+ byte_array_length and word_array_length.
+
+Wed Sep 3 20:34:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (ArrayCode): new class.
+ (ActionMap#gen_array_code): moved to ArrayCode.
+ (ActionMap#numelt_array_code): ditto.
+ (ActionMap#array_code_insert_at_last): ditto.
+ (TRANSCODE_GENERATED_BYTES_CODE): use ArrayCode.
+ (TRANSCODE_GENERATED_WORDS_CODE): ditto.
+
+Wed Sep 3 20:08:35 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/japanese.trans: new file.
+
+Wed Sep 3 20:04:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (ActionMap#gen_array_code): extracted from
+ generate_lookup_node.
+ (ActionMap#numelt_array_code): ditto.
+ (ActionMap#array_code_insert_at_last): ditto.
+
+Wed Sep 3 20:01:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * parse.y (parser_encoding_name): defined.
+ (parser_tokadd_mbchar): show encoding in the message of
+ "invalid multibyte char" error.
+
+Wed Sep 3 19:28:04 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_method_missing): C99.
+
+Wed Sep 3 19:18:12 2008 Koichi Sasada <ko1@atdot.net>
+
+ * test/ruby/test_thread.rb: fix test.
+ [ruby-dev:35960]
+
+Wed Sep 3 17:48:32 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/make_transdb.rb: check $(srcdir)/enc/trans before
+ enc/trans.
+
+ * enc/trans/make_transdb.rb: keep names_t.
+
+Wed Sep 3 16:54:46 2008 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/signal.h: removed.
+
+ * common.mk, class.c, eval.c, eval_intern.h, file.c, gc.c, hash.c,
+ io.c, process.c, signal.c: vm_core.h: ditto.
+ Some unused external global variables are also removed.
+ (rb_prohibit_interrupt, rb_trap_immediate, rb_trap_pending,
+ rb_thread_critical)
+
+ * ext/openssl/ossl_ssl.c, ext/openssl/ossl_x509store.c,
+ ext/readline/readline.c, ext/socket/depend,
+ ext/socket/socket.c: ditto.
+
+Wed Sep 3 00:23:25 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_insnhelper.c (vm_method_missing): copy arguments to allocated
+ memory from machine stack. [ruby-dev:36064]
+
+Tue Sep 2 22:20:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (base_element): removed.
+ (BYTE_LOOKUP): removed.
+ (BYTE_LOOKUP_BASE): don't cast.
+ (BYTE_LOOKUP_INFO): ditto.
+ (PType): unsigned int, instead of uintptr_t.
+ (rb_transcoding): change type of next_field, conv_tree_start and
+ word_array.
+
+ * tool/transcode-tblgen.rb: generate word_array as array of unsigned
+ int.
+
+ * transcode.c (transcode_restartable0): follow the above type change.
+
+Tue Sep 2 21:22:22 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: add prefix for byte_array and word_array.
+
+Tue Sep 2 20:57:14 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/make_transdb.rb: check foo.c only if foo.trans exists.
+
+Tue Sep 2 19:19:55 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/make_transdb.rb: error message improved.
+
+Tue Sep 2 14:05:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * enc/trans/utf_16_32.trans (from_UTF_8): rename from to_UTF_16BE
+ because it was not collect.
+
+Tue Sep 2 14:00:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * enc/emacs_mule.c (svn:executable): dropped executable bit.
+
+ * enc/make_encdb.rb (svn:executable): ditto.
+
+Tue Sep 2 12:58:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (COMPILERFLAG): new compiler flag to compile
+ enc/trans/japanese*.c.
+
+Tue Sep 2 12:37:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/japanese_euc.trans: splitted from japanese.trans to avoid
+ compiler limitation. reported by usa.
+
+ * enc/trans/japanese_sjis.trans: ditto.
+
+Tue Sep 2 12:31:24 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (miniruby): new target.
+
+Tue Sep 2 11:47:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (struct load_arg): data is now st_table.
+
+ * marshal.c (mark_load_arg): marks data and compat_tbl.
+
+ * marshal.c (r_object0): no need to check if reentered.
+
+ * marshal.c (marshal_load): make the wrapper with mark_load_arg.
+
+Tue Sep 2 10:49:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (gettimeofday): easier calculation. use the definition
+ of the Gregorian calendar.
+
+Tue Sep 2 10:33:12 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (distclean-golf): moved golf_prelude.c here from
+ distclean-local.
+ (GOLFPRELUDE): added.
+ (distclean-local): moved golf_prelude.c into distclean-golf.
+
+Tue Sep 2 10:09:17 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (gettimeofday): calc tv_sec and tv_usec from system
+ time by myself. [ruby-dev:36084]
+
+Tue Sep 2 04:00:37 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (o3): prevent sign extension on 64bit environment.
+ (o4): ditto.
+
+Tue Sep 2 03:26:24 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: comment removed in generated code.
+
+Tue Sep 2 03:16:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: define TRANSCODE_TABLE_INFO in generated
+ code. use it in rb_transcoder.
+
+ * enc/trans/newline.trans: use TRANSCODE_TABLE_INFO.
+
+ * enc/trans/iso2022.trans: ditto.
+
+ * enc/trans/utf_16_32.trans: ditto.
+
+Tue Sep 2 03:04:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: record infos and BYTE_LOOKUPs as index of
+ word_array to avoid relocation.
+
+ * transcode.c (transcode_restartable0): add word_array to get infos
+ and BYTE_LOOKUPs.
+
+ * transcode_data.h (BYTE_LOOKUP_INFO): change return type to
+ uintptr_t.
+
+Tue Sep 2 02:48:30 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: don't need to cast offsets array.
+
+Tue Sep 2 02:36:20 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: record offsets array as index of
+ byte_array to avoid relocation.
+
+ * transcode.c (transcode_restartable0): add byte_array to get offsets
+ array.
+
+ * transcode_data.h (BYTE_LOOKUP_BASE): change return type to
+ uintptr_t.
+ (rb_transcoder): add fields: byte_array, word_array and word_size.
+
+ * enc/trans/newline.trans: follow rb_transcoder change.
+
+ * enc/trans/iso2022.trans: ditto.
+
+ * enc/trans/utf_16_32.trans: ditto.
+
+Tue Sep 2 02:05:14 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: make infos arrays and BYTE_LOOKUPs into
+ single array.
+
+Tue Sep 2 01:47:44 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (clean-golf): added.
+ (distclean-golf): added.
+ (realclean-golf): added.
+ (clean): added clean-golf.
+ (distclean): added distclean-golf.
+ (realclean): added realclean-golf.
+
+Tue Sep 2 01:31:45 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (realclean-local): added newline.c.
+
+Tue Sep 2 01:19:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (BYTE_LOOKUP): change to uintptr_t array.
+ (BYTE_LOOKUP_BASE): follow the type change.
+ (BYTE_LOOKUP_INFO): ditto.
+ (PType): ditto.
+ (rb_transcoding): ditto.
+
+ * tool/transcode-tblgen.rb: follow the type change.
+
+ * transcode.c: ditto.
+
+ * enc/trans/newline.trans: ditto.
+
+ * enc/trans/iso2022.trans: ditto.
+
+ * enc/trans/utf_16_32.trans: ditto.
+
+Mon Sep 1 23:32:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (BYTE_LOOKUP_BASE): abstract accessor for
+ BYTE_LOOKUP.
+ (BYTE_LOOKUP_INFO): ditto.
+
+ * transcode.c (transcode_restartable0): use BYTE_LOOKUP_BASE and
+ BYTE_LOOKUP_INFO.
+
+Mon Sep 1 23:14:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: gather infos arrays and BYTE_LOOKUPs.
+
+Mon Sep 1 22:42:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * lib/mkmf.rb (distclean): added RM_RF conftest.dSYM.
+ Fixes distclean-ext problem on Mac OS X.
+ (RM_RF): added.
+
+Mon Sep 1 22:37:06 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/rexml/document.rb: limit entity expansion. Thanks, Luka
+ Treiber, Mitja Kolsek, and Michael Koziarski.
+
+ * lib/rexml/entity.rb: ditto.
+
+ * test/rexml/test_document.rb: ditto.
+
+Mon Sep 1 22:20:22 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: make offsets arrays into single array.
+
+Mon Sep 1 21:46:18 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: gather offsets arrays at top.
+
+Mon Sep 1 21:09:04 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * ./: removed rubyspec from svn:ignore subversion property.
+ rubyspec directory is no longer used.
+
+ * spec: added mspec and rubyspec to svn:ignore.
+
+Mon Sep 1 19:37:19 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: ValidEncoding['eucJP-ms'] defined.
+ "\xA2\xAF".encode("utf-8", "eucJP-ms") should raise
+ Encoding::ConversionUndefined, not Encoding::InvalidByteSequence.
+
+Mon Sep 1 18:27:51 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (gettimeofday): shouldn't use mktime(3) because it's
+ buggy about handling summer time.
+ reported by Yoshikawa <yoshixool AT gmail.com> at [ruby-dev:36071]
+
+Mon Sep 1 17:07:23 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/euc_jp.c (euc-jp-ms): euc-jp-ms is not an alias of EUC-JP
+ but eucJP-ms.
+
+ * enc/trans/japanese.trans (eucJP-ms): eucJP-ms is the correct
+ name of the encoding in Ruby. [ruby-dev:36070]
+
+Mon Sep 1 16:48:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/digest/md5/md5init.c (md5), ext/digest/rmd160/rmd160init.c
+ (rmd160) ext/digest/sha1/sha1init.c (sha1),
+ ext/digest/sha2/sha2init.c (sha256, sha384, sha512): constified.
+
+Mon Sep 1 15:15:40 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/japanese.trans: fix mapping priority.
+ IBM extended is prior than NEC selected IBM.
+
+Mon Sep 1 14:44:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/transcode-tblgen.rb (transcode_compile_tree): use the first
+ mapping when some mappings are given for a character.
+ [ruby-dev:36068]
+
+ * tool/transcode-tblgen.rb: expandtab.
+
+Mon Sep 1 14:40:18 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * README.EXT (Appendix A): fixed the name of class
+ Enumerator. Enumerable::Enumerator was renamed just
+ Enumerator at revision 18564.
+
+ * README.EXT (Appendix A): ditto.
+
+Mon Sep 1 14:37:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * tool/transcode-tblgen.rb: set ERB source filename for error message.
+
+Mon Sep 1 14:37:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend: transdb.c may not present.
+
+Mon Sep 1 14:25:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/japanese.trans: fix Ruby 1.8 compatibility.
+
+ * enc/trans/japanese.trans: fix mapping priority. [ruby-dev:36068]
+
+Mon Sep 1 14:24:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ruby/test_transcode.rb (test_windows_31j): added.
+
+Mon Sep 1 14:00:04 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * README.EXT (Data-types): fixed for current status.
+ (Manipulating Ruby data): mentioned some more functions.
+ (Class/module definition): ditto.
+ (Global variables shared between C and Ruby):
+ fixed prototypes for the getter/setter's of global variables.
+ (Appendix A): mentioned some more files.
+
+ * README.EXT.ja: ditto.
+
+Mon Sep 1 11:31:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/fileutils.rb (copy_stream, fu_copy_stream0, copy_file): use
+ IO.copy_stream to get rid of extraneous conversion.
+
+Mon Sep 1 02:55:15 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * strftime.c (rb_strftime): calc timezone offset by myself if system
+ doesn't provide timezone info.
+
+Mon Sep 1 02:48:28 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: change "illegal" to "invalid".
+
+Mon Sep 1 02:31:16 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (transcode_generated_code): defined for
+ generating table at once.
+ (transcode_tblgen): returns an empty string.
+ (transcode_generate_node): ditto.
+
+ * enc/trans/newline.trans: use transcode_generated_code.
+
+ * enc/trans/iso2022.trans: ditto.
+
+ * enc/trans/single_byte.trans: ditto.
+
+ * enc/trans/utf_16_32.trans: ditto.
+
+ * enc/trans/japanese.trans: ditto.
+
+ * enc/trans/korean.trans: ditto.
+
+Mon Sep 1 02:10:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (citrus_decode_mapsrc): print logging
+ message on STDERR.
+
+Mon Sep 1 01:24:09 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/eucjp-tbl.rb: replace by previous Citrus maps.
+
+ * enc/trans/sjis-tbl.rb: ditto.
+
+Mon Sep 1 01:18:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/transcode-tblgen.rb: add table generator from Citrus maps.
+
+ * enc/trans/japanese.trans: use Citrus maps.
+
+ * enc/trans/CP: add maps from Citrus.
+
+ * enc/trans/JIS: ditto.
+
+ * test/ruby/test_transcode.rb: Shift_JIS and EUC-JP doesn't support
+ IBM extended characters.
+
+Mon Sep 1 00:19:45 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (docs): removed a useless make target.
+ tool/makedoc.rb was removed at revision 13919.
+
+Sun Aug 31 20:49:42 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (numeric_abs2): new.
+
+Sun Aug 31 18:22:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (have_devel?): checks if the compiler works.
+
+Sun Aug 31 18:02:41 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * Temporarily uses git://github.com/yugui/rubyspec.git
+ until specs for 1.9 is merged into
+ git://github.com/rubyspec/rubyspec.git.
+
+Sun Aug 31 18:06:49 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (transcode.c): set source_encoding and
+ destination_encoding as encoding object.
+ (ecerr_source_encoding): new method.
+ (ecerr_destination_encoding): ditto.
+
+Sun Aug 31 17:58:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (Logging.log_open): opens in binary mode to get rid of
+ extra CR.
+
+ * lib/mkmf.rb (try_func, try_var, have_struct_member),
+ (scalar_ptr_type?, scalar_type?): use MAIN_DOES_NOTHING.
+
+ * lib/mkmf.rb (MAIN_DOES_NOTHING): defaults to ordinary main.
+
+ * win32/Makefile.sub (config): for MAIN_DOES_NOTHING for wince.
+
+Sun Aug 31 17:30:35 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * spec/README (How to run): added.
+
+Sun Aug 31 17:28:25 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * spec/default.mspec (config): added.
+
+ * spec/default.mspec (target): replaced the built ruby
+ to runruby.rb.
+ Improved $LOAD_PATH on running specs.
+
+ * spec/default.mspec (flags): ditto.
+
+Sun Aug 31 17:16:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (make_econv_exception): rename instance variable names
+ for storing encoding names.
+ (ecerr_source_encoding_name): method renamed.
+ (ecerr_destination_encoding_name): ditto.
+
+Sun Aug 31 16:57:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_putback): associate encoding to the result.
+
+Sun Aug 31 16:43:56 2008 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/intern.h: rename RB_UBF_DFL to
+ RUBY_UBF_IO and RUBY_UBF_PROCESS.
+ Because there is no default (universal) unblocking function.
+
+ * ext/socket/socket.c, file.c, io.c, process.c, thread.c: ditto.
+
+Sun Aug 31 16:42:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_insert_output): raise ArgumentError on failure.
+
+Sun Aug 31 16:39:17 2008 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_thread.rb: add a test.
+
+Sun Aug 31 16:34:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/single_byte.trans (us_ascii_map): don't define 8bit bytes.
+
+Sun Aug 31 14:27:27 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_last_error): new method.
+
+Sun Aug 31 14:17:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_primitive_convert): make two arguments,
+ destination_byteoffset and destination_bytesize, optional.
+
+Sun Aug 31 14:12:06 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (make_econv_exception): error message simplified.
+
+Sun Aug 31 13:47:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/coverage/coverage.c (rb_mCoverage): removed unneeded static variable.
+
+ * ext/socket/socket.c (unix_recv_io): ditto.
+
+ * ext/socket/socket.c (mConst): ditto.
+
+Sun Aug 31 13:45:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/ossl_ocsp.c (ossl_ocspres_initialize): fix for
+ initialization of r18168.
+
+Sun Aug 31 13:42:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/ripper/eventids2.c (ripper_init_eventids2): use rb_intern_const.
+
+ * ext/ripper/tools/generate.rb (generate_eventids1): ditto.
+
+ * ext/ripper/tools/generate.rb (generate_eventids2_table): ditto.
+
+Sun Aug 31 12:56:00 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/dl/mkcallback.rb (rb_dl_init_callbacks): fix indent.
+
+Sun Aug 31 11:39:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/strscan/strscan.c (strscan_do_scan): fix usecnt decrement.
+
+Sun Aug 31 04:38:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_putback): make max argument optional.
+
+Sun Aug 31 04:35:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_putback): putback from last byte.
+
+Sun Aug 31 04:27:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_putback): renamed from econv_primitive_putback.
+
+Sun Aug 31 04:22:51 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_insert_output): renamed from
+ econv_primitive_insert_output.
+
+Sun Aug 31 04:20:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_econv.rb: follow econv_primitive_errinfo change.
+
+Sun Aug 31 03:44:24 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_primitive_errinfo): 5th element (partial_input)
+ removed from result.
+
+Sun Aug 31 01:53:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/dl/mkcallback.rb: split callback.h to callback-[0-9].c to reduce
+ memory consumption on compilation. [ruby-dev:31898]
+
+ * ext/dl/depend: add dependency for callback-[0-9].[co].
+
+Sun Aug 31 01:27:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/dl/mkcallback.rb (foreach_proc_entry): extracted.
+ (gencallback): ditto.
+ (gen_push_proc_ary): ditto.
+ (gen_push_addr_ary): ditto.
+
+Sat Aug 30 23:51:01 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * test/rinda/test_tuplebag.rb (test_has_expires_eh): fix failures
+ [ruby-dev:35937].
+
+Sat Aug 30 23:38:00 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/dl/test/test_import.rb: fix character code.
+
+ * ext/dl/test/test_func.rb: ditto.
+
+Sat Aug 30 22:23:31 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c: added a static variable for nurat_to_f.
+
+Sat Aug 30 20:05:41 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_open, rb_w32_read, rb_w32_write): fallback to
+ MSVCRT if text mode is specified. this case will not be used from
+ ruby itself.
+
+Sat Aug 30 19:49:38 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_read): EOF is not error.
+ ref [ruby-dev:36050]
+
+Sat Aug 30 18:17:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (struct token_info): constified.
+
+ * parse.y (token_info_get_column, token_info_has_nonspaces),
+ (token_info_push, token_info_pop): constified.
+
+Sat Aug 30 15:43:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/openssl/ossl_config.c (Init_ossl_config): memory leak fixed.
+ a patch <shinichiro.hamaji at gmail.com> in [ruby-dev:35880].
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509ext_set_value): ditto.
+
+ * ext/strscan/strscan.c (strscan_do_scan): ditto.
+
+Sat Aug 30 14:58:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/ossl_x509ext.c (ossl_x509ext_initialize): fix for
+ initialization of r18168.
+
+Sat Aug 30 14:47:30 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/dl/mkcallback.rb: fix continuation line detection.
+
+Sat Aug 30 14:39:51 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/dl/mkcallback.rb (rb_dl_init_callbacks): avoid GC problem which
+ is caused by 'GC.stress=true; require "dl"'.
+
+Sat Aug 30 11:54:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (token_info_push): -w warns indentation level mismatch.
+ based on a patch from Yukina Yamano presented at RubyKaigi'07.
+ See <http://jp.rubyist.net/RubyKaigi2007/Log0609-LT06.html> and
+ <http://www.logic-junction.com/products/rubyend.html> (Japanese).
+
+Sat Aug 30 10:46:44 2008 Koichi Sasada <ko1@atdot.net>
+
+ * ext/iconv/iconv.c: remove include pragma for "ruby/intern.h".
+
+Sat Aug 30 10:43:03 2008 Koichi Sasada <ko1@atdot.net>
+
+ * parse.y: remove include pragma for "ruby/intern.h".
+
+Sat Aug 30 10:41:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rake.rb (Rake::Application#help): fix for OPTIONAL_ARGUMENT and
+ multiple short options. [ruby-dev:36051]
+
+Sat Aug 30 08:59:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_file_s_absolute_path),
+ (rb_file_absolute_path): prototyped.
+
+Sat Aug 30 08:09:36 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_compatible_p): use TYPE not BUILTIN_TYPE.
+ [ruby-dev:36048]
+
+Sat Aug 30 07:48:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_compatible_p): add SPECIAL_CONST_P check.
+ [ruby-dev:36048]
+
+ * test/ruby/test_m17n.rb (test_compatible): fix test.
+
+Sat Aug 30 02:48:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_freeze): update rdoc to mention RuntimeError
+ (not TypeError any longer) would be raised. [ruby-dev:35982]
+
+Sat Aug 30 01:55:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (bigdivmod): remove redundant code. a patch from
+ TOYOFUKU Chikanobu <nobu_toyofuku at nifty.com> in [ruby-dev:36044].
+
+Sat Aug 30 01:37:20 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/cgi.rb (CGI#initialize): remove unused constants. a patch
+ from Takeyuki Fujioka in [ruby-dev:36046].
+
+Fri Aug 29 22:29:41 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c ({nucomp,numeric}_rect): new.
+
+ * complex.c: added some aliases
+ (::rectangular, ::rect, #rectangular, #rect, #phase,
+ #magnitude).
+
+ * complex.c (string_to_c_internal): should not strip any null
+ bytes.
+
+ * rational.c (string_to_r_internal): ditto.
+
+ * rational.c (i_gcd): reverted to nurat 0.0.2's one.
+
+ * numeric.c: added an alias (#magnitude).
+
+ * bignum.c: ditto.
+
+ * test/ruby/test_complex.rb: added assertions.
+
+ * test/ruby/test_rational.rb: ditto.
+
+Fri Aug 29 19:46:02 2008 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c, include/ruby/ruby.h: rename T_DEFERRED to T_ZOMBIE.
+
+Fri Aug 29 18:22:27 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_compatible_p): raise TypeError when argument is not
+ String nor Regexp.
+
+Fri Aug 29 18:20:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_index_m): only regexp uses byte offset.
+
+ * string.c (rb_str_rindex_m): ditto.
+
+Fri Aug 29 16:48:34 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_call_method): copy arguments to allocated
+ memory from machine stack. [ruby-dev:36028]
+
+ * KNOWNBUGS.rb, bootstraptest/test_method.rb: move fixed test.
+
+Fri Aug 29 12:19:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/ossl_x509attr.c (ossl_x509attr_initialize): fix for
+ initialization of r18168.
+
+ * ext/openssl/ossl_ocsp.c (ossl_ocspreq_initialize): ditto.
+
+ * ext/openssl/ossl_x509name.c (ossl_x509name_initialize): ditto.
+
+Fri Aug 29 11:04:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_compatible): ASCII compatible string and US-ASCII
+ regexp is compatible. [ruby-dev:36033]
+
+ * string.c (rb_str_index_m): second argument is position of character.
+ by usa. [ruby-dev:36033]
+
+ * string.c (rb_str_rindex_m): ditto.
+
+Fri Aug 29 04:47:49 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_read, rb_w32_write): more accurate handling
+ of wait result.
+
+Fri Aug 29 02:59:35 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_finish): new method.
+
+Fri Aug 29 02:45:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_convert): new method.
+
+Fri Aug 29 02:38:14 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_primitive_convert): accept nil as
+ destination_bytesize for unlimited destination size.
+
+Fri Aug 29 02:11:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_primitive_convert): accept nil as input for empty
+ input.
+
+Fri Aug 29 02:03:56 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * strftime.c (rb_strftime): supported %s and %P.
+
+ * time.c (time_strftime): ditto.
+
+ * test/ruby/test_time.rb (test_strftime): ditto.
+
+Fri Aug 29 01:57:58 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (sym_invalid_byte_sequence): new variable.
+ (sym_undefined_conversion): ditto.
+ (sym_destination_buffer_full): ditto.
+ (sym_source_buffer_empty): ditto.
+ (sym_finished): ditto.
+ (sym_output_followed_by_input): ditto.
+ (sym_incomplete_input): ditto.
+ (econv_result_to_symbol): use above variables.
+ (Init_transcode): initialize above variables.
+
+Fri Aug 29 00:53:40 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * strftime.c (rb_strftime): fixed a bug of padding.
+
+ * test/ruby/test_time.rb: ditto.
+
+Fri Aug 29 00:19:54 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (set_pioinfo_extra): use MSVCRT's open() and close().
+
+Fri Aug 29 00:03:13 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * file.c (file_expand_path): check invalid access.
+
+Thu Aug 28 23:55:50 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * strftime.c (rb_strftime): Time.mktime(2000).strftime("%-S") should
+ return "0", not "".
+
+ * test/ruby/test_time.rb: ditto.
+
+Thu Aug 28 23:55:22 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_time.rb: suppress warning during test.
+
+Thu Aug 28 23:50:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_time.rb (test_strftime): make test for %a independent
+ from local timezone. [ruby-dev:35992]
+
+Thu Aug 28 23:39:49 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (rb_str_shared_replace): remove corrupt noembed string
+ which causes SEGV. [ruby-dev:35989]
+
+Thu Aug 28 23:36:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * common.mk: dependency updated.
+
+Thu Aug 28 23:28:57 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * KNOWNBUGS.rb: add a test. see [ruby-dev:36028]
+
+Thu Aug 28 21:43:05 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c, include/ruby/win32.h (rb_w32_open): overlapped file
+ I/O support.
+
+ * win32/win32.c, include/ruby/win32.h (rb_w32_pipe): overlapped pipe
+ I/O support.
+
+ * win32/win32.c (rb_w32_read, rb_w32_write): overlapped I/O support to
+ enable canceling I/O.
+
+ * thread_win32.c (ubf_handle): remove workaround.
+
+Thu Aug 28 20:22:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_yield_setup_args): object with to_ary should
+ behave like array. a patch from Yusuke Endoh <mame at tsg.ne.jp>
+ in [ruby-dev:35988]. [ruby-dev:35977]
+
+ * object.c (convert_type): call less rb_intern() less frequently
+ by using cache structure.
+
+ * vm_method.c (rb_method_node): fail earlier if no method found.
+
+Thu Aug 28 19:04:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bootstraptest/test_io.rb: no need to create real file.
+
+Thu Aug 28 09:26:53 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/cgi/test_cgi_multipart.rb: add test for multipart.
+ Patch by Takeyuki Fujioka. [ruby-dev:36014]
+ From CGIAlt http://cgialt.rubyforge.org/
+
+Thu Aug 28 09:22:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/cgi/test_cgi_modruby.rb: add test for mod_ruby adaptor.
+ Patch by Takeyuki Fujioka. [ruby-dev:36013]
+ From CGIAlt http://cgialt.rubyforge.org/
+
+Thu Aug 28 09:17:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/cgi/test_cgi_header.rb: add test for CGI::Header.
+ Patch by Takeyuki Fujioka. [ruby-dev:36010] [ruby-dev:36011]
+ From CGIAlt http://cgialt.rubyforge.org/
+
+Thu Aug 28 02:16:49 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_t): refcnt field removed.
+ (MakeOpenFile): refcnt initialization removed.
+
+ * io.c (rb_io_fptr_finalize): don't check refcnt.
+ (rb_io_close_read): don't use refcnt.
+
+Thu Aug 28 00:07:59 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_initialize): don't accept IO object. [ruby-dev:35895]
+
+Wed Aug 27 23:28:51 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_invoke): WIN32OLE#[] and WIN32OLE#[]=
+ accepts number argument.
+
+ * test/win32ole/test_win32ole.rb: ditto.
+
+Wed Aug 27 14:45:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/cgi/test_cgi_core.rb: add core test.
+ Patch by Takeyuki Fujioka. [ruby-dev:36001] [ruby-dev:36002]
+ From CGIAlt http://cgialt.rubyforge.org/
+
+Wed Aug 27 10:34:42 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/cgi.rb (CGI::Cookie): remove delegate.
+ Patch by Takeyuki Fujioka. [ruby-dev:35995]
+
+ * test/cgi/test_cgi_cookie.rb: added for above.
+ Patch by Takeyuki Fujioka. [ruby-dev:35996]
+ From CGIAlt http://cgialt.rubyforge.org/
+
+Wed Aug 27 01:13:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (transcode_loop): simplified.
+
+Wed Aug 27 01:03:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_result_t): enumeration constant:
+ econv_incomplete_input.
+
+ * io.c (finish_writeconv): check econv_incomplete_input.
+
+ * transcode.c (transcode_restartable0): return econv_incomplete_input
+ for unexpected end of source buffer.
+ (trans_sweep): check econv_incomplete_input.
+ (rb_trans_conv): ditto.
+ (rb_econv_convert0): ditto.
+ (rb_econv_convert): ditto.
+ (transcode_loop): ditto.
+ (make_econv_exception): change message for econv_incomplete_input.
+ (econv_result_to_symbol): return :incomplete_input for
+ econv_incomplete_input.
+ (ecerr_incomplete_input): new method.
+
+Wed Aug 27 00:05:55 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_t): rename crbuf to cbuf.
+
+ * io.c: follow the renaming.
+
+Tue Aug 26 23:52:24 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_elem_t): move to transcode.c
+ (rb_econv_t): defined as an incomplete type.
+
+ * transcode.c (rb_econv_elem_t): moved from encoding.h.
+ (rb_econv_t): complete type defined.
+
+Tue Aug 26 22:44:12 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * time.c (time_asctime): workaround for MSVCRT's bug.
+ based on a patch from wanabe <s.wanabe AT gmail.com> at
+ [ruby-dev:35831] and a suggestion by KIMURA Koichi
+ <kbk AT kt.rim.or.jp> at [ruby-dev:35832]
+ fixed [ruby-dev:35555]
+
+Tue Aug 26 21:53:56 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open): disable newline conversion for ASCII
+ incompatible encodings.
+ (str_transcode0): don't need disable newline conversion here.
+
+Tue Aug 26 21:44:39 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_binmode): binmode is effective only once.
+
+Tue Aug 26 19:43:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (rb_file_s_expand_path): new class method for class File.
+
+ * file.c (file_expand_path): add absolute_path handling (no ~user
+ expansion). [ruby-core:18319]
+
+Tue Aug 26 19:27:54 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * test/ruby/test_enum.rb (TestEnumerable#test_each_with_object):
+ Add a test for Enumerable#each_with_object.
+
+Tue Aug 26 19:25:44 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * test/ruby/test_enumerator.rb (TestEnumerator#test_with_object):
+ Add (back) the test for Enumerator#with_object.
+
+Tue Aug 26 16:16:43 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/cgi/test_cgi_tag_helper.rb: add more tests for html3.
+ Patch by Takeyuki Fujioka. [ruby-dev:35975]
+ From CGIAlt http://cgialt.rubyforge.org/
+
+Tue Aug 26 14:43:10 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c: Activate Enumerator#with_object and add
+ Enumerable#each_with_object. [experimental]
+
+Tue Aug 26 14:38:32 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (enumerator_initialize),
+ test/ruby/test_enumerator.rb: Add an ability to generate an
+ enumerator from a block. [experimental] [ruby-dev:35903]
+
+Tue Aug 26 13:25:25 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * test/ruby/test_transcode.rb: added test_euc_jp
+ (contributed by Yoshihiro Kambayashi)
+
+Tue Aug 26 11:54:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/cgi/test_cgi_tag_helper.rb: added by Takeyuki Fujioka.
+ [ruby-dev:35971]
+
+Tue Aug 26 11:33:30 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/cgi.rb (nOE_element_def): fix error when cascade methods which
+ don't have arguments. Patch by Takeyuki Fujioka. [ruby-dev:35964]
+
+ * lib/cgi.rb (blockquote): String#collect (this depends on
+ String#each) is no longer exists.
+ Patch by Takeyuki Fujioka. [ruby-dev:35946]
+
+ * lib/cgi.rb (blockquote): ditto.
+
+Tue Aug 26 03:06:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (make_writeconv): copy invalid/undef flags.
+
+Tue Aug 26 02:47:08 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * common.mk (dist): tool/make-snapshot is executable.
+
+ * tool/make-snapshot (package): supported release numbers 1.9.0-x.
+
+Tue Aug 26 02:43:50 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_t): new field: writeconv_pre_opts.
+
+ * io.c (make_writeconv): initialize writeconv_pre_opts.
+ (io_fwrite): use writeconv_pre_opts.
+
+Tue Aug 26 01:48:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c: test _WIN32 for CRLF platform. (cygwin defines O_BINARY.)
+
+Tue Aug 26 01:29:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c: force CRLF handling if RUBY_TEST_CRLF_ENVIRONMENT is defined.
+ This is only for testing.
+
+Tue Aug 26 01:26:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (str_transcode0): disable newline conversion for ASCII
+ incompatible encoding.
+
+Tue Aug 26 00:55:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (str_transcode0): don't short cut for newline conversion.
+
+Tue Aug 26 00:36:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_fwrite): add TEXTMODE_NEWLINE_ENCODER to option for
+ rb_str_transcode.
+
+Tue Aug 26 00:24:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (make_econv_exception): show readagain part for invalid
+ byte sequence exception. store the part as an instance variable.
+ (ecerr_readagain_bytes): new method to access the readagain part.
+
+Tue Aug 26 00:02:49 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (VpMult): fix double free.
+
+Mon Aug 25 23:59:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open): make last_tc NULL if there are only
+ additional transcoders.
+ (econv_description): extracted from rb_econv_open_exc.
+ (rb_econv_open_exc): use econv_description.
+ (econv_inspect): use econv_description.
+
+Mon Aug 25 23:56:42 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32.c (init_stdhandle): set binmode.
+
+Mon Aug 25 23:38:17 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/format.rb(strftime): %[LN] can print with given
+ arbitrary precision.
+
+ * lib/date/format.rb(strftime): optional flags and filed width
+ should also affect %[nt].
+
+Mon Aug 25 23:01:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * compile.c (defined_expr): default defined? should return
+ "expression" without evaluating the expression. [ruby-dev:35967]
+
+Mon Aug 25 22:46:01 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_thread.rb (test_status_and_stop_p): reduce the risk
+ of race condition.
+
+Mon Aug 25 22:39:57 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/irb/extend-command.rb (def_extend_command): check number of
+ arguments. [ruby-dev:35074]
+
+ * lib/irb/ext/multi-irb.rb (search): check if a corresponding job is
+ found. [ruby-dev:35074]
+
+Mon Aug 25 22:29:13 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_io.rb (test_dup): fix typo. see [ruby-dev:35958]
+
+Mon Aug 25 22:02:35 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open_by_transcoder_entries): initialize
+ last_error. num_trans may be zero.
+ (rb_econv_convert0): num_trans may be zero.
+ (rb_econv_putbackable): ditto.
+ (rb_econv_putback): ditto.
+ (rb_econv_convert): input_ptr and output_ptr may be NULL.
+
+Mon Aug 25 19:05:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * compile.c (defined_expr): should handle NODE_{AND,OR} as
+ "expression". [ruby-dev:35951]
+
+Mon Aug 25 17:36:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_io_ungetbyte): added prototype.
+
+ * io.c (rb_io_gets): use rb_io_getline_1 for unget buffer.
+
+ * ruby.c (load_file): use rb_io_ungetbyte.
+
+ * transcode.c (rb_econv_substr_append): fix for buffer overrun.
+
+ * win32/enc-setup.mak (BUILTIN_TRANSOBJS): added.
+
+Mon Aug 25 14:22:21 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * parse.y (YYSTYPE): struct RVarmap has been no longer
+ defined.
+ see also r11717 by matz.
+
+Mon Aug 25 10:42:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (rb_econv_open_exc): constified.
+
+Mon Aug 25 07:10:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/emacs_mule.c: fix ctype.
+
+Mon Aug 25 00:52:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * configure.in (BUILTIN_TRANSSRCS): defined.
+ (BUILTIN_TRANSOBJS): defined.
+
+ * enc/Makefile.in (BUILTIN_TRANSES): defined.
+
+ * enc/make_encmake.rb (BUILTIN_TRANSES): defined.
+
+ * enc/depend: don't generate rules for builtin transcoders.
+
+ * common.mk (COMMONOBJS): add BUILTIN_TRANSOBJS.
+ (enc.mk): pass BUILTIN_TRANSOBJS.
+ (newline.c): new rule.
+ (newline.$(OBJEXT)): new rule.
+ (srcs): newline.c added.
+
+ * Makefile.in (BUILTIN_TRANSSRCS): defined.
+ (BUILTIN_TRANSOBJS): defined.
+
+ * transcode.c (Init_transcode): call Init_newline.
+
+Mon Aug 25 00:11:02 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (declare_transcoder): arguments order changed.
+ (rb_declare_transcoder): call declare_transcoder just once.
+
+Sun Aug 24 19:48:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_t): use rb_econv_option_t.
+
+ * transcode.c: follow the rb_econv_t change.
+
+Sun Aug 24 19:40:13 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_init_copy): copy encs.
+
+Sun Aug 24 19:17:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_open): add an argument: vperm.
+ (open_key_args): call rb_io_open with perm.
+
+Sun Aug 24 19:11:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (sym_invalid): removed.
+ (sym_undef): removed.
+ (sym_ignore): removed.
+ (sym_replace): removed.
+
+Sun Aug 24 19:07:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_reopen): initialize fptr->encs.opts.
+
+Sun Aug 24 18:37:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_s_pipe): accept optional hash.
+ (rb_io_set_encoding): ditto.
+ (rb_io_extract_modeenc): use rb_econv_opts to initialize
+ ecopts.
+ (rb_file_open_generic): ditto.
+ (rb_file_open_internal): ditto.
+ (io_encoding_set): new argument: opt.
+ (argf_set_encoding): copy fptr->encs.opts to argf_ecopts.
+
+ * transcode.c (rb_econv_opts): accept Qnil for initialization.
+
+Sun Aug 24 18:10:08 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_enc_t): add opts field.
+ (FMODE_INVALID_MASK): removed.
+ (FMODE_INVALID_IGNORE): ditto.
+ (FMODE_INVALID_REPLACE): ditto.
+ (FMODE_UNDEF_MASK): ditto.
+ (FMODE_UNDEF_IGNORE): ditto.
+ (FMODE_UNDEF_REPLACE): ditto.
+ (MakeOpenFile): initialize the opts field.
+
+ * io.c (make_writeconv): use the opts field.
+ (io_fwrite): ditto.
+ (make_readconv): ditto.
+ (argf_ecopts): new macro.
+ (rb_io_extract_modeenc): fill the opts field.
+ (argf_next_argv): ditto.
+ (rb_file_open_generic): initialize the opts field.
+ (rb_file_open_internal): ditto.
+ (io_encoding_set): ditto.
+ (argf_set_encoding): ditto.
+
+Sun Aug 24 18:02:14 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (struct argf): use struct rb_io_enc_t.
+ (argf_enc): follow the struct argf change.
+ (argf_enc2): ditto.
+
+Sun Aug 24 17:36:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_str_transcode): make 3rd argument
+ rb_econv_option_t*.
+
+ * transcode.c (transcode_loop): take rb_econv_option_t* as a argument.
+ (str_transcode0): ditto.
+ (str_transcode): make rb_econv_option_t and call str_transcode0 with
+ it.
+ (rb_str_transcode): take rb_econv_option_t*.
+
+ * io.c (io_fwrite): follow the rb_str_transcode change.
+
+Sun Aug 24 16:47:32 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_t): make enc and enc2 as struct
+ rb_io_enc_t;
+
+ * io.c: follow the structure change.
+ (convconfig_t): defined by rb_io_enc_t.
+
+Sun Aug 24 16:19:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_opts): declared.
+
+ * transcode.c (rb_econv_opts): defined.
+
+ * io.c (rb_io_extract_modeenc): use rb_econv_opts.
+
+Sun Aug 24 16:06:30 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_option_t): defined.
+ (rb_econv_open): 3rd arg changed.
+ (rb_econv_open_exc): ditto.
+
+ * io.c (make_writeconv): use rb_econv_option_t.
+ (make_readconv): ditto.
+ (rb_econv_open): take rb_econv_option_t for options.
+ (rb_econv_open_exc): ditto.
+ (transcode_loop): use rb_econv_option_t.
+ (econv_init): use rb_econv_option_t.
+
+Sun Aug 24 15:43:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_substr_append): associate dst with destination
+ encoding when dst is created.
+
+Sun Aug 24 15:21:28 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_str_transcode): add ecflags argument.
+
+ * transcode.c (econv_opts): extracted from str_transcode.
+ (str_transcode_enc_args): extracted from str_transcode.
+ (str_transcode0): extracted from str_transcode.
+ (str_transcode): use econv_opts, str_transcode_enc_args,
+ str_transcode0.
+ (rb_str_transcode): call str_transcode0.
+ (econv_primitive_insert_output): give the additional argument for
+ rb_str_transcode.
+
+ * io.c (make_writeconv): use invalid/undef flags.
+ (io_fwrite): ditto.
+ (rb_scan_open_args): give the additional argument for
+ rb_str_transcode.
+
+Sun Aug 24 13:27:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (str_transcode): check last hash only if 0 < argc.
+
+Sun Aug 24 12:22:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_substr_append): renamed from
+ rb_econv_string.
+ (rb_econv_str_convert): declared.
+ (rb_econv_substr_convert): declared.
+ (rb_econv_str_append): declared.
+
+ * io.c (io_fwrite): use rb_econv_str_convert instead of
+ rb_econv_string.
+
+ * transcode.c (rb_econv_substr_append): renamed from rb_econv_string.
+ (rb_econv_str_append): new function.
+ (rb_econv_substr_convert): ditto.
+ (rb_econv_str_convert): ditto.
+
+Sun Aug 24 12:15:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTP#urlencode): str[0] returns char in 1.9.
+ Patch by Junegunn Choi [ruby-core:18368]
+
+Sun Aug 24 12:02:39 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open): return NULL on error.
+
+Sun Aug 24 11:40:38 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_open_exc): declared.
+
+ * transcode.c (rb_eNoConverter): new exception.
+ (rb_econv_open_exc): new function.
+ (transcode_loop): use rb_econv_open_exc.
+
+ * io.c (make_writeconv): use rb_econv_open_exc.
+ (make_readconv): ditto.
+
+Sun Aug 24 11:26:54 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/cgi.rb (CGI::unescapeHTML): consider ISO-8859-1.
+ [ruby-dev:35936]
+
+Sun Aug 24 10:55:00 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/emacs_mule.c: support Emacs/Mule internal encoding.
+
+Sun Aug 24 08:03:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * strftime.c (daylight, timezone): not provided as dllexport on cygwin,
+ right now.
+
+Sun Aug 24 06:39:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/cgi.rb (CGI::unescapeHTML): more encoding sensible unescaping.
+ [ruby-dev:35936]
+
+Sun Aug 24 04:23:19 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_compatible_p): raise TypeError when argument is Encoding.
+
+Sat Aug 23 23:25:47 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/cgi.rb (CGI#out): remove auto encoding conversion and set
+ LANGUAGE. [ruby-dev:35922]
+
+Sat Aug 23 20:01:29 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_process.rb (TestProcess#test_rlimit_value):
+ add Errno::EINVAL. [ruby-dev:35900]
+
+Sat Aug 23 18:29:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_scan_open_args): use pop_last_hash.
+
+Sat Aug 23 16:59:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (FMODE_INVALID_MASK): defined.
+ (FMODE_INVALID_IGNORE): defined.
+ (FMODE_INVALID_REPLACE): defined.
+ (FMODE_UNDEF_MASK): defined.
+ (FMODE_UNDEF_IGNORE): defined.
+ (FMODE_UNDEF_REPLACE): defined.
+
+ * io.c (sym_invalid): defined.
+ (sym_undef): defined.
+ (sym_ignore): defined.
+ (sym_replace): defined.
+ (make_readconv): specify ECONV_INVALID_* and ECONV_UNDEF_* if
+ FMODE_INVALID_* and FMODE_UNDEF_* is set.
+ (rb_io_extract_modeenc): check {:invalid, :undef} => {:replace,
+ :ignore} for FMODE_INVALID_* and FMODE_UNDEF_*.
+
+Sat Aug 23 17:06:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * strftime.c (rb_strftime): support more flags.
+
+Sat Aug 23 15:14:10 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_opts.h: enable "OPT_TRACE_INSTRUCTION" on default.
+
+Sat Aug 23 14:59:32 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (ECONV_INVALID_MASK): defined.
+ (ECONV_INVALID_IGNORE): defined.
+ (ECONV_INVALID_REPLACE): defined.
+ (ECONV_UNDEF_MASK): defined.
+ (ECONV_UNDEF_IGNORE): defined.
+ (ECONV_UNDEF_REPLACE): defined.
+
+ * transcode.c (INVALID_IGNORE): removed.
+ (INVALID_REPLACE): removed.
+ (UNDEF_IGNORE): removed.
+ (UNDEF_REPLACE): removed.
+ (rb_econv_convert0): renamed from rb_econv_convert.
+ (rb_econv_convert): defined to call rb_econv_convert0 with
+ replace/ignore behavior moved from transcode_loop.
+ (transcode_loop): replace/ignore behavior removed.
+
+Sat Aug 23 11:23:05 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_extract_modeenc): check :textmode and :binmode in option
+ hash.
+
+Sat Aug 23 10:48:56 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/pty/pty.c (pty_getpty): follow rb_io_t's path -> pathv change.
+
+Sat Aug 23 10:42:52 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (check_pipe_command): extracted from rb_f_open and rb_io_open.
+ (rb_f_open): use check_pipe_command.
+ (rb_io_open): ditto.
+
+Sat Aug 23 10:13:00 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (read_all): fptr->enc2 is 0 if no conversion.
+ (rb_io_getline_fast): ditto.
+ (io_getc): ditto.
+
+Sat Aug 23 09:45:35 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_t): remove path field and add pathv field.
+ (MakeOpenFile): initialize pathv as Qnil.
+
+ * gc.c: mark pathv field in T_FILE.
+
+ * io.c: follow the rb_io_t field change.
+
+ * file.c: ditto.
+
+ * ext/socket/socket.c: ditto.
+
+Sat Aug 23 01:42:22 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (FMODE_TEXTMODE): defined.
+
+ * include/ruby/encoding.h (rb_econv_t): new field: flags.
+ (rb_econv_binmode): declared.
+
+ * io.c (io_unread): text mode hack removed.
+ (NEED_NEWLINE_DECODER): defined.
+ (NEED_NEWLINE_ENCODER): defined.
+ (NEED_READCONV): defined.
+ (NEED_WRITECONV): defined.
+ (TEXTMODE_NEWLINE_ENCODER): defined for windows.
+ (make_writeconv): setup converter with TEXTMODE_NEWLINE_ENCODER for
+ text mode.
+ (io_fwrite): use NEED_WRITECONV. character code conversion is
+ disabled if fptr->writeconv_stateless is nil.
+ (make_readconv): setup converter with
+ ECONV_UNIVERSAL_NEWLINE_DECODER for text mode.
+ (read_all): use NEED_READCONV.
+ (appendline): use NEED_READCONV.
+ (rb_io_getline_1): use NEED_READCONV.
+ (io_getc): use NEED_READCONV.
+ (rb_io_ungetc): use NEED_READCONV.
+ (rb_io_binmode): OS-level text mode test removed. call
+ rb_econv_binmode.
+ (rb_io_binmode_m): call rb_io_binmode_m with write_io as well.
+ (rb_io_flags_mode): return mode string including "t".
+ (rb_io_mode_flags): detect "t" for text mode.
+ (rb_sysopen): always specify O_BINARY.
+
+ * transcode.c (rb_econv_open_by_transcoder_entries): initialize flags.
+ (rb_econv_open): if source and destination encoding is
+ both empty string, open newline converter. last_tc will be NULL in
+ this case.
+ (rb_econv_encoding_to_insert_output): last_tc may be NULL now.
+ (rb_econv_string): ditto.
+ (output_replacement_character): ditto.
+ (transcode_loop): ditto.
+ (econv_init): ditto.
+ (econv_inspect): ditto.
+ (rb_econv_binmode): new function.
+
+Fri Aug 22 21:18:40 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_div): now behaves as quo.
+
+ * complex.c (nucomp_s_generic_p): has been removed.
+
+ * complex.c (nucomp_to_s): adopts new form.
+
+ * complex.c (nucomp_inspect): ditto.
+
+ * complex.c (string_to_c_internal): ditto and supports polar form.
+
+ * complex.c (rb_complex_polar): new.
+
+ * rational.c (nurat_to_s): do not canonicalize.
+
+ * rational.c (nurat_inspect): adopts new form.
+
+ * rational.c (string_to_r_internal): ditto.
+
+ * include/ruby/intern.h: added a declaration.
+
+ * lib/complex.rb: added an obsolete class method.
+
+ * lib/cmath.rb: use scalar? instead of generic?.
+
+Fri Aug 22 20:06:46 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * lib/webrick/server.rb (WEBrick::GenericServer#shutdown):
+ rescue Errno::ENOTCONN and close. [ruby-dev:35896]
+
+ * test/openssl/test_ssl.rb (OpenSSL#start_server): ditto.
+ [ruby-dev:35897]
+
+ * lib/net/imap.rb (Net::IMAP#disconnect): ditto. [ruby-dev:35898]
+
+Fri Aug 22 19:58:27 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb: no need to require the "lib/rational.rb" any more.
+
+Fri Aug 22 15:47:38 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/cgi.rb: use bytesize instead of size/length.
+
+Fri Aug 22 14:28:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * strftime.c (rb_strftime): supported flags and precision for most
+ conversions. [ruby-dev:35906]
+
+Fri Aug 22 14:04:04 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * test/ruby/test_transcode.rb: test_shift_jis:
+ fixed comment strings (see r18291)
+
+Fri Aug 22 12:41:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_pid): use PIDT2NUM.
+
+Fri Aug 22 11:36:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dir.c (dir_enc_str_new): set US-ASCII to the path
+ when the path is 7bit string and encoding is ASCII compatible.
+
+ * dir.c (push_glob): set file system encoding when argument encoding
+ is US-ASCII.
+
+Fri Aug 22 11:30:38 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dir.c (dir_enc_str_new): renamed from dir_enc_str.
+
+ * dir.c (dir_read): use dir_enc_str_new.
+
+ * dir.c (dir_each): ditto.
+
+ * dir.c (push_pattern): ditto.
+
+Fri Aug 22 11:29:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk: remove config.h dependency.
+
+Fri Aug 22 10:52:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (gmtime_r): check if reentrant versions are available.
+
+ * time.c (IF_HAVE_GMTIME_R, ASCTIME, GMTIME, LOCALTIME): use reentrant
+ versions if available.
+
+Fri Aug 22 05:29:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (INT2NUM): just use a simple macro on LP64.
+ (UINT2NUM): ditto.
+
+Fri Aug 22 05:10:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_file_open_generic): take filename as a VALUE.
+ (rb_file_open_internal): ditto.
+ (rb_io_open): ditto.
+ (rb_file_open): pass filename as a VALUE to rb_file_open_internal.
+ (rb_open_file): pass filename as a VALUE to rb_file_open_generic.
+ (open_key_args): pass filename as a VALUE to rb_io_open.
+
+Fri Aug 22 04:33:56 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h: fix previous change for LP64.
+
+Fri Aug 22 03:19:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (NUM2LONG): make it inline function to evaluate
+ the argument only once.
+ `t = Object.new; def t.*(x) p x; 0 end; p Time.at(0, t)' did print x
+ twice.
+ (NUM2INT): ditto.
+ (NUM2LL): ditto.
+ (INT2NUM): make it inline function.
+ (LONG2NUM): ditto.
+ (UINT2NUM): ditto.
+ (ULONG2NUM): ditto.
+
+Fri Aug 22 03:03:22 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_s_sysopen): mode can be a Bignum.
+
+Fri Aug 22 02:57:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_extract_modeenc): notify coerced to caller.
+ (rb_io_initialize): mode may be a Bignum.
+
+Fri Aug 22 02:42:35 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_extract_modeenc): use rb_check_to_integer to test
+ integer.
+
+Fri Aug 22 02:25:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * iseq.c (iseq_inspect): don't raise on uninitialized object.
+ show real class name.
+
+Fri Aug 22 02:08:58 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_initialize): accept hash argument.
+
+Thu Aug 21 23:51:51 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * strftime.c (rb_strftime): supported %F and %<precision>N.
+ reverted config.h to ruby.h for Windows.
+
+ * test/ruby/test_time.rb (TestTime::test_strftime): added tests
+ for %F and %N.
+
+ * time.c: documented %F and %N.
+
+Thu Aug 21 20:23:26 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_m17n_comb.rb (TestM17NComb#test_str_crypt): add
+ key and salt to error message.
+
+Thu Aug 21 19:20:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * file.c (rb_stat_inspect): don't raise if self is not initialized.
+
+Thu Aug 21 19:17:02 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (pst_pid): use rb_attr_get to avoid warning on
+ Process::Status.allocate.pid.
+ (pst_inspect): don't raise if self is not initialized.
+
+Thu Aug 21 19:05:40 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_extract_encoding_option): if internal encoding is not
+ specified, enc is external encoding.
+
+Thu Aug 21 14:22:50 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * strftime.c: include ruby/config.h instead of ruby/ruby.h.
+
+ * common.mk: removed the old rule for missing/strftime.c.
+
+Thu Aug 21 09:29:01 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * strftime.c (rb_strftime): return "UTC" instead of "GMT".
+
+ * test/ruby/test_time.rb (test_strftime): ditto.
+
+Thu Aug 21 07:59:04 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/iconv/test_option.rb (test_ignore_option): skip if iconv
+ doesn't have transliterate.
+
+ * test/iconv/test_option.rb (test_translit_option): ditto.
+
+Thu Aug 21 06:12:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/scanf.rb (Scanf::FormatSpecifier#initialize): %i should accept
+ single digit decimal. [ruby-core:18355]
+
+Thu Aug 21 06:02:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * range.c (range_initialize_copy): Range is now a Struct.
+ [ruby-core:18353]
+
+ * struct.c (rb_struct_init_copy): made public.
+
+Thu Aug 21 03:09:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_extract_encoding_option): enc2 is external encoding if
+ external encoding and internal encoding is given.
+ (pipe_open): add flags and convconfig argument to initialize
+ fptr->{mode,enc,enc2}.
+ (pipe_open_v): pass flags and convconfig from caller to pipe_open.
+ (pipe_open_s): ditto.
+ (pop_last_hash): new function.
+ (rb_io_s_popen): use last hash as option to specify code conversion.
+ (rb_io_open): specify flags and convconfig arguments for
+ pipe_open_s.
+ (rb_f_backquote): ditto.
+
+Thu Aug 21 02:27:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (prep_io): local variable renamed.
+ (rb_io_fdopen): ditto.
+ (prep_stdio): ditto.
+
+Thu Aug 21 01:58:59 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * configure.in: always check timezone().
+
+ * strftime.c (rb_strftime): prefer timezone/altzone rather than
+ gettimeofday(). The second argument to gettimeofday() is ignored
+ on Solaris.
+
+Thu Aug 21 02:03:08 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (open_key_args): simplified.
+
+Thu Aug 21 01:57:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (open_key_args): IO.foreach(path, rs, limit) didn't work.
+
+Thu Aug 21 01:31:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_file_sysopen_internal): unused function removed.
+ (rb_file_sysopen): ditto.
+
+Thu Aug 21 01:09:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c: use mode_t for the 3rd argument, permission, of open(2).
+
+Thu Aug 21 00:51:42 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * configure.in: removed strftime from AC_REPLACE_FUNCS().
+
+ * include/ruby/missing.h: removed prototype for strftime().
+
+ * missing/strftime.c: removed.
+
+ * time.c (time_to_s): use rb_strftime() instead of strftime(3).
+ (time_zone): ditto.
+
+Thu Aug 21 00:49:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * strftime.c: win32 support.
+
+Thu Aug 21 00:20:05 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * strftime.c: new file.
+
+ * common.mk (COMMONOBJS): added strftime.$(OBJEXT).
+
+ * time.c (time_strftime): do not use strftime(3). supported
+ %L(millisecond) and %N(nanosecond).
+
+ * test/ruby/test_time.rb: added tests for %L and %N.
+
+Wed Aug 20 23:53:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_set_encoding): removed.
+ (rb_io_open): set up encoding using new argument opt.
+ (open_key_args): call rb_io_open with opt. don't call
+ io_set_encoding.
+
+Wed Aug 20 22:30:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_file_open_internal): use rb_io_flags_modenum.
+ (rb_io_reopen): use rb_io_flags_modenum and rb_io_modenum_mode.
+ (rb_io_stdio_file): ditto.
+
+Wed Aug 20 22:28:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (proc_new): use the given class.
+
+ * vm.c (vm_make_proc): added an argument for the class.
+
+Wed Aug 20 22:24:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enum.c (enum_take): get rid of extraneous iteration.
+
+Wed Aug 20 20:32:49 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_open_with_args): use rb_open_file instead of rb_io_open.
+
+Wed Aug 20 20:16:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_scan_open_args): extracted from rb_open_file.
+
+Wed Aug 20 19:22:32 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (convconfig_t): new type.
+ (rb_io_extract_modeenc): new function.
+ (rb_file_open_generic): new function.
+ (rb_file_open_internal): use rb_file_open_generic.
+ (rb_file_sysopen_internal): use rb_file_open_generic.
+ (rb_open_file): use rb_io_extract_modeenc and rb_file_open_generic.
+ (rb_io_open): call rb_file_open_internal instead of rb_file_open.
+
+Wed Aug 20 19:15:35 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (Init_IO): new constants: File::DSYNC, File::RSYNC and
+ File::NOFOLLOW.
+
+Wed Aug 20 18:41:11 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_open_file): don't lookup :mode and :perm in opt. it is
+ useless because vmode and perm is overwritten by rb_scan_args
+ anyway.
+
+Wed Aug 20 18:37:20 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (open_key_args): meaningless MEMCPY removed.
+
+Wed Aug 20 18:30:58 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (prep_io) [cygwin]: use FMODE_BINMODE instead of O_BINARY.
+
+Wed Aug 20 16:39:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_sample): performance improvement for huge array.
+
+Wed Aug 20 12:28:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_sample): get rid of infinite loop. #455
+
+Wed Aug 20 06:09:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (FMODE_TRUNC): value changed because 0x100 is used
+ as FMODE_NOREVLOOKUP in socket.c
+
+Wed Aug 20 05:19:40 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (parse_mode_enc): extracted from mode_enc.
+ (io_extract_encoding_option): extracted from io_set_encoding.
+
+Wed Aug 20 04:17:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_flags_modenum): make it static.
+
+Wed Aug 20 03:36:45 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (FMODE_TRUNC): new constant.
+
+ * io.c (rb_io_mode_flags): set FMODE_TRUNC for "w".
+ (rb_io_modenum_flags): set FMODE_TRUNC for O_TRUNC.
+ (rb_io_flags_modenum): new function.
+ (rb_io_mode_modenum): just use rb_io_mode_flags and
+ rb_io_flags_modenum.
+
+Wed Aug 20 02:36:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (fopen): macro for vms removed. fopen is not used now.
+
+Wed Aug 20 02:27:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open): fix memory leak.
+ (rb_econv_close): ditto.
+ fixed by shinichiro.h. [ruby-dev:35880]
+
+Tue Aug 19 21:50:43 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_fopen): declaration removed.
+
+ * io.c (rb_fopen): unused function removed.
+
+Tue Aug 19 21:14:22 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (FMODE_READWRITE): define as
+ FMODE_READABLE|FMODE_WRITABLE.
+
+Tue Aug 19 21:13:08 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_flags_mode): use hexadecimal in error message.
+ (rb_io_modenum_mode): ditto.
+ (rb_io_initialize): ditto.
+
+Tue Aug 19 18:23:40 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_flags_mode): add a prefix 0 to octal in error message.
+ (rb_io_modenum_mode): ditto.
+
+Tue Aug 19 18:05:45 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (FMODE_*): sorted and describe the values in
+ hexadecimal.
+
+Tue Aug 19 17:32:30 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/openssl/ossl_x509name.c (ossl_x509name_initialize): store the
+ result of d2i_X509_NAME into DATA_PTR(self).
+
+Tue Aug 19 04:54:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rake.rb (FileUtils#ruby): takes care of space containing path.
+ [ ruby-Bugs-21591 ]
+
+Tue Aug 19 01:32:37 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_open_file): encoding in mode string was ignored if perm is
+ specified.
+
+Tue Aug 19 01:02:19 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_open_file): don't access argv[-1] by
+ File.allocate.instance_eval { initialize }.
+
+Tue Aug 19 00:56:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_inspect): don't raise for uninitialized Regexp.
+
+Tue Aug 19 00:34:24 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_check_readable): side effect for STDIN removed.
+ (rb_io_external_encoding): ditto.
+
+Mon Aug 18 23:27:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_ungetbyte): renamed from io_ungetc.
+ (rb_io_ungetbyte): new method.
+ (rb_io_ungetc): push back into character buffer if enc2 is set.
+
+Mon Aug 18 22:41:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (id_encode): removed.
+
+Mon Aug 18 22:30:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (make_writeconv): if enc and enc2 is set, convert
+ string.encoding to enc2.
+
+ * include/ruby/io.h: comment changed.
+
+Mon Aug 18 21:02:08 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_t): new fields: writeconv,
+ writeconv_stateless and writeconv_initialized.
+ (MakeOpenFile): initialize them.
+
+ * include/ruby/encoding.h (rb_econv_stateless_encoding): declared.
+ (rb_econv_string): declared.
+
+ * io.c (make_writeconv): new function.
+ (io_fwrite): use econv.
+ (make_readconv): fix error message.
+ (finish_writeconv): new function.
+ (fptr_finalize): call finish_writeconv.
+ (clear_writeconv): new function.
+ (clear_codeconv): new function to call both clear_readconv and
+ clear_writeconv.
+ (rb_io_fptr_finalize): call clear_codeconv instead of
+ clear_readconv.
+ (mode_enc): ditto.
+ (io_set_encoding): ditto.
+ (argf_next_argv): ditto.
+ (io_encoding_set): ditto.
+
+ * gc.c (gc_mark_children): mark writeconv_stateless in T_FILE.
+
+ * transcode.c (stateless_encoding_i): new function.
+ (rb_econv_stateless_encoding): ditto.
+ (rb_econv_string): ditto.
+
+Mon Aug 18 17:23:38 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (clear_readconv): extracted from rb_io_fptr_finalize.
+ (mode_enc): call clear_readconv.
+ (io_set_encoding): ditto.
+ (argf_next_argv): ditto.
+ (io_encoding_set): ditto.
+
+Mon Aug 18 16:54:06 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (mode_enc): modify enc and enc2 consistently.
+ (io_set_encoding): ditto.
+ (io_encoding_set): ditto.
+
+Mon Aug 18 13:21:38 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (transcode_search_path): prevent infinite loop by
+ searching a path for self conversion.
+
+Mon Aug 18 12:45:24 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_enc_str): code conversion removed.
+ (io_enc_str_converted): removed because it is identical to
+ io_enc_str now.
+
+Mon Aug 18 12:12:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_shift_crbuf): add strp argument to append into existing
+ string.
+ (read_all): use econv if enc2 is set.
+ (io_getc): follow the io_shift_crbuf change.
+
+Mon Aug 18 10:35:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_enc_str_converted): new function.
+ (make_readconv): extracted from io_getc.
+ (more_char): ditto.
+ (appendline): use econv via make_readconv and more_char for code
+ conversion.
+ (prepare_getline_args): don't convert record separator.
+ (rb_io_getline_1): don't use rb_io_getline_fast if enc2 is set.
+ (io_getc): use make_readconv and more_char.
+
+Mon Aug 18 08:27:44 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * common.mk: fix error in uncommon.mk.
+
+Mon Aug 18 06:10:08 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk: config.h depends config.status.
+
+Mon Aug 18 03:59:43 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (appendline): appendline cannot check character boundary.
+ (rb_io_getline_1): relax limit until character boundary.
+
+Mon Aug 18 02:25:11 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/cgi.rb (WEBrick::CGI::Socket#eof?): added lacked method.
+
+Sun Aug 17 21:50:22 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (prepare_getline_args): io.gets(10,nil) should cause TypeError.
+
+Sun Aug 17 15:58:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb: not check config.h.
+
+ * lib/mkmf.rb (init_mkmf): add include/ruby/backward to $INCFLAGS.
+
+ * include/ruby/backward/{st,util}.h: added for backward compatibility.
+ [ruby-dev:35811]
+
+Sun Aug 17 13:40:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_primitive_putback): new method.
+
+Sun Aug 17 13:23:53 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_putbackable): declared.
+ (rb_econv_putback): ditto.
+
+ * transcode.c (rb_econv_putbackable): implemented.
+ (rb_econv_putback): ditto.
+
+ * io.c (io_getc): put back bytes if possible.
+
+Sun Aug 17 12:00:18 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (make_econv_exception): add several instance variables
+ to exception object.
+ (ecerr_source_encoding): new method:
+ Encoding::ConversionUndefined#source_encoding and
+ Encoding::InvalidByteSequence#source_encoding.
+ (ecerr_destination_encoding): new method:
+ Encoding::ConversionUndefined#destination_encoding and
+ Encoding::InvalidByteSequence#destination_encoding.
+ (econverr_error_char): new method:
+ Encoding::ConversionUndefined#error_char.
+ (econverr_error_bytes): new method:
+ Encoding::ConversionUndefined#error_bytes.
+
+Sun Aug 17 11:43:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * random.c (struct MT): packed Mersenne Twister staffs.
+
+ * random.c (struct RandSeed): packed random seed staffs.
+
+Sun Aug 17 08:38:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/iconv/test_option.rb (test_ignore_option): skip if iconv
+ doesn't have transliterate.
+
+ * test/iconv/test_option.rb (test_translit_option): ditto.
+
+Sun Aug 17 01:29:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/io.h (rb_io_t): new fields: readconv, crbuf, crbuf_off,
+ crbuf_len, crbuf_capa.
+ (MakeOpenFile): initialize them.
+
+ * io.c (io_shift_crbuf): new function.
+ (io_getc): use econv.
+ (rb_io_fptr_finalize): finalize readconv and crbuf.
+
+Sun Aug 17 00:02:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_check_error): declared.
+
+ * transcode.c (make_econv_exception): new function.
+ (transcode_loop): use make_econv_exception.
+ (rb_econv_check_error): defined.
+
+Sat Aug 16 15:23:16 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_elem_t): fields removed: from and
+ to.
+ (rb_econv_t): new fields: source_encoding_name and
+ destination_encoding_name.
+
+ * transcode.c (rb_econv_open_by_transcoder_entries): initialize the
+ new fields.
+ (rb_econv_open): set up the new fields.
+ (econv_inspect): use the new fields.
+
+Sat Aug 16 14:22:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_t): add fields: in_buf_start,
+ in_data_start, in_data_end, in_buf_end and last_trans_index.
+ (rb_econv_output): removed.
+ (rb_econv_insert_output): declared.
+ (rb_econv_encoding_to_insert_output): declared.
+
+ * enc/trans/newline.trans (rb_universal_newline): stateful_type
+ changed.
+
+ * transcode.c (transcode_restartable0): initialize inchar_start,
+ tc->recognized_len and next_table at beginning of the loop.
+ (rb_econv_open_by_transcoder_entries): initialize new fields.
+ (rb_econv_open): setup last_trans_index.
+ (trans_sweep): last out_buf_start can be non-NULL now.
+ (rb_econv_convert): check last out_buf_start and in_buf_start at
+ first.
+ (rb_econv_output_with_destination_encoding): removed.
+ (econv_just_convert): removed.
+ (rb_econv_output): removed.
+ (econv_primitive_output): method removed.
+ (rb_econv_encoding_to_insert_output): new function.
+ (allocate_converted_string): new function.
+ (rb_econv_insert_output): new function.
+ (econv_primitive_insert_output): new method.
+ (output_replacement_character): use rb_econv_insert_output. unused
+ arguments removed.
+
+Sat Aug 16 09:20:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_intern_const): tiny optimization.
+
+ * include/ruby/ruby.h (SSIZET2NUM, NUM2SSIZET, SSIZE_MAX, SSIZE_MIN):
+ macros for ssize_t.
+
+Sat Aug 16 08:11:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoder_stateful_type_t): defined.
+ (rb_transcoder): add field: stateful_type.
+
+ * tool/transcode-tblgen.rb: generate stateful_type field as
+ stateless_converter.
+
+ * enc/trans/iso2022.trans: follow rb_transcoder change.
+
+ * enc/trans/newline.trans: ditto.
+
+ * enc/trans/utf_16_32.trans: ditto.
+
+Fri Aug 15 23:07:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_just_convert): extracted from rb_econv_output.
+ (rb_econv_output): use econv_just_convert.
+ (econv_primitive_output): new method.
+
+Fri Aug 15 19:57:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_output): add str_encoding
+ argument.
+
+ * transcode.c (get_replacement_character): add repl_enc_ptr argument.
+ (rb_econv_output_with_destination_encoding): renamed from
+ rb_econv_output and make it static.
+ (rb_econv_output): convert str and call
+ rb_econv_output_with_destination_encoding.
+ (output_replacement_character): follow above interface change.
+
+Fri Aug 15 19:33:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_drop_bytes): use memmove.
+
+Fri Aug 15 18:33:22 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_t): add error_tc in last_error.
+
+ * transcode.c (rb_econv_convert): fill error_tc.
+
+Fri Aug 15 18:10:49 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_t): new field: last_error.
+
+ * transcode.c (rb_trans_conv): new argument: result_position_ptr.
+ (rb_econv_convert): fill last_error.
+ (econv_result_to_symbol): extracted from econv_primitive_convert.
+ (econv_primitive_errinfo): new method.
+
+Fri Aug 15 17:39:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (parse.{c,h}): creates in the dependency order.
+
+Fri Aug 15 16:59:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (exec_event_hooks): skips RubyVM::FrozenCore.
+
+ * vm.c (Init_VM): get rid of SEGV in a trace proc.
+
+Fri Aug 15 09:33:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (conv_init): check empty name.
+
+Fri Aug 15 09:03:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_init): don't create dummy encoding if
+ rb_econv_open is failed.
+ (make_dummy_encoding): new function extracted from make_encoding.
+ (make_encoding): removed.
+
+Fri Aug 15 01:07:16 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk ({$(srcdir)}.y.c): escape backslash.
+
+Fri Aug 15 01:05:39 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_primitive_convert): set destination_buffer
+ encoding.
+
+Fri Aug 15 00:52:40 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_output): declared.
+
+ * transcode_data.h (rb_transcoder): add resetsize_func field.
+
+ * enc/trans/iso2022.trans (iso2022jp_reset_sequence_size): defined.
+ (rb_EUC_JP_to_ISO_2022_JP): provide resetsize_func.
+
+ * tool/transcode-tblgen.rb: set NULL for resetsize_func.
+
+ * transcode.c (rb_econv_output): new function for inserting output.
+ (output_replacement_character): use rb_econv_output.
+ (transcode_loop): check return value of
+ output_replacement_character.
+
+Thu Aug 14 23:47:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (ECONV_UNIVERSAL_NEWLINE_DECODER): defined.
+ (ECONV_CRLF_NEWLINE_ENCODER): ditto.
+ (ECONV_CR_NEWLINE_ENCODER): ditto.
+ (ECONV_PARTIAL_INPUT): ditto.
+ (ECONV_OUTPUT_FOLLOWED_BY_INPUT): ditto.
+
+ * transcode.c: use ECONV_* defined as above.
+
+Thu Aug 14 23:35:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c: local variable renamed.
+
+Thu Aug 14 23:22:24 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_econv_result_t): moved from
+ transcode_data.h.
+ (rb_econv_elem_t): ditto.
+ (rb_econv_t): ditto. source_encoding and destination_encoding field
+ is added.
+ (rb_econv_open): declared.
+ (rb_econv_convert): ditto.
+ (rb_econv_close): ditto.
+
+ * transcode.c (rb_econv_open_by_transcoder_entries): initialize
+ source_encoding and destination_encoding field as NULL.
+ (rb_econv_open): make it external linkage.
+ (rb_econv_close): ditto.
+ (rb_econv_convert): ditto. renamed from rb_econv_conv.
+ (make_encoding): new function.
+ (econv_init): use make_encoding and store rb_encoding* in
+ rb_econv_t.
+ (econv_source_encoding): new method
+ Encoding::Converter#source_encoding.
+ (econv_destination_encoding): new method
+ Encoding::Converter#destination_encoding.
+
+Thu Aug 14 22:44:32 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_econv_result_t): change enumeration
+ constant's prefix: transcode_ to econv_.
+
+ * transcode.c: follow the constant prefix change.
+
+Thu Aug 14 21:34:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_init): accept Encoding object as source_encoding
+ and destination_encoding.
+
+Thu Aug 14 21:10:00 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_filesystem_encoding): use default external encoding
+ for Unix.
+
+ * dir.c (dir_initialize): don't cache fs_encoding.
+
+Thu Aug 14 20:58:57 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_open_by_transcoder_entries): renamed from
+ rb_trans_open_by_transcoder_entries.
+
+Thu Aug 14 20:56:28 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_max_output): removed.
+
+Thu Aug 14 20:52:55 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: check unexpected actions.
+
+Thu Aug 14 20:25:52 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (transcode_invalid_byte_sequence): renamed from
+ transcode_invalid_input.
+ (transcode_destination_buffer_full): renamed from transcode_obuf_full.
+ (transcode_source_buffer_empty): renamed from transcode_ibuf_empty.
+ (rb_econv_result_t): renamed from rb_trans_result_t.
+ (rb_econv_elem_t): renamed from rb_trans_elem_t.
+ (rb_econv_t): renamed from rb_trans_t.
+
+ * transcode.c (UNIVERSAL_NEWLINE_DECODER): renamed from
+ UNIVERSAL_NEWLINE.
+ (CRLF_NEWLINE_ENCODER): renamed from CRLF_NEWLINE.
+ (CR_NEWLINE_ENCODER): renamed from CR_NEWLINE.
+ (rb_econv_open): renamed from rb_trans_open.
+ (rb_econv_close): renamed from rb_trans_close.
+
+Thu Aug 14 19:41:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (load_transcoder): unused function removed.
+ (rb_transcoding_open): ditto.
+
+Thu Aug 14 17:57:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/encoding.h (rb_enc_ispunct): added.
+
+ * common.mk (COMMONOBJS), inits.c (rb_call_inits): id.c is now
+ included from parse.c.
+
+ * id.c (Init_id), id.h (ruby_method_ids): added IDs used by VM.
+
+ * parse.y (global_symbols): added rooms for VM IDs.
+
+ * parse.y (rb_intern3, rb_id2str): single punctuation symbol is now
+ same as char code.
+
+Thu Aug 14 17:46:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (union tmpyystype): no longer needed, since YYSTYPE is
+ defined in parse.h now.
+
+Thu Aug 14 17:27:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * version.c (Init_version): add RUBY_ENGINE constant.
+
+Thu Aug 14 15:34:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_econv_conv): new function. it doesn't consume
+ input too much, even for multilevel conversion.
+ (transcode_loop): use rb_econv_conv.
+ (econv_primitive_convert): ditto.
+
+Thu Aug 14 15:27:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/defines.h (RUBY_ALIAS_FUNCTION): fallback definition.
+
+Thu Aug 14 15:08:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_trans_result_t): new enumeration constant:
+ transcode_output_followed_by_input.
+
+ * transcode.c (OUTPUT_FOLLOWED_BY_INPUT): new flag.
+ (transcode_restartable0): suspend when output followed by input if
+ OUTPUT_FOLLOWED_BY_INPUT is specified.
+ (trans_sweep): check OUTPUT_FOLLOWED_BY_INPUT.
+ (rb_trans_conv): support OUTPUT_FOLLOWED_BY_INPUT.
+ (econv_primitive_convert): return :output_followed_by_input for
+ transcode_output_followed_by_input.
+
+Thu Aug 14 14:57:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (getrusage_time): should return the value.
+
+ * thread.c (rb_thread_priority_set): get rid of C99 feature.
+
+ * transcode.c (transcode_search_path): ditto.
+
+ * vm.c (REWIND_CFP): get rid of statement expressions.
+
+Thu Aug 14 14:13:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (Init_VM): hide FrozenCore.
+
+Thu Aug 14 12:20:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (load_transcoder): suppress warning.
+
+ * missing/vsnprintf.c (BSD_vfprintf): ditto.
+
+Thu Aug 14 12:01:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (gnumake): check for GNU make.
+
+ * Makefile.in (uncommon.mk): includes filtered common.mk.
+
+ * common.mk (parse.h): workaround for nmake.
+
+Thu Aug 14 06:09:12 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_thread_execute_interrupts): switch event
+ should be occur only once.
+
+Thu Aug 14 05:36:36 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk: parse.h depends on parse.c.
+
+ * common.mk: hash.o depends on $(ID_H_INCLUDES).
+
+Thu Aug 14 02:45:16 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_file_exhaustive.rb (TestFileExhaustive#setup):
+ set group of tmpdir. [ruby-dev:35633]
+
+Thu Aug 14 15:50:30 2008 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * hash.c (set_default): fix rdoc. #441
+
+Thu Aug 14 02:23:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_primitive_convert): add output_byteoffset
+ argument.
+
+Thu Aug 14 00:43:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rb_cv_gcc_function_alias): checks alias attribute.
+
+ * string.c (alias_func): replaced with RUBY_ALIAS_FUNCTION.
+
+Wed Aug 13 23:42:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (parse.h): fake rule.
+
+Wed Aug 13 23:15:58 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * test/ruby/test_thread.rb (test_list): call Thread.pass to run t1.
+ fixed [ruby-core:18264].
+
+Wed Aug 13 23:05:51 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * string.c (alias_func): changed to 'weak, alias' from 'alias' for
+ Mac OSX. (closes #429)
+
+Wed Aug 13 19:40:12 2008 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: count only freed object as freelist size.
+
+Wed Aug 13 18:34:22 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * marshal.c (marshal_load): set arg.untrust properly.
+
+Wed Aug 13 17:47:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_inspect): new method.
+
+Wed Aug 13 17:35:58 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (transcode_restartable0): several local variables
+ removed.
+
+Wed Aug 13 17:35:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_set_default_proc): add new method. a patch from
+ Giuseppe Bilotta. #419
+
+Wed Aug 13 17:31:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * vm_insnhelper.c (caller_setup_args): should ensure if the value
+ from to_proc is a real Proc.
+
+Wed Aug 13 17:28:29 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * common.mk: regint.h no longer includes vm_core.h.
+
+Wed Aug 13 17:26:44 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoding): add fields: writebuf_off,
+ writebuf_len and writebuf.
+ (TRANSCODING_WRITEBUF): new macro.
+
+ * transcode.c (transcode_restartable0): output until output buffer is
+ really full.
+ (rb_transcoding_open_by_transcoder): initialize writebuf_len,
+ writebuf_off and writebuf.
+ (rb_transcoding_close): finalize writebuf.
+
+Wed Aug 13 17:18:37 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_thread_check_ints): added. please note that
+ this function may cause ruby's thread switching.
+
+ * include/ruby/intern.h: ditto.
+
+ * regint.h: use rb_thread_check_ints() instead of
+ RUBY_CHECK_INTS() directly.
+
+Wed Aug 13 17:01:36 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * golf_prelude.rb, lib/set.rb (TC_Set#test_each),
+ test/readline/test_readline_history.rb (Readline#test_each__enumerator),
+ test/ruby/test_array.rb (TestArray#test_collect),
+ test/ruby/test_enumerator.rb (TestEnumerator#test_initialize):
+ Enumerable::Enumerator is now called Enumerator.
+
+ * lib/rinda/tuplespace.rb (Rinda::TupleBag#initialize): Use
+ enum_for instead of hardcoding Enumerable::Enumerator.
+
+Wed Aug 13 16:40:57 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c, vm_core.h: add manual priority support
+ using time slice. if you enable USE_NATIVE_THREAD_PRIORITY
+ macro, this mechanism is ignored. [ruby-dev:33124]
+
+ * thread_pthread.c, thread_win32.c: ditto.
+
+ * test/ruby/test_thread.rb: fix test parameter.
+
+Wed Aug 13 16:02:14 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * object.c (rb_obj_untrusted): new method Object#untrusted?.
+ (rb_obj_untrust): new method Object#untrust.
+ (rb_obj_trust): new method Object#trust.
+
+ * array.c, debug.c, time.c, include/ruby/ruby.h, re.c, variable.c,
+ string.c, io.c, dir.c, vm_method.c, struct.c, class.c, hash.c,
+ ruby.c, marshal.c: fixes for Object#untrusted?.
+
+ * test/ruby/test_module.rb, test/ruby/test_array.rb,
+ test/ruby/test_object.rb, test/ruby/test_string.rb,
+ test/ruby/test_marshal.rb, test/ruby/test_hash.rb: added tests for
+ Object#untrusted?.
+
+Wed Aug 13 16:13:58 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ruby/test_m17n.rb: follow EncodingCompatibilityError.
+
+ * test/ruby/test_mixed_unicode_escapes.rb: ditto.
+
+ * test/ruby/enc/test_utf16.rb: ditto.
+
+Wed Aug 13 16:05:50 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_cmp): retry with right hand operand if its not a
+ time object. [ruby-dev:35011]
+
+Wed Aug 13 15:51:22 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * string.c: Apply a temporary fix to fix build on OS X. A real
+ fix will follow later.
+
+Wed Aug 13 15:25:09 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (Init_Enumerator): Rename Enumerable::Enumerator to
+ just Enumerator.
+
+Wed Aug 13 15:13:57 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * common.mk (prelude.c, golf_prelude.c): Using $(COMPILE_PRELUDE)
+ requires $(RBCONFIG).
+
+Wed Aug 13 15:08:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_init): make flags argument optional.
+ (econv_primitive_convert): ditto.
+
+Wed Aug 13 14:55:27 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * common.mk (realclean-local): Remove parse.h as well.
+
+ * common.mk: Add missing dependencies regarding vm_core.h, id.h,
+ parse.c (parse.h), etc..
+
+Wed Aug 13 14:45:37 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/newline.trans (rb_crlf_newline): new transcoder.
+ (rb_cr_newline): new transcoder.
+
+ * transcode.c (trans_open_i): one more extra room for input newline
+ converter.
+ (rb_trans_open): crlf newline and cr newline implemented.
+ (Init_transcode): Encoding::Converter::CRLF_NEWLINE and
+ Encoding::Converter::CR_NEWLINE defined.
+
+Wed Aug 13 14:22:16 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/newline.trans: new file.
+
+ * transcode_data.h (rb_trans_t): add last_tc field.
+
+ * transcode.c (UNIVERSAL_NEWLINE): defined.
+ (CRLF_NEWLINE): defined.
+ (CR_NEWLINE): defined.
+ (rb_trans_open_by_transcoder_entries): initialize last_tc.
+ (trans_open_i): allocate one more room for output newline converter.
+ (rb_trans_open): universal newline implemented.
+ (more_output_buffer): take max_output argument instead ts.
+ (output_replacement_character): take tc argument instead of ts.
+ (transcode_loop): use last_tc field.
+ (econv_init): add flags argument for rb_trans_open.
+ (Init_transcode): Encoding::Converter::UNIVERSAL_NEWLINE defined.
+
+Wed Aug 13 14:00:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (parse.c): generates parse.h together.
+
+ * id.c, id.h: use constants for parser tokens.
+
+Wed Aug 13 13:47:05 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c: rewind cfp to show proper backtrace.
+ [ruby-dev:35820]
+
+Wed Aug 13 13:09:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot: fix for clean up.
+
+Wed Aug 13 11:45:51 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * vm_core.h: Declare rb_iseq_clone, which is used in class.c.
+
+Wed Aug 13 11:39:19 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (transcode_search_path): return the length of converter
+ path.
+ (load_transcoder_entry): renamed from load_transcoder.
+ (load_transcoder): new function for loading transcoder by encoding
+ names.
+ (rb_transcoding_open_by_transcoder): extracted from
+ rb_transcoding_open.
+ (rb_transcoding_open): use load_transcoder and
+ rb_transcoding_open_by_transcoder.
+ (rb_trans_open_by_transcoder_entries): new function.
+ (trans_open_i): construct entries array.
+ (rb_trans_open): use rb_trans_open_by_transcoder_entries.
+
+Wed Aug 13 10:45:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot: try to find exported directory.
+
+Wed Aug 13 10:16:35 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * doc/NEWS: Mention the Readline.vi_editing_mode?,
+ Readline.emacs_editing_mode?, Readline::HISTORY[] and
+ Readline::HISTORY.clear change.
+
+Wed Aug 13 08:03:02 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (econv_primitive_convert): add output_size argument.
+
+Wed Aug 13 07:41:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_trans_conv): report last transcode_obuf_full.
+ (econv_max_output): new method Encoding::Converter#max_output.
+
+Wed Aug 13 02:46:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * error.c (rb_eEncCompatError): add Exception.
+
+ * include/ruby/ruby.h: ditto.
+
+ * encoding.c (rb_enc_check): use rb_eEncCompatError.
+
+ * string.c (rb_enc_cr_str_buf_cat): ditto.
+
+ * string.c (rb_str_sub_bang): ditto.
+
+ * string.c (rb_str_hex): ditto.
+
+ * string.c (rb_str_oct): ditto.
+
+Wed Aug 13 02:36:47 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (str_transcode): fix error message.
+
+Tue Aug 12 23:42:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_cEncodingConverter): new class Encoding::Converter.
+ (econv_free): new function.
+ (econv_s_allocate): ditto.
+ (econv_init): ditto.
+ (check_econv): ditto.
+ (econv_primitive_convert): new method.
+ (Init_transcode): define Encoding::Converter.
+
+Tue Aug 12 23:16:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_splice_0): call rb_str_drop_bytes, not rb_str_drop.
+
+Tue Aug 12 19:11:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot: fix for enc.mk.
+
+Tue Aug 12 19:08:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_drop_bytes): new function to drop first bytes.
+
+Tue Aug 12 18:58:48 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c, vm_insnhelper.c (vm_define_method): move
+ function place.
+
+Tue Aug 12 18:56:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c: more descriptive aliases of rb_str_new[2-5].
+ [ruby-dev:35615]
+
+Tue Aug 12 18:51:29 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * gc.c (getrusage_time): Returned effective value on Windows.
+
+Tue Aug 12 18:51:11 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_trans_open): free ts before raise.
+
+Tue Aug 12 18:46:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): should not ignore
+ <=> comparison. [ruby-dev:35732]
+
+Tue Aug 12 18:43:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/make_transdb.rb: *.erb.c is not used anymore.
+
+Tue Aug 12 18:32:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_trans_elem_t): new field: from and to.
+
+ * transcode.c (trans_open_i): just record from and to.
+ (rb_trans_open): load transcodings.
+
+Tue Aug 12 18:32:03 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/syslog/syslog.c (mSyslog_open): Use of Check_SafeStr() is
+ deprecated.
+ (mSyslogConstants_LOG_MASK, mSyslogConstants_LOG_UPTO): Use
+ NUM2INT() instead of FIX2INT() when the type of an given object
+ is not determined.
+
+Tue Aug 12 18:14:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * tool/transcode-tblgen.rb (#transcode_tblgen): slight message
+ improvement.
+
+Tue Aug 12 17:16:58 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (trans_open_i): check the result of rb_transcoding_open.
+
+Tue Aug 12 16:23:32 2008 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c (gc_profile_result): use rb_str_catf.
+
+Tue Aug 12 16:13:45 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (TRANSCODE_ERROR): removed.
+
+ * tool/transcode-tblgen.rb: 8bit byte of ASCII-8BIT is a valid
+ (but unique to ASCII-8BIT) character.
+
+ * transcode.c (rb_eConversionUndefined): new error.
+ (rb_eInvalidByteSequence): ditto.
+
+Tue Aug 12 16:08:51 2008 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/pop.rb: POP3Command should export @socket since POP
+ calls #socket.
+
+Tue Aug 12 16:06:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c, util.c (quorem, nrv_alloc, dtoa): enabled floating point
+ support.
+
+Tue Aug 12 15:52:45 2008 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c (gc_profile_result): use sprintf.
+
+Tue Aug 12 15:37:40 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_intern): should check symbol table overflow.
+
+Tue Aug 12 15:31:04 2008 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb (send_request_with_body): Content-Length should
+ be byte length of string. (closes #203)
+
+Tue Aug 12 15:17:06 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * enc/depend: (transvpath_prefix): prefix has no extension, so replace
+ %s with "".
+
+Tue Aug 12 15:03:43 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * test/readline/test_readline.rb (TestReadline#test_safe_level_4):
+ tested Readline.vi_editing_mode? and Readline.emacs_editing_mode?.
+
+Tue Aug 12 14:25:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/Makefile.in (.SUFFIXES): renamed to .trans.
+
+ * enc/make_encmake.rb: added --encs and --no-encs options.
+
+ * enc/depend (TRANSVPATH): fix for nmake.
+
+Tue Aug 12 14:19:53 2008 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/https.rb: suppress syntax warning.
+
+Tue Aug 12 14:15:51 2008 Minero Aoki <aamine@loveruby.net>
+
+ * lib/net/http.rb (Net::HTTP#initialize): initialize net/https
+ variables to suppress syntax warning.
+
+Tue Aug 12 14:15:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/dl/cptr.c (rb_dlptr_s_to_ptr): fixed shadowing variable.
+
+Tue Aug 12 10:25:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_delete): Array#delete to return deleted element.
+
+Tue Aug 12 10:18:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/win32ole/test_err_in_callback.rb: do not require 'mkmf'
+ unless WIN32OLE is defined.
+
+Tue Aug 12 07:41:13 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoder): add resetstate_func field for
+ resetting a state of stateful encoding.
+
+ * enc/trans/iso2022.trans (rb_EUC_JP_to_ISO_2022_JP): specify
+ finish_eucjp_to_iso2022jp for resetstate_func.
+
+ * tool/transcode-tblgen.rb: specify NULL for resetstate_func.
+
+ * transcode.c (output_replacement_character): call resetstate_func
+ before appending the replacement character.
+
+Tue Aug 12 07:19:24 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (get_replacement_character): extracted from
+ output_replacement_character.
+
+Tue Aug 12 07:00:02 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoder): typedef at first.
+
+Tue Aug 12 06:48:35 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (rb_trans_conv): find second last error.
+
+Tue Aug 12 00:43:44 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_trans_result_t): new type.
+ (rb_trans_elem_t): new type.
+ (rb_trans_t): new type.
+
+ * transcode.c (transcode_dispatch_cb): removed.
+ (transcode_dispatch): removed.
+ (rb_transcoding_result_t): moved to rb_trans_result_t in
+ transcode_data.h.
+ (transcode_restartable0): goto follow_info when FUNsi.
+ (rb_transcoding_open): use get_transcoder_entry.
+ (rb_trans_open): new function.
+ (rb_trans_conv): ditto.
+ (rb_trans_close): ditto.
+ (trans_open_i): ditto.
+ (trans_sweep): ditto.
+ (more_output_buffer): take rb_trans_t instead of rb_transcoding as
+ an argument.
+ (transcode_loop): take from_encoding and to_encoding instead of tr
+ as arguments. use rb_trans_open/rb_trans_conv/rb_trans_close.
+ (str_transcode): don't use transcode_dispatch.
+
+Mon Aug 11 20:37:05 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * iseq.c (rb_iseq_clone): should preserve cref_stack link.
+
+Mon Aug 11 20:27:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/dl/cfunc.c (rb_dlcfunc_call): add taint check.
+
+ * ext/dl/dl.c (rb_dl_malloc): add rb_secure(2).
+
+ * ext/dl/dl.c (rb_dl_realloc): ditto.
+
+ * ext/dl/dl.c (rb_dl_free): ditto.
+
+ * ext/dl/dl.c (rb_dl_ptr2value): ditto.
+
+Mon Aug 11 20:11:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (getrusage_time): works only if RUSAGE_SELF is defined right
+ now.
+
+ * gc.c (gc_profile_result): C99.
+
+Mon Aug 11 18:57:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_sample): rename #choice to #sample. in
+ addition, sample takes optional argument, a la #first.
+
+Mon Aug 11 18:28:02 2008 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c: added GC::Profiler.
+
+Mon Aug 11 17:26:16 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/README.ja: added API document for
+ Readline.vi_editing_mode? and Readline.emacs_editing_mode?.
+
+ * ext/readline/extconf.rb: checked rl_editing_mode variable in
+ Readline library.
+
+ * ext/readline/readline.c (readline_s_emacs_editing_mode_p): added
+ Readline.emacs_editing_mode? method.
+ (readline_s_vi_editing_mode_p): added Readline.vi_editing_mode?
+ method.
+ (Init_readline): ditto.
+
+Mon Aug 11 16:56:40 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * test/readline/test_readline.rb: added test for Readline's class
+ methods.
+
+Mon Aug 11 16:39:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * class.c (clone_method): should copy cbase in cref as well.
+ [ruby-dev:35116]
+
+ * iseq.c (iseq_mark): mark original iseq object.
+
+ * iseq.c (iseq_free): do not free internal data if they have
+ original iseq to belong.
+
+ * iseq.c (rb_iseq_clone): a new function to clone iseq value.
+
+Mon Aug 11 16:34:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/iso2022.trans: renamed from iso2022.erb.c.
+
+ * enc/trans/single_byte.trans: ditto.
+
+ * enc/trans/utf_16_32.trans: ditto.
+
+ * enc/trans/korean.trans: ditto.
+
+ * enc/trans/japanese.trans: ditto.
+
+ * enc/depend: follow the renaming.
+
+ * tool/build-transcode: ditto.
+
+Mon Aug 11 15:09:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * configure.in (rb_cv_broken_glibc_ia64_erfc): renamed from
+ rb_broken_glibc_ia64_erfc.
+ [ruby-core:18228]
+
+Mon Aug 11 10:04:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoding): rename fields.
+ readlen -> recognized_len.
+ feedlen -> readagain_len.
+
+ * transcode.c: follow the field renaming.
+
+Sun Aug 10 22:34:55 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (transcode_restartable0): invalid handling simplified.
+ (transcode_restartable): use PARTIAL_INPUT for converting buffered
+ input.
+
+Sun Aug 10 22:24:24 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * encoding.c: include util.h. [ruby-dev:35715]
+
+ * common.mk: ditto.
+
+Sun Aug 10 20:59:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoding): new field: flags.
+
+ * transcode.c (load_transcoder): extracted from transcode_dispatch_cb.
+ (rb_transcoding_result_t): renamed from transcode_result_t.
+ (rb_transcoding_open): new function.
+ (rb_transcoding_convert): ditto.
+ (rb_transcoding_close): ditto.
+ (transcode_loop): use rb_transcoding_open, rb_transcoding_convert
+ and rb_transcoding_close.
+ (str_transcode): don't need rb_transcoding.
+
+Sun Aug 10 18:09:16 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: record checksum of
+ transcode-tblgen.rb itself.
+
+Sun Aug 10 12:34:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * config.guess ({powerpc-apple,i586-pc}-haiku): re-applied r18403.
+ [ruby-core:18110]
+
+ * config.{guess,sub}: updated to automake-1.10.1.
+
+Sun Aug 10 11:45:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/Makefile.in (make-workdir): use MAKEDIRS.
+
+ * enc/depend: makes target directory before compile/link.
+
+ * tool/transcode-tblgen.rb: creates target directory.
+
+Sun Aug 10 11:30:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c: rename my_transcoding to tc and my_transcoder to tr.
+
+Sun Aug 10 11:15:55 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoding): add feedlen field.
+
+ * transcode.c (transcode_restartable0): renamed from
+ transcode_restartable.
+ save input buffer into feed buffer if next character is started the
+ point before input buffer. for example, "\x00\xd8\x01" then "\x02"
+ in UTF-16LE. \x02 causes invalid and next character is started from
+ \x01.
+ (transcode_restartable): new function to call
+ transcode_restartable0. if feed buffer is not empty, convert it at
+ first.
+
+Sun Aug 10 11:02:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (extconf): use MAKEDIRS.
+
+Sun Aug 10 09:35:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/irb.rb (IRB::Irb#inspect): instance_variables returns symbols
+ instead of strings now. [ruby-dev:34930]
+
+Sun Aug 10 09:22:14 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (transcode_char_start): refactored to remove readlen
+ argument.
+ (transcode_restartable): refactored to remove readlen variable.
+
+Sun Aug 10 08:56:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (STACK_LEVEL_MAX, ruby_stack_length): returns size_t.
+ [ruby-core:18207]
+
+ * configure.in (rb_cv_missing__dtos18, rb_cv_missing_fconvert),
+ ext/digest/md5/md5.c, ext/openssl/ossl.c (main),
+ ext/socket/extconf.rb (ipv6, wide-getaddrinfo): main should be int.
+
+ * main.c (main), win32/winmain.c, wince/wincemain.c (WinMain): envp is
+ no longer used so long time. based on a patch from Peter Bowen at
+ [ruby-core:18208]
+
+Sat Aug 9 22:05:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (transcode_loop): take destination and resize function
+ as parameters.
+ (more_output_buffer): ditto.
+ (str_transcoding_resize): argument changed from rb_transcoding* to
+ VALUE.
+ (str_transcode): call transcode_loop with destination string and its
+ resize function.
+
+ * transcode_data.h (rb_transcoding): move ruby_string_dest and
+ flush_func to transcode_loop parameters.
+
+Sat Aug 9 21:29:45 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk: encs depend on transdb.h
+
+Sat Aug 9 21:10:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rb_cv_rshift_sign, rb_cv_binary_elf): get rid of
+ AC_TRY_RUN.
+
+Sat Aug 9 16:33:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoding): new fields: next_info and next_byte.
+
+ * transcode.c (transcode_restartable): save/restore next_info and
+ next_byte.
+ sync readlen and in_p when invalid.
+
+Sat Aug 9 15:10:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode.c (transcode_restartable): my_transcoder argument removed.
+ (transcode_loop): my_transcoder argument removed.
+
+Sat Aug 9 14:39:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoding): add fields for restartable
+ transcoding.
+ (rb_transcoder): add max_input field.
+ from_unit_length field is renamed to input_unit_length.
+
+ * tool/transcode-tblgen.rb: generate max_input field.
+
+ * enc/trans/iso2022.erb.c: follow rb_transcoder change.
+
+ * enc/trans/utf_16_32.erb.c: ditto.
+
+ * transcode.c (PARTIAL_INPUT): new constant.
+ (transcode_char_start): new function.
+ (transcode_result_t): new type.
+ (transcode_restartable): new function.
+ (more_output_buffer): new function.
+ (transcode_loop): use transcode_restartable.
+
+Sat Aug 9 13:35:08 2008 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].
+
+Sat Aug 9 06:37:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/make_encdb.rb, enc/trans/make_transdb.rb: skip nonexistent
+ directory. [ruby-dev:35802]
+
+Sat Aug 9 01:07:51 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/trans/utf_16_32.erb.c (fun_so_from_utf_32le): implemented.
+ (fun_so_to_utf_32le): implemented.
+ [ruby-dev:35777]
+
+Sat Aug 9 00:42:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoder): from_unit_length field added.
+ from_utf8 field removed.
+
+ * tool/transcode-tblgen.rb: generate offsets range.
+ follow rb_transcoder change.
+
+ * transcode.c (transcode_loop): don't use from_utf8.
+ make invalid region from_unit_length wise.
+
+ * enc/trans/iso2022.erb.c: follow rb_transcoder and
+ transcode_generate_node change.
+
+ * enc/trans/utf_16_32.erb.c: follow rb_transcoder and
+ transcode_generate_node change.
+ explicit :invalid map removed.
+
+Fri Aug 8 23:29:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend (TRANSCSRCS): needs rule_subst to apply.
+
+ * io.c (shutdown): not define if defined already.
+
+Fri Aug 8 22:47:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (opt_eq_func): large function to make inline.
+
+ * bcc32/Makefile.sub (config.h): cannot compile a big inline function.
+
+Fri Aug 8 21:09:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk (enk.mk): give not RUBY but MINIRUBY.
+
+Fri Aug 8 17:03:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (shutdown, sched_yield, pthread_attr_setinheritsched):
+ check for Haiku.
+
+ * eval_intern.h, io.c, thread_pthread.c: use autoconfisticated results.
+
+Fri Aug 8 16:52:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (enc.mk): mkmf.rb requires rbconfig.rb.
+
+ * common.mk (srcs-enc): renamed from transcodes.
+
+ * enc/Makefile.in (make-workdir): creates object directories.
+
+ * common.mk (encdb.h): see both $(srcdir)/enc and enc.
+
+ * enc/make_encdb.rb: ditto.
+
+ * enc/trans/make_transdb.rb: fix for the case no transdirs are given.
+
+ * enc/trans/make_transdb.rb: converts only one transcoders for each
+ basename.
+
+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
+ "".
+
+Fri Aug 8 04:20:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk: see both $(srcdir)/enc/trans and enc/trans.
+
+ * enc/trans/make_transdb.rb: ditto.
+
+Fri Aug 8 00:05:02 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/.document: added readline/readline.c.
+
+ * ext/readline/readline.c: changed Copyright. added RDoc.
+
+ * ext/readline/README.ja: fixed typo.
+
+ * ext/readline/README: contents was moved RDoc.
+
+Thu Aug 7 23:43:11 2008 Tanaka Akira <akr@fsij.org>
+
+ * transcode_data.h (rb_transcoding): new field "stateful".
+ (rb_transcoder): preprocessor and postprocessor field removed.
+ change arguments of func_ii, func_si, func_io and func_so.
+ new field "finish_func".
+
+ * tool/transcode-tblgen.rb: make FUNii, FUNsi and FUNio
+ generatable.
+
+ * transcode.c (transcoder_lib_table): removed.
+ (transcoder_table): change structure.
+ (transcoder_key): removed because the above structure change.
+ (make_transcoder_entry): new function.
+ (get_transcoder_entry): ditto.
+ (rb_register_transcoder): follow the structure change.
+ (declare_transcoder): ditto.
+ (transcode_search_path): new function for breadth first search to
+ find a list of converters.
+ (transcode_search_path_i): new function.
+ (transcode_dispatch_cb): ditto.
+ (transcode_dispatch): use transcode_search_path.
+ (transcode_loop): follow the argument change.
+ (str_transcode): preprocessor and postprocessor stuff removed.
+
+ * enc/trans/iso2022.erb.c: new file. ISO-2022-JP conversion
+ re-implemented.
+
+ * enc/trans/japanese.erb.c: ISO-2022-JP stuff removed.
+
+ * enc/trans/utf_16_32.erb.c: follow argument change of FUNso.
+
+ [ruby-dev:35798]
+
+Thu Aug 7 22:55:44 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/README.ja: updated API document for Readline module.
+
+Thu Aug 7 20:52:08 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (login): raise FTPReplyError if passwd or acct
+ is not supplied. fixed [ruby-core:18058].
+
+Thu Aug 7 18:01:44 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/ruby-mode.el (ruby-imenu-create-index-in-block): Fix the
+ regexp to only pick definition lines properly. `module_function'
+ is not a definition of a module named `_function'.
+
+Thu Aug 7 17:47:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend: add transdb.c.
+
+Thu Aug 7 16:28:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, common.mk, {bcc,win}32/Makefile.sub (clean-ext): do not
+ use miniruby.
+
+Thu Aug 7 14:17:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend: removed needless explicit commands.
+
+ * lib/mkmf.rb, {bcc32,win32}/Makefile.sub (CLEANLIBS, CLEANOBJS):
+ moved clean targets to platform makefiles.
+
+Thu Aug 7 13:12:30 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/getaddrinfo.c (gai_strerror): ignore only on Haiku.
+ a patch from <zn at mbf.nifty.com>, [ruby-dev:35796].
+
+Thu Aug 7 06:31:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ruby/process.rb (test_popen_fork): skip a test which is
+ freeze in FreeBSD.
+
+Thu Aug 7 06:05:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * config.guess: add powerpc-apple-haiku, i586-pc-haiku.
+ see [ruby-core:18110]
+
+Thu Aug 7 05:51:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * eval_intern.h: Add support to Haiku. see [ruby-core:18110]
+
+ * include/ruby/defines.h: ditto.
+
+ * configure.in: ditto.
+
+ * thread_pthread.c: ditto.
+
+ * io.c: ditto.
+
+ * lib/mkmf.rb: ditto.
+
+ * ext/socket/getaddrinfo.c: ditto.
+
+ * ext/socket/extconf.rb: ditto.
+
+ * ext/socket/socket.c: ditto.
+
+ * ext/socket/addrinfo.h: ditto.
+
+ * ext/socket/getnameinfo.c: ditto.
+
+Thu Aug 7 05:43:32 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk: mkdir enc/trans before build tables.
+
+Thu Aug 7 05:18:30 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/depend: enc/*.c is source but enc/trans/*.c is generated.
+
+Thu Aug 7 05:14:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * regenc.c (code_to_mbc): raise RangeError Integer#chr
+ when more than 255 is given with single byte encoding.
+ [ruby-dev:35789]
+
+Thu Aug 7 05:06:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (run_final): runs finalizers with the object terminated.
+
+ * gc.c (rb_gc_call_finalizer_at_exit): keeps finalized objects from
+ linking to freelist.
+
+Thu Aug 7 04:43:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/depend: for build in other than srcdir.
+
+Wed Aug 6 22:40:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (transcode_generate_node): code
+ argument removed.
+
+Wed Aug 6 21:25:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (chain_finalized_object): deletes finalizers to be invoked from
+ finalizer_table.
+
+ * gc.c (rb_gc_call_finalizer_at_exit): warns when could not invoke
+ finalizers.
+
+Wed Aug 6 20:56:43 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/depend: transcode table generation depends on
+ tool/transcode-tblgen.rb.
+
+Wed Aug 6 20:48:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_gc_call_finalizer_at_exit): self-referencing finalizers
+ cannot be invoked. [ruby-dev:35681]
+
+Wed Aug 6 20:44:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: distinguish UNDEF and INVALID.
+ [ruby-dev:35709]
+
+ * transcode.c (transcode_loop): don't need rb_enc_mbclen now.
+
+Wed Aug 6 14:40:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (transdb.h): requires transcoders.
+
+ * enc/depend (srcs): target for transcoders.
+
+Wed Aug 6 14:04:08 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * enc/depend: replace not only $(<:...) but also $<.
+
+Wed Aug 6 13:54:30 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.status): export BASERUBY.
+
+ * enc/depend: avoid GNU make'ism.
+
+Wed Aug 6 07:59:02 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb (ActionMap#eql?): use == to compare @map.
+
+Wed Aug 6 07:45:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/transcode-tblgen.rb: show generating tables in verbose mode.
+ (transcode_generate_node): call ActionMap#generate_node with showing
+ table name.
+
+ * enc/trans/utf_16_32.erb.c: use transcode_generate_node.
+
+Wed Aug 6 06:55:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_start_func_2): propagates fatal error and system
+ exit to the main thread.
+
+Wed Aug 6 05:31:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_to_encoding_index, rb_to_encoding): check if the name
+ is ascii compatible as well as Encoding.find.
+
+ * transcode.c (str_encode): no need to duplicate first.
+
+Wed Aug 6 05:08:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_sort_bang): reset to real class.
+
+ * file.c (rb_find_file_ext, rb_find_file): ditto.
+
+ * io.c (io_reopen): ditto.
+
+Wed Aug 6 03:56:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (transcodes), tool/build-transcode: generates transcode
+ sources.
+
+ * enc/trans/{japanese,korean,single_byte,utf_16_32}.c: to be
+ autogenerated now.
+
+ * enc/depend: added rules for .c from .erb.c.
+
+Tue Aug 5 20:46:20 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/build-transcode: new file.
+
+ * tool/transcode-tblgen.rb: new file.
+
+ * enc/trans/make_transdb.rb: exclude *.erb.c.
+
+ * enc/depend: exclude *.erb.c.
+
+ * enc/trans/utf_16_32.erb.c: new file.
+
+ * enc/trans/single_byte.erb.c: new file.
+
+ * enc/trans/japanese.erb.c: new file.
+
+ * enc/trans/korean.erb.c: new file.
+
+ * enc/trans/iso-8859-2-tbl.rb: new file.
+
+ * enc/trans/iso-8859-3-tbl.rb: new file.
+
+ * enc/trans/iso-8859-4-tbl.rb: new file.
+
+ * enc/trans/iso-8859-5-tbl.rb: new file.
+
+ * enc/trans/iso-8859-6-tbl.rb: new file.
+
+ * enc/trans/iso-8859-7-tbl.rb: new file.
+
+ * enc/trans/iso-8859-8-tbl.rb: new file.
+
+ * enc/trans/iso-8859-9-tbl.rb: new file.
+
+ * enc/trans/iso-8859-10-tbl.rb: new file.
+
+ * enc/trans/iso-8859-11-tbl.rb: new file.
+
+ * enc/trans/iso-8859-13-tbl.rb: new file.
+
+ * enc/trans/iso-8859-14-tbl.rb: new file.
+
+ * enc/trans/iso-8859-15-tbl.rb: new file.
+
+ * enc/trans/eucjp-tbl.rb: new file.
+
+ * enc/trans/sjis-tbl.rb: new file.
+
+ * enc/trans/euckr-tbl.rb: new file.
+
+ * enc/trans/utf_16_32.c: regenerated.
+
+ * enc/trans/single_byte.c: regenerated.
+
+ * enc/trans/japanese.c: regenerated.
+
+ * enc/trans/korean.c: regenerated.
+
+ [ruby-dev:35730]
+
+Tue Aug 5 18:02:53 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/io/nonblock/test_flush.rb (TestIONonblock#test_flush):
+ rescue some exceptions. [ruby-dev:35638]
+
+Tue Aug 5 16:40:06 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/ftp.rb (chdir): handle 5xx errors correctly.
+ fixed [ruby-core:18057].
+
+Tue Aug 5 16:38:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/win32.h, bcc32/Makefile.sub (config.h): bcc 5.8 has
+ stdint.h.
+
+Tue Aug 5 16:13:05 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (disconnect): do not refer to SSL::SSLSocket for
+ environments without OpenSSL. fixed [ruby-dev:35755].
+
+Tue Aug 5 14:19:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_stat_mode): generalized st_mode mask.
+
+Tue Aug 5 12:43:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (retry_sendfile, retry_read): ENOSYS and EWOULDBLOCK are not
+ defined on every platforms.
+
+Tue Aug 5 12:34:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode_data.h (TRANSCODE_ERROR): common transcode failure
+ exception, would be changed later.
+
+ * enc/trans/japanese.c (UNSUPPORTED_MODE): unsupported mode transition
+ exception.
+
+Tue Aug 5 03:29:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_sort_bang): respect overridden <=> for String and
+ Fixnum. [ruby-core:17708]
+
+ * include/ruby/node.h (NOEX_BASIC): basic definition method flag.
+
+ * include/ruby/intern.h, vm_method.c (rb_method_basic_definition_p):
+ new function to check if the method is not redefined after the
+ initialization.
+
+ * vm_method.c (rb_obj_respond_to): use rb_method_basic_definition_p.
+
+Mon Aug 4 20:39:06 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * Makefile.in (update-rubyspec): renamed the rubyspec directory
+ "spec". Changed directory structure.
+
+ * Makefile.in (test-rubyspec): ditto.
+
+ * spec/README: described the structure of "spec" directory.
+
+ * spec/default.mspec: configured for Matz's Ruby Implementation.
+
+Mon Aug 4 19:21:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_tmp_new): added.
+
+ * vm_eval.c (vm_call_super): fixed typo, and get rid of too large
+ alloca. [ruby-core:17922]
+
+Mon Aug 4 16:48:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * 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]
+
+Mon Aug 4 14:41:25 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * lib/net/smtp.rb (Net::SMTP::rcptto): fix a typo. a patch from
+ Masao Takaku <masao at nii.ac.jp>
+ fix [ruby-dev:35489].
+
+Mon Aug 4 14:08:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (dump_ensure), process.c (run_exec_dup2),
+ string.c (rb_str_replace), transcode.c (transcode_dispatch): fixed
+ memory leaks. based on patches from shinichiro.h <shinichiro.hamaji
+ AT gmail.com> at [ruby-dev:35751].
+
+Sun Aug 3 19:32:52 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (hash2named_arg): refactoring.
+
+ * ext/win32ole/win32ole.c (ole_invoke, fole_respond_to, ev_on_event,
+ fev_off_event): accepts Symbol argument.
+
+ * test/win32ole/test_win32ole.rb: ditto.
+
+ * test/win32ole/test_win32ole_event.rb: ditto.
+
+Sun Aug 3 10:41:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_shared_replace): fixed memory leak. a patch from
+ shinichiro.h <shinichiro.hamaji AT gmail.com> at [ruby-dev:35742]
+
+Sat Aug 2 22:55:41 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_err_in_callback.rb: remove temporary files.
+ some refactoring.
+
+Sat Aug 2 15:51:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (yylex): 8 and 9 in octal integer should cause compile
+ error. [ruby-dev:35729]
+
+Sat Aug 2 01:06:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/japanese.c: add U+FF5E to EUC-JP.
+ [ruby-dev:35720] [ruby-dev:35722]
+
+Fri Aug 1 23:49:44 2008 TAKAO Kouji <kouji@takao7.net>
+
+ * ext/readline/extconf.rb: checked to have clear_history in
+ readline library.
+ * ext/readline/readline.c (hist_get, hist_each, Init_readline):
+ The offset specified for the argument of history_get() might be
+ different in GNU Readline and libedit. If use libedit, it was
+ corrected that the computational method of the offset specified
+ for the argument of history_get() when the Readline module was
+ initialized was decided.
+ (hist_get, hist_set): If use libedit, accesses first an input
+ content in history when specifies the negative offset for the
+ argument of history_get() or replace_history_entry(). Then
+ checks the offset is negative in ruby.
+ (rb_remove_history): When compiling, it corrects it to warning
+ when libedit is used.
+ (hist_clear, Init_readline): added Readline::HISTORY.clear
+ method. [ruby-dev:35551]
+ * test/readline/test_readline_history.rb: added unit test for
+ Readline::HISTORY.
+
+Fri Aug 1 23:26:45 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (transcode_loop): undefined character is replaced with
+ only one character. [ruby-dev:35709]
+
+Fri Aug 1 23:26:22 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ Merged r16430(akr), r16431(akr), r16433(akr), r16469(nobu), and
+ r17874(akr) from ruby_1_8.
+
+ * Makefile.in (update-rubyspec): added
+
+ * Makefile.in (test-rubyspec): added
+
+Fri Aug 1 23:16:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/japanese.c: add support for CP51932,
+
+Fri Aug 1 22:59:40 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/japanese.c: add U+FF0C,
+
+Fri Aug 1 21:49:41 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/sdbm/test_sdbm.rb: add some tests.
+
+Fri Aug 1 21:36:00 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * gc.c (allocate_heaps, assign_heap_slot, rb_newobj_from_heap):
+ reset during_gc before raising NoMemoryError.
+
+Fri Aug 1 21:29:56 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm.c (Init_BareVM): check failure of malloc().
+
+Fri Aug 1 20:55:27 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/japanese.c (to_SHIFT_JIS_EF_BF_offsets): add U+FFF3,
+ U+FFF4, U+FFF5.
+
+ * enc/trans/japanese.c (to_SHIFT_JIS_EF_BF_infos): ditto.
+
+ * enc/trans/japanese.c (to_EUC_JP_EF_BF_infos): added.
+
+ * enc/trans/japanese.c (to_EUC_JP_EF_BF): added.
+
+ * enc/trans/japanese.c (to_EUC_JP_EF_infos): change size.
+ [ruby-dev:35714]
+
+Fri Aug 1 18:27:15 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * parse.y (parser_yylex): removed an useless conditional, and magic
+ comment are ignored unless at the first of line.
+
+ * test/ruby/test_m17n.rb (test_magic_comment_vim): added.
+
+ * test/ruby/test_m17n.rb (test_magic_comment_at_various_positions):
+ added.
+
+Fri Aug 1 14:54:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_seekdir): no need to rewind to seek forward.
+
+Fri Aug 1 05:31:08 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (output_replacement_character):
+ rename from _get_replacement_character.
+
+ * transcode.c (output_replacement_character):
+ fix replacement on UTF-32{BE,LE}. [ruby-dev:35705]
+
+ * transcode.c (transcode_loop): ditto.
+
+ * test/ruby/test_transcode.rb (test_invalid_replace):
+ add for above.
+
+Fri Aug 1 01:01:49 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * proc.c (rb_proc_call_with_block): reduce comparison.
+
+Thu Jul 31 22:17:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (VpMult): prevent memory leak.
+
+Thu Jul 31 20:05:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ruby/test_transcode.rb (test_unicode_public_review_issue_121):
+ fix option1 and 3.
+
+Thu Jul 31 19:54:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (get_replacement_character): use U+FFFD as replacement
+ character when convert to Unicode.
+
+ * test/ruby/test_transcode.rb (test_unicode_public_review_issue_121):
+ rename from test_public_review_issue_121.
+
+ * test/ruby/test_transcode.rb (test_unicode_public_review_issue_121):
+ enable option2.
+
+Thu Jul 31 17:00:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (get_replacement_character): fix: invalid byte sequence
+ is always replaced "\x00?".
+
+Thu Jul 31 16:37:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/rubygems/test_gem_ext_configure_builder.rb
+ (test_self_build_fail): remove extra newline. [ruby-dev:35704]
+
+Thu Jul 31 15:11:11 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * test/ruby/test_transcode.rb: added test_shift_jis
+ (contributed by Yoshihiro Kambayashi) and
+ test_public_review_issue_121
+ (see http://www.unicode.org/review/pr-121.html)
+
+Thu Jul 31 13:18:30 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * include/ruby/ruby.h (struct RString): size of ary must be
+ RSTRING_EMBED_LEN_MAX + 1.
+
+Thu Jul 31 12:23:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (pack_unpack): upper half of hexdigits has never been used.
+
+Thu Jul 31 11:31:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/syck/syck.h (ASSERT): fix typo at r18176.
+
+ * ext/syck/rubyext.c (rb_syck_compile): expression in ASSERT() has no
+ effect unless debug mode.
+
+Thu Jul 31 10:51:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (ruby_iseq_disasm_insn): suppress warnings on platforms which
+ int size differs from pointer size.
+
+ * ext/openssl/ossl_asn1.c (ossl_asn1_get_asn1type): ditto
+
+ * ext/syck/rubyext.c (rb_syck_err_handler),
+ (syck_default_error_handler): ditto.
+
+Thu Jul 31 02:21:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/syck/rubyext.c (rb_syck_compile): remove meaningless branch
+ that misleads into thinking that the variable sav may be
+ uninitialized.
+
+Thu Jul 31 01:25:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_mutex_unlock_all): mutex is no longer a ruby object.
+
+Thu Jul 31 01:18:07 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (magic_comment_encoding): remove meaningless null check.
+
+Thu Jul 31 01:09:28 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (VpIsRoundMode): fix tautology
+ condition.
+
+Thu Jul 31 00:58:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * pack.c (pack_unpack): reduced static variables.
+
+Thu Jul 31 00:10:20 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * proc.c (rb_proc_call_with_block): prevent null reference.
+
+Wed Jul 30 22:19:13 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (vtable_free): remove meaningless null check.
+
+Wed Jul 30 22:08:25 2008 Tanaka Akira <akr@fsij.org>
+
+ * dir.c (struct dir_data): change path field char * to VALUE.
+ (mark_dir): new function for mark path field.
+ (free_dir): follow the path field change.
+ (dir_s_alloc): ditto.
+ (dir_initialize): ditto.
+ (dir_s_open): ditto.
+ (dir_inspect): ditto.
+ (dir_path): return (duplicate of) the path field to preserve
+ encoding. [ruby-dev:35685]
+
+Wed Jul 30 22:06:56 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (sym_inspect): remove dead code.
+
+Wed Jul 30 21:32:52 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ChangeLog: fix wrong method name and add reference.
+
+Wed Jul 30 21:30:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * regparse.c (name_add): fix memory leak.
+
+Wed Jul 30 21:08:06 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/syck/syck.c (syck_free_parser): fix memory leak by
+ YAML::Syck.compile.
+
+ * regparse.c (parse_exp): fix memory leak at Regexp.new("x{1,1}").
+
+Wed Jul 30 17:48:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_select): recalc the rest of timeout for each
+ iterations. [ruby-core:18015]
+
+Tue Jul 29 23:37:37 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (io_ungetc): raise NotImplementedError when ungetc is called
+ against dummy encoding IO. [ruby-dev:35686]
+
+ * io.c (rb_io_getline_1): ditto when gets with delimiter is called.
+
+ * io.c (io_getc): ditto when getc is called.
+
+ * test/ruby/test_io_m17n.rb (test_terminator_stateful_conversion,
+ test_getc_stateful_conversion, test_ungetc_stateful_conversion):
+ these tests should raise NotImplementedError.
+
+Tue Jul 29 22:55:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_io.rb (pipe): run reader thread and writer thread.
+
+Tue Jul 29 21:38:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (Init_bigdecimal): fix typo.
+
+Tue Jul 29 21:35:59 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/etc/test_etc.rb (test_passwd): age field may be string under
+ some environments.
+
+Tue Jul 29 17:54:35 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dir.c (char_casecmp): fix: return 0 if either of characters is NUL.
+
+Tue Jul 29 13:17:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/etc/test_etc.rb (test_getpwuid): fix for users whose uid is
+ shared.
+
+Tue Jul 29 05:37:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_find_file_ext, rb_find_file): explicit relative path
+ which starts with "./" or "../" should be searched from cwd
+ instead of load path. [ruby-dev:35673]
+
+Tue Jul 29 02:39:46 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * math.c (math_atanh): raise EDOM on FreeBSD when atanh(1).
+
+ * math.c (math_log): ditto.
+
+ * math.c (math_log2): ditto.
+
+ * math.c (math_log10): ditto.
+
+ * test/ruby/test_math.rb: test for above.
+
+Tue Jul 29 01:41:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * dir.c (struct dir_data): intenc field removed.
+ (dir_s_alloc): intenc initialization removed.
+ (dir_initialize): :internal_encoding option removed. dirname code
+ conversion removed.
+ (dir_enc_str): code conversion removed.
+ [ruby-dev:35661]
+
+Mon Jul 28 21:32:17 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * test/rss/: use PNG instead of zlib as binary data.
+
+Mon Jul 28 21:24:33 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.[ch] (cond_every_entry, rb_thread_cond_struct): reverted
+ r18239 because r18245 made the changes unnecessary.
+
+ * thread.c (rb_mutex_struct): define after including thread_{pthread,
+ win32}.c.
+
+Mon Jul 28 21:00:10 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_require.rb (test_require_too_long_filename):
+ Kernel#require does not use dln_find_file_r (at r18242).
+
+Mon Jul 28 20:17:03 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_core.h: move the definition of struct rb_mutex_struct.
+
+ * thread.c: ditto.
+
+Mon Jul 28 18:58:46 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (mutex_unlock): fix typo.
+
+Mon Jul 28 18:15:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_find_file_ext, rb_find_file): not to split load path with
+ path separator. [ruby-Bugs-21356]
+
+Mon Jul 28 18:14:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (overlapped_socket_io, fcntl, rb_w32_close): must not
+ pass a pointer to int which is smaller than st_data_t on mswin64.
+
+Mon Jul 28 16:49:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (CreateChild, overlapped_socket_io): suppress
+ warnings.
+
+Mon Jul 28 16:06:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (MAXPATHLEN): define before use.
+
+Mon Jul 28 16:01:12 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.[ch] (cond_every_entry, rb_thread_cond_struct): moved
+ the definitions from .c to .h because rb_thread_cond_struct is used
+ in vm_core.h.
+
+Mon Jul 28 14:29:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (load_lib): use dln_find_file_r instead of dln_find_file.
+
+Mon Jul 28 00:18:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_core.h, thread.c: It is now prohibited to use Data_Get_Struct in
+ *_free against an object that is going to be free'ed. So, change type
+ of thread_t#keeping_mutexes from VALUE to mutex_t.
+
+ * vm.c: remove mark to keeping_mutexes.
+
+Sun Jul 27 23:32:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/openssl/test_ssl.rb (server_loop): rescue Errno::EINVAL and
+ Errno::ECONNABORTED.
+
+Sun Jul 27 22:11:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * bootstraptests/method.rb: increase RLIMIT_STACK size to 4M+8Kbytes
+ because FreeBSD fails this less than that.
+
+Sun Jul 27 21:45:59 2008 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_mark_children, obj_free): T_DEFERRED should not be appear.
+
+ * gc.c (gc_sweep, finalize_list): fix to decrement heap_slot#limit
+ after executing finalizer.
+
+Sun Jul 27 14:48:37 2008 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h: add a type T_DEFERRED.
+
+ * gc.c: fix deferred finalizer system. finalize processes of
+ T_DATA and T_FILE are executed after gc process.
+ And fix to use BUILTIN_TYPE() instead of seeing flag.
+
+ * thread.c, vm_core.h: add RUBY_VM_SET_FINALIZER_INTERRUPT()
+ and check interrupt_flag at rb_thread_execute_interrupts().
+
+ * thread.c (mutex_mark): fix to mark next_mutex.
+
+ * vm.c (rb_thread_mark): fix to mark keeping_mutexes.
+
+Sun Jul 27 09:15:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.h (dln_find_exe, dln_find_file): deprecated, use reentrant
+ versions instead.
+
+Sun Jul 27 09:02:32 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/rinda/tuplespace.rb: merged from 1.8.
+
+ * test/rinda/test_rinda.rb: merged from 1.8.
+
+Sat Jul 26 22:45:18 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * sample/exyacc.rb: fixed NoMethodError(Kernel#sub!).
+ replaced use of special variables with explicit IO
+ operations.
+
+Sat Jul 26 21:17:18 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (Init_win32ole): add
+ WIN32OLE_EVENT#handler=, WIN32OLE_EVENT#handler
+
+ * test/win32ole/test_win32ole_event.rb: ditto.
+
+Sat Jul 26 07:44:14 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (add_event_call_back): remove unused
+ variable.
+
+Fri Jul 25 23:48:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (gc_sweep, obj_free, run_final): defer finalizers of IO and
+ Data. [ruby-dev:35578]
+
+Fri Jul 25 23:35:18 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>.
+
+Fri Jul 25 21:55:38 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/enc/test_koi8.rb: move from test/ruby/test_koi8.rb.
+
+Fri Jul 25 21:09:32 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_invoke, add_event_callback,
+ rescue_callback): refactoring.
+
+Fri Jul 25 20:52:44 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/err_in_callback.rb: add test of raising
+ exception in WIN32OLE_EVENT callback.
+
+ * test/win32ole/test_err_in_callback.rb: ditto.
+
+Fri Jul 25 20:43:57 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (Init_win32ole): add
+ WIN32OLE_EVENT#off_event.
+
+ * test/win32ole/test_win32ole_event.rb: ditto.
+
+ * test/win32ole/test_win32ole_event.rb: some refactoring.
+
+Fri Jul 25 19:50:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regint.c (xmalloc, xrealloc, xfree): not to use ruby managed memory.
+
+Fri Jul 25 15:52:40 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (vm_invoke_proc): skip setting safe_level if
+ it from bmethod. This change makes test/ruby/test_proc.rb pass.
+
+Fri Jul 25 10:00:00 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * test/ruby/test_transcode.rb: refactoring/cleanup of
+ test_iso_2022_jp(_1)
+
+Fri Jul 25 04:12:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf.c (rb_nkf_convert): output of mime encode is US-ASCII.
+ [ruby-list:45257]
+
+Fri Jul 25 02:43:11 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * sample/coverage.rb: move from lib/coverage.rb because this remains in
+ an early phase of development.
+
+Fri Jul 25 00:10:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_find_file_ext, rb_find_file): converts Windows style path
+ to Cygwin path. [ruby-dev:35647]
+
+Thu Jul 24 16:30:21 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (exit_handler): use st_free_table() to free socklist.
+
+ * win32/win32.c (rb_w32_pipe_exec, rb_w32_accept, rb_w32_socket,
+ rb_w32_socketpair): should check and release fd and sockets/handles
+ if an error occurs in rb_w32_open_osfhandle().
+
+Thu Jul 24 16:05:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (overlapped_socket_io): avoid warnings.
+
+ * thread_win32.c (ubf_handle): refactoring.
+
+Thu Jul 24 07:01:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/win32ole/win32ole.c: got rid of improper casts.
+
+Wed Jul 23 23:19:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/socket/test_tcp.rb (test_recvfrom): replace an irrelevant test
+ for old behavior.
+
+Wed Jul 23 21:38:16 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_marshal.rb: suppress warning during test.
+
+Wed Jul 23 21:35:53 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_dir.rb: suppress warning during test.
+
+Wed Jul 23 18:27:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/tk/{stubs,tcltklib}.c, ext/tk/tkutil/tkutil.c: fix warnings
+ about constness and signedness.
+
+Wed Jul 23 17:04:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl/openssl_missing.h (d2i_of_void): define for older
+ versions. [ruby-dev:35637]
+
+Wed Jul 23 13:53:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/curses/extconf.rb: use try_static_assert.
+
+Wed Jul 23 10:06:19 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/zlib/test_zlib.rb (TestZlibDeflate#test_params): suppress a
+ finalizer warning.
+
+Wed Jul 23 06:25:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/syck: suppress warnings more.
+
+Wed Jul 23 03:19:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (struct input_code.name, input_codename):
+ constified.
+
+Wed Jul 23 03:02:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/syck: suppress warnings.
+
+Wed Jul 23 00:34:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/openssl: suppress warnings.
+
+Tue Jul 22 23:01:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/syck/rubyext.c, ext/syck/yaml2byte.c, ext/syck/emitter.c,
+ ext/syck/syck.c, ext/syck/handler.c, ext/syck/syck.h: suppress GCC
+ warning.
+
+Tue Jul 22 20:42:24 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): BigDecimal#<=> should
+ return nil if an argument can't be coerced into BigDecimal.
+
+ * ext/bigdecimal/bigdecimal.h, ext/bigdecimal/bigdecimal.c
+ (VpIsNegDoubleZero, VpItoV): comment out unused functions.
+
+Tue Jul 22 20:33:54 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/rdoc/test_rdoc_parser_ruby.rb (teardown): close tempfile.
+
+Tue Jul 22 19:38:38 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * test/ruby/test_transcode.rb: added two comments
+
+Tue Jul 22 18:08:34 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * README.EXT, README.EXT.ja: mention about FIX2LONG and NUM2LONG.
+ see [ruby-dev:35197]
+
+Tue Jul 22 17:53:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (insn_data_to_s_detail), file.c (rb_stat_inspect),
+ iseq.c (ruby_iseq_disasm_insn, ruby_iseq_disasm),
+ process.c (pst_message), re.c (match_inspect): use rb_str_catf.
+
+ * dir.c (dir_inspect), iseq.c (iseq_inspect, insn_operand_intern): use
+ rb_sprintf.
+
+ * error.c (rb_name_error, rb_raise, rb_loaderror, rb_fatal): use
+ rb_vsprintf.
+
+Tue Jul 22 17:20:25 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (init_func): new function to get API's address which
+ is often used and not supported on all Windows.
+
+ * win32/win32.c (overlapped_socket_io): shouldn't use overlapped I/O if
+ CancelIo() is not supported.
+
+Tue Jul 22 16:47:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h, sprintf.c (rb_str_catf, rb_str_vcatf): new
+ functions. [ruby-dev:35597]
+
+ * string.c (rb_str_capacity): new function to return the capacity.
+
+Tue Jul 22 16:08:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (connect_blocking, socks_connect_blocking,
+ ruby_connect): cast.
+
+Tue Jul 22 11:05:08 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_dir.rb: use realpath of tmpdir. [ruby-dev:35481]
+
+ * test/ruby/test_process.rb: ditto.
+
+Tue Jul 22 09:51:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el: fix here-doc strings with inner quotes. patches
+ by Nathan Weizenbaum <nex342 AT gmail.com> from [ruby-core:17615]
+ through [ruby-core:17910].
+
+Tue Jul 22 04:26:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_str_buf_new2): optimization for literals.
+
+ * string.c (str_buf_cat): returns VALUE.
+
+Tue Jul 22 03:34:01 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc*: Update to RDoc 2.1.0 r112.
+
+Tue Jul 22 02:51:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_str_buf_cat2, rb_str_cat2): optimization
+ for literals.
+
+Tue Jul 22 02:50:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * README.EXT, README.EXT.ja (1.5 Manipulating Ruby data): fix the
+ prototype of rb_vsprintf, and added rb_str_cat2. [ruby-dev:35622]
+
+Mon Jul 21 17:15:38 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_filesystem_encoding): use locale encoding on Unix.
+ [ruby-dev:35617]
+
+Mon Jul 21 15:29:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * missing/vsnprintf.c (struct __sbuf, FILE): use size_t.
+
+ * sprintf.c (ruby__sfvwrite): ditto.
+
+Mon Jul 21 13:55:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * README.EXT, README.EXT.ja (1.5 Manipulating Ruby data): mentioned
+ rb_sprintf and rb_vsprintf. [ruby-dev:35611]
+
+Mon Jul 21 10:25:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (prepare_getline_args): check if rs is a string when non-nil
+ lim is given. [ruby-dev:35610]
+
+Mon Jul 21 04:55:20 2008 Tanaka Akira <akr@fsij.org>
+
+ * dir.c (dir_initialize): use rb_convert_type instead of
+ rb_check_convert_type to prevent SEGV by Dir.new(".", true).
+ (dir_initialize): use FilePathValue before rb_enc_get(dirname) to
+ prevent SEGV by Dir.new(0).
+
+Mon Jul 21 04:42:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_s_union): useless rb_enc_get call removed to prevent
+ SEGV by Regexp.union("", nil).
+
+Sun Jul 20 22:50:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): NODE_POSTEXE should set each end
+ procs only once. [ruby-dev:35596]
+
+Sun Jul 20 16:00:37 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (EVENTSINK_Invoke): use rb_protect
+ instead of rb_rescue2. [ruby-dev:35595]
+
+Sun Jul 20 01:23:24 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (EVENTSINK_Invoke): little refactoring.
+
+ * ext/win32ole/win32ole.c (EVENTSINK_GetIDsOfNames): return
+ ITypeInfo::GetIDsOfNames().
+
+Sat Jul 19 09:31:35 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (EVENTSINK_Invoke): little refactoring.
+
+ * ext/win32ole/win32ole.c: add document of inspect methods.
+
+Sat Jul 19 06:08:43 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc*: Import RDoc r104. Various make test-all fixes.
+
+Sat Jul 19 00:27:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (check_uint, rb_num2uint, rb_fix2uint): fixed wrong check
+ about 64bit positive value.
+
+Fri Jul 18 23:23:37 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (EVENTSINK_Invoke): avoid cfp consistency
+ error when exception raised in event callback.
+
+Fri Jul 18 14:52:14 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (socklist): table for registering socket options
+ (currently only O_NONBLOCK).
+
+ * win32/win32.c (StartSockets, exit_handler): alloc/free socklist.
+
+ * win32/win32.c (is_socket): use socklist.
+
+ * win32/win32.c (rb_w32_accept, rb_w32_socket, rb_w32_socketpair):
+ register new socket to socklist.
+
+ * win32/win32.c (rb_w32_close): remove closing socket from socklist.
+
+ * win32/win32.c (fcntl): register socket options.
+
+ * win32/win32.c (overlapped_socket_io): send to/recv from socket with
+ overlapped operation if the socket is not nonblocking mode.
+ [experimental]
+
+ * win32/win32.c (rb_w32_send, rb_w32_sendto, rb_w32_recv,
+ rb_w32_recvfrom): use overlapped_socket_io().
+
+ * win32/win32.c (open_ifs_socket): set overlapped mode. this is the
+ default mode of winsock's socket(), so lacking it is an old bug.
+
+Fri Jul 18 09:44:30 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/*: Import RDoc r101.
+
+Thu Jul 17 23:45:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/rdoc/test_rdoc_c_parser.rb (teardown): close tempfile.
+
+Thu Jul 17 21:08:49 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_process.rb (test_getpriority, test_setpriority): use
+ PRIO_PROCESS instead of PRIO_USER.
+
+Thu Jul 17 20:41:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * pack.c (pack_unpack): fix v and V with big endian.
+ [1].pack("V").unpack("V") was [4294967296].
+
+Thu Jul 17 20:35:03 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * pack.c (pack_pack): fix i! with big endian. [1].pack("i!") was
+ "\0\0\0\0".
+
+Thu Jul 17 16:48:40 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (ruby_connect): select() for connect() has
+ mean only when the socket is non-blocking.
+
+Thu Jul 17 10:55:24 2008 Eric Hodel <drbrain@segment7.net>
+
+ * mkconfig.rb: Simplify expression for RDoc.
+
+Thu Jul 17 10:21:15 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (check_uint, rb_num2uint, rb_fix2uint): strict check.
+ fixed [ruby-dev:33683]
+
+Thu Jul 17 04:19:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_start_func_2): wake up joining threads.
+
+ * thread.c (sleep_forever, sleep_timeval): return when interrupted.
+ [ruby-dev:35542]
+
+ * thread.c (timer_thread_function): restore main thread status.
+ [ruby-core:17270]
+
+Thu Jul 17 01:27:38 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (appendline): remove invalid access.
+
+Wed Jul 16 18:04:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * signal.c (signal_exec, trap_handler): trap accepts a string as
+ command. [ruby-dev:35533]
+
+Wed Jul 16 00:04:30 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/envutil.rb (Test::Unit::Assertions#assert_in_out_err): new
+ method.
+
+ * test/ruby/test_argf.rb: use assert_in_out_err instead of
+ EnvUtil.rubyexec.
+
+ * test/ruby/test_module.rb: ditto.
+
+ * test/ruby/test_require.rb: ditto.
+
+ * test/ruby/test_objectspace.rb: ditto.
+
+ * test/ruby/test_object.rb: ditto.
+
+ * test/ruby/test_string.rb: ditto.
+
+ * test/ruby/test_method.rb: ditto.
+
+ * test/ruby/test_variable.rb: ditto.
+
+ * test/ruby/test_io.rb: ditto.
+
+ * test/ruby/test_rubyoptions.rb: ditto.
+
+ * test/ruby/test_exception.rb: ditto.
+
+ * test/ruby/test_class.rb: ditto.
+
+ * test/ruby/test_thread.rb: ditto.
+
+Tue Jul 15 22:34:03 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (ruby_version): follow changes in configure.in.
+
+Tue Jul 15 21:58:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/tk/{,tkutil/}extconf.rb: ruby/ruby.h no longer needs to be
+ checked.
+
+ * ext/tk/{tcltklib.c,tkutil/tkutil.c}: check macros for each headers.
+
+Tue Jul 15 21:45:41 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/tk/extconf.rb, ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: Do
+ not test ruby/ruby.h, which makes OS X's gcc pick the wrong
+ header file from Ruby.framework.
+
+Tue Jul 15 21:31:26 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * configure.in (--with-ruby-version): Add a new option to specify
+ the ruby version string for version specific directories.
+ [ruby-dev:35490]
+
+ * mkconfig.rb: Definition of ruby_version is now determined by the
+ configure script.
+
+Tue Jul 15 18:14:20 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (ruby_connect, s_accept): check before readable/
+ writable by select() instead of wrapping in blocking region.
+
+ * ext/socket/socket.c (bsock_send, s_recvfrom, udp_send, unix_send_io,
+ unix_recv_io): should check readable/writable before calling blocking
+ functions.
+ see [ruby-dev:35446]
+
+Tue Jul 15 18:12:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (ubf_handle): cancel blocking IO if it can (only
+ Vista). see [ruby-dev:35446]
+
+ * win32/win32.c (errmap): add ERROR_OPERATION_ABORTED as EINTR.
+
+Mon Jul 14 20:35:21 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_win32ole_event.rb (teardown): fix typo.
+
+Mon Jul 14 18:47:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (transcode_loop): constified.
+
+ * transcode.c (str_transcode): rb_str_set_len() sets a delimiter.
+
+ * transcode_data.h (rb_transcoder): constified preprocessor and
+ postprocessor input.
+
+ * enc/trans/japanese.c: ditto.
+
+Sun Jul 13 05:37:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/ruby.h (PRI_PTRDIFF_PREFIX, PRI_SIZE_PREFIX): typo.
+
+ * {bcc32,win32}/Makefile.sub: (SIZEOF_SIZE_T, SIZEOF_PTRDIFF_T): added.
+
+Sat Jul 12 23:54:55 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (LIBRUBY_DLDFLAGS): import library which created
+ with DLL is broken. save import library which created by lib.exe and
+ install it.
+ fixed the problem mentioned at the postscript of [ruby-dev:35448]
+
+Sat Jul 12 23:24:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c: use PRIuSIZE.
+
+Sat Jul 12 22:41:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (PRI_PTRDIFF_PREFIX, PRI_SIZE_PREFIX): fixed typo.
+
+Sat Jul 12 22:30:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (HAVE_RUBY_RUBY_H): defines macros so that
+ extconf.rb do not need to check if headers exist under separated
+ directory. [ruby-dev:35437]
+
+ * include/{ruby,rubyio,rubysig}.h, include/ruby/intern.h: use
+ "ruby/..." instead of <ruby/...>.
+
+Sat Jul 12 22:17:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (sizeof ptrdiff_t): check for size of ptrdiff_t.
+
+ * include/ruby/ruby.h (PRI?PTRDIFF, PRI?SIZE): printf conversion
+ specifiers for ptrdiff_t and size_t/ssize_t.
+
+ * insns.def (leave), marshal.c (long_toobig), transcode.c
+ (str_transcode), vm_dump.c (control_frame_dump, stack_dump_each),
+ (debug_print_register, debug_print_pre): t and z length modifiers
+ are C99.
+
+Sat Jul 12 16:02:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/xmlrpc/client.rb (XMLRPC::Client#do_rpc): requires
+ webrick/cookie. [ ruby-Bugs-21139 ]
+
+Sat Jul 12 09:25:07 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_win32ole_event.rb: add test
+ for WIN32OLE_EVENT#on_event_with_outargs
+
+ * test/win32ole/test_win32ole_event.rb(teardown): calling
+ WIN32OLE_EVENT.message_loop
+
+Sat Jul 12 01:54:13 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_select): shouldn't pass non-socket handle to
+ original select().
+
+Fri Jul 11 23:05:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/zlib/test_zlib.rb: add a test for Zlib::Deflate#params.
+
+Fri Jul 11 22:58:28 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/zlib/zlib.c (rb_deflate_params): flush before deflateParams.
+ [ruby-core:17675]
+
+Fri Jul 11 22:09:01 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/setup.rb, win32/Makefile.sub (PLATFORM): use $(PLATFORM)
+ instead of $(OS) because ENV["OS"] is used in test-all (drb).
+
+Fri Jul 11 20:51:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_wait_readable, rb_io_wait_writable): check if the file
+ descriptor is closed.
+
+ * thread.c (rb_thread_wait_fd_rw): ditto.
+
+Fri Jul 11 16:16:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_accept, rb_w32_socket, rb_w32_socketpair):
+ prohibit inheritance of sockets, too. [experimental]
+
+Fri Jul 11 14:39:49 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (CreateChild): the measures for Vista is no longer
+ unnecessary.
+
+Fri Jul 11 06:16:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (process.o): depends on util.h.
+
+Fri Jul 11 05:07:46 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h (pipe): prohibit inheritance.
+ fixed: [ruby-dev:35421]
+
+Fri Jul 11 00:56:46 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (thread_create_core): fix GC problem.
+ [ruby-core:17669]
+
+Thu Jul 10 22:06:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/pstore.rb (PStore#transaction): return the result from the
+ block. [ruby-core:17718]
+
+Thu Jul 10 21:15:49 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_win32ole_typelib.rb: add some illegal argument
+ test.
+
+ * test/win32ole/test_win32ole_type.rb: ditto.
+
+ * test/win32ole/test_win32ole_event.rb: ditto.
+
+ * test/win32ole/test_win32ole_param.rb: ditto.
+
+ * test/win32ole/test_win32ole_method.rb: ditto.
+
+Thu Jul 10 19:38:35 2008 wanabe <s.wanabe@gmail.com>
+
+ * test/ruby/envutil.rb (assert_normal_exit): r17993 revert.
+
+Thu Jul 10 18:29:41 2008 wanabe <s.wanabe@gmail.com>
+
+ * test/ruby/envutil.rb (assert_normal_exit): finish writing script
+ before spawn("ruby") to avoid blocking in win32.
+
+Thu Jul 10 17:20:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (insert): follow recent changes of globbing.
+
+Thu Jul 10 14:09:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/coverage/coverage.c (rb_coverage_start): return nil.
+
+Thu Jul 10 12:41:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_wait_for): fixed variable name.
+
+Thu Jul 10 12:09:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (rb_thread_t), vm.c (rb_thread_mark), process.c
+ (rb_last_status_get, rb_last_status_set, rb_last_status_clear):
+ moved last_status from rb_vm_t. [ruby-dev:35414]
+
+ * vm.c (th_init2): initialize last_status with nil.
+
+Thu Jul 10 12:09:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_wait_for): wait until timed out only when
+ sleeping with timeout.
+
+Wed Jul 9 22:41:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (sleep_timeval): wait until timed out. [ruby-core:17270]
+
+Wed Jul 9 20:58:16 2008 Tanaka Akira <akr@fsij.org>
+
+ * array.c (rb_ary_fill): don't raise even if length is negative.
+ [ruby-core:17483], [ruby-core:17661]
+
+Wed Jul 9 20:18:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rb_cv_va_args_macro): check for __VA_ARGS__.
+
+ * thread.c (thread_debug): show source name and line if possible.
+
+ * thread_{pthread,win32}.c (rb_thread_create_timer_thread): needs more
+ stack for debug.
+
+Wed Jul 9 11:13:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/profiler.rb (Profiler__#print_profile): sort in the descending
+ order of cumulative time.
+
+Wed Jul 9 11:11:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (struct glob_args, rb_glob_caller, rb_glob2, push_pattern),
+ (glob_brace): make consistent prototypes.
+
+ * dir.c (push_glob): set enc in the caller of rb_glob_caller as well
+ as rb_glob2.
+
+Wed Jul 9 09:12:11 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (options): use input_endian.
+
+Wed Jul 9 01:38:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_succ): alphabets or numerics mutually enclosing
+ non-alphanumeric characters can carry up. e.g., "1.999".succ should
+ be "2.000".
+
+Wed Jul 9 00:12:31 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (rb_set_coverages, rb_reset_coverages): enable and disable
+ coverage measurement.
+
+ * thread.c (rb_get_coverages): rename and move from vm.c.
+
+ * vm.c (rb_vm_get_coverages): ditto.
+
+ * iseq.c (prepare_iseq_build): ditto.
+
+ * thread.c (clear_coverage): ditto.
+
+ * parse.y (coverage): ditto.
+
+ * ext/coverage/coverage.c: use above functions, add new method
+ Coverage.start and fix rdoc .
+
+Tue Jul 8 23:02:35 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (find_default_source): bug fix when
+ OLE object does not have default source interface.
+
+ * test/win32ole/test_win32ole_event.rb: ditto.
+
+Tue Jul 8 22:56:23 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (rb_enable_coverages): hide coverage array by setting 0 to
+ klass during measurement.
+
+ * parse.y (coverage, yycompile0): ditto.
+
+ * iseq.c (prepare_iseq_build): use rb_hash_lookup instead of
+ rb_hash_aref.
+
+ * thread.c (rb_coverage_result): restore klass of coverage array
+ and return it.
+
+ * thread.c (update_coverage): check whether its klass is 0.
+
+Tue Jul 8 22:28:25 2008 Koichi Sasada <ko1@atdot.net>
+
+ * lib/debug.rb, lib/profile.rb: fix to use RubyVM.
+
+ * lib/rdoc/parsers/parse_c.rb: ditto.
+
+Tue Jul 8 21:45:22 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm.c (rb_vm_mark): mark the last element of special_exceptions.
+
+Tue Jul 8 19:55:40 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (find_default_source): try to
+ find COCLASS when WIN32OLE object is not COCLASS.
+
+ * test/win32ole/test_win32ole_event.rb: ditto
+
+Tue Jul 8 13:38:22 2008 Koichi Sasada <ko1@atdot.net>
+
+ * compile.h: fix to skip inserting a trace insn.
+
+Tue Jul 8 11:41:17 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * dir.c: shouldn't use ruby object in globbing, because glob service
+ routines are called before initializing ruby on some platforms (ex.
+ windows).
+
+Tue Jul 8 10:08:40 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dir.c (Next): use rb_enc_mbclen. [ruby-dev:35390]
+
+Tue Jul 8 07:59:40 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dir.c (Next): use rb_enc_precise_mbclen.
+
+Tue Jul 8 02:27:23 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dir.c: preserve encoding of strings in glob and fnmatch.
+
+ * include/ruby/ruby.h: related changes.
+
+Tue Jul 8 00:22:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_succ): limit carrying in an alphanumeric region if
+ exists. [ruby-dev:35094]
+
+Mon Jul 7 20:39:28 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c(Init_win32ole): add
+ WIN32OLE_TYPE#source_ole_types, WIN32OLE_TYPE#default_ole_types,
+ WIN32OLE_TYPE#default_event_sources.
+
+ * test/win32ole/test_win32ole_type.rb: ditto.
+
+Mon Jul 7 19:45:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ruby/test_dir.rb (test_chroot_nodir): add Errno::EPERM.
+
+Mon Jul 7 17:12:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * 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].
+
+Mon Jul 7 01:24:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_extname): fix for file name with spaces.
+ [ruby-talk:307404]
+
+Mon Jul 7 00:59:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (ruby_init_stack): prior STACK_END_ADDRESS if
+ found. [ruby-core:17624]
+
+Sun Jul 6 23:48:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/socket/socket.c (bsock_send, s_recvfrom, ruby_connect, s_accept),
+ (udp_send, unix_send_io, unix_recv_io): blocking region support.
+
+Sun Jul 6 18:34:35 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_win32ole_type.rb (test_initialize): add
+ more assertions.
+
+Sun Jul 6 10:12:21 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/test/unit/collector/objectspace.rb
+ (Test::Unit::Collector::ObjectSpace::NAME): fix a typo.
+
+Sun Jul 6 00:56:51 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/socket.c (host_str): fix type mismatch in rb_raise
+ format and argument.
+ (port_str): ditto.
+ (unix_recv_io): ditto.
+ (sock_s_unpack_sockaddr_un): ditto.
+
+Sat Jul 5 23:42:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (NUM2INT): cast to int.
+ (FIX2INT): ditto.
+ (NUM2UINT): cast to unsigned int.
+ (FIX2UINT): ditto.
+
+Sat Jul 5 23:10:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_pipe): new function for handling EMFILE and ENFILE
+ error of pipe().
+ (UPDATE_MAXFD_PIPE): removed.
+ (pipe_open): use rb_pipe.
+ (rb_io_s_pipe): ditto.
+
+ * process.c (pipe_nocrash): use rb_pipe.
+
+ * include/ruby/intern.h (rb_pipe): declared.
+
+Sat Jul 5 22:22:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_initialize): NUM2INT() returns int.
+
+ * thread.c (timer_thread_function), thread_pthread.c (thread_timer),
+ thread_win32.c (timer_thread_func), thread_{pthread,win32}.c
+ (rb_thread_create_timer_thread): passing VM.
+
+Sat Jul 5 20:53:18 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * test/win32ole/test_word.rb: check word installed.
+
+Sat Jul 5 16:12:54 2008 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c: revert. before lazy sweep.
+
+Sat Jul 5 09:55:44 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c: add WIN32OLE#ole_respond_to?
+
+ * test/win32ole/test_win32ole.rb: ditto.
+
+Sat Jul 5 08:48:05 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (unescape_nonascii): add has_property argument not to
+ raise error by /\p{Hiragana}\u{3042}/ in EUC-JP script.
+ (rb_reg_preprocess): use has_property argument to make regexp
+ encoding fixed.
+
+Sat Jul 5 08:29:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (unescape_nonascii): make regexp fixed_encoding if \p is used.
+ fixed [ruby-core:17279].
+
+Fri Jul 4 23:12:53 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (d2time): fix the bug of VT_DATE
+ to String conversion when negative value.
+
+ * test/win32ole/test_win32ole_variant.rb: ditto.
+
+Fri Jul 4 22:15:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/test/unit/testcase.rb: collect descendants of
+ Test::Unit::TestCase using inherited.
+
+ * lib/test/unit/autorunner.rb: don't use ObjectSpace.each_object.
+
+ * lib/test/unit/collector/dir.rb: ditto.
+
+ * lib/test/unit/collector/objectspace.rb: ditto.
+
+ [ruby-core:17126]
+
+Fri Jul 4 20:43:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/oniguruma.h (OnigEncoding): removed auxiliary_data.
+
+ * include/ruby/encoding.h (ENC_DUMMY_P): moved dummy encoding flag to
+ rb_encoding from Encoding instance.
+
+ * encoding.c (rb_encoding_list): list of Encoding instances.
+
+ * encoding.c (struct rb_encoding_entry): moved base encoding from
+ instance variable.
+
+Fri Jul 4 17:51:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (check_uint, rb_num2uint, rb_fix2uint): proper check.
+
+Fri Jul 4 14:17:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/net/ftp.rb (Net::FTP#sendport): use divmod. [ruby-core:17557]
+
+Fri Jul 4 11:08:37 2008 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c (garbage_collect_force): sweep is completely ended.
+
+ * gc.c (os_obj_of): invoke garbage_collect_force() when freelist none.
+
+Fri Jul 4 05:01:26 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (rb_num2uint, rb_fix2uint): typo.
+
+Fri Jul 4 02:21:06 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (check_uint, rb_num2uint, rb_fix2uint): also needs checking
+ negative value. see [ruby-dev:33683]
+
+Thu Jul 3 23:26:36 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * include/ruby/intern.h: remove prototypes about coverage.
+
+ * iseq.c (prepare_iseq_build): add prototype.
+
+ * parse.y (coverage): ditto.
+
+ * thread.c (clear_coverage): ditto.
+
+ * thread.c (update_coverage): use rb_sourceline.
+
+ * thread.c (rb_get_coverages): rename and move to vm.c.
+
+ * vm.c (rb_vm_get_coverages): ditto.
+
+ * ext/coverage/coverage.c: add rdoc.
+
+Thu Jul 3 21:51:21 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/coverage/coverage.c, ext/coverage/extconf.rb: eliminate
+ COVERAGE__ and introduce coverage.so instead. How to measure
+ coverage: (1) require "coverage.so", (2) require or load Ruby source
+ file, and (3) Coverage.result will return the same hash as COVERAGE__.
+ [ruby-dev:35324]
+
+ * thread.c (rb_enable_coverages): start coverage measurement by using
+ rb_add_event_hook.
+
+ * thread.c (rb_get_coverages): returns current results of coverage
+ measurement.
+
+ * include/ruby/intern.h: add prototype for above two functions.
+
+ * vm_core.h, vm.c: add field of coverages to rb_vm_t.
+
+ * insns.def (trace): remove special handling for COVERAGE__.
+
+ * iseq.c (prepare_iseq_build): switch COVERAGE__ to
+ rb_get_coverages().
+
+ * parse.y (coverage): ditto.
+
+ * thread.c (clear_coverage): ditto.
+
+ * lib/coverage.rb: use coverage.so instead of COVERAGE__.
+
+Thu Jul 3 21:20:45 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (thread_initialize): NUM2INT returns long.
+
+Thu Jul 3 21:06:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (Init_eval): typo fixed in r17833.
+
+Thu Jul 3 19:44:44 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (Init_win32ole): remove duplicate line.
+
+Thu Jul 3 16:08:36 2008 Tanaka Akira <akr@fsij.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
+
+Thu Jul 3 12:49:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/net/smtp.rb (Net::SMTP::start): use 'localhost' instead of
+ 'localhost.localdomain'. [ruby-dev:35333]
+
+ * lib/net/smtp.rb (Net::SMTP::SMTP.start): ditto.
+
+Thu Jul 3 07:06:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (SET_LC_MESSAGES): LC_MESSAGES must be C.
+
+Thu Jul 3 07:02:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (Init_eval), gc.c (Init_GC), proc.c (Init_Proc): freeze
+ messages of preallocated special exceptions also.
+
+Thu Jul 3 04:39:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_during_gc): VALUE cache is irrelevant.
+
+Thu Jul 3 01:44:01 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * regint.h (GET_ALIGNMENT_PAD_SIZE, ALIGNMENT_RIGHT): cast pointer to
+ uintptr_t instead of unsigned int.
+
+Thu Jul 3 01:23:13 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * sprintf.c: include ieeefp.h to refer to isinf.
+
+ * ext/bigdecimal/bigdecimal.c: ditto.
+
+ * ext/json/ext/generator/generator.c: ditto.
+
+ * rational.c: ditto.
+
+Thu Jul 3 01:01:57 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * missing/tgamma.c (tgamma): remove unused variable.
+
+Thu Jul 3 00:18:00 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c: avoid creating Ruby object during
+ GC. thanks to arton <artonx AT yahoo.co.jp>. [ruby-dev:35313]
+
+ * test/win32ole/test_win32ole_event.rb: ditto.
+
+Thu Jul 3 00:09:31 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * gc.c: add rb_during_gc(). based on a patch from arton <artonx AT
+ yahoo.co.jp> at [ruby-dev:35313].
+
+ * include/ruby/intern.h: ditto.
+
+Wed Jul 2 09:49:10 2008 Narihiro Nakamura <authorNari@gmail.com>
+
+ * gc.c (gc_lazy_sweep): use lazy sweep algorithm for response
+ performance gain.
+
+ * gc.c (garbage_collect_force): mark and lazysweep invoke, after
+ erasing all mark.
+
+ * gc.c (GC_NOT_LAZY_SWEEP): not lazy sweep flag. for debug.
+
+Wed Jul 2 03:42:44 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_settracefunc.rb: fix expected traces for
+ RubyVM::FrozenCore's event and r17744.
+
+Wed Jul 2 03:10:41 2008 Koichi Sasada <ko1@atdot.net>
+
+ * compile.h, insns.def: reduce insn operand of "trace".
+
+ * include/ruby/ruby.h: add RUBY_EVENT_COVERAGE event.
+
+Wed Jul 2 02:02:34 2008 Koichi Sasada <ko1@atdot.net>
+
+ * proc.c, vm.c: fix to refer to next ruby level cfp to make binding.
+
+Wed Jul 2 01:58:19 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * insns.def (trace): C99ism.
+
+Wed Jul 2 01:53:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * Add coverage measurement constant COVERAGE__. This constant is not
+ for casual use. Usage: (1) assign {} to COVERAGE__, (2) require or
+ load Ruby source file, and (3) COVERAGE__["sourcefilepath"] will
+ return an array whose elements represent number of executions per
+ line of source code.
+
+ * vm_core.h: add field of coverage array to iseq.
+
+ * iseq.c (prepare_iseq_build): ditto.
+
+ * insns.def (trace): update coverage array.
+
+ * parse.y (coverage): create and initialize coverage array.
+
+ * compile.h (ADD_TRACE): add trace instruction to update coverage
+ array.
+
+ * thread.c (clear_coverage): delete coverage array when forking.
+ Otherwise, double count of coverage may occur.
+
+ * lib/coverage.rb: sample coverage measurement tool.
+
+ * error.c: distinguish explicitly between parse_in_eval and
+ mild_compile_error.
+
+ * load.c: ditto.
+
+ * vm_eval.c: ditto.
+
+Tue Jul 1 21:32:43 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/test/unit/ui/console/testrunner.rb: prevent destructive
+ modification to $0.
+
+ * test/rubygems/gemutilities.rb (build_rake_in): move from
+ test_gem_ext_rake_builder.rb.
+
+ * test/rubygems/test_gem_ext_rake_builder.rb: ditto.
+
+ * test/rubygems/test_gem_installer.rb: override Gem.ruby and
+ ENV["rake"].
+
+ * test/rubygems/test_gem_uninstaller.rb: ditto.
+
+Tue Jul 1 21:13:17 2008 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c, vm.c, insns.def: call FrozenCore.set_postexe method
+ instead to use "postexe" insn.
+
+ * id.c, id.h: add a prepared id for above.
+
+Tue Jul 1 21:09:58 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * lib/mkmf.rb (create_tmpsrc): we need to include COMMON_HEADERS,
+ namely inclusion of ruby.h, because _GNU_SOURCE is now defined
+ there (if any) and socket.so requires it on Linux systems.
+
+Tue Jul 1 20:55:07 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * eval.c (rb_interrupt): trick to suppress GCC warning.
+
+ * sprintf.c (rb_str_format): ditto.
+
+Tue Jul 1 20:44:36 2008 Koichi Sasada <ko1@atdot.net>
+
+ * tool/instruction.rb: RubyVM is not module.
+
+Tue Jul 1 19:31:24 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * ext/digest/digest.c (rb_digest_instance_inspect): constified.
+
+ * variable.c (rb_path2class): field precision should have type int.
+
+Tue Jul 1 19:01:00 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/shift_jis.c (code_is_ctype): HALF WIDTH KATAKANA is
+ a character.
+
+Tue Jul 1 17:56:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * missing/vsnprintf.c (BSD__uqtoa): constified.
+
+Tue Jul 1 17:50:44 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * enc/make_encdb.h: always add ';' at the end of line.
+
+Tue Jul 1 17:44:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (COMPILE_OPTION_FALSE), time.c (timegm_noleapsecond),
+ thread.c (eKillSignal, eTerminateSignal),
+ missing/vsnprintf.c (BSD_vfprintf): constified.
+
+Tue Jul 1 17:37:43 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * enc/ascii.c: ISO C does not allow extra ';' outside of a
+ function
+
+ * enc/us_ascii.c: ditto.
+
+ * enc/utf_8.c: ditto.
+
+ * enc/big5.c: ditto.
+
+ * enc/euc_jp.c: ditto.
+
+ * enc/euc_kr.c: ditto.
+
+ * enc/euc_tw.c: ditto.
+
+ * enc/gb2312.c: ditto.
+
+ * enc/gbk.c: ditto.
+
+ * enc/iso_8859_1.c: ditto.
+
+ * enc/iso_8859_2.c: ditto.
+
+ * enc/iso_8859_3.c: ditto.
+
+ * enc/iso_8859_4.c: ditto.
+
+ * enc/iso_8859_5.c: ditto.
+
+ * enc/iso_8859_6.c: ditto.
+
+ * enc/iso_8859_7.c: ditto.
+
+ * enc/iso_8859_8.c: ditto.
+
+ * enc/iso_8859_9.c: ditto.
+
+ * enc/iso_8859_10.c: ditto.
+
+ * enc/iso_8859_11.c: ditto.
+
+ * enc/iso_8859_13.c: ditto.
+
+ * enc/iso_8859_14.c: ditto.
+
+ * enc/iso_8859_15.c: ditto.
+
+ * enc/iso_8859_16.c: ditto.
+
+ * enc/koi8_r.c: ditto.
+
+ * enc/shift_jis.c: ditto.
+
+ * enc/utf_16be.c: ditto.
+
+ * enc/utf_32be.c: ditto.
+
+ * enc/utf_32le.c: ditto.
+
+ * enc/windows_1251.c: ditto.
+
+ * process.c (run_exec_rlimit): ISO C90 forbids mixed declarations
+ and code
+
+ * include/ruby/ruby.h (enum ruby_special_consts): ISO C forbids
+ comma at end of enumerator list
+
+ * include/ruby/ruby.h (enum ruby_value_type): ditto.
+
+ * eval_intern.h (enum): ditto.
+
+ * vm_core.h (enum rb_thread_status): ditto.
+
+ * parse.y (enum lex_state_e): ditto.
+
+ * parse.y (enum string_type): ditto.
+
+ * process.c (enum): ditto.
+
+ * ruby.c (enum dump_flag_bits): ditto.
+
+ * ruby.c (enum disable_flag_bits): ditto.
+
+ * enc/gb18030.c (enum): ditto.
+
+Tue Jul 1 17:21:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regexec.c (stack_double): use MatchStackLimitSize atomically.
+
+ * regparse.c (onig_free_shared_cclass_table): OnigTypeCClassTable
+ needs atomicity
+
+ * regsyntax.c: constified all predefined OnigSyntaxTypes.
+
+Tue Jul 1 16:57:44 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * include/ruby/st.h (struct st_table): type of bit-field
+ 'num_entries' is a GCC extension
+
+ * include/ruby/ruby.h (rb_intern): prefix __extension__ for
+ braced-groups within expressions.
+
+ * include/ruby/intern.h (rb_usascii_str_new2): ditto.
+
+ * include/ruby/intern.h (rb_tainted_str_new2): ditto.
+
+ * include/ruby/intern.h (rb_str_new2): ditto.
+
+Tue Jul 1 15:01:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rubygems/ext/builder.rb (Gem::Ext::Builder.make),
+ (Gem::Ext::Builder.run): EXIT_SUCCESS may be 0 or may not.
+
+ * test/rubygems/test_gem_ext_rake_builder.rb (build_rake_in): override
+ Gem.ruby and ENV["rake"].
+
+ * runruby.rb: bin/rake does not exist in archdir where architecture
+ depend script (i.e. rbconfig.rb) exists.
+
+Tue Jul 1 13:19:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_fill): check if beg is too big.
+
+Tue Jul 1 12:01:16 2008 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c, insns.def, vm.c, vm_core.h: remove some insns
+ (undef, alias, definemethod).
+ Call RubyVM::FrozenCore's singleton method instead.
+ Add "putiseq" and "putspecialobject" instructions.
+
+ * id.c, id.h: add ids for above.
+
+ * tool/parse.rb: "VM" no longer exists. Use RubyVM instead.
+
+Tue Jul 1 03:28:16 2008 Eric Hodel <drbrain@segment7.net>
+
+ * test/rubygems/test_ext_configure_builder.rb: Apply locale-free
+ patch by Yusuke ENDOH. [ruby-core:17444].
+
+ * runruby.rb: Set ENV['rake']. Patch by Yusuke ENDOH
+ [ruby-core:17442].
+
+Tue Jul 1 01:07:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/cgi.rb (CGI::QueryExtension.read_multipart): blanks inside
+ double quotes are allowed. [ruby-list:45140]
+
+Tue Jul 1 00:59:43 2008 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c (num_coerce): call rb_Float(x) first. don't depend on
+ evaluation order of function arguments.
+
+Tue Jul 1 00:49:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_newobj): abort GC phase before rb_bug.
+
+Mon Jun 30 23:15:07 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/openssl/test_ssl.rb (start_server): shutdown TCPServer before
+ close.
+
+Mon Jun 30 23:01:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (RUBY_H_INCLUDES): common headers which are included with
+ ruby.h together.
+
+Mon Jun 30 22:57:50 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_settracefunc.rb (test_raise): reveal an exception
+ hided by rescue modifier.
+
+Mon Jun 30 22:49:32 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_array.rb (test_aset): access with too big index
+ raises not ArgumentError but IndexError now.
+
+Mon Jun 30 22:30:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/collector/dir.rb (recursive_collect): r15662 reverted.
+
+Mon Jun 30 22:27:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/stringio/stringio.c (strio_getline): fix for nil and "" as
+ separator. [ruby-dev:34591]
+
+Mon Jun 30 22:21:30 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (argf_each_line): pass args to each_line. [ruby-dev:34958]
+
+Mon Jun 30 22:12:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (chain_finalized_object): should not delete from finalizer
+ table until run.
+
+ * gc.c (rb_gc_call_finalizer_at_exit): deferred_final_list may be
+ empty first.
+
+Mon Jun 30 18:57:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (gc_finalize_deferred): allow object allocation in finalizers.
+
+ * gc.c (rb_gc_call_finalizer_at_exit): ditto.
+
+Mon Jun 30 14:41:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * gc.c (rb_newobj): prohibit call of rb_newobj() during gc when
+ USE_VALUE_CACHE is not defined (normal case).
+
+Mon Jun 30 10:28:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * 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>.
+
+ * ext/syslog/syslog.c (mSyslog_close): ditto.
+
+ * ext/syslog/syslog.c (mSyslog_set_mask): ditto.
+
+Mon Jun 30 03:01:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/net/http/test_http.rb (_test_request__file): specify encoding
+ explicitly.
+
+ * test/net/http/utils.rb: ditto.
+
+Mon Jun 30 02:31:07 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_utf8_encindex): defined.
+
+ * include/ruby/encoding.h (rb_utf8_encindex): ditto.
+
+Mon Jun 30 02:14:34 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c, vm_core.h,vm_core.h, vm_dump.c, iseq.c: rename class name
+ VM -> RubyVM, and rename rb_cVM -> rb_cRubyVM.
+ "VM" is too short name for class.
+
+ * test/ruby/test_method.rb, test/ruby/test_settracefunc.rb: ditto.
+
+ * include/ruby/ruby.h: rb_cRubyVM, rb_cEnv, rb_cISeq should not be
+ exposed.
+
+Mon Jun 30 02:10:32 2008 Koichi Sasada <ko1@atdot.net>
+
+ * process.c (Init_process): fix to avoid a warning.
+
+Mon Jun 30 01:52:05 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_parse.rb: remove tests for open_args.
+
+Sun Jun 29 23:01:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_format_m): make tmp volatile to avoid possible GC
+ problem.
+
+Sun Jun 29 18:01:30 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/parser.rb, lib/rss/utils.rb: merge documents from ruby_1_8.
+
+Sun Jun 29 17:44:23 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/parser.rb (RSS::ListenerMixin#known_class): define to
+ work with ruby 1.8.x too.
+
+Sun Jun 29 17:41:42 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker/base.rb (RSS::Maker::RSSBase#to_feed): raise
+ exception not return nil if RSS::Maker.make can't get required
+ information.
+
+ * test/rss/rss-assertions.rb: follow the above change.
+
+Sun Jun 29 17:37:23 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker/base.rb (RSS::Maker::RSSBase#make): require block.
+
+ * test/rss/test_maker_{0.9,1.0,2.0}.rb: follow the above change.
+
+Sun Jun 29 17:33:34 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/maker/base.rb, lib/rss/maker/itunes.rb: don't use
+ instance_eval to initialize variables. (speed up)
+
+Sun Jun 29 17:31:15 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb, test/rss/test_version.rb (RSS::VERSION):
+ 0.2.4 -> 0.2.5.
+
+Sun Jun 29 11:36:20 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * dir.rb: fix resource leak.
+
+Sun Jun 29 09:43:10 2008 Nobuyoshi Nakada <nobu@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]
+
+Sun Jun 29 07:53:08 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (date2time_str): fix the overflow in
+ some situation. [ruby-bugs-20793]
+
+Sat Jun 28 21:25:08 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (struct RRegexp): new field usecnt. replace
+ str and len by src.
+
+ * gc.c (gc_mark_children): mark src field of regexp.
+ (obj_free): don't free str field.
+
+ * re.c (REG_BUSY): removed.
+ (rb_reg_initialize): prohibit re-initialize regexp.
+ (rb_reg_search): use usecnt to prevent freeing regexp currently
+ using. this prevents SEGV by:
+ r = /\A((a.)*(a.)*)*b/
+ r =~ "ab" + "\xc2\xa1".force_encoding("euc-jp")
+ t = Thread.new { r =~ "ab"*8 + "\xc2\xa1".force_encoding("utf-8")}
+ sleep 0.2
+ r =~ "ab"*8 + "\xc2\xa1".force_encoding("euc-jp")
+
+Sat Jun 28 21:15:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_str_new2, rb_tainted_str_new2,
+ rb_usascii_str_new2): use inline versions only for constant
+ literals.
+
+Sat Jun 28 13:12:06 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/rubygems/test_gem.rb (test_self_path_APPLE_GEM_HOME): don't use
+ fixed /tmp/apple_gem_home directory.
+
+Sat Jun 28 08:40:18 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c: check String encoding when
+ converting String to VT_BSTR in OLE.
+
+ * test/win32ole/test_win32ole.rb: ditto.
+
+Sat Jun 28 01:08:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_timespec): fix rounding negative float.
+
+Fri Jun 27 21:38:57 2008 Tanaka Akira <akr@fsij.org>
+
+ * struct.c: __size__ removed. use the length of __members__ instead.
+ (num_members): new function.
+
+Fri Jun 27 21:19:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/inlinetest.rb (InlineTest.in_progname): workaround for frozen
+ $0. [ruby-dev:35261]
+
+ * lib/test/unit/ui/console/testrunner.rb (TestRunner#finished): ditto.
+
+Fri Jun 27 17:45:17 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * lib/erb.rb: adjust line number for magic comment.
+
+ * test/erb/test_erb.rb: add tests for def_method.
+
+Fri Jun 27 14:29:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (primary): empty not should call '!' on nil.
+ cf [ruby-dev:35227]
+
+Fri Jun 27 14:25:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_eval_body): if thrown exception is frozen, reraise it to
+ create a new instance.
+
+Fri Jun 27 13:29:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_str_new2, rb_tainted_str_new2,
+ rb_usascii_str_new2): use with-length versions with strlen to
+ optimize strlen, if optimized.
+
+Fri Jun 27 12:28:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/un.rb (mkmf): new command to create makefile.
+
+Fri Jun 27 11:06:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/un.rb (wait_writable): added help message.
+
+Fri Jun 27 06:52:54 2008 Koichi Sasada <ko1@atdot.net>
+
+ * configure.in: need a ",".
+
+ * process.c (rb_fork): check CANNOT_FORK_WITH_PTHREAD macro.
+
+Fri Jun 27 06:50:56 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_eval.c (vm_call_super): fix to call method_missing.
+ [ruby-core:15719], [ruby-core:17340]
+
+Fri Jun 27 00:00:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (set_arg0, ruby_prog_init): freeze $0. a patch from Keita
+ Yamaguchi <keita.yamaguchi at gmail.com>.
+
+Thu Jun 26 23:58:29 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (rb_str_index_m, rb_str_rindex_m, rb_str_include): fix
+ rdoc.
+
+Thu Jun 26 17:43:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_f_trace_var): should not be allowed at safe level 4.
+ a patch from Keita Yamaguchi <keita.yamaguchi at gmail.com>.
+
+Thu Jun 26 11:04:30 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems: Update to RubyGems 1.2.0 r1824. Incorporates patch by
+ Yusuke ENDOH [ruby-core:17353].
+
+Thu Jun 26 00:48:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (primary): not operand might be empty. [ruby-dev:35227]
+
+Wed Jun 25 21:54:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (primary): make functional-style not operator to act
+ like function. see <http://d.hatena.ne.jp/ku-ma-me/20080624/p1>.
+
+Wed Jun 25 15:28:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_fill): not depend on unspecified behavior at integer
+ overflow. reported by Vincenzo Iozzo <snagg AT openssl.it>.
+
+Wed Jun 25 13:42:44 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/erb.rb (ERB::Compiler:Buffer#new): push magic comment first.
+
+ * lib/erb.rb (ERB::Compiler#compile): fix for broken input.
+
+Wed Jun 25 12:10:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/erb.rb (ERB::Compiler#compile): magic comment needs LF.
+
+Wed Jun 25 09:31:11 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/erb.rb (ERB::Compiler#compile): output magic comment.
+
+Tue Jun 24 22:14:36 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm_eval.c (eval_string_with_cref): preserve parse_in_eval even if
+ exception raised.
+
+Tue Jun 24 22:09:18 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c(ole_invoke): fix memory leak.
+ [ruby-bugs-20792]
+
+Tue Jun 24 17:20:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (rb_cv_fork_with_pthread): check after check for
+ pthread library, and define the macro when checked only.
+
+Tue Jun 24 17:04:39 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/io/wait/extconf.rb: check sys/socket.h for cygwin.
+
+Tue Jun 24 16:51:51 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (io_reopen): remove cygwin handling because it seems to be for
+ C's stdio.
+ fixed [ruby-dev:35183]
+
+Tue Jun 24 11:12:33 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h, win32/win32.c (rb_w32_getppid): now support
+ getppid() on win32 (but only Win2k or later).
+
+ * process.c (get_ppid): remove win32 special logic.
+
+Tue Jun 24 09:40:47 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/socket/socket.c (init_sock): socket is binmode on platforms
+ which support binmode.
+
+Tue Jun 24 00:21:53 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (iseq_build_from_ary): initialize arg_opts, a patch from
+ Adam Strzelecki <ono at java.pl> in [ruby-core:17220].
+
+Tue Jun 24 00:10:53 2008 wanabe <s.wanabe@gmail.com>
+
+ * compile.c (iseq_build_from_ary): fix expression to obtain
+ iseq->local_size and iseq->local_table_size. [ruby-dev:35205]
+
+Mon Jun 23 11:31:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/mathn.rb (Rational::power2): removed incomplete method.
+ see [ruby-dev:35195]. [ruby-core:17293]
+
+Sun Jun 22 14:16:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/readline/extconf.rb (have_readline_func): readline on Mac OS X
+ needs headers to detect some functions.
+
+Sun Jun 22 09:51:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_class_superclass): rdoc improvement, a patch from
+ Gaston Ramos <ramos.gaston AT gmail.com> in [ruby-core:17371].
+
+Sun Jun 22 09:22:32 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * README.EXT: translated README.EXT.ja
+
+Sun Jun 22 00:42:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_osid, rb_w32_osver, CreateChild): XP is
+ is different from Vista about pipe handle inheritance.
+ fixed [ruby-core:17367], reported by Lars Christensen <larsch at
+ belunktum.dk>
+
+Sun Jun 22 00:38:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * README.EXT.ja: add note about mark and free.
+
+Sun Jun 22 00:01:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (rb_io_binmode_p, argf_binmode_p, Init_IO): new method
+ IO#binmode? and ARGF.binmode? [ruby-dev:35148]
+
+Sat Jun 21 17:33:50 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_spawn): no longer support P_WAIT.
+
+Sat Jun 21 16:46:09 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (native_sleep): must block reentrance when accessing
+ th->unblock.
+ fixed [ruby-core:17341], reported by Bill Kelly <billk at cts.com>
+
+Sat Jun 21 16:29:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (call_args2, open_args): removed.
+
+ * parse.y (parser_yylex): unified warnings at space between method
+ name and argument parenthesis. [ruby-dev:33943]
+
+Sat Jun 21 16:21:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (flo_round): get rid of overflow.
+
+Sat Jun 21 15:57:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/rdoc/parsers/parse_rb.rb (RDoc#collect_first_comment): skip
+ magic comment.
+
+Sat Jun 21 15:54:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: check if fork works with pthread.
+
+Sat Jun 21 15:31:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot: ported to ruby.
+
+ * tool/make-snapshot: fixed digests.
+
+Sat Jun 21 04:36:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/bigdecimal/lib/bigdecimal/jacobian.rb (Jacobian::dfdxi):
+ typo fixed (raize -> raise). [ruby-list:45101]
+
+ * enumerator.c (enum_each_cons): typo in RDoc fixed.
+
+Sat Jun 21 00:45:34 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * tool/make-snapshot: do not use sha256sum; use BASERUBY instead
+
+ * common.mk (dist): use tool/make-snapshot instead
+
+Fri Jun 20 16:34:14 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (Init_process): Process::Status#to_int removed.
+ (PST2INT): defined.
+ (pst_to_s): use PST2INT.
+ (pst_inspect): ditto.
+ (pst_equal): ditto.
+ (pst_bitand): ditto.
+ (pst_rshift): ditto.
+ (pst_wifstopped): ditto.
+ (pst_wstopsig): ditto.
+ (pst_wifsignaled): ditto.
+ (pst_wtermsig): ditto.
+ (pst_wifexited): ditto.
+ (pst_wexitstatus): ditto.
+ (pst_success_p): ditto.
+ (pst_wcoredump): ditto.
+ (rb_f_system): ditto.
+
+Fri Jun 20 15:40:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_store, rb_ary_splice): not depend on unspecified
+ behavior at integer overflow.
+
+ * string.c (str_buf_cat): ditto.
+
+Fri Jun 20 12:39:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_detach_process): store detached process ID in the
+ thread local storage. moved from lib/open3.rb.
+
+Fri Jun 20 11:57:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_sub_bang): should preserve replacement points
+ since they may be altered in the yielded block.
+
+Fri Jun 20 11:07:56 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_memhash): randomize hash to avoid algorithmic
+ complexity attacks.
+ (rb_str_hash): use rb_memhash.
+
+ * include/ruby/intern.h (rb_reset_random_seed): declared.
+
+ * thread.c (rb_thread_atfork): call rb_reset_random_seed.
+
+ * inits.c (rb_call_inits): call Init_RandomSeed at first.
+
+ * random.c (seed_initialized): defined.
+ (fill_random_seed): extracted from random_seed.
+ (make_seed_value): extracted from random_seed.
+ (rb_f_rand): initialize random seed at first.
+ (initial_seed): defined.
+ (Init_RandomSeed): defined.
+ (Init_RandomSeed2): defined.
+ (rb_reset_random_seed): defined.
+ (Init_Random): call Init_RandomSeed2.
+
+Wed Jun 18 21:52:38 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * array.c (ary_new, rb_ary_initialize, rb_ary_store,
+ rb_ary_splice, rb_ary_times): integer overflows should be
+ checked. based on patches from Drew Yao <ayao at apple.com>
+ fixed CVE-2008-2726
+
+ * string.c (rb_enc_cr_str_buf_cat): fixed unsafe use of alloca,
+ which led memory corruption. based on a patch from Drew Yao
+ <ayao at apple.com> fixed CVE-2008-2726
+
+Fri Jun 20 03:26:00 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (rb_f_fork): NetBSD 4.0 or later can fork.
+
+Fri Jun 20 03:19:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/testunit/collector/test_dir.rb: r15825 made it unnecessary to
+ change String to Symbol.
+
+ * test/testunit/collector/test_objectspace.rb: ditto.
+
+Fri Jun 20 03:14:31 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems*, test/rubygems/*: Update to RubyGems 1.1.1 r1784 (pre
+ 1.2).
+
+Fri Jun 20 03:01:59 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c: try to remove false positive of deadlock detection (second
+ trial).
+
+Fri Jun 20 02:16:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/mathn.rb (Rational::power2): typo fixed. [ruby-core:17293]
+
+Fri Jun 20 02:11:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_gsub): should preserve last successful match
+ data. [ruby-dev:35182]
+
+Fri Jun 20 01:07:28 2008 Koichi Sasada <ko1@atdot.net>
+
+ * KNOWNBUGS.rb, bootstraptest/pending.rb: move a bug (?) to pending.
+
+Fri Jun 20 00:40:08 2008 Koichi Sasada <ko1@atdot.net>
+
+ * proc.c (proc_new): fix to return Proc object if block is already
+ in heap. [ruby-core:15711]
+
+ * bootstraptest/test_proc.rb: add a test.
+
+Fri Jun 20 00:18:04 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread_win32.c (native_sleep): fix to decrement sleeper count.
+
+Thu Jun 19 23:48:45 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/net/http/test_http.rb: compare encodings of two strings before
+ comparing themself, which suppress too big error output.
+
+Thu Jun 19 23:46:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/json/ext/parser/parser.rl, ext/json/ext/parser/parser.c: JSON
+ text SHALL be encoded in Unicode.
+
+Thu Jun 19 23:17:56 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c, thread_win32.c, vm_core.h: try to remove false positive of
+ deadlock detection.
+
+Thu Jun 19 21:38:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): check if compile before showing message.
+
+Thu Jun 19 21:35:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot: supported multiple snapshots.
+
+Thu Jun 19 20:37:00 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * lib/net/pop.rb (Net::POP3#set_all_uids): speed
+ up. a patch from <m-sumi AT techfirm.co.jp> [ruby-list:45047]
+
+Thu Jun 19 17:44:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/etc/etc.c (Init_etc): define constant aliases Etc::Passwd
+ and Etc::Group. [ruby-dev:35150]
+
+Thu Jun 19 17:37:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_alloc): specify 'inline' modifier.
+
+ * string.c (str_alloc): remove cSymbol hack that no longer
+ necessary.
+
+ * string.c (scan_once): avoid retrieving encoding info unless
+ necessary.
+
+Thu Jun 19 17:19:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_scan): String#scan should preserve last
+ successful match data. [ruby-dev:35106]
+
+Thu Jun 19 16:49:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * missing/acosh.c (atanh): should set ERANGE to errno if parameter
+ is the boundary case. fixed [ruby-dev:35155]
+
+Thu Jun 19 16:06:01 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tkextlib/tile/treeview.rb: cannot configure tags.
+
+Thu Jun 19 11:48:33 2008 Koichi Sasada <ko1@atdot.net>
+
+ * test/ruby/test_enumerator.rb: fix to skip "with_memo" test.
+
+Thu Jun 19 11:40:55 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_throw): fix "return" process from "lambda".
+
+ * bootstraptest/test_proc.rb: add a test.
+
+ * bootstraptest/pending.rb: add a pending bug.
+
+Thu Jun 19 00:33:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/etc/test_etc.rb: avoid infinite loop. [ruby-dev:35158]
+
+Wed Jun 18 23:07:19 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * gc.c (rb_newobj): prohibit call of rb_newobj() during gc.
+ a patch from Sylvain Joyeux in [ruby-core:12099].
+
+Wed Jun 18 21:08:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (verbose_setter, opt_W_getter): fixed prototypes.
+
+Wed Jun 18 19:20:00 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ruby.c (opt_W_getter): use ruby_verbose directly instead of parameter
+ because ruby_verbose is not a real variable, so the address of
+ parameter is not collect.
+
+Wed Jun 18 18:31:03 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (errmap): add some pipe errors.
+
+ * win32/win32.c (rb_w32_write): set errno when CRT's errno is EINVAL
+ for pipe errors.
+
+Wed Jun 18 18:09:08 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (poll_child_status): set EINVAL to errno when
+ GetExitCodeProcess() fails with ERROR_INVALID_HANDLE.
+
+Wed Jun 18 15:01:18 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_open_file): fs_encoding and fname_encoding is
+ rb_encoding *.
+ fixed [ruby-dev:35151]
+
+Wed Jun 18 14:30:06 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_open_file): not rb_enc_get_index but rb_enc_get.
+
+Wed Jun 18 13:49:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h (pipe): now pipe is textmode. although this
+ change is experimental, it will be spec if no compatibility problem
+ is reported.
+
+Wed Jun 18 12:05:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_object, marshal_dump, r_object0, marshal_load): search
+ public methods only. [ruby-core:17283]
+
+ * object.c (convert_type): ditto.
+
+ * lib/singleton.rb (Singleton#_dump): conversion method should be
+ public.
+
+Wed Jun 18 10:18:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/etc/etc.c (etc_passwd, etc_group): fixed rdoc. a patch from
+ okkez <okkez000 AT gmail.com> in [ruby-dev:35141].
+
+Wed Jun 18 08:58:16 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/*: Fix errors for 1.9.
+
+ * gem_prelude.rb: Only remove methods from gem_prelude.rb when
+ loading real RubyGems.
+
+Wed Jun 18 07:03:30 2008 Eric Hodel <drbrain@egment7.net>
+
+ * lib/rubygems/*: Update to RubyGems r1778 (pre 1.2).
+
+Wed Jun 18 04:27:58 2008 Koichi Sasada <ko1@atdot.net>
+
+ * KNOWNBUGS.rb, bootstraptest/pending.rb: move pending bug.
+
+Wed Jun 18 04:24:20 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c, vm_insnhelper.c: fix escape process with "break" and "return"
+ syntax in "lambda". [ ruby-Bugs-19304 ], [ruby-core:17164]
+
+ * KNOWNBUGS.rb, bootstraptest/test_proc.rb: add/move solved test.
+
+Wed Jun 18 01:51:10 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/multi-tk.rb: cannot access class variable from
+ singleton method.
+
+Wed Jun 18 00:03:33 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * dir.c (Init_Dir): dir_foreach() takes variable argument.
+
+Tue Jun 17 23:04:24 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/net/telnet.rb: Fixing Telnet#wairfor() which was broken by
+ changes to the Kernel::Integer() method. [ruby-core:17272]
+
+Tue Jun 17 23:02:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (opt_W_getter): made a hooked variable.
+
+Tue Jun 17 22:04:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * enc/euc_jp.c (property_name_to_ctype): core dumped when sizeof(int)
+ differs from sizeof(long). [ruby-dev:35131]
+
+ * enc/shift_jis.c (property_name_to_ctype): ditto.
+
+ * enc/unicode.c (onigenc_unicode_property_name_to_ctype): ditto.
+
+Tue Jun 17 20:32:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (miniruby$(EXEEXT)): $(PREP) isn't always same as
+ miniruby, and tests, debug, etc have no meaning when
+ cross-compiling.
+
+Tue Jun 17 18:39:11 2008 Ryan Davis <ryand-ruby@zenspider.com>
+
+ * common.mk: fixed dependencies on miniruby.
+
+Tue Jun 17 18:11:01 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h (pipe): expand pipe buffer size.
+
+Tue Jun 17 17:07:35 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/win32.c (CreateChild): no need to inherit handles here because
+ spawn'ed child cannot detect that STDIN is closed.
+
+Tue Jun 17 06:32:55 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dir.c (dir_data): add intenc and extenc.
+
+ * dir.c (dir_s_alloc): ditto.
+
+ * dir.c (dir_initialize): now accept internal_encoding and
+ external_encoding.
+
+ * dir.c (dir_s_open): changed for dir_initialize.
+
+ * dir.c (dir_open_dir): ditto.
+
+ * dir.c (dir_foreach): changed for dir_open_dir.
+
+ * dir.c (dir_entries): changed for dir_open_dir.
+
+ * dir.c (dir_enc_str): defined.
+
+ * dir.c (dir_path): use dir_enc_str.
+
+ * dir.c (dir_read): ditto.
+
+ * dir.c (dir_each): ditto.
+
+Tue Jun 17 06:28:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (io_set_encoding): defined.
+
+ * io.c (rb_open_file): convert path on Windows and Mac OS X.
+
+ * io.c (open_key_args): use io_set_encoding and now accept
+ internal_encoding and external_encoding.
+
+Tue Jun 17 06:26:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_filesystem_encoding): defined.
+
+ * include/ruby/encoding.h (rb_filesystem_encoding): added.
+
+Tue Jun 17 06:24:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/syck/rubyext.c: add encoding header.
+
+Tue Jun 17 01:52:50 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/tcltklib.c: SEGV when exit.
+
+ * ext/tk/lib/tk.rb: add a check for safety to Tk.exit.
+
+ * ext/tk/sample/irbtkw.rbw: freezes when receives SIGINT.
+
+Mon Jun 16 21:58:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_each, strio_readlines): IO#each and
+ IO#readlines do not affect $_. [ruby-core:17277]
+
+Mon Jun 16 18:52:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/thwait.rb (ThreadsWait): Exception2MessageMapper no longer has
+ extend_to method. [ruby-core:17267]
+
+Mon Jun 16 14:46:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/e2mmap.rb (E2MM.def_e2message): typo.
+
+Mon Jun 16 09:43:27 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (enumerator_with_object, Init_Enumerator):
+ Temporarily back out with_memo, for which we need a better name.
+
+Mon Jun 16 07:14:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_readline, strio_each)
+ (strio_readlines): set lastline. [ruby-core:17257]
+
+Mon Jun 16 01:49:39 2008 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c (rb_f_block_given_p): fix to skip class frame.
+ [ruby-core:14813]
+
+ * KNOWNBUGS.rb, bootstraptest/test_method.rb: move solved test.
+
+Mon Jun 16 01:48:08 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_dump.c (vm_stack_dump_raw): disable verbose debug output.
+
+Mon Jun 16 01:33:08 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_core.h, thread.c: rename global_interpreter_lock to
+ global_vm_lock.
+
+Sun Jun 15 18:40:35 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/syck/rubyext.c (yaml_org_handler): associate encoding.
+
+ * ext/syck/rubyext.c (syck_genericresolver_node_import): ditto.
+
+Sun Jun 15 18:17:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (rb_vm_t), vm.c (rb_vm_mark): moved preallocated special
+ exceptions.
+
+ * eval.c (Init_eval), gc.c (Init_GC), proc.c (Init_Proc): freeze
+ preallocated special exceptions.
+
+ * eval.c (rb_longjmp): duplicate the thrown exception to set backtrace
+ if it was frozen.
+
+ * gc.c (rb_memerror): raise nomem_error without backtrace if failed to
+ make backtrace.
+
+Sat Jun 14 22:52:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_sysread): should not raise at empty
+ read. a patch from Arthur Schreiber at [ruby-core:17245].
+
+Sat Jun 14 16:55:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): no need to expand root path which has no
+ short file name. [ruby-dev:35095]
+
+Sat Jun 14 11:59:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.h (STACK_UPPER): moved from gc.c
+
+ * thread.c, thread_{pthread,win32}.c (ruby_init_stack,
+ ruby_thread_init_stack): moved stack initialization from gc.c.
+
+Sat Jun 14 11:57:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.h (STACK_UPPER): moved from gc.c
+
+ * thread.c, thread_{pthread,win32}.c (ruby_init_stack,
+ ruby_thread_init_stack): moved stack initialization from gc.c.
+
+Sat Jun 14 07:52:53 2008 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (ruby_initial_gc_stress): defined.
+ (ruby_initial_gc_stress_ptr): defined.
+
+ * debug.c (set_debug_option): use ruby_initial_gc_stress_ptr for
+ gc_stress option.
+
+Sat Jun 14 00:09:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (ruby_gc_stress): moved to rb_objspace_t.
+
+ * gc.c (gc_stress_get, gc_stress_set): VM local attribute.
+
+ * signal.c (sigsegv): ditto.
+
+Fri Jun 13 21:55:48 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_equal_p): Rational(0,x) and 0 are equivalent,
+ anyway.
+
+Fri Jun 13 21:26:39 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (string_to_c, nucomp_s_convert): preserve the current
+ backref.
+
+ * rational.c (string_to_r, nurat_s_convert): ditto.
+
+ * include/ruby/intern.h (rb_match_busy): added a declaration.
+
+Fri Jun 13 18:08:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time.xmlschema): don't accept decimal dot without
+ fractional digits. fractional digits handling simplified.
+
+Fri Jun 13 17:20:40 2008 wanabe <s.wanabe@gmail.com>
+
+ * complex.c (string_to_c_internal): save and restore backref.
+ fixed [ruby-dev:34991]
+
+Fri Jun 13 17:06:20 2008 wanabe <s.wanabe@gmail.com>
+
+ * rational.c (string_to_r_internal): save and restore backref.
+ fixed [ruby-dev:34990]
+
+Fri Jun 13 14:41:26 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * README.EXT.ja: update about Fixnum. reported in
+ <http://www.tmtm.org/ja/tdiary/?date=20080611#p01>
+
+ * README.EXT.ja: describe about StringValueCStr().
+
+ * README.EXT: ditto.
+
+Fri Jun 13 14:24:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_memerror): exit with EXIT_FAILURE instead of magic number.
+
+ * gc.c (ruby_stack_check): STACK_LENGTH should be less than
+ STACK_LEVEL_MAX.
+
+Fri Jun 13 12:55:37 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (sort_by_i): use NODE_DOT2 instead of NODE_MEMO to avoid
+ extra calls to is_pointer_to_heap() in GC.
+
+ * enum.c (enum_zip): ditto.
+
+Fri Jun 13 00:41:58 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_thread.rb: add a test.
+
+Thu Jun 12 23:30:11 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (mutex_unlock): fix cond_notified consistency.
+
+Thu Jun 12 22:19:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (native_sleep): fixed previous commit.
+
+Thu Jun 12 21:59:17 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c, vm_core.h, vm.c, thread_pthread.c, thread_win32.c: add
+ deadlock detection. [ruby-dev:35044]
+
+ * bootstraptest/test_thread.rb: add tests for above.
+
+Thu Jun 12 21:39:55 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: refactoring.
+
+ * rational.c: ditto.
+
+Thu Jun 12 17:11:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regint.h: undefine USE_CAPTURE_HISTORY which is mentioned as
+ unsupported in the Onigiruma document.
+
+Thu Jun 12 13:36:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (rb_intern): use rb_intern2 with strlen for
+ constant symbols to optimize strlen.
+
+Thu Jun 12 08:47:51 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (read_all): should use io_read_encoding(), not
+ io_input_encoding().
+
+ * io.c (rb_io_getline_1): reduce calling of io_read_encoding().
+
+ * string.c (rb_str_scan): need not to restore $~ value, so avoid
+ pinning match object.
+
+Thu Jun 12 02:49:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/stringio/stringio.c (strio_init): rewind when reopened.
+
+Thu Jun 12 02:43:27 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * array.c (rb_ary_zip): ANSI style.
+
+Thu Jun 12 02:25:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_reopen): clear read buffer.
+
+Thu Jun 12 00:56:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/tk: check proper conditions. [ruby-dev:35047]
+
+Wed Jun 11 23:33:13 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_fread): bypass buffered read if reading buffer is empty.
+
+ * io.c (remain_size): do not add extra one byte.
+
+Wed Jun 11 12:15:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * bootstraptest/runner.rb (assert_normal_exit): hide stderr output
+ when success.
+
+Wed Jun 11 09:26:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (encs): need to pass miniruby path for windows.
+
+Wed Jun 11 05:53:20 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c, eval_intern.h (PASS_PASSED_BLOCK):
+ set a VM_FRAME_FLAG_PASSED flag to skip this frame when
+ searching ruby-level-cfp.
+
+ * eval.c, eval_intern.h, proc.c: fix to check cfp. if there is
+ no valid ruby-level-cfp, cause RuntimeError exception.
+ [ruby-dev:34128]
+
+ * vm_core.h, vm_evalbody.c, vm.c, vm_dump.c, vm_insnhelper.c,
+ insns.def: rename FRAME_MAGIC_* to VM_FRAME_MAGIC_*.
+
+ * KNOWNBUGS.rb, bootstraptest/test*.rb: move solved bugs.
+
+Wed Jun 11 05:55:31 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/tcltklib.c: SEGV when tcltk-stubs is enabled.
+
+ * ext/tk/tcltklib.c: avoid error on a shared object.
+
+ * ext/tk/extconf.rb: support --with-tcltkversion
+
+ * ext/tk/README.tcltklib: add document about --with-tcltkversion
+
+ * ext/tk/lib/tk.rb, ext/tk/lib/multi-tk.rb, ext/tk/lib/remote-tk.rb:
+ not work on $SAFE==4
+
+ * ext/tk/lib/multi-tk.rb: Object#methods returns Symbols on Ruby1.9.
+
+ * ext/tk/lib/tk/timer.rb: add TkTimer#at_end(proc) to register the
+ procedure which called at end of the timer.
+
+ * ext/tk/lib/tk.rb, ext/tk/lib/tk/itemfont.rb, ext/tk/lib/font.rb:
+ support __IGNORE_UNKNOWN_CONFIGURE_OPTION__ about font options.
+
+ * ext/tk/lib/*: treat __IGNORE_UNKNOWN_CONFIGURE_OPTION__
+
+ * ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb,
+ ext/tk/lib/tkextlib/iwidgets/scrolledlistbox.rb,
+ ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: bug fix.
+
+ * ext/tk/lib/tk/text.rb: typo. call a wrong method.
+
+ * ext/tk/lib/tk/itemconfig.rb: ditto.
+
+ * ext/tk/lib/tk.rb, ext/tk/lib/tk/itemconfig.rb,
+ ext/tk/lib/tk/canvas.rb: support alias names of option keys.
+
+ * ext/tk/lib/tk/grid.rb: lack of module-method definitions.
+
+ * ext/tk/lib/tk/pack.rb, ext/tk/lib/tk/grid.rb: increase supported
+ parameter patterns of configure method.
+
+ * ext/tk/lib/tk.rb: add TkWindow#grid_anchor, grid_column, grid_row.
+
+ * ext/tk/lib/tk/wm.rb: methods of Tk::Wm_for_General module cannot
+ pass the given block to methods of Tk::Wm module.
+
+ * ext/tk/lib/tk/wm.rb: Wm#overrideredirect overwrites argument to
+ an invalid value.
+
+ * ext/tk/lib/tk.rb: fix memory (object) leak bug.
+
+ * ext/tk/tcltklib.c, ext/tk/tkutil/tkutil.c: fix memory leak.
+
+ * ext/tk/sample/demos-jp/aniwave.rb, ext/tk/sample/demos-en/aniwave.rb:
+ bug fix.
+
+ * ext/tk/lib/tkextlib/blt/component.rb,
+ ext/tk/lib/tkextlib/tile/tentry.rb,
+ ext/tk/lib/tkextlib/tile/treeview.rb: ditto.
+
+ * ext/tk/lib/tkextlib/tile/tpaned.rb: improve TPaned#add.
+
+ * ext/tk/sample/demos-jp/widget, ext/tk/sample/demos-en/widget,
+ ext/tk/sample/demos-jp/style.rb, ext/tk/sample/demos-en/style.rb,
+ ext/tk/sample/demos-jp/bind.rb, ext/tk/sample/demos-en/bind.rb:
+ bug fix.
+
+ * ext/tk/sample/ttk_wrapper.rb: ditto.
+
+ * ext/tk/sample/ttk_wrapper.rb: support "if __FILE__ == $0" idiom.
+
+ * ext/tk/sample/tktextio.rb: add binding for 'Ctrl-u' at console mode.
+
+ * ext/tk/lib/tkextlib/tile.rb, ext/tk/lib/tkextlib/tile/style.rb,
+ ext/tk/sample/ttk_wrapper.rb: improve treating and control themes.
+ add Tk::Tile.themes and Tk::Tile.set_theme(theme).
+
+ * ext/tk/lib/tkextlib/tile.rb: lack of autoload definitions.
+
+ * ext/tk/lib/tkextlib/tile/tnotebook.rb: cannot use kanji (not UTF-8)
+ characters for headings.
+
+ * ext/tk/lib/tkextlib/tkDND/shape.rb: wrong package name.
+
+ * ext/tk/tkutil/tkutil.c: improve handling callback-subst-keys.
+ Now, support longnam-keys (e.g. '%CTT' on tkdnd-2.0; however, still
+ not support tkdnd-2.0 on tkextlib), and symbols of parameters (e.g.
+ :widget=>'%W', :keycode=>'%k', '%x'=>:x, '%X'=>:root_x, and so on;
+ those are attributes of event object). It means that Ruby/Tk accepts
+ not only "widget.bind(ev, '%W', '%k', ...){|w, k, ...| ... }", but
+ also "widget.bind(ev, :widget, :keycode, ...){|w, k, ...| ... }".
+ It is potentially incompatible, when user passes symbols to the
+ arguments of the callback block (the block receives the symbols as
+ strings). I think that is very rare case (probably, used by Ruby/Tk
+ experts only). When causes such trouble, please give strings instead
+ of such symbol parameters (e.g. call Symbol#to_s method).
+
+ * ext/tk/lib/tk/event.rb, ext/tk/lib/tk/validation.rb,
+ ext/tk/lib/tkextlib/blt/treeview.rb,
+ ext/tk/lib/tkextlib/winico/winico.rb: ditto.
+
+ * ext/tk/tkutil/tkutil.c: strings are available on subst_tables on
+ TkUtil::CallbackSubst class (it is useful on Ruby 1.9).
+
+ * ext/tk/lib/tk/spinbox.rb, ext/tk/lib/tkextlib/iwidgets/hierarchy.rb,
+ ext/tk/lib/tkextlib/iwidgets/spinner.rb,
+ ext/tk/lib/tkextlib/iwidgets/entryfield.rb,
+ ext/tk/lib/tkextlib/iwidgets/calendar.rb,
+ ext/tk/lib/tkextlib/blt/dragdrop.rb,
+ ext/tk/lib/tkextlib/tkDND/tkdnd.rb,
+ ext/tk/lib/tkextlib/treectrl/tktreectrl.rb,
+ ext/tk/lib/tkextlib/tktable/tktable.rb: disable code piece became
+ unnecessary by reason of the changes of ext/tk/tkutil/tkutil.c.
+
+ * ext/tk/lib/tk.rb, ext/tk/lib/multi-tk.rb: change strategy to define
+ the constant WITH_ENCODING.
+
+ * ext/tk/lib/tk.rb: fix bug on Tk::Encoding.tk_encoding_names.
+
+Wed Jun 11 03:40:37 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/find.rb (Find#find): Return an enumerator if no block is
+ given.
+
+Wed Jun 11 01:28:12 2008 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/intern.h, proc.c: revert rb_proc_call() and
+ create rb_proc_call_with_block() instead.
+
+ * include/ruby/ruby.h, eval_jump.c, thread.c, vm_insnhelper.c:
+ rb_blockptr should not be exposed.
+
+Tue Jun 10 21:07:19 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_float.rb: add tests. [ruby-dev:35009]
+
+Tue Jun 10 20:55:57 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_s_convert): need not to initialize optional
+ argument for rb_scan_args().
+
+Tue Jun 10 20:13:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb: negate default of --without-ext if --with-ext is
+ given.
+
+ * ext/extmk.rb: negate default of --without-ext.
+
+Tue Jun 10 17:43:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_shuffle_bang): update RDoc. [ruby-dev:35034]
+
+Tue Jun 10 17:30:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_obj_instance_exec, rb_mod_module_exec):
+ added prototypes.
+
+Tue Jun 10 17:00:29 2008 wanabe <s.wanabe@gmail.com>
+
+ * util.c (ruby_strtod): ruby_strtod don't allow a trailing
+ decimal point like "7.". [ruby-dev:34835] [ruby-dev:35009]
+
+Tue Jun 10 13:48:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * rational.c (nurat_s_convert): need not to initialize optional
+ argument for rb_scan_args().
+
+Tue Jun 10 12:58:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/wait/wait.c (FIONREAD_POSSIBLE_P): suppress warnings.
+
+Tue Jun 10 12:43:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (CONST_ID_CACHE): fixed statement expression.
+
+Tue Jun 10 11:25:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (rb_argv0): revised for ext/tk.
+
+ * include/ruby/encoding.h: not to use varargs.h since requiring C89.
+
+Tue Jun 10 00:50:51 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * include/ruby/ruby.h, vm_core.h: add a type rb_blockptr.
+
+ * vm_insnhelper.c (vm_yield_with_cfunc): vm_yield_with_cfunc receives
+ blockptr and passes it to iterating block.
+
+ * proc.c (rb_proc_call), include/ruby/intern.h: rb_proc_call receives
+ blockptr. "rb_proc_call(self, args, blockptr)" in C corresponds to
+ "self.call(*args, &block)" in Ruby.
+
+ * proc.c (proc_call): pass blockptr to block that is written in C.
+
+ * proc.c (curry): receive blockptr and pass it to original proc.
+ [ruby-core:15551]
+
+ * vm.c (invoke_block_from_c): fix for change of vm_yield_with_cfunc.
+
+ * thread.c (call_trace_proc), eval_jump.c (rb_call_end_proc): fix for
+ change of rb_proc_call.
+
+Tue Jun 10 00:10:49 2008 Tanaka Akira <akr@fsij.org>
+
+ * common.mk (test-knownbug): give $(OPTS) for bootstraptest/runner.rb.
+
+Mon Jun 9 23:10:50 2008 Tanaka Akira <akr@fsij.org>
+
+ * eval.c (Init_stack): don't declare. it is a macro now.
+
+Mon Jun 9 22:46:47 2008 wanabe <s.wanabe@gmail.com>
+
+ * compile.c : treat []&&= in virtually the same way as []||=.
+ [ruby-dev:34679]
+
+Mon Jun 9 21:17:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend (clean): remove build directories.
+
+ * test_knownbug.rb -> KNOWNBUGS.rb: renamed.
+
+ * common.mk: apply above change.
+
+Mon Jun 9 21:14:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (configuration): set flags.
+
+Mon Jun 9 21:09:02 2008 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_knownbug.rb -> ./test_knownbug.rb: moved.
+
+ * common.mk: add a rule "test-knownbug".
+
+Mon Jun 9 21:00:32 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_s_convert): can accept Complex('i').
+ [ruby-dev:34991]
+
+Mon Jun 9 18:25:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (CONST_ID): constant ID cache for non-gcc.
+
+ * *.c: no cache in init functions.
+
+Mon Jun 9 17:56:30 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * 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.
+
+Mon Jun 9 17:47:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (fptr_finalize): close IO object if fd is already closed.
+ (rb_p): call rb_io_write just once.
+
+Mon Jun 9 15:37:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (require_libraries): req_list may be NULL. [ruby-dev:35008]
+
+Mon Jun 9 14:18:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (struct rb_vm_struct): moved src_encoding_index,
+ ruby_debug, ruby_verbose, and rb_progname.
+
+ * ruby.c (rb_argv0): no longer used.
+
+ * ruby.c (struct cmdline_options): moved setids and req_list, and the
+ latter is now an array, to prevent memory leak.
+
+ * ruby.c (cmdline_options_init): added.
+
+ * ruby.c (add_modules, require_libraries, init_ids, forbid_setid): use
+ struct cmdline_options.
+
+ * vm.c (vm_init2): initialize src_encoding_index.
+
+ * vm.c: getters/setters for ruby_{debug,verbose}.
+
+Mon Jun 9 09:54:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (Init_stack): make to call ruby_init_stack.
+
+Mon Jun 9 08:12:40 2008 wanabe <s.wanabe@gmail.com>
+
+ * vm_insnhelper.c, vm.c, proc.c : revert r17021. [ruby-dev:34997]
+
+Mon Jun 9 03:12:23 2008 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/pending.rb: move/remove solved issues.
+
+ * bootstraptest/test_class.rb: ditto.
+
+Mon Jun 9 02:32:58 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/zlib/zlib.c (rb_deflate_init_copy): Copy buffers as well.
+ [ruby-list:45018]
+
+Sun Jun 8 22:22:20 2008 wanabe <s.wanabe@gmail.com>
+
+ * vm_insnhelper.c, vm.c, proc.c (proc_call): allow call method with
+ block that both is written in C. [ruby-dev:34273] [ruby-core:15551]
+
+ * proc.c (curry): use proc_call instead of rb_proc_call.
+ [ruby-dev:34273] [ruby-core:15551]
+
+Sun Jun 8 21:50:27 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/zlib/test_zlib.rb: add tests to achieve over 90% test coverage
+ of zlib.
+
+Sun Jun 8 20:12:47 2008 wanabe <s.wanabe@gmail.com>
+
+ * vm_insnhelper.c (vm_throw): regard break as return in lambda.
+ [ruby-dev:34646]
+
+Sun Jun 8 19:17:59 2008 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c: add a build option "CALC_EXACT_MALLOC_SIZE".
+ This option enables to calculate exact size of current
+ allocated size by malloc(). You can access these information
+ with GC.malloc_allocated_size and GC.malloc_allocations.
+ This option consume additional memory as a header of each memory
+ object. This option also helps to find out xmalloc()/xfree()
+ consistency. If you get trouble with this option, some extension
+ using "free()" instead of "xfree()".
+ This options is disabled by default.
+
+Sun Jun 8 18:15:38 2008 Koichi Sasada <ko1@atdot.net>
+
+ * array.c, bignum.c, cont.c, dir.c, dln.c, encoding.c, enumerator.c,
+ enumerator.c (enumerator_allocate), eval_jump.c, file.c, hash.c,
+ io.c, load.c, pack.c, proc.c, random.c, re.c, ruby.c, st.c,
+ string.c, thread.c, thread_pthread.c, time.c, util.c, variable.c,
+ vm.c, gc.c:
+ allocated memory objects by xmalloc (ruby_xmalloc) should be
+ freed by xfree (ruby_xfree).
+
+ * ext/curses/curses.c, ext/dbm/dbm.c, ext/digest/digest.c,
+ ext/gdbm/gdbm.c, ext/json/ext/parser/parser.c,
+ ext/json/ext/parser/unicode.c, ext/openssl/ossl_cipher.c,
+ ext/openssl/ossl_hmac.c, ext/openssl/ossl_pkey_ec.c,
+ ext/sdbm/init.c, ext/strscan/strscan.c, ext/zlib/zlib.c:
+ ditto.
+
+Sun Jun 8 01:15:11 2008 Tanaka Akira <akr@fsij.org>
+
+ * hash.c (hash_i): make Hash#hash order insensitive.
+ (rb_hash_dup): use DUPSETUP.
+
+Sat Jun 7 23:47:35 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/zlib/zlib.c (rb_deflate_initialize, Init_zlib): Fix up
+ initialize_copy; [ruby-list:45016].
+
+Sat Jun 7 22:15:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (VENDOR_DIR): use LIBDIR instead of PREFIX as well as
+ SITE_DIR. a patch from Richard Brown <rbrown AT exherbo.org> in
+ [ruby-core:17129].
+
+Sat Jun 7 21:37:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_f_open), re.c (rb_reg_search), transcode.c (str_transcode):
+ suppress warnings.
+
+ * util.c (quorem, rv_alloc, nrv_alloc): only used in dtoa().
+
+Sat Jun 7 16:06:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (CFLAGS, CXXFLAGS): append default flags.
+
+Sat Jun 7 01:23:59 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (rb_open_file, rb_io_s_sysopen): fmode should be unsigned int.
+ fixed [ruby-dev:34979]
+
+Fri Jun 6 23:46:19 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm_insnhelper.c (vm_callee_setup_arg): check simple flag before
+ calling setup_arg function(). this change reduce function call.
+
+Fri Jun 6 21:51:46 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (COMMON_HEADERS): include ws2tcpip.h.
+
+ * ext/socket/addrinfo.h (addrinfo, getaddrinfo, getnameinfo,
+ freehostent, freeaddrinfo): undef before define because these are
+ macros in some versions of Windows SDK.
+
+ merged from ruby_1_8.
+
+Fri Jun 6 18:25:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/iconv/utils.rb (default_test): override not to croak.
+
+Fri Jun 6 16:41:45 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h: include ws2tcpip.h. fixed [ruby-Bugs-20528]
+
+Fri Jun 6 15:05:02 2008 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (count_objects): clear hash after counting objects.
+
+Fri Jun 6 12:43:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_dir.rb (TestDir::test_glob): glob file names not sorted.
+
+Fri Jun 6 00:05:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time.xmlschema): don't use float. fix
+ http://rubyforge.org/tracker/index.php?func=detail&group_id=426&atid=1698&aid=20504
+
+Thu Jun 5 23:56:18 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_gc.rb: add tests to achieve over 90% test coverage of
+ gc.c.
+
+ * test/ruby/test_objectspace.rb: ditto.
+
+ * test/ruby/test_marshal.rb: ditto.
+
+Thu Jun 5 23:40:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * gc.c (rb_objspace_alloc): this function is needed only when
+ ENABLE_VM_OBJSPACE macro is defined.
+
+ * vm.c: ditto.
+
+Thu Jun 5 23:31:21 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/stringio/test_stringio.rb: add tests to achieve over 95% test
+ coverage of stringio.
+
+ * test/strscan/test_stringscanner.rb: ditto for strscan.
+
+Thu Jun 5 23:25:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * eval.c (ruby_finalize_0): clear trace_func after executing END
+ procs.
+
+ * thread.c: fix typo.
+
+Thu Jun 5 22:50:50 2008 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (os_obj_of): heaps may be modified in yield.
+
+Thu Jun 5 21:46:50 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * st.c (st_reverse_foreach): comment out unused function.
+
+ * util.c (dtoa): ditto.
+
+Thu Jun 5 20:30:46 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_initialize):
+ Add a null check for ssl; submitted by akira yamada
+ in [ruby-dev:34950].
+
+ * ext/openssl/ossl_ssl.c (Init_ossl_ssl): Define OP_NO_TICKET if
+ SSL_OP_NO_TICKET is present; submitted by akira yamada
+ in [ruby-dev:34944].
+
+ * test/openssl/test_ssl.rb (OpenSSL#test_server_session): Add a
+ workaround for the case where OpenSSL is configured with
+ --enable-tlsext; submitted by akira yamada in [ruby-dev:34944].
+
+Thu Jun 5 20:24:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * thread.c (thread_set_trace_func_m): fix check for proc argument.
+
+Thu Jun 5 20:17:29 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * lib/rexml/document.rb (REXML::Document:write): leaky modification
+ trans -> transitive. [ruby-dev:32040], r13686
+
+ * lib/rexml/text.rb (Text.check): fix check for illegal character.
+
+Thu Jun 5 14:03:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (iconv_create): find encoding without options.
+
+Thu Jun 5 07:48:32 2008 Koichi Sasada <ko1@atdot.net>
+
+ * string.c (hash): should be "static".
+
+Thu Jun 5 01:47:18 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_transcode.rb: add tests for iso-2022-jp.
+
+Thu Jun 5 01:27:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_process.rb: add tests.
+
+Wed Jun 4 23:10:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/zlib/zlib.c (rb_gzfile_set_mtime): fix typo.
+
+Wed Jun 4 18:53:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_alloc): RDoc updated. a patch from Gaston
+ Ramos <ramos.gaston at gmail.com> in [ruby-core:17073].
+
+Wed Jun 4 18:36:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rdoc.rb: massive spelling correction patch from Evan Farrar
+ <evanfarrar at gmail.com> in [ruby-doc:1382] applied.
+
+Wed Jun 4 17:52:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (iconv_iconv): fix for length argument and now
+ allows range. [ruby-core:17092]
+
+Wed Jun 4 15:45:41 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (enumerator_with_index, enumerator_with_memo): Fix
+ grammo in rdoc.
+
+Wed Jun 4 13:06:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (CFLAGS, CXXFLAGS): include additional flags to
+ CFLAGS and CXXFLAGS while configuration.
+
+Tue Jun 3 23:06:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/strscan/strscan.c (strscan_scan_full, strscan_search_full): fix
+ document.
+
+Tue Jun 3 22:37:26 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ext/strscan/strscan.c (strscan_exist_p): fix document.
+
+Tue Jun 3 22:33:29 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_dir.rb: add tests to achieve over 90% test coverage
+ of dir.c.
+
+ * test/ruby/test_encoding.rb: add tests for dummy?, name_list and
+ aliases.
+
+ * test/ruby/test_marshal.rb: add some tests.
+
+Tue Jun 3 22:25:51 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/etc/test_etc.rb: new tests for etc.
+
+Tue Jun 3 19:35:02 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (enumerator_with_memo): New method: with_memo().
+
+Tue Jun 3 20:04:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/Makefile.sub (miniruby$(EXEEXT)): miniruby cannot be
+ written by miniruby itself.
+
+Tue Jun 3 19:33:22 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (enumerator_init_copy): Take care of
+ initialize_copy as well as initialize.
+
+Tue Jun 3 16:06:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): fix for non-existent files and SFN of
+ symlinks. [ruby-talk:303736]
+
+Tue Jun 3 15:12:01 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#classify): Back out the `group_by' alias.
+ Better think twice.
+
+Tue Jun 3 15:00:22 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#collect, Set#select): Back out. I thought it
+ was consistent but turned out to be wrong.
+
+Tue Jun 3 13:41:08 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#collect, Set#select): Override Enumerable
+ methods and make them return a set. [ruby-core:17055]
+ (Set#delete_if, Set#collect!, Set#reject!, Set#classify)
+ (Set#divide, Set#delete_if): Return an enumerator if no block is
+ given.
+ (Set#classify): Define an alias `group_by' to override that of
+ Enumerable.
+
+Tue Jun 3 13:35:40 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (run_exec_pgroup): C99 ism.
+
+Tue Jun 3 12:51:57 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (enumerator_allocate, enumerator_ptr): Properly
+ detect if the object is initialized and raise error when
+ appropriate.
+ (enumerator_initialize): Fix a typo in rdoc. [ruby-core:17052]
+
+Tue Jun 3 01:21:51 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_method.rb: add a test.
+
+Tue Jun 3 00:26:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * marshal.c (w_object): add a check for modification of array during
+ its dump.
+
+Mon Jun 2 22:27:57 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * enc/iso_8859_5.c: Large omicron should lowercase to small omicron.
+
+ * test/ruby/test_big5.rb, test/ruby/test_cp949.rb,
+ test/ruby/test_euc_jp.rb, test/ruby/test_euc_kr.rb,
+ test/ruby/test_euc_tw.rb, test/ruby/test_gb18030.rb,
+ test/ruby/test_gbk.rb, test/ruby/test_iso_8859.rb,
+ test/ruby/test_koi8.rb, test/ruby/test_shift_jis.rb,
+ test/ruby/test_windows_1251.rb: new tests for encoding.
+
+ * test/ruby/test_utf16.rb, test/ruby/test_utf32.rb,
+ test/ruby/test_regexp.rb: add tests.
+
+Mon Jun 2 21:56:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_file.rb: add tests for uninitialized object.
+
+ * test/ruby/test_class.rb: ditto.
+
+ * test/ruby/test_thread.rb: ditto.
+
+Mon Jun 2 21:44:15 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * re.c: fix SEGV by Regexp.allocate.names, Match.allocate.names, etc.
+
+ * test/ruby/test_regexp.rb: add tests for above.
+
+ * io.c: fix SEGV by IO.allocate.print, etc.
+
+ * test/ruby/test_io.rb: add tests for above.
+
+Mon Jun 2 19:17:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_argf.rb (teardown): remove renamed temporary files.
+
+Mon Jun 2 18:51:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/un.rb (wait_writable): wait until target files can be
+ written actually.
+
+ * win32/Makefile.sub (LDSHARED_0, LINK_SO): get rid of failure of
+ mt.exe.
+
+Mon Jun 2 16:26:17 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/delegate.rb (Delegator::MethodDelegation#respond_to):
+ respond_to? should now take optional second argument; submitted
+ by Jeremy Kemper <jeremy at bitsweat.net> in [ruby-core:17045].
+
+Mon Jun 2 16:14:18 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/erb.rb (ERB::Compiler::TrimScanner#scan_line): Oops. This
+ change did not apply to trunk. Backed out.
+
+Mon Jun 2 16:08:24 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/erb.rb (ERB::Compiler::TrimScanner#scan_line): Fix a bug
+ where tokens are not yielded one by one.
+
+ * test/erb/test_erb.rb (TestERBCore#_test_01)
+ (TestERBCore#test_02_safe_04): The expected value should come
+ first for assert_equal().
+
+Mon Jun 2 13:06:38 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * mkconfig.rb: hide build path from rbconfig.rb.
+
+Mon Jun 2 08:46:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (ruby_strtod, dtoa): initialize more variables for error
+ handling.
+
+Mon Jun 2 04:55:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * suppress warnings on cygwin, mingw and mswin.
+
+Mon Jun 2 04:35:32 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/gb18030.c (gb18030_code_to_mbc): add 0x80000000
+ for 4bytes character.
+
+Mon Jun 2 03:52:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (set_arg0): reverted used variable definition.
+
+Mon Jun 2 03:23:25 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/gb18030.c (gb18030_mbc_to_code): mask by 0x7FFFFFFF
+ because OnigCodePoint will be used as 32bit signed int.
+ Masking by 0x7FFFFFFF is ok on GB18030;
+ Minimum 4bytes character is 0x81308130.
+
+Sun Jun 1 22:29:35 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * rational.c (string_to_r_internal): use rb_isdigit.
+
+ * marshal.c (long_toobig): use %zd.
+
+ * ruby.c (set_arg0): move unused variable definition.
+
+Sun Jun 1 12:18:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * insns.def (DEFINE_INSN): subtract of pointers is ptrdiff_t.
+ this is not int on 64bit system.
+
+ * vm_dump.c (control_frame_dump): ditto.
+
+ * vm_dump.c (stack_dump_each): ditto.
+
+ * vm_dump.c (debug_print_register): ditto.
+
+ * vm_dump.c (debug_print_pre): ditto.
+
+ * transcode.c (str_transcode): ditto.
+
+Sun Jun 1 10:32:18 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/envutil.rb (assert_normal_exit): show coredump status.
+
+Sat May 31 23:33:34 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * README, README.ja: Add a note about default C flags.
+
+Sat May 31 23:02:00 2008 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (count_objects): clear given hash.
+
+Sat May 31 20:28:10 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_regexp.rb: add tests.
+
+Sat May 31 19:11:39 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/utf_16{be,le}.c (utf16{be,le}_code_to_mbc):
+ fix codepoint to bytes.
+
+Sat May 31 18:28:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * suppress warnings with -Wwrite-string.
+
+Sat May 31 18:26:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_delete_if): should return enumerator if no block
+ is given. [ruby-dev:34901]
+
+Sat May 31 15:58:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, configure.in (warnflags): defaulted to -Wall
+ -Wno-parentheses with gcc. [ruby-dev:34810]
+
+Sat May 31 15:17:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/mvm.h: new header file for MVM, and moved rb_vm_t and
+ rb_thread_t from vm_core.h.
+
+Sat May 31 12:02:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/envutil.rb (assert_normal_exit): show pid when fail.
+
+Fri May 30 23:55:56 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_rubyoptions.rb: add a test of RUBY_DESCRIPTION.
+
+Fri May 30 22:47:17 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_regexp.rb: add tests.
+
+Fri May 30 22:40:53 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_signal.rb: add tests to achieve over 80% test
+ coverage of signal.c.
+
+Fri May 30 22:28:03 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * signal.c (esignal_signo): fix SignalException#signo which returned
+ nil absolutely.
+
+ * signal.c (esignal_init): always prepend "SIG" to a string that is
+ returned by SignalException#signm.
+
+Fri May 30 22:17:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_argf.rb: rename a conflicting method name.
+
+ * test/ruby/test_string.rb: ditto.
+
+ * test/ruby/test_io.rb: ditto.
+
+Fri May 30 22:14:37 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (defined_expr): fix SEGV by defined?([1]).
+
+Fri May 30 12:18:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (prelude.c): simply depends on PREP. [ruby-dev:34877]
+
+ * enc/make_encdb.rb, enc/trans/make_transdb.rb: ditto.
+
+Fri May 30 10:55:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (struct rb_unblock_callback), thread.c
+ (set_unblock_function), thread_{pthread,win32}.c (native_sleep):
+ extracted from struct rb_thread_struct.
+
+ * thread.c (reset_unblock_function): not check interrupts at leaving
+ blocking region. [ruby-dev:34874]
+
+Fri May 30 06:09:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/utf_8.c: add UTF8-MAC (UTF-8-MAC).
+
+Fri May 30 04:17:13 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enum.c (enum_count, count_all_i, Init_Enumerable),
+ array.c (rb_ary_count): If no argument or block is given, count
+ the number of all elements.
+
+Fri May 30 03:12:18 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/openssl/ossl_bn.c (ossl_bn_s_rand, ossl_bn_s_pseudo_rand):
+ Int should be enough here.
+
+Fri May 30 02:35:00 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/openssl/ossl_bn.c (ossl_bn_s_rand, ossl_bn_s_pseudo_rand),
+ ext/openssl/ossl_pkey_dh.c (ossl_dh_s_generate)
+ (ossl_dh_initialize),
+ ext/openssl/ossl_pkey_dsa.c (ossl_dsa_s_generate),
+ ext/openssl/ossl_rand.c (ossl_rand_bytes)
+ (ossl_rand_pseudo_bytes, ossl_rand_egd_bytes),
+ ext/openssl/ossl_x509store.c (ossl_x509stctx_set_error): Do not
+ use FIX2INT() without checking the value type. Use NUM2INT()
+ instead; found by akr in [ruby-dev:34890].
+
+Fri May 30 02:08:20 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * signal.c (esignal_init): handle a non-integer argument correctly,
+ allowing SignalException.new(:INT).
+
+Fri May 30 00:59:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_regexp.rb: add tests.
+
+Thu May 29 22:51:05 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_require.rb: add a test for load with wrap flag, to
+ achieve 100% test coverage of eval_jump.c.
+
+Thu May 29 22:47:53 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_argf.rb: new tests for ARGF, to achieve over 85% test
+ coverage of file.c.
+
+ * test/ruby/test_io.rb: add tests.
+
+Thu May 29 22:41:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (argf_readchar): raise EOFError, synchronizing IO#readchar.
+
+Thu May 29 22:29:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * io.c (argf_external_encoding, argf_internal_encoding): fix SEGV by
+ ARGF.external_encoding.
+
+Thu May 29 17:52:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/zlib/extconf.rb: search zlib1, and regard mswin32 later than VC6
+ as WIN32. [ruby-core:16984]
+
+Wed May 28 18:05:28 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * array.c (rb_ary_nitems, Init_Array): Axe Array#nitems().
+ cf. [ruby-dev:34676]-[ruby-dev:34713]
+
+Wed May 28 17:50:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/mkexports.rb (Exports#objdump, Exports#each_line): extracted.
+
+Wed May 28 17:41:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (MKPREP): appended $(RBCONFIG).
+
+ * common.mk (enc.mk, prelude.c): not depend on $(RBCONFIG) on mswin32
+ to get of compiling twice each time.
+
+ * win32/Makefile.sub (prelude.c): not depend on $(PREP).
+
+Wed May 28 17:37:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/mkexports.rb (Exports::Mswin#each_export): speed up.
+
+Wed May 28 16:41:59 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * array.c (rb_ary_slice_bang): Call rb_ary_modify_check() at the
+ beginning. [rubyspec]
+
+Wed May 28 16:12:44 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/webrick/httpservlet/cgihandler.rb (WEBrick::HTTPServlet::CGIHandler#do_GET):
+ Set the HTTP status code to 302 if a Location header field is
+ present and the status code is not valid as a client
+ redirection. cf. RFC 3875 6.2.3, 6.2.4.
+
+Wed May 28 15:53:52 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * enc/trans/japanese.c (to_SHIFT_JIS_EF_infos): typo.
+
+Wed May 28 15:18:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/singleton.rb (SingletonClassMethods): _load should be public.
+
+Wed May 28 13:30:43 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/japanese.c: add workaround for Unicode to CP932.
+ U+2015->0x815C, U+2225->0x8161, U+FF0D->0x817C, U+FF3C->0x815F,
+ U+FF5E->0x8160, U+FFE0->0x8191, U+FFE1->0x8192, U+FFE2->0x81CA
+
+Wed May 28 12:52:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (w_object, marshal_dump, r_object0, marshal_load): search
+ private methods too. [ruby-dev:34671]
+
+ * object.c (convert_type): ditto.
+
+Wed May 28 08:42:51 2008 Tanaka Akira <akr@fsij.org>
+
+ * numeric.c: "%" is required before PRI?VALUE.
+
+Tue May 27 22:10:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_error.c (error_handle): SystemExit and SignalException throws
+ TAG_RAISE but not TAG_FATAL.
+
+ * thread.c (rb_thread_execute_interrupts): delay interrupts during
+ raising exceptions. [ruby-dev:34855]
+
+Tue May 27 20:18:30 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * array.c (rb_ary_slice_bang): Return an empty array instead of
+ nil when pos is valid and len is adjusted from a valid value to
+ zero; caught by RubySpec.
+
+Tue May 27 19:12:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (MKPREP), common.mk, win32/Makefile.sub (prelude.c): get
+ rid of depending PREP with nmake.
+
+ * common.mk (encs): depends on libruby.
+
+Tue May 27 19:00:22 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/stringio/stringio.c (strio_each_char, Init_stringio): Add
+ StringIO#{each_char,chars}.
+ (Init_stringio): Fix StringIO#bytes.
+
+Tue May 27 17:54:35 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/stringio/stringio.c (strio_each_byte): Return self instead
+ of nil as the rdoc says.
+
+Tue May 27 15:36:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (check_int): use PRIxVALUE format specifier.
+
+ * numeric.c (check_uint, rb_num2fix, int_chr): ditto.
+
+ * numeric.c (num_fdiv): fallback to_f should always return float
+ result. should not use #quo that may return rational.
+
+ * numeric.c (num_div): should raise ZeroDivisionError.
+
+ * numeric.c (fix_divide): ditto.
+
+ * test/ruby/test_numeric.rb (TestNumeric::test_divmod): avoid
+ ZeroDivisionError in tests.
+
+Tue May 27 13:14:53 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enum.c (enum_to_a): Pass arguments through to #each().
+ (enum_sort): Follow the enum_to_a signature change.
+ (enum_reverse_each): Add #reverse_each().
+
+Tue May 27 13:12:37 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * io.c (Init_IO): Define ARGF.{lines,bytes,chars}.
+
+Tue May 27 12:06:37 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (BUFCHECK): wrong condition. [ruby-core:16921]
+
+ * file.c (file_expand_buf): shouldn't use buflen for length of string.
+
+Mon May 26 18:24:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (BUFCHECK): no resize if enough room.
+
+ * file.c (file_expand_path): use BUFCHECK.
+
+Mon May 26 17:48:42 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (struct enumerator, enumerator_init)
+ (enumerator_init_copy, enumerator_each): Eliminate iter.
+ (enumerator_ptr): Do not hardcode the class name.
+ (enumerator_with_index): Delay variable initialization after
+ RETURN_ENUMERATOR().
+
+Mon May 26 17:23:49 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (file_expand_path): add more space for '/'.
+
+ * file.c (file_expand_path): should reset address of p after calling
+ rb_str_resize(). [ruby-dev:34800]
+
+Mon May 26 16:49:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-mode): use run-hooks if run-mode-hook is
+ not available. a patch from Kazuhiro NISHIYAMA <zn at mbf.nifty.com>
+ in [ruby-dev:34853].
+
+Mon May 26 16:41:35 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (ntfs_tail): filename which starts with '.' is valid.
+
+ * file.c (file_expand_path): cygwin symlink support.
+
+Mon May 26 07:15:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_dump.c (rb_vm_bugreport): rb_make_backtrace has no arguments.
+
+Mon May 26 01:17:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/envutil.rb (assert_normal_exit): signal description
+ refined.
+
+Mon May 26 00:52:52 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * hash.c (env_each_key, env_each_value, env_reject_bang)
+ (rb_env_clear, env_replace): Omit duplicated secure level check.
+
+Mon May 26 00:37:16 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * hash.c (env_each_value): Do not call env_values() twice.
+
+Sun May 25 17:54:36 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (iseq_compile): set local_table for
+ ISEQ_TYPE_DEFINED_GUARD.
+
+Sun May 25 17:52:25 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (iseq_build_body): remove side effect from
+ VM::InstructionSequence.load.
+
+Sun May 25 04:30:45 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_module.rb (remove_json_mixins): change judgment
+ condition.
+
+Sun May 25 03:54:39 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_module.rb (test_ancestors, test_included_modules):
+ ignore json mixins.
+
+Sun May 25 02:37:25 2008 Koichi Sasada <ko1@atdot.net>
+
+ * eval_method.c: renamed from vm_method.c. "vm_method.c" is included
+ by "vm.c".
+
+ * vm_eval.c: added. Some codes are moved from "eval.c"
+
+ * common.mk: fix for above changes.
+
+ * compile.c: make a vm_eval(0)
+
+ * eval.c, eval_error.c, eval_intern.h, eval_jump.c, proc.c, vm.c,
+ id.c, id.h, vm_core.h, vm_dump.c, vm_evalbody.c, vm_insnhelper.c,
+ blockinlining.c: fix for above changes. and do some refactoring.
+ this changes improve rb_yield() performance.
+
+Sat May 24 22:32:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * util.c (ruby_strtod): clear errno at the top of our own
+ implementation of strtod(3). [ruby-dev:34834] [ruby-dev:34839]
+
+Sat May 24 15:26:16 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (iseq_set_exception_table, NODE_WHILE, NODE_NEXT): remove
+ special handling that decrements sp in CATCH_TYPE_NEXT for NODE_WHILE.
+
+ * vm.c (vm_eval_body), vm_insnhelper.c (vm_throw): remove unused code.
+
+Sat May 24 08:13:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (rb_str_transcode): argc is 1, and argv is &to.
+
+Fri May 23 17:55:11 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * array.c (rb_ary_slice_bang): Be consistent with Array#slice()
+ and String#slice!(). Just return nil when a negative length or
+ out of boundary index is given instead of raising an exception
+ via internal functions.
+
+Fri May 23 16:44:34 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (Init_Enumerator): Override
+ Enumerable::Enumerator#each_with_index with #with_index.
+
+Fri May 23 12:23:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (rb_num_t): moved form vm.h.
+
+ * tool/instruction.rb (RubyVM::Instruction#sp_increase_c_expr),
+ tool/instruction.rb (RubyVM::VmBodyGenerator#make_header_operands):
+ omit unused variables.
+
+Fri May 23 08:47:02 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * error.c (exc_equal): == operator should be transitional.
+ [ruby-dev:34808]
+
+ * error.c (syserr_eqq): === should be able to handle delegated
+ objects as well.
+
+Fri May 23 06:15:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (rb_iseq_compile_with_option): get rid of segv.
+
+Fri May 23 02:29:14 2008 Koichi Sasada <ko1@atdot.net>
+
+ * insns.def (opt_gt|ge|lt|le): use values directly to compare.
+
+Fri May 23 01:15:09 2008 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c, eval_intern.h, include/ruby/intern.h, include/ruby/ruby.h,
+ vm.c, vm_core.h, vm_insnhelper.c: remove pointless "const".
+
+Thu May 22 23:45:17 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * compile.c (get_destination_insn, get_next_insn, get_prev_insn):
+ peephole optimization should not ignore ISEQ_ELEMENT_ADJUST.
+
+Thu May 22 20:20:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * marshal.c (check_dump_arg, check_load_arg): check if reentered.
+ [ruby-dev:34802]
+
+Thu May 22 20:14:28 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * iseq.c (iseq_load, iseq_data_to_ary): support
+ ISEQ_TYPE_DEFINED_GUARD.
+
+Thu May 22 19:01:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_get_ruby_level_cfp): moved from eval_intern.h.
+
+ * vm.c (sdr, nsdr): define methods only if VMDEBUG is defined.
+
+Thu May 22 17:18:35 2008 Tanaka Akira <akr@fsij.org>
+
+ * array.c (rb_ary_compact_bang): fix reallocation size.
+
+Thu May 22 15:20:20 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * eval_intern.h, vm_core.h, include/ruby/intern.h, include/ruby/ruby.h,
+ vm.c: need to add const to prototypes, of course.
+
+Thu May 22 13:24:43 2008 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c, vm.c, vm_core.h, vm_insnhelper.c: specify "const".
+
+ * vm_opts.h: add a OPT_TOKEN_THREADED_CODE macro.
+
+Thu May 22 12:51:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * insns.def (newhash): fix a variable definition: "const k".
+
+Thu May 22 12:40:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (flatten): check if reentered. [ruby-dev:34798]
+
+Thu May 22 11:39:59 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/envutil.rb (assert_normal_exit): capture stdout and stderr
+ of the child process.
+
+Thu May 22 08:28:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (flatten): free memo hash table before raising exception.
+ [ruby-dev:34789]
+
+Thu May 22 06:30:10 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * array.c (flatten): fix memory leak.
+
+Thu May 22 06:21:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (nkf_str_caseeql): added.
+
+ * ext/nkf/nkf-utf8/nkf.c (nkf_enc_find_index): use nkf_str_caseeql.
+
+Thu May 22 05:45:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * proc.c (proc_dup): should copy safe_level from src proc
+ properly. a patch from Keita Yamaguchi
+ <keita.yamaguchi at gmail.com>
+
+Thu May 22 02:46:08 2008 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb: do not use Thread#raise. [ruby-dev:34739]
+
+Thu May 22 00:30:06 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_require.rb: new tests for library requiring, to
+ achieve over 90% test coverage of dln.c.
+
+ * test/ruby/test_class.rb: add tests to achieve over 90% test coverage
+ of class.c.
+
+ * test/ruby/test_module.rb: ditto.
+
+Thu May 22 00:15:44 2008 Koichi Sasada <ko1@atdot.net>
+
+ * insns.def, vm_insnhelper.c: specify "const".
+
+Wed May 21 23:20:21 2008 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_eval.rb: fix syntax.
+
+Wed May 21 17:46:17 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (nkf_enc_find_index):
+ use strcasecmp. [ruby-dev:34787]
+
+Wed May 21 16:48:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_compact_bang): avoid forceful realloc.
+
+Wed May 21 07:42:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_usascii_str_new): use rb_str_new.
+
+ * string.c (rb_enc_str_new): ditto.
+
+ * string.c (rb_usascii_str_new2): use rb_str_new2.
+
+Wed May 21 07:22:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c, include/ruby/encoding.h
+ (rb_enc_associate, rb_enc_associate_index):
+ returns obj. [ruby-dev:34778]
+
+Wed May 21 04:20:20 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_ascii8bit_encoding): use ENCINDEX_ASCII.
+
+ * encoding.c, include/ruby/encoding.h (rb_ascii8bit_encindex):
+ added.
+
+ * encoding.c (rb_locale_encoding): use rb_usascii_encoding().
+
+Wed May 21 01:45:58 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_file_exhaustive.rb (setup): workaround for Windows
+ Vista.
+
+ * test/ruby/envutil.rb (rubyexec): now Open3.open3 is supported on
+ Windows.
+
+ * test/ruby/test_process.rb: use ``||'' instead of ``;'' because
+ cmd.exe not support it.
+
+Wed May 21 01:28:47 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c, include/ruby/encoding.h (rb_str_transcode):
+ C API of encoding conversion for Ruby object.
+ VALUE rb_str_transcode(VALUE str, VALUE to).
+
+ * transcode.c (str_encode, str_encode_bang):
+ rename from rb_tr_transcode or rb_str_transcode_bang.
+
+Tue May 20 23:26:05 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_array.rb: fix tests for 64bit CPU.
+
+Tue May 20 20:59:56 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (rb_nkf_convert) (nkf_enc_without_bom):
+ reverted. nkf-utf8/nkf.c should be independent of ruby.
+
+ * ext/nkf/nkf.c (options):
+ moved from nkf-utf8/nkf.c.
+ override nkf's original settings for Unicode BOM.
+
+Tue May 20 13:20:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/nkf/nkf.c (rb_nkf_convert), ext/nkf/nkf-utf8/nkf.c
+ (nkf_enc_without_bom): BOM is not a part of encodings.
+
+ * ext/nkf/nkf.c (Init_nkf), ext/nkf/nkf-utf8/nkf.c (options):
+ UTF-{16,32} without endian have no sense.
+
+Tue May 20 12:13:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options, process_options): --dump option.
+
+Tue May 20 11:36:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (PRI[diouxX]VALUE): printf format for VALUE.
+
+ * gc.c (assign_heap_slot): suppress a warning.
+
+Tue May 20 03:42:43 2008 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c, vm_insnhelper.c: fix cref in instance_eval
+ and cvar_base search protocol.
+
+ * bootstraptest/test_knownbug.rb, test_eval.rb: move solved test
+ and add new tests.
+
+ * test/ruby/test_eval.rb: fix tests for spec.
+
+Tue May 20 01:43:44 2008 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_knownbug.rb: fix a test.
+ "block_given?" returns true if "yield" can be used.
+
+Tue May 20 01:07:19 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (assignable_gen): when "self = 1" was evaluated, unnecessary
+ error message was output, which might cause null pointer access.
+
+Tue May 20 08:38:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_enc_strlen_cr): need to set ENC_CODERANGE_7BIT if
+ search_nonascii() fails. [ruby-dev:34751]
+
+ * string.c (rb_str_reverse): preserve coderange info if the
+ receiver is 7bit string.
+
+ * string.c (rb_str_reverse_bang): ditto.
+
+ * string.c (rb_str_reverse_bang): should have called
+ single_byte_optimizable before rb_str_modify() that clears
+ coderange info.
+
+ * string.c (tr_trans): handle single bytes more eagerly.
+
+Mon May 19 23:32:12 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (invoke_block_from_c): fix call flow.
+
+Mon May 19 23:19:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * regexec.c (slow_search): check the case when the length is 1.
+ The behavior of memcmp is undefined if the third argument is 0.
+
+Mon May 19 21:07:48 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (native_thread_apply_priority):
+ fix argument range check. [ruby-dev:33124]
+
+Mon May 19 18:22:35 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/openssl/ossl_pkcs5.c (ossl_pkcs5_pbkdf2_hmac): Fix the type
+ of md; pointed out by Takahiro Kambe <taca at back-street.net>
+ in [ruby-dev:34748].
+
+Mon May 19 17:23:55 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regparse.c (PINC): use optimized enclen() instead of
+ ONIGENC_MBC_ENC_LEN().
+
+ * regparse.c (PFETCH): ditto.
+
+ * regparse.c (PFETCH): small optimization.
+
+ * regexec.c (slow_search): single byte encoding optimization.
+
+ * regenc.h (enclen): avoid calling function when encoding's
+ min_len == max_len.
+
+ * re.c (rb_reg_regsub): rb_enc_ascget() optimization for single
+ byte encoding.
+
+ * re.c (rb_reg_search): avoid allocating new re_registers if we
+ already have MatchData.
+
+ * re.c (match_init_copy): avoid unnecessary onig_region_free()
+ before onig_region_copy.
+
+ * encoding.c (rb_enc_get_index): remove implicit enc_capable check
+ each time.
+
+ * encoding.c (rb_enc_set_index): ditto.
+
+ * encoding.c (enc_compatible_p): small refactoring.
+
+ * include/ruby/encoding.h (rb_enc_dummy_p): inline
+ rb_enc_dummy_p() and export related code.
+
+Mon May 19 14:32:03 2008 Koichi Sasada <ko1@atdot.net>
+
+ * version.h: fix strange change by version.h update tool.
+
+Mon May 19 14:18:13 2008 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_knownbug.rb: move solved tests.
+
+ * bootstraptest/test_eval.rb, test_literal.rb, test_syntax.rb,
+ test_thread.rb: ditto.
+
+ * test/ruby/test_m17n.rb, test_proc.rb, test_sprintf.rb,
+ test_string.rb, test/ruby/test_struct.rb: ditto.
+
+Mon May 19 13:23:03 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (rb_spawn_internal): 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>
+
+Mon May 19 11:32:47 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c, insns.def, eval.c, vm_insnhelper.c: fix CREF handling.
+ VM value stack frame of block contains cref information.
+ (dfp[-1] points CREF)
+
+ * compile.c, eval_intern.h, eval_method.c, load.c, proc.c,
+ vm_dump.h, vm_core.h: ditto.
+
+ * include/ruby/ruby.h, gc.c: remove T_VALUES because of above
+ changes.
+
+ * bootstraptest/test_eval.rb, test_knownbug.rb: move solved test.
+
+Sun May 18 22:26:51 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::AbstractServlet#redirect_to_directory_uri):
+ should escape the value of Location: header.
+
+ * lib/webrick/httpservlet/cgi_runner.rb: accept interpreter
+ command line arguments.
+
+Sun May 18 02:54:46 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * pack.c (pack_pack): check errno to detect error of ruby_strtoul.
+
+ * pack.c (pack_unpack): ditto.
+
+ * test/ruby/test_pack.rb: add a test for above.
+
+Sat May 17 23:53:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): fix for short file name on Cygwin.
+
+Sat May 17 18:03:52 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * vm.c (Init_VM): removed the definition of Thread#initialize,
+ which is overwritten in Init_Thread and is never used.
+
+Sat May 17 14:01:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_sort_bang): should not free shared pointer, and set
+ shared. [ruby-dev:34732]
+
+Sat May 17 12:34:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * thread_pthread.c (Init_native_thread): Kernel#.sleep used never to
+ sleep on Mac OS X. Reported by arton <artonx AT yahoo.co.jp>.
+
+ * thread_pthread.c (native_sleep): added error checks.
+
+Sat May 17 11:29:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_extname): first dot is not an extension name.
+
+Sat May 17 03:21:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_sort_bang): stop memory leak. [ruby-dev:34726]
+
+ * re.c (rb_reg_search): need to free allocated buffer in re_register.
+
+ * regexec.c (onig_region_new): more pedantic malloc check.
+
+ * regexec.c (onig_region_resize): ditto.
+
+ * regexec.c (STATE_CHECK_BUFF_INIT): ditto.
+
+ * regexec.c (onig_region_copy): use onig_region_resize.
+
+Fri May 16 12:48:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * math.c (to_flo): rb_Float() accepts even strings for input.
+
+ * complex.c (nucomp_to_f): fix wrong message.
+
+ * complex.c (nucomp_to_r): ditto.
+
+ * object.c (rb_Float): do not check NaN for error. NaN is a part
+ of valid float values.
+
+Thu May 15 23:36:09 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_string.rb: add tests to achieve over 90% test
+ coverage of string.c.
+
+ * test/ruby/test_m17n.rb: ditto.
+
+ * test/ruby/test_symbol.rb: ditto.
+
+ * test/ruby/test_pack.rb: ditto.
+
+Thu May 15 23:01:06 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * string.c (tr_find): String#delete returned wrong result when multiple
+ utf-8 arguments are passed.
+
+ * test/ruby/test_m17n.rb (test_delete): add a test for above.
+
+Thu May 15 22:37:56 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y (ripper_warningS): now used.
+
+Thu May 15 15:33:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): support for alternative data stream
+ and ignored trailing garbage of NTFS.
+
+ * file.c (rb_file_s_basename): ditto.
+
+ * file.c (rb_file_s_extname): ditto.
+
+Thu May 15 13:43:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_cstr_to_dbl): no need for forceful warning when
+ converting to float. overflow is a nature of float values.
+
+ * parse.y (parser_yylex): ditto.
+
+Thu May 15 13:23:20 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_prepare_enc): error condition was updated for non
+ ASCII compatible strings.
+
+Thu May 15 12:19:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/openssl/openssl_missing.c (HMAC_CTX_copy): adopted
+ prototype change in openssl bundled with newer OpenBSD.
+ a patch from Takahiro Kambe <taca at back-street.net> in
+ [ruby-dev:34691].
+
+Wed May 14 22:09:25 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * ChangeLog: fix typo.
+
+Wed May 14 21:49:14 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_object.rb: new tests to achieve over 90% test
+ coverage of object.c, eval.c and eval_method.c.
+
+ * test/ruby/test_module.rb: ditto.
+
+ * test/ruby/test_trace.rb: ditto.
+
+ * test/ruby/test_integer.rb: ditto.
+
+ * test/ruby/test_float.rb: ditto.
+
+ * test/ruby/test_method.rb: ditto.
+
+ * test/ruby/test_variable.rb: ditto.
+
+ * test/ruby/test_eval.rb: ditto.
+
+ * test/ruby/test_exception.rb: ditto.
+
+ * test/ruby/test_class.rb: ditto.
+
+Wed May 14 12:46:37 2008 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c (insn_operand_intern): remove Qundef related code.
+
+Wed May 14 12:42:36 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * array.c (rb_ary_count): Override Enumerable#count for better
+ performance.
+
+Wed May 14 11:29:06 2008 Koichi Sasada <ko1@atdot.net>
+
+ * insns.def: add a "putcbase" instruction.
+
+ * compile.c, insns.def: fix to use putcbase instruction for
+ class search. Qundef should not be used.
+
+Wed May 14 07:49:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_call0): defer calling of rb_frame_self() until it
+ become really necessary.
+
+ * eval.c (rb_call): ditto.
+
+Wed May 14 00:55:56 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_io_m17n.rb: remove a duplicative method.
+
+ * test/ruby/test_utf16.rb: rename a conflicting method name.
+
+ * test/ruby/test_array.rb: ditto.
+
+ * test/ruby/test_file_exhaustive.rb: ditto.
+
+ * test/ruby/test_hash.rb: ditto.
+
+ * test/ruby/test_env.rb: ditto.
+
+ * test/ruby/test_fixnum.rb: ditto.
+
+ * test/ruby/test_rational.rb: ditto.
+
+Wed May 14 00:45:58 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * eval_method.c (rb_add_method): fix check for warning when
+ Object#initialize is redefined. (same as 1.8)
+
+Tue May 13 23:32:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enum.c (enum_yield): use rb_yield_values2.
+
+ * enum.c (DEFINE_ENUMFUNCS): macro to define enumerator and yielding
+ functions.
+
+ * enum.c (enum_all_func, enum_any_func, enum_one_func,
+ enum_none_func): reduced duplicate code.
+
+Tue May 13 15:09:38 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c: Update rdoc.
+ (enumerator_initialize): Discourage the use.
+ (enum_each_slice, enum_each_cons, enumerator_each)
+ (enumerator_with_index): Add a note about a call without a block.
+
+Tue May 13 08:25:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_f_gets): re-enable rdoc.
+ (rb_f_readline): ditto.
+ (rb_f_readlines): ditto.
+
+Tue May 13 07:56:36 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]
+
+Mon May 12 23:37:57 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm.c (collect_local_variables_in_env): remove unnecessary check
+ which causes: x=1;proc{local_variables}.call #=> []
+
+ * test/ruby/test_variable.rb: add a test for above.
+
+Mon May 12 23:05:24 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c, include/ruby/intern.h (rb_run_exec_options): externed.
+
+ * process.c (save_redirect_fd, save_env_i, save_env, run_exec_dup2,
+ run_exec_open, run_exec_pgroup, run_exec_rlimit, rb_run_exec_options):
+ save parent's process environments.
+
+ * process.c (rb_spawn_internal): remove calling run_exec_options()
+ because cannot restore after spawn.
+
+ * io.c (pipe_open): ditto.
+
+ * test/ruby/test_process.rb (test_execopts_env): upcase environment
+ variable name for case insensitive platforms.
+
+ * win32/win32.c (init_env): set USER environment variable only when
+ USERNAME is available.
+
+Mon May 12 22:23:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/date.rb (once): use Object#object_id instead of Symbol#to_i.
+
+Mon May 12 21:34:46 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/envutil.rb (rubybin): return expanded rubyexe instead of
+ expanded ruby if available.
+
+Mon May 12 20:19:55 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enum.c (grep_i): Be aware of multiple values;
+ fix [ruby-dev:34653].
+ (grep_iter_i): Ditto.
+ (count_i): Ditto.
+ (find_i): Ditto.
+ (find_index_i): Ditto.
+ (find_all_i): Ditto.
+ (reject_i): Ditto.
+ (inject_i): Ditto.
+ (inject_op_i): Ditto.
+ (partition_i): Ditto.
+ (group_by_i): Ditto.
+ (first_i): Ditto.
+ (sort_by_i): Ditto.
+ (all_i): Ditto.
+ (all_iter_i): Ditto.
+ (any_i): Ditto.
+ (any_iter_i): Ditto.
+ (one_i): Ditto.
+ (one_iter_i): Ditto.
+ (none_i): Ditto.
+ (none_iter_i): Ditto.
+ (min_i): Ditto.
+ (min_ii): Ditto.
+ (max_i): Ditto.
+ (max_ii): Ditto.
+ (minmax_i): Ditto.
+ (minmax_ii): Ditto.
+ (min_by_i): Ditto.
+ (max_by_i): Ditto.
+ (minmax_by_i): Ditto.
+ (member_i): Ditto.
+ (take_i): Ditto.
+ (take_while_i): Ditto.
+ (drop_i): Ditto.
+ (drop_while_i): Ditto.
+ (cycle_i): Ditto.
+
+ * enum.c (each_with_index): Update rdoc. each_with_index() takes
+ arguments that are passed through to each(), and a hash preserves
+ key order.
+
+Mon May 12 19:05:24 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (rb_spawn_internal): remove calling run_exec_options()
+ because cannot restore after spawn. we'll fix this later.
+
+Mon May 12 18:16:44 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (rb_spawn_internal): need to call run_exec_options() before
+ spawn if the platform doesn't have fork. [ruby-dev:34647]
+
+Mon May 12 15:20:02 2008 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (ruby_vm_xmalloc): increase malloc_increase only if malloc
+ succeeds. failed malloc size can be huge. it may increase
+ malloc_limit too big which cause less GC and memory full.
+ (ruby_vm_xrealloc): ditto.
+ (rb_objspace): make params.limit and params.increase size_t.
+
+Mon May 12 15:04:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_prepare_re): made non static with small refactoring.
+
+ * ext/strscan/strscan.c (strscan_do_scan): should adjust encoding
+ before regex searching.
+
+Mon May 12 13:57:19 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]
+
+Mon May 12 13:29:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (bigzero_p): check from MSB to LSB. [ruby-dev:34649]
+
+Mon May 12 12:32:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (RUBYOPT): affected BASERUBY too. [ruby-talk:301514]
+
+Mon May 12 12:27:55 2008 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (assign_heap_slot): fix condition for number of objects in
+ a heap.
+
+Mon May 12 12:24:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (sym_to_i): really removed. [ruby-dev:34641]
+
+Mon May 12 11:15:55 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
+
+ * gc.c (assign_heap_slot): put the binary search routine in order.
+
+Mon May 12 10:52:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (ruby_init_gems), gem_prelude.rb: check if Gem is defined
+ instead of Gem::Enable.
+
+ * gem_prelude.rb (load_full_rubygems_library, const_missing): prevent
+ infinite recursion. [ruby-dev:34539]
+
+Sun May 11 23:19:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enum.c (all_iter_i, any_iter_i): reduced duplicated code.
+
+Sun May 11 22:54:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bootstraptest/runner.rb (main): leave -I options for purelib.rb
+ untouched.
+
+ * bootstraptest/runner.rb (main): handle relative path -r options.
+
+Sun May 11 19:04:06 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_thread.rb: kill and join temporal threads that are
+ created in each test.
+
+Sun May 11 17:58:45 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_process.rb (TestProcess#with_stdin): defined.
+ (TestProcess#test_argv0_noarg): don't use redirect_fds.
+ [ruby-dev:34647]
+
+Sun May 11 17:57:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (MINIRUBY): should not include extension library path.
+
+Sun May 11 14:40:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (SIZET2NUM): new macro.
+ (NUM2SIZET): new macro.
+
+ * gc.c (struct rb_objspace): use size_t for increment, length and
+ used for 64bit.
+ (allocate_heaps): ditto.
+ (assign_heap_slot): ditto.
+ (set_heaps_increment): ditto.
+ (gc_mark_all): ditto.
+ (is_pointer_to_heap): ditto.
+ (free_unused_heaps): ditto.
+ (gc_sweep): ditto.
+ (os_obj_of): ditto.
+ (rb_gc_call_finalizer_at_exit): ditto.
+ (count_objects): ditto.
+
+Sun May 11 13:14:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * thread.c (thread_cleanup_func_before_exec): extracted from
+ thread_cleanup_func not to touch pthread data.
+ pthread_cond_destroy in forked process may cause deadlock on
+ Debian GNU/Linux Etch on x86, x86-64 and IA64.
+ this doesn't cause resource leak because the process will exec soon.
+ (terminate_atfork_before_exec_i): defined.
+ (rb_thread_atfork_before_exec): defined.
+
+ * include/ruby/intern.h (rb_thread_atfork_before_exec): declared.
+
+ * process.c (rb_exec_atfork): call rb_thread_atfork_before_exec
+ instead of rb_thread_atfork.
+
+ * io.c (popen_exec): call rb_thread_atfork_before_exec instead of
+ rb_thread_atfork.
+
+Sat May 10 22:14:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (tr_trans): single '^' does not mean negation.
+ [ruby-dev:34632]
+
+ * string.c (tr_trans): should check src size, not str size.
+ [ruby-dev:34637]
+
+ * string.c (tr_trans): should not turn on modify flag if no
+ modification happens. [ruby-dev:34631]
+
+Sat May 10 18:11:18 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_each_line): zero length record separator should
+ split a string into paragraphs. [ruby-dev:34586]
+
+ * string.c (rb_str_each_line): RDoc updated.
+
+Sat May 10 11:36:20 2008 Tanaka Akira <akr@fsij.org>
+
+ * vm.c (env_mark): mark env->block.self. prevent SEGV when GC occur
+ in prepare_iseq_build with gcc version 3.4.6 [FreeBSD] 20060305 on
+ FreeBSD/amd64.
+
+Fri May 9 19:16:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (timeofday): use monotonic clock. based on a patch
+ from zimbatm <zimbatm at oree.ch> in [ruby-core:16627].
+
+Fri May 9 07:47:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * cont.c (cont_restore_0): dynamic stack direction code should be
+ consistent with static one. [ruby-talk:301152]
+
+Fri May 9 00:03:50 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): operator assignment "a += b rescue c" should be
+ parsed as "a += (b rescue c)" just like normal assignment.
+ [ruby-talk:301000]
+
+Thu May 8 18:14:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_and): bit-wise operation should not take float
+ values. [ruby-dev:34612]
+
+ * bignum.c (rb_big_or): ditto.
+
+ * bignum.c (rb_big_xor): ditto.
+
+Thu May 8 17:44:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk, ext/extmk.rb, lib/mkmf.rb: use absolute path for RUBYOPT.
+
+ * file.c (rb_find_file_ext): guard load_path from GC.
+ gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) optimizes
+ load_path by holding only RARRAY_LEN(load_path) and
+ RARRAY_PTR(load_path) in registers on IA64 GNU/Linux Etch.
+
+Thu May 8 16:41:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (MINIRUBY), common.mk (RUBYOPT): add purelib.rb.
+ [ruby-core:16642]
+
+Thu May 8 16:00:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (parser_yylex): ! and ? at the bottom are no longer part
+ of valid symbol names. [ruby-dev:34590]
+
+Thu May 8 15:36:11 2008 Tanaka Akira <akr@fsij.org>
+
+ * thread.c (rb_gc_save_machine_context): call FLUSH_REGISTER_WINDOWS
+ to mark the register stack from GC on another thread.
+
+Thu May 8 15:14:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_sort_bang): freeze temporary array.
+
+Thu May 8 13:19:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (rb_thread_mark): mark stat_insn_usage only when ptr is not
+ null.
+
+Thu May 8 10:44:04 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (sort_reentered): reentered check may be called from
+ Array#sort.
+
+Thu May 8 09:51:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (sort_1, sort_2): check for reentered and if elements are
+ accessible. [ruby-core:16679]
+
+Thu May 8 06:43:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (dln_find_exe_r, dln_find_file_r): reentrant versions.
+
+ * file.c (rb_find_file_ext, rb_find_file), process.c (proc_exec_v),
+ (rb_proc_exec, proc_spawn_v, proc_spawn), ruby.c (process_options):
+ use reentrant versions.
+
+Thu May 8 06:27:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_key_p): thread local storage stores ID.
+
+Thu May 8 01:10:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (tr_trans): should squeeze properly. [ruby-dev:34587]
+
+ * string.c (tr_trans): had a bug in treating multi-byte character
+ replacement.
+
+ * string.c (rb_str_delete_bang): need not to do anything for empty
+ strings.
+
+ * test/ruby/test_m17n_comb.rb (TestM17NComb::test_str_delete): add
+ test for empty receiver.
+
+Wed May 7 20:19:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ruby.c (process_options, ruby_set_argv): set encoding of rb_argv
+ after Init_prelude() because cannot load encoding extensions before
+ it.
+
+Wed May 7 20:00:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (bit_coerce): float should not be a valid operand of
+ bitwise operations. [ruby-dev:34583]
+
+Wed May 7 19:35:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (rb_thread_key_p): should always convert symbol to ID.
+ [ruby-dev:34588]
+
+Wed May 7 19:30:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (fix_divide): float division should floor() before
+ rounding into integer. [ruby-dev:34584]
+
+Wed May 7 18:02:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (sym_to_i): remove obsolete method. preparation for
+ symbol GC.
+
+ * numeric.c (fix_to_sym): ditto.
+
+ * numeric.c (fix_id2name): ditto.
+
+Wed May 7 17:43:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_puts_ary): check recursion first. [ruby-dev:34580]
+
+Wed May 7 17:41:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm.c (vm_eval_body): initialize retval. [ruby-dev:34576]
+
+Wed May 7 13:02:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_fdiv): flo.fdiv(NaN) should result NaN.
+
+ * numeric.c (num_quo): renamed and moved from bignum.c.
+ [ruby-dev:34582]
+
+ * bignum.c (rb_big_fdiv): update RDoc description
+
+ * rational.c (nurat_s_new_m): small refactoring.
+
+ * bignum.c (rb_big2dbl): no need for forceful warning when
+ converting to float. overflow is a nature of float values.
+
+Wed May 7 00:54:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/zlib/zlib.c (gzreader_gets): may cause infinite loop.
+ a patch from Kouya <kouyataifu4 at gmail.com> in
+ [ruby-reference-manual:762].
+
+Tue May 6 02:08:18 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/io/nonblock/test_flush.rb: don't set Thread.abort_on_exception.
+
+ * test/net/imap/test_imap.rb: ensure disconnecting imap to terminate
+ receiver thread.
+
+Tue May 6 00:29:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * iseq.c (insn_operand_intern): should handle Qundef embedded in
+ operand. [ruby-core:16656]
+
+Tue May 6 00:00:02 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): should call compile_cpath() for
+ modules as well. [ruby-dev:34585]
+
+ * insns.def (defineclass): add undef handling.
+
+Mon May 5 23:49:40 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * insns.def (defineclass): was using wrong variable. [ruby-dev:34592]
+
+Mon May 5 20:07:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_fflush): IO#flush problem within threads. a patch from
+ <s.wanabe at gmail.com> in [ruby-dev:34595].
+
+Mon May 5 19:58:44 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * compile.c (defined_expr): protect some expression from
+ segmentation fault. a patch from wanabe <s.wanabe at gmail.com>
+ in [ruby-dev:34593].
+
+Mon May 5 19:49:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * struct.c (rb_struct_s_def): Struct.new(0) should not SEGV.
+ based on the patch from wanabe <s.wanabe at gmail.com> in
+ [ruby-dev:34594].
+
+ * struct.c (make_struct): call to_str on name object.
+
+Mon May 5 17:17:40 2008 Tanaka Akira <akr@fsij.org>
+
+ * eval.c (ruby_cleanup): wrap ruby_finalize_0 by SAVE_ROOT_JMPBUF to
+ avoid SEGV by at_exit { Fiber.new{}.resume } on IA64.
+
+Mon May 5 12:12:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_slice_bang): should adjust length before making
+ sub-array.
+
+Mon May 5 11:36:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_dup): should dupe corresponding information.
+ [ruby-dev:34581]
+
+Mon May 5 11:13:50 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * compile.c (compile_cpath): use Qundef to denote cbase lookup.
+
+ * insns.def (defineclass): Qundef is passed for cbase.
+
+ * insns.def (setconstant): ditto.
+
+ * vm_insnhelper.c (vm_check_if_namespace): use rb_inspect()
+ instead of rb_obj_as_string() for better description.
+
+Mon May 5 02:10:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (set_heaps_increment): fix memory allocation strategy by
+ determining heaps_inc from heaps_used, not objects_delta.
+ (struct rb_objspace): delta removed. change increment, length and
+ used to long for LP64.
+ (objects_delta): removed.
+ (allocate_heaps): add next_heaps_length argument.
+ (init_heap): renamed from add_heap.
+ (garbage_collect): use heaps_increment in dont_gc.
+
+Sun May 4 21:09:32 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/getoptlong.rb: use $stderr instead of $deferr.
+
+Sun May 4 16:04:28 2008 Tanaka Akira <akr@fsij.org>
+
+ * time.c (obj2nsec): fix string argument.
+
+Sun May 4 14:29:14 2008 Tanaka Akira <akr@fsij.org>
+
+ * eval.c (rb_obj_respond_to): check the result of respond_to? method
+ by RTEST.
+
+Sun May 4 12:57:58 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_each_line): return original string.
+
+Sat May 3 20:57:06 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/envutil.rb (Test::Unit::Assertions#assert_normal_exit):
+ new method.
+
+Sat May 3 18:10:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * time.c (time_timespec): raise TypeError for nil and other objects
+ which has no divmod method.
+
+Fri May 2 23:59:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (internal_read_func, internal_write_func): split from
+ internal_io_func.
+
+Fri May 2 23:55:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * variable.c (rb_define_hooked_variable): guard *var from GC to
+ prevent collecting argf under RUBY_DEBUG=gc_stress.
+
+Fri May 2 17:29:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_step): call to_int if step is not a numeric
+ value. [ruby-dev:34575]
+
+Fri May 2 16:10:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_step): do not forcefully convert steps into
+ integers. [ruby-dev:34571]
+
+Fri May 2 14:52:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * misc/ruby-mode.el: move fontifying code from hook. a patch from
+ Phil Hagelberg <phil at hagelb.org> in [ruby-core:16636].
+
+Fri May 2 14:10:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_step): step may be bignum.
+
+Fri May 2 13:52:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (Init_Regexp): remove MatchData#select. [ruby-dev:34563]
+
+Thu May 1 23:59:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (rb_big_divide), numeric.c (fix_divide): check for result
+ domain. [ruby-dev:34559]
+
+Thu May 1 23:57:06 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/net/telnet.rb: This patch from Brian Candler adds a FailEOF mode which
+ can be activated to have net/telnet raise EOFError exceptions when the
+ remote connection is closed. The default behavior remains unchanged though.
+
+Thu May 1 23:43:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * range.c (range_step): check if step can be converted to an integer.
+ [ruby-dev:34558]
+
+ * range.c (range_step): allow float step bigger than zero but less
+ than one. [ruby-dev:34557]
+
+Thu May 1 23:20:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (rb_big_divide): return an integer for idiv.
+ [ruby-dev:34553]
+
+Thu May 1 20:47:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_s_create): should access converted hash value.
+ [ruby-dev:34555]
+
+Thu May 1 20:31:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_parse.rb (TestParse::test_void_expr_stmts_value):
+ shut up warning.
+
+ * rational.c (nurat_to_f): no need for forceful warning when
+ converting to float. overflow is a nature of float values.
+
+Thu May 1 16:10:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (env_delete_if): return enumerator if no block given.
+ [ruby-dev:34554]
+
+Wed Apr 30 21:36:40 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * lib/erb.rb (url_encode): [ruby-dev:34497] ERB::Util#url_encode
+ bug fix. Reported by rubikitch.
+
+ * test/erb/test_erb.rb: ditto
+
+Wed Apr 30 20:11:36 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * 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.
+
+Wed Apr 30 18:03:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_load_path), vm_core.h (rb_vm_t): moved to VM.
+
+ * load.c (rb_get_load_path): returns absolute load path.
+
+ * load.c (load_path_getter): $LOAD_PATH getter.
+
+ * file.c (rb_find_file_ext, rb_find_file), ruby.c (push_include,
+ ruby_init_loadpath): use the accessor.
+
+ * vm.c (rb_vm_mark): mark load_path.
+
+Wed Apr 30 17:47:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * re.c (rb_reg_search): use local variable. a patch from wanabe
+ <s.wanabe AT gmail.com> in [ruby-dev:34537]. [ruby-dev:34492]
+
+Wed Apr 30 16:10:18 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * eval_intern.h: specify the values of the enumeration constants
+ explicitly. [ruby-dev:34489]
+
+Wed Apr 30 12:32:39 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (check_exec_redirect_fd): prohibit duplex IO.
+ (check_exec_fds): record maxhint even if close_others is not
+ specified.
+ (rb_exec_arg_fixup): renamed from rb_exec_arg_fix.
+
+Mon Apr 28 20:24:27 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_marshal_load): checks the given
+ denominator. [ruby-dev:34536]
+
+Mon Apr 28 14:21:18 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (POSFIXABLE): use FIXNUM_MAX+1 instead of
+ FIXNUM_MAX to make it possible to convert to double accurately on
+ environments with 64bit VALUE and 64bit double.
+ It assumes FLT_RADIX is 2.
+ fix RubyForge bug #14102.
+
+Mon Apr 28 12:48:57 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * process.c (rb_exec_arg_addopt, rb_exec_arg_addopt): now can specify
+ close_exec on having no fork environment (but still meaningless).
+
+Mon Apr 28 11:11:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (run_exec_options): don't call FIX2INT for nil.
+
+Mon Apr 28 11:11:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * proc.c (method_name): should return symbols instead of strings.
+ [ruby-dev:34531]
+
+Mon Apr 28 09:02:43 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_exec_arg_init): declared.
+ (rb_exec_arg_addopt): declared.
+ (rb_exec_arg_fix): declared.
+ (rb_exec_initarg): removed.
+ (rb_exec_getargs): removed.
+ (rb_exec_initarg2): removed.
+
+ * io.c (struct popen_arg): make execarg as a pointer.
+ (popen_exec): follow popen_arg change.
+ (pipe_open): add eargp argument. extract argc and argv from eargp.
+ use rb_exec_arg_addopt to add redirect options.
+ (pipe_open_v): set up struct rb_exec_arg.
+ (pipe_open_s): set up struct rb_exec_arg.
+
+ * process.c (rb_exec_arg_addopt): new function extracted from
+ check_exec_options_i.
+ (check_exec_options_i): use rb_exec_arg_addopt.
+ (rb_check_exec_options): opthash is always a hash now.
+ (rb_exec_getargs): make it static.
+ (rb_exec_fillarg): renamed from rb_exec_initarg2. don't set up
+ redirect_fds.
+ (rb_exec_arg_init): new function.
+ (rb_exec_arg_fix): new function.
+ (rb_f_exec): use rb_exec_arg_init and rb_exec_arg_fix. use
+ rb_exec_arg_addopt to set close_others option.
+ (run_exec_options): make close_others by default.
+ (rb_spawn_internal): use rb_exec_arg_init and rb_exec_arg_fix. use
+ rb_exec_arg_addopt to set close_others option.
+
+Sun Apr 27 18:59:04 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_expt): use f_rational_new2. [ruby-dev:34524]
+
+Sun Apr 27 15:23:40 2008 Koichi Sasada <ko1@atdot.net>
+
+ * gc.c (gc_count): add a GC.count method. This method returns
+ a GC invoking count.
+
+Sun Apr 27 12:20:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (rb_vm_t), gc.c (rb_objspace, rb_newobj), vm.c
+ (Init_BareVM): per-VM object space support, which is disabled now.
+
+ * gc.c (rb_objspace_alloc), vm.c (Init_BareVM): should not use ruby
+ malloc here.
+
+ * gc.c (garbage_collect, etc): performance improvement by passing the
+ reference instead of referring the global variable in each functions.
+
+Sun Apr 27 08:06:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ruby.c (ruby_set_argv): ARGV should be locale encoding.
+ [ruby-list:44861]
+
+Sun Apr 27 01:46:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open3.rb (Open3.popen3w): removed.
+ (Open3.popen3): notice wait_thr.
+
+Sun Apr 27 01:13:05 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc, test/rdoc: Update to RDoc 2.0.0 r56.
+
+Sat Apr 26 21:30:40 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_hash_dup): declared.
+
+ * hash.c (rb_hash_dup): new function.
+
+ * process.c (rb_spawn_internal): don't modify option hash.
+
+Sat Apr 26 18:36:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c, signal.c, thread.c, thread_win32.c, include/ruby/intern.h:
+ suppress warnings.
+
+Sat Apr 26 17:42:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (builtin_types), gc.c (count_objects): added Complex and
+ Rational.
+
+Sat Apr 26 17:35:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (rb_eNOERROR): renamed.
+
+Sat Apr 26 17:30:11 2008 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h, gc.c: remove T_BLOCK.
+
+ * include/ruby/ruby.h: re-number T_xxx.
+
+Sat Apr 26 17:31:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_cProcessTms, rb_cProcessStatus): renamed.
+
+ * error.c (builtin_types), signal.c (siglist), st.c (primes),
+ struct.c (ref_func), time.c (months): constified.
+
+Sat Apr 26 13:00:41 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open3.rb: double fork is replaced by spawn with Process.detach.
+ (Open3.popen3w): new method to access the thread returned by
+ Process.detach.
+
+Sat Apr 26 00:47:43 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rb_spawn_internal): new function to specify
+ default_close_others.
+ (rb_spawn): specify default_close_others true.
+ (rb_f_system): call rb_spawn_internal with default_close_others as
+ false.
+
+Sat Apr 26 12:26:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_each): use INT2FIX() for fixnum values.
+
+Fri Apr 25 17:56:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (free_unused_heaps): preserve last used heap segment to
+ reduce malloc() call.
+
+Fri Apr 25 17:54:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (HEAP_SIZE): use smaller heap segment (2K) for more chance
+ to be freed. based on patch from authorNari <authornari at gmail.com>.
+
+ * gc.c (rb_newobj_from_heap): eventually allocate heap segments.
+
+Fri Apr 25 15:35:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * process.c (rb_spawn): rb_exec_initarg() returns new argc and argv in
+ earg.
+
+Fri Apr 25 12:37:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (flatten): returns an instance of same class.
+ [ruby-core:16554]
+
+Fri Apr 25 10:52:27 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * include/ruby/win32.h: define mode_t for umask.
+
+ * process.c (check_exec_options_i, check_exec_fds, run_exec_options):
+ support "close_others" only when fork(2) is available.
+
+Fri Apr 25 00:16:11 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c: include sys/stat.h for umask.
+
+Thu Apr 24 23:25:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_env_clear): declared.
+ (rb_io_mode_modenum): declared.
+ (rb_close_before_exec): declared.
+ (struct rb_exec_arg): add options and redirect_fds field.
+ (rb_check_argv): removed.
+ (rb_exec_initarg): declared.
+ (rb_exec_getargs): declared.
+ (rb_exec_initarg2): declared.
+ (rb_fork): add third argument: fds.
+
+ * io.c (max_file_descriptor): new static variable to record maximum
+ file descriptor ruby used.
+ (UPDATE_MAXFD): new macro.
+ (UPDATE_MAXFD_PIPE): new macro.
+ (rb_io_mode_modenum): externed.
+ (rb_sysopen): update max_file_descriptor.
+ (rb_close_before_exec): new function.
+ (popen_exec): redirection removed because it is done by extended
+ spawn mechanism.
+ (pipe_open): generate a hash for spawn options to specify
+ redirections.
+ (pipe_open_v): use rb_exec_getargs.
+ (pipe_open_s): use rb_exec_getargs.
+ (rb_io_initialize): update max_file_descriptor.
+
+ * process.c (hide_obj): new function.
+ (check_exec_redirect_fd): new function.
+ (check_exec_redirect): new function.
+ (check_exec_options_i): new function.
+ (check_exec_fds): new function.
+ (rb_check_exec_options): new function.
+ (check_exec_env_i): new function.
+ (rb_check_exec_env): new function.
+ (rb_exec_getargs): new function.
+ (rb_exec_initarg2): new function.
+ (rb_exec_initarg): new function.
+ (rb_f_exec): use rb_exec_initarg.
+ (intcmp): new function.
+ (run_exec_dup2): new function.
+ (run_exec_close): new function.
+ (run_exec_open): new function.
+ (run_exec_pgroup): new function.
+ (run_exec_rlimit): new function.
+ (run_exec_options): new function.
+ (rb_exec): call run_exec_options.
+ (move_fds_to_avoid_crash): new function.
+ (pipe_nocrash): new function.
+ (rb_fork): use pipe_nocrash to avoid file descriptor conflicts.
+ (rb_spawn): use rb_exec_initarg.
+ (rlimit_resource_name2int): extracted from rlimit_resource_type.
+ (rlimit_type_by_hname): new function.
+ (rlimit_type_by_lname): new function.
+ (rlimit_resource_type): use rlimit_type_by_hname.
+ (proc_daemon): add fds argument for rb_fork.
+
+ * hash.c (rb_env_clear): renamed from env_clear and externed.
+
+ [ruby-dev:34086]
+
+Thu Apr 24 23:00:58 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_thread.rb: fix typos.
+
+ * test/ruby/envutil.rb (rubyexec): move Open3.popen3 call into timeout
+ block.
+
+Thu Apr 24 22:34:52 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_comparable.rb: new tests for Comparable, to achieve
+ 100% test coverage of compar.c.
+
+Thu Apr 24 17:19:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (process_options): set safe_level before loading script.
+ [ruby-dev:34421]
+
+Thu Apr 24 14:15:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dln.c (dln_find_1): prior files with extensions to files sans
+ extensions. [ruby-core:16517]
+
+Thu Apr 24 00:26:06 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/rdoc/ri/descriptions.rb: fixed wrong class nestings.
+
+Thu Apr 24 00:20:01 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_settracefunc.rb: add a test for set_trace_func.
+
+ * test/ruby/envutil.rb: move "rubyexec" method from test_rubyoptions.rb.
+
+ * test/ruby/test_rubyoptions.rb: use rubyexec in envutil.rb.
+
+ * test/ruby/test_thread.rb: add tests to achieve over 90% test coverage
+ of thread.c.
+
+Wed Apr 23 15:28:52 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/gdbm/test_gdbm.rb (TestGDBM#test_s_open_no_create): failed
+ notice moved from comment to assertion message. [ruby-dev:29127]
+
+Wed Apr 23 11:49:54 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/set.rb (Set#each, SortedSet#each, TC_Set#test_each): Return
+ an enumerator if no block is given.
+
+Wed Apr 23 00:36:03 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/openssl/test_ssl.rb (start_server): add timeout to server.join.
+
+Wed Apr 23 00:18:45 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_symbol.rb (TestSymbol#test_to_proc): Improve
+ tests of Symbol#to_proc.
+
+Tue Apr 22 22:40:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/drb/drb.rb (DRb::DRbServer::check_insecure_method): should
+ check method names by symbols, not by strings. a patch from
+ Kazuhiro NISHIYAMA <zn at mbf.nifty.com> in [ruby-dev:34487].
+
+Tue Apr 22 22:15:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-style.el (ruby-style-{case,label}-indent): up list from
+ indentation point.
+
+Tue Apr 22 21:09:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (score_table_A0, score_table_F0):
+ type of content is unsigned char.
+
+ * ext/nkf/nkf-utf8/nkf.c (push_broken_buf): 'c' is nkf_char.
+
+ * ext/nkf/nkf-utf8/nkf.c (push_broken_buf): enc is 0 or pointer.
+
+ * ext/nkf//nkf.c (options): type of option is unsigned char.
+
+Tue Apr 22 20:51:58 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (z_conv): characters must be nkf_char.
+
+Tue Apr 22 19:23:05 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c (enumerator_initialize): Remove an undocumented
+ feature (passing a block to the constructor) that's broken.
+ This is not what I intended.
+
+Tue Apr 22 17:54:05 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * vm_core.h (exec_event_hooks): ``inline'' is a type modifier, not
+ a type itself.
+
+Tue Apr 22 16:24:27 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * string.c (rb_enc_cr_str_buf_cat): do not use C++ comments.
+
+Tue Apr 22 16:23:53 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * configure.in: use AC_USE_SYSTEM_EXTENSIONS.
+
+Tue Apr 22 16:23:16 2008 URABE Shyouhei <shyouhei@ruby-lang.org>
+
+ * vm_evalbody.c (DECL_SC_REG): use __asm__ instead.
+
+Tue Apr 22 16:18:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_evalbody.c (DECL_SC_REG): typo fixed.
+
+Tue Apr 22 15:25:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (struct timespec): needs time.h according to POSIX.
+
+Tue Apr 22 13:19:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (rb_thread_stop_timer_thread): should clear
+ timer_thread_id after stopping it.
+
+Tue Apr 22 13:12:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_join): remove the current thread from the join list
+ of the target thread.
+
+Tue Apr 22 12:03:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_get_ev_const): search from the base klass if it
+ is given.
+
+Tue Apr 22 09:58:13 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/win32ole/win32ole.c: avoid warnings.
+
+Tue Apr 22 09:56:51 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * file.c (eaccess): workaround for recent msvcrt's behavior.
+ [ruby-core:16460]
+
+Mon Apr 21 19:08:32 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (copy_stream_body): call rb_io_check_readable and
+ rb_io_check_writable.
+
+Mon Apr 21 17:45:27 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ext/dbm/dbm.c (fdbm_each_value, fdbm_each_key, fdbm_each_pair):
+ GDBM#{each,each_pair,each_key,each_value}: Return an enumerator
+ if no block is given.
+
+ * ext/gdbm/gdbm.c (fgdbm_each_value, fgdbm_each_key,
+ fgdbm_each_pair): GDBM#{each,each_pair,each_key,each_value}:
+ Return an enumerator if no block is given.
+
+ * ext/openssl/ossl_config.c (ossl_config_each):
+ OpenSSL::Config#each: Return an enumerator if no block is given.
+
+ * ext/readline/readline.c (hist_each): Readline::HISTORY#each:
+ Return an enumerator if no block is given.
+
+ * ext/sdbm/init.c (fsdbm_each_value, fsdbm_each_key,
+ fsdbm_each_pair): SDBM#{each,each_pair,each_key,each_value}:
+ Return an enumerator if no block is given.
+
+ * ext/stringio/stringio.c (strio_each_byte, strio_each):
+ StringIO#{each,each_line,each_byte}: Return an enumerator if no
+ block is given.
+
+ * ext/stringio/stringio.c (Init_stringio): Add #lines and #bytes,
+ which are aliases to #each_line and #each_byte, respectively.
+
+ * ext/win32ole/win32ole.c (fole_each): WIN32OLE#each: Return an
+ enumerator if no block is given.
+
+ * ext/zlib/zlib.c (rb_gzreader_each_byte, rb_gzreader_each):
+ Zlib::GzipReader#{each,each_line,each_byte}: Return an
+ enumerator if no block is given.
+
+ * ext/zlib/zlib.c (Init_zlib): Add Zlib::GzipReader#lines and
+ #bytes, which are aliases to #each_line and #each_byte,
+ respectively.
+
+Mon Apr 21 17:01:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (rb_iseq_compile_with_option): check if src is a string.
+ [ruby-core:16453]
+
+Mon Apr 21 16:06:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enumerator.c (enumerator_init): preserve the method name in ID.
+
+ * enumerator.c (enumerator_each): need not to call rb_to_id().
+
+ * enumerator.c (enumerator_with_index): ditto.
+
+Mon Apr 21 11:00:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * compile.c (defined_expr): capture exception during defined?
+ evaluation. a patch from wanabe <s.wanabe at gmail.com> in
+ [ruby-dev:34461]. [ruby-core:16010]
+
+Mon Apr 21 10:06:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c: should include <errno.h> to refer to errno.
+
+Mon Apr 21 09:58:04 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * time.c (rb_strftime): check errno to detect strftime(3)'s error.
+ this is workaround for recent version of MSVCRT.
+ [ruby-dev:34456]
+
+Mon Apr 21 08:54:30 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * gc.c (ruby_xmalloc): use size_t for malloc argument instead of long.
+
+Sun Apr 20 21:00:21 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c, include/ruby/ruby.h: Export rb_cEnumerator.
+
+Sun Apr 20 20:47:50 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enumerator.c: Resolve the method every time an enumeration
+ method is run, not once when the enumerator is initialized as it
+ was before, so that method_missing() and method (re)definition
+ afterwards are both in effect; pointed out in: [ruby-core:16441]
+
+Sun Apr 20 15:11:00 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (copy_stream_rbuf_to_dst): removed.
+ (copy_stream_fallback_body): don't bypass write method.
+ (copy_stream_body): simplified.
+
+Sun Apr 20 15:01:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_core.h (struct iseq_compile_data): moved label_no from
+ new_label_body().
+
+ * compile.c (iseq_set_exception_table): allocates catch_table only
+ when entries exist.
+
+ * compile.c (struct iseq_link_element, struct iseq_insn_data): made
+ enum for debuggers.
+
+Sun Apr 20 14:44:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): fix for splat in when and rescue.
+ a patch from wanabe <s.wanabe AT gmail.com> in [ruby-dev:34429].
+ [ruby-core:14537]
+
+Sun Apr 20 13:55:37 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (copy_stream_fallback): write directly (bypassing write method)
+ if possible.
+
+Sun Apr 20 12:49:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (copy_stream_fallback): read directly (bypassing readpartial
+ method) if possible.
+
+Sun Apr 20 04:45:13 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (copy_stream_body): use readpartial and write method for
+ non-IOs such as StringIO and ARGF.
+
+Fri Apr 18 20:57:33 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_array.rb: add tests to achieve over 95% test coverage
+ of array.c.
+
+Fri Apr 18 17:37:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_gc_mark_locations): get rid of underflow.
+
+ * gc.c (mark_current_machine_context): check if the main thread stack
+ position may shrink under the initialized position. [ruby-core:16436]
+
+Thu Apr 17 22:20:52 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * enc/trans/utf_16_32.c (fun_so_to_utf_16be, fun_so_to_utf_16le): add
+ parentheses to remove warnings of gcc.
+
+ * io.c (rb_io_getc): remove unused variables.
+
+ * compile.c (NODE_NEXT, NODE_REDO): remove unused labels.
+
+ * ext/nkf/nkf.c (rb_nkf_convert): remove unused variables.
+
+ * ext/syck/rubyext.c (syck_resolver_initialize,
+ syck_resolver_detect_implicit, syck_emitter_emit): remove unused
+ variables.
+
+Thu Apr 17 20:12:47 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_rubyoptions.rb (test_search): enable some assertions.
+
+ * test/ruby/test_rubyoptions.rb: flunk message in win32.
+
+Thu Apr 17 16:07:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_rubyoptions.rb (ruby): run in C locale.
+
+ * test/ruby/test_rubyoptions.rb (test_encoding): --encoding does not
+ affect source code.
+
+Thu Apr 17 00:45:41 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_process.rb (test_rlimit_nofile): reset RLIMIT_NOFILE
+ before exit (for gcov).
+
+ * test/ruby/test_rubyoptions.rb: new tests for option of ruby
+ interpreter, to achieve over 95% test coverage of ruby.c.
+
+Wed Apr 16 02:40:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): preludes and parser need to run in safe
+ level 0. [ruby-dev:34407]
+
+Wed Apr 16 02:26:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): dln_find_file returns the pointer to a
+ static buffer, so should copy it. [ruby-dev:34409]
+
+Tue Apr 15 23:08:46 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/xmlrpc/client.rb: fix cookie handling. [ruby-dev:34403]
+
+ * test/xmlrpc/test_cookie.rb: add a test for the above fix.
+
+Tue Apr 15 19:20:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c: #undef rb_argv moved before #define.
+
+Tue Apr 15 18:02:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_argv): replaced with rb_get_argv().
+ [ruby-Bugs-19514]
+
+Tue Apr 15 17:10:59 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * lib/net/http.rb, lib/net/smtp.rb, lib/net/pop.rb: update
+ URLs of Japanese documents.
+
+Tue Apr 15 16:45:14 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_symbol.rb (TestSymbol#test_to_proc): add tests.
+
+Tue Apr 15 15:38:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-encoding-map): added shift-jis for older
+ versions.
+
+ * misc/ruby-mode.el (ruby-mode-set-encoding):
+ coding-system-to-mime-charset is not a standard function.
+ [carbon-emacs:795]
+ fix for the case that magic comment exists but coding system is
+ absent.
+
+ * misc/ruby-mode.el (ruby-mode): use write-contents-functions or
+ write-contents-hooks for older versions.
+
+Tue Apr 15 07:21:21 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_div): [ruby-dev:34357]
+
+ * complex.c (nucomp_abs): use hypot.
+
+ * complex.c (nucomp_quo): do not force conversion.
+
+ * test/ruby/test_complex.rb: omitted some meaningless tests.
+
+Mon Apr 14 23:25:50 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_objectspace.rb: add a test for
+ ObjectSpace.count_objects.
+
+Mon Apr 14 22:44:24 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (SET_EXTERNAL_ENCODING): avoid call rb_enc_check() on
+ half-baked result string.
+
+ * re.c (rb_reg_search): make search reentrant. [ruby-dev:34223]
+
+ * test/ruby/test_parse.rb (TestParse::test_global_variable):
+ should preserve $& variable.
+
+Mon Apr 14 17:23:27 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * hash.c (rb_hash_delete_if, rb_hash_reject_bang, env_delete_if,
+ env_reject_bang): Return an enumerator if no block is given.
+
+Mon Apr 14 14:33:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c, compile.h (compile_debug): made runtime option.
+
+ * debug.c (ruby_debug_print_indent): returns if debug_level exceeds
+ the threshold.
+
+ * debug.c (ruby_debug_printf): printf to stderr.
+
+ * iseq.c (make_compile_option, make_compile_option_value): added
+ debug_level option.
+
+ * vm_core.h (rb_compile_option_t): added debug_level.
+
+ * vm_core.h (struct iseq_compile_data): added node_level.
+
+Mon Apr 14 12:52:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (Init_stack): use ruby_init_stack. [ruby-dev:34350]
+
+ * gc.c (rb_objspace_t): packed globals. [ruby-dev:34348]
+
+ * gc.c (finalizers): removed. [ruby-dev:34349]
+
+Mon Apr 14 11:30:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (ary_new): new integer overflow check condition.
+ suggested by TOYOFUKU Chikanobu <nobu_toyofuku at nifty.com> in
+ [ruby-dev:34156].
+
+ * array.c (rb_ary_initialize): ditto.
+
+Mon Apr 14 00:51:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_parse.rb: add tests to achieve over 95% test coverage
+ of parse.y.
+
+Sun Apr 13 23:53:58 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enum.c (enum_cycle): Make Enumerable#cycle do a finite loop when
+ the number of cycles is specified.
+
+ * array.c (rb_ary_cycle): Ditto for Array#cycle.
+
+Sun Apr 13 18:52:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (lock_func): should not check interrupts in
+ blocking region. [ruby-dev:34378]
+
+Sat Apr 12 12:41:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_exec_node, ruby_run_node), ruby.c (process_options):
+ use iseq instead of NODE.
+
+ * gc.c (source_filenames): removed.
+
+ * include/ruby/intern.h, parse.y (yycompile, parser_mark, parser_free,
+ ripper_initialize): rb_source_filename() is no longer used.
+
+ * compile.c, compile.h (ERROR_ARGS), parse.y (node_newnode, fixpos,
+ parser_warn, e_option_supplied, warn_unless_e_option, range_op,
+ cond0): nd_file is no longer used.
+
+Sat Apr 12 12:17:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * prelude.rb (require_relative): move require_relative from
+ lib/require_relative.rb. [ruby-core:16356]
+
+ * lib/require_relative.rb: removed.
+
+Sat Apr 12 05:55:57 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems*, test/rubygems*: Update to RubyGems 1.1.1 r1701.
+
+Sat Apr 12 03:13:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): set external encoding.
+
+ * file.c (rb_file_s_basename, rb_file_s_dirname, rb_file_s_extname):
+ copy encoding.
+
+Fri Apr 11 17:35:06 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (count_i): modified to shut warning up.
+
+Fri Apr 11 17:25:09 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enum.c (count_i, count_iter_i, enum_count, enum_find_index):
+ Reduce code.
+
+Fri Apr 11 17:06:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (find_index_i): modified to shut warning up.
+
+ * enum.c (find_index_iter_i): ditto.
+
+Fri Apr 11 16:44:43 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * enum.c (enum_find_index): Add support for find_index(obj);
+ [ruby-dev:34313].
+
+ * array.c (rb_ary_index): Define find_index as an alias to index.
+
+Fri Apr 11 16:42:33 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/yaml/store.rb (YAML::load): modified to support empty
+ database.
+
+Fri Apr 11 08:05:12 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:34312].
+
+Thu Apr 10 23:08:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/pstore.rb (PStore::dump, PStore::load): allow subclass
+ overriding. [ruby-dev:34305]
+
+ * lib/yaml/store.rb (YAML::Store::marshal_dump_supports_canonical_option?):
+ add a method to support faster PStore.
+
+Thu Apr 10 20:36:45 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * misc/rdebug.el, misc/README: Remove rdebug.el as per request
+ from the maintainer and mention the ruby-debug project at
+ RubyForge in README; bug#19043.
+
+Thu Apr 10 19:41:00 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * eval.c (rb_f_loop): Mention StopIteration in the document.
+
+Thu Apr 10 19:23:55 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * array.c (rb_ary_pop_m, rb_ary_shift_m): Update documents for
+ #pop() and #shift().
+
+ * array.c (rb_ary_slice_bang): Update document. Assigning
+ array[*args]= nil no longer removes elements.
+
+Thu Apr 10 16:58:44 2008 Tanaka Akira <akr@fsij.org>
+
+ * marshal.c (w_object): TYPE_USERDEF assigns id for ivars first.
+ [ruby-dev:34159] by nagachika.
+
+Thu Apr 10 15:03:47 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/generator.rb: removed obsolete library. [ruby-core:16233]
+
+ * test/test_generator.rb: removed as well. [ruby-dev:34306]
+
+ * lib/pstore.rb: replaced by Hongli Lai's faster version.
+
+Thu Apr 10 10:27:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread_pthread.c (native_sleep): sleep_cond is initialized at
+ creation. [ruby-Patches-19361].
+
+Wed Apr 9 14:43:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (lock_func): optimized and checks for interrupt_flag.
+ based on a patch from Sylvain Joyeux in [ruby-Patches-19361] and
+ [ruby-Patches-19362].
+
+Wed Apr 9 12:12:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * test/ruby/test_thread.rb: new tests from Sylvain Joyeux in
+ [ruby-Patches-19361].
+
+Tue Apr 8 21:36:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_mutex_sleep): ensures to re-acquire at waking up.
+ [ruby-Patches-19361]
+
+Tue Apr 8 11:00:14 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/complex.rb: remove Math first before overwriting by CMath.
+
+Tue Apr 8 10:34:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * load.c (rb_require_safe): should check fname path after $SAFE is
+ properly set. [ruby-dev:34268]
+
+ * re.c (rb_reg_quote): should always copy the quoting string.
+ [ruby-core:16235]
+
+Tue Apr 8 10:30:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (prelude.c): depends on enc/prelude.rb.
+
+ * enc/prelude.rb: fixed initial library names.
+
+Tue Apr 8 03:39:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_provided): check expanded path for relative path
+ features, loading or loaded features are already expanded in 1.9.
+
+ * variable.c (rb_autoload_load): no needs to check if provided before
+ rb_require_safe. [ruby-dev:34266]
+
+Mon Apr 7 22:41:21 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c: cancelled recent changes (except to remove rdiv).
+
+ * bignum.c: ditto.
+
+ * bignum.c: added rb_big_idiv.
+
+Mon Apr 7 15:51:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (enc_init_db): moved to enc/encdb.c.
+
+ * transcode.c (init_transcoder_table): moved to enc/trans/transdb.c.
+
+ * enc/depend (enc/encdb.o enc/trans/transdb.o): depend on
+ corresponding headers.
+
+ * common.mk (COMMONOBJS): moved transcode.o from OBJS
+
+Mon Apr 7 12:26:32 2008 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_knownbug.rb: add a known-bug.
+
+Mon Apr 7 12:15:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * range.c (range_each_func): should not leave a variable
+ uninitialized, which could cause SEGV.
+
+ * range.c (range_step): removed duplicated and unreachable code.
+
+Mon Apr 7 02:12:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_intern): need not to check if tainted.
+ [ruby-dev:34219]
+
+Sun Apr 6 09:45:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (dir_tell): check if closed. [ruby-core:16223]
+
+Sat Apr 5 23:17:20 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/cmath.rb: new.
+
+ * lib/complex.rb: depends lib/cmath.rb.
+
+ * lib/rational.rb: added rdiv.
+
+ * complex.c: removed some math functions.
+
+Sat Apr 5 05:50:57 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/parsers/parse_rb.rb: Fix uninitialized variable warnings.
+
+ * lib/rdoc/generator/html.rb: ditto.
+
+ * lib/rdoc/options.rb: Fix shadowed variable warning.
+
+ * lib/webrick/httprequest.rb: Fix redefined method warning.
+
+Sat Apr 5 02:13:52 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_cmpint): moved from compar.c, to check bignum
+ zero.
+
+Fri Apr 4 23:24:06 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_memsearch_qs): wrong boundary condition.
+
+ * re.c (rb_memsearch_qs_utf8): ditto.
+
+Fri Apr 4 14:11:36 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_memsearch_qs): wrong boundary condition. a patch from
+ wanabe <s.wanabe AT gmail.com> in [ruby-dev:34248].
+
+Fri Apr 4 05:57:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/net/pop.rb (Net::POP3::do_finish): clear @n_mails and
+ @n_bytes as well. [ruby-core:16144]
+
+Fri Apr 4 01:59:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_step): add step for each iteration if begin and
+ end are numeric. [ruby-core:15990]
+
+Fri Apr 4 00:42:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (Init_Bignum): rdiv method removed. [ruby-dev:34242]
+
+ * complex.c (nucomp_quo): ditto.
+
+ * numeric.c (num_rdiv): ditto.
+
+ * rational.c (nurat_div): ditto.
+
+ * complex.c (nucomp_fdiv): fdiv implementation restored.
+
+ * numeric.c (num_quo): RDoc updated.
+
+Thu Apr 3 21:51:45 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (nucomp_int_check): function for DRY real check.
+
+ * complex.c (nucomp_{add,sub,mul,div,expt}): use rb_num_coerce_bin().
+
+Thu Apr 3 19:59:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * insns.def (defineclass): check if cbase is a class or a module.
+ [ruby-core:16118]
+
+Thu Apr 3 14:42:11 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (INSNS): add insns_info.inc.
+
+ * common.mk (INSNS): make incs separately for nmake.
+
+Thu Apr 3 13:20:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (endb.h, transdb.h, prelude.c): depend on $(PREP) and
+ check if really changed. [ruby-core:16102]
+
+ * Makefile.in, common.mk, configure.in, {win32,bcc32}/Makefile.sub
+ (MINIOBJS, ARCHMINIOBJS): separated.
+
+Thu Apr 3 09:00:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_set_sequence, iseq_insns_unification,
+ insn_data_to_s_detail): constified.
+
+ * iseq.c (insn_operand_intern, ruby_iseq_disasm_insn): ditto.
+
+ * template/{insns_info,opt_sc,optunifs}.inc.tmpl: ditto.
+
+ * tool/instruction.rb (OptUnifsIncGenerator): ditto.
+
+Thu Apr 3 08:46:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_include): add RDoc to describe that comparison
+ for numeric is done according magnitude of values.
+ [ruby-core:15907]
+
+Wed Apr 2 22:29:35 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * rational.c (nurat_int_check): function for DRY integer check.
+
+ * numeric.c (num_rdiv): should always return rational number.
+
+ * rational.c (nurat_add, nurat_sub, nurat_mul, nurat_fdiv,
+ nurat_cmp): use rb_num_coerce_bin().
+
+ * rational.c (nurat_division): does / and rdiv.
+
+ * .gdbinit (rp): no longer use rb_p().
+
+Wed Apr 2 06:52:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * .gdbinit (rp): supports rational and complex numbers. it's
+ cheating since it uses rb_p().
+
+Wed Apr 2 06:24:06 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * include/ruby/node.h: add new constants for rb_call()'s scope.
+
+ * eval.c (iterate_method): use CALL_* scope constant to specify
+ proper scope value.
+
+ * eval.c (rb_each, rb_apply, rb_funcall, rb_funcall2, rb_funcall3):
+ ditto.
+
+Tue Apr 1 21:19:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * rational.c: need to include <float.h> just once.
+
+Tue Apr 1 16:40:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (big2dbl): more precise conversion at edge cases.
+ [ruby-dev:34195]
+
+Tue Apr 1 14:43:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: get rid of empty expansion.
+
+ * configure.in: _setjmp is available but _longjmp is not on mingw.
+
+Tue Apr 1 09:41:22 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * {bcc,win}32/Makefile (config.h): need to define RUBY_SETJMP, etc.
+
+Tue Apr 1 07:31:58 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems* test/rubygems*: Import RubyGems 1.1.0.
+
+Tue Apr 1 03:20:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_SETJMP, RUBY_LONGJMP, RUBY_JMP_BUF): prefers
+ _setjmp over setjmp and sigsetjmp. [ruby-core:16023]
+ __builtin_setjmp cannot handle a variable.
+
+ * configure.in (--with-setjmp-type): new option to override the
+ default rule in the above.
+
+ * eval_intern.h (ruby_setjmp, ruby_longjmp), gc.c (rb_setjmp),
+ vm_core.h (rb_jmpbuf_t): use RUBY_SETJMP, RUBY_LONGJMP and
+ RUBY_JMP_BUF.
+
+Tue Apr 1 01:55:52 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 Apr 1 01:40:58 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: adopted the ruby's style.
+
+ * rational.c: ditto.
+
+Tue Apr 1 00:17:35 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c: revert.
+
+Mon Mar 31 18:57:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * {bcc,win}32/Makefile.sub (config.h): define ssize_t.
+
+ * io.c (copy_stream_body): some platform don't have O_NOCTTY.
+
+Mon Mar 31 18:42:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: check for ssize_t. [ruby-dev:34184]
+
+Mon Mar 31 14:45:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (num_quo): should convert its operand to Rational.
+
+ * rational.c (string_to_r_strict): should raise TypeError.
+
+ * bignum.c (Init_Bignum): should not redefine Bignum#div.
+ Numeric#div will do. [ruby-dev:34066]
+
+Mon Mar 31 04:05:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (io_getc): set coderange while getting characters.
+
+Sun Mar 30 23:16:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * proc.c (proc_dup): should copy is_lambda attribute as well.
+ [ruby-talk:296244]
+
+Sun Mar 30 15:33:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c: IO.copy_stream implemented. [ruby-dev:33843]
+
+ * thread.c (rb_fd_select): new function.
+
+ * configure.in (sys/sendfile.h): check the header file.
+ (sendfile): check the function.
+ (pread): check the function.
+
+Sat Mar 29 14:18:41 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/*: full update Ruby/Tk to support Ruby(1.9|1.8) and Tc/Tk8.5.
+
+ * ext/tk/lib/tkextlib/tile.rb: [incompatible] remove TileWidgets'
+ instate/state/identify method to avoid the conflict with standard
+ widget options. Those methods are renamed to ttk_instate/ttk_state/
+ ttk_identify (tile_instate/tile_state/tile_identify are available
+ too). Although I don't recommend, if you really need old methods,
+ please define "Tk::USE_OBSOLETE_TILE_STATE_METHOD = true" before
+ "require 'tkextlib/tile'".
+
+ * ext/tk/lib/tkextlib/tile.rb: "Tk::Tile::__Import_Tile_Widgets__!"
+ is obsolete. It outputs warning. To control default widget set,
+ use "Tk.default_widget_set = :Ttk".
+
+ * ext/tk/lib/tk.rb: __IGNORE_UNKNOWN_CONFIGURE_OPTION__ method and
+ __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode) method are defined
+ as module methods of TkConfigMethod. It may help users to wrap old
+ Ruby/Tk scripts (use standard widgets) to force to use Ttk widgets.
+ Ttk widgets don't have some options of standard widgets which are
+ control the view of widgets. When set ignore-mode true, configure
+ method tries to ignore such unknown options with no exception.
+ Of course, it may raise other troubles on the GUI design.
+ So, those are a little danger methods.
+
+ * ext/tk/lib/tk/itemconfig.rb: __IGNORE_UNKNOWN_CONFIGURE_OPTION__
+ method and __set_IGNORE_UNKNOWN_CONFIGURE_OPTION__!(mode) method
+ are defined as module methods of TkItemConfigMethod as the same
+ purpose as TkConfigMethod's ones.
+
+ * ext/tk/sample/ttk_wrapper.rb: A new example. This is a tool for
+ wrapping old Ruby/Tk scripts (which use standard widgets) to use
+ Ttk (Tile) widgets as default.
+
+ * ext/tk/sample/tkextlib/tile/demo.rb: use ttk_instate/ttk_state
+ method instead of instate/state method.
+
+ * ext/tk/lib/tk/root, ext/tk/lib/tk/namespace.rb,
+ ext/tk/lib/tk/text.rb, ext/tk/lib/tkextlib/*: some 'instance_eval's
+ are replaced to "instance_exec(self)".
+
+ * ext/tk/lib/tk/event.rb: bug fix on KEY_TBL and PROC_TBL (?x is not
+ a character code on Ruby1.9).
+
+ * ext/tk/lib/tk/variable.rb: support new style of operation argument
+ on Tcl/Tk's 'trace' command for variables.
+
+ * ext/tk/sample/demos-jp/widget, ext/tk/sample/demos-en/widget: bug fix
+
+ * ext/tk/sample/demos-jp/textpeer.rb,
+ ext/tk/sample/demos-en/textpeer.rb: new widget demo.
+
+ * ext/tk/tcltklib.c: decrease SEGV troubles (probably)
+
+ * ext/tk/lib/tk.rb: remove Thread.critical access if Ruby1.9
+
+ * ext/tk/lib/tk/multi-tk.rb: support Ruby1.9 (probably)
+
+ * ext/tk/lib/tkextlib/tile.rb: add method to define Tcl/Tk command
+ to make Tcl/Tk theme sources (based on different version of Tile
+ extension) available.
+ (Tk::Tile::__define_LoadImages_proc_for_compatibility__)
+
+ * ext/tk/lib/tk.rb, ext/tk/lib/tk/wm.rb: support dockable frames
+ (Tcl/Tk8.5 feature). 'wm' command can treat many kinds of widgets
+ as toplevel widgets.
+
+ * ext/tk/lib/tkextlib/tile/style.rb: ditto.
+ (Tk::Tile::Style.__define_wrapper_proc_for_compatibility__)
+
+ * ext/tk/lib/tk/font.rb: add actual_hash and metrics_hash to get
+ properties as a hash. metrics_hash method returns a boolean value
+ for 'fixed' option. But metrics method returns numeric value
+ (0 or 1) for 'fixed' option, because of backward compatibility.
+
+ * ext/tk/lib/tk/timer.rb: sometimes fail to set callback procedure.
+
+ * ext/tk/lib/tk.rb: add Tk.sleep and Tk.wakeup method. Tk.sleep
+ doesn't block the eventloop. It will be better to use the method
+ in event callbacks.
+
+ * ext/tk/sample/tksleep_sample.rb: sample script about Tk.sleep.
+
+Thu Mar 27 20:44:22 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c (f_lcm): removed.
+
+ * rational.c (rb_lcm, rb_gcdlcm): added.
+
+ * lib/complex.rb (gcd, lcm, gcdlcm): removed.
+
+ * lib/rational.rb (gcd, lcm, gcdlcm): ditto.
+
+Wed Mar 26 18:11:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * variable.c (rb_mod_constants): rdoc updated. a patch from
+ Florian Gilcher <flo AT andersground.net> in [ruby-core:16009].
+
+Wed Mar 26 00:55:28 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_rand.rb: add tests to achieve over 95% test coverage
+ of random.c.
+
+Wed Mar 26 00:28:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_rational.rb: add tests to achieve over 90% test
+ coverage of rational.c.
+
+ * test/ruby/test_complex.rb: ditto for complex.c.
+
+Tue Mar 25 19:34:05 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bootstraptest/test_knownbug.rb: add tests. [ruby-dev:34128]
+
+Tue Mar 25 19:09:04 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * array.c (ary_new): fix size check. [ruby-dev:34123]
+
+ * array.c (rb_ary_take, rb_ary_drop): check negative size and use
+ NUM2LONG instead of FIX2LONG. [ruby-dev:34123]
+
+ * enum.c (enum_take, enum_drop): check negative size.
+
+ * test/ruby/test_array.rb: add tests for above.
+
+Tue Mar 25 16:32:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options): checks if the word is empty.
+
+ * ruby.c (process_options): typo fixed. [ruby-dev:34122]
+
+Tue Mar 25 15:26:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (defined_expr): false short-circuit destination label may
+ be needed. [ruby-talk:295296]
+
+ * compile.c (iseq_compile_each): put nil if false short-circuit is
+ created.
+
+ * compile.c (compile_massign_opt): no need to use alloca.
+
+Mon Mar 24 19:23:52 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * parse.y (debug_lines): 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.
+
+Mon Mar 24 10:25:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: sitearch should use target_cpu. [ruby-core:15986]
+
+Sun Mar 23 02:51:57 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rlimit_resource_value): use NUM2RLIM.
+
+Sun Mar 23 02:28:01 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: fixed. [ruby-dev:34109]
+
+ * rational.c: ditto.
+
+Fri Mar 21 21:32:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_f_gets, rb_f_readline, rb_f_readlines): delegates to ARGF
+ as well as puts and putc. [ruby-dev:34100]
+
+Fri Mar 21 21:26:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/resolv.rb (Resolv::Hosts): should not use win32/resolv on cygwin.
+ [ruby-dev:29945], [ruby-dev:34095]
+
+ * lib/win32/registry.rb (Win32::Registry.expand_environ): try upcased
+ name too for cygwin. [ruby-dev:29945]
+
+ * lib/win32/resolv.rb (Win32::Resolv.get_hosts_path): use expand_path.
+
+Fri Mar 21 21:10:00 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/ipaddr.rb: Say that I am the current maintainer.
+
+ * lib/set.rb: Ditto.
+
+ * lib/shellwords.rb: Ditto.
+
+ * ext/syslog/syslog.txt: Ditto.
+
+Fri Mar 21 09:24:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * instruby.rb (open_for_install): write block result and rewrite only
+ if changed from existing file.
+
+Fri Mar 21 08:29:33 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c (nurat_to_f): rearrangement.
+
+Fri Mar 21 06:44:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * rational.c (nurat_to_f): C99.
+
+Fri Mar 21 01:40:27 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * complex.c (nucomp_sub, nucomp_expt): call corresponding functions.
+
+Fri Mar 21 01:21:43 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * missing/tgamma.c: include config.h before math.h. [ruby-dev:34075]
+
+Thu Mar 20 21:46:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_getline): use receiver.
+
+Thu Mar 20 21:20:19 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c: some improvements (include Shin-ichiro HARA's
+ effort).
+
+ * complex.c: some improvements.
+
+ * test/ruby/test_rational2.rb: new.
+
+Thu Mar 20 00:21:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_initialize_copy): get rid of segfault.
+
+ * io.c (argf_tell, argf_seek_m, argf_set_pos, argf_rewind,
+ argf_fileno, argf_to_io, argf_eofl, argf_getc, argf_getbyte,
+ argf_readchar, argf_readbyte, argf_each_line): use receiver.
+
+Wed Mar 19 23:52:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_putc, rb_io_puts): output directly if the receiver is
+ rb_stdout to get rid of infinite recursion. [ruby-dev:34059]
+
+Wed Mar 19 22:27:41 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * rational.c: added rb_gcd.
+
+ * complex.c: use rb_gcd.
+
+Wed Mar 19 18:37:00 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * complex.c: revert.
+
+ * rational.c: revert.
+
+Wed Mar 19 17:31:20 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval_intern.h (TH_EXEC_TAG): need not to FLUSH_REGISTER_WINDOWS.
+ [ruby-core:15871], [ruby-dev:34088]
+
+Wed Mar 19 14:53:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * complex.c (nucomp_to_s, nucomp_inspect): get rid of making
+ unnecessary intermediate objects.
+
+ * complex.c (make_patterns, string_to_c): do not treat successive
+ underscores as a part of numeric like as literals. [ruby-dev:34085]
+
+ * rational.c (make_patterns, string_to_r): ditto.
+
+Wed Mar 19 14:36:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (rb_cstr_to_inum): treat successive underscores as
+ nondigit. [ruby-dev:34089]
+
+Wed Mar 19 14:08:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (enc_check_encoding): should not load autoloaded encoding
+ directly, instead use rb_enc_find_index() which deal with alias and
+ replica. [ruby-core:15957]
+
+Wed Mar 19 11:49:47 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * regint.h (include): include ruby.h instead of defines.h and config.h.
+
+Wed Mar 19 10:17:12 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * regint.h (CHECK_INTERRUPT_IN_MATCH_AT): add interrupt check
+ during match. [ruby-talk:295002]
+
+Tue Mar 18 16:24:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (literal_concat_gen): bail out at different encoding.
+
+Tue Mar 18 04:00:27 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_memsearch_ss): simple shift search.
+
+ * re.c (rb_memsearch_qs): quick search.
+
+ * re.c (rb_memsearch_qs_utf8): quick search for UTF-8 string.
+
+ * re.c (rb_memsearch_qs_utf8_hash): hash functions for above.
+
+ * re.c (rb_memsearch): use above functions.
+
+ * string.c (rb_str_index): give enc to rb_memsearch.
+
+ * include/ruby/intern.h (rb_memsearch): move to encoding.h.
+
+ * include/ruby/encoding.h (rb_memsearch): move from intern.h.
+
+ * common.mk (PREP): add dependency.
+
+Mon Mar 17 22:23:54 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * array.c (rb_ary_take, rb_ary_take_while, rb_ary_drop,
+ rb_ary_drop_while): new methods. [ruby-dev:34067]
+
+ * test/ruby/test_array.rb: add tests for above.
+
+Mon Mar 17 17:11:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * 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]
+
+Mon Mar 17 16:41:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: unset GREP_OPTIONS. [ruby-core:15918]
+
+Sun Mar 16 18:07:07 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/utf_16_32.c: bug fix (some invalid UTF-8 sequences
+ were legal)
+
+ * test/ruby/test_transcode.rb: test for above bug
+
+Sun Mar 16 17:28:07 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk (LIBRUBY_SO): add dependency to $(BUILTIN_ENCOBJS).
+
+Sun Mar 16 08:51:41 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * include/ruby/intern.h: added some declarations.
+
+ * include/ruby/ruby.h: ditto.
+
+ * common.mk: added some entries.
+
+ * configure.in: added a check for signbit.
+
+ * lib/complex.rb: nearly all of core definitions have been removed.
+
+ * lib/rational.rb: ditto.
+
+ * lib/mathn.rb: some trivial adjustments.
+
+ * complex.c: new.
+
+ * rational.c: ditto.
+
+ * numeric.c (flo_{quo,rdiv}, fix_fdiv): added.
+
+ * numeric.c ({num,int}_{numerator,denominator}): ditto.
+
+ * bignum.c (rb_big_fdiv): ditto.
+
+ * numeric.c (fix_{quo,pow}): now may yield rational number.
+
+ * bignum.c (rb_big_{quo,pow}): ditto.
+
+ * numeric.c (rb_{int,flo}_induced_from): now can accept rational.
+
+ * gc.c (gc_mark_children, obj_free): now detects complex and rational.
+
+ * inits.c (rb_call_inits): now calls Init_{Complex,Rational}.
+
+ * test/ruby/test_complex.rb: new.
+
+ * test/ruby/test_rational.rb: ditto.
+
+Sat Mar 15 17:48:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * encoding.c (rb_enc_associate_index): pass unnecessary enc_capable().
+
+ * string.c (rb_str_cmp): reduce invocation of rb_enc_compatible().
+
+Fri Mar 14 17:04:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (inttypes.h): includes always if available.
+
+ * string.c, ext/digest/defs.h: moved inttypes.h to ruby.h.
+
+Fri Mar 14 16:59:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_LIB_PREFIX): fix for prefix.
+
+Fri Mar 14 16:35:11 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/cgi.rb (CGI::Cookie::initialize): performance patch from
+ Makoto Kuwata <kwa@kuwata-lab.com> in [ruby-dev:34048].
+
+Fri Mar 14 15:49:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_LIB_PREFIX): use libdir.
+
+Fri Mar 14 14:24:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/digest/defs.h: inttypes.h is still needed.
+
+Fri Mar 14 11:34:12 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * {bcc,win}32/Makefile.sub: follow below changes.
+
+Fri Mar 14 11:24:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-encoding-map, ruby-use-encoding-map): added
+ to customize.
+
+Fri Mar 14 10:37:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in (int8_t, uint8_t, int16_t, uint16_t int32_t,
+ uint32_t int64_t, uint64_t, int128_t, uint128_t,
+ intptr_t, uintptr_t): check if defined.
+
+ * win32/Makefile.sub: follow configure.in.
+
+ * ext/digest/defs.h: remove checks for uint8_t, uint32_t and uint64_t.
+
+Fri Mar 14 10:12:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_CHECK_VARTYPE): should not indent preprocessor
+ directives.
+
+Fri Mar 14 10:03:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (UNALIGNED_WORD_ACCESS): IA64 cannot access unaligned word.
+
+Thu Mar 13 21:00:50 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_slice_bang): should not use rb_ary_subseq()
+ which shares internal pointer. splice modifies the receiver
+ right after subseq. [ruby-dev:34005]
+
+ * bootstraptest/test_struct.rb: some test moved from test to shut
+ warning up.
+
+Thu Mar 13 19:42:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * {bcc,win}32/Makefile.sub (config.h): define uint32_t.
+
+Thu Mar 13 14:14:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * trunk/configure.in (AC_CHECK_HEADERS): stdint.h is not needed to
+ check.
+
+ * trunk/configure.in (rb_cv_type_uint32_t): unquoted. [ruby-dev:34030]
+
+ * trunk/string.c (hash): use inttypes.h instead of stdint.h.
+
+Thu Mar 13 10:42:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (fix_divmod): should return integer division. [ruby-dev:34006]
+
+ * enum.c (zip_ary): wrong boundary condition.
+
+ * test/ruby/test_numeric.rb (TestNumeric::test_num2long): bit-and
+ should not raise RangeError.
+
+Thu Mar 13 03:12:48 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/irb/cmd/help.rb: should be updated for new ri structure.
+ [ruby-core:15825]
+
+ * lib/rdoc/ri/driver.rb (RDoc::initialize): allow options to be optional.
+
+ * lib/rdoc/ri/driver.rb (RDoc::class_cache): map_dirs may be
+ empty.
+
+ * lib/rdoc/ri/driver.rb (RDoc::get_info_for): revive get_info_for
+ method. maybe broken.
+
+ * lib/rdoc/ri/util.rb (RDoc::initialize): should not use RiError
+ no more.
+
+Thu Mar 13 01:45:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (stdint.h): check if presence.
+
+ * configure.in (uint32_t): check if defined.
+
+ * string.c (hash): fix for portability. [ruby-dev:34020]
+
+Wed Mar 12 17:33:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_cstr_to_dbl): fix for a mere underscore.
+
+Wed Mar 12 14:47:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_intern.h (rb_thread_raised_set): use generic flags.
+
+ * eval.c (rb_longjmp): clear all raised flags.
+
+ * eval.c (stack_check): leave clearing flag to rb_longjmp.
+
+ * gc.c (rb_memerror): use thread raised flag instead of static flag.
+
+Tue Mar 11 23:38:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_combination): argument check before creating
+ Enumerator.
+
+ * array.c (rb_ary_permutation): ditto.
+
+ * enum.c (enum_zip): optimize if all arguments are arrays.
+
+Tue Mar 11 19:48:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * numeric.c (fix_coerce): try conversion before type check.
+ [ruby-core:15838]
+
+Tue Mar 11 12:39:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (clean-local): WINMAINOBJ is Windows specific.
+
+Tue Mar 11 10:19:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (hash): replaced by MurmurHash described in
+ <http://murmurhash.googlepages.com/>.
+
+Tue Mar 11 09:52:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_comparable): empty strings in any encoding are
+ compatible each other.
+
+Tue Mar 11 00:46:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (usage): remove some unimportant lines to fit -h message
+ in a page. [ruby-dev:34018]
+
+Mon Mar 10 17:11:00 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_local_variables): local_variables should return an
+ array of symbols. [ruby-dev:34008]
+
+ * vm.c (collect_local_variables_in_env): ditto.
+
+Mon Mar 10 15:53:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * version.c (MKSTR): make US-ASCII. [ruby-dev:34010]
+
+Mon Mar 10 02:08:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_index): if t == s + pos, the character beginning
+ from s + pos is valid.
+
+Sun Mar 9 13:51:21 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/generator.rb: Restore missing line to #params. Patch by
+ Lincoln Stoll <lstoll at lstoll.net>
+
+Sun Mar 9 09:52:00 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/code_objects.rb: Remove debugging Kernel#p. Patch by
+ Lincoln Stoll <lstoll at lstoll.net>
+ * lib/rdoc/generator/html.rb: Fully qualify AllReferences. Patch by
+ Lincoln Stoll <lstoll at lstoll.net>
+ * lib/rdoc/ri/writer.rb: Fix 1.8 backwards compatibility.
+
+Sat Mar 8 18:50:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (isdirsep): backslash is valid path separator on cygwin too.
+
+Sat Mar 8 06:53:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (search_nonascii): Use VALUE instead of unsigned long
+ because VALUE can be the fastest unsigned integer type.
+ On LLP64 unsigned long isn't the fastest.
+ * string.c (str_strlen): ditto.
+ * string.c (str_utf8_nth): ditto.
+ * string.c (count_utf8_lead_bytes_with_ulong): ditto.
+
+ * string.c (count_utf8_lead_bytes_with_word): renamed.
+
+Fri Mar 7 21:27:43 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c: fix indent.
+
+Fri Mar 7 21:12:19 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (power_cache_init, power_cache_get_power0, Init_Bignum):
+ delayed initializing power cache per base. [ruby-dev:34003]
+
+Fri Mar 7 20:30:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cont.c (cont_restore_0): fixed typo. [ruby-core:15821]
+
+Fri Mar 7 19:56:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb: rdoc added. [ruby-Patches-9762]
+
+Thu Mar 6 17:26:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): space flag is in effect for Inf/NaN too.
+ [ruby-dev:34002]
+
+Thu Mar 6 15:44:20 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): casting double to long is undefined
+ if the integer part of double is out of the range of long.
+
+Thu Mar 6 15:11:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): ignore 0 flag for NaN and Inf.
+ [ruby-dev:33994]
+
+Thu Mar 6 15:05:25 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * {bcc32,win32}/Makefile.sub (RUNRUBY): use $(PROGRAM) instead of
+ ruby$(EXEEXT).
+ suggested by KIMURA Koichi <kimura.koichi at canon.co.jp>.
+ [ruby-dev:34000]
+
+Thu Mar 6 14:46:08 2008 Tanaka Akira <akr@fsij.org>
+
+ * missing/lgamma_r.c (loggamma): return 0 for 1 and 2.
+
+ * test/ruby/test_math.rb: accept errors by functions under missing/.
+
+Thu Mar 6 14:29:44 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c (rb_str_transcode_bang): set coderange.
+
+ * transcode.c (rb_str_transcode): use rb_str_transcode_bang.
+
+Thu Mar 6 14:00:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/missing.h (cbrt): add declaration.
+
+Thu Mar 6 11:14:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-add-log-current-method): use ruby style
+ method name format.
+
+Thu Mar 6 11:12:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): no need of loop.
+
+Thu Mar 6 08:30:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_mod_freeze): call rb_class_name() directly.
+ [ruby-core:15802]
+
+Thu Mar 6 04:32:06 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (count_utf8_lead_bytes_with_ulong): fix shift size.
+ [ruby-dev:33993]
+
+ * string.c (str_utf8_nth) fix wrong counting.
+
+Thu Mar 6 00:34:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): size_t returned from strlen() can be
+ unsigned.
+
+Thu Mar 6 00:31:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * struct.c (make_struct): preserve encoding of struct name.
+
+Wed Mar 5 22:49:20 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (is_utf8_lead_byte, count_utf8_lead_bytes_with_ulong):
+ defined for UTF-8 optimization.
+
+ * string.c (str_strlen): use is_utf8_lead_byte and
+ count_utf8_lead_bytes_with_ulong.
+
+ * string.c (str_utf8_nth) ditto.
+
+Wed Mar 5 17:53:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_flock): returns false on EAGAIN if non-blocking.
+ [ruby-core:15795]
+
+Wed Mar 5 17:43:43 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c (transcode_loop): Adjusted detection of invalid
+ (ill-formed) UTF-8 sequences. Fixing potential security issue, see
+ http://www.unicode.org/versions/Unicode5.1.0/#Notable_Changes.
+
+ * test/ruby/test_transcode.rb: Added two tests for above fix.
+
+Wed Mar 5 14:00:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (fix_to_s): avoid rb_scan_args() when no argument
+ given.
+ * bignum.c (rb_big_to_s): ditto.
+ * enum.c (enum_first): ditto.
+ * eval_jump.c (rb_f_catch): ditto.
+ * io.c (rb_obj_display): ditto.
+ * class.c (rb_obj_singleton_methods): ditto.
+ * object.c (rb_class_initialize): ditto.
+ * random.c (rb_f_srand): ditto.
+ * range.c (range_step): ditto.
+ * re.c (rb_reg_s_last_match): ditto.
+ * string.c (rb_str_to_i): ditto.
+ * string.c (rb_str_each_line): ditto.
+ * string.c (rb_str_chomp_bang): ditto.
+ * string.c (rb_str_sum): ditto.
+
+ * string.c (str_modifiable): declare inline.
+ * string.c (str_independent): ditto.
+
+Wed Mar 5 11:50:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/debug.rb: require 'continuation' to implement "restart"
+ command. [ruby-dev:33992]
+
+ * lib/debug.rb (Context::debug_command): remove local variable
+ shadowing to shut up warnings. [ruby-dev:33992]
+
+ * lib/debug.rb (Context::display_list): ditto.
+
+ * lib/debug.rb (Context::resume): ditto.
+
+ * lib/debug.rb (Context::get_thread): no longer use #index for Hash.
+
+Tue Mar 4 21:35:59 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/irb.rb (IRB::Irb::eval_input): SyntaxError should not be
+ considered as IRB bug. [ruby-dev:33991]
+
+ * lib/irb/workspace.rb (IRB::WorkSpace::filter_backtrace): should
+ filter 'irb.rb' as well for context mode 2 and 3.
+
+Tue Mar 4 19:10:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_aset): should not copy key string when
+ compare_by_identity is set. [ruby-dev:33604]
+
+ * hash.c (hash_equal): two hash tables are different when internal
+ comparison table differ. [ruby-dev:33989]
+
+Tue Mar 4 16:29:06 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (parser_yylex): disallow non digits '0o' expression.
+
+Tue Mar 4 14:35:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (open_key_args): use rb_io_open_with_args instead of rb_f_open.
+ [ruby-core:15763]
+
+Tue Mar 4 13:41:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (add_heap): fix previous change. [ruby-dev:33988]
+
+Tue Mar 4 10:21:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (add_heap): use binary search to find the place to insert the
+ new heap slot. [ruby-dev:33983]
+
+Tue Mar 4 05:30:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (open_key_args): use rb_io_open instead of rb_f_open.
+ [ruby-core:15746]
+
+Mon Mar 3 23:28:37 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * 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].
+
+ * lib/webrick/httpservlet/filehandler.rb: pathnames which have
+ not to be published should be checked case-insensitively.
+
+Mon Mar 3 17:25:45 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (add_heap): sort heaps array in ascending order to use
+ binary search.
+
+ * gc.c (is_pointer_to_heap): use binary search to identify object
+ in heaps. works better when number of heap segments grow big.
+
+Mon Mar 3 17:15:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_regsub): remove too strict encoding check.
+ [ruby-dev:33966]
+
+Mon Mar 3 16:14:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * hash.c (rb_any_hash): shrinks all results in Fixnum range.
+ [ruby-core:15713]
+
+Sun Mar 2 23:03:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_ungetc): reduce redundant call.
+
+Sun Mar 2 10:13:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (load_file): parse shebang in us-ascii. a patch from
+ sheepman <sheepman AT sheepman.sakura.ne.jp> in [ruby-dev:33955]
+
+Sun Mar 2 00:08:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * object.c (rb_cstr_to_dbl): check for successive underscores.
+ [ruby-dev:33952]
+
+Sat Mar 1 17:59:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (struct argf): packed ARGF stuffs.
+
+ * ruby.c (proc_options): use ruby_set_inplace_mode().
+
+Sat Mar 1 17:51:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/test/unit/collector/dir.rb (recursive_collect): do not always
+ include all test_*.rb.
+
+Sat Mar 1 14:14:17 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * development snapshot 1.9.0-1 released.
+
+Sat Mar 1 13:46:26 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * tool/make-snapshot: make prereq uses MINIRUBY.
+
+ * tool/make-snapshot: allow packaging like 1.9.0-1 by second
+ command-line argument.
+
+Sat Mar 1 13:11:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/allpairs.rb: new file for all pairs method.
+
+ * test/ruby/test_m17n_comb.rb: use allpairs.rb to reduce test cases.
+
+ * test/ruby/test_sprintf_comb.rb: ditto.
+
+Sat Mar 1 12:34:21 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (sym_inspect): use rb_str_inspect() instead of
+ rb_str_dump(). [ruby-dev:33946]
+
+Sat Mar 1 12:15:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval_method.c (rb_get_method_body): ent->method may be freed by
+ GC. [ruby-dev:31819]
+
+ * thread.c (remove_event_hook): should not access freed memory.
+ [ruby-dev:31820]
+
+Sat Mar 1 10:31:19 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (read_all, rb_io_getline_fast): encoding is io_input_encoding.
+
+Sat Mar 1 10:09:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (tr_setup_table, rb_str_split_m, rb_str_chomp_bang):
+ simplified with rb_enc_ascget(). [ruby-dev:33944]
+
+Sat Mar 1 10:01:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_coderange_scan_restartable): should not return
+ offset in the middle of a character.
+
+ * string.c (rb_str_coderange_scan_restartable): should not return
+ invalid cr value.
+
+Sat Mar 1 09:36:08 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): "%#.0o" should keep prefix where
+ "%#.0x" should not.
+
+Sat Mar 1 02:35:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (big2str_find_n1): check integer overflow.
+
+Sat Mar 1 00:29:07 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_dummy_p): bootstrap encodings can not be dummy.
+
+ * encoding.c (rb_enc_ascget): no needs to call rb_enc_precise_mbclen()
+ twice.
+
+Fri Feb 29 23:14:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_m17n_comb.rb (TestM17NComb::test_str_chomp): test
+ updated.
+
+Fri Feb 29 20:58:09 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_iterator.rb (TestIterator::test_enumerator):
+ adjust test for zip behavior reversion.
+
+Fri Feb 29 20:25:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_chomp_bang): now works on UTF-16.
+
+ * string.c (tr_setup_table): negation should work on non ASCII
+ compatible strings as well.
+
+ * string.c (rb_str_split_m): awk split should work on non ASCII
+ compatible strings as well.
+
+Fri Feb 29 18:08:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * time.c (time_strftime): format should be ascii compatible.
+
+ * parse.y (rb_intern3): non ASCII compatible symbols.
+
+ * re.c (rb_reg_regsub): add encoding check.
+
+ * string.c (rb_str_chomp_bang): ditto.
+
+ * test/ruby/test_utf16.rb (TestUTF16::test_chomp): raises exception.
+
+Fri Feb 29 15:16:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_rpartition): calculation was done in byte indexing.
+
+ * test/ruby/test_m17n_comb.rb (TestM17NComb::test_str_start_with):
+ allow start_with? matching on broken strings.
+
+Fri Feb 29 15:12:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (opt_block_param): command can start just after block param
+ definition. [ruby-list:44479]
+
+Fri Feb 29 03:22:19 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/ruby/test_time.rb (test_readers): fix typo.
+ (test_strftime): "UTC" is also ok for time.gmtime.strftime("%Z").
+
+Fri Feb 29 02:50:07 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (str_new): remove encoding assumption of empty string.
+
+ * hash.c ( rb_f_getenv, env_fetch, env_inspect): result of ENV should
+ be always ASCII-8BIT.
+
+ * object.c (nil_to_s): nil.to_s should be US-ASCII.
+
+Fri Feb 29 02:24:22 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb: forgot to update RELEASE_DATE
+
+ * ext/tk/lib/tk.rb, ext/tk/lib/tk/text.rb,
+ ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb: remove adhoc check
+ of Ruby's features (use existence of some classes instead of
+ comparing with RUBY_VERSION)
+
+ * ext/tk/lib/tk/root.rb, ext/tk/lib/tk/autoload.rb: make TkRoot
+ (Tk::Root) unswitchable
+
+ * ext/tk/lib/multi-tk.rb: partial bug fix (still not work!!)
+
+Thu Feb 28 23:37:12 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb (OpenURI::Meta#meta_setup_encoding): use ASCII-8BIT
+ for charset unspecified non-text data.
+
+Thu Feb 28 22:19:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_capable): IMMEDIATE_P doesn't include Qnil and Qfalse.
+ use SPECIAL_CONST_P.
+
+Thu Feb 28 19:45:52 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (enc_find): check type of argument and convert to String
+ if it is StringValue. [ruby-cvs:22866]
+
+Thu Feb 28 18:07:52 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb (OpenURI::Meta#meta_setup_encoding): setup encoding
+ by charset.
+ (OpenURI::Meta#meta_add_field): call meta_setup_encoding when
+ content-type.
+
+Thu Feb 28 15:29:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * io.c (rb_io_getline_fast): scan coderange.
+
+Thu Feb 28 14:36:46 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_enc_str_copy): removed.
+
+Thu Feb 28 13:51:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (stack_check): made flag per threads.
+
+ * thread.c (rb_thread_set_raised, rb_thread_reset_raised): prefixed.
+
+Thu Feb 28 11:43:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_flock): immediately returns on EAGAIN if
+ non-blocking. [ruby-core:15672]
+
+Thu Feb 28 11:23:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_getline_1): get rid of segfault. [ruby-dev:33938]
+
+Thu Feb 28 11:19:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_reverse_bang): removed unused variables.
+
+ * include/ruby/encoding.h (rb_str_coderange_scan_restartable): added
+ prototype.
+
+ * string.c (rb_str_coderange_scan_restartable, rb_str_times): removed
+ unused variables.
+
+ * string.c (rb_str_reverse_bang): ditto
+
+ * string.c (rb_enc_str_copy): unused now. may be used in future?
+
+Thu Feb 28 03:03:32 2008 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/lib/tk.rb, ext/tk/lib/*: make default widget set
+ switchable between Tk (standard Tcl/Tk widget set) and
+ Ttk (Tile). Initial default widget set is Tk. Now, toplevel
+ widget classes are removed and defined as aliases.
+ For example, "TkButton" is an alias of the "Tk::Button" class.
+ Those aliases are replaced when switching default widget set.
+ "Tk.default_widget_set=" is the method for switching default
+ widget set. "Tk.default_widget_set = :Ttk" defines Ttk (Tile)
+ widget set as default. It means that "TkButton" denotes
+ "Tk::Tile::Button" class. And then, "TkButton.new" creates
+ a Tk::Tile::Button widget. Of course, you can back to use
+ standard Tk widgets as the default widget set by calling
+ "Tk.default_widget_set = :Tk", whenever you want. Based on
+ the feature, you can use Ttk widget styling engine on your
+ old Ruby/Tk application without modifying its source, if you
+ don't use widget options unsupported on Ttk widgets (At first,
+ call "Tk.default_widget_set = :Ttk", and next load and run
+ your application).
+ This is one step for supporting Tcl/Tk8.5 features.
+
+Wed Feb 27 22:55:42 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_coderange_scan_restartable): coderange scanning
+ for partial read.
+
+ * io.c (read_all): set coderange when not convert encoding.
+
+Wed Feb 27 03:55:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb, enc/make_encmake.rb: load current mkmf.rb even if
+ cross-compiling.
+
+ * ext/extmk.rb, enc/make_encmake.rb, lib/mkmf.rb: need to be 1.8
+ compatible for cross-compiling.
+
+Tue Feb 26 16:53:13 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-calculate-indent): should distinguish
+ comment and # in strings. [ruby-dev:33874]
+
+Tue Feb 26 16:41:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (combi_len, rb_ary_product): check for overflow.
+ [ruby-Bugs-18355]
+
+Tue Feb 26 16:38:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (recursive_cmp): compare minimal length parts.
+
+Tue Feb 26 16:06:00 2008 Technorama Ltd. <oss-ruby@technorama.net>
+
+ * ext/openssl/ossl_{ec,dh,dsa,rsa}.c: Remove useless warnings.
+
+ * ext/openssl/ossl_asn1.c: Simplify code.
+
+ * ext/openssl/ossl_ssl_session.c Fix compiler warnings.
+ Undefine #id if SSL_SESSION_get_id is not supported.
+
+Tue Feb 26 15:50:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (value_expr_gen): removed inappropriate warning.
+ [ruby-core:15660]
+
+Tue Feb 26 15:43:42 2008 Tanaka Akira <akr@fsij.org>
+
+ * parse.y (tokadd_escape): refactored. [ruby-core:15657]
+
+Tue Feb 26 15:30:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_eql, rb_ary_cmp): get rid of stack overflow with
+ self-recursive constructs. [ruby-Bugs-18356]
+
+Tue Feb 26 01:16:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (ROBJECT_NUMIV): renamed from ROBJECT_LEN.
+ (ROBJECT_IVPTR): renamed from ROBJECT_PTR.
+
+ * variable.c: follow the above renaming.
+
+ * object.c: ditto.
+
+ * gc.c: ditto.
+
+ * marshal.c: ditto.
+
+Mon Feb 25 17:30:29 2008 Technorama Ltd. <oss-ruby@technorama.net>
+
+ * ext/openssl/digest.c ext/openssl/lib/openssl/digest.rb:
+ Commit patch #9280 from Akinori MUSHA.
+ Simplify the OpenSSL::Digest class and make use of the
+ existing Digest framework.
+ Enhance performance.
+
+Mon Feb 25 15:33:29 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bignum.c (big2str_karatsuba): initialize cache if not initialized.
+
+ * bignum.c (Init_Bignum): delayed initializing cache.
+ [ruby-dev:33930]
+
+Mon Feb 25 13:40:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (Init_process): share bignum objects for RLIM_INFINITY,
+ RLIM_SAVED_MAX and RLIM_SAVED_CUR if they are equal.
+
+Mon Feb 25 10:41:41 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * encoding.c (Encoding#dummy): minor grammatical fixes
+ in rdoc documentation.
+
+Mon Feb 25 00:01:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cygwin/GNUmakefile.in (clean-local): should be double-colon.
+
+Sun Feb 24 23:39:59 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk, {bcc,win}32/Makefile.sub (clean-local): remove
+ intermediate files.
+
+ * cygwin/GNUmakefile.in (clean-local): remove def file.
+
+Sun Feb 24 06:49:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * debug.c (ruby_set_debug_option): separated ruby_each_words().
+
+ * util.c (ruby_each_words): extracted from ruby_set_debug_option().
+
+ * ruby.c (enable_option, disable_option): allow all for all known
+ features.
+
+ * ruby.c (proc_options): generalized enable/disable options.
+
+ * ruby.c (ruby_init_gems): take enabled flag. [ruby-core:14840]
+
+ * ruby.c (process_options): added --disable-rubyopt flag.
+
+ * include/ruby/util.h (ruby_each_words): prototype.
+
+Sun Feb 24 05:25:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options): check if argument for -E exists.
+
+Sun Feb 24 05:09:43 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-style.el (ruby-style-label-indent): fix for labels inside
+ blocks in switch.
+
+Sun Feb 24 03:52:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * util.c (valid_filename): use O_EXCL to get rid of clobbering
+ existing files in race conditions.
+
+Sat Feb 23 21:36:13 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/win32ole/win32ole.c (ole_init_cp): should return value.
+
+Sat Feb 23 20:16:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (str_sublen): removed.
+
+ * string.c (rb_str_reverse, rb_str_reverse_bang): use
+ single_byte_optimizable.
+
+Sat Feb 23 19:25:18 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_enc_cr_str_copy_for_substr): renamed from
+ rb_enc_cr_str_copy.
+
+ * string.c: use rb_enc_cr_str_copy_for_substr and keep coderange.
+
+Sat Feb 23 18:50:17 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_encoding2cp): remove US-ASCII
+ mapping.
+
+Sat Feb 23 01:09:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * process.c (rlimit_resource_type): new function.
+ (rlimit_resource_value): new function.
+ (proc_getrlimit): use rlimit_resource_type to accept
+ symbol and string as resource type.
+ (proc_setrlimit): use rlimit_resource_type and rlimit_resource_value
+ to accept symbol and string as resource type and values.
+
+Fri Feb 22 21:12:42 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_enc_cr_str_copy): check string's coderange is 7bit or
+ valid.
+
+Fri Feb 22 19:50:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (BIGZEROP): fix for longer Bignum zeros. [ruby-Bugs-17454]
+
+Fri Feb 22 15:47:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_mbclen): return minlen instead of 1 when
+ a character is not found properly.
+
+ * string.c (rb_enc_strlen): round up string length with fixed
+ multibyte encoding such as UTF-32.
+ (rb_enc_strlen_cr): ditto.
+ (rb_str_substr): fix substring with fixed multibyte encoding.
+ (rb_str_justify): check number of characters.
+
+Fri Feb 22 12:11:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_inspect): string of ascii incompatible encoding
+ should be escaped and returned as US-ASCII encoding.
+
+Fri Feb 22 11:16:55 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_substr): copy encoding although empty string.
+
+Fri Feb 22 04:48:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_times): empty string's coderange is CODERANGE_7BIT.
+
+ * string.c (rb_str_substr): ditto.
+
+ * encoding.c (rb_enc_compatible): empty string is compatible with not
+ only nonasciicompatible strings. [ruby-dev:33895]
+
+Thu Feb 21 17:15:15 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c: Added basic support for passing options to String#encode
+ via a hash. Currently only one option, with one value, is supported:
+ invalid: :ignore (dropping invalid byte sequences instead of
+ producing an error). Option naming is not yet stable!
+
+ * test/ruby/test_transcode.rb: Added a single test for invalid: :ignore
+ option. Not more tests because most data does not yet distinguish
+ between INVALID and UNKNOWN.
+
+Thu Feb 21 16:35:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (rb_ary_unshift_m): expands enough for argc. [ruby-dev:33880]
+
+Thu Feb 21 14:49:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (argf_set_encoding): uses current_file after check if next
+ input is available.
+
+Thu Feb 21 14:13:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_f_putc): invoke stdout method so that redefining putc
+ may take effect. [ruby-talk:291844]
+
+ * io.c (rb_f_puts): ditto.
+
+Thu Feb 21 11:10:49 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c: replace rb_enc_copy by rb_enc_cr_str_copy or
+ rb_enc_cr_str_exact_copy.
+
+Thu Feb 21 10:35:04 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/encoding.h (rb_enc_asciicompat): dummy encoding is not
+ ascii compatible. [ruby-dev:33878]
+
+Thu Feb 21 00:01:34 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RPATHFLAG): -R option of HP-UX ld is not for runtime
+ load path. [ruby-list:44600]
+
+Wed Feb 20 23:55:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/win32.c (rb_w32_map_errno): exported.
+
+Wed Feb 20 23:28:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/readline/extconf.rb (rl_event_hook): workaround for native
+ windows.
+
+Wed Feb 20 19:42:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_associate_index): doesn't clear coderange
+ when new encoding equals to old one.
+
+Wed Feb 20 19:15:38 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_enc_str_copy): added for wrapper for rb_enc_copy.
+ this also copy coderange when ptr and len is equal.
+
+ * string.c (rb_enc_cr_str_copy): added for wrapper for rb_enc_copy.
+ this always copy coderange.
+
+ * string.c (str_replace_shared): use rb_enc_str_copy.
+
+ * string.c (str_new3): don't rb_enc_copy because encoding is copied
+ at str_replace_shared.
+
+Wed Feb 20 13:08:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * instruby.rb (parse_args): added --dir-mode, --script-mode and
+ --cmd-type options. [ruby-dev:33816]
+
+ * instruby.rb (parse_args): added bin-arch and bin-comm to install
+ type, for compiled files and script files.
+
+ * instruby.rb (parse_args): deal with make style command line macros,
+ and count as long style options if prefixed with INSTALL_.
+
+ * instruby.rb (makedirs): use $dir_mode. [ruby-dev:33805]
+
+ * instruby.rb (open_for_install): set file mode, which is now
+ permission mode instead of access mode.
+
+ * instruby.rb (bin-comm): installs scripts with replacing shebang
+ lines.
+
+Wed Feb 20 10:04:22 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (open_key_args): set arg->io even if no options passed.
+ [ruby-dev:33072]
+
+Tue Feb 19 21:11:49 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_enc_strlen_cr): get length with coderange scan.
+
+ * string.c (str_strlen): use rb_enc_strlen_cr. [ruby-dev:33849]
+
+Tue Feb 19 20:49:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_raise_jump): moved adjustment for control frame.
+
+Tue Feb 19 18:34:32 2008 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (STACK_LENGTH) [SPARC] : 0x80 offset removed. [ruby-dev:33857]
+
+Tue Feb 19 14:27:32 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_event): prevent polling. based on
+ a patch from error errorsson in [ruby-Bugs-17675].
+
+Tue Feb 19 11:14:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (ruby_exec_node): no thread starts inside iseq compilation.
+
+ * eval.c (rb_f_raise): skip current control frame. [ruby-core:15589]
+
+ * insns.def (opt_div): raise as the ordinary method. [ruby-core:15589]
+
+Mon Feb 18 15:16:30 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_each_line): fix newline size.
+
+Mon Feb 18 13:06:37 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/irb/locale.rb (IRB::Locale#lc2kconv): check ja_JP.EUC-JP as well.
+
+Mon Feb 18 11:51:19 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (re_warn): defined to restore warnings for /[a-c-e]/, etc.
+
+Mon Feb 18 10:17:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/pty/lib/expect.rb (IO#expect): check if peer is closed.
+ [ruby-Bugs-17940]
+
+Mon Feb 18 00:33:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_regsub): don't repeat repl twice with
+ "X".sub!(/./, sprintf("\\%c", 255)).
+
+Sun Feb 17 23:06:55 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * lib/cgi.rb (CGI::escapeHTML): use gsub with Hash. [ruby-dev:33828]
+
+Sun Feb 17 21:38:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (ENC_CODERANGE_AND): fix broken case. [ruby-dev:33826]
+
+ * string.c (rb_str_times): fix broken case. [ruby-dev:33826]
+
+Sun Feb 17 20:45:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_prepare_re): add enable_warning parameter.
+ (rb_reg_adjust_startpos): disable warning by rb_reg_prepare_re.
+ (rb_reg_search): follow rb_reg_prepare_re parameter change.
+
+Sun Feb 17 20:12:41 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_regexp.rb: add tests to achieve over 90% test
+ coverage of re.c.
+
+Sun Feb 17 15:25:08 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (ENC_CODERANGE_AND): added.
+
+ * string.c (rb_str_plus, rb_str_times): keep coderange.
+
+ * parse.y (STR_NEW0) use rb_usascii_str_new.
+
+Sun Feb 17 14:07:24 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (str_strlen): rb_enc_strlen doesn't fail.
+
+Sun Feb 17 13:03:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (str_sublen): use rb_enc_strlen.
+
+Sun Feb 17 12:17:52 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/{euc_jp.c,gbk.c,iso_8859_1.c,iso_8859_11.c,iso_8859_13.c,
+ iso_8859_2.c,iso_8859_6.c,iso_8859_7.c,iso_8859_8.c,iso_8859_9.c,
+ shift_jis.c,windows_1251.c}: add document about encodings.
+
+ * enc/cp949.c: divided into new file.
+
+Sun Feb 17 10:59:04 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_quote): return US-ASCII string consistently.
+
+Sun Feb 17 09:17:08 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_times): reduce loop overhead.
+
+Sun Feb 17 03:37:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/re.h (struct rmatch_offset): new struct for character
+ offsets.
+ (struct rmatch): new struct.
+ (struct RMatch): reference struct rmatch.
+ (RMATCH_REGS): new macro.
+
+ * re.c (match_alloc): initialize struct rmatch.
+ (pair_byte_cmp): new function.
+ (update_char_offset): update character offsets.
+ (match_init_copy): copy regexp and character offsets.
+ (match_sublen): removed.
+ (match_offset): use update_char_offset.
+ (match_begin): ditto.
+ (match_end): ditto.
+ (rb_reg_search): make character offset updated flag false.
+ (match_size): use RMATCH_REGS.
+ (match_backref_number): ditto.
+ (rb_reg_nth_defined): ditto.
+ (rb_reg_nth_match): ditto.
+ (rb_reg_match_pre): ditto.
+ (rb_reg_match_post): ditto.
+ (rb_reg_match_last): ditto.
+ (match_array): ditto.
+ (match_aref): ditto.
+ (match_values_at): ditto.
+ (match_inspect): ditto.
+
+ * string.c (rb_str_subpat_set): use RMATCH_REGS.
+ (rb_str_sub_bang): ditto.
+ (str_gsub): ditto.
+ (rb_str_split_m): ditto.
+ (scan_once): ditto.
+
+ * gc.c (obj_free): free character offsets.
+
+Sun Feb 17 03:13:40 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/resource.rb: made version infos confirm to OS spec.
+
+ * {bcc32,win32}/Makefile.sub (*.rc): add dependency.
+
+Sat Feb 16 20:49:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_substr): optimized for UTF-8.
+
+Sat Feb 16 18:13:53 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_compatible): check encoding incapable arguments.
+
+Sat Feb 16 20:12:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (match_inspect): avoid SEGV with MatchData.allocate.inspect.
+
+Sat Feb 16 19:04:17 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (str_strlen): revert r15507. [ruby-dev:33810]
+
+Sat Feb 16 18:25:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (str_strlen): little more optimization.
+ (rb_enc_nth): remove needless variable 'c'.
+
+Sat Feb 16 18:00:13 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_compatible): empty strings are always compatible.
+
+ * string.c (rb_enc_cr_str_buf_cat): ditto.
+
+Sat Feb 16 16:14:35 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_enc_strlen): UTF-8 character count moved to str_strlen.
+ (str_strlen): UTF-8 character count is only applicable for valid
+ UTF-8 string. [ruby-dev:33807]
+
+Sat Feb 16 13:16:49 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_sub_bang): stringize replacing hash values.
+ (str_gsub): ditto.
+
+Sat Feb 16 13:01:33 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_enc_strlen): add search_nonascii like character
+ counter for UTF-8.
+
+Sat Feb 16 11:53:35 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_strlen): moved to string.c.
+
+ * string.c (rb_enc_strlen): use search_nonascii.
+ (str_strlen): don't use search_nonascii.
+
+Sat Feb 16 11:45:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/require_relative.rb: check require_relative call in eval.
+
+Sat Feb 16 08:00:01 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ruby.c (process_options): set default_external before loading
+ libraries. [ruby-dev:33801]
+
+Sat Feb 16 05:49:54 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/iso_8859_{4,13}.c: Windows-1257 is replica of ISO-8859-13.
+
+ * string.c (single_byte_optimizable): rb_enc_mbminlen must be 1
+ when rb_enc_mbmaxlen is 1.
+
+Sat Feb 16 03:43:18 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_nth): moved to string.c.
+
+ * string.c (rb_enc_nth): moved from string.c. use search_nonascii
+ for ASCII compatible string.
+ (str_nth): wrong optimization removed to fix
+ "a".force_encoding("EUC-JP").slice!(0,10) returns
+ "a\x00\x00\x00\x00\x00\x00\x00\x00\x00"
+
+Sat Feb 16 00:21:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * range.c (rb_range_beg_len): check if responds to "begin" and "end"
+ methods for non-Range object.
+
+Fri Feb 15 20:29:42 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_init_cp): initialize WIN32OLE.codepage
+ according to Encoding.default_external.
+
+ * test/win32ole/test_win32ole.rb: ditto.
+
+Fri Feb 15 19:31:23 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * include/ruby/node.h (NODE_FL_NEWLINE): renamed from NODE_NEWLINE
+ to denote its a flag. [ruby-core:15529]
+
+Fri Feb 15 18:23:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_sub_bang, str_gsub): allows hash for replacement.
+
+Fri Feb 15 17:12:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_strlen): use search_nonascii() for performance.
+
+ * string.c (str_nth): ditto.
+
+Fri Feb 15 16:22:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (open_key_args): allow specifying both :mode and :encoding.
+
+Fri Feb 15 15:34:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_getbyte): new method.
+ (rb_str_setbyte): new method.
+
+Fri Feb 15 15:29:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/require_relative.rb: new file.
+
+Fri Feb 15 15:23:12 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (iconv_convert): check upper bound. a patch from
+ Daniel Luz at [ruby-Bugs-17910].
+
+Fri Feb 15 10:35:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * re.c (rb_reg_quote): set US-ASCII for ASCII-only string.
+ [ruby-dev:33785]
+
+Fri Feb 15 10:27:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * {win,bcc}32/Makefile.sub (config.h): added HAVE_FTRUNCATE.
+ [ruby-dev:33786]
+
+Fri Feb 15 09:44:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (reg_compile_gen): reg_fragment_setenc might not raise an
+ exception before rb_reg_compile.
+
+Fri Feb 15 07:37:40 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/ri/paths.rb: Preserve compatibility with 1.8.
+
+Fri Feb 15 02:42:25 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (ftruncate): check if available.
+
+ * file.c (rb_file_truncate): check if ftruncate instead of truncate.
+
+Fri Feb 15 02:40:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (sigsetmask): check when signal semantics is not POSIX.
+
+ * signal.c (USE_TRAP_MASK): set true if sigprocmask or sigsetmask is
+ available.
+
+Thu Feb 14 23:56:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_error.c (error_print): append a newline to rest lines.
+
+ * parse.y (reg_compile_gen): appends error message from
+ rb_reg_compile() to one from reg_fragment_setenc().
+
+Thu Feb 14 21:00:14 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_reopen): check STDIN, STDOUT and STDERR mode according to
+ stdio streams.
+
+Thu Feb 14 16:07:40 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_math.rb: actual-expected argument ordering for
+ test_math.rb fixed. a patch from Tadashi Saito
+ <shiba AT mail2.accsnet.ne.jp> in [ruby-dev:33770].
+
+Thu Feb 14 16:02:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_s_utime): inhibits with secure level 2 or higher.
+
+Thu Feb 14 12:30:02 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_preprocess_dregexp): use non-preprocessed regexp source
+ for result.
+
+Thu Feb 14 01:43:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/timeout.rb (Timeout::timeout): made sensitive to location on the
+ stack. [ruby-core:15458]
+
+Thu Feb 14 00:49:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (INSTRUBY_ARGS): pass mode to install. [ruby-dev:33766]
+
+ * instruby.rb (parse_args): added --data-mode and --prog-mode options.
+
+Thu Feb 14 00:02:19 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * eval.c (eval): allow to eval in a binding that has a singleton method.
+ [ruby-dev:33763]
+
+ * test/ruby/test_proc.rb: add tests to achieve over 70% test coverage
+ of proc.c.
+
+ * test/ruby/test_method.rb: ditto.
+
+Wed Feb 13 22:46:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/pathname.rb (Pathname#sub_ext): new method. [ruby-list:44608]
+
+Wed Feb 13 21:50:32 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * proc.c (proc_curry): new method. [ruby-dev:33676]
+
+ * test/ruby/test_proc.rb: add tests for above.
+
+Wed Feb 13 20:48:50 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (RObject): add iv_index_tbl for shortcut of
+ RCLASS_IV_INDEX_TBL(rb_obj_class(obj)).
+ (ROBJECT_IV_INDEX_TBL): defined.
+
+ * object.c (init_copy): initialize iv_index_tbl in struct RObject.
+
+ * variable.c (ivar_get): use ROBJECT_IV_INDEX_TBL.
+ (rb_ivar_defined): ditto.
+ (obj_ivar_each): ditto.
+ (rb_obj_remove_instance_variable): ditto.
+ (rb_ivar_set): update iv_index_tbl in struct RObject.
+
+Wed Feb 13 16:21:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/uri/generic.rb: revert r15442. 2nd argument of String#sub parse
+ escapes. [ruby-dev:33726]
+
+ * bootstraptest/test_method.rb, enc/depend, instruby.rb, lib/mkmf.rb,
+ mkconfig.rb: revert r15443. ditto.
+
+Wed Feb 13 11:20:26 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * enc/depend: fix typo.
+
+ * lib/mkmf.rb: revert r15443. "\\1#{sep}\\2" is wrong if sep is ended
+ with "\\".
+
+Wed Feb 13 08:57:21 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/markup/inline.rb: Allow inline markup to have a leading
+ '#' or '\', or trailing punctuation. i.e. *#freeze?*, *\foo?*.
+
+Wed Feb 13 07:21:23 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/to_html_hyperlink.rb: Moved linking to to_html.rb, move
+ crossref to to_html_crossref.rb
+
+Wed Feb 13 04:15:44 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (arg_concat_gen, arg_append_gen): optimize for array push.
+
+ * parse.y (arg_concat_gen): optimize for array concat.
+
+ * parse.y (arg_add_gen): removed since identical to arg_append_gen.
+
+Tue Feb 12 21:04:51 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (exc_list): should use mrhs if non array.
+
+Tue Feb 12 20:32:50 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/rational.rb (floor, ceil, truncate, round): do not use
+ definitions of Numeric.
+
+ * lib/rational.rb (to_i): should returns truncated self.
+
+ * lib/complex.rb (numerator): requires
+ Integer#{numerator,denominator}.
+
+ * lib/complex.rb (quo): do not use definition of Numeric.
+
+ * lib/complex.rb (>, >=, <, <=, between?, div, divmod, modulo,
+ floor, ceil, truncate, round): undef'ed.
+
+ * lib/mathn.rb (Rational#inspect): removed.
+
+Tue Feb 12 16:48:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (args, mrhs): flattens literal array splats.
+
+ * parse.y (exc_list): splat literal array.
+
+Tue Feb 12 15:27:19 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * bootstraptest/runner.rb, bootstraptest/test_method.rb, enc/depend,
+ instruby.rb, lib/mkmf.rb, lib/test/unit/util/procwrapper.rb,
+ mkconfig.rb, sample/test.rb, template/vm.inc.tmpl,
+ test/ruby/test_stringchar.rb: fixes around String#gsub.
+
+Tue Feb 12 15:11:47 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/json/lib/json/pure/generator.rb,
+ ext/json/lib/json/pure/parser.rb, ext/openssl/lib/openssl/x509.rb,
+ ext/win32ole/sample/olegen.rb, lib/date/format.rb, lib/irb/context.rb,
+ lib/irb/workspace.rb, lib/net/http.rb, lib/net/imap.rb,
+ lib/rdoc/generator.rb, lib/rdoc/markup/to_html.rb,
+ lib/rdoc/markup/to_latex.rb, lib/rdoc/parsers/parse_c.rb,
+ lib/rdoc/ri/formatter.rb, lib/rexml/parsers/baseparser.rb,
+ lib/rexml/quickpath.rb, lib/rexml/text.rb, lib/rss/parser.rb,
+ lib/uri/common.rb, lib/uri/generic.rb, lib/webrick/httpresponse.rb,
+ lib/webrick/httpservlet/filehandler.rb, lib/yaml/baseemitter.rb,
+ lib/yaml/encoding.rb: performance tuning around String#gsub.
+
+Tue Feb 12 12:16:45 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_hash_cmp): lighter version of rb_str_cmp() for
+ hash comparison function.
+
+ * hash.c (rb_any_cmp): use rb_str_hash_cmp().
+
+ * string.c (rb_str_casecmp): should return nil for incompatible
+ comparison.
+
+Tue Feb 12 12:13:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * instruby.rb: specify file mode to install. a patch from
+ pegacorn <subscriber.jp AT gmail.com> in [ruby-dev:33699].
+
+Tue Feb 12 11:38:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (rb_num_coerce_bin): add ID argument to specify
+ caller's method name. [ruby-dev:33663]
+
+ * numeric.c (rb_num_coerce_cmp): ditto.
+
+ * numeric.c (rb_num_coerce_relop): ditto.
+
+ * ext/bigdecimal/bigdecimal.c (DoSomeOne): add function name argument.
+
+Tue Feb 12 10:25:02 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/rdoc.rb: Wrap parse_files' read in version check for
+ backwards compatibility.
+
+Tue Feb 12 10:15:14 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ruby.c (load_file): enc must effect source encoding.
+ [ruby-core:15496]
+
+Tue Feb 12 10:16:47 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/ri/paths.rb: Restore require rubygems check.
+
+Tue Feb 12 02:42:27 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * range.c (range_include): specialize single character string
+ case (e.g. (?a ..?z).include(?x)) for performance.
+ [ruby-core:15481]
+
+ * string.c (rb_str_upto): specialize single character case.
+
+ * string.c (rb_str_hash): omit coderange scan for performance.
+
+ * object.c (rb_check_to_integer): check Fixnum first.
+
+ * object.c (rb_to_integer): ditto.
+
+ * string.c (rb_str_equal): inline memcmp to avoid unnecessary
+ rb_str_comparable().
+
+ * parse.y (rb_intern2): use US-ASCII encoding.
+
+ * parse.y (rb_intern_str): ditto.
+
+Mon Feb 11 17:21:18 2008 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb (RSS::VERSION), test/rss/test_version.rb:
+ 0.2.3 -> 0.2.4.
+
+ * lib/rss/maker.rb, lib/rss/maker/, test/rss/test_maker_2.0.rb:
+ fixed a bug that RSS::Maker.make("0.9")'s item doesn't make some
+ elements if description is missed.
+ Reported by Michael Auzenne. Thanks!!!
+
+ * lib/rss/maker/0.9.rb, test/rss/test_maker_0.9.rb:
+ RSS::Maker.make("0.9") generates RSS 0.92 not RSS 0.91.
+
+Mon Feb 11 10:43:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ruby.c (load_file): the encoding of DATA follows the source
+ file encoding. [ruby-dev:33693]
+
+Mon Feb 11 06:50:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_pack.rb: fix tests for 64bit CPU.
+
+ * test/ruby/test_bignum.rb: ditto.
+
+ * test/ruby/test_file_exhaustive.rb: ditto.
+
+ * test/ruby/test_integer.rb: ditto.
+
+ * test/ruby/test_time.rb: ditto.
+
+ * test/ruby/test_numeric.rb: ditto.
+
+ * test/ruby/test_fixnum.rb: ditto.
+
+Mon Feb 11 00:18:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/benchmark.rb (Job::Benchmark#item): fix typo.
+
+Sun Feb 10 21:58:32 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk (encdb, transdb): depend on $(PREP).
+
+Sun Feb 10 16:58:20 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems*, test/rubygems*, gem_prelude.rb: Import RubyGems
+ r1601. [ruby-core:15381]
+
+Sun Feb 10 15:07:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * {bcc32,win32,wince}/Makefile.sub (MISSING): added cbrt.obj.
+
+Sun Feb 10 12:58:33 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/code_objects.rb: Make some attributes accessible for reuse.
+ * lib/rdoc/generator/html.rb: Pull out ContextUser classes and related
+ methods for reuse.
+ * lib/rdoc/generator.rb: Move ContextUser classes to
+ RDoc::Generator::Context for reuse.
+ * lib/rdoc/rdoc.rb: Make RDoc::RDoc initialization a little easier.
+ * lib/rdoc/options.rb: Make RDoc::Options easier to use without
+ parsing an ARGV.
+ * lib/rdoc/markup/to_*.rb: Subclass RDoc::Markup::Formatter.
+ * lib/rdoc/markup/formatter.rb: Add RDoc::Markup::Formatter to make
+ RDoc markup conversion easier.
+ * lib/rdoc/markup/fragments.rb: Make RDoc::Markup::ListItem easier to
+ test.
+ * lib/rdoc/markup/to_html_hyperlink.rb: Pulled out of the HTML
+ generator for easier reusability.
+ * lib/rdoc/markup.rb: Fix bug with labeled lists containing bullet
+ lists.
+ * lib/rdoc/generators/html/html.rb: Fix Constant display.
+
+Sat Feb 9 23:44:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * missing/tgamma.c (tgamma): use lgamma_r if available.
+
+Sat Feb 9 23:22:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/extconf.rb: simplified the condition.
+
+Sat Feb 9 21:20:28 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_math.rb: add tests for Math.gamma, Math.lgamma and
+ Math.cbrt, and use assert_in_delta instead of assert.
+
+Sat Feb 9 18:34:45 2008 Tanaka Akira <akr@fsij.org>
+
+ * math.c (math_cbrt): new method Math.cbrt.
+
+ * configure.in (cbrt): check for replacement functions.
+
+ * missing/cbrt.c: new file.
+
+Sat Feb 9 17:51:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_to_f): use strtod() for more
+ precision. [ruby-talk:290296]
+
+ * ext/bigdecimal/bigdecimal.c (BASE_FIG): made constant.
+
+ * ext/bigdecimal/extconf.rb: ditto. [ruby-dev:33658]
+
+Sat Feb 9 12:06:45 2008 Tanaka Akira <akr@fsij.org>
+
+ * missing/tgamma.c (tgamma): add error check.
+
+Sat Feb 9 11:47:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * math.c (math_gamma): add error check.
+ (math_lgamma): ditto.
+
+Sat Feb 9 11:09:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * missing/lgamma_r.c (lgamma_r): return HUGE_VAL for non-positive
+ integers.
+
+Sat Feb 9 10:03:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_new4): copy encoding from orig, instead of shared
+ one.
+
+Sat Feb 9 01:01:38 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * file.c (lchmod_internal): fix warning cast from pointer to integer of
+ different size.
+
+Sat Feb 9 00:44:52 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/irb.rb (IRB::Irb::eval_input): rescues Interrupt and other than
+ SystemExit and SignalException. [ruby-core:15359]
+
+Fri Feb 8 23:51:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * missing/lgamma_r.c (lgamma_r): use smaller argument for sin function.
+
+Fri Feb 8 22:10:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb (OpenURI.open_http): rescue URI::InvalidURIError by
+ URI.parse for location URI.
+
+Fri Feb 8 19:22:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (rb_str_derive): uses rb_str_subseq() for byte
+ length. [ruby-dev:33653]
+
+ * ext/iconv/iconv.c (iconv_convert): added toidx argument to set
+ encoding of successfully converted string. [ruby-dev:33221]
+
+Fri Feb 8 15:09:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (xsystem): expand macros like as make.
+
+Fri Feb 8 09:27:57 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rdoc/ri/driver.rb (read_yaml): remove SM* for compatibility.
+
+Fri Feb 8 00:07:24 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_hash.rb: follow the change of Hash#flatten.
+
+ * test/ruby/test_time.rb: add tests to achieve over 70% test coverage
+ of time.c.
+
+ * test/ruby/test_prec.rb: ditto over 90% for prec.c.
+
+Thu Feb 7 19:11:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_dup): reverted unneeded change. [ruby-dev:33634]
+
+ * string.c (rb_str_replace): makes frozen shared string before
+ sharing.
+
+Thu Feb 7 16:33:51 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_reopen): don't change access mode for stdin, stdout and
+ stderr. [ruby-core:15360]
+
+Thu Feb 7 16:33:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_replace_shared): replaces string with sharing.
+
+ * string.c (rb_str_new4, rb_str_associate, rb_str_associated): allows
+ associated strings shared.
+
+ * string.c (rb_str_dup, rb_str_substr, rb_str_replace): shares memory.
+ [ruby-core:15400]
+
+Thu Feb 7 15:42:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_end_with): compares with the suffix.
+
+Thu Feb 7 15:03:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/korean.c: add support for CP949 by Park Ji-In.
+ [ruby-dev:33626]
+
+Thu Feb 7 11:11:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * missing/lgamma_r.c (lgamma_r): some compilers don't permit dividing
+ by literal 0.0. use const variable instead.
+
+ * {bcc32,win32,wince}/Makefile.sub (MISSING): add lgamma_r.obj and
+ tgamma.obj.
+
+Thu Feb 7 10:39:21 2008 Tanaka Akira <akr@fsij.org>
+
+ * math.c (math_gamma): new method Math.gamma.
+ (math_lgamma): new method Math.lgamma.
+
+ * include/ruby/missing.h (tgamma): declared unless HAVE_TGAMMA.
+ (lgamma_r): declared unless HAVE_LGAMMA_R.
+
+ * configure.in (tgamma): check for replacement functions.
+ (lgamma_r): ditto.
+
+ * missing/tgamma.c: new file. based on gamma.c from
+ "C-gengo niyoru saishin algorithm jiten" (New Algorithm handbook
+ in C language) (Gijyutsu hyouron sha, Tokyo, 1991)
+ by Haruhiko Okumura.
+
+ * missing/lgamma_r.c: ditto.
+
+ * LEGAL (missing/tgamma.c): describe as public domain.
+ (missing/lgamma_r.c): ditto.
+
+Thu Feb 7 09:05:57 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c (nkf_enc_from_index): BINARY does not
+ have in-bound encoding index.
+
+Thu Feb 7 04:26:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/korean.c: add EUC-KR conversion support by Park Ji-In.
+ [ruby-dev:33621]
+
+Wed Feb 6 01:47:39 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * hash.c (rb_hash_flatten): do not flatten recursively by default.
+ [ruby-dev:33603]
+
+Wed Feb 6 00:50:19 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * insns.def (adjuststack): never use INC_SP with minus value because
+ some compilers cannot deal it correctly. use DEC_SP instead.
+
+Wed Feb 6 00:48:41 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_hash.rb: add tests to achieve over 90% test coverage
+ of hash.c.
+
+ * test/ruby/test_env.rb: ditto.
+
+Wed Feb 6 00:24:49 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * hash.c (env_rassoc): remove access to free'd environment on mswin32.
+
+Tue Feb 5 21:57:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * vm.c (rb_call_super): pass a passed block when super is called via
+ rb_call_super. [ruby-dev:33598]
+
+Tue Feb 5 11:14:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (INSTALL_DIRS, install_dirs): added BINDIR.
+
+ * lib/mkmf.rb (install_files): rejects files matching to
+ $NONINSTALLFILES.
+
+ * lib/mkmf.rb (init_mkmf): defaults $NONINSTALLFILES to backup and
+ temporary files.
+
+Mon Feb 4 21:52:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/delegate.rb (DelegateClass): use define_method instead of
+ module_eval to improve performance. [ruby-dev:33586]
+
+Mon Feb 4 16:44:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (darwin): NSIG is not defined if _XOPEN_SOURCE > 500L.
+ [ruby-dev:33584]
+
+Mon Feb 4 14:51:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_enc_symname2_p): support "!", "!=" and "!~".
+ [ruby-dev:33592]
+
+Mon Feb 4 13:58:42 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/delegate.rb (Delegator.preserved, DelegateClass.methods): extend
+ shouldn't be delegated. [ruby-dev:32987], etc.
+
+Mon Feb 4 08:59:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/cgi.rb (CGI::QueryExtension::[]): no more transition
+ extend(CGI::Value). a patch from <tommy AT tmtm.org> in
+ [ruby-dev:33583].
+
+Sun Feb 3 21:13:13 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_numeric.rb: forgot to add this (at r15360).
+
+ * test/ruby/test_file_exhaustive.rb: add tests to achieve over 80% test
+ coverage of file.c.
+
+Sat Feb 2 20:06:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/benchmark.rb (Benchmark::realtime): make Benchmark#realtime
+ a bit faster. a patch from Alexander Dymo <dymo AT ukrpost.ua> in
+ [ruby-core:15337].
+
+Sat Feb 2 17:40:21 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * time.c (time_cmp): Time.<=> no longer supports comparison with
+ numeric. [ruby-core:15332]
+
+Sat Feb 2 09:53:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (darwin): disabled fat-binary support which confuses
+ configure much, since ``universal'' implies hidden cross-compiling.
+ TODO: ruby and libruby.bundle might be possible to bound with `lipo'
+ after builds for each archs. Anyway, config.h and rbconfig.rb must
+ be separated definitely at least.
+
+Sat Feb 2 09:28:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * random.c (limited_big_rand): fix buffer overflow when SIZEOF_BDIGITS
+ is 2. fixed by Kenta Murata. [ruby-dev:33565]
+
+Fri Feb 1 21:42:37 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (darwin): _XOPEN_SOURCE is necessary to make ucontext_t
+ consistent with the library implementation of MacOS X 10.5.
+ [ruby-dev:33461]
+
+ * configure.in (darwin): ucontext on PowerPC MacOS X 10.5 is broken.
+
+Fri Feb 1 11:44:22 2008 Tanaka Akira <akr@fsij.org>
+
+ * tool/compile_prelude.rb (C_ESC): use octal escape to avoid
+ "\x09for (;;) ..." to be interpret the first character 0x9f.
+
+Thu Jan 31 23:06:42 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_bignum.rb: suppress warnings during test.
+
+ * test/ruby/test_enum.rb: ditto.
+
+ * test/ruby/test_integer.rb: add tests to achieve over 90% test
+ coverage of numeric.c.
+
+ * test/ruby/test_float.rb: ditto.
+
+ * test/ruby/test_fixnum.rb: ditto.
+
+ * test/ruby/test_numeric.rb: ditto.
+
+ * test/ruby/test_pack.rb: add tests to achieve over 90% test coverage
+ of pack.c.
+
+Thu Jan 31 17:30:42 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * marshal.c (r_object0): no need to call r_entry for immediate values.
+
+Thu Jan 31 15:46:30 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/rdoc/ri/formatter.rb (output): add accessor.
+
+ * lib/rdoc/ri/display.rb (page): replace @formatter.output instead of
+ $stdout.
+
+Thu Jan 31 15:06:50 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * marshal.c (r_object0): call r_entry/r_leave to call proc when
+ TYPE_FIXNUM, TYPE_NIL, TYPE_TRUE, TYPE_FALSE, TYPE_SYMBOL.
+
+Thu Jan 31 14:03:38 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/rdoc/ri/display.rb (display_method_list, display_class_list):
+ use @formatter.raw_print_line instead of puts.
+
+ * lib/rdoc/ri/driver.rb (select_methods): new method to collect all
+ instance/class methods which match with passed pattern.
+
+ * lib/rdoc/ri/driver.rb (run): use class_cache's result directly
+ instead of select_classes' because it's removed now.
+
+ * lib/rdoc/ri/driver.rb (run): search methods when passed name is not
+ class name. [ruby-core:15309]
+
+Thu Jan 31 08:31:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (ext/extmk.rb, instruby.rb): inlined $(MAKE) so that can
+ be executed even with -n.
+
+Thu Jan 31 06:24:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_close_read): replaces fptr with the tied writer if
+ duplex.
+
+ * io.c (rb_io_close_write): unties the tied IO for writing if duplex.
+ [ruby-dev:33532]
+
+Thu Jan 31 02:22:04 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (open_key_args): allow encoding key to take two encoding
+ names. a patch from <rubikitch AT ruby-lang.org>. [ruby-dev:33540]
+
+Thu Jan 31 02:15:49 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (dsym): allow empty symbols. [ruby-core:15248]
+
+Thu Jan 31 00:01:51 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (select_internal): fix SEGV by `select [STDIN],nil,[STDIN]'.
+ fixed by Petr Chromec.
+ http://rubyforge.org/tracker/index.php?func=detail&aid=17275&group_id=426&atid=1698
+
+Wed Jan 30 17:32:49 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/*.c: add GB12345, UCS-{2,4}{BE,LE}.
+
+Wed Jan 30 14:32:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/rdoc/ri/driver.rb (cache_file_for): shouldn't use `:' in filename.
+
+Wed Jan 30 14:27:19 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_succ): use wrapped character as a carry for
+ ASCII incompatible encoding.
+
+Wed Jan 30 12:26:59 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/utf_16be.c (UTF16_IS_SURROGATE_FIRST): avoid branch.
+ (UTF16_IS_SURROGATE_SECOND): ditto.
+ (UTF16_IS_SURROGATE): defined.
+ (utf16be_mbc_enc_len): validation implemented.
+
+ * enc/utf_16le.c (UTF16_IS_SURROGATE_FIRST): avoid branch.
+ (UTF16_IS_SURROGATE_SECOND): ditto.
+ (UTF16_IS_SURROGATE): defined.
+ (utf16le_mbc_enc_len): validation implemented.
+
+Wed Jan 30 12:06:43 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * bignum.c (rb_cstr_to_inum): '0_2' is a valid representation.
+
+Wed Jan 30 11:57:50 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * bootstraptest/runner.rb: fix -I../../hoge case.
+
+Wed Jan 30 01:25:16 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_range.rb: add tests to achieve over 90% test coverage
+ of range.c.
+
+Wed Jan 30 00:09:37 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/euc_tw.c (euctw_mbc_enc_len): validation implemented.
+
+Tue Jan 29 22:58:11 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_enumerator.rb: add tests to achieve over 90% test
+ coverage of enumerator.c.
+
+ * test/ruby/test_enum.rb: add for enum.c.
+
+Tue Jan 29 22:29:48 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * enumerator.c: fix documents.
+
+Tue Jan 29 22:27:11 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * range.c: fix SEGV by ("a" .. "z").step(2 ** 30) { }.
+
+Tue Jan 29 21:59:16 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/euc_tw.c (euctw_islead): 0x8e is a leading byte.
+
+Tue Jan 29 21:55:35 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c: move object allocation out of blocking_region.
+ [ruby-dev:33139]
+
+Tue Jan 29 20:37:36 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/make_transdb.rb: add for make transdb.h.
+
+ * dmytranscode.c: add for miniruby.
+
+ * enc/gbk.c (gbk_left_adjust_char_head, gbk_is_allowed_reverse_match):
+ fix odd regexp match. [ruby-dev:33502]
+
+Tue Jan 29 20:17:06 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * {bcc32,win32}/Makefile.sub (MINIOBJS): add dmytranscode.$(OBJEXT).
+
+Tue Jan 29 19:39:40 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in, common.mk: fix rule for dmytranscode.o.
+
+Tue Jan 29 19:03:16 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/trans/japanese.c (rb_to_Windows_31J): to 'Windows-31J'.
+
+ * common.mk: add rules for transdb.h.
+
+ * transcode.c (init_transcoder_table): use transdb.h.
+
+Tue Jan 29 18:05:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (encdb_{replicate,alias,dummy,declare}): define only if
+ NO_ENCDB_H is not defined.
+
+Tue Jan 29 17:54:11 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/gbk.c (EncLen_gbk): too short. [ruby-dev:33497]
+
+Tue Jan 29 17:25:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * dmyencoding.c, encoding.c (enc_init_db, NO_ENCDB_H):
+ miniruby doesn't use encdb.
+
+ * common.mk: encdb.h use miniruby.
+
+Tue Jan 29 17:37:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/gb18030.c (gb18030_mbc_enc_len): validation implemented.
+
+Tue Jan 29 17:01:07 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * tool/ifchange: remove $temp when unchanged.
+
+Tue Jan 29 16:59:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * insns.def (toregexp): generate a regexp from strings instead of one
+ string.
+
+ * re.c (rb_reg_new_ary): defined for toregexp. it concatenates
+ strings after each string is preprocessed.
+
+ * compile.c (compile_dstr_fragments): split from compile_dstr.
+ (compile_dstr): call compile_dstr_fragments.
+ (compile_dregx): defined for dynamic regexp.
+ (iseq_compile_each): use compile_dregx for dynamic regexp.
+
+ [ruby-dev:33400]
+
+Tue Jan 29 16:25:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk, ext/extmk.rb: always make encdb.h.
+
+Tue Jan 29 12:53:39 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/gbk.c: add GBK, CP936 and CP949.
+
+ * enc/euc_kr.c: remove CP949.
+
+ * enc/euc_cn.c: remove CP936 and rename to gb2312.c
+
+ * enc/gb2312.c: GB2312 is preferred MIME name.
+
+Tue Jan 29 03:01:29 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y (reg_fragment_setenc_gen): US-ASCII script special code.
+
+ * parse.y (reg_fragment_check_len, reg_compile_gen): no need such
+ trick.
+ [ruby-dev:33399]
+
+ * test/ruby/test_m17n.rb (test_regexp_usacii_literal): add tests.
+
+Tue Jan 29 01:38:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk ($(srcdir)/revision.h): no need to show ifchange execution
+ because ifchange echos updated or unchanged.
+
+Tue Jan 29 01:26:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (up): use last changed revision.
+
+ * common.mk (up): force to update revision.h.
+
+Tue Jan 29 00:12:17 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bignum.c (rb_big2str0): should be US-ASCII.
+
+Tue Jan 29 00:10:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-mode-set-encoding): updates magic comment.
+
+Mon Jan 28 23:47:52 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * parse.y (rb_id2str, ripper_initialize, Init_ripper):
+ use rb_usascii_str_new2. [ruby-dev:33449]
+
+Mon Jan 28 19:37:08 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/win32ole/win32ole.c (ole_cp2encoding): new function.
+
+ * ext/win32ole/win32ole.c (ole_wc2vstr, ole_variant2val, fole_missing):
+ set encoding to result.
+
+ * ext/win32ole/win32ole.c (fole_s_set_code_page, Init_win32ole): set
+ default encoding.
+ [ruby-dev:33433]
+
+Mon Jan 28 11:17:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c, parse.y, re.c: use rb_ascii8bit_encoding.
+
+Mon Jan 28 17:54:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/utf_7.h: add dummy encoding UTF-7 and its alias CP65000.
+
+Mon Jan 28 17:41:19 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * enc/utf_8.c: add alias CP65001.
+
+Mon Jan 28 15:33:23 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/big5.c (big5_mbc_enc_len): validation implemented.
+
+Mon Jan 28 13:02:02 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/euc_kr.c (euckr_mbc_enc_len): validation implemented.
+
+Mon Jan 28 11:24:49 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y (parser_str_new): encoding of UTF-8 literal string in
+ US-ASCII script is UTF-8. [ruby-dev:33406]
+
+Mon Jan 28 10:25:59 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_m17n.rb (test_magic_comment): add test.
+
+Mon Jan 28 09:34:54 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (help): use double quotes for nmake.
+
+Mon Jan 28 00:39:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_set_encode): check if encoding is ASCII compatible.
+
+Mon Jan 28 01:21:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_open_file): should check NUL in path.
+ <http://www.rubyist.net/~matz/20080125.html#c01>.
+
+ * io.c (rb_io_s_popen): ditto.
+
+ * io.c (rb_io_reopen): ditto.
+
+ * io.c (next_argv): ditto.
+
+Sun Jan 27 23:33:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): fix for left justify flag.
+
+ * sprintf.c (rb_str_format): zero-precision zero bug revised.
+ [ruby-dev:33419]
+
+Sun Jan 27 23:20:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/oniguruma.h: precise mbclen API redesigned to avoid
+ inline functions.
+ (onigenc_mbclen_charfound): removed.
+ (onigenc_mbclen_needmore): removed.
+ (onigenc_mbclen_recover): removed.
+ (ONIGENC_MBCLEN_CHARFOUND): removed.
+ (ONIGENC_MBCLEN_CHARFOUND_P): defined.
+ (ONIGENC_MBCLEN_CHARFOUND_LEN): defined.
+ (ONIGENC_MBCLEN_INVALID): removed.
+ (ONIGENC_MBCLEN_INVALID_P): defined.
+ (ONIGENC_MBCLEN_NEEDMORE): removed.
+ (ONIGENC_MBCLEN_NEEDMORE_P): defined.
+ (ONIGENC_MBCLEN_NEEDMORE_LEN): defined.
+ (ONIGENC_MBC_ENC_LEN): use onigenc_mbclen_approximate.
+
+ * regenc.c (onigenc_mbclen_approximate): defined.
+
+ * include/ruby/encoding.h (MBCLEN_CHARFOUND): removed.
+ (MBCLEN_INVALID): removed.
+ (MBCLEN_NEEDMORE): removed.
+ (MBCLEN_CHARFOUND_P): defined.
+ (MBCLEN_INVALID_P): defined.
+ (MBCLEN_NEEDMORE_P): defined.
+ (MBCLEN_CHARFOUND_LEN): defined.
+ (MBCLEN_NEEDMORE_LEN): defined.
+
+ * encoding.c: use new API.
+
+ * re.c: ditto.
+
+ * string.c: ditto.
+
+ * parse.y: ditto.
+
+Sun Jan 27 22:55:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (value_expr_gen): reverted r12880. [ruby-dev:33388]
+
+Sun Jan 27 22:33:39 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): fix for octal with precision.
+ [ruby-dev:33411]
+
+Sun Jan 27 22:31:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-mode-set-encoding): automatically insert
+ encoding magic comment.
+
+ * misc/ruby-mode.el (ruby-mode): set ruby-mode-set-encoding to buffer
+ local before-save-hook.
+
+Sun Jan 27 19:51:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_inspect): avoid exception by
+ "\#\xa1".force_encoding("euc-jp").inspect.
+
+Sun Jan 27 19:07:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_succ): warning suppressed.
+
+Sun Jan 27 18:18:13 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk (help): show major targets.
+
+Sun Jan 27 17:54:48 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf.c: raise error when no output encoding is given.
+
+Sun Jan 27 17:20:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_succ): don't increment/decrement codepoint.
+
+Sun Jan 27 16:03:42 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/irb/ruby-lex.rb (RubyLex#buf_input): use chars.to_a.
+
+Sun Jan 27 16:27:22 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8: update nkf.
+
+Sun Jan 27 16:25:27 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * re.c (rb_reg_source): set encoding as regexp encoding.
+
+Sun Jan 27 05:56:39 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_preprocess): force fixed encoding when ASCII
+ incompatible source string.
+
+Sat Jan 26 23:46:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): zero-precision zero should be empty.
+ [ruby-dev:33363]
+
+ * sprintf.c (rb_str_format): not prepend octal prefix to negative or
+ zero value. [ruby-dev:33363], [ruby-dev:33367]
+
+Sat Jan 26 23:42:15 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (assignable_gen, keyword_to_name): __ENCODING__ was missing.
+
+Sat Jan 26 19:08:45 2008 Tanaka Akira <akr@fsij.org>
+
+ * marshal.c (w_object): dump string encoding in USERDEF.
+ [ruby-dev:33401]
+
+Sat Jan 26 17:42:23 2008 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): validate argument expr of "next"
+ statement.
+
+ * bootstraptest/test_syntax.rb: add a test.
+
+Sat Jan 26 17:22:46 2008 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c, compile.h: fix to calculate correct stack depth
+ at each instruction.
+
+Sat Jan 26 09:41:02 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rexml/doctype.rb, test/rss/test_maker_itunes.rb: replace
+ multi-byte string.
+
+ * test/json/{test_json.rb, test_json_unicode.rb}:
+ add magic comment.
+
+Sat Jan 26 09:30:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/encoding.h (rb_usascii_encindex): added prototype.
+
+ * include/ruby/intern.h (rb_usascii_str_new, rb_usascii_str_new2):
+ ditto.
+
+Sat Jan 26 09:17:13 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_new): set US-ASCII and ENC_CODERANGE_7BIT when
+ empty string (len == 0).
+
+Sat Jan 26 03:41:53 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y (parser_initialize): set default script encoding as US-ASCII.
+
+ * ruby.c (load_file): ditto.
+
+ * ruby.c (process_options): set script encoding of -e from locale
+ except when -K is specified.
+
+ * ruby.c (load_file): set script encoding of stdin from locale except
+ when -K is specified. [ruby-dev:33375]
+
+Sat Jan 26 02:51:06 2008 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c, compile.h: fix stack pointer issues.
+ calculate correct stack depth at compile time.
+
+ * insns.def (emptstack): remove it and add a new insn "adjuststack".
+
+ * bootstraptest/test_knownbug.rb: move/remove fixed test.
+
+ * bootstraptest/test_syntax.rb: ditto.
+
+Sat Jan 26 00:17:18 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * string.c (rb_str_usascii_new{,2}: defined.
+ (rb_str_new): set US-ASCII and ENC_CODERANGE_7BIT when empty
+ string.
+
+ * encoding.c (rb_usascii_encoding, rb_usascii_encindex): defined.
+ (rb_enc_inspect, enc_name, rb_locale_charmap, rb_enc_name_list_i):
+ use rb_str_ascii_new.
+
+ * array.c (recursive_join, inspect_ary): ditto.
+
+ * object.c (nil_to_s, nil_inspect, true_to_s, false_to_s,
+ rb_mod_to_s): ditto.
+
+ * hash.c (inspect_hash, rb_hash_inspect, rb_f_getenv, env_fetch,
+ env_clear, env_to_s, env_inspect): ditto.
+
+ * numeric.c (flo_to_s, int_chr, rb_fix2str): ditto.
+
+ * bignum.c (rb_big2str): ditto.
+
+ * file.c (rb_file_ftype, rb_file_s_dirname, rb_file_s_extname,
+ file_inspect_join, Init_file): ditto.
+
+ * test/ruby/test_ruby_m17n.rb: add checks for encoding of string.
+
+Sat Jan 26 01:35:46 2008 Tanaka Akira <akr@fsij.org>
+
+ * marshal.c (r_byte): use getbyte instead of getc.
+ (marshal_load): ditto.
+ [ruby-dev:33264]
+
+Sat Jan 26 00:43:40 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_getline_fast): don't care ASCII incompatible encoding.
+ (prepare_getline_args): generate a newline according to IO encoding
+ when necessary.
+ (rb_io_getline_1): call rb_io_getline_fast only for ASCII
+ compatible encoding.
+
+Fri Jan 25 21:49:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_buf_cat_ascii): use rb_enc_cr_str_buf_cat.
+
+Fri Jan 25 19:38:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (version.$(OBJEXT)): depends on $(srcdir)/revision.h.
+
+ * common.mk (revision.h): extracts revision number with ``svn info''.
+
+ * common.mk (up): target to update from the repository.
+
+ * Makefile.in, {win,bcc}32/Makefile.sub (IFCHANGE): tool to update a
+ file if changed.
+
+ * tool/ifchange: for unixen.
+
+ * win32/ifchange.bat: some fix
+
+Fri Jan 25 17:12:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (load_file): set default to ASCII-8BIT explicitly if -K
+ option is not given.
+
+Fri Jan 25 16:31:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_str_buf_cat_ascii): declared.
+
+ * string.c (rb_str_buf_cat_ascii): defined.
+
+ * re.c (rb_reg_s_union): use rb_str_buf_cat_ascii to support ASCII
+ incompatible encoding.
+
+Fri Jan 25 16:11:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options, load_file, rb_load_file): propagates script
+ encoding by -K to libraries. [ruby-dev:33156]
+
+Fri Jan 25 15:56:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (cmdline_arguments): split argc and argv from cmdline_options.
+
+ * ruby.c (process_options): not set encoding of -e option from -E
+ option if they are not compatible.
+
+Fri Jan 25 13:15:23 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ruby.c (proc_options, process_options, load_file): shouldn't effect
+ --encoding to script encoding. [ruby-dev:33169]
+
+Fri Jan 25 10:31:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * */*.bat: set svn:mime-type to text/batch.
+
+Thu Jan 24 23:23:06 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * enum.c (enum_one, enum_take_while, enum_drop_while): fix documents.
+
+Thu Jan 24 21:46:24 2008 Tanaka Akira <akr@fsij.org>
+
+ * parse.y (reg_fragment_setenc_gen): associate ASCII-8BIT only if
+ str has only ASCII characters.
+
+Thu Jan 24 20:46:17 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/ruby/test_m17n.rb: follow to the following changes.
+
+Thu Jan 24 20:21:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parser.y (parser_str_new): automatically update string literal's
+ encoding from US-ASCII to ASCII-8BIT when script encoding is US-ASCII
+ and the string includes non-ascii bytes. [ruby-dev:33348]
+
+ * parser.y (reg_fragment_check_gen, reg_compile_gen): automatically
+ update regexp literal's encoding from US-ASCII to ASCII-8BIT when
+ script encoding is US-ASCII, the regexp has no kcode option and the
+ regexp includes non-ascii bytes. [ruby-dev:33353]
+
+Thu Jan 24 19:36:22 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/uri/generic.rb (URI::Generic::inspect): use Kernel#to_s instead
+ object_id with printf. [ruby-dev:33347]
+
+Thu Jan 24 19:29:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (remove_sign_bits): returns pointer to the first char to
+ be used, instead of copying.
+
+ * sprintf.c (rb_str_format): negative indicator dots should come
+ before sign digits always. [ruby-dev:33224]
+
+Thu Jan 24 18:19:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/encoding.h (rb_enc_is_newline): parenthesized arguments.
+
+Thu Jan 24 18:14:14 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * re.c (rb_reg_fixed_encoding_p): no need to treat ASCII-8BIT specially.
+
+Thu Jan 24 16:53:06 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * re.c (rb_reg_initialize): 7bit clean regexp should be US-ASCII.
+ [ruby-dev:33346]
+
+Thu Jan 24 16:31:04 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_getline_fast): the end point of left_char_head()
+ must be the last character. [ruby-cvs:22445]
+
+Thu Jan 24 16:24:25 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y (reg_fragment_setenc_gen): recognize regexp with option n as
+ as ASCII-8BIT instead of US-ASCII. [ruby-dev:33339]
+
+Thu Jan 24 15:44:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (collect_bang_i): use rb_ary_store() to avoid potential
+ memory corruption. a patch from Yusuke Endoh <mame@tsg.ne.jp>
+ in [ruby-dev:33328].
+
+ * array.c (ITERATE): remove unnecessary macro.
+
+ * array.c (sort_1): remove ary_sort_check(). in-place sort keep
+ original elements even when it's modified.
+
+ * array.c (sort_2): ditto.
+
+Thu Jan 24 15:09:40 2008 Tanaka Akira <akr@fsij.org>
+
+ * time.c (make_time_t): revert round trip test. [ruby-dev:33058]
+
+Thu Jan 24 11:14:56 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_enc_cr_str_buf_cat): ASCII incompatible encoding is
+ not compatible with any other encoding.
+
+Thu Jan 24 07:34:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * parse.y (STR_NEW0): set encoding as US-ASCII.
+
+Thu Jan 24 03:47:41 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/rexml/text.rb, lib/rubygems/open-uri.rb, lib/open-uri.rb,
+ test/logger/test_logger.rb, test/ruby/test_regexp.rb:
+ fix tests. [ruby-dev:33336]
+
+Thu Jan 24 03:23:44 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_each_line): use memchr(3) for faster newline
+ search.
+
+ * io.c (appendline): remove unused arguments
+
+ * io.c (rb_io_getline_fast): make much simpler (and faster).
+
+Thu Jan 24 02:13:07 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * insns.def (expandarray): fix stack inc. [ruby-dev:32892]
+
+ * bootstraptest/test_knownbug.rb, test_massign.rb: move a fixed test.
+
+Thu Jan 24 01:00:34 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.{c, h} (rb_usascii_encoding): added.
+
+ * parse.y (parser_str_new, rb_intern3): ascii only string literal is
+ US-ASCII.
+
+ * ruby.c (proc_optionc): -Kn means ASCII-8BIT.
+
+Wed Jan 23 23:54:40 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * sprintf.c: fix comment. [ruby-dev:33275]
+
+ * math.c: fix comment. [ruby-dev:33276]
+
+Wed Jan 23 22:47:34 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_struct.rb: add tests to achieve over 90% test
+ coverage of struct.c.
+
+ * test/ruby/test_sprintf.rb: ditto for sprintf.c.
+
+ * test/ruby/test_math.rb: ditto for math.c.
+
+Wed Jan 23 22:14:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/trans/japanese.c (rb_from_Windows_31J, rb_to_Windows_31J):
+ provisional workaround for Windows-31J. [ruby-dev:33320]
+
+Wed Jan 23 15:25:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (time_strftime): copy encoding from format. [ruby-dev:33303]
+
+Wed Jan 23 15:04:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_make_independent): should set length.
+
+ * string.c (rb_str_associate): hide associated array from ObjectSpace.
+
+ * string.c (rb_str_associated): return associated array with freezing
+ instead of false. [ruby-dev:33282]
+
+ * string.c (rb_str_freeze): freeze associated array together.
+
+Wed Jan 23 13:39:48 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_prepare_re): fix SEGV by
+ /a/ =~ "aa".force_encoding("utf-16be").
+
+Wed Jan 23 11:53:26 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (str_mod_check, str_nth, str_offset): constified.
+
+ * string.c (rb_str_dump): dump in ASCII-8BIT always.
+
+Wed Jan 23 10:18:10 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval_method.c (rb_export_method): set ruby_vm_redefined_flag for
+ visibility change as well. reported by K.Kosako in
+ http://d.hatena.ne.jp/kkos/20080122#1201012720.
+
+Tue Jan 22 22:26:23 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_bignum.rb: change some tests because rational
+ redefines Bignum#quo and Bignum#**.
+
+Tue Jan 22 20:58:15 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): need to output sodir rule.
+
+Tue Jan 22 19:37:16 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (create_makefile): lib files shouldn't depend on install
+ dir because if the dir is newer than lib files, lib files will be
+ always copied.
+
+Tue Jan 22 17:52:52 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/utf_16_32.c: Streamline parentheses, add more
+ 'static' qualifiers.
+
+Tue Jan 22 12:57:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * configure.in (MINIRUBY): remove -I$(EXTOUT)/$(arch) from
+ MINIRUBY since miniruby might not be able to load DLL.
+
+ * test/ruby/test_m17n.rb: move tests from bootstrap test.
+
+ * encoding.c (enc_find): should check name if ASCII compatible.
+
+ * string.c (rb_str_end_with): should check character boundary.
+
+ * encoding.c (rb_enc_compatible): encoding must be ASCII
+ compatible before checking ENC_CODERANGE_7BIT.
+
+ * encoding.c (rb_enc_compatible): wrong compatibility condition.
+ [ruby-dev:33273]
+
+Tue Jan 22 09:26:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_each_char): iterates over a shadow.
+ [ruby-dev:33243]
+
+Tue Jan 22 08:59:52 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/ri/formatter.rb: Indent labeled lists like note lists.
+
+ * test/rdoc/test_rdoc_ri_overstrike_formatter.rb: Added.
+
+ * test/rdoc/test_rdoc_ri_formatter.rb: Added tests.
+
+Tue Jan 22 04:40:28 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (rb_intern3): do not call rb_enc_mbclen() if *m is
+ ASCII. [ruby-talk:287225]
+
+ * string.c (rb_str_each_line): use rb_enc_is_newline() to gain
+ performance if the record separator ($/) is not modified.
+
+Tue Jan 22 01:15:51 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * ChangeLog: format-time-string under C locale. [ruby-dev:33261]
+
+Tue Jan 22 00:45:12 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * test/ruby/test_bignum.rb: add tests for bignum.c.
+
+Tue Jan 22 00:30:08 2008 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * bignum.c (big_shift): fix a bug that caused infinite loop when
+ left shifting.
+
+Mon Jan 21 20:09:38 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (marshal_load): initialize the cache.
+
+Mon Jan 21 19:42:42 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c, enc/trans/utf_16_32.c, test/ruby/test_transcode.rb:
+ added UTF-32BE and UTF-32LE conversions.
+
+Mon Jan 21 14:36:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (str_transcode): initialize transcoder in
+ rb_transcoding. [ruby-dev:33234]
+
+ * transcode_data.h (rb_transcoding): transcoder constified.
+
+Mon Jan 21 12:50:02 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c, gc.c (setjmp): sigsetjmp is a macro on cygwin.
+
+Mon Jan 21 12:35:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (transcode_loop, str_transcoding_resize): use unsigned
+ char. [ruby-dev:33232]
+
+ * transcode_data.h (rb_transcoding, rb_transcoder): removed callback
+ parameters.
+
+ * enc/trans/japanese.c: ditto.
+
+ * enc/trans/utf_16_32.c: parenthesized bit-or operands.
+
+Mon Jan 21 11:59:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_each_char): move forward. [ruby-dev:33231]
+
+Mon Jan 21 06:40:03 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (transcode_dispatch): constified return value.
+
+ * transcode_data.h (rb_transcoding): include pointer to rb_transcoder
+ and auxiliary data.
+
+ * transcode_data.h (rb_transcoder): all callback functions should have
+ their own parameters.
+
+ * enc/trans/{japanese,single_byte}.c: constified.
+
+Mon Jan 21 03:45:49 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_each_char): advance offset before get next char
+ length. [ruby-dev:33211]
+
+Sun Jan 20 20:00:20 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c, enc/trans/utf_16_32.c, test/ruby/test_transcode.rb:
+ added UTF-16LE conversions.
+
+ * fixed changelog for last commit
+
+Sun Jan 20 17:54:00 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * added changelog for last commit
+
+Sun Jan 20 15:08:08 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/trans/utf_16_32.c: new file, currently implementing
+ UTF-16BE conversions only.
+
+ * test/ruby/test_transcode.rb: Added tests for UTF-16BE;
+ made check_both_ways() use force_encoding differently.
+
+ * transcode_data.h, transcode.c: Support for more conversion
+ functions.
+
+Sun Jan 20 13:06:01 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_each_char): performance improvement, and stop if
+ shortened in the block. [ruby-dev:33189]
+
+Sun Jan 20 09:12:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * common.mk: use -Ks when read insns.def. [ruby-dev#33185]
+
+ * parse.y: fix -e and stdin strings aren't set encoding.
+
+Sun Jan 20 05:12:44 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/make_encdb.rb: fix duplication check.
+
+Sun Jan 20 05:03:46 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ascii.c: remove definition of replica KOI8-U.
+
+Sun Jan 20 00:33:59 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/koi8_u.c: added.
+
+ * regenc.c, enc/utf_8.c, enc/unicode.c, enc/gb18030.c: add ARG_UNUSED.
+
+Sat Jan 19 22:41:39 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (coderange_scan): don't call mbclen functions for ASCII
+ characters with ASCII compatible encoding.
+
+Sat Jan 19 21:00:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/rdoc/template.rb (RDoc): defined to avoid uninitialized constant
+ error by `./ruby test/rubygems/test_gem_server.rb'.
+
+Sat Jan 19 20:41:29 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (enc_new): don't free rb_encoding to avoid SEGV by
+ `miniruby -e exit' on x86_64 GNU/Linux.
+
+Sat Jan 19 18:40:19 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (once): use an instance variable which points a hash
+ as cache. [experimental]
+
+Sat Jan 19 17:21:29 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb, lib/date/format.rb: parse's hints as an
+ experimental function has been removed.
+
+Sat Jan 19 11:21:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (sigsetjmp): check if available.
+
+ * eval.c, gc.c (setjmp): do not use _setjmp if sigsetjmp is available.
+
+Sat Jan 19 11:10:11 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: Remove wrong assumptions about Cygwin. a patch from
+ Corinna Vinschen in [ruby-Bugs-17018].
+
+Sat Jan 19 09:23:14 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+
+ * ext/win32ole/win32ole.c (ole_set_safe_array): should not use
+ recursive calling.
+
+ * test/win32ole/test_win32ole_variant.rb: ditto.
+
+Sat Jan 19 08:58:47 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/markup: Remove ListBase and Line constants.
+
+ * lib/rdoc/ri: Allow output IO to be specified.
+
+ * test/rdoc/parser/test_parse_c.rb: Move up one level, fixed.
+
+ * test/rdoc/parser/test_rdoc_markup_attribute_manager.rb: Renamed to
+ match new class name, updated to match new classes.
+
+ * test/rdoc/test_rdoc_ri_formatter.rb: Start of RI formatting tests.
+
+ * test/rdoc/test_rdoc_ri_attribute_manager.rb: Start of
+ RDoc::RI::AttributeManager tests.
+
+ * test/rdoc/test_simple_markup.rb: Moved to match new class name.
+
+Sat Jan 19 08:35:36 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_prepare): get encoding from the first line.
+ [ruby-dev:33168]
+
+ * ruby.c (load_file): set encoding to input with set_encoding.
+
+Sat Jan 19 03:46:42 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (thread_create_core): prohibit thread creation in the
+ frozen thread group. a patch in [ruby-dev:33176] from sheepman
+ <sheepman AT sheepman.sakura.ne.jp>.
+
+ * thread.c (thread_create_core): should inherit ThreadGroup from
+ the current thread.
+
+Sat Jan 19 00:37:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): set result encoding for wider width.
+
+Sat Jan 19 00:13:19 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * thread_win32.c (w32_wait_events): shouldn't invoke interrupt handle
+ by timer_thread.
+
+Fri Jan 18 23:49:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_create_core): set thread group before creating
+ thread.
+
+Fri Jan 18 20:19:51 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y (ripper_initialize): too early to set parser->enc.
+
+Fri Jan 18 20:03:05 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/setup.mak (BASERUBY): nmake cannot execute ruby correctly
+ if the path of ruby.exe is quoted.
+
+ * win32/setup.mak ($(ARCH)): if a macro is appended by $(APPEND),
+ a space will be inserted on the top of the line.
+
+Fri Jan 18 17:56:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval_intern.h, insnhelper.h, thread_pthread.h, vm_core.h, vm_opts.h:
+ prefixed include guards with RUBY.
+
+ * id.h: added include guard.
+
+ * regenc.h, regint.h, regparse.h: prefixed include guards with
+ ONIGURUMA.
+
+Fri Jan 18 15:57:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (thread_cleanup_func): ignore errors from destroying mutex
+ of dead thread. [ruby-core:15069]
+
+ * thread_pthread.c, thread_win32.c (native_thread_destroy): ditto.
+
+Fri Jan 18 15:56:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_name_list_i, rb_enc_aliases_enc_i): freeze
+ element strings to be returned.
+
+Fri Jan 18 14:36:34 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * test/ruby/test_m17n.rb (test_str_dump): added test for
+ String#dump. [ruby-dev:33142]
+
+Fri Jan 18 12:25:13 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (load_encoding): check if successfully loaded.
+
+ * encoding.c (rb_enc_find_index): use original encoding name to
+ replicate loaded encoding instead alias.
+
+Fri Jan 18 09:43:02 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * re.c (rb_char_to_option_kcode): Regexp switch `s' should mean
+ Windows-31J, as wells as `-Ks'.
+
+Fri Jan 18 09:22:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (parser_initialize): explicitly call rb_ascii8bit_encoding().
+
+ * parse.y (parser_prepare): lex_input may not be have encoding (e.g. IO).
+
+ * parse.y (rb_parser_compile_string): set encoding from input string.
+
+ * encoding.c (rb_enc_find_index): use ASCII-8BIT if loading known
+ encoding failed.
+
+ * parse.y (ripper_initialize): move parser->enc initialization.
+
+ * encoding.c (rb_enc_aliases_enc_i): exclude non alias names from
+ Encoding.aliases.
+
+ * encoding.c (rb_enc_find_index): use original encoding name to
+ load DLL.
+
+Fri Jan 18 07:06:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (Init_IO): stdin/stdout may not be duplex.
+
+Fri Jan 18 04:27:57 2008 Eric Hodel <drbrain@segment7.net>
+
+ * sample/rdoc/markup/rdoc2latex.rb: Fix for new namespacing.
+
+ * lib/rdoc/markup/to_latex.rb: Fix namespacing.
+
+Fri Jan 18 02:02:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bootstraptest/runner.rb (assert_valid_syntax): added.
+
+ * bootstraptest/test_knownbug.rb: added test for [ruby-list:44479]
+
+Fri Jan 18 01:48:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * vm_insnhelper.c (vm_call_method): check argument number to
+ attr_reader. [ruby-core:15120]
+
+Fri Jan 18 00:49:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_check_readable): flush tied write IO too.
+
+ * io.c (Init_IO): tie stdin with stdout. [ruby-core:15107]
+
+Fri Jan 18 00:23:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (enc_free): removed since rb_encoding may be used while
+ cleanup.
+
+Fri Jan 18 00:17:19 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/euc_cn.c: split from enc/euc_kr.c.
+
+Fri Jan 18 00:03:54 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/stringio/stringio.c (strio_init): use default external encoding
+ if nothing is given. a patch from sheepman <sheepman AT
+ sheepman.sakura.ne.jp> in [ruby-dev:33159].
+
+Thu Jan 17 23:56:20 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (encdb.h): give output file name to make_encdb.rb.
+
+ * encoding.c (enc_table): simplified.
+
+ * encoding.c (enc_register_at): lazy loading. [ruby-dev:33013]
+
+ * regenc.h (ENC_DUMMY): added.
+
+ * enc/make_encdb.rb: now emits macros only.
+
+ * enc/iso_2022_jp.h: split from encoding.c.
+
+Thu Jan 17 21:48:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * re.c (rb_char_to_option_kcode): fixed typo.
+
+Thu Jan 17 21:01:25 2008 Tadayoshi Funaba <tadf@dotrb.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.
+
+Thu Jan 17 13:07:18 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_dump): preserve the encoding of source string
+ if it is ASCII compatible. otherwise, add '.force_encoding()'
+ for ugly work around. maybe we should implement some other way
+ to keep non ASCII encoding in dumped string. [ruby-dev:33142]
+
+Thu Jan 17 10:30:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_fwrite): always flush IO on tty, even without newlines.
+ [ruby-core:15107]
+
+Wed Jan 16 22:45:27 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (enc_register_at): make own copy. [ruby-dev:33136]
+
+Wed Jan 16 18:03:10 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (pipe_open, rb_io_s_popen): clear temporary object to release
+ and prevent from GC.
+
+Wed Jan 16 17:55:07 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * numeric.c (fix_quo): typo. a patch from Shin-ichiro HARA
+ <sinara AT blade.nagaokaut.ac.jp> in [ruby-dev:33130]
+
+Wed Jan 16 17:36:26 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * test/test_delegate.rb: add new test file for delegate.rb.
+
+Wed Jan 16 16:14:00 2008 Akinori MUSHA <knu@iDaemons.org>
+
+ * ruby.1: Fix grammar.
+
+Wed Jan 16 15:26:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (sys_fail2): get rid of unlimited alloca.
+
+ * io.c (mode_enc, pipe_open, rb_io_s_popen): ditto.
+
+ * load.c (rb_feature_p): ditto.
+
+ * object.c (rb_cstr_to_dbl): ditto.
+
+ * io.c (mode_enc): fixed uninitialized variable.
+
+Wed Jan 16 12:51:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_str_tmp_new, rb_str_shared_replace):
+ prototype moved.
+
+Tue Jan 15 23:52:51 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/*: add ARG_UNUSED.
+
+ * enc/koi8_u.c: added.
+
+Tue Jan 15 23:00:08 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/utf_{16,32}{be,le}.c: remove some ARG_UNUSED. replace struct
+ OnigEncodingST by OnigEncoding.
+
+Tue Jan 15 22:30:43 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (ENC_REGISTER): use &OnigEncoding*.
+ (ENCINDEX_UTF_8): renamed from ENCINDEX_UTF8.
+ (rb_enc_init): use ENC_REGISTER.
+
+ * include/ruby/oniguruma.h (OnigEncodingUTF8, ONIG_ENCODING_UTF8):
+ removed.
+
+ * enc/*.c: remove use of &encoding_*; use enc argument instead.
+
+Tue Jan 15 18:44:46 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enc/utf_8.c: remove use of ONIG_ENCODING_UTF8 altogether; use
+ enc argument instead.
+
+Tue Jan 15 18:05:26 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * enc/utf_8.c (ONIG_ENCODING_UTF8): reverted.
+
+Tue Jan 15 18:01:55 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (MKFILES): add dependencies.
+
+Tue Jan 15 18:00:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enc/utf_8.c (OnigEncodingDefine): encoding name should be kept
+ unchanged.
+
+Tue Jan 15 17:53:05 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/utf_8.c: renamed as IANA name.
+
+ * enc/Makefile.in: ditto.
+
+Tue Jan 15 16:59:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options): encoding libraries cannot be loaded until
+ load path is set.
+
+Tue Jan 15 15:09:28 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/setup.mak: strip out empty lines from CPP output.
+
+Tue Jan 15 14:57:38 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * {win,bcc}32/setup.mak (-basic-vars-): expand BASERUBY to full path
+ to get rid of ./ruby.exe.
+
+ * win32/enc-setup.mak: workaround for Borland make.
+
+Tue Jan 15 14:44:53 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_locale_charmap): use ASCII-8BIT in miniruby.
+
+Tue Jan 15 13:54:41 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * {bcc32,win32}/Makefile.sub (RUNRUBY): need to set archdir when
+ invoking ruby.
+
+Tue Jan 15 13:43:18 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (us_ascii.o): add dependencies. [ruby-dev:33111]
+
+Tue Jan 15 03:41:42 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (eval): check if backtrace is empty. [ruby-core:15040]
+
+Tue Jan 15 01:28:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk: simplified dummy objects dependencies.
+
+Tue Jan 15 01:19:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (OBJS): moved encoding.o from COMMONOBJS.
+
+ * common.mk (dmyencoding.o): added. [ruby-dev:33099]
+
+ * configure.in, {win,bcc}32/Makefile.sub (MINIOBJS): added
+ dmyencoding.o.
+
+ * dmyencoding.c (rb_locale_charmap): returns nil for miniruby.
+
+Tue Jan 15 00:05:50 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (appendline): specifying limit should not generate broken
+ byte sequence. strings should be rounded. [ruby-dev:33088]
+
+Mon Jan 14 23:33:02 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/lib/kconv.rb (Kconv.tolocale): argument is str.
+
+Mon Jan 14 23:31:05 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * configure.in (setup): add -I$(EXTOUT)/$(arch) to MINIRUBY.
+
+ * bootstraptest/runner.rb (main): expand -I directory path.
+
+Mon Jan 14 23:28:10 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/enc-setup.mak (BUILTIN_ENCOBJS): depends on enc/Makefile.in.
+
+Mon Jan 14 22:48:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_char_to_option_kcode): use rb_enc_find_index() instead
+ of using fixed index value.
+
+ * enc/Makefile.in (encsrcdir): make US-ASCII built-in.
+
+Mon Jan 14 22:25:02 2008 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * golf_prelude.rb: Shorter method name completion. Same method
+ used for const missing. do_while and do_until added. Enumerator
+ gains all of Array's abilities. Ex:
+ '123'.m{|i|i*2} #=> "112233"
+ '123'.pe #=> '123'.perm*' ' #=> "123 132 213 231 312 321"
+ base on a patch from Darren Smith <darrenks AT ml1.net>.
+
+Mon Jan 14 21:10:02 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enc/us_ascii.c: wrong alias name: ANSI_X3.4-1986.
+
+ * rubytest.rb: add -I#{srcdir} to load encoding DLL.
+
+Mon Jan 14 18:53:58 2008 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c: clear thread structure.
+ (TODO: survey that child process should clear mutex or not).
+
+ * bootstraptest/test_knownbug.rb, test_thread.rb: move a fixed test.
+
+Mon Jan 14 18:43:38 2008 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/runner.rb: add "flunk" method.
+
+ * bootstraptest/test_knownbug.rb: fix to use flunk.
+
+Mon Jan 14 18:10:59 2008 Koichi Sasada <ko1@atdot.net>
+
+ * vm.h: remove dangerous assembler sentence.
+
+Mon Jan 14 18:06:37 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_locale_encoding): return US-ASCII when charmap is
+ nil.
+
+Mon Jan 14 16:12:58 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/shellwords.rb: scape should be an alias to shellescape. a
+ patch from Masahiro Kawato <m-kawato AT mwb.biglobe.ne.jp> in
+ [ruby-dev:33060].
+
+Mon Jan 14 16:09:16 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.1: a patch to describe --encoding. a patch from Yugui
+ <yugui AT yugui.sakura.ne.jp> in [ruby-dev:33079].
+
+ * ruby.c: ditto.
+
+Mon Jan 14 13:49:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_prepare_re): initialize error message buffer.
+ (rb_reg_search): ditto.
+ (rb_reg_check_preprocess): ditto.
+ (rb_reg_new_str): ditto.
+ (rb_enc_reg_new): ditto.
+ (rb_reg_compile): ditto.
+ (rb_reg_initialize_m): ditto.
+ (rb_reg_s_union_m): ditto.
+
+Mon Jan 14 12:33:07 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/markup*: Renamespace from SM::SimpleMarkup to
+ RDoc::Markup.
+
+Mon Jan 14 10:45:45 2008 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * enc/ascii.c: Exchanged order of arguments for one ENC_ALIAS
+
+Mon Jan 14 09:19:07 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/time.rb: do not reference Time directly from the inside of
+ definitions. [ruby-dev:33059]
+
+Mon Jan 14 05:44:44 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/*.c: add replicas and aliases.
+
+ * enc/make_encdb.h: add duplicate and undefined check.
+
+Mon Jan 14 02:03:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * include/ruby/oniguruma.h: remove ONIG_ENCODING_* and OnigEncoding*
+ which are not builtin.
+
+ * regenc.{c,h} (onigenc_mb2_code_to_mbclen, onigenc_mb4_code_to_mbclen):
+ fix prototype.
+
+ * enc/big5.c, enc/euc_kr.c, enc/euc_tw.c, enc/gb18030.c,
+ enc/koi8_r.c, enc/windows_1251.c: imported from Oniguruma.
+
+Sun Jan 13 22:47:28 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/make_encdb.h: sort encoding names by original name.
+
+ * encoding.c, enc/*.c: define replicas and aliases.
+
+Sun Jan 13 20:24:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c: add documents.
+
+Sun Jan 13 18:41:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (Init_Encoding): moved initialization from encdb.h.
+
+ * enc/make_encdb.rb (enc_name_list): constified.
+
+ * enc/make_encdb.rb (enc_init_db): moved some functions to encoding.c.
+
+Sun Jan 13 13:53:00 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (load_file): local variable was not initialized when -x flag
+ is given.
+
+ * ruby.c (load_file): script files should not be affected by locale.
+ [ruby-dev:33054]
+
+Sun Jan 13 12:01:32 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/generators*: Reorganize RDoc generators.
+
+Sun Jan 13 11:41:11 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (ENCINDEX_EUC_JP, ENCINDEX_SJIS): removed.
+ (rb_enc_init): EUC-JP and Shift_JIS are not builtin now.
+
+ * enc/Makefile.in: ditto.
+
+ * common.mk: ditto.
+
+ * ruby.c (proc_options): ditto.
+
+ * enc/shift_jis.c, enc/euc_jp.c: fixes for remove from builtin.
+
+Sun Jan 13 10:21:40 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (enc_table): packed all enc_table stuff.
+
+Sun Jan 13 09:58:17 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_init): revert removing SJIS.
+
+ * enc/sjis.c: move to enc/shift_jis.c, to make encoding name equal to
+ filename for convenience of loading lib.
+
+ * enc/shift_jis.c: moved from enc/sjis.c.
+
+ * common.mk: follows enc/shift_jis.c.
+
+ * enc/Makefile.in: ditto.
+
+Sun Jan 13 09:22:33 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (incs): includes encdb.h.
+
+Sun Jan 13 09:17:29 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * {bcc,win}32/Makefile.sub (MV): use move instead of ren. [ruby-Bugs-17019]
+
+Sun Jan 13 01:52:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enc/make_encdb.rb: should work on Ruby 1.8. [ruby-dev:33069]
+
+ * common.mk (encdb.h): pass enc dir from outside to make_encdb.rb.
+
+Sun Jan 13 00:01:07 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/make_encdb.rb: added. search enc/*.c and make encoding database.
+
+ * regenc.h (ENC_REPLICATE, ENC_ALIAS): added for defining replica
+ encoding and encoding alias.
+
+ * encoding.c (rb_enc_init): move alias definitions to enc/*.c.
+ (rb_enc_find_index): search original of replica and alias when no
+ encoding library.
+ (rb_enc_name_list, rb_enc_aliases_enc_i, rb_enc_aliases_str_i,
+ rb_enc_aliases, Encoding.name_list, Encoding.aliases): added.
+ (Init_Encoding): init encdb.
+
+ * enc/ascii.c, enc/us_ascii.c, enc/euc_jp.c, enc/sjis.c:
+ add replica encoding and encoding alias definition.
+
+ * common.mk (dist-clean-local): add rule for remove encdb.h.
+
+Sat Jan 12 18:27:41 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * eval.c (rb_define_alloc_func, rb_undef_alloc_func): should
+ define/undef on a singleton class. [ruby-core:09959]
+
+Sat Jan 12 12:44:36 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf.c: rdoc update.
+
+Sat Jan 12 12:01:49 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb, lib/date/format.rb: tuning for performance.
+
+Sat Jan 12 11:29:45 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bootstraptest/test_proc.rb: fixed wrong expected result. pointed
+ out by Kornelius "murphy" Kalnbach <murphy AT rubychan.de> in
+ [ruby-core:15022].
+
+Sat Jan 12 04:38:38 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ruby.c (process_options): -e'script' is locale encoding by default.
+ (load_file): ruby script from stdin is locale encoding by default.
+
+Sat Jan 12 04:31:59 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: fix bug: -m was -m0.
+
+Fri Jan 11 23:22:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (string.c): call rb_str_buf_append to update encoding of
+ str1, even if str2 is empty.
+
+Fri Jan 11 20:20:16 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (proc_mark): needs to mark the receiver too. a patch from
+ Chris Heath <chris AT heathens.co.nz> in [ruby-core:14983].
+ [ruby-core:14885]
+
+Fri Jan 11 18:28:49 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/usage.rb: Removed.
+
+ * lib/getoptlong.rb: Update example to not use lib/rdoc/usage.rb.
+
+Fri Jan 11 18:17:10 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/ri/driver.rb (read_yaml): Follow namespace change
+ [ruby-core:14964].
+
+Fri Jan 11 16:55:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_append): performance improvement.
+
+Fri Jan 11 12:35:56 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in: moved broken syscall checks from process.c etc.
+
+ * defines.h (WORDS_BIGENDIAN): honor __BIG_ENDIAN__ than the result of
+ configure.
+
+ * lib/rdoc/options.rb (check_diagram): more precise check, darwin
+ is not Windows but mingw is on it.
+
+Fri Jan 11 09:59:05 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: update to r1.163.
+
+ * ext/nkf/nkf.c: ASCII's canonical name is US-ASCII.
+
+ * ext/nkf/lib/kconv.rb (Kconv.isjis): force_encoding('BINARY').
+
+Fri Jan 11 09:23:31 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (set_base_encoding): must use rb_enc_dummy_p.
+
+Fri Jan 11 06:13:14 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_to_encoding_index, rb_to_encoding): disallow nil.
+ [ruby-dev:33003]
+
+Fri Jan 11 01:08:01 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread.c (rb_mutex_unlock): proper error message for unlocking
+ mutex that is not locked. a patch from Yusuke ENDOH
+ <mame at tsg.ne.jp> in [ruby-dev:33010].
+
+Thu Jan 10 18:00:41 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * prelude.rb (Mutex::synchronize): capture exception from unlock.
+ [ruby-dev:32935]
+
+Thu Jan 10 10:15:03 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_encoding_set): IO.pipe("euc-jp", nil) should work as
+ IO.pipe("euc-jp", nil). [ruby-dev:33000]
+
+ * io.c (io_encoding_set): handle nil for v1.
+
+Thu Jan 10 02:41:22 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_binmode): should not alter encoding. [ruby-dev:32918]
+
+ * io.c (io_read_encoding): need not to return ASCII-8BIT for
+ binary IO.
+
+Wed Jan 9 22:04:17 2008 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+
+ * lib/mathn.rb (Prime#each): returns an enumerator if no block
+ given. [ruby-dev:32815]
+
+Wed Jan 9 22:03:26 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_replicate): replica of dummy is a dummy.
+
+Wed Jan 9 20:55:38 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/e2mmap.rb (Exception2MessageMapper::Raise): define fail.
+ [ruby-dev:32854]
+
+Wed Jan 9 20:35:42 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httprequest.rb: support X-Forwarded-* header fields.
+ WEBrick::HTTPRequest#{host,port,request_uri} is derived having
+ regards to X-Forwarded-Proto and X-Forwarded-Host.
+
+ * lib/webrick/httprequest.rb
+ (WEBrick::HTTPRequest#server_name?): new method.
+ (WEBrick::HTTPRequest#remote_ip?): new method.
+ (WEBrick::HTTPRequest#ssl?): new method.
+
+Wed Jan 9 18:24:39 2008 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * golf_prelude.rb (Array#to_s): alias to join.
+
+ * golf_prelude.rb (FalseClass#to_s): return "".
+
+Wed Jan 9 16:59:54 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_enc_cr_str_buf_cat): fix self appending.
+
+Wed Jan 9 15:54:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): give priority command line encoding option
+ to RUBYOPT, and enable -E option in RUBYOPT.
+
+ * ruby.c (load_file): deal with encoding option in shebang line if
+ nothing in command line and RUBYOPT.
+
+Wed Jan 9 14:55:36 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y (yycompile0): remove setting parser->enc because it is set
+ in parser_prepare() by previous change of parser_prepare().
+
+Wed Jan 9 14:52:18 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_enc_cr_str_buf_cat, rb_str_buf_append): deal with self
+ appending.
+
+Wed Jan 9 14:44:57 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y (parser_prepare): set parser->enc from lex_input for ripper.
+
+Wed Jan 9 13:45:52 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/server.rb (WEBrick::HTTPServer#start):
+ :DoNotReverseLookup option had not been performed.
+
+Wed Jan 9 13:03:34 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_enc_cr_str_buf_cat): do not recalculate coderange
+ value if it's given from outside.
+
+Wed Jan 9 08:42:01 2008 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * enum.c: Updating the documentation of Enumerable#zip to reflect
+ the recent changes Matz made to the method.
+
+Wed Jan 9 01:35:10 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * enc/Makefile.in (BUILTIN_ENCS): UTF-{16,32}{BE,LE} are not builtin.
+
+Tue Jan 8 23:55:15 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c (rb_enc_init): UTF-{16,32}{BE,LE} are not builtin.
+
+Tue Jan 8 22:33:03 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * encoding.c, Makefile.in, include/ruby/oniguruma.h,
+ enc/Makefile.in: fix rules for UTF-{16,32}{BE,LE}.
+
+Tue Jan 8 20:02:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win{32,ce}/Makefile.sub: merged.
+
+Tue Jan 8 19:48:15 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/ri/driver.rb: Speed up Marshal.load. Fix bug with nested
+ classes' methods.
+
+Tue Jan 8 19:17:29 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/*: Clean up namespacing of RI's classes.
+
+Tue Jan 8 18:05:35 2008 Eric Hodel <drbrain@segment7.net>
+
+ * bin/ri, lib/rdoc/ri/*: Replace with Ryan Davis' cached ri.
+
+Tue Jan 8 17:32:07 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_zip): honor length of the receiver, not the
+ shortest length. [ruby-core:14738]
+
+ * enum.c (enum_zip): returns array not enumerator for no block
+ form. [ruby-core:14738]
+
+ * enumerator.c (next_ii): do not ignore multiple values yielded.
+
+ * array.c (rb_ary_zip): faster version without creating generators.
+
+Tue Jan 8 15:47:43 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * enc/utf{16,32}_{be,le}.c: use &OnigEncodingName(*) instead of
+ ONIG_ENCODING_*.
+
+Tue Jan 8 15:40:31 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regenc.c (onigenc_strlen_null, onigenc_str_bytelen_null): suppressed
+ warnings.
+
+ * regenc.h, enc/unicode.c (onigenc_unicode_ctype_code_range): added
+ encoding argument.
+
+ * enc/utf{16,32}_{be,le}.c: added init functions.
+
+ * enc/utf{16,32}_{be,le}.c: imported from Oniguruma 5.9.1.
+
+Tue Jan 8 15:03:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (str_gsub): avoid appending empty pre-match substr.
+
+Tue Jan 8 13:05:57 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_build_from_ary), iseq.c (iseq_load): fix for format change.
+
+Tue Jan 8 07:56:11 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_buf_append): fix append itself.
+
+Tue Jan 8 01:13:50 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (STR_ENC_GET): defined. same as rb_enc_get without
+ enc_capable.
+ (coderange_scan): ASCII-8BIT test refined.
+ (rb_enc_cr_str_buf_cat): new internal function to accumulate
+ strings with encoding.
+ (rb_enc_str_buf_cat): use rb_enc_cr_str_buf_cat.
+ (rb_str_buf_append): ditto
+ (str_gsub): use rb_str_buf_append.
+ (rb_str_hash): use ENCODING_GET.
+ (rb_str_comparable): ditto.
+ (rb_str_cmp): compare encoding index, not rb_encoding address.
+
+Mon Jan 7 20:37:55 2008 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httpservlet/cgihandler.rb: external encoding of
+ tempfiles is set to "ASCII-8BIT".
+
+Mon Jan 7 19:39:50 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/template.rb: Use ERB instead of custom template language.
+
+ * lib/rdoc/generators/template/html/old_html.rb: Remove.
+
+ * lib/rdoc/generators/template/*: Convert to ERB.
+
+Mon Jan 7 19:11:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (Init_String): sym_match arity spec was wrong. a patch
+ from Hiroyuki Iwatsuki <don at na.rim.or.jp> in [ruby-dev:32957].
+
+Mon Jan 7 18:10:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (str_gsub): move rb_enc_get(str) to out of loop.
+
+Mon Jan 7 15:52:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/oniguruma.h (OnigEncodingType): new member
+ ruby_encoding_index to avoid linear search in rb_enc_to_index.
+
+ * include/ruby/encoding.h (rb_enc_to_index): macro defined to use
+ ruby_encoding_index.
+
+ * encoding.c (rb_enc_to_index): removed.
+ (enc_register_at): initialize ruby_encoding_index member.
+
+Mon Jan 7 16:10:35 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/tokenstream.rb: Namespace under RDoc.
+
+Mon Jan 7 16:06:09 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/dot.rb: Namespace under RDoc.
+
+ * lib/rdoc/diagram.rb: Clean up formatting.
+
+Mon Jan 7 15:51:35 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/options.rb: Convert to OptionParser, clean up -h output,
+ namespace under RDoc.
+ * lib/rdoc/*: Namespace RDoc::Options.
+
+Mon Jan 7 15:42:46 2008 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk, Makefile.in, */Makefile.sub (distclean-local): move
+ removing rule of ext/ripper/y.output from common.mk to Makefiles
+ that depend on platforms.
+
+Mon Jan 7 13:54:57 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_preprocess): fix fixed_enc condition.
+
+Mon Jan 7 11:51:49 2008 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/generators/ri_generator.rb: Merge documentation from the
+ same class on output. Fixes bug where documentation could
+ disappear.
+
+ * lib/rdoc/options.rb: Fix typo.
+
+ * lib/rdoc/generators/*: Clean up some namespacing and make RDoc
+ consistent.
+
+Mon Jan 7 11:44:45 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_internal_get_index): extracted from
+ rb_enc_get_index.
+ (rb_enc_internal_set_index): extracted from rb_enc_associate_index
+
+ * include/ruby/encoding.h (ENCODING_SET): work over ENCODING_INLINE_MAX.
+ (ENCODING_GET): ditto.
+ (ENCODING_IS_ASCII8BIT): defined.
+ (ENCODING_CODERANGE_SET): defined.
+
+ * re.c (rb_reg_fixed_encoding_p): use ENCODING_IS_ASCII8BIT.
+
+ * string.c (rb_enc_str_buf_cat): use ENCODING_IS_ASCII8BIT.
+
+ * parse.y (reg_fragment_setenc_gen): use ENCODING_IS_ASCII8BIT.
+
+ * marshal.c (has_ivars): use ENCODING_IS_ASCII8BIT.
+
+Mon Jan 7 02:14:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (coderange_scan): avoid rb_enc_to_index.
+ (rb_enc_str_buf_cat): ditto.
+ (str_cat_char): use rb_enc_str_buf_cat.
+ (rb_str_inspect): ditto.
+
+Mon Jan 7 01:36:49 2008 Tanaka Akira <akr@fsij.org>
+
+ * string.c (coderange_scan): optimize ASCII-8BIT string.
+ (rb_enc_str_buf_cat): don't call coderange_scan if possible.
+
+Mon Jan 7 01:05:45 2008 Tanaka Akira <akr@fsij.org>
+
+ * lib/erb.rb (ERB::Revision): cut off locale dependent string in Date
+ keyword.
+
+Mon Jan 7 00:48:02 2008 Tanaka Akira <akr@fsij.org>
+
+ * Date keyword removed to avoid inclusion of locale dependent
+ string. [ruby-dev:32940]
+
+Sun Jan 6 21:14:12 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_initialize_str): forbid raw non ASCII character
+ for ASCII-8BIT regexp in non ASCII-8BIT script.
+
+Sun Jan 6 18:19:12 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_enc_str_buf_cat): declared.
+
+ * string.c (coderange_scan): extracted from rb_enc_str_coderange.
+ (rb_enc_str_coderange): use coderange_scan.
+ (rb_str_shared_replace): copy encoding and coderange.
+ (rb_enc_str_buf_cat): new function for linear complexity string
+ accumulation with encoding.
+ (rb_str_sub_bang): don't conflict substituted part and replacement.
+ (str_gsub): use rb_enc_str_buf_cat.
+ (rb_str_clear): clear coderange.
+
+ * re.c (rb_reg_regsub): use rb_enc_str_buf_cat.
+
+Sun Jan 6 17:55:44 2008 Technorama Ltd. <oss-ruby@technorama.net>
+
+ * lib/securerandom.rb: Add Win32 support.
+
+Sun Jan 6 09:32:58 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb, lib/date/format.rb: introduced some constants
+ (for internal use) and aliases (minute and second).
+
+ * sample/cal.rb: trivial adjustments.
+
+Sun Jan 6 01:38:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_initialize_str): /\x80/n is not an error even if script
+ encoding is EUC-JP.
+
+Sun Jan 6 00:48:12 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/resolv.rb (Resolv::DNS#each_address): get A record and then AAAA
+ record. [ruby-dev:32925]
+
+Sat Jan 5 21:48:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * vm_insnhelper.c (vm_callee_setup_arg): it is not inlinable because
+ alloca is used.
+
+Sat Jan 5 16:50:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_resize): copy if old data is not empty
+ [ruby-core:14785]
+
+Sat Jan 5 13:04:24 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options): no need for intermediate object.
+
+Sat Jan 5 11:48:19 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (Init_Encoding): alias csWindows31J to Windows-31J.
+ IE6 accepts csWindows31J but Windows-31J.
+
+Sat Jan 5 02:21:10 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (rb_intern): memorize interned ID for constant
+ string, using gcc's __builtin_constant_p and statement expression.
+
+Sat Jan 5 02:14:45 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (trnext): should enable backslash escape.
+
+Sat Jan 5 01:50:32 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (Init_eval): move instance_eval and instance_exec to
+ BasicObject. [ruby-core:14747]
+
+ * lib/delegate.rb: should preserve new methods in BasicObject.
+
+Sat Jan 5 01:46:29 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ruby.c (proc_options): update according to the last API revert.
+
+Sat Jan 5 01:30:30 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h, re.c (rb_reg_new): keep interface same as
+ 1.8. [ruby-core:14583]
+
+ * include/ruby/intern.h, re.c (rb_reg_new_str): renamed, and defines
+ HAVE_RB_REG_NEW_STR macro to tell if it is available.
+
+ * include/ruby/encoding.h (rb_enc_reg_new): added.
+
+ * insns.def (toregexp), marshal.c (r_object0): use rb_reg_new_str().
+
+ * re.c (rb_reg_regcomp, rb_reg_s_union): ditto.
+
+Fri Jan 4 23:08:48 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * time.c (time_arg): use converted object. [ruby-core:14759]
+
+Fri Jan 4 16:24:58 2008 Tanaka Akira <akr@fsij.org>
+
+ * ext/digest/lib/digest/hmac.rb (Digest::HMAC#initialize): use
+ String#bytesize to avoid test errors on EUC-JP environment.
+
+Fri Jan 4 14:00:50 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_prepare_re): check string encoding. Oniguruma doesn't
+ support invalid encoding.
+
+Fri Jan 4 10:22:25 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_search): avoid inner loop for reverse search.
+
+ * regexec.c: unset USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
+ which is turned on since oniguruma 5.9.1.
+
+Fri Jan 4 02:53:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/euc_jp.c: remove eucjp_ prefix. breakpoint can be specified as
+ euc_jp.c:mbc_enc_len. avoid needless conflict by merge.
+
+ * enc/sjis.c: remove sjis_ prefix.
+
+ * enc/utf8.c: remove utf8_ prefix.
+
+ * enc/iso_8859_1.c: remove iso_8859_1_ prefix.
+
+ * enc/iso_8859_2.c: remove iso_8859_2_ prefix.
+
+ * enc/iso_8859_3.c: remove iso_8859_3_ prefix.
+
+ * enc/iso_8859_4.c: remove iso_8859_4_ prefix.
+
+ * enc/iso_8859_5.c: remove iso_8859_5_ prefix.
+
+ * enc/iso_8859_6.c: remove iso_8859_6_ prefix.
+
+ * enc/iso_8859_7.c: remove iso_8859_7_ prefix.
+
+ * enc/iso_8859_8.c: remove iso_8859_8_ prefix.
+
+ * enc/iso_8859_9.c: remove iso_8859_9_ prefix.
+
+ * enc/iso_8859_10.c: remove iso_8859_10_ prefix.
+
+ * enc/iso_8859_11.c: remove iso_8859_11_ prefix.
+
+ * enc/iso_8859_13.c: remove iso_8859_13_ prefix.
+
+ * enc/iso_8859_14.c: remove iso_8859_14_ prefix.
+
+ * enc/iso_8859_15.c: remove iso_8859_15_ prefix.
+
+ * enc/iso_8859_16.c: remove iso_8859_16_ prefix.
+
+Fri Jan 4 02:47:06 2008 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_search): iterate onig_match for reverse mode.
+
+Fri Jan 4 01:20:21 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32.h: only VC6 needs extern "C++" for math.h. [ruby-talk:285660]
+
+Fri Jan 4 00:54:43 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * include/ruby/oniguruma.h: Oniguruma 5.9.1 merged.
+
+Fri Jan 4 00:20:47 2008 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_ungetc): move data in buffer if it is required to store the
+ argument.
+
+Thu Jan 3 21:56:07 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (st_strcasecmp): declared for STRCASECMP.
+ (st_strncasecmp): declared for STRNCASECMP.
+
+Thu Jan 3 20:24:48 2008 Koichi Sasada <ko1@atdot.net>
+
+ * eval_jump.c (rb_f_catch): Restore cfp if caught thrown object.
+
+Thu Jan 3 19:45:57 2008 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_eval.rb, test_knownbug.rb: move a fixed test.
+
+Thu Jan 3 18:39:12 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c: (rb_tolower, rb_toupper): body was exchanged.
+
+Thu Jan 3 17:54:01 2008 Tanaka Akira <akr@fsij.org>
+
+ * regenc.h (onigenc_ascii_is_code_ctype): put back.
+
+Thu Jan 3 17:33:09 2008 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_isalnum): defined.
+ (rb_isalpha): ditto.
+ (rb_isblank): ditto.
+ (rb_iscntrl): ditto.
+ (rb_isdigit): ditto.
+ (rb_isgraph): ditto.
+ (rb_islower): ditto.
+ (rb_isprint): ditto.
+ (rb_ispunct): ditto.
+ (rb_isspace): ditto.
+ (rb_isupper): ditto.
+ (rb_isxdigit): ditto.
+ (rb_tolower): ditto.
+ (rb_toupper): ditto.
+
+ * include/ruby/ruby.h: don't include include/ruby/encoding.h.
+ (rb_isascii): defined.
+ (rb_isalnum): declared.
+ (rb_isalpha): ditto.
+ (rb_isblank): ditto.
+ (rb_iscntrl): ditto.
+ (rb_isdigit): ditto.
+ (rb_isgraph): ditto.
+ (rb_islower): ditto.
+ (rb_isprint): ditto.
+ (rb_ispunct): ditto.
+ (rb_isspace): ditto.
+ (rb_isupper): ditto.
+ (rb_isxdigit): ditto.
+ (rb_tolower): ditto.
+ (rb_toupper): ditto.
+ (ISASCII): simplified.
+ (ISPRINT): ditto.
+ (ISSPACE): ditto.
+ (ISUPPER): ditto.
+ (ISLOWER): ditto.
+ (ISALNUM): ditto.
+ (ISALPHA): ditto.
+ (ISDIGIT): ditto.
+ (ISXDIGIT): ditto.
+ (TOUPPER): ditto.
+ (TOLOWER): ditto.
+
+ * include/ruby/encoding.h (rb_isascii): removed.
+ (rb_isalnum): ditto.
+ (rb_isalpha): ditto.
+ (rb_isblank): ditto.
+ (rb_iscntrl): ditto.
+ (rb_isdigit): ditto.
+ (rb_isgraph): ditto.
+ (rb_islower): ditto.
+ (rb_isprint): ditto.
+ (rb_ispunct): ditto.
+ (rb_isspace): ditto.
+ (rb_isupper): ditto.
+ (rb_isxdigit): ditto.
+ (rb_tolower): ditto.
+ (rb_toupper): ditto.
+
+ * common.mk: dependency updated.
+
+Thu Jan 3 15:10:26 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_isascii): simplified.
+ (rb_isalnum): call onigenc_ascii_is_code_ctype without indirect call.
+ (rb_isalpha): ditto.
+ (rb_isblank): ditto.
+ (rb_iscntrl): ditto.
+ (rb_isdigit): ditto.
+ (rb_isgraph): ditto.
+ (rb_islower): ditto.
+ (rb_isprint): ditto.
+ (rb_ispunct): ditto.
+ (rb_isspace): ditto.
+ (rb_isupper): ditto.
+ (rb_isxdigit): ditto.
+
+ * include/ruby/oniguruma.h (onigenc_ascii_is_code_ctype): declaration
+ moved from regenc.h.
+
+Thu Jan 3 14:37:17 2008 Tanaka Akira <akr@fsij.org>
+
+ * parse.y (parser_magic_comment): use STRNCASECMP.
+ (set_file_encoding): ditto.
+
+Thu Jan 3 11:44:37 2008 Tanaka Akira <akr@fsij.org>
+
+ * time.c: don't mention an obsolete library, ParseDate.
+
+Thu Jan 3 11:28:58 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (fptr_finalize): clear errno first. [ruby-talk:284492]
+
+Thu Jan 3 05:02:36 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/us_ascii.c: add us_ascii_ prefix for functions to ease
+ setting breakpoint when debugging.
+
+ * enc/euc_jp.c: add eucjp_ prefix.
+
+ * enc/sjis.c: add sjis_ prefix.
+
+ * enc/iso_8859_1.c: add iso_8859_1_ prefix.
+
+ * enc/iso_8859_2.c: add iso_8859_2_ prefix.
+
+ * enc/iso_8859_3.c: add iso_8859_3_ prefix.
+
+ * enc/iso_8859_4.c: add iso_8859_4_ prefix.
+
+ * enc/iso_8859_5.c: add iso_8859_5_ prefix.
+
+ * enc/iso_8859_6.c: add iso_8859_6_ prefix.
+
+ * enc/iso_8859_7.c: add iso_8859_7_ prefix.
+
+Thu Jan 3 02:44:34 2008 Tanaka Akira <akr@fsij.org>
+
+ * bignum.c (conv_digit): use ISDIGIT, ISLOWER and ISUPPER.
+
+Wed Jan 2 23:50:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * util.c (ruby_strtoul): "0x", "+" and "-" is not a valid integer.
+ end of integer should be just after "0", the beginning, the
+ beginning respectively.
+
+Wed Jan 2 15:23:15 2008 Tanaka Akira <akr@fsij.org>
+
+ * util.c (ruby_strtoul): locale independent strtoul is implemented to
+ avoid "i".to_i(36) cause 0 under tr_TR locale on Debian GNU/Linux
+ 4.0 (Etch).
+ This is newly implemented, not a copy of missing/strtoul.c.
+
+ * include/ruby/ruby.h (ruby_strtoul): declared.
+ (STRTOUL): defined to use ruby_strtoul.
+
+ * bignum.c, pack.c, ext/socket/socket.c: use STRTOUL.
+
+ * configure.in (strtoul): don't check.
+
+ * missing/strtoul.c: removed.
+
+ * include/ruby/missing.h (strtoul): removed.
+
+ * common.mk (strtoul.o): removed.
+
+ * LEGAL (missing/strtoul.c): removed.
+
+Wed Jan 2 14:41:08 2008 Tanaka Akira <akr@fsij.org>
+
+ * common.mk (strcasecmp.o): removed.
+ (strncasecmp.o): removed.
+
+ * include/ruby/missing.h (strcasecmp): removed.
+ (strncasecmp): removed.
+
+Wed Jan 2 11:34:57 2008 Tanaka Akira <akr@fsij.org>
+
+ * missing/strcasecmp.c: removed. Ruby don't use locale dependent
+ strcasecmp.
+
+ * missing/strncasecmp.c: ditto.
+
+ * configure.in: don't check strcasecmp and strncasecmp.
+
+ * LEGAL: missing/strcasecmp.c and missing/strncasecmp.c removed.
+
+Wed Jan 2 10:13:54 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * sample/time.rb: use Process.times instead of Time.times.
+
+Wed Jan 2 09:09:53 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * sample/goodfriday.rb: examples for date are enough. retired.
+
+Wed Jan 2 08:58:54 2008 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * sample/cal.rb: just updated with the newest version.
+
+Wed Jan 2 01:19:31 2008 Tanaka Akira <akr@fsij.org>
+
+ * enc/depend: dependency updated.
+
+Wed Jan 2 00:14:41 2008 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/{nkf.c, utf8tbl.c}: Update nkf.
+
+ * ext/nkf/nkf.c: fix documents.
+
+ * ext/nkf/lib/kconv.rb: fix documents.
+ (Kconv.is*): use valid_encoding?.
+ (Kconv.isjis): defined.
+
+Tue Jan 1 23:17:03 2008 Tanaka Akira <akr@fsij.org>
+
+ * common.mk: dependency updated.
+
+Tue Jan 1 21:11:33 2008 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (rb_isascii): defined.
+ (rb_isalnum): ditto.
+ (rb_isalpha): ditto.
+ (rb_isblank): ditto.
+ (rb_iscntrl): ditto.
+ (rb_isdigit): ditto.
+ (rb_isgraph): ditto.
+ (rb_islower): ditto.
+ (rb_isprint): ditto.
+ (rb_ispunct): ditto.
+ (rb_isspace): ditto.
+ (rb_isupper): ditto.
+ (rb_isxdigit): ditto.
+ (rb_tolower): ditto.
+ (rb_toupper): ditto.
+
+ * include/ruby/st.h (st_strcasecmp): declared.
+ (st_strncasecmp): ditto.
+
+ * st.c (type_strcasehash): use st_strcasecmp instead of strcasecmp.
+ (st_strcasecmp): defined.
+ (st_strncasecmp): ditto.
+
+ * include/ruby/ruby.h: include include/ruby/encoding.h.
+ (ISASCII): use rb_isascii.
+ (ISPRINT): use rb_isprint.
+ (ISSPACE): use rb_isspace.
+ (ISUPPER): use rb_isupper.
+ (ISLOWER): use rb_islower.
+ (ISALNUM): use rb_isalnum.
+ (ISALPHA): use rb_isalpha.
+ (ISDIGIT): use rb_isdigit.
+ (ISXDIGIT): use rb_isxdigit.
+ (TOUPPER): defined.
+ (TOLOWER): ditto.
+ (STRCASECMP): ditto.
+ (STRNCASECMP): ditto.
+
+ * dir.c, encoding.c, file.c, hash.c, process.c, ruby.c, time.c,
+ transcode.c, ext/readline/readline.c: use locale insensitive
+ functions. [ruby-core:14662]
+
+Tue Jan 1 17:50:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_mode_enc): encoding spec is not allowed in binary mode.
+ [ruby-dev:32913]
+
+Tue Jan 1 14:41:56 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rexml: 1.9 patch from Sam Ruby mentioned in his blog:
+ <http://intertwingly.net/blog/2007/12/31/Porting-REXML-to-Ruby-1-9>
+ [ruby-core:14639]
+
+Tue Jan 1 14:15:04 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_substr): offset movement bug. a patch from
+ Vincent Isambart <vincent.isambart at gmail.com> in
+ [ruby-core:14647]. [ruby-core:14644]
+
+Tue Jan 1 01:29:04 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_to_encoding): raises for non-nil, non-encoding,
+ non-string object. [ruby-core:14634]
+
+Tue Jan 1 01:04:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): rejects dummy encoding.
+
+Mon Dec 31 23:53:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options, process_options): delays finding encoding
+ until load_path is set.
+
+Mon Dec 31 23:27:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_resize): embeds if ptr is null. [ruby-dev:32819]
+
+Mon Dec 31 23:17:22 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httpproxy.rb (WEBrick::HTTPProxyServer#proxy_service):
+ call do_XXX which correspond with request method.
+ (WEBrick::HTTPProxyServer#do_CONNECT,do_GET,do_POST,do_HEAD): added.
+
+ * test/webrick/test_httpproxy.rb: add test for WEBrick::HTTPProxyServer.
+
+Mon Dec 31 22:53:29 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * thread_pthread.c (native_sleep): timespec tv_sec may overflow on
+ some platform. a patch from zunda <zunda616e AT yahoo.co.jp> in
+ [ruby-dev:32904].
+
+Mon Dec 31 19:35:20 2007 Tanaka Akira <akr@fsij.org>
+
+ * string.c (IS_7BIT): removed.
+ (single_byte_optimizable): new function to test optimizationability
+ using single byte string.
+ (str_strlen): use single_byte_optimizable instead of
+ is_ascii_string.
+ (str_nth): rename argument: asc -> singlebyte.
+ (str_offset): ditto.
+ (rb_str_substr): use single_byte_optimizable instead of IS_7BIT.
+ (rb_str_index): ditto.
+ (rb_str_rindex): ditto.
+ (rb_str_splice): ditto.
+ (rb_str_justify): ditto.
+
+Mon Dec 31 07:39:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * main.c, goruby.c (RUBY_MAIN_INIT): removed.
+
+ * goruby.c (goruby_run_node): run after ruby_init_loadpath() so that
+ require works, and protect the call.
+
+Mon Dec 31 06:50:38 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk: not use -I$(srcdir)/lib with $(MINIRUBY) for cross
+ compiling.
+
+ * configure.in, {win,bcc}32/Makefile.sub (MINIRUBY): -I$(srcdir)/lib
+ moved.
+
+Mon Dec 31 06:08:34 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/encoding.h (rb_enc_sprintf, rb_enc_vsprintf): prototyped.
+
+ * sprintf.c (rb_enc_sprintf, rb_enc_vsprintf): new functions to format
+ arguments with encoding.
+
+Sun Dec 30 23:48:00 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * golf_prelude.rb (String#/): define / as split, as association of
+ Array#*.
+
+Sun Dec 30 23:19:06 2007 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * golf_prelude.rb (@@golf_hash): for performance improvement.
+
+Sun Dec 30 22:44:50 2007 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb (_valid_time?): I'm not sure to recommend such an
+ expression. but anyway it is acceptable now. [ruby-core:14580]
+
+Sun Dec 30 21:54:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (program, yycompile0): too early to drop lex_lastline in
+ rules.
+
+Sun Dec 30 19:23:23 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bootstraptest/test_knownbug.rb: support DOSISH.
+
+Sun Dec 30 17:43:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (Init_Encoding): registered rb_encoding differs from
+ ONIG_ENCODINGs.
+
+Sun Dec 30 13:56:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (program): clear input strings after all process.
+
+ * parse.y (parser_nextc, parser_yylex): should not drop lex_lastline
+ while lex_p is valid. [ruby-dev:32896]
+
+Sun Dec 30 10:54:49 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * configure.in: rm largefile.h.
+
+ * common.mk: clean golf, conf*, preludes, and so on.
+
+ * enc/depend: silent and ignore error for rm.
+
+ * enc/Makefile.in: should define prefix and exec_prefix.
+
+Sun Dec 30 06:31:11 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * encoding.c (Init_encoding): register Windows-31J and its alias.
+ [ruby-dev:32843]
+
+ * ruby.c (proc_options): -Ks options means Windows-31J, not Shift_JIS.
+
+Sun Dec 30 06:27:38 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (depend_rules): need to convert `/' to `\' for windows
+ native commands.
+
+Sun Dec 30 01:43:56 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/Makefile.in (DLDFLAGS): like as extensions. [ruby-core:14567]
+
+Sat Dec 29 23:48:13 2007 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_fflush): don't retry when wbuf modified by other threads.
+
+Sat Dec 29 22:44:30 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * re.c (rb_reg_regsub): returns the given string itself if nothing
+ changed.
+
+ * string.c (rb_str_sub_bang): keeps code-range as possible.
+
+ * string.c (str_gsub): adjusts code-range. [ruby-core:14566]
+
+Sat Dec 29 21:54:37 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (clean, distclean, realclean): should include clean-enc
+ and others. [ruby-dev:32887]
+
+Sat Dec 29 13:29:29 2007 Tanaka Akira <akr@fsij.org>
+
+ * bootstraptest/test_knownbug.rb: add a test reported by
+ Kazuhiro NISHIYAMA. [ruby-dev:32819].
+ add a test reported by Frederick Cheung. [ruby-core:14556].
+
+ * test/ruby/test_m17n.rb (test_gsub): add a test reported by
+ Sam Ruby. [ruby-core:14566]
+
+Sat Dec 29 04:46:58 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert_throws):
+ throw won't raise NameError nor ThreadError but ArgumentError on 1.9.
+ (Test::Unit::Assertions#assert_not_throws): ditto.
+
+ * test/testunit/test_assertions.rb: add assertions for throwing some
+ objects other than Symbol.
+
+Sat Dec 29 03:10:12 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (io_unread): fix typo.
+
+Sat Dec 29 02:18:45 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * io.c (io_unread): adhoc workaround for non-binary mode of some DOSish
+ platforms. this is not perfect and safety, but works with most cases.
+
+Fri Dec 28 23:53:18 2007 Tanaka Akira <akr@fsij.org>
+
+ * ext/strscan/strscan.c (str_new): new function for allocate an string
+ with encoding propagation.
+ (extract_range): use str_new.
+ (extract_beg_len): ditto.
+ (strscan_peek): ditto.
+ (strscan_rest): ditto.
+
+Fri Dec 28 20:18:42 2007 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * golf_prelude.rb (Object.say): derived from Perl 5.10.
+
+Fri Dec 28 19:39:34 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * encoding.c (rb_locale_encoding): should check return value from
+ rb_locale_charmap().
+
+ * ruby.c (locale_encoding): removed.
+
+ * ruby.c (process_options): use rb_locale_encoding() instead of
+ locale_encoding().
+
+ * ext/readline/readline.c (readline_readline): use locale encoding
+ instead of input IO's encoding. [ruby-dev:32872]
+
+Fri Dec 28 19:29:07 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_readline, readline_s_set_input):
+ use mReadline directly because self is not always same.
+
+Fri Dec 28 19:11:28 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_locale_encoding): defined.
+
+ * include/ruby/encoding.h (rb_locale_encoding): declared.
+
+Fri Dec 28 18:45:29 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/readline/readline.c (readline_readline): set encoding to result.
+
+ * ext/readline/readline.c (readline_s_set_input, Init_readline): save
+ input IO to hidden instance variable.
+
+Fri Dec 28 01:55:04 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c (transcode_dispatch): reverted some of the changes
+ in r14746.
+
+ * transcode.c, enc/trans/single_byte.c: Added conversions to/from
+ US-ASCII and ASCII-8BIT (using data tables).
+
+ * enc/trans/single_byte.c: Some spacing/ordering changes due to
+ automatic data file generation.
+
+ * transcode_data.h, transcode.c: Preliminary code for using
+ micro-conversion functions.
+
+ * test/ruby/test_transcode.rb: Added some tests for US-ASCII and
+ ASCII-8BIT conversions.
+
+Fri Dec 28 17:33:44 2007 Tanaka Akira <akr@fsij.org>
+
+ * time.c (make_time_t): verify mktime and timegm result.
+
+Fri Dec 28 16:36:33 2007 NARUSE, Yui <naruse@airemix.com>
+
+ * lib/resolv.rb (Resolv::DNS#each_address): now returns IPv6 address.
+
+Fri Dec 28 16:10:00 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/dot/dot.rb: Move to lib/rdoc/dot.rb. Fix namespacing.
+
+ * lib/rdoc/diagram.rb: Update for 1.9.
+
+Fri Dec 28 15:38:29 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/markup/sample/: Move to sample/rdoc/markup directory.
+
+Fri Dec 28 15:15:12 2007 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/irb/completion.rb: Remove garbage ("X=1").
+
+Fri Dec 28 15:12:05 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc, test/rdoc: Move RDoc tests out of lib/.
+
+Fri Dec 28 15:10:47 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (set_base_encoding, enc_base_encoding): renamed
+ based_encoding as base_encoding.
+
+Fri Dec 28 13:57:49 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * golf_prelude.rb (Integer#each): use alias simply.
+
+Fri Dec 28 13:45:21 2007 Akinori MUSHA <knu@iDaemons.org>
+
+ * golf_prelude.rb (Object.const_missing): No need to delegate to
+ superclass. Just raise a NameError when none matches.
+
+Fri Dec 28 13:18:47 2007 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb, test/rss/test_version.rb: 0.2.2 -> 0.2.3.
+
+ * lib/rss/parser.rb, test/rss/test_parser.rb: supported "-" in tag name.
+ Reported by Ray Chen. Thanks.
+
+Fri Dec 28 13:07:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (os_obj_of): returns an enumerator if no block given. based on
+ a patch from Yugui <yugui AT yugui.sakura.ne.jp>. [ruby-dev:32828]
+
+Fri Dec 28 11:46:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/ytab.sed: skip yydestruct hack unless yymsg exists, for bison
+ 1.8 series. [ruby-dev:32825]
+
+Fri Dec 28 11:39:02 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * golf_prelude.rb (Object.quine): need to join because SCRIPT_LINES__[]
+ returns an array of lines.
+
+Fri Dec 28 11:16:53 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * golf_prelude.rb (Object.quine): get the script itself.
+
+Fri Dec 28 10:06:54 2007 Akinori MUSHA <knu@iDaemons.org>
+
+ * golf_prelude.rb (Object.const_missing): Auto-complete constants.
+
+Fri Dec 28 01:55:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (transcode_dispatch): allows transcoding from/to
+ ASCII-8BIT.
+
+Fri Dec 28 01:47:25 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * golf_prelude.rb (Integer): Integer is now enumerable on goruby.
+
+Fri Dec 28 01:27:47 2007 Tanaka Akira <akr@fsij.org>
+
+ * lib/rdoc/rdoc.rb (parse_files): don't depend on the default external
+ encoding.
+
+Fri Dec 28 00:01:57 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (golf_prelude.c): use MINIRUBY instead of BASERUBY because
+ tool/compile_prelude.rb requires rbconfig.rb.
+
+Thu Dec 27 23:56:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * mkconfig.rb: should not use the libraries under the source directory
+ at cross compiling.
+
+Thu Dec 27 23:43:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * cygwin/GNUmakefile.in (EXTOBJS): uses ruby.rc always for other than
+ rubyw.exe.
+
+Thu Dec 27 22:31:37 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/rubygems/commands/update_command.rb (do_rubygems_update): use
+ portable and safely ENV operation. reported in
+ <http://slashdot.jp/developers/comments.pl?sid=384937&cid=1273085>.
+
+Thu Dec 27 21:47:04 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * mkconfig.rb (prefix): archdir is "1.9.0", not "1.9". reported in
+ <http://slashdot.jp/developers/comments.pl?sid=384937&cid=1273085>.
+
+Thu Dec 27 17:57:30 2007 Tanaka Akira <akr@fsij.org>
+
+ * parse.y, transcode_data.h, transcode.c, lib/weakref.rb,
+ lib/irb/ruby-lex.rb, lib/irb/lc/error.rb, enc/trans/japanese.c:
+ change "illegal" to "invalid" in a context which doesn't against
+ a law.
+
+Thu Dec 27 16:37:06 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_s_union): show encodings in error message.
+
+Thu Dec 27 15:25:16 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_codelen): show codepoint in error message.
+
+ * include/ruby/encoding.h (rb_enc_codelen): comment it returns
+ positive integer.
+
+ * string.c (rb_str_concat): rb_enc_codelen doesn't return 0.
+
+Thu Dec 27 15:18:44 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_codelen): error message refined.
+
+Thu Dec 27 15:11:27 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_check): show encodings in error message.
+
+Thu Dec 27 15:02:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_casecmp): fixed using a wrong variable.
+ [ruby-list:44402]
+
+Thu Dec 27 14:34:38 2007 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_fflush): checks wbuf modification by other threads.
+ not perfect. it need locks.
+
+Thu Dec 27 10:44:03 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/socket/socket.c: a patch to support IRIX from Andrew
+ Thompson <andrew@hijacked.us> in [ruby-core:14447].
+
+Thu Dec 27 02:25:45 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (create_tmpsrc): retry to create file if Errno::EACCES
+ occurs. this is a workaround for mswin32.
+
+Wed Dec 26 22:47:31 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/resolv.rb (Resolv::DNS::Name.==): fix for other is array of
+ Resolv::DNS::Label::Str.
+
+ * lib/resolv.rb (Resolv::DNS::MessageEncoder#put_label): String#string
+ is not defined, so replace to_s.
+
+ * lib/resolv.rb (Resolv::IPv6#to_name): ip6.int is obsoleted by
+ ip6.arpa.
+
+Wed Dec 26 21:27:02 2007 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date/format.rb (_xmlschema): some improvements.
+
+ * lib/date/format.rb (_parse): a new hint compfunc. [experimental]
+
+Wed Dec 26 17:31:08 2007 Tanaka Akira <akr@fsij.org>
+
+ * io.c (io_fflush): check closed fptr after rb_write_internal to avoid
+ SEGV on MacOS X.
+
+Wed Dec 26 16:10:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (Init_String): defines chars method.
+
+Wed Dec 26 14:38:43 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * instruby.rb: install goruby if exists.
+
+Wed Dec 26 13:55:02 2007 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Cleaned up some code with Ruby 1.9 idioms.
+
+Wed Dec 26 13:29:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (tmpbuf): use rb_str_tmp_new().
+
+Wed Dec 26 00:57:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/json/ext/generator/generator.c (Init_generator): requires
+ json/common.rb for GeneratorError, when static linked. a patch from
+ Kenta Murata <muraken AT gmail.com> in [ruby-dev:32789].
+
+Tue Dec 25 23:33:55 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * development version 1.9.0 released.
+
+Tue Dec 25 23:25:29 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rexml/node.rb (REXML::Node::indent): should initialize rv
+ variable. a patch from Tadayoshi Funaba <tadf AT dotrb.org> in
+ [ruby-dev:32783].
+
+Tue Dec 25 23:16:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (proc_options): encoding option in shebang and RUBYOPT did not
+ work, do not store alloca()ed string in a parent scope struct.
+
+Tue Dec 25 22:56:52 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * win32/Makefile.sub (config.status): keep this file.
+
+Tue Dec 25 22:55:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (TIMEZONE_VOID): typo.
+
+Tue Dec 25 22:45:10 2007 Koichi Sasada <ko1@atdot.net>
+
+ * insns2vm.rb: add encoding option to shebang.
+
+Tue Dec 25 22:13:51 2007 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/pending.rb: add pending issue.
+
+Tue Dec 25 22:12:40 2007 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c: remove Thread.critical(=).
+
+Tue Dec 25 21:44:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot: add version number.
+
+Tue Dec 25 21:32:54 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): fix stack consistency error
+ (break is compiled to throw instead of jump insn).
+ these problems are reported by Yusuke ENDOH <mame AT tsg.ne.jp>
+
+ * bootstraptest/test_knownbug.rb, test_syntax.rb: move fixed test.
+
+Tue Dec 25 21:32:44 2007 Tanaka Akira <akr@fsij.org>
+
+ * parse.y (struct parser_params): make parser_ruby_sourcefile common
+ field. it is used by node_newnode.
+ new field parser_ruby_sourcefile_string for ripper.
+ (parser_initialize): initialize parser_ruby_sourcefile in ripper.
+ (ripper_initialize): initialize parser_ruby_sourcefile_string.
+
+Tue Dec 25 21:26:09 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (parse.c): depends on tool/ytab.sed.
+
+ * tool/ytab.sed: hack for bison 2.1.
+
+Tue Dec 25 20:24:58 2007 Technorama Ltd. <oss-ruby@technorama.net>
+
+ * ext/openssl/ossl_ssl.c: Only show a warning if the default
+ DH callback is actually used.
+
+ * ext/openssl/ossl_rand.c: New method: random_add().
+
+Tue Dec 25 20:24:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * tool/make-snapshot: argument check, and cleanup exported directory.
+
+Tue Dec 25 20:07:13 2007 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * tool/make-snapshot: more portable.
+
+Tue Dec 25 19:01:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.h (rb_enc_mbc_to_codepoint): wrapper for
+ ONIGENC_MBC_TO_CODE().
+
+ * string.c (rb_str_succ): deal with invalid sequence as binary.
+
+Tue Dec 25 18:40:46 2007 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c: all methods need $SAFE < 1.
+
+ vm.c: comment out debug functions.
+
+Tue Dec 25 18:37:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (appendline): move RS comparison to rb_io_getline_1().
+
+Tue Dec 25 18:27:51 2007 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_each_line): don't call rb_enc_codepoint with empty
+ string.
+
+Tue Dec 25 18:06:04 2007 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_inspect): don't call rb_enc_codepoint with empty
+ string. fix '#'.inspect.
+
+ * encoding.c (rb_enc_codepoint): raise on empty string.
+
+Tue Dec 25 17:48:28 2007 Shugo Maeda <shugo@ruby-lang.org>
+
+ * vm.c (rb_frame_method_id_and_class): new function to get the
+ method id and class of the current frame.
+
+Tue Dec 25 17:32:04 2007 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/mkmf.rb (create_makefile): Add a missing dependency on the
+ target directory for each .rb file. This will hopefully fix
+ parallel make (-jN). Tested on FreeBSD.
+
+Tue Dec 25 16:51:07 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/trans/japanese.c (rb_{from,to}_{SHIFT_JIS,EUC_JP}): inversed
+ from_encoding and to_encoding.
+
+Tue Dec 25 16:41:57 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * golf_prelude.rb (h): add new method for all golfers.
+
+Tue Dec 25 16:37:12 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/trans/japanese.c (rb_to_EUC_JP): fixed typo.
+
+Tue Dec 25 16:34:58 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/depend: add dependencies. [ruby-dev:32760]
+
+Tue Dec 25 16:26:48 2007 Koichi Sasada <ko1@atdot.net>
+
+ * include/ruby/ruby.h, thread.c: rename is_ruby_native_thread() to
+ ruby_native_thread_p().
+
+ * ext/tk/tcltklib.c: apply it.
+
+Tue Dec 25 16:15:15 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (clean-enc): clean encoding objects.
+
+Tue Dec 25 16:04:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk, goruby.c, golf_prelude.rb: for golfers.
+
+ * main.c (main): hook for embedding applications.
+
+ * tool/compile_prelude.rb: can change initialize function name.
+
+Tue Dec 25 15:59:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_register): do not use based_encoding to check if
+ dummy encoding.
+
+Tue Dec 25 15:55:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_succ): fix for string with non-alphanumeric chars.
+
+Tue Dec 25 15:42:49 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_external_encoding): should return nil for
+ pass-through write IO. [ruby-dev:32740]
+
+Tue Dec 25 15:24:57 2007 Tanaka Akira <akr@fsij.org>
+
+ * io.c (appendline): initialize rslen to 1 if rsptr is 0.
+ rslen is the length of the delimiter.
+ if only delim is given, it should be 1.
+ [ruby-dev:32746]
+
+Tue Dec 25 15:21:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (transcode_dispatch): fix for multistep transcode.
+
+Tue Dec 25 15:07:51 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * enc/trans/single_byte.c (Init_single_byte): renamed.
+
+Tue Dec 25 15:00:33 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_yield): when multiple values yielded from #each
+ pack them into an array. [ruby-dev:32708]
+
+ * enum.c: all method but all?, any?, one? and none? passed packed
+ multiple values to the block.
+
+ * enum.c (collect_all): should pack all values. [ruby-core:14410]
+
+Tue Dec 25 14:57:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (COMMONOBJS): transcode_data_*.c moved under enc/trans.
+
+ * transcode_data.h (rb_transcoding, rb_transcoder): prefixed.
+
+ * transcode.c (rb_register_transcoder, rb_declare_transcoder): split
+ declaration and registration. [ruby-dev:32704]
+
+ * transcode.c (transcode_dispatch): autoload pre-declared transcoder.
+
+ * transcode.c (str_transcode): use rb_define_dummy_encoding().
+
+ * transcode.c (Init_transcode): initialize transcoder tables.
+
+ * enc/trans/single_byte.c, enc/trans/japanese.c: moved from top.
+
+Tue Dec 25 14:20:13 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/mkmf.rb (map_dir): should generate path including $top_srcdir.
+
+Tue Dec 25 14:09:16 2007 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Fixed test failures caused by changes to Ruby.
+
+ * test/csv/tc_serialization, test/csv/tc_csv_parsing, test/csv/tc_features:
+ Fixed test failures caused by changes to Ruby.
+
+Tue Dec 25 14:11:57 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (io_encoding_set): missing return type.
+
+Tue Dec 25 14:03:48 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * test/rinda/test_rinda.rb (MockClock#{_forward, forward, sleep}):
+ Change default value of n as @reso from nil. If default value is
+ nil, n.+ is not defined.
+
+Tue Dec 25 13:54:01 2007 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_io_m17n.rb (test_pipe): fixed.
+ [ruby-dev:32743]
+
+Tue Dec 25 13:44:51 2007 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_thread_wait_fd_rw): should check EBADF on select().
+
+Tue Dec 25 13:30:03 2007 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c, thread_pthread.h, thread_win32.c,
+ thread_win32.c: make some functions static functions.
+ a patch from Tadashi Saito <shiba AT mail2.accsnet.ne.jp>
+ in [ruby-core:14407]
+
+Tue Dec 25 13:23:13 2007 Tanaka Akira <akr@fsij.org>
+
+ * test/ruby/test_io_m17n.rb (test_write_noenc): don't mix text and
+ binary mode. [ruby-dev:32743]
+
+Tue Dec 25 13:13:09 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * README.EXT.ja, dir.c, eval.c, eval_intern.h, lex.c.src,
+ lex.c.blt, keywords, load.c, thread.c: more ANSI'ize.
+ a patch from Tadashi Saito <shiba AT mail2.accsnet.ne.jp>
+ in [ruby-dev:32725]
+
+Tue Dec 25 13:07:56 2007 Koichi Sasada <ko1@atdot.net>
+
+ * vm_core.h, thread.c, cont.c: add RUBY_VM_SET_INTERRUPT(),
+ RUBY_VM_SET_TIMER_INTERRUPT(), RUBY_VM_INTERRUPTED().
+
+ * thread.c, thread_pthread.c, thread_win32.c: fix to ignore time slice
+ event until sleep.
+
+ * bootstraptest/test_thread.rb: add a test for time limited join test.
+
+Tue Dec 25 12:42:59 2007 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (Init_VM): remove unused code.
+ [ruby-dev:32732]
+
+Tue Dec 25 12:32:32 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c: Moving a static counter from inside register_transcoder()
+ and register_functional_transcoder() to outside the functions, renaming
+ from n to next_transcoder_position. Fixes 3) in [ruby-dev:32715].
+
+Tue Dec 25 12:22:17 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * sample/from.rb: follow Ruby 1.9 libraries.
+
+Tue Dec 25 12:21:56 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * proc.c (method_inspect): preserve encoding of the method name.
+
+Tue Dec 25 12:07:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (BASERUBY): delayed error until BASERUBY is used.
+
+Tue Dec 25 11:48:35 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sample/README: removed obsoleted files: dbmtest.rb,
+ getopts.test, mrshtest.rb, regx.rb.
+
+Tue Dec 25 11:45:34 2007 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb: Import the FasterCSV source as the new CSV class.
+
+ * test/csv/*: Added all applicable tests from FasterCSV.
+
+Tue Dec 25 11:33:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * error.c (report_bug): uses ruby_description.
+
+Tue Dec 25 11:20:38 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): fix stack consistency error.
+ a patch from Yusuke ENDOH <mame AT tsg.ne.jp> [ruby-dev:32720]
+
+ * bootstraptest/test_syntax.rb: add 2 tests for above.
+
+Tue Dec 25 11:14:20 2007 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c, vm_core.h: comment out unused fields.
+
+Tue Dec 25 11:02:10 2007 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c: check frame is FINAL when creating env.
+ [ruby-core:14395]
+
+ * bootstraptest/test_block.rb: add a test for above.
+
+Tue Dec 25 09:12:13 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/: Enable RDoc debugging only with $DEBUG_RDOC.
+
+Tue Dec 25 08:37:43 2007 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * lib/csv.rb, test/csv/test_csv.rb: Removed in preparation for
+ FasterCSV code import.
+
+Tue Dec 25 08:27:43 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems.rb: Fix test failures.
+
+ * test/rubygems/test_gem.rb: Fix test failure.
+
+Tue Dec 25 06:23:40 2007 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_knownbug.rb, test_literal.rb: move fixed test.
+
+Tue Dec 25 06:19:04 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * sample/biorhythm.rb: follow Ruby 1.9 libraries.
+
+Tue Dec 25 06:15:01 2007 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c: add dummy toplevel frame.
+
+Tue Dec 25 05:44:56 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/net/http.rb: Fix uninitialized variable warning.
+ [ruby-talk:284582]
+
+ * lib/irb/output-method.rb: Remove unused #foo method.
+ [ruby-talk:284582]
+
+Tue Dec 25 05:24:12 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile): clear local table if node == 0.
+ a patch from Yusuke ENDOH <mame AT tsg.ne.jp> [ruby-dev:32530]
+
+ * vm.c: clear VM stack.
+
+Tue Dec 25 04:23:32 2007 Tanaka Akira <akr@fsij.org>
+
+ * parse.y (rb_id2str): fill klass of returned string as rb_cString.
+ some strings are allocated before rb_cString is created.
+ This prevents a "called on terminated object" error by
+ ObjectSpace.each_object(Module) {|m| p m.name }.
+
+Tue Dec 25 03:51:55 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): fix stack consistency bug.
+ a patch from Yusuke ENDOH <mame AT tsg.ne.jp>
+
+Tue Dec 25 03:19:47 2007 WATANABE Hirofumi <eban@ruby-lang.org>
+
+ * tool/make-snapshot: must create configure and lex.c.
+
+Tue Dec 25 03:16:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_s_pipe): now takes up to two arguments. allow its
+ external/internal encoding by Encoding objects.
+
+ * io.c (rb_io_set_encoding): new method to set encoding of the IO.
+
+ * io.c (argf_set_encoding): ditto.
+
+Tue Dec 25 03:08:53 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * pack.c (pack_pack): use NUM2LONG instead of NUM2INT.
+
+ * numeric.c (fix_lshift, fix_aref): use SIZEOF_LONG instead of
+ SIZEOF_VALUE.
+
+ * bignum.c (big2ulong, rb_big_aref): ditto.
+
+Tue Dec 25 02:55:26 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/rexml/element.rb (REXML::Elements#each): yield in each
+ should be called with one parameter. [ruby-dev:32708]
+
+Tue Dec 25 02:15:39 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): add a "pop" insn after break
+ to fix stack consistency error. [ruby-core:14385]
+
+ * bootstraptest/test_syntax.rb: add tests for above.
+
+ * bootstraptest/test_knownbug.rb: remove fixed bug.
+
+Tue Dec 25 01:54:36 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * id.c (Init_id): remove several unused symbols. [ruby-core:14362]
+
+ * compile.c (iseq_specialized_instruction): do not use
+ VM_CALL_SEND_BANG flag any longer.
+
+Tue Dec 25 01:42:41 2007 Tanaka Akira <akr@fsij.org>
+
+ * lib/rdoc/rdoc.rb (parse_files): interpret coding cookie.
+
+Tue Dec 25 01:38:04 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * proc.c (method_name): preserve Symbol's encoding.
+
+ * numeric.c (fix_id2name): ditto.
+
+Tue Dec 25 01:19:18 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * include/ruby/encoding.h (rb_enc_left_char_head): new utility macro.
+
+ * include/ruby/encoding.h (rb_enc_right_char_head): ditto.
+
+ * io.c (appendline): does multibyte RS search in the function.
+
+ * io.c (prepare_getline_args): RS may be nil.
+
+ * io.c (rb_io_getc): should process character based on external
+ encoding, when transcoding required.
+
+Tue Dec 25 01:07:57 2007 Tanaka Akira <akr@fsij.org>
+
+ * lib/irb/output-method.rb: translate a comment to English to
+ avoid mix of EUC-JP comment and UTF-8 Date keyword.
+ svn substitute Date keyword with UTF-8 weekday on UTF-8 locale.
+
+Tue Dec 25 00:27:28 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httpservley/cgihandler.rb
+ (WEBrick::HTTPServlet::CGIHandler#do_GET): m17nized.
+
+Mon Dec 24 23:55:29 2007 Tanaka Akira <akr@fsij.org>
+
+ * lib/cgi.rb (CGI::escape): m17nized.
+ (CGI::unescape): ditto.
+ (CGI::escapeHTML): ditto.
+ (CGI::unescapeHTML): ditto.
+
+Mon Dec 24 23:32:24 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * transcode_data_japanese.c (select_iso_2022_mode): '\e' is not valid.
+
+Mon Dec 24 23:13:09 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/rdoc/diagram.rb (RDoc::Diagram#initialize): use fileuitls
+ instead of ftools.
+
+Mon Dec 24 23:04:57 2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/ftools.rb: removed obsoleted lib. use fileutils instead (by eban).
+
+ * lib/rdoc/rdoc.rb, lib/rdoc/generators/*, lib/rake.rb: let it use
+ fileutils instead of ftools.
+
+ * lib/shell/command-processor.rb: removed unused references to ftools.
+
+ * lib/parsedate.rb: removed. see [ruby-core:12535], [ruby-dev:31969].
+
+ * lib/README: updated.
+
+Mon Dec 24 23:01:04 2007 Tanaka Akira <akr@fsij.org>
+
+ * lib/open-uri.rb (OpenURI::Buffer): use Meta ===. [ruby-core:14295]
+
+Mon Dec 24 22:46:42 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * transcode.c: register_functional_transcoder() added.
+ (init_transcoder_table(: register ISO-2022-JP.
+ (str_transcode): add preprocessor and postprocessor.
+
+ * transcode_data_japanese.c: add ISO-2022-JP support.
+
+ * transcode_data.h: moved transcoder and transcoding definition from
+ transcode.c.
+
+Mon Dec 24 20:29:28 2007 Koichi Sasada <ko1@atdot.net>
+
+ * test/io/nonblock/test_flush.rb: fix test for 1.9.
+
+Mon Dec 24 20:23:44 2007 Koichi Sasada <ko1@atdot.net>
+
+ * test/rinda/test_rinda.rb: revert last commit because this test seems
+ to have timing problem to halt all tests.
+
+Mon Dec 24 20:18:52 2007 Koichi Sasada <ko1@atdot.net>
+
+ * test/rinda/test_rinda.rb: enable rinda test.
+
+Mon Dec 24 20:16:54 2007 Koichi Sasada <ko1@atdot.net>
+
+ * instruby.rb: fix rdoc install dir.
+
+Mon Dec 24 18:37:32 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_prepare_re): show regexp encoding in the error message.
+
+Mon Dec 24 18:23:32 2007 Tanaka Akira <akr@fsij.org>
+
+ * eval.c (rb_exc_raise): ANSI style.
+ (rb_exc_fatal): ditto.
+ (rb_raise_jump): ditto.
+ (rb_jump_tag): ditto.
+ (rb_block_given_p): ditto.
+
+ * variable.c (original_module): ditto.
+
+Mon Dec 24 18:05:09 2007 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c (Init_ISeq): disable ISeq.load() because there is no verifier.
+
+ * iseq.c, proc.c: add ISeq.disasm(method).
+
+Mon Dec 24 18:06:03 2007 Tanaka Akira <akr@fsij.org>
+
+ * eval_method.c (Init_eval_method): extracted from Init_eval
+ for rdoc to find rb_mod_remove_method, rb_mod_undef_method and
+ rb_mod_alias_method.
+
+ * eval.c (Init_eval): call Init_eval_method.
+
+Mon Dec 24 17:59:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (load_lock): reverted.
+
+ * thread.c (rb_barrier_wait): check for recursive wait.
+
+Mon Dec 24 17:50:54 2007 Tanaka Akira <akr@fsij.org>
+
+ * eval.c (function_call_may_return_twice_jmp_buf): removed.
+ (function_call_may_return_twice_false): removed.
+ [ruby-core:14335]
+
+Mon Dec 24 17:40:57 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (node_name.inc, miniprelude.c, prelude.c): nmake cannot
+ handle target vpath in other than implicit rules.
+
+Mon Dec 24 17:20:34 2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * lib/{mailread.rb,getopts.rb,parsearg.rb}: removed.
+ see [ruby-core:12535], [ruby-dev:31969].
+
+Mon Dec 24 17:12:57 2007 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h, random.c, array.c:
+ change exported name.
+ genrand_int32 -> rb_genrand_int32.
+ genrand_real -> rb_genrand_real.
+ [ruby-core:14335]
+
+Mon Dec 24 17:06:37 2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
+
+ * {lib,test}/{soap,wsdl,xsd}: removed soap4r along to the discussion
+ at ruby-core and ruby-dev. see [ruby-core:12535], [ruby-dev:31969].
+
+Mon Dec 24 17:06:14 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_feature_p): returns loading path name too.
+
+ * load.c (search_required): returns path too if feature is being
+ loaded. [ruby-dev:32048] [TODO: refactoring]
+
+Mon Dec 24 16:29:12 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * sample/openssl: reviewed and remove dependency on getopts.rb.
+
+Mon Dec 24 16:18:57 2007 Koichi Sasada <ko1@atdot.net>
+
+ * mkconfig.rb: add teeny to CONFIG['ruby_version'].
+
+Mon Dec 24 15:55:50 2007 Koichi Sasada <ko1@atdot.net>
+
+ * tool/compile.rb, getrev.rb, runruby.rb: remove unused tools.
+
+Mon Dec 24 15:42:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in, cygwin/GNUmakefile.in, */Makefile.sub,
+ djgpp/config.hin.: version dependent directory names now contain
+ teeny.
+
+Mon Dec 24 15:29:13 2007 Tanaka Akira <akr@fsij.org>
+
+ * tool/serb.rb: removed.
+
+Mon Dec 24 13:55:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (rb_proc_new), vm.c (invoke_block): removed u3.state magic.
+ [ruby-core:14310]
+
+ * test/ruby/test_symbol.rb (test_to_proc): a test from Frederick
+ Cheung <frederick.cheung AT gmail.com>.
+
+Mon Dec 24 13:43:36 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * thread.c (rb_thread_atfork): should not leave living_threads
+ referring freed table while allocating new table.
+
+Mon Dec 24 12:49:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, configure.in, lib/mkmf.rb, */Makefile.sub: specify
+ compiled output file name explicitly.
+
+ * enc/Makefile.in, enc/depend: now makes compiler to put generated
+ files under directories corresponding to the each source.
+ enc/trans supported.
+
+ * enc/make_encmake.rb: evaluates depend file before Makefile.in so
+ that the former can influence to CONFIG.
+
+Mon Dec 24 12:35:03 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win{32,ce}/Makefile.sub (MFLAGS): defaulted to -l.
+
+Mon Dec 24 12:08:10 2007 Eric Hodel <drbrain@segment7.net>
+
+ * /, ext/: Add svn:ignore for OS X Xcode 3's conftest.dSYM
+ directories.
+
+Mon Dec 24 11:56:31 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk: should not pass MAKEFLAGS to recursive make.
+ + normal make: MFLAGS are set and command line options and macros
+ are all passed silently.
+ + GNU make: ditto, and all options and macros in MAKEFLAGS are in
+ effect.
+ + nmake: MFLAGS is not set and MAKEFLAGS has only options without
+ hyphen, no macros exist in any variables.
+ + Borland make: ditto, and command line macros cannot override
+ macros in makefile, so passing them is vain.
+
+ * {bcc32,win{32,ce}}/Makefile.sub (SET_MAKE): set MFLAGS which is not
+ set by default, to get rid of chaotic situation of MFLAGS/MAKEFLAGS.
+
+Mon Dec 24 11:32:44 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_comparable): fixed to keep transitivity.
+ [ruby-dev:32693]
+
+Mon Dec 24 11:20:31 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/ri/ri_options.rb: Fix display of GEMDIRS, make command
+ examples match ri's name.
+
+ * lib/rdoc/ri/ri_paths.rb: Only allow latest ri dirs in ri output.
+
+Mon Dec 24 10:49:04 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/uri/mailto.rb, lib/uri/common.rb: Fix Regexp warnings. Patch
+ #16524 from Kornelius Kalnbach, [ruby-core:14302].
+
+Mon Dec 24 10:37:38 2007 Eric Hodel <drbrain@segment7.net>
+
+ * gem_prelude.rb: Remove methods from Gem, not QuickLoader, to fix
+ warnings.
+
+Mon Dec 24 09:45:45 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c, transcode_data_one_byte.c, transcode_data_japanese.c:
+ added rb_ prefix to external data symbols.
+
+Mon Dec 24 05:32:22 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enum.c (enum_inject): updated documentation. a patch from Keita
+ Yamaguchi <keita.yamaguchi AT gmail.com> in [ruby-dev:32686].
+
+ * README.EXT: updated. a patch from Tadashi Saito
+ <shiba AT mail2.accsnet.ne.jp> in [ruby-core:14328].
+
+ * array.c (rb_ary_at): updated documentation. a patch from Tadashi
+ Saito <shiba AT mail2.accsnet.ne.jp> in [ruby-core:14330].
+
+Mon Dec 24 05:13:04 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (tr_trans): should associate new encoding if modified.
+
+Mon Dec 24 04:04:12 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * test/net/http/test_https.rb: should rescue LoadError.
+
+Mon Dec 24 03:57:28 2007 Koichi Sasada <ko1@atdot.net>
+
+ * cont.c, vm.h: fix to support sparc machine.
+ a patch from Yusuke ENDOH <mame AT tsg.ne.jp>
+
+Mon Dec 24 03:35:19 2007 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk: remove additional "-".
+
+Mon Dec 24 02:59:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_check_readable): should not fill fptr->enc always.
+ read-write IO (e.g. socket) does not work. [ruby-dev:32685]
+
+ * io.c (io_read_encoding): retrieve reading encoding.
+
+ * io.c (prepare_getline_args): convert RS to external encoding.
+
+ * string.c (str_new_shared): was setting embedding flag of wrong
+ string object. [ruby-dev:32685]
+
+ * io.c (io_enc_str): should preserve default_external encoding.
+
+ * io.c (appendline): should do multibyte aware RS search.
+
+Mon Dec 24 02:06:35 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_f_open): documentation update.
+
+ * io.c (rb_io_s_pipe): ditto.
+
+ * io.c (io_fwrite): wrong encoding destination.
+
+ * io.c (rb_io_external_encoding): should return the encoding of
+ the file reading.
+
+ * io.c (rb_io_internal_encoding): should return the encoding of
+ read string.
+
+Mon Dec 24 01:46:43 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_s_pipe): allow specifying read-side encoding.
+
+ * io.c (io_enc_str): wrong encoding destination.
+
+Mon Dec 24 01:03:17 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_comparable): comparison including broken
+ coderange strings do not consider encoding.
+
+Mon Dec 24 00:57:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (open_key_args): IO direct methods (foreach, readlines,
+ read) now takes keyword argument: encoding, mode, open_args.
+
+Mon Dec 24 00:52:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_s_read): encoding argument reverted.
+
+ * io.c (mode_enc): independent function to share code.
+
+ * io.c (rb_io_internal_encoding): new method.
+
+Mon Dec 24 00:47:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_beginendblock.rb (TestBeginEndBlock::test_endblockwarn):
+ rename endblockwarn.rb to endblockwarn_rb to avoid unnecessary
+ warning in make test.
+
+Sun Dec 23 23:03:13 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_codepoint): implemented to raise invalid
+ encoding.
+
+ * include/ruby/encoding.h (rb_enc_codepoint): macro is replaced as a
+ declaration.
+
+Sun Dec 23 19:45:22 2007 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time.httpdate): fix 2 digits year for 20xx.
+ reported by Tadayoshi Funaba. [ruby-dev:32687]
+
+Sun Dec 23 19:33:42 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/open-uri.rb: Fix method redefined warning. [ruby-core:14304]
+
+Sun Dec 23 18:31:49 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf.c (rb_nkf_enc_get): use rb_define_dummy_encoding.
+
+ * ext/nkf/nkf.c (Init_nkf): use rb_nkf_enc_get("ASCII").
+
+ * ext/nkf/nkf-utf8/nkf.c: Update 1.161.
+
+ * ext/nkf/nkf-utf9/config.h: default output encoding is now UTF-8.
+
+ * ext/nkf/lib/kconv.rb (Kconv.kconv): replace Encoding#name by
+ Encoding#to_s.
+
+Sun Dec 23 18:02:52 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems/gem_open_uri.rb: Fix version check.
+
+Sun Dec 23 17:24:48 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_init): add eucJP as an alias of EUC-JP.
+
+Sun Dec 23 17:00:23 2007 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time.httpdate): use Time.utc for
+ "day-of-week, dd-mon-yy HH::MM:SS GMT" format.
+
+Sun Dec 23 16:12:40 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc: Fix 1.9 warnings.
+
+Sun Dec 23 15:28:37 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems, test/rubygems: Fix new 1.9 warnings.
+
+Sun Dec 23 14:43:10 2007 Eric Hodel <drbrain@segment7.net>
+
+ * gem_prelude.rb: Use require to load rubygems.rb so the correct path
+ is in $LOADED_FEATURES on RubyGems upgrade.
+
+Sun Dec 23 11:26:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (sym_call): use exact argument array interface.
+ [ruby-core:14279]
+
+Sun Dec 23 11:01:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_binmode_m): removed C99ism.
+
+Sun Dec 23 10:23:23 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode_data_one_byte.c: Better (and more honest) optimization.
+
+ * transcode_data_japanese.c: First optimization step.
+
+Sun Dec 23 09:07:02 2007 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h, encoding.c, re.c, io.c, parse.y, numeric.c,
+ ruby.c, transcode.c, ext/nkf/nkf.c: rename rb_ascii_encoding to
+ rb_ascii8bit_encoding. rb_ascii_encoding is ambiguous with
+ ASCII-8BIT and US-ASCII.
+
+Sun Dec 23 03:35:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * version.h: use patchlevel if revision is not set.
+
+ * {bcc32,win{32,ce}}/setup.mak (-version-): skip including revision.h.
+
+ * common.mk (srcs): new target to generated sources.
+
+ * common.mk (encs, ext/ripper/ripper.c): MAKEFLAGS needs -.
+
+ * enc/depend, enc/make_encmake.rb: use erb.
+
+Sun Dec 23 01:56:18 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_mode_enc): do not set encoding unless explicitly
+ specified.
+
+ * io.c (rb_io_check_readable): fill fptr->enc by default_external
+ if it's empty.
+
+ * io.c (io_enc_str): fptr->enc is always set for reading IO (by
+ rb_io_check_readable(fptr)).
+
+Sun Dec 23 01:18:06 2007 David Flanagan <david@davidflanagan.com>
+
+ * io.c, io.h: temporary patch to partially implement
+ transcode-on-read and transcode-on-write
+
+Sun Dec 23 00:48:05 2007 Shugo Maeda <shugo@ruby-lang.org>
+
+ * test/net/imap/test_imap.rb: added tests for SSL.
+
+Sat Dec 22 21:10:53 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/syck/rubyext.c (syck_genericresolver_node_import): should
+ not set instance variable "@kind" before initializing it.
+ [ruby-dev:32677]
+
+Sat Dec 22 19:52:23 2007 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_objectspace.rb: fix condition.
+
+Sat Dec 22 19:17:10 2007 Koichi Sasada <ko1@atdot.net>
+
+ * ext/probeprofiler/: removed.
+
+Sat Dec 22 19:14:38 2007 Koichi Sasada <ko1@atdot.net>
+
+ * process.c (rb_f_fork): Unsupport Kernel.fork() on NetBSD.
+
+Sat Dec 22 18:20:13 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * common.mk (version.o): add dependency. [ruby-dev:32680]
+
+Sat Dec 22 17:45:11 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf.c (Init_nkf): use rb_ascii_encoding() for
+ rb_nkf_enc_get("US-ASCII").
+ * if use rb_nkf_enc_get("US-ASCII"), ruby will crash - this is bug?
+
+Sat Dec 22 17:39:03 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb ($extmk): fixed broken condition.
+
+Sat Dec 22 17:35:59 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8.c: Update nkf.c rev:1.157.
+
+ * ext/nkf/nkf.c (rb_nkf_enc_get): replicate proper based encoding.
+
+ * ext/nkf/kconv.c (Kconv#kconv, to*): use self.encoding as from_enc
+ when from_enc isn't given.
+
+Sat Dec 22 17:06:50 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/net/ssl.rb (OpenSSL::SSL::SSLContext.build): removed.
+
+ * ext/openssl/lib/net/ssl.rb (OpenSSL::SSL::SSLContext#set_params):
+ new method to set suitable SSL parameters.
+
+ * lib/net/pop.rb, lib/net/http.rb, lib/net/imap.rb,
+ test/openssl/test_ssl.rb: follow above change.
+
+ * test/net/http/test_https.rb: refine error case.
+
+Sat Dec 22 16:58:49 2007 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (encode_utf7): accept UTF-8 strings.
+
+ * lib/net/imap.rb (decode_utf7): return UTF-8 strings.
+
+Sat Dec 22 15:56:36 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * transcode_data_japanese: typo.
+
+Sat Dec 22 15:54:54 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * ChangeLog: Information for last patch got lost, fixed
+
+ * test/ruby/test_transcode.rb: Added simple tests for
+ EUC-JP and Shift_JIS and tests for ASCII-only range
+
+Sat Dec 22 15:45:45 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode_data_one_byte: slightly optimized
+
+ * transcode_data_japanese: new data file for EUC-JP and SHIFT_JIS
+ (not yet optimized; tests to follow; data from
+ http://nkf.sourceforge.jp/ucm/{SJIS|eucJP}-nkf.ucm)
+
+ * common.mk, transcode.c: Adjusted for transcode_data_japanese
+
+Sat Dec 22 15:30:13 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * */Makefile.sub (MFLAGS): define unless defined.
+
+Sat Dec 22 15:17:40 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb ($extmk): set true only when under ext/ or tool/.
+
+Sat Dec 22 15:14:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (encs, ext/ripper/ripper.c): needs MFLAGS.
+
+ * configure.in (STRINGIZE): stringizing macro.
+
+ * include/ruby/defines.h (STRINGIZE): fallback.
+
+ * tool/make-snapshot: new file.
+
+ * version.c (ruby_description, ruby_copyright): string constants for
+ -v option.
+
+Sat Dec 22 15:03:37 2007 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (initialize): fixed documentation.
+
+Sat Dec 22 15:01:16 2007 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/pop.rb (enable_ssl): use OpenSSL::SSL::SSLContext.build
+ instead of SSLContext.new (default verify mode is now
+ OpenSSL::SSL::VERIFY_PEER).
+
+Sat Dec 22 14:45:21 2007 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * lib/date.rb: shouldn't freeze nil. [ruby-dev:32677]
+
+Sat Dec 22 14:27:27 2007 Tanaka Akira <akr@fsij.org>
+
+ * regenc.c (onigenc_ascii_is_code_ctype): moved from enc/ascii.c.
+
+ * regenc.h (onigenc_ascii_is_code_ctype): declared.
+
+ * enc/ascii.c: use onigenc_ascii_is_code_ctype.
+
+ * enc/us_ascii.c: new file for US-ASCII.
+
+Sat Dec 22 14:30:34 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (reg_named_capture_assign_iter): allows non-ascii names and
+ get rid of reserved word IDs.
+
+Sat Dec 22 14:18:45 2007 Koichi Sasada <ko1@atdot.net>
+
+ * test/ruby/test_float.rb, test_sprintf.rb: fix test place.
+
+Sat Dec 22 14:17:02 2007 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_objectspace.rb: skip frozen string.
+
+Sat Dec 22 14:02:58 2007 Koichi Sasada <ko1@atdot.net>
+
+ * array.c (rb_ary_permutation): add volatile to avoid GC problem.
+
+Sat Dec 22 11:47:42 2007 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c (rb_obj_instance_eval): use class of immediate objects.
+
+ * test/ruby/test_eval.rb: fix a test.
+
+Sat Dec 22 11:37:06 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * encoding.c (rb_locale_charmap): win32 support.
+
+Sat Dec 22 11:31:14 2007 Eric Hodel <drbrain@segment7.net>
+
+ * gem_prelude.rb: Place bin dir before lib dir so gem bin stubs work.
+
+Sat Dec 22 11:05:44 2007 Jim Weirich <jim@tardis.local>
+
+ * lib/rake.rb (Rake): Added Rake and related libraries to the
+ source code base.
+
+Sat Dec 22 10:30:45 2007 Koichi Sasada <ko1@atdot.net>
+
+ * tool/insns2vm.rb: moved from lib/vm/instruction.rb.
+
+Sat Dec 22 10:25:44 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (reg_named_capture_assign_iter): captured name should
+ not be reserved word. a patch from Keita Yamaguchi
+ <keita.yamaguchi AT gmail.com> in [ruby-dev:32675].
+
+ * parse.y (reg_named_capture_assign_iter): just ignore the
+ captures that do not have valid local variable name.
+
+Sat Dec 22 10:19:08 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_method_name): now __method__ and __callee__ are
+ aliases. [ruby-core:14244]
+
+Sat Dec 22 08:29:56 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_buf_append): improvement for non-broken coded
+ strings.
+
+Sat Dec 22 06:30:04 2007 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_fork.rb: skip if fork is not unsupported.
+
+ * bootstraptest/test_io.rb: skip if require failed.
+
+Sat Dec 22 06:09:12 2007 David Flanagan <david@davidflanagan.com>
+
+ * io.c: fix typo in rdoc comment
+
+Sat Dec 22 05:09:43 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * parse.y (parser_str_new, rb_intern3): rb_default_encoding() renamed.
+
+ * ext/nkf/nkf.c (rb_nkf_putchar): ditto.
+
+Sat Dec 22 03:54:18 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * encoding.c (rb_ascii_encoding): renamed from previous
+ rb_default_encoding().
+
+Sat Dec 22 02:49:02 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (command): block from cmd_brace_block was ignored.
+ [ruby-dev:32644]
+
+ * re.c (rb_reg_prepare_re): stop ENCODING_NONE warning if the
+ encoding of the str is ASCII-8BIT.
+
+Sat Dec 22 01:52:11 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (io_ungetc): avoid buffer relocation, which might cause
+ serious problem under concurrent situation.
+
+Sat Dec 22 01:35:41 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (ARG_ENCODING_NONE): defined for /.../n option.
+ (REG_ENCODING_NONE): ditto.
+ (rb_char_to_option_kcode): return ARG_ENCODING_NONE for n.
+ (rb_reg_prepare_re): warn /ascii/n =~ "non-ascii".
+ (rb_reg_initialize): set REG_ENCODING_NONE from ARG_ENCODING_NONE.
+
+Sat Dec 22 01:23:10 2007 Shugo Maeda <shugo@ruby-lang.org>
+
+ * test/json/test_json_addition.rb (test_core): do not use Time.now
+ because JSON can't hold nsec.
+
+Sat Dec 22 01:10:30 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/tk/sample/tkextlib/vu/canvSticker2.rb,
+ ext/tk/sample/demos-{en,jp}/bind.rb: fix typo. [ruby-dev:32668]
+
+Sat Dec 22 00:56:43 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sample/test.rb (valid_syntax): force_encoding input script.
+
+Fri Dec 21 23:48:38 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * lib/mkmf.rb (depend_rules): suffixes list broken. fixed.
+
+Fri Dec 21 20:18:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_mul0): remove unused variable.
+
+ * bignum.c (bigdivrem): ditto.
+
+Fri Dec 21 20:13:51 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/ruby.h (rb_catch_obj, rb_throw_obj): prototyped.
+
+ * include/ruby/intern.h (rb_fiber_alive_p): prototyped.
+
+Fri Dec 21 20:09:18 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_succ): retry increasing until valid char is found.
+
+Fri Dec 21 20:00:02 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_replicate): now creates first class encoding.
+
+ * encoding.c (rb_define_dummy_encoding): always based on the default
+ encoding.
+
+ * encoding.c (rb_enc_dummy_p): check if dummy.
+
+ * encoding.c (enc_inspect): shows if dummy.
+
+ * encoding.c (Init_Encoding): added dummy? method
+
+ * include/ruby/encoding.h (ENCODING_INLINE_MAX): increased.
+
+Fri Dec 21 18:40:54 2007 Koichi Sasada <ko1@atdot.net>
+
+ * io.c: write() should be in blocking region.
+
+ * bootstraptest/test_io.rb, test_knownbug.rb: move a fixed test.
+
+Fri Dec 21 17:56:30 2007 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
+
+ * ext/tk/tcltklib.c: provisional support on Ruby-VM.
+
+ * ext/tk/MANUAL_tcltklib.eng, ext/tk/MANUAL_tcltklib.eucj:
+ modify document about new functions.
+
+ * ext/tk/lib/tk.rb, ext/tk/lib/tk/labelframe.rb,
+ ext/tk/lib/tk/frame.rb, ext/tk/lib/tk/toplevel.rb,
+ ext/tk/lib/tk/scrollbar.rb, ext/tk/lib/tk/message.rb,
+ ext/tk/lib/tk/listbox.rb, ext/tk/lib/tk/text.rb,
+ ext/tk/lib/tk/scale.rb, ext/tk/lib/tk/entry.rb,
+ ext/tk/lib/tk/ttk_selector.rb, ext/tk/lib/tk/menu.rb,
+ ext/tk/lib/tk/label.rb, ext/tk/lib/tk/spinbox.rb,
+ ext/tk/lib/tk/textmark.rb, ext/tk/lib/tk/winpkg.rb,
+ ext/tk/lib/tk/checkbutton.rb, ext/tk/lib/tk/panedwindow.rb,
+ ext/tk/lib/tk/texttag.rb, ext/tk/lib/tk/root.rb,
+ ext/tk/lib/tk/textimage.rb, ext/tk/lib/tk/radiobutton.rb,
+ ext/tk/lib/tk/package.rb, ext/tk/lib/tk/macpkg.rb,
+ ext/tk/lib/tk/composite.rb, ext/tk/lib/tk/autoload.rb,
+ ext/tk/lib/tk/canvas.rb, ext/tk/lib/tk/button.rb,
+ ext/tk/lib/tk/textwindow.rb,
+ ext/tk/lib/tkextlib/iwidgets/scrolledtext.rb,
+ ext/tk/lib/tkextlib/tile/style.rb,
+ ext/tk/lib/tkextlib/tile/tscrollbar.rb,
+ ext/tk/lib/tkextlib/tile/tpaned.rb, ext/tk/lib/tkextlib/tile.rb,
+ ext/tk/extconf.rb: support Tcl/Tk8.5 (partial, not complete).
+
+ * ext/tk/sample/demos-jp/widget,
+ ext/tk/sample/demos-jp/pendulum.rb,
+ ext/tk/sample/demos-jp/bind.rb,
+ ext/tk/sample/tkextlib/vu/canvSticker2.rb,
+ ext/tk/sample/demos-en/pendulum.rb,
+ ext/tk/sample/demos-en/bind.rb: remove $KCODE and minor bug fix.
+
+Fri Dec 21 17:49:06 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (rb_str_transcode_bang): returns self if no conversion.
+ [ruby-dev:32662]
+
+Fri Dec 21 17:44:47 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems*: Update to RubyGems 1.0.1, r1581
+
+Fri Dec 21 17:32:49 2007 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/pending.rb: renamed from featurebug.rb.
+ This file contains bugs which is known but will not be
+ fixed in days.
+
+Fri Dec 21 17:31:22 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * debug.c (dummy_gdb_enums.various): added ENCODING and CODERANGE
+ constants.
+
+ * .gdbinit: use enum constants.
+
+Fri Dec 21 17:28:17 2007 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/featurebug.rb: added.
+
+ * bootstraptest/test_knownbug.rb: move a feature bug.
+
+Fri Dec 21 17:25:22 2007 Koichi Sasada <ko1@atdot.net>
+
+ * thread.c (rb_thread_atfork): fix to mark thread object.
+ [ruby-dev:32404]
+
+ * bootstraptest/test_knownbug.rb, test_fork.rb: move a fixed test.
+
+Fri Dec 21 17:07:13 2007 Koichi Sasada <ko1@atdot.net>
+
+ * gc.h: extern variable should not be initialized.
+
+ * thread_pthread.c: add a parameter.
+
+Fri Dec 21 16:50:43 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (Init_Encoding): use enc_name as to_s.
+ (enc_inspect): renamed from enc_to_s. add "#" at beginning.
+
+Fri Dec 21 16:37:43 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/config.h (MIME_DECODE_DEFAULT, X0201_DEFAULT):
+ defined as FALSE. nkf and kconv don't decode MIME encoded string
+ and don't convert JIS X 0201 Katakana.
+
+ * test/nkf/test_kconv.rb: fix tests.
+
+Fri Dec 21 16:33:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enumerator.c (enumerator_iter_i): adjusted for rb_block_call_func.
+
+ * include/ruby/ruby.h (rb_block_call_func): function to be called back
+ as block.
+
+Fri Dec 21 16:25:25 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * common.mk, transcode_data_iso_8859.c: renamed to
+ transcode_data_one_byte.c.
+
+Fri Dec 21 16:10:30 2007 Shigeo Kobayashi <shigeo@tinyforest.jp>
+
+ * ext/bigdecimal/bigdecimal.c (VpMidRound): Round method bug
+ pointed by Ryan Platte fixed(Patch to the patch from "NATORI
+ Shin"). [ruby-talk:273360]
+
+Fri Dec 21 16:06:13 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (append_utf8): use rb_utf8_encoding() instead of
+ rb_enc_find("utf-8").
+
+Fri Dec 21 15:59:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_init): use enc_register_at() directly.
+
+ * encoding.c (rb_utf8_encoding): returns utf-8 encoding.
+
+ * include/ruby/encoding.h (rb_utf8_encoding): prototyped.
+
+ * parse.y (UTF8_ENC): uses rb_utf8_encoding().
+
+Fri Dec 21 15:31:59 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_s_read): allow specifying encoding explicitly.
+
+ * io.c (rb_io_binmode): specifies encoding to ASCII-8BIT (binary).
+
+ * io.c (rb_io_s_read): IO should be in binary mode when offset is
+ specified.
+
+ * encoding.c (rb_to_encoding): returns default encoding if no
+ corresponding encoding found.
+
+Fri Dec 21 15:24:22 2007 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (initialize): accept service name. changed
+ the default value of the old style +verify+ argument to true.
+
+Fri Dec 21 15:15:44 2007 Tanaka Akira <akr@fsij.org>
+
+ * gc.c (rb_garbage_collect): new function for debugging.
+
+Fri Dec 21 15:16:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_to_encoding_index): should return error instead of
+ exception even if type is incorrect.
+
+Fri Dec 21 14:58:27 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enumerator.c (enumerator_init_copy): prohibit cloning of
+ generators since Fibers cannot be copied.
+
+ * enumerator.c (enumerator_init_copy): typo fixed.
+
+Fri Dec 21 14:46:07 2007 Tanaka Akira <akr@fsij.org>
+
+ * io.c (Init_IO): define IO::BINARY even if O_BINARY is not exist.
+
+Fri Dec 21 14:01:14 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * test/ruby/test_system.rb (TestSystem::valid_syntax): apply
+ ASCII-8BIT encoding explicitly.
+
+ * re.c (rb_reg_prepare_re): add encoding name in the message.
+
+Fri Dec 21 13:54:05 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c: change "character encodings differ" error messages.
+
+Fri Dec 21 13:46:58 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_register): set encoding constant.
+
+ * encoding.c (rb_enc_find_index): replace non-alphanumeric chars with
+ underscores, so that initialize function can be called.
+
+ * encoding.c (rb_enc_find_index): extension libraries have lower case
+ names conventionally.
+
+ * ruby.c (proc_options, process_options): finds encoding after
+ load_path is initialized.
+
+Fri Dec 21 13:10:57 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_external_encoding): new method.
+
+ * encoding.c (rb_enc_from_encoding): returns Qnil for NULL
+ encoding.
+
+ * io.c (rb_io_external_encoding): should fill delayed
+ initialization for STDIN.
+
+Fri Dec 21 13:09:11 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_locale_charmap): return nil if no locale information.
+
+Fri Dec 21 12:55:39 2007 Tanaka Akira <akr@fsij.org>
+
+ * lib/runit, lib/rubyunit.rb, test/testunit/runit: removed.
+
+Fri Dec 21 12:45:49 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_chomp_bang): avoid unnecessary loop using
+ ONIGENC_LEFT_ADJUST_CHAR_HEAD().
+
+Fri Dec 21 12:32:08 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * file.c (Init_File): File.exists? revived.
+
+ * dir.c (Init_Dir): Dir.exists? again.
+
+Fri Dec 21 12:26:36 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c: remove "illegal".
+
+Fri Dec 21 12:22:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * keywords, parse.y (__ENCODING__): represent script encoding.
+
+Fri Dec 21 12:16:50 2007 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_is_ascii_only_p): new method ascii_only?.
+
+Fri Dec 21 12:11:57 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_mode_enc): set default external encoding if no
+ encoding specified explicitly.
+
+Fri Dec 21 12:00:34 2007 Tanaka Akira <akr@fsij.org>
+
+ * configure.in: check langinfo.h and locale.h.
+
+ * encoding.c: use langinfo.h only if available.
+
+ * main.c: use locale.h only if available.
+
+Fri Dec 21 11:47:56 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c: include locale.h
+ (rb_locale_charmap): new method Encoding.locale_charmap for
+ nl_langinfo(CODESET).
+
+ * include/ruby/encoding.h (rb_locale_charmap): declared.
+
+ * main.c (main): call setlocale with LC_CTYPE.
+
+ * ruby.c (locale_encoding): use rb_locale_charmap.
+
+Fri Dec 21 11:35:10 2007 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c, vm_dump.c: fix typo. Reported by Yuki Mitsui.
+
+Fri Dec 21 11:28:00 2007 Tanaka Akira <akr@fsij.org>
+
+ * regerror.c, string.c, io.c, lib/getoptlong.rb, lib/net/imap.rb,
+ compile.c, sprintf.c, parse.y, ext/win32ole/win32ole.c,
+ ext/tk/sample/demos-en/entry3.rb, ext/tk/lib/tcltk.rb,
+ ext/openssl/ossl_bn.c, numeric.c, vm.c,
+ benchmark/bm_so_meteor_contest.rb, bignum.c, ruby.c: don't "illegal"
+ for non law violation context.
+
+Fri Dec 21 11:23:24 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (enc.mk): depends on $(RBCONFIG) instead of rbconfig.rb.
+
+ * encoding.c (Init_Encoding): ISO-8859-1 is no longer a replica.
+
+ * regenc.h (OnigEncodingDefine): names of extension and encoding can
+ differ.
+
+ * enc/Makefile.in: always shared.
+
+ * enc/depend (deffile): should not upcase.
+
+ * enc/{ascii,euc_jp,sjis,utf8,iso_8859_{1..16}}.c: fix for Init.
+
+Fri Dec 21 09:26:48 2007 Tanaka Akira <akr@fsij.org>
+
+ * tool/compile_prelude.rb: use erb.
+
+Fri Dec 21 08:07:35 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * enumerator.c (enumerator_next): should call next_init() if fiber
+ is dead already. [ruby-dev:32459]
+
+Fri Dec 21 01:21:49 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLContext.build):
+ enable CRL checking by default.
+
+Fri Dec 21 01:20:56 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/net/http.rb (Net::HTTP#connect): use
+ OpenSSL::SSL::SSLContext.build instead of SSLContext.new (default
+ verify mode is now OpenSSL::SSL::VERIFY_PEER).
+
+ * lib/net/https.rb: SSL parameters are defined by attr_accessor.
+
+ * test/net/http/test_https.rb: add test for HTTPS features.
+
+Fri Dec 21 01:11:37 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * io.c (select_internal): should return original value.
+
+Fri Dec 21 00:26:39 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (tr_trans): wrong encoding check for tree strings.
+
+ * test/ruby/test_m17n.rb (TestM17N::test_tr_s): "invalid mbstring
+ sequence" is not an error to be tested.
+
+ * test/ruby/test_m17n.rb (TestM17N::test_tr): ditto.
+
+Thu Dec 20 19:29:07 2007 Shugo Maeda <shugo@ruby-lang.org>
+
+ * lib/net/imap.rb (initialize): the second argument is an option
+ hash now. use SSLContext.build to specify SSL parameters.
+
+Thu Dec 20 19:11:56 2007 Koichi Sasada <ko1@atdot.net>
+
+ * thread_pthread.c (native_thread_apply_priority): check
+ _POSIX_PRIORITY_SCHEDULING for OpenBSD.
+
+Thu Dec 20 18:33:54 2007 Koichi Sasada <ko1@atdot.net>
+
+ * configure.in: add libthr for FreeBSD.
+
+Thu Dec 20 18:17:14 2007 Koichi Sasada <ko1@atdot.net>
+
+ * common.mk, *.ci: renamed to *.c.
+
+ * eval_load.c: renamed to load.c.
+
+Thu Dec 20 17:36:01 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rubygems*: Import RubyGems 1.0.0, r1575.
+
+Thu Dec 20 17:18:38 2007 Koichi Sasada <ko1@atdot.net>
+
+ * proc.c: support Proc#binding.
+
+ * sample/test.rb: add a test.
+
+Thu Dec 20 17:15:15 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * pack.c: Slight change to documentation ('character' ->
+ 'byte (C char)'). [ruby-core:13126], see also [ruby-core:13998].
+
+Thu Dec 20 17:07:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (enc.mk): depends on rbconfig.rb.
+
+ * regenc.h (OnigEncodingDefine): external encoding definition macro.
+
+ * enc/Makefile.in: fix for linking.
+
+ * enc/depend, enc/make_encmake.rb: fix for Windows.
+
+ * enc/{ascii,euc_jp,sjis,utf8,iso_8859_{1..16}}.c: renamed.
+
+Thu Dec 20 16:42:55 2007 Koichi Sasada <ko1@atdot.net>
+
+ * iseq.c (find_line_no): return 0 if not found.
+
+Thu Dec 20 16:04:17 2007 Koichi Sasada <ko1@atdot.net>
+
+ * insnhelper.ci, vm.c, vm_core.h: change interface of
+ vm_invoke_block() to specify block ptr. [ruby-talk:266422]
+
+ * cont.c, eval_jump.ci, insns.def, proc.c, signal.c, thread.c:
+ apply above change.
+
+ * bootstraptest/test_knownbug.rb: move fixed bug.
+
+ * bootstraptest/test_block.rb: ditto. and add a test.
+
+Thu Dec 20 15:47:13 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/iso_8859_{1..16}.c: renamed.
+
+Thu Dec 20 09:59:27 2007 Koichi Sasada <ko1@atdot.net>
+
+ * insnhelper.ci (vm_expandarray): fix sp increase place.
+ a patch from Yusuke ENDOH <mame AT tsg.ne.jp> in [ruby-dev:32581].
+
+ * bootstraptest/test_massign.rb: add a test for above.
+
+ * bootstraptest/test_syntax.rb: fix last committed test.
+
+Thu Dec 20 09:47:58 2007 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_syntax.rb: add a test.
+
+Thu Dec 20 09:40:51 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each/NODE_RETURN): fix stack consistency.
+
+Thu Dec 20 09:42:11 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (big2str_orig): access beyond memory region cause crash
+ on interrupt. a patch from Yusuke ENDOH <mame AT tsg.ne.jp> in
+ [ruby-dev:32651]. [ruby-dev:32641]
+
+Thu Dec 20 09:06:54 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_index): wrong starting position.
+
+Thu Dec 20 06:34:27 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): add pop after throw as return.
+
+ * bootstraptest/test_knownbug.rb, test_syntax.rb: move resolved test.
+
+ * vm_core.h, iseq.c, compile.h: add debug output code.
+
+Thu Dec 20 04:57:18 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): remove unused retry entry.
+
+Thu Dec 20 04:15:41 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * */Makefile.sub (DEFS, RM): output to config.status.
+
+Thu Dec 20 02:59:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * common.mk (encs): create encoding directory.
+
+Thu Dec 20 02:50:28 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/iso8859_{1..16}.c: adjust for ruby.
+
+Thu Dec 20 02:28:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/iso8859_{1..16}.c: imported from Onigiruma 5.9.0.
+
+Thu Dec 20 02:23:22 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/Makefile.in (RM): added.
+
+ * enc/depend (encs): sort in alpha-numeric order.
+
+ * enc/depend (clean, distclean): added.
+
+Thu Dec 20 01:10:52 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): should handle upper level eval iseq
+ from break/next, and COMPILE_ERROR() breaks only one block.
+ [ruby-dev:31372]
+
+Thu Dec 20 00:07:36 2007 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
+
+ * test/drb/drbtest.rb (test_07_public_private_protected_missing):
+ followed current Ruby specification.
+
+Wed Dec 19 23:57:37 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * dir.c (dir_inspect, dir_path, dir_tell): check for frozen and closed
+ is not needed. [ruby-dev:32640]
+
+Wed Dec 19 22:59:52 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_sublen): adjust position if position is not at the
+ head of a character.
+
+ * string.c (rb_str_chomp_bang): check if match start at the head
+ of a character.
+
+ * string.c (rb_str_chomp_bang): wrong adjust condition.
+
+ * string.c (rb_str_rindex): comparison length should be based on
+ bytes, not characters.
+
+ * string.c (rb_str_rindex_m): too much adjustment.
+
+ * re.c (reg_match_pos): pos adjustment should be based on
+ characters.
+
+ * test/ruby/test_m17n.rb (TestM17N::test_str_insert): test updated
+ to check negative offset behavior.
+
+ * string.c (rb_str_each_line): should consider rslen.
+
+ * string.c (rb_str_buf_append): should propagate encoding.
+
+ * string.c (rb_str_each_line): ditto.
+
+ * test/ruby/test_m17n.rb (TestM17N::test_str_each_line): should
+ check encoding as well.
+
+ * test/ruby/test_m17n.rb (TestM17N::test_str_each_line): empty
+ array can not propagate encoding; should not check.
+
+Wed Dec 19 21:42:18 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * re.c (rb_reg_regsub): should set checked encoding.
+
+ * string.c (rb_str_sub_bang): applied r14212 too.
+
+Wed Dec 19 20:40:01 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * bignum.c (bigmul1): C99ism.
+
+ * bignum.c (bigdivrem1): need dummy return value.
+
+Wed Dec 19 19:18:06 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf-utf8/nkf.c: Updated.
+
+ * ext/nkf/nkf.c (rb_nkf_enc_get): added.
+ (find encoding or replicate default encoding)
+
+ * ext/nkf/nkf.c (NKF::<ENCODING>): redefine encoding constant.
+
+ * ext/nkf/lib/kconv.rb (Kconv::<ENCODING>): redefined as Encoding.
+
+ * ext/nkf/lib/kconv.rb: refactoring.
+
+Wed Dec 19 19:11:08 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_big_mul0): blocking check for bigger numbers.
+ a patch from Yusuke ENDOH <mame AT tsg.ne.jp> in [ruby-dev:32632].
+
+ * bignum.c (bigdivrem): ditto.
+
+Wed Dec 19 17:34:50 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): remove "retry" in block.
+ ("iter{retry}" cause syntax error)
+ Currently, "begin; ...; rescue; iter{retry}; end" cause
+ syntax error too.
+
+ * bootstraptest/test_jump.rb: ditto.
+
+ * lib/drb/invokemethod.rb: ditto.
+
+ * sample/drb/darrayc.rb: ditto.
+
+ * sample/test.rb: ditto.
+
+ * test/drb/drbtest.rb: ditto.
+
+ * test/ruby/test_iterator.rb: ditto.
+
+ * sample/test.rb: add a 'test' directory on the SYSTEM test.
+
+Wed Dec 19 17:12:59 2007 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_knownbug.rb, test_block.rb:
+ move fixed bug.
+
+ * bootstraptest/test_m17n.rb: added.
+
+Wed Dec 19 16:59:55 2007 Koichi Sasada <ko1@atdot.net>
+
+ * eval.c (errinfo_place): skip if error is Fixnum. [ruby-dev:32608]
+
+ * bootstraptest/test_exception.rb, test_known_bug.rb: move fixed bug.
+
+Wed Dec 19 16:31:58 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (reg_named_capture_assign_iter): remove C99 dependency.
+
+ * parse.y (reg_named_capture_assign_iter): get rid of creating
+ unnecessary ID.
+
+ * parse.y (rb_enc_symname2_p): check for non-nul-terminated string.
+
+Wed Dec 19 15:37:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * insnhelper.ci (vm_yield_with_cfunc): call cfunc with
+ (argv[0], data, argc, argv) to pass all arguments.
+
+ * enumerator.c (enumerator_each_i): adapted to new calling
+ convention.
+
+Wed Dec 19 15:13:20 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_justify): should propagate encoding from pad
+ string too.
+
+Wed Dec 19 13:57:43 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (TIMEZONE_VOID): check whether timezone requires zero
+ arguments. [ruby-dev:32631]
+
+Wed Dec 19 13:22:14 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/nkf.c (NKF::_ENCODING): removed.
+
+ * ext/nkf/nkf.c (rb_nkf_kconv): renamed to rb_nkf_convert.
+
+ * ext/nkf/nkf.c (rb_nkf_convert): set encoding.
+
+ * ext/nkf/nkf.c (rb_nkf_guess1): removed.
+
+ * ext/nkf/nkf.c (rb_nkf_guess2): renamed to rb_nkf_guess.
+
+ * ext/nkf/nkf.c (rb_nkf_guess):
+ guess method now returns encoding object.
+
+ * ext/nkf/nkf-utf8/nkf.c: Update to nkf 2.0.8 2007-12-19.
+
+Wed Dec 19 10:52:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (rb_cstr_to_inum): an underscore succeeding after octal
+ prefix is allowed. [ruby-core:14139]
+
+Wed Dec 19 00:09:19 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * bignum.c (rb_cstr_to_inum): wrong radix check. a patch from
+ Yusuke ENDOH <mame AT tsg.ne.jp> in [ruby-dev:32628].
+
+ * bignum.c (big2str_find_n1): ditto.
+
+Tue Dec 18 23:53:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_compile_each): fix for segfault. [ruby-dev:31372]
+
+Tue Dec 18 23:44:32 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * test/net/http/utils.rb: split TestNetHTTPUtils module from
+ test/net/http/test_http.rb. and start HTTP server in each test case.
+
+Tue Dec 18 23:27:51 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/server.rb (WEBrick::GenericServer#accept_client):
+ should rescue Errno::EINVAL from TCPServer#accept. this exception
+ might occur if the server socket is not in ready to listen.
+
+ * lib/webrick/server.rb (WEBrick::GenericServer#accept_client):
+ don't call TCPServer#close if the :ShutdownSocketWithoutClose is set.
+
+ * lib/webrick/config.rb (WEBrick::Config::General): add new parameter
+ :ShutdownSocketWithoutClose.
+
+Tue Dec 18 22:51:47 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#shutdown):
+ new method which calls TCPSocket#shutdown of the underlying socket.
+
+Tue Dec 18 22:11:50 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/rss/parser.rb, lib/rss/atom.rb, lib/rss/rss.rb,
+ test/rss/rss-assertions.rb, test/rss/test_atom.rb: use
+ pack/unpack("m") instead of base64 library.
+
+ * lib/webrick/httpproxy.rb: use delete("\n") instead of chomp/chop
+ because the result of pack("m") might be multi-line.
+
+Tue Dec 18 22:12:35 2007 Koichi Sasada <ko1@atdot.net>
+
+ * insnhelper.ci, vm.c: rewrite sp manipulation around method/block
+ invocation. [ruby-dev:32547]
+
+Tue Dec 18 22:11:23 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/dl/win32/lib/win32/sspi.rb: use pack/unpack("m") instead of
+ base64 library which was already removed.
+
+Tue Dec 18 21:09:23 2007 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (invoke_block): merge 2 stack overflow checks.
+
+Tue Dec 18 20:58:35 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c, insnhelper.ci, insns.def, object.c, vm.c, vm.h:
+ optimize !@, != method invocation.
+
+ * id.c, id.h: ditto.
+
+ * bootstraptest/test_syntax.rb: add tests for above.
+
+Tue Dec 18 18:10:05 2007 Koichi Sasada <ko1@atdot.net>
+
+ * bootstraptest/test_knownbug.rb: add issues.
+
+Tue Dec 18 20:22:44 2007 Tanaka Akira <akr@fsij.org>
+
+ * parse.y (arg tMATCH arg): call reg_named_capture_assign_gen if regexp
+ literal is used.
+ (reg_named_capture_assign_gen): assign the result of named capture
+ into local variables.
+ [ruby-dev:32588]
+
+ * re.c: document the assignment by named captures.
+
+Tue Dec 18 18:09:15 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_splice): propagate encoding.
+
+ * string.c (rb_str_subpat_set): ditto.
+
+Tue Dec 18 17:27:12 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_obj_freeze): preserve frozen state of immediate
+ values in internal hash table, a la generic_ivar.
+
+ * object.c (rb_obj_frozen_p): check immediate values too.
+
+ * variable.c (generic_ivar_set): add frozen check fro immediate
+ values.
+
+Tue Dec 18 17:04:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (rb_str_transcode_bang, rb_str_transcode): set new
+ encoding even if no conversion is done because of 7bit only.
+ [ruby-dev:32591]
+
+Tue Dec 18 15:43:59 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (encs, ext/ripper/ripper.c): other options must come
+ before MAKEFLAGS in GNU make.
+
+Tue Dec 18 15:19:55 2007 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc/parsers/parse_rb.rb: Don't call private fail anymore.
+
+Tue Dec 18 15:17:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (encs, ext/ripper/ripper.c): pass MAKEFLAGS.
+
+Tue Dec 18 14:45:25 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (op_tbl): remove duplication to avoid symbol aliases.
+
+Tue Dec 18 14:39:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_nth): need not to raise out-of-range exception.
+
+ * test/ruby/test_m17n.rb (TestM17N::test_str_aref_len): removed
+ debug print.
+
+Tue Dec 18 14:05:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * enc/depend: get rid of target expanded as empty for nmake.
+
+Tue Dec 18 07:56:57 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * proc.c (rb_obj_public_method): Object#public_method to retrieve
+ public method object.
+
+ * proc.c (rb_mod_public_instance_method): Module#public_instance_method
+ to retrieve public instance method from class / module.
+
+ * proc.c (mnew): visibility check added.
+
+ * eval_error.ci (rb_print_undef): add rb_ prefix.
+
+ * eval_error.ci (rb_print_undef): add visibility in the error
+ message.
+
+Tue Dec 18 05:54:26 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/Env.rb, lib/base64.rb, lib/importenv.rb, lib/eregex.rb: removed.
+
+ * lib/ping.rb, lib/readbytes.rb: removed
+
+Tue Dec 18 02:30:56 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (BUILTIN_ENCS): removed.
+
+ * common.mk (enc.mk): pass BUILTIN_ENCS from command line.
+
+ * enc/depend: ditto.
+
+ * enc/make_encmake.rb: ditto.
+
+Tue Dec 18 01:46:48 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * sprintf.c (rb_str_format): need to clear output buffer to avoid
+ broken encoding compatibility check.
+
+Tue Dec 18 01:40:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/mkmf.rb (depend_rules): inserts ruby to only headers.
+
+Tue Dec 18 01:21:19 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_encode_length): chomp eol style modifiers.
+
+ * parse.y (parser_magic_comment): ditto.
+
+ * parse.y (set_file_encoding): ditto.
+
+Tue Dec 18 01:15:44 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (encs): added dependencies.
+
+ * enc/Makefile.in, enc/depend, enc/make_encmake.rb: moved serb code.
+
+ * lib/mkmf.rb (depend_rules): now takes content string, not file name.
+
+ * win32/enc-setup.mak: overrides default target.
+
+Tue Dec 18 00:26:12 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_initialize): raise error if non-Unicode fixed
+ encoding option is specified for regexp literals with \u{}
+ escapes.
+
+ * string.c (rb_str_squeeze_bang): should squeeze multibyte
+ characters as well.
+
+Mon Dec 17 21:41:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * win32/enc-setup.mak: extracts BUILTIN_ENCOBJS.
+
+ * tool/compile_prelude.rb: needs srcdir.
+
+Mon Dec 17 21:24:04 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * common.mk (miniprelude.c): add -I$(srcdir).
+
+Mon Dec 17 20:53:27 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_set_ssl_version):
+ new method OpenSSL::SSL::SSLContext#ssl_version to wrap
+ SSL_CTX_set_ssl_version.
+
+ * ext/openssl/ossl_ssl.c (ossl_ssl_get_verify_result):
+ new method OpenSSL::SSL::SSLSocket#verify_result to wrap
+ SSL_get_verify_result.
+
+ * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLContext.build):
+ new method to build OpenSSL::SSL::SSLContext with Hash parameters.
+ this method provides safety default parameters than SSLContext.new.
+
+ * ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL.verify_certificate_identity):
+ new module function: pull out identity verification process
+ from OpenSSL::SSL::SSLSocket#post_connection_check.
+
+Mon Dec 17 18:42:23 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (scan_once): need no encoding compatibility check.
+ it's done inside of re_reg_search().
+
+ * string.c (rb_str_split_m): ditto.
+
+ * re.c (rb_reg_regsub): ditto.
+
+Mon Dec 17 17:50:30 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_index): check if substring is broken.
+
+ * string.c (rb_str_rindex): ditto.
+
+ * string.c (rb_str_succ): should carry over.
+
+Mon Dec 17 17:47:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (encs): new target to compile external encodings.
+
+ * enc/Makefile.in: became a serb template.
+
+ * enc/make_encmake.rb: creates enc.mk from enc/Makefile.in using serb.
+
+ * lib/mkmf.rb (relative_from): moved from ext/extmk.rb.
+
+ * lib/mkmf.rb ($extmk): true if under to top source directory, not
+ only ext.
+
+ * lib/mkmf.rb (depend_rules): extracted from create_makefile.
+
+ * tool/serb.rb (serb): splitted from tool/compile_prelude.rb.
+
+Mon Dec 17 17:32:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (MAKEFILES): removed enc/Makefile.
+
+ * configure.in (EXTERNAL_ENCOBJS, ENCSOS): removed.
+
+ * enc/Makefile.in (BUILTIN_ENCS): includes .c suffix.
+
+ * enc/depend: splitted from Makefile.in.
+
+ * {bcc32,win32,wince}/setup.mak (-encs-): extracts BUILTIN_ENCOBJS.
+
+Mon Dec 17 17:07:53 2007 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_enc_str_asciionly_p): use rb_enc_str_coderange.
+
+Mon Dec 17 16:39:25 2007 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_enc_str_coderange): set ENC_CODERANGE_BROKEN using
+ rb_enc_precise_mbclen.
+ (rb_str_valid_encoding_p): just check coderange is
+ ENC_CODERANGE_BROKEN or not.
+
+Mon Dec 17 16:04:16 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/openssl/buffering.rb (Buffering#gets): added second
+ optional argument to specify maximum length limit.
+
+Mon Dec 17 16:02:30 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * lib/webrick/httprequest.rb, lib/webrick/cgi.rb: Request-Line or
+ header fields should be read with maximum length. [ruby-talk:231745]
+
+Mon Dec 17 14:03:39 2007 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/encoding.h (ENC_CODERANGE_VALID): rename from
+ ENC_CODERANGE_8BIT.
+
+ * string.c (rb_enc_str_coderange): follow the renaming.
+
+Mon Dec 17 13:56:53 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (tr_find): wrong condition fixed.
+
+ * sprintf.c (rb_str_format): check encoding based on result, not
+ the format string.
+
+ * string.c (rb_str_upto): add encoding check.
+
+Mon Dec 17 12:21:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in (RUNRUBY): added RUNRUBYOPT.
+
+Mon Dec 17 11:38:59 2007 Tanaka Akira <akr@fsij.org>
+
+ * thread_win32.ci (native_thread_create): initialize
+ th->machine_stack_maxsize as rb_gc_stack_maxsize.
+
+Sun Dec 16 17:07:35 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c (transcode_loop): removed special case (-1)
+ for undefined conversions.
+
+ * transcode_data_iso_8859.c: Changed from character constants
+ ('\xC2') to integer constants (0xC2) for shorter files and
+ better readability; eliminated duplicated tables; changed
+ from -1 offset to actual UNDEF entry (not yet distinguishing
+ UNDEF and ILLEGAL correctly).
+
+ * test/ruby/test_transcode.rb: added a test for UNDEF conversion.
+
+Sun Dec 16 14:51:59 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (MAKEFILES): should be enc/Makefile, not GNUmakefile.
+ [ruby-dev:32609]
+
+ * configure.in (BUILTIN_ENCS): removed escapes for OpenBSD.
+
+Sat Dec 15 23:58:46 2007 Tanaka Akira <akr@fsij.org>
+
+ * test/openssl/test_pair.rb (SSLPair#ssl_pair): join the thread, even
+ on an error.
+
+Sat Dec 15 23:50:31 2007 Tanaka Akira <akr@fsij.org>
+
+ * test/xmlrpc/webrick_testing.rb: join webrick server thread.
+
+Sat Dec 15 22:27:39 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (BUILTIN_ENCS): splitted command line instead of
+ semicolons for Solaris.
+
+Sat Dec 15 21:38:24 2007 Tanaka Akira <akr@fsij.org>
+
+ * lib/timeout.rb: join the background thread to make sure it is dead.
+
+Sat Dec 15 20:20:48 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (enc/Makefile): add external encoding objects list.
+
+ * common.mk (BUILTIN_ENCOBJS): renamed from ENCOBJS.
+
+ * configure.in (BUILTIN_ENCS): [] needs to be enclosed because of m4.
+
+ * Makefile.in (BUILTIN_ENCOBJS): substituted by autoconf.
+
+ * enc/Makefile.in: new file to compile external encoding sources.
+
+ * encoding.c (rb_enc_find_index): auto-load external encoding objects
+ as "ext/ENCODING_NAME". [ruby-dev:32606]
+
+Sat Dec 15 13:04:30 2007 Tanaka Akira <akr@fsij.org>
+
+ * vm_core.h (rb_thread_t): new member machine_stack_maxsize and
+ machine_register_stack_maxsize.
+
+ * gc.c (rb_gc_stack_maxsize): new global variable for the thread size
+ of the main thread.
+ (STACK_LEVEL_MAX): use machine_stack_maxsize of current thread.
+ (ruby_stack_check): check IA64 register stack.
+ (ruby_set_stack_size): set rb_gc_stack_maxsize.
+ (Init_stack): set rb_gc_stack_maxsize.
+
+ * thread_pthread.ci (native_thread_create): initialize
+ th->machine_stack_maxsize and th->machine_register_stack_maxsize.
+
+ * vm.c (Init_BareVM): initialize th->machine_stack_maxsize and
+ th->machine_register_stack_maxsize.
+
+ * thread_win32.ci (native_thread_create): initialize
+ th->machine_stack_maxsize. not tested. just a guess at all.
+
+ [ruby-dev:32604]
+
+Sat Dec 15 12:58:00 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_register, rb_enc_replicate, rb_enc_alias): check
+ if already registered.
+
+Sat Dec 15 01:57:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/rdoc/options.rb (Options::parse): do not access $KCODE any
+ longer. [ruby-core:14079]
+
+ * lib/irb/init.rb (IRB::IRB.parse_opts): ditto.
+
+ * lib/cgi.rb (CGI::CGI): ditto.
+
+Fri Dec 14 18:18:31 2007 Tanaka Akira <akr@fsij.org>
+
+ * thread_pthread.ci (native_thread_create): twice the stack size.
+ 512KB is not enough to complete test-all on Debian GNU/Linux on
+ IA64.
+
+Fri Dec 14 16:10:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_f_p): RDoc update. a patch from murphy <murphy AT rubychan.de>.
+ [ruby-core:14010]
+
+Fri Dec 14 16:06:18 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_cmp): encoding aware comparison.
+
+ * string.c (rb_str_casecmp): ditto.
+
+Fri Dec 14 15:25:30 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
+
+ * transcode.c (encoding_equal): new function.
+
+ * transcode.c (str_transcode, transcode_dispatch): added two-step
+ conversion logic via UTF-8.
+
+ * transcode.c: some minor formatting fixes
+
+ * transcode_data.h, transcode_data_iso_8859.c: Shortened
+ extremely frequently used macros to shorten file length.
+
+ * test/ruby/test_transcode.rb: Fixed name of test class;
+ added setup method to ensure all necessary encodings exist;
+ split tests into more test methods; added tests; fixed ordering
+ of arguments in assert_equal to have expected result first.
+
+Fri Dec 14 13:47:54 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * common.mk (ruby.imp): fix for circular dependency. a patch from
+ Yutaka Kanemoto <kinpoco AT gmail.com> in [ruby-dev:32590].
+
+ * regint.h, st.c, ext/json/ext/generator/generator.c: suppress
+ warnings on AIX.
+
+Fri Dec 14 12:36:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_CHECK_VARTYPE): check if a variable is defined
+ and its type.
+
+ * configure.in (timezone, altzone): check for recent cygwin.
+
+ * missing/strftime.c (strftime): fix for timezone. [ruby-dev:32536]
+
+ * lib/mkmf.rb (try_var): should fail for functions.
+
+ * ext/readline/extconf.rb: should use have_func for functions instead
+ of have_var.
+
+Fri Dec 14 10:25:56 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/e2mmap.rb (Exception2MessageMapper::E2MM.Raise): $! no
+ longer modifiable in 1.9.
+
+Fri Dec 14 08:17:24 2007 Tanaka Akira <akr@fsij.org>
+
+ * eval.c (rb_protect): restore root_jmpbuf even if proc exits by
+ break such as dbm.delete_if { break }.
+
+Fri Dec 14 02:55:41 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (str_nth): direct jump if string is 7bit only. great
+ performance boost for worst case.
+
+ * string.c (str_strlen): direct size if string is 7bit only.
+
+Fri Dec 14 02:29:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * encoding.c (rb_enc_compatible): 1st argument (typically the
+ receiver) would have higher priority in encoding detection.
+
+Fri Dec 14 02:05:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_synchronized): should check if initialized.
+ [ruby-dev:32585]
+
+Fri Dec 14 00:54:40 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_initialize): embedded string may override encoding
+ of the regular expression.
+
+ * re.c (rb_reg_initialize): fix encoding of regular expression if
+ embedded string has its own encoding specified.
+
+Thu Dec 13 22:16:46 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * encoding.c (rb_enc_compatible): encoding should never fall back
+ to ASCII-8BIT unless both encodings are ASCII-8BIT.
+
+Thu Dec 13 20:31:28 2007 Tanaka Akira <akr@fsij.org>
+
+ * string.c (rb_str_shared_replace): make str noembed after free.
+
+Thu Dec 13 20:09:09 2007 Tanaka Akira <akr@fsij.org>
+
+ * eval.c (rb_protect): restore root_jmpbuf to avoid SEGV by
+ 'IO.pipe; [].each.next' with gcc version 3.3.5 (Debian 1:3.3.5-13)
+ on IA64.
+
+Thu Dec 13 17:51:54 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * string.c (rb_str_split_m): need not to check encoding if regexp
+ is empty.
+
+ * string.c (rb_str_justify): associate encoding of original to the
+ result.
+
+ * string.c (rb_str_chomp_bang): need to check encoding of record
+ separator.
+
+ * string.c (str_gsub): should copy encoding to the result.
+
+ * sprintf.c (rb_str_format): ditto.
+
+ * string.c (rb_str_succ): should not enter infinite loop for
+ non-ASCII, non-alphanumeric character at the bottom.
+
+Thu Dec 13 17:03:29 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * encoding.c (rb_enc_compatible): should swap encoding indexes too.
+
+Thu Dec 13 16:41:37 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * encoding.c (rb_enc_compatible): should not judge compatibility
+ based on rb_enc_asciicompat().
+
+Thu Dec 13 13:09:03 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * include/ruby/io.h (MakeOpenFile): fptr->enc should be
+ initialized to zero. [ruby-dev:32569]
+
+Thu Dec 13 08:56:01 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_getc): use default external encoding if fptr->enc is
+ not set. [ruby-dev:32565]
+
+ * lib/rubygems/package.rb (Gem::TarReader::Entry::rewind): typo fixed.
+ [ruby-dev:32565]
+
+Thu Dec 13 08:24:16 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (read_all): should associate default external encoding.
+
+ * io.c (io_read): should NOT associate default external encoding.
+
+Wed Dec 12 23:22:58 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c, regerror.c, string.c, parse.y, ruby.c, file.c:
+ use capital letter for \xHH notation. [ruby-dev:32511]
+
+Wed Dec 12 22:21:34 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_mode_enc): allow specifying external encoding in
+ open mode, e.g. open(path, "r:utf-8").
+
+Wed Dec 12 21:26:03 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval_method.ci (rb_alias): no need to skip aliasing when new
+ equals to old. [ruby-core:13990]
+
+Wed Dec 12 16:34:53 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * io.c (rb_io_check_readable): set default external encoding to
+ STDIN.
+
+ * io.c (io_enc_str): associate encoding to output string.
+
+Wed Dec 12 12:44:39 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (expr): 'not' and '!' should act as conditional
+ expression. [ruby-dev:32548]
+
+Wed Dec 12 12:11:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * re.c (rb_reg_regsub): should copy encoding.
+
+ * string.c (rb_str_sub_bang, str_gsub): should check and copy encoding
+ to be replaced.
+
+Tue Dec 11 23:04:17 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * pack.c (pack_pack): RDoc update. a patch from Gary Wright
+ <radar2002 AT gmail.com>. [ruby-core:13998]
+
+ * pack.c (pack_unpack): ditto.
+
+Tue Dec 11 16:37:47 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_ascget): renamed from rb_enc_get_ascii.
+
+ * include/ruby/encoding.h: follow the renaming.
+
+ * re.c: ditto.
+
+Tue Dec 11 16:19:26 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in, */Makefile.sub (CP, MV): added.
+
+ * common.mk (.y.c): not discard the old target until successfully
+ created.
+
+Tue Dec 11 15:20:39 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (Init_Object): singleton_method_{added,removed,undefined}
+ hooks should be defined for BasicObject. [ruby-dev:32531]
+
+ * eval.c (Init_eval): method_missing should be defined for all
+ objects; moved to BasicObject.
+
+Tue Dec 11 14:27:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (transcode_loop): get rid of SEGV at sequence can not be
+ converted.
+
+ * transcode.c (rb_str_transcode_bang): copy encoding. [ruby-dev:32532]
+
+ * test/ruby/test_transcode.rb: added tests from Martin Duerst <duerst
+ AT it.aoyama.ac.jp>. [ruby-dev:32532]
+
+Tue Dec 11 12:05:51 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_get_ascii): add an argument to provide the
+ length of the returned character.
+
+ * include/ruby/encoding.h (rb_enc_get_ascii): add the argument.
+
+ * re.c (rb_reg_expr_str): modify rb_enc_get_ascii call.
+ (rb_reg_quote): ditto.
+ (rb_reg_regsub): ditto.
+
+Tue Dec 11 09:40:21 2007 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/oniguruma.h (ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE):
+ parenthesize an argument.
+
+Tue Dec 11 02:23:32 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_method_missing): RDoc update patch from Hugh Sasse
+ <hgs AT dmu.ac.uk>. [ruby-core:12932]
+
+Tue Dec 11 01:51:34 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTP::get): now supports gzip
+ content-encoding. a patch from Hugh Sasse <hgs AT dmu.ac.uk>.
+ [ruby-core:13451]
+
+Tue Dec 11 01:21:21 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (shadowing_lvar_gen): no duplicate error for "_".
+
+Mon Dec 10 22:08:47 2007 Akinori MUSHA <knu@iDaemons.org>
+
+ * array.c (rb_ary_slice_bang): If an invalid range is given, do
+ not raise an exception but return nil just like slice() does.
+
+Mon Dec 10 21:47:53 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * transcode.c (str_transcode): allow non-registered encodings.
+ [ruby-dev:32520]
+
+Mon Dec 10 21:00:30 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * array.c (rb_ary_slice_bang): should return nil if position out
+ of range. a patch from Akinori MUSHA <knu AT iDaemons.org>.
+ [ruby-dev:32518]
+
+Mon Dec 10 19:02:52 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_match): should calculate offset by converted
+ operand. [ruby-cvs:21416]
+
+Mon Dec 10 18:28:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * lib/uri/common.rb (URI::REGEXP::PATTERN): typo in REG_NAME
+ regular expression. a patch from Ueda Satoshi
+ <s-ueda AT livedoor.jp>. [ruby-dev:32514]
+
+Mon Dec 10 17:46:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_tmp_new): creates hidden temporary buffer.
+
+ * transcode.c (transcoding): added a pointer to function to flush.
+
+ * transcode.c (transcode_loop): do not use string internal.
+ [ruby-dev:32512]
+
+ * transcode.c (str_transcode): allow Encoding objects.
+
+ * transcode_data.h (BYTE_LOOKUP): use actual struct name.
+
+Mon Dec 10 16:52:17 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (rb_str_insert): should not add length in bytes to index in
+ chars.
+
+Mon Dec 10 14:33:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_f_public_send): rename invoke_method to public_send.
+ it now invokes public method only no matter how it's called.
+
+Mon Dec 10 14:00:43 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * transcode.c: new file to provide encoding conversion features.
+ code contributed by Martin Duerst.
+
+Mon Dec 10 13:50:33 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * re.c (rb_reg_search): return byte offset. [ruby-dev:32452]
+
+ * re.c (rb_reg_match, rb_reg_match2, rb_reg_match_m): convert byte
+ offset to char index.
+
+ * string.c (rb_str_index): return byte offset. [ruby-dev:32472]
+
+ * string.c (rb_str_split_m): calculate in byte offset.
+
+Mon Dec 10 09:56:29 2007 Koichi Sasada <ko1@atdot.net>
+
+ * benchmark/bm_vm1_neq.rb, bm_vm1_not.rb: added.
+
+Mon Dec 10 07:48:14 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (parser_yylex): wrong token was generated. [ruby-dev:32498]
+
+ * object.c (rb_obj_not_match): wrong test.
+
+Mon Dec 10 06:44:47 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_expr_str): use \xHH instead of \OOO.
+
+ * regerror.c (to_ascii): ditto.
+ (onig_snprintf_with_pattern): ditto.
+ (onig_snprintf_with_pattern): ditto.
+
+ * string.c (rb_str_inspect): ditto.
+ (rb_str_dump): ditto.
+
+ * parse.y (parser_yylex): ditto.
+
+ * ruby.c (proc_options): ditto.
+
+ * file.c (rb_f_test): ditto.
+
+ [ruby-dev:32495]
+
+Mon Dec 10 06:41:00 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_names): new method Regexp#names.
+ (rb_reg_named_captures): new method Regexp#named_captures
+ (match_regexp): new method MatchData#regexp.
+ (match_names): new method MatchData#names.
+
+ * lib/pp.rb (MatchData#pretty_print): show names of named captures.
+
+ [ruby-dev:32493]
+
+Mon Dec 10 01:35:06 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (expr): redefinable not (!) operator.
+
+ * parse.y (arg): ditto.
+
+ * object.c (rb_obj_not): new method "!".
+
+ * object.c (rb_obj_not_equal): new method "!=".
+
+ * object.c (rb_obj_not_match): new method "!~".
+
+Sun Dec 9 22:31:36 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_s_last_match): accept named capture's name.
+
+Sun Dec 9 15:57:53 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (match_backref_number): new function for converting a backref
+ name/number to an integer.
+ (match_offset): use match_backref_number.
+ (match_begin): ditto.
+ (match_end): ditto.
+ (name_to_backref_number): raise IndexError instead of RuntimeError.
+ (match_inspect): show capture index.
+
+Sun Dec 9 14:59:15 2007 Koichi Sasada <ko1@atdot.net>
+
+ * eval_intern.h (CHECK_STACK_OVERFLOW): reserve frame size.
+ [ruby-dev:32485]
+
+Sun Dec 9 14:38:25 2007 Koichi Sasada <ko1@atdot.net>
+
+ * vm.c (rb_thread_mark): use rb_gc_mark_maybe() for
+ VM stack specified by mark_stack_len. [ruby-dev:32462]
+
+ * insnhelper.ci: clear vm stack extended by opt value.
+
+Sun Dec 9 14:08:47 2007 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (FilePathStringValue): defined. similar to
+ FilePathValue but no taint check.
+
+ * file.c (rb_get_path_no_checksafe): implementation of
+ FilePathStringValue.
+ (rb_file_s_basename): use FilePathStringValue.
+ (rb_file_s_dirname): ditto.
+ (rb_file_s_extname): ditto.
+ (rb_file_s_split): ditto.
+ (rb_file_join): ditto.
+
+ * dir.c (file_s_fnmatch): ditto.
+
+Sun Dec 9 12:49:34 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (append_utf8): check unicode range.
+
+Sun Dec 9 12:39:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * lib/cgi.rb (read_multipart): exclude blanks from header values.
+ [ruby-list:44327]
+
+Sun Dec 9 12:18:19 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_get_path): use the original object if to_path method is
+ not defined. [ruby-dev:32473]
+
+ * io.c (rb_f_open): call to_open on non-string objects, instead of
+ to_str. [ruby-dev:32473]
+
+Sun Dec 9 12:12:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (tr_find): returns true if no characters to be removed is
+ specified.
+
+Sun Dec 9 12:03:16 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_magic_comment): delimits with a semicolon.
+
+Sun Dec 9 11:29:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * string.c (tr_trans): get rid of segfaults when has multibytes but
+ source sets have no multibytes.
+
+Sun Dec 9 04:01:28 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_mbclen): return 1 if underlying implementation
+ returns a length longer than e-p.
+ (rb_enc_precise_mbclen): return needmore if underlying
+ implementation returns a length longer than e-p.
+
+Sat Dec 8 17:59:40 2007 Tanaka Akira <akr@fsij.org>
+
+ * signal.c (posix_signal): return value.
+
+Sat Dec 8 17:22:16 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * test/openssl/test_pkcs7.rb: Remove redundant module namespace.
+
+Sat Dec 8 17:07:10 2007 Tanaka Akira <akr@fsij.org>
+
+ * ruby.c (proc_options): make rb_raise format as a string literal to
+ avoid warning.
+
+Sat Dec 8 16:18:16 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (rb_reg_check_preprocess): new function for validating regexp
+ fragment.
+
+ * parse.y (regexp): invoke reg_fragment_check.
+ (reg_fragment_check): defined.
+ (reg_fragment_check_gen): defined.
+
+Sat Dec 8 11:06:29 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_mbclen): make it never fail.
+ (rb_enc_nth): don't check the return value of rb_enc_mbclen.
+ (rb_enc_strlen): ditto.
+ (rb_enc_precise_mbclen): return needmore(1) if e <= p.
+ (rb_enc_get_ascii): new function for extracting ASCII character.
+
+ * include/ruby/encoding.h (rb_enc_get_ascii): declared.
+
+ * include/ruby/regex.h (ismbchar): removed.
+
+ * re.c (rb_reg_expr_str): use rb_enc_get_ascii.
+ (unescape_escaped_nonascii): use rb_enc_precise_mbclen to determine
+ the termination of escaped non-ASCII character.
+ (unescape_nonascii): use rb_enc_precise_mbclen.
+ (rb_reg_quote): use rb_enc_get_ascii.
+ (rb_reg_regsub): use rb_enc_get_ascii.
+
+ * string.c (rb_str_reverse) don't check the return value of
+ rb_enc_mbclen.
+ (rb_str_split_m): don't call rb_enc_mbclen with e <= p.
+
+ * parse.y (is_identchar): use ISASCII.
+ (parser_ismbchar): removed.
+ (parser_precise_mbclen): new macro.
+ (parser_isascii): new macro.
+ (parser_tokadd_mbchar): use parser_precise_mbclen to check invalid
+ character precisely.
+ (parser_tokadd_string): use parser_isascii.
+ (parser_yylex): ditto.
+ (is_special_global_name): don't call is_identchar with e <= p.
+ (rb_enc_symname_p): ditto.
+
+ [ruby-dev:32455]
+
+ * ext/tk/sample/tkextlib/vu/canvSticker2.rb: remove coding cookie
+ because the encoding is not UTF-8. [ruby-dev:32475]
+
+Fri Dec 7 20:21:35 2007 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/lib/net/ftptls.rb, ext/openssl/lib/net/telnets.rb:
+ half-finished libraries are discontinued.
+
+Fri Dec 7 15:44:40 2007 Tanaka Akira <akr@fsij.org>
+
+ * lib/pp.rb: use Hash for recursion check as inspect.
+
+Fri Dec 7 15:04:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * array.c (flatten): some performance improvements, based on a patch
+ from Yusuke ENDOH <mame AT tsg.ne.jp> in [ruby-core:13877].
+ [ruby-core:13851]
+
+ * thread.c (rb_exec_recursive): use Hash instead of Array for
+ performance improvement. [ruby-core:13898]
+
+ * thread.c (recursive_pop): use object ID.
+
+Thu Dec 6 19:52:50 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): typo fixed ("!" -> "|") in the ripper code.
+
+Thu Dec 6 19:48:41 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * parse.y (arg): tUPLUS no longer works as identity operation any
+ more. inspired by [ruby-talk:265532].
+
+Thu Dec 6 18:22:11 2007 Tanaka Akira <akr@fsij.org>
+
+ * encoding.c (rb_enc_precise_mbclen): new function for mbclen with
+ validation.
+
+ * include/ruby/encoding.h (rb_enc_precise_mbclen): declared.
+ (MBCLEN_CHARFOUND): new macro.
+ (MBCLEN_INVALID): new macro.
+ (MBCLEN_NEEDMORE): new macro.
+
+ * include/ruby/oniguruma.h (OnigEncodingTypeST): replace mbc_enc_len
+ by precise_mbc_enc_len.
+ (ONIGENC_PRECISE_MBC_ENC_LEN): new macro.
+ (ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND): new macro.
+ (ONIGENC_CONSTRUCT_MBCLEN_INVALID): new macro.
+ (ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE): new macro.
+ (ONIGENC_MBCLEN_CHARFOUND): new macro.
+ (ONIGENC_MBCLEN_INVALID): new macro.
+ (ONIGENC_MBCLEN_NEEDMORE): new macro.
+ (ONIGENC_MBC_ENC_LEN): use ONIGENC_PRECISE_MBC_ENC_LEN.
+
+ * enc/euc_jp.c: validation implemented.
+
+ * enc/sjis.c: ditto.
+
+ * enc/utf8.c: ditto.
+
+ * string.c (rb_str_inspect): use rb_enc_precise_mbclen for invalid
+ encoding.
+ (rb_str_valid_encoding_p): new method String#valid_encoding?.
+
+ * io.c (rb_io_getc): use rb_enc_precise_mbclen.
+
+ [ruby-dev:32438]
+
+Thu Dec 6 01:37:23 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * regparse.c (i_apply_case_fold): fix for negative character class. a
+ patch from Yusuke ENDOH <mame AT tsg.ne.jp> in [ruby-core:13884].
+
+Thu Dec 6 01:00:38 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/iconv/iconv.c (iconv_s_list): support NetBSD/Citrus iconv.
+
+Wed Dec 5 16:18:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * proc.c (rb_proc_s_new): call initialize. [ruby-core:13824]
+
+ * proc.c (rb_proc_location): return file name and line number where
+ the proc is defined.
+
+ * thread.c (thread_s_new): call initialize. [ruby-core:13835]
+
+ * thread.c (thread_initialize): split initialize method.
+
+Wed Dec 5 15:25:55 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (rb_intern3): fix to changing encoding to default, and
+ uncommented r13835, which is rare but not impossible.
+
+Wed Dec 5 15:15:21 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * range.c (step_i, range_step): support non-fixnum steps.
+ [ruby-talk:282100]
+
+Wed Dec 5 14:25:11 2007 Koichi Sasada <ko1@atdot.net>
+
+ * compile.c (iseq_compile_each): fix typo.
+
+Wed Dec 5 13:41:25 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (yycompile): get rid of tracing while parsing.
+ [ruby-dev:31351]
+
+ * thread.c (ruby_suppress_tracing): added a new parameter, which
+ directs to call func always.
+
+Tue Dec 4 19:56:42 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (iconv_convert): should not set encoding unless
+ the target encoding is supported. [ruby-dev:32451]
+
+Tue Dec 4 17:34:17 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * ext/nkf/lib/kconv.rb (tojis, tosjis, toeuc, toutf8):
+ set encoding. [ruby-dev:32447]
+
+Tue Dec 4 17:07:25 2007 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/json.rb, lib/json/*: moved to ext/json/lib.
+
+Tue Dec 4 16:34:46 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/iconv/iconv.c (iconv_create): achieve target encoding.
+
+ * ext/iconv/iconv.c (iconv_convert, iconv_finish, iconv_iconv,
+ iconv_conv): set result string encoding. [ruby-dev:32446]
+
+ * ext/iconv/iconv.c (iconv_initialize, iconv_s_open): set encoding to
+ Iconv instance.
+
+Tue Dec 4 14:34:35 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ruby.c (process_options): reverted c flag.
+
+Tue Dec 4 11:23:50 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (rb_cstr_to_inum): trailing spaces may exist at squeezing
+ preceding 0s. [ruby-core:13873]
+
+Mon Dec 3 11:51:53 2007 NAKAMURA Usaku <usa@ruby-lang.org>
+
+ * ext/Win32API/*: removed or moved to ext/dl/win32.
+
+ * ext/dl/win32/*: new. [ruby-dev:32387]
+
+Sun Dec 2 22:08:01 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_tokadd_mbchar): fix for ASCII chars. [ruby-dev:32432]
+
+ * parse.y (parser_parse_string, parser_here_document): prevent false
+ error messages.
+
+Sun Dec 2 20:43:22 2007 Tanaka Akira <akr@fsij.org>
+
+ * re.c (unescape_escaped_nonascii): fix mbclen argument.
+
+Sun Dec 2 15:47:57 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (parser_tokadd_mbchar): check insufficient multibyte char.
+ [ruby-dev:32429]
+
+Sun Dec 2 15:42:16 2007 Kouhei Sutou <kou@cozmixng.org>
+
+ * lib/rss/rss.rb, test/rss/test_version.rb: 0.2.1 -> 0.2.2.
+
+ * lib/rss/maker/itunes.rb: fixed new_itunes_category.
+ * lib/rss/maker/taxonomy.rb: new_taxo_topic -> new_topic because
+ of consistency.
+
+ * test/rss/test_maker_itunes.rb, test/rss/test_itunes.rb: removed
+ needless UTF-8 characters.
+
+Sun Dec 2 15:18:37 2007 Koichi Sasada <ko1@atdot.net>
+
+ * insnhelper.ci (vm_callee_setup_arg): fix error message.
+ [ruby-dev:32430]
+
+Sun Dec 2 09:12:48 2007 Tanaka Akira <akr@fsij.org>
+
+ * parse.y (regexp): fix /#{}\xa1\xa2/e to be EUC-JP.
+ (reg_fragment_setenc_gen): extracted from reg_compile_gen.
+
+Sun Dec 2 01:39:51 2007 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/intern.h (rb_uv_to_utf8): declared.
+
+ * re.c (rb_reg_preprocess): new function for dynamic regexp with
+ \u{} such as Regexp.new("\\u{6666}").
+ (rb_reg_prepare_re): preprocess regexp for recompiling.
+ (read_escaped_byte): new function.
+ (unescape_escaped_nonascii): new function.
+ (append_utf8): new function.
+ (unescape_unicode_list): new function.
+ (unescape_unicode_bmp): new function.
+ (unescape_nonascii): new function.
+ (rb_reg_initialize): preprocess regexp.
+
+ * pack.c (rb_uv_to_utf8): renamed from uv_to_utf8.
+
+ * parse.y (STR_NEW3): take func instead of has8 and hasmb.
+ (parser_str_new): use default coderange mechanism except for regexp.
+ (parser_tokadd_utf8): copy regexp source as-is.
+ (parser_read_escape): UTF-8 stuff removed.
+ (parser_tokadd_escape): has8bit and hasmb removed.
+ (parser_tokadd_string): fix 8-bit single byte character with \u.
+ (parser_parse_string): has8bit and hasmb removed.
+ (parser_here_document): has8bit and hasmb removed.
+ (parser_yylex): call parser_tokadd_utf8 instead of read_escape for
+ UTF-8 character.
+
+Wed Dec 2 01:00:07 2007 James Edward Gray II <jeg2@ruby-lang.org>
+
+ * 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.
+
+Sat Dec 1 23:04:42 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * encoding.c: rename primary_encoding -> default_external (encoding).