summaryrefslogtreecommitdiff
path: root/spec/ruby/core/math/erf_spec.rb
blob: b4e6248e43d8821f0b87ccc2bec9393f7971e80f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
require_relative '../../spec_helper'
require_relative 'fixtures/classes'

# erf method is the "error function" encountered in integrating the normal
# distribution (which is a normalized form of the Gaussian function).
describe "Math.erf" do
  it "returns a float" do
    Math.erf(1).should be_kind_of(Float)
  end

  it "returns the error function of the argument" do
    Math.erf(0).should be_close(0.0, TOLERANCE)
    Math.erf(1).should be_close(0.842700792949715, TOLERANCE)
    Math.erf(-1).should be_close(-0.842700792949715, TOLERANCE)
    Math.erf(0.5).should be_close(0.520499877813047, TOLERANCE)
    Math.erf(-0.5).should be_close(-0.520499877813047, TOLERANCE)
    Math.erf(10000).should be_close(1.0, TOLERANCE)
    Math.erf(-10000).should be_close(-1.0, TOLERANCE)
    Math.erf(0.00000000000001).should be_close(0.0, TOLERANCE)
    Math.erf(-0.00000000000001).should be_close(0.0, TOLERANCE)
  end

  it "raises a TypeError if the argument cannot be coerced with Float()" do
    -> { Math.erf("test") }.should raise_error(TypeError)
  end

  it "returns NaN given NaN" do
    Math.erf(nan_value).nan?.should be_true
  end

  it "raises a TypeError if the argument is nil" do
    -> { Math.erf(nil) }.should raise_error(TypeError)
  end

  it "accepts any argument that can be coerced with Float()" do
    Math.erf(MathSpecs::Float.new).should be_close(0.842700792949715, TOLERANCE)
  end
end

describe "Math#erf" do
  it "is accessible as a private instance method" do
    IncludesMath.new.send(:erf, 3.1415).should be_close(0.999991118444483, TOLERANCE)
  end
end
class='none' style='width: 100.0%;'/> -rw-r--r--COPYING.ja72
-rw-r--r--ChangeLog23896
-rw-r--r--GPL39
-rw-r--r--Makefile.in135
-rw-r--r--NEWS639
-rw-r--r--README152
-rw-r--r--README.EXT1399
-rw-r--r--README.EXT.ja2132
-rw-r--r--README.ja241
-rw-r--r--ToDo124
-rw-r--r--addr2line.c562
-rw-r--r--array.c2824
-rw-r--r--atomic.h56
-rw-r--r--bcc32/Makefile.sub617
-rw-r--r--bcc32/README.bcc32130
-rwxr-xr-xbcc32/configure.bat163
-rwxr-xr-xbcc32/mkexports.rb26
-rw-r--r--bcc32/setup.mak179
-rw-r--r--benchmark/bm_app_aobench.rb292
-rw-r--r--benchmark/bm_app_mandelbrot.rb2
-rw-r--r--benchmark/bm_app_raise.rb4
-rw-r--r--benchmark/bm_app_strconcat.rb4
-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_select2.rb6
-rw-r--r--benchmark/bm_io_select3.rb6
-rw-r--r--benchmark/bm_loop_whileloop.rb4
-rw-r--r--benchmark/bm_loop_whileloop2.rb4
-rw-r--r--benchmark/bm_so_binary_trees.rb9
-rw-r--r--benchmark/bm_so_concatenate.rb4
-rw-r--r--benchmark/bm_so_exception.rb2
-rw-r--r--benchmark/bm_so_lists.rb2
-rw-r--r--benchmark/bm_so_nsieve_bits.rb1
-rw-r--r--benchmark/bm_so_random.rb4
-rw-r--r--benchmark/bm_so_sieve.rb4
-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.rb4
-rw-r--r--benchmark/bm_vm1_const.rb2
-rw-r--r--benchmark/bm_vm1_ensure.rb4
-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.rb2
-rw-r--r--benchmark/bm_vm1_ivar_set.rb2
-rw-r--r--benchmark/bm_vm1_length.rb4
-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.rb2
-rw-r--r--benchmark/bm_vm1_not.rb2
-rw-r--r--benchmark/bm_vm1_rescue.rb4
-rw-r--r--benchmark/bm_vm1_simplereturn.rb4
-rw-r--r--benchmark/bm_vm1_swap.rb4
-rw-r--r--benchmark/bm_vm1_yield.rb10
-rw-r--r--benchmark/bm_vm2_array.rb4
-rw-r--r--benchmark/bm_vm2_bigarray.rb106
-rw-r--r--benchmark/bm_vm2_bighash.rb5
-rw-r--r--benchmark/bm_vm2_case.rb4
-rw-r--r--benchmark/bm_vm2_defined_method.rb4
-rw-r--r--benchmark/bm_vm2_dstr.rb6
-rw-r--r--benchmark/bm_vm2_eval.rb4
-rw-r--r--benchmark/bm_vm2_method.rb4
-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.rb4
-rw-r--r--benchmark/bm_vm2_poly_method.rb4
-rw-r--r--benchmark/bm_vm2_poly_method_ov.rb4
-rw-r--r--benchmark/bm_vm2_proc.rb4
-rw-r--r--benchmark/bm_vm2_raise1.rb18
-rw-r--r--benchmark/bm_vm2_raise2.rb18
-rw-r--r--benchmark/bm_vm2_regexp.rb4
-rw-r--r--benchmark/bm_vm2_send.rb4
-rw-r--r--benchmark/bm_vm2_super.rb2
-rw-r--r--benchmark/bm_vm2_unif1.rb2
-rw-r--r--benchmark/bm_vm2_zsuper.rb2
-rw-r--r--benchmark/bm_vm3_backtrace.rb22
-rw-r--r--benchmark/bm_vm3_clearmethodcache.rb4
-rw-r--r--benchmark/bm_vm_thread_create_join.rb4
-rw-r--r--benchmark/bm_vm_thread_mutex1.rb4
-rw-r--r--benchmark/bm_vm_thread_mutex2.rb4
-rw-r--r--benchmark/bm_vm_thread_mutex3.rb4
-rw-r--r--benchmark/bm_vm_thread_pass_flood.rb2
-rw-r--r--benchmark/bm_vm_thread_queue.rb18
-rw-r--r--benchmark/bmx_temp.rb9
-rw-r--r--benchmark/driver.rb133
-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/other-lang/fact.rb4
-rw-r--r--benchmark/other-lang/loop.rb4
-rw-r--r--bignum.c7229
-rwxr-xr-xbin/erb4
-rwxr-xr-xbin/irb11
-rwxr-xr-xbin/rake1
-rwxr-xr-xbin/rdoc4
-rwxr-xr-xbin/testrb9
-rwxr-xr-xbootstraptest/runner.rb112
-rw-r--r--bootstraptest/test_autoload.rb40
-rw-r--r--bootstraptest/test_block.rb32
-rw-r--r--bootstraptest/test_class.rb10
-rw-r--r--bootstraptest/test_eval.rb37
-rw-r--r--bootstraptest/test_exception.rb16
-rw-r--r--bootstraptest/test_flow.rb27
-rw-r--r--bootstraptest/test_io.rb10
-rw-r--r--bootstraptest/test_literal.rb33
-rw-r--r--bootstraptest/test_literal_suffix.rb54
-rw-r--r--bootstraptest/test_method.rb126
-rw-r--r--bootstraptest/test_proc.rb25
-rw-r--r--bootstraptest/test_syntax.rb4
-rw-r--r--bootstraptest/test_thread.rb42
-rw-r--r--class.c756
-rw-r--r--common.mk524
-rw-r--r--compar.c32
-rw-r--r--compile.c2104
-rw-r--r--complex.c779
-rw-r--r--configure.in2209
-rw-r--r--constant.h4
-rw-r--r--cont.c461
-rw-r--r--cygwin/GNUmakefile.in4
-rw-r--r--debug.c8
-rw-r--r--debug.h (renamed from vm_debug.h)10
-rw-r--r--defs/default_gems12
-rw-r--r--defs/gmake.mk29
-rw-r--r--defs/id.def105
-rw-r--r--defs/opt_operand.def49
-rw-r--r--dir.c545
-rw-r--r--dln.c86
-rw-r--r--dln.h19
-rw-r--r--dln_find.c48
-rw-r--r--dmydln.c2
-rw-r--r--dmyencoding.c2
-rw-r--r--dmyext.c5
-rw-r--r--dmyversion.c2
-rw-r--r--doc/.document4
-rw-r--r--doc/ChangeLog-1.8.0152
-rw-r--r--doc/ChangeLog-1.9.312157
-rw-r--r--doc/ChangeLog-2.0.024015
-rw-r--r--doc/ChangeLog-YARV178
-rw-r--r--doc/NEWS-1.8.725
-rw-r--r--doc/NEWS-1.9.133
-rw-r--r--doc/NEWS-1.9.250
-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.rd75
-rw-r--r--doc/etc.rd.ja76
-rw-r--r--doc/forwardable.rd83
-rw-r--r--doc/forwardable.rd.ja44
-rw-r--r--doc/globals.rdoc69
-rw-r--r--doc/irb/irb-tools.rd.ja110
-rw-r--r--doc/irb/irb.rd391
-rw-r--r--doc/irb/irb.rd.ja372
-rw-r--r--doc/maintainers.rdoc322
-rw-r--r--doc/marshal.rdoc313
-rw-r--r--doc/pty/README84
-rw-r--r--doc/pty/README.expect22
-rw-r--r--doc/pty/README.expect.ja28
-rw-r--r--doc/pty/README.ja86
-rw-r--r--doc/rake/CHANGES440
-rw-r--r--doc/rake/README196
-rw-r--r--doc/rake/command_line_usage.rdoc102
-rw-r--r--doc/rake/example/Rakefile138
-rw-r--r--doc/rake/example/Rakefile235
-rw-r--r--doc/rake/example/a.c6
-rw-r--r--doc/rake/example/b.c6
-rw-r--r--doc/rake/example/main.c11
-rw-r--r--doc/rake/glossary.rdoc51
-rw-r--r--doc/rake/jamis.rb591
-rw-r--r--doc/rake/proto_rake.rdoc127
-rw-r--r--doc/rake/rakefile.rdoc534
-rw-r--r--doc/rake/rational.rdoc151
-rw-r--r--doc/rake/release_notes/rake-0.8.7.rdoc55
-rw-r--r--doc/re.rdoc (renamed from doc/regexp.rdoc)231
-rw-r--r--doc/rubygems/ChangeLog5689
-rw-r--r--doc/rubygems/History.txt852
-rw-r--r--doc/rubygems/LICENSE.txt53
-rw-r--r--doc/rubygems/README41
-rw-r--r--doc/security.rdoc144
-rw-r--r--doc/shell.rd347
-rw-r--r--doc/shell.rd.ja150
-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.in10
-rw-r--r--enc/ascii.c7
-rw-r--r--enc/big5.c12
-rw-r--r--enc/cp949.c4
-rw-r--r--enc/depend96
-rw-r--r--enc/emacs_mule.c3
-rw-r--r--enc/encdb.c4
-rw-r--r--enc/encinit.c.erb26
-rw-r--r--enc/euc_jp.c292
-rw-r--r--enc/euc_kr.c4
-rw-r--r--enc/euc_tw.c4
-rw-r--r--enc/gb18030.c4
-rw-r--r--enc/gbk.c4
-rw-r--r--enc/iso_2022_jp.h7
-rw-r--r--enc/iso_8859_1.c4
-rw-r--r--enc/iso_8859_10.c4
-rw-r--r--enc/iso_8859_11.c4
-rw-r--r--enc/iso_8859_13.c4
-rw-r--r--enc/iso_8859_14.c4
-rw-r--r--enc/iso_8859_15.c4
-rw-r--r--enc/iso_8859_16.c4
-rw-r--r--enc/iso_8859_2.c4
-rw-r--r--enc/iso_8859_3.c4
-rw-r--r--enc/iso_8859_4.c4
-rw-r--r--enc/iso_8859_5.c4
-rw-r--r--enc/iso_8859_6.c4
-rw-r--r--enc/iso_8859_7.c4
-rw-r--r--enc/iso_8859_8.c4
-rw-r--r--enc/iso_8859_9.c4
-rw-r--r--enc/koi8_r.c4
-rw-r--r--enc/koi8_u.c4
-rwxr-xr-xenc/make_encmake.rb86
-rw-r--r--enc/mktable.c1162
-rw-r--r--enc/shift_jis.c279
-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@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.trans3
-rw-r--r--enc/trans/chinese.trans3
-rw-r--r--enc/trans/emoji.trans3
-rw-r--r--enc/trans/emoji_iso2022_kddi.trans3
-rw-r--r--enc/trans/emoji_sjis_docomo.trans3
-rw-r--r--enc/trans/emoji_sjis_kddi.trans3
-rw-r--r--enc/trans/emoji_sjis_softbank.trans3
-rw-r--r--enc/trans/escape.trans3
-rw-r--r--enc/trans/euckr-tbl.rb2
-rw-r--r--enc/trans/gb18030.trans3
-rw-r--r--enc/trans/gbk.trans3
-rw-r--r--enc/trans/iso-8859-16-tbl.rb98
-rw-r--r--enc/trans/iso2022.trans3
-rw-r--r--enc/trans/japanese.trans3
-rw-r--r--enc/trans/japanese_euc.trans15
-rw-r--r--enc/trans/japanese_sjis.trans3
-rw-r--r--enc/trans/korean.trans3
-rw-r--r--enc/trans/single_byte.trans4
-rw-r--r--enc/trans/utf8_mac-tbl.rb23655
-rw-r--r--enc/trans/utf8_mac.trans160
-rw-r--r--enc/trans/utf_16_32.trans3
-rw-r--r--enc/unicode.c1945
-rw-r--r--enc/unicode/casefold.h2238
-rw-r--r--enc/unicode/name2ctype.h15274
-rw-r--r--enc/unicode/name2ctype.h.blt15274
-rw-r--r--enc/unicode/name2ctype.kwd12679
-rw-r--r--enc/unicode/name2ctype.src12679
-rw-r--r--enc/us_ascii.c4
-rw-r--r--enc/utf_16_32.h5
-rw-r--r--enc/utf_16be.c13
-rw-r--r--enc/utf_16le.c13
-rw-r--r--enc/utf_32be.c12
-rw-r--r--enc/utf_32le.c12
-rw-r--r--enc/utf_8.c12
-rw-r--r--enc/windows_1251.c4
-rw-r--r--enc/windows_31j.c80
-rw-r--r--encoding.c496
-rw-r--r--enum.c1429
-rw-r--r--enumerator.c1077
-rw-r--r--error.c791
-rw-r--r--eval.c720
-rw-r--r--eval_error.c84
-rw-r--r--eval_intern.h112
-rw-r--r--eval_jump.c61
-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.c2
-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-/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-/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/depend6
-rw-r--r--ext/-test-/old_thread_select/extconf.rb3
-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/numhash.c57
-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.c8
-rw-r--r--ext/-test-/string/depend5
-rw-r--r--ext/-test-/string/enc_str_buf_cat.c14
-rw-r--r--ext/-test-/string/extconf.rb1
-rw-r--r--ext/-test-/string/normalize.c18
-rw-r--r--ext/-test-/string/qsort.c61
-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/depend6
-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.rb1
-rw-r--r--ext/.document15
-rw-r--r--ext/Setup3
-rw-r--r--ext/Setup.atheos3
-rw-r--r--ext/Setup.emx5
-rw-r--r--ext/Setup.nacl48
-rw-r--r--ext/Setup.nt4
-rw-r--r--ext/bigdecimal/README6
-rw-r--r--ext/bigdecimal/bigdecimal.c4246
-rw-r--r--ext/bigdecimal/bigdecimal.gemspec11
-rw-r--r--ext/bigdecimal/bigdecimal.h49
-rw-r--r--ext/bigdecimal/bigdecimal_en.html792
-rw-r--r--ext/bigdecimal/bigdecimal_ja.html799
-rw-r--r--ext/bigdecimal/depend2
-rw-r--r--ext/bigdecimal/lib/bigdecimal/jacobian.rb6
-rw-r--r--ext/bigdecimal/lib/bigdecimal/math.rb89
-rw-r--r--ext/bigdecimal/lib/bigdecimal/newton.rb5
-rw-r--r--ext/bigdecimal/lib/bigdecimal/util.rb46
-rw-r--r--ext/bigdecimal/sample/linear.rb1
-rw-r--r--ext/bigdecimal/sample/nlsolve.rb2
-rw-r--r--ext/coverage/coverage.c14
-rw-r--r--ext/coverage/depend11
-rw-r--r--ext/coverage/extconf.rb1
-rw-r--r--ext/curses/curses.c4115
-rw-r--r--ext/curses/depend1
-rw-r--r--ext/curses/extconf.rb36
-rw-r--r--ext/curses/hello.rb30
-rw-r--r--ext/curses/mouse.rb53
-rw-r--r--ext/curses/rain.rb76
-rw-r--r--ext/curses/view.rb91
-rw-r--r--ext/curses/view2.rb149
-rw-r--r--ext/date/date_core.c575
-rw-r--r--ext/date/date_parse.c829
-rw-r--r--ext/date/date_strftime.c1692
-rw-r--r--ext/date/date_strptime.c11
-rw-r--r--ext/date/date_tmx.h2
-rw-r--r--ext/date/depend7
-rw-r--r--ext/dbm/dbm.c198
-rw-r--r--ext/dbm/depend1
-rw-r--r--ext/dbm/extconf.rb382
-rw-r--r--ext/digest/bubblebabble/bubblebabble.c32
-rw-r--r--ext/digest/bubblebabble/depend4
-rw-r--r--ext/digest/depend3
-rw-r--r--ext/digest/digest.c69
-rw-r--r--ext/digest/lib/digest.rb10
-rw-r--r--ext/digest/lib/digest/hmac.rb2
-rw-r--r--ext/digest/md5/depend7
-rw-r--r--ext/digest/md5/extconf.rb4
-rw-r--r--ext/digest/md5/md5.c2
-rw-r--r--ext/digest/md5/md5init.c3
-rw-r--r--ext/digest/rmd160/depend7
-rw-r--r--ext/digest/rmd160/extconf.rb4
-rw-r--r--ext/digest/rmd160/rmd160.c10
-rw-r--r--ext/digest/rmd160/rmd160init.c3
-rw-r--r--ext/digest/sha1/depend9
-rw-r--r--ext/digest/sha1/extconf.rb4
-rw-r--r--ext/digest/sha1/sha1init.c3
-rw-r--r--ext/digest/sha2/depend9
-rw-r--r--ext/digest/sha2/extconf.rb4
-rw-r--r--ext/digest/sha2/lib/sha2.rb6
-rw-r--r--ext/digest/sha2/sha2.c23
-rw-r--r--ext/digest/sha2/sha2ossl.c2
-rw-r--r--ext/dl/callback/depend2
-rw-r--r--ext/dl/callback/mkcallback.rb28
-rw-r--r--ext/dl/cfunc.c25
-rw-r--r--ext/dl/cptr.c21
-rw-r--r--ext/dl/depend15
-rw-r--r--ext/dl/dl.c206
-rw-r--r--ext/dl/dl.h33
-rw-r--r--ext/dl/extconf.rb21
-rw-r--r--ext/dl/handle.c3
-rw-r--r--ext/dl/lib/dl.rb3
-rw-r--r--ext/dl/lib/dl/cparser.rb47
-rw-r--r--ext/dl/lib/dl/func.rb78
-rw-r--r--ext/dl/lib/dl/import.rb22
-rw-r--r--ext/dl/lib/dl/struct.rb154
-rw-r--r--ext/dl/lib/dl/types.rb6
-rw-r--r--ext/dl/lib/dl/value.rb2
-rw-r--r--ext/dl/win32/extconf.rb3
-rw-r--r--ext/dl/win32/lib/Win32API.rb (renamed from ext/win32/lib/Win32API.rb)3
-rw-r--r--ext/dl/win32/lib/win32/registry.rb (renamed from ext/win32/lib/win32/registry.rb)129
-rw-r--r--ext/dl/win32/lib/win32/resolv.rb (renamed from ext/win32/lib/win32/resolv.rb)5
-rw-r--r--ext/dl/win32/lib/win32/sspi.rb (renamed from ext/win32/lib/win32/sspi.rb)2
-rw-r--r--ext/etc/depend4
-rw-r--r--ext/etc/etc.c414
-rwxr-xr-xext/extmk.rb182
-rw-r--r--ext/fcntl/depend1
-rw-r--r--ext/fcntl/fcntl.c188
-rw-r--r--ext/fiddle/closure.c33
-rw-r--r--ext/fiddle/conversions.c2
-rw-r--r--ext/fiddle/depend4
-rw-r--r--ext/fiddle/extconf.rb36
-rw-r--r--ext/fiddle/fiddle.c369
-rw-r--r--ext/fiddle/fiddle.h40
-rw-r--r--ext/fiddle/function.c69
-rw-r--r--ext/fiddle/handle.c478
-rw-r--r--ext/fiddle/lib/fiddle.rb31
-rw-r--r--ext/fiddle/lib/fiddle/cparser.rb176
-rw-r--r--ext/fiddle/lib/fiddle/function.rb11
-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/depend1
-rw-r--r--ext/gdbm/gdbm.c55
-rw-r--r--ext/iconv/charset_alias.rb104
-rw-r--r--ext/iconv/depend2
-rw-r--r--ext/iconv/extconf.rb54
-rw-r--r--ext/iconv/iconv.c1256
-rw-r--r--ext/iconv/mkwrapper.rb53
-rw-r--r--ext/io/console/console.c48
-rw-r--r--ext/io/console/depend4
-rw-r--r--ext/io/console/extconf.rb12
-rw-r--r--ext/io/console/io-console.gemspec10
-rw-r--r--ext/io/console/lib/console/size.rb2
-rw-r--r--ext/io/nonblock/depend4
-rw-r--r--ext/io/nonblock/nonblock.c31
-rw-r--r--ext/io/wait/depend4
-rw-r--r--ext/io/wait/wait.c51
-rw-r--r--ext/json/fbuffer/fbuffer.h181
-rw-r--r--ext/json/generator/depend3
-rw-r--r--ext/json/generator/extconf.rb8
-rw-r--r--ext/json/generator/generator.c295
-rw-r--r--ext/json/generator/generator.h72
-rw-r--r--ext/json/lib/json.rb4
-rw-r--r--ext/json/lib/json/add/bigdecimal.rb28
-rw-r--r--ext/json/lib/json/add/core.rb250
-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/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.rb69
-rw-r--r--ext/json/lib/json/ext.rb6
-rw-r--r--ext/json/lib/json/generic_object.rb70
-rw-r--r--ext/json/lib/json/version.rb2
-rw-r--r--ext/json/parser/depend3
-rw-r--r--ext/json/parser/extconf.rb7
-rw-r--r--ext/json/parser/parser.c264
-rw-r--r--ext/json/parser/parser.h9
-rw-r--r--ext/json/parser/parser.rl33
-rw-r--r--ext/json/parser/prereq.mk3
-rw-r--r--ext/nkf/depend7
-rw-r--r--ext/nkf/nkf-utf8/nkf.c706
-rw-r--r--ext/nkf/nkf-utf8/nkf.h25
-rw-r--r--ext/nkf/nkf-utf8/utf8tbl.c5876
-rw-r--r--ext/nkf/nkf-utf8/utf8tbl.h13
-rw-r--r--ext/nkf/nkf.c23
-rw-r--r--ext/objspace/depend13
-rw-r--r--ext/objspace/object_tracing.c490
-rw-r--r--ext/objspace/objspace.c565
-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.rb53
-rw-r--r--ext/openssl/lib/openssl.rb5
-rw-r--r--ext/openssl/lib/openssl/bn.rb11
-rw-r--r--ext/openssl/lib/openssl/buffering.rb48
-rw-r--r--ext/openssl/lib/openssl/cipher.rb6
-rw-r--r--ext/openssl/lib/openssl/config.rb169
-rw-r--r--ext/openssl/lib/openssl/digest.rb52
-rw-r--r--ext/openssl/lib/openssl/ssl-internal.rb177
-rw-r--r--ext/openssl/lib/openssl/ssl.rb252
-rw-r--r--ext/openssl/lib/openssl/x509-internal.rb158
-rw-r--r--ext/openssl/lib/openssl/x509.rb164
-rw-r--r--ext/openssl/openssl_missing.c4
-rw-r--r--ext/openssl/ossl.c340
-rw-r--r--ext/openssl/ossl.h16
-rw-r--r--ext/openssl/ossl_asn1.c100
-rw-r--r--ext/openssl/ossl_bio.c2
-rw-r--r--ext/openssl/ossl_bn.c52
-rw-r--r--ext/openssl/ossl_cipher.c230
-rw-r--r--ext/openssl/ossl_config.c9
-rw-r--r--ext/openssl/ossl_engine.c196
-rw-r--r--ext/openssl/ossl_hmac.c100
-rw-r--r--ext/openssl/ossl_ns_spki.c138
-rw-r--r--ext/openssl/ossl_ocsp.c2
-rw-r--r--ext/openssl/ossl_pkcs5.c104
-rw-r--r--ext/openssl/ossl_pkcs7.c4
-rw-r--r--ext/openssl/ossl_pkey.c47
-rw-r--r--ext/openssl/ossl_pkey.h10
-rw-r--r--ext/openssl/ossl_pkey_dh.c64
-rw-r--r--ext/openssl/ossl_pkey_dsa.c73
-rw-r--r--ext/openssl/ossl_pkey_ec.c99
-rw-r--r--ext/openssl/ossl_pkey_rsa.c89
-rw-r--r--ext/openssl/ossl_ssl.c532
-rw-r--r--ext/openssl/ossl_x509attr.c4
-rw-r--r--ext/openssl/ossl_x509cert.c4
-rw-r--r--ext/openssl/ossl_x509name.c108
-rw-r--r--ext/openssl/ossl_x509store.c71
-rw-r--r--ext/openssl/ruby_missing.h13
-rw-r--r--ext/pathname/depend3
-rw-r--r--ext/pathname/lib/pathname.rb163
-rw-r--r--ext/pathname/pathname.c403
-rw-r--r--ext/psych/.gitignore11
-rw-r--r--ext/psych/depend3
-rw-r--r--ext/psych/emitter.c (renamed from ext/psych/psych_emitter.c)0
-rw-r--r--ext/psych/emitter.h (renamed from ext/psych/psych_emitter.h)0
-rw-r--r--ext/psych/extconf.rb32
-rw-r--r--ext/psych/lib/psych.rb275
-rw-r--r--ext/psych/lib/psych/class_loader.rb101
-rw-r--r--ext/psych/lib/psych/core_ext.rb9
-rw-r--r--ext/psych/lib/psych/deprecated.rb4
-rw-r--r--ext/psych/lib/psych/exception.rb13
-rw-r--r--ext/psych/lib/psych/handler.rb13
-rw-r--r--ext/psych/lib/psych/handlers/recorder.rb39
-rw-r--r--ext/psych/lib/psych/json/stream.rb1
-rw-r--r--ext/psych/lib/psych/nodes/node.rb4
-rw-r--r--ext/psych/lib/psych/scalar_scanner.rb77
-rw-r--r--ext/psych/lib/psych/stream.rb1
-rw-r--r--ext/psych/lib/psych/streaming.rb15
-rw-r--r--ext/psych/lib/psych/syntax_error.rb4
-rw-r--r--ext/psych/lib/psych/visitors/json_tree.rb7
-rw-r--r--ext/psych/lib/psych/visitors/to_ruby.rb216
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb117
-rw-r--r--ext/psych/lib/psych/y.rb9
-rw-r--r--ext/psych/parser.c (renamed from ext/psych/psych_parser.c)2
-rw-r--r--ext/psych/parser.h (renamed from ext/psych/psych_parser.h)0
-rw-r--r--ext/psych/psych.gemspec23
-rw-r--r--ext/psych/psych.h8
-rw-r--r--ext/psych/to_ruby.c (renamed from ext/psych/psych_to_ruby.c)4
-rw-r--r--ext/psych/to_ruby.h (renamed from ext/psych/psych_to_ruby.h)0
-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/psych/yaml_tree.c (renamed from ext/psych/psych_yaml_tree.c)0
-rw-r--r--ext/psych/yaml_tree.h (renamed from ext/psych/psych_yaml_tree.h)0
-rw-r--r--ext/pty/depend7
-rw-r--r--ext/pty/extconf.rb4
-rw-r--r--ext/pty/lib/expect.rb24
-rw-r--r--ext/pty/pty.c377
-rw-r--r--ext/racc/cparse/README3
-rw-r--r--ext/racc/cparse/cparse.c56
-rw-r--r--ext/racc/cparse/depend1
-rw-r--r--ext/rbconfig/sizeof/depend3
-rw-r--r--ext/rbconfig/sizeof/extconf.rb2
-rw-r--r--ext/readline/README.ja343
-rw-r--r--ext/readline/depend6
-rw-r--r--ext/readline/extconf.rb107
-rw-r--r--ext/readline/readline.c980
-rw-r--r--ext/ripper/depend23
-rw-r--r--ext/ripper/eventids2.c20
-rw-r--r--ext/ripper/extconf.rb3
-rw-r--r--ext/ripper/lib/ripper.rb69
-rw-r--r--ext/ripper/lib/ripper/core.rb8
-rw-r--r--ext/ripper/lib/ripper/filter.rb21
-rw-r--r--ext/ripper/lib/ripper/lexer.rb23
-rw-r--r--ext/ripper/lib/ripper/sexp.rb4
-rwxr-xr-xext/ripper/tools/generate.rb12
-rw-r--r--ext/sdbm/_sdbm.c84
-rw-r--r--ext/sdbm/depend4
-rw-r--r--ext/sdbm/init.c354
-rw-r--r--ext/socket/.document1
-rw-r--r--ext/socket/ancdata.c152
-rw-r--r--ext/socket/basicsocket.c47
-rw-r--r--ext/socket/constants.c2
-rw-r--r--ext/socket/depend8
-rw-r--r--ext/socket/extconf.rb753
-rw-r--r--ext/socket/getaddrinfo.c10
-rw-r--r--ext/socket/getnameinfo.c8
-rw-r--r--ext/socket/ifaddr.c457
-rw-r--r--ext/socket/init.c146
-rw-r--r--ext/socket/ipsocket.c70
-rw-r--r--ext/socket/lib/socket.rb213
-rw-r--r--ext/socket/mkconstants.rb98
-rw-r--r--ext/socket/option.c212
-rw-r--r--ext/socket/raddrinfo.c702
-rw-r--r--ext/socket/rubysocket.h245
-rw-r--r--ext/socket/socket.c529
-rw-r--r--ext/socket/sockport.h86
-rw-r--r--ext/socket/tcpserver.c27
-rw-r--r--ext/socket/tcpsocket.c4
-rw-r--r--ext/socket/udpsocket.c37
-rw-r--r--ext/socket/unixserver.c6
-rw-r--r--ext/socket/unixsocket.c62
-rw-r--r--ext/stringio/depend7
-rw-r--r--ext/stringio/stringio.c301
-rw-r--r--ext/strscan/depend9
-rw-r--r--ext/strscan/extconf.rb1
-rw-r--r--ext/strscan/strscan.c200
-rw-r--r--ext/syck/bytecode.c1165
-rw-r--r--ext/syck/depend12
-rw-r--r--ext/syck/emitter.c1247
-rw-r--r--ext/syck/extconf.rb5
-rw-r--r--ext/syck/gram.c1894
-rw-r--r--ext/syck/gram.h79
-rw-r--r--ext/syck/handler.c173
-rw-r--r--ext/syck/implicit.c2990
-rw-r--r--ext/syck/lib/syck.rb447
-rw-r--r--ext/syck/lib/syck/baseemitter.rb242
-rw-r--r--ext/syck/lib/syck/basenode.rb222
-rw-r--r--ext/syck/lib/syck/constants.rb45
-rw-r--r--ext/syck/lib/syck/encoding.rb35
-rw-r--r--ext/syck/lib/syck/error.rb34
-rw-r--r--ext/syck/lib/syck/loader.rb14
-rw-r--r--ext/syck/lib/syck/rubytypes.rb467
-rw-r--r--ext/syck/lib/syck/stream.rb41
-rw-r--r--ext/syck/lib/syck/stringio.rb85
-rw-r--r--ext/syck/lib/syck/syck.rb16
-rw-r--r--ext/syck/lib/syck/tag.rb95
-rw-r--r--ext/syck/lib/syck/types.rb192
-rw-r--r--ext/syck/lib/syck/yamlnode.rb54
-rw-r--r--ext/syck/lib/syck/ypath.rb54
-rw-r--r--ext/syck/lib/yaml/syck.rb14
-rw-r--r--ext/syck/node.c407
-rw-r--r--ext/syck/rubyext.c2328
-rw-r--r--ext/syck/syck.c524
-rw-r--r--ext/syck/syck.h453
-rw-r--r--ext/syck/token.c2724
-rw-r--r--ext/syck/yaml2byte.c259
-rw-r--r--ext/syck/yamlbyte.h171
-rw-r--r--ext/syslog/depend4
-rw-r--r--ext/syslog/lib/syslog/logger.rb208
-rw-r--r--ext/syslog/syslog.c193
-rw-r--r--ext/thread/extconf.rb3
-rw-r--r--ext/thread/thread.c638
-rw-r--r--ext/tk/ChangeLog.tkextlib2
-rw-r--r--ext/tk/MANUAL_tcltklib.eng26
-rw-r--r--ext/tk/MANUAL_tcltklib.eucj584
-rw-r--r--ext/tk/MANUAL_tcltklib.ja584
-rw-r--r--ext/tk/README.1st16
-rw-r--r--ext/tk/README.ActiveTcl2
-rw-r--r--ext/tk/README.tcltklib16
-rw-r--r--ext/tk/extconf.rb168
-rw-r--r--ext/tk/lib/multi-tk.rb2
-rw-r--r--ext/tk/lib/tcltk.rb2
-rw-r--r--ext/tk/lib/tk/canvas.rb11
-rw-r--r--ext/tk/lib/tk/image.rb42
-rw-r--r--ext/tk/lib/tk/msgcat.rb41
-rw-r--r--ext/tk/lib/tk/namespace.rb7
-rw-r--r--ext/tk/lib/tk/text.rb2
-rw-r--r--ext/tk/lib/tk/wm.rb6
-rw-r--r--ext/tk/lib/tkextlib/SUPPORT_STATUS15
-rw-r--r--ext/tk/lib/tkextlib/blt/component.rb2
-rw-r--r--ext/tk/lib/tkextlib/blt/tree.rb2
-rw-r--r--ext/tk/lib/tkextlib/blt/treeview.rb2
-rw-r--r--ext/tk/lib/tkextlib/iwidgets/scrolledcanvas.rb2
-rwxr-xr-xext/tk/lib/tkextlib/pkg_checker.rb2
-rw-r--r--ext/tk/lib/tkextlib/tile/style.rb4
-rw-r--r--ext/tk/lib/tkextlib/tktable/tktable.rb2
-rw-r--r--ext/tk/old-README.tcltklib.eucj159
-rw-r--r--ext/tk/old-README.tcltklib.ja159
-rw-r--r--ext/tk/sample/demos-en/README114
-rw-r--r--ext/tk/sample/demos-en/README.tkencoding18
-rw-r--r--ext/tk/sample/demos-en/text.rb2
-rw-r--r--ext/tk/sample/demos-en/tree.rb2
-rw-r--r--ext/tk/sample/demos-en/widget8
-rw-r--r--ext/tk/sample/demos-jp/README102
-rw-r--r--ext/tk/sample/demos-jp/README.1st28
-rw-r--r--ext/tk/sample/demos-jp/anilabel.rb22
-rw-r--r--ext/tk/sample/demos-jp/aniwave.rb10
-rw-r--r--ext/tk/sample/demos-jp/arrow.rb22
-rw-r--r--ext/tk/sample/demos-jp/bind.rb38
-rw-r--r--ext/tk/sample/demos-jp/bitmap.rb20
-rw-r--r--ext/tk/sample/demos-jp/button.rb20
-rw-r--r--ext/tk/sample/demos-jp/check.rb30
-rw-r--r--ext/tk/sample/demos-jp/check2.rb30
-rw-r--r--ext/tk/sample/demos-jp/clrpick.rb28
-rw-r--r--ext/tk/sample/demos-jp/colors.rb20
-rw-r--r--ext/tk/sample/demos-jp/combo.rb36
-rw-r--r--ext/tk/sample/demos-jp/cscroll.rb22
-rw-r--r--ext/tk/sample/demos-jp/ctext.rb36
-rw-r--r--ext/tk/sample/demos-jp/dialog1.rb12
-rw-r--r--ext/tk/sample/demos-jp/dialog2.rb12
-rw-r--r--ext/tk/sample/demos-jp/entry1.rb32
-rw-r--r--ext/tk/sample/demos-jp/entry2.rb32
-rw-r--r--ext/tk/sample/demos-jp/entry3.rb46
-rw-r--r--ext/tk/sample/demos-jp/filebox.rb28
-rw-r--r--ext/tk/sample/demos-jp/floor.rb24
-rw-r--r--ext/tk/sample/demos-jp/floor2.rb24
-rw-r--r--ext/tk/sample/demos-jp/form.rb28
-rw-r--r--ext/tk/sample/demos-jp/goldberg.rb20
-rw-r--r--ext/tk/sample/demos-jp/hello6
-rw-r--r--ext/tk/sample/demos-jp/hscale.rb14
-rw-r--r--ext/tk/sample/demos-jp/icon.rb24
-rw-r--r--ext/tk/sample/demos-jp/image1.rb22
-rw-r--r--ext/tk/sample/demos-jp/image2.rb34
-rw-r--r--ext/tk/sample/demos-jp/image3.rb18
-rw-r--r--ext/tk/sample/demos-jp/items.rb60
-rw-r--r--ext/tk/sample/demos-jp/ixset240
-rw-r--r--ext/tk/sample/demos-jp/knightstour.rb20
-rw-r--r--ext/tk/sample/demos-jp/label.rb30
-rw-r--r--ext/tk/sample/demos-jp/labelframe.rb32
-rw-r--r--ext/tk/sample/demos-jp/mclist.rb58
-rw-r--r--ext/tk/sample/demos-jp/menu.rb108
-rw-r--r--ext/tk/sample/demos-jp/menu84.rb50
-rw-r--r--ext/tk/sample/demos-jp/menu8x.rb120
-rw-r--r--ext/tk/sample/demos-jp/menubu.rb28
-rw-r--r--ext/tk/sample/demos-jp/msgbox.rb30
-rw-r--r--ext/tk/sample/demos-jp/msgbox2.rb32
-rw-r--r--ext/tk/sample/demos-jp/paned1.rb16
-rw-r--r--ext/tk/sample/demos-jp/paned2.rb22
-rw-r--r--ext/tk/sample/demos-jp/pendulum.rb10
-rw-r--r--ext/tk/sample/demos-jp/plot.rb26
-rw-r--r--ext/tk/sample/demos-jp/puzzle.rb30
-rw-r--r--ext/tk/sample/demos-jp/radio.rb30
-rw-r--r--ext/tk/sample/demos-jp/radio2.rb26
-rw-r--r--ext/tk/sample/demos-jp/radio3.rb24
-rw-r--r--ext/tk/sample/demos-jp/rolodex-j132
-rw-r--r--ext/tk/sample/demos-jp/ruler.rb22
-rw-r--r--ext/tk/sample/demos-jp/sayings.rb20
-rw-r--r--ext/tk/sample/demos-jp/search.rb40
-rw-r--r--ext/tk/sample/demos-jp/spin.rb42
-rw-r--r--ext/tk/sample/demos-jp/states.rb34
-rw-r--r--ext/tk/sample/demos-jp/style.rb192
-rw-r--r--ext/tk/sample/demos-jp/tcolor34
-rw-r--r--ext/tk/sample/demos-jp/text.rb102
-rw-r--r--ext/tk/sample/demos-jp/textpeer.rb32
-rw-r--r--ext/tk/sample/demos-jp/toolbar.rb56
-rw-r--r--ext/tk/sample/demos-jp/tree.rb24
-rw-r--r--ext/tk/sample/demos-jp/ttkbut.rb56
-rw-r--r--ext/tk/sample/demos-jp/ttkmenu.rb46
-rw-r--r--ext/tk/sample/demos-jp/ttknote.rb42
-rw-r--r--ext/tk/sample/demos-jp/ttkpane.rb24
-rw-r--r--ext/tk/sample/demos-jp/ttkprogress.rb26
-rw-r--r--ext/tk/sample/demos-jp/twind.rb76
-rw-r--r--ext/tk/sample/demos-jp/twind2.rb116
-rw-r--r--ext/tk/sample/demos-jp/unicodeout.rb42
-rw-r--r--ext/tk/sample/demos-jp/vscale.rb16
-rw-r--r--ext/tk/sample/demos-jp/widget322
-rw-r--r--ext/tk/sample/figmemo_sample.rb2
-rw-r--r--ext/tk/sample/msgs_rb2/ja.msg154
-rw-r--r--ext/tk/sample/msgs_tk/README2
-rw-r--r--ext/tk/sample/scrollframe.rb2
-rw-r--r--ext/tk/sample/tcltklib/sample0.rb12
-rw-r--r--ext/tk/sample/tcltklib/sample1.rb304
-rw-r--r--ext/tk/sample/tcltklib/sample2.rb14
-rw-r--r--ext/tk/sample/tkextlib/blt/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/bwidget/Orig_LICENSE.txt12
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt24
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/notebook.rb2
-rw-r--r--ext/tk/sample/tkextlib/iwidgets/sample/notebook2.rb2
-rw-r--r--ext/tk/sample/tkextlib/tcllib/Orig_LICENSE.txt8
-rw-r--r--ext/tk/sample/tkextlib/tkHTML/page1/index.html2
-rw-r--r--ext/tk/sample/tkextlib/tkimg/demo.rb2
-rw-r--r--ext/tk/sample/tkextlib/tkimg/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/tktable/Orig_LICENSE.txt4
-rw-r--r--ext/tk/sample/tkextlib/treectrl/readme.txt2
-rw-r--r--ext/tk/sample/tkextlib/vu/Orig_LICENSE.txt4
-rw-r--r--ext/tk/sample/tkoptdb-safeTk.rb2
-rw-r--r--ext/tk/sample/tkoptdb.rb2
-rw-r--r--ext/tk/sample/tktextframe.rb2
-rw-r--r--ext/tk/stubs.c4
-rw-r--r--ext/tk/tcltklib.c254
-rw-r--r--ext/tk/tkutil/tkutil.c97
-rw-r--r--ext/win32/extconf.rb3
-rw-r--r--ext/win32/lib/win32/importer.rb14
-rw-r--r--ext/win32ole/extconf.rb11
-rw-r--r--ext/win32ole/lib/win32ole.rb22
-rw-r--r--ext/win32ole/sample/olegen.rb8
-rw-r--r--ext/win32ole/win32ole.c256
-rw-r--r--ext/zlib/depend5
-rw-r--r--ext/zlib/extconf.rb4
-rw-r--r--ext/zlib/zlib.c1025
-rw-r--r--file.c740
-rw-r--r--gc.c8238
-rw-r--r--gc.h22
-rw-r--r--golf_prelude.rb37
-rw-r--r--goruby.c36
-rw-r--r--hash.c1379
-rw-r--r--ia64.s4
-rw-r--r--id.c51
-rw-r--r--include/ruby.h1
-rw-r--r--include/ruby/backward/classext.h2
-rw-r--r--include/ruby/backward/rubysig.h4
-rw-r--r--include/ruby/debug.h110
-rw-r--r--include/ruby/defines.h250
-rw-r--r--include/ruby/encoding.h45
-rw-r--r--include/ruby/intern.h237
-rw-r--r--include/ruby/io.h24
-rw-r--r--include/ruby/missing.h51
-rw-r--r--include/ruby/oniguruma.h100
-rw-r--r--include/ruby/re.h8
-rw-r--r--include/ruby/regex.h8
-rw-r--r--include/ruby/ruby.h798
-rw-r--r--include/ruby/st.h56
-rw-r--r--include/ruby/subst.h1
-rw-r--r--include/ruby/thread.h45
-rw-r--r--include/ruby/util.h10
-rw-r--r--include/ruby/version.h14
-rw-r--r--include/ruby/vm.h8
-rw-r--r--include/ruby/win32.h180
-rw-r--r--inits.c1
-rw-r--r--insns.def1123
-rw-r--r--internal.h711
-rw-r--r--io.c2818
-rw-r--r--iseq.c1287
-rw-r--r--iseq.h55
-rw-r--r--lib/English.rb42
-rw-r--r--lib/README91
-rw-r--r--[-rwxr-xr-x]lib/abbrev.rb84
-rw-r--r--lib/base64.rb2
-rw-r--r--lib/benchmark.rb149
-rw-r--r--lib/cgi.rb56
-rw-r--r--lib/cgi/cookie.rb60
-rw-r--r--lib/cgi/core.rb107
-rw-r--r--lib/cgi/html.rb319
-rw-r--r--lib/cgi/session.rb8
-rw-r--r--lib/cgi/util.rb64
-rw-r--r--lib/cmath.rb2
-rw-r--r--lib/csv.rb277
-rw-r--r--lib/debug.rb202
-rw-r--r--lib/delegate.rb81
-rw-r--r--lib/drb/drb.rb115
-rw-r--r--lib/drb/eq.rb2
-rw-r--r--lib/drb/extserv.rb2
-rw-r--r--lib/drb/gw.rb42
-rw-r--r--lib/drb/invokemethod.rb2
-rw-r--r--lib/drb/observer.rb3
-rw-r--r--lib/drb/ssl.rb164
-rw-r--r--lib/drb/timeridconv.rb16
-rw-r--r--lib/drb/unix.rb7
-rw-r--r--lib/e2mmap.rb22
-rw-r--r--lib/erb.rb87
-rw-r--r--lib/fileutils.rb266
-rw-r--r--lib/find.rb43
-rw-r--r--lib/forwardable.rb168
-rw-r--r--lib/getoptlong.rb2
-rw-r--r--lib/gserver.rb23
-rw-r--r--lib/ipaddr.rb106
-rw-r--r--lib/irb.rb372
-rw-r--r--lib/irb/cmd/chws.rb3
-rw-r--r--lib/irb/cmd/fork.rb5
-rw-r--r--lib/irb/cmd/help.rb2
-rw-r--r--lib/irb/cmd/load.rb2
-rw-r--r--lib/irb/cmd/nop.rb3
-rw-r--r--lib/irb/cmd/pushws.rb2
-rw-r--r--lib/irb/cmd/subirb.rb2
-rw-r--r--lib/irb/completion.rb54
-rw-r--r--lib/irb/context.rb171
-rw-r--r--lib/irb/ext/change-ws.rb10
-rw-r--r--lib/irb/ext/history.rb15
-rw-r--r--lib/irb/ext/loader.rb17
-rw-r--r--lib/irb/ext/math-mode.rb13
-rw-r--r--lib/irb/ext/multi-irb.rb48
-rw-r--r--lib/irb/ext/save-history.rb31
-rw-r--r--lib/irb/ext/tracer.rb11
-rw-r--r--lib/irb/ext/use-loader.rb9
-rw-r--r--lib/irb/ext/workspaces.rb13
-rw-r--r--lib/irb/extend-command.rb76
-rw-r--r--lib/irb/frame.rb16
-rw-r--r--lib/irb/help.rb1
-rw-r--r--lib/irb/init.rb13
-rw-r--r--lib/irb/input-method.rb71
-rw-r--r--lib/irb/inspector.rb146
-rw-r--r--lib/irb/lc/.document4
-rw-r--r--lib/irb/lc/error.rb4
-rw-r--r--lib/irb/lc/help-message26
-rw-r--r--lib/irb/lc/ja/encoding_aliases.rb2
-rw-r--r--lib/irb/lc/ja/error.rb3
-rw-r--r--lib/irb/lc/ja/help-message20
-rw-r--r--lib/irb/locale.rb2
-rw-r--r--lib/irb/magic-file.rb3
-rw-r--r--lib/irb/notifier.rb91
-rw-r--r--lib/irb/output-method.rb46
-rw-r--r--lib/irb/ruby-lex.rb42
-rw-r--r--lib/irb/ruby-token.rb2
-rw-r--r--lib/irb/slex.rb4
-rw-r--r--lib/irb/version.rb2
-rw-r--r--lib/irb/workspace.rb16
-rw-r--r--lib/irb/xmp.rb76
-rw-r--r--lib/logger.rb199
-rw-r--r--lib/matrix.rb425
-rw-r--r--lib/matrix/eigenvalue_decomposition.rb18
-rw-r--r--lib/matrix/lup_decomposition.rb58
-rw-r--r--lib/minitest/.document2
-rw-r--r--lib/minitest/README.txt212
-rw-r--r--lib/minitest/autorun.rb1
-rw-r--r--lib/minitest/benchmark.rb85
-rw-r--r--lib/minitest/hell.rb20
-rw-r--r--lib/minitest/mock.rb152
-rw-r--r--lib/minitest/parallel_each.rb80
-rw-r--r--lib/minitest/pride.rb36
-rw-r--r--lib/minitest/spec.rb324
-rw-r--r--lib/minitest/unit.rb795
-rw-r--r--lib/mkmf.rb4075
-rw-r--r--lib/monitor.rb2
-rw-r--r--lib/mutex_m.rb58
-rw-r--r--lib/net/.document8
-rw-r--r--lib/net/ftp.rb257
-rw-r--r--lib/net/http.rb1880
-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/imap.rb138
-rw-r--r--lib/net/pop.rb30
-rw-r--r--lib/net/protocol.rb26
-rw-r--r--lib/net/smtp.rb51
-rw-r--r--lib/net/telnet.rb21
-rw-r--r--lib/observer.rb19
-rw-r--r--lib/open-uri.rb153
-rw-r--r--lib/open3.rb204
-rw-r--r--lib/optparse.rb77
-rw-r--r--lib/optparse/ac.rb50
-rw-r--r--lib/ostruct.rb126
-rw-r--r--lib/pp.rb188
-rw-r--r--lib/prettyprint.rb205
-rw-r--r--lib/prime.rb125
-rw-r--r--lib/profiler.rb155
-rw-r--r--lib/pstore.rb76
-rw-r--r--lib/racc/parser.rb253
-rw-r--r--lib/racc/rdoc/grammar.en.rdoc219
-rw-r--r--lib/rake.rb4
-rw-r--r--lib/rake/alt_system.rb7
-rw-r--r--lib/rake/application.rb535
-rw-r--r--lib/rake/backtrace.rb20
-rw-r--r--lib/rake/classic_namespace.rb11
-rw-r--r--lib/rake/clean.rb33
-rw-r--r--lib/rake/cloneable.rb23
-rw-r--r--lib/rake/contrib/ftptools.rb27
-rw-r--r--lib/rake/contrib/sys.rb193
-rw-r--r--lib/rake/dsl_definition.rb45
-rw-r--r--lib/rake/ext/core.rb3
-rw-r--r--lib/rake/ext/module.rb38
-rw-r--r--lib/rake/ext/string.rb7
-rw-r--r--lib/rake/ext/time.rb3
-rw-r--r--lib/rake/file_list.rb53
-rw-r--r--lib/rake/file_task.rb3
-rw-r--r--lib/rake/file_utils.rb22
-rw-r--r--lib/rake/file_utils_ext.rb13
-rw-r--r--lib/rake/gempackagetask.rb17
-rw-r--r--lib/rake/invocation_chain.rb42
-rw-r--r--lib/rake/lib/.document1
-rw-r--r--lib/rake/linked_list.rb103
-rw-r--r--lib/rake/multi_task.rb7
-rw-r--r--lib/rake/packagetask.rb17
-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.rb5
-rw-r--r--lib/rake/rake_module.rb8
-rw-r--r--lib/rake/rdoctask.rb236
-rwxr-xr-x[-rw-r--r--]lib/rake/ruby182_test_unit_fix.rb6
-rw-r--r--lib/rake/runtest.rb5
-rw-r--r--lib/rake/scope.rb42
-rw-r--r--lib/rake/task.rb149
-rw-r--r--lib/rake/task_arguments.rb17
-rw-r--r--lib/rake/task_manager.rb60
-rw-r--r--lib/rake/tasklib.rb2
-rw-r--r--lib/rake/testtask.rb22
-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.rb7
-rw-r--r--lib/rake/win32.rb5
-rw-r--r--lib/rbconfig/obsolete.rb43
-rw-r--r--lib/rdoc.rb172
-rw-r--r--lib/rdoc/alias.rb2
-rw-r--r--lib/rdoc/anon_class.rb2
-rw-r--r--lib/rdoc/any_method.rb159
-rw-r--r--lib/rdoc/attr.rb63
-rw-r--r--lib/rdoc/class_module.rb309
-rw-r--r--lib/rdoc/code_object.rb176
-rw-r--r--lib/rdoc/code_objects.rb24
-rw-r--r--lib/rdoc/comment.rb229
-rw-r--r--lib/rdoc/constant.rb118
-rw-r--r--lib/rdoc/context.rb349
-rw-r--r--lib/rdoc/context/section.rb238
-rw-r--r--lib/rdoc/cross_reference.rb136
-rw-r--r--lib/rdoc/encoding.rb69
-rw-r--r--lib/rdoc/erb_partial.rb18
-rw-r--r--lib/rdoc/extend.rb9
-rw-r--r--lib/rdoc/generator.rb32
-rw-r--r--lib/rdoc/generator/darkfish.rb515
-rw-r--r--lib/rdoc/generator/json_index.rb248
-rw-r--r--lib/rdoc/generator/markup.rb91
-rw-r--r--lib/rdoc/generator/ri.rb70
-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/classpage.rhtml321
-rw-r--r--lib/rdoc/generator/template/darkfish/filepage.rhtml124
-rw-r--r--lib/rdoc/generator/template/darkfish/fonts.css167
-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttfbin94668 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttfbin94196 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttfbin96184 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttfbin95316 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttfbin71200 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttfbin71692 -> 0 bytes-rwxr-xr-xlib/rdoc/generator/template/darkfish/images/add.pngbin733 -> 0 bytes-rwxr-xr-xlib/rdoc/generator/template/darkfish/images/arrow_up.pngbin372 -> 0 bytes-rwxr-xr-xlib/rdoc/generator/template/darkfish/images/delete.pngbin715 -> 0 bytes-rwxr-xr-xlib/rdoc/generator/template/darkfish/images/tag_blue.pngbin1880 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/images/transparent.pngbin97 -> 0 bytes-rw-r--r--lib/rdoc/generator/template/darkfish/index.rhtml77
-rw-r--r--lib/rdoc/generator/template/darkfish/js/darkfish.js148
-rw-r--r--lib/rdoc/generator/template/darkfish/js/jquery.js36
-rw-r--r--lib/rdoc/generator/template/darkfish/js/quicksearch.js114
-rw-r--r--lib/rdoc/generator/template/darkfish/js/search.js109
-rw-r--r--lib/rdoc/generator/template/darkfish/js/thickbox-compressed.js10
-rw-r--r--lib/rdoc/generator/template/darkfish/page.rhtml18
-rw-r--r--lib/rdoc/generator/template/darkfish/rdoc.css777
-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.rb2
-rw-r--r--lib/rdoc/include.rb99
-rw-r--r--lib/rdoc/known_classes.rb1
-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.rb335
-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.rb46
-rw-r--r--lib/rdoc/markup/attributes.rb70
-rw-r--r--lib/rdoc/markup/block_quote.rb14
-rw-r--r--lib/rdoc/markup/document.rb61
-rw-r--r--lib/rdoc/markup/formatter.rb129
-rw-r--r--lib/rdoc/markup/formatter_test_case.rb120
-rw-r--r--lib/rdoc/markup/hard_break.rb31
-rw-r--r--lib/rdoc/markup/heading.rb60
-rw-r--r--lib/rdoc/markup/include.rb42
-rw-r--r--lib/rdoc/markup/indented_paragraph.rb14
-rw-r--r--lib/rdoc/markup/inline.rb145
-rw-r--r--lib/rdoc/markup/list.rb28
-rw-r--r--lib/rdoc/markup/list_item.rb21
-rw-r--r--lib/rdoc/markup/paragraph.rb14
-rw-r--r--lib/rdoc/markup/parser.rb203
-rw-r--r--lib/rdoc/markup/pre_process.rb90
-rw-r--r--lib/rdoc/markup/raw.rb10
-rw-r--r--lib/rdoc/markup/special.rb40
-rw-r--r--lib/rdoc/markup/text_formatter_test_case.rb2
-rw-r--r--lib/rdoc/markup/to_ansi.rb15
-rw-r--r--lib/rdoc/markup/to_bs.rb2
-rw-r--r--lib/rdoc/markup/to_html.rb243
-rw-r--r--lib/rdoc/markup/to_html_crossref.rb66
-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.rb52
-rw-r--r--lib/rdoc/markup/to_table_of_contents.rb87
-rw-r--r--lib/rdoc/markup/to_test.rb3
-rw-r--r--lib/rdoc/markup/to_tt_only.rb16
-rw-r--r--lib/rdoc/markup/verbatim.rb38
-rw-r--r--lib/rdoc/meta_method.rb2
-rw-r--r--lib/rdoc/method_attr.rb95
-rw-r--r--lib/rdoc/mixin.rb120
-rw-r--r--lib/rdoc/normal_class.rb39
-rw-r--r--lib/rdoc/normal_module.rb21
-rw-r--r--lib/rdoc/options.rb495
-rw-r--r--lib/rdoc/parser.rb202
-rw-r--r--lib/rdoc/parser/c.rb604
-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.rb1394
-rw-r--r--lib/rdoc/parser/ruby_tools.rb11
-rw-r--r--lib/rdoc/parser/simple.rb30
-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.rb194
-rw-r--r--lib/rdoc/require.rb2
-rw-r--r--lib/rdoc/ri.rb6
-rw-r--r--lib/rdoc/ri/driver.rb663
-rw-r--r--lib/rdoc/ri/paths.rb121
-rw-r--r--lib/rdoc/ri/store.rb356
-rw-r--r--lib/rdoc/ruby_lex.rb368
-rw-r--r--lib/rdoc/ruby_token.rb132
-rw-r--r--lib/rdoc/rubygems_hook.rb61
-rw-r--r--lib/rdoc/servlet.rb441
-rw-r--r--lib/rdoc/single_class.rb2
-rw-r--r--lib/rdoc/stats.rb155
-rw-r--r--lib/rdoc/store.rb979
-rw-r--r--lib/rdoc/task.rb28
-rw-r--r--lib/rdoc/test_case.rb217
-rw-r--r--lib/rdoc/text.rb75
-rw-r--r--lib/rdoc/token_stream.rb45
-rw-r--r--lib/rdoc/tom_doc.rb257
-rw-r--r--lib/rdoc/top_level.rb368
-rw-r--r--lib/resolv-replace.rb2
-rw-r--r--lib/resolv.rb509
-rw-r--r--lib/rexml/attribute.rb7
-rw-r--r--lib/rexml/document.rb94
-rw-r--r--lib/rexml/element.rb21
-rw-r--r--lib/rexml/encoding.rb14
-rw-r--r--lib/rexml/entity.rb9
-rw-r--r--lib/rexml/formatters/pretty.rb2
-rw-r--r--lib/rexml/light/node.rb2
-rw-r--r--lib/rexml/output.rb7
-rw-r--r--lib/rexml/parsers/baseparser.rb70
-rw-r--r--lib/rexml/parsers/sax2parser.rb30
-rw-r--r--lib/rexml/parsers/streamparser.rb6
-rw-r--r--lib/rexml/parsers/treeparser.rb6
-rw-r--r--lib/rexml/parsers/ultralightparser.rb2
-rw-r--r--lib/rexml/sax2listener.rb16
-rw-r--r--lib/rexml/security.rb27
-rw-r--r--lib/rexml/source.rb87
-rw-r--r--lib/rexml/streamlistener.rb12
-rw-r--r--lib/rexml/text.rb59
-rw-r--r--lib/rexml/xmldecl.rb8
-rw-r--r--lib/rinda/rinda.rb50
-rw-r--r--lib/rinda/ring.rb281
-rw-r--r--lib/rinda/tuplespace.rb8
-rw-r--r--lib/rss/0.9.rb33
-rw-r--r--lib/rss/1.0.rb32
-rw-r--r--lib/rss/2.0.rb31
-rw-r--r--lib/rss/atom.rb83
-rw-r--r--lib/rss/content.rb2
-rw-r--r--lib/rss/dublincore.rb2
-rw-r--r--lib/rss/image.rb4
-rw-r--r--lib/rss/itunes.rb2
-rw-r--r--lib/rss/maker.rb26
-rw-r--r--lib/rss/maker/base.rb12
-rw-r--r--lib/rss/maker/entry.rb4
-rw-r--r--lib/rss/parser.rb2
-rw-r--r--lib/rss/rexmlparser.rb5
-rw-r--r--lib/rss/rss.rb84
-rw-r--r--lib/rss/slash.rb2
-rw-r--r--lib/rss/syndication.rb3
-rw-r--r--lib/rss/taxonomy.rb4
-rw-r--r--lib/rss/trackback.rb4
-rw-r--r--lib/rss/utils.rb92
-rw-r--r--lib/rss/xmlparser.rb3
-rw-r--r--lib/rubygems.rb902
-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/builder.rb99
-rw-r--r--lib/rubygems/command.rb133
-rw-r--r--lib/rubygems/command_manager.rb161
-rw-r--r--lib/rubygems/commands/build_command.rb47
-rw-r--r--lib/rubygems/commands/cert_command.rb308
-rw-r--r--lib/rubygems/commands/check_command.rb108
-rw-r--r--lib/rubygems/commands/cleanup_command.rb147
-rw-r--r--lib/rubygems/commands/contents_command.rb149
-rw-r--r--lib/rubygems/commands/dependency_command.rb163
-rw-r--r--lib/rubygems/commands/environment_command.rb145
-rw-r--r--lib/rubygems/commands/fetch_command.rb27
-rw-r--r--lib/rubygems/commands/generate_index_command.rb54
-rw-r--r--lib/rubygems/commands/help_command.rb134
-rw-r--r--lib/rubygems/commands/install_command.rb216
-rw-r--r--lib/rubygems/commands/list_command.rb19
-rw-r--r--lib/rubygems/commands/lock_command.rb2
-rw-r--r--lib/rubygems/commands/mirror_command.rb23
-rw-r--r--lib/rubygems/commands/outdated_command.rb18
-rw-r--r--lib/rubygems/commands/owner_command.rb35
-rw-r--r--lib/rubygems/commands/pristine_command.rb83
-rw-r--r--lib/rubygems/commands/push_command.rb58
-rw-r--r--lib/rubygems/commands/query_command.rb304
-rw-r--r--lib/rubygems/commands/rdoc_command.rb63
-rw-r--r--lib/rubygems/commands/search_command.rb25
-rw-r--r--lib/rubygems/commands/server_command.rb2
-rw-r--r--lib/rubygems/commands/setup_command.rb229
-rw-r--r--lib/rubygems/commands/sources_command.rb192
-rw-r--r--lib/rubygems/commands/specification_command.rb44
-rw-r--r--lib/rubygems/commands/stale_command.rb10
-rw-r--r--lib/rubygems/commands/uninstall_command.rb78
-rw-r--r--lib/rubygems/commands/unpack_command.rb30
-rw-r--r--lib/rubygems/commands/update_command.rb243
-rw-r--r--lib/rubygems/commands/which_command.rb24
-rw-r--r--lib/rubygems/commands/yank_command.rb112
-rw-r--r--lib/rubygems/compatibility.rb60
-rw-r--r--lib/rubygems/config_file.rb237
-rw-r--r--lib/rubygems/core_ext/kernel_gem.rb59
-rwxr-xr-xlib/rubygems/core_ext/kernel_require.rb149
-rw-r--r--lib/rubygems/custom_require.rb69
-rw-r--r--lib/rubygems/defaults.rb103
-rw-r--r--lib/rubygems/dependency.rb83
-rw-r--r--lib/rubygems/dependency_installer.rb445
-rw-r--r--lib/rubygems/dependency_list.rb32
-rw-r--r--lib/rubygems/deprecate.rb80
-rw-r--r--lib/rubygems/doc_manager.rb243
-rw-r--r--lib/rubygems/doctor.rb131
-rw-r--r--lib/rubygems/errors.rb120
-rw-r--r--lib/rubygems/exceptions.rb175
-rw-r--r--lib/rubygems/ext.rb4
-rw-r--r--lib/rubygems/ext/build_error.rb6
-rw-r--r--lib/rubygems/ext/builder.rb198
-rw-r--r--lib/rubygems/ext/cmake_builder.rb16
-rw-r--r--lib/rubygems/ext/configure_builder.rb6
-rw-r--r--lib/rubygems/ext/ext_conf_builder.rb66
-rw-r--r--lib/rubygems/ext/rake_builder.rb9
-rw-r--r--lib/rubygems/format.rb82
-rw-r--r--lib/rubygems/gem_openssl.rb90
-rw-r--r--lib/rubygems/gem_path_searcher.rb172
-rw-r--r--lib/rubygems/gem_runner.rb41
-rw-r--r--lib/rubygems/gemcutter_utilities.rb126
-rw-r--r--lib/rubygems/indexer.rb182
-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.rb77
-rw-r--r--lib/rubygems/installer.rb530
-rw-r--r--lib/rubygems/installer_test_case.rb95
-rw-r--r--lib/rubygems/mock_gem_ui.rb17
-rw-r--r--lib/rubygems/name_tuple.rb121
-rw-r--r--lib/rubygems/old_format.rb153
-rw-r--r--lib/rubygems/package.rb601
-rw-r--r--lib/rubygems/package/digest_io.rb64
-rw-r--r--lib/rubygems/package/f_sync_dir.rb23
-rw-r--r--lib/rubygems/package/old.rb178
-rw-r--r--lib/rubygems/package/tar_header.rb75
-rw-r--r--lib/rubygems/package/tar_input.rb235
-rw-r--r--lib/rubygems/package/tar_output.rb146
-rw-r--r--lib/rubygems/package/tar_reader.rb23
-rw-r--r--lib/rubygems/package/tar_test_case.rb18
-rw-r--r--lib/rubygems/package/tar_writer.rb99
-rw-r--r--lib/rubygems/package_task.rb14
-rw-r--r--lib/rubygems/path_support.rb31
-rw-r--r--lib/rubygems/platform.rb69
-rw-r--r--lib/rubygems/psych_additions.rb13
-rw-r--r--lib/rubygems/psych_tree.rb29
-rw-r--r--lib/rubygems/rdoc.rb336
-rw-r--r--lib/rubygems/remote_fetcher.rb370
-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/require_paths_builder.rb18
-rw-r--r--lib/rubygems/requirement.rb134
-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.rb867
-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.rb129
-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_index.rb406
-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.rb345
-rw-r--r--lib/rubygems/specification.rb1446
-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/ssl_certs/ca-bundle.pem3366
-rw-r--r--lib/rubygems/stub_specification.rb176
-rw-r--r--lib/rubygems/syck_hack.rb77
-rw-r--r--lib/rubygems/test_case.rb795
-rw-r--r--lib/rubygems/test_utilities.rb235
-rw-r--r--lib/rubygems/uninstaller.rb157
-rw-r--r--lib/rubygems/uri_formatter.rb49
-rw-r--r--lib/rubygems/user_interaction.rb274
-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.rb80
-rw-r--r--lib/rubygems/version.rb67
-rw-r--r--lib/rubygems/version_option.rb10
-rw-r--r--lib/scanf.rb11
-rw-r--r--lib/securerandom.rb97
-rwxr-xr-x[-rw-r--r--]lib/set.rb747
-rw-r--r--lib/shell.rb143
-rw-r--r--lib/shell/command-processor.rb291
-rw-r--r--lib/shell/filter.rb36
-rw-r--r--lib/shell/process-controller.rb2
-rw-r--r--lib/shell/system-command.rb2
-rw-r--r--lib/shell/version.rb2
-rw-r--r--lib/shellwords.rb128
-rw-r--r--lib/sync.rb47
-rw-r--r--lib/tempfile.rb80
-rw-r--r--lib/test/unit.rb626
-rw-r--r--lib/test/unit/assertions.rb109
-rw-r--r--lib/test/unit/parallel.rb76
-rw-r--r--lib/test/unit/test-unit.gemspec14
-rw-r--r--lib/test/unit/testcase.rb11
-rw-r--r--lib/thread.rb361
-rw-r--r--lib/thwait.rb2
-rw-r--r--lib/time.rb307
-rw-r--r--lib/timeout.rb66
-rw-r--r--lib/tmpdir.rb25
-rw-r--r--lib/tracer.rb56
-rw-r--r--lib/tsort.rb242
-rw-r--r--lib/un.rb49
-rw-r--r--lib/uri/common.rb306
-rw-r--r--lib/uri/ftp.rb17
-rw-r--r--lib/uri/generic.rb92
-rw-r--r--lib/uri/http.rb2
-rw-r--r--lib/uri/mailto.rb2
-rw-r--r--lib/weakref.rb111
-rw-r--r--lib/webrick.rb11
-rw-r--r--lib/webrick/accesslog.rb9
-rw-r--r--lib/webrick/cgi.rb52
-rw-r--r--lib/webrick/compat.rb2
-rw-r--r--lib/webrick/config.rb32
-rw-r--r--lib/webrick/cookie.rb71
-rw-r--r--lib/webrick/htmlutils.rb5
-rw-r--r--lib/webrick/httpauth/authenticator.rb20
-rw-r--r--lib/webrick/httpauth/basicauth.rb2
-rw-r--r--lib/webrick/httpauth/digestauth.rb26
-rw-r--r--lib/webrick/httpauth/htdigest.rb9
-rw-r--r--lib/webrick/httpauth/htpasswd.rb9
-rw-r--r--lib/webrick/httpproxy.rb48
-rw-r--r--lib/webrick/httprequest.rb151
-rw-r--r--lib/webrick/httpresponse.rb111
-rw-r--r--lib/webrick/https.rb24
-rw-r--r--lib/webrick/httpserver.rb16
-rw-r--r--lib/webrick/httpservlet/abstract.rb2
-rw-r--r--lib/webrick/httpservlet/cgihandler.rb19
-rw-r--r--lib/webrick/httpservlet/filehandler.rb118
-rw-r--r--lib/webrick/httpservlet/prochandler.rb13
-rw-r--r--lib/webrick/httpstatus.rb30
-rw-r--r--lib/webrick/httputils.rb143
-rw-r--r--lib/webrick/httpversion.rb28
-rw-r--r--lib/webrick/log.rb23
-rw-r--r--lib/webrick/server.rb165
-rw-r--r--lib/webrick/ssl.rb74
-rw-r--r--lib/webrick/utils.rb32
-rw-r--r--lib/webrick/version.rb4
-rw-r--r--lib/xmlrpc.rb301
-rw-r--r--lib/xmlrpc/README.rdoc300
-rw-r--r--lib/xmlrpc/README.txt31
-rw-r--r--lib/xmlrpc/base64.rb63
-rw-r--r--lib/xmlrpc/client.rb631
-rw-r--r--lib/xmlrpc/config.rb28
-rw-r--r--lib/xmlrpc/create.rb21
-rw-r--r--lib/xmlrpc/datetime.rb119
-rw-r--r--lib/xmlrpc/httpserver.rb47
-rw-r--r--lib/xmlrpc/marshal.rb18
-rw-r--r--lib/xmlrpc/parser.rb84
-rw-r--r--lib/xmlrpc/server.rb561
-rw-r--r--lib/xmlrpc/utils.rb44
-rw-r--r--lib/yaml.rb133
-rw-r--r--lib/yaml/dbm.rb91
-rw-r--r--lib/yaml/store.rb15
-rw-r--r--load.c598
-rw-r--r--loadpath.c92
-rw-r--r--localeinit.c65
-rw-r--r--main.c4
-rw-r--r--man/erb.110
-rw-r--r--man/goruby.110
-rw-r--r--man/irb.18
-rw-r--r--man/rake.144
-rw-r--r--man/ri.111
-rw-r--r--man/ruby.143
-rw-r--r--marshal.c569
-rw-r--r--math.c363
-rw-r--r--method.h61
-rw-r--r--miniinit.c30
-rw-r--r--misc/inf-ruby.el4
-rw-r--r--misc/rdoc-mode.el2
-rw-r--r--misc/ruby-additional.el113
-rw-r--r--misc/ruby-electric.el560
-rw-r--r--misc/ruby-mode.el208
-rw-r--r--misc/ruby-style.el1
-rw-r--r--missing/alloca.c6
-rw-r--r--missing/crt_externs.h8
-rw-r--r--missing/crypt.c2
-rw-r--r--missing/file.h2
-rw-r--r--missing/flock.c7
-rw-r--r--missing/isnan.c15
-rw-r--r--missing/setproctitle.c10
-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.c73
-rw-r--r--node.h70
-rw-r--r--numeric.c1865
-rw-r--r--object.c1141
-rw-r--r--pack.c682
-rw-r--r--parse.y2880
-rw-r--r--prelude.rb16
-rw-r--r--probes.d234
-rw-r--r--probes_helper.h67
-rw-r--r--proc.c948
-rw-r--r--process.c3613
-rw-r--r--random.c643
-rw-r--r--range.c599
-rw-r--r--rational.c957
-rw-r--r--re.c240
-rw-r--r--regcomp.c605
-rw-r--r--regenc.c32
-rw-r--r--regenc.h22
-rw-r--r--regerror.c25
-rw-r--r--regexec.c888
-rw-r--r--regint.h125
-rw-r--r--regparse.c1131
-rw-r--r--regparse.h17
-rw-r--r--regsyntax.c84
-rw-r--r--ruby.c396
-rw-r--r--ruby_atomic.h170
-rw-r--r--safe.c34
-rw-r--r--sample/README2
-rw-r--r--sample/cal.rb10
-rw-r--r--sample/coverage.rb4
-rw-r--r--sample/drb/README.ja.rdoc59
-rw-r--r--sample/drb/README.rd (renamed from sample/drb/README.rdoc)6
-rw-r--r--sample/drb/README.rd.ja59
-rw-r--r--sample/drb/dbiff.rb22
-rw-r--r--sample/drb/dchats.rb20
-rw-r--r--sample/drb/dhasenc.rb6
-rw-r--r--sample/drb/dlogd.rb4
-rw-r--r--sample/drb/gw_cu.rb2
-rw-r--r--sample/drb/http0.rb60
-rw-r--r--sample/drb/http0serv.rb106
-rw-r--r--sample/drb/old_tuplespace.rb74
-rw-r--r--sample/drb/simpletuple.rb8
-rw-r--r--sample/dualstack-fetch.rb2
-rw-r--r--sample/dualstack-httpd.rb32
-rw-r--r--sample/exyacc.rb24
-rw-r--r--sample/fib.awk8
-rw-r--r--sample/fib.pl4
-rw-r--r--sample/fib.scm4
-rw-r--r--sample/freq.rb2
-rw-r--r--sample/from.rb38
-rw-r--r--sample/logger/app.rb2
-rw-r--r--[-rwxr-xr-x]sample/mine.rb40
-rw-r--r--sample/mkproto.rb22
-rw-r--r--sample/observ.rb8
-rw-r--r--sample/occur.pl8
-rw-r--r--sample/occur.rb2
-rw-r--r--sample/occur2.rb2
-rw-r--r--sample/openssl/c_rehash.rb38
-rw-r--r--sample/openssl/certstore.rb52
-rw-r--r--sample/openssl/crlstore.rb32
-rwxr-xr-xsample/optparse/opttest.rb70
-rw-r--r--sample/pty/expect_sample.rb2
-rw-r--r--sample/rcs.awk54
-rw-r--r--[-rwxr-xr-x]sample/test.rb143
-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.mp4bin580724 -> 0 bytes-rw-r--r--sample/trick2013/mame/remarks.markdown47
-rw-r--r--sample/trick2013/shinh/authors.markdown2
-rw-r--r--sample/trick2013/shinh/entry.rb10
-rw-r--r--sample/trick2013/shinh/remarks.markdown4
-rw-r--r--sample/trick2013/yhara/authors.markdown3
-rw-r--r--sample/trick2013/yhara/entry.rb28
-rw-r--r--sample/trick2013/yhara/remarks.en.markdown23
-rw-r--r--sample/trick2013/yhara/remarks.markdown24
-rw-r--r--sample/trojan.rb2
-rw-r--r--signal.c511
-rw-r--r--siphash.c6
-rw-r--r--sparc.c14
-rw-r--r--spec/default.mspec8
-rw-r--r--sprintf.c339
-rw-r--r--st.c839
-rw-r--r--strftime.c168
-rw-r--r--string.c2257
-rw-r--r--struct.c685
-rw-r--r--template/Doxyfile.tmpl20
-rw-r--r--template/GNUmakefile.in6
-rw-r--r--template/encdb.h.tmpl16
-rwxr-xr-x[-rw-r--r--]template/fake.rb.in6
-rw-r--r--template/id.c.tmpl27
-rw-r--r--template/id.h.tmpl172
-rw-r--r--template/ruby.pc.in36
-rw-r--r--template/sizes.c.tmpl30
-rw-r--r--template/verconf.h.in61
-rw-r--r--template/yarvarch.ja402
-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-/iter/test_iter_break.rb15
-rw-r--r--test/-ext-/iter/test_yield_block.rb21
-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.rb6
-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.rb28
-rw-r--r--test/-ext-/st/test_update.rb50
-rw-r--r--test/-ext-/string/test_cstr.rb25
-rw-r--r--test/-ext-/string/test_ellipsize.rb2
-rw-r--r--test/-ext-/string/test_enc_str_buf_cat.rb15
-rw-r--r--test/-ext-/string/test_modify_expand.rb20
-rw-r--r--test/-ext-/string/test_normalize.rb106
-rw-r--r--test/-ext-/string/test_qsort.rb19
-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-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.rb5
-rw-r--r--test/-ext-/win32/test_dln.rb22
-rw-r--r--test/base64/test_base64.rb1
-rw-r--r--test/benchmark/test_benchmark.rb102
-rw-r--r--test/bigdecimal/test_bigdecimal.rb318
-rw-r--r--test/bigdecimal/test_bigdecimal_util.rb15
-rw-r--r--test/cgi/test_cgi_core.rb18
-rw-r--r--test/cgi/test_cgi_header.rb48
-rw-r--r--test/cgi/test_cgi_modruby.rb7
-rw-r--r--test/cgi/test_cgi_multipart.rb53
-rw-r--r--test/cgi/test_cgi_session.rb2
-rw-r--r--test/cgi/test_cgi_tag_helper.rb14
-rw-r--r--test/cgi/test_cgi_util.rb53
-rw-r--r--test/coverage/test_coverage.rb2
-rwxr-xr-xtest/csv/test_encodings.rb10
-rwxr-xr-xtest/csv/test_features.rb101
-rwxr-xr-xtest/csv/test_interface.rb25
-rwxr-xr-xtest/csv/test_row.rb40
-rwxr-xr-xtest/csv/test_serialization.rb158
-rw-r--r--test/csv/ts_all.rb1
-rw-r--r--test/date/test_date.rb9
-rw-r--r--test/date/test_date_marshal.rb12
-rw-r--r--test/date/test_date_parse.rb782
-rw-r--r--test/date/test_date_strftime.rb23
-rw-r--r--test/date/test_date_strptime.rb172
-rw-r--r--test/date/test_switch_hitter.rb91
-rw-r--r--test/dbm/test_dbm.rb61
-rwxr-xr-xtest/digest/test_digest.rb59
-rw-r--r--test/digest/test_digest_extend.rb1
-rw-r--r--test/dl/test_base.rb18
-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.rb9
-rw-r--r--test/dl/test_cfunc.rb2
-rw-r--r--test/dl/test_cparser.rb24
-rw-r--r--test/dl/test_cptr.rb4
-rw-r--r--test/dl/test_dl2.rb43
-rw-r--r--test/dl/test_func.rb93
-rw-r--r--test/dl/test_handle.rb15
-rw-r--r--test/dl/test_import.rb9
-rw-r--r--test/drb/drbtest.rb55
-rw-r--r--test/drb/ignore_test_drb.rb16
-rw-r--r--test/drb/test_drb.rb52
-rw-r--r--test/drb/test_drbssl.rb10
-rw-r--r--test/drb/test_drbunix.rb10
-rw-r--r--test/drb/ut_array.rb2
-rw-r--r--test/drb/ut_array_drbssl.rb13
-rw-r--r--test/drb/ut_drb.rb3
-rw-r--r--test/drb/ut_drb_drbssl.rb13
-rw-r--r--test/drb/ut_eq.rb2
-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/test_erb.rb67
-rw-r--r--test/etc/test_etc.rb17
-rw-r--r--test/fiddle/helper.rb20
-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.rb4
-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.rb5
-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/fileasserts.rb102
-rw-r--r--test/fileutils/test_dryrun.rb20
-rw-r--r--test/fileutils/test_fileutils.rb205
-rw-r--r--test/fileutils/test_nowrite.rb21
-rw-r--r--test/fileutils/test_verbose.rb18
-rw-r--r--test/fileutils/visibility_tests.rb41
-rw-r--r--test/gdbm/test_gdbm.rb100
-rw-r--r--test/iconv/test_basic.rb59
-rw-r--r--test/iconv/test_option.rb43
-rw-r--r--test/iconv/test_partial.rb41
-rw-r--r--test/iconv/utils.rb29
-rw-r--r--test/io/console/test_io_console.rb75
-rw-r--r--test/io/wait/test_io_wait.rb36
-rw-r--r--test/json/fixtures/fail18.json2
-rwxr-xr-xtest/json/test_json.rb127
-rwxr-xr-xtest/json/test_json_addition.rb79
-rw-r--r--test/json/test_json_encoding.rb4
-rwxr-xr-xtest/json/test_json_fixtures.rb4
-rwxr-xr-xtest/json/test_json_generate.rb194
-rw-r--r--test/json/test_json_generic_object.rb75
-rw-r--r--test/json/test_json_string_matching.rb15
-rwxr-xr-xtest/json/test_json_unicode.rb4
-rw-r--r--test/logger/test_logger.rb146
-rw-r--r--test/matrix/test_vector.rb20
-rw-r--r--test/minitest/metametameta.rb74
-rw-r--r--test/minitest/test_minitest_benchmark.rb18
-rw-r--r--test/minitest/test_minitest_mock.rb282
-rw-r--r--test/minitest/test_minitest_spec.rb664
-rw-r--r--test/minitest/test_minitest_unit.rb1095
-rw-r--r--test/misc/test_ruby_mode.rb41
-rw-r--r--test/mkmf/base.rb26
-rw-r--r--test/mkmf/test_config.rb17
-rw-r--r--test/mkmf/test_constant.rb37
-rw-r--r--test/mkmf/test_convertible.rb2
-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.rb2
-rw-r--r--test/mkmf/test_sizeof.rb2
-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_http.rb489
-rw-r--r--test/net/http/test_http_request.rb79
-rw-r--r--test/net/http/test_httpheader.rb27
-rw-r--r--test/net/http/test_httpresponse.rb226
-rw-r--r--test/net/http/test_httpresponses.rb24
-rw-r--r--test/net/http/test_https.rb36
-rw-r--r--test/net/http/test_https_proxy.rb6
-rw-r--r--test/net/http/utils.rb9
-rw-r--r--test/net/imap/Makefile15
-rw-r--r--test/net/imap/cacert.pem84
-rw-r--r--test/net/imap/server.crt65
-rw-r--r--test/net/imap/test_imap.rb75
-rw-r--r--test/net/imap/test_imap_response_parser.rb146
-rw-r--r--test/net/protocol/test_protocol.rb28
-rw-r--r--test/net/smtp/test_smtp.rb38
-rw-r--r--test/objspace/test_objspace.rb226
-rw-r--r--test/open-uri/test_open-uri.rb94
-rw-r--r--test/open-uri/test_ssl.rb25
-rw-r--r--test/openssl/test_asn1.rb22
-rw-r--r--test/openssl/test_bn.rb35
-rw-r--r--test/openssl/test_buffering.rb1
-rw-r--r--test/openssl/test_cipher.rb150
-rw-r--r--test/openssl/test_config.rb31
-rw-r--r--test/openssl/test_digest.rb10
-rw-r--r--test/openssl/test_engine.rb70
-rw-r--r--test/openssl/test_fips.rb14
-rw-r--r--test/openssl/test_ns_spki.rb1
-rw-r--r--test/openssl/test_pair.rb155
-rw-r--r--test/openssl/test_pkcs12.rb6
-rw-r--r--test/openssl/test_pkcs5.rb97
-rw-r--r--test/openssl/test_pkcs7.rb2
-rw-r--r--test/openssl/test_pkey_dh.rb22
-rw-r--r--test/openssl/test_pkey_dsa.rb16
-rw-r--r--test/openssl/test_pkey_ec.rb59
-rw-r--r--test/openssl/test_pkey_rsa.rb69
-rw-r--r--test/openssl/test_ssl.rb510
-rw-r--r--test/openssl/test_ssl_session.rb52
-rw-r--r--test/openssl/test_x509cert.rb50
-rw-r--r--test/openssl/test_x509crl.rb5
-rw-r--r--test/openssl/test_x509name.rb3
-rw-r--r--test/openssl/test_x509req.rb34
-rw-r--r--test/openssl/test_x509store.rb5
-rw-r--r--test/openssl/utils.rb26
-rw-r--r--test/optparse/test_acceptable.rb195
-rw-r--r--test/optparse/test_autoconf.rb63
-rw-r--r--test/optparse/test_optparse.rb3
-rw-r--r--test/optparse/test_summary.rb8
-rw-r--r--test/ostruct/test_ostruct.rb80
-rw-r--r--test/pathname/test_pathname.rb45
-rw-r--r--test/profile_test_all.rb90
-rw-r--r--test/psych/handlers/test_recorder.rb25
-rw-r--r--test/psych/helper.rb67
-rw-r--r--test/psych/test_alias_and_anchor.rb12
-rw-r--r--test/psych/test_array.rb2
-rw-r--r--test/psych/test_boolean.rb2
-rw-r--r--test/psych/test_class.rb2
-rw-r--r--test/psych/test_coder.rb6
-rw-r--r--test/psych/test_date_time.rb23
-rw-r--r--test/psych/test_deprecated.rb8
-rw-r--r--test/psych/test_document.rb2
-rw-r--r--test/psych/test_emitter.rb2
-rw-r--r--test/psych/test_encoding.rb121
-rw-r--r--test/psych/test_engine_manager.rb12
-rw-r--r--test/psych/test_exception.rb59
-rw-r--r--test/psych/test_hash.rb2
-rw-r--r--test/psych/test_json_tree.rb2
-rw-r--r--test/psych/test_merge_keys.rb71
-rw-r--r--test/psych/test_nil.rb2
-rw-r--r--test/psych/test_null.rb2
-rw-r--r--test/psych/test_numeric.rb22
-rw-r--r--test/psych/test_object.rb2
-rw-r--r--test/psych/test_object_references.rb8
-rw-r--r--test/psych/test_omap.rb2
-rw-r--r--test/psych/test_parser.rb9
-rw-r--r--test/psych/test_psych.rb30
-rw-r--r--test/psych/test_safe_load.rb97
-rw-r--r--test/psych/test_scalar.rb2
-rw-r--r--test/psych/test_scalar_scanner.rb19
-rw-r--r--test/psych/test_serialize_subclasses.rb2
-rw-r--r--test/psych/test_set.rb2
-rw-r--r--test/psych/test_stream.rb2
-rw-r--r--test/psych/test_string.rb73
-rw-r--r--test/psych/test_struct.rb6
-rw-r--r--test/psych/test_symbol.rb2
-rw-r--r--test/psych/test_tainted.rb16
-rw-r--r--test/psych/test_to_yaml_properties.rb2
-rw-r--r--test/psych/test_tree_builder.rb2
-rw-r--r--test/psych/test_yaml.rb24
-rw-r--r--test/psych/test_yamldbm.rb197
-rw-r--r--test/psych/visitors/test_to_ruby.rb9
-rw-r--r--test/psych/visitors/test_yaml_tree.rb20
-rw-r--r--test/rake/helper.rb452
-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_application.rb86
-rw-r--r--test/rake/test_rake_application_options.rb198
-rw-r--r--test/rake/test_rake_backtrace.rb113
-rw-r--r--test/rake/test_rake_clean.rb46
-rw-r--r--test/rake/test_rake_definitions.rb5
-rw-r--r--test/rake/test_rake_directory_task.rb21
-rw-r--r--test/rake/test_rake_dsl.rb37
-rw-r--r--test/rake/test_rake_file_creation_task.rb4
-rw-r--r--test/rake/test_rake_file_list.rb47
-rw-r--r--test/rake/test_rake_file_task.rb32
-rw-r--r--test/rake/test_rake_file_utils.rb8
-rw-r--r--test/rake/test_rake_ftp_file.rb41
-rw-r--r--test/rake/test_rake_functional.rb70
-rw-r--r--test/rake/test_rake_invocation_chain.rb18
-rw-r--r--test/rake/test_rake_linked_list.rb84
-rw-r--r--test/rake/test_rake_makefile_loader.rb4
-rw-r--r--test/rake/test_rake_multi_task.rb9
-rw-r--r--test/rake/test_rake_name_space.rb2
-rw-r--r--test/rake/test_rake_path_map.rb35
-rw-r--r--test/rake/test_rake_rake_test_loader.rb7
-rw-r--r--test/rake/test_rake_rdoc_task.rb83
-rw-r--r--test/rake/test_rake_reduce_compat.rb26
-rw-r--r--test/rake/test_rake_rules.rb59
-rw-r--r--test/rake/test_rake_scope.rb44
-rw-r--r--test/rake/test_rake_task.rb143
-rw-r--r--test/rake/test_rake_task_arguments.rb37
-rw-r--r--test/rake/test_rake_task_manager.rb31
-rw-r--r--test/rake/test_rake_task_manager_argument_resolution.rb17
-rw-r--r--test/rake/test_rake_task_with_arguments.rb42
-rw-r--r--test/rake/test_rake_test_task.rb3
-rw-r--r--test/rake/test_rake_thread_pool.rb142
-rw-r--r--test/rake/test_rake_top_level_functions.rb42
-rw-r--r--test/rake/test_sys.rb20
-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/test.ja.largedoc3
-rw-r--r--test/rdoc/test_attribute_manager.rb66
-rw-r--r--test/rdoc/test_rdoc_any_method.rb260
-rw-r--r--test/rdoc/test_rdoc_attr.rb89
-rw-r--r--test/rdoc/test_rdoc_class_module.rb950
-rw-r--r--test/rdoc/test_rdoc_code_object.rb184
-rw-r--r--test/rdoc/test_rdoc_comment.rb504
-rw-r--r--test/rdoc/test_rdoc_constant.rb136
-rw-r--r--test/rdoc/test_rdoc_context.rb272
-rw-r--r--test/rdoc/test_rdoc_context_section.rb118
-rw-r--r--test/rdoc/test_rdoc_cross_reference.rb44
-rw-r--r--test/rdoc/test_rdoc_encoding.rb31
-rw-r--r--test/rdoc/test_rdoc_extend.rb94
-rw-r--r--test/rdoc/test_rdoc_generator_darkfish.rb188
-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.rb47
-rw-r--r--test/rdoc/test_rdoc_include.rb12
-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.rb16
-rw-r--r--test/rdoc/test_rdoc_markup_attribute_manager.rb138
-rw-r--r--test/rdoc/test_rdoc_markup_attributes.rb39
-rw-r--r--test/rdoc/test_rdoc_markup_document.rb81
-rw-r--r--test/rdoc/test_rdoc_markup_formatter.rb146
-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.rb23
-rw-r--r--test/rdoc/test_rdoc_markup_paragraph.rb23
-rw-r--r--test/rdoc/test_rdoc_markup_parser.rb390
-rw-r--r--test/rdoc/test_rdoc_markup_pre_process.rb87
-rw-r--r--test/rdoc/test_rdoc_markup_raw.rb21
-rw-r--r--test/rdoc/test_rdoc_markup_to_ansi.rb49
-rw-r--r--test/rdoc/test_rdoc_markup_to_bs.rb33
-rw-r--r--test/rdoc/test_rdoc_markup_to_html.rb384
-rw-r--r--test/rdoc/test_rdoc_markup_to_html_crossref.rb149
-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.rb48
-rw-r--r--test/rdoc/test_rdoc_markup_to_table_of_contents.rb126
-rw-r--r--test/rdoc/test_rdoc_markup_to_tt_only.rb25
-rw-r--r--test/rdoc/test_rdoc_markup_verbatim.rb29
-rw-r--r--test/rdoc/test_rdoc_method_attr.rb43
-rw-r--r--test/rdoc/test_rdoc_normal_class.rb34
-rw-r--r--test/rdoc/test_rdoc_normal_module.rb7
-rw-r--r--test/rdoc/test_rdoc_options.rb397
-rw-r--r--test/rdoc/test_rdoc_parser.rb247
-rw-r--r--test/rdoc/test_rdoc_parser_c.rb681
-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.rb1605
-rw-r--r--test/rdoc/test_rdoc_parser_simple.rb54
-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.rb313
-rw-r--r--test/rdoc/test_rdoc_ri_driver.rb583
-rw-r--r--test/rdoc/test_rdoc_ri_paths.rb150
-rw-r--r--test/rdoc/test_rdoc_ri_store.rb473
-rw-r--r--test/rdoc/test_rdoc_ruby_lex.rb397
-rw-r--r--test/rdoc/test_rdoc_ruby_token.rb19
-rw-r--r--test/rdoc/test_rdoc_rubygems_hook.rb133
-rw-r--r--test/rdoc/test_rdoc_servlet.rb535
-rw-r--r--test/rdoc/test_rdoc_stats.rb616
-rw-r--r--test/rdoc/test_rdoc_store.rb993
-rw-r--r--test/rdoc/test_rdoc_task.rb21
-rw-r--r--test/rdoc/test_rdoc_text.rb181
-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.rb245
-rw-r--r--test/rdoc/xref_test_case.rb26
-rw-r--r--test/readline/test_readline.rb285
-rw-r--r--test/readline/test_readline_history.rb43
-rw-r--r--test/resolv/test_addr.rb12
-rw-r--r--test/resolv/test_dns.rb43
-rw-r--r--test/rexml/data/testsrc.xml128
-rw-r--r--test/rexml/data/ticket_61.xml8
-rw-r--r--test/rexml/data/tutorial.xml2
-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.rb1
-rw-r--r--test/rexml/test_attributes.rb22
-rw-r--r--test/rexml/test_attributes_mixin.rb3
-rw-r--r--test/rexml/test_changing_encoding.rb1
-rw-r--r--test/rexml/test_comment.rb25
-rw-r--r--test/rexml/test_contrib.rb24
-rw-r--r--test/rexml/test_core.rb16
-rw-r--r--test/rexml/test_doctype.rb3
-rw-r--r--test/rexml/test_document.rb298
-rw-r--r--test/rexml/test_encoding.rb7
-rw-r--r--test/rexml/test_entity.rb54
-rw-r--r--test/rexml/test_jaxen.rb2
-rw-r--r--test/rexml/test_light.rb2
-rw-r--r--test/rexml/test_lightparser.rb4
-rw-r--r--test/rexml/test_listener.rb10
-rw-r--r--test/rexml/test_namespace.rb2
-rw-r--r--test/rexml/test_notationdecl_mixin.rb58
-rw-r--r--test/rexml/test_notationdecl_parsetest.rb23
-rw-r--r--test/rexml/test_order.rb9
-rw-r--r--test/rexml/test_pullparser.rb4
-rw-r--r--test/rexml/test_rexml_issuezilla.rb2
-rw-r--r--test/rexml/test_sax.rb2
-rw-r--r--test/rexml/test_stream.rb23
-rw-r--r--test/rexml/test_text.rb19
-rw-r--r--test/rexml/test_xml_declaration_parent_child.rb (renamed from test/rexml/test_xml_declaration.rb)8
-rw-r--r--test/rexml/test_xpath.rb10
-rw-r--r--test/rexml/test_xpathtext.rb2
-rw-r--r--test/rinda/test_rinda.rb311
-rw-r--r--test/ripper/dummyparser.rb2
-rw-r--r--test/ripper/test_files.rb43
-rw-r--r--test/ripper/test_parser_events.rb74
-rw-r--r--test/ripper/test_ripper.rb2
-rw-r--r--test/ripper/test_scanner_events.rb185
-rw-r--r--test/rss/rss-assertions.rb4
-rw-r--r--test/rss/rss-testcase.rb4
-rw-r--r--test/rss/test_1.0.rb56
-rw-r--r--test/rss/test_2.0.rb56
-rw-r--r--test/rss/test_accessor.rb2
-rw-r--r--test/rss/test_atom.rb26
-rw-r--r--test/rss/test_content.rb2
-rw-r--r--test/rss/test_dublincore.rb24
-rw-r--r--test/rss/test_image.rb2
-rw-r--r--test/rss/test_inherit.rb2
-rw-r--r--test/rss/test_itunes.rb2
-rw-r--r--test/rss/test_maker_0.9.rb2
-rw-r--r--test/rss/test_maker_1.0.rb2
-rw-r--r--test/rss/test_maker_2.0.rb10
-rw-r--r--test/rss/test_maker_atom_entry.rb2
-rw-r--r--test/rss/test_maker_atom_feed.rb2
-rw-r--r--test/rss/test_maker_content.rb2
-rw-r--r--test/rss/test_maker_dc.rb2
-rw-r--r--test/rss/test_maker_image.rb2
-rw-r--r--test/rss/test_maker_itunes.rb2
-rw-r--r--test/rss/test_maker_slash.rb2
-rw-r--r--test/rss/test_maker_sy.rb2
-rw-r--r--test/rss/test_maker_taxo.rb2
-rw-r--r--test/rss/test_maker_trackback.rb2
-rw-r--r--test/rss/test_maker_xml-stylesheet.rb2
-rw-r--r--test/rss/test_parser.rb12
-rw-r--r--test/rss/test_parser_1.0.rb2
-rw-r--r--test/rss/test_parser_2.0.rb2
-rw-r--r--test/rss/test_parser_atom_entry.rb2
-rw-r--r--test/rss/test_parser_atom_feed.rb2
-rw-r--r--test/rss/test_setup_maker_0.9.rb2
-rw-r--r--test/rss/test_setup_maker_1.0.rb2
-rw-r--r--test/rss/test_setup_maker_2.0.rb2
-rw-r--r--test/rss/test_setup_maker_atom_entry.rb2
-rw-r--r--test/rss/test_setup_maker_atom_feed.rb2
-rw-r--r--test/rss/test_setup_maker_itunes.rb2
-rw-r--r--test/rss/test_setup_maker_slash.rb2
-rw-r--r--test/rss/test_slash.rb2
-rw-r--r--test/rss/test_syndication.rb2
-rw-r--r--test/rss/test_taxonomy.rb2
-rw-r--r--test/rss/test_to_s.rb2
-rw-r--r--test/rss/test_trackback.rb2
-rw-r--r--test/rss/test_version.rb2
-rw-r--r--test/rss/test_xml-stylesheet.rb2
-rw-r--r--test/ruby/allpairs.rb1
-rw-r--r--test/ruby/enc/test_emoji.rb6
-rw-r--r--test/ruby/enc/test_euc_jp.rb2
-rw-r--r--test/ruby/enc/test_euc_kr.rb8
-rw-r--r--test/ruby/enc/test_shift_jis.rb2
-rw-r--r--test/ruby/enc/test_utf16.rb10
-rw-r--r--test/ruby/enc/test_utf32.rb2
-rw-r--r--test/ruby/envutil.rb359
-rw-r--r--test/ruby/lbtest.rb11
-rw-r--r--test/ruby/marshaltestlib.rb144
-rw-r--r--test/ruby/memory_status.rb53
-rw-r--r--test/ruby/test_alias.rb110
-rw-r--r--test/ruby/test_argf.rb136
-rw-r--r--test/ruby/test_arity.rb69
-rw-r--r--test/ruby/test_array.rb457
-rw-r--r--test/ruby/test_autoload.rb120
-rw-r--r--test/ruby/test_backtrace.rb244
-rw-r--r--test/ruby/test_basicinstructions.rb19
-rw-r--r--test/ruby/test_beginendblock.rb136
-rw-r--r--test/ruby/test_bignum.rb236
-rw-r--r--test/ruby/test_call.rb15
-rw-r--r--test/ruby/test_case.rb19
-rw-r--r--test/ruby/test_class.rb136
-rw-r--r--test/ruby/test_comparable.rb14
-rw-r--r--test/ruby/test_complex.rb44
-rw-r--r--test/ruby/test_complexrational.rb12
-rw-r--r--test/ruby/test_const.rb18
-rw-r--r--test/ruby/test_continuation.rb19
-rw-r--r--test/ruby/test_defined.rb73
-rw-r--r--test/ruby/test_dir.rb97
-rw-r--r--test/ruby/test_dir_m17n.rb198
-rw-r--r--test/ruby/test_econv.rb51
-rw-r--r--test/ruby/test_encoding.rb20
-rw-r--r--test/ruby/test_enum.rb68
-rw-r--r--test/ruby/test_enumerator.rb258
-rw-r--r--test/ruby/test_env.rb167
-rw-r--r--test/ruby/test_eval.rb247
-rw-r--r--test/ruby/test_exception.rb342
-rw-r--r--test/ruby/test_fiber.rb158
-rw-r--r--test/ruby/test_file.rb285
-rw-r--r--test/ruby/test_file_exhaustive.rb359
-rw-r--r--test/ruby/test_fixnum.rb136
-rw-r--r--test/ruby/test_flip.rb42
-rw-r--r--test/ruby/test_float.rb182
-rw-r--r--test/ruby/test_fnmatch.rb184
-rw-r--r--test/ruby/test_gc.rb225
-rw-r--r--test/ruby/test_hash.rb650
-rw-r--r--test/ruby/test_ifunless.rb14
-rw-r--r--test/ruby/test_integer.rb97
-rw-r--r--test/ruby/test_integer_comb.rb13
-rw-r--r--test/ruby/test_io.rb1909
-rw-r--r--test/ruby/test_io_m17n.rb199
-rw-r--r--test/ruby/test_iseq.rb127
-rw-r--r--test/ruby/test_iterator.rb34
-rw-r--r--test/ruby/test_keyword.rb523
-rw-r--r--test/ruby/test_lambda.rb63
-rw-r--r--test/ruby/test_lazy_enumerator.rb493
-rw-r--r--test/ruby/test_literal.rb144
-rw-r--r--test/ruby/test_m17n.rb307
-rw-r--r--test/ruby/test_m17n_comb.rb324
-rw-r--r--test/ruby/test_marshal.rb202
-rw-r--r--test/ruby/test_math.rb11
-rw-r--r--test/ruby/test_method.rb335
-rw-r--r--test/ruby/test_module.rb1003
-rw-r--r--test/ruby/test_not.rb12
-rw-r--r--test/ruby/test_notimp.rb26
-rw-r--r--test/ruby/test_numeric.rb173
-rw-r--r--test/ruby/test_object.rb414
-rw-r--r--test/ruby/test_objectspace.rb41
-rw-r--r--test/ruby/test_optimization.rb40
-rw-r--r--test/ruby/test_pack.rb108
-rw-r--r--test/ruby/test_parse.rb169
-rw-r--r--test/ruby/test_pipe.rb13
-rw-r--r--test/ruby/test_primitive.rb4
-rw-r--r--test/ruby/test_proc.rb514
-rw-r--r--test/ruby/test_process.rb673
-rw-r--r--test/ruby/test_rand.rb58
-rw-r--r--test/ruby/test_range.rb296
-rw-r--r--test/ruby/test_rational.rb46
-rw-r--r--test/ruby/test_refinement.rb1175
-rw-r--r--test/ruby/test_regexp.rb272
-rw-r--r--test/ruby/test_require.rb587
-rw-r--r--test/ruby/test_rubyoptions.rb304
-rw-r--r--test/ruby/test_rubyvm.rb16
-rw-r--r--test/ruby/test_settracefunc.rb1052
-rw-r--r--test/ruby/test_signal.rb185
-rw-r--r--test/ruby/test_sleep.rb11
-rw-r--r--test/ruby/test_sprintf.rb56
-rw-r--r--test/ruby/test_sprintf_comb.rb46
-rw-r--r--test/ruby/test_string.rb404
-rw-r--r--test/ruby/test_stringchar.rb40
-rw-r--r--test/ruby/test_struct.rb201
-rw-r--r--test/ruby/test_super.rb335
-rw-r--r--test/ruby/test_symbol.rb70
-rw-r--r--test/ruby/test_syntax.rb395
-rw-r--r--test/ruby/test_system.rb64
-rw-r--r--test/ruby/test_thread.rb830
-rw-r--r--test/ruby/test_threadgroup.rb55
-rw-r--r--test/ruby/test_time.rb532
-rw-r--r--test/ruby/test_time_tz.rb176
-rw-r--r--test/ruby/test_transcode.rb154
-rw-r--r--test/ruby/test_unicode_escape.rb4
-rw-r--r--test/ruby/test_variable.rb12
-rw-r--r--test/ruby/test_weakmap.rb134
-rw-r--r--test/ruby/test_whileuntil.rb11
-rw-r--r--test/ruby/test_yield.rb11
-rw-r--r--test/ruby/ut_eof.rb4
-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/ca_cert.pem23
-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/null-type.gemspec.rzbin554 -> 553 bytes-rw-r--r--test/rubygems/encrypted_private_key.pem30
-rw-r--r--test/rubygems/expired_cert.pem18
-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/insure_session.rb43
-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/standarderror/rubygems_plugin.rb2
-rw-r--r--test/rubygems/private_key.pem50
-rw-r--r--test/rubygems/public_cert.pem34
-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.rb2
-rw-r--r--test/rubygems/specifications/bar-0.0.2.gemspec9
-rw-r--r--test/rubygems/specifications/foo-0.0.1.gemspecbin269 -> 0 bytes-rw-r--r--test/rubygems/test_bundled_ca.rb60
-rw-r--r--test/rubygems/test_config.rb10
-rw-r--r--test/rubygems/test_deprecate.rb76
-rw-r--r--test/rubygems/test_gem.rb1176
-rw-r--r--test/rubygems/test_gem_available_set.rb125
-rw-r--r--test/rubygems/test_gem_builder.rb44
-rw-r--r--test/rubygems/test_gem_command.rb10
-rw-r--r--test/rubygems/test_gem_command_manager.rb106
-rw-r--r--test/rubygems/test_gem_commands_build_command.rb32
-rw-r--r--test/rubygems/test_gem_commands_cert_command.rb634
-rw-r--r--test/rubygems/test_gem_commands_check_command.rb50
-rw-r--r--test/rubygems/test_gem_commands_cleanup_command.rb92
-rw-r--r--test/rubygems/test_gem_commands_contents_command.rb51
-rw-r--r--test/rubygems/test_gem_commands_dependency_command.rb57
-rw-r--r--test/rubygems/test_gem_commands_environment_command.rb12
-rw-r--r--test/rubygems/test_gem_commands_fetch_command.rb104
-rw-r--r--test/rubygems/test_gem_commands_generate_index_command.rb85
-rw-r--r--test/rubygems/test_gem_commands_help_command.rb15
-rw-r--r--test/rubygems/test_gem_commands_install_command.rb808
-rw-r--r--test/rubygems/test_gem_commands_list_command.rb6
-rw-r--r--test/rubygems/test_gem_commands_mirror.rb32
-rw-r--r--test/rubygems/test_gem_commands_outdated_command.rb19
-rw-r--r--test/rubygems/test_gem_commands_owner_command.rb73
-rw-r--r--test/rubygems/test_gem_commands_pristine_command.rb223
-rw-r--r--test/rubygems/test_gem_commands_push_command.rb199
-rw-r--r--test/rubygems/test_gem_commands_query_command.rb367
-rw-r--r--test/rubygems/test_gem_commands_search_command.rb17
-rw-r--r--test/rubygems/test_gem_commands_setup_command.rb129
-rw-r--r--test/rubygems/test_gem_commands_sources_command.rb122
-rw-r--r--test/rubygems/test_gem_commands_specification_command.rb103
-rw-r--r--test/rubygems/test_gem_commands_stale_command.rb4
-rw-r--r--test/rubygems/test_gem_commands_uninstall_command.rb158
-rw-r--r--test/rubygems/test_gem_commands_unpack_command.rb52
-rw-r--r--test/rubygems/test_gem_commands_update_command.rb381
-rw-r--r--test/rubygems/test_gem_commands_which_command.rb14
-rw-r--r--test/rubygems/test_gem_commands_yank_command.rb97
-rw-r--r--test/rubygems/test_gem_config_file.rb218
-rw-r--r--test/rubygems/test_gem_dependency.rb46
-rw-r--r--test/rubygems/test_gem_dependency_installer.rb499
-rw-r--r--test/rubygems/test_gem_dependency_list.rb43
-rw-r--r--test/rubygems/test_gem_dependency_resolution_error.rb28
-rw-r--r--test/rubygems/test_gem_doc_manager.rb32
-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.rb22
-rw-r--r--test/rubygems/test_gem_ext_ext_conf_builder.rb154
-rw-r--r--test/rubygems/test_gem_ext_rake_builder.rb24
-rw-r--r--test/rubygems/test_gem_format.rb88
-rw-r--r--test/rubygems/test_gem_gem_path_searcher.rb94
-rw-r--r--test/rubygems/test_gem_gem_runner.rb38
-rw-r--r--test/rubygems/test_gem_gemcutter_utilities.rb82
-rw-r--r--test/rubygems/test_gem_impossible_dependencies_error.rb45
-rw-r--r--test/rubygems/test_gem_indexer.rb302
-rw-r--r--test/rubygems/test_gem_install_update_options.rb89
-rw-r--r--test/rubygems/test_gem_installer.rb882
-rw-r--r--test/rubygems/test_gem_local_remote_options.rb10
-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.rb14
-rw-r--r--test/rubygems/test_gem_package_tar_input.rb129
-rw-r--r--test/rubygems/test_gem_package_tar_output.rb101
-rw-r--r--test/rubygems/test_gem_package_tar_reader.rb41
-rw-r--r--test/rubygems/test_gem_package_tar_reader_entry.rb2
-rw-r--r--test/rubygems/test_gem_package_tar_writer.rb127
-rw-r--r--test/rubygems/test_gem_package_task.rb25
-rw-r--r--test/rubygems/test_gem_path_support.rb39
-rw-r--r--test/rubygems/test_gem_platform.rb110
-rw-r--r--test/rubygems/test_gem_rdoc.rb269
-rw-r--r--test/rubygems/test_gem_remote_fetcher.rb509
-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.rb96
-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.rb292
-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.rb177
-rw-r--r--test/rubygems/test_gem_silent_ui.rb4
-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_index.rb250
-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.rb454
-rw-r--r--test/rubygems/test_gem_specification.rb1460
-rw-r--r--test/rubygems/test_gem_stub_specification.rb143
-rw-r--r--test/rubygems/test_gem_uninstaller.rb253
-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.rb54
-rw-r--r--test/rubygems/test_gem_version.rb70
-rw-r--r--test/rubygems/test_gem_version_option.rb64
-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.rb26
-rw-r--r--test/sdbm/test_sdbm.rb67
-rw-r--r--test/shell/test_command_processor.rb69
-rw-r--r--test/socket/test_addrinfo.rb27
-rw-r--r--test/socket/test_nonblock.rb29
-rw-r--r--test/socket/test_socket.rb217
-rw-r--r--test/socket/test_sockopt.rb18
-rw-r--r--test/socket/test_tcp.rb38
-rw-r--r--test/socket/test_udp.rb33
-rw-r--r--test/socket/test_unix.rb143
-rw-r--r--test/stringio/test_stringio.rb95
-rw-r--r--test/strscan/test_stringscanner.rb26
-rw-r--r--test/syck/test_array.rb18
-rw-r--r--test/syck/test_boolean.rb37
-rw-r--r--test/syck/test_class.rb27
-rw-r--r--test/syck/test_engine_manager.rb3
-rw-r--r--test/syck/test_exception.rb46
-rw-r--r--test/syck/test_hash.rb29
-rw-r--r--test/syck/test_null.rb20
-rw-r--r--test/syck/test_omap.rb56
-rw-r--r--test/syck/test_set.rb31
-rw-r--r--test/syck/test_string.rb45
-rw-r--r--test/syck/test_struct.rb42
-rw-r--r--test/syck/test_symbol.rb22
-rw-r--r--test/syck/test_time.rb24
-rw-r--r--test/syck/test_yaml.rb1413
-rw-r--r--test/syck/test_yaml_properties.rb64
-rw-r--r--test/syck/test_yamlstore.rb (renamed from test/psych/test_yamlstore.rb)26
-rw-r--r--test/syslog/test_syslog_logger.rb572
-rw-r--r--test/test_abbrev.rb54
-rw-r--r--test/test_delegate.rb111
-rw-r--r--test/test_find.rb34
-rw-r--r--test/test_mathn.rb110
-rw-r--r--test/test_open3.rb1
-rw-r--r--test/test_pp.rb5
-rw-r--r--test/test_prime.rb2
-rw-r--r--test/test_pstore.rb26
-rw-r--r--test/test_pty.rb20
-rw-r--r--test/test_rbconfig.rb53
-rw-r--r--test/test_securerandom.rb12
-rw-r--r--test/test_set.rb721
-rw-r--r--test/test_shellwords.rb5
-rw-r--r--test/test_tempfile.rb39
-rw-r--r--test/test_time.rb9
-rw-r--r--test/test_timeout.rb71
-rw-r--r--test/test_tmpdir.rb33
-rw-r--r--test/test_tracer.rb4
-rw-r--r--test/test_tsort.rb56
-rw-r--r--test/test_weakref.rb64
-rw-r--r--test/testunit/test4test_redefinition.rb11
-rw-r--r--test/testunit/test4test_sorting.rb15
-rw-r--r--test/testunit/test_hideskip.rb22
-rw-r--r--test/testunit/test_parallel.rb24
-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_forth.rb15
-rw-r--r--test/thread/test_cv.rb212
-rw-r--r--test/thread/test_queue.rb204
-rw-r--r--test/thread/test_sync.rb57
-rw-r--r--test/uri/test_common.rb59
-rw-r--r--test/uri/test_generic.rb114
-rw-r--r--test/uri/test_mailto.rb10
-rw-r--r--test/webrick/test_cgi.rb12
-rw-r--r--test/webrick/test_filehandler.rb8
-rw-r--r--test/webrick/test_htmlutils.rb20
-rw-r--r--test/webrick/test_httpauth.rb166
-rw-r--r--test/webrick/test_httpproxy.rb2
-rw-r--r--test/webrick/test_httpresponse.rb141
-rw-r--r--test/webrick/test_httpserver.rb72
-rw-r--r--test/webrick/test_httputils.rb4
-rw-r--r--test/webrick/test_server.rb25
-rw-r--r--test/webrick/utils.rb14
-rw-r--r--test/win32ole/test_err_in_callback.rb29
-rw-r--r--test/win32ole/test_thread.rb25
-rw-r--r--test/win32ole/test_win32ole.rb9
-rw-r--r--test/win32ole/test_win32ole_event.rb12
-rw-r--r--test/win32ole/test_win32ole_type.rb2
-rw-r--r--test/win32ole/test_win32ole_variant.rb37
-rw-r--r--test/win32ole/test_win32ole_variant_outarg.rb13
-rw-r--r--test/xmlrpc/data/blog.xml18
-rw-r--r--test/xmlrpc/test_client.rb316
-rw-r--r--test/xmlrpc/test_cookie.rb13
-rw-r--r--test/xmlrpc/test_datetime.rb2
-rw-r--r--test/xmlrpc/test_features.rb6
-rw-r--r--test/xmlrpc/test_marshal.rb2
-rw-r--r--test/xmlrpc/test_parser.rb2
-rw-r--r--test/xmlrpc/test_webrick_server.rb14
-rw-r--r--test/xmlrpc/webrick_testing.rb25
-rw-r--r--test/zlib/test_zlib.rb908
-rw-r--r--thread.c2882
-rw-r--r--thread_native.h23
-rw-r--r--thread_pthread.c729
-rw-r--r--thread_pthread.h19
-rw-r--r--thread_win32.c133
-rw-r--r--thread_win32.h11
-rw-r--r--time.c842
-rw-r--r--timev.h21
-rwxr-xr-x[-rw-r--r--]tool/asm_parse.rb0
-rwxr-xr-xtool/bisect.sh42
-rwxr-xr-xtool/change_maker.rb8
-rwxr-xr-x[-rw-r--r--]tool/compile_prelude.rb6
-rwxr-xr-xtool/config.guess1501
-rwxr-xr-xtool/config.sub1705
-rw-r--r--tool/config_files.rb8
-rwxr-xr-xtool/enc-unicode.rb90
-rwxr-xr-x[-rw-r--r--]tool/eval.rb0
-rwxr-xr-xtool/file2lastrev.rb105
-rwxr-xr-xtool/gen_dummy_probes.rb28
-rwxr-xr-xtool/gen_ruby_tapset.rb105
-rwxr-xr-x[-rw-r--r--]tool/generic_erb.rb12
-rwxr-xr-xtool/get-config_files7
-rwxr-xr-xtool/id2token.rb24
-rwxr-xr-xtool/ifchange17
-rw-r--r--tool/install-sh2
-rwxr-xr-xtool/instruction.rb106
-rwxr-xr-xtool/make-snapshot82
-rwxr-xr-xtool/merger.rb112
-rwxr-xr-xtool/mkconfig.rb47
-rwxr-xr-xtool/mkrunnable.rb116
-rwxr-xr-x[-rw-r--r--]tool/parse.rb0
-rw-r--r--tool/probes_to_wiki.rb16
-rwxr-xr-xtool/rbinstall.rb305
-rwxr-xr-xtool/rbuninstall.rb67
-rwxr-xr-xtool/rubytest.rb6
-rwxr-xr-xtool/runruby.rb12
-rwxr-xr-xtool/strip-rdoc.rb1
-rwxr-xr-x[-rw-r--r--]tool/transcode-tblgen.rb108
-rwxr-xr-xtool/update-deps258
-rw-r--r--tool/vcs.rb114
-rw-r--r--tool/vpath.rb82
-rwxr-xr-x[-rw-r--r--]tool/vtlh.rb0
-rw-r--r--transcode.c249
-rw-r--r--transcode_data.h16
-rw-r--r--util.c162
-rw-r--r--variable.c879
-rw-r--r--version.c76
-rw-r--r--version.h16
-rw-r--r--vm.c1636
-rw-r--r--vm_backtrace.c1382
-rw-r--r--vm_core.h603
-rw-r--r--vm_dump.c518
-rw-r--r--vm_eval.c1053
-rw-r--r--vm_exec.c62
-rw-r--r--vm_exec.h42
-rw-r--r--vm_insnhelper.c2853
-rw-r--r--vm_insnhelper.h153
-rw-r--r--vm_method.c943
-rw-r--r--vm_opts.h9
-rw-r--r--vm_trace.c1538
-rw-r--r--vsnprintf.c120
-rw-r--r--win32/Makefile.sub208
-rw-r--r--win32/README.win3222
-rwxr-xr-xwin32/configure.bat63
-rw-r--r--win32/dir.h15
-rw-r--r--win32/file.c261
-rwxr-xr-xwin32/ifchange.bat24
-rwxr-xr-xwin32/mkexports.rb18
-rwxr-xr-xwin32/rm.bat4
-rw-r--r--win32/rtname.cmd18
-rw-r--r--win32/setup.mak112
-rw-r--r--win32/win32.c2345
2525 files changed, 154868 insertions, 388305 deletions
diff --git a/.document b/.document
index 9a5067bc52..8a05d61beb 100644
--- a/.document
+++ b/.document
@@ -10,19 +10,13 @@
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
+doc/*.rdoc
diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index 67abf4b978..0000000000
--- a/.editorconfig
+++ /dev/null
@@ -1,16 +0,0 @@
-root = true
-
-[*]
-end_of_line = lf
-insert_final_newline = true
-trim_trailing_whitespace = true
-tab_width = 8
-indent_style = tab
-indent_size = 4
-
-[**.bat]
-end_of_line = crlf
-
-[**.rb]
-indent_style = space
-indent_size = 2
diff --git a/.gdbinit b/.gdbinit
index 17be7d8779..2a38da8892 100644
--- a/.gdbinit
+++ b/.gdbinit
@@ -1,34 +1,80 @@
-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
+define rp
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
+ if $id == '!' || $id == '+' || $id == '-' || $id == '*' || $id == '/' || $id == '%' || $id == '<' || $id == '>' || $id == '`'
+ printf "SYMBOL(:%c)\n", $id
+ else
+ if $id == idDot2
+ echo SYMBOL(:..)\n
+ else
+ if $id == idDot3
+ echo SYMBOL(:...)\n
+ else
+ if $id == idUPlus
+ echo SYMBOL(:+@)\n
+ else
+ if $id == idUMinus
+ echo SYMBOL(:-@)\n
+ else
+ if $id == idPow
+ echo SYMBOL(:**)\n
+ else
+ if $id == idCmp
+ echo SYMBOL(:<=>)\n
+ else
+ if $id == idLTLT
+ echo SYMBOL(:<<)\n
+ else
+ if $id == idLE
+ echo SYMBOL(:<=)\n
+ else
+ if $id == idGE
+ echo SYMBOL(:>=)\n
+ else
+ if $id == idEq
+ echo SYMBOL(:==)\n
+ else
+ if $id == idEqq
+ echo SYMBOL(:===)\n
+ else
+ if $id == idNeq
+ echo SYMBOL(:!=)\n
+ else
+ if $id == idEqTilde
+ echo SYMBOL(:=~)\n
+ else
+ if $id == idNeqTilde
+ echo SYMBOL(:!~)\n
+ else
+ if $id == idAREF
+ echo SYMBOL(:[])\n
+ else
+ if $id == idASET
+ echo SYMBOL(:[]=)\n
+ else
+ printf "SYMBOL(%ld)\n", $id
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
else
if ($arg0) == RUBY_Qfalse
echo false\n
@@ -43,52 +89,77 @@ define rp
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
+ echo immediate\n
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
+ printf "T_NONE: "
print (struct RBasic *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_NIL
- printf "%sT_NIL%s: ", $color_type, $color_end
+ printf "T_NIL: "
print (struct RBasic *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_OBJECT
- printf "%sT_OBJECT%s: ", $color_type, $color_end
+ printf "T_OBJECT: "
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
+ printf "T_CLASS%s: ", ($flags & RUBY_FL_SINGLETON) ? "*" : ""
+ print (struct RClass *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_ICLASS
- printf "%sT_ICLASS%s: ", $color_type, $color_end
- rp_class $arg0
+ printf "T_ICLASS: "
+ print (struct RClass *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_MODULE
- printf "%sT_MODULE%s: ", $color_type, $color_end
- rp_class $arg0
+ printf "T_MODULE: "
+ print (struct RClass *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_FLOAT
- printf "%sT_FLOAT%s: %.16g ", $color_type, $color_end, (((struct RFloat*)($arg0))->float_value)
+ printf "T_FLOAT: %.16g ", (((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
+ printf "T_STRING: "
+ 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)
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
+ printf "T_REGEXP: "
set print address off
output (char *)(($rsflags & RUBY_FL_USER1) ? \
((struct RString*)$regsrc)->as.heap.ptr : \
@@ -112,7 +183,7 @@ define rp
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 "T_ARRAY: len=%ld ", $len
printf "(embed) "
if ($len == 0)
printf "{(empty)} "
@@ -122,7 +193,7 @@ define rp
end
else
set $len = ((struct RArray*)($arg0))->as.heap.len
- printf "%sT_ARRAY%s: len=%ld ", $color_type, $color_end, $len
+ printf "T_ARRAY: len=%ld ", $len
if ($flags & RUBY_FL_USER2)
printf "(shared) shared="
output/x ((struct RArray*)($arg0))->as.heap.aux.shared
@@ -140,18 +211,18 @@ define rp
print (struct RArray *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_FIXNUM
- printf "%sT_FIXNUM%s: ", $color_type, $color_end
+ printf "T_FIXNUM: "
print (struct RBasic *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_HASH
- printf "%sT_HASH%s: ", $color_type, $color_end,
+ printf "T_HASH: ",
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, \
+ printf "T_STRUCT: len=%ld ", \
(($flags & (RUBY_FL_USER1|RUBY_FL_USER2)) ? \
($flags & (RUBY_FL_USER1|RUBY_FL_USER2)) >> (RUBY_FL_USHIFT+1) : \
((struct RStruct *)($arg0))->as.heap.len)
@@ -161,7 +232,7 @@ define rp
((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, \
+ printf "T_BIGNUM: sign=%d len=%ld ", \
(($flags & RUBY_FL_USER1) != 0), \
(($flags & RUBY_FL_USER2) ? \
($flags & (RUBY_FL_USER5|RUBY_FL_USER4|RUBY_FL_USER3)) >> (RUBY_FL_USHIFT+3) : \
@@ -175,59 +246,59 @@ define rp
((struct RBignum*)($arg0))->as.heap.digits)
else
if ($flags & RUBY_T_MASK) == RUBY_T_RATIONAL
- printf "%sT_RATIONAL%s: ", $color_type, $color_end
+ printf "T_RATIONAL: "
print (struct RRational *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_COMPLEX
- printf "%sT_COMPLEX%s: ", $color_type, $color_end
+ printf "T_COMPLEX: "
print (struct RComplex *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_FILE
- printf "%sT_FILE%s: ", $color_type, $color_end
+ printf "T_FILE: "
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
+ printf "T_TRUE: "
print (struct RBasic *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_FALSE
- printf "%sT_FALSE%s: ", $color_type, $color_end
+ printf "T_FALSE: "
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
+ printf "T_DATA(%s): ", ((struct RTypedData *)($arg0))->type->wrap_struct_name
print (struct RTypedData *)($arg0)
else
- printf "%sT_DATA%s: ", $color_type, $color_end
+ printf "T_DATA: "
print (struct RData *)($arg0)
end
else
if ($flags & RUBY_T_MASK) == RUBY_T_MATCH
- printf "%sT_MATCH%s: ", $color_type, $color_end
+ printf "T_MATCH: "
print (struct RMatch *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_SYMBOL
- printf "%sT_SYMBOL%s: ", $color_type, $color_end
+ printf "T_SYMBOL: "
print (struct RBasic *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_UNDEF
- printf "%sT_UNDEF%s: ", $color_type, $color_end
+ printf "T_UNDEF: "
print (struct RBasic *)($arg0)
else
if ($flags & RUBY_T_MASK) == RUBY_T_NODE
- printf "%sT_NODE%s(", $color_type, $color_end
+ printf "T_NODE("
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
+ printf "T_ZOMBIE: "
print (struct RData *)($arg0)
else
- printf "%sunknown%s: ", $color_type, $color_end
+ printf "unknown: "
print (struct RBasic *)($arg0)
end
end
@@ -266,172 +337,6 @@ 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
@@ -456,257 +361,257 @@ end
# Print members of ruby node.
define nd_head
- printf "%su1.node%s: ", $color_highlite, $color_end
+ printf "u1.node: "
rp ($arg0).u1.node
end
define nd_alen
- printf "%su2.argc%s: ", $color_highlite, $color_end
+ printf "u2.argc: "
p ($arg0).u2.argc
end
define nd_next
- printf "%su3.node%s: ", $color_highlite, $color_end
+ printf "u3.node: "
rp ($arg0).u3.node
end
define nd_cond
- printf "%su1.node%s: ", $color_highlite, $color_end
+ printf "u1.node: "
rp ($arg0).u1.node
end
define nd_body
- printf "%su2.node%s: ", $color_highlite, $color_end
+ printf "u2.node: "
rp ($arg0).u2.node
end
define nd_else
- printf "%su3.node%s: ", $color_highlite, $color_end
+ printf "u3.node: "
rp ($arg0).u3.node
end
define nd_orig
- printf "%su3.value%s: ", $color_highlite, $color_end
+ printf "u3.value: "
rp ($arg0).u3.value
end
define nd_resq
- printf "%su2.node%s: ", $color_highlite, $color_end
+ printf "u2.node: "
rp ($arg0).u2.node
end
define nd_ensr
- printf "%su3.node%s: ", $color_highlite, $color_end
+ printf "u3.node: "
rp ($arg0).u3.node
end
define nd_1st
- printf "%su1.node%s: ", $color_highlite, $color_end
+ printf "u1.node: "
rp ($arg0).u1.node
end
define nd_2nd
- printf "%su2.node%s: ", $color_highlite, $color_end
+ printf "u2.node: "
rp ($arg0).u2.node
end
define nd_stts
- printf "%su1.node%s: ", $color_highlite, $color_end
+ printf "u1.node: "
rp ($arg0).u1.node
end
define nd_entry
- printf "%su3.entry%s: ", $color_highlite, $color_end
+ printf "u3.entry: "
p ($arg0).u3.entry
end
define nd_vid
- printf "%su1.id%s: ", $color_highlite, $color_end
+ printf "u1.id: "
p ($arg0).u1.id
end
define nd_cflag
- printf "%su2.id%s: ", $color_highlite, $color_end
+ printf "u2.id: "
p ($arg0).u2.id
end
define nd_cval
- printf "%su3.value%s: ", $color_highlite, $color_end
+ printf "u3.value: "
rp ($arg0).u3.value
end
define nd_cnt
- printf "%su3.cnt%s: ", $color_highlite, $color_end
+ printf "u3.cnt: "
p ($arg0).u3.cnt
end
define nd_tbl
- printf "%su1.tbl%s: ", $color_highlite, $color_end
+ printf "u1.tbl: "
p ($arg0).u1.tbl
end
define nd_var
- printf "%su1.node%s: ", $color_highlite, $color_end
+ printf "u1.node: "
rp ($arg0).u1.node
end
define nd_ibdy
- printf "%su2.node%s: ", $color_highlite, $color_end
+ printf "u2.node: "
rp ($arg0).u2.node
end
define nd_iter
- printf "%su3.node%s: ", $color_highlite, $color_end
+ printf "u3.node: "
rp ($arg0).u3.node
end
define nd_value
- printf "%su2.node%s: ", $color_highlite, $color_end
+ printf "u2.node: "
rp ($arg0).u2.node
end
define nd_aid
- printf "%su3.id%s: ", $color_highlite, $color_end
+ printf "u3.id: "
p ($arg0).u3.id
end
define nd_lit
- printf "%su1.value%s: ", $color_highlite, $color_end
+ printf "u1.value: "
rp ($arg0).u1.value
end
define nd_frml
- printf "%su1.node%s: ", $color_highlite, $color_end
+ printf "u1.node: "
rp ($arg0).u1.node
end
define nd_rest
- printf "%su2.argc%s: ", $color_highlite, $color_end
+ printf "u2.argc: "
p ($arg0).u2.argc
end
define nd_opt
- printf "%su1.node%s: ", $color_highlite, $color_end
+ printf "u1.node: "
rp ($arg0).u1.node
end
define nd_recv
- printf "%su1.node%s: ", $color_highlite, $color_end
+ printf "u1.node: "
rp ($arg0).u1.node
end
define nd_mid
- printf "%su2.id%s: ", $color_highlite, $color_end
+ printf "u2.id: "
p ($arg0).u2.id
end
define nd_args
- printf "%su3.node%s: ", $color_highlite, $color_end
+ printf "u3.node: "
rp ($arg0).u3.node
end
define nd_noex
- printf "%su1.id%s: ", $color_highlite, $color_end
+ printf "u1.id: "
p ($arg0).u1.id
end
define nd_defn
- printf "%su3.node%s: ", $color_highlite, $color_end
+ printf "u3.node: "
rp ($arg0).u3.node
end
define nd_old
- printf "%su1.id%s: ", $color_highlite, $color_end
+ printf "u1.id: "
p ($arg0).u1.id
end
define nd_new
- printf "%su2.id%s: ", $color_highlite, $color_end
+ printf "u2.id: "
p ($arg0).u2.id
end
define nd_cfnc
- printf "%su1.cfunc%s: ", $color_highlite, $color_end
+ printf "u1.cfunc: "
p ($arg0).u1.cfunc
end
define nd_argc
- printf "%su2.argc%s: ", $color_highlite, $color_end
+ printf "u2.argc: "
p ($arg0).u2.argc
end
define nd_cname
- printf "%su1.id%s: ", $color_highlite, $color_end
+ printf "u1.id: "
p ($arg0).u1.id
end
define nd_super
- printf "%su3.node%s: ", $color_highlite, $color_end
+ printf "u3.node: "
rp ($arg0).u3.node
end
define nd_modl
- printf "%su1.id%s: ", $color_highlite, $color_end
+ printf "u1.id: "
p ($arg0).u1.id
end
define nd_clss
- printf "%su1.value%s: ", $color_highlite, $color_end
+ printf "u1.value: "
rp ($arg0).u1.value
end
define nd_beg
- printf "%su1.node%s: ", $color_highlite, $color_end
+ printf "u1.node: "
rp ($arg0).u1.node
end
define nd_end
- printf "%su2.node%s: ", $color_highlite, $color_end
+ printf "u2.node: "
rp ($arg0).u2.node
end
define nd_state
- printf "%su3.state%s: ", $color_highlite, $color_end
+ printf "u3.state: "
p ($arg0).u3.state
end
define nd_rval
- printf "%su2.value%s: ", $color_highlite, $color_end
+ printf "u2.value: "
rp ($arg0).u2.value
end
define nd_nth
- printf "%su2.argc%s: ", $color_highlite, $color_end
+ printf "u2.argc: "
p ($arg0).u2.argc
end
define nd_tag
- printf "%su1.id%s: ", $color_highlite, $color_end
+ printf "u1.id: "
p ($arg0).u1.id
end
define nd_tval
- printf "%su2.value%s: ", $color_highlite, $color_end
+ printf "u2.value: "
rp ($arg0).u2.value
end
@@ -720,18 +625,18 @@ define rb_numtable_entry
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 = $rb_numtable_tbl->bins
+ while $rb_numtable_p && $rb_numtable_p < $rb_numtable_tbl->bins+$rb_numtable_tbl->num_entries
+ if (st_data_t)$rb_numtable_p[0] == $rb_numtable_id
+ set $rb_numtable_key = (st_data_t)$rb_numtable_p[0]
+ set $rb_numtable_rec = (st_data_t)$rb_numtable_p[1]
set $rb_numtable_p = 0
else
- set $rb_numtable_p = $rb_numtable_p + 1
+ set $rb_numtable_p = $rb_numtable_p + 2
end
end
else
- set $rb_numtable_p = $rb_numtable_tbl->as.big.bins[$rb_numtable_id % $rb_numtable_tbl->num_bins]
+ set $rb_numtable_p = $rb_numtable_tbl->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
@@ -745,9 +650,12 @@ define rb_numtable_entry
end
define rb_id2name
- ruby_gdb_init
- printf "%sID%s: ", $color_type, $color_end
- rp_id $arg0
+ rb_numtable_entry global_symbols.id_str (ID)$arg0
+ if $rb_numtable_rec
+ rp $rb_numtable_rec
+ else
+ echo undef\n
+ end
end
document rb_id2name
Print the name of id
@@ -758,7 +666,7 @@ define rb_method_entry
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
+ rb_numtable_entry $rb_method_entry_klass->m_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
@@ -776,25 +684,9 @@ document rb_method_entry
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.
+ call classname($arg0)
+ rb_p $
+ print *(struct RClass*)($arg0)
end
define rb_backtrace
@@ -802,7 +694,7 @@ define rb_backtrace
end
define iseq
- if ruby_dummy_gdb_enums.special_consts
+ if dummy_gdb_enums.special_consts
end
if ($arg0)->type == ISEQ_ELEMENT_NONE
echo [none]\n
@@ -839,8 +731,8 @@ define rb_ps_vm
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
+ set $ps_threads_key = (st_data_t)$ps_threads->bins[$ps_threads_i * 2]
+ set $ps_threads_val = (st_data_t)$ps_threads->bins[$ps_threads_i * 2 + 1]
rb_ps_thread $ps_threads_key $ps_threads_val
set $ps_threads_i = $ps_threads_i + 1
end
@@ -863,20 +755,3 @@ define rb_ps_thread
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
index dee365b3c6..57557c9c2e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,9 +2,7 @@
*.a
*.bak
*.dSYM
-*.dmyh
*.dylib
-*.elc
*.inc
*.log
*.o
@@ -23,7 +21,6 @@
.ppack
.svn
Makefile
-Makefile.old
extconf.h
y.output
y.tab.c
@@ -37,7 +34,6 @@ y.tab.c
/ChangeLog.pre1_1
/Doxyfile
/GNUmakefile
-/GNUmakefile.old
/README.atheos
/README.fat-patch
/README.v6
@@ -55,10 +51,11 @@ y.tab.c
/configure
/doc/capi
/enc.mk
+/enc/trans/*.c
/encdb.h
/exts.mk
/goruby
-/id.[ch]
+/id.h
/largefile.h
/lex.c
/libruby*.*
@@ -75,7 +72,6 @@ y.tab.c
/ppack
/prelude.c
/preview
-/probes.h
/rbconfig.rb
/rename2.h
/repack
@@ -84,12 +80,10 @@ y.tab.c
/rubicon
/ruby
/ruby-man.rd.gz
-/sizes.c
/test.rb
/tmp
/transdb.h
/uncommon.mk
-/verconf.h
/web
/yasmdata.rb
@@ -102,12 +96,17 @@ y.tab.c
# /ext/
/ext/extinit.c
+# /ext/dl/
+/ext/dl/*.func
+
# /ext/dl/callback/
+/ext/dl/callback/*.func
/ext/dl/callback/callback-*.c
/ext/dl/callback/callback.c
-# /ext/rbconfig/
-/ext/rbconfig/sizeof/sizes.c
+# /ext/iconv/
+/ext/iconv/config.charset
+/ext/iconv/iconv.rb
# /ext/ripper/
/ext/ripper/eventids1.c
@@ -128,10 +127,5 @@ y.tab.c
/spec/mspec
/spec/rubyspec
-# /tool/
-/tool/config.guess
-/tool/config.sub
-
# /win32/
/win32/*.ico
-/win32/.time
diff --git a/.travis.yml b/.travis.yml
index 8db00587d6..286342c1cc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,86 +1,8 @@
-# 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.
+# no installation...
+before_script: autoconf
+script: "./configure && make all test"
-# 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
index a009caefea..82725534fa 100644
--- a/BSDL
+++ b/BSDL
@@ -1,4 +1,4 @@
-Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
+Copyright (C) 1993-2010 Yukihiro Matsumoto. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
diff --git a/COPYING.ja b/COPYING.ja
index e50d01c8d1..5b5b91c149 100644
--- a/COPYING.ja
+++ b/COPYING.ja
@@ -1,51 +1,51 @@
-本プログラムはフリーソフトウェアです.2-clause BSDL
-または以下に示す条件で本プログラムを再配布できます
-2-clause BSDLについてはBSDLファイルを参照して下さい.
+$BK\%W%m%0%i%`$O%U%j!<%=%U%H%&%'%"$G$9!%(B2-clause BSDL
+$B$^$?$O0J2<$K<($9>r7o$GK\%W%m%0%i%`$r:FG[I[$G$-$^$9(B
+2-clause BSDL$B$K$D$$$F$O(BBSDL$B%U%!%$%k$r;2>H$7$F2<$5$$!%(B
- 1. 複製は制限なく自由です.
+ 1. $BJ#@=$O@)8B$J$/<+M3$G$9!%(B
- 2. 以下の条件のいずれかを満たす時に本プログラムのソースを
- 自由に変更できます.
+ 2. $B0J2<$N>r7o$N$$$:$l$+$rK~$?$9;~$KK\%W%m%0%i%`$N%=!<%9$r(B
+ $B<+M3$KJQ99$G$-$^$9!%(B
- (a) ネットニューズにポストしたり,作者に変更を送付する
- などの方法で,変更を公開する.
+ (a) $B%M%C%H%K%e!<%:$K%]%9%H$7$?$j!$:n<T$KJQ99$rAwIU$9$k(B
+ $B$J$I$NJ}K!$G!$JQ99$r8x3+$9$k!%(B
- (b) 変更した本プログラムを自分の所属する組織内部だけで
- 使う.
+ (b) $BJQ99$7$?K\%W%m%0%i%`$r<+J,$N=jB0$9$kAH?%FbIt$@$1$G(B
+ $B;H$&!%(B
- (c) 変更点を明示したうえ,ソフトウェアの名前を変更する.
- そのソフトウェアを配布する時には変更前の本プログラ
- ムも同時に配布する.または変更前の本プログラムのソー
- スの入手法を明示する.
+ (c) $BJQ99E@$rL@<($7$?$&$(!$%=%U%H%&%'%"$NL>A0$rJQ99$9$k!%(B
+ $B$=$N%=%U%H%&%'%"$rG[I[$9$k;~$K$OJQ99A0$NK\%W%m%0%i(B
+ $B%`$bF1;~$KG[I[$9$k!%$^$?$OJQ99A0$NK\%W%m%0%i%`$N%=!<(B
+ $B%9$NF~<jK!$rL@<($9$k!%(B
- (d) その他の変更条件を作者と合意する.
+ (d) $B$=$NB>$NJQ99>r7o$r:n<T$H9g0U$9$k!%(B
- 3. 以下の条件のいずれかを満たす時に本プログラムをコンパイ
- ルしたオブジェクトコードや実行形式でも配布できます.
+ 3. $B0J2<$N>r7o$N$$$:$l$+$rK~$?$9;~$KK\%W%m%0%i%`$r%3%s%Q%$(B
+ $B%k$7$?%*%V%8%'%/%H%3!<%I$d<B9T7A<0$G$bG[I[$G$-$^$9!%(B
- (a) バイナリを受け取った人がソースを入手できるように,
- ソースの入手法を明示する.
+ (a) $B%P%$%J%j$r<u$1<h$C$??M$,%=!<%9$rF~<j$G$-$k$h$&$K!$(B
+ $B%=!<%9$NF~<jK!$rL@<($9$k!%(B
- (b) 機械可読なソースコードを添付する.
+ (b) $B5!3#2DFI$J%=!<%9%3!<%I$rE:IU$9$k!%(B
- (c) 変更を行ったバイナリは名前を変更したうえ,オリジナ
- ルのソースコードの入手法を明示する.
+ (c) $BJQ99$r9T$C$?%P%$%J%j$OL>A0$rJQ99$7$?$&$(!$%*%j%8%J(B
+ $B%k$N%=!<%9%3!<%I$NF~<jK!$rL@<($9$k!%(B
- (d) その他の配布条件を作者と合意する.
+ (d) $B$=$NB>$NG[I[>r7o$r:n<T$H9g0U$9$k!%(B
- 4. 他のプログラムへの引用はいかなる目的であれ自由です.た
- だし,本プログラムに含まれる他の作者によるコードは,そ
- れぞれの作者の意向による制限が加えられる場合があります.
+ 4. $BB>$N%W%m%0%i%`$X$N0zMQ$O$$$+$J$kL\E*$G$"$l<+M3$G$9!%$?(B
+ $B$@$7!$K\%W%m%0%i%`$K4^$^$l$kB>$N:n<T$K$h$k%3!<%I$O!$$=(B
+ $B$l$>$l$N:n<T$N0U8~$K$h$k@)8B$,2C$($i$l$k>l9g$,$"$j$^$9!%(B
- それらファイルの一覧とそれぞれの配布条件などに付いては
- LEGALファイルを参照してください.
+ $B$=$l$i%U%!%$%k$N0lMw$H$=$l$>$l$NG[I[>r7o$J$I$KIU$$$F$O(B
+ LEGAL$B%U%!%$%k$r;2>H$7$F$/$@$5$$!%(B
- 5. 本プログラムへの入力となるスクリプトおよび,本プログラ
- ムからの出力の権利は本プログラムの作者ではなく,それぞ
- れの入出力を生成した人に属します.また,本プログラムに
- 組み込まれるための拡張ライブラリについても同様です.
+ 5. $BK\%W%m%0%i%`$X$NF~NO$H$J$k%9%/%j%W%H$*$h$S!$K\%W%m%0%i(B
+ $B%`$+$i$N=PNO$N8"Mx$OK\%W%m%0%i%`$N:n<T$G$O$J$/!$$=$l$>(B
+ $B$l$NF~=PNO$r@8@.$7$??M$KB0$7$^$9!%$^$?!$K\%W%m%0%i%`$K(B
+ $BAH$_9~$^$l$k$?$a$N3HD%%i%$%V%i%j$K$D$$$F$bF1MM$G$9!%(B
- 6. 本プログラムは無保証です.作者は本プログラムをサポート
- する意志はありますが,プログラム自身のバグあるいは本プ
- ログラムの実行などから発生するいかなる損害に対しても責
- 任を持ちません.
+ 6. $BK\%W%m%0%i%`$OL5J]>Z$G$9!%:n<T$OK\%W%m%0%i%`$r%5%]!<%H(B
+ $B$9$k0U;V$O$"$j$^$9$,!$%W%m%0%i%`<+?H$N%P%0$"$k$$$OK\%W(B
+ $B%m%0%i%`$N<B9T$J$I$+$iH/@8$9$k$$$+$J$kB;32$KBP$7$F$b@U(B
+ $BG$$r;}$A$^$;$s!%(B
diff --git a/ChangeLog b/ChangeLog
index fe76d3d1fb..b34ed8cda1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,20071 +1,16421 @@
-Thu Nov 13 22:32:34 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+Sat Nov 10 00:37:02 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/rexml/document.rb: add REXML::Document#document.
- reported by Tomas Hoger <thoger@redhat.com> and patched by nahi.
+ * siphash.h: check configure macros before include newer headers.
-Thu Nov 6 22:57:43 2014 Naohisa Goto <ngotogenome@gmail.com>
+Sat Nov 10 00:37:02 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * bignum.c (absint_numwords_generic): set an array element after
- definition of a variable to fix compile error with older version
- of fcc (Fujitsu C Compiler) 5.6 on Solaris 10 on Sparc.
- [Bug #10350] [ruby-dev:48608]
+ * siphash.c (sip_init_state): use union to suppress warnings by gcc
+ 4.7.
-Thu Nov 6 22:36:55 2014 Naohisa Goto <ngotogenome@gmail.com>
+Sat Nov 10 00:37:02 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * compile.c (compile_data_alloc): add padding when strict alignment
- is required for memory access. Currently, the padding is enabled
- only when the CPU is 32-bit SPARC and the compiler is GCC.
- [Bug #9681] [ruby-core:61715]
+ * random.c (rb_memhash): use siphash.
- * compile.c (STRICT_ALIGNMENT): defined if strict alignment is required
+Fri Nov 9 16:17:09 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * compile.c (ALIGNMENT_SIZE, ALIGNMENT_SIZE_MASK, PADDING_SIZE_MAX):
- new macros for alignemnt word size, bit mask, max size of padding.
+ * file.c (append_fspath): revert a part of r37562.
- * compile.c (calc_padding): new function to calculate padding size.
+ * file.c (rb_file_expand_path_internal): ditto.
-Wed Nov 5 00:18:22 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (rb_file_expand_path_internal): ignore the encoding of the
+ given path name and use filesystem encoding, except when the result
+ is 8bit range and the filesystem encoding is US-ASCII.
+ [ruby-dev:39393] [Bug #2154]
- * configure.in (__builtin_setjmp): disable with gcc/clang earlier
- than 4.3 on Mac OS X. [ruby-core:65174] [Bug #10272]
+Fri Nov 9 16:15:50 2012 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
-Wed Nov 5 00:01:04 2014 Tanaka Akira <akr@fsij.org>
+ * test/csv/test_features.rb: add require for Tempfile.
+ * test/csv/test_serialization.rb: ditto.
- * bignum.c (bary_mul_balance_with_mulfunc): Fix free work area
- location.
- [ruby-dev:48723] [Bug #10464]
- [ruby-core:66044] [Bug #10465]
- Reported by Kohji Nishihama.
+Fri Nov 9 13:47:45 2012 Luis Lavena <luislavena@gmail.com>
-Tue Oct 28 22:30:21 2014 NARUSE, Yui <naruse@ruby-lang.org>
+ * test/win32ole/test_win32ole.rb (test_s_codepage_changed):
+ FileSystemObject only supports ANSI or UTF-16LE encoding.
+ Patch by bosko (Bosko Ivanisevic) [ruby-trunk - Bug #6650]
- * configure.in: remove apple-gcc4.2 from CC candidates.
+Fri Nov 9 13:16:16 2012 Kenta Murata <mrkn@mrkn.jp>
-火 10 28 22:19:44 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * bignum.c (bigmul0): enable big_mul_toom3.
+ [ruby-core:48552] [Bug #7242]
- * version.h (RUBY_VERSION): bump RUBY_VERSION to 2.1.5.
+ * bignum.c (bigmul1_toom3): fix incorrect calculation.
+ the patch is made by Heesob Park.
+ [ruby-core:48552] [Bug #7242]
-Mon Oct 27 20:20:14 2014 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri Nov 9 13:16:16 2012 Kenta Murata <mrkn@mrkn.jp>
- * lib/rexml/entity.rb: keep the entity size within the limitation.
- reported by Willis Vandevanter <will@silentrobots.com> and
- patched by nahi.
+ * bignum.c (bigmul0): disable big_mul_toom3 temporalily.
+ [ruby-core:48552] [Bug #7242]
-Sun Oct 26 03:31:46 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_bignum.rb (test_mul_large_numbers):
+ add a test for bigmul1_toom3 suggested in [Bug #7242].
- * vm_method.c (rb_method_entry_make): warn redefinition only for
- already defined methods, but not for undefined methods.
- [ruby-dev:48691] [Bug #10421]
+Thu Nov 8 17:37:54 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Oct 26 03:21:30 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (append_fspath): filesystem encoding is prior to the encoding
+ of argument.
- * 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]
+ * file.c (rb_file_expand_path_internal, EXPAND_PATH_BUFFER): ignore
+ the encoding of the given path name, use filesystem encoding always
+ instead. [ruby-dev:39393] [Bug #2154]
-Wed Oct 22 23:02:49 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * test/ruby/test_file_exhaustive.rb: removed 2.0 spec tests.
- * 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]
+Thu Nov 8 17:33:53 2012 Luis Lavena <luislavena@gmail.com>
-Wed Oct 22 23:02:49 2014 Martin Bosslet <Martin.Bosslet@gmail.com>
+ * ext/zlib/extconf.rb: Recognize zlibwapi as linking library.
+ Patch by Daniel Berger.
- * test/openssl/test_ssl.rb: Reuse TLS default options from
- OpenSSL::SSL::SSLContext::DEFAULT_PARAMS.
+ [ruby-core:44979] [Feature #6421]
-Wed Oct 22 23:02:49 2014 Martin Bosslet <Martin.Bosslet@gmail.com>
+Thu Nov 8 16:17:54 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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]
+ * test/ruby/test_dir_m17n.rb: remove a garbage.
-Sun Oct 19 03:22:53 2014 Kazuki Tsujimoto <kazuki@callcc.net>
+Thu Nov 8 15:22:09 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_core.h, vm.c, proc.c: fix GC mark miss on bindings.
- [ruby-dev:48616] [Bug #10368]
+ * test/ruby/test_dir_m17n.rb: sorry, typo.
- * test/ruby/test_eval.rb: add a test code.
+Thu Nov 8 14:50:02 2012 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-Sun Oct 19 03:13:38 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/win32ole/test_win32ole_variant.rb: setting WIN32OLE.locale
+ to pass some assertion. Thanks to Hiroshi Shirosaki.
+ [ruby-core:46873][Bug #6814]
- * parse.y (parser_here_document): do not append already appended
- and disposed code fragment. [ruby-dev:48647] [Bug #10392]
+Thu Nov 8 14:46:17 2012 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-Thu Oct 16 22:10:11 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/win32ole/test_win32ole.rb (test_s_codepage_changed):
+ FileSystemObject only supports ANSI or UTF-16LE encoding.
+ Patch by h.shirosaki (Hiroshi Shirosaki) [ruby-trunk - Bug #6650]
- * ext/stringio/stringio.c (strio_write): ASCII-8BIT StringIO
- should be writable any encoding strings, without conversion.
- [ruby-core:65240] [Bug #10285]
-Thu Oct 16 22:06:03 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Nov 8 14:43:17 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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]
+ * test/ruby/test_dir_m17n.rb: refactoring. RE should be in the left side
+ of the =~ operator, and compare the result with nil is meaningless.
-Thu Oct 16 00:30:30 2014 Tanaka Akira <akr@fsij.org>
+Thu Nov 8 14:43:17 2012 Luis Lavena <luislavena@gmail.com>
- * lib/find.rb (Find.find): Call to_path for arguments to obtain
- strings.
- [ruby-core:63713] [Bug #10035] Reported by Herwin.
+ * test/ruby/test_dir_m17n.rb (create_and_check_raw_file_name): add new
+ helper method to ease encoding testing. Patch by Oleg Sukhodolsky.
+ [ruby-core:46589][Bug #6765]
-Thu Oct 16 00:20:12 2014 Eric Wong <e@80x24.org>
+ * test/ruby/test_dir_m17n.rb (test_filename_extutf8): use filesystem
+ encoding when reading entries and comparing.
- * object.c (rb_class_real): do not dereference 0 VALUE
+ * test/ruby/test_dir_m17n.rb (test_filename_utf8_raw_name): removed.
- * test/ruby/test_module.rb (test_inspect_segfault):
- Test case and bug report by Thomas Stratmann.
- [ruby-core:65214] [Bug #10282]
+ * test/ruby/test_dir_m17n.rb (test_filename_utf8_raw_jp_name): split test.
-Thu Oct 16 00:10:45 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Nov 8 14:16:53 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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]
+ * lib/mkmf.rb (MakeMakefile#timestamp_file): use .-. instead of !, a
+ special character of NMAKE and BSD make. [Bug #7265]
-Thu Oct 16 00:10:45 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Nov 8 14:16:53 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * signal.c (rb_f_kill): should not ignore signal unless the
- default handler is registered. [ruby-dev:48592] [Bug #9820]
+ * lib/mkmf.rb (MakeMakefile#timestamp_file): use ! instead of %, a GNU
+ make special character.
-Wed Oct 15 23:58:13 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+Thu Nov 8 14:16:53 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- merge r47598 partially. extracted commits are as follows. [Bug #9728]
- https://github.com/k-takata/Onigmo/commit/15ddec6d18e27fdc1988236764e766fd5892ecf5
+ * lib/mkmf.rb (create_makefile): use timestamp for destination
+ directories to make them before making or copying files there.
+ [ruby-dev:46067] [Bug #6904]
-Wed Oct 15 23:50:33 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Thu Nov 8 14:13:53 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/fileutils.rb: handle ENOENT error with symlink targeted to
- non-exists file. [ruby-dev:45933] [Bug #6716]
+ * configure.in (visibility_option): visibility attribute is not
+ available before GCC 4, so do not use -fvisibility option in that
+ case. [ruby-core:48147] [Bug #7205]
-Wed Oct 15 23:25:24 2014 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Nov 8 14:11:49 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in: NetBSD's ksh, used by configure, needs escapes.
+ * vm.c (rb_vm_jump_tag_but_local_jump): pass through thrown objects.
+ [ruby-dev:46234] [Bug #7185]
-Wed Oct 15 23:13:43 2014 Eric Wong <e@80x24.org>
+ * vm_eval.c (rb_eval_cmd): if state is non-zero, val should be nil and
+ rb_vm_jump_tag_but_local_jump() just jump tag.
- * array.c (ary_recycle_hash): add RB_GC_GUARD
- (rb_ary_diff): remove volatile
- [Bug #10369]
+Thu Nov 8 14:09:18 2012 Kenta Murata <mrkn@mrkn.jp>
-Wed Oct 15 23:10:07 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_add),
+ test/bigdecimal/test_bigdecimal.rb:
+ need to specify precision for converting Rational and Float.
+ [ruby-core:48045] [Bug #7176]
- * 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]
+Thu Nov 8 14:05:31 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Oct 15 23:08:02 2014 Rei Odaira <Rei.Odaira@gmail.com>
+ * win32/win32.c (has_redirection): should use shell (cmd.exe) when
+ the commandline containts '&'.
+ reported by Roger Pack at [ruby-core:47912] [Bug #7143], and
+ patched by Heesob Park at [ruby-core:47931].
- * configure.in: Fix typo. [Bug #9914]
+Fri Oct 26 17:22:18 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Oct 15 22:46:52 2014 NAKAMURA Usaku <usa@ruby-lang.org>
+ * file.c (append_fspath): need to set the encoding to result always.
- * error.c: update exception tree. [DOC]
- reported by @hemge via twitter.
+Fri Oct 26 11:03:46 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Sep 24 02:30:55 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (rb_enc_path_next, rb_enc_path_skip_prefix)
+ (rb_enc_path_last_separator, rb_enc_path_end)
+ (ruby_enc_find_basename, ruby_enc_find_extname): encoding-aware
+ path handling functions.
- * parse.y (parse_ident): just after a label, new expression should
- start, cannot be a modifier. [ruby-core:65211] [Bug #10279]
+ * file.c (rb_home_dir, file_expand_path, rb_realpath_internal)
+ (rb_file_s_basename, rb_file_dirname, rb_file_s_extname)
+ (rb_file_join): should respect the encodings of arguments than
+ file system encoding. [ruby-dev:45145] [Bug #5919]
-Wed Sep 24 02:21:41 2014 NAKAMURA Usaku <usa@ruby-lang.org>
+ * dir.c (check_dirname, ruby_glob0): ditto.
- * 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).
+ * ext/pathname/pathname.c (path_sub_ext): ditto.
-Wed Sep 24 02:06:33 2014 Tanaka Akira <akr@fsij.org>
+Fri Oct 26 11:03:46 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/ruby/test_time_tz.rb: Fix test error with tzdata-2014g.
- [ruby-core:65058] [Bug #10245] Reported by Vit Ondruch.
+ * util.c, include/ruby/util.h (ruby_add_suffix): remove the function.
+ [Bug #5153] [ruby-core:38736]
-Wed Sep 24 02:06:33 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * io.c (argf_next_argv): remove the call of above function.
- * test/minitest/test_minitest_unit.rb: removed obsoleted condition
- for Ruby 1.8.
- * test/ruby/test_time_tz.rb: ditto.
+ * ext/-test-/add_suffix, test/-ext-/test_add_suffix.rb: remove the test
+ extension module because this is only for testsing ruby_add_suffix().
-Wed Sep 24 01:43:13 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * LEGAL: remove the mention about a part of util.c, because now we
+ removed the part.
- * version.h (RUBY_VERSION): bump RUBY_VERSION to 2.1.4.
+ * io.c (argf_next_argv): now the new filename is not guranteed to
+ use, so should check the return value of rename(2).
-Fri Sep 19 00:58:34 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * test/ruby/test_argf.rb (TestArgf#test_inplace_rename_impossible):
+ now we expect same result with other platforms on no_safe_rename
+ platforms (=Windows).
- * version.h (RUBY_VERSION): bump RUBY_VERSION to 2.1.3.
+Thu Oct 25 18:16:25 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Sep 15 23:12:47 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rubygems/installer.rb (check_that_user_bin_dir_is_in_path):
+ test_generate_bin_bindir_with_user_install_warning(TestGemInstaller)
+ fails on Windows with msys bash. It makes comparing paths
+ case-insensitive.
+ pick from upstream to fix a failure of test-all [ruby-core:47711]
+ https://github.com/rubygems/rubygems/commit/c474edb2f3704206f04da1c8c6cf9fb079d84abe
- * signal.c (check_stack_overflow): drop the last tag too close to
- the fault page, to get rid of stack overflow deadlock.
- [Bug #9971]
+Thu Oct 25 17:55:01 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Sep 15 22:34:39 2014 Natalie Weizenbaum <nweiz@google.com>
+ * test/etc/test_etc.rb (TestEtc#test_getpwuid): `s' is never set to nil.
- * 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]
+Thu Oct 25 16:59:17 2012 Luis Lavena <luislavena@gmail.com>
-Mon Sep 15 22:31:33 2014 Sho Hashimoto <sho.hsmt@gmail.com>
+ * test/ruby/test_file_exhaustive.rb: fix test introduced in r36811 for
+ posix environments where HOME is not defined. [ruby-core:47322]
- * ext/fiddle/lib/fiddle/import.rb (Fiddle::Importer#sizeof): fix typo,
- SIZEOF_LONG_LON. [Fix GH-714]
+Thu Oct 25 16:59:17 2012 Luis Lavena <luislavena@gmail.com>
-Mon Sep 15 11:08:23 2014 Shota Fukumori <her@sorah.jp>
+ * configure.in (mingw): add shlwapi to the list of dependency
+ libs for Windows.
+ * win32/Makefile.sub (EXTSOLIBS): ditto.
- * lib/mkmf.rb (configuration): Make CXXFLAGS customizable.
- Patch by Kohei Suzuki (eagletmt). [Fixes GH-492]
+ * internal.h: declare internal functions rb_w32_init_file,
+ rb_file_expand_path_internal and rb_file_expand_path_fast.
-Mon Sep 15 01:06:35 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (Init_File): invoke Windows initialization rb_w32_init_file
- * lib/mkmf.rb (MakeMakefile#pkg_config): append --cflags to also
- $CXXFLAGS, as they are often used by C++ compiler.
- [ruby-core:54532] [Bug #8315]
+ * win32/file.c (rb_file_load_path_internal): new function.
+ Windows-specific implementation that replaces file_expand_path.
+ [Bug #6836][ruby-core:46996]
-Mon Sep 15 00:02:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/file.c (rb_w32_init_file): new function. Initialize codepage
+ cache for faster conversion encodings lookup.
- * 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]
+ * file.c (file_expand_path): rename to rb_file_expand_path_internal.
+ Conditionally exclude from Windows.
-Wed Sep 10 23:36:38 2014 Koichi Sasada <ko1@atdot.net>
+ * file.c (rb_file_expand_path_fast): new function. delegates to
+ rb_file_expand_path_internal without performing a hit to the
+ filesystem.
- * test/ruby/test_object.rb: extend timeout.
+ * file.c (file_expand_path_1): use rb_file_expand_path_internal without
+ path expansion (used by require).
+ * file.c (rb_find_file_ext_safe): ditto.
+ * file.c (rb_find_file_safe): ditto.
-Wed Sep 10 23:36:38 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * load.c (rb_get_expanded_load_path): use rb_file_expand_path_fast.
+ * load.c (rb_feature_provided): ditto.
- * object.c (rb_obj_copy_ivar): allocate no memory for empty
- instance variables. [ruby-core:64700] [Bug #10191]
+ * file.c (rb_file_expand_path): use rb_file_expand_path_internal with
+ path expansion.
+ * file.c (rb_file_absolute_path): ditto.
-Wed Sep 10 23:36:38 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_file_exhaustive.rb: new tests to exercise
+ rb_file_expand_path_internal implementation and compliance with
+ existing behaviors.
- * object.c (rb_obj_copy_ivar): extract function to copy instance
- variables only for T_OBJECT from init_copy.
+Thu Oct 25 16:59:17 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Sep 10 23:14:42 2014 NARUSE, Yui <naruse@ruby-lang.org>
+ * win32/file.c (INVALID_FILE_ATTRIBUTES): define for old SDK.
- merge r46831 partially. extracted commits are as follows. [Bug #9344]
- https://github.com/k-takata/Onigmo/commit/bdfc1997aa15b6baddaf9a482c6610b32504bd86
+Thu Oct 25 16:59:17 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * regcomp.c: Merge Onigmo 5.14.1 25a8a69fc05ae3b56a09.
- this includes Support for Unicode 7.0 [Bug #9092].
+ * win32/makedirs.bat: new command to make intermediate
+ directories, and not to report any errors if the directory
+ already exists.
-Wed Sep 10 22:58:25 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/Makefile.sub (MAKEDIRS): enable command extensions.
- * common.mk (Doxyfile): revert r43888, not to require preinstalled
- ruby. [ruby-core:64488] [Bug #10161]
+Thu Oct 25 16:59:17 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Sep 10 03:29:48 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/Makefile.sub (MAKEDIRS): use mkdir of cmd.exe instead of ruby.
+ [Bug #6103] [ruby-core:43012]
- * 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]
+ * win32/README.win32: added a notice about command extension of cmd.exe.
-Wed Sep 10 03:17:13 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Oct 25 16:59:17 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
- * enc/trans/euckr-tbl.rb (EUCKR_TO_UCS_TBL): add missing euro and
- registered signs. [ruby-core:64452] [Bug #10149]
+ * Makefile.in (PLATFORM_DIR): add a variable for `win32` directory.
+ * Makefile.in (clean-platform): add new target.
+ It cleans `win32` directory.
-Wed Sep 10 03:01:31 2014 Eric Wong <e@80x24.org>
+ * common.mk (clean): add a dependency for `win32` directory.
+ * common.mk (distclean): ditto.
+ * common.mk (distclean-platform): add new target.
+ It cleans `win32` directory.
+ * common.mk ($(PLATFORM_D)): add new target to make `win32` directory.
+ * common.mk (win32/win32.$(OBJEXT)): move win32.o into `win32`
+ directory.
+ * common.mk (win32/file.$(OBJEXT)): add new target for win32/file.c.
- * time.c (time_timespec): fix tv_nsec overflow
- [Bug #10144]
+ * configure.in: move win32.o into `win32` directory and add
+ win32/file.o to MISSING.
-Wed Sep 10 02:51:38 2014 Koichi Sasada <ko1@atdot.net>
+ * file.c (file_load_ok, rb_file_load_ok): replace static
+ file_load_ok() with public rb_file_load_ok().
+ It's to link Windows implementation in win32/file.c.
+ * file.c (rb_find_file_ext_safe): ditto.
+ * file.c (rb_find_file_safe): ditto.
- * iseq.c (rb_iseq_clone): Should not insert write barrier from
- non-RVALUE data (to non-RVALUE data, of course).
+ * win32/file.c (rb_file_load_ok): new file. Add Windows specific
+ optimized implementation of rb_file_load_ok(). We created a
+ separated file to avoid too many #ifdef macro which is unreadable.
- Ruby 2.1 also has a same problem.
+ * win32/Makefile.sub (PLATFORM_DIR): add a variable for `win32`
+ directory.
+ * win32/Makefile.sub (MISSING): move win32.obj into `win32`
+ directory and add win32/file.obj to MISSING.
+ * win32/Makefile.sub (MAKEDIRS): replace MINIRUBY with BASERUBY.
+ It's because miniruby doesn't exist when making `win32` directory.
+ * win32/Makefile.sub (clean-platform): add new target to clean `win32`
+ directory.
+ * win32/Makefile.sub ({$(srcdir)}.c{}.obj): make it not match
+ win32/file.c to build properly.
+ * win32/Makefile.sub (win32/win32.$(OBJEXT)): move win32.obj into
+ `win32` directory.
-Wed Sep 10 02:33:08 2014 Koichi Sasada <ko1@atdot.net>
+ Patch created with Luis Lavena.
+ [ruby-core:42480] [Feature #5999]
- * 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.
+Fri Oct 19 13:28:29 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- It can cause unexpected behaviour.
+ * configure.in (opt-dir): allow multiple directories separated by
+ $PATH_SEPARATOR as well as dir_config in mkmf.rb. [ruby-core:47868]
+ [Bug #7120]
-Fri Sep 5 17:01:38 2014 Zachary Scott <e@zzak.io>
+Tue Oct 16 11:18:06 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rdoc/generator/template/darkfish/js/jquery.js: Backport
- rdoc/rdoc@74f60fcb04fee1778fe2694d1a0ea6513f8e67b7
+ * lib/mkmf.rb (dir_config, init_mkmf): use configured libdir value as
+ default library path. [ruby-core:43726] [Bug #6207]
-Sat Sep 6 00:57:07 2014 Eric Wong <e@80x24.org>
+Tue Oct 16 10:56:55 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/zlib/zlib.c (gzfile_reset): preserve ZSTREAM_FLAG_GZFILE
- [Bug #10101]
+ * file.c (rb_find_file_ext_safe, rb_find_file_safe): default to
+ US-ASCII for encdb and transdb.
- * test/zlib/test_zlib.rb (test_rewind): test each_byte
+ * load.c (search_required): keep encoding of feature name. set
+ loading path to filesystem encoding. [Bug #6377][ruby-core:44750]
-Sat Sep 6 00:47:32 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ruby.c (add_modules, require_libraries): assume default external
+ encoding as well as ARGV.
- * configure.in (rb_cv_broken_backtrace): exit with failure
- normally, no needs to abort. [ruby-core:63678] [Bug #10008]
+Tue Oct 16 10:47:43 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Sep 6 00:05:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * random.c (random_s_rand): ensure default PRNG is re-initialized
+ after fork. patched by Eric Wong. [ruby-core:41209][Bug #5661]
- * 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.
+Tue Oct 16 10:21:23 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Sep 6 00:05:02 2014 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * ruby.c (rb_f_sub, rb_f_gsub): pass the given block.
+ [ruby-core:47967] [Bug #7157]
- * ext/socket/raddrinfo.c (rb_getaddrinfo): second argument of
- MEMZERO is type. Coverity Scan found this bug.
+Tue Oct 16 09:47:47 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Sep 6 00:05:02 2014 Tanaka Akira <akr@fsij.org>
-
- * ext/socket/raddrinfo.c (numeric_getaddrinfo): Use xcalloc.
- Suggested by Eric Wong.
- https://bugs.ruby-lang.org/issues/9525#note-14
-
-Sat Sep 6 00:05:02 2014 Tanaka Akira <akr@fsij.org>
-
- * ext/socket: Bypass getaddrinfo() if node and serv are numeric.
- Reporeted by Naotoshi Seo. [ruby-core:60801] [Bug #9525]
-
- * ext/socket/extconf.rb: Detect struct sockaddr_in6.sin6_len.
-
- * ext/socket/sockport.h (SET_SIN6_LEN): New macro.
- (INIT_SOCKADDR_IN6): Ditto.
-
- * ext/socket/rubysocket.h (struct rb_addrinfo): Add
- allocated_by_malloc field.
-
- * 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.
-
-Sat Sep 6 00:05:02 2014 Tanaka Akira <akr@fsij.org>
-
- * ext/socket: Wrap struct addrinfo by struct rb_addrinfo.
-
-Thu Sep 4 00:31:23 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/thread/thread.c (get_array): check instance variables are
- initialized properly. [ruby-core:63826][Bug #10062]
-
-Thu Sep 4 00:29:10 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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 Sep 4 00:23:15 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * sprintf.c (GETASTER): should not use the numbered argument to be
- formatted, raise ArgumentError instead.
- [ruby-dev:48330] [Bug #9982]
-
-Thu Sep 4 00:21:05 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
-
- * 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]
-
-Tue Sep 2 02:21:58 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Tue Sep 2 02:08:12 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * signal.c (rb_f_kill): directly enqueue an ignored signal to self,
- except for SIGSEGV and SIGBUS. [ruby-dev:48203] [Bug #9820]
-
-Sun Aug 31 01:13:21 2014 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: change full GC timing to keep lower memory usage.
-
- Extend heap only at
- (1) after major GC
- or
- (2) after several (two times, at current) minor GC
-
- Details in https://bugs.ruby-lang.org/issues/9607#note-9
- [Bug #9607]
-
-Sun Aug 31 01:07:05 2014 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-
- * 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]
-
-Sun Aug 31 00:54:47 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * process.c (open): use UTF-8 version function to support
- non-ascii path properly. [ruby-core:63185] [Bug #9946]
-
-Tue Aug 26 00:08:40 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Tue Aug 26 00:07:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: get rid of __builtin_setjmp/__builtin_longjmp on
- x64-mingw, which causes SEGV with callcc.
- [ruby-core:61887] [Bug #9710]
-
-Tue Aug 26 00:06:05 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ac_cv_func___builtin_setjmp): should not skip
- flags restoration in RUBY_WERROR_FLAG by `break`.
- [ruby-dev:48086] [Bug #9698]
-
-Tue Aug 26 00:02:51 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (ac_cv_func___builtin_setjmp): __builtin_longjmp()
- in Apple LLVM 5.1 (LLVM 3.4svn) uses `void**`, not `jmp_buf`.
- [Bug #9692]
-
-Tue Aug 26 00:02:51 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Mon Aug 25 00:36:56 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Mon Aug 25 00:26:12 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (parser_yyerror): preserve source code encoding in
- syntax error messages. [ruby-core:64228] [Bug #10114]
-
-Sat Aug 23 02:39:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Sat Aug 23 02:22:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Thu Aug 21 01:44:46 2014 Tanaka Akira <akr@fsij.org>
-
- * 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].
-
-Thu Aug 21 01:41:09 2014 Tanaka Akira <akr@fsij.org>
-
- * 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]
-
-Thu Aug 21 01:41:09 2014 Zachary Scott <e@zzak.io>
-
- * lib/time.rb: [DOC] Fix timezone in example of Time.parse [Bug #9521]
- Based on patch by @stomar
-
-Tue Aug 19 23:31:48 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
-
- 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]
-
- * include/ruby/oniguruma.h (ONIG_MAX_CAPTURE_GROUP_NUM,
- ONIGERR_TOO_MANY_CAPTURE_GROUPS): add cheking the number of capture
- groups.
-
- * regerror.c (onig_error_code_to_format): ditto.
-
- * regparse.c (scan_env_add_mem_entry): ditto.
-
- * regexec.c (onig_region_copy, match_at): fix: segmation fault occurs
- when many groups are used.
-
-Mon Aug 18 23:38:21 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (enc_find): [DOC] never accepted a symbol.
- [ruby-dev:48308] [Bug #9966]
-
-Mon Aug 18 23:22:03 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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
-
-Mon Aug 18 23:22:03 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_resize): should consider the capacity instead
- of the old length, as pointed out by nagachika.
-
-Mon Aug 18 23:22:03 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * file.c (expand_path): shrink expanded path which no longer needs
- rooms to append. [ruby-core:63114] [Bug #9934]
-
-Mon Aug 11 23:55:32 2014 Mark Lorenz <mlorenz@covermymeds.com>
-
- * lib/erb.rb (result): [DOC] no longer accepts a Proc, as
- Kernel.eval does not. [fix GH-619]
-
-Mon Aug 11 23:38:20 2014 Tanaka Akira <akr@fsij.org>
-
- * io.c (rb_io_autoclose_p): Don't raise on frozen IO.
-
-Mon Aug 11 23:38:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (rb_io_fileno, rb_io_inspect): non-modification does not
- error on frozen IO. [ruby-dev:48241] [Bug #9865]
-
-Mon Aug 11 22:34:47 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (posix_fadvise): disable use of posix_fadvise
- itself on 32-bit AIX. [ruby-core:62968] [Bug #9914]
-
-Mon Aug 11 22:34:47 2014 <kanemoto@ruby-lang.org>
-
- * 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]
-
-Mon Aug 11 22:14:28 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Fri Aug 8 23:36:01 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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 Aug 4 01:29:57 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (env_shift): fix memory leak on Windows, free environment
- strings block always. [ruby-dev:48332] [Bug #9983]
-
-Mon Aug 4 01:26:46 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Mon Aug 4 01:24:09 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (ruby_setenv): fix memory leak on Windows, free
- environment strings block after check for the size.
- [ruby-dev:48323] [Bug #9977]
-
-Mon Aug 4 01:11:07 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (match_aref, rb_reg_regsub): consider encoding of captured
- names, encoding-incompatible should not match.
- [ruby-dev:48278] [Bug #9903]
-
-Mon Aug 4 00:52:42 2014 Koichi Sasada <ko1@atdot.net>
-
- * vm_eval.c (rb_catch_protect): fix same problem of [Bug #9961].
-
- * vm_eval.c (rb_iterate): ditto.
-
-Mon Aug 4 00:52:42 2014 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (rb_vm_rewind_cfp): add new function to rewind specified cfp
- with invoking RUBY_EVENT_C_RETURN.
- [Bug #9961]
-
- * vm_core.h: ditto.
-
- * eval.c (rb_protect): use it.
-
- * eval.c (rb_rescue2): ditto.
-
- * vm_eval.c (rb_iterate): ditto.
-
- * test/ruby/test_settracefunc.rb: add a test.
-
- * vm_core.h (rb_vm_rewind_cfp): add the prototype declaration.
-
-Sun Aug 3 00:06:10 2014 Charlie Somerville <charliesome@ruby-lang.org>
-
- * node.c (dump_node): handle nd_value == (NODE *)-1 to mean this
- keyword argument is required
-
-Thu Jul 31 01:56:11 2014 Koichi Sasada <ko1@atdot.net>
-
- * compile.c (rb_iseq_compile_node): put start label of block after
- trace (b_call).
- [Bug #9964]
-
- * test/ruby/test_settracefunc.rb: add a test.
-
- added assert_consistent_call_return() method check call/return
- consistency.
-
-Thu Jul 31 01:22:43 2014 Koichi Sasada <ko1@atdot.net>
-
- * 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]
-
- * vm_insnhelper.c (vm_call_bmethod_body): ditto.
-
- * test/ruby/test_settracefunc.rb: add a test.
-
-Thu Jul 31 01:12:55 2014 Koichi Sasada <ko1@atdot.net>
-
- * vm_core.h: add VM_FRAME_MAGIC_RESCUE to recognize normal block or
- rescue clause.
-
- * vm.c (vm_exec): use VM_FRAME_MAGIC_RESCUE on at rescue/ensure.
-
- * test/ruby/test_settracefunc.rb: should not invoke b_return at rescue
- clause.
- [Bug #9957]
-
- * vm_dump.c (control_frame_dump): check VM_FRAME_MAGIC_RESCUE.
-
- * vm_dump.c (vm_stack_dump_each): ditto.
-
-Thu Jul 31 00:44:34 2014 Koichi Sasada <ko1@atdot.net>
-
- * vm_trace.c: clear and restore recursive checking thread local data
- to avoid unexpected throw from TracePoint.
- [Bug #9940]
-
- * test/ruby/test_settracefunc.rb: add a test.
-
- * thread.c: added
- * rb_threadptr_reset_recursive_data(rb_thread_t *th);
- * rb_threadptr_restore_recursive_data(rb_thread_t *th, VALUE old);
-
- * vm_core.h: ditto.
-
-Wed Jul 23 23:49:59 2014 Hiroshi Shirosaki <h.shirosaki@gmail.com>
-
- * 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]
-
- * test/testunit/test_parallel.rb (TestParallel): add a test.
-
- * test/testunit/tests_for_parallel/ptest_forth.rb: ditto.
-
-Wed Jul 23 23:11:28 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
-
- * test/socket/test_socket.rb: unix socket is required by test case.
-
-Wed Jul 23 23:11:28 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
-
- * 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.
-
-Wed Jul 23 23:05:19 2014 Tanaka Akira <akr@fsij.org>
-
- * 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]
-
- * ext/pathname/lib/pathname.rb (cleanpath_conservative): ditto.
-
-Wed Jul 23 22:51:34 2014 Naohisa Goto <ngotogenome@gmail.com>
-
- * 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]
-
-Wed Jul 23 22:43:50 2014 Tanaka Akira <akr@fsij.org>
-
- * 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]
-
-Wed Jul 23 22:24:26 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
-
- * 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
-
- * test/openssl/test_x509req.rb: ditto.
-
-Sat Jul 19 01:44:34 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * re.c (match_aref): should not ignore name after NUL byte.
- [ruby-dev:48275] [Bug #9902]
-
-Sun Jul 13 23:28:41 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
-
- * test/test_timeout.rb (test_timeout): inverted test condition.
- [Bug #8523]
-
-Sun Jul 13 23:18:11 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/digest/digest.c (rb_digest_instance_equal): no need to call
- `to_s` twice. [Bug #9913]
-
-Sun Jul 13 23:18:11 2014 Benoit Daloze <eregontp@gmail.com>
-
- * ext/digest/digest.c (rb_digest_instance_equal):
- fix #== for non-string arguments. [ruby-core:62967] [Bug #9913]
-
- * test/digest/test_digest.rb: add test for above.
-
-Sun Jul 13 23:10:03 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (yield_indexed_values): extract from permute0(),
- rpermute0(), and rcombinate0().
-
-Sun Jul 13 23:02:36 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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.
-
-Sun Jul 13 22:52:43 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * pack.c (encodes): fix buffer overrun by tail_lf. Thanks to
- Mamoru Tasaka and Tomas Hoger. [ruby-core:63604] [Bug #10019]
-
-Sun Jul 13 22:44:05 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/thread/thread.c (undumpable): ConditionVariable and Queue
- are not dumpable. [ruby-core:61677] [Bug #9674]
-
-Fri Jul 11 23:07:09 2014 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * lib/matrix.rb: Fix sign for cross_product [#9499]
-
-Sun Jul 6 23:16:30 2014 Masaya Tarui <tarui@ruby-lang.org>
-
- * st.c (st_foreach_check): change start point of search at check
- from top to current. [ruby-dev:48047] [Bug #9646]
-
-Sun Jul 6 22:56:03 2014 Zachary Scott <e@zzak.io>
-
- * lib/gserver.rb: [DOC] Fixed typo in example by @stomar [Bug #9543]
-
-Fri Jul 4 00:46:03 2014 Zachary Scott <e@zzak.io>
-
- * enumerator.c: [DOC] Fix example to show Enumerator#peek behavior
- Patch by Erik Hollembeak [Bug #9814]
-
-Fri Jul 4 00:44:43 2014 Zachary Scott <e@zzak.io>
-
- * enum.c: [DOC] Use #find in example to clarify alias by @rachellogie
- Patch submitted via documenting-ruby/ruby#34
-
-Fri Jul 4 00:42:57 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
-
- * man/ruby.1: remove deadlink. [ruby-core:62145][Bug #9773]
-
-Fri Jul 4 00:25:16 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Thu Jul 3 01:19:50 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
-
- * numeric.c (num_step_scan_args): table argument of rb_get_kwargs() is
- array of IDs, not Symbols. [ruby-dev:48353] [Bug #9811]
-
-Thu Jul 3 01:19:50 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (num_step_scan_args): check keyword arguments and fail
- if they conflict with positional arguments.
- [ruby-dev:48177] [Bug #9811]
-
-Tue Jul 1 03:05:22 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (read_all): truncate the buffer before appending read data,
- instead of truncating before reading.
- [ruby-core:55951] [Bug #8625]
-
-Tue Jul 1 03:05:22 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_setstrbuf, io_read): should not shorten the given buffer until
- read succeeds. [ruby-core:55951] [Bug #8625]
-
-Mon Jun 30 03:15:59 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Mon Jun 30 03:07:22 2014 Shugo Maeda <shugo@ruby-lang.org>
-
- * lib/net/ftp.rb (gets, readline): read lines without LF properly.
- [ruby-core:63205] [Bug #9949]
-
- * test/net/ftp/test_buffered_socket.rb: related test.
-
-Mon Jun 30 02:59:08 2014 Shugo Maeda <shugo@ruby-lang.org>
-
- * 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
-
-Mon Jun 30 02:46:44 2014 Rei Odaira <Rei.Odaira@gmail.com>
-
- * 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]
-
-Mon Jun 30 02:36:08 2014 Eric Wong <e@80x24.org>
-
- * process.c (proc_getgroups, proc_setgroups): use ALLOCV_N
- [Bug #9856]
-
-Mon Jun 30 02:28:10 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * io.c (io_setstrbuf): always check if the buffer is modifiable.
- [ruby-core:62643] [Bug #9847]
-
-Mon Jun 30 02:25:00 2014 Tanaka Akira <akr@fsij.org>
-
- * 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]
-
-Mon Jun 30 02:18:47 2014 Eric Wong <e@80x24.org>
-
- * complex.c (parse_comp): replace ALLOCA_N with ALLOCV_N/ALLOCV_END
- [Bug #9608]
- * rational.c (read_digits): ditto
-
-Mon Jun 30 02:10:34 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Mon Jun 30 01:46:19 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Mon Jun 30 00:57:05 2014 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (rb_vm_pop_cfunc_frame): added. It cares c_return event.
- The patch base by drkaes (Stefan Kaes).
- [Bug #9321]
-
- * variable.c (rb_mod_const_missing): use rb_vm_pop_cfunc_frame()
- instead of rb_frame_pop().
-
- * vm_eval.c (raise_method_missing): ditto.
-
- * vm_eval.c (rb_iterate): ditto.
-
- * internal.h (rb_vm_pop_cfunc_frame): add decl.
-
- * test/ruby/test_settracefunc.rb: add tests.
- provided by drkaes (Stefan Kaes).
-
- * 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.
-
-Sun Jun 29 01:34:06 2014 Tanaka Akira <akr@fsij.org>
-
- * lib/webrick/utils.rb (create_listeners): Close socket objects.
-
-Sat Jun 28 16:35:51 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (rb_str_substr): need to reset code range for shared
- string too, not only copied string.
- [ruby-core:62842] [Bug #9882]
-
-Sat Jun 28 14:37:17 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * parse.y (local_tbl_gen): remove local variables duplicated with
- arguments.
- [ruby-core:60501] [Bug #9486]
-
-Tue Jun 24 00:21:58 2014 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (rb_using_refinement): add write-barriers for
- cref->nd_refinements.
-
-Tue Jun 24 00:14:20 2014 Tanaka Akira <akr@fsij.org>
-
- * lib/net/ftp.rb (transfercmd): Close TCP server socket even if an
- exception occur.
-
-Tue Jun 24 00:06:41 2014 Hiroshi Shirosaki <h.shirosaki@gmail.com>
-
- * 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.
-
-Mon Jun 23 23:56:54 2014 Eric Wong <e@80x24.org>
-
- * 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]
-
-Mon Jun 23 02:46:14 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * class.c (rb_mod_init_copy): always clear instance variable,
- constant and method tables first, regardless the source tables.
- [ruby-dev:48182] [Bug #9813]
-
-Mon Jun 23 02:36:04 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Mon Jun 23 01:53:18 2014 Josh Goebel <dreamer3@gmail.com>
-
- * 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]
-
-Fri Jun 20 00:40:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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 Jun 20 00:40:06 2014 NARUSE, Yui <naruse@ruby-lang.org>
-
- * thread_pthread.c: rlimit is only available on Linux.
- At least r44712 breaks FreeBSD.
- [ruby-core:60113] [Bug #9454]
-
-Fri Jun 20 00:40:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Fri Jun 20 00:20:02 2014 Hiroshi Shirosaki <h.shirosaki@gmail.com>
-
- * configure.in: enable SSE2 on mingw. target='i386-pc-mingw32'.
- [ruby-core:62095] [Bug #8358]
-
-Tue Jun 17 00:45:44 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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 Jun 17 00:37:15 2014 Bugra Barin <bugrabarin@hotmail.com>
-
- * 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]
-
-Tue Jun 17 00:26:59 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Wed Jun 11 22:58:30 2014 Eric Wong <e@80x24.org>
-
- * gc.c (ruby_gc_set_params): simplify condition
-
-Wed Jun 11 22:58:30 2014 Eric Wong <e@80x24.org>
-
- * gc.c (ruby_gc_set_params): fix building without RGenGC
-
-Wed Jun 11 02:43:32 2014 Kazuki Tsujimoto <kazuki@callcc.net>
-
- * test/objspace/test_objspace.rb (TestObjSpace#test_dump_uninitialized_file):
- remove dependency on json library.
-
-Wed Jun 11 02:43:32 2014 Scott Francis <scott.francis@shopify.com>
-
- * ext/objspace/objspace_dump.c: Check fptr before trying to dump RFILE
- object fd. [GH-562]
-
- * test/objspace/test_objspace.rb: add test
-
-Wed Jun 11 02:27:55 2014 Akinori MUSHA <knu@iDaemons.org>
-
- * 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
-
-Wed Jun 11 02:18:34 2014 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * numeric.c: Fix Numeric#step with 0 unit [Bug #9575]
-
-Wed Jun 11 00:36:05 2014 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
-
- * test/ruby/test_string (test_LSHIFT_neary_long_max): extend timeout.
- this test fails on some CI environment by timeout.
-
-Sat Jun 7 01:17:16 2014 Tanaka Akira <akr@fsij.org>
-
- * signal.c (check_stack_overflow): Don't use ucontext_t if ucontext.h
- is not available.
- Fixes build on Android (x86).
-
-Tue Jun 3 00:38:33 2014 Eric Wong <e@80x24.org>
-
- * 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]
-
-Mon Jun 2 02:19:30 2014 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * 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]
-
-Mon Jun 2 02:12:10 2014 Eric Wong <e@80x24.org>
-
- * 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]
-
-Mon Jun 2 01:57:59 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_callee_setup_arg): turn a macro into an
- inline function.
-
-Mon Jun 2 01:46:43 2014 Eric Wong <e@80x24.org>
-
- * variable.c (rb_const_set): delete existing entry on redefinition
- [Bug #9645]
- * test/ruby/test_const.rb (test_redefinition): test for leak
-
-Fri May 30 00:13:19 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (setup_exception): preserve errinfo across calling #to_s
- method on the exception. [ruby-core:61091] [Bug #9568]
-
-Thu May 29 20:57:59 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * numeric.c (ruby_num_interval_step_size): check signs and get rid
- of implementation dependent behavior of negative division.
- [ruby-core:61106] [Bug #9570]
-
-Wed May 28 23:47:22 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Wed May 28 23:40:57 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Wed May 28 23:37:32 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/stringio/stringio.c (strio_putc): fix for non-ascii
- encoding, like as IO#putc. [ruby-dev:48114] [Bug #9765]
-
-Wed May 28 01:05:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/fileutils.rb (FileUtils#copy_entry): update rdoc about
- preserve option and permissions, following r31123.
- [ruby-core:62065] [Bug #9748]
-
-Wed May 28 00:57:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Wed May 28 00:57:06 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
- * vm_insnhelper.c (vm_search_super_method): allow bound
- UnboundMethod case.
-
-Wed May 28 00:38:37 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (ary_reject): may be turned into a shared array during
- the given block. [ruby-dev:48101] [Bug #9727]
-
-Wed May 28 00:29:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (str_buf_cat): should round up the capacity by 4KiB,
- but not number of rooms. [ruby-core:61886] [Bug #9709]
+ * test/ruby/test_regexp.rb
+ (TextRegexp#test_raw_hyphen_and_tk_char_type_after_range): use
+ Regexp.new instead of literal to ignore a parser warning.
-Wed May 28 00:23:11 2014 NARUSE, Yui <naruse@ruby-lang.org>
+Tue Oct 16 09:47:47 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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]
+ * test/ruby/test_regexp.rb
+ (TextRegexp#test_raw_hyphen_and_tk_char_type_after_range): ignoring
+ warnings are already set in setup method.
-Wed May 28 00:18:29 2014 Tadayoshi Funaba <tadf@dotrb.org>
+Sun Oct 14 01:21:42 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/date/date_core.c (d_lite_cmp): should compare with #<.
+ * regparse.c (parse_char_class): should match with a hyphen after a
+ range in a character class.
-Fri May 23 00:04:13 2014 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_regexp.rb (TestRegexp#test_char_class): fixed wrong
+ test.
- * 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]
+ * test/ruby/test_regexp.rb (TestRegexp#check): now can accept the
+ error message.
-Fri May 23 00:04:13 2014 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_regexp.rb
+ (TextRegexp#test_raw_hyphen_and_tk_char_type_after_range): renamed
+ because the previous name was wrong.
- * ext/socket: Wrap struct addrinfo by struct rb_addrinfo.
+ * test/ruby/test_regexp.rb
+ (TextRegexp#test_raw_hyphen_and_tk_char_type_after_range): added
+ more test pattern.
-Fri May 23 00:04:13 2014 Tanaka Akira <akr@fsij.org>
+Sat Oct 13 01:41:38 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/socket/ipsocket.c (ip_s_getaddress): Don't access freed memory.
+ * regparse.c (parse_char_class): also need to check the type of token
+ after raw hyphen in regexp class, because the charcter code area
+ is union'ed with the property of TK_CHAR_TYPE.
+ reported by Bushi Zhang at [ruby-core:47115] [Backport #6853].
-Mon May 19 00:47:00 2014 Koichi Sasada <ko1@atdot.net>
+Sat Oct 13 01:39:46 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/ruby/test_array.rb: remove useless `assert'.
+ * test/ruby/test_regexp.rb
+ (TestRegexp#test_raw_hyphen_and_type_char_after_range): added new
+ test. ref [ruby-core:47115] [Backport #6853]
-Mon May 19 00:47:00 2014 Koichi Sasada <ko1@atdot.net>
+Fri Oct 12 18:19:35 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * array.c (rb_ary_modify): remember shared array owner if a shared
- array owner is promoted and a shared array is not promoted.
+ * file.c (rb_get_path_check): path name must not contain NUL bytes.
- Now, shared array is WB-unprotected so that shared arrays are not
- promoted. All objects referred from shared array should be marked
- correctly.
+Fri Oct 12 17:51:43 2012 Shugo Maeda <shugo@ruby-lang.org>
- [ruby-core:61919] [ruby-trunk - Bug #9718]
+ * error.c (exc_to_s, name_err_to_s, name_err_mesg_to_str): do not
+ taint messages.
- * test/ruby/test_array.rb: add a test for above.
+Fri Oct 12 16:11:23 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon May 19 00:26:53 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (LIBDIR_BASENAME): use configured libdir value to fix
+ --enable-load-relative on systems where libdir is not default value,
+ overridden in config.site files. [ruby-core:47267] [Bug #6903]
- * parse.y (parser_yylex): only a newline after label should be
- significant. [ruby-core:61658] [Bug #9669]
+ * ruby.c (ruby_init_loadpath_safe): ditto.
-Mon May 19 00:26:53 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Oct 12 13:56:01 2012 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
- * 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]
+ * test/rexml/test_encoding.rb:
+ Add require 'require 'rexml/document'
-Fri May 16 00:27:02 2014 James Edward Gray II <james@graysoftinc.com>
+Fri Oct 12 13:36:32 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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]
+ * numeric.c (flodivmod): must through the same pass if HAVE_FMOD or not.
+ this is a bugfix of r35013.
-Fri May 16 00:14:25 2014 Kohei Suzuki <eagletmt@gmail.com>
+Fri Oct 12 13:28:37 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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]
+ * io.c (rb_cloexec_fcntl_dupfd): get rid of compile error on windows.
+ reported by Donovan Lampa at [ruby-core:43152] [Backport #6127],
+ based on a patch by Hiroshi Shirosaki at [ruby-core:47917].
-Fri May 16 00:14:25 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Oct 12 00:30:17 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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]
+ * io.c (ioctl_narg_len, linux_iocparm_len): reinstantiate linux
+ specific narg length calculation.
+ * test/ruby/test_io.rb (test_ioctl_linux2): add new test for old and
+ unstructured ioctl.
-Mon May 12 22:53:08 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Oct 12 00:30:17 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * 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]
+ * io.c (ioctl_narg_len): don't use _IOC_SIZE macro on Linux.
+ On Linux some constants for ioctl(2) doesn't include the size of
+ its return value and 16bit value; for example FIONREAD 0x541B.
+ Moreover the manual, ioctl_list(2), says "Note that the size
+ bits are very unreliable: in lots of cases they are wrong,
+ either because of buggy macros using sizeof(sizeof(struct)),
+ or because of legacy values."
+ So we shouldn't use it.
-Mon May 12 22:22:43 2014 Koichi Sasada <ko1@atdot.net>
+Tue Sep 25 09:30:36 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm.c (invoke_block_from_c): add VM_FRAME_FLAG_BMETHOD to record
- it is bmethod frame.
+ * win32/mkexports.rb: should not export DllMain().
+ reported by luis at [ruby-core:46743] [Bug #6790], solved by
+ Heesob Park, and confirmed by nobu.
- * vm.c (vm_exec): invoke RUBY_EVENT_RETURN event if rollbacked frame
- is VM_FRAME_FLAG_BMETHOD.
- [Bug #9759]
+Mon Sep 24 16:34:07 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
- * test/ruby/test_settracefunc.rb: add a test for TracePoint/set_trace_func.
+ * include/ruby/win32.h (rb_w32_pow): add new function.
+ We use powl() instead of broken pow() for x64-mingw32. This workaround
+ fixes test failures related to floating point numeric.
+ [ruby-core:46686] [Bug #6784]
- * vm_core.h: rename rb_thread_t::passed_me to
- rb_thread_t::passed_bmethod_me to clarify the usage.
+Mon Sep 24 10:38:55 2012 Luis Lavena <luislavena@gmail.com>
- * vm_insnhelper.c (vm_call_bmethod_body): use renamed member.
+ * test/win32ole/test_win32ole_method.rb (is_ruby64?): Correct platform
+ used to identify mingw-w64 (x64-mingw32). Patch by Hiroshi Shirosaki.
+ [ruby-core:46651][Bug #6782]
-Mon May 12 22:11:47 2014 Shota Fukumori <her@sorah.jp>
+Mon Sep 24 10:37:56 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * vm_eval.c (eval_string_with_cref): Unify to use NIL_P.
+ * lib/test/unit/parallel.rb: workaround fix for rubygems.
+ RubyGems can't find rake if the source directory is not equal to
+ the directory which is running the test. [Bug #6604]
-Mon May 12 22:11:47 2014 Shota Fukumori <her@sorah.jp>
+Fri Sep 21 19:53:38 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_eval.c (eval_string_with_cref): Use file path even if scope is
- given. Related to [ruby-core:56099] [Bug #8662] and r42103.
+ * ext/dl/cfunc.c (rb_dlcfunc_call): should convert a Bignum value to
+ unsigned long long on Win64.
+ [ruby-core:44636][Bug #6364] reported by raylinn@gmail.com (ray linn)
-Thu May 8 01:13:10 2014 NARUSE, Yui <naruse@ruby-lang.org>
+Fri Sep 21 18:45:20 2012 Luis Lavena <luislavena@gmail.com>
- * configure.in: correct pthread_setname_np's prototype on NetBSD.
- [Bug #9586]
+ * include/ruby/win32.h: undef stat to silence mingw-w64 stat
+ redefinition warnings (GCC 4.6.3).
-Tue May 6 00:54:56 2014 Narihiro Nakamura <authornari@gmail.com>
+Fri Sep 21 17:54:54 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * gc.c (gc_after_sweep): suppress unnecessary expanding heap.
- Tomb heap pages are freed pages here, so expanding heap is
- not required.
+ * configure.in: add -Wall always.
-Mon May 5 02:35:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Sep 20 10:23:37 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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]
+ * thread_pthread.c (native_cond_initialize): destroy condattr
+ after using it. Patch by Stanislav Sedov. Thank you.
+ [Bug #7041] [ruby-core:47619]
-Mon May 5 02:21:48 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Sep 9 23:01:43 2012 Tanaka Akira <akr@fsij.org>
- * 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].
+ * ext/zlib/extconf.rb: detect z_crc_t type which will be defined
+ since zlib-1.2.7.
-Mon May 5 01:20:27 2014 Eric Wong <e@80x24.org>
+ * ext/zlib/zlib.c (rb_zlib_crc_table): use z_crc_t if available.
- * gc.c (rb_gc_writebarrier): drop special case for big hash/array
- [Bug #9518]
+Sun Sep 9 02:44:21 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon May 5 01:13:00 2014 Koichi Sasada <ko1@atdot.net>
+ * ext/zlib/extconf.rb: Use an exception instaed of bare puts.
- * 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]
+Sun Sep 9 02:44:21 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- This issue is pointed by Tim Robertson.
- http://www.omniref.com/blog/blog/2014/03/27/ruby-garbage-collection-still-not-ready-for-production/
+ * ext/psych/extconf.rb: Use an exception instaed of bare abort.
-Mon May 5 00:52:18 2014 Kenta Murata <mrkn@mrkn.jp>
+Sun Sep 9 02:44:21 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/bigdecimal/bigdecimal.c (BigDecimal_initialize): Insert GC guard.
+ * ext/fiddle/extconf.rb: Use an exception instaed of bare abort.
- * ext/bigdecimal/bigdecimal.c (BigDecimal_global_new): ditto.
+Sun Sep 9 02:44:21 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon May 5 00:42:35 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * ext/readline/extconf.rb: Use an exception instead of bare exit.
- * ext/psych/psych.gemspec: update gemspec for psych-2.0.5
+Sun Sep 9 02:34:39 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon May 5 00:42:35 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * ext/extmk.rb: Show a message when extconf.rb raised an exception.
+ * ext/openssl/extconf.rb: Use exception raising instead of message
+ and/or abort. We want to display error message to console _and_
+ logging into mkmf.log.
- * 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.
+Sun Sep 9 02:30:20 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon May 5 00:35:20 2014 Aaron Patterson <aaron@tenderlovemaking.com>
+ * thread.c (rb_mutex_lock): stop multiple threads use
+ pthread_cond_timedwait() concurrently. [Bug #6278] [ruby-core:44275]
- * ext/psych/lib/psych/visitors/yaml_tree.rb: support dumping Encoding
- objects.
+Thu Aug 30 09:24:43 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/psych/lib/psych/visitors/to_ruby.rb: support loading Encoding
- objects.
+ * lib/uri/ftp.rb (URI::FTP#initialize): raise InvalidURIError if "//"
+ is not present [ruby-core:47344] [Bug #6945]
- * test/psych/test_encoding.rb: add test
+Tue Aug 28 00:40:14 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/psych/lib/psych.rb: add version
+ * test/webrick/test_cgi.rb (TestWEBrickCGI#start_cgi_server): there are
+ no guarantee of existance of RbConfig::CONFIG['LIBPATHENV'].
+ it only exists in Unix-like environments.
-Mon May 5 00:16:35 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+ * test/webrick/test_filehandler.rb
+ (WEBrick::TestFileHandler#test_script_disclosure): ditto.
- * gc.c: Fix up default GC params by @csfrancis [fix GH-556]
+Thu Aug 23 12:08:25 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
-Fri May 2 00:19:36 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_file_exhaustive.rb
+ (TestFileExhaustive#test_stat_special_file): add a test.
+ GetFileAttributesExW fails to get attributes of special files
+ such as pagefile.sys.
- * 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.
+ * win32/win32.c (check_valid_dir): for performance, check the path
+ by FindFirstFileW only if the path contains "...".
-Thu May 1 20:56:56 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/win32.c (winnt_stat): use GetFileAttributesExW instead of
+ FindFirstFileW since GetFileAttributesExW is faster.
+ Based on the patch by Dusan D. Majkic.
+ [ruby-core:47083] [Feature #6845]
- * ext/readline/extconf.rb (rl_hook_func_t): check pointer type.
- [ruby-dev:48089] [Bug #9702]
+Thu Aug 23 11:19:51 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu May 1 20:47:08 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread_pthread.c (ruby_init_stack): STACK_GROW_DIR_DETECTION is
+ necessary on platforms with unknown stack direction. [Bug #6761]
- * ext/readline/extconf.rb: fix typo, `$defs` not `$DEFS`.
- [ruby-core:61756] [Bug #9578]
+Thu Aug 23 11:19:51 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Thu May 1 20:47:08 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread_pthread.c (get_stack): Linux is the only OS which includes
+ the size of guard page into the stack size.
- * ext/readline/extconf.rb (rl_hook_func_t): define as Function for
- very old readline versions. [ruby-core:61209] [Bug #9578]
+Thu Aug 23 11:19:51 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu May 1 20:47:08 2014 Tanaka Akira <akr@fsij.org>
+ * gc.h (IS_STACK_DIR_UPPER): utility macro.
- * 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]
+ * thread_pthread.c (get_stack): seems stack size does not include
+ guard size on Mac OS X.
-Sat Mar 1 21:00:27 2014 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * thread_pthread.c (ruby_init_stack): adjust stack size for offset of
+ addr from the bottom.
- * proc.c: Having optional keyword arguments makes maximum arity +1,
- not unlimited [#8072]
+Thu Aug 23 11:19:51 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Mar 1 17:25:12 2014 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * thread_pthread.c (ruby_init_stack): use stack info if possible.
- * proc.c: Having any mandatory keyword argument increases min arity
- [#9299]
+Mon Aug 20 17:11:01 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Feb 24 14:56:41 2014 WATANABE Hirofumi <eban@ruby-lang.org>
+ * file.c (file_path_convert): don't convert it when the path string is
+ ascii only. [ruby-core:41556] [Bug #5733]
+ tests are contributed by nobu.
- * tool/make-snapshot: needs CXXFLAGS. [ruby-core:59393][Bug #9320]
+Thu Aug 9 22:48:58 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Feb 24 14:56:41 2014 NAKAMURA Usaku <usa@ruby-lang.org>
+ * pack.c (pack_unpack): when unpack('M') occurs an illegal byte
+ sequence, output the "=" character and the following character in
+ the decoded data without any transformation.
+ [ruby-dev:44875] [Bug #5635]
- * tool/make-snapshot: support new version scheme.
+Tue Jul 31 10:36:12 2012 Aaron Patterson <aaron@tenderlovemaking.com>
-Mon Feb 24 13:05:48 2014 Aaron Patterson <aaron@tenderlovemaking.com>
+ * ext/psych/lib/psych.rb: updated to released version.
- * ext/psych/lib/psych.rb: New release of psych.
* ext/psych/psych.gemspec: ditto
-Mon Feb 24 13:05:48 2014 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * 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
-
-Sat Feb 22 22:26:43 2014 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * ext/io/console/console.c (console_dev): need read access for conout$
- because some functions need it. [Bug#9554]
-
-Sat Feb 22 21:56:26 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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.
-
- * iseq.c (rb_iseq_parameters): if no keyword check, keyword rest is
- present.
-
- * parse.y (new_args_tail_gen): set keywords check to nd_cflag, which
- equals to that keyword rest is not present.
-
-Sat Feb 22 21:56:26 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * iseq.c (rb_iseq_parameters): push argument type symbol only for
- unnamed rest keywords argument.
-
-Sat Feb 22 21:56:26 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jul 19 09:33:46 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * proc.c (rb_iseq_min_max_arity): maximum argument is unlimited if
- having rest keywords argument. [ruby-core:53298] [Bug #8072]
+ * ext/psych/emitter.c (initialize): allow a configuration object to be
+ passed to the constructor so that mutation isn't required after
+ instantiation.
-Sat Feb 22 18:55:08 2014 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/psych/lib/psych/handler.rb: add configuration object
- * 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]
+ * ext/psych/lib/psych/visitors/emitter.rb: use configuration object if
+ extra configuration is present.
-Sat Feb 22 18:48:57 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Jul 17 03:56:34 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * class.c (rb_mod_init_copy): do nothing if copying self.
- [ruby-dev:47989] [Bug #9535]
-
- * hash.c (rb_hash_initialize_copy): ditto.
-
-Sat Feb 22 18:20:58 2014 Masaki Matsushita <glass.saga@gmail.com>
-
- * hash.c (rb_hash_flatten): fix behavior of flatten(-1).
- [ruby-dev:47988] [Bug #9533]
-
- * test/ruby/test_array.rb: test for above.
-
-Sat Feb 22 17:46:32 2014 Tanaka Akira <akr@fsij.org>
-
- * lib/open-uri.rb: Make proxy disabling working again.
- Fixed by Christophe Philemotte. [ruby-core:59650] [Bug #9385]
-
-Sat Feb 22 17:33:39 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_mod_s_constants): return its own constants for other
- than Module itself. [ruby-core:59763] [Bug #9413]
-
-Sat Feb 22 16:51:36 2014 Eric Wong <e@80x24.org>
-
- * ext/json/generator/depend: add build dependencies for json extension
- [Bug #9374] [ruby-core:59609]
- * ext/json/parser/depend: ditto
-
-Sat Feb 22 16:34:12 2014 Yusuke Endoh <mame@tsg.ne.jp>
-
- * ext/fiddle/closure.c: use sizeof(*pcl) for correct sizeof value.
- [ruby-core:57599] [Bug #8978].
-
-Sat Feb 22 16:34:12 2014 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/fiddle/closure.c: use sizeof(*pcl) for correct sizeof value.
- [ruby-core:57599] [Bug #8978]. Thanks mame!
-
-Sat Feb 22 16:17:54 2014 Eric Wong <e@80x24.org>
-
- * 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
-
-Sat Feb 22 15:56:53 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Sat Feb 22 15:56:53 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Sat Feb 22 15:13:38 2014 Benoit Daloze <eregontp@gmail.com>
-
- * range.c (Range#size): [DOC] improve description and add examples.
- Patch by @skade. [Fixes GH-501]
-
-Sat Feb 22 15:07:58 2014 Zachary Scott <e@zzak.io>
-
- * lib/racc/rdoc/grammar.en.rdoc: [DOC] Correct grammar and typos
- Patch by Giorgos Tsiftsis [Bug #9429] [ci skip]
-
-Sat Feb 22 15:06:32 2014 Zachary Scott <e@zzak.io>
-
- * lib/open-uri.rb: [DOC] use lower case version of core classes, same
- as commit r44878, based on patch by Jonathan Jackson [Bug #9483]
-
-Sat Feb 22 15:06:32 2014 Zachary Scott <e@zzak.io>
-
- * 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]
-
-Sat Feb 22 15:03:05 2014 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
-
- * variable.c: adding extra example in docs.
- patched by Steve Klabnik. [Bug #9210]
-
-Sat Feb 22 15:01:21 2014 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb (Resolv::DNS::Resource::TXT#data): Return concatenated
- string.
- Patch by Ryan Brunner. [ruby-core:58220] [Bug #9093]
-
-Sat Feb 22 14:52:55 2014 Zachary Scott <e@zzak.io>
-
- * ext/openssl/ossl_pkey_dh.c: Fixed typo by Sandor Szuecs [Bug #9243]
-
-Sat Feb 22 14:45:36 2014 Zachary Scott <e@zzak.io>
-
- * 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]
-
-Sat Feb 22 14:31:23 2014 Zachary Scott <e@zzak.io>
-
- * 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
-
-Sat Feb 22 14:18:35 2014 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb: Ignore name servers which cause EAFNOSUPPORT on
- socket creation.
- Reported by Bjoern Rennhak. [ruby-core:60442] [Bug #9477]
-
-Sat Feb 22 14:07:04 2014 Tanaka Akira <akr@fsij.org>
-
- * lib/resolv.rb (Resolv::DNS::Message::MessageDecoder): Raise
- DecodeError if no data before the limit.
- Reported by Will Bryant. [ruby-core:60557] [Bug #9498]
-
-Sat Feb 22 13:49:30 2014 Shugo Maeda <shugo@ruby-lang.org>
-
- * 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]
-
- * 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]
-
- * test/ruby/test_refinement.rb: related tests.
-
-Sat Feb 22 13:26:57 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Sat Feb 22 13:17:32 2014 Masaki Matsushita <glass.saga@gmail.com>
-
- * ext/thread/thread.c (rb_szqueue_clear): notify SZQUEUE_WAITERS
- on SizedQueue#clear. [ruby-core:59462] [Bug #9342]
-
- * test/thread/test_queue.rb: add test. the patch is from
- Justin Collins.
-
-Sat Feb 22 01:35:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check if pthread_setname_np is available.
-
- * thread_pthread.c: pthread_setname_np is not available on old
- Darwins. [ruby-core:60524] [Bug #9492]
-
-Sat Feb 22 00:21:50 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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 Feb 21 23:51:38 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * encoding.c (must_encindex, rb_enc_from_index, rb_obj_encoding): mask
- encoding index and ignore dummy flags. [ruby-core:59354] [Bug #9314]
-
-Fri Feb 21 23:10:12 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/mkmf.rb (RbConfig): expand RUBY_SO_NAME for extensions
- backward compatibility. [ruby-core:59426] [Bug #9329]
-
-Fri Feb 21 23:07:56 2014 Akio Tajima <artonx@yahoo.co.jp>
-
- * win32/Makefile.sub: remove HAVE_FSEEKO because fseeko removed from win32/win32.c
- Fixed [Bug #9333].
-
-Fri Feb 21 23:00:34 2014 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * ext/psych/lib/psych/visitors/yaml_tree.rb: dumping strings with
- quotes should not have changed. [ruby-core:59316] [Bug #9300]
-
- * ext/psych/lib/psych.rb: fixed missing require.
-
- * test/psych/test_string.rb: test
-
-Sun Feb 2 05:48:42 2014 Eric Wong <e@80x24.org>
-
- * io.c (rb_io_syswrite): add RB_GC_GUARD
- [Bug #9472][ruby-core:60407]
-
-Fri Feb 21 17:42:42 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/resolv.rb (Resolv::Hosts#lazy_initialize): should not
- consider encodings in hosts file. [ruby-core:59239] [Bug #9273]
-
- * lib/resolv.rb (Resolv::Config.parse_resolv_conf): ditto.
-
-Fri Feb 21 16:47:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (get_encoding): respect BOM on pseudo encodings.
- [ruby-dev:47895] [Bug #9415]
-
-Fri Feb 21 16:47:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * string.c (get_actual_encoding): get actual encoding according to
- the BOM if exists.
-
- * string.c (rb_str_inspect): use according encoding, instead of
- pseudo encodings, UTF-{16,32}. [ruby-core:59757] [Bug #8940]
-
-Fri Feb 21 13:39:21 2014 Charlie Somerville <charliesome@ruby-lang.org>
-
- * 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]
-
-Thu Feb 20 12:58:45 2014 Tanaka Akira <akr@fsij.org>
-
- * 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].
-
-Thu Feb 20 12:58:45 2014 Eric Wong <normalperson@yhbt.net>
-
- * process.c (send_child_error): retry write on EINTR to fix
- occasional Errno::EINTR from Process.spawn.
-
- * process.c (recv_child_error): retry read on EINTR to fix
- occasional Errno::EINTR from Process.spawn.
-
-Thu Feb 20 12:24:59 2014 Eric Hodel <drbrain@segment7.net>
-
- * lib/rinda/ring.rb (Rinda::RingFinger#make_socket): Use
- ipv4_multicast_ttl option for portability.
-
-Thu Feb 20 10:19:40 2014 Tanaka Akira <akr@fsij.org>
-
- * 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]
-
-Wed Feb 19 15:25:13 2014 Koichi Sasada <ko1@atdot.net>
-
- * 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]
-
-Wed Feb 19 14:25:55 2014 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_gc.rb: ignore warning messages for running with -w
- option such as chkbuild.
-
-Wed Feb 19 14:25:55 2014 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (get_envparam_double): fix a warning message.
-
-Wed Feb 19 14:25:55 2014 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: introduce new environment variable
- "RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR" to control major/minor GC
- frequency.
-
- 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.
-
- * test/ruby/test_gc.rb: add a test.
-
-Wed Feb 19 07:51:02 2014 Eric Hodel <drbrain@segment7.net>
-
- * lib/rinda/ring.rb (Rinda::RingFinger#make_socket): Use
- ipv4_multicast_loop option for portability. Patch by Jeremy Evans.
- [ruby-trunk - Bug #9351]
-
-Mon Feb 17 05:43:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: reset LDFLAGS and DLDFLAGS for opt-dir again after
- LIBPATHFLAG and RPATHFLAG are set. [ruby-dev:47868] [Bug #9317]
-
-Sun Feb 16 07:13:36 2014 Tanaka Akira <akr@fsij.org>
-
- * configure.in: Fix compilation error.
- https://bugs.ruby-lang.org/issues/8358#note-16
-
-Sun Feb 16 07:13:36 2014 Vit Ondruch <vondruch@redhat.com>
-
- * 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]
-
-Sun Feb 16 07:13:36 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: -mstackrealign is necessary for -msse2 working.
- [ruby-core:54716] [Bug #8349]
-
-Sun Feb 16 07:13:36 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: -mstackrealign is necessary for -msse2 working.
- [ruby-core:54716] [Bug #8349]
-
- * configure.in: use SSE2 instructions to drop unexpected precisions on
- other than mingw. [ruby-core:59472] [Bug #8358]
-
-Sun Feb 16 07:13:36 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: use SSE2 instructions for drop unexpected
- precisions. [ruby-core:54738] [Bug #8358]
-
-Fri Feb 7 04:19:19 2014 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (get_envparam_int): correct warning messsages.
-
- * gc.c (get_envparam_double): ditto.
-
-Fri Feb 7 04:19:19 2014 Koichi Sasada <ko1@atdot.net>
-
- * 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.
-
- * gc.c (get_envparam_double): ditto.
-
-Thu Feb 6 08:23:28 2014 Eric Wong <e@80x24.org>
-
- * 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
-
-Thu Feb 6 11:27:39 2014 Eric Hodel <drbrain@segment7.net>
-
- * 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
-
-Thu Feb 6 11:23:59 2014 Koichi Sasada <ko1@atdot.net>
-
- * 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.
-
- * gc.c (get_envparam_int): accept a value equals to lowerbound.
-
- * gc.c (get_envparam_double): ditto.
-
-Wed Feb 5 23:57:05 2014 Charlie Somerville <charliesome@ruby-lang.org>
-
- * 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]
-
- * test/thread/test_queue.rb: add test
-
-Wed Feb 5 23:43:30 2014 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * hash.c (rb_objid_hash): should return `long'. brushup r44534.
-
- * object.c (rb_obj_hash): follow above change.
-
-Wed Feb 5 23:43:30 2014 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * 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.
-
-Wed Feb 5 23:43:30 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/psych/lib/psych/visitors/to_ruby.rb: strings with YAML anchors
+ are properly referenced. Patched by Joe Rafaniello via Github:
+ https://github.com/tenderlove/psych/pull/69
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto
+ * test/psych/test_alias_and_anchor.rb: test for change
- * hash.c (rb_objid_hash): return hash value from object ID with a
- salt, extract from rb_any_hash().
+Sat Jun 16 01:27:14 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * object.c (rb_obj_hash): return same value as rb_any_hash().
- fix r44125. [ruby-core:59638] [Bug #9381]
+ * ext/psych/lib/psych.rb: bumping psych to 1.3.3
+ * ext/psych/psych.gemspec: ditto
-Wed Feb 5 22:28:41 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri May 18 15:53:05 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * vm_insnhelper.c (vm_search_super_method): allow bound method from a
- module, yet another method transplanting.
+ * ext/psych/extconf.rb: Use an exception instaed of bare abort.
-Wed Feb 5 22:28:41 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri May 18 01:28:21 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * 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]
+ * ext/psych/parser.c (transcode_string): fix encoding index names.
+ Thanks markizko for reporting.
-Wed Feb 5 21:57:40 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed May 16 05:11:29 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * 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.
+ * ext/psych/lib/psych/visitors/to_ruby.rb: fix a bug with string
+ subclass dumping and loading.
- * ext/socket/socket.c (rsock_syserr_fail_path): ditto, and
- rb_syserr_fail().
+ * test/psych/test_array.rb: pertinent tests
- * ext/socket/socket.c (rsock_sys_fail_sockaddr): ditto, use
- rsock_syserr_fail_raddrinfo().
+ * test/psych/test_string.rb: ditto
- * ext/socket/socket.c (rsock_sys_fail_raddrinfo): ditto.
+Wed May 16 01:31:21 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * ext/socket/socket.c (setup_domain_and_type): ditto.
+ * ext/psych/lib/psych/visitors/to_ruby.rb: convert omap tagged maps to
+ Psych::Omap objects rather than hashes. [Bug #6425]
-Wed Feb 5 21:57:40 2014 Eric Wong <normalperson@yhbt.net>
+ * test/psych/test_omap.rb: pertinent test.
- * 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]
+Wed May 16 01:15:45 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * 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
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: keep a reference to
+ custom coders so that GC does not impact dumped yaml reference ids.
-Wed Feb 5 21:12:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Apr 30 04:43:53 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * lib/timeout.rb (Timeout::ExitException.catch): pass arguments
- for new instance.
+ * ext/psych/lib/psych/json/yaml_events.rb: implicit styles should not
+ be changeable for JSON events.
- * lib/timeout.rb (Timeout::ExitException#exception): fallback to
- Timeout::Error if couldn't throw. [ruby-dev:47872] [Bug #9380]
+Sun Jul 29 04:32:31 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/timeout.rb (Timeout#timeout): initialize ExitException with
- message for the fallback case.
+ * configure.in (ruby_pc): make configurable. [Bug #6051]
-Wed Feb 5 21:12:02 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jul 29 04:32:06 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/timeout.rb (Timeout#timeout): should not rescue ordinarily
- raised ExitException, which should not be thrown.
+ * template/ruby.pc.in: added rubylibprefix, {rubylib,vendor,site}dir
+ and {ruby,vendor,site}archdir. [ruby-core:42766][Feature #6052]
- * lib/timeout.rb (Timeout::ExitException.catch): set @thread only if
- it ought to be caught.
+Sun Jul 29 04:31:01 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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]
+ * bignum.c: Added #include <strings.h> for ffs(). Patch by Perry
+ Smith. Thank you. [Bug #6748]
-Wed Feb 5 17:55:28 2014 Aman Gupta <ruby@tmm1.net>
+Sat Jul 28 04:04:01 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * include/ruby/intern.h (rb_num_zerodiv): Added NORETURN.
+ Patched by Xi Wang. [Bug #6736]
-Wed Feb 5 11:48:42 2014 Charlie Somerville <charliesome@ruby-lang.org>
+Wed Jul 4 19:36:17 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * struct.c (rb_struct_set): return assigned value from setter method
- rather than struct object. [Bug #9353] [ruby-core:59509]
+ * ext/dl/cfunc.c (rb_dlcfunc_call): also needed the workaround for VC8
+ for x64. [ruby-dev:45875] [Bug #6676]
+ reported by aves_ramphastos (Seigo Ishigane)
- * test/ruby/test_struct.rb (test_setter_method_returns_value): add test
+Tue Jul 3 19:37:52 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Feb 5 11:13:21 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (rmext): no extension to strip if empty string.
- * 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.
+ * proc.c (rb_vm_rewrite_dfp_in_errinfo): Fix `unexpected return'
+ occurs when a proc is called in ensure. [Backport #6460]
-Sun Feb 2 22:39:28 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Jul 3 11:44:23 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/delegate.rb (Delegator): keep source information methods
- which start and end with '__'. [ruby-core:59718] [Bug #9403]
+ * file.c (rb_enc_path_next, rb_enc_path_skip_prefix)
+ (rb_enc_path_last_separator, rb_enc_path_end)
+ (ruby_enc_find_basename, ruby_enc_find_extname): encoding-aware
+ path handling functions.
-Fri Jan 31 12:10:16 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (rb_home_dir, file_expand_path, rb_realpath_internal)
+ (rb_file_s_basename, rb_file_dirname, rb_file_s_extname)
+ (rb_file_join): should respect the encodings of arguments than
+ file system encoding. [ruby-dev:45145] [Bug #5919]
- * proc.c (mnew_from_me): keep iclass as-is, to make inheritance
- chain consistent. [ruby-core:59358] [Bug #9315]
+ * dir.c (check_dirname, ruby_glob0): ditto.
- * proc.c (method_owner): return the original defined_class from
- prepended iclass, instead.
+ * ext/pathname/pathname.c (path_sub_ext): ditto.
-Fri Jan 31 12:05:59 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Jul 3 11:43:46 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in: let mingw do something black-magic, and check if
- _gmtime64_s() is available actually.
+ * dir.c (dir_chdir, check_dirname): get rid of optimization-out.
- * 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]
+Thu Jun 28 17:57:49 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Jan 30 15:02:35 2014 Shugo Maeda <shugo@ruby-lang.org>
+ * win32/win32.c (is_socket, is_console): add prototypes to fix compile
+ problem with gcc introduced at r32549.
- * configure.in: use $@ instead of $(.TARGET) because .TARGET is not
- supported by GNU make.
+Wed Jun 27 08:31:50 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Jan 27 16:49:52 2014 Kenta Murata <mrkn@mrkn.jp>
+ * insns.def (splatarray): make new array if flag is set.
- * 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]
+ * compile.c (iseq_compile_each): make new array with
+ splat. [ruby-core:21901][Feature #1125]
- * test/bigdecimal/test_bigdecimal.rb: tests for the above change.
+Wed Jun 27 04:23:26 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/bigdecimal/bigdecimal.gemspec: bigdecimal version 1.2.4.
+ * win32/win32.c (rb_w32_sysinit): let the system not display the
+ critical-error-handler message box and the Windows Error Reporting
+ dialog. [ruby-core:45389] [Bug #6535]
-Mon Jan 27 16:45:34 2014 Yamashita Yuu <yamashita@geishatokyo.com>
+Wed Jun 27 04:20:41 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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]
+ * bignum.c (rb_big_pow): estimate result bit size more precisely.
+ [ruby-core:30735][Feature #3429]
-Thu Jan 23 10:37:24 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Jun 26 20:36:53 2012 Tanaka Akira <akr@fsij.org>
- * hash.c (HAS_EXTRA_STATES): warn extra states only when something
- differ. [ruby-core:59254] [Bug #9275]
+ * lib/drb/ssl.rb: generate 1024 bits RSA key instead of 512 bits.
+ OpenSSL 1.0.1 rejects 512 bits RSA key for TLS1.2 with SHA512.
+ http://rt.openssl.org/Ticket/Display.html?id=2769&user=guest&pass=guest
+ reported by Bohuslav Kabrda.
+ [ruby-core:43844] [ruby-trunk - Bug #6221]
-Thu Jan 9 14:05:24 2014 NAKAMURA Usaku <usa@ruby-lang.org>
+Tue Jun 26 20:35:59 2012 Eric Hodel <drbrain@segment7.net>
- * win32/{setup.mak,Makefile.sub}: update fake.rb like
- template/fake.rb.in.
+ * ext/zlib/zlib.c (do_inflate): Inflate more data if buffered data
+ exists. Allows Zlib::Inflate#set_dictionary to work.
+ [ruby-trunk - Bug #5929]
-Thu Jan 9 14:05:24 2014 NAKAMURA Usaku <usa@ruby-lang.org>
+Thu Jun 21 13:42:57 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * thread.c (rb_threadptr_execute_interrupts_common):
+ test_signal_requiring of test/ruby/test_signal.rb fail if the sub
+ process is killed on waiting IO in lex_io_gets in rb_load_file in
+ rb_load_internal in require.
+ This is because
+ (1) the process receive the killing signal in
+ rb_thread_io_blocking_region in rb_read_internal in lex_io_gets.
+ (2) set th->errinfo as INT2FIX(TAG_FATAL) at
+ rb_threadptr_execute_interrupts_common.
+ (3) escape rb_load_file in rb_load_internal and jump to EXEC_TAG()
+ without set loaded as TRUE.
+ (4) call first rb_exc_raise(GET_THREAD()->errinfo); because loaded
+ is FALSE as above. this errinfo should be an exception object
+ but this is INT2FIX(TAG_FATAL).
+ Don't call first rb_exc_raise if GET_THREAD()->errinfo is Fixnum.
-Thu Jan 9 08:21:00 2014 Aman Gupta <ruby@tmm1.net>
+Mon Jun 11 19:56:22 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * test/webrick/test_cgi.rb (class TestWEBrickCGI): respect
+ RbConfig::CONFIG["LIBPATHENV"]. [Bug #5135] [ruby-core:38653]
+ * test/webrick/test_filehandler.rb (class WEBrick): ditto.
-Thu Dec 26 03:28:11 2013 Koichi Sasada <ko1@atdot.net>
+Tue Jun 5 14:03:53 2012 Akinori MUSHA <knu@iDaemons.org>
- * vm_insnhelper.c (argument_error): insert dummy frame to make
- a backtrace object intead of modify backtrace string array.
- [Bug #9295]
+ * lib/ipaddr.rb: Inhibit zero-filled octets in an IPv4 address in
+ all platforms. [ruby-dev:45671]
- * 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.
+ * lib/ipaddr.rb: Allow the x:x:x:x:x:x:d.d.d.d form not limited to
+ IPv4 mapped/compatible addresses. This change also makes it
+ possible for the parser to understand IPv4 mapped and compatible
+ IPv6 addresses in non-compressed form.
-Wed Dec 25 16:58:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/ipaddr.rb: Stop exposing IPSocket.valid*? methods which were
+ only usable on non-IPv6-ready platforms.
- * 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]
+Sat Jun 2 18:49:39 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * vm.c (rb_vm_cref_in_context): return ruby level cref if self is
- same.
+ * string.c (rb_enc_cr_str_buf_cat): don't reset coderange as unknown.
+ the condition 'ptr_a8 && str_cr != ENC_CODERANGE_7BIT' means not
+ unknown, str is also ASCII-8BIT because str_encindex == ptr_encindex,
+ and nont (str_cr == ENC_CODERANGE_UNKNOWN) and
+ str_cr != ENC_CODERANGE_7BIT means str_cr is valid because ASCII-8BIT
+ can't be broken. [ruby-dev:45688] [Bug #6509]
-Wed Dec 25 16:35:34 2013 Yusuke Endoh <mame@tsg.ne.jp>
+Wed May 30 17:19:56 2012 Eric Hodel <drbrain@segment7.net>
- * 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.)
+ * ext/zlib/zlib.c (do_inflate): Inflate more data if buffered data
+ exists. Allows Zlib::Inflate#set_dictionary to work.
+ [ruby-trunk - Bug #5929]
-Tue Dec 24 23:47:50 2013 Koichi Sasada <ko1@atdot.net>
+Mon May 28 11:40:19 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * README.EXT: add a refer to URL.
+ * io.c (rb_io_extract_modeenc): fail only if conflicting
+ text/binary modes given explicitly. [ruby-dev:45268][Bug #6055]
-Tue Dec 24 23:47:50 2013 Koichi Sasada <ko1@atdot.net>
+Fri May 25 17:18:06 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * README.EXT: add a document about RGenGC.
- Reviewed by havenwood.
- [misc #8962]
+ * parse.y (f_arglist): should reset lexical states after empty
+ argument list with no parenthesis as well as parenthesized list,
+ so that reserved name method definition work. [ruby-dev:45626]
+ [Bug #6403]
- * README.EXT.ja: ditto.
+Fri May 25 10:40:31 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
-Mon Dec 23 19:00:00 2013 Eric Hodel <drbrain@segment7.net>
+ * include/ruby/win32.h (FD_SET): change function to macro.
+ To avoid buffer overflow when smaller FD_SETSISE is used in ext
+ libraries.
- * test/rubygems/test_gem_ext_builder.rb: Fix warning due to ambiguous
- expression.
+ * win32/win32.c (rb_w32_fdset): this function is not used anymore.
+ But we leave this for compatibility.
-Mon Dec 23 16:13:10 2013 Eric Hodel <drbrain@segment7.net>
+ * win32/win32.c (rb_w32_select_with_thread): fix SEGV when smaller
+ FD_SETSISE is used in ext libraries. Dereference of fd_set pointer
+ causes SEGV.
- * 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
+ * test/-ext-/win32/test_fd_setsize.rb(TestFdSetSize): add tests for
above.
+ * ext/-test-/win32/fd_setsize/depend: ditto.
+ * ext/-test-/win32/fd_setsize/extconf.rb: ditto.
+ * ext/-test-/win32/fd_setsize/fd_setsize.c: ditto.
-Mon Dec 23 16:12:24 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * array.c: Have to_h raise on elements that are not key-value pairs
- [#9239]
-
- * enum.c: ditto
-
-Sun Dec 22 19:22:52 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc.rb: Set RDoc to release version.
-
-Sun Dec 22 19:22:31 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems.rb: Set RubyGems to release version.
-
-Sun Dec 22 19:22:01 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems.rb (module Gem): Fix comment for
- Gem::load_path_insert_index.
-
-Sun Dec 22 18:08:42 2013 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * win32/Makefile.sub (fake.rb): fixed wrong RUBY_PLATFORM, to correctly
- install win32.h.
- [ruby-core:58801][Bug #9199] reported by arton.
-
-Fri Dec 20 17:52:50 2013 Koichi Sasada <ko1@atdot.net>
-
- * vm_method.c: check definition of
- GLOBAL_METHOD_CACHE_SIZE and GLOBAL_METHOD_CACHE_MASK.
-
-Fri Dec 20 17:03:10 2013 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/ruby.h: rename OBJ_WRITE and OBJ_WRITTEN into
- RB_OBJ_WRITE and RB_OBJ_WRITTEN.
-
- * 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.
-
-Fri Dec 20 16:01:35 2013 Koichi Sasada <ko1@atdot.net>
-
- * include/ruby/ruby.h: add a comment for WB interfaces.
-
-Fri Dec 20 16:00:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Fri Dec 20 14:19:12 2013 NARUSE, Yui <naruse@ruby-lang.org>
-
- * configure.in (AC_ARG_WITH): use withval directly.
- fix failure on FreeBSD.
- http://fb32.rubyci.org/~chkbuild/ruby-trunk/log/20131217T070301Z.diff.html.gz
-
-Fri Dec 20 14:00:01 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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
-
-Fri Dec 20 07:07:35 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Update to RubyGems master 03d6ae7. Changes include:
-
- * Fixed typos.
-
- * Relaxed Gem.ruby test for ruby packagers that do not use `ruby`.
-
- * test/rubygems: ditto.
-
-Thu Dec 19 14:03:04 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (heap_get_freeobj): improve hot path performance.
-
- * 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.
-
-Thu Dec 19 12:05:17 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Update to RubyGems master af60443. Changes include:
-
- * Improved speed of `gem install --ignore-dependencies`.
-
- * Open read-write for exclusive flock. [ruby-trunk - Bug #9257]
-
- * Remove specification before install to prevent infinite loop.
-
-Thu Dec 19 11:23:49 2013 Aman Gupta <ruby@tmm1.net>
-
- * vm_insnhelper.c (vm_call_iseq_setup_normal): simple for loop
- condition optimization. this area shows up as a hotspot in VM
- profiles.
-
-Thu Dec 19 10:50:13 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (newobj_of): don't need to RBASIC_SET_CLASS() which includes WB
- here because created obj is always YOUNG/INFANT.
-
-Thu Dec 19 10:48:37 2013 Koichi Sasada <ko1@atdot.net>
-
- * benchmark/gc/gcbench.rb: check GC::OPTS availability
- for not MRI 2.1.0.
-
-Thu Dec 19 03:10:30 2013 Aman Gupta <ruby@tmm1.net>
-
- * gc.c (heap_get_freeobj): remove redundant assignment. heap->freelist
- is set after the while() loop already.
-
-Thu Dec 19 01:54:30 2013 Koichi Sasada <ko1@atdot.net>
-
- * test/runner.rb: fix commit miss on r44278.
-
-Thu Dec 19 00:26:11 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (garbage_collect_body): lazy_sweep setting should work
- without USE_RGENGC.
-
-Wed Dec 18 23:31:04 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (gc_profile_dump_major_reason): fix this function because major_reason
- can be OR of multiple reasons.
-
- * gc.c (gc_profile_dump_on): ditto.
-
-Wed Dec 18 17:03:00 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (gc_profile_record_get): should return an empty array
- when profiling is active.
-
-Wed Dec 18 16:49:40 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (gc_profile_clear, gc_profile_enable): remove rest_sweep().
-
- * gc.c: check objspace->profile.current_record before inserting
- profiling record by new macro gc_prof_enabled().
-
-Wed Dec 18 14:32:06 2013 Koichi Sasada <ko1@atdot.net>
-
- * vm_exec.h (VM_DEBUG_STACKOVERFLOW): added.
- disable stack overflow check for every stack pushing as default.
-
- * vm_exec.c (vm_stack_overflow_for_insn): ditto.
-
-Wed Dec 18 10:00:22 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Update to RubyGems master d8f12e2. This increases the
- speed of `gem install --ignore-dependencies` which helps bundler
- tests.
- * test/rubygems: ditto.
-
-Wed Dec 18 09:00:17 2013 Koichi Sasada <ko1@atdot.net>
-
- * test/ruby/test_gc.rb (test_expand_heap): allow +/-1 diff.
-
-Tue Dec 17 23:44:15 2013 Kazuki Tsujimoto <kazuki@callcc.net>
-
- * test/ruby/test_io.rb: fix duplicated test name.
-
-Tue Dec 17 20:15:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_hash_reject): revert to deprecated behavior, with
- warnings, due to compatibility for HashWithDifferentAccess.
- [ruby-core:59154] [Bug #9223]
-
-Tue Dec 17 17:30:56 2013 Akinori MUSHA <knu@iDaemons.org>
-
- * misc/ruby-electric.el: Import version 2.1.1 from
- https://github.com/knu/ruby-electric.el.
-
- * ruby-electric-delete-backward-char: Enable support for number
- prefix.
-
- * ruby-electric-curlies: Fix electric operation after an open
- curly.
-
-Tue Dec 17 16:19:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Tue Dec 17 10:48:04 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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.
-
-Tue Dec 17 05:18:17 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Update to RubyGems master 1c5f4b3. Allows rubygems
- repackagers to disable backward-compatible shared gem directory
- behavior.
- * test/rubygems: ditto.
-
-Tue Dec 17 05:14:35 2013 Eric Hodel <drbrain@segment7.net>
-
- * NEWS (RDoc): Update version number so I don't have to change it
- for the final release.
-
-Mon Dec 16 19:19:19 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (rb_objspace_markable_object_p): should check special_const_p
- first (by is_markable_object()).
-
-Mon Dec 16 19:12:54 2013 Koichi Sasada <ko1@atdot.net>
-
- * ext/objspace/objspace.c (reachable_object_from_root_i): use
- compare_by_identity hash to avoid hash modify problem
- during iteration.
- [Bug #9252]
-
- * ext/objspace/objspace.c (reachable_objects_from_root): ditto.
-
-Mon Dec 16 18:16:28 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (gc_verify_internal_consistency): should not use
- rb_objspace_each_objects() because it call rest_sweep().
-
-Mon Dec 16 18:07:30 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (rb_objspace_markable_object_p): fix last commit (build error).
-
-Mon Dec 16 18:04:28 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (rb_objspace_markable_object_p): it should be live objects.
-
-Mon Dec 16 18:00:51 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (rb_objspace_each_objects): should not clear dont_lazy_sweep
- flag in nested case.
-
-Mon Dec 16 16:40:35 2013 Koichi Sasada <ko1@atdot.net>
-
- * 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.
-
- * test/ruby/test_alias.rb: add a test.
-
-Mon Dec 16 14:14:22 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: use gc_verify_internal_consistency() instead of
- gc_check_before_marks_i() for check consistency
- on RGENGC_CHECK_MODE >= 2.
-
-Mon Dec 16 14:01:48 2013 NARUSE, Yui <naruse@ruby-lang.org>
-
- * process.c (make_clock_result): add :second as a unit for
- Process.clock_gettime.
-
-Mon Dec 16 13:10:54 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: introduce GC.verify_internal_consistency method to verify GC
- internal data structure.
-
- Now this method only checks generation (old/young) consistency.
-
-Mon Dec 16 11:49:26 2013 Aman Gupta <ruby@tmm1.net>
-
- * gc.c (gc_info_decode): Fix build errors when compiled with
- RGENGC_ESTIMATE_OLDMALLOC=0
- * gc.c (objspace_malloc_increase): ditto
-
-Sun Dec 15 13:38:29 2013 Koichi Sasada <ko1@atdot.net>
-
- * ext/objspace/objspace.c (reachable_object_from_root_i):
- reachable objects should not include categories and
- category_objects because it is noisy information.
-
- 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?
-
-Sun Dec 15 07:09:28 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Update to RDoc master 263a9e5. This improves the
- accessibility of the search box.
-
-Sat Dec 14 17:39:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (vm_callee_setup_arg_complex): count post
- arguments as mandatory arguments. [ruby-core:57706] [Bug #8993]
-
- * vm_insnhelper.c (vm_yield_setup_block_args): ditto.
-
-Sat Dec 14 16:26:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in (rubylibprefix): replace exec_prefix as well as
- bindir and libdir. a patch by kimuraw (Wataru Kimura) at
- [ruby-dev:47852]. [Bug #9160]
-
-Sat Dec 14 14:42:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Sat Dec 14 13:01:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (mnew_from_me): method by respond_to_missing? should be
- owned by the original class.
-
-Sat Dec 14 11:55:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/scanf.rb (IO#scanf): fix mistaken use of rescue modifier.
- a patch by Mon_Ouie at [ruby-core:52813]. [Bug #7940]
-
-Sat Dec 14 11:44:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Sat Dec 14 11:25:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * object.c (rb_mod_const_defined): support nested class path as
- well as const_get. [Feature #7414]
-
-Sat Dec 14 01:31:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * eval.c (rb_rescue2): reuse tags pushed for body proc to protect
- rescue proc too.
-
-Sat Dec 14 01:15:51 2013 Masaya Tarui <tarui@ruby-lang.org>
-
- * gc.c (wmap_final_func): Bugfix. Should update *value to new pointer.
-
-Sat Dec 14 01:05:46 2013 Tanaka Akira <akr@fsij.org>
-
- * 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]
-
- * lib/cgi/core.rb: Ditto.
-
- * lib/drb/ssl.rb: Ditto.
-
-Sat Dec 14 00:34:31 2013 Naohisa Goto <ngotogenome@gmail.com>
-
- * internal.h (ruby_sized_xrealloc2): fix typo introduced in r44117,
- which cause compile error on Solaris.
-
-Sat Dec 14 00:22:16 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * thread.c: (exec_recursive): use rb_catch_protect() instead of
- rb_catch_obj() and PUSH_TAG(), and reduce pushing tags and
- machine stack usage.
-
-Sat Dec 14 00:18:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (mnew_from_me): achieve the original defined_class from
- prepended iclass, to fix inherited owner.
-
- * proc.c (method_owner): return the defined class, but not the
- class which the method object is created from.
-
-Fri Dec 13 22:29:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * proc.c (method_owner): return the class where alias is defined, not
- the class original method is defined.
-
- * vm_method.c (rb_method_entry_make, rb_alias): store the originally
- defined class in me. [Bug #7993] [Bug #7842] [Bug #9236]
-
- * vm_method.c (rb_method_entry_get_without_cache): cache included
- module but not iclass.
-
-Fri Dec 13 16:27:17 2013 Aman Gupta <ruby@tmm1.net>
-
- * gc.c (gc_info_decode): Use :major_by=>:nofree as fallback reason
- when other trigger conditions are present.
-
-Fri Dec 13 13:25:30 2013 Koichi Sasada <ko1@atdot.net>
-
- * error.c: add Exception#backtrace_locations.
- Now, there are no setter and independent from Exception#backtrace.
- [Feature #8960]
-
- * eval.c (setup_exception): set backtrace locations for `bt_location'
- special attribute.
-
- * vm_backtrace.c (rb_backtrace_to_location_ary): added.
-
- * internal.h: ditto.
-
- * test/ruby/test_backtrace.rb: add a test for
- Exception#backtrace_locations.
-
-Fri Dec 13 12:01:07 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (garbage_collect_body): use rb_bug() and explicit error message
- instead of using assert().
- [Bug #9222]
-
-Fri Dec 13 11:52:41 2013 Koichi Sasada <ko1@atdot.net>
-
- * array.c: fix comment to remove the word "shady".
-
- * variable.c: ditto.
-
-Fri Dec 13 11:33:55 2013 Koichi Sasada <ko1@atdot.net>
-
- * 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".
-
-Fri Dec 13 10:04:23 2013 Eric Hodel <drbrain@segment7.net>
-
- * 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.
-
-Fri Dec 13 09:50:49 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Update to RubyGems master ddac51f. Changes:
-
- * Allow override for the shared gem installation directory for
- rubygems packagers.
-
- * Lock gem cache files for read and write to improve thread safety.
-
- * Use io/console when available.
-
- * Minor cleanup.
-
- * test/rubygems: ditto.
-
-Fri Dec 13 08:15:31 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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.
-
-Wed Dec 13 02:00:00 2013 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpSetPTR): fix for limitation of the resulting
- precision.
- [ruby-core:50269] [Bug #7458]
-
- * test/bigdecimal/test_bigdecimal.rb (test_limit): add tests for the above
- change.
-
-Wed Dec 13 01:56:00 2013 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (VpAddAbs): put out a conditional branch from
- the inside of while-loop.
-
- * ext/bigdecimal/bigdecimal.c (VpSubAbs): ditto.
-
-Wed Dec 13 01:53:00 2013 Kenta Murata <mrkn@mrkn.jp>
-
- * ext/bigdecimal/bigdecimal.c (VPrint): be a static function, support another
- dump formats, and add more information of the given bigdecimal.
-
- * ext/bigdecimal/bigdecimal.h: ditto.
-
-Wed Dec 11 16:45:58 2013 Koichi Sasada <ko1@atdot.net>
-
- * eval.c (rb_raise_jump): call c_return hook immediately after
- popping `raise' frame.
- Patches by deivid (David Rodriguez). [Bug #8886]
-
- * test/ruby/test_settracefunc.rb: catch up this fix.
-
-Wed Dec 11 16:01:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Wed Dec 11 15:36:15 2013 Aman Gupta <ruby@tmm1.net>
-
- * compile.c (iseq_specialized_instruction): emit opt_aset instruction
- to optimize Hash#[]= and Array#[]= when called with Fixnum argument.
- [Bug #9227] [ruby-core:58956]
-
-Wed Dec 11 04:54:03 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Update to RubyGems master ec8ed22. Notable changes
- include:
-
- * Renamed extension_install_dir to extension_dir (backwards
- compatible).
-
- * Fixed creation of gem.deps.rb.lock file from
- TestGemRequestSet#test_install_from_gemdeps_install_dir
-
- * Fixed a typo and some documentation.
-
- * test/rubygems: ditto.
-
-Wed Dec 11 03:18:08 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-
- * insns.def: Fix optimization bug of Float#/ [Bug #9238]
-
-Tue Dec 10 23:58:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Tue Dec 10 23:44:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_hash): add salt to differentiate false and empty
- array. [ruby-core:58993] [Bug #9231]
-
- * hash.c (rb_any_hash, rb_hash_hash): ditto.
-
-Tue Dec 10 18:16:09 2013 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
-
- * man/ruby.1: [DOC] Use www.ruby-toolbox.com instead of RAA.
-
-Tue Dec 10 17:21:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * gc.c (wmap_finalize, wmap_aset_update): use simple malloced array
- instead of T_ARRAY, to reduce GC pressure.
+ [ruby-core:44588] [Bug #6352]
-Tue Dec 10 15:56:48 2013 Aman Gupta <ruby@tmm1.net>
+Fri May 25 10:38:06 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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
+ * io.c (io_strip_bom): check EOF. [Bug #6487][ruby-core:45203]
-Tue Dec 10 15:46:03 2013 Koichi Sasada <ko1@atdot.net>
+Fri May 25 10:36:38 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (allrefs_add): push obj only if allrefs table doesn't have
- obj.
+ * parse.y (f_arglist): should reset lexical states after empty
+ argument list with no parenthesis as well as parenthesized list,
+ so that reserved name method definition work. [ruby-dev:45626]
+ [Bug #6403]
- * gc.c (allrefs_roots_i): ditto.
+Mon May 21 16:24:40 2012 Akinori MUSHA <knu@iDaemons.org>
-Tue Dec 10 15:28:10 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/syslog/syslog.c (mSyslog_inspect): Use rb_sprintf().
- * 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/syslog/syslog.c (mSyslog_inspect): Make sure self is a
+ module before calling rb_class2name().
-Tue Dec 10 15:15:37 2013 Koichi Sasada <ko1@atdot.net>
+Sat May 19 14:42:37 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * gc.c (gc_marks_check): disable GC during checking and
- restore malloc_increase info.
+ * test/drb/drbtest.rb ({DRbCore,DRbAry}#teardown}: cannot pass SIGTERM
+ to another process on Windows, so use SIGINT instead.
-Tue Dec 10 14:41:53 2013 Aman Gupta <ruby@tmm1.net>
+Sat May 19 14:42:20 2012 Tanaka Akira <akr@fsij.org>
- * 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]
+ * lib/drb/ssl.rb: generate 1024 bits RSA key instead of 512 bits.
+ OpenSSL 1.0.1 rejects 512 bits RSA key for TLS1.2 with SHA512.
+ http://rt.openssl.org/Ticket/Display.html?id=2769&user=guest&pass=guest
+ reported by Bohuslav Kabrda.
+ [ruby-core:43844] [ruby-trunk - Bug #6221]
-Tue Dec 10 11:20:56 2013 Aman Gupta <ruby@tmm1.net>
+Sat May 19 14:41:45 2012 Tanaka Akira <akr@fsij.org>
- * 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)
+ * test/drb/drbtest.rb: rescue Errno::ESRCH for Process.kill.
+ reported by NARUSE, Yui. [ruby-dev:45551]
-Tue Dec 10 07:48:29 2013 Aman Gupta <ruby@tmm1.net>
+Sat May 19 14:41:09 2012 Tanaka Akira <akr@fsij.org>
- * 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
+ * lib/drb/extservm.rb (DRb::ExtServManager): don't use /bin/sh to
+ invoke service subprocess. mark detach threads for clean up.
-Tue Dec 10 06:14:11 2013 Eric Hodel <drbrain@segment7.net>
+ * test/drb/drbtest.rb: clean up the service subprocess in teardown.
- * ext/.document: Remove curses from documentable directories.
+ * test/drb/test_drb.rb: set @service_name for teardown.
-Tue Dec 10 04:55:36 2013 Zachary Scott <e@zzak.io>
+ * test/drb/test_drbunix.rb: ditto.
- * ext/openssl/lib/openssl/digest.rb: Deprecate OpenSSL::Digest::Digest
- [Fixes GH-446] https://github.com/ruby/ruby/pull/446
+ * test/drb/test_drbssl.rb: ditto.
-Tue Dec 10 00:41:42 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Sat May 19 14:40:49 2012 Tanaka Akira <akr@fsij.org>
- * ext/thread/thread.c: [DOC] add call-seq alias for Queue#enq, #<<, etc.
+ * lib/drb/ssl.rb: close accepted TCP socket if SSL accept is failed.
+ [ruby-dev:45541]
- * ext/thread/thread.c (Init_thread): use rb_define_alias instead of
- rb_alias to document alias.
+Sat May 19 14:39:50 2012 Tanaka Akira <akr@fsij.org>
-Mon Dec 9 20:00:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * lib/webrick/utils.rb: fix fcntl call.
- * internal.h (RCLASS_SERIAL): Add RCLASS_SERIAL as a convenience
- accessor for RCLASS_EXT(klass)->class_serial.
+ * lib/drb/unix.rb: ditto.
- * class.c, vm_insnhelper.c, vm_method.c: Use RCLASS_SERIAL
+Fri May 18 18:13:44 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 9 19:50:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * lib/mkmf.rb (MakeMakefile#configuration): keep space at end of
+ OUTFLAG and COUTFLAG. [ruby-dev:45650]
- * 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.
+Fri May 18 00:04:53 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Dec 9 18:50:43 2013 Aman Gupta <ruby@tmm1.net>
+ * win32/win32.c (rb_w32_fstat, rb_w32_fstati64): convert FILETIME
+ to time_t directly, not to be affected by TZ unnecessarily.
- * 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
+ * win32/win32.c (unixtime_to_filetime): convert time_t to FILETIME
+ simply.
-Mon Dec 9 18:10:10 2013 Koichi Sasada <ko1@atdot.net>
+Wed May 16 01:07:46 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * vm.c (vm_stat): renamed from ruby_vm_stat.
- Should not use ruby_ prefix here.
+ * ext/digest/md5/extconf.rb: use pkg_config for openssl so that
+ customized ssl paths are used for linking. Backports fixes for
+ [ruby-core:44755].
+ * ext/digest/rmd160/extconf.rb: ditto
+ * ext/digest/sha1/extconf.rb: ditto
+ * ext/digest/sha2/extconf.rb: ditto
-Mon Dec 9 16:13:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon May 14 17:14:10 2012 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
- * gc.c (wmap_size): add ObjectSpace::WeakMap#size and #length.
+ * test/ruby/test_io.rb (test_flush_in_finalizer1): don't use IO.for_fd
+ to close IO objects. it create IO object with already closed fd, and
+ cause occasional Errno::EBADF in following tests. [ruby-core:45020]
+ [Bug #6228]
-Mon Dec 9 15:26:17 2013 Shugo Maeda <shugo@ruby-lang.org>
+Mon May 14 17:14:10 2012 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
- * test/test_curses.rb: removed.
+ * test/ruby/test_io.rb (TestIO): revert r35631. it broke the intent of
+ test_flush_in_finalizer1. [ruby-core:43951] [Bug ##6228]
-Mon Dec 9 13:36:55 2013 Shugo Maeda <shugo@ruby-lang.org>
+Mon May 14 13:18:56 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/curses, sample/curses: removed curses.
+ * parse.y (parser_tokadd_string): insert a backslash only if
+ quoted by single quotes. [ruby-dev:45281] [Bug #6069]
- * NEWS: added an entry for the above change.
+Mon May 14 13:17:57 2012 Luis Lavena <luislavena@gmail.com>
-Mon Dec 9 12:26:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_io.rb (class TestIO): Disable GC during IO tests to
+ avoid file descriptors being GC'ed. Suggestion by Tomoyuki Chikanaga
+ [ruby-core:43951][Bug #6228]
- * 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 May 11 14:09:48 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * variable.c (rb_class_path_cached): returns cached class path
- only, without searching and allocating new class path string.
+ * ext/bigdecimal/bigdecimal.c (PUSH): to prevent VALUE from GC,
+ must not cast it to unsigned long, which may be shorter than
+ VALUE, and the result can be mere garbage.
-Mon Dec 9 11:14:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri May 11 01:04:54 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
- * 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]
+ * io.c (io_unread): fix IO#pos with mode 'r' bug on Windows.
+ If the end of reading buffer is CR, io_unread() needs to unread one
+ more byte.
+ [ruby-core:44874] [Bug #6401]
-Mon Dec 9 08:40:40 2013 Eric Hodel <drbrain@segment7.net>
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#test_pos_with_buffer_end_cr):
+ add a test for above.
- * lib/rubygems: Update to RubyGems master bf37240. Fixes useless
- error message with `gem install -g` with no gem dependencies file.
- * test/rubygems: ditto.
-
-Mon Dec 9 04:52:25 2013 Eric Hodel <drbrain@segment7.net>
-
- * NEWS: Update RubyGems entry with notable features.
-
-Mon Dec 9 04:43:54 2013 Eric Hodel <drbrain@segment7.net>
-
- * ext/.document: Add syslog/lib and thread/thread.c to documentable
- items. [ruby-trunk - Bug #9228]
-
-Mon Dec 9 04:28:50 2013 Eric Hodel <drbrain@segment7.net>
-
- * 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.
-
-Mon Dec 9 02:10:32 2013 NARUSE, Yui <naruse@ruby-lang.org>
-
- * 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
-
-Sun Dec 8 20:47:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * class.c (rb_get_kwargs): when values is non-null, remove
- extracted keywords from the rest keyword argument.
-
-Sun Dec 8 20:26:54 2013 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-
- * common.mk (ruby.imp): avoid circular dependency on AIX
-
-Sun Dec 8 20:21:00 2013 Kenta Murata <mrkn@mrkn.jp>
-
- * 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]
-
- * test/bigdecimal/test_bigdecimal.rb: add tests for the above change.
-
-Sun Dec 8 18:28:20 2013 Kazuki Tsujimoto <kazuki@callcc.net>
-
- * NEWS: [DOC] update NEWS about GC.
+Wed May 9 15:59:17 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Dec 8 17:52:24 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+ * configure.in (RUBY_WERROR_FLAG): append all warning flags which
+ are enabled to compile, so that printf format modifiers properly
+ fail. [ruby-core:41351] [Bug #5679]
- * object.c: [DOC] document Module#singleton_class?.
+Mon May 7 20:23:29 2012 Tanaka Akira <akr@fsij.org>
-Sun Dec 8 16:19:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/securerandom.rb (random_bytes): call to_int method for the
+ argument at first.
- * class.c (rb_get_kwargs): if optional is negative, unknown
- keywords are allowed.
+Mon May 7 20:23:29 2012 Tanaka Akira <akr@fsij.org>
- * vm_insnhelper.c (vm_callee_setup_keyword_arg): check unknown
- keywords.
+ * lib/securerandom.rb: show actual read length in an error message.
-Sun Dec 8 14:55:12 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Mon May 7 11:09:20 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * array.c (rb_ary_shuffle_bang, rb_ary_sample): rename local variables.
-
-Sun Dec 8 13:59:38 2013 Kazuki Tsujimoto <kazuki@callcc.net>
-
- * array.c (rb_ary_shuffle_bang, rb_ary_sample): check
- unknown keywords.
-
- * test/ruby/test_array.rb (test_shuffle, test_sample): tests for
- the above.
-
-Sun Dec 8 13:01:11 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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
-
-Sun Dec 8 11:59:40 2013 Aman Gupta <ruby@tmm1.net>
-
- * hash.c (rb_hash_replace): add a write barrier to fix GC mark miss on
- hashes using Hash#replace [Bug #9226] [ruby-core:58948]
-
-Sun Dec 8 11:21:00 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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
-
-Sun Dec 8 10:45:05 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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
-
-Sun Dec 8 10:22:38 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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
-
-Sun Dec 8 10:24:20 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems.rb: Update version for upcoming ruby 2.1.0 RC.
-
-Sun Dec 8 10:21:36 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Update to RubyGems master 14749ce. This fixes bugs
- handling of gem dependencies lockfiles (Gemfile.lock).
-
- * test/rubygems: ditto.
+ * ext/bigdecimal/bigdecimal.c (Init_bigdecimal): define IDs before
+ they are used. [ruby-core:44900] [Bug #6406]
-Sun Dec 8 09:40:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Fri Apr 27 11:02:33 2012 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * array.c (rb_ary_or): use RHASH_TBL_RAW instead of RHASH_TBL
+ * test/rinda/test_rinda.rb (test_core_03_notify): Fixed test failures
+ [ruby-dev:44430] [Ruby 1.9 - Bug #372]
- * process.c (rb_execarg_fixup): use RHASH_TBL_RAW and insert write
- barriers where appropriate
+Fri Apr 27 08:29:51 2012 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * vm.c (kwmerge_i): use RHASH_TBL_RAW
+ * test/rinda/test_rinda.rb: fix sticks on some testsf problem
+ [Bug #6272]
- * vm.c (HASH_ASET): use rb_hash_aset instead of calling directly into
- st_insert
+Wed Apr 25 05:56:56 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Dec 7 11:15:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/optparse.rb (OptionParser#to_a): split for each lines.
+ [ruby-dev:45568][Bug #6348]
- * 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]
+Tue Apr 24 21:20:39 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Dec 7 08:25:00 2013 Richo Healey <richo@psych0tik.net>
+ * lib/optparse.rb (OptionParser#to_a): should split by end-of-line,
+ and MUST TEST IT, MUST RUN THE TEST, MUST VERIFY BEFORE BACKPORT.
+ [ruby-dev:45568][Bug #6348]
- * test/ruby/test_struct.rb: Add regression test for question marks and
- bangs in struct members. [Closes GH-468]
+Tue Apr 24 14:55:41 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 6 19:33:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/optparse.rb (OptionParser#to_a): String#to_a is no longer
+ defined. [ruby-dev:45568][Bug #6348]
- * class.c (rb_extract_keywords, rb_get_kwargs): move from
- vm_insnhelper.c.
+Sat Apr 21 07:16:16 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Dec 6 19:18:02 2013 Koichi Sasada <ko1@atdot.net>
+ * strftime.c (rb_strftime_with_timespec): fix padding of time zone
+ offset. [ruby-dev:43287][Bug #4458]
- * gc.c: change oldmalloc meaning.
- Increase oldmalloc_increase with malloc_increase
- instead of using obj_memsize_of().
+ * strftime.c (rb_strftime_with_timespec): add an interim digit for
+ the timezone offset which is less than an hour.
- This change will avoid the danger of memory full without major GC.
+ * strftime.c (rb_strftime_with_timespec): fix carry-up bug and
+ overwrite '+' with '-' if negative offset less than a hour.
+ [ruby-core:44447][Bug #6323]
-Fri Dec 6 19:08:48 2013 Koichi Sasada <ko1@atdot.net>
+Fri Apr 20 12:30:06 2012 Eric Hodel <drbrain@segment7.net>
- * gc.c (atomic_sub_nounderflow): not 0 but val itself.
-
-Fri Dec 6 18:37:11 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (rb_objspace_alloc, Init_heap): initialize
- oldmalloc_increase_limit at Init_heap.
-
- rb_objspace_alloc() is not called on some platforms.
-
-Fri Dec 6 18:33:39 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (garbage_collect_body): bug fix.
- initialize after recording.
-
-Fri Dec 6 17:49:46 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (atomic_sub_nounderflow): added to simplify atomic sub with
- care about underflow.
-
- * gc.c (objspace_malloc_increase): use it.
-
-Fri Dec 6 17:10:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * vm_insnhelper.c (rb_get_kwargs): get keyword argument values from an
- option hash, not only checking keys.
-
- * dir.c (dir_initialize): use rb_get_kwargs.
-
- * gc.c (gc_start_internal): ditto.
-
-Fri Dec 6 16:47:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * misc/ruby-mode.el (ruby-brace-to-do-end): split single line block.
-
- * misc/ruby-mode.el (ruby-do-end-to-brace): shrink single line block
- to one line.
-
-Fri Dec 6 16:16:30 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (gc_start_internal): do not use rb_gc_start() and rb_gc().
-
-Fri Dec 6 15:24:30 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (gc_start_internal, rb_gc): do not need
- heap_pages_free_unused_pages() here.
- It was done in after_sweep().
-
- * gc.c (rb_gc): The reason is now GPR_FLAG_CAPI.
-
-Fri Dec 6 14:05:19 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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.
-
-Fri Dec 6 11:51:28 2013 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
-
- * lib/erb.rb: [DOC] fix broken link, Use rubygems.org and www.ruby-toolbox.com instead of RAA.
- [Bug #9197]
-
-Fri Dec 6 10:50:54 2013 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
-
- * lib/webrick/httprequest.rb: [DOC] Fix broken link of CGI specification by @udzura [fix GH-466]
-
-Thu Dec 6 01:27:00 2013 Kenta Murata <mrkn@mrkn.jp>
-
- * 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]
-
- * test/bigdecimal/test_bigdecimal.rb: add tests case for the above change.
-
- * test/bigdecimal/test_bigdecimal_util.rb: ditto.
-
-Thu Dec 5 22:18:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Thu Dec 5 21:53:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * array.c (rb_ary_or): lhs elements are preferred, so should not
- replace with rhs elements.
-
- * test/ruby/test_array.rb (test_OR_in_order): import the test failed
- by r43969 from rubyspec/core/array/union_spec.rb.
-
-Thu Dec 5 21:05:42 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (gc_info_decode): fix to avoid syntax error on VS2012.
-
-Thu Dec 5 19:35:35 2013 Martin Duerst <duerst@it.aoyama.ac.jp>
-
- * st.c: tweaked comment
-
-Thu Dec 5 19:21:10 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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
-
- * gc.c (gc_stat_internal): raise TypeError on wrong type
- * gc.c (gc_stat): fix error message
-
-Thu Dec 5 18:18:08 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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
-
-Thu Dec 5 17:44:53 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c: change function names vm_ prefix to objspace_ prefix.
- They are objspace_ functionality.
-
-Thu Dec 5 16:11:04 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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
-
-Thu Dec 5 14:40:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * hash.c (rb_hash): revert r43981 and bail out to the outermost frame
- when recursion is detected.
-
-Thu Dec 5 13:47:15 2013 Koichi Sasada <ko1@atdot.net>
-
- * gc.c (vm_malloc_size): added.
- return malloc_usable_size() if possible.
-
- * 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.
-
- * gc.c (vm_xmalloc, vm_xrealloc, vm_xfree): use vm_malloc_size()
- to detect collect allocated size.
-
- * gc.c (vm_malloc_increase): refactoring.
-
-Thu Dec 5 13:19:03 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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):
+ * lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem: Removed to avoid
+ conflict with ca-bundle.pem
+ * lib/rubygems/ssl_certs/VerisignClass3PublicPrimaryCertificationAuthority-G2.pem:
+ ditto.
+ * lib/rubygems/ssl_certs/Entrust_net-Secure-Server-Certification-Authority.pem:
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=
-
-Thu Dec 5 10:47:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ruby_atomic.h (ATOMIC_PTR_EXCHANGE): atomic exchange function for
- a generic pointer.
-
-Thu Dec 5 10:47:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Thu Dec 5 09:07:59 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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`.
-
-Wed Dec 4 13:02:13 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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().
-
-Wed Dec 4 12:57:24 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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.
-
-Wed Dec 4 12:47:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * lib/delegate.rb (Delegator#method_missing): ignore the target if not
- set, and delegate to global methods. [ruby-core:58572] [Bug #9155]
-
- * lib/delegate.rb (Delegator#respond_to_missing): ditto.
-
- * lib/delegate.rb (SimpleDelegator#__getobj__): yield and return if
- not delegated but a block is given, like as Hash#fetch.
-
- * lib/delegate.rb (DelegateClass#__getobj__): ditto.
-
-Tue Dec 3 23:48:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * configure.in: check malloc_size() availability.
-
- * gc.c: use malloc_size() with malloc/malloc.h if available.
-
-Tue Dec 3 23:06:20 2013 Narihiro Nakamura <authornari@gmail.com>
-
- * object.c (rb_obj_clone): don't copy FL_WB_PROTECTED of a
- original object.
-
-Tue Dec 3 22:32:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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.
-
- * hash.c (rb_hash): detect recursion for all `hash' methods. each
- `hash' methods no longer need to use rb_exec_recursive().
-
-Tue Dec 3 21:53:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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.
-
-Tue Dec 3 20:18:46 2013 Narihiro Nakamura <authornari@gmail.com>
-
- * object.c (rb_obj_clone): Protect FL_PROMOTED and FL_WB_PROTECTED
- flags of a destination object.
-
-Tue Dec 3 20:16:38 2013 Masaki Matsushita <glass.saga@gmail.com>
-
- * array.c (rb_hash_rehash): use hash_alloc() instead of rb_hash_new(),
- to hide temporary object from ObjectSpace. [Bug #9187]
-
-Tue Dec 3 17:11:47 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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.
-
-Tue Dec 3 17:01:45 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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.
-
-Tue Dec 3 14:05:49 2013 Masaki Matsushita <glass.saga@gmail.com>
-
- * array.c (rb_ary_uniq_bang): remove duplicate code.
-
-Tue Dec 3 13:40:42 2013 Masaki Matsushita <glass.saga@gmail.com>
-
- * array.c (ary_add_hash): set and return values because string keys
- will be frozen. [ruby-core:58809] [Bug #9202]
-
- * array.c (rb_ary_uniq_bang): ditto.
-
- * array.c (rb_ary_or): ditto.
-
- * array.c (rb_ary_uniq): ditto.
-
- * test/ruby/test_array.rb: tests for above.
-
- The patch is from normalperson (Eric Wong).
-
-Tue Dec 3 12:20:21 2013 Aman Gupta <ruby@tmm1.net>
-
- * string.c (rb_fstring): Use st_update instead of st_lookup +
- st_insert.
- * string.c (fstr_update_callback): New callback for st_update.
-
-Tue Dec 3 12:17:59 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 Dec 3 10:43:58 2013 Eric Hodel <drbrain@segment7.net>
-
- * 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.
-
-Tue Dec 3 09:42:27 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rdoc: Update to RDoc master 900de99. Changes include:
-
- Fixed documentation display of constants
-
- Fixed handling of unknown parsers
-
- * test/rdoc: ditto.
-
-Mon Dec 2 22:30:10 2013 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * hash.c (getenv): fixed test failures introduced by r43950.
- [ruby-core:58774] [Bug #9195] reported by phasis68 (Heesob Park).
-
-Mon Dec 2 21:49:19 2013 Masaki Matsushita <glass.saga@gmail.com>
-
- * hash.c (rb_hash_rehash): make temporary st_table under the control
- of GC. [Bug #9187]
-
- * test/ruby/test_hash.rb: add a test for above.
-
-Mon Dec 2 17:23:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
-
- * 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]
-
-Mon Dec 2 14:16:52 2013 Eric Hodel <drbrain@segment7.net>
- * 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.
+Fri Apr 20 08:30:55 2012 Eric Hodel <drbrain@segment7.net>
-Mon Dec 2 05:52:33 2013 Eric Hodel <drbrain@segment7.net>
+ * lib/rubygems: Update to RubyGems 1.8.23 which contains security
+ fixes:
- * lib/rubygems: Update to RubyGems master baa965b. Notable changes:
+ RubyGems now disallows redirection from HTTPS to HTTP.
- Copy directories to lib/ when installing extensions. This completes
- the fix for [ruby-trunk - Bug #9106]
+ RubyGems now verifies SSL connections.
+ See https://github.com/rubygems/rubygems/blob/1.8/History.txt for
+ changes since 1.8.22.
* test/rubygems: ditto.
-Mon Dec 2 02:03:47 2013 Shota Fukumori <her@sorah.jp>
-
- * test/ruby/test_case.rb (test_nomethoderror):
- Add test related to r43913, r43914
-
-Mon Dec 2 00:53:01 2013 NAKAMURA Usaku <usa@ruby-lang.org>
-
- * hash.c (getenv): use ANSI codepage version of getenv() for miniruby
- on Windows.
- [ruby-core:58732] [Bug #9189] reported by phasis68 (Heesob Park).
-
-Sun Dec 1 22:14:27 2013 Zachary Scott <e@zzak.io>
-
- * 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.
-
-Sun Dec 1 18:03:26 2013 Zachary Scott <e@zzak.io>
-
- * doc/maintainers.rdoc: [DOC] Current maintainers of Ruby
-
-Sun Dec 1 17:17:36 2013 Zachary Scott <e@zzak.io>
-
- * doc/contributing.rdoc: [DOC] Current branch maintainers
-
-Sun Dec 1 17:16:36 2013 Zachary Scott <e@zzak.io>
-
- * doc/contributing.rdoc: [DOC] Reporting other (ruby-lang.org) issues
-
-Sun Dec 1 17:15:51 2013 Zachary Scott <e@zzak.io>
-
- * doc/contributing.rdoc: [DOC] Current platform maintainers
-
-Sun Dec 1 17:14:55 2013 Zachary Scott <e@zzak.io>
-
- * doc/contributing.rdoc: [DOC] Reporting downstream distro issues
-
-Sun Dec 1 14:37:20 2013 Masaki Matsushita <glass.saga@gmail.com>
+Fri Apr 20 07:39:50 2012 Eric Hodel <drbrain@segment7.net>
- * hash.c (rb_hash_to_a): specify array capa.
+ * lib/rubygems: Update to RubyGems 1.8.22 plus r33517 and r35337 which
+ were ported to the rubygems git repository.
-Sun Dec 1 14:15:36 2013 Masaki Matsushita <glass.saga@gmail.com>
-
- * hash.c (rb_hash_rehash): fix to free new st_table when exception
- is raised in do_hash(). [Bug #9187]
-
-Sun Dec 1 11:57:59 2013 Zachary Scott <e@zzak.io>
-
- * ext/openssl/lib/openssl/buffering.rb: Fix warning in copyright
-
-Sun Dec 1 08:27:28 2013 Eric Hodel <drbrain@segment7.net>
-
- * lib/rubygems: Update to RubyGems master 66e5c39. Notable changes:
-
- Implement gem.deps.rb (Gemfile) .lock support
-
- Fixed `gem uninstall` for a relative directory in GEM_HOME.
+ See https://github.com/rubygems/rubygems/blob/1.8/History.txt for
+ changes since 1.8.11.
* test/rubygems: ditto.
-Sun Dec 1 06:00:49 2013 Aman Gupta <ruby@tmm1.net>
-
- * test/ruby/test_gc.rb (test_gc_reason): Force minor GC by consuming
- free slots to fix test.
-
-Sat Nov 30 21:22:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * dir.c (dir_initialize): check unknown keywords. [ruby-dev:47152]
- [Bug #8060]
-
-Sat Nov 30 18:05:38 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * ext/win32ole/win32ole.c (hash2named_arg): correct declaration to fix
- build failure. a patch by phasis68 (Heesob Park) at
- [ruby-core:58710]. [Bug #9184]
-
-Sat Nov 30 17:46:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Sat Nov 30 16:25:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * 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]
-
-Sat Nov 30 13:28:13 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * siphash.c (sip_hash24): fix for aligned word access little endian
- platforms. [ruby-core:58658] [Bug #9172]
-
-Sat Nov 30 13:21:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rubygems/version.rb: Fixed init_with warning by calling into
+ yaml_initialize (for syck) from psych's init_with
- * vm_eval.c (rb_yield_block): implement non-nil block argument.
+Thu Apr 19 12:55:31 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 29 20:59:39 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * ext/-test-/win32/dln/extconf.rb: need import library for ordinal
+ entry even on mingw. [ruby-core:44441][Bug #6320]
- * 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.
+Wed Apr 18 23:08:58 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 29 20:43:57 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * configure.in (DOT, DOXYGEN): use AC_CHECK_PROGS instead of
+ AC_CHECK_PROG which needs the third argument. [ruby-core:44433]
+ [Bug #6316]
- * 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.
+ * configure.in (PKG_CONFIG): fix condition to skip older version
+ of pkg-config. continue in backticks does not affect outside.
-Fri Nov 29 18:06:45 2013 Shota Fukumori <her@sorah.jp>
+Tue Apr 17 21:35:47 2012 Kouhei Sutou <kou@cozmixng.org>
- * test/ruby/test_case.rb (test_method_missing): Test for r43913.
+ * lib/rexml/parsers/baseparser.rb, test/rexml/test_namespace.rb:
+ fix the default xml namespace URI validation.
+ [ruby-dev:45169] [Bug #5956]
+ Reported by Miho Hiramatsu. Thanks!!!
-Fri Nov 29 17:53:22 2013 Shota Fukumori <her@sorah.jp>
+Mon Apr 17 14:27:22 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_insnhelper.c (check_match): Fix SEGV with VM_CHECKMATCH_TYPE_CASE
- and class of `pattern` has `method_missing`
- [Bug #8872] [ruby-core:58606]
+ * dln.c (rb_w32_check_imported): skip ordinal entries. based on a
+ patch by phasis68 (Heesob Park) at [ruby-core:44381].
+ [ruby-core:44371][Bug #6303]
-Fri Nov 29 17:06:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Apr 15 14:57:00 2012 Tanaka Akira <akr@fsij.org>
- * vm_eval.c (rb_yield_block): yield block with rb_block_call_func
- arguments.
+ * test/test_pty.rb (test_pty_check_default): call PTY.check until
+ "cat" command is finished.
- * range.c (range_each): use rb_yield_block.
+Sun Apr 15 14:54:16 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * include/ruby/ruby.h (RB_BLOCK_CALL_FUNC_ARGLIST): constify argv.
+ * test/ruby/test_process.rb (TestProcess#windows?): new method.
- * enum.c (rb_enum_values_pack): ditto.
+ * test/ruby/test_process.rb (TestProcess#*): use above method.
- * vm_eval.c (rb_block_call, rb_check_block_call): ditto.
+ * test/ruby/test_process.rb (TestProcess#test_execopts_redirect):
+ windows doesn't support FD_CLOEXEC.
- * include/ruby/ruby.h (RB_BLOCK_CALL_FUNC_ARGLIST): for declaration
- argument list of rb_block_call_func.
+Sun Apr 15 06:40:28 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
-Fri Nov 29 11:26:43 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * include/ruby/win32.h (rb_w32_aspawn_flags): add the declaration of
+ new function.
- * include/ruby/ruby.h (rb_block_call_func): add blockarg. block
- function can take block argument, e.g., proc {|&blockarg| ...}.
+ * process.c (enum): add EXEC_OPTION_PGROUP and move the position
+ above for the usage in proc_spawn_n().
-Thu Nov 28 21:43:48 2013 Zachary Scott <e@zzak.io>
+ * process.c (proc_spawn_n): add an argument to pass new option
+ `new_pgroup`. The option specifies CREATE_NEW_PROCESS_GROUP flag to
+ CreateProcessW(). This flag is necessary for the usage of
+ Process.kill on the subprocess on Windows.
- * doc/dtrace_probes.rdoc: [DOC] Import dtrace probes doc from wiki
+ * process.c (rb_exec_arg_addopt): ditto.
-Thu Nov 28 21:17:32 2013 Zachary Scott <e@zzak.io>
+ * process.c (rb_spawn_process): ditto.
- * 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.
+ * process.c (documentation for rb_f_spawn): add documentation for new
+ option `new_pgroup` of spawn.
-Thu Nov 28 21:16:18 2013 Zachary Scott <e@zzak.io>
+ * test/ruby/test_process.rb (TestProcess#test_execopts_new_pgroup):
+ add tests for option `new_pgroup`.
- * doc/contributing.rdoc: [DOC] Add coding style heading for patch
- rules
+ * test/ruby/test_thread.rb
+ (TestThreadGroup#test_thread_timer_and_interrupt):
+ add option `new_pgroup: true` to spawn on Windows. It's needed for
+ Process.kill on a subprocess.
-Thu Nov 28 21:15:45 2013 Zachary Scott <e@zzak.io>
+ * win32/win32.c (CreateChild): add an argument to pass
+ dwCreationFlags of CreateProcessW().
- * doc/contributing.rdoc: [DOC] Add notes about deciding what to patch
+ * win32/win32.c (rb_w32_spawn): ditto.
-Thu Nov 28 19:43:45 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * win32/win32.c (rb_w32_aspawn_flags): add new function to pass
+ dwCreationFlags.
- * benchmark/bm_hash_flatten.rb: added. r43896 is about 4 times faster
- than 2.0.0p353.
-
- * benchmark/bm_hash_keys.rb: added. r43896 is about 5 times faster
- than 2.0.0p353.
-
- * benchmark/bm_hash_values.rb: added. r43896 is about 5 times faster
- than 2.0.0p353.
-
-Thu Nov 28 19:29:04 2013 Zachary Scott <e@zzak.io>
-
- * doc/contributing.rdoc: [DOC] Add notes about slideshow proposals
- from wiki page: HowToRequestFeatures
-
-Thu Nov 28 17:34:42 2013 Masaki Matsushita <glass.saga@gmail.com>
-
- * st.c: add st_values() and st_values_check().
-
- * include/ruby/st.h: add prototypes for above.
-
- * hash.c (rb_hash_values): use st_values_check() for performance
- improvement if VALUE and st_data_t are compatible.
-
-Thu Nov 28 17:14:14 2013 Masaki Matsushita <glass.saga@gmail.com>
-
- * st.c (st_keys): fix not to use Qundef in st.c.
-
- * include/ruby/st.h: define modified prototype.
-
- * hash.c (rb_hash_keys): use modified st_keys().
-
-Thu Nov 28 16:34:43 2013 Aman Gupta <ruby@tmm1.net>
-
- * 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.
+ * win32/win32.c (rb_w32_aspawn): refactor to move the content to
+ rb_w32_aspawn_flags().
+ [ruby-core:43245][Bug #6131]
-Thu Nov 28 16:15:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Apr 15 06:40:28 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
- * win32/win32.c (rb_w32_dup2): extract from rb_cloexec_dup2() and
- redirect_dup2().
+ * test/ruby/test_thread.rb
+ (TestThreadGroup#test_thread_timer_and_interrupt): skip on Windows.
+ Process.kill cannot kill a subprocess if CREATE_NEW_PROCESS_GROUP
+ flag is not specified in a call to CreateProcessW().
-Tue Nov 28 14:40:00 2013 Akira Matsuda <ronnie@dio.jp>
+ * win32/win32.c (CreateChild): revert the usage of
+ CREATE_NEW_PROCESS_GROUP flag for compatibility.
+ [ruby-core:43245][Bug #6131]
- * lib/drb/ssl.rb: [Doc] Fix typo
+Sun Apr 15 04:35:48 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
-Thu Nov 28 13:56:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (rb_io_eof): use eof() instead of io_fillbuf(). It's because
+ io_unread() doesn't work properly when reading CRLF with read(length)
+ and mode 'r'.
+ [ruby-core:44189][Bug #6271]
- * common.mk (Doxyfile): tool/file2lastrev.rb needs running with
- BASERUBY since r43617. [ruby-dev:47823] [Bug #9169]
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#test_read_crlf_and_eof):
+ test for above.
-Thu Nov 28 09:18:39 2013 Koichi Sasada <ko1@atdot.net>
+Sun Apr 15 03:00:54 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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).
+ * io.c (io_unread): fixed memory leak. report by nagachika via IRC.
-Thu Nov 28 01:35:08 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sun Apr 15 03:00:54 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
- * st.c (st_keys): fix to use st_index_t for size of hash.
+ * io.c (static int io_fflush): add the definition.
+ Use it in set_binary_mode_with_seek_cur().
-Thu Nov 28 00:36:52 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * io.c (set_binary_mode_with_seek_cur): refactoring to split the
+ content into io_unread(). Fix the possibility of buffer overflow.
- * st.c (st_keys): define st_keys(). it writes each key to buffer.
+ * io.c (io_unread): add new implementation for Windows. Previous one
+ caused invalid cursor position using IO#pos with OS text mode. New
+ one fixes the bug.
- * hash.c (rb_hash_keys): use st_keys() for performance improvement
- if st_data_t and VALUE are compatible.
+ * test/ruby/test_io_m17n.rb
+ (TestIO_M17N#test_pos_dont_move_cursor_position): add a test for
+ above bug.
+ [ruby-core:43497] [Bug #6179]
- * include/ruby/st.h: define macro ST_DATA_COMPATIBLE_P() to predicate
- whether st_data_t and passed type are compatible.
+Sun Apr 15 03:00:54 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * configure.in: check existence of builtin function to use in
- ST_DATA_COMPATIBLE_P().
+ * test/ruby/test_io.rb (TestIO#test_pos_with_getc): updated.
+ see [ruby-core:43550]
-Thu Nov 28 00:07:28 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sun Apr 15 03:00:54 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * ruby_atomic.h: remove duplicate definitions between ATOMIC_XXX
- and ATOMIC_SIZE_XXX.
+ * test/ruby/test_io.rb (TestIO#test_pos_with_getc): added.
+ see [Bug #6179][ruby-core:43518]
-Wed Nov 27 23:55:50 2013 Masaki Matsushita <glass.saga@gmail.com>
+Wed Apr 11 16:22:16 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ruby_atomic.h: define ATOMIC_SIZE_CAS() with
- __atomic_compare_exchange_n() and refactoring.
+ * ext/-test-/add_suffix/bug.c (ruby_add_suffix): no static
+ declaration. [ruby-core:44277][Bug #6279]
-Tue Nov 27 21:43:00 2013 Akira Matsuda <ronnie@dio.jp>
+Sun Apr 8 06:53:55 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * lib/irb/notifier.rb: [Doc] Fix typo
- * ext/json/lib/json/common.rb: Ditto.
+ * io.c (io_unread): cast as long the value for extra_max.
+ [ruby-core:44137] [Bug #6257]
-Tue Nov 27 18:04:57 2013 Akira Matsuda <ronnie@dio.jp>
+Sat Apr 7 10:28:40 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * lib/irb/notifier.rb: Fix typo
+ * ext/psych/lib/psych.rb: bumping up psych version to match release.
+ * ext/psych/psych.gemspec: ditto
-Wed Nov 27 17:54:57 2013 Koichi Sasada <ko1@atdot.net>
+Sat Apr 7 02:07:00 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * gc.c (gc_mark_stacked_objects): check only when check_mode > 0.
+ * ext/psych/parser.c: fall back to any encoding if the external
+ encoding is wrong. [ruby-core:44163]
+ * test/psych/test_encoding.rb: fix test
-Wed Nov 27 16:07:19 2013 Aman Gupta <ruby@tmm1.net>
+Wed Apr 4 18:29:15 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/ruby/test_gc.rb (class TestGc): Fix warning in
- test_expand_heap.
+ * test/ruby/test_sleep.rb (TestSleep#test_sleep_5sec): syntax error.
-Wed Nov 27 15:55:52 2013 Aman Gupta <ruby@tmm1.net>
+ * test/ruby/test_sleep.rb (TestSleep#test_sleep_5sec): call uname
+ only on linux because it's a workaround for linux only.
- * 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.
+Wed Apr 4 11:32:09 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Nov 27 15:21:17 2013 Aman Gupta <ruby@tmm1.net>
+ * ext/-test-/add_suffix/bug.c: make all functions in util.c static
+ to get rid of multiple definitions. reported at
+ https://trac.macports.org/ticket/33814
- * 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.
+Tue Apr 3 18:34:33 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Nov 27 15:12:55 2013 Koichi Sasada <ko1@atdot.net>
+ * process.c (setreuid, setregid): suppress warnings.
+ [ruby-core:43374][Bug #6169]
- * gc.c (gc_page_sweep): disable debug print.
+Sat Mar 31 12:11:21 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Wed Nov 27 15:05:59 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_x509cert.c: Fix doc typo.
- * gc.c (gc_stat): add new information heap_eden_page_length and
- heap_tomb_page_length.
+Fri Mar 30 14:17:17 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * 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).
+ * ext/openssl/ossl_pkcs7.c: fix crash when parsing garbage data.
+ * test/openssl/test_pkcs7.rb: assert correct behavior for it.
+ Thanks to Matt Venables for reporting the issue.
+ [ruby-core:43250][Bug #6134]
-Wed Nov 27 15:02:53 2013 Aman Gupta <ruby@tmm1.net>
+Fri Mar 30 14:17:17 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * 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.
+ * test/openssl/test_x509cert.rb: exclude test that fails when issuing
+ a certificate with RSA signature and DSS1 digest for earlier
+ OpenSSL versions when used in conjunction with OpenSSL 1.0.1.
+ Thanks, Vit Ondruch, for reporting the issue.
+ [ruby-core:42949][Bug #6089]
-Wed Nov 27 14:50:02 2013 Eric Hodel <drbrain@segment7.net>
+Fri Mar 30 14:15:40 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rinda/ring.rb: Announce RingServer for the same process.
- [ruby-trunk - Bug #9163]
- * test/rinda/test_rinda.rb: Tests for the above.
+ * string.c (str_new_empty): should copy also the encoding as an
+ empty substring. [ruby-dev:45441][Bug #6206]
-Wed Nov 27 14:37:33 2013 Aman Gupta <ruby@tmm1.net>
+Fri Mar 30 14:14:36 2012 Tadayoshi Funaba <tadf@dotrb.org>
- * 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]
+ * ext/date/date_core.c (datetime_s_now): [ruby-core:43256].
-Wed Nov 27 14:24:55 2013 Aman Gupta <ruby@tmm1.net>
+Fri Mar 30 14:12:53 2012 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * 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.
+ * numeric.c: fix flodivmod for cornercases [Bug #6044]
+ add ruby_float_mod
-Wed Nov 27 10:39:39 2013 Aman Gupta <ruby@tmm1.net>
+ * insns.def (opt_mod): use ruby_float_mod
- * gc.c: Rename rb_heap_t members:
- used -> page_length
- limit -> total_slots
+ * internal.h: declare ruby_float_mod
-Wed Nov 27 08:24:49 2013 Aman Gupta <ruby@tmm1.net>
+ * test/ruby/test_float.rb: tests for above
- * 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.
+ * test/ruby/envutil.rb: create helper assert_is_minus_zero
-Wed Nov 27 07:13:54 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+Wed Mar 28 08:44:24 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * ext/psych/lib/psych.rb: psych version 2.0.2
+ * ext/psych/lib/psych.rb: updating version to match gem
* ext/psych/psych.gemspec: ditto
+ * ext/psych/lib/psych/visitors/to_ruby.rb: fixing deprecation warning
-Wed Nov 27 06:40:18 2013 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * 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
-
-Wed Nov 27 04:46:55 2013 Aaron Patterson <aaron@tenderlovemaking.com>
-
- * 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
+Mon Jul 18 13:36:47 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Wed Nov 27 02:26:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/psych/lib/psych.rb: define a new BadAlias error class.
- * string.c (str_new4): copy the original capacity so that memsize of
- frozen shared string returns correct size.
+ * ext/psych/lib/psych/visitors/to_ruby.rb: raise an exception when
+ deserializing an alias that does not exist.
-Wed Nov 27 02:20:13 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/psych/test_merge_keys.rb: corresponding test.
- * array.c (rb_ary_hash): should not ignore the rest of recursive
- constructs.
+Fri Mar 9 06:29:22 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * hash.c (rb_hash_hash): ditto.
+ * ext/psych/lib/psych.rb (load, parse): stop parsing or loading after
+ the first document has been parsed.
- * range.c (range_hash): ditto.
+ * test/psych/test_stream.rb: pertinent tests.
- * struct.c (rb_struct_hash): ditto.
+Fri Mar 9 06:17:05 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * test/-ext-/test_recursion.rb (TestRecursion): separate from
- test/ruby/test_thread.rb.
+ * ext/psych/lib/psych.rb (parse_stream, load_stream): if a block is
+ given, documents will be yielded to the block as they are parsed.
+ [ruby-core:42404] [Bug #5978]
-Tue Nov 26 22:43:36 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/psych/lib/psych/handlers/document_stream.rb: add a handler that
+ yields documents as they are parsed
- * hash.c (rb_hash): cut off if recursion detected to get rid of stack
- overflow. [ruby-core:58567] [Bug #9151]
+ * test/psych/test_stream.rb: corresponding tests.
-Tue Nov 26 20:02:39 2013 Koichi Sasada <ko1@atdot.net>
+Tue Mar 6 02:31:20 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * test/ruby/test_settracefunc.rb: add tests for a_call/a_return
- by Brandur <brandur@mutelight.org> [Feature #9120]
+ * ext/psych/lib/psych/core_ext.rb: only extend Kernel if IRB is loaded
+ in order to stop method pollution.
-Tue Nov 26 19:29:52 2013 Koichi Sasada <ko1@atdot.net>
+Tue Feb 28 10:28:51 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * common.mk: add useful config "set breakpoint pending on"
- for run.gdb.
+ * ext/psych/lib/psych.rb: default open YAML files with utf8 external
+ encoding. [ruby-core:42967]
+ * test/psych/test_tainted.rb: ditto
-Tue Nov 26 19:17:47 2013 Koichi Sasada <ko1@atdot.net>
+Fri Feb 24 13:54:33 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * ext/objspace/object_tracing.c (newobj_i): skip class_path if class
- is frozen.
+ * ext/psych/parser.c: prevent a memory leak by protecting calls to
+ handler callbacks.
+ * test/psych/test_parser.rb: test to demonstrate leak.
- rb_class_path() can modify frozen classes (and causes errors).
- This patch is temporary. We need no-modification/no-allocation
- class path function.
+Fri Feb 24 08:08:38 2012 Aaron Patterson <aaron@tenderlovemaking.com>
-Tue Nov 26 18:12:13 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/psych/parser.c: set parser encoding based on the YAML input
+ rather than user configuration.
+ * test/psych/test_encoding.rb: corresponding tests.
+ * test/psych/test_parser.rb: ditto
+ * test/psych/test_tainted.rb: ditto
- * vm_trace.c: skip "exception check" and "reentrant check (only normal
- events) for internal events.
+Fri Feb 10 03:41:31 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- Reentrant check for internal events are remaining.
+ * ext/psych/parser.c: removed external encoding setter, allow parser
+ to be reused.
+ * ext/psych/lib/psych/parser.rb: added external encoding setter.
+ * test/psych/test_parser.rb: test parser reuse
-Tue Nov 26 17:38:16 2013 Koichi Sasada <ko1@atdot.net>
+Wed Jan 18 12:49:15 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * vm_trace.c: prohibit to specify normal events and internal events
- simultaneously.
- I will introduce special care for internal events later.
+ * ext/psych/lib/psych/visitors/to_ruby.rb: Added support for loading
+ subclasses of String with ivars
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: Added support for dumping
+ subclasses of String with ivars
+ * test/psych/test_string.rb: corresponding tests
- * ext/-test-/tracepoint/tracepoint.c: test this behavior.
+Wed Jan 18 10:39:47 2012 Aaron Patterson <aaron@tenderlovemaking.com>
- * test/-ext-/tracepoint/test_tracepoint.rb: ditto.
+ * ext/psych/lib/psych/visitors/to_ruby.rb: Added ability to load array
+ subclasses with ivars.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: Added ability to dump
+ array subclasses with ivars.
+ * test/psych/test_array.rb: corresponding tests
-Tue Nov 26 16:30:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Dec 21 02:25:36 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * 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]
+ * ext/psych/emitter.c: fixing clang warnings. Thanks Joey!
-Tue Nov 26 14:23:17 2013 Aman Gupta <ruby@tmm1.net>
+Sun Dec 18 12:42:48 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * 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.
+ * ext/psych/lib/psych/visitors/to_ruby.rb: BigDecimals can be restored
+ from YAML.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: BigDecimals can be dumped
+ to YAML.
+ * test/psych/test_numeric.rb: tests for BigDecimal serialization
-Tue Nov 26 11:43:19 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sun Dec 18 12:03:13 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * 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
+ * ext/psych/lib/psych/scalar_scanner.rb: Strings that look like dates
+ should be treated as strings and not dates.
- * configure.in: check existence of __atomic functions.
+ * test/psych/test_scalar_scanner.rb: corresponding tests.
-Tue Nov 26 10:57:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Dec 7 08:04:31 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * ext/bigdecimal/bigdecimal.gemspec: revert Gem::Specification#date
- for snapshot/release tarballs.
+ * ext/psych/lib/psych.rb (module Psych): parse and load methods take
+ an optional file name that is used when raising Psych::SyntaxError
+ exceptions
+ * ext/psych/lib/psych/syntax_error.rb (module Psych): allow nil file
+ names and handle nil file names in the exception message
+ * test/psych/test_exception.rb (module Psych): Tests for changes.
-Tue Nov 26 06:42:50 2013 Aman Gupta <ruby@tmm1.net>
+Wed Nov 30 09:09:37 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * NEWS: Add ObjectSpace.after_gc_{start,end}_hook=
- * ext/objspace/objspace_dump.c: [DOC] catch up dump/dump_all to r43679
+ * ext/psych/parser.c (parse): parse method can take an option file
+ name for use in exception messages.
+ * test/psych/test_parser.rb: corresponding tests.
-Tue Nov 26 04:12:10 2013 Eric Hodel <drbrain@segment7.net>
+Tue Nov 22 04:46:22 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * lib/rubygems: Update to RubyGems master 612f85a. Notable changes:
+ * ext/psych/lib/psych.rb: remove autoload from psych
+ * ext/psych/lib/psych/json.rb: ditto
- Fixed installation and activation of git: and path: gems via
- Gem.use_gemdeps
+Wed Nov 9 04:52:16 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- Improved documentation coverage
-
- * 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.
+ * ext/psych/lib/psych/tree_builder.rb: dump complex numbers,
+ rationals, etc with reference ids.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto
+ * ext/psych/lib/psych/visitors/to_ruby.rb: loading complex numbers,
+ rationals, etc with reference ids.
+ * test/psych/test_object_references.rb: corresponding tests
- We don't need these function if malloc_usable_size() is available.
+Mon Nov 7 20:31:52 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * gc.c: catch up this change.
+ * ext/psych/lib/psych/scalar_scanner.rb: make sure strings that look
+ like base 60 numbers are serialized as quoted strings.
+ * test/psych/test_string.rb: test for change.
- * gc.c: define HAVE_MALLOC_USABLE_SIZE on _WIN32.
+Thu Oct 27 08:47:38 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * 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.
+ * ext/psych/parser.c: remove unused variable.
- * string.c (rb_str_resize): ditto.
+Wed Oct 5 02:50:27 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Mon Nov 25 05:05:04 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/psych/lib/psych/syntax_error.rb: Add file, line, offset, and
+ message attributes during parse failure.
+ * ext/psych/parser.c: Update parser to raise exception with correct
+ values.
+ * test/psych/test_exception.rb: corresponding tests.
- * test/-ext-/tracepoint/test_tracepoint.rb: catch up GC.stat changes
- at r43835.
+Wed Oct 5 01:52:16 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Mon Nov 25 04:45:59 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/psych/parser.c (parse): Use context_mark for indicating error
+ line and column.
- * gc.c: continue to change OLDSPACE -> OLDMALLOC.
- RGENGC_ESTIMATE_OLDSPACE -> RGENGC_ESTIMATE_OLDMALLOC.
+Wed Oct 5 01:22:08 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * gc.c: add a new major GC reason GPR_FLAG_MAJOR_BY_OLDMALLOC.
+ * ext/psych/lib/psych/scalar_scanner.rb: use normal begin / rescue
+ since postfix rescue cannot receive the exception class. Thanks
+ nagachika!
-Mon Nov 25 04:16:09 2013 Koichi Sasada <ko1@atdot.net>
+Tue Mar 27 22:22:50 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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()
+ * configure.in (RUBY_STACK_GROW_DIRECTION): substitute CPU name as
+ shell variable name. based on the patch by The Written Word Inc. at
+ [ruby-core:40421]. [Bug #5488]
-Mon Nov 25 04:03:12 2013 Koichi Sasada <ko1@atdot.net>
+Mon Mar 26 09:57:12 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * 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
+ * parse.y (parser_nextc): set encoding for the buffer of ripper.
- * gc.c (gc_stat): rename names.
- * heap_live_num -> heap_live_slot
- * heap_free_num -> heap_free_slot
- * heap_final_slot -> heap_final_slot
+Sun Mar 18 13:23:28 2012 NARUSE, Yui <naruse@ruby-lang.org>
- Quote from RDoc of GC.stat():
- "The contents of the hash are implementation specific and may
- be changed in the future."
+ * encoding.c (rb_enc_compatible): return ASCII-8BIT even if 2nd string
+ is ascii only string. [ruby-core:42354] [Bug #5968]
- * test/ruby/test_gc.rb: catch up this change.
+Tue Mar 6 18:55:37 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Nov 25 03:59:45 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/test/unit/assertions.rb (assert_send, assert_not_send):
+ parenthesize non-empty arguments.
- * test/ruby/test_gc.rb: catch up last commit.
- Now RUBY_GC_OLDSPACE_LIMIT(...) is RUBY_GC_OLDMALLOC_LIMIT(...).
+Tue Mar 6 18:55:37 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Nov 25 03:10:46 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/test/unit/assertions.rb (assert_send): make arguments in
+ the default message clearer.
- * gc.c: change terminology OLDSPACE -> OLDMALLOC.
- (oldspace -> oldmalloc for variable names)
+Tue Mar 6 12:48:08 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- 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.
+ * ext/io/console/console.c (set_rawmode): clear ECHOE and ECHOK
+ bits too.
-Mon Nov 25 00:50:03 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * ext/io/console/console.c (echo_p): ignore ECHOE and ECHOK bits.
+ [ruby-dev:45309] [Bug #6116]
- * internal.h: use __builtin_bswap16() if possible.
+ * ext/io/console/console.c (console_raw): fix rdoc.
- * configure.in: check existence of __builtin_bswap16().
+ * ext/io/console/console.c (console_set_echo): mentioned about
+ platform dependency.
-Sun Nov 24 22:24:19 2013 Tanaka Akira <akr@fsij.org>
+Tue Mar 6 12:40:08 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * bignum.c (bigxor_int): Apply BIGLO for long in a BDIGIT expression.
- (bigor_int): Ditto.
- (bigand_int): Ditto.
+ * ext/io/console/console.c (console_raw, console_set_raw)
+ (console_getch): optional parameters. [EXPERIMENTAL]
-Sun Nov 24 18:13:23 2013 Tanaka Akira <akr@fsij.org>
+Tue Mar 6 12:39:27 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * include/ruby/defines.h (SIZEOF_ACTUAL_BDIGIT): Defined.
+ * ext/io/console/console.c (console_cooked, console_set_cooked):
+ new methods to reset cooked mode. [EXPERIMENTAL]
- * include/ruby/ruby.h (RBIGNUM_EMBED_LEN_MAX): Use
- SIZEOF_ACTUAL_BDIGIT instead of SIZEOF_BDIGITS.
- SIZEOF_BDIGITS can be different to sizeof(BDIGIT).
+Tue Mar 6 12:31:47 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Nov 24 13:49:08 2013 Tanaka Akira <akr@fsij.org>
+ * ext/io/console/console.c (io_getch): default delegating method
+ for StringIO. https://github.com/nobu/io-console/issues/4
- * include/ruby/defines.h: Don't use int128_t for Bignum.
- It's not always faster.
+ * ext/stringio/stringio.c: moved some methods to hidden modules.
- * bignum.c: Ditto.
+Tue Mar 6 12:29:34 2012 Eric Hodel <drbrain@segment7.net>
-Sun Nov 24 10:18:15 2013 Aman Gupta <ruby@tmm1.net>
+ * io.c (Init_IO): Mention io/console methods. [Ruby 1.9 - Bug #5602]
+ * ext/io/console/console.c: Mention that io/console must be required
+ similar to lib/time.rb
- * NEWS: Add details about new debugging features and APIs.
+Tue Mar 6 11:42:52 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Nov 24 09:37:20 2013 Andrew Vit <andrew@avit.ca>
+ * ext/syck/lib/syck/rubytypes.rb (Exception.yaml_new): fix bug
+ that causes YAML serialization problem for Exception.
+ Exception#initialize doesn't use visible instance variable for
+ the exception message, so call the method with the message.
+ patched by Jingwen Owen Ou <jingweno AT gmail.com>.
+ http://github.com/ruby/ruby/pull/41
- * lib/csv.rb: Optimize header hashes by freezing string keys.
- [ruby-core:58510]
+Fri Mar 2 22:09:03 2012 Hiroshi Nakamura <nahi@ruby-lang.org>
-Sun Nov 24 09:18:06 2013 Aman Gupta <ruby@tmm1.net>
+ * .travis.yml: Backport TravisCI configuration from trunk.
- * 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/).
+Thu Mar 1 18:39:44 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Nov 24 08:38:00 2013 Kyle Stevens <kstevens715@gmail.com>
+ * file.c (rb_file_join): honor input encodings than ASCII-8BIT.
+ [ruby-core:40338] [Bug #5483]
- * 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.
+Tue Feb 28 11:56:52 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Nov 24 01:03:00 2013 Kenta Murata <mrkn@mrkn.jp>
+ * configure.in (debugflags): check if -ggdb is accepted.
+ [ruby-core:42875][Bug #6080]
- * ext/bigdecimal/bigdecimal.c (BigDecimal_power): Use FIX2LONG instead
- of FIX2INT to avoid conversion error.
+Mon Feb 27 17:25:40 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Nov 24 00:44:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): since methods
+ can be overridden, so should not make an assumption on the type
+ of results. [ruby-core:42969][Bug #6093]
- * include/ruby/ruby.h (RBIGNUM_EMBED_LEN_MAX): define by macros
- defined in defines.h, instead of complex and repeated expression.
+Mon Feb 27 02:28:17 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Nov 23 22:22:26 2013 Tanaka Akira <akr@fsij.org>
+ * regparse.c (add_code_range_to_buf0): wrong condition of duplicated
+ warnings.
- * include/ruby/ruby.h (RBIGNUM_EMBED_LEN_MAX): Limit the value to
- less than 8.
+Sun Feb 26 12:26:26 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Nov 23 19:52:00 2013 Kenta Murata <mrkn@mrkn.jp>
+ * compile.c (iseq_compile_each): call on special object instead of
+ self. since stabby lambda is a syntax, so it should not be
+ affected by the context. [ruby-core:42349][Bug #5966]
- * ext/bigdecimal/lib/bigdecimal/math.rb (BigMath.E): Use BigMath.exp.
- [Feature #6857] [ruby-core:47130]
+ * insns.def (send): no special deal for FCALL. self should be put
+ on TOS instead.
-Sat Nov 23 19:46:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Sat Feb 25 23:47:49 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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]
+ * file.c (utime_internal): fix a variable missed to replace.
+ [ruby-core:42864] [Bug #6077]
-Sat Nov 23 19:20:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Sat Feb 25 21:29:09 2012 URABE Shyouhei <shyouhei@ruby-lang.org>
- * ext/bigdecimal/bigdecimal.c (BigDecimal_div2): The signature was
- changed to allow us to pass arguments directly.
+ * test/ruby/test_literal.rb (TestRubyLiteral#test_special_const):
+ test for https://bugs.php.net/bug.php?id=61095
- * ext/bigdecimal/bigdecimal.c (BigDecimal_div3): Added for the role of
- the old BigDecimal_div2.
+Sat Feb 25 21:29:09 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Nov 23 12:31:00 2013 Koichi Sasada <ko1@atdot.net>
+ * dir.c, file.c, io.c (rb_sys_fail_path): use rb_sys_fail_str.
- * gc.c: fix global variable name.
- Now we have following environments (and related variable names).
+ * error.c: new functions to deal exceptions with string instances.
- * 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)
+ * dir.c, file.c, io.c: use rb_sys_fail_path.
- * obsolete
- * RUBY_FREE_MIN -> RUBY_GC_HEAP_FREE_SLOTS (from 2.1)
- * RUBY_HEAP_MIN_SLOTS -> RUBY_GC_HEAP_INIT_SLOTS (from 2.1)
+Sat Feb 25 21:18:12 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * RUBY_GC_MALLOC_LIMIT
- * RUBY_GC_MALLOC_LIMIT_MAX (new from 2.1)
- * RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR (new from 2.1)
+ * dir.c (dir_inspect), io.c (rb_io_inspect): keep encoding of path.
+ [Bug #6072]
- * 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)
+Sat Feb 25 21:18:12 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_gc.rb: catch up this change.
+ * dir.c (dir_initialize): keep path in original encoding.
-Sat Nov 23 09:45:49 2013 Aman Gupta <ruby@tmm1.net>
+ * error.c (syserr_initialize): prefer the encoding of message over
+ locale. [ruby-dev:45279][Bug #6071]
- * marshal.c (w_object): Use HASH_PROC_DEFAULT directly from internal.h
+Sat Feb 25 17:10:51 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Nov 23 08:43:23 2013 Aman Gupta <ruby@tmm1.net>
+ * lib/fileutils.rb: use chomp(?/) instead of sub to optimize and avoid
+ to regexping invalid string.
- * gc.c: Rename heap_pages_swept_num to heap_pages_swept_slots to
- clarify meaning (number of slots, not pages).
+Sat Feb 25 16:39:13 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Nov 23 08:23:23 2013 Aman Gupta <ruby@tmm1.net>
+ * complex.c (nucomp_marshal_load): raise error on invalid data.
+ reported by John Firebaugh [ruby-core:42860] [Bug #6076]
- * lib/set.rb (class SortedSet): Fix source_location for methods
- defined via eval.
+Fri Feb 24 23:49:05 2012 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-Sat Nov 23 03:44:03 2013 Eric Hodel <drbrain@segment7.net>
+ * lib/ostruct.rb (delete_field): Bug fix so previous value is
+ returned. Patch by Nick Recobra [Bug #6063]
- * lib/rubygems: Update to RubyGems master dcce4ff. Important changes
- in this commit:
+Fri Feb 24 08:53:28 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- Remove automatic detection of gem dependencies files. This prevents a
- security hole as described in [ruby-core:58490]
+ * parse.y (parser_tokadd_string, parser_yylex): insert a backslash
+ if the next character is non-ascii. [ruby-dev:45278] [Bug #6069]
- Fixed bugs for installing git gems.
+Thu Feb 23 14:44:36 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * test/rubygems: ditto.
+ * lib/uri/common.rb (URI::Parser#initialize_regexp):
+ use \A \z instead of ^ $. [Bug #5843]
-Fri Nov 22 22:30:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Thu Feb 23 08:08:23 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/bigdecimal/bigdecimal.c (BigDecimal_power):
- Round the result value only if the precision is given.
+ * win32/win32.c (rb_w32_uchmod): typo. [Bug#5671] [ruby-dev:44898]
-Fri Nov 22 17:20:50 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * test/ruby/test_file.rb (TestFile#test_chmod_m17n): test of above bug.
- * transcode.c (str_transcode0): don't scrub invalid chars if
- str.encode doesn't have explicit invalid: :replace.
- workaround fix for see #8995
+Wed Feb 22 23:27:52 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 22 17:11:26 2013 Narihiro Nakamura <authornari@gmail.com>
+ * test/iconv/test_option.rb: enabled. [ruby-core:42802][Bug #6061]
- * include/ruby/intern.h, internal.h: Expose rb_gc_count().
+Wed Feb 22 22:04:15 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 22 17:07:00 2013 Kenta Murata <mrkn@mrkn.jp>
+ * io.c (rb_io_s_foreach): argument check before making Enumerator.
+ [ruby-dev:31525]
- * ext/bigdecimal/bigdecimal.gemspec: version 1.2.2.
+Wed Feb 22 22:04:15 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 22 17:04:00 2013 Kenta Murata <mrkn@mrkn.jp>
+ * io.c (rb_io_s_foreach): return enumerator including kerword
+ arguments. [ruby-dev:45267][Bug #6054]
- * ext/bigdecimal/bigdecimal.c (BigDecimal_data_type):
- Use RUBY_TYPED_FREE_IMMEDIATELY only if it is available.
+Wed Feb 22 21:42:16 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Nov 22 16:49:00 2013 Kenta Murata <mrkn@mrkn.jp>
+ * configure.in: remove workaround replacement from gcc to gcc-4.2.
+ [Backport #6043]
- * ext/bigdecimal/bigdecimal.c (BigDecimal_power): Round the result value.
- [Bug #8818] [ruby-core:56802]
+Wed Feb 22 08:11:06 2012 Narihiro Nakamura <authornari@gmail.com>
- * test/bigdecimal/test_bigdecimal.rb: Add a test for the above fix.
+ * gc.c : remove gc_clear_mark_on_sweep_slots() and use
+ rest_sweep() instead of it, because some dead objects might be
+ marked in next the mark phase by false pointers.
+ [ruby-core:42672]
-Fri Nov 22 16:25:43 2013 Koichi Sasada <ko1@atdot.net>
+Sun Feb 19 12:27:24 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (heap_set_increment): accept minimum additional page number.
+ * configure.in: ignore all warnings from an arbitrary
+ header in /usr/local/include.
- * gc.c (gc_after_sweep): allocate pages to allocate at least
- RUBY_HEAP_MIN_SLOTS.
- [Bug #9137]
+Fri Feb 17 12:51:25 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 22 16:19:52 2013 Narihiro Nakamura <authornari@gmail.com>
+ * lib/mkmf.rb (create_header): log the content of header.
- * include/ruby/intern.h (rb_gc_set_params): Deprecate
- rb_gc_set_params because it's only used in ruby internal.
+Fri Feb 17 12:26:15 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * internal.h (ruby_gc_set_params): Declare rb_gc_set_params's
- alias function.
+ * test/readline/test_readline.rb (test_completion_proc_empty_result):
+ ensure clearance of Readline's line_buffer after the test.
- * gc.c: ditto.
+Fri Feb 17 11:46:39 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ruby.c: use ruby_gc_set_params.
+ * test/readline/test_readline.rb (test_line_buffer__point): use
+ lambda not to exit entire method by "return". or "next" for
+ proc. [ruby-dev:45042] [Bug #5802]
-Fri Nov 22 14:55:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Fri Feb 17 10:15:54 2012 Tanaka Akira <akr@fsij.org>
- * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): Insert rb_thread_check_ints.
+ * ext/dbm/extconf.rb: check _DB_H_ macro unavailable except
+ Berkeley DB library.
-Fri Nov 22 14:35:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Fri Feb 17 10:14:47 2012 Tanaka Akira <akr@fsij.org>
- * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): Fix the inserting points
- of RB_GC_GUARDs.
+ * test/dbm/test_dbm.rb: fix skip condition for libgdbm 1.8.0 or prior.
+ reported by Bohuslav Kabrda.
+ [ruby-core:42685] [ruby-trunk - Bug #6036]
-Fri Nov 22 14:31:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Fri Feb 17 09:53:46 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/bigdecimal/bigdecimal.c: Fix indentation.
+ * tool/transcode-tblgen.rb (import_ucm): don't use \h because the
+ script should work with ruby 1.8.
-Fri Nov 22 14:03:00 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * tool/enc-unicode.rb: ditto.
- * ext/nkf: merge nkf 2.1.3 2a2f2c5.
+Thu Feb 16 17:54:14 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Nov 22 12:43:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/dbm/extconf.rb: merge trunk's ext/dbm/extconf.rb and
+ related functions of lib/mkmf.rb. [Backport #6021]
- * util.c (ruby_strtod): ignore too long fraction part, which does not
- affect the result.
+Thu Feb 16 09:25:52 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Nov 22 12:17:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (enable_pthread): use -pthread on OpenBSD without
+ explicit option. patched by Jeremy Evans. [ruby-core:38572]
- * ext/openssl/lib/openssl/buffering.rb (OpenSSL::Buffering#initialize):
- initialize of a module should pass arguments to super.
+Thu Feb 16 07:34:34 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Fri Nov 22 12:02:58 2013 Tanaka Akira <akr@fsij.org>
+ * cont.c (rb_fiber_reset_root_local_storage): add a new function to
+ restore rb_thread_t::local_storage.
- * test/ruby/test_settracefunc.rb: Ignore events from other threads.
+ * cont.c (rb_obj_is_fiber): add a new function to tell finalizer to
+ prevent fibers from destroy.
-Fri Nov 22 10:35:57 2013 Koichi Sasada <ko1@atdot.net>
-
- * vm.c (ruby_vm_destruct): do not use ruby_xfree() after freeing
+ * gc.c (rb_objspace_call_finalizer): don't sweep fibers at finalizing
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>
+ * internal.h (rb_fiber_reset_root_local_storage, rb_obj_is_fiber):
+ add prototypes.
- * ext/openssl/lib/openssl/buffering.rb: [DOC] Fix HEREDOC comment for
- OpenSSL::Buffering which breaks overview because of RDoc bug
+ * vm.c (ruby_vm_destruct): reset main thread's local_storage before
+ free main thread. rb_thread_t::local_storage is replaced by fiber's
+ local storage when forked from fiber, and it should be already freed
+ when the fiber was destroyed. [ruby-core:41456] [Bug #5700]
-Thu Nov 21 14:46:57 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * test/ruby/test_fiber.rb (test_fork_from_fiber): add test for fork
+ from fiber.
- * 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.
+Thu Feb 16 06:30:37 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * signal.c (check_stack_overflow, CHECK_STACK_OVERFLOW): now defined on
- Windows, too.
+ * ext/fiddle/closure.c (callback): deal with unsinged integers.
+ [ruby-core:42458][Bug #5991][Bug #6022]
- * 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.
+ * ext/fiddle/conversions.c (value_to_generic, generic_to_value):
+ ditto.
- * internal.h (ruby_register_rollback_func_for_ensure): catch up above change.
- Add rollback mechanism API.
+ * ext/fiddle/closure.c (callback): same as r34506.
- * vm_core.h (typedef struct rb_vm_struct): catch up above change.
- Introduce ensure-rollback relation table.
+Wed Feb 15 10:35:43 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_core.h (typedef struct rb_thread_struct): catch up above change.
- Introduce ensure stack.
+ * include/ruby/ruby.h (FIXNUM_P): simple flag should be int.
- * eval.c (rb_ensure): catch up above change.
- Introduce ensure stack.
+Wed Feb 15 10:33:41 2012 Eric Hodel <drbrain@segment7.net>
- * hash.c : New function for rollback ensure, and register it to
- ensure-rollback relation table. [ruby-dev:47803] [Bug #9105]
+ * vm_eval.c (check_funcall): Call respond_to? with matching arity for
+ legacy single-argument implementations. [ruby-trunk - Bug #6000]
- 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.
+Wed Feb 15 10:25:22 2012 Naohisa Goto <ngotogenome@gmail.com>
- Current API is unstable, and only internal use.
+ * vm_eval.c (check_funcall): set array elements one-by-one to fix
+ compile error with Fujitsu C Compiler 5.6 on Solaris 10 on Sparc.
- 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.
+Wed Feb 15 10:25:22 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Nov 16 00:18:36 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * test/ruby/test_object.rb: tests that respond_to? returns false.
- * eval_jump.c (rb_exec_end_proc): fix double free or corruption error
- when reentering by callcc. [ruby-core:58329] [Bug #9110]
+Wed Feb 15 10:25:22 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_beginendblock.rb: test for above.
+ * vm_eval.c (check_funcall): try respond_to? first if redefined.
+ [Bug #5158]
-Fri Nov 15 01:06:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Feb 15 07:15:50 2012 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]
+ * compile.c (defined_expr): guard the whole expression.
+ [ruby-dev:45021][Bug#5786]
- * test/objspace/test_objspace.rb (TestObjSpace#dump_my_heap_please):
- remove temporary output file.
+Wed Feb 15 05:08:25 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Nov 14 23:39:00 2013 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * ext/dl/cptr.c (rb_dlptr_s_to_ptr): use rb_check_funcall.
- * ext/bigdecimal/lib/bigdecimal/util.rb: [DOC] remove example of
- Rational#to_d without argument. [Bug #8958]
+ * ext/dl/cfunc.c (dlcfunc_mark), ext/dl/cptr.c (dlptr_mark):
+ workaround to mark wrapped object. this is not a true fix,
+ because [Bug #4929] is caused by the interface design of DL.
-Thu Nov 14 20:24:15 2013 Naohisa Goto <ngotogenome@gmail.com>
+Wed Feb 15 05:04:47 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ruby_atomic.h (ATOMIC_SIZE_CAS): fix compile error on Solaris
- since r43460.
+ * ext/dl/cptr.c (rb_dlptr_aref, rb_dlptr_aset): check NULL pointer
+ dereference.
-Thu Nov 14 19:53:00 2013 Tanaka Akira <akr@fsij.org>
+ * test/rinda/test_rinda.rb: decrease the code that depends on timing.
+ [Bug #372] [Bug #4160]
- * 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.
+Wed Feb 15 05:03:41 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Thu Nov 14 11:33:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/rinda/test_rinda.rb (test_remote_array_and_hash):
+ add local variables to protect objects from GC. [ruby-dev:44253]
+ [Bug #5104]
- * hash.c (foreach_safe_i, hash_foreach_iter): deal with error detected
- by ST_CHECK.
+Wed Feb 15 05:02:43 2012 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * st.c (st_foreach_check): call with non-error argument in normal case.
+ * test/win32ole/test_err_in_callback.rb (test_err_in_callback):
+ skip test if ADODB.connection is not available.
-Thu Nov 14 02:37:14 2013 Zachary Scott <e@zzak.io>
+Wed Feb 15 04:49:23 2012 Yusuke Endoh <mame@tsg.ne.jp>
- * ext/thread/thread.c: [DOC] This patch accomplishes the following:
+ * parse.y (debug_lines, coverage): set file path encoding for coverage
+ result. [ruby-dev:44950]
- - 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]
+Tue Feb 14 16:57:11 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Nov 14 01:11:54 2013 Zachary Scott <e@zzak.io>
+ * lib/rake/file_list.rb (Rake::FileList#egrep): there is no need to
+ open files in binary mode.
+ see more details in https://github.com/jimweirich/rake/issues/74
- * ext/bigdecimal/lib/bigdecimal/util.rb: [DOC] +precision+ is required
+Tue Feb 14 16:52:17 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Nov 13 19:21:36 2013 Zachary Scott <e@zzak.io>
+ * lib/rdoc/encoding.rb (RDoc::Encoding.read_file): fixup newline chars
+ on Windows.
+ see https://github.com/rdoc/rdoc/issues/87
- * ext/bigdecimal/lib/bigdecimal/util.rb: [DOC] Document the required
- +precision+ argument for Rational#to_d [Bug #8958]
+ * test/rdoc/test_rdoc_markup_pre_process.rb
+ (TestRDocMarkupPreProcess#test_include_file,
+ TestRDocMarkupPreProcess#test_include_file_encoding_incompatible):
+ follow above change.
-Wed Nov 13 19:02:05 2013 Zachary Scott <e@zzak.io>
+Tue Feb 14 16:34:11 2012 Shota Fukumori <sorah@tubusu.net>
- * 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.
+ * test/rubygems/test_gem_commands_help_command.rb: Add one
+ `require` because if run test-all with test/unit parallel
+ running, sometimes this test fails by some constants not found.
+ The error reason is some worker doesn't require the file needed by
+ this test. This issue is related to [ruby-core:36168].
- Patched by @stomar [Bug #9027]
+Tue Feb 14 15:58:31 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Nov 13 18:32:12 2013 Zachary Scott <e@zzak.io>
+ * gc.c (initial_params): pack in a struct.
- * ext/openssl/ossl_config.c: [DOC] Document the following:
+ * gc.c (rb_gc_set_params): set parameters always.
+ [ruby-dev:44648] [Bug #5467]
- - OpenSSL::ConfigError
- - OpenSSL::Config::DEFAULT_CONFIG_FILE
+Tue Feb 14 15:44:42 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- Patched by @vbatts via GH-436
- https://github.com/ruby/ruby/pull/436
+ * test/irb/test_completion.rb: skip if cannot load irb/completion
+ (maybe readline does not exist).
-Wed Nov 13 18:03:00 2013 Zachary Scott <e@zzak.io>
+Tue Feb 14 15:07:23 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * lib/test/unit/assertions.rb (build_message): skip escaped
+ question marks.
- Based on a patch by @vbatts via GH-436
- https://github.com/ruby/ruby/pull/436
+Mon Feb 13 12:06:29 2012 Loren Segal <lsegal@soen.ca>
-Wed Nov 13 17:19:36 2013 Zachary Scott <e@zzak.io>
+ * io.c (Init_IO): use directive hack to make ARGF documentable
+ in other tools. [ruby-core:42515][Bug #6007]
- * ext/openssl/lib/openssl/config.rb: In #parse use +string+ for +str+
+Sun Feb 12 16:57:56 2012 Akinori MUSHA <knu@iDaemons.org>
-Wed Nov 13 17:09:45 2013 Zachary Scott <e@zzak.io>
+ * misc/rdoc-mode.el (rdoc-imenu-create-index): Add imenu support
+ to rdoc-mode.
- * ext/openssl/lib/openssl/*.rb: [DOC] Document the following:
+ * misc/rdoc-mode.el (rdoc-mode): Fix regexp patterns containing
+ "\s " where CR/LF is not supposed to match.
- - Integer#to_bn
- - OpenSSL::Buffering module
- - Deprecated OpenSSL::Digest::Digest compatibility class
- - OpenSSL::Config
+Sun Feb 12 16:56:23 2012 Akinori MUSHA <knu@iDaemons.org>
- These changes were based on a patch by @vbatts via GH-436
- https://github.com/ruby/ruby/pull/436
+ * misc/rdoc-mode.el (rdoc-mode): Add provide so that requiring
+ this library succeeds.
-Wed Nov 13 10:55:43 2013 Zachary Scott <e@zzak.io>
+Sun Feb 12 16:53:18 2012 Akinori MUSHA <knu@iDaemons.org>
- * doc/regexp.rdoc: [DOC] Fix typo in Special global variables section.
- Reported by Alex Johnson on ruby-doc.org
+ * lib/tempfile.rb (Tempfile#unlink, Tempfile::Remover#call): Just
+ call File.unlink and ignore ENOENT because existence check
+ before unlinking does not help in terms of race condition.
-Wed Nov 13 10:43:19 2013 Zachary Scott <e@zzak.io>
+ * lib/tempfile.rb (Tempfile#unlink, Tempfile::Remover#call): My
+ comment about thread safeness is obsolete.
- * hash.c: [DOC] Adds an example for Hash#store
+Sun Feb 12 16:50:28 2012 Akinori MUSHA <knu@iDaemons.org>
-Wed Nov 13 09:03:40 2013 Zachary Scott <e@zzak.io>
+ * lib/shellwords.rb: Fix rdoc markups.
- * 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
+Sun Feb 12 16:50:28 2012 Akinori MUSHA <knu@iDaemons.org>
-Tue Nov 12 10:15:14 2013 Eric Hodel <drbrain@segment7.net>
+ * lib/shellwords.rb (Shellwords#shellsplit): Fix a bug where
+ consecutive backslashes in double quotes are all removed except
+ the one at the tail.
- * test/rubygems/insure_session.rb: Remove unused test file.
+Sun Feb 12 16:38:13 2012 Akinori MUSHA <knu@iDaemons.org>
-Tue Nov 12 09:16:24 2013 Eric Hodel <drbrain@segment7.net>
+ * lib/shellwords.rb (Shellwords#shellescape): Drop the //n flag
+ that only causes warnings with no real effect. [Bug #5637]
- * lib/rubygems: Update to RubyGems master b9213d7. Changes include:
+Sun Feb 12 16:34:55 2012 Akinori MUSHA <knu@iDaemons.org>
- Fixed tests on Windows (I hope) by forcing platform for
- platform-dependent tests.
+ * tool/merger.rb (#default_merge_branch): Add support for
+ Subversion 1.7 which adopted a whole new working directory
+ structure.
- Fixed File.exists? warnings.
+Sun Feb 12 09:38:46 2012 Yukihiro Matsumoto <matz@ruby-lang.org>
- Improved testing infrastructure.
+ * vm_method.c (rb_add_method): should not call method_added hook
+ for undef operation. [Bug #5015]
- * test/rubygems: ditto.
+Sun Feb 12 09:29:28 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/rdoc/test_rdoc_rubygems_hook.rb: Switch to util_spec like
- RubyGems.
+ * regint.h (PLATFORM_UNALIGNED_WORD_ACCESS): Power PC does not
+ allow unaligned word access.
-Mon Nov 11 18:31:12 2013 Aman Gupta <ruby@tmm1.net>
+ * st.c (UNALIGNED_WORD_ACCESS): x86_64 allows unaligned word
+ access as well as i386.
- * 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.
+Sat Feb 11 08:06:12 2012 Tanaka Akira <akr@fsij.org>
-Mon Nov 11 04:36:14 2013 Eric Hodel <drbrain@segment7.net>
+ * test/openssl/test_ssl.rb (test_multibyte_read_write): start server
+ for each length to avoid race condition.
- * 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.
+Sat Feb 11 06:13:07 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Nov 11 03:15:56 2013 Koichi Sasada <ko1@atdot.net>
+ * dir.c (fnmatch): The * needs to be escaped to avoid formatting in
+ fnmatch comment.
+ patched by @dalton. https://github.com/ruby/ruby/pull/91
- * 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.
+Sat Feb 11 03:38:48 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
-Mon Nov 11 02:51:17 2013 Eric Hodel <drbrain@segment7.net>
+ * io.c (rb_sys_fail_path): move the definition.
+ Move above for using it in set_binary_mode_with_seek_cur().
- * lib/rubygems: Update to RubyGems master 4bdc4f2. Important changes
- in this commit:
+ * io.c (set_binary_mode_with_seek_cur): fix improper seek cursor.
+ Seeking file cursor with setting binary mode has possibility to
+ cause infinite loop. Fixed the bug and refined error handling.
+ Introduced at r34043.
- RubyGems now chooses the test server port reliably. Patch by akr.
+ And cleanups as below.
+ Remove unnecessary parentheses of `fptr`.
+ Use return value of setmode().
- Partial implementation of bundler's Gemfile format.
+ * test/ruby/test_io_m17n.rb
+ (TestIO_M17N#test_seek_with_setting_binmode): add a test for abobe.
+ [ruby-core:41671] [Bug #5714]
- Refactorings to improve the new resolver.
+Sat Feb 11 03:38:48 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- Fixes bugs in the resolver.
+ * test/ruby/test_io_m17n.rb
+ (TestIO_M17N#test_{read_with_binmode_and_get[cs]}): only for Windows.
- * test/rubygems: Tests for the above.
+Sat Feb 11 03:38:48 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Nov 11 01:02:06 2013 Zachary Scott <e@zzak.io>
+ * win32/win32.c, include/ruby/win32.h (rb_w32_fd_is_text): new function.
- * 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
+ * win32/win32.c (init_stdhandle): set default mode of stdin as binmode.
-Sun Nov 10 23:47:05 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+ * io.c (set_binary_mode_with_seek_cur): new function to replace
+ SET_BINARY_MODE_WITH_SEEK_CUR macro. now returns previous mode of the
+ fd and take care of LF in rbuf.
- * gc.c (rb_gcdebug_print_obj_condition): catch up recent changes
- to compile on GC_DEBUG.
+ * io.c (do_writeconv): set text mode when needed.
-Sun Nov 10 22:16:19 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (io_read): need to change the mode of the IO to binmode
+ temporally when the length for IO#read, because IO#read with length
+ must behave so.
- * error.c (exc_cause): captured previous exception.
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#test_{read_with_length,
+ read_with_length_binmode,get[cs]_and_read_with_binmode,
+ read_with_binmode_and_get[cs],read_write_with_binmode}): tests for
+ above changes.
- * eval.c (make_exception): capture previous exception automagically.
- [Feature #8257]
+ all patches are written by Hiroshi Shirosaki. [ruby-core:41496]
+ [Feature #5714]
-Sun Nov 10 08:37:20 2013 Zachary Scott <e@zzak.io>
+Sat Feb 11 03:37:56 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * thread.c: [DOC] Remove duplicate reference
+ * test/rexml/test_order.rb (OrderTester#test_more_ordering): use
+ GZip::GzReader.open instead of GZip::GzReader.new with File.new.
+ fixed a test error on Windows introduced at r33946.
-Sun Nov 10 08:09:29 2013 Zachary Scott <e@zzak.io>
+Sat Feb 11 03:37:34 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/drb/drb.rb: [DOC] promote better windows-safe filename regular
- expression in DRb Logger example. Reported by Chris Pheonix
- [Bug #9074]
+ * ext/zlib/zlib.c (rb_gzreader_initialize): revert a part of r33937.
+ 1st, to change the mode of an IO is very sensitive problem, so
+ fixed test errors on Windows introduced at r33953.
+ the maintainer of this library should judge it.
+ 2nd, usually Zlib::GzReader.new is not called directly. #initialize
+ is called via .open, and in the method the I/O is opened in binary
+ mode, so there is no problem without changing the mode in #initialize.
-Sun Nov 10 08:03:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ fixed test errors on Windows introduced at r33947.
+Sat Feb 11 03:23:58 2012 Luis Lavena <luislavena@gmail.com>
- * gc.c (rb_define_finalizer, rb_undefine_finalizer): rename and export
- finalizer functions.
+ * ext/zlib/zlib.c (rb_gzreader_initialize): use binary mode by default
+ under Windows. Patch by Hiroshi Shirosaki. [ruby-core:40706]
+ [Feature #5562]
-Sun Nov 10 07:41:22 2013 Zachary Scott <e@zzak.io>
+ * include/ruby/encoding.h (void rb_econv_binmode): define NEWLINE
+ decorator.
- * lib/weakref.rb: [DOC] fix typos by @xaviershay [Fixes GH-439]
- https://github.com/ruby/ruby/pull/439
+ * io.c (rb_cloexec_fcntl_dupfd): Introduce NEED_READCONV and
+ NEED_WRITECONV to replace universal newline decorator by CRLF only
+ when required to improve file reading and writing under Windows.
+ Patch by Hiroshi Shirosaki. [ruby-core:40706] [Feature #5562]
+ * io.c (do_writeconv): adjust binary mode if required.
+ * io.c (read_all, appendline, swallow, rb_io_getline_1): ditto.
+ * io.c (io_getc, rb_io_each_codepoint, rb_io_ungetc): ditto.
+ * io.c (rb_io_binmode, rb_io_ascii8bit_binmode): ditto.
+ * io.c (rb_io_extract_modeenc, rb_sysopen): ditto.
+ * io.c (pipe_open, prep_stdio, io_encoding_set): ditto.
+ * io.c (rb_io_s_pipe, copy_stream_body): ditto.
-Sun Nov 10 06:14:39 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * test/ruby/test_io_m17n.rb (EOT): add test for pipe and stdin in
+ binary mode.
- * compile.c (iseq_compile_each): emit opt_str_freeze if the #freeze
- method is called on a static string literal with no arguments.
+ * win32/win32.c (init_stdhandle): remove O_BINARY from stdhandle
+ initialization.
+ * win32/win32.c (rb_w32_write): use FTEXT mode accordingly.
- * defs/id.def (firstline): add freeze so idFreeze is available
+Sat Feb 11 03:20:22 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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
+ * io.c (argf_next_argv): wrong timing of setting ecflags.
+ fixed the failure of TestArgf#test_textmode introduced at r33662.
- * string.c (Init_String): define String#freeze
+Sat Feb 11 03:19:45 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm.c (vm_init_redefined_flag): define BOP_FREEZE on String class as
- a basic operation
+ * test/ruby/test_io_m17n.rb
+ (TestIO_M17N#test_default_stdout_stderr_mode): new test for
+ r33627-33629. see [backport #5565]
+Sat Feb 11 03:20:22 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_insnhelper.h: ditto
+ * include/ruby/encoding.h (ECONV_NEWLINE_DECORATOR_READ_MASK,
+ ECONV_NEWLINE_DECORATOR_WRITE_MASK): new macro.
- [Feature #8992] [ruby-core:57705]
+ * io.c (rb_io_extract_modeenc, pipe_open, prep_stdio, argf_next_argv):
+ set TEXTMODE_NEWLINE_DECORATOR_ON_WRITE for textmode on creating IO
+ if the flag is available.
-Sun Nov 10 01:34:14 2013 Koichi Sasada <ko1@atdot.net>
+ * io.c (make_writeconv): drop decorators for reading.
- * 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.
+ * io.c (make_readconv): drop decorators for writing.
-Sun Nov 10 00:39:26 2013 Koichi Sasada <ko1@atdot.net>
+ * io.c (do_writeconv): existing writeconv is not the condition to raise
+ ArgumentError. should check textmode or not.
- * benchmark/gc/gcbench.rb: output version description and GC::OPTS.
+ * test/ruby/test_io_m17n.rb
+ (TestIO_M17N#test_{cr,lf,crlf}_decorator_on_stdout): test above
+ changes.
-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.
+Sat Feb 11 03:19:45 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Nov 10 00:33:17 2013 Zachary Scott <e@zzak.io>
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#test_{default_mode_on_dosish,
+ default_mode_on_unix,text_mode,binary_mode}): sorry for wrong test
+ committed in r33144. I'd misunderstood the spec of ruby's universal
+ newline.
- * lib/racc/rdoc/grammar.en.rdoc: [DOC] fix typo by Tsuyoshi Sawada
- [Bug #9077]
+Sat Feb 11 03:17:41 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Nov 9 22:35:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#test_{default_mode_on_dosish,
+ default_mode_on_unix,text_mode,binary_mode}): tests for [Bug #5164].
- * 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 Feb 11 03:13:27 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Nov 9 20:56:12 2013 Narihiro Nakamura <authornari@gmail.com>
+ * transcode.c: enabled econv newline option.
- * ext/objspace/object_tracing.c: use declarations in internal.h.
+Sat Feb 11 02:39:09 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * ext/objspace/objspace.c: ditto
+ * variable.c (set_const_visibility): clear inine-cache when constant's
+ visibility is modified. [ruby-dev:44929]
-Sat Nov 9 20:32:59 2013 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_module.rb (test_private_constants_clear_inlinecache):
+ add test for it.
- * 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 Feb 11 02:39:09 2012 Yusuke Endoh <mame@tsg.ne.jp>
-Sat Nov 9 15:00:16 2013 Zachary Scott <e@zzak.io>
+ * variable.c (set_const_visibility): print a warning when no argument
+ is passwd to Module#private_constant. [ruby-list:48558]
- * io.c: [DOC] ARGF.gets may return nil [Bug #9029] patch by znz
+ * vm_method.c (set_method_visibility): ditto for
+ Module#private_class_method.
-Sat Nov 9 14:54:52 2013 Zachary Scott <e@zzak.io>
+Sat Feb 11 02:39:09 2012 Yusuke Endoh <mame@tsg.ne.jp>
- * lib/rss/*: [DOC] document various constants @steveklabnik [Bug #8812]
+ * variable.c (set_const_visibility): Module#private_constant has
+ changed the visibility of only the first argument. Now it changes
+ all of them. [ruby-list:48558]
-Sat Nov 9 14:50:09 2013 Zachary Scott <e@zzak.io>
+ * test/ruby/test_module.rb: add a test for above.
- * lib/rss/rss.rb: [DOC] document Time#w3cdtf by @steveklabnik
- [Bug #8821]
+Sat Feb 11 02:39:09 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Sat Nov 9 14:29:04 2013 Zachary Scott <e@zzak.io>
+ * variable.c (set_const_visibility): clear inine-cache when constant's
+ visibility is modified. [ruby-dev:44929]
- * ext/dl/cfunc.c: [DOC] fix typo in example [Bug #8944]
- Patched by Heesob Park
+ * test/ruby/test_module.rb (test_private_constants_clear_inlinecache):
+ add test for it.
-Sat Nov 9 13:59:58 2013 Zachary Scott <e@zzak.io>
+Sat Feb 11 02:39:09 2012 Yusuke Endoh <mame@tsg.ne.jp>
- * lib/test/unit/assertions.rb: [DOC] better example for assert_send()
- Patch by Andrew Grimm [Bug #8975]
+ * variable.c (set_const_visibility): print a warning when no argument
+ is passwd to Module#private_constant. [ruby-list:48558]
-Sat Nov 9 12:45:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * vm_method.c (set_method_visibility): ditto for
+ Module#private_class_method.
- * 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.
+Sat Feb 11 02:39:09 2012 Yusuke Endoh <mame@tsg.ne.jp>
- * insns.def: ditto
- * vm_core.h: ditto
- * vm_insnhelper.c: ditto
+ * variable.c (set_const_visibility): Module#private_constant has
+ changed the visibility of only the first argument. Now it changes
+ all of them. [ruby-list:48558]
-Sat Nov 9 12:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * test/ruby/test_module.rb: add a test for above.
- * 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.
+Sat Feb 11 02:26:51 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * 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
+ * lib/openssl/buffering.rb: Force multi-byte strings to be treated as
+ binary data.
+ * test/openssl/test_ssl.rb: Add test for it.
-Sat Nov 9 09:22:29 2013 Masaya Tarui <tarui@ruby-lang.org>
+ Thanks to Niklas Baumstark for reporting the issue!
- * gc.c (gc_page_sweep, rgengc_rememberset_mark): Refactoring.
- Get bitmaps directly.
+ [Ruby 1.9 - Bug #5233] [ruby-core:39120]
-Sat Nov 9 09:16:36 2013 Masaya Tarui <tarui@ruby-lang.org>
+Fri Feb 10 17:25:28 2012 Tanaka Akira <akr@fsij.org>
- * gc.c (RVALUE_PROMOTE_INFANT): Refactoring. Remove duplicated nonsense
- code.
+ * lib/set.rb (SortedSet.setup): remove old_init after initialize
+ method is redefined. The remove before redefinition makes the
+ warning prevention fragile. [ruby-dev:44892]
-Sat Nov 9 09:04:48 2013 Masaya Tarui <tarui@ruby-lang.org>
+Fri Feb 10 17:02:12 2012 okkez <okkez000@gmail.com>
- * gc.c (gc_marks_test): Bugfix. Fix a struct member name for build
- with RGENGC_CHECK_MODE.
+ * thread_pthread.c (rb_thread_create_timer_thread): fix memory
+ leak. [ruby-dev:44904] [Bug #5688]
-Sat Nov 9 08:58:23 2013 Masaya Tarui <tarui@ruby-lang.org>
+Fri Feb 10 05:22:32 2012 NARUSE, Yui <naruse@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.
+ * cont.c (fiber_setcontext): Use longjmp() instead of swapcontext() on
+ FreeBSD 9. [ruby-dev:41316] [Bug #3295] [Bug #5526]
-Sat Nov 9 07:41:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Feb 10 05:13:12 2012 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
- * internal.h (rb_vm_backtrace_object, rb_gc_count): make prototype
- declarations, not old-K&R style.
+ * object.c: Added examples for Object#is_a? and
+ Object#instance_of? patcheed from Manoj Kumar.
+ [Bug #5880] [ruby-core:42057]
-Sat Nov 9 06:11:14 2013 vo.x (Vit Ondruch) <vondruch@redhat.com>
+Fri Feb 10 05:11:43 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * 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].
+ * io.c (argf_next_argv): reset ARGF.next_p on ARGV.replace.
+ r34409 breaks replacing ARGV.
+ [ruby-dev:45160] [Bug #5952]
-Sat Nov 9 01:59:18 2013 Aman Gupta <ruby@tmm1.net>
+Fri Feb 10 05:11:43 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * io.c (argf_close): skip stdin, which should be readable again.
+ [ruby-dev:45160] [Bug #5952]
-Sat Nov 9 00:26:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (argf_readlines): reinitialize after all read to be
+ readable again.
- * 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 Feb 9 01:36:19 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Fri Nov 8 18:35:31 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * backport r34482 from trunk
- * lib/open3.rb: receive arguments as keyword arguments.
+ * ext/openssl/ossl_ssl.c: Add SSL constants and allow to unset SSL
+ option to prevent BEAST attack. See [Bug #5353].
-Fri Nov 8 13:19:26 2013 Masaki Matsushita <glass.saga@gmail.com>
+ In OpenSSL, OP_DONT_INSERT_EMPTY_FRAGMENTS is used to prevent
+ TLS-CBC-IV vulunerability described at
+ http://www.openssl.org/~bodo/tls-cbc.txt
+ It's known issue of TLSv1/SSLv3 but it attracts lots of attention
+ these days as BEAST attack. (CVE-2011-3389)
- * io.c (rb_io_open_with_args): use RARRAY_CONST_PTR().
+ Until now ossl sets OP_ALL at SSLContext allocation and call
+ SSL_CTX_set_options at connection. SSL_CTX_set_options updates the
+ value by using |= so bits set by OP_ALL cannot be unset afterwards.
+ This commit changes to call SSL_CTX_set_options only 1 time for each
+ SSLContext. It sets the specified value if SSLContext#options= are
+ called and sets OP_ALL if not.
- * io.c (rb_scan_open_args): use const qualifier for above.
+ To help users to unset bits in OP_ALL, this commit also adds several
+ constant to SSL such as
+ OpenSSL::SSL::OP_DONT_INSERT_EMPTY_FRAGMENTS. These constants were
+ not exposed in Ruby because there's no way to unset bits in OP_ALL
+ before.
- * io.c (rb_open_file): ditto.
+ Following is an example to enable 0/n split for BEAST prevention.
- * io.c (rb_io_open_with_args): ditto.
+ ctx.options = OP_ALL & ~OP_DONT_INSERT_EMPTY_FRAGMENTS
-Fri Nov 8 11:35:06 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * test/openssl/test_ssl.rb: Test above option exists.
- * dir.c, pack.c, ruby.c, struct.c, vm_eval.c: use RARRAY_CONST_PTR().
+Thu Feb 9 17:08:20 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Fri Nov 8 10:58:02 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * cont.c (cont_mark): mark original Thread object from saved_thread.
+ [ruby-dev:44567] [Bug #5386]
- * compile.c (iseq_build_from_ary_exception): use RARRAY_CONST_PTR().
+Thu Feb 9 17:05:07 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * compile.c (iseq_build_from_ary_body): ditto.
+ * cont.c (HAVE_GETCONTEXT): see getcontext(3) because DragonFly BSD
+ x64 port doesn't have it.
-Fri Nov 8 10:49:34 2013 Masaki Matsushita <glass.saga@gmail.com>
+Thu Feb 9 16:19:04 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- * enumerator.c (append_method): use RARRAY_CONST_PTR().
+ * test/ruby/memory_status.rb (Memory::Win32): 64bit support.
- * enumerator.c (lazy_init_iterator): ditto.
+Thu Feb 9 16:19:04 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Nov 8 02:44:29 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/dl/lib/value.rb (DL::ValueUtil.{unsigned_value,signed_value}):
+ currenly pack/unpack does not accept "q!" and "Q!".
- * 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]
+Thu Feb 9 16:19:04 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- This workaround introduces possibility to set malloc_limit as
- wrong value (*1). However, this may be rare case. So I commit it.
+ * ext/fiddle/conversions.c (value_to_generic): src is not guranteed as
+ a Bignum if the type is LONG_LONG. it may be a Fixnum if the value
+ is small.
- *1: Without rest_sweep() here, gc_rest_sweep() can decrease
- malloc_increase due to ruby_sized_xfree().
+Thu Feb 9 16:19:04 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Nov 8 02:50:25 2013 Zachary Scott <e@zzak.io>
+ * ext/dl/lib/types.rb: Win64 support.
- * lib/securerandom.rb: [DOC] specify arguments passed to ::random_bytes
- By @chastell [Fixes GH-412] https://github.com/ruby/ruby/pull/412
+Thu Feb 9 11:11:15 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
-Fri Nov 8 02:43:01 2013 Zachary Scott <e@zzak.io>
+ * ext/dbm/dbm.c (Init_dbm): fix a build error on mswin32.
+ use `extern __declspec(dllimport)` for dll link with VC.
+ [ruby-core:41996] [Bug #5869]
- * ext/objspace/object_tracing.c: [DOC] trace_object_allocations_stop
- By @srawlins [Fixes GH-421] https://github.com/ruby/ruby/pull/421
+Thu Feb 9 11:11:15 2012 Tanaka Akira <akr@fsij.org>
-Fri Nov 8 02:34:20 2013 Zachary Scott <e@zzak.io>
+ * ext/dbm/dbm.c: use db_version() instead of DB_VERSION_STRING to
+ detect runtime Berkeley DB version.
+ use dpversion instead of _QDBM_VERSION to detect runtime QDBM
+ version.
+ [ruby-dev:44948]
- * 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
+Thu Feb 9 11:11:15 2012 Tanaka Akira <akr@fsij.org>
-Fri Nov 8 02:14:37 2013 Zachary Scott <e@zzak.io>
+ * ext/dbm/extconf.rb: detect gdbm_version in libgdbm.
- * array.c: [DOC] Add note about negative indices in Array overview
- By @ckaenzig [Fixes GH-427] https://github.com/ruby/ruby/pull/427
+ * ext/dbm/dbm.c: make DBM::VERSION more informative for gdbm, qdbm and
+ Berkeley DB 1.x. [ruby-dev:44944]
-Fri Nov 8 02:09:12 2013 Zachary Scott <e@zzak.io>
+Thu Feb 9 07:32:40 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * lib/csv.rb: [DOC] Fix typo in CSV.parse_line by @funky-bibimbap
- [Fixes GH-430] https://github.com/ruby/ruby/pull/430
+ * numeric.c (rb_enc_uint_char): raise RangeError when added codepoint
+ is invalid. [Feature #5855] [Bug #5863] [Bug #5864]
-Fri Nov 8 01:01:54 2013 Zachary Scott <e@zzak.io>
+ * string.c (rb_str_concat): ditto.
- * golf_prelude.rb: syntax formatting for whitespace [Fixes GH-425]
- Patch by @edward https://github.com/ruby/ruby/pull/425
+ * string.c (rb_str_concat): set encoding as ASCII-8BIT when the string
+ is US-ASCII and the argument is an integer greater than 127.
-Thu Nov 7 19:36:09 2013 Koichi Sasada <ko1@atdot.net>
+ * regenc.c (onigenc_mb2_code_to_mbclen): rearrange error code.
- * gc.c: modify malloc_limit strategy.
+ * enc/euc_jp.c (code_to_mbclen): ditto.
- * fix default values:
- GC_MALLOC_LIMIT_GROWTH_FACTOR
- GC_MALLOC_LIMIT: 8MB -> 16MB
- GC_MALLOC_LIMIT_MAX: 384MB -> 32MB
+ * enc/shift_jis.c (code_to_mbclen): ditto.
- * 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 Feb 9 07:28:43 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Nov 7 11:06:05 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * test/pathname/test_pathname.rb: not read but binread.
+ patched by Benoit Daloze, [ruby-core:42440] [Bug #5984]
- * array.c (rb_ary_shuffle_bang): use RARRAY_PTR_USE() without WB
- because there are not new relations.
+Wed Feb 8 22:29:59 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Nov 7 10:34:12 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * string.c (rb_str_modify_expand): fix memory leak.
- * array.c (rb_ary_sample): use rb_ary_dup().
+Wed Feb 8 10:58:45 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Nov 7 09:39:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/readline/readline.c (readline_attempted_completion_function):
+ respect encodings. [Bug #5941]
- * 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 Feb 8 10:56:00 2012 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Wed Nov 6 21:30:55 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * ext/readline/readline.c (readline_attempted_completion_function):
+ fix compile error.
- * gc.c (gc_before_sweep): Change algorithm of malloc_limit to
- conservative for closing to memory consumption of ruby 2.0.
+Wed Feb 8 10:56:00 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (GC_MALLOC_LIMIT, GC_MALLOC_LIMIT_GROWTH_FACTOR):
- Adjust parameters for new algorithm.
+ * ext/readline/readline.c (readline_attempted_completion_function):
+ empty completion result does not mean memory error.
-Wed Nov 6 21:16:51 2013 Masaki Matsushita <glass.saga@gmail.com>
+Wed Feb 8 10:54:49 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * array.c (rb_ary_shift_m): use RARRAY_PTR_USE() without WB because
- there are not new relations.
+ * ext/readline/readline.c (readline_readline): check if outstream
+ is closed to get rid of a bug of readline 6. [ruby-dev:45043]
+ [Bug #5803]
-Wed Nov 6 21:05:20 2013 Masaki Matsushita <glass.saga@gmail.com>
+Wed Feb 8 10:52:51 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * array.c (rb_ary_reverse): use RARRAY_PTR_USE().
+ * ext/readline/readline.c (Init_readline): like r18313, libedit's
+ replace_history_entry may use offset instead of which.
+ so introduce history_replace_offset_func and initialize it.
-Wed Nov 6 19:30:44 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * ext/readline/readline.c (hist_set): use history_replace_offset_func.
- * common.mk (help): add texts about gcbench.
+Wed Feb 8 10:52:36 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Nov 6 16:32:32 2013 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * ext/readline/readline.c (Init_readline): fix wrong condition.
- * lib/open3.rb: tweaked grammar in comments
+Wed Feb 8 10:50:11 2012 Naohisa Goto <ngotogenome@gmail.com>
-Wed Nov 6 11:46:36 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * test/ruby/test_rubyoptions.rb (test_script_from_stdin): slave pty
+ should be manipulated because master pty may not be a tty on some
+ environment (e.g. Solaris). [Bug:#5222] [ruby-dev:44420]
- * array.c (rb_ary_sample): use RARRAY_AREF() and RARRAY_PTR_USE()
- instead of RARRAY_PTR().
+Wed Feb 8 10:38:36 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Nov 6 10:37:07 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * Makefile.in (CFLAGS): append ARCH_FLAG.
- * array.c (rb_ary_and): defer hash creation and some refactoring.
+ * configure.in (ARCH_FLAG): exclude from CFLAGS.
-Wed Nov 6 09:14:31 2013 Koichi Sasada <ko1@atdot.net>
+Wed Feb 08 09:19:00 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * benchmark/bm_vm1_gc_short_lived.rb: added.
- These GC benchmarks do not reflect practical applications.
- They are only for tuning.
+ * ext/openssl/ossl_cipher.c: Add warning about key as IV.
- * benchmark/bm_vm1_gc_short_with_complex_long.rb: added.
+Wed Feb 8 10:37:31 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * benchmark/bm_vm1_gc_short_with_long.rb: added.
+ * ext/openssl/ossl_cipher.c: Update and complete documentation.
- * benchmark/bm_vm1_gc_short_with_symbol.rb: added.
+Wed Feb 08 09:57:33 2012 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * benchmark/bm_vm1_gc_wb_ary.rb: added.
+ * ext/openssl/ossl_asn1.c: Call INT2NUM only once for GeneralString.
+ Thanks to Mantas Mikulenas for noticing and providing a patch!
+ [ruby-core:42358] [Bug #5972]
- * benchmark/bm_vm1_gc_wb_obj.rb: added.
+Wed Feb 8 10:34:59 2012 TAKAO Kouji <kouji@takao7.net>
- * benchmark/bm_vm_thread_queue.rb: added.
- This benchmark is added to know how fast C version of thread.so.
+ * ext/readline/readline.c (readline_attempted_completion_function):
+ in Readline module with GNU Readline 6 case, Readline module
+ resets completion_append_character to " ", after it executes
+ completion. So, Readline module stores
+ completion_append_character, and Readline module always sets it
+ after Readline module executes completion. [ruby-dev:43456]
+ [Feature #4635]
-Wed Nov 6 09:13:32 2013 Koichi Sasada <ko1@atdot.net>
+Wed Feb 8 09:47:52 2012 Tanaka Akira <akr@fsij.org>
- * gc.c: define RGENGC_ESTIMATE_OLDSPACE == 0 if USE_RGENGC is 0.
+ * test/ruby/test_sleep.rb (test_sleep_5sec): 0.1sec tolerance is too
+ small for busy environment.
-Wed Nov 6 07:13:18 2013 Koichi Sasada <ko1@atdot.net>
+Wed Feb 8 09:45:23 2012 Tanaka Akira <akr@fsij.org>
- * gc.c (Init_GC): add GC::OPTS to show options.
+ * test/dbm/test_dbm.rb: split tests for read only database.
-Wed Nov 6 07:12:17 2013 Koichi Sasada <ko1@atdot.net>
+ * test/gdbm/test_gdbm.rb: ditto.
- * benchmark/gc/gcbench.rb: add some options to make quiet.
+Wed Feb 8 09:43:48 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Wed Nov 6 04:14:25 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * error.c (name_err_mesg_to_str): clear rb_thread_t::errinfo when
+ ignore exception under rb_protect(). [ruby-core:41612] [Bug #5755]
- * 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
+ * test/ruby/test_exception.rb (test_exception_in_name_error_to_str):
+ add a corresponding test.
-Tue Nov 5 21:21:47 2013 Tanaka Akira <akr@fsij.org>
+Wed Feb 8 09:36:42 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_thread.rb (test_thread_join_in_trap):
- Run the test in a different process.
+ * encoding.c (require_enc): reject only loading from untrusted
+ load paths. [ruby-dev:44541] [Bug #5279]
-Tue Nov 5 20:14:32 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * transcode.c (load_transcoder_entry): ditto.
- * gc.c (is_live_object): A hidden object may be a live object.
- [ruby-dev:47788] [Bug #9072]
+Wed Feb 8 09:36:42 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Nov 5 13:37:19 2013 Koichi Sasada <ko1@atdot.net>
+ * encoding.c (load_encoding): predefined encoding names are safe.
+ [ruby-dev:44469] [Bug #5279]
- * 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.
+ * transcode.c (load_transcoder_entry): ditto.
- 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'.
+Tue Feb 7 14:29:16 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- To implement this feature, move memsize_of() function from
- ext/objspace/objspace.c and expose rb_obj_memsize_of().
+ * st.c (st_foreach): should not yield same pair when checking
+ after unpacking.
- 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.
+Tue Feb 7 14:03:45 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- The macro RGENGC_ESTIMATE_OLDSPACE enables/disables this feature,
- and turned off as default.
+ * lib/tempfile.rb (Tempfile#_close): clear @tempfile and @data[1] even
+ when exception is raised at @tempfile.close. [ruby-dev:45113]
- We need to compare 3gen GC and this feature carefully.
- (it is possible to enable both feature)
- We need a help to compare them.
+ * lib/tempfile.rb (Tempfile#unlink): fix a typo.
- * internal.h: expose rb_obj_memsize_of().
+Tue Feb 7 14:02:32 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * ext/objspace/objspace.c: use rb_obj_memsize_of() function.
+ * test/ruby/test_io.rb (test_autoclose_true_closed_by_finalizer,
+ test_autoclose_true_closed_by_finalizer): skip if IO objects are
+ not recycled yet. [ruby-dev:45098] [Bug #5850]
- * cont.c (fiber_memsize): fix to check NULL.
+Tue Feb 7 13:59:26 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * variable.c (autoload_memsize): ditto.
+ * gc.c (run_finalizer): clear rb_thread_t::errinfo when ignore
+ an exception under rb_protect(). [ruby-dev:45113]
- * vm.c (vm_memsize): ditto.
+Mon Feb 6 15:34:47 2012 Tanaka Akira <akr@fsij.org>
-Tue Nov 5 04:03:07 2013 Koichi Sasada <ko1@atdot.net>
+ * ruby.c (fill_standard_fds): use fstat() instead of fcntl(F_GETFD)
+ for MinGW. reported by Luis Lavena. [ruby-core:40526] [Bug #5516]
- * gc.c (GC_MALLOC_LIMIT_MAX): fix default value 512MB -> 384MB.
- 512MB is huge.
+Mon Feb 6 15:34:47 2012 Tanaka Akira <akr@fsij.org>
-Tue Nov 5 03:31:23 2013 Koichi Sasada <ko1@atdot.net>
+ * ruby.c (fill_standard_fds): new function to open closed standard
+ file descriptors.
+ (ruby_sysinit): call fill_standard_fds.
- * gc.c: add 3gen GC patch, but disabled as default.
+Mon Feb 6 15:19:17 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- 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.
+ * io.c (rb_io_fsync,rb_io_fdatasync): release GVL during fsync().
+ fsync() and fdatasync() may take a long time on slow disks and/or
+ if there is much dirty data.
+ Patch by Eric Wong. [Feature #5665] [ruby-core:41247]
- 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.
+Mon Feb 6 15:01:55 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- 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.
+ * vm_eval.c (vm_call0): should pass block to enumerators. patched
+ by Kazuki Tsujimoto. [ruby-dev:44961][Bug #5731]
- To solve this problem, generational GC with more generations
- technique is known. This patch implements three generations gen GC.
+ * vm_eval.c (method_missing), vm_insnhelper.c (vm_call_method):
+ ditto. patched by satoshi shiba.
- 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.
+Mon Feb 6 21:52:20 2012 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- Representation of generations:
- * Infant: !FL_PROMOTED and !oldgen_bitmap [00]
- * Young : FL_PROMOTED and !oldgen_bitmap [10]
- * Old : FL_PROMOTED and oldgen_bitmap [11]
+ * common.mk (INSTRUBY_ARGS): added --mantype to apply mdoc2man.rb
+ to man pages. Fixes #5598.
+ (do-install-nodoc, do-install-local, do-install-man,
+ dont-install-nodoc, dont-install-local, dont-install-man):
+ No longer needs --mantype.
- 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.
+ Reported by Rainer Orth <ro AT cebitec.uni-bielefeld.de>,
+ patch by George Koehler <xkernigh AT netscape.net>.
- To evaluate this feature on more applications, I commit this patch.
- Reports are very welcome.
+Mon Feb 6 21:21:46 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- This patch includes some refactoring (renaming names, etc).
+ * test/unit/assertions.rb (MINI_DIR): quick dirty hack to get rid of
+ warnings when using assert/assert_respond_to.
- * include/ruby/ruby.h: catch up 3gen GC.
+Mon Feb 6 20:38:19 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * .gdbinit: fix to show a prompt "[PROMOTED]" for promoted objects.
+ * file.c (file_expand_path): reset coderange after expanding path.
-Tue Nov 5 00:05:51 2013 Koichi Sasada <ko1@atdot.net>
+Mon Feb 6 20:32:17 2012 Tadayoshi Funaba <tadf@dotrb.org>
- * node.h: catch up comments for last commit.
+ * ext/date/date_strptime.c: moved detector of leftover.
-Tue Nov 5 00:02:00 2013 Koichi Sasada <ko1@atdot.net>
+Mon Feb 6 20:32:17 2012 Tadayoshi Funaba <tadf@dotrb.org>
- * include/ruby/ruby.h: rename FL_OLDGEN to FL_PROMOTED.
- This flag represents that "this object is promoted at least once."
+ * ext/date/date_parse.c: [ruby-core:42173].
- * gc.c, debug.c, object.c: catch up this change.
+Mon Feb 6 20:31:35 2012 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Nov 4 22:20:16 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c: uses to_integer instead.
+ * test/date/test_switch_hitter.rb: added a test.
- * test/xmlrpc: Don't use fixed ports: 8070 and 8071.
+Mon Feb 6 20:31:35 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Nov 4 15:25:52 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c (wholenum): fix the type of the return value.
- * test/xmlrpc/webrick_testing.rb (start_server): Initialize the server
- at main thread to fail early.
+Mon Feb 6 20:31:35 2012 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Nov 4 10:08:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/date/date_core.c: [ruby-dev:45008].
- * 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
+Mon Feb 6 16:38:56 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Nov 3 23:06:51 2013 Tanaka Akira <akr@fsij.org>
+ * win32/win32.c (unixtime_to_filetime): should check the return value
+ of localtime(). reported by snowjail at gmail.com.
+ [ruby-dev:44838] [Bug #5596]
- * sample/test.rb: Make temporary file names unique.
+Mon Feb 6 16:36:25 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Nov 3 20:41:17 2013 Tanaka Akira <akr@fsij.org>
+ * io.c (rb_update_max_fd): fstat(2) can fail with other than
+ EBADF. [ruby-dev:44837] [Bug #5593]. Cf.
+ http://pubs.opengroup.org/onlinepubs/9699919799/functions/fstat.html
- * test/xmlrpc: Wrap definitions by TestXMLRPC module.
+Mon Feb 6 16:31:16 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Nov 3 20:23:38 2013 Tanaka Akira <akr@fsij.org>
+ * io.c (io_fwrite): call rb_w32_write_console() only if FMODE_TTY is
+ set. this is the one of the reason of IO writing slowness of Windows
+ in 1.9.3 or later.
- * test/xmlrpc/webrick_testing.rb (stop_server): Don't try to shutdown
- the server if the server is not started.
+Mon Feb 6 16:21:57 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Sun Nov 3 09:35:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (file_expand_path): reset coderange after expanding path.
- * load.c (rb_feature_p): deal with default loadable suffixes.
+Mon Feb 6 00:06:39 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * load.c (load_lock): initialize statically linked extensions.
+ * ext/json/parser/parser.rl (json_string_unescape): workaround fix
+ for over optimization of GCC 4.7. [ruby-core:42085] [Bug #5888]
+ http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51862
- * load.c (search_required, rb_require_safe): deal with statically
- linked extensions.
+Fri Feb 3 16:16:10 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * load.c (ruby_init_ext): defer initialization of statically linked
- extensions until required actually. [Bug #8883]
+ * test/ruby/envutil.rb (EnvUtil.invoke_ruby): yield also child pid
+ in block form.
-Sat Nov 2 15:14:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Feb 3 16:16:10 2012 Hiroshi Shirosaki <h.shirosaki@gmail.com>
- * 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/ruby/test_thread.rb
+ (TestThreadGroup#test_thread_timer_and_interrupt): skip exit status
+ assertion because we cannot get signal status on Windows.
- * test/logger/test_logger.rb (TestLogDevice#run_children): don't use
- fork.
+ * win32/win32.c (CreateChild): create process group to receive the
+ signal by GenerateConsoleCtrlEvent().
-Sat Nov 2 07:08:43 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * win32/win32.c (kill): use CTRL_BREAK_EVENT instead of CTRL_C_EVENT
+ if a process group is specified. CTRL_C_EVENT signal cannot be
+ generated for process groups for the specification.
+ [ruby-dev:45149] [Bug #5812]
- * 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 Feb 3 16:16:10 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Fri Nov 1 23:24:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/envutil.rb (invoke_ruby): remove :timeout option before
+ pass it to Kernel#spawn.
- * gc.c (wmap_mark_map): mark live objects only, but delete zombies.
- [ruby-dev:47787] [Bug #9069]
+Fri Feb 3 10:10:02 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Fri Nov 1 22:45:54 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * thread_pthread.c (ping_signal_thread_list): remove return value.
+ * thread_pthread.c (check_signal_thread_list): add a new function to
+ check if signal thread list is empty.
+ * thread_pthread.c (thread_timer): check signal thread list after
+ timer_thread_function(). main thread might be added into signal thread
+ list during timer_thread_function().
- * gc.c (struct heap_page, gc_page_sweep, gc_sweep): Refactoring for
- performance. Add before_sweep condition to heap_page structure.
+Fri Feb 3 10:10:02 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * gc.c (rb_gc_force_recycle): Use before_sweep member.
+ * thread_pthread.c (ubf_select): call rb_thread_wakeup_timer_thread()
+ only when it is not timer_thread. [Bug #5757] [ruby-dev:44985]
+ patched by Tomoyuki Chikanaga.
- * gc.c (heap_is_before_sweep, is_before_sweep): Remove. They have not
- already been used.
+Wed Feb 1 09:50:10 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Nov 1 22:20:28 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * doc/re.rdoc (Repetition): fix typo. reported by Ori Avtalion
+ and patched by Zachary Scott. [Bug #5947]
- * gc.c (make_deferred): Refactoring. Collect codes which should be
- atomic.
+Tue Jan 24 11:38:05 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * gc.c (make_io_deferred, obj_free, rb_objspace_call_finalizer,
- gc_page_sweep): Correspond to the above.
+ * lib/uri/common.rb (URI.encode_www_form_component): initialize on
+ requiring to support JRuby, which runs parallel multithreads.
+ [ruby-core:42222] [Bug #5925]
-Fri Nov 1 21:40:35 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * lib/uri/common.rb (URI.decode_www_form_component): initialize on
- * gc.c (typedef struct rb_objspace): Refactoring. Move some members
- into profile member.
+Sat Jan 28 05:53:34 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (newobj_of): Correspond to the above.
+ * lib/irb/completion.rb (IRB::InputCompletor::CompletionProc):
+ ignore non-string name modules. [ruby-core:42244][Bug #5938]
- * gc.c (finalize_list): Ditto.
+Mon Jan 23 18:18:58 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * gc.c (objspace_live_num): Ditto.
+ * encoding.c (rb_enc_compatible): fix segv on symbols.
+ [ruby-core:42204] [Bug #5921]
- * gc.c (gc_page_sweep): Ditto.
+Tue Jan 17 17:18:41 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (rb_gc_force_recycle): Ditto.
+ * configure.in (SPT_TYPE): enable as SPT_REUSEARGV on Darwin.
- * gc.c (garbage_collect_body): Ditto.
+ * missing/setproctitle.c (ruby_init_setproctitle): changed prefix.
- * gc.c (rb_gc_count): Ditto.
+Mon Jan 16 16:41:53 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (gc_stat): Ditto.
+ * lib/optparse.rb (Regexp): fix incorrect options when casting to
+ a Regexp, and suppress encoding option warnings.
+ https://github.com/ruby/ruby/pull/82
- * gc.c (gc_prof_set_heap_info): Ditto.
+Fri Jan 13 15:22:43 2012 Tanaka Akira <akr@fsij.org>
- * gc.c (gc_profile_dump_on): Ditto.
+ * time.c (TIME_COPY_GMT): copy vtm.utc_offset and vtm.zone too.
+ patch by Tomoyuki Chikanaga.
+ [ruby-dev:44827] [Bug #5586]
-Fri Nov 1 20:53:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jan 12 13:52:13 2012 NARUSE, Yui <naruse@ruby-lang.org>
- * string.c (rb_str_scrub): fix typo, should yield invalid byte
- sequence to be scrubbed. reported by znz at IRC.
+ * cont.c (cont_restore_0): prevent optimizing out `sp'. sp is used for
+ reserving a memory space with ALLOCA_N for restoring machine stack
+ stored in cont->machine_stack, but clang optimized out it (and
+ maybe #5851 is also caused by this).
+ This affected TestContinuation#test_check_localvars.
-Fri Nov 1 17:25:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * cont.c (cont_restore_1): revert workaround introduced in r32201.
- * gc.c (is_live_object): finalizer may not run because of lazy-sweep.
- [ruby-dev:47786] [Bug #9069]
+Thu Jan 12 01:40:33 2012 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Nov 1 16:55:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_io.rb (TestIO#test_autoclose): Tempfile.new doesn't
+ accept the block argument.
- * string.c (rb_str_scrub): export with fixed length arguments, and
- allow nil as replacement string instead of omitting.
+Sat Jan 7 22:46:36 2012 Kouhei Sutou <kou@cozmixng.org>
-Fri Nov 1 06:20:44 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * lib/rexml/parsers/baseparser.rb: use private instead of _xxx
+ method name. This is Ruby code not Python code.
+ refs #5696
- * 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]
+Tue Jan 03 23:57:37 2012 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
-Fri Nov 1 01:08:33 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/rexml/parsers/baseparser.rb: rexml BaseParser uses
+ instance_eval unnecessarily on listener add.
+ patch from Charles Nutter. [Bug #5696] [ruby-core:41437]
- * benchmark/gc/gcbench.rb: print HWM (high water mark) if possible.
+Tue Jan 03 19:13:05 2012 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
-Thu Oct 31 21:48:31 2013 Kouhei Sutou <kou@cozmixng.org>
+ * test/rexml/test_sax.rb: add require 'rexml/document'.
+ [Backport #5834] [ruby-dev:45079]
- * lib/rexml/parsers/streamparser.rb: Add dependency file require.
- [Bug #9062] [ruby-dev:47779]
- Reported by Ippei Obayashi. Thanks!!!
+Tue Jan 3 19:05:42 2012 Naohisa Goto <ngotogenome@gmail.com>
-Thu Oct 31 14:09:32 2013 Koichi Sasada <ko1@atdot.net>
+ * include/ruby/defines.h (FLUSH_REGISTER_WINDOWS): move sparc asm code
+ to a separete file sparc.c for preventing inlining optimization.
+ Patched by Jurij Smakov. [Bug #5244] [ruby-core:40685]
+ * sparc.c (rb_sparc_flush_register_windows): ditto.
+ * configure.in: ditto.
- * vm_method.c (rb_method_entry_make): fix to pass an ISeq value.
- OBJ_WRITTEN() accepts only VALUE.
+Mon Jan 2 23:52:20 2012 TAKAO Kouji <kouji@takao7.net>
-Wed Oct 30 19:07:57 2013 Akinori MUSHA <knu@iDaemons.org>
+ * ext/readline/readline.c (Init_readline): libedit check
+ rl_getc_function only when rl_initialize() is called, and
+ using_history() call rl_initialize(). This assignment should be
+ placed before using_history(). [ruby-core:40641] [Bug #5539]
- * 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]
+Mon Jan 2 23:47:58 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Oct 30 12:44:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * tool/rbinstall.rb (install_recursive, bin-comm): split mere
+ string not path name. [ruby-core:40462] [Bug #5492]
- * win32/Makefile.sub (config.status): add missing variables,
- PLATFORM_DIR and THREAD_MODEL.
+Mon Jan 2 23:41:57 2012 Tajima Akil <artonx@yahoo.co.jp>
-Wed Oct 30 12:20:32 2013 Tanaka Akira <akr@fsij.org>
+ * win32/Makefile.sub (CONFIG_H): have stdint.h if VC2010.
+ [Bug #5243]
- * time.c (v2w): Normalize a rational value to an integer if possible.
- [ruby-core:58070] [Bug #9059] reported by Isaac Schwabacher.
+Mon Jan 2 21:40:45 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Oct 30 12:08:41 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * tool/merger.rb (#version_up): version.h date should be Japanese
+ locale date.
- * array.c (rb_ary_uniq_bang): use rb_ary_modify_check() instead of
- rb_ary_modify() because the array will be unshared soon.
+Mon Jan 2 21:36:56 2012 Luis Lavena <luislavena@gmail.com>
-Wed Oct 30 03:25:10 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * configure.in: check -fno-omit-frame-pointer acceptance and usage
+ under MinGW. [ruby-core:39957] [Bug #5407]
- * ext/psych/lib/psych/visitors/yaml_tree.rb: make less garbage when
- testing if a string is binary.
+Mon Jan 2 20:05:10 2012 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Oct 30 03:08:24 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * include/ruby/ruby.h (SIZE_MAX): define SIZE_MAX if not defined.
+ patched by The Written Word Inc. [ruby-core:40422] [Bug #5489]
- * 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
+Mon Jan 2 20:00:01 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/psych/test_string.rb: test for fix
+ * ext/pty/pty.c (pty_check): should return nil until the child
+ terminates or stops. [ruby-dev:44600] [Bug #2642]
-Tue Oct 29 23:01:18 2013 Masaki Matsushita <glass.saga@gmail.com>
+Mon Jan 2 19:27:18 2012 Yusuke Endoh <mame@tsg.ne.jp>
- * array.c (rb_ary_zip): some refactoring.
+ * thread.c (update_coverage): skip coverage count up if the current
+ line is out of the way. rb_sourceline() is unreliable when source
+ code is big. [ruby-dev:44413]
-Tue Oct 29 22:11:37 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * test/coverage/test_coverage.rb: add a test for above.
- * array.c (rb_ary_uniq_bang): use st_foreach() instead of for loop.
+Mon Jan 2 19:08:54 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Oct 29 20:01:58 2013 Koichi Sasada <ko1@atdot.net>
+ * thread_pthread.c (gvl_yield): don't prevent concurrent sched_yield().
+ [Bug #5130] [ruby-core:38647]
- * add RUBY_TYPED_FREE_IMMEDIATELY to data types which only use
- safe functions during garbage collection such as xfree().
+Mon Jan 2 18:54:52 2012 NAKAMURA Usaku <usa@ruby-lang.org>
- 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.
+ * win32/configure.bat: disable delayed expansion of enironment variable.
+ [Bug #5517] [ruby-core:40531]
- 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.
+Wed Dec 28 11:22:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * cont.c: ditto.
+ * lib/fileutils.rb (FileUtils::Entry_#entries): use utility method
+ instead of typoed regexp. [ruby-core:41829] [Bug #5817]
- * dir.c: ditto.
+Thu Dec 15 10:44:54 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * encoding.c: ditto.
+ * array.c (rb_ary_reject_bang, rb_ary_delete_if): update rdoc.
+ documentation from Thomas Leitner <t_leitner AT gmx.at> in
+ [ruby-core:41616]. [Bug #5752]
- * enumerator.c: ditto.
+Wed Dec 14 15:28:31 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * error.c: ditto.
+ * transcode.c (str_encode): about the extension of :fallback
+ option since 1.9.3.
- * file.c: ditto.
+Tue Oct 4 06:43:47 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * gc.c: ditto.
+ * ext/psych/lib/psych.rb: update psych version.
+ * ext/psych/psych.gemspec: generate new gemspec for new version.
- * io.c: ditto.
+Tue Oct 4 06:29:55 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * iseq.c: ditto.
+ * ext/psych/lib/psych.rb: calling `yaml` rather than `to_yaml`.
+ * ext/psych/lib/psych/nodes/node.rb: Rename `to_yaml` to just `yaml`
+ in order to avoid YAML::ENGINE switching from replacing this method.
+ * test/psych/helper.rb: fix tests for method name change.
+ * test/psych/test_document.rb: ditto
+ * test/psych/visitors/test_emitter.rb: ditto
- * marshal.c: ditto.
+Tue Oct 4 06:20:19 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * parse.y: ditto.
+ * ext/psych/lib/psych/scalar_scanner.rb: Match values against the
+ floating point spec defined in YAML to avoid erronious parses.
+ * test/psych/test_numeric.rb: corresponding test.
- * proc.c: ditto.
+Tue Oct 4 05:59:24 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * process.c: ditto.
+ * ext/psych/lib/psych/visitors/to_ruby.rb: ToRuby visitor can be
+ constructed with a ScalarScanner.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: ScalarScanner can be
+ passed to the YAMLTree visitor.
- * random.c: ditto.
+Tue Oct 4 05:47:23 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * thread.c: ditto.
+ * ext/psych/lib/psych/visitors/to_ruby.rb: Define Regexp::NOENCODING
+ for 1.9.2 backwards compatibility.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: Fix Date string
+ generation for 1.9.2 backwards compatibility.
- * time.c: ditto.
+Fri Sep 2 04:05:25 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * transcode.c: ditto.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: emit strings tagged as
+ ascii-8bit as binary in YAML.
+ * test/psych/test_string.rb: corresponding test.
- * variable.c: ditto.
+Wed Dec 7 19:04:22 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm.c: ditto.
+ * configure.in (rpath): fix typo in the help string. a patch from
+ Yuji Yamano <yyamano AT kt.rim.or.jp> in [ruby-list:48568].
- * vm_backtrace.c: ditto.
+Wed Nov 30 18:22:10 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_trace.c: ditto.
+ * complex.c (nucomp_rationalize): fix function. [ruby-core:40667]
+ [Bug #5546]
- * ext/bigdecimal/bigdecimal.c: ditto.
+Thu Nov 17 10:36:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * ext/objspace/objspace.c: ditto.
+ * ext/psych/lib/psych.rb (load_file): make sure opened yaml files are
+ also closed. [ruby-core:41088]
- * ext/stringio/stringio.c: ditto.
+Wed Nov 30 02:58:46 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * ext/strscan/strscan.c: ditto.
+ * numeric.c (dbl2ival): Fix Float#divmod and #round for 32 bit
+ platform. part 1 of [bug #5276]
-Tue Oct 29 19:48:33 2013 Koichi Sasada <ko1@atdot.net>
+Wed Nov 30 02:58:46 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * include/ruby/ruby.h: fix typo (FL_WB_PROTECT -> FL_WB_PROTECTED).
+ * numeric.c (flo_round): Fix criteria for 32 bits platform
+ part 2 of [bug #5276]
-Tue Oct 29 18:45:08 2013 Koichi Sasada <ko1@atdot.net>
+Wed Nov 30 02:37:32 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * vm_trace.c (tp_free): removed because empty free function.
- Use RUBY_TYPED_NEVER_FREE instead.
+ * numeric.c (flo_round): Make Float#round round big values [bug
+ #5272]
-Tue Oct 29 18:37:33 2013 Koichi Sasada <ko1@atdot.net>
+Wed Nov 30 02:37:32 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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).
+ * numeric.c (flo_round): substitute machine dependent magic number.
- * gc.c (obj_free): support RUBY_TYPED_FREE_IMMEDIATELY.
+Wed Nov 30 02:28:22 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-Tue Oct 29 16:49:03 2013 Koichi Sasada <ko1@atdot.net>
+ * numeric.c (int_round): Integer#round always returns an Integer [Bug
+ #5271]
- * gc.c (vm_malloc_increase): decrease it more carefully.
+Fri Nov 4 01:56:30 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue Oct 29 16:24:52 2013 Koichi Sasada <ko1@atdot.net>
+ * io.c (make_writeconv): unversal_newline converter is for reading.
+ so, if the io is text mode and has ECONV_UNIVERSAL_NEWLINE_DECORATOR
+ flag, use crlf_newline converter for writing.
+ this change fixes the problem about the luck of CR up Kernel.p and
+ Kernel.puts to stdout/stderr on Windows.
- * gc.c (heap_page_resurrect): return a page in tomb heap even if
- freelist is NULL.
+Mon Nov 7 23:39:23 2011 Tajima Akio <artonx@yahoo.co.jp>
-Tue Oct 29 15:46:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (io_fflush): remove fsync().
+ * io.c (rb_io_flush, rb_io_rewind): fsync() here.
+ These pathces are backports of trunk r33651 for [Bug #5585]
- * ruby_atomic.h (ATOMIC_SIZE_CAS): new macro, compare and swap size_t.
+Mon Oct 10 22:33:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Oct 29 12:08:05 2013 Tanaka Akira <akr@fsij.org>
+ * test/-ext-/old_thread_select/test_old_thread_select.rb:
+ select() with timeout may return early in old Linux kernels
+ with 250 Hz tickrate and no dynticks, so skip everything older
+ than 2.6.32 (which has long term support).
+ And, Make the timing assertions consistently use assert_operator with
+ timing difference in error message
+ Patch by Eric Wong. [Bug #5335] [ruby-core:39618]
- * ext/readline/readline.c (readline_getc): Consider
- NULL as input.
+Tue Oct 4 16:17:50 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Oct 29 11:10:08 2013 Aman Gupta <ruby@tmm1.net>
+ * lib/time.rb (Time.strptime): use Time.at if d[:seconds] is set.
+ Reported by Christopher Eberz. [ruby-core:39903] Bug #5399
- * 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 4 11:44:10 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Oct 29 09:53:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * gc.c (rb_gc_set_params): ruby_verbose can be Qnil, so use RTEST.
- * 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.
+Mon Oct 3 23:56:39 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * 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
+ * gc.c (rb_gc_set_params): output GC parameter change messages only
+ if -w/-v options are specified. these messages are output to stderr,
+ not to stdout. [ruby-core:39795] [Bug #5380]
- * class.c, include/ruby/intern.h, variable.c, vm_method.c: add
- rb_clear_constant_cache
+ * test/ruby/test_gc.rb (test_gc_parameter): add test for it.
- * compile.c, vm_core.h, vm_insnhelper.c: rename vmstat field in
- rb_call_info_struct to method_state
+Wed Sep 28 09:14:16 2011 Nobuyoshi Nakada <>
- * vm_method.c: rename vmstat field in struct cache_entry to method_state
+ * configure.in (pthread_np.h): needs pthread.h to be included
+ previously on OpenBSD. a patch by George Koehler <xkernigh AT
+ netscape.net> at [ruby-core:39752]. [Bug #5376]
-Mon Oct 28 23:26:04 2013 Tanaka Akira <akr@fsij.org>
+Tue Sep 13 15:02:48 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/readline/test_readline.rb (teardown): Clear Readline.input and
- Readline.output.
+ * lib/pstore.rb (PStore): always open in binary mode even if
+ default encodings are set. [Bug #5311] [ruby-core:39503]
-Mon Oct 28 21:35:31 2013 Tanaka Akira <akr@fsij.org>
+Sat Oct 8 07:31:42 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/-test-/file/depend, ext/-test-/postponed_job/depend,
- ext/-test-/tracepoint/depend: New files for dependencies.
+ * array.c (ary_join_1): should not copy the encoding of non-string
+ element after string element. [ruby-core:39776] [Bug #5379]
-Mon Oct 28 15:32:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Oct 8 06:51:46 2011 Eric Hodel <drbrain@segment7.net>
- * ext/openssl/depend (ossl.o): work around of dependency of
- thread_native.h, which depends on headers by THREAD_MODEL.
- [ruby-dev:47777]
+ * lib/rubygems: Update to RubyGems 1.8.11. Move Deprecate into the
+ Gem namespace.
- * ext/openssl/extconf.rb: need THREAD_MODEL.
+Sat Oct 8 06:37:08 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Mon Oct 28 14:57:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * gc.c (rb_gc_set_params): output GC parameter change messages only
+ if -w/-v options are specified. these messages are output to stderr,
+ not to stdout. [ruby-core:39795] [Bug #5380]
- * load.c (ruby_init_ext): share feature names between frame name and
- provided features.
+ * test/ruby/test_gc.rb (test_gc_parameter): add test for it.
-Mon Oct 28 14:41:27 2013 Akinori MUSHA <knu@iDaemons.org>
+Sat Oct 8 06:26:24 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * misc/ruby-electric.el: Import ruby-electric.el 2.1 from
- https://github.com/knu/ruby-electric.el.
+ * gc.c (add_heap_slots, init_heap): reset heaps_inc zero when
+ heap slots are expanded by environment variable RUBY_HEAP_MIN_SLOTS.
+ [ruby-core:39777] [Bug #5380]
- * Hitting the newline-and-indent key within a comment fires
- comment-indent-new-line.
+ * test/ruby/test_gc.rb (test_gc_parameter): add test for it.
- * Introduce a new feature
- `ruby-electric-autoindent-on-closing-char`.
+ * test/ruby/envutil.rb (assert_normal_exit): add :child_env option to
+ enable pass environemnt variables to child process.
- * Fix fallback behavior of ruby-electric-space/return that
- caused error with auto-complete.
+Sat Oct 8 05:45:28 2011 Eric Hodel <drbrain@segment7.net>
-Mon Oct 28 13:17:17 2013 Or Cohen <orc@fewbytes.com>
+ * proc.c (proc_call): Update documentation to match argument handling
+ of proc/Proc.new/lambda/->()
- * error.c (name_err_to_s): remove no longer needed overriding, since
- r30455 which made exc_to_s almost same. Fixes [GH-413].
+Sat Oct 8 05:38:29 2011 Eric Hodel <drbrain@segment7.net>
-Mon Oct 28 12:42:11 2013 Tanaka Akira <akr@fsij.org>
+ * proc.c (proc_call): Fix documentation of Proc#call vs Proc#===.
+ [Ruby 1.9 - Bug #5349]
- * common.mk, ext/objspace/depend, ext/coverage/depend,
- ext/-test-/debug/depend, ext/date/depend: Update dependencies.
+Tue Sep 27 13:05:39 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Mon Oct 28 09:29:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * ext/openssl/ossl_asn1.c: fix int_ossl_asn1_decode0_cons when being
+ fed arbitrary string values.
+ Clearly distinguish between the cases "universal, infinite and
+ not a SEQUENCE or SET" and "universal SEQUENCE or SET, possibly
+ infinite". Raise error for universal tags that are not infinite.
+ * test/openssl/test_asn1.rb: add a test for this.
- * vm.c: vm_clear_all_cache is not necessary now we use a 64 bit counter
- for global state version.
+ Thanks to Hiroshi Yoshida for reporting this bug.
+ [Bug #5363] [ruby-dev:44542]
- * vm_insnhelper.h: ruby_vm_global_state_version overflow is unnecessary
+Sat Sep 17 23:34:10 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Oct 28 07:47:32 2013 Aman Gupta <ruby@tmm1.net>
+ * parse.y (parser_data_type): inherit the core type in ripper so
+ that checks in core would work. [ruby-core:39591] [Bug #5331]
- * vm_backtrace.c (rb_profile_frame_classpath): do not use rb_inspect
- directly, since it might have a custom implementation or show ivars.
+Fri Sep 23 14:15:01 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Mon Oct 28 04:10:41 2013 Aman Gupta <ruby@tmm1.net>
+ * ext/openssl/ossl_asn1.c
+ ext/openssl/ossl_pkey.c: Remove unused variables.
- * 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.
+Fri Sep 23 06:54:44 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Mon Oct 28 00:52:36 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * backport r33315 from trunk.
- * struct.c (new_struct): fix warning message, class name and encoding.
+ * test/openssl/test_ssl_session.rb: execute test_session_exts_read
+ only for OpenSSL versions >= 0.9.8k. Thanks, Eric Wong, for
+ reporting this.
+ [Bug #4961] [ruby-core:37726]
-Sun Oct 27 20:53:08 2013 Tanaka Akira <akr@fsij.org>
+Fri Sep 23 12:18:52 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * 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.
+ * backport r33311 from trunk.
- [ruby-dev:47033] [Bug #8749] reported by Nobuhiro IMAI.
- [ruby-core:57951] [Bug #9040] reported by Eamonn Webster.
+ * test/openssl/test_ssl_session.rb: ensure server calls callbacks in
+ test_ctx_server_session_cb. Thanks to Eric Wong for the patch.
+ [Bug #5336] [ruby-core:39619]
-Sat Oct 26 19:31:28 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Thu Sep 22 19:45:22 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * gc.c: catch up recent changes to compile on GC_DEBUG,
- RGENGC_CHECK_MODE.
+ * thread_pthread.c (ubf_select): activate timer thread when interrupt
+ blocking thread.
+ A patch created by Koichi Sasada. [ruby-core:39634] [Bug #5343]
+ to cover race condition, timer thread periodically send SIGVTARLM to
+ threads in signal thread list. so you should activate timer thread
+ when interrupt a thread.
-Sat Oct 26 19:08:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Sep 21 16:57:03 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * range.c (range_initialize_copy): disallow to modify after
- initialized.
+ * test/io/wait/test_io_wait.rb (TestIOWait#setup): of course, the
+ behavior of mingw is just same with mswin.
-Sat Oct 26 17:48:54 2013 Tanaka Akira <akr@fsij.org>
+Sat Sep 17 22:21:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/open-uri.rb (meta_add_field): : Re-implemented.
- [ruby-core:58017] [Bug #9051] patch by Eamonn Webster.
+ * vm.c (rb_vm_make_env_object, rb_vm_get_sourceline): export as a
+ workaround for ruby-debug19 for the time being.
+ [ruby-core:38972] [Bug #5193]
-Sat Oct 26 14:35:09 2013 Koichi Sasada <ko1@atdot.net>
+Fri Sep 16 01:08:19 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * gc.c (gc_profile_dump_on): use "Page" terminology.
+ * NEWS: cosmetic changes.
-Sat Oct 26 13:25:45 2013 Koichi Sasada <ko1@atdot.net>
+Wed Sep 14 12:39:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * gc.c (gc_sweep, gc_heap_lazy_sweep): fix measurement code.
- We only need one sweep time measurement without lazy sweep.
+ * configure.in: do not use gcc-4.2 as the default compiler.
-Sat Oct 26 11:59:13 2013 Tanaka Akira <akr@fsij.org>
+ * NEWS: describe the issue about Xcode.
- * 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).
+Wed Sep 14 11:46:30 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sat Oct 26 11:35:22 2013 Koichi Sasada <ko1@atdot.net>
+ * thread.c (rb_fd_rcopy): added an argument guard.
+ Patch by NAKAMURA Usaku. [Bug #5306] [ruby-core:39435]
- * gc.c: tuning parameters.
+Tue Sep 13 09:28:58 2011 Koichi Sasada <ko1@atdot.net>
- * gc.c (GC_MALLOC_LIMIT): change default value to 16MB.
+ * NEWS: wrote about rb_reserved_fd_p() and objspace.
- * gc.c (GC_MALLOC_LIMIT_GROWTH_FACTOR): change default value to 2.0.
+Mon Sep 12 20:47:52 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (gc_before_sweep): change decrease ratio of `malloc_limit'
- from 1/4 to 1/10.
+ * thread.c (rb_thread_select): fix a typo to initialize efds
+ properly. [Bug #5299] [ruby-core:39380]
-Sat Oct 26 11:30:07 2013 Koichi Sasada <ko1@atdot.net>
+Mon Sep 12 20:41:20 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * thread.c (rb_thread_select): fix to ignore an argument
+ modification of rb_thread_fd_select().
+ based on a patch by Eric Wong. [Bug #5306] [ruby-core:39435]
+ * thread.c (rb_fd_rcopy): New. for reverse fd copy.
-Sat Oct 26 06:35:41 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * test/-ext-/old_thread_select/test_old_thread_select.rb
+ (test_old_select_false_positive): test for bug5306.
- * gc.c (gc_before_heap_sweep): Restructure code to mean clearly.
- heap->freelist is connected to end of list.
+ * ext/-test-/old_thread_select/old_thread_select.c (fdset2array):
+ New. convert fdsets to array.
+ * ext/-test-/old_thread_select/old_thread_select.c (old_thread_select):
+ return 'read', 'write', 'except' argument of rb_thread_select()
+ to ruby script.
-Sat Oct 26 04:01:35 2013 Koichi Sasada <ko1@atdot.net>
+Tue Sep 6 13:15:44 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * encoding.c (load_encoding): predefined encoding names are safe.
+ [ruby-dev:44469] [Bug #5279]
-Thu Oct 24 21:57:24 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * transcode.c (load_transcoder_entry): ditto.
- * parse.y: Remove +(binary) and -(binary) special cases
- [Feature #9048]
+Fri Sep 9 16:02:04 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Oct 24 12:45:53 2013 Zachary Scott <e@zzak.io>
+ * insns.def (concatstrings): don't use initial ASCII-8BIT string.
+ [ruby-core:38635] [Bug #5126]
- * object.c: [DOC] Document first argument also takes string for:
+Thu Sep 8 21:17:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
- rb_mod_const_get, rb_mod_const_set, rb_mod_const_defined
+ * ext/nkf/nkf-utf8/nkf.c: import nkf 2.1.2 (be9c280)
+ Bump version number/release date only.
- Also added note about NameError exception for invalid constant name
+Wed Sep 7 23:42:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Oct 24 12:23:58 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * io.c (argf_next_argv): open in default text mode.
+ [ruby-core:39234] [Bug #5268]
- * thread.c (rb_thread_terminate_all): add a comment why we need
- state check and call terminate_i again.
+Mon Sep 5 15:06:55 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Oct 24 12:15:02 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * test/rubygems/test_gem_security.rb
+ (test_class_build_self_signed_cert): reset opt[:trust_dir] to apply
+ temporary Gem.user_home.
- * thread.c (rb_thread_terminate_all): add a comment why infinite
- sleep is safe.
+Sun Sep 4 00:56:58 2011 Kazuki Tsujimoto <kazuki@callcc.net>
-Thu Oct 24 07:41:42 2013 Aman Gupta <ruby@tmm1.net>
+ * backport r33177 from trunk.
- * 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.
+ * test/ruby/test_fiber.rb (TestFiber#test_no_valid_cfp):
+ add a test. Unlike TestThread#test_no_valid_cfp,
+ this test succeeds even if win32ole is required (see r33153).
-Thu Oct 24 01:34:12 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Sep 2 21:11:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * include/ruby/win32.h (rb_infinity_float): suppress overflow in
- constant arithmetic warnings. [ruby-core:57981] [Bug #9044]
+ * io.c (validate_enc_binmode, prep_stdio): default to text mode on
+ dosish platforms. [ruby-core:38822] [Bug #5164]
-Thu Oct 24 00:11:24 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * transcode.c (rb_econv_prepare_options): keep default ecflags
+ unchanged if no options.
- * 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]
+Fri Sep 2 14:36:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ostruct/test_ostruct.rb: Added tests for above.
+ * vm_insnhelper.c (vm_search_const_defined_class): search
+ ancestors only when global scope. [ruby-core:39227] [Bug #5264]
-Thu Oct 24 00:10:22 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+Fri Sep 2 09:58:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * array.c: Add Array#to_h [Feature #7292]
+ * parse.y (parser_tokadd_string, parser_yylex): ignore a backslash
+ which prefixes an non-ascii character, which has no escape
+ syntax. [ruby-core:39222] [Ruby 1.9 - Bug #5262]
- * enum.c: Add Enumerable#to_h
+Thu Sep 1 17:31:22 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Oct 23 23:48:28 2013 Aman Gupta <ruby@tmm1.net>
+ * insns.def (defineclass), vm_insnhelper.c (vm_get_cvar_base): see
+ also inherited constants for classes without superclass and
+ modules. [ruby-core:37698] [Bug #3423]
- * 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--
+Thu Sep 1 14:11:16 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Oct 23 22:51:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_thread.rb (TestThread#test_no_valid_cfp): skip when
+ win32ole is required. in such case, win32ole redefines
+ Thread#initialize, and the block argument becomes to be not the top
+ of the thread, then this testcase always fails.
- * win32/Makefile.sub (config.h): VC 2013 supports C99 mathematics
- functions. [ruby-core:57981] [Bug #9044]
+Wed Aug 31 16:02:45 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Oct 23 19:13:18 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/json: Merge json gem v1.5.4 (3dab4c5a6a97fac03dac).
- * gc.c: move increment from heap to heap_pages.
- Share `increment' information with heaps.
+Wed Aug 31 13:19:31 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * gc.c: change ratio of heap_pages_free_min_page
- to 0.80.
- This change means slow down page freeing speed.
+ * numeric.c (flo_round): Avoid overflow by optimizing for trivial
+ cases
+ [Bug #5227]
-Wed Oct 23 17:52:03 2013 Koichi Sasada <ko1@atdot.net>
+Wed Aug 31 06:45:32 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * gc.c (heap_pages_free_unused_pages): cast to (int) for size_t
- variable `i'.
+ * configure.in: fix r32835. $withval can't be used outer AC_ARG_WITH().
-Wed Oct 23 17:39:35 2013 Koichi Sasada <ko1@atdot.net>
+Wed Aug 31 05:29:03 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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.
+ * win32/win32.c (rb_w32_select_with_thread): and my typo. we all must
+ be more careful.
- 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)
+Wed Aug 31 05:28:45 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- To introduce this patch, there are several tuning of GC parameters.
+ * thread.c (rb_thread_select): critical typo in r33117.
-Wed Oct 23 14:20:56 2013 Koichi Sasada <ko1@atdot.net>
+Wed Aug 31 05:28:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * gc.c (gc_prof_sweep_timer_stop): catch up recent changes
- to compile on GC_PROFILE_MORE_DETAIL=1.
+ * test/-ext-/old_thread_select/test_old_thread_select.rb
+ (TestOldThreadSelect#test_old_select_read_timeout): if the machine
+ is fast enough, the time used by code around IO.select may be smaller
+ than Time implement threshold.
-Wed Oct 23 11:43:27 2013 Zachary Scott <e@zzak.io>
+Wed Aug 31 05:27:59 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * file.c: [DOC] fix rdoc format of File#expand_path from r43386
+ * ext/-test-/old_thread_select/old_thread_select.c (old_thread_select):
+ typo.
-Tue Oct 22 21:58:28 2013 URABE Shyouhei <shyouhei@ruby-lang.org>
+ * test/-ext-/old_thread_select/test_old_thread_select.rb
+ (TestOldThreadSelect#test_old_select_signal_safe): use SIGINT instead
+ of SIGUSR1 because the former is general and the latter is platform
+ dependent.
- * vm_core.h (enum): avoid syntax error.
+Wed Aug 31 05:26:30 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * method.h: ditto.
+ * win32/win32.c, include/ruby/intern.h (rb_w32_fd_copy): implement
+ for rb_thread_select() in thread.c. the use of rb_fd_copy() is
+ introduced in r33117.
+ [Bug #5229] [ruby-core:39102]
- * internal.h: ditto.
+ * thread.c (rb_thread_select): must call rb_fd_init() before using
+ rb_fdset_t. see the implementations of rb_fd_init()s if you want to
+ know the reason.
-Tue Oct 22 19:53:16 2013 Koichi Sasada <ko1@atdot.net>
+Tue Aug 30 11:25:21 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * gc.c (Init_heap): move logics from heap_pages_init() and remove
- heap_pages_init().
+ * ext/json: Merge json gem 1.5.4+ (2149f4185c598fb97db1).
+ [Bug #5173] [ruby-core:38866]
-Tue Oct 22 19:19:05 2013 Koichi Sasada <ko1@atdot.net>
+Tue Aug 30 09:53:59 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * cont.c (fiber_entry): fix stack allocation failure on Debian
+ GNU/kFreeBSD.
+ Patch by Lucas Nussbaum <lucas at lucas-nussbaum dot net>.
+ [Bug #5241] [ruby-core:39147]
- * 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.
+Tue Aug 30 09:52:29 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- 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.
+ * backport r33117 from trunk.
- Now, there is only one heap called `eden', which is a space for all
- new generated objects.
+ * thread.c (rb_thread_select): rewrite by using
+ rb_thread_fd_select(). old one is EINTR unsafe.
+ Patch by Eric Wong. [Bug #5229] [ruby-core:39102]
-Tue Oct 22 18:26:12 2013 Tanaka Akira <akr@fsij.org>
+ * test/-ext-/old_thread_select/test_old_thread_select.rb:
+ a testcase for rb_thread_select().
+ * ext/-test-/old_thread_select/old_thread_select.c: ditto.
+ * ext/-test-/old_thread_select/depend: ditto.
+ * ext/-test-/old_thread_select/extconf.rb: ditto.
- * 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 Aug 30 09:16:17 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Oct 22 16:57:48 2013 Benoit Daloze <eregontp@gmail.com>
+ * configure.in: fix a build failure on GNU Hurd.
+ Patch by Samuel Thibault <sthibault at debian dot org>. Thank you!
+ [Bug #5250] [ruby-core:39185]
- * file.c (File#expand_path): [DOC] improve documentation of File#expand_path.
- Based on patch by Prathamesh Sonpatki. [ruby-core:57734] [Bug #9002]
+Sun Aug 28 15:38:17 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Tue Oct 22 15:59:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * backport r33106 from trunk.
- * dir.c (glob_helper): don't skip current directories if FNM_DOTMATCH
- is given. [ruby-core:53108] [Bug #8006]
+ * ext/date/date_parse.c (date_zone_to_diff): keep a temporary string
+ stored in variable while the contents buffer is beeing used.
-Tue Oct 22 14:53:11 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/date/date_parse.c (date_zone_to_diff): get rid of out of bounds
+ memory read. [ruby-dev:44409] [Bug #5213]
- * 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.
+Sun Aug 28 05:29:50 2011 Ryan Davis <ryand-ruby@zenspider.com>
- * 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.
+ * backport r33102 from trunk.
- * vm_trace.c (rb_postponed_job_register_one): check interrupt
- carefully.
+ * lib/minitest/*: Imported minitest 2.5.1 (r6596)
+ * test/minitest/*: ditto
- * vm_trace.c (rb_postponed_job_register_one): use additional space
- to avoid buffer full.
+Sat Aug 27 20:54:54 2011 Kazuki Tsujimoto <kazuki@callcc.net>
- * gc.c (gc_finalize_deferred_register): check failure.
+ * backport r33099 from trunk.
- * thread.c (rb_threadptr_execute_interrupts): check
- `postponed_job_interrupt' immediately. There is a possibility
- to miss this flag.
+ * vm.c (rb_vm_rewrite_dfp_in_errinfo): change return type
+ to suppress a warning.
-Tue Oct 22 12:11:16 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * vm_core.h: ditto.
- * configure.in: check if the given CFLAGS and LDFLAGS are working, and
- bail out early if not.
+Sat Aug 27 19:03:44 2011 Kazuki Tsujimoto <kazuki@callcc.net>
-Tue Oct 22 00:06:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * backport r33096 from trunk.
- * file.c (rb_file_exists_p): warn deprecated name. [Bug #9041]
+ * proc.c (proc_new): force to rewrite errinfo when calling Proc.new in ensure.
+ [Bug #5234] [ruby-core:39125]
-Mon Oct 21 23:57:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * vm.c (rb_vm_rewrite_dfp_in_errinfo): new function.
- * encoding.c (load_encoding): should preserve outer errinfo, so that
- expected exception may not be lost. [ruby-core:57949] [Bug #9038]
+ * vm.c (vm_make_env_each): changed accordingly.
-Sun Oct 20 15:41:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * vm_core.h: ditto.
- * 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]
+ * bootstraptest/test_flow.rb: add tests for above.
-Sun Oct 20 15:29:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Aug 27 08:59:12 2011 Eric Hodel <drbrain@segment7.net>
- * error.c (rb_syserr_fail_path_in): new function split from
- rb_sys_fail_path_in to raise SystemCallError without errno.
+ * NEWS: Update version of rake to 0.9.2.2.
- * internal.h (rb_syserr_fail_path): like rb_sys_fail_path but without
- errno.
+Sat Aug 27 08:44:58 2011 Eric Hodel <drbrain@segment7.net>
-Sun Oct 20 13:58:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * backport r33087 from trunk
- * include/ruby/ruby.h (rb_obj_wb_unprotect, rb_obj_written),
- (rb_obj_write): suppress unused-parameter warnings.
+ * lib/rdoc: Import RDoc 3.9.4. Typo and grammar fixes by Luke Gruber.
+ [Ruby 1.9 - Bug #5203]
-Sun Oct 20 10:32:48 2013 Eric Hodel <drbrain@segment7.net>
+Sat Aug 27 07:53:34 2011 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.
+ * backport r33087 from trunk.
-Sun Oct 20 09:30:56 2013 Eric Hodel <drbrain@segment7.net>
+ * lib/open-uri.rb: Fix indentation of OpenURI::OpenRead#open. Use ++
+ instead of `' for method arguments in open-uri.rb
- * lib/rubygems: Update to RubyGems master 3de7e0f. Changes:
+Sat Aug 27 07:22:07 2011 Eric Hodel <drbrain@segment7.net>
- Only attempt to build extensions for newly-installed gems. This
- prevents compilation attempts at gem activation time for gems that
- already have extensions built.
+ * backport r33086 from trunk.
- Fix crash in the dependency resolver for dependencies that cannot be
- resolved.
+ * ext/pathname/lib/pathname.rb: Fix typos and grammar mistakes. Patch
+ by Luke Gruber. [#5203]
+ * ext/pty/lib/expect.rb: ditto
+ * lib/mathn.rb: ditto
+ * lib/net/http.rb: ditto
+ * lib/open-uri.rb: ditto
+ * lib/ostruct.rb: ditto
+ * lib/tempfile.rb: ditto
+ * lib/thread.rb: ditto
+ * lib/weakref.rb: ditto
+ * sample/webrick/httpproxy.rb: ditto
- * test/rubygems: ditto.
+Fri Aug 26 10:10:37 2011 Eric Hodel <drbrain@segment7.net>
-Sun Oct 20 05:24:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * backport r33074 from trunk.
- * variable.c (rb_class2name): should return real class name, not
- singleton class or iclass.
+ * lib/rubygems: Update to RubyGems 1.8.10. Fixes security issue in
+ creating ruby-format gemspecs. Fixes Gem.dir not being at the front
+ of Gem.path to fix uninstall and cleanup commands. Fixes gem
+ uninstall stopping on the first missing gem.
-Sun Oct 20 04:18:48 2013 Aman Gupta <ruby@tmm1.net>
+Wed Aug 24 09:49:10 2011 Koichi Sasada <ko1@atdot.net>
- * variable.c (rb_class2name): call rb_tmp_class_path() directly to
- avoid extra rb_str_dup() from rb_class_name().
+ * backport r33045 from trunk.
-Sat Oct 19 19:59:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * insns.def (defined): fix to checking class variable.
+ A patch by Magnus Holm <judofyr@gmail.com>. Thanks!
- * win32/file.c (code_page): use simple array instead of st_table.
+Fri Aug 26 08:21:10 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * encoding.c (rb_locale_encindex): defer initialization of win32 code
- page table until encoding db loaded.
+ * test/ruby/test_variable.rb: add a test for above.
-Sat Oct 19 08:25:05 2013 Koichi Sasada <ko1@atdot.net>
+Thu Aug 25 09:43:16 2011 Eric Hodel <drbrain@segment7.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.
+ * backport r33066 from trunk.
-Sat Oct 19 07:14:40 2013 Eric Hodel <drbrain@segment7.net>
+ * ext/openssl/lib/openssl/bn.rb: Hide copyright info from RDoc.
+ * ext/openssl/lib/openssl/digest.rb: ditto
+ * ext/openssl/lib/openssl/cipher.rb: ditto
- * lib/rubygems: Update to RubyGems master 42543b6. Changes:
+Thu Aug 25 09:25:48 2011 Eric Hodel <drbrain@segment7.net>
- Fix `gem update` for gems with multiple platforms.
+ * backport r33065 from trunk.
- * test/rubygems: ditto.
+ * ext/openssl/ossl_digest.c: Document OpenSSL::Digest::digest and add
+ an example to OpenSSL::Digest. Patch by Sylvain Daubert.
+ [Ruby 1.9 - Bug #5166]
+ * ext/openssl/lib/openssl/digest.rb (module OpenSSL): ditto
-Sat Oct 19 06:55:52 2013 Eric Hodel <drbrain@segment7.net>
+Thu Aug 25 08:19:43 2011 Koichi Sasada <ko1@atdot.net>
- * lib/rubygems: Update to RubyGems master 0a3814b. Changes:
+ * vm.c (vm_make_env_each): work around to solve Bug #2729.
+ fixes: Bug #2729
+ a patch from Kazuki Tsujimoto <kazuki@callcc.net>
+ This problem is caused by changing dfp (dynamic env pointer)
+ from saved dfp. Saved dfp is pointed env in VM stack. However,
+ the dfp can be moved because VM copies env from VM stack to
+ the heap. At this copying, dfp was also changed. To solve this
+ problem, I'll try to change throw mechanism (not save target dfp,
+ but save target cfp).
- Fixed extension directory in Gem::Specification#require_paths.
+ * bootstraptest/test_flow.rb: add a test for above.
- Allow installation of gems when $HOME is nonexistent or unwritable.
+Thu Aug 25 08:04:08 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- Use proper API in InstallCommand.
+ * numeric.c (int_round): Fix Integer#round [ruby-core:39096]
- Improve support for path option in gem dependency files.
+Thu Aug 25 06:51:08 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- Remove warnings.
+ * ext/psych/lib/psych.rb: Fixing psych version number.
- * test/rubygems: ditto.
+Thu Aug 25 06:11:35 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Fri Oct 18 15:23:34 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/psych/lib/psych/nodes/node.rb: default `to_yaml` encoding to be
+ UTF-8.
+ * test/psych/test_encoding.rb: test yaml dump encoding.
- * 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").
+Wed Aug 24 08:53:06 2011 Eric Hodel <drbrain@segment7.net>
- See https://bugs.ruby-lang.org/attachments/4008/data-heap_structure.png.
+ * backport r33043 from trunk.
-Fri Oct 18 09:40:43 2013 Eric Hodel <drbrain@segment7.net>
+ * lib/rdoc: Update to RDoc 3.9.3. Fixes RDoc with `ruby -Ku`. Allows
+ HTTPS image paths to be turned into <img> tags. Prevents special
+ markup inside <tt> from being processed.
- * lib/rubygems: Update to RubyGems master cee6788. Changes:
+Wed Aug 24 07:57:43 2011 Eric Hodel <drbrain@segment7.net>
- Fix test failure on vc10-x64 Server on rubyci.org due to attempting
- to File.chmod where it is not supported.
+ * backport r33040 from trunk.
- Continuing work on improved gem dependencies file (Gemfile) support.
+ * lib/rubygems: Update to RubyGems 1.8.9. Fixes uninstalling multiple
+ gems and gem cleanup.
- * test: ditto.
+Wed Aug 24 06:45:20 2011 Ryan Davis <ryand-ruby@zenspider.com>
-Fri Oct 18 06:02:49 2013 Eric Hodel <drbrain@segment7.net>
+ * backport r33036 from trunk.
- * lib/rubygems: Update to RubyGems master f738c67. Changes:
+ * lib/minitest/*: Imported minitest 2.5.0 (r6557)
+ * test/minitest/*: ditto
- Fixed test bug for ruby with ENABLE_SHARED = no
+Tue Aug 23 15:23:56 2011 Eric Hodel <drbrain@segment7.net>
- * test/rubygems: ditto.
+ * backport r33027 from trunk.
-Fri Oct 18 00:57:07 2013 Tanaka Akira <akr@fsij.org>
+ * load.c (rb_f_require): Improve documentation of Kernel#require.
+ [Ruby 1.9 - Bug #5210]
- * 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.
+Tue Aug 23 15:11:48 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Thu Oct 17 18:50:08 2013 Koichi Sasada <ko1@atdot.net>
+ * backport r33023 from trunk.
- * 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.
+ * ext/zlib/zlib.c (gzfile_read_header): Ensure that each section of
+ gzip header is readable to avoid SEGV.
-Thu Oct 17 18:45:41 2013 Koichi Sasada <ko1@atdot.net>
+ * test/zlib/test_zlib.rb (test_corrupted_header): Test it.
- * string.c (STR_HEAP_SIZE): includes TERM_LEN(str).
+Mon Aug 22 23:43:33 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * string.c (rb_str_memsize): use STR_HEAP_SIZE().
+ * backport r33021 from trunk.
-Thu Oct 17 17:43:00 2013 Shugo Maeda <shugo@ruby-lang.org>
+ * sprintf.c (rb_str_format): add RB_GC_GUARD to prevent temporary
+ strings from GC.
- * vm_insnhelper.c (vm_call_method): set ci->me to 0 when the
- original method of a refined method is undef to avoid SEGV.
+Sun Aug 21 17:58:38 2011 Kazuki Tsujimoto <kazuki@callcc.net>
- * vm_method.c (rb_method_entry_without_refinements): return 0 when
- the original method of a refined method is undef to avoid SEGV.
+ * backport r33019 from trunk.
- * test/ruby/test_refinement.rb: related test.
+ * iseq.c (iseq_s_disasm): remove variable which is no longer used
+ since r33013.
-Thu Oct 17 17:38:36 2013 Koichi Sasada <ko1@atdot.net>
+Sun Aug 21 14:20:58 2011 Naohisa Goto <ngotogenome@gmail.com>
- * gc.c, internal.h: rename ruby_xsizefree/realloc to
- rb_sized_free/realloc.
+ * configure.in: use LD_LIBRARY_PATH_64 on 64-bit Solaris.
- * array.c: catch up these changes.
+Sun Aug 21 11:13:54 2011 Naohisa Goto <ngotogenome@gmail.com>
- * string.c: ditto.
+ * backport r32895 from trunk.
-Thu Oct 17 17:32:51 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/fiddle/conversions.c (generic_to_value): ffi_arg and ffi_sarg
+ should be used to handle shorter return value. fix [Bug #3861]
+ [ruby-core:32504]
- * array.c, string.c: use ruby_xsizedfree() and ruby_xsizedrealloc().
+ * ext/fiddle/closure.c (callback): ditto
- * internal.h (SIZED_REALLOC_N): define a macro as REALLOC_N().
+ * ext/fiddle/conversions.h (fiddle_generic): ditto
-Thu Oct 17 17:11:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/fiddle/conversions.c (value_to_generic): char, short and int
+ are strictly distinguished on big-endian CPU, e.g. sparc64.
- * win32/win32.c (console_emulator_p): check by comparison between
- module handle of WriteConsoleW and kernel32.dll.
+Sat Aug 20 13:28:32 2011 Kazuki Tsujimoto <kazuki@callcc.net>
- * configure.in, win32/Makefile.sub, win32/setup.mak: no longer need
- psapi.lib.
+ * backport r33013 from trunk.
-Thu Oct 17 16:53:30 2013 Koichi Sasada <ko1@atdot.net>
+ * iseq.c (iseq_s_disasm): fix a bug that may cause SEGV.
- * 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]
+ * test/ruby/test_method.rb (test_body): add a test for the above change.
-Thu Oct 17 14:21:34 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Aug 20 10:43:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * win32/file.c (rb_file_expand_path_internal): fix memory leaks at
- a non-absolute home exception.
+ * ext/stringio/stringio.c (strio_read): return new string if nil
+ is explicitly given as a buffer ([Bug #5207]), otherwise set the
+ encoding. also removed dead code.
-Thu Oct 17 14:06:39 2013 Koichi Sasada <ko1@atdot.net>
+Fri Aug 19 14:25:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * process.c (proc_spawn_v, proc_spawn): should not wait the
+ spawned process.
-Thu Oct 17 12:30:16 2013 Tanaka Akira <akr@fsij.org>
+ * process.c (proc_spawn_v): fix missing argument, and try with
+ /bin/sh only if failed with ENOEXEC.
- * lib/tsort.rb (TSort.each_strongly_connected_component_from):
- Extracted from TSort#each_strongly_connected_component_from.
+Fri Aug 19 14:12:57 2011 Shugo Maeda <shugo@ruby-lang.org>
-Thu Oct 17 11:07:06 2013 Eric Hodel <drbrain@segment7.net>
+ * backport r33007 from trunk.
- * lib/rubygems: Update to RubyGems master 941c21a. Changes:
+ * lib/net/imap.rb (idle): raises a Net::IMAP::Error when the
+ connection is closed. based on the patch by Hugo Barauna.
+ [Bug #5190] [ruby-core:38930]
- Restored method bundler wants to remove for compatibility.
+Fri Aug 19 11:28:58 2011 Shugo Maeda <shugo@ruby-lang.org>
- Improvements to Gemfile compatibility.
+ * backport r33001 from trunk.
- * test/rubygems: ditto.
+ * lib/net/imap.rb (msg_att): accepts extra space before ')'.
+ based on the patch by art lussos. [Bug #5163] [ruby-core:38820]
-Thu Oct 17 08:08:11 2013 Koichi Sasada <ko1@atdot.net>
+Wed Aug 17 15:27:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * ext/objspace/object_tracing.c (newobj_i): add workaround.
- some bugs hits this check.
+ * backport r32996 from trunk.
- * ext/objspace/object_tracing.c (object_allocations_reporter_i): cast as pointer.
+ * ext/bigdecimal/bigdecimal.c (cannot_be_coerced_into_BigDecimal):
+ add a new function for raising error when an object cannot coerce
+ into BigDecimal. [Bug #5172]
-Thu Oct 17 07:36:53 2013 Eric Hodel <drbrain@segment7.net>
+ * ext/bigdecimal/bigdecimal.c (BigDecimalValueWithPrec): use
+ cannot_be_coerced_into_BigDecimal function.
- * lib/rubygems: Update to RubyGems master 2abce58. Changes:
-
- Fixed documentation generation when sdoc and json are installed as
- gems.
+ * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): ditto.
- Added some missing documentation.
+ * ext/bigdecimal/bigdecimal.c (BigMath_s_log): ditto.
-Thu Oct 17 07:10:26 2013 Zachary Scott <e@zzak.io>
+ * test/bigdecimal/test_bigdecimal.rb: test for the avobe changes.
- * ext/curses/curses.c: [DOC] Cleaned up formatting consistency of rdoc
- comments for Curses, including period spacing and column width.
+ * test/bigdecimal/testbase.rb (under_gc_stress): add a new utility
+ method to run tests under the condition of GC.stress = true.
- This patch also fixed some typos. Thanks to @postmodern for the patch!
- [Fixes GH-420] https://github.com/ruby/ruby/pull/420
+Wed Aug 17 10:16:00 2011 Kenta Murata <mrkn@mrkn.jp>
-Thu Oct 17 06:58:42 2013 Zachary Scott <e@zzak.io>
+ * backport r32994 from trunk.
- * 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
+ * rational.c (nurat_coerce): Rational#coerce should converts itself
+ into Complex if the argument is a Complex with non-zero imaginary
+ part. [Bug #5020] [ruby-dev:44088]
-Thu Oct 17 05:52:31 2013 Zachary Scott <e@zzak.io>
+ * test/ruby/test_rational.rb (test_coerce): test for the above change.
- * 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
+Wed Aug 17 06:33:19 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Thu Oct 17 05:40:33 2013 Koichi Sasada <ko1@atdot.net>
+ * backport r32992 from trunk.
- * gc.c (objspace_each_objects): do not skip empty RVALUEs.
+ * ext/openssl/ossl_x509cert.c: Add class documentation for
+ OpenSSL::X509::Certificate.
-Thu Oct 17 05:31:31 2013 Koichi Sasada <ko1@atdot.net>
+Wed Aug 17 05:02:25 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * error.c (rb_bug_reporter_add): return simply 0 if failed.
- Please check return value.
+ * backport r32987 from trunk.
-Thu Oct 17 05:17:33 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_pkey.c: corrected docs, OpenSSL::PKey::DH does
+ *not* support #sign/verify.
- * 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.
+Tue Aug 16 18:56:54 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Oct 16 22:35:27 2013 Zachary Scott <e@zzak.io>
+ * vm.c (ruby_threadptr_data_type): rename to hide.
+ [ruby-core:38972]
- * ext/io/nonblock/nonblock.c: use rb_cIO instead of VALUE
+Tue Aug 16 18:52:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Oct 16 17:45:13 2013 Koichi Sasada <ko1@atdot.net>
+ * win32/mkexports.rb (Exports::Mswin#each_export): exclude Init_
+ and _threadptr_ functions, as well as mingw.
- * bootstraptest/runner.rb: check nil before calling `signal?'
- for a process status.
+Tue Aug 16 09:38:37 2011 Eric Hodel <drbrain@segment7.net>
-Wed Oct 16 17:37:17 2013 Koichi Sasada <ko1@atdot.net>
+ * backport r32981 and r32982 from trunk.
- * 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/dl: Add documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #5192]
- * ext/-test-/bug_reporter/bug_reporter.c: add a test for this C-API.
+ * ext/.document (fiddle): Remove duplicate entry
- * ext/-test-/bug_reporter/extconf.rb: ditto.
+ * ext/fiddle: Complete documentation of Fiddle. Patch by Vincent
+ Batts. [#5192]
- * test/-ext-/bug_reporter/test_bug_reporter.rb: ditto.
+Tue Aug 16 08:00:15 2011 Eric Hodel <drbrain@segment7.net>
-Wed Oct 16 15:14:21 2013 Koichi Sasada <ko1@atdot.net>
+ * backport r32977 from trunk
- * NEWS: add a line into NEWS for last commit.
+ * ext/socket: Make Socket documentation appear. Add documentation for
+ Socket, TCPServer, SOCKSSocket. Patch by Sylvain Daubert.
+ [Ruby 1.9 - Feature #5182]
-Wed Oct 16 15:09:14 2013 Koichi Sasada <ko1@atdot.net>
+Mon Aug 15 10:16:55 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
+ * backport r32973 from trunk.
- * 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.
+ * ext/openssl/ossl_ssl.c: Support disabling OpenSSL compression.
- * test/objspace/test_objspace.rb: add a test.
+ * test/openssl/test_ssl.rb: Add a test for it.
+ Thanks to Eric Wong for the patch.
+ [Ruby 1.9 - Feature #5183] [ruby-core:38911]
-Wed Oct 16 15:00:21 2013 Eric Hodel <drbrain@segment7.net>
+Sat Aug 13 22:17:27 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rubygems: Update to RubyGems master b955554. Changes:
+ * tool/mkconfig.rb: do not make the entries related to sitedir and
+ verdordir if disabled by --without options. [ruby-core:38922]
+ [Bug #5187]
- Fixed NameError for Gem::Ext due to re-entering file lookup in
- RubyGems' overridden require. Bug by Koichi Sasada.
+Sat Aug 13 17:06:57 2011 Tadayoshi Funaba <tadf@dotrb.org>
- Fixed possible circular require warning in tests.
+ * ext/date/date_core.c: [ruby-core:38861]
- Used existing constant for `gem install -g` dependency file list.
+Sat Aug 13 16:59:51 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * test/rubygems: ditto.
+ * test/date/test_*.rb: added tests.
-Wed Oct 16 09:42:42 2013 Eric Hodel <drbrain@segment7.net>
+Sat Aug 13 09:36:19 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * lib/rubygems: Update to RubyGems master 278d00d. Changes:
+ * ext/date/date_parse.c (parse_ddd_cb): fix r32896. RB_GC_GUARD
+ insertion position was mistaken. [ruby-dev:44337] [Bug #5152]
- Fixes building extensions without a "clean" make rule
+Sat Aug 13 09:26:24 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- Adds gem dependency file autodetection to "gem install -g"
+ * ext/psych/lib/psych/core_ext.rb: Make Kernel#y private.
+ [ruby-core:38913]
- * test/rubygems: Tests for the above.
+ * test/psych/test_yaml.rb: corresponding test.
-Wed Oct 16 09:12:23 2013 Eric Hodel <drbrain@segment7.net>
+Sat Aug 13 09:15:16 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * lib/rubygems: Update to RubyGems master commit 2a74263. This fixes
- several bugs in RubyGems 2.2.0.preview.1.
+ * ext/date/date_core.c (date_strftime_alloc): followed the change
+ of r32885.
- * test/rubygems: ditto.
+ * NEWS: followed the above change.
-Wed Oct 16 07:25:02 2013 Aman Gupta <ruby@tmm1.net>
+Sat Aug 13 08:49:05 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * gc.c (gc_mark_roots): rename roots to be categories
- instead of function names.
+ * ext/date/date_core.c: [ruby-core:38855].
-Tue Oct 15 19:18:13 2013 Koichi Sasada <ko1@atdot.net>
+Sat Aug 13 03:41:37 2011 Eric Hodel <drbrain@segment7.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.
+ * backport r32953 from trunk.
- * gc.c (gc_mark_roots): separate from gc_marks_body().
+ * lib/uri/common.rb: Fix documentation of URI::Parser.new. Patch by
+ Steve Klabnik. [Ruby 1.9 - Bug #5177]
-Tue Oct 15 17:47:59 2013 Tanaka Akira <akr@fsij.org>
+Sat Aug 13 02:19:57 2011 Eric Hodel <drbrain@segment7.net>
- * process.c: Fix a typo. MacOS X doesn't have ENOTSUPP.
+ * backport r32950 from trunk.
-Mon Oct 14 12:32:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/digest/digest.c: Add documentation for the Digest module. Patch
+ by Sylvain Daubert. [Ruby 1.9 - Bug #5167]
- * ruby.c (process_options): load statically linked extensions before
- rubygems, because of ext/thread.
+Fri Aug 5 13:32:43 2011 Shugo Maeda <shugo@ruby-lang.org>
- * ruby.c (process_options): use gem_prelude instead of requiring
- rubygems directly when --enable=gems is given.
+ * backport r32856 from trunk.
- * Makefile.in (DEFAULT_PRELUDES): always use gem_prelude regardless of
- --disable-rubygems.
+ * lib/xmlrpc/client.rb, lib/xmlrpc/server.rb: should use
+ String#bytesize instead of String#size.
-Mon Oct 14 11:07:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Aug 12 13:53:03 2011 Narihiro Nakamura <narihiro@netlab.jp>
- * 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.
+ * backport r32894 from trunk.
- * lib/mkmf.rb (create_makefile): ranlib on static library, not DLLIB.
+ * gc.c (gc_lazy_sweep): if sweep target slots are not found, we
+ try heap_increment() because it might be able to expand the
+ heap. [Bug #5127] [ruby-dev:44285]
-Sun Oct 13 23:53:40 2013 Andrew Grimm <andrew.j.grimm@gmail.com>
+ * gc.c (gc_clear_mark_on_sweep_slots): if a sweeping was
+ interrupted, we expand the heap if at all possible.
- * vsnprintf.c: Fix spelling from compliment to complement.
- Patch by @agrimm.
+Fri Aug 12 12:28:17 2011 Eric Hodel <drbrain@segment7.net>
- * include/ruby/ruby.h: ditto
+ * lib/rake: Update to Rake 0.9.2.2. Prevent pollution of toplevel
+ namespace by Commands. Remove unused variable and debugging
+ statement in tests.
-Sun Oct 13 20:59:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Aug 12 09:00:24 2011 Eric Hodel <drbrain@segment7.net>
- * vm.c (Init_BareVM): initialize defined_module_hash here,
- Init_top_self() is too late to register core classes/modules.
+ * backport r32941 from trunk
- * compile.c (compile_array_): no hash to merge if it is empty.
+ * lib/rubygems: Import RubyGems 1.8.8. Fixes encoding of YAML gemspec
+ from gems. Github Issue #149
- * vm.c (m_core_hash_merge_kwd): just check keys if only one argument
- is given, without merging.
+Fri Aug 12 03:24:35 2011 Eric Hodel <drbrain@segment7.net>
-Sat Oct 12 06:35:01 2013-10-11 Eric Hodel <drbrain@segment7.net>
+ * backport r32935 from trunk
- * lib/rake: Update to rake 10.1.0
- * bin/rake: ditto.
- * test/rake: ditto.
+ * lib/rdoc: Import RDoc 3.9.2. Fixes TIDYLINK for HTML output.
- * NEWS: Update NEWS to include rake 10.1.0 and links to release notes.
+Tue Aug 2 22:04:46 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Oct 12 03:26:04 2013 Koichi Sasada <ko1@atdot.net>
+ * backport r32815 from trunk.
- * class.c, variable.c, gc.c (rb_class_tbl): removed.
+ * gc.c (init_heap): allocate sigaltstack after heaps are allocated.
+ [ruby-dev:44315] [Bug #5139]
- * 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.
+ * vm.c (thread_free): use free because objspace is not ready.
- * gc.c (RGENGC_PRINT_TICK): disable (revert).
+ * vm.c (th_init): use malloc because objspace is not ready.
-Sat Oct 12 03:24:49 2013 Koichi Sasada <ko1@atdot.net>
+Thu Aug 11 19:04:38 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * vm_method.c (rb_gc_mark_unlinked_live_method_entries):
- revert last commit to introduce debug prints.
+ * backport r32931 from trunk.
-Fri Oct 11 21:05:19 2013 Koichi Sasada <ko1@atdot.net>
+ * variable.c (autoload_delete): An autoload entry is still in a
+ RCLASS_IV_TBL, not in a RCLASS_CONST_TBL, so take back the table
+ changed in r29600. And an autoload entry keeps not a
+ rb_const_entry_t but a NODE so remove rb_const_entry_t thing added
+ in r29602.
- * internal.h, parse.y: use `full_mark' instead of `full_marking'.
+Thu Aug 11 15:07:36 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Oct 11 20:58:16 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/mkmf.rb (link_command): use LIBRUBYARG in rbconfig for
+ unbundled extensions. [ruby-core:38802] [Bug #5147]
- * gc.c: use terminology `full_mark' instead of `minor_gc'
- in mark functions.
+ * lib/mkmf.rb (init_mkmf): revert r32902. [ruby-core:38903]
-Fri Oct 11 20:46:09 2013 Koichi Sasada <ko1@atdot.net>
+Wed Aug 10 19:30:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * gc.c: use __GNUC__ instead of __GCC__.
+ * backport r32903 from trunk.
-Fri Oct 11 20:35:59 2013 Koichi Sasada <ko1@atdot.net>
+ * complex.c (nucomp_rationalize): calls rationalize of real part if
+ imaginary part is exactly zero. The patch is made by Marc-Andre
+ Lafortune. fixes [Bug #5178] [ruby-core:38885]
- * 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.
+ * test/ruby/test_complex.rb (test_rationalize): add a test for the
+ above change.
- * internal.h: change prototype of rb_gc_mark_symbols().
+ * complex.c (nucomp_to_r): fix RDoc comment. The patch is made by
+ Marc-Andre Lafortune.
-Fri Oct 11 19:27:22 2013 Akinori MUSHA <knu@iDaemons.org>
+Wed Aug 10 14:11:07 2011 Nobuyoshi Nakada <nobu@ruby-lang.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.
+ * lib/mkmf.rb (init_mkmf): set $LIBRUBYARG regardless of shared
+ option. [ruby-core:38802] [Bug #5147]
- * ruby-forward-sexp is inappropriate here because it moves the
- cursor past the keyword.
+Wed Aug 10 02:57:01 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * Fix a reversed looking-back check in
- ruby-electric--block-beg-keyword-at-point-p.
+ * lib/net/http.rb: come back autoload. OpenSSL constant is used
+ some places, so it leads mistakes like HTTP.start.
- * Do not add end again if space or return is hit repeatedly
- after a block beginning keyword.
+Tue Aug 9 22:57:45 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Fri Oct 11 18:12:47 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/date/date_parse.c (date_zone_to_diff): add RB_GC_GUARD.
+ [ruby-dev:44337] [Bug #5152]
- * ext/objspace/gc_hook.c: prohibit reentrant.
+ * ext/date/data_parse.c (parse_ddd_cb): ditto.
-Fri Oct 11 18:11:34 2013 Koichi Sasada <ko1@atdot.net>
+Tue Aug 9 12:20:33 2011 Naohisa Goto <ngotogenome@gmail.com>
- * vm_trace.c (rb_postponed_job_flush): fix bit operation.
+ * test/fiddle/helper.rb (libc_so, libm_so): Solaris support added.
+ [ruby-core:38853] [Bug #5168]
-Fri Oct 11 17:33:24 2013 Akinori MUSHA <knu@iDaemons.org>
+ * test/dl/test_base.rb (libc_so, libm_so): on Solaris, remove libc
+ and libm version numbers for detecting default libc and libm.
- * 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.
+Tue Aug 9 10:49:52 2011 Igor Zubkov <igor.zubkov@gmail.com>
- * 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.
+ * array.c: Fix typo. https://github.com/ruby/ruby/pull/36
- * Add ruby-electric-mode-hook.
+Mon Aug 8 00:10:45 2011 Akinori MUSHA <knu@iDaemons.org>
- * Use a remap in binding ruby-electric-delete-backward-char.
+ * test/test_syslog.rb (TestSyslog#test_log): Do not be too
+ specific about the log line format. Fixes #5081.
- * 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
+Sun Aug 7 23:39:44 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * block-mid keywords (then, else, elsif, when, rescue and
- ensure) also become electric with automatic reindentation.
+ * time.c (rb_strftime_alloc): raise ERANGE if width is too large.
+ Patch by Nobuyoshi Nakada. [Bug #4457] [ruby-dev:43285]
- * Add standardized comments for ELPA integration.
+ * test/ruby/test_time.rb (class TestTime): add a test for the
+ above change.
- * Fix interaction with smartparens-mode by disabling its end
- keyword completion, since ruby-electric has become more clever
- at it.
+Sun Aug 7 14:15:10 2011 Kazuki Tsujimoto <kazuki@callcc.net>
- * The custom variable `ruby-electric-keywords` is changed to
- `ruby-electric-keywords-alist`, allowing user to fine-grained
- configuration.
+ * backport r32876 from trunk.
-Fri Oct 11 16:53:28 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/objspace/objspace.c: fix typos in a document.
- * vm_trace.c (rb_postponed_job_flush): simplify.
+Sun Aug 7 04:42:36 2011 Eric Hodel <drbrain@segment7.net>
-Fri Oct 11 03:36:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * marshal.c (w_object): Fix exception message when _dump_data
+ is not defined on a T_DATA object.
- * thread.c (rb_threadptr_execute_interrupts): flush postponed job only
- once at last.
+Sat Aug 6 06:14:20 2011 Eric Hodel <drbrain@segment7.net>
- * 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]
+ * lib/rdoc: Update to 3.9.1. Fixes === lines in verbatim sections.
+ Fixes :nodoc: on class aliases. Fixes :stopdoc: creating references
+ to Object. Fixes spacing when class comments are merged in ri.
+ Fixes `ri []` crash. Fixes bug report URL when rdoc crashes. Adds
+ :doc: and :nodoc: to allow hiding of implementation details in ruby.
+ Makes `rdoc` and `ri` gem-aware.
-Thu Oct 10 23:04:00 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sat Aug 6 03:19:45 2011 Eric Hodel <drbrain@segment7.net>
- * array.c (rb_ary_or): remove unused variables.
+ * lib/rubygems: Import RubyGems 1.8.7:
+ Added missing require for `gem uninstall --format-executable`.
-Thu Oct 10 23:01:16 2013 Masaki Matsushita <glass.saga@gmail.com>
+ The correct name of the executable being uninstalled is now displayed
+ with --format-executable.
- * array.c (rb_ary_or): use rb_hash_keys().
+ Fixed `gem unpack uninstalled_gem` default version picker.
-Thu Oct 10 21:36:16 2013 Masaki Matsushita <glass.saga@gmail.com>
+ RubyGems no longer claims a nonexistent gem can be uninstalled.
- * array.c (rb_ary_compact_bang): use ary_resize_smaller().
+ `gem which` no longer claims directories are requirable files.
-Thu Oct 10 17:25:28 2013 Koichi Sasada <ko1@atdot.net>
+ `gem cleanup` continues cleaning up gems if one can't be uninstalled
+ due to permissions. Issue #82.
- * vm.c (vm_exec): support :b_return event for "lambda{return}.call".
- [Bug #8622]
+ Gem repository directories are no longer created world-writable.
+ Patch by Sakuro OZAWA. [Ruby 1.9 - Bug #4930]
- * test/ruby/test_settracefunc.rb: add a test.
+Fri Aug 5 23:08:39 2011 Naohisa Goto <ngotogenome@gmail.com>
-Thu Oct 10 13:52:37 2013 Koichi Sasada <ko1@atdot.net>
+ * backport r32845 from trunk.
- * 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.
+ * configure.in: when Solaris cc, use $(CC) to link shared libs.
- * vm_core.h: change data structure.
+Fri Aug 5 22:16:20 2011 Naohisa Goto <ngotogenome@gmail.com>
-Thu Oct 10 11:11:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * numeric.c (rb_infinity, rb_nan): use WORDS_BIGENDIAN to get endian.
+ fix [Bug #5160] [ruby-dev:44356]
- * vm.c (Init_VM): hide also the singleton class of frozen-core, not
- only frozen-core itself.
+Fri Aug 5 15:57:10 2011 Naohisa Goto <ngotogenome@gmail.com>
-Thu Oct 10 06:02:08 2013 Koichi Sasada <ko1@atdot.net>
+ * complex.c (f_signbit): fix compile error in gcc4 on Solaris with
+ CFLAGS="-std=gnu99". [ruby-dev:44355] fix [Bug #5159]
- * test/ruby/test_rand.rb: fix r43224. local variable `e' is
- no longer available.
+ * math.c: ditto.
-Thu Oct 10 00:02:35 2013 Yusuke Endoh <mame@tsg.ne.jp>
+Thu Aug 5 10:09:00 2011 Kenta Murata <mrkn@mrkn.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.
+ * backport r32846 from trunk.
-Wed Oct 9 23:57:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread_pthread.c (native_cond_signal): retry to call pthread_cond_signal
+ and pthread_cond_broadcast if they return EAGAIN in
+ native_cond_signal and native_cond_broadcast, respectively.
+ It is for the pthread implementation of Mac OS X 10.7 (Lion).
+ fixes #5155. [ruby-dev:44342].
- * object.c (id_for_attr): avoid inadvertent symbol creation.
+ * thread_pthread.c (native_cond_broadcast): ditto.
-Wed Oct 9 18:03:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread_pthread.c (struct cached_thread_entry): stop using
+ pthread_cond_t and its functions directly.
- * vm_method.c (rb_attr): preserve encoding of the attribute ID in
- error message.
+ * thread_pthread.c (register_cached_thread_and_wait): ditto.
-Wed Oct 9 17:40:16 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread_pthread.c (use_cached_thread): ditto.
- * 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]
+Fri Aug 5 07:35:00 2011 Luis Lavena <luislavena@gmail.com>
-Wed Oct 9 13:53:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rubygems/installer.rb (class Gem): Correct path check on Windows
+ Possible fix for [Ruby 1.9 - Bug #5111]
- * compar.c (cmp_eq): fail if recursion. [ruby-core:57736] [Bug #9003]
+ * test/rubygems/test_gem_installer.rb (load Gem): ditto
+ Backported from trunk r32804
- * thread.c (rb_exec_recursive_paired_outer): new function which is
- combination of paired and outer variants.
+Fri Aug 5 07:00:31 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Oct 9 09:18:14 2013 Koichi Sasada <ko1@atdot.net>
+ * test/io/console/test_io_console.rb (test_noctty): daemon() on
+ Fedora Rawhide seems not to detach the controlling terminal,
+ when the argument noclose is non-zero. ref: [Bug #5135]
- * 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().
+Wed Aug 4 02:35:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * ext/-test-/debug/profile_frames.c,
- test/-ext-/debug/test_profile_frames.rb: fix a test for this change.
+ * configure.in: use build_os variable for checking C and C++ compilers
+ matching.
+ * configure.in: use clang++ if clang is used.
-Wed Oct 9 00:55:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Aug 4 02:21:10 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * load.c (load_lock): display backtrace to $stderr at circular
- require.
+ * lib/mkmf.rb (link_command): use static library only for bundled
+ extensions. [Bug #5147]
- * vm_backtrace.c (rb_backtrace_print_to): new function to print
- backtrace to the given output.
+Wed Aug 3 00:11:08 2011 Tanaka Akira <akr@fsij.org>
-Tue Oct 8 21:03:35 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/prettyprint.rb: update document. [ruby-core:36776]
- * 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().
+Tue Aug 2 20:10:16 2011 Shota Fukumori <sorah@tubusu.net>
- * ext/-test-/debug/profile_frames.c (profile_frames),
- test/-ext-/debug/test_profile_frames.rb: add a test.
+ * test/testunit/test_parallel.rb: pass "--ruby" option to
+ test/testunit/tests_for_parallel/runner.rb. [Bug #5132] [ruby-dev:44303]
+ Backported from trunk r32812.
-Tue Oct 8 16:11:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Aug 2 12:03:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * array.c (rb_ary_uniq): use rb_hash_values(), as well as the case no
- block is given.
+ * hash.c (recursive_hash): hash value of emptied hash should be
+ equal to an empty hash. [ruby-core:38650]
- * internal.h: define rb_hash_values() as internal API.
+Tue Aug 2 11:42:15 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Oct 8 13:53:21 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * parse.y (rb_enc_symname2_p): :! is valid symbol. [Bug #5136]
- * array.c (rb_ary_uniq): use rb_hash_keys().
+Tue Aug 2 03:26:02 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * internal.h: define rb_hash_keys() as internal API.
+ * test/rake/test_rake_directory_task.rb (TestRakeDirectoryTask#
+ test_directory_win32): fixed wrong test.
+ backported r32670 from trunk.
- * hash.c (rb_hash_keys): ditto.
+Mon Aug 1 15:45:23 2011 Eric Hodel <drbrain@segment7.net>
-Tue Oct 8 10:56:39 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * test/rake/test_rake_functional.rb: Don't assume the binary name of
+ ruby is "ruby". [Ruby 1.9 - Bug #5114]
+ * test/rake/helper.rb: ditto
- * 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]
+Mon Aug 1 05:21:42 2011 TAKANO Mitsuhiro (takano32) <tak@no32.tk>
-Tue Oct 8 05:58:12 2013 Tanaka Akira <akr@fsij.org>
+ * cont.c (cont_save_thread): fix missing semicolon.
- * lib/time.rb (Time.strptime): Time.strptime('0', '%s') returns local
- time Time object as Ruby 2.0 and before.
+Sun Jul 31 22:57:16 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-Tue Oct 8 05:40:37 2013 Eric Hodel <drbrain@segment7.net>
+ * enc/Makefile.in (ECHO1): Same as the recent fix in common.mk.
+ ":" in a make variable replacement cause a syntax error with
+ /usr/ccs/bin/make on Solaris. Uses $(NULLCMD) instead.
- * .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
+Sun Jul 31 22:44:08 2011 Kazuki Tsujimoto <kazuki@callcc.net>
-Tue Oct 8 04:28:25 2013 Akinori MUSHA <knu@iDaemons.org>
+ * configure.in: fix typos.
- * 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.
+Sun Jul 31 21:19:51 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-Tue Oct 8 04:12:45 2013 Akinori MUSHA <knu@iDaemons.org>
+ * lib/mkmf.rb (configuration:ECHO1): Same as the recent fix in
+ common.mk.
+ ":" in a make variable replacement cause a syntax error with
+ /usr/ccs/bin/make on Solaris. Uses $(NULLCMD) instead.
- * misc/ruby-additional.el (ruby-mode-set-encoding): Add a missing
- else clause to unbreak with `cp932`, etc.
+Sun Jul 31 21:16:02 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * misc/ruby-mode.el (ruby-mode-set-encoding): Ditto.
+ * complex.c (f_signbit): gcc4 on Solaris DOES have signbit but does
+ not have it on header.
-Tue Oct 8 03:57:34 2013 Akinori MUSHA <knu@iDaemons.org>
+ * math.c: ditto.
- * misc/ruby-additional.el (ruby-mode-set-encoding): Use
- `default-buffer-file-coding-system` if the :prefer-utf-8
- property is not available.
+Sun Jul 31 21:09:04 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * misc/ruby-mode.el (ruby-mode-set-encoding): Ditto.
+ * common.mk (node_name.inc): Use $(Q) for consistency.
- * misc/ruby-additional.el (ruby-encoding-map): Override the
- default value.
+ * Makefile.in (INSNS): ditto.
-Tue Oct 8 03:19:19 2013 Akinori MUSHA <knu@iDaemons.org>
+Sun Jul 31 20:39:12 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * misc/ruby-additional.el (ruby-mode-set-encoding): Add support
- for `prefer-utf-8` which was introduced in Emacs trunk.
+ * common.mk (ECHO1): nmake does not allow parenthesis in make variable
+ replacement.
- * 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.
+Sun Jul 31 20:21:36 2011 "Yuki Sonoda (Yugui)" <yugui@yugui.jp>
- * misc/ruby-additional.el (ruby-mode-set-encoding): Add support
- for encodings mapped to nil in `ruby-encoding-map`.
+ * common.mk (ECHO1): ":" in a make variable replacement cause a syntax
+ error with /usr/ccs/bin/make on Solaris. Uses $(NULLCMD) instead.
- * 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.
+ * configure.in (NULLCMD): new check.
- * misc/ruby-additional.el (ruby-encoding-map): Add type
- declaration for better customize UI.
+ * Makefile.in (NULLCMD): Reflects checking in configure.
- * misc/ruby-mode.el: Ditto for the above.
+ * win32/Makefile.sub (NULLCMD): new assignment.
-Tue Oct 8 00:14:53 2013 Akinori MUSHA <knu@iDaemons.org>
+Sun Jul 31 11:31:07 2011 Kazuki Tsujimoto <kazuki@callcc.net>
- * misc/ruby-additional.el: Add a standard header and footer,
- including (provide 'ruby-additional).
+ * backport r32768 from trunk.
-Mon Oct 7 22:52:45 2013 Akinori MUSHA <knu@iDaemons.org>
+ * vm.c: check if cfp is valid. [Bug #5083] [ruby-dev:44208]
- * 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.
+Sat Jul 31 01:23:45 2011 Kenta Murata <mrkn@mrkn.jp>
- * misc/ruby-electric.el (ruby-electric-keywords): New custom
- variable to replace `ruby-electric-simple-keywords-re` with.
+ * backport r32762 from trunk.
-Mon Oct 7 22:52:16 2013 Akinori MUSHA <knu@iDaemons.org>
+ * test/bigdecimal/test_bigdecimal.rb (test_version): removed.
- * 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.
+Sat Jul 30 23:51:44 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Oct 7 22:45:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/cmath.rb (cbrt): should return a real number if possible.
- * cont.c (FIBER_USE_NATIVE): split long conditions.
+Sat Jul 30 23:48:04 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Oct 7 20:29:31 2013 Zachary Scott <e@zzak.io>
+ * ext/date/date_core.c: an issue that is same as [ruby-dev:44071].
- * lib/time.rb: [DOC] typo in Time.rb overview by @srt32 [Fixes GH-416]
- https://github.com/ruby/ruby/pull/416
+ * ext/date/date_strftime.c: identical to [ruby-dev:44112].
-Mon Oct 7 20:07:20 2013 Tanaka Akira <akr@fsij.org>
+Sat Jul 30 23:19:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/time.rb (Time.strptime): Use :offset.
- Patch by Felipe Contreras. [ruby-core:57694]
+ * defs/default_gems: separate from tool/rbinstall.rb.
-Mon Oct 7 16:47:27 2013 Koichi Sasada <ko1@atdot.net>
+Sat Jul 30 23:14:44 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/-ext-/debug/test_profile_frames.rb: rename class C to
- something long name because one test depends on absence of
- class ::C.
+ * io.c (rb_io_each_byte): rbuf can be refreshed during yield.
+ [Bug #5119]
-Mon Oct 7 16:33:10 2013 Koichi Sasada <ko1@atdot.net>
+Sat Jul 30 22:35:50 2011 Naohisa Goto <ngotogenome@gmail.com>
- * ext/-test-/debug/profile_frames.c:
- test/-ext-/debug/test_profile_frames.rb: add a test for new C-APIs.
+ * strftime.c (NEEDS): avoid SEGV due to integer overflow in
+ sparc-solaris2.10 and i686-linux. fix [Bug #4456] [ruby-dev:43284]
-Mon Oct 7 16:12:36 2013 Koichi Sasada <ko1@atdot.net>
+Sat Jul 30 14:27:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * 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.
+ * backport r32754 from trunk.
- * 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.
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_version): version 1.1.0.
- 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.
+ * ext/bigdecimal/bigdecimal.gemspec: turn into a default gem.
- * vm_backtrace.c: implement above APIs.
-
- * iseq.c (rb_iseq_klass): return local_iseq's class.
+ * tool/rbinstall.rb: ditto.
-Mon Oct 7 14:26:01 2013 Koichi Sasada <ko1@atdot.net>
+Sat Jul 30 13:52:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * proc.c: catch up last commit.
- Type of return value of rb_iseq_first_lineno() is now VALUE.
+ * ext/bigdecimal/lib/bigdecimal/util.rb (Rational#to_d):
+ revive zero and implicit precision support as a deprecated feature.
- * vm_insnhelper.c (argument_error): ditto.
+ * test/bigdecimal/test_bigdecimal_util.rb: modify a test for the above
+ change.
- * vm_method.c (rb_method_entry_make): ditto.
+ * NEWS: describes the above change.
-Mon Oct 7 14:07:45 2013 Koichi Sasada <ko1@atdot.net>
+Sat Jul 30 10:58:10 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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);
+ * vm.c (th_init): preallocate alternative stack.
+ NoMemoryError is better than rb_bug, of course.
+ Patch by Eric Wong. [ruby-core:38572][ruby-core:38594].
- * 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.
+ * signal.c (rb_register_sigaltstack): ditto.
- * proc.c. vm_insnhelper.c, vm_method.c: catch up this change.
+ * vm_core.h: moved ALT_STACK_SIZE definition from signal.c.
-Sun Oct 6 08:37:39 2013 Zachary Scott <e@zzak.io>
+ * vm.c (thread_free): use xfree() instead of free().
- * 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 Jul 30 07:20:49 2011 Tanaka Akira <akr@fsij.org>
-Sat Oct 5 11:21:01 2013 Aaron Pfeifer <aaron.pfeifer@gmail.com>
+ * ext/socket/lib/socket.rb (udp_server_sockets): unused variable
+ removed.
+ patch by Jeremy Evans. [ruby-core:38600]
- * thread.c (terminate_atfork_i): fix locking mutexes not unlocked in
- forks when not tracked in thread. [ruby-core:55102] [Bug #8433]
+Fri Jul 29 23:56:32 2011 Tanaka Akira <akr@fsij.org>
-Fri Oct 4 19:54:09 2013 Zachary Scott <e@zzak.io>
+ * lib/securerandom.rb: call OpenSSL::Random.seed at the
+ SecureRandom.random_bytes call.
+ based on the patch by Masahiro Tomita. [ruby-dev:44270]
- * ext/dbm/dbm.c: [DOC] Fix wrong constant name in DBM by @edward
- [Fixes GH-409] https://github.com/ruby/ruby/pull/409
+Fri Jul 29 20:48:39 2011 Tanaka Akira <akr@fsij.org>
-Fri Oct 4 19:49:42 2013 Aman Gupta <ruby@tmm1.net>
+ * ext/socket/mkconstants.rb: fix typos.
- * gc.c: rename heap.free_num as heap.swept_num to clarify meaning and
- avoid confusion with objspace_free_num().
+Fri Jul 29 20:28:56 2011 Tanaka Akira <akr@fsij.org>
-Fri Oct 4 19:02:01 2013 Aman Gupta <ruby@tmm1.net>
+ * ext/socket/mkconstants.rb: use whitespaces as a separator.
- * 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 Jul 29 18:59:07 2011 Tanaka Akira <akr@fsij.org>
-Fri Oct 4 18:53:42 2013 Aman Gupta <ruby@tmm1.net>
+ * ext/socket/mkconstants.rb: add documents for constants.
+ patch by Eric Hodel. [ruby-core:37853] [Bug #4989]
- * gc.c: add rb_objspace.limit to keep accurate count of total heap
- slots [ruby-core:57633] [Bug #8983]
+Mon Jul 25 23:51:01 2011 Yusuke Endoh <mame@tsg.ne.jp>
-Fri Oct 4 09:32:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * backport r32671 from trunk.
- * lib/csv.rb (CSV.foreach): support enumerator. based on a patch by
- Hanmac (Hans Mackowiak) at [ruby-core:57643]. [ruby-core:57283]
- [Feature #8929]
+ * proc.c: pre-allocate the unlinked_method_entry_list_entry struct to
+ avoid memory allocation during GC. based on a patch from Eric Wong.
+ [ruby-core:38498]
-Thu Oct 3 18:20:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jul 25 22:36:11 2011 Yusuke Endoh <mame@tsg.ne.jp>
- * win32/win32.c (console_emulator_p, constat_handle): disable built-in
- console colorizing when console-emulator-like DLL is injected.
- [Feature #8201]
+ * backport r32669 from trunk.
-Thu Oct 3 18:01:44 2013 Koichi Sasada <ko1@atdot.net>
+ * proc.c (struct METHOD), gc.c (gc_marks), vm_method.c
+ (rb_gc_mark_unlinked_live_method_entries): fix SEGV bug.
+ rb_method_entry_t was free'd even when the method is still on the
+ stack if it is BMETHOD (i.e., Method#call). This is because
+ rb_method_entry_t is embedded in struct METHOD. This commit
+ separates them and marks the live method entries.
+ See [ruby-core:38449] in detail. fix [Bug #5047] [ruby-core:38171]
- * gc.c: define gc_profile_record::allocated_size if
- CALC_EXACT_MALLOC_SIZE is true.
+Thu Jul 28 23:36:28 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Thu Oct 3 13:42:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/fiddle/closure.c (callback): use rb_ary_tmp_new() instead of
+ xmalloc() to allocate an array for arguments of callback procedure,
+ to prevent arguments from being swept by GC. [ruby-core:38546]
+ [Bug #4929]
- * common.mk (yes-test-sample): use RUNRUBY instead of MINIRUBY to set
- runtime library path and run the built ruby. [Bug #8971]
+Thu Jul 28 22:51:27 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Thu Oct 3 00:17:15 2013 Akinori MUSHA <knu@iDaemons.org>
+ * backport r32723 from trunk.
- * misc/ruby-additional.el: Properly quote the body. An unquoted
- body given to eval-after-load is evaluated immediately!
+ * ext/openssl/ossl_cipher.c (ossl_cipher_initialize): Avoid possible
+ SEGV from AES encryption/decryption. Processing data by
+ Cipher#update without initializing key (meaningless usage of Cipher
+ object since we don't offer a way to export a key) could cause SEGV.
-Wed Oct 2 21:38:30 2013 Yusuke Endoh <mame@tsg.ne.jp>
+ In OpenSSL, the EVP which has EVP_CIPH_RAND_KEY flag (such as DES3)
+ allows uninitialized key, but other EVPs (such as AES) does not
+ allow it. Calling EVP_CipherUpdate() without initializing key causes
+ SEGV so we set the data filled with "\0" as the key by default. See
+ #2768.
- * 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.
+ * test/openssl/test_cipher.rb: test it.
-Wed Oct 2 21:37:04 2013 Yusuke Endoh <mame@tsg.ne.jp>
+Thu Jul 28 04:53:31 2011 Eric Hodel <drbrain@segment7.net>
- * random.c (make_seed_value): a local array declaration was accessed
- out of scope. Coverity Scan found this bug.
+ * lib/delegate.rb: Move file-level documentation to the appropriate
+ classes.
-Wed Oct 2 18:52:40 2013 Koichi Sasada <ko1@atdot.net>
+Thu Jul 28 00:33:47 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * gc.c: relax GC condition due to malloc_limit.
+ * test/fileutils/test_fileutils.rb: add OpenBSD case.
+ patched by Jeremy Evans [ruby-core:38530] see #5097
- * gc.c (GC_MALLOC_LIMIT_MAX): change default value
- (256MB -> 512MB) and permit zero to ignore max value.
+ * test/ruby/test_process.rb: ditto.
- * gc.c (vm_malloc_increase, vm_xrealloc): do not cause GC on realloc.
+Wed Jul 27 17:59:46 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * gc.c (gc_before_sweep): change debug messages.
+ * include/ruby/missing.h: define __syscall if the platform has
+ __syscall in the library but doesn't define it in headers
+ for example Mac OS X.
-Wed Oct 2 16:26:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jul 27 15:39:14 2011 Eric Hodel <drbrain@segment7.net>
- * io.c (rb_io_close_read): duplex IO should wait its child process
- even after close_read.
+ * object.c: Add usage documentation for BasicObject. Based on patch
+ by Thomas Sawyer. [Ruby 1.9 - Bug #5067]
-Wed Oct 2 15:39:13 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Jul 27 12:24:17 2011 Eric Hodel <drbrain@segment7.net>
- * 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
+ * lib/rubygems/uninstaller.rb: Add missing require and update
+ messaging to avoid confusion with uninstall --format-executable.
+ [Ruby 1.9 - Bug #4062]
-Wed Oct 2 14:19:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jul 27 10:47:57 2011 Eric Hodel <drbrain@segment7.net>
- * io.c (rb_io_close_write): detach tied IO for writing before closing
- to get rid of race condition. [ruby-list:49598]
+ * lib/rubygems: Update to RubyGems 1.8.6.1.
- * 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.
+Wed Jul 27 10:04:06 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Tue Oct 1 23:44:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * backport r32690 from trunk.
- * 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.
+ * test/openssl/test_pkcs12.rb: Add test and intermediate certificates.
+ [ Ruby 1.9 - Feature #3793 ] [ruby-core:32088]
-Tue Oct 1 22:03:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jul 27 01:26:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * lib/tempfile.rb (Tempfile#unlink): finalizer is no longer needed
- after unlinking. patched by by normalperson (Eric Wong) at
- [ruby-core:56521] [Bug #8768]
+ * NEWS: add changes of bigdecimal and bigdecimal/util.
-Tue Oct 1 20:54:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jul 27 01:13:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * file.c (stat_new_0): constify.
+ * ext/bigdecimal/lib/bigdecimal/util.rb (Rational#to_d):
+ zero or negative precision is error. fixes #5098.
+ [ruby-dev:44210]
- * file.c (rb_stat_new): constify and export. based on a patch by
- Hanmac (Hans Mackowiak) at [ruby-core:53225]. [Feature #8050]
+ * ext/bigdecimal/lib/bigdecimal/util.rb (Float#to_d): modified for
+ specifying precision. fixes #5098. [ruby-dev:44210]
-Tue Oct 1 16:03:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/bigdecimal/lib/bigdecimal/util.rb (Integer#to_d): added
+ for symmetry to BigDecimal() function with an Integer.
+ fixes #5098. [ruby-dev:44210]
- * include/ruby/ruby.h (ruby_safe_level_4_warning): needed by extension
- libraries which check safe level 4. [ruby-dev:47517] [Bug #8652]
+ * ext/bigdecimal/lib/bigdecimal/util.rb (BigDecimal#to_d): added
+ for adapting other Numeric subclasses. [ruby-dev:44245]
-Mon Sep 30 23:14:36 2013 Zachary Scott <e@zzak.io>
+ * test/bigdecimal/test_bigdecimal_util.rb: add tests for the above
+ changes.
- * ext/objspace/objspace.c: [DOC] Cleaned up many rdoc formatting
- issues and several duplicate grammar bugs.
+Wed Jul 27 00:54:38 2011 Kenta Murata <mrkn@mrkn.jp>
-Mon Sep 30 23:01:01 2013 Zachary Scott <e@zzak.io>
+ * bigdecimal/bigdecimal.c (VpDup) a new function for duplicating
+ a BigDecimal.
- * ext/objspace/object_tracing.c: [DOC] Adjust rdoc formatting and fix
- small grammar typo
+ * bigdecimal/bigdecimal.c (BigDecimal_new): support generating a new
+ BigDecimal from another BigDecimal using BigDecimal global function
+ or constructor. [ruby-dev:44245]
-Mon Sep 30 17:28:39 2013 Koichi Sasada <ko1@atdot.net>
+Mon Jul 25 22:24:09 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * ext/objspace/object_tracing.c: [DOC] add some notes for
- ObjectSpace::trace_object_allocations.
+ * backport r32666 from trunk.
-Mon Sep 30 16:46:58 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/xmlrpc/client.rb: Fix possible HTTP header formatting failure by
+ 'Basic' header. Long username caused the base64 String truncation in
+ HTTP header which is not allowed. See #5046.
- * 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/xmlrpc/test_webrick_server.rb: test it.
- * test/objspace/test_objspace.rb: add a test for new methods.
+Mon Jul 25 15:36:07 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * NEWS: add a description for new methods.
+ * ext/openssl/lib/openssl/{x509.rb,ssl.rb}: Add deprecation warning
+ for openssl/{x509,ssl} usage. Users should require "openssl" instead
+ of "openssl/ssl" and "openssl/x509". Start of transition period
+ introduced by [ruby-dev:38018].
-Mon Sep 30 11:18:04 2013 Koichi Sasada <ko1@atdot.net>
+Mon Jul 25 13:50:33 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * 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].
+ * backport r32662 from trunk.
-Mon Sep 30 10:40:20 2013 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/openssl/lib/openssl/x509.rb: Cosmetic change: move definition
+ introduced in r30152 to x509-internal.rb.
- * vm_method.c (rb_undef): raise a NameError if the original method
- of a refined method is not defined.
+Mon Jul 25 13:35:20 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * vm_insnhelper.c (rb_method_entry_eq): added NULL check to avoid SEGV.
+ * backport r32658 from trunk.
- * test/ruby/test_refinement.rb: related test.
+ * ext/openssl/ossl_ssl.c (ossl_ssl_shutdown): Avoid randomly generated
+ SSLError from SSLSocket just after invoking SSLSocket#close.
+ OpenSSL's SSL_shutdown could try to send alert packet and it might
+ set SSLerr(global error stack) as the result. It causes the next
+ SSL read/write operation to fail by unrelated reason.
-Sun Sep 29 23:45:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ By design, we're ignoring any error at SSL_shutdown() so we clear
+ global error stack after SSL_shutdown is called. See #5039.
- * parse.y (rb_id_attrset, intern_str): allow junk attrset ID for
- Struct.
+Sun Jul 24 20:29:53 2011 Tanaka Akira <akr@fsij.org>
- * 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.
+ * ext/socket/extconf.rb: refine the recvmsg test.
-Sun Sep 29 18:45:05 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Sun Jul 24 20:02:31 2011 Tanaka Akira <akr@fsij.org>
- * 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]
+ * ext/socket/extconf.rb: fix the recvmsg test.
- * test/ruby/test_keyword.rb: tests for the above.
+Sun Jul 24 08:42:51 2011 Tanaka Akira <akr@fsij.org>
-Sat Sep 28 23:25:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/socket/extconf.rb: test recvmsg allocates file descriptors for
+ fd passing even with MSG_PEEK.
- * math.c (math_log, math_log2, math_log10): fix for Bignum argument.
- numbits should be add only when right shifted.
+ * ext/socket/ancdata.c: use the above test result.
-Sat Sep 28 14:30:29 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sun Jul 24 01:24:31 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * lib/rubygems/specification.rb: Restore behavior of
+ Gem::Specification#loaded. [Ruby 1.9 - Bug #5032]
-Sat Sep 28 00:19:41 2013 Shugo Maeda <shugo@ruby-lang.org>
+Sun Jul 24 01:14:49 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/curses/extconf.rb: check the size of chtype.
+ * test/rake/test_rake_functional.rb (setup): Use __FILE__ for the base
+ directory. Current directory is not the top source directory when
+ the building process runs on other than there.
- * ext/curses/curses.c (NUM2CH, CH2NUM): use proper macros for
- the size of chtype.
+ * test/rake/test_rake_rake_test_loader.rb: ditto.
- [ruby-core:56090] [Bug #8659]
+ * test/rake/test_rake_task_argument_parsing.rb
+ (test_terminal_width_using_hardcoded_80): hardcoded 80 is used
+ when app.unix? is false.
-Fri Sep 27 18:33:23 2013 Koichi Sasada <ko1@atdot.net>
+Sun Jul 24 00:42:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * gc.c: add two GC tuning environment variables.
- RUBY_GC_MALLOC_LIMIT_MAX and RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR.
- See r43067 for details.
+ * configure.in: change the default compiler to gcc-4.2 if target os
+ is OS X 10.7 (Lion).
- * gc.c (rb_gc_set_params): refactoring. And change verbose notation.
- Mostly duplicated functions get_envparam_int/double is not cool.
- Please rewrite it.
+Sat Jul 23 17:06:25 2011 Tanaka Akira <akr@fsij.org>
- * test/ruby/test_gc.rb: fix a test for this change.
+ * io.c (rb_update_max_fd): validate fd.
-Fri Sep 27 17:44:41 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/socket/rubysocket.h (rsock_discard_cmsg_resource): add
+ msg_peek_p argument for the declaration.
- * gc.c (GC_MALLOC_LIMIT): 8,000,000 -> 8 * 1,024 * 1,024.
+ * ext/socket/ancdata.c (discard_cmsg): add msg_peek_p argument.
+ assume FreeBSD, NetBSD and MacOS X doesn't generate passed fd
+ when MSG_PEEK.
+ (rsock_discard_cmsg_resource): add msg_peek_p argument.
+ (bsock_recvmsg_internal): call rsock_discard_cmsg_resource with
+ msg_peek_p argument.
-Fri Sep 27 17:19:39 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/socket/unixsocket.c (unix_recv_io): call
+ rsock_discard_cmsg_resource with msg_peek_p argument.
- * gc.c (gc_before_sweep): cast to size_t to suppress warnings.
+Sat Jul 23 14:38:28 2011 Eric Hodel <drbrain@segment7.net>
-Fri Sep 27 17:07:55 2013 Koichi Sasada <ko1@atdot.net>
+ * test/rake*: Remove dependencies on flexmock and session gems.
+ [Ruby 1.9 - Bug #4987]
- * 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 Jul 22 21:46:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri Sep 27 16:32:27 2013 Koichi Sasada <ko1@atdot.net>
+ * vm_insnhelper.c (vm_call_cfunc): added volatile for a workaround
+ of cfp consistency error problem on OS X 10.7 (Lion). It's
+ suspected llvm optimization bug.
+ [Bug #5076] [ruby-dev:44185]
- * 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.
+Fri Jul 22 21:50:16 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * lib/uri/generic.rb (WFKV_): unroll the loop of regexp.
- * gc.c (ruby_gc_params_t): add initial_malloc_limit_factor and
- initial_malloc_limit_max.
+ * lib/uri/generic.rb (URI.decode_www_form_component): ditto.
- * gc.c (vm_malloc_prepare, vm_xrealloc): use vm_malloc_increase to
- add and check malloc_increase.
+Fri Jul 22 21:49:48 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Sep 27 01:05:00 2013 Zachary Scott <e@zzak.io>
+ * enum.c (enum_inject): remove empty line to notify rdoc
+ Enumerable#reduce is alias. patched by milki@github.
+ https://github.com/ruby/ruby/pull/26
- * re.c: [DOC] arguments of Regexp::union receive #to_regexp [Bug #8205]
+Fri Jul 22 21:49:28 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Sep 27 00:39:27 2013 Zachary Scott <e@zzak.io>
+ * lib/webrick/httprequest.rb (WEBrick::HTTPRequest#each):
+ Allow HTTP/0.9 request which doesn't has any header or body.
+ patched by Felix Jodoin. [ruby-core:38040] [Bug #5022]
- * struct.c: [DOC] grammar of ArgumentError in Struct.new [Bug #8936]
- Patch by Prathamesh Sonpatki
+Fri Jul 22 21:45:21 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Sep 26 22:11:56 2013 Zachary Scott <e@zzak.io>
+ * ext/dl/handle.c (dlhandle_sym): clear previous error with dlerror()
+ before calling dlsym(). [ruby-dev:44091] [Bug #5021]
- * 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
+Fri Jul 22 19:05:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Sep 26 22:08:11 2013 Zachary Scott <e@zzak.io>
+ * parse.y (rb_enc_symname2_p): get rid of potential out-of-bound
+ access.
- * lib/observer.rb: [DOC] syntax improvement in example by @chastell
- [Fixes GH-400] https://github.com/ruby/ruby/pull/400
+Fri Jul 22 13:55:59 2011 Eric Hodel <drbrain@segment7.net>
-Thu Sep 26 22:03:15 2013 Zachary Scott <e@zzak.io>
+ * lib/net/http.rb: Net::HTTP#finish is used to manually close
+ connections. [Ruby 1.9 - Bug #5045]
- * ext/digest/digest.c: [DOC] typo in overview by @chastell
- [Fixes GH-399] https://github.com/ruby/ruby/pull/399
+Fri Jul 22 13:51:29 2011 Eric Hodel <drbrain@segment7.net>
-Thu Sep 26 22:00:42 2013 Zachary Scott <e@zzak.io>
+ * ext/readline/readline.c: Add examples for Readline.completion_proc=.
+ [Ruby 1.9 - Bug #5057]
- * ext/openssl/ossl.c: [DOC] typo in example by @zoranzaric
- [Fixes GH-401] https://github.com/ruby/ruby/pull/401
+Fri Jul 22 13:20:33 2011 Eric Hodel <drbrain@segment7.net>
-Thu Sep 26 21:07:49 2013 Akinori MUSHA <knu@iDaemons.org>
+ * tool/rbinstall.rb (default gems): Install executables into the fake
+ gem dir for Gem.bin_path. [Ruby 1.9 - Bug #4485]
- * misc/ruby-electric.el (ruby-electric-delete-backward-char): Add
- support for smartparens-mode.
+Fri Jul 22 13:03:12 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * 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.
+ * backport r32609 from trunk.
-Thu Sep 26 16:51:00 2013 Shota Fukumori <her@sorah.jp>
+ * ext/openssl/ossl_hmac.c: Revert checking return type of
+ HMAC_Init_ex as it is not compatible with OpenSSL < 1.0.0.
- * insns.def (opt_regexpmatch2): Check String#=~ hasn't overridden
- before calling rb_reg_match().
+Fri Jul 22 11:22:20 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * test/ruby/test_string.rb: Test for above.
+ * backport r32606 from trunk.
- * vm.c (vm_init_redefined_flag): Add BOP flag for String#=~
+ * ext/openssl/ossl_digest.c: Check return value of EVP_DigestInit_ex.
+ * ext/openssl/ossl_hmac.c: Check return value of HMAC_Init_ex.
+ Thanks, Jared Jennings, for the patch.
+ [ Ruby 1.9 - Bug #4944 ] [ruby-core:37670]
- [ruby-core:57385] [Bug #8953]
+Fri Jul 22 09:17:43 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Thu Sep 26 16:43:42 2013 Akinori MUSHA <knu@iDaemons.org>
+ * backport r32604 from trunk.
- * 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.
+ * ext/openssl/ossl_engine.c: Avoid double free of ENGINE reference.
+ * test/openssl/test_engine.rb: Add a test for it.
+ Thanks to Ippei Obayashi for providing the patch.
+ [ Ruby 1.9 - Bug #5062 ] [ruby-dev:44173]
-Thu Sep 26 16:24:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Fri Jul 22 06:39:34 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * insns.def (opt_regexpmatch1): check Regexp#=~ is not defined before
- calling rb_reg_match()
+ * lib/csv.rb: Do not modify CSV.generate's argument [ruby-core:38356]
- * test/ruby/test_regexp.rb: add test
+Thu Jul 21 20:02:11 2011 Yusuke Endoh <mame@tsg.ne.jp>
- * vm.c (ruby_vm_redefined_flag): change type to short[]
+ * thread.c (set_trace_func, thread_set_trace_func_m): reset tracing
+ state when set_trace_func hook is removed. This is workaround patch
+ to force to reset tracing state that is broken by continuation call.
+ a patch from James M. Lawrence. [Feature #4347] [ruby-core:34998]
- * vm.c (vm_redefinition_check_flag): return REGEXP_REDEFINED_OP_FLAG if
- klass == rb_cRegexp
+ * test/ruby/test_continuation.rb (class TestContinuation): add a test
+ for above. a patch from James M. Lawrence.
- * vm.c (vm_init_redefined_flag): setup BOP flag for Regexp#=~
+Thu Jul 21 20:59:59 2011 Tanaka Akira <akr@fsij.org>
- * vm_insnhelper.h: add REGEXP_REDEFINED_OP_FLAG
+ * ext/socket/ancdata.c (discard_cmsg): workaround for MacOS X Lion.
- [ruby-core:57385] [Bug #8953]
-Thu Sep 26 14:46:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jul 21 07:07:57 2011 Tanaka Akira <akr@fsij.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]
+ * backport r32579, r32581, r32587 by akr and r32588 by kazu.
-Wed Sep 25 17:41:29 2013 Koichi Sasada <ko1@atdot.net>
+ r32579:
- * 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]
+ * io.c (rb_update_max_fd): new function.
-Wed Sep 25 17:12:08 2013 Koichi Sasada <ko1@atdot.net>
+ * internal.h (rb_update_max_fd): declare rb_update_max_fd.
- * 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).
+ * thread_pthread.c (rb_thread_create_timer_thread): update max fd when
+ timer thread pipe is created.
- * 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.
+ r32581:
-Wed Sep 25 16:58:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (UPDATE_MAXFD): removed.
- * internal.h (rb_float_value, rb_float_new): move inline functions
- from ruby/ruby.h.
+ r32587:
- * numeric.c (rb_float_value, rb_float_new): define external functions
- for extension libraries.
+ * include/ruby/intern.h (rb_update_max_fd): declaration moved from
+ internal.h.
-Wed Sep 25 15:37:02 2013 Koichi Sasada <ko1@atdot.net>
+ * file.c: ditto.
- * test/rdoc/test_rdoc_generator_darkfish.rb: add a guard for windows.
+ * io.c: call rb_update_max_fd for each new fds.
-Wed Sep 25 09:53:11 2013 Eric Hodel <drbrain@segment7.net>
+ * process.c: ditto.
- * lib/rubygems: Fix CVE-2013-4363. Miscellaneous minor improvements.
+ * random.c: ditto.
- * test/rubygems: Tests for the above.
+ * ruby.c: ditto.
-Tue Sep 24 17:38:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/io/console/console.c: ditto.
- * string.c (rb_str_inspect): get rid of out-of-bound access.
+ * ext/openssl/ossl_bio.c: ditto.
- * string.c (rb_str_inspect): when a UTF-16/32 string doesn't have a
- BOM, inspect as a dummy encoding string.
+ * ext/pty/pty.c: ditto.
-Tue Sep 24 17:15:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/socket/init.c: ditto.
- * enc/encdb.c (ENC_DUMMY_UNICODE): make BOM-encodings dummy.
+ * ext/socket/socket.c: ditto.
- * encoding.c (enc_autoload): keep dummy encodings dummy.
+ * ext/socket/ancdata.c: ditto.
-Tue Sep 24 16:41:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/socket/unixsocket.c: ditto.
- * ext/win32/lib/win32/registry.rb (Win32::Registry#write): data size
- is in bytes, not chars. terminators should be placed automatically.
+ r32588:
-Tue Sep 24 16:39:36 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (rb_update_max_fd): remove parentheses. they are not in
+ macro.
- * ext/win32/lib/win32/registry.rb (Win32::Registry#each_value): encode
- name.
+Sun Jul 17 08:07:31 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * ext/win32/lib/win32/registry.rb (Win32::Registry#each_key): ditto.
+ * backport r32563 from trunk
- * ext/win32/lib/win32/registry.rb (Win32::Registry#export_string):
- encode to locale encoding if default internal is not set.
+ * test/openssl/test_ssl_session.rb: add PEM SSL session without TLS
+ extensions. Use this as the default for the tests to ensure
+ compatibility with OpenSSL 0.9.7.
+ [ Ruby 1.9 - Bug #4961 ] [ruby-core:37726]
-Tue Sep 24 16:35:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jul 16 17:29:20 2011 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.
+ * configure.in (RUBY_UNIVERSAL_ARCH): restore arch flag.
+ Bug #4977
-Tue Sep 24 14:07:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Sat Jul 16 11:18:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * gc.c (free_method_cache_entry_i): unused function
+ * win32/setup.mak: support to build x64-mswin64 on Windows7 (and Vista,
+ perhaps).
+ backported r32521 from trunk
- * gc.c (rb_free_mc_table): ditto
+Sat Jul 16 06:31:23 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * internal.h (method_cache_entry_t): unused struct
+ * lib/uri/common.rb (module): Remove optional parser argument to
+ Kernel#URI
+ [ruby-core:38061]
- * vm_method.c (verify_method_cache): remove unused variable
+ * lib/uri/generic.rb (module): ditto
- * vm_method.c (rb_method_entry): ditto
+Sat Jul 16 01:15:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Sep 24 14:01:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * time.c (time_dup): used rb_obj_class() instead of CLASS_OF().
+ The patch is made by Kazuki Tsujimoto. [Bug #5012] [ruby-dev:44071]
- * class.c (class_alloc): remove mc_tbl
+ * test/ruby/test_time.rb (TestTime#test_getlocal_dont_share_eigenclass):
+ added a new test for eigenclass of time object.
- * gc.c (obj_free): ditto
+Fri Jul 15 19:11:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * internal.h (struct rb_classext_struct): ditto
+ * bignum.c (bigsub_int): add RB_GC_GUARD. This patch is made by
+ Makoto Kishimoto. fixes #4223 [ruby-dev:42907]
- * method.h (rb_method_entry): remove ent param
+ * bignum.c (bigadd_int): ditto.
- * vm_method.c: restore the global method cache. Per class cache tables
- turned out to be far too slow.
+Fri Jul 15 09:59:12 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- [ruby-core:57289] [Bug #8930]
+ * backport r32546 from trunk.
-Tue Sep 24 12:51:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/digest/sha2/sha2.c (SHA256_Update, SHA512_Update): avoid Bus
+ Error caused by unalignment access on Sparc-Solaris (and possibly on
+ other similar environment.) This patch just do memcpy always instead
+ of checking architecture. I see no perf drop on my 64bit env. For
+ more details, see #4320.
- * ext/win32/lib/win32/registry.rb (Win32::Registry::API): need
- Constants.
+ * test/digest/test_digest.rb: add test for unalignment access.
- * 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>
+Thu Jul 14 12:40:07 2011 Hiroshi Nakamura <nahi@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]
+ * backport r32537 from trunk.
-Mon Sep 23 12:11:26 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * ext/openssl/ossl.c (ossl_verify_cb): trap the exception from
+ verify callback of SSLContext and X509Store and make the
+ verification fail normally. Raising exception directly from callback
+ causes orphan resources in OpenSSL stack. Patched by Ippei Obayashi.
+ See #4445.
- * hash.c (env_each_pair): do not call rb_assoc_new() if
- it isn't needed.
+ * test/openssl/test_ssl.rb
+ (test_exception_in_verify_callback_is_ignored): test it.
-Mon Sep 23 10:42:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jul 13 08:20:08 2011 Shota Fukumori <sorah@tubusu.net>
- * 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].
+ * lib/test/unit.rb(Test::Unit::Options#process_args): Fix bug.
+ Fix process_args didn't return `@option` after r30939. Backported
+ r32526 from trunk.
-Mon Sep 23 05:07:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jul 11 23:50:39 2011 Yutaka Kanemoto <kanemoto@ruby-lang.org>
- * include/ruby/intern.h (rb_ary_cat): move from internal.h, since it
- is described in README.EXT.
+ * time.c: can't compile time.c on AIX due to missing declaration for
+ ffs(). It is declared in strings.h on AIX. backported r32518 from
+ trunk.
-Sun Sep 22 20:55:20 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Mon Jul 11 23:47:00 2011 Yutaka Kanemoto <kanemoto@ruby-lang.org>
- * vm_insnhelper.c (vm_make_proc_with_iseq): fix bug message.
- This is follow up to changes in r42637.
+ * thread_pthread.c (get_stack): need to adjust stack addr for
+ [Bug #1813] on AIX. backported r32511 from trunk.
-Sun Sep 22 20:35:38 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Mon Jul 11 15:17:03 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/-test-/tracepoint/tracepoint.c (Init_tracepoint): prevent from GC.
+ * numeric.c (rb_num2ull): use FIX2LONG instead of FIX2ULONG. see
+ rb_num2ulong(). fixed the problem of ObjectSpace._id2ref of IL32LLP64
+ platforms, introduced at r32433.
+ backported r32512 from trunk.
-Sun Sep 22 19:00:28 2013 Benoit Daloze <eregontp@gmail.com>
+Sun Jul 10 23:58:55 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * 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.
+ * version.h: 1.9.3 is no longer trunk.
-Sat Sep 21 20:11:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jul 10 23:24:29 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * 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]
+ * class.c (rb_mix_module): reverted r31873.
+ (check_mix_method_i, do_mix_method_i) reverted r31917.
-Sat Sep 21 01:04:25 2013 Zachary Scott <e@zzak.io>
+ * test/ruby/test_module.rb (TestModule#test_mix_const): reverted
+ r31918.
- * lib/benchmark.rb: [DOC] grammar of Benchmark#bm [Bug #8888]
- Patch by Prathamesh Sonpatki
+Sun Jul 10 22:50:00 2011 Kenta Murata <mrkn@mrkn.jp>
-Sat Sep 21 00:50:02 2013 Zachary Scott <e@zzak.io>
+ * ext/bigdecimal/bigdecimal.c (rmpd_power_by_big_decimal): fix
+ precision treatment errors.
- * enumerator.c: [DOC] Enumerator#each arguments documentation [GH-388]
- Patch by @kachick https://github.com/ruby/ruby/pull/388
+ * test/bigdecimal/test_bigdecimal.rb: add tests for the above change.
+ fix precision treatment errors.
-Sat Sep 21 00:49:16 2013 Zachary Scott <e@zzak.io>
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_power): precision argument
+ should be optional for its compatibility.
- * enum.c: [DOC] Enumerable#to_a accepts arguments [GH-388]
- Patch by @kachick https://github.com/ruby/ruby/pull/388
+Sun Jul 10 22:38:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Sep 21 00:47:44 2013 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
- * string.c (rb_str_conv_enc_opts): make sure to scan coderange to get
- rid of unnecessary conversion.
+Sun Jul 10 21:51:29 2011 Koichi Sasada <ko1@atdot.net>
-Sat Sep 21 00:21:08 2013 Zachary Scott <e@zzak.io>
+ * internal.h: add comments (cautions).
- * ext/openssl/lib/openssl/ssl.rb: [DOC] Document OpenSSL::SSLServer
- Based on a patch by Rafal Lisowski [Bug #8758]
+Sun Jul 10 20:59:38 2011 Shota Fukumori <sorah@tubusu.net>
-Fri Sep 20 23:54:03 2013 Zachary Scott <e@zzak.io>
+ * lib/test/unit.rb: Add new class variable `@@testfile_prefix`.
+ This is for changing test name prefix. (For testing)
- * lib/gserver.rb: [DOC] correct gserver.rb license [Bug #8913]
+ * test/testunit/tests_for_parallel/ptest_first.rb: Renamed from
+ test_first.rb
-Fri Sep 20 23:48:34 2013 Zachary Scott <e@zzak.io>
+ * test/testunit/tests_for_parallel/ptest_second.rb: Renamed from
+ test_second.rb
- * ext/psych/yaml/yaml.h: [DOC] merge upstream typo fix by @GreenGeorge
- https://github.com/tenderlove/psych/pull/161
+ * test/testunit/tests_for_parallel/ptest_third.rb: Renamed from
+ test_third.rb
-Fri Sep 20 23:37:40 2013 Zachary Scott <e@zzak.io>
+ * test/testunit/tests_for_parallel/ptest_forth.rb: Renamed from
+ test_forth.rb
- * lib/securerandom.rb: [DOC] SecureRandom.hex length argument
- [Fixes GH-394] Patch by @avdi https://github.com/ruby/ruby/pull/394
+ * test/testunit/tests_for_parallel/runner.rb: Remove misc.rb
-Fri Sep 20 23:34:48 2013 Zachary Scott <e@zzak.io>
+ * test/testunit/tests_for_parallel/ptest_first.rb: ditto.
- * benchmark/bm_app_answer.rb: removed duplicate code [Fixes GH-393]
- Patch by @gouravtiwari https://github.com/ruby/ruby/pull/393
+ * test/testunit/tests_for_parallel/ptest_second.rb: ditto.
-Fri Sep 20 23:24:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/testunit/tests_for_parallel/ptest_third.rb: ditto.
- * common.mk (btest, btest-ruby, test-knownbug): add $(RUN_OPTS) to
- ruby to be run, so that tests are runnable before making exts.
+ * test/testunit/tests_for_parallel/ptest_forth.rb: ditto.
- * common.mk (test-sample): ditto, and use $(MINIRUBY) as rubytest.rb
- does not need extension libraries.
+ * test/testunit/tests_for_parallel/misc.rb: Removed because no longer
+ needed.
- * tool/rubytest.rb: pass $(RUN_OPTS) to testing ruby using --run-opt.
+ * test/testunit/test_parallel.rb: Fix assertions for above.
-Fri Sep 20 15:01:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jul 10 16:57:08 2011 Koichi Sasada <ko1@atdot.net>
- * parse.y (intern_str): sigil only names are junk, at least one
- identifier character is needed. [ruby-dev:47723] [Bug #8928]
+ * vm_insnhelper.c (vm_throw): check a class frame.
+ Fixes Bug #4648.
+ The patch is contributed by Kazuki Tsujimoto.
- * parse.y (rb_enc_symname_type): fix out of bound access.
+ * bootstraptest/test_proc.rb: add tests for above.
-Fri Sep 20 14:14:32 2013 Tanaka Akira <akr@fsij.org>
+Sun Jul 10 17:28:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/-test-/printf/printf.c (printf_test_call): Fix an end of buffer
- argument.
+ * thread_pthread.c (mutex_debug): use exit(EXIT_FAILURE) instad of
+ exit(1).
+ * thread_pthread.c (add_signal_thread_list): ditto.
+ * thread.c (rb_thread_call_with_gvl): ditto.
+ * util.c (Bug): ditto.
-Thu Sep 19 16:59:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jul 10 15:58:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * parse.y (lambda): adjust position to the beginning of the block.
+ * ext/json: Merge json gem 1.5.4+ (f7f78896607b6f6226cd).
+ [Bug #4700]
-Thu Sep 19 16:25:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jul 10 16:41:32 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * vsnprintf.c (BSD_vfprintf): initialize cp so that size is 0 in the
- commented case. fix an accidental bug at r16716.
+ * 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]
-Thu Sep 19 14:33:14 2013 Koichi Sasada <ko1@atdot.net>
+ * bootstraptest/test_objectspace.rb: new test for this fix.
- * NEWS: add a news for r42974.
+Sun Jul 10 16:06:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu Sep 19 14:12:02 2013 Koichi Sasada <ko1@atdot.net>
+ * signal.c (sigsegv): use abort() instead of exit() when nested
+ SEGV was happen. Because unnested SEGV use abort().
+ [Bug #5013][ruby-dev:44078]
- * include/ruby/ruby.h: make Symbol objects frozen.
- [Feature #8906]
- I want to freeze this good day, too.
+Sun Jul 10 15:30:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * test/ruby/test_eval.rb: catch up this change.
+ * load.c (rb_f_autoload): prevent to autoload for singleton
+ classes. fixes [Bug #4886] [ruby-dev:43816]
- * test/ruby/test_symbol.rb: add a test to check frozen symbols.
+ * bootstraptest/test_autoload.rb: add tests for the above change.
-Thu Sep 19 09:11:33 2013 Eric Hodel <drbrain@segment7.net>
+Sun Jul 10 15:09:17 2011 Shota Fukumori <sorah@tubusu.net>
- * NEWS: Update for RDoc 4.1.0.preview.1 and RubyGems 2.2.0.preview.1
+ * lib/test/unit/assertions.rb: Import documentation patch by Justin
+ Collins. [ruby-core:37225] [Feature #4903]
-Thu Sep 19 08:59:41 2013 Eric Hodel <drbrain@segment7.net>
+Sun Jul 10 14:57:36 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * lib/rdoc/markdown/literals_1_9.rb: Fix trailing whitespace.
+ * ext/date/date_core.c: canonicalizes nth and sf.
- Previously kpeg (which generates this file) added trailing
- whitespace, but this bug is now fixed.
+Sun Jul 10 14:13:50 2011 Koichi Sasada <ko1@atdot.net>
- * lib/rdoc/markdown.rb: ditto.
+ * internal.h (rb_thread_call_with_gvl, rb_thread_call_without_gvl):
+ make them visible as experimental C APIs. fixes Feature #4328.
-Thu Sep 19 08:33:14 2013 Eric Hodel <drbrain@segment7.net>
+Sun Jul 10 12:18:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * lib/rdoc: Update to RDoc 4.1.0.preview.1
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_power): support non-integral
+ exponent. fixes [Bug #3271]
- RDoc 4.1.0 contains a number of enhancements including a new default
- style and accessibility support. You can see the changelog here:
+ * ext/bigdecimal/bigdecimal.c (rmpd_power_by_big_decimal): ditto.
- https://github.com/rdoc/rdoc/blob/v4.1.0.preview.1/History.rdoc
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_power_op): add a function to
+ only use for "**" operator.
- * test/rdoc: ditto.
+ * test/bigdecimal/test_bigdecimal.rb: add a bunch of tests for the
+ above changes.
-Thu Sep 19 07:16:26 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * ext/bigdecimal/bigdecimal.c (is_integer): add an utility function.
- * ext/psych/lib/psych.rb: updating Psych version
+ * ext/bigdecimal/bigdecimal.c (is_negative): ditto.
- * ext/psych/psych.gemspec: ditto
+ * ext/bigdecimal/bigdecimal.c (is_positive): ditto.
-Thu Sep 19 06:39:40 2013 Eric Hodel <drbrain@segment7.net>
+ * ext/bigdecimal/bigdecimal.c (is_zero): ditto.
- * lib/rubygems/dependency_resolver.rb: Switch the iterative resolver
- algorithm from recursive to iterative to avoid possible
- SystemStackError.
+ * ext/bigdecimal/bigdecimal.c (is_one): ditto.
-Thu Sep 19 06:29:30 2013 Eric Hodel <drbrain@segment7.net>
+ * ext/bigdecimal/bigdecimal.c (is_even): ditto.
- * lib/rubygems: Update to RubyGems 2.2.0.preview.1
+Sun Jul 10 12:08:39 2011 Yusuke Endoh <mame@tsg.ne.jp>
- This brings several new features to RubyGems summarized here:
+ * 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]
- https://github.com/rubygems/rubygems/blob/v2.2.0.preview.1/History.txt
+Sun Jul 10 11:35:29 2011 Yusuke Endoh <mame@tsg.ne.jp>
- * test/rubygems: ditto.
+ * 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].
-Wed Sep 18 23:14:58 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sun Jul 10 09:46:14 2011 Masaya Tarui <tarui@ruby-lnag.org>
- * 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]
+ * range.c (range_max): fix behavior with excluded end value.
+ [Bug #4591]
- * 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.
+Sun Jul 10 09:13:18 2011 Eric Hodel <drbrain@segment7.net>
-Wed Sep 18 16:32:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * NEWS: Fix RubyGems version. [Ruby 1.9 - Bug #5004]
- * proc.c (mnew_from_me): allocate structs after allocated wrapper
- object successfully, to get rid of potential memory leak.
+Sat Jul 9 20:01:59 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Sep 17 15:54:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * internal.h: rb_rational_reciprocal is defined in rational.c.
- * 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]
+Sat Jul 9 19:48:31 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert_throw):
- assertion for throw. MiniTest::Assertions#assert_throws discards
- the caught value.
+ * internal.h: added declarations.
+ * complex.c: followed the above change.
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert_nothing_thrown):
- returns the result of the given block.
+Sat Jul 9 17:24:41 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Sep 17 12:55:58 2013 Eric Hodel <drbrain@segment7.net>
+ * NEWS: bigdecimal is not a builtin.
- * doc/regexp.rdoc: [DOC] Replace paragraphs in verbatim sections with
- plain paragraphs to improve readability as ri and HTML.
+Sat Jul 9 17:17:53 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Sep 16 07:32:35 2013 Tadayoshi Funaba <tadf@dotrb.org>
+ * ext/date/date_core.c: some improvements for performance.
- * complex.c: removed meaningless lines.
- * rational.c: ditto.
+Sat Jul 9 16:56:01 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Sep 16 00:44:23 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * atomic.h (ATOMIC_OR): _InterlockedOr is unavailable in VC6.
- * ext/socket/mkconstants.rb: define MSG_FASTOPEN.
- [ruby-core:57138] [Feature #8897]
+ * numeric.c (ULLONG_MAX): fallback definition.
-Sun Sep 15 13:31:23 2013 Tadayoshi Funaba <tadf@dotrb.org>
+Sat Jul 9 15:59:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.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.
+ * win32/win32.c (rb_w32_{read,write}): should be signed.
+ Bug #5001
-Sat Sep 14 06:08:10 2013 Eric Hodel <drbrain@segment7.net>
+Sat Jul 9 14:02:20 2011 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
- * dir.c (dir_s_glob): [DOC] Improve wording and layout.
+ * lib/cgi/core.rb: fix multipart form parsing bug. [Bug #3866]
- * dir.c (file_s_fnmatch): ditto.
+Sat Jul 9 11:41:03 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * dir.c (Init_Dir): [DOC] Document File::Constants::FNM_XXX
- constants. (These won't show up in RDoc until a new RDoc is
- imported.)
+ * lib/matrix.rb: Add Vector#normalize [ruby-dev:43829]
-Thu Sep 12 14:58:58 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Sat Jul 9 09:25:06 2011 Eric Hodel <drbrain@segment7.net>
- * lib/uri/generic.rb (URI::Generic.find_proxy): return nil if
- http_proxy environment variable is empty string.
- [ruby-core:57140] [Bug #8898]
+ * enumerator.c: Remove "enumeration sequenced by".
+ [Ruby 1.9 - Bug #4757]
-Fri Sep 13 10:40:28 2013 Eric Hodel <drbrain@segment7.net>
+Sat Jul 9 09:14:56 2011 Eric Hodel <drbrain@segment7.net>
- * lib/rubygems: Update to RubyGems 2.1.3
+ * io.c: Note that methods other than IO#gets may increase IO#lineno.
+ [Ruby 1.9 - Bug #4902]
- Fixed installing platform gems
+Sat Jul 9 08:39:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- Restored concurrent requires
+ * common.mk (RUN_OPT): disable gems.
- Fixed installing gems with extensions with --install-dir
+Sat Jul 9 08:37:05 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- Fixed `gem fetch -v` to install the latest version
+ * 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
- Fixed installing gems with "./" in their files entries
+Fri Jul 8 21:20:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * test/rubygems/test_gem_package.rb: Tests for the above.
+ * 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]
- * NEWS: Updated for RubyGems 2.1.3
+ * addr2line.h: ditto.
-Thu Sep 12 22:40:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * vm_dump.c: ditto.
- * configure.in (RUBY_CHECK_SIGNEDNESS): macro to check signedness of a
- type.
+Fri Jul 8 16:40:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in (size_t): must be unsigned.
- [ruby-core:57149] [Feature #8890]
+ * ext/json/parser/parser.rl (convert_encoding): should not modify
+ the argument.
-Thu Sep 12 22:37:08 2013 Anton Ovchinnikov <revolver112@gmail.com>
+ * ext/json/parser/parser.rl (convert_encoding): no needs to use
+ force_encoding.
- * 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]
+Fri Jul 8 15:53:31 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Sep 12 21:35:46 2013 Naohisa Goto <ngotogenome@gmail.com>
+ * error.c (rb_bug): get rid of segfault after all threads
+ disposed.
- * Makefile.in (libruby-static.a): change LDFLAGS order. LDFLAGS may
- include library path that should be specified before LIBS.
- [ruby-dev:47707] [Bug #8901]
+Fri Jul 8 15:01:06 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Sep 12 20:07:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl.h: include openssl/e_os2.h before checking the
+ definition of OPENSSL_SYS_WIN32.
- * vsnprintf.c (MAXEXP, MAXFRACT): calculate depending on constants in
- float.h.
+Fri Jul 8 14:40:39 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * vsnprintf.c (BSD_vfprintf): limit length for cvt() to get rid of
- buffer overflow. [ruby-core:57023] [Bug #8864]
+ * win32/win32.c (wunlink): reverted a part of r32426. it was mistakenly
+ mixed.
- * vsnprintf.c (exponent): make expbuf size more precise.
+Fri Jul 8 14:29:47 2011 Narihiro Nakamura <authornari@gmail.com>
-Wed Sep 11 17:30:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in: can't subtract void *.
- * 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]
+Fri Jul 8 14:33:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Sep 11 07:55:17 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * 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.
- * thread.c (rb_mutex_unlock): Mutex#unlock no longer raise
- an exception even if uses on trap. [Bug #8891]
+Fri Jul 8 13:47:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Sep 10 14:37:01 2013 Shota Fukumori <sorah@tubusu.net>
+ * thread.c (rb_mutex_unlock_all): folded into
+ rb_threadptr_unlock_all_locking_mutexes.
+ * thread.c (rb_threadptr_unlock_all_locking_mutexes) ditto.
- * vm_backtrace.c (vm_backtrace_to_ary): Ignore the second argument if
- it is nil. [Bug #8884] [ruby-core:57094]
+Fri Jul 8 13:36:02 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * test/ruby/test_backtrace.rb (test_caller_with_nil_length):
- Test for above.
+ * 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.
-Tue Sep 10 12:39:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (ruby_cleanup): call rb_threadptr_unlock_all_locking_mutexes
+ again after finalizer. [Bug #4988] [ruby-dev:44049]
- * class.c (method_entry_i): should exclude refined methods from
- instance method list. [ruby-core:57080] [Bug #8881]
+Fri Jul 8 13:06:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Sep 10 12:05:04 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * cont.c (FIBER_MACHINE_STACK_ALLOCATION_SIZE): Fiber stack size
+ don't need to keep multiple number of sizeof(VALUE).
- * io.c (rb_f_printf): [DOC] add missing parenthesis in rdoc.
+Fri Jul 8 11:39:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Sep 10 10:08:00 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * common.mk (sudo-precheck): true command is not standard on
+ Windows.
- * NEWS: Update RubyGems note.
+Fri Jul 8 10:39:52 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Sep 10 09:51:22 2013 Eric Hodel <drbrain@segment7.net>
+ * thread_pthread.c (gvl_destroy): fix cond_t leak.
- * lib/rubygems: Update to RubyGems 2.1.0. Fixes CVE-2013-4287.
+Fri Jul 8 09:17:59 2011 Eric Hodel <drbrain@segment7.net>
- See http://rubygems.rubyforge.org/rubygems-update/CVE-2013-4287_txt.html
- for CVE information.
+ * gc.c: Improve documentation
- See http://rubygems.rubyforge.org/rubygems-update/History_txt.html#label-2.1.0+%2F+2013-09-09
- for release notes.
+Thu Jul 7 23:35:31 2011 Narihiro Nakamura <authornari@gmail.com>
- * test/rubygems: Tests for the above.
+ * 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
-Mon Sep 9 21:31:45 2013 Tanaka Akira <akr@fsij.org>
+ * configure.in: define GC_MARK_STACKFRAME_WORD that approximate
+ size of gc_mark() and gc_mark_children() stackframes.
- * 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/
+Thu Jul 7 17:55:05 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * time.c: Ditto.
+ * test/testunit/test_parallel.rb (TestParallelWorker#teardown): wait
+ the child process even if the communication pipe is broken.
- * ext/socket/ancdata.c: Ditto.
+Thu Jul 7 15:44:42 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Sep 9 16:55:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * encoding.c (rb_enc_set_index, rb_enc_associate_index): should
+ check if frozen.
- * 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]
+ * parse.y (rb_intern3), ruby.c (process_options, ruby_script):
+ defer freezing after associating encodings.
-Mon Sep 9 09:14:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jul 7 15:16:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * tool/rbinstall.rb (Gem::Specification#initialize): default date to
- RUBY_RELEASE_DATE. [ruby-core:57072] [Bug #8878]
+ * numeric.c (rb_num2ull): use own switch sentence.
+ Current implementation can't convert 18446744073709551615.
- * tool/rbinstall.rb (Gem::Specification#to_ruby): add date.
+Thu Jul 7 06:56:15 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Sun Sep 8 16:01:54 2013 Tanaka Akira <akr@fsij.org>
+ * cont.c (FIBER_STACK_FLAGS): workaround fix for r32420 on FreeBSD.
- * rational.c (f_gcd): Relax the condition to use GMP.
+Thu Jul 7 06:46:12 2011 Eric Hodel <drbrain@segment7.net>
-Sun Sep 8 13:56:38 2013 Masaki Suketa <masaki.suketa@nifty.ne.jp>
+ * benchmark/driver.rb: Add difference column to report that averages
+ across all runs of a benchmark. [Ruby 1.9 - Feature #4982]
- * ext/win32ole/win32ole.c (folevariant_initialize): check type of
- element of array.
+Thu Jul 7 06:19:38 2011 Eric Hodel <drbrain@segment7.net>
- * test/win32ole/test_win32ole_variant.rb (test_s_new_ary): ditto.
+ * lib/rubygems.rb: Reduce requires to improve `make benchmark`.
+ [#4962]
+ * lib/rubygems/specification.rb: Delay initialization of rubygems
+ until require is called.
-Sat Sep 7 21:33:10 2013 Tanaka Akira <akr@fsij.org>
+Thu Jul 7 04:31:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * math.c (math_log): Test the sign for bignums.
- (math_log2): Ditto.
- (math_log10): Ditto.
+ * 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.
-Sat Sep 7 20:25:47 2013 Tanaka Akira <akr@fsij.org>
+Thu Jul 7 00:40:16 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * math.c (math_log): Support bignums bigger than 2**1024.
- (math_log2): Ditto.
- (math_log10): Ditto.
+ * win32/win32.c (kill): check that the process exited or not before
+ terminating it. [Bug #4943]
-Sat Sep 7 15:36:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Wed Jul 6 23:13:19 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
- * vm_eval.c (vm_call0): fix prototype, the id parameter should be of
- type ID, not VALUE
+ * parse.y (opt_call_args): allow trailing comma after assoc
+ argument e.g. 'foo(bar:1,)'. fixed #3456
- * 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]
+Wed Jul 6 22:11:12 2011 Shota Fukumori <sorah@tubusu.net>
- * test/ruby/test_refinement.rb: add test
+ * test/cgi/test_cgi_header.rb(test_cgi_header_nph): Validate date in
+ "Date:" header
-Sat Sep 7 13:49:40 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Wed Jul 6 21:29:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * variable.c (classname): the name of class that has
- non class id should not be nil. This bug was introduced
- in r36577.
+ * 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.
- * test/thread/test_cv.rb: test for change.
+Wed Jul 6 21:24:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sat Sep 7 13:29:22 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+ * 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]
- * lib/find.rb (Find.find): respect the encodings of arguments.
- [ruby-dev:47530] [Feature #8657]
+Wed Jul 6 21:23:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * test/test_find.rb: add tests.
+ * cont.c (fiber_machine_stack_alloc): use MAP_STACK if it's provided.
-Sat Sep 7 10:40:32 2013 Tanaka Akira <akr@fsij.org>
+Wed Jul 6 21:22:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/socket/mkconstants.rb (TCP_FASTOPEN): Defined for TCP fast open.
- [ruby-core:57048] [Feature #8871] patch by Masaki Matsushita.
+ * cont.c (fiber_machine_stack_alloc): use MAP_FAILED instead of -1.
-Fri Sep 6 23:53:31 2013 Masaki Matsushita <glass.saga@gmail.com>
+Wed Jul 6 21:21:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * common.mk: use RUNRUBY instead of MINIRUBY because MINIRUBY can't
- require extension libraries. The patch is from nobu
- (Nobuyoshi Nakada).
+ * cont.c (fiber_machine_stack_alloc): remove unnecessary cast.
- * ext/thread/extconf.rb: for build ext/thread/thread.c.
+Wed Jul 6 18:10:13 2011 Shota Fukumori <sorah@tubusu.net>
- * include/ruby/intern.h: ditto.
+ * test/cgi/test_cgi_header.rb(test_cgi_header_nph): Adding space after
+ comma.
- * thread.c: ditto.
+ * test/cgi/test_cgi_header.rb(test_cgi_header_nph): Remove variable
+ `now`. Suppress warning.
- * lib/thread.rb: removed and replaced by ext/thread/thread.c.
+Wed Jul 6 12:18:09 2011 Shota Fukumori <sorah@tubusu.net>
- * 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/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
- * 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]
+Tue Jul 5 15:28:04 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Sep 6 22:47:12 2013 Tanaka Akira <akr@fsij.org>
+ * parse.y (parser_here_document): should dispatch heredoc_end
+ scanner event on an empty here document. fixed Bug#4543.
- * configure.in: Define ac_cv_func_clock_getres to yes for mingw*.
+Tue Jul 5 13:49:26 2011 Yusuke Endoh <mame@tsg.ne.jp>
-Fri Sep 6 21:04:10 2013 Tanaka Akira <akr@fsij.org>
+ * addr2line.c: fix r32407 to check HAVE_ALLOCA_H.
- * 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.
+Tue Jul 5 14:05:43 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * internal.h (rb_gcd_normal): Declared.
- (rb_gcd_gmp): Ditto.
+ * 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]
- * ext/-test-/rational: New directory.
+ * lib/webrick/httpauth/digestauth.rb (initialize):
+ Because of above, opera_hack is useless and removed.
- * test/-ext-/rational: New directory.
+Tue Jul 5 01:30:01 2011 Yusuke Endoh <mame@tsg.ne.jp>
-Fri Sep 6 14:23:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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.
- * win32/win32.c (clock_getres): required as well as clock_gettime().
- [ruby-dev:47699] [Bug #8869]
+Tue Jul 5 01:24:26 2011 Yusuke Endoh <mame@tsg.ne.jp>
-Fri Sep 6 11:45:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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.
- * transcode.c (rb_econv_append): new function to append a string data
- with converting its encoding. split from rb_econv_substr_append.
+Tue Jul 5 01:22:46 2011 Yusuke Endoh <mame@tsg.ne.jp>
-Fri Sep 6 02:37:22 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * addr2line.c: include <alloca.h> to fix a build issue on Solaris.
- * ext/psych/lib/psych/visitors/yaml_tree.rb: use double quotes when
- strings start with special characters.
- https://github.com/tenderlove/psych/issues/157
+Tue Jul 5 00:49:05 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * test/psych/test_string.rb: test for change.
+ * ext/coverage/coverage.c: resurrect r32071 + add GC guard for
+ rb_coverages. [ruby-core:37352] [Bug #4927]
+ [ruby-core:36539] [Feature #4796]
-Fri Sep 6 00:05:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/coverage/test_coverage.rb resurrect r32071.
- * class.c (rewrite_cref_stack): remove recursion.
+Mon Jul 4 22:24:46 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu Sep 5 18:05:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * thread_pthread.c (get_stack): For NetBSD/FreeBSD, use
+ pthread_attr_getstack() if possible. and, remove an assumption
+ of stack growing direction.
- * string.c (fstring_cmp): take string encoding into account when
- comparing fstrings [ruby-core:57037] [Bug #8866]
+Mon Jul 4 20:42:31 2011 Yusuke Endoh <mame@tsg.ne.jp>
- * test/ruby/test_string.rb: add test
+ * 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]
-Thu Sep 5 17:25:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/coverage/test_coverage.rb: ditto.
- * string.c (rb_fstring, rb_str_free): use st_data_t instead of VALUE.
+Mon Jul 4 07:14:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * string.c (rb_fstring): get rid of duplicating already frozen object.
+ * thread_pthread.c (get_stack): the return address of get_stack
+ must be the highest address of the current thread's stack.
-Thu Sep 5 14:01:22 2013 Eric Hodel <drbrain@segment7.net>
+Mon Jul 4 06:37:22 2011 Koichi Sasada <ko1@atdot.net>
- * lib/optparse.rb: The Integer acceptable now allows binary and
- hexadecimal numbers per the documentation. [ruby-trunk - Bug #8865]
+ * 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]
- DecimalInteger, OctalInteger, DecimalNumeric now validate their input
- before converting to a number. [ruby-trunk - Bug #8865]
+ * thread_win32.c (rb_reserved_fd_p): added (return 0 for any fds).
- * test/optparse/test_acceptable.rb: Tests for the above, tests for all
- numeric acceptables for existing behavior.
+ * io.c (rb_io_initialize): raise ArgumentError if given fd is reserved by Ruby.
-Thu Sep 5 13:49:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Sun Jul 3 23:43:56 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * include/ruby/ruby.h: add RSTRING_FSTR flag
+ * ext/extmk.rb (extmake): suppresses outputs from extconf.rb.
+ (extmake) warns a failure in extconf.rb.
- * internal.h: add rb_fstring() prototype
+Sun Jul 3 13:44:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (rb_fstring): deduplicate frozen string literals
+ * array.c (ary_reject_bang): should not remove elements which are
+ not yielded. [Bug #2545]
- * string.c (rb_str_free): delete fstrings from frozen_strings table when
- they are GC'd
+Sun Jul 3 06:10:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * string.c (Init_String): initialize frozen_strings table
+ * 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]
-Thu Sep 5 12:48:00 2013 Kenta Murata <mrkn@cookpad.com>
+Sun Jul 3 04:50:08 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * configure.in (with_gmp): set with_gmp no if it is empty.
+ * 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.
-Thu Sep 5 10:41:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Sat Jul 02 08:59:20 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * vm_insnhelper.c (vm_getivar): use class sequence to check class
- identity, instead of pointer + vm state
+ * 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]
- * vm_insnhelper.c (vm_setivar): ditto
+Sat Jul 2 07:17:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Sep 5 08:20:58 2013 Tanaka Akira <akr@fsij.org>
+ * array.c (rb_ary_reject_bang, rb_ary_delete_if): rejected
+ elements should be removed. fixed [Bug #2545]
- * 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.
+Sat Jul 2 01:57:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * internal.h (rb_big_divrem_gmp): Declared.
+ * NEWS: remove a description of Kernel#respond_to? because it has
+ been reverted at revision 28564.
-Thu Sep 5 06:22:42 2013 Tanaka Akira <akr@fsij.org>
+Sat Jul 2 00:58:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * bignum.c (bary_divmod_normal): Reduce temporary array allocations.
+ * NEWS: describe a change of multiplication of Bignum.
-Thu Sep 5 02:17:06 2013 Tanaka Akira <akr@fsij.org>
+Fri Jul 1 18:52:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (rb_big_divrem_normal): Add GC guards.
+ * 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.
-Thu Sep 5 00:38:32 2013 Tanaka Akira <akr@fsij.org>
+ * benchmark/bm_io_file_create.rb: ditto.
+ * benchmark/bm_io_file_read.rb: ditto.
+ * benchmark/bm_io_file_write.rb: ditto.
- * bignum.c (rb_big_divrem_normal): New function.
+ * 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.
- * internal.h (rb_big_divrem_normal): Declared.
+ * benchmark/bm_vm_thread_mutex1.rb: ditto.
+ * benchmark/bm_vm_thread_mutex2.rb: ditto.
+ * benchmark/bm_vm_thread_mutex3.rb: ditto.
- * ext/-test-/bignum/div.c: New file.
+ * 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.
- * test/-ext-/bignum/test_div.rb: New file.
+ * 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.
-Thu Sep 5 00:08:44 2013 Tanaka Akira <akr@fsij.org>
+ * benchmark/bm_vm_thread_alive_check1.rb: cleanup.
- * bignum.c (bigdivrem_normal): Removed.
- (bary_divmod_normal): New function.
- (bary_divmod): Use bary_divmod_normal.
- (bigdivrem): Use bary_divmod_normal.
+Fri Jul 1 15:23:00 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-Wed Sep 4 23:02:12 2013 Tanaka Akira <akr@fsij.org>
+ * lib/matrix: Add LUP decomposition
- * bignum.c (bigdivrem): Useless declaration removed.
+Fri Jul 1 15:21:14 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-Wed Sep 4 22:56:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/matrix.rb: Allow non integer exponents for Matrix#**
- * numeric.c (NUM_STEP_GET_INF): split from NUM_STEP_SCAN_ARGS(), since
- inf is not used in num_step_size().
+Fri Jul 1 15:13:25 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-Wed Sep 4 20:22:43 2013 Tanaka Akira <akr@fsij.org>
+ * lib/matrix: Add Eigenvalue Decomposition
- * bignum.c (bigdivrem_normal): Add assertions.
+Fri Jul 1 15:10:22 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
-Wed Sep 4 19:18:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/matrix: Add Matrix#round
- * internal.h (vm_state_version_t): prefer LONG_LONG to uint64_t.
+Fri Jul 1 11:41:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Sep 4 16:28:14 2013 Nobuyoshi Nakada <nobu@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]
- * internal.h (vm_state_version_t): use uint64_t when it is larger than
- LONG_LONG, and fallback to unsigned long.
+Fri Jul 1 11:07:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Sep 4 15:37:05 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * thread.c (do_select): fix memory leak.
+ Patch by Eric Wong. Thank you! [Bug #4953] [ruby-core:37702]
- * enc/trans/utf8_mac-tbl.rb: fix r42789.
- Fix conversion table and logic. [ruby-dev:47680]
+Fri Jul 1 08:21:28 2011 Koichi Sasada <ko1@atdot.net>
-Wed Sep 4 14:08:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * vm_insnhelper.c (vm_getivar): check vm state version
+ to invalidate inline cache (ivar index).
+ fixes Bug #4926.
- * 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.
+ * vm_insnhelper.c (vm_setivar): ditto.
- [ruby-core:55053] [Feature #8426] [GH-387]
+Fri Jul 1 08:03:15 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Sep 4 11:13:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * error.c, thread_pthread.c (WRITE_CONST): suppress warnings
+ `ignoring return value'.
- * 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]
+Fri Jul 1 06:41:36 2011 Koichi Sasada <ko1@atdot.net>
-Wed Sep 4 11:11:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread.c (rb_threadptr_check_signal): only wake up main thread.
- * configure.in (SOLIBS): LIBRUBY_SO also needs linking with gmp, to
- run worker processes in test-all on non-ELF platforms.
+ * thread.c (rb_threadptr_execute_interrupts_common): check signal
+ delivery if it is main thread.
+ fixes [ruby-dev:44005] [Ruby 1.9 - Bug #4950]
-Tue Sep 3 23:01:41 2013 Kouhei Sutou <kou@cozmixng.org>
+ * bootstraptest/test_fork.rb: add a test for above.
- * test/rexml/parser/test_tree.rb
- (TestTreeParser::TestInvalid#test_unmatched_close_tag):
- Compute expected value from test value.
+ * signal.c (rb_get_next_signal): skip if signal_buff is empty.
+ (check signal_buff.size first)
-Tue Sep 3 22:59:58 2013 Kouhei Sutou <kou@cozmixng.org>
+ * vm_core.h: remove unused variable rb_thread_t::exec_signal.
- * 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.
+ * thread.c (rb_thread_check_trap_pending): check
+ rb_signal_buff_size() because rb_thread_t::exec_signal
+ is no longer available.
-Tue Sep 3 22:57:57 2013 Kouhei Sutou <kou@cozmixng.org>
+Fri Jul 1 03:28:25 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
- * test/rexml/parser/test_tree.rb: Fix test name to describe test
- content.
+ * class.c (Init_class_hierarchy): should name BasicObject
+ explicitly.
-Tue Sep 3 22:54:46 2013 Kouhei Sutou <kou@cozmixng.org>
+ * variable.c (rb_const_defined_0): should not check for
+ superclasses as const_get.
- * 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.
+Fri Jul 1 03:24:03 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Sep 3 22:03:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/date/date_core.c: mathn is still alive (should die soon).
- * string.c (rb_enc_str_new_cstr): new function to create a string from
- the C-string pointer with the specified encoding.
+Thu Jun 30 23:50:00 2011 Kenta Murata <mrkn@mrkn.jp>
-Tue Sep 3 21:41:37 2013 Akira Matsuda <ronnie@dio.jp>
+ * misc/ruby-mode.el (ruby-indent-beg-re): Fix broken regular
+ expression. Fixes #4546
- * eval.c (Init_eval): Make Module#include and Module#prepend public
- [Feature #8846]
+Thu Jun 30 23:43:30 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * test/ruby/test_module.rb (class TestModule): Test for above
+ * 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]
-Tue Sep 3 21:35:19 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jun 30 22:38:58 2011 Koichi Sasada <ko1@atdot.net>
- * thread_pthread.c (sys/dyntune.h): for gettune().
+ * benchmark/bm_vm2_defined_method.rb: added to measure performance of
+ bmethod (method defined by define_method()).
- * thread_pthread.c (hpux_attr_getstackaddr): fix missing *.
- [ruby-core:56983] [Feature #8793]
+Thu Jun 30 22:17:04 2011 Koichi Sasada <ko1@atdot.net>
-Tue Sep 3 20:12:46 2013 Tanaka Akira <akr@fsij.org>
+ * vm_insnhelper.c (vm_call_bmethod): fix to hook call/return event
+ for methods defined by define_method(). fixes Bug #4613.
- * 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.
+ * 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.
- * internal.h (rb_str2big_gmp): Declared.
+ * test/ruby/test_settracefunc.rb: add a test for above.
-Tue Sep 3 19:44:40 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Thu Jun 30 21:18:35 2011 Yutaka Kanemoto <kanemoto@ruby-lang.org>
- * ext/win32/lib/win32/registry.rb (Win32::Registry#values): added.
- [Feature #7763] [ruby-core:51783]
+ * configure.in: Add warnflags for XL/C on AIX during configure
+ to avoid [Bug #3971]. See [ruby-core:32859]
-Tue Sep 3 18:26:00 2013 Akinori MUSHA <knu@iDaemons.org>
+Thu Jun 30 21:16:04 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * misc/inf-ruby.el (inf-ruby-keys, run-ruby): Add magic autoload
- comments.
+ * ext/date/date_core.c (m_ajd): refers a constant.
- * misc/rdoc-mode.el (rdoc-mode): Ditto.
+Thu Jun 30 20:54:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * misc/ruby-electric.el (ruby-electric-mode): Ditto.
+ * ext/io/console/io-console.gemspec: spin-off gem for 1.9.2.
- * misc/ruby-style.el (ruby-style-c-mode): Ditto.
+Thu Jun 30 20:36:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Sep 3 17:06:15 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/date/date_core.c: trivial changes.
- * test/ruby/test_rubyoptions.rb
- (TestRubyOptions::SEGVTest::ExpectedStderr): the URL was changed at
- r42800.
+Thu Jun 30 20:12:36 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Sep 3 14:48:25 2013 Zachary Scott <e@zzak.io>
+ * test/ruby/test_module.rb: tests for [Bug #3422] and [Bug #3423].
- * lib/thread.rb: [DOC] CV#wait typo by @avdi [Fixes GH-386]
- https://github.com/ruby/ruby/pull/386
+Thu Jun 30 20:03:39 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Sep 3 14:37:53 2013 Zachary Scott <e@zzak.io>
+ * ext/date/date_core.c: modified doc.
- * error.c: [DOC] Update bug tracker url by @ScotterC [Fixes GH-390]
- https://github.com/ruby/ruby/pull/390
+Thu Jun 30 19:09:19 2011 Koichi Sasada <ko1@atdot.net>
-Tue Sep 3 12:45:23 2013 Tanaka Akira <akr@fsij.org>
+ * thread_pthread.c (thread_timer): ignore unknown errno.
+ (we observed that select(2) was canceled by errno=514 on
+ boron == Linux/Xen environment)
- * bignum.c (rb_str2big_poweroftwo): New function.
- (rb_str2big_normal): Ditto.
- (rb_str2big_karatsuba): Ditto.
+Thu Jun 30 17:33:25 2011 Koichi Sasada <ko1@atdot.net>
- * internal.h (rb_str2big_poweroftwo): Declared.
- (rb_str2big_normal): Ditto.
- (rb_str2big_karatsuba): Ditto.
+ * ext/objspace/objspace.c (ObjectSpace.count_tdata_objects):
+ Fix rdoc. Fixes Bug #3892.
- * ext/-test-/bignum/str2big.c: New file.
+ * 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.
- * test/-ext-/bignum/test_str2big.rb: New file.
+ * internal.h: export rb_objspace_data_type_name().
- * ext/-test-/bignum/depend: Add the dependency for str2big.c.
+Thu Jun 30 17:25:08 2011 Koichi Sasada <ko1@atdot.net>
-Tue Sep 3 12:09:08 2013 Tanaka Akira <akr@fsij.org>
+ * thread_pthread.c (ping_signal_thread_list, thread_timer):
+ fix to keep polling state if there are any ping-tasks.
- * process.c (rb_clock_gettime): Support times() based monotonic clock.
- (rb_clock_getres): Ditto.
+Thu Jun 30 12:25:34 2011 Koichi Sasada <ko1@atdot.net>
-Tue Sep 3 12:03:02 2013 Tanaka Akira <akr@fsij.org>
+ * 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).
- * bignum.c (str2big_scan_digits): Extracted from rb_cstr_to_inum.
+Thu Jun 30 09:36:37 2011 Eric Hodel <drbrain@segment7.net>
-Tue Sep 3 11:23:57 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/weakref.rb: Attach documentation to WeakRef and add missing
+ documentation
- * 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.
+Thu Jun 30 09:30:14 2011 Eric Hodel <drbrain@segment7.net>
-Tue Sep 3 11:00:28 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/yaml.rb: Document toplevel YAML and YAML::ENGINE to describe
+ Psych vs Syck engines.
- * win32/win32.c (do_select): constify timeout.
+Thu Jun 30 09:21:52 2011 Eric Hodel <drbrain@segment7.net>
- * win32/win32.c (rb_w32_select_with_thread): constify 10ms wait and
- 0ms wait structs.
+ * lib/cmath.rb: Hide handle_no_method_error from RDoc.
+ * error.c: Document or hide undocumented error classes.
-Tue Sep 3 10:03:42 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Thu Jun 30 07:49:04 2011 Eric Hodel <drbrain@segment7.net>
- * 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".
+ * hash.c: Document ENV
-Tue Sep 3 08:20:46 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Jun 30 06:37:43 2011 Nobuyoshi Nakada <nobu@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]
+ * 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.
-Tue Sep 3 07:49:25 2013 Akinori MUSHA <knu@iDaemons.org>
+Thu Jun 30 06:32:21 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * lib/drb/drb.rb: Hide deprecated toplevel DRb constants.
- * test/ruby/test_float.rb (TestFloat#test_num2dbl): Revert.
+Thu Jun 30 06:17:02 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * test/ruby/test_numeric.rb (TestNumeric#test_step): Fix test
- cases for the above change.
+ * lib/cmath.rb (CMath.log): second argument: b can be nil.
-Tue Sep 3 07:39:58 2013 Tanaka Akira <akr@fsij.org>
+Thu Jun 30 06:23:28 2011 Eric Hodel <drbrain@segment7.net>
- * bignum.c (bytes_2comp): Define it only for little endian
- environment.
+ * thread.c (ruby_thread_s_pass): Fix typo.
-Tue Sep 3 07:31:29 2013 Akinori MUSHA <knu@iDaemons.org>
+Thu Jun 30 06:16:53 2011 Eric Hodel <drbrain@segment7.net>
- * numeric.c (NUM_STEP_SCAN_ARGS): Numeric#step should raise
- TypeError if a non-numeric parameter is given.
+ * lib/rdoc: Update to RDoc 3.8 which contains fixes for documentation
+ in trunk.
- * test/ruby/test_float.rb (TestFloat#test_num2dbl): Allow nil as
- step, as with the keyword argument.
+Thu Jun 30 02:53:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * test/ruby/test_numeric.rb (TestNumeric#test_step): Add tests for
- nil as step or limit.
+ * thread.c (rb_threadptr_execute_interrupts_common): remove
+ meaningless native_thread_yield(). It never close a race.
-Tue Sep 3 07:28:49 2013 Tanaka Akira <akr@fsij.org>
+Thu Jun 30 02:41:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * thread.c (rb_thread_schedule_limits): minor optimization.
+ eliminate machine context saving when running time is enough small.
-Tue Sep 3 03:17:26 2013 Koichi Sasada <ko1@atdot.net>
+Thu Jun 30 02:28:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * 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.
- * test/ruby/test_super.rb: add a test for above.
+ * 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.
-Mon Sep 2 23:46:29 2013 Akinori MUSHA <knu@iDaemons.org>
+ * thread.c (rb_thread_sleep): adapt the renaming.
+ * thread.c (rb_threadptr_execute_interrupts): ditto.
+ * thread.c (rb_thread_execute_interrupts): ditto.
- * 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]
+Thu Jun 30 01:31:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * numeric.c (num_step): Optimize for infinite loop.
+ * 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.
-Mon Sep 2 22:55:59 2013 Tanaka Akira <akr@fsij.org>
+Thu Jun 30 00:54:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (ISDIGIT): Unused macro removed.
+ * 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]
-Mon Sep 2 22:49:15 2013 Tanaka Akira <akr@fsij.org>
+Thu Jun 30 00:49:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (str2big_poweroftwo): Extracted from rb_cstr_to_inum.
- (str2big_normal): Ditto.
- (str2big_karatsuba): Ditto.
+ * 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]
-Mon Sep 2 14:39:29 2013 Akinori MUSHA <knu@iDaemons.org>
+Thu Jun 30 00:43:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ruby.c (Process#setproctitle): [DOC] Fix and improve rdoc.
+ * 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]
- * ruby.c (Process#argv0): [DOC] Improve rdoc.
+Thu Jun 30 00:30:15 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-Mon Sep 2 14:15:00 2013 Kenta Murata <mrkn@cookpad.com>
+ * lib/cmath.rb: make same exception for Math. fix [Bug #3137].
- * NEWS: fix description of number literal suffixes.
+Thu Jun 30 00:03:20 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-Mon Sep 2 14:01:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * lib/irb/completion.rb: complement correctly string literal. fix
+ [Bug #1145].
- * test/rake/test_rake_rules.rb: add space after string literal to
- prevent conflict with string options syntax "foo"opts
+Wed Jun 29 23:42:51 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * test/rss/rss-assertions.rb: ditto
+ * ext/date/date_core.c: avoided using timev.
+ * ext/date/date_strftime.c: ditto.
+ * ext/date/date_tmx.h: ditto.
-Mon Sep 2 12:28:38 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 29 23:17:57 2011 WATANABE Hirofumi <eban@ruby-lang.org>
- * test/ruby/test_bignum.rb (test_interrupt_during_to_s): Disable it
- when GMP is used.
+ * ext/openssl/ossl.h (OPENSSL_SYS_WIN32): support for mingw(msys).
-Mon Sep 2 07:02:10 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 29 23:09:14 2011 WATANABE Hirofumi <eban@ruby-lang.org>
- * bignum.c (Init_Bignum): Define Bignum::GMP_VERSION when GMP is used.
+ * ext/tk/extconf.rb (intptr_t, uintptr_t): support for the latest ActiveTcl with mingw.
-Mon Sep 2 01:46:14 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 29 22:49:10 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
- * bignum.c (big2str_generic): Reduce arguments.
- (big2str_gmp): Ditto.
- (rb_big2str1): Follow the above change.
+ * lib/irb/cmd/help.rb: support RDoc 3.7. fix [Bug #3760].
-Mon Sep 2 00:08:08 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 29 22:04:14 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * 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.
+ * 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.
-Sun Sep 1 23:30:47 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 29 13:55:36 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
- * bignum.c (GMP_BIG2STR_DIGITS): New constant.
- (big2str_gmp): New function.
- (rb_big2str1): Use big2str_gmp for big bignums.
+ * 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]
- * internal.h (rb_big2str_gmp): Declared.
+Wed Jun 29 12:07:27 2011 Eric Hodel <drbrain@segment7.net>
- * ext/-test-/bignum/big2str.c (big2str_gmp): New method.
+ * 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.
-Sun Sep 1 22:37:51 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 29 10:13:12 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * bignum.c (bary_mul_gmp): Use mpz_init and mpz_clear instead of
- mpz_inits and mpz_clears.
- Older GMP don't have them.
+ * lib/matrix.rb: Matrix.zero can build rectangular matrices.
+ Vector#r should be called #magnitude
-Sun Sep 1 21:17:54 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 29 10:11:08 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * test/net/http/test_http.rb (test_bind_to_local_port): Choose an open
- port more reliably.
+ * lib/matrix.rb: Add Matrix#diagonal?, hermitian?, normal?,
+ orthogonal?
+ permutation?, symmetric?, {lower|upper}triangular?, unitary?, zero?
-Sun Sep 1 20:32:40 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 29 10:09:35 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * 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.
+ * lib/matrix.rb: Specialize Matrix#find_index to return [row, col]
+ and accept the same optional argument as #each
- * internal.h (rb_big2str_poweroftwo): Declared.
- (rb_big2str_generic): Ditto.
+Wed Jun 29 10:07:32 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * ext/-test-/bignum/big2str.c: New file.
+ * lib/matrix.rb: Matrix#each{_with_index} can iterate over a subset
+ of the Matrix
- * test/-ext-/bignum/test_big2str.rb: New file.
+Wed Jun 29 06:21:02 2011 Koichi Sasada <ko1@atdot.net>
-Sun Sep 1 15:21:21 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * bignum.c (big2str_2bdigits): Renamed from big2str_orig.
+Wed Jun 29 06:09:54 2011 Koichi Sasada <ko1@atdot.net>
-Sun Sep 1 13:02:24 2013 Tanaka Akira <akr@fsij.org>
+ * 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]
- * bignum.c: Remove BITSPERDIG >= INT_MAX test. The static assertion,
- SIZEOF_BDIGITS <= sizeof(BDIGIT) is enough.
+ * thread_pthread.c: use rb_async_bug_errno().
+ And replace all fprintf() to write().
-Sun Sep 1 11:38:26 2013 Tanaka Akira <akr@fsij.org>
+ * internal.h (rb_async_bug_errno): add decl. of above func.
- * bignum.c (maxpow_in_bdigit): Removed.
+Tue Jun 28 23:46:08 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-Sun Sep 1 10:30:42 2013 Tanaka Akira <akr@fsij.org>
+ * lib/tracer.rb: count only non-internal libraries in stack trace,
+ ignoring custom_require.
- * numeric.c (rb_fix_bit_length): Moved from bignum.c.
+Tue Jun 28 21:44:58 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-Sun Sep 1 09:55:45 2013 Tanaka Akira <akr@fsij.org>
+ * lib/irb/ruby-lex.rb: recognize '\char' in ruby statement.
- * internal.h (bit_length): Moved from bignum.c.
- (nlz_int): Ditto.
- (nlz_long): Ditto.
- (nlz_long_long): Ditto.
- (nlz_int128): Ditto.
+Tue Jun 28 20:39:29 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Sun Sep 1 03:32:22 2013 Tanaka Akira <akr@fsij.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.
- * bignum.c (bit_length): Renamed from bitsize.
+Tue Jun 28 19:23:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun Sep 1 00:07:09 2013 Tanaka Akira <akr@fsij.org>
+ * signal.c: Now, USE_TRAP_SIGMASK depend on HAVE_PTHREAD_SIGMASK.
+ The code have already depended on pthread_sigmask since r27464.
- * bignum.c (rb_big_bit_length): New method.
- (rb_fix_bit_length): Ditto.
- [ruby-core:56247] [Feature #8700]
+Tue Jun 28 15:09:21 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Aug 31 22:18:29 2013 Tanaka Akira <akr@fsij.org>
+ * lib/benchmark.rb: merge eregon/benchmark.
+ https://github.com/eregon/ruby/tree/benchmark
+ patched by Benoit Daloze. [ruby-core:37593] [Bug #4940]
- * process.c (rb_clock_getres): New method.
- (timetick2dblnum_reciprocal): New function.
+ * lib/benchmark (Benchmark#bmbm): bmbm should be consistent with bm
+ for the return value.
- * configure.in: Check clock_getres.
+ * 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.
- [ruby-core:56780] [Feature #8809] accepted as a CRuby feature at
- DevelopersMeeting20130831Japan
- https://bugs.ruby-lang.org/projects/ruby/wiki/DevelopersMeeting20130831Japan
+ * 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.
-Sat Aug 31 21:02:07 2013 Tanaka Akira <akr@fsij.org>
+ * 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)
- * 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.
+ * 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
- * configure.in: Detect GMP.
+Tue Jun 28 13:41:51 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- [ruby-core:56658] [Feature #8796]
+ * thread_win32.c (native_stop_timer_thread): fixed commit miss of
+ r32244. grep sources before changing the signature of a function.
-Sat Aug 31 15:03:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Tue Jun 28 11:49:14 2011 Koichi Sasada <ko1@atdot.net>
- * compile.c (NODE_MATCH3): pass CALL_INFO to opt_regexpmatch2
+ * 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.
- * insns.def (opt_regexpmatch2): use CALL_SIMPLE_METHOD to call =~ if
- the receiver is not a T_STRING [Bug #8847] [ruby-core:56916]
+Tue Jun 28 11:45:30 2011 Eric Hodel <drbrain@segment7.net>
-Sat Aug 31 14:07:11 2013 Tanaka Akira <akr@fsij.org>
+ * 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
- * lib/securerandom.rb (random_bytes): Use Process.clock_gettime.
+Tue Jun 28 11:17:28 2011 Eric Hodel <drbrain@segment7.net>
-Sat Aug 31 00:25:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rdoc: Update to RDoc 3.7 (final)
+ * NEWS: ditto
- * include/ruby/encoding.h (rb_{ascii8bit,utf8,usascii}_encindex): get
- rid of conflict with macros defined in internal.h.
+Tue Jun 28 10:18:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Aug 30 22:37:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * process.c (rb_daemon): fix wrong #endif position.
- * thread_pthread.c (native_thread_init_stack): wait the creator thread
- to fill machine stack info, if get_stack_of() is available.
+Tue Jun 28 07:50:32 2011 Eric Hodel <drbrain@segment7.net>
- * thread_pthread.c (native_thread_create): fill the created thread
- stack info after starting, if get_stack_of() is available.
+ * object.c (Init_Object): Teach RDoc what Init_class_hierarchy does to
+ hook up ri for BasicObject, Object, Module and Class.
- * thread_pthread.c (native_thread_create): define attr only if it is
- used, and merge pthread_create() calls.
+Tue Jun 28 05:03:32 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * thread_pthread.c (get_main_stack): separate function to get stack of
- main thread.
+ * thread.c (rb_thread_local_aref): RDoc fix. Thread#[] example
+ had a race. See #4480.
-Thu Aug 29 18:05:33 2013 Koichi Sasada <ko1@atdot.net>
+Tue Jun 28 01:22:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * struct.c (rb_struct_define_without_accessor_under): added.
- This function is similar to rb_define_class_under() against
- rb_define_class().
+ * ext/bigdecimal/bigdecimal.c (BigMath_s_log): move BigMath.log from
+ bigdecimal/math.rb.
- * include/ruby/intern.h: add a declaration of this function.
+ * ext/bigdecimal/lib/bigdecimal/math.rb: ditto.
-Thu Aug 29 17:03:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/bigdecimal/test_bigdecimal.rb: move test for BigMath.log from
+ test/bigdecimal/test_bigmath.rb.
- * 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]
+ * test/bigdecimal/test_bigmath.rb: ditto.
-Thu Aug 29 05:35:58 2013 Eric Hodel <drbrain@segment7.net>
+Tue Jun 28 01:19:52 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
- * 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.
+ * lib/irb/ruby-lex.rb: fix [Bug #4232].
-Thu Aug 29 02:40:45 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+Tue Jun 28 00:14:13 2011 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
- * ext/psych/lib/psych/scalar_scanner.rb: invalid floats should be
- treated as strings.
- https://github.com/tenderlove/psych/issues/156
+ * lib/drb/drb.rb: fix [Bug #4409]. add DRbServer#here?.
- * test/psych/test_string.rb: test for change
+ * test/drb/test_drb.rb: ditto.
-Wed Aug 28 17:20:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/drb/drbtest.rb: ditto.
- * 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]
+ * test/drb/ut_eq.rb: ditto.
-Wed Aug 28 11:24:20 2013 Michal Rokos <michal@rokos.cz>
+Tue Jun 28 00:08:43 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
- * configure.in (sys/pstat.h): fix missing header check for
- missing/setproctitle.c on HP-UX. [ruby-core:56644] [Bug #8792]
+ * lib/irb/workspace.rb: fix BUG#4793.
-Wed Aug 28 04:54:33 2013 Eric Hodel <drbrain@segment7.net>
+Mon Jun 27 22:06:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/openssl/ossl_ssl.c (ossl_ssl_read): Replace duplicate
- wait_writable with wait_readable.
+ * thread_pthread.c (consume_communication_pipe): don't use C99
+ style variable length array.
-Tue Aug 27 17:18:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jun 27 22:04:27 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * lib/timeout.rb (Timeout#timeout): skip rescue clause only when no
- exception class is given.
+ * thread_pthread.c (consume_communication_pipe): change return
+ type to void. caller doesn't use it.
-Tue Aug 27 17:02:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jun 27 21:29:50 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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]
+ * thread_pthread.h (rb_global_vm_lock_struct): add volatile to
+ gvl->waiting. now thread_timer() access it w/o lock.
-Tue Aug 27 17:02:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jun 27 21:16:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * io.c (copy_stream_body): move common open flags.
+ * thread_pthread.c: s/__gvl_acquire/gvl_acquire_common/ and
+ s/__gvl_release/gvl_release_common/.
-Tue Aug 27 16:56:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jun 27 11:41:47 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * enumerator.c (enumerator_size): use rb_check_funcall() instead of
- respond_to? and call.
+ * thread_pthread.c (rb_thread_create_timer_thread):
+ the type of return value of write(2) is ssize_t.
- * enumerator.c (enumerator_each): ensure that argument array size
- does not overflow at appending.
+Mon Jun 27 09:57:02 2011 Koichi Sasada <ko1@atdot.net>
-Tue Aug 27 16:46:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread_pthread.c (rb_thread_create_timer_thread):
+ Fixes missing initialization of oflags.
- * array.c (rb_ary_index, rb_ary_rindex): use optimized equality to
- improve performance. [Feature #8820]
+Mon Jun 27 09:07:42 2011 Koichi Sasada <ko1@atdot.net>
- * vm_insnhelper.c (rb_equal_opt): optimized equality function.
+ * 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.
-Tue Aug 27 16:11:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread_pthread.c (rb_thread_wakeup_timer_thread): add a function.
+ This function wakes up the timer thread using communication-pipe.
- * vm_insnhelper.c (opt_eq_func): use RBASIC_CLASS() instead of HEAP_CLASS_OF().
+ * thread.c (rb_thread_stop_timer_thread): add a parameter which
+ specify closing communication-pipe or not.
- * 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.
+ * thread.c (rb_thread_terminate_all): do not stop timer thread here
+ (ruby_cleanup() terminate timer thread).
-Tue Aug 27 16:08:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * signal.c: wake up timer thread using
+ rb_thread_wakeup_timer_thread() from signal handler.
- * vm_eval.c (rb_check_funcall, rb_check_funcall_with_hook): constify
- argv.
+ * eval.c (ruby_cleanup): use rb_thread_stop_timer_thread(1).
-Tue Aug 27 13:03:33 2013 Koichi Sasada <ko1@atdot.net>
+ * process.c: use rb_thread_stop_timer_thread(0)
+ (reuse communication-pipe).
- * ext/stringio/stringio.c (strio_read_nonblock): declare local
- variables at the first of function.
+ * thread_win32.c (rb_thread_wakeup_timer_thread): add a dummy
+ function.
-Tue Aug 27 11:51:37 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * vm_core.h: add and fix decl. of functions.
- * enumerator.c: Allow Enumerator size argument to be any callable.
- Patch by Avdi Grimm. [bug #8641] [ruby-core:56032] [fix GH-362]
+Mon Jun 27 08:01:19 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * test/ruby/test_enumerator.rb: Test for above
+ * ext/date/date_parse.c: should use ALLOCA_N.
-Tue Aug 27 11:46:31 2013 Koichi Sasada <ko1@atdot.net>
+Mon Jun 27 01:34:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (gc_profile_clear): do rest_sweep() before clearing
- profile.current_record.
+ * 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
-Tue Aug 27 07:35:05 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+Mon Jun 27 00:44:53 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * 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
+ * parse.y (rb_parser_end_seen_p): fix documentation about return
+ value. patched by Sho Hashimoto. [Bug #4511]
-Tue Aug 27 05:24:34 2013 Eric Hodel <drbrain@segment7.net>
+Mon Jun 27 00:40:47 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * lib/rubygems: Import RubyGems 2.1.0 Release Candidate
- * test/rubygems: ditto.
+ * hash.c (rb_hash_reject): add documentation that Hash#reject
+ without block returns enumerator.
+ patched by Michael Edgar [Bug #4847] [ruby-core:36800]
-Mon Aug 26 16:24:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jun 26 23:49:21 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * parse.y (parser_nextc): warn carriage return in middle of line.
- [ruby-core:56240] [Feature #8699]
+ * test/date/test_switch_hitter.rb: added a test.
-Mon Aug 26 15:27:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ Sun Jun 26 22:21:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * lib/timeout.rb (Timeout#timeout): should not be caught by rescue
- clause. [Bug #8730]
+ * ext/date/date_core.c: refactoring.
-Mon Aug 26 14:44:26 2013 Koichi Sasada <ko1@atdot.net>
+Sun Jun 26 18:03:30 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
- * array.c (rb_ary_splice): use RARRAY_PTR_USE() without WB because
- there are not new relations.
+ * parse.y: comma at the end of line is no longer allowed.
+ A patch from Yukihiro Matsumoto <matz AT ruby-lang.org>.
+ (fixed #3456).
- * enum.c (enum_sort_by): ditto.
+Sun Jun 26 13:35:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * struct.c (setup_struct): use RARRAY_RAWPTR().
+ * 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.
- * vm_eval.c (yield_under): ditto.
+ <before>
+ -- See Crash Report log file under ~/Library/Logs/CrashReporter or ---------
+ -- /Library/Logs/CrashReporter, for the more detail of ---------------------
+ -- C level backtrace information -------------------------------------------
- * ext/pathname/pathname.c (path_entries): use RARRAY_AREF().
+ <after>
+ -- C level backtrace information -------------------------------------------
- * ext/pathname/pathname.c (path_s_glob): ditto.
+ See Crash Report log file under ~/Library/Logs/CrashReporter or
+ /Library/Logs/CrashReporter, for the more detail of.
-Mon Aug 26 13:11:10 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+Sun Jun 26 10:08:28 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * array.c (ary_ensure_room_for_push): fix typo in r42658.
+ * ext/openssl/extconf.rb
+ * ext/openssl/ossl_missing.h/.c: add ASN1_put_eoc if missing.
-Mon Aug 26 12:37:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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]
- * template/sizes.c.tmpl: generate automatically by extracting
- RUBY_CHECK_SIZEOF from configure.in.
+Sun Jun 26 01:00:15 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Aug 26 10:16:59 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * ext/date/date_core.c (date_strftime_internal): removed meaningless braces.
+ * ext/date/date_core.c (gengo): the value should be int.
- * process.c (gcd_timetick_int): Renamed from gcd_timtick_int.
+Sat Jun 25 23:45:30 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Sun Aug 25 21:02:15 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * sizes.c (Init_sizes): Define the size of clock_t.
+Sat Jun 25 23:23:14 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Sun Aug 25 01:47:47 2013 Tanaka Akira <akr@fsij.org>
+ * thread.c (sleep_forever): now Kernel#sleep don't wakeup by
+ signal handler execution. [Bug #4072]
- * bignum.c (BARY_SHORT_MUL): Renamed from BARY_MUL1.
- (bary_short_mul): Renamed from bary_mul1.
+Sat Jun 25 23:14:47 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Sat Aug 24 10:35:09 2013 Tanaka Akira <akr@fsij.org>
+ * 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
- * process.c (rb_clock_gettime): The emulated clock names changed.
+Fri Jun 24 19:57:30 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Fri Aug 23 22:22:07 2013 Tanaka Akira <akr@fsij.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.
- * process.c (rb_clock_gettime): Add a cast to fix compile error by
- -Werror,-Wshorten-64-to-32.
+ * test/webrick/test_httprequest.rb (test_forwarded): Test it.
-Fri Aug 23 22:12:13 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Jun 24 17:06:33 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * process.c (rb_intern): no symbol cache while initialization.
+ * process.c (proc_daemon): should not start timer thread
+ twice. fixed Bug#4920.
-Fri Aug 23 22:07:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Jun 24 15:54:14 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * configure.in (clock_t): needs time.h.
+ * 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 Aug 23 21:37:28 2013 Tanaka Akira <akr@fsij.org>
+Fri Jun 24 07:24:37 2011 Eric Hodel <drbrain@segment7.net>
- * process.c (reduce_factors): New function.
- (timetick2dblnum): Use reduce_factors.
- (timetick2integer): Ditto.
- (make_clock_result): Follow the above change.
- (rb_clock_gettime): Ditto.
+ * 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 Aug 23 21:00:55 2013 Tanaka Akira <akr@fsij.org>
+Fri Jun 24 07:11:37 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * lib/rake: Import Rake 0.9.2
-Fri Aug 23 20:50:40 2013 Tanaka Akira <akr@fsij.org>
+Fri Jun 24 00:44:15 2011 Tadayoshi Funaba <tadf@dotrb.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.
+ * ext/date/date_core.c (c_valid_{julian,gregorian}_p): fixed the range of month.
-Fri Aug 23 18:39:04 2013 Koichi Sasada <ko1@atdot.net>
+Fri Jun 24 00:14:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * array.c (ary_make_shared): shared ary as shady. Need more effort to
- make it normal object.
+ * ext/date/date_core.c: trivial changes on text.
- * array.c (rb_ary_modify): use RARRAY_PTR_USE() without WB because
- there are not new relations.
+Thu Jun 23 22:46:57 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * array.c (ary_ensure_room_for_unshift): use RARRAY_RAWPTR() because
- there are not new relations.
+ * 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
-Fri Aug 23 11:25:57 2013 Koichi Sasada <ko1@atdot.net>
+ * test/openssl/test_x509name.rb (test_hash): Make test pass with
+ OpenSSL 1.0.0.
- * array.c: introduce ARY_SHARED_OCCUPIED(shared).
+ * NEWS: Add it.
-Fri Aug 23 11:07:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jun 23 19:30:53 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * win32/Makefile.sub (config.h): now SIZEOF_CLOCK_T is needed for
- unsigned_clock_t.
+ * 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.
-Thu Aug 22 22:01:04 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_set_timeout): Check
+ type with NUM2LONG. Time as an arg is not allowed. See #4919.
- * process.c (rb_clock_gettime): Strip "s" from unit names.
+ * test/openssl/test_ssl_session.rb (test_session_time,
+ test_session_timeout): Test it.
-Thu Aug 22 20:14:59 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 23 13:30:30 2011 Shota Fukumori <sorah@tubusu.net>
- * process.c (unsigned_clock_t): Defined.
- (rb_clock_gettime): Consider clock_t overflow for
- ISO_C_CLOCK_BASED_CLOCK_PROCESS_CPUTIME_ID.
+ * signal.c(ruby_atomic_exchange): Fix definition style.
- * configure.in: Check the size of clock_t.
+Wed Jun 22 22:34:05 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Thu Aug 22 16:22:48 2013 Koichi Sasada <ko1@atdot.net>
+ * 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.
- * compile.c (build_postexe_iseq): fix to setup the local table.
+ * test/openssl/test_ssl_session.rb (test_ctx_server_session_cb): Test
+ it.
-Thu Aug 22 15:42:43 2013 Koichi Sasada <ko1@atdot.net>
+Wed Jun 22 22:21:17 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * compile.c (rb_iseq_compile_node): accept NODE_IFUNC to support
- custom compilation.
+ * ext/openssl/ossl_ssl_session.c: Respect T_BIGNUM time values. Patch by
+ Tomoyuki Chikanaga.
+ [ Ruby 1.9 - Bug #4919 ] [ruby-dev:43869]
- * compile.c (NODE_POSTEXE): compile to
- "ONCE{ VMFrozenCore::core#set_postexe{...} }" with a new custom
- compiler `build_postexe_iseq()'.
+Wed Jun 22 21:29:25 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * vm.c (m_core_set_postexe): remove parameters (passed by a block).
+ * ext/socket/depend (SOCK_HEADERS): use $(top_srcdir) instead of
+ $(topdir). sorry!
-Thu Aug 22 06:54:15 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 22 19:47:03 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * process.c (rb_clock_gettime): Change emulation symbols for
- Process.clock_gettime.
+ * 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.
-Thu Aug 22 06:24:54 2013 Tanaka Akira <akr@fsij.org>
+ * cont.c (cont_capture): use for-loop.
- * process.c (make_clock_result): Extracted from rb_clock_gettime.
+ * array.c (rb_ary_each): add volatile and use it.
-Wed Aug 21 22:30:51 2013 Tanaka Akira <akr@fsij.org>
+ * vm_insnhelper.c (vm_call_cfunc): ditto.
- * process.c (rb_clock_gettime): clock() based CLOCK_PROCESS_CPUTIME_ID
- emulation implemented.
+Wed Jun 22 18:20:46 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Wed Aug 21 21:02:37 2013 Tanaka Akira <akr@fsij.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.
- * process.c (rb_proc_times): Use RB_GC_GUARD to guard objects from GC.
+ * test/openssl/test_ssl_session.rb (class OpenSSL): Test it.
-Wed Aug 21 20:33:01 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 22 17:37:49 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * process.c (get_clk_tck): Extracted from rb_proc_times.
- (rb_clock_gettime): times() based CLOCK_PROCESS_CPUTIME_ID emulation
- is implemented.
+ * ext/openssl/ossl.h: Introduced OSSL_BIO_reset macro for PEM/DER
+ fallback scenarios.
-Wed Aug 21 19:31:48 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * process.c: POSIX_GETTIMEOFDAY_CLOCK_REALTIME is renamed to
- SUS_GETTIMEOFDAY_CLOCK_REALTIME.
+ * 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.
-Wed Aug 21 19:17:46 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_pkcs7.c: Raise error if DER fallback for parsing
+ fails.
- * process.c (rb_clock_gettime): CLOCK_PROCESS_CPUTIME_ID emulation
- using getrusage is implemented.
+ * 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.
-Wed Aug 21 17:34:27 2013 Tanaka Akira <akr@fsij.org>
+ * test/openssl/test_pkey_rsa.rb: Remove initial OpenSSL.errors call in
+ test_new.
+ [ Ruby 1.9 - Bug #4885 ] [ruby-core:37134]
- * gc.c (getrusage_time): Fallback clock_gettime to getrusage when
- clock_gettime fails.
- Reported by Eric Saxby. [ruby-core:56762] [Bug #8805]
+Wed Jun 22 15:01:24 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Wed Aug 21 02:32:32 2013 Koichi Sasada <ko1@atdot.net>
+ * 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]
- * insns.def: fix regexp's once option behavior.
- fix [ruby-trunk - Bug #6701]
+Wed Jun 22 14:47:53 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * insns.def: remove `onceinlinecache' and introduce `once' instruction.
- `once' doesn't use `setinlinecache' insn any more.
+ * test/openssl/test_buffering.rb
+ * test/openssl/test_pkcs12.rb: Inherit from Test::Unit::TestCase
+ instead of MiniTest::Unit::TestCase. [ruby-core:37275]
- * vm_core.h: `union iseq_inline_storage_entry' to store once data.
+Wed Jun 22 12:41:03 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * compile.c: catch up above changes.
+ * ext/openssl/ossl_ssl_session.c (ossl_ssl_session_to_der):
+ OpenSSL::SSL::Session#to_der was broken. Fix buffer handling.
- * iseq.c: ditto.
+ * test/openssl/test_ssl_session.rb (test_session): Test it.
- * vm.c, vm_insnhelper.c: ditto. fix `m_core_set_postexe()' which
- is depend on `onceinlinecache' insn.
+Wed Jun 22 12:38:52 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * test/ruby/test_regexp.rb: add tests.
+ * test/openssl/test_ssl_session.rb: Split out SSL::Session related
+ tests from test_ssl.rb
- * iseq.c: ISEQ_MINOR_VERSION to 1 (should increment major?)
+Wed Jun 22 03:20:52 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Wed Aug 21 02:30:15 2013 Koichi Sasada <ko1@atdot.net>
+ * 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.
- * gc.c (rb_gcdebug_print_obj_condition): add printing information.
+Wed Jun 22 02:39:54 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Tue Aug 20 13:38:00 2013 Naohisa Goto <ngotogenome@gmail.com>
+ * lib/net/http.rb (Net::HTTP.post_form): Do not ignore query part of
+ the given URI to post. See #655.
- * 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]
+ * test/net/http/test_http.rb, test/net/http/utils.rb: Test it.
-Tue Aug 20 02:32:52 2013 Zachary Scott <e@zzak.io>
+Wed Jun 22 01:28:13 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * 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.
+ * 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.
- This patch was based on a patch submitted by Steve Klabnik.
- [ruby-core:56694] [Bug #8778]
+Tue Jun 21 21:50:37 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Tue Aug 20 02:10:19 2013 Zachary Scott <e@zzak.io>
+ * 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.
- * lib/rss/rss.rb: [DOC] Document for constants by Steve Klabnik
- [ruby-core:56705] [Bug #8798]
+ * test/webrick/test_httpserver.rb: Test it.
-Tue Aug 20 02:01:10 2013 Zachary Scott <e@zzak.io>
+Tue Jun 21 21:27:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * lib/rss/xmlparser.rb: [DOC] Hide legacy constant from rdoc
- Patch by Steve Klabnik [ruby-core:56708] [Bug #8799]
+ * 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.
-Tue Aug 20 01:52:05 2013 Zachary Scott <e@zzak.io>
+ * ext/socket/rubysocket.h: include internal.h.
+ * ext/socket/depend: add internal.h dependency.
+ * ext/socket/extconf.rb: add $INCFLAGS to topdir.
- * 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 Jun 21 20:38:47 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Aug 20 01:19:22 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c (datetime_s_*): canonicalize 24 o'clock.
- * configure.in: Define ac_cv_func_clock_gettime to yes for mingw*.
+Tue Jun 21 19:46:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Aug 19 21:31:35 2013 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_thread.rb (TestThread#test_priority): enable
+ this test again. Current GVL respect thread priority rather
+ than past.
- * 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.
+Tue Jun 21 13:25:35 2011 TAKAO Kouji <kouji@takao7.net>
-Mon Aug 19 20:55:12 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/readline/readline.c (readline_getc): applied a patch in
+ #3827 by by Akio Tajima <artonx AT yahoo.co.jp>. (see #3827)
- * gc.c: fix around GC_DEBUG.
+Tue Jun 21 13:16:31 2011 TAKAO Kouji <kouji@takao7.net>
- * gc.c (RVALUE::line): should be VALUE. On some environment
- (such as mswin64), `int' introduces alignment mismatch.
+ * 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)
- * gc.c (newobj_of): add an assertion to check VALUE alignment.
+Mon Jun 20 22:52:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * gc.c (aligned_malloc): `&' is low priority than `=='.
+ * process.c (before_exec): use sig_do_nothing instead of SIG_DFL
+ for avoiding a race.
+ * process.c (sig_do_nothing): new function.
- * gc.c: define GC_DEBUG everytime and use it as value 0 or 1.
+Mon Jun 20 21:31:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Aug 19 17:43:44 2013 Koichi Sasada <ko1@atdot.net>
+ * thread_pthread.c (thread_timer): rename timeout_10ms to
+ time_quantum. it's no longer 10ms.
- * test/ruby/test_fiber.rb: collect garbage fibers immediately.
+Mon Jun 20 18:46:02 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Mon Aug 19 17:41:49 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_cipher.c, ext/openssl/lib/openssl/cipher.rb:
+ Documentation fix by Ippei Obayashi. See #4419.
- * test/profile_test_all.rb: add `failed?' information.
+Mon Jun 20 15:41:33 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Mon Aug 19 17:00:53 2013 Nobuyoshi Nakada <nobu@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.
- * process.c (retry_fork): retry with GC if ENOMEM occurred, to free
- swap/kernel space.
+ * test/webrick/test_cookie.rb: Test it.
-Mon Aug 19 13:28:47 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Sun Jun 19 13:31:26 2011 Shota Fukumori <sorah@tubusu.net>
- * include/ruby/win32.h (CLOCK_MONOTONIC): typo.
+ * NEWS: Introduce --hide-skip on test/unit.
- * win32/win32.c: removed duplicated declarations.
+Sun Jun 19 10:05:16 2011 Shota Fukumori <sorah@tubusu.net>
-Mon Aug 19 13:03:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/test/unit/parallel.rb: Override Test::Unit::TestCase#on_parallel_worker?
+ only when $0 == __FILE__.
- * configure.in (clock_gettime): should not overwrite cache variable
- with different condition. otherwise -lrt is not linked and the link
- fails, after reconfig.
+ * lib/test/unit/parallel.rb: Run Test::Unit::Worker.run only when
+ $0 == __FILE__.
-Mon Aug 19 12:56:49 2013 Tanaka Akira <akr@fsij.org>
+Sat Jun 18 23:59:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * process.c (Init_process): Add constants: CLOCK_REALTIME_ALARM and
- CLOCK_BOOTTIME_ALARM.
+ * 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
-Sun Aug 18 20:17:41 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Sat Jun 18 21:36:29 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * variable.c, vm_method.c: remove dead code.
+ * thread_pthread.c: remove GVL_DEBUG
- * test/ruby/test_fiber.rb, test/ruby/test_thread.rb:
- change accordingly.
+Sat Jun 18 21:32:02 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun Aug 18 19:32:26 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+ * vm.c, vm_core.h (rb_vm_stack_to_heap): remove const.
+ It makes compilations warnings.
- * error.c, file.c, gc.c, hash.c, thread.c, variable.c, vm_eval.c, bin/erb:
- $SAFE=4 is obsolete.
+Sat Jun 18 18:54:15 2011 Koichi Sasada <ko1@atdot.net>
-Sun Aug 18 14:30:47 2013 Tanaka Akira <akr@fsij.org>
+ * vm.c, vm_core.h (rb_vm_stack_to_heap): fix "const" place.
- * process.c (rb_clock_gettime): Rename POSIX_TIME_CLOCK_REALTIME to
- ISO_C_TIME_CLOCK_REALTIME.
+Sat Jun 18 17:23:38 2011 Tanaka Akira <akr@fsij.org>
-Sun Aug 18 14:22:45 2013 Tanaka Akira <akr@fsij.org>
+ * eval.c, hash.c, load.c, proc.c, range.c, thread.c, time.c: don't
+ declare internal functions.
- * configure.in: Revert r42604. It causes linking librt on systems
- with newer glibc uselessly.
+ * internal.h, vm_core.h: declare internal functions.
-Sun Aug 18 13:18:38 2013 Tanaka Akira <akr@fsij.org>
+ * array.c: include internal.h.
- * process.c (Init_process): Add constants: CLOCK_REALTIME_COARSE,
- CLOCK_MONOTONIC_COARSE and CLOCK_BOOTTIME.
+ * common.mk: update dependency for array.o.
-Sun Aug 18 12:41:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jun 18 13:39:33 2011 Tanaka Akira <akr@fsij.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.
+ * internal.h: declarations declared in include/ruby/*.h removed.
-Sun Aug 18 10:05:12 2013 Tanaka Akira <akr@fsij.org>
+Sat Jun 18 12:42:17 2011 Tanaka Akira <akr@fsij.org>
- * bignum.c (rb_big2str1): Make an expression more explicit.
+ * method.h, internal.h iseq.h: declare internal functions.
-Sun Aug 18 03:18:45 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * bignum.c (rb_big2str1): Use power_level instead of bitsize(xn).
+ 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.
-Sun Aug 18 00:44:58 2013 Tanaka Akira <akr@fsij.org>
+ * object.c (rb_mod_module_exec): don't declare functions declared in
+ include/ruby/intern.h.
- * bignum.c (BIGDIVREM_EXTRA_WORDS): Redefine to 1.
- (bigdivrem_num_extra_words): Removed.
- (bigdivrem_normal): Simplified.
- (big2str_karatsuba): Ditto.
+Sat Jun 18 12:05:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Aug 17 23:25:19 2013 Benoit Daloze <eregontp@gmail.com>
+ * include/ruby/backward/classext.h: for evil gems. fixed #4803
- * test/ruby/test_time.rb: use the in_timezone() helper
- and define it at the top with other helpers.
+Sat Jun 18 11:12:13 2011 Tanaka Akira <akr@fsij.org>
-Sat Aug 17 22:20:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * common.mk: update dependencies.
- * time.c (time_mload): ignore auxiliary data, offset and zone, if
- invalid. [ruby-core:56648] [Bug #8795]
+Sat Jun 18 11:09:03 2011 Tanaka Akira <akr@fsij.org>
-Sat Aug 17 20:11:49 2013 Benoit Daloze <eregontp@gmail.com>
+ * io.c: suppress warnings.
- * 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
+Sat Jun 18 10:22:39 2011 Tanaka Akira <akr@fsij.org>
-Fri Aug 16 18:12:05 2013 Koichi Sasada <ko1@atdot.net>
+ * internal.h: declare more internal functions.
- * test/profile_test_all.rb: fix typo.
+ * iseq.h (rb_method_get_iseq): declared.
-Fri Aug 16 18:09:20 2013 Koichi Sasada <ko1@atdot.net>
+ * 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.
- * test/profile_test_all.rb: remove space characters from test names.
+ * eval.c, parse.y, thread_pthread.c: non-existing function declarations
+ removed.
-Fri Aug 16 17:32:02 2013 Koichi Sasada <ko1@atdot.net>
+Sat Jun 18 08:12:54 2011 Tanaka Akira <akr@fsij.org>
- * test/profile_test_all.rb: refactoring memory profiling tool for
- test-all.
- Add profiling targets /proc/meminfo and /proc/self/status.
+ * common.mk: dependencies updated.
- * test/runner.rb: accept other than 'true'.
+ * tool/update-deps: new file to assist update dependencies in
+ common.mk.
-Fri Aug 16 11:23:35 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Sat Jun 18 07:27:27 2011 Tanaka Akira <akr@fsij.org>
- * file.c (rb_file_size, rb_file_flock): improve performance of Windows.
+ * internal.h: declare internal functions here.
- * file.c (rb_file_truncate): removed unnecessary #ifdef.
+ * node.h: declare NODE dependent internal functions here.
- * test/test_file.rb (TestFile#test_truncate_size): added an assertion
- for File#size.
+ * iseq.h: declare rb_iseq_t dependent internal functions here.
-Fri Aug 16 10:07:59 2013 Tanaka Akira <akr@fsij.org>
+ * vm_core.h: declare rb_thread_t dependent internal functions here.
- * 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.
+ * 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.
-Fri Aug 16 09:17:00 2013 Tanaka Akira <akr@fsij.org>
+ 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.
- * bignum.c (bary_small_rshift): Specify the higher BDIGIT instead of
- sign bit.
- (big_shift3): Follow the above change.
+Sat Jun 18 02:36:00 2011 Kenta Murata <mrkn@mrkn.jp>
-Fri Aug 16 02:20:39 2013 Tanaka Akira <akr@fsij.org>
+ * ext/bigdecimal/bigdecimal.c (VpNewRbClass): fix type of the 2nd
+ argument.
- * bignum.c (bary_mul_toom3): Reduce a branch.
+ * ext/bigdecimal/bigdecimal.h: ditto.
-Fri Aug 16 02:14:09 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Sat Jun 18 02:30:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * process.c (rb_clock_gettime): add CLOCK_MONOTONIC support on OS X.
- http://developer.apple.com/library/mac/qa/qa1398/_index.html
- [Feature #8658]
+ * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): move BigMath.exp from
+ bigdecimal/math.rb.
-Fri Aug 16 01:37:43 2013 Tanaka Akira <akr@fsij.org>
+ * ext/bigdecimal/lib/bigdecimal/math.rb: ditto.
- * bignum.c (bigdivrem_single): Use shift when y is a power of two.
+ * test/bigdecimal/test_bigdecimal.rb: move test for BigMath.exp from
+ test/bigdecimal/test_bigmath.rb.
-Fri Aug 16 01:09:33 2013 Tanaka Akira <akr@fsij.org>
+ * test/bigdecimal/test_bigmath.rb: ditto.
- * bignum.c (bigdivrem_restoring): Use bigdivrem_single if non-topmost
- BDIGITs of y are zero.
+Sat Jun 18 00:20:54 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Fri Aug 16 00:33:12 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c: do not define wnum[01].
- * bignum.c (rb_big2str1): Truncate topmost zeros of x.
+Fri Jun 17 18:57:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Aug 16 00:00:57 2013 Tanaka Akira <akr@fsij.org>
+ * compile.c (iseq_compile_each): fix return value of obj[a,*b]=c.
- * bignum.c (bary_divmod): Simplify an expression.
+Fri Jun 17 13:09:45 2011 Eric Hodel <drbrain@segment7.net>
-Thu Aug 15 23:26:12 2013 Tanaka Akira <akr@fsij.org>
+ * ext/curses/curses.c: Clean up documentation.
- * bignum.c (bigdivrem_normal): Remove a local variable.
+Fri Jun 17 09:25:14 2011 Eric Hodel <drbrain@segment7.net>
-Thu Aug 15 23:08:32 2013 Tanaka Akira <akr@fsij.org>
+ * ext/curses/curses.c: Document curses constants. Patch by Vincent
+ Batts. [Ruby 1.9 - Bug #4880]
- * bignum.c (big2str_karatsuba): Use bigdivrem_restoring directly to
- reduce working buffer and memory copy.
- (rb_big2str1): Allocate working buffer for big2str_karatsuba here.
+Fri Jun 17 09:11:05 2011 Eric Hodel <drbrain@segment7.net>
-Thu Aug 15 20:51:29 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * object.c: Document Module#method_added and #method_removed.
+ Patch by Bryce Kerley. [Ruby 1.9 - Feature #4867]
- * io.c, internal.h (rb_io_flush_raw): new function to select calling
- fsync() (on Windows).
+Fri Jun 17 08:50:16 2011 Eric Hodel <drbrain@segment7.net>
- * io.c (rb_io_flush_raw): use above function.
+ * io.c: Improve documentation of IO and File open and new.
+ Patch by Roger Pack. [Ruby 1.9 - Bug #4790]
- * file.c (rb_file_truncate): use above function.
+Fri Jun 17 07:53:50 2011 Eric Hodel <drbrain@segment7.net>
- * test/ruby/test_file.rb (TestFile#test_truncate_size): test for
- above changes.
+ * lib/csv.rb: Document #raw_encoding. Patch by David Czarnecki.
+ [Ruby 1.9 - Bug #4874]
-Thu Aug 15 18:39:31 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri Jun 17 07:46:50 2011 Eric Hodel <drbrain@segment7.net>
- * win32/win32.c (clock_gettime): improve precision when freq is less
- than and nearly equals 10**9.
+ * lib/benchmark.rb: Document Benchmark::Tms#memberwise. Patch by
+ David Czarnecki. [Ruby 1.9 - Bug #4873]
-Thu Aug 15 17:43:15 2013 Koichi Sasada <ko1@atdot.net>
+Fri Jun 17 07:38:31 2011 Eric Hodel <drbrain@segment7.net>
- * gc.c (gc_lazy_sweep): remove heap_increment() here because heap_inc
- may be 0.
+ * lib/prettyprint.rb: Improve documentation. Patch by Ysiad
+ Ferreiras. [#4834]
-Thu Aug 15 16:59:56 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri Jun 17 07:23:03 2011 Eric Hodel <drbrain@segment7.net>
- * io.c (rb_io_rewind): remove fsync() for Windows to improve the
- performance.
+ * array.c (rb_ary_drop): Improve documentation. Patch by Caley Woods.
+ [Ruby 1.9 - Bug #4858]
-Thu Aug 15 16:30:23 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri Jun 17 06:11:31 2011 Eric Hodel <drbrain@segment7.net>
- * test/fileutils/test_fileutils.rb (TestFileUtils#test_rmdir):
- FileUtils.rmdir ignores Errno::ENOTEMPTY, so, in such cases, this
- assertion is nonsense.
+ * 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]
-Thu Aug 15 15:49:35 2013 Tanaka Akira <akr@fsij.org>
+Fri Jun 17 04:48:22 2011 Koichi Sasada <ko1@atdot.net>
- * process.c (rb_clock_gettime): [DOC] FreeBSD 7.1 supports
- CLOCK_THREAD_CPUTIME_ID.
- http://www.freebsd.org/releases/7.1R/relnotes.html
+ * thread_pthread.c, thread_pthread.h: remove unused variables.
+ (native_thread_data_t::gvl_cond, native_thread_data_t::gvl_next)
-Thu Aug 15 14:30:23 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Thu Jun 16 14:32:31 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * include/ruby/win32.h, win32/Makefile.sub, win32/win32.c
- (clock_gettime): [experimental] emulates clock_gettime(2) of posix.
+ * time.c (rb_time_new): prevent overflow by "* 1000".
-Thu Aug 15 02:32:40 2013 Zachary Scott <e@zzak.io>
+Fri Jun 17 03:07:36 2011 Koichi Sasada <ko1@atdot.net>
- * hash.c (rb_hash_aset): [DOC] Document key dup patch by @kachick
- [Fixes GH-382] https://github.com/ruby/ruby/pull/382
+ * benchmark/bm_vm4_thread_create_join.rb,
+ benchmark/bm_vm4_thread_mutex[1-3].rb: renamed to
+ bm_thread_* (fix last rename).
-Wed Aug 14 14:28:39 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Fri Jun 17 02:26:47 2011 Koichi Sasada <ko1@atdot.net>
- * 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]
+ * thread_pthread.c (native_thread_create): fix debug message.
+ (add last newline)
- * NEWS: documents about above change and def-expr (see r42337).
+Thu Jun 16 23:40:49 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * test/ruby/test_module.rb: tests about above change.
+ * thread.c (rb_thread_schedule_rec): fix {UN,}LIKELY macro misuse.
+ * gc.c (rb_newobj): ditto.
+ * vm_insnhelper.c (vm_method_search): ditto.
-Wed Aug 14 00:51:14 2013 Tanaka Akira <akr@fsij.org>
+Thu Jun 16 20:06:15 2011 Shota Fukumori <sorah@tubusu.net>
- * bignum.c (bigdivrem_restoring): xn argument removed.
- (bigdivrem_normal): Follow the above change.
+ * test/testunit/test_parallel.rb: Fix Regexp for test.
-Wed Aug 14 00:18:39 2013 Tanaka Akira <akr@fsij.org>
+ * test/testunit/tests_for_parallel/test_third.rb: Use
+ Test::Unit::TestCase#on_parallel_worker? for detecting worker.
- * bignum.c (big_div_struct): Remove xn and j field. Add zn field.
- (bigdivrem1): Follow the above change.
- (bigdivrem_restoring): Ditto.
+ * 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.
-Tue Aug 13 23:38:17 2013 Tanaka Akira <akr@fsij.org>
+Thu Jun 16 19:27:12 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
- * bignum.c (big_div_struct): ynzero field removed.
- (bigdivrem1): Follow the above change.
- (bigdivrem_restoring): Ditto.
+ * 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.
-Tue Aug 13 23:01:16 2013 Tanaka Akira <akr@fsij.org>
+Thu Jun 16 17:55:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (bigdivrem_restoring): Extracted from bigdivrem_normal.
+ * test/ruby/test_io.rb (TestIO#test_copy_stream_socket): fix
+ test hanging up issue. Patch by CHIKANAGA Tomoyuki.
-Tue Aug 13 22:12:59 2013 Kenichi Kamiya <kachick1@gmail.com>
+Thu Jun 16 15:17:39 2011 Eric Hodel <drbrain@segment7.net>
- * random.c (rb_random_ulong_limited): coerce before check negative.
- [Fixes GH-379]
+ * variable.c (const_missing): Add simple example of const_missing.
+ Patch by Anuj Dutta. [Ruby 1.9 - Bug #4794]
-Tue Aug 13 21:52:15 2013 Kenichi Kamiya <kachick1@gmail.com>
+Thu Jun 16 15:09:29 2011 Eric Hodel <drbrain@segment7.net>
- * object.c (Init_Object): undef Module#prepend_features on Class, as
- well as Module#append_features. [Fixes GH-376]
+ * lib/monitor.rb: Improve documentation. Patch by Sandor Szucs.
+ [Ruby 1.9 - Bug #4823]
- * test_class.rb: Added test for above. And ensure type checking
- on similar methods as module_function.
+Thu Jun 16 14:54:09 2011 Eric Hodel <drbrain@segment7.net>
-Tue Aug 13 08:52:18 2013 Zachary Scott <e@zzak.io>
+ * lib/webrick/utils.rb: Document WEBrick::Utils. Patch by Olivier
+ Brisse. [Ruby 1.9 - Bug #4819]
- * doc/syntax/literals.rdoc: [DOC] String literal concat by @cknadler
- [Fixes GH-380] https://github.com/ruby/ruby/pull/380
+Thu Jun 16 14:26:46 2011 Eric Hodel <drbrain@segment7.net>
-Mon Aug 12 23:07:21 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * lib/webrick/httpservlet/erbhandler.rb: Allow the ERB document to
+ alter the content-type of the response. [Ruby 1.9 - Bug #4685]
- * gc.c (gc_marks_test): inhibit gc for st's operation.
+Thu Jun 16 14:15:47 2011 Eric Hodel <drbrain@segment7.net>
-Mon Aug 12 15:59:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/timeout.rb: Clarify timeout duration types. Patch by Alf Mikula.
+ [Ruby 1.9 - Bug #4791]
+ * lib/net/http.rb: ditto
- * parse.y (parser_whole_match_p): treat CR in middle of a line as a
- mere whitespace.
+Thu Jun 16 13:25:25 2011 Eric Hodel <drbrain@segment7.net>
-Mon Aug 12 15:16:58 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/rdoc*: Import RDoc 3.7 release candidate
- * 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.
+Thu Jun 16 11:35:09 2011 Shugo Maeda <shugo@ruby-lang.org>
- * test/ruby/test_module.rb: add a test for WB miss.
+ * lib/net/imap.rb (search_response): parses SEARCH responses from
+ the Yahoo IMAP server correctly. patched by Mark Nadig. [Bug #4509]
-Mon Aug 12 13:47:54 2013 Zachary Scott <e@zzak.io>
+Thu Jun 16 09:12:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * process.c: [DOC] RDoc formatting of Process.clock_gettime
+ * fix for build on solaris 10.
-Mon Aug 12 13:29:09 2013 Zachary Scott <e@zzak.io>
+Thu Jun 16 09:08:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/yaml/dbm.rb: [DOC] Document call-seq for YAML::DBM
+ * test/io/console/test_io_console.rb (TestIO_Console#test_sync):
+ fix for daemon process.
-Mon Aug 12 12:57:26 2013 Zachary Scott <e@zzak.io>
+Thu Jun 16 07:58:01 2011 Shota Fukumori <sorah@tubusu.net>
- * 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.
+ * test/testunit/test_parallel.rb(test_ignore_tzero): Test for r32109.
-Mon Aug 12 12:53:39 2013 Zachary Scott <e@zzak.io>
+ * test/testunit/tests_for_parallel/test_third.rb: Use another way to
+ detect that test is running on worker. This fixes sometimes
+ TestParallel failing.
- * ext/dbm/dbm.c: [DOC] Reformat headings of DBM class
+Thu Jun 16 07:20:06 2011 Shota Fukumori <sorah@tubusu.net>
-Mon Aug 12 12:46:31 2013 Zachary Scott <e@zzak.io>
+ * lib/test/unit.rb(Test::Unit::Runner#_run_parallel): Ignore -j0
+ because it makes blocking forever by IO.select.
- * 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.
+Thu Jun 16 03:08:11 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Aug 12 02:51:32 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * test/testunit/test_parallel.rb (TestParallel::TestParallelWorker#
+ setup): now can run on Windows, probably.
- * 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.
+ * test/testunit/test_parallel.rb (TestParallel::TestParallel#setup):
+ ditto.
- * ext/readline/readline.c (readline_s_set_output): ditto.
+Thu Jun 16 03:00:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Aug 11 23:27:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread.c (do_select): Windows: no need to poll if select(2) is
+ cancelable.
- * file.c (rb_str_encode_ospath): OS path encoding on Mac OS X is also
- fixed.
+ * thread_win32.c (native_fd_select): new function to make select(2)
+ cancelable.
-Sun Aug 11 22:57:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread_win32.c (rb_w32_check_interrupt): new function for checking
+ interrupt.
- * 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]
+ * win32/win32.c (rb_w32_select_with_thread): new function. cancelable
+ select(2).
-Sun Aug 11 19:11:45 2013 Kouhei Sutou <kou@cozmixng.org>
+ * win32/win32.c (rb_w32_select): use above function internally.
- * test/rexml/parser/test_sax2.rb: Expand abbreviated class name.
+Wed Jun 15 23:30:45 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun Aug 11 19:06:03 2013 Kouhei Sutou <kou@cozmixng.org>
+ * 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.
- * 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.
+Wed Jun 15 23:11:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun Aug 11 18:44:04 2013 Kouhei Sutou <kou@cozmixng.org>
+ * thread.c: remove BLOCKING_REGION_CORE() macro. It's no longer used
+ since r32022.
- * lib/rexml/sax2listener.rb (REXML::SAX2Listener#elementdecl): Fix wrong
- examples. [Bug #8731] [ruby-dev:47582]
- Reported by Ippei Obayashi.
+Wed Jun 15 21:00:47 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Sun Aug 11 18:42:13 2013 Kouhei Sutou <kou@cozmixng.org>
+ * test/openssl/test_config.rb: execute based on the existence of the
+ OpenSSL module.
- * lib/rexml/parsers/sax2parser.rb
- (REXML::Parsers::SAX2Parser#handle_entitydecl): Extract.
+Wed Jun 15 12:35:11 2011 Tanaka Akira <akr@fsij.org>
-Sun Aug 11 18:40:25 2013 Kouhei Sutou <kou@cozmixng.org>
+ * test/ruby/test_io.rb (test_copy_stream_socket): wait a child process
+ before SIGUSR1 handler is removed.
- * 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.
+ * test/pathname/test_pathname.rb (define_assertion): use line number
+ for test method names.
-Sun Aug 11 18:08:40 2013 Kouhei Sutou <kou@cozmixng.org>
+Wed Jun 15 10:37:43 2011 NARUSE, Yui <naruse@ruby-lang.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.
+ * file.c (rb_stat_rdev): use DEVT2NUM.
-Sun Aug 11 18:07:39 2013 Kouhei Sutou <kou@cozmixng.org>
+ * file.c (rb_stat_rdev_major): ditto.
- * lib/rexml/parsers/baseparser.rb
- (REXML::Parsers::BaseParser#pull_event): Support optional NDATA
- in external ID entity declaration.
+ * file.c (rb_stat_rdev_minor): ditto.
-Sun Aug 11 17:54:07 2013 Kouhei Sutou <kou@cozmixng.org>
+Wed Jun 15 05:12:59 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * 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.
+ * 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.
-Sun Aug 11 17:41:41 2013 Kouhei Sutou <kou@cozmixng.org>
+Wed Jun 15 04:42:47 2011 Koichi Sasada <ko1@atdot.net>
- * test/rexml/parser/test_sax2.rb: Add SAX2 API test.
+ * benchmark/bm_vm3_thread_*.rb: renamed bm_vm3_thread_*.rb to
+ benchmark/bm_vm_thread_*.rb.
-Sun Aug 11 15:10:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jun 15 04:28:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * parse.y (rb_enc_symname_type): allow ID_ATTRSET for ID_INSTANCE,
- ID_GLOBAL, ID_CLASS, ID_JUNK too. [Bug #8756]
+ * 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.
-Sun Aug 11 13:17:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Wed Jun 15 03:52:50 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * include/ruby/encoding.h: Reduce ENCODING_INLINE_MAX to 127 as this
- should be sufficient to represent all the encodings Ruby supports.
+ * benchmark/bm_vm4_pass_flood.rb: new benchmark for GVL fairness.
+ * benchmark/bm_vm4_alive_check1.rb: ditto.
-Sun Aug 11 11:54:38 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 15 01:27:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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]
+ * 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.
-Sun Aug 11 10:40:48 2013 Zachary Scott <e@zzak.io>
+Tue Jun 14 23:16:22 2011 Tanaka Akira <akr@fsij.org>
- * lib/time.rb: [DOC] Correcting rdoc visibility of time.rb constants
- Reported by Tanaka Akira [ruby-core:56517]
+ * bootstraptest/runner.rb (show_progress): refine verbose mode.
+ (exec_test): ditto.
-Sun Aug 11 04:48:14 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Tue Jun 14 23:02:36 2011 Tanaka Akira <akr@fsij.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.
+ * bootstraptest/runner.rb (show_progress): extracted from assert_check.
+ (assert_check): use show_progress.
+ (assert_normal_exit): ditto.
+ (assert_finish): ditto.
+ (flunk): ditto.
-Sun Aug 11 03:26:07 2013 Tanaka Akira <akr@fsij.org>
+Tue Jun 14 22:51:42 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * bignum.c (bitsize): Fix a conditional expression.
+ * test/date/test_*.rb: added tests.
-Sun Aug 11 02:44:03 2013 Zachary Scott <e@zzak.io>
+Tue Jun 14 22:09:58 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * lib/time.rb: [DOC] Document constants by @markijbema [Fixes GH-377]
- https://github.com/ruby/ruby/pull/377
+ * ext/date/date_core.c: renamed some functions.
+ * ext/date/date_core.c: modified doc.
-Sun Aug 11 01:28:52 2013 Tanaka Akira <akr@fsij.org>
+Tue Jun 14 21:26:01 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * 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
+ * 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.
-Sat Aug 10 13:53:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Jun 14 19:50:49 2011 Tanaka Akira <akr@fsij.org>
- * parse.y (rb_id_attrset): allow other than ID_ATTRSET.
+ * test/ruby/test_autoload.rb: remove temporary directory.
- * parse.y (intern_str): ditto. try stem ID for ID_INSTANCE,
- ID_GLOBAL, ID_CLASS, ID_JUNK too. [Bug #8756]
+Tue Jun 14 11:05:03 2011 Narihiro Nakamura <narihiro@netlab.jp>
-Sat Aug 10 12:49:50 2013 Kouhei Sutou <kou@cozmixng.org>
+ * gc.c (rb_gc_set_params): call initial_expand_heap if
+ initial_heap_min_slots is set.
- * 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?)
+Tue Jun 14 11:02:08 2011 Narihiro Nakamura <narihiro@netlab.jp>
-Sat Aug 10 12:47:19 2013 Kouhei Sutou <kou@cozmixng.org>
+ * gc.c: use size_t.
- * 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.
+Tue Jun 14 01:10:38 2011 Yusuke Endoh <mame@tsg.ne.jp>
-Sat Aug 10 12:43:15 2013 Kouhei Sutou <kou@cozmixng.org>
+ * test/coverage/test_coverage.rb: add a test for restart. a patch
+ from Xavier Shay. [ruby-core:36745]
- * 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.
+Tue Jun 14 01:05:10 2011 Yusuke Endoh <mame@tsg.ne.jp>
-Sat Aug 10 12:39:00 2013 Kouhei Sutou <kou@cozmixng.org>
+ * ext/coverage/coverage.c: make it restartable. [ruby-core:36539]
- * test/rexml/parse/test_document_type_declaration.rb: Add tests for
- parsing document type declaration.
+Mon Jun 13 23:55:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sat Aug 10 12:00:45 2013 Kouhei Sutou <kou@cozmixng.org>
+ * 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().
- * 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!!!
+Mon Jun 13 23:50:25 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Aug 10 11:58:24 2013 Kouhei Sutou <kou@cozmixng.org>
+ * ext/io/console/console.c (console_dev): typo.
- * test/rexml/parse/test_notation_declaration.rb (#test_system_public):
- Add a test for PUBLIC notation and SYSTEM notation order case.
+Mon Jun 13 23:38:23 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Aug 10 11:31:35 2013 Kouhei Sutou <kou@cozmixng.org>
+ * parse.y (parser_parse_string): flush delayed token. based on a
+ patch by Masaya Tarui in [ruby-dev:43762]. Bug #4544
- * 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.
+ * parse.y (yylex): revert r24557. delayed token at the end of
+ string should be flushed already by the above change.
-Sat Aug 10 09:20:21 2013 Zachary Scott <e@zzak.io>
+Mon Jun 13 23:33:31 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * NEWS: [DOC] typo in example reported by @moretea
- https://github.com/ruby/ruby/commit/a39e724#commitcomment-3831489
+ * ext/io/console/console.c (console_dev): console should be
+ unbuffered.
-Sat Aug 10 09:19:04 2013 Zachary Scott <e@zzak.io>
+ * ext/io/console/console.c (console_dev): take care of no-ctty
+ case.
- * proc.c: [DOC] rdoc code formatting
+Mon Jun 13 23:06:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sat Aug 10 09:12:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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.
- * parse.y (rb_id_attrset): check if the argument is valid type as an
- attribute.
+Mon Jun 13 23:11:52 2011 Tanaka Akira <akr@fsij.org>
-Sat Aug 10 05:44:08 2013 Zachary Scott <e@zzak.io>
+ * test/socket/test_unix.rb: don't use Thread.abort_on_exception.
- * lib/rss/trackback.rb: [DOC] Hide RSS::Trackback from rdoc
- Patch by Steve Klabnik [Bug #8755] [ruby-core:56456]
+Mon Jun 13 23:05:01 2011 Tanaka Akira <akr@fsij.org>
-Sat Aug 10 04:52:21 2013 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]
- * bignum.c (big_div_struct): Use size_t.
- (bigdivrem1): Ditto.
- (bigdivrem_num_extra_words): Ditto.
- (bigdivrem_single): Ditto.
- (bigdivrem_normal): Ditto.
- (bary_divmod): Ditto.
+ * test/socket/test_unix.rb: test added for above problem.
-Fri Aug 9 23:47:15 2013 Kouhei Sutou <kou@cozmixng.org>
+Mon Jun 13 21:41:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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!!!
+ * thread_win32.c (native_cond_signal): remove unnecessary rb_bug().
+ It's additional fix for r32021. [Bug #4696]
-Fri Aug 9 22:51:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jun 13 20:50:49 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * configure.in (XLDFLAGS, LIBRUBYARG_STATIC): CoreFoundation framework
- option is now needed always, regardless enable-shared.
- [ruby-core:56467] [Bug #8759]
+ * 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.
-Fri Aug 9 22:20:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jun 13 20:28:24 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * ruby.c (load_file_internal): use rb_parser_compile_string_path and
- rb_parser_compile_file_path, String path name versions. [Bug #8753]
+ * test/openssl/digest.rb: remove MDC2 from test, it is not available
+ by default in an OpenSSL installation.
-Fri Aug 9 07:16:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Mon Jun 13 20:18:55 2011 Koichi Sasada <ko1@atdot.net>
- * 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.
+ * 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.
-Fri Aug 9 19:13:54 2013 Koichi Sasada <ko1@atdot.net>
+ * 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.
- * NEWS: update about new methods for Binding.
+ * vm_method.c (vm_clear_global_method_cache): added.
-Fri Aug 9 18:48:09 2013 Koichi Sasada <ko1@atdot.net>
+Mon Jun 13 19:46:21 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
- * proc.c: add Binding#local_variable_get/set/defined?
- to access local variables which a binding contains.
- Most part of implementation by nobu.
+ * lib/cmath.rb: add new method Object#real?. fix #3137
- * test/ruby/test_proc.rb: add a tests for above.
+Mon Jun 13 18:52:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * 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.
+ * ext/bigdecimal/bigdecimal.c (is_kind_of_BigDecimal): new function to
+ examine the whether the object is kind of BigDecimal.
-Fri Aug 9 14:02:01 2013 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+Mon Jun 13 18:49:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * tool/make-snapshot: Fix order of priority for option parameter.
+ * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): use GetVpValueWithPrec
+ for Float and Rational arguments.
-Fri Aug 9 12:06:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/bigdecimal/test_bigdecimal.rb (test_new, test_cmp, test_power):
+ add and modify tests for the above change.
- * file.c (rb_str_normalize_ospath): normalize to Normalization Form C
- using CFString.
+ * ext/bigdecimal/bigdecimal.c (BigDecimalCmp): modify coding style to
+ match ruby's standard.
-Fri Aug 9 10:53:57 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Mon Jun 13 18:33:04 2011 Tanaka Akira <akr@fsij.org>
- * time.c (get_timeval, get_new_timeval): use rb_obj_class()
- instead of CLASS_OF() because CLASS_OF() may return
- a singleton class.
+ * 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]
-Fri Aug 9 10:42:11 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Mon Jun 13 17:02:34 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * vm_insnhelper.c (vm_invoke_block): returning from lambda proc
- now always exits from the Proc. [ruby-core:56193] [Feature #8693]
+ * lib/net/http.rb (Net::HTTP#use_ssl?): require 'openssl' only when
+ https is needed. fixes r31933.
- * NEWS, test/ruby/test_lambda.rb: ditto. Patch by nobu.
+Mon Jun 13 14:35:00 2011 Kenta Murata <mrkn@mrkn.jp>
-Fri Aug 9 00:10:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/cmath.rb (CMath.cbrt): returns the principal value of the cube
+ root of the argument. fix #3676
- * enumerator.c (lazy_zip_func): fix non-single argument. fix
- out-of-bound access and pack multiple yielded values.
- [ruby-core:56383] [Bug #8735]
+ * test/test_cmath.rb (test_cbrt_returns_principal_value_of_cube_root):
+ test for the above change.
-Thu Aug 8 23:01:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jun 13 14:17:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * 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]
+ * lib/test/unit.rb (Test::Unit::GlobOption#non_options): fix typo.
-Thu Aug 8 21:56:44 2013 Tanaka Akira <akr@fsij.org>
+Mon Jun 13 13:04:20 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * time.c (time_overflow_p): Avoid signed integer overflow.
- (rb_time_new): Fix overflow condition.
+ * 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.
-Thu Aug 8 19:58:02 2013 Koichi Sasada <ko1@atdot.net>
+Mon Jun 13 12:51:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * thread.c (rb_threadptr_pending_interrupt_check_mask):
- use RARRAY_RAWPTR() instead of RARRAY_PTR() because
- there is no new reference.
+ * lib/yaml.rb: load psych only when syck is not loaded.
-Thu Aug 8 19:56:52 2013 Koichi Sasada <ko1@atdot.net>
+Mon Jun 13 12:23:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * string.c (rb_str_format_m): use RARRAY_RAWPTR() instead of
- RARRAY_PTR() because there is no new reference.
+Mon Jun 13 12:23:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Aug 8 19:55:51 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/psych/lib/psych/deprecated.rb (Object#to_yaml_properties):
+ undef to_yaml_properties before redefine it.
- * include/ruby/ruby.h: define USE_RGENGC_LOGGING_WB_UNPROTECT.
+ * ext/syck/lib/syck/rubytypes.rb: ditto.
-Thu Aug 8 16:44:25 2013 Koichi Sasada <ko1@atdot.net>
+Mon Jun 13 11:30:10 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * 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.
+ * 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]
-Thu Aug 8 15:37:53 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Mon Jun 13 10:54:03 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * 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.
+ * ext/openssl/pkey_dh.c: corrected documentation.
+ * test/openssl/utils.rb: add test key for DH.
+ * test/openssl/test_pkey_dh.rb: add tests.
-Thu Aug 8 14:54:18 2013 Shugo Maeda <shugo@ruby-lang.org>
+Mon Jun 13 10:13:08 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * NEWS: add description of incompatibility introduced by r42396.
- [ruby-core:56329] [Bug #8722]
+ * ext/openssl/pkey_dh.c: clarify difference between DH#public_key and
+ DH#pub_key in documentation.
-Thu Aug 8 14:50:36 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Mon Jun 13 05:50:43 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * common.mk (mini): portable target to build miniruby
+ * NEWS: introduce PKey.read.
- * common.mk (bisect): run git-bisect with miniruby
+Mon Jun 13 05:17:29 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * common.mk (bisect-ruby): run git-bisect with ruby
+ * 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]
- * tool/bisect.sh: script for git-bisect
+Mon Jun 13 04:42:24 2011 Koichi Sasada <ko1@atdot.net>
-Thu Aug 8 12:11:43 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/objspace/objspace.c (total_i): fix to skip no ruby objects.
- * 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.
+Mon Jun 13 03:07:38 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Aug 8 10:27:18 2013 Nobuyoshi Nakada <nobu@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
- * range.c (range_last): revert r42400. [Bug #8739]
+Mon Jun 13 02:40:23 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Thu Aug 8 10:26:25 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/openssl/test_pkey_dsa.rb: Test for DSA#syssign/sysverify.
- * file.c (rb_str_normalize_ospath): extract and move from dir.c.
+Mon Jun 13 01:59:19 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Thu Aug 8 05:59:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * ext/openssl/ossl_pkey_dh.c: completed documentation.
+ * ext/openssl/ossl_pkey_dsa.c: corrected examples. Improved parameter
+ sections.
- * test/openssl/test_ssl.rb: Fix test for CVE-2013-4073.
- Patch by Antonio Terceiro. [Bug #8750] [ruby-core:56437]
+Mon Jun 13 00:25:10 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Thu Aug 8 03:37:38 2013 Eric Hodel <drbrain@segment7.net>
+ * ext/openssl/ossl_pkey_dsa.c: completed documentation.
- * 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.
+Sun Jun 12 23:36:46 2011 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
-Wed Aug 7 23:06:26 2013 Akinori MUSHA <knu@iDaemons.org>
+ * lib/drb/drb.rb (kill_sub_thread): remove the method. [ruby-core:34185]
- * ruby.c (Process.argv0): New method to return the original value
- of $0. [Feature #8696]
+Sun Jun 12 21:01:56 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Wed Aug 7 23:05:55 2013 Akinori MUSHA <knu@iDaemons.org>
+ * ext/date/date_core.c (d_lite_marshal_load): should give converted value.
- * ruby.c (Process.setproctitle): New method to change the title of
- the running process that is shown in ps(1). [Feature #8696]
+Sun Jun 12 20:36:30 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Wed Aug 7 20:05:38 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c: edited doc.
- * bignum.c (rb_big_odd_p): Check the bignum length.
- (rb_big_even_p): Ditto.
+Sun Jun 12 18:12:07 2011 Koichi Sasada <ko1@atdot.net>
-Wed Aug 7 19:29:26 2013 Tanaka Akira <akr@fsij.org>
+ * benchmark/bm_vm3_clearmethodcache.rb: added.
- * bignum.c (dbl2big): A condition simplified.
+Sun Jun 12 17:40:29 2011 Koichi Sasada <ko1@atdot.net>
-Wed Aug 7 16:34:30 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * vm_method.c (rb_clear_cache*): update only vm state version.
- * test/webrick/test_cgi.rb (TestWEBrickCGI#{start_cgi_server,test_cgi}):
- mswin is not only mswin32 but also mswin64. [Bug #8746]
+ * 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]
-Wed Aug 7 16:19:12 2013 Koichi Sasada <ko1@atdot.net>
+Sun Jun 12 16:19:48 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * cont.c (rb_fiber_start): use RARRAY_RAWPTR() instead of
- RARRAY_PTR() because there is no new reference.
+ * ext/tk/extconf.rb: fail on Mac OS X. [Bug #4853][ruby-dev:43655]
- * proc.c (curry): ditto.
+Sun Jun 12 15:56:08 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * proc.c (rb_proc_call): remove line break.
+ * thread.c: remove th->transition_for_lock. It's thread unsafe.
+ [Bug #4723][ruby-dev:43563]
-Wed Aug 7 13:20:12 2013 Koichi Sasada <ko1@atdot.net>
+Sun Jun 12 15:47:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * random.c (random_load): use RARRAY_RAWPTR() instead of
- RARRAY_PTR() because there is no new reference.
+ * thread.c: introduce spurious wakeup safe deadlock check.
+ [Bug #4696][ruby-dev:43554]
-Wed Aug 7 12:58:23 2013 Koichi Sasada <ko1@atdot.net>
+Sun Jun 12 13:33:52 2011 Koichi Sasada <ko1@atdot.net>
- * thread.c (thread_start_func_2): use RARRAY_RAWPTR() instead of
- RARRAY_PTR() because there is no new reference.
+ * benchmark/bm_vm3_thread_mutex.rb: remove it.
-Wed Aug 7 09:00:24 2013 Zachary Scott <e@zzak.io>
+ * 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.
- * string.c: [DOC] Description of rb_str_equal [Fixes GH-375]
- Based on a patch by @markijbema
- https://github.com/ruby/ruby/pull/375
+Sun Jun 12 11:16:59 2011 Tanaka Akira <akr@fsij.org>
-Wed Aug 7 08:30:38 2013 Zachary Scott <e@zzak.io>
+ * 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.
- * 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
+Sun Jun 12 09:32:13 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Aug 7 07:46:23 2013 Zachary Scott <e@zzak.io>
+ * atomic.h (ATOMIC_OR): _InterlockedOr is not available on mingw.h
+ * gc.c (rb_gc_set_params): VM_OBJSPACE is disabled on mingw.
- * lib/rss/utils.rb: [DOC] RSS::Utils by Steve Klabnik [Bug #8745]
+Sun Jun 12 01:07:09 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Wed Aug 7 07:38:39 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c: edited doc.
- * 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.
+Sat Jun 11 23:18:00 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Aug 6 22:38:15 2013 Zachary Scott <e@zzak.io>
+ * 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.
- * time.c: [DOC] Typo in Time overview by @sparr [Fixes GH-374]
- https://github.com/ruby/ruby/pull/374
+Sat Jun 11 23:23:52 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Aug 6 22:35:32 2013 Zachary Scott <e@zzak.io>
+ * ext/date/date_core.c: edited doc.
- * lib/rss/1.0.rb: [DOC] Document RSS10 by Steve Klabnik [Bug #8740]
+Sat Jun 11 23:02:36 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Tue Aug 6 22:14:11 2013 Kouji Takao <kouji.takao@gmail.com>
+ * ext/openssl/lib/openssl/buffering.rb (module OpenSSL):
+ Buffering#each_byte should return String in accordance with IO in
+ 1.9.
- * ext/readline/readline.c (readline_s_delete_text): remove
- checking "$SAFE == 4".
+ * test/openssl/test_buffering.rb (class OpenSSL): add tests for getc
+ and each_byte.
- * ext/readline/readline.c: fix rdoc, remove "Raises SecurityError"
- and add "Raises NotImplementedError".
+Sat Jun 11 22:41:37 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Aug 6 22:04:38 2013 Kouji Takao <kouji.takao@gmail.com>
+ * time.c: a correction of doc for strftime (%v).
- * ext/readline/readline.c, test/readline/test_readline.rb: fix
- indent.
+Sat Jun 11 22:30:53 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Aug 6 21:59:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/date/date_core.c: replaced doc for strftime based on Time's one.
- * range.c (range_last): return nil for empty range, or in the case the
- predecessor is smaller than the begin. [Bug #8739]
+Sat Jun 11 22:07:56 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Aug 6 21:48:31 2013 Kouji Takao <kouji.takao@gmail.com>
+ * ext/date/date_core.c (datetime_s_{iso8601,rfc3339,xmlschema,rfc2822,httpdate}):
+ do not take argument comp.
- * ext/readline/readline.c (readline_s_set_point, Init_readline):
- add Readline.point=(pos). Patched by naruse. [ruby-dev:47535]
- [Feature #8675]
+Sat Jun 11 21:58:31 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Aug 6 21:14:11 2013 Kouji Takao <kouji.takao@gmail.com>
+ * ext/date/date_core.c: added examples.
- * 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]
+Sat Jun 11 19:40:45 2011 Narihiro Nakamura <authornari@gmail.com>
-Tue Aug 6 17:56:40 2013 Koichi Sasada <ko1@atdot.net>
+ * gc.c: expand heap if initial_heap_min_slots is bigger than
+ HEAP_MIN_SLOTS.
- * vm_insnhelper.c (vm_push_frame): change type of stack_max to size_t.
+Sat Jun 11 19:42:50 2011 WATANABE Hirofumi <eban@ruby-lang.org>
-Tue Aug 6 17:42:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ChangeLog (vim): set shiftwidth to 2.
- * range.c (range_last): exclude the last number of the exclusive range
- if the end is Numeric. [ruby-dev:47587] [Bug #8739]
+Sat Jun 11 19:27:06 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Tue Aug 6 17:42:21 2013 Nobuyoshi Nakada <nobu@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...
- * win32/win32.c (rb_w32_conv_from_wchar): converted string to CP_UTF8
- should have UTF-8 encoding. otherwise no conversion takes place
- later.
+Sat Jun 11 19:34:51 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Aug 6 17:21:38 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/date/date_core.c (Date::(ABBR_)?(MONTH|DAY)NAMES): should be usascii.
- * 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.
+Sat Jun 11 19:24:33 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * vm_core.h (CHECK_VM_STACK_OVERFLOW0): add to share the stack overflow
- checking code.
+ * ext/date/date_core.c: rewrote doc.
- * insns.def: catch up this change.
+Sat Jun 11 19:04:15 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm.c, vm_eval.c: ditto.
+ * lib/test/unit.rb (Test::Unit::GlobOption#non_options): should run
+ with 1.8.
- * test/ruby/test_exception.rb: add a stack overflow test.
- This code is reported by nobu.
+Sat Jun 11 18:05:57 2011 WATANABE Hirofumi <eban@ruby-lang.org>
-Tue Aug 6 17:02:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bootstraptest/runner.rb: should initialize $stress to avoid warnings.
- * 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.
+Sat Jun 11 18:02:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Aug 6 16:14:32 2013 Shugo Maeda <shugo@ruby-lang.org>
+ * io.c (io_getc): should be 7bit if ascii. fixes #4557
- * vm_eval.c (eval_string_with_cref): copy cref to limit the scope of
- refinements in the eval string. [ruby-core:56329] [Bug #8722]
+Sat Jun 11 16:52:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_refinement.rb: related test.
+ * numeric.c (rb_enc_uint_chr): fix message format. Bug#4869
-Tue Aug 6 12:23:12 2013 Tanaka Akira <akr@fsij.org>
+Sat Jun 11 16:28:25 2011 Kouhei Sutou <kou@cozmixng.org>
- * bignum.c (rb_big_realloc): Use VALGRIND_MAKE_MEM_UNDEFINED to
- declare undefined memory area.
- (bignew_1): Ditto.
+ * 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!!!
- * internal.h (VALGRIND_MAKE_MEM_DEFINED): Moved from gc.c
- (VALGRIND_MAKE_MEM_UNDEFINED): Ditto.
+Sat Jun 11 16:11:36 2011 Kouhei Sutou <kou@cozmixng.org>
-Tue Aug 6 01:40:37 2013 Zachary Scott <e@zzak.io>
+ * test/rexml/test_core.rb
+ (Tester#test_pretty_format_long_text_finite): remove needless
+ assert_nothing_raised.
- * process.c: [DOC] Document caveats of command form of Process.spawn
- with regard to the shell and OS. Patched by Steve Klabnik [Bug #8550]
+Sat Jun 11 16:04:03 2011 Kouhei Sutou <kou@cozmixng.org>
-Tue Aug 6 01:28:35 2013 Zachary Scott <e@zzak.io>
+ * 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!!!
- * lib/rss/0.9.rb: [DOC] Typo in example [Bug #8732]
+Sat Jun 11 15:53:27 2011 Kouhei Sutou <kou@cozmixng.org>
-Tue Aug 6 01:22:37 2013 Zachary Scott <e@zzak.io>
+ * test/rexml/test_elements.rb (ElementsTester): remove needless
+ prefix from test name.
- * lib/rss/2.0.rb: [DOC] Document RSS::Rss by Steve Klabnik #8740
- * lib/rss/atom.rb: [DOC] Typo in rdoc by Steve Klabnik
+Sat Jun 11 15:36:36 2011 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * common.mk: fixed a grammatical error
-Mon Aug 5 23:47:59 2013 Tanaka Akira <akr@fsij.org>
+Sat Jun 11 14:20:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c: Rename local variables.
+ * vm.c (thread_memsize): don't ignore size of th->local_storage.
-Mon Aug 5 22:23:59 2013 Zachary Scott <e@zzak.io>
+Sat Jun 11 10:32:46 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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
+ * lib/mkmf.rb: should quote arch_hdrdir and libpath for the case
+ installed prefix contains spaces.
-Mon Aug 5 17:38:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jun 11 10:20:52 2011 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]
+ * thread_pthread.c (native_cond_timeout): wrap conditionally used
+ label.
- * 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.
+ * thread_pthread.c (native_sleep): remove unused variable.
-Mon Aug 5 11:51:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Sat Jun 11 10:15:50 2011 Tanaka Akira <akr@fsij.org>
- * include/ruby/encoding.h: document which user flags are used by
- ENCODING_MASK for better greppability
+ * thread.c (rb_thread_execute_interrupts): use GetThreadPtr to extract
+ rb_thread_t from VALUE.
+ reported by Motohiro KOSAKI. [ruby-dev:43700]
-Mon Aug 5 10:01:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Sat Jun 11 10:00:49 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * object.c (rb_class_inherited_p): allow iclasses to be tested for
- inheritance. [Bug #8686] [ruby-core:56174]
+ * ruby.c (ruby_process_options): add missing return type.
- * test/ruby/test_method.rb: add test
+Fri Jun 10 23:18:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Aug 5 06:13:48 2013 Zachary Scott <e@zzak.io>
+ * ext/tk/tcltklib.c (lib_eventloop_core): replace CHECK_INTS with
+ rb_thread_check_ints(). Because current code can't be compiled.
- * enumerator.c: [DOC] Remove reference to Enumerator::Lazy#cycle
- Patch by @kachick [Fixes GH-372]
- https://github.com/ruby/ruby/pull/372
+Fri Jun 10 16:38:13 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Aug 5 03:57:16 2013 Zachary Scott <e@zzak.io>
+ * 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]
- * lib/rss/0.9.rb: [DOC] Document RSS09 by Steve Klabnik [Bug #8732]
+Fri Jun 10 14:34:24 2011 Koichi Sasada <ko1@atdot.net>
-Mon Aug 5 03:35:11 2013 Zachary Scott <e@zzak.io>
+ * common.mk: restore TESTRUN_SCRIPT to "$(srcdir)/test.rb".
+ TESTRUN_SCRIPT is used by "make run", "make gdb" and so on.
- * lib/rexml/attribute.rb: [DOC] Update example for #namespace
- Patch by Ippei Obayashi [Bug #8685] [ruby-core:56173]
+Fri Jun 10 13:01:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Aug 4 21:08:29 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * test/ruby/test_module.rb (TestModule#remove_rake_mixins): remove all
+ module related to Rake.
- * array.c (rb_ary_zip): performance implement by using
- ALLOCA_N() to allocate tmp buffer.
+Fri Jun 10 09:52:38 2011 Eric Hodel <drbrain@segment7.net>
-Sun Aug 4 07:14:49 2013 Tanaka Akira <akr@fsij.org>
+ * encoding.c: Mention that Encoding.compatible? can work with more
+ than just Strings.
- * README.EXT, README.EXT.ja: Mention rb_integer_pack and
- rb_integer_unpack.
+Fri Jun 10 02:25:53 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Sun Aug 4 01:54:45 2013 Tanaka Akira <akr@fsij.org>
+ * ext/psych/lib/psych.rb: updating version to match released gem.
- * 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.
+Fri Jun 10 01:06:29 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Sun Aug 4 00:57:58 2013 Tanaka Akira <akr@fsij.org>
+ * ext/bigdecimal (BigDecimal_to_i): Integer#** may return flonum.
- * bignum.c (big2str_karatsuba): Don't allocate new temporary buffer
- if the buffer is enough for current invocation.
+Fri Jun 10 00:35:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Sun Aug 4 00:22:34 2013 Tanaka Akira <akr@fsij.org>
+ * complex.c (string_to_c_internal): uses rb_reg_nth_match;
+ * rational.c (string_to_r_internal): ditto.
- * 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.
+Fri Jun 10 00:25:03 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Sat Aug 3 22:47:11 2013 Tanaka Akira <akr@fsij.org>
+ * gc.c: remove an unused declaration.
- * 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.
+Fri Jun 10 00:24:04 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Sat Aug 3 22:23:31 2013 Tanaka Akira <akr@fsij.org>
+ * rational.c (string_to_r): Rational#** may return flonum.
- * 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.
+Thu Jun 9 23:57:53 2011 Tanaka Akira <akr@fsij.org>
-Sat Aug 3 13:30:04 2013 Tanaka Akira <akr@fsij.org>
+ * io.c: fix IO.copy_stream interrupt handling.
+ based on the patch by Eric Wong. [ruby-core:36156]
- * 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.
+ * vm_core.h (rb_thread_call_with_gvl): don't declare here.
-Sat Aug 3 10:33:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread.c: include internal.h.
+ (rb_thread_execute_interrupts): new function.
- * parse.y (parser_set_integer_literal): use rb_rational_raw1() for
- integral rational because no reduction is needed with 1.
+ * internal.h (rb_thread_execute_interrupts): declared.
+ (rb_thread_call_with_gvl): declared.
-Sat Aug 3 09:46:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jun 9 23:34:01 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * ext/etc/etc.c (setup_passwd, setup_group): set proper encodings to
- string members.
+ * 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.
-Sat Aug 3 09:30:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jun 9 22:53:49 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * struct.c (rb_struct_define_under): new function to define Struct
- under the given namespace, not under Struct. [Feature #8264]
+ * test/ruby/test_thread.rb (TestThread#test_kill_thread_subclass):
+ add test for Thread.kill with Thread subclass instance.
- * ext/etc/etc.c: use rb_struct_define_under.
+Thu Jun 9 22:31:47 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Sat Aug 3 06:55:29 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * 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.
- * 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]
+Thu Jun 9 18:36:00 2011 Kenta Murata <mrkn@mrkn.jp>
-Sat Aug 3 04:23:48 2013 Eric Hodel <drbrain@segment7.net>
+ * 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.
- * doc/syntax/refinements.rdoc: Remove mention of instance_eval and
- module_eval from scope section per:
- http://twitter.com/shugomaeda/status/363219951336693761
+Thu Jun 9 10:57:03 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Sat Aug 3 02:22:05 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * bignum.c (big2str_orig): Refactored.
+Thu Jun 9 09:18:51 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Sat Aug 3 01:20:19 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * bignum.c (bigadd_core): Removed.
- (bigadd): Use bary_add instead of bigadd_core.
+Thu Jun 9 09:05:04 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Sat Aug 3 00:52:43 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * bignum.c (rb_big2str1): Simplify power_level calculation.
+Wed Jun 8 21:38:57 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Sat Aug 3 00:34:20 2013 Masaki Matsushita <glass.saga@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
- * array.c (rb_ary_zip): use rb_ary_new2() to create buffer
- if rb_block_arity() > 1.
+Tue Jun 7 20:50:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sat Aug 3 00:12:00 2013 Masaki Matsushita <glass.saga@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.
- * NEWS: Add the description that IO#seek supports SEEK_DATA
- and SEEK_HOLE.
+Tue Jun 7 18:52:55 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Aug 2 23:57:57 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/rubygems/user_interaction.rb (Gem::StreamUI#tty?): IO#tty? of
+ Windows has been fixed at r29969.
- * 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/rubygems/test_gem_stream_ui.rb: now can run tests.
- * test/ruby/test_syntax.rb (TestSyntax#test_value_of_def): test for
- above changes.
+Tue Jun 7 18:36:41 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Aug 2 23:54:11 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * 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.
- * array.c (rb_ary_zip): performance improvement by avoiding
- array creation if rb_block_arity() > 1.
+Tue Jun 7 18:15:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Aug 2 23:50:53 2013 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_set_program_name):
+ should show some messages when skipping tests.
- * bignum.c (power_cache_get_power): Apply bigtrunc to the result of
- bigsq.
- (big2str_karatsuba): Fix number of leading zero characters.
+Tue Jun 7 13:59:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Aug 2 23:48:36 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/date/date_core.c (date_s_today, datetime_s_now): check the
+ result of localtime_r().
- * parse.y (parser_yylex): calculate denominator directly as powers of
- ten, not parsing string.
+Tue Jun 7 13:36:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * parse.y (parser_number_literal_suffix): return bit set of found
- suffixes.
+ * ext/tk/extconf.rb: use $defs not $CPPFLAGS to get rid of
+ command line escape issues on Windows. fixed #4835.
- * parse.y (parser_set_number_literal, parser_set_integer_literal):
- split from parser_number_literal_suffix to set yylval.
+Tue Jun 7 03:18:45 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * parse.y (parser_yylex): parse rational number literal with decimal
- point precisely.
+ * test/ruby/test_io.rb (TestIO#test_s_{,bin}write): do not create a
+ file under /tmp. [Bug #4846]
- * parse.y (simple_numeric): integrate numeric literals and simplify
- numeric rules.
+Mon Jun 6 22:51:43 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * ext/ripper/eventids2.c (ripper_init_eventids2): ripper support for
- new literals, tRATIONAL and tIMAGINARY.
+ * 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
-Fri Aug 2 18:33:28 2013 Tanaka Akira <akr@fsij.org>
+Mon Jun 6 21:59:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * bignum.c (big2str_karatsuba): Reduce power_level more than one at
- recursion, if possible.
- (rb_big2str1): Follow the above change.
+ * test/date/test_switch_hitter.rb: added a test.
-Fri Aug 2 12:25:15 2013 Tanaka Akira <akr@fsij.org>
+Mon Jun 6 21:37:45 2011 Tadayoshi Funaba <tadf@dotrb.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.
+ * ext/date/date_core.c: added notes.
-Fri Aug 2 10:39:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Mon Jun 6 21:02:12 2011 Tadayoshi Funaba <tadf@dotrb.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]
+ * ext/date/date_core.c: flattened format to strftimev.
+ * ext/date/date_core.c (date_strftime_internal): taints run.
- * bootstraptest/test_literal_suffix.rb (assert_equal): add test
+Mon Jun 6 15:10:17 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Aug 2 09:14:47 2013 Eric Hodel <drbrain@segment7.net>
+ * include/ruby/{defines,missing}.h (rb_infinity, rb_nan): move from
+ defines.h to missing.h. (couldn't use RUBY_EXTERN there.)
- * doc/syntax/refinements.rdoc: Improve description of where you may
- activate refinements.
+Mon Jun 6 14:35:48 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Aug 2 07:45:55 2013 Tanaka Akira <akr@fsij.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.)
- * bignum.c (big2str_orig): Remove len argument.
- (big2str_karatsuba): Ditto.
- (rb_big2str1): Follow above change.
+Mon Jun 6 14:11:11 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Aug 2 02:32:00 2013 Kenta Murata <mrkn@mrkn.jp>
+ * ext/date/date_core.c (valid_jd_sub): need to convert from VALUE to
+ double.
- * NEWS: Add the description of number literal suffixes.
+ * ext/date/date_core.c (offset_to_sec): get rid of a compiler warning.
-Thu Aug 2 00:02:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Mon Jun 6 14:09:08 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * bootstraptest/test_literal_suffix.rb: add two test cases to
- examine that "1if true" and "1rescue nil" are recognized as 1.
+ * include/ruby/defines.h (rb_infinity, rb_nan): export for Windows.
-Thu Aug 1 23:45:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Mon Jun 6 10:54:45 2011 Shota Fukumori <sorah@tubusu.net>
- * rational.c (rb_flt_rationalize_with_prec): new public C function
- to rationalize a Float instance with a precision.
+ * 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.
- * rational.c (rb_flt_rationalize): new public C function to
- rationalize a Float instance. A precision is calculated from
- the given float number.
+Mon Jun 6 10:52:13 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * include/ruby/intern.h: Add rb_flt_rationalize_with_prec and
- rb_flt_rationalize.
+ * lib/net/http.rb: don't use autoload.
- * parse.y: implement number literal suffixes, 'r' and 'i'.
- [ruby-core:55096] [Feature #8430]
+Mon Jun 6 09:39:43 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * bootstraptest/test_literal_suffix.rb: add tests for parser to scan
- number literals with the above tsuffixes.
+ * ext/psych/parser.c (parse): release event objects to plug memory
+ leak. Thanks Mark J. Titorenko!
-Thu Aug 1 23:55:08 2013 Tanaka Akira <akr@fsij.org>
+Sun Jun 5 23:26:15 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (rb_big2str1): Remove a local variable.
+ * eval.c: remove rb_thread_stop_timer_thread function declaration.
+ Instead, include vm_core.h.
+ * process.c: ditto.
-Thu Aug 1 23:33:01 2013 Tanaka Akira <akr@fsij.org>
+Sun Jun 5 21:38:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (rb_cstr_to_inum): Use power_cache_get_power.
+ * 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.
-Thu Aug 1 21:02:48 2013 Tanaka Akira <akr@fsij.org>
+Sun Jun 5 17:50:01 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * bignum.c (rb_big2str1): Raise an error for too big number.
+ * ext/date/date_core.c (m_real_cwyear): new. derived from m_cwyear.
+ * ext/date/date_strftime.c: trivial changes.
-Thu Aug 1 20:46:29 2013 Tanaka Akira <akr@fsij.org>
+Sun Jun 5 17:22:01 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * bignum.c (power_cache_get_power): Hide cached Bignum objects.
+ * ext/tk/config_list.in: add new options for tcltklib.
-Thu Aug 1 19:15:05 2013 Tanaka Akira <akr@fsij.org>
+Sun Jun 5 10:06:50 2011 Tadayoshi Funaba <tadf@dotrb.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.
+ * 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.
-Thu Aug 1 12:37:58 2013 Tanaka Akira <akr@fsij.org>
+Sun Jun 5 06:22:02 2011 Tadayoshi Funaba <tadf@dotrb.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.
+ * NEWS: wrote about changes of date.
-Thu Aug 1 07:36:27 2013 Tanaka Akira <akr@fsij.org>
+Sat Jun 4 16:59:26 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * bignum.c (big2str_orig): Use temporary buffer when trim mode.
+ * ext/date/date_core.c (d_lite_inspect): changed the format.
+ * ext/date/date_core.c: refactoring and fixing some bugs.
-Thu Aug 1 06:28:48 2013 Tanaka Akira <akr@fsij.org>
+Sat Jun 4 04:04:41 2011 NARUSE, Yui <naruse@ruby-lang.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.
+ * test/rubygems/test_gem_commands_which_command.rb:
+ "missing" exists on ruby's top source directory. [Bug #4815]
-Thu Aug 1 04:06:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Jun 3 21:48:12 2011 NARUSE, Yui <naruse@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]
+ * lib/rubygems/test_case.rb: Refix for test-all in separate directory.
+ r31147 + r31151.
- * test/test_rdoc_markup_pre_process.rb (TestRDocMarkupPreProcess#setup):
- fix input_file_name, as the test script is not pre-processed.
+Fri Jun 3 20:58:47 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Aug 1 01:45:18 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c (d_lite_plus): get rid of compiler warnings.
- * bignum.c (big2str_karatsuba): Fix a condition of power_level.
+Fri Jun 3 20:56:40 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Aug 1 01:09:02 2013 Tanaka Akira <akr@fsij.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.)
- * 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.
+Fri Jun 3 20:42:04 2011 Shota Fukumori <sorah@tubusu.net>
-Wed Jul 31 23:59:28 2013 Tanaka Akira <akr@fsij.org>
+ * 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]
- * bignum.c (big2str_find_n1): Change the return type to size_t.
- (big2str_orig): Ditto.
- (big2str_karatsuba): Ditto.
- (rb_big2str1): Follow the above changes.
+Fri Jun 3 19:58:14 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Jul 31 23:19:06 2013 Tanaka Akira <akr@fsij.org>
+ * io.c (io_fflush): windows -- call fsync() only when the FD is tied to
+ file, because if the FD is pipe, it blocks.
- * 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.
+Fri Jun 3 09:27:31 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Jul 31 22:59:47 2013 Kouhei Sutou <kou@cozmixng.org>
+ * lib/net/http.rb (URI::HTTP#request_uri): return nil when the uri
+ is path-rootless form. Bug #4759
- * test/rexml/parse/test_notation_declaration.rb: Change class
- name to follow file name change.
+Thu Jun 2 23:51:03 2011 James Edward Gray II <jeg2@ruby-lang.org>
-Wed Jul 31 22:57:50 2013 Kouhei Sutou <kou@cozmixng.org>
+ * lib/csv.rb: Improve the line ending detection algorithm
+ patch by Alexey).
- * test/rexml/test_notationdecl_parsetest.rb: Rename to ...
- * test/rexml/parse/test_notation_declaration.rb: ... this.
+Thu Jun 2 20:05:57 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Jul 31 22:54:39 2013 Kouhei Sutou <kou@cozmixng.org>
+ * io.c (rb_io_s_write, rb_io_s_binwrite): return!!!
- * test/rexml/test_notationdecl_mixin.rb: Remove duplicated tests.
+Thu Jun 2 16:29:34 2011 Shota Fukumori <sorah@tubusu.net>
-Wed Jul 31 22:52:55 2013 Kouhei Sutou <kou@cozmixng.org>
+ * io.c: Add File.write, File.binwrite. [Feature #1081] [ruby-core:21701]
- * test/rexml/test_notationdecl_parsetest.rb: Fix typos in expected
- value.
- pubilc ->
- public
- ^^
+ * test/ruby/test_io.rb: Test for File.write, File.binwrite.
-Wed Jul 31 22:50:51 2013 Kouhei Sutou <kou@cozmixng.org>
+ * NEWS: News for above.
- * test/rexml/test_notationdecl_parsetest.rb: Add tests that focus
- system literal in external ID system notation declaration.
+Thu Jun 2 12:33:09 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Jul 31 22:36:21 2013 Tanaka Akira <akr@fsij.org>
+ * io.c (io_fflush, rb_io_flush): need to fsync() when ruby calls
+ internal flush. [ruby-core:36670] [Bug #4813]
- * 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.
+Thu Jun 2 07:56:24 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Wed Jul 31 22:04:36 2013 Kouhei Sutou <kou@cozmixng.org>
+ * ext/tk/tcltklib.c: reduce CPU power required by an eventloop.
- * test/rexml/test_notationdecl_parsetest.rb: Fix a typo.
- Extern ID ->
- ExternalID
- ^^
+Tue May 31 21:28:33 2011 Tanaka Akira <akr@fsij.org>
-Wed Jul 31 22:01:36 2013 Kouhei Sutou <kou@cozmixng.org>
+ * test/ruby/test_signal.rb (TestSignal#test_signal_requiring):
+ redirect stderr to null device.
- * test/rexml/test_notationdecl_parsetest.rb: Add tests that focus
- public ID in external ID notation declaration.
+Thu Jun 2 00:45:26 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Wed Jul 31 22:01:24 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * ext/tk/extconf.rb: fix for uninitialized global variables.
+ [Ruby 1.9 - Bug #4811]
- * parse.y: fix build error with bison-3.0.
+Wed Jun 1 21:57:08 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Jul 31 21:58:53 2013 Kouhei Sutou <kou@cozmixng.org>
+ * thread_pthread.c (native_sleep): fix 1000times calculation error.
+ this is a regression since r31457. [Bug #4808] [ruby-dev:43606]
- * test/rexml/test_notationdecl_parsetest.rb: Split test patterns.
+Wed Jun 1 17:19:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Jul 31 21:42:33 2013 Kouhei Sutou <kou@cozmixng.org>
+ * thread_pthread.c: remove unused macro.
- * test/rexml/test_notationdecl_parsetest.rb: Group tests.
+Wed Jun 1 15:42:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Jul 31 21:37:51 2013 Kouhei Sutou <kou@cozmixng.org>
+ * parse.y (peek_n): new macro to see next nth char.
- * test/rexml/test_notationdecl_mixin.rb (TestNotationDecl#test_name):
- Move to ...
- * test/rexml/test_notationdecl_parsetest.rb
- (TestNotationDecl#test_name): ... here.
+Wed Jun 1 15:40:46 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Jul 31 21:37:47 2013 Kouhei Sutou <kou@cozmixng.org>
+ * tool/rbinstall.rb (gem): fix for rubygems change.
-Wed Jul 31 21:31:49 2013 Kouhei Sutou <kou@cozmixng.org>
+Wed Jun 1 14:07:57 2011 Ryan Davis <ryand-ruby@zenspider.com>
- * test/rexml/test_notationdecl_parsetest.rb: Remove setup because it
- doesn't share anything with other tests.
+ * lib/minitest/*: Imported minitest 2.2.2 (r6281)
+ * test/minitest/*: ditto
-Wed Jul 31 21:24:55 2013 Kouhei Sutou <kou@cozmixng.org>
+Wed Jun 1 12:35:50 2011 Ryan Davis <ryand-ruby@zenspider.com>
- * 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.
+ * lib/rubygems*: Import rubygems 1.8.5 (released @ 137c80f)
+ * test/rubygems: Ditto
-Wed Jul 31 21:20:08 2013 Kouhei Sutou <kou@cozmixng.org>
+Wed Jun 1 12:34:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * test/rexml/test_notationdecl_parsetest.rb: remove a needless shebang.
+ * NEWS: add new features of bigdecimal.
-Wed Jul 31 20:11:01 2013 Masaki Matsushita <glass.saga@gmail.com>
+Wed Jun 1 09:41:14 2011 Eric Hodel <drbrain@segment7.net>
- * string.c (rb_str_rindex): fix bug introduced in r42269.
- "".rindex("") should return 0.
- (str_rindex): ditto.
+ * lib/cgi/util.rb: Improve documentation. Patch by Kuba Fietkiewicz.
+ [Ruby 1.9 - Bug #4775]
+ * lib/cgi/core.rb: ditto
-Wed Jul 31 19:55:33 2013 Tanaka Akira <akr@fsij.org>
+Wed Jun 1 09:26:05 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * lib/mathn.rb: Improve documentation and attach it to Numeric.
+ Modified from patch by Anil V. [Ruby 1.9 - Bug #4762]
-Wed Jul 31 18:32:25 2013 Akinori MUSHA <knu@iDaemons.org>
+Wed Jun 1 09:21:30 2011 Eric Hodel <drbrain@segment7.net>
- * lib/uri/common.rb (URI.decode_www_form_component): Use String#b.
+ * lib/prime.rb: Indent examples enough to appear as code sections.
+ Note that Prime is Enumerable. [#4762]
-Wed Jul 31 18:24:02 2013 Shugo Maeda <shugo@ruby-lang.org>
+Wed Jun 1 07:34:57 2011 Eric Hodel <drbrain@segment7.net>
- * eval.c (rb_mod_refine, mod_using, top_using): don't show
- warnings because Refinements are no longer experimental.
- [ruby-core:55993] [Feature #8632]
+ * 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]
- * test/ruby/test_refinement.rb: related test.
+Wed Jun 1 07:26:19 2011 Eric Hodel <drbrain@segment7.net>
- * NEWS: fixes for the above change.
+ * ext/pty/pty.c (pty_check): Restore "not reached" comment.
+ [Ruby 1.9 - Bug #4756]
-Wed Jul 31 17:55:55 2013 Shota Fukumori <her@sorah.jp>
+Wed Jun 1 07:21:40 2011 Eric Hodel <drbrain@segment7.net>
- * lib/uri/common.rb (URI.decode_www_form_component):
- Don't raise error when str includes multibyte characters.
+ * ext/zlib/zlib.c: Fix document-method declarations for set_sync and
+ set_comment. [Ruby 1.9 - Bug #4695]
-Wed Jul 31 17:45:39 2013 Masaki Matsushita <glass.saga@gmail.com>
+Wed Jun 1 06:43:13 2011 Masaya Tarui <tarui@ruby-lang.org>
- * string.c (rb_str_rindex): performance improvement by using
- memrchr(3).
+ * load.c (loaded_feature_path): cut nonsense loop execution to fix
+ performance bug.
-Wed Jul 31 16:43:30 2013 Masaki Matsushita <glass.saga@gmail.com>
+Wed Jun 1 01:16:02 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (rb_str_rindex): refactoring and avoid to call str_nth() if
- pos == 0.
+ * class.c (rb_mix_module): implement Module#mix.
-Wed Jul 31 14:41:36 2013 Akinori MUSHA <knu@iDaemons.org>
+Wed Jun 1 01:15:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/set.rb: [DOC] Add a couple of notes on Hash as storage.
- ref. [Feature #6589]
+ * io.c (io_encoding_set): should honor already set ecflags since it
+ might be set by mode option. fixed #4804
-Wed Jul 31 14:38:52 2013 Akinori MUSHA <knu@iDaemons.org>
+Wed Jun 1 00:34:04 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * lib/set.rb: [DOC] Fix example result. Hash is now ordered.
+ * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): remove unused
+ variable.
-Wed Jul 31 14:38:10 2013 Akinori MUSHA <knu@iDaemons.org>
+Wed Jun 1 00:32:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * lib/set.rb: [DOC] Use the term "sorted" instead of "ordered"
- when mentioning SortSet.
+ * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): support instantiation from
+ a Float through Rational.
-Wed Jul 31 12:18:47 2013 Tanaka Akira <akr@fsij.org>
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_new): ditto.
- * bignum.c (big2str_struct): New structure.
- (big2str_orig): Use big2str_struct.
- (big2str_karatsuba): Ditto.
- (rb_big2str1): Ditto.
+ * test/bigdecimal/test_bigdecimal.rb (test_global_new_float): add a test for
+ the above changes.
-Wed Jul 31 12:02:16 2013 Zachary Scott <e@zzak.io>
+ * test/bigdecimal/test_bigdecimal.rb (test_new_with_float): ditto.
- * lib/rubygems.rb: [DOC] typo in url patch by @Red54 [Fixes #369]
- https://github.com/ruby/ruby/pull/369
+Wed Jun 1 00:07:00 2011 Kenta Murata <mrkn@mrkn.jp>
-Wed Jul 31 07:09:07 2013 Eric Hodel <drbrain@segment7.net>
+ * 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.
- * lib/rubygems: Import RubyGems from master as of commit 523551c
- * test/rubygems: ditto.
+ * test/bigdecimal/test_bigdecimal.rb (test_coerce): add a test for the
+ above change.
-Tue Jul 30 22:21:54 2013 Masaki Matsushita <glass.saga@gmail.com>
+Tue May 31 23:49:08 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * test/ruby/test_hash.rb: add a test for enumeration order of Hash.
+ * ext/date/date_core.c (offset_to_sec): fixed invalid validation.
-Tue Jul 30 18:52:27 2013 Akinori MUSHA <knu@iDaemons.org>
+Tue May 31 23:43:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * 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.
+ * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): replace the algorithm for
+ coercing from a Rational to stop requiring "bigdecimal/util.rb".
+ [ruby-core:34318]
-Tue Jul 30 17:16:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/bigdecimal/bigdecimal.c (GetVpValue): refactoring.
- * sprintf.c (ruby__sfvextra): add QUOTE flag to escape unprintable
- characters.
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_new): support instantiation from a
+ Rational.
-Tue Jul 30 11:00:52 2013 Zachary Scott <e@zzak.io>
+ * test/bigdecimal/test_bigdecimal.rb (test_global_new_with_rational): add a
+ test for the above change.
- * ext/curses/extconf.rb: [DOC] nodoc to reduce Object pollution
+ * test/bigdecimal/test_bigdecimal.rb (test_new_with_rational): ditto.
-Tue Jul 30 08:19:42 2013 Tanaka Akira <akr@fsij.org>
+Tue May 31 22:44:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * sizes.c (Init_sizes): Define sizes only if the type actually exists.
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_new): support instantiation a
+ BigDecimal object from an Integer.
-Mon Jul 29 22:55:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/bigdecimal/test_bigdecimal.rb (test_new_with_integer):
+ add for testing the above change.
- * sizes.c (Init_sizes): define RbConfig::SIZEOF. [Feature #8568]
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_global_new): replace its body
+ with a BigDecimal_new call.
-Mon Jul 29 22:25:20 2013 Zachary Scott <e@zzak.io>
+ * test/bigdecimal/test_bigdecimal.rb (test_global_new_with_integer):
+ add for testing the above change.
- * 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
+Tue May 31 22:24:39 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Jul 29 22:16:11 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c: use simple/complex mode instead of light/right mode.
+ * test/date/*.rb: followed the above changes.
- * bignum.c (LOG2_KARATSUBA_BIG2STR_DIGITS): Renamed from
- LOG2_KARATSUBA_DIGITS.
- (KARATSUBA_BIG2STR_DIGITS): Renamed from KARATSUBA_DIGITS.
+Tue May 31 21:28:33 2011 Tanaka Akira <akr@fsij.org>
-Mon Jul 29 22:04:45 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * test/ruby/test_signal.rb (TestSignal#test_signal_requiring):
+ initialize SIGINT handler.
- * hash.c (rb_hash_compare_by_id): add function prototype.
+Tue May 31 17:03:24 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Mon Jul 29 21:53:41 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * 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>.
- * hash.c (rb_hash_compare_by_id): don't call rb_hash_rehash()
- if self.compare_by_identity? == true.
+ * test/net/http/test_http.rb: test it.
-Mon Jul 29 21:29:48 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * NEWS: Add new feature.
- * 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.
+Tue May 31 14:17:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/ruby/test_hash.rb: add a test for above.
+ * 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.
-Mon Jul 29 21:15:30 2013 Akinori MUSHA <knu@iDaemons.org>
+Tue May 31 13:00:17 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * 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().
+ * strftime.c (rb_strftime_with_timespec): improved style consistency.
+ constified some variables.
-Mon Jul 29 21:06:42 2013 Akinori MUSHA <knu@iDaemons.org>
+ * test/test_time.rb (TestTime#test_huge_precision): test for #4456.
- * 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.
+Tue May 31 12:53:10 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * enumerator.c (generator_init): Ditto.
+ * test/io/wait/test_io_wait.rb (TestIOWait#{test_nread,test_ready?,
+ test_wait}: give system some time to process the written data.
-Mon Jul 29 20:14:24 2013 Masaki Matsushita <glass.saga@gmail.com>
+Tue May 31 12:40:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * hash.c (rb_hash_assoc): revert r42224. table->type->compare is
- called only if hashes are matched.
+ * test/ruby/test_io.rb (TestIO#test_open_mode): MUST release resources
+ explicitly. fix problem of r31671
- * test/ruby/test_hash.rb: add a test to check using #== to compare.
+Tue May 31 10:49:55 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Jul 29 17:00:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * vm_exec.c: remove conditions for clang
+ because clang version 3.0 (trunk 132165) doesn't need them.
- * parse.y (yycompile): store file name as String to keep the encoding.
+Mon May 30 22:19:33 2011 Tanaka Akira <akr@fsij.org>
- * parse.y (rb_parser_compile_string_path, rb_parser_compile_file_path):
- new functions to pass file name as a String.
+ * test/ruby/test_signal.rb (TestSignal#test_signal_requiring): don't
+ close stderr.
- * parse.y (gettable_gen): return a copy of the original file name, not
- a copy in filesystem encoding.
+Mon May 30 20:22:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_eval.c (eval_string_with_cref): use Qundef instead of "(eval)".
+ * test/ruby/test_signal.rb (TestSignal#test_signal_requiring): small
+ but critical typo of r31642. sorry...
+ [Bug #4798] [ruby-core:36550]
-Mon Jul 29 16:53:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon May 30 15:44:16 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * hash.c (rb_hash_initialize_copy): copy st_table type even if empty.
- [ruby-core:56256] [Bug #8703]
+ * insns.def (opt_mult): as r31805, volatile it.
+ Without this, clang -O fails calculation.
-Mon Jul 29 16:34:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * numeric.c (fix_mul): ditto.
- * hash.c (rb_hash_initialize_copy): clear old table before copy new
- table.
+ * rational.c (f_imul): ditto.
-Mon Jul 29 16:34:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon May 30 10:26:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * hash.c (rb_hash_assoc): aggregate object can be initialized only
- with link time constants.
+ * numeric.c (int_pow): make sure to assign the result of x * z.
+ If xz is optimized out, the value won't overflow.
-Mon Jul 29 14:54:44 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sun May 29 23:17:29 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * hash.c (rb_hash_assoc): performance improvement by replacing
- compare function in RHASH(hash)->ntbl->type temporarily.
+ * re.c (rb_reg_match): fix rdoc of Regexp#=~.
+ patched by Tsuyoshi Sawada. [Bug #4781]
-Mon Jul 29 14:52:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun May 29 23:10:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * lib/mkmf.rb (xsystem): expand environment variable in all macros not
- expanded with RbConfig. [Bug #8702]
+ * lib/webrick/https.rb (WEBrick::HTTPRequest#parse_uri):
+ keep parse_uri as private. patched by okkez. [Bug #4773]
- * test/mkmf/test_framework.rb (create_framework): replace all $@ not
- only once.
+Sun May 29 17:53:03 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Mon Jul 29 06:54:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * numeric.c: add #include "internal.h" for rb_big_uminus() prototype.
- * win32/win32.c (rb_w32_pipe): use enum for compile time constants,
- instead of const int for debugging.
+Sun May 29 15:09:05 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Jul 29 00:11:49 2013 Tanaka Akira <akr@fsij.org>
+ * numeric.c (flo_round): fix for negative value.
- * bignum.c (bigdivrem): Specialized implementation added for
- nx == 2 && ny == 2
+Sun May 29 02:16:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun Jul 28 20:28:41 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * test/net/http/utils.rb (TestNetHTTPUtils#teardown): add nil check.
- * io.c (io_getpartial): use rb_str_locktmp_ensure().
- [ruby-core:56121] [Bug #8669]
+Sun May 29 00:22:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * io.c (rb_io_sysread): ditto.
+ * process.c (before_exec, after_exec): change from macro to function.
- * test/ruby/test_io.rb: add tests for above.
+Sat May 28 19:30:17 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun Jul 28 20:10:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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.
- * ext/extmk.rb (extmake): should make static libraries for extensions
- to be statically linked. [Bug #7948]
+Sat May 28 16:08:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun Jul 28 17:38:32 2013 Masaki Matsushita <glass.saga@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.
- * string.c: add internal API rb_str_locktmp_ensure().
+Sat May 28 03:04:27 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * io.c (io_fread): use rb_str_locktmp_ensure().
- [ruby-core:56121] [Bug #8669]
+ * io.c (fill_cbuf): return MORE_CHAR_SUSPENDED when cbuf is not empty.
- * test/ruby/test_io.rb: add a test for above.
+Sat May 28 02:22:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun Jul 28 13:04:39 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * string.c (rb_str_bytesize): rb_str_bytesize() should use LONG2NUM().
+ Patch by Nikolai Weibull. [Bug #4789] [ruby-core:36511]
- * 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]
+Sat May 28 02:06:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * test/ruby/test_io.rb: Add tests for above.
+ * io.c (fill_cbuf): Fix test-all crash.
-Sun Jul 28 12:41:39 2013 Tanaka Akira <akr@fsij.org>
+Sat May 28 00:58:40 2011 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * bignum.c (absint_numwords_generic): The char_bit variable changed
- to static constant.
+ * lib/ostruct.rb (method_missing): Handle [] and []= correctly.
+ Based on a patch by Caius Durling, bug #4179 [ruby-core:33792]
-Sun Jul 28 12:03:23 2013 Tanaka Akira <akr@fsij.org>
+Fri May 27 23:56:54 2011 Kouhei Sutou <kou@cozmixng.org>
- * bignum.c: Constify bary_* functions.
+ * test/rexml/test_core.rb (Tester::test_text_frozen): split frozen
+ string test. refs #4783
-Sun Jul 28 11:12:07 2013 Tanaka Akira <akr@fsij.org>
+Fri May 27 22:46:23 2011 Nobuyoshi Nakada <nobu@ruby-lang.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]
+ * tool/rbinstall.rb (gem): install gemspec of json. fixed #4784
-Sun Jul 28 10:54:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri May 27 22:45:10 2011 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.
+ * io.c (validate_enc_binmode): do not clear textmode flag if
+ default. fixed #4732
-Sun Jul 28 00:35:14 2013 Tanaka Akira <akr@fsij.org>
+ * io.c (fill_cbuf): finish reading at EOF.
- * bignum.c (rb_big_size): Return the bignum "bytewise" size.
- [ruby-core:55578] [Feature #8553]
- This is accepted by matz on DevelopersMeeting20130727Japan.
+Fri May 27 11:31:51 2011 misfo <tedwardo2@gmail.com>
-Sun Jul 28 00:07:48 2013 Tanaka Akira <akr@fsij.org>
+ * lib/rexml/text.rb (REXML::Text#initialize): prevent an error
+ when passing a frozen string to REXML::Text.new
- * include/ruby/intern.h (rb_integer_pack): Declaration moved from
- internal.h.
- (rb_integer_unpack): Ditto.
- [ruby-core:42813] [Feature #6065]
+ dup the string passed in instead of cloning so that it's frozen
+ state is ignored
-Fri Jul 26 23:18:13 2013 Kouhei Sutou <kou@cozmixng.org>
+Fri May 27 08:47:26 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * NEWS: Add a new feature that REXML::Parsers::StreamParser
- supports "entity" event.
+ * thread.c (ppoll): typo bug fix.
-Fri Jul 26 23:14:31 2013 Kouhei Sutou <kou@cozmixng.org>
+Fri May 27 08:35:04 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * 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.
+ * ext/tk/lib/tk.rb: hang-up at exit before calling Tk.mainloop.
-Fri Jul 26 23:05:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/extconf.rb: cannot make on MinGW [Ruby 1.9 - Bug #4141].
- * parse.y (parser_yylex): separate numeric literal from succeeding
- token, and treat 'e' as floating point number only if followed by
- exponent part.
+Thu May 27 00:34:07 2011 James Edward Gray II <jeg2@ruby-lang.org>
-Fri Jul 26 22:14:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/csv.rb: Enhance each() to support Enumerator.
- * vm_exec.h (CHECK_VM_STACK_OVERFLOW_FOR_INSN): surround with
- do/while (0), and remove unnecessary casts.
+Thu May 26 10:32:11 2011 James Edward Gray II <jeg2@ruby-lang.org>
-Fri Jul 26 20:12:07 2013 Akinori MUSHA <knu@iDaemons.org>
+ * lib/csv.rb: Documentation improvements from Ysiad Ferreiras.
+ [Ruby 1.9 - Bug #4785]
- * 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
+Thu May 26 15:42:02 2011 Cezary Baginski <cezary.baginski@gmail.com>
-Fri Jul 26 19:25:17 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/xmlrpc/parser.rb (FaultException): fix to_s and inspect
- * 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).
+ * test/xmlrpc/parser.rb: test for the above
-Fri Jul 26 18:30:14 2013 Koichi Sasada <ko1@atdot.net>
+Wed May 25 11:54:31 2011 Eric Hodel <drbrain@segment7.net>
- * array.c (ary_memcpy): cast to int to suppress a warning.
+ * ext/curses/curses.c: Remove color constants block.
+ [Ruby 1.9 - Bug #4748]
-Fri Jul 26 18:21:58 2013 Koichi Sasada <ko1@atdot.net>
+Wed May 25 09:56:45 2011 Eric Hodel <drbrain@segment7.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.
+ * 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]
-Fri Jul 26 17:49:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed May 25 09:35:31 2011 Eric Hodel <drbrain@segment7.net>
- * win32/file.c (fix_string_encoding): fix target encoding. the
- parameter `encoding' is not the target encoding but the original
- encoding.
+ * lib/benchmark.rb: Restore nodoc for Benchmark::Job and
+ Benchmark::Report. [Ruby 1.9 - Bug #4726]
-Fri Jul 26 14:05:19 2013 Zachary Scott <e@zzak.io>
+Wed May 25 09:29:38 2011 Eric Hodel <drbrain@segment7.net>
- * ext/fiddle/*: [DOC] More doc on dlopen and RTLD_DEFAULT from r42184
+ * lib/net/pop.rb: Hide implementation details from RDoc.
+ [Ruby 1.9 - Bug #4711]
-Fri Jul 26 13:08:53 2013 Zachary Scott <e@zzak.io>
+Wed May 25 09:26:29 2011 Eric Hodel <drbrain@segment7.net>
- * ext/fiddle/lib/fiddle.rb: [DOC] Document Fiddle.dlopen(nil)
- * ext/fiddle/handle.c: [DOC] Document Fiddle::Handle.new(nil)
+ * lib/net/ftp.rb: Add :nodoc: for private methods.
+ [Ruby 1.9 - Bug #4710]
-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.
+Wed May 25 09:19:17 2011 Eric Hodel <drbrain@segment7.net>
- * load.c (rb_require_safe): search in OS path encoding for Windows.
+ * ext/zlib/zlib.c: Fix Document-method declarations. Improve
+ Zlib::GzipFile's method catalog. [Ruby 1.9 - Bug #4695]
- * ruby.c (rb_load_file_str): load file with keeping path encoding.
+Wed May 25 08:22:12 2011 Eric Hodel <drbrain@segment7.net>
- * win32/file.c (rb_file_load_ok): use WCHAR type API assuming incoming
- path is encoded in UTF-8. [ruby-core:56136] [Bug #8676]
+ * lib/erb.rb: Hide documentation for implementation details of ERB.
+ [Ruby 1.9 - Bug #4694]
- * file.c (rb_str_encode_ospath): simplify using rb_str_conv_enc().
+Wed May 25 07:58:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * win32/file.c (fix_string_encoding): simplify with rb_str_conv_enc().
+ * lib/tempfile.rb (Tempfile.{mkdir,rmdir}): revert for backward
+ compatibility.
- * win32/file.c (convert_mb_to_wchar): use bare pointer instead of
- VALUE, and remove useless argument.
+Wed May 25 07:13:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Jul 26 11:42:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * spec/README: update the description.
- * rational.c (f_round_common): Rational is expected to be returned by
- Rational#*, but mathn.rb breaks that assumption. [ruby-core:56177]
- [Bug #8687]
+Wed May 25 07:12:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Jul 26 01:37:45 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/tempfile.rb (Tempfile.{lock,unlock}_tempfile): refactor.
- * include/ruby/ruby.h: check defined(USE_RGENGC_LOGGING_WB_UNPROTECT)
+Tue May 24 17:30:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Jul 26 01:21:41 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * spec/README: fix typo.
+ patched by bowsersenior. https://github.com/ruby/ruby/pull/24
- * file.c (rb_file_expand_path_internal): fix r42160; skip '~'.
+Tue May 24 07:06:34 2011 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Thu Jul 25 17:53:18 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/tk/lib/tk.rb: fail to start Tk.mainloop (exit immediately) on
+ some environment (reported on [ruby-talk:381444]).
- * lib/net/http.rb (Net::HTTP#connect): disable Nagle's algorithm on
- HTTP connection. [ruby-core:56158] [Feature #8681]
+ * ext/tk/lib/tk/canvas.rb: support creating a canvas item object from
+ an item ID number.
-Thu Jul 25 17:49:42 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/tk/lib/tk/image.rb: import documents which are pull-requested.
+ [Ruby 1.9 - Feature #4595]
- * re.c (rb_reg_to_s): convert closing parenthesis to the target encoding
- if it is ASCII incompatible encoding. [ruby-core:56063] [Bug #8650]
+ * 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.
-Thu Jul 25 17:21:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/tk/lib/tk/README.tcltklib: modify docs for some new configure
+ options.
- * 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.
+Tue May 24 04:01:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Thu Jul 25 17:17:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/yaml.rb: switch default YAML engine to Psych, old syck engine
+ may be enabled via YAML::ENGINE.yamler = "syck". [ruby-core:36374]
- * file.c (rb_file_expand_path_internal): should clear coderange after
- copying user name as binary data.
+Mon May 23 09:45:26 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Thu Jul 25 16:17:55 2013 Koichi Sasada <ko1@atdot.net>
+ * 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.
- * encoding.c (check_encoding): Check T_DATA or not.
- is_data_encoding(obj) assumes that `obj' is T_DATA.
+Mon May 23 10:01:02 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Thu Jul 25 13:06:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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.
- * dir.c (dir_s_home): use rb_home_dir_of and rb_default_home_dir.
+Mon May 23 09:19:53 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * lib/net/smtp.rb: Document Net::SMTP::Response. Patch by J.R. Garcia.
+ [Ruby 1.9 - Bug #4768]
- * file.c (rb_default_home_dir): split from rb_home_dir() for the home
- directry of the current user.
+Mon May 23 09:03:52 2011 Shota Fukumori <sorah@tubusu.net>
-Thu Jul 25 12:32:11 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/test/unit/parallel.rb: Never Ignore SIGINT. When received
+ Interrupt, immediately puts result and exit. [ruby-dev:43571]
- * ext/openssl/ossl.c: support additional three thread synchronization
- functions. [ruby-trunk - Bug #8386]
+ * lib/test/unit.rb: When received Interrupt, wait results from workers
+ and collect them. [ruby-dev:43571]
-Thu Jul 25 07:15:58 2013 Eric Hodel <drbrain@segment7.net>
+Mon May 23 09:08:07 2011 Eric Hodel <drbrain@segment7.net>
- * lib/rubygems: Import RubyGems from master as of commit 4ff70cc
- * test/rubygems: ditto.
+ * lib/mathn.rb: Improve documentation. Patch by Sandor Szucs.
+ [Ruby 1.9 - Bug #4767]
-Wed Jul 24 20:57:44 2013 Koichi Sasada <ko1@atdot.net>
+Mon May 23 08:45:55 2011 Eric Hodel <drbrain@segment7.net>
- * compile.c (iseq_set_arguments): use RARRAY_RAWPTR() instead of
- RARRAY_PTR() because there is no new reference.
+ * lib/ostruct.rb: Improve documentation. Patch by Franklin Webber.
+ [Ruby 1.9 - Bug #4761]
- * compile.c (iseq_set_exception_table): ditto.
+Mon May 23 08:35:24 2011 Eric Hodel <drbrain@segment7.net>
-Wed Jul 24 19:49:54 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * hash.c: Improve documentation of Hash#key. Patch by Utkarsh
+ Kukreti. [Ruby 1.9 - Bug #4760]
- * lib/uri/generic.rb (find_proxy): raise BadURIError if the URI is
- a relative URI. [Bug #8645]
+Mon May 23 08:32:59 2011 Eric Hodel <drbrain@segment7.net>
-Wed Jul 24 18:56:06 2013 Koichi Sasada <ko1@atdot.net>
+ * enumerator.c: Improve documentation. Patch by Dave Copeland.
+ [Ruby 1.9 - Bug #4757]
- * vm_insnhelper.c (vm_expandarray): use RARRAY_RAWPTR() instead of
- RARRAY_PTR() because there is no new reference.
+Mon May 23 07:19:45 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * vm_insnhelper.c (vm_caller_setup_args): ditto.
+ * NEWS (openssl): Infinite length support. Different behavior of
+ Constructive and Primitive constructors.
- * vm_insnhelper.c (vm_yield_setup_block_args): ditto.
+Mon May 23 06:58:33 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Wed Jul 24 18:40:11 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_asn1.c: Forbid Constructives whose value is not an
+ Array to prevent segfault. Added test.
- * array.c, gc.c: move ary_unprotect_logging() into
- rb_gc_unprotect_logging() which is general version
+Mon May 23 06:33:17 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * include/ruby/ruby.h: add USE_RGENGC_LOGGING_WB_UNPROTECT
- to enable.
+ * ext/openssl/ossl_asn1.c: Forbid Constructive without infinite
+ length. This also prevents a segfault. Added test and improved
+ documentation.
-Wed Jul 24 17:37:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon May 23 05:58:14 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * file.c (rb_file_expand_path_internal): preserve the file name
- encoding in an exception message.
+ * 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]
-Wed Jul 24 08:04:49 2013 Koichi Sasada <ko1@atdot.net>
+Mon May 23 04:03:46 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * test/-ext-/tracepoint/test_tracepoint.rb: add GC on/off to count
- GC events strictly.
+ * 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.
-Tue Jul 23 23:19:24 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Mon May 23 04:03:46 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * ext/openssl/extconf.rb (CRYPTO_THREADID): check exist or not.
+ * 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.
- * 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.
+Mon May 23 03:44:39 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * 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_asn1.c (ossl_asn1data_to_der): Remove redundant
+ flag tmp_cons.
- * ext/openssl/ossl.c (ossl_threadid_func): defined for above.
+Mon May 23 00:35:00 2001 Kenta Murata <mrkn@mrkn.jp>
-Tue Jul 23 20:47:36 2013 Tanaka Akira <akr@fsij.org>
+ * bignum.c (dump_bignum, bigmul1_balance, big_split, biglsh_bang),
+ (bigrsh_bang, big_split3, bigmul1_toom3, bigmul0): implement Toom3 (Toom-Cook)
+ multiplication.
- * bignum.c: Move functions.
+ * include/ruby/defines.h: add format prefixes for BDIGIT and BDIGIT_DBL.
-Tue Jul 23 20:14:55 2013 Tanaka Akira <akr@fsij.org>
+Sun May 22 23:24:02 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * bignum.c (bary_divmod): Add special cases for x < y easily detected
- and nx == 2 && ny == 2.
+ * ext/openssl/ossl_asn1.c: Instead of rb_intern use static symbols to
+ improve performance.
-Tue Jul 23 19:48:38 2013 Koichi Sasada <ko1@atdot.net>
+Sun May 22 21:56:51 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * thread_(pthread|win32).h: rename rb_thread_cond_t to
- rb_nativethread_cond_t.
+ * ext/openssl/ossl_asn1.c: Use OpenSSL constants V_ASN1_xxx instead of
+ hardcoded numbers for initializing class_tag_map.
- * thread.c, thread_pthread.c, thread_win32.c, vm_core.h: catch up
- renaming.
+Sun May 22 21:29:29 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Tue Jul 23 19:44:32 2013 Koichi Sasada <ko1@atdot.net>
+ * include/ruby/defines.h (CASEFOLD_FILESYSTEM): Revert r30508. See #4255.
+ Now __APPLE__ is not CASEFOLD_FILESYSTEM again.
- * thread_native.h: add rb_nativethread_self() which returns
- current running native thread identifier.
+ * load.c (loaded_feature_path, rb_feature_p, load_lock): Revert r30508.
+ See #4255. Make $LOADED_FEATURES scanning case-sensitive again.
- * thread_[pthread|win32].c: implement rb_nativethread_self().
+Sun May 22 18:59:27 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
-Tue Jul 23 19:34:11 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_asn1.c(ossl_asn1_default_tag): avoid using RCLASS_SUPER
+ to make it compilable. Plus, tabify and change variable definition style.
- * thread_pthread.h, thread_win32.h: rename rb_thread_id_t to
- rb_nativethread_id_t.
+Sun May 22 18:26:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * thread_pthread.c, vm_core.h: use rb_nativethread_id_t.
+ * gc.c (vm_xcalloc): use calloc provided by platforms.
+ fixes #4754
-Tue Jul 23 18:56:11 2013 Koichi Sasada <ko1@atdot.net>
+Sun May 22 11:44:53 2011 Eric Hodel <drbrain@segment7.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.
+ * ext/pty/pty.c: Improve documentation. Patch by David Copeland.
+ [Ruby 1.9 - Bug #4756]
-Tue Jul 23 18:44:15 2013 Koichi Sasada <ko1@atdot.net>
+Sun May 22 11:26:39 2011 Eric Hodel <drbrain@segment7.net>
- * thread_native.h: added.
- Move native thread related lines from vm_core.h.
- And declare several functions "rb_nativethread_lock_*",
- manipulate locking.
+ * lib/timeout.rb: Improve documentation. Patch by David Copeland.
+ [Ruby 1.9 - Bug #4755]
- * common.mk: add thread_native.h.
+Sun May 22 11:21:41 2011 Eric Hodel <drbrain@segment7.net>
- * thread.c: add functions "rb_nativethread_lock_*".
+ * lib/ipaddr.rb: Improve documentation. Patch by Sandor Szucs.
+ [Ruby 1.9 - Bug #4753]
- * 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.
+Sun May 22 11:14:40 2011 Eric Hodel <drbrain@segment7.net>
-Tue Jul 23 16:14:57 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/forwardable.rb: Document def_delegator. Patch by Sandor Szucs.
+ [Ruby 1.9 - Bug #4752]
- * gc.c (gc_before_sweep): fix spacing.
+Sun May 22 11:11:41 2011 Eric Hodel <drbrain@segment7.net>
-Tue Jul 23 15:57:11 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/fileutils.rb: Document block behavior of FileUtils.cd. Patch by
+ Bil Kleb. [Ruby 1.9 - Bug #4751]
- * 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.
+Sun May 22 11:07:47 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * ext/curses/curses.c: Complete documentation. Patch by Vincent
+ Batts. [Ruby 1.9 - Bug #4748]
- * gc.c (gc_slot_sweep): do not need to clear slot->freelist.
+Sun May 22 09:29:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Jul 23 09:34:49 2013 Zachary Scott <e@zzak.io>
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_set_program_name):
+ use spawn. it prevent that other tests inherit renamed $0.
- * sample/drb/README*.rdoc: [DOC] migrate DRb sample READMEs to rdoc
+Sun May 22 08:57:13 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Tue Jul 23 09:28:05 2013 Zachary Scott <e@zzak.io>
+ * 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]
- * lib/drb/invokemethod.rb: [DOC] nodoc InvokeMethod18Mixin
+Sun May 22 07:54:16 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Tue Jul 23 08:44:37 2013 Eric Hodel <drbrain@segment7.net>
+ * ext/openssl/ossl_digest.c: Explain DSS and DSS1 in documentation.
- * 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.
+Sun May 22 07:10:25 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Tue Jul 23 08:11:32 2013 Zachary Scott <e@zzak.io>
+ * test/openssl/test_pkey_dsa.rb: Add tests for sign/verify.
- * lib/rexml/streamlistener.rb: [DOC] Fix examples in
- REXML::StreamListener#entitydecl patch by Ippei Obayashi [Bug #8665]
+Sun May 22 06:07:17 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Tue Jul 23 07:44:59 2013 Eric Hodel <drbrain@segment7.net>
+ * test/openssl/test_x509cert.rb: Merge DSA-related tests from ruby_1_8
+ branch.
- * lib/rubygems: Import RubyGems from master as of commit b165260
- * test/rubygems: ditto.
+Sun May 22 04:11:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Jul 23 07:14:31 2013 Tanaka Akira <akr@fsij.org>
+ * thread.c (Init_Thread): add a code comment why the meaningless
+ line is necessary.
- * bignum.c (bary_mulsub_1xN): New function.
- (bary_mul_toom3): Use bary_mulsub_1xN.
+Sun May 22 01:35:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Jul 23 03:32:23 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c: modified documentation.
- * 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.
+Sat May 21 22:46:26 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Jul 23 01:34:45 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_strftime(date_strftime_with_tmx): "%v" means "%e-%b-%Y".
- * bignum.c (bigdivrem_mulsub): Extracted from bigdivrem1.
- (bigdivrem1): Use bary_add.
+Sat May 21 22:14:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jul 22 18:39:52 2013 Masaki Matsushita <glass.saga@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.
- * string.c (rb_str_enumerate_chars): specify array capa
- with str_strlen().
+Sat May 21 21:44:14 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * string.c (rb_str_enumerate_codepoints): ditto.
+ * test/date/test_switch_hitter.rb: new.
-Mon Jul 22 18:01:33 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sat May 21 21:18:29 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * string.c (rb_str_enumerate_chars): specify array capa.
+ * 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.
-Mon Jul 22 17:24:14 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sat May 21 02:58:46 2011 Eric Hodel <drbrain@segment7.net>
- * string.c (rb_str_each_char_size): performance improvement by
- using rb_str_length().
+ * ext/.document: Add curses to documented extensions.
+ * ext/curses/curses.c: Improve documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #4747]
-Mon Jul 22 16:32:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat May 21 02:51:01 2011 Eric Hodel <drbrain@segment7.net>
- * vm_eval.c (eval_string_with_cref): check by Check_TypedStruct
- instead of rb_obj_is_kind_of.
+ * ext/bigdecimal/lib/bigdecimal/util.rb: Improve documentation. Patch
+ by Pete Higgins. [Ruby 1.9 - Bug #4746]
-Mon Jul 22 13:19:22 2013 Koichi Sasada <ko1@atdot.net>
+Sat May 21 02:44:10 2011 Eric Hodel <drbrain@segment7.net>
- * array.c (ary_resize_capa): use RARRAY_RAWPTR() because
- this code creates no new references.
+ * ext/bigdecimal/lib/bigdecimal/jacobian.rb: Document isEqual. Patch
+ by Kuba Fietkiewicz. [Ruby 1.9 - Bug #4744]
-Mon Jul 22 12:58:18 2013 Koichi Sasada <ko1@atdot.net>
+Sat May 21 02:22:34 2011 Eric Hodel <drbrain@segment7.net>
- * array.c (ary_memfill): added.
+ * ext/date/lib/date/format.rb: Document date formats. Patch by
+ Clinton Nixon. [Ruby 1.9 - Bug #4743]
- * array.c (rb_ary_initialize): use ary_memfill().
+Fri May 20 05:15:19 2011 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- * array.c (rb_ary_fill): ditto.
+ * gc.c: Fix build on m68k by 'error: too few arguments to
+ function 'mark_locations_array''.
- * array.c (rb_ary_slice_bang): use RARRAY_RAWPTR() because
- this code creates no new references.
+Fri May 20 04:23:42 2011 Eric Hodel <drbrain@segment7.net>
-Mon Jul 22 10:09:46 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/scanf.rb: Improve documentation. Patch by Gabe McArthur.
+ [Ruby 1.9 - Bug #4735]
- * gc.c (gc_slot_sweep): need to add empty RVALUE as freeobj.
+Fri May 20 00:58:01 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Jul 22 09:48:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * enc/trans/ibm737-tbl.rb: greek code page. fixes #4738
- * 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].
+Thu May 19 14:44:05 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Jul 22 09:24:19 2013 Kouji Takao <kouji@takao7.net>
+ * test/ruby/test_signal.rb (test_signal_requiring): skip on Windows.
+ we can send SIGINT only to pid 0 and the process itself.
- * 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.
+Thu May 19 09:07:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- Thanks, Nobuyoshi Nakada, for the patch.
+ * lib: revert r31635-r31638 and untabify with expand(1).
-Mon Jul 22 03:15:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu May 19 07:47:26 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * ext/date/date_parse.c (rfc2822_cb): check if wday is given, since it
- can be omitted.
+ * test/openssl/test_pkey_rsa.rb: Add tests for sign/verify.
-Mon Jul 22 00:15:20 2013 Tanaka Akira <akr@fsij.org>
+Thu May 19 07:19:16 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * bignum.c (bary_sq_fast): Refine expressions.
+ * ext/openssl/ossl_pkey.c: Add documentation.
-Sun Jul 21 21:08:59 2013 Tanaka Akira <akr@fsij.org>
+Thu May 19 07:06:56 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * lib/benchmark.rb: Fix indentation.
+ * lib/net/imap.rb: Fix indentation of regular expressions.
-Sun Jul 21 09:58:19 2013 Tanaka Akira <akr@fsij.org>
+Thu May 19 06:36:11 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * lib/net/imap.rb: Fix indentation of EOF for heredoc.
+ * lib/debug.rb (Commands): Fix indentation of EOHELP for heredoc.
-Sun Jul 21 08:12:16 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Thu May 19 06:30:38 2011 Eric Hodel <drbrain@segment7.net>
- * proc.c (proc_to_s): use PRIsVALUE to preserve the result encoding.
+ * lib/mkmf.rb: Fix indentation of EOM for heredoc.
-Sun Jul 21 03:36:18 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Thu May 19 06:16:41 2011 Eric Hodel <drbrain@segment7.net>
- * hash.c (rb_hash_flatten): use NUM2INT to raise TypeError on 32bit
- platform. it's introduced by r42039
+ * lib: Convert tabs to spaces for ruby files per
+ http://redmine.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]
-Sun Jul 21 01:07:45 2013 Benoit Daloze <eregontp@gmail.com>
+Thu May 19 06:06:07 2011 Eric Hodel <drbrain@segment7.net>
- * 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]
+ * 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
-Sat Jul 20 22:44:50 2013 Zachary Scott <e@zzak.io>
+Thu May 19 06:02:21 2011 Eric Hodel <drbrain@segment7.net>
- * common.mk: Document running a single test [Fixes GH-363]
- Patch by Avdi Grimm https://github.com/ruby/ruby/pull/363
+ * lib/tempfile.rb: Document Dir.mkdir and Dir.rmdir. Patch by Clinton
+ Nixon. [Ruby 1.9 - Bug #4728]
-Sat Jul 20 22:39:56 2013 Zachary Scott <e@zzak.io>
+Thu May 19 05:57:52 2011 Eric Hodel <drbrain@segment7.net>
- * sample/*: whitespace patch by Sergio Campama [Fixes GH-364]
- https://github.com/ruby/ruby/pull/364
+ * encoding.c: Improve documentation for Encoding#default_external and
+ Encoding#default_internal.
-Sat Jul 20 22:33:13 2013 Zachary Scott <e@zzak.io>
+Wed May 18 22:45:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * doc/regexp.rdoc: [DOC] Fix typo in example [Fixes GH-365]
- Patch by Juanito Fatas https://github.com/ruby/ruby/pull/365
+ * ext/io/console/lib/console/size.rb (IO#console_size): new
+ method. (EXPERIMENTAL)
-Sat Jul 20 17:46:03 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed May 18 22:41:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (rb_str_succ): add missing case NEIGHBOR_WRAPPED.
- r42078 caused buggy behavior like "\xFF".b -> "\x01\xFF".b
+ * internal.h: add for internal use only.
-Sat Jul 20 15:22:38 2013 Koichi Sasada <ko1@atdot.net>
+Wed May 18 22:36:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * array.c (rb_ary_resize): use simple memcpy because there are no new
- references.
+ * eval.c (setup_exception): internal exception should be hidden
-Sat Jul 20 15:02:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed May 18 20:25:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * safe.c (ruby_safe_level_4_warning): define for old extension
- libraries. [Bug #8652]
+ * lib/timeout.rb (Timeout#timeout): don't leak "execution expired"
+ exception. [Bug #4283] [ruby-core:34534].
-Sat Jul 20 14:38:00 2013 Koichi Sasada <ko1@atdot.net>
+Wed May 18 06:09:24 2011 Eric Hodel <drbrain@segment7.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.
+ * lib/cmath.rb: Add some examples and improve documentation. Patch by
+ Sandor Szucs. [Ruby 1.9 - Bug #4727]
-Sat Jul 20 12:14:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed May 18 05:40:31 2011 Eric Hodel <drbrain@segment7.net>
- * string.c (enc_succ_char, enc_pred_char): consider wchar case.
- [ruby-core:56071] [Bug #8653]
+ * lib/benchmark.rb: Remove nodoc from Benchmark::Job and
+ Benchmark::Report. Patch by Sandor Szucs. [Ruby 1.9 - Bug #4726]
- * string.c (rb_str_succ): do not replace with invalid char.
+Wed May 18 05:29:26 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * lib/webrick/compat.rb: Improve documentation. Patch by Sandor
+ Szucs. [Ruby 1.9 - Bug #4725]
- * include/ruby/encoding.h (rb_enc_code_to_mbclen): declaration and
- shortcut macro.
+Wed May 18 05:10:35 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 21:59:12 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/tracer.rb: Improve documentation. Patch by Richard Ramsden.
+ [Ruby 1.9 - Feature #4720]
- * gc.c: declare type_name() at the beginning of file.
+Wed May 18 04:53:41 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 21:35:09 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/cmath.rb: Improve documentation. Patch by Jason Dew.
+ [Ruby 1.9 - Feature #4717]
- * array.c: reduce shady operations.
+Wed May 18 04:50:24 2011 Eric Hodel <drbrain@segment7.net>
- * 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().
+ * lib/net/ftp.rb: Improve documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #4710]
- * array.c (rb_ary_shift): use RARRAY_PTR_USE() without WB because
- there are not new relations.
+Wed May 18 03:14:49 2011 Eric Hodel <drbrain@segment7.net>
- * array.c (ary_ensure_room_for_unshift): ditto.
+ * test/test_singleton.rb: Add tests from lib/singleton.rb. Patch by
+ Pete Higgins. [Ruby 1.9 - Bug #4715]
- * array.c (rb_ary_sort_bang): ditto.
+Wed May 18 03:03:07 2011 Eric Hodel <drbrain@segment7.net>
- * array.c (rb_ary_delete_at): ditto.
+ * lib/singleton.rb: Improve documentation. Patch by Pete Higgins.
+ [Ruby 1.9 - Bug #4709]
- * array.c (rb_ary_reverse_m): use RARRAY_RAWPTR() because
- there are not new relations.
+Tue May 17 21:24:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri Jul 19 20:58:20 2013 Koichi Sasada <ko1@atdot.net>
+ * thread.c (rb_mutex_lock): remove remove_signal_thread_list() call.
+ It's meaningless because lock_interrupt doesn't call
+ add_signal_thread_list().
- * array.c: reduce shade operations.
+Tue May 17 20:20:49 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * array.c (rb_ary_modify): use RARRAY_RAWPTR().
+ * vm_core.h (rb_thread_struct): add volatile to
+ transition_for_lock because it is not protected by lock.
- * 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().
+Tue May 17 20:08:53 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Jul 19 19:55:28 2013 Koichi Sasada <ko1@atdot.net>
+ * LEGAL (missing/{elf,tgamma,lgamma_r}.c): they've been replaced by
+ public domain implementations.
- * array.c (ary_mem_clear): added. This operation doesn't need WB
- because this operation creates a reference to Qnil.
+ * LEGAL (vsnprintf.c): it has moved to srcdir from missing/.
- * 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().
+ * LEGAL (missing/crypt.c): list its original license.
- * array.c (ary_make_shared): use RARRAY_RAWPTR() instead of RARRAY_PTR().
+Tue May 17 19:54:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri Jul 19 19:18:51 2013 Koichi Sasada <ko1@atdot.net>
+ * LEGAL (configure): add missing/setproctitle.c
- * array.c: fix commit miss.
- RGENGC_UNPROTECT_LOGGING should be 0.
+Tue May 17 19:35:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ Fix FreeBSD test failure.
-Fri Jul 19 19:15:30 2013 Koichi Sasada <ko1@atdot.net>
+ * 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.
- * array.c (rb_ary_resurrect): use RARRAY_RAWPTR() because there is no
- writing.
+Tue May 17 08:04:26 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * array.c (rb_ary_new_from_values): use ary_memcpy().
+ * ext/openssl/ossl_digest.c: Add documentation.
-Fri Jul 19 19:07:31 2013 Koichi Sasada <ko1@atdot.net>
+Tue May 17 07:14:58 2011 Eric Hodel <drbrain@segment7.net>
- * array.c (ary_memcpy): add a function to copy VALUEs into ary
- with write barrier. If ary is promoted, use write barrier correctly.
+ * lib/net/http.rb: Improve documentation of proxy configuration
+ methods. Patch by Alf Mikula. [Ruby 1.9 - Bug #4714]
- * 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().
+Tue May 17 07:09:01 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 15:32:57 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/net/pop.rb: Improve documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #4711]
+ * lib/net/telnet.rb: ditto
- * array.c (rb_ary_store): use RARRAY_PTR_USE() instead of RARRAY_PTR().
- Clearing memory space doesn't need WBs.
+Tue May 17 07:00:41 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 15:19:37 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/net/http.rb: Fix nodoc for Net::HTTP::version_1_1?. Patch by
+ Alf Mikula. [Ruby 1.9 - Bug #4713]
- * array.c (ary_ensure_room_for_push): use RARRAY_RAWPTR() instead of
- RARRAY_PTR. In this code, there are no "write" operation.
+Tue May 17 06:56:26 2011 Eric Hodel <drbrain@segment7.net>
- * array.c (rb_ary_equal): ditto.
+ * lib/optparse.rb: Add link to make_switch to improve documentation.
+ Patch by David Copeland. [Ruby 1.9 - Bug #4708]
- * array.c (recursive_equal): ditto.
+Tue May 17 06:50:40 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 15:09:22 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/observer.rb: Improve documentation. Patch by David Copeland.
+ [Ruby 1.9 - Bug #4707]
- * 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).
+Tue May 17 06:42:53 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 14:56:00 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/logger.rb: Improve documentation. Patch by David Copeland.
+ [Ruby 1.9 - Bug #4706]
- * array.c (ary_unprotect_logging): use (void *) for first parameter
- because VALUE is not defined before including ruby/ruby.h.
+Tue May 17 06:28:14 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 14:19:48 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+ * lib/gserver.rb: Improve documentation. Patch by David Copeland.
+ [Ruby 1.9 - Bug #4705]
- * ext/pathname/pathname.c (path_inspect): use PRIsVALUE to preserve
- the result encoding.
+Tue May 17 06:21:15 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 12:35:41 2013 Tanaka Akira <akr@fsij.org>
+ * 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]
- * test/socket/test_tcp.rb (test_initialize_failure): Use EADDRNOTAVAIL
- to test an error message generated by bind() failure.
+Tue May 17 05:52:30 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 11:27:38 2013 Zachary Scott <e@zzak.io>
+ * ext/digest: Improve documentation of Digest, Digest::HMAC and
+ Digest::SHA2. Patch by Pete Higgins. [Ruby 1.9 - Bug #4702]
- * lib/racc/parser.rb: [DOC] Capitalize "Ruby" in documentation
- Patch by Dave Worth https://github.com/ruby/ruby/pull/341
+Tue May 17 03:51:42 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 11:26:28 2013 Zachary Scott <e@zzak.io>
+ * lib/abbrev.rb: Hide copyright and revision information from RDoc.
+ Inspired by patch from David Copeland, bug #4703.
- * ext/psych/lib/psych*: [DOC] Capitalize "Ruby" in documentation
- Patch by Dave Worth https://github.com/ruby/ruby/pull/341
+Tue May 17 03:33:21 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 11:25:12 2013 Zachary Scott <e@zzak.io>
+ * lib/timeout.rb (module Timeout): Hide internal constants. Patch by
+ Pete Higgins. [Ruby 1.9 - Bug #4701]
- * lib/rdoc/*: [DOC] Capitalize "Ruby" in documentation
- Patch by Dave Worth https://github.com/ruby/ruby/pull/341
+Mon May 16 11:21:09 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Jul 19 11:23:55 2013 Zachary Scott <e@zzak.io>
+ * configure.in, win32/Makefile.sub (RUBY_SO_NAME): add CPU as prefix
+ of RUBY_SO_NAME on x64/ia64 mswin/mingw.
+ [Feature #4602]
- * lib/rubygems*: [DOC] Capitalize "Ruby" in documentation
- Patch by Dave Worth https://github.com/ruby/ruby/pull/341
+Mon May 16 08:00:05 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 11:16:54 2013 Akinori MUSHA <knu@iDaemons.org>
+ * lib/rdoc.rb: Update to RDoc 3.6.1, allows OpenSSL::Digest to be
+ found.
- * lib/set.rb (Set#to_set): Define Set#to_set so that aSet.to_set
- returns self. [Fixes GH-359]
+Mon May 16 05:49:54 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jul 19 11:10:23 2013 Zachary Scott <e@zzak.io>
+ * lib/drb/acl.rb: Add documentation.
- * lib/rake/*: [DOC] Capitalize "Ruby" in documentation
- Patch by Dave Worth https://github.com/ruby/ruby/pull/341
+Mon May 16 05:13:20 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Fri Jul 19 01:04:14 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_asn1.c: Add documentation.
- * 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]
+Mon May 16 00:32:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri Jul 19 00:54:27 2013 Benoit Daloze <eregontp@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)
- * test/ruby/test_array.rb (test_count): add a test case for #count
- with an argument. See Bug #8654.
+Sun May 15 23:53:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu Jul 18 23:45:06 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * include/ruby/intern.h: resurrect old rb_fd_copy().
+ * thread.c (rb_fd_copy): ditto.
- * array.c (rb_ary_eql): compare RARRAY_PTR() for performance
- improvement in case of that self and other are shared.
+Sun May 15 23:45:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu Jul 18 22:46:42 2013 Zachary Scott <e@zzak.io>
+ * 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.
- * 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
+Sun May 15 22:26:39 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Thu Jul 18 21:30:50 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * bignum.c (bary_sq_fast): Specialize the last iteration of the
- outer loop.
- (bigfixize): A condition simplified.
+Sun May 15 21:22:35 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Thu Jul 18 21:15:41 2013 Masaki Matsushita <glass.saga@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.
- * array.c (rb_ary_equal): compare RARRAY_PTR() for performance
- improvement in case of that self and other are shared.
+Sun May 15 21:04:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jul 18 20:44:51 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * transcode.c (econv_init): revert r31353. [ruby-dev:43512]
- * array.c (rb_ary_fill): use memfill().
+Sun May 15 03:39:35 2011 Eric Hodel <drbrain@segment7.net>
-Thu Jul 18 20:35:14 2013 Benoit Daloze <eregontp@gmail.com>
+ * ext/zlib/zlib.c: Improve documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #4695]
- * array.c (rb_ary_count): check length to avoid SEGV
- while iterating. Remove other pointer loop when arg is given.
+Sun May 15 03:23:46 2011 Eric Hodel <drbrain@segment7.net>
- * test/ruby/test_array.rb (test_count): add test for bug.
- [ruby-core:56072] [Bug #8654]
+ * lib/erb.rb: Document ERB::Compiler. Patch by Simon Chiang.
+ [Ruby 1.9 - Bug #4694]
-Thu Jul 18 18:14:36 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sun May 15 00:58:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ fix mswin32 build error.
- * array.c (rb_ary_count): iterate items appropriately.
- [Bug #8654]
+ * missing/setproctitle.c: add #ifdef HAVE_UNISTD_H.
+ * win32/Makefile.sub (MISSING): add setproctitle.obj
-Thu Jul 18 17:35:41 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sat May 14 22:45:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * hash.c (rb_hash_flatten): performance improvement by not using
- rb_hash_to_a() to avoid array creation with rb_assoc_new().
+ * missing/setproctitle.c: add to include "ruby/util.h".
-Thu Jul 18 16:16:17 2013 Koichi Sasada <ko1@atdot.net>
+Sat May 14 19:52:22 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * array.c: add logging feature for RGenGC's write barrier unprotect
- event.
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_set_program_name):
+ add for $0 test.
-Thu Jul 18 15:45:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat May 14 19:50:46 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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]
+ * missing/setproctitle.c (compat_init_setproctitle): use
+ ruby_strdup() instead of strdup().
-Thu Jul 18 15:42:01 2013 Koichi Sasada <ko1@atdot.net>
+Sat May 14 19:37:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * include/ruby/ruby.h: fix spell miss.
+ * include/ruby/missing.h: add setproctitle() declaration.
+ * missing/setproctitle.c: added.
+ * configure.in: add check for missing/setproctitle.c.
-Thu Jul 18 15:11:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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.
- * include/ruby/ruby.h (ruby_safe_level_4): get rid of special
- character. [ruby-dev:47512] [misc #8646]
+ This patch makes a lot of cleanup set_arg0 related code and fixes
+ [Feature #4689].
-Thu Jul 18 14:51:39 2013 Koichi Sasada <ko1@atdot.net>
+Sat May 14 17:42:21 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * array.c (ary_alloc): slim setup process.
+ * process.c (rb_proc_times): improve documentation.
+ [ruby-core:35785] fixes #4581, reported by Andrew Grimm.
-Thu Jul 18 14:37:57 2013 Koichi Sasada <ko1@atdot.net>
+Sat May 14 12:12:54 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * string.c (str_alloc): no need to clear RString (already cleared).
+ * 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'.
-Thu Jul 18 12:57:47 2013 Tanaka Akira <akr@fsij.org>
+Sat May 14 12:06:49 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * lib/rdoc/context.rb (class RDoc): Fix infinite loop caused by
+ re-encountering BasicObject.
-Thu Jul 18 06:30:02 2013 Koichi Sasada <ko1@atdot.net>
+Sat May 14 10:32:36 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * 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().
+ * 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]
- * gc.c: rename a heap management function with prefix "heap_".
- * get_freeobj() -> heap_get_freeobj().
+Sat May 14 09:50:10 2011 Eric Hodel <drbrain@segment7.net>
- * gc.c: rename markable_object_p() to is_markable_object().
+ * lib/yaml/dbm.rb: Add documentation. Patch by Justin Collins.
+ [Ruby 1.9 - Bug #4693]
+ * lib/yaml/store.rb: ditto
-Wed Jul 17 22:57:40 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sat May 14 09:31:43 2011 Eric Hodel <drbrain@segment7.net>
- * hash.c (delete_if_i): use ST_DELETE.
+ * lib/rdoc.rb: Updated to RDoc 3.6
-Wed Jul 17 22:34:47 2013 Tanaka Akira <akr@fsij.org>
+Sat May 14 07:30:29 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * 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.
+ * ext/psych/lib/psych.rb: released a new gem, so increasing version.
-Wed Jul 17 22:13:26 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sat May 14 05:08:32 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * hash.c (rb_hash_replace): performance improvement by using
- st_copy().
+ * 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!
-Wed Jul 17 17:19:54 2013 Koichi Sasada <ko1@atdot.net>
+Sat May 14 05:02:58 2011 Eric Hodel <drbrain@segment7.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().
+ * lib/uri.rb: Add toplevel documentation. Patch by Vincent Batts.
+ [Ruby 1.9 - Bug #4690]
- * gc.c (initial_expand_heap): inlined in rb_gc_set_params().
+Sat May 14 04:19:06 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Wed Jul 17 17:12:23 2013 Matthew M. Boedicker <matthewm@boedicker.org>
+ * NEWS: Describe altered behaviour for RSA and DSA public key
+ encoding. [Ruby 1.9 - Bug #4421, Bug #4422]
+ [ruby-core:35327,35328]
- * hash.c (env_fetch): Add key name to message on ENV.fetch KeyError,
- as well as Hash#fetch. [ruby-core:56062] [Feature #8649]
+Sat May 14 02:57:52 2011 Eric Hodel <drbrain@segment7.net>
-Wed Jul 17 15:59:33 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/ipaddr.rb (unless Socket): Document valid*? methods. Patch by
+ Sebastian Martinez. [Ruby 1.9 - Feature #4687]
- * gc.c: catch up last changes for debugging/checking mode.
+Sat May 14 02:54:04 2011 Eric Hodel <drbrain@segment7.net>
-Wed Jul 17 15:50:10 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/rexml/functions.rb: Add some documentation for REXML::Functions.
+ Patch by Sebastian Martinez. [Ruby 1.9 - Feature #4688]
- * gc.c (rb_objspace_free): free slot itself.
+Sat May 14 02:51:42 2011 Eric Hodel <drbrain@segment7.net>
- * gc.c (objspace_each_objects): fix condition.
- Use slot->body instead of slot.
+ * lib/resolv.rb: Hide private method and state-tracking constants from
+ RDoc. Patch by Mark Turner. [Ruby 1.9 - Feature #4691]
- * gc.c (count_objects): use "slot" variable.
+Fri May 13 19:23:21 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
-Wed Jul 17 15:21:10 2013 Koichi Sasada <ko1@atdot.net>
+ * numeric.c (flo_coerce): Add #flo_coerce documentation.
+ Patch by Sebastian Martinez.
+ https://github.com/ruby/ruby/pull/21
- * gc.c (unlink_heap_slot): fix memory leak.
- free slot itself at free_heap_slot().
+Fri May 13 18:42:22 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
- 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.
+ * README.EXT: fix typo. Patch by William Blackerby.
+ https://github.com/ruby/ruby/pull/19
- * gc.c (unlink_heap_slot): remove not working code.
+ * README.EXT.ja: ditto.
-Wed Jul 17 14:31:13 2013 Koichi Sasada <ko1@atdot.net>
+Fri May 13 15:22:34 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * gc.c: re-design the heap structure.
+ * win32/win32.c (rb_w32_select): check invalid handle before doing
+ select operations. see [ruby-dev:43513], [ruby-dev:43535]
- (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.
+Fri May 13 08:34:00 2011 Eric Hodel <drbrain@segment7.net>
- See https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/GC_design
- for more details (figure).
+ * 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
- * gc.c: Avoid "heaps" terminology. It is ambiguous.
+Fri May 13 07:49:02 2011 Eric Hodel <drbrain@segment7.net>
-Wed Jul 17 13:29:16 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/fileutils.rb: Hide internal methods from RDoc. Patch by Darragh
+ Curran. [Ruby 1.9 - Bug #4684]
- * 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.
+Fri May 13 07:36:23 2011 Eric Hodel <drbrain@segment7.net>
- * gc.c: catch up above change.
+ * lib/webrick/httpservlet/erbhandler.rb: Add documentation.
-Wed Jul 17 12:30:05 2013 Tanaka Akira <akr@fsij.org>
+Fri May 13 07:04:33 2011 Eric Hodel <drbrain@segment7.net>
- * include/ruby/st.h (st_strcasecmp): Macro defined for compatibility.
- (st_strncasecmp): Ditto.
+ * lib/mathn.rb: Fix indentation. Patch by Jason Dew.
+ [Ruby 1.9 - Feature #4682]
-Wed Jul 17 11:57:45 2013 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+Fri May 13 06:50:43 2011 Eric Hodel <drbrain@segment7.net>
- * lib/cgi/util.rb (CGI::Util#escape, unescape): Avoid use of regexp
- special global variable. [Feature #8648] Thanks to fotos.
+ * lib/mathn.rb: Add documentation. Patch by Jason Dew. [Ruby 1.9 -
+ Feature #4667]
-Wed Jul 17 11:57:10 2013 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+Fri May 13 05:44:19 2011 Eric Hodel <drbrain@segment7.net>
- * lib/erb.rb (ERB::Util#url_encode): Avoid use of regexp special global
- variable. [Feature #8648] Thanks to fotos.
+ * lib/logger.rb (class Logger): Document Logger#datetime_format.
+ Patch by Sergio Gil Perez de la Manga. [Ruby 1.9 - Bug #4678]
-Wed Jul 17 08:12:41 2013 Tanaka Akira <akr@fsij.org>
+Fri May 13 05:39:11 2011 Eric Hodel <drbrain@segment7.net>
- * st.c (st_locale_insensitive_strcasecmp): Renamed from st_strcasecmp.
- (st_locale_insensitive_strncasecmp): Renamed from st_strncasecmp.
+ * 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]
- * include/ruby/st.h: Follow above changes.
+Fri May 13 05:16:38 2011 Eric Hodel <drbrain@segment7.net>
- * include/ruby/ruby.h: Ditto.
+ * 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]
-Wed Jul 17 00:14:59 2013 Tanaka Akira <akr@fsij.org>
+Fri May 13 02:15:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (bigmul1_toom3): Use bigdivrem_single instead of bigdivrem.
- (big_three): Removed.
- (Init_Bignum): Don't initialize big_three.
+ * io.c (select_internal): remove unused variable (interrupt_flag).
-Tue Jul 16 21:46:03 2013 Masaki Matsushita <glass.saga@gmail.com>
+Thu May 12 18:24:34 2011 Kouhei Sutou <kou@clear-code.com>
- * configure.in: revert r42008. strcasecmp() uses the current locale.
+ * 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
- * include/ruby/ruby.h: ditto.
+ Approved by nobu.
- * st.c (st_strcasecmp): ditto.
+Thu May 12 14:50:52 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue Jul 16 21:07:04 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * test/dl/test_base.rb (Fiddle::LIBC_SO): its always msvc*.dll on
+ mswin/mingw.
- * configure.in: check strcasecmp().
+Thu May 12 14:47:53 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * include/ruby/ruby.h: use strcasecmp() as st_strcasecmp() if it
+ * lib/mkmf.rb (Logging.postpone): copy only when temporary logfile
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>
+Thu May 12 12:24:22 2011 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- * bignum.c (bigsq): Renamed from bigsqr.
+ * 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.
-Tue Jul 16 19:42:08 2013 Tanaka Akira <akr@fsij.org>
+Thu May 12 08:10:46 2011 Eric Hodel <drbrain@segment7.net>
- * bignum.c (USHORT): Unused macro removed.
+ * lib/set.rb (class Set): Add nodoc to internal-use methods. Patch
+ by Pete Higgins. [Ruby 1.9 - Bug #4665]
-Tue Jul 16 19:18:51 2013 Koichi Sasada <ko1@atdot.net>
+Thu May 12 08:01:14 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * gc.c: slim a path of newobj_of().
+ * ext/openssl/ossl_pkey_ec.c: Allow encryption when PEM-encoding
+ Elliptic Curve private keys.
+ [ruby-core:35329] [Bug #4423]
- * gc.c (objspace): add a new field objspace::freelist, which contains
- available RVALUEs.
+Thu May 12 07:54:59 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * 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
- * gc.c (before_gc_sweep): clear objspace::freelist.
+Thu May 12 07:30:08 2011 Eric Hodel <drbrain@segment7.net>
- * gc.c (slot_sweep): clear slot::freelist.
+ * Various .document files: Update .document files to match files which
+ have documentation.
- * gc.c (heaps_prepare_freeslot): renamed to heaps_prepare_freeslot.
+Thu May 12 07:18:45 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
- * gc.c (unlink_free_heap_slot): remove unused function.
+ * ext/openssl/ossl_pkey_dsa.c: Use generic X.509 SubjectPublicKeyInfo
+ format for PEM-encoding DSA public keys.
+ [ruby-core:35328] [Bug #4422]
- * gc.c (rb_free_const_table): remove unused function.
+Thu May 12 06:27:31 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
-Tue Jul 16 19:05:12 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_pkey_rsa.c: Use generic X.509 SubjectPublicKeyInfo
+ format for encoding RSA public keys.
+ [ruby-core:35327] [Bug #4421]
- * bignum.c (big_shift3): Big shift width is not a problem for right
- shift.
+Wed May 11 19:45:27 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
-Tue Jul 16 18:50:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/forwardable.rb: support 'delegate :foo => :bar' for to meet
+ by specification of RDOC.
- * array.c (rb_ary_count): [DOC] fix typo. Array#count uses ==, not
- ===. a question at asakusa.rb ML.
+Wed May 11 08:36:38 2011 Eric Hodel <drbrain@segment7.net>
-Tue Jul 16 18:35:48 2013 Tanaka Akira <akr@fsij.org>
+ * lib/webrick: Add documentation for WEBrick::HTTPAuth
- * bignum.c (bary_mul_karatsuba): Avoid duplicate calculation when
- squaring.
- (bary_mul_toom3_branch): Ditto.
+Wed May 11 03:06:35 2011 Eric Hodel <drbrain@segment7.net>
-Tue Jul 16 17:43:22 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/rss.rb: Add documentation for RSS. Patch by Steve Klabnik.
+ [Ruby 1.9 - Bug #4663]
- * gc.c (link_free_heap_slot): removed.
+Tue May 10 14:50:32 2011 Shota Fukumori <sorah@tubusu.net>
- * gc.c (slot_sweep): use `heaps_add_freeslot' instead of
- `link_free_heap_slot'.
+ * lib/test/unit.rb: Add option for hiding skip messages when test
+ ends. #4657
- * gc.c (assign_heap_slot): use local variable `slot' instead of
- `heaps'.
+ * test/testunit/test_hideskip.rb, test/testunit/test4test_hideskip.rb:
+ test for above.
-Tue Jul 16 17:21:39 2013 Koichi Sasada <ko1@atdot.net>
+Tue May 10 10:53:04 2011 Eric Hodel <drbrain@segment7.net>
- * gc.c (assign_heap_slot): refactoring variable names.
+ * common.mk (rdoc): Add rdoc-coverage rule
- * gc.c (slot_add_freeobj): added.
+Tue May 10 09:13:21 2011 Eric Hodel <drbrain@segment7.net>
- * gc.c (heaps_add_freeslot): added.
+ * lib/webrick: Add Documentation
- * gc.c (finalize_list, rb_gc_force_recycle, slot_sweep): use
- `slot_add_freeobj' instead of modifying linked list directly.
+Tue May 10 04:22:09 Eric Hodel <drbrain@segment7.net>
-Tue Jul 16 16:30:58 2013 Koichi Sasada <ko1@atdot.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
- * gc.c (lazy_sweep): refactoring.
+Mon May 9 20:57:13 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Jul 16 13:32:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_{complex,rational}.rb: added tests.
- * 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.
+Mon May 9 20:29:44 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Jul 16 11:12:03 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * complex.c (string_to_c_internal): a refactoring.
- * proc.c (rb_block_arity): raise ArgumentError if no block given.
+Mon May 9 18:33:05 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Jul 16 08:15:22 2013 Zachary Scott <e@zzak.io>
+ * string.c: Improve documentation for String#start_with? and
+ String#end_with?. fixes #4652
+ patched by Andrew Grimm <andrew.j.grimm at gmail.com>
- * ext/bigdecimal/lib/bigdecimal/util.rb: [DOC] document top-level
- classes from BigDecimal utils native extensions
+Mon May 9 13:49:00 2011 Kenta Murata <mrkn@mrkn.jp>
-Tue Jul 16 03:23:03 2013 Zachary Scott <e@zzak.io>
+ * 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]
- * numeric.c: [DOC] improve rdoc formatting for parameters and links
+Mon May 9 11:52:48 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Jul 15 14:40:00 2013 Tanaka Akira <akr@fsij.org>
+ * numeric.c (int_ord): remove K&R style.
+ patched by Daehyub Kim. https://github.com/ruby/ruby/pull/17
- * include/ruby/intern.h (rb_big2str0): Deprecated.
+Sun May 8 22:17:24 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * bignum.c (rb_big2str1): Renamed from rb_big2str0.
- (rb_big2str0): Deprecated wrapper for rb_big2str1.
- (rb_big2str): Invoke rb_big2str1 instead of rb_big2str0.
+ * test/ruby/test_{complex2,complexrational}.rb: use skip.
+ * test/date/*.rb: ditto.
-Mon Jul 15 14:13:02 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sun May 8 21:02:31 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * 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.
+ * test/ruby/test_{complex2,complexrational}.rb: NEVER SKIP.
-Mon Jul 15 13:46:26 2013 Tanaka Akira <akr@fsij.org>
+Sun May 8 21:01:21 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * bignum.c: Add static assertions.
+ * test/date/test_date_base.rb: fixed.
-Mon Jul 15 13:36:02 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sun May 8 20:54:11 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * hash.c (rb_hash_each_pair): performance improvement by using
- rb_block_arity().
+ * test/date/*.rb: NEVER SKIP.
-Mon Jul 15 13:15:37 2013 Masaki Matsushita <glass.saga@gmail.com>
+Sun May 8 20:37:33 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * proc.c (rb_block_arity): create internal API rb_block_arity().
- it returns arity of given block.
+ * test/date/*.rb: reverted 31432.
-Mon Jul 15 13:07:27 2013 Yuki Yugui Sonoda <yugui@yugui.jp>
+Sun May 8 20:32:43 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * lib/prime.rb (Prime::EratosthenesGenerator,
- Prime::EratosthenesSieve): New implementation by
- robertjlooby <robertjlooby AT gmail.com>.
+ * test/date/*.rb: reverted 31483.
- * test/test_prime.rb: updated with new method name
+Sun May 8 19:39:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jul 15 11:32:46 2013 Zachary Scott <e@zzak.io>
+ * thread_pthread.c (native_cond_timedwait): add to care EINTR.
+ * thread_pthread.c (thread_timer): remove EINTR check.
- * numeric.c (rb_cNumeric): [DOC] Added comment for Numeric to fix doc
+Sun May 8 19:04:15 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Jul 15 11:24:48 2013 Tanaka Akira <akr@fsij.org>
+ * lib/time.rb (xmlschema): avoid passing any negative numbers.
- * bignum.c (maxpow_in_bdigit_dbl): Useless #if removed.
+Sun May 8 18:40:03 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Jul 15 11:10:46 2013 Zachary Scott <e@zzak.io>
+ * ext/date/date_{parse,strptime}.c: introduced some macros.
- * 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
+Sun May 8 17:17:13 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Jul 15 10:56:01 2013 Zachary Scott <e@zzak.io>
+ * test/date/*.rb: use skip /w messages.
- * thread.c (mutex_sleep): [DOC] Awake thread will reacquire lock
- By Tim Abdulla [Fixes GH-342] https://github.com/ruby/ruby/pull/342
+Sun May 8 17:04:55 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Jul 15 10:45:09 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/lib/date/format.rb (_httpdate): omitted to call zone_to_diff.
- * 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.
+Sun May 8 16:56:19 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * configure.in: Check __builtin_clz, __builtin_clzl and
- __builtin_clzll.
+ * ext/date/date_core.c (date_s_test_*): use macros.
-Mon Jul 15 09:39:07 2013 Tanaka Akira <akr@fsij.org>
+Sun May 8 10:24:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (power_cache_get_power): Use bitsize instead of ceil_log2.
- (ones): Removed.
- (next_pow2): Removed.
- (floor_log2): Removed.
- (ceil_log2): Removed.
+ * 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.
- * configure.in (__builtin_popcountl): Don't check.
+Sun May 8 05:19:37 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jul 15 02:47:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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!
- * localeinit.c (rb_locale_charmap, Init_enc_set_filesystem_encoding):
- move from encoding.c.
+Sun May 8 00:13:05 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * miniinit.c (rb_locale_charmap, Init_enc_set_filesystem_encoding):
- define miniruby specific functions only.
+ * test/io/wait/test_io_wait.rb: use Socket.pair instead of pipe.
+ Windows can only treat a socket.
-Mon Jul 15 02:32:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat May 7 22:43:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * encoding.c (rb_enc_init): no longer needs NO_PRESERVED_ENCODING.
+ * thread.c (rb_fd_zero): remove redundant zero fill.
- * encoding.c (enc_inspect): defer loading autoloaded encoding.
+Sat May 7 22:38:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * encoding.c (enc_check_encoding): use is_data_encoding() to check
- type consistently.
+ * thread.c (rb_fd_init): remove volatile qualifier.
- * encoding.c (must_encoding): return rb_encoding* instead of encoding
- index.
+Sat May 7 22:34:29 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * encoding.c (enc_check_encoding): use is_data_encoding() to check
- type consistently.
+ * thread.c (rb_fd_init_copy): new internal api. It provide efficient
+ copy constructor semantics.
+ * thread.c (do_select): use rb_fd_init_copy().
- * encoding.c (must_encoding): return rb_encoding* instead of encoding
- index.
+Sat May 7 15:18:06 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ fix incorrect native_cond_signal call when deadlock was detected.
-Mon Jul 15 02:21:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread.c (lock_func): decrement cond_waiting if timeout was happen.
- * 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]
+Sat May 7 18:28:37 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * thread_pthread.c (USE_MONOTONIC_COND): check the availability
+ more strictly.
- * 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.
+ * thread_pthread.h (rb_thread_cond_t): ditto.
- * bignum.c (ones): Use the configure result for the condition to use
- __builtin_popcountl.
- (bary_unpack_internal): Use appropriate types for swap argument.
+Sat May 7 15:15:10 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun Jul 14 22:21:11 2013 Tanaka Akira <akr@fsij.org>
+ fix win32 native_cond_timedwait() makes SIGSEGV.
- * 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.
+ * 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.
-Sun Jul 14 00:36:03 2013 Tanaka Akira <akr@fsij.org>
+ * thread_win32.c (__cond_timedwait): remove entry properly if timeout
+ was happen.
- * bignum.c (DIGSPERLONG): Unused macro removed.
- (DIGSPERLL): Ditto.
+ * 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.
-Sun Jul 14 00:32:51 2013 Tanaka Akira <akr@fsij.org>
+Sat May 7 12:41:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ fix mutex deadlock test hang-up.
- * bignum.c (rb_big_aref): Less scan when the number is negative.
+ * thread_win32.c (abs_timespec_to_timeout_ms): fix 1000x calculation
+ mistake. (ie fix hang-up native_cond_timedwait())
-Sun Jul 14 00:17:42 2013 Tanaka Akira <akr@fsij.org>
+Sat May 7 03:14:13 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (big_shift): Avoid signed integer overflow.
+ sleep_cond use monotonic time if possible.
-Sun Jul 14 00:14:15 2013 Tanaka Akira <akr@fsij.org>
+ * thread_pthread.c (native_thread_init): change sleep_cond
+ attribute to monotonic.
+ * thread_pthread.c (native_sleep): use native_cond_timeout().
- * bignum.c (bary_mul_precheck): Use bary_small_lshift or
- bary_mul_normal if xl is 1.
+ * thread_pthread.c (native_cond_timeout): add overflow care.
+ * thread_win32.c (native_cond_timeout): ditto.
-Sat Jul 13 22:58:16 2013 Tanaka Akira <akr@fsij.org>
+Sat May 7 02:49:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ fix win32 compile error.
- * 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.
+ * thread_win32.c (RB_CONDATTR_CLOCK_MONOTONIC): define
+ RB_CONDATTR_CLOCK_MONOTONIC always.
+ * thread_pthread.c (RB_CONDATTR_CLOCK_MONOTONIC): ditto.
-Sat Jul 13 15:51:38 2013 Tanaka Akira <akr@fsij.org>
+Sat May 7 02:29:41 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (bary_small_lshift): Use size_t instead of long.
- (bary_small_rshift): Ditto.
+ mutex: deadlock check timeout use monotonic time.
-Sat Jul 13 15:33:33 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * bignum.c (bary_small_lshift): Functions moved to remove
- declaration.
- (bary_small_rshift): Ditto.
+ * thread_pthread.c (thread_timer): use native_cond_timeout()
+ instead of get_ts.
+ * thread.c (lock_func): ditto.
-Sat Jul 13 12:27:34 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread_pthread.c (get_ts): removed. use native_cond_timeout().
+ * thread.c (init_lock_timeout): ditto.
- * encoding.c (rb_enc_associate_index): fill new terminator length, not
- old one.
+Sat May 7 01:54:21 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sat Jul 13 12:24:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread_pthread.c (get_ts): add monotonic clock capability.
+ * thread_pthread.c (rb_thread_create_timer_thread): use monotonic
+ clock if possible.
- * 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 May 7 01:43:37 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sat Jul 13 09:26:09 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * bignum.c (biglsh_bang): Removed.
- (bigrsh_bang): Ditto.
- (bigmul1_toom3): Use bary_small_lshift and bary_small_rshift.
+Fri May 6 23:29:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sat Jul 13 01:04:43 2013 Zachary Scott <e@zzak.io>
+ * thread.c (rb_wait_for_single_fd): use ppoll() instead of poll()
+ if possible. based on a patch from Eric Wong. [ruby-core:36003].
- * lib/rubygems/psych_additions.rb: Ignore Psych docs here
+Fri May 6 23:13:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri Jul 12 18:10:46 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * configure.in: remove nanosleep check. we no longer use it.
+ r20124 removed last usage.
- * ext/fiddle/win32/lib/win32/registry.rb
- (Win32::Registry::API#make_wstr): same as r41922.
+Fri May 6 22:35:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Jul 12 16:28:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/syck/rubyext.c (mktime_do): extra digits are not used.
- * 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.
+Fri May 6 17:43:07 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * string.c (rb_str_fill_terminator): add a parameter for the length of
- new terminator.
+ * ext/syck/rubyext.c (mktime_do): remove unused variable offset.
-Fri Jul 12 11:26:25 2013 Masaki Matsushita <glass.saga@gmail.com>
+ * ext/syck/syck.h: use #ifdef instead of #if DEBUG.
- * 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.
+Fri May 6 16:27:33 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Jul 11 14:48:35 2013 Zachary Scott <e@zzak.io>
+ * 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.
- * 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
+Fri May 6 15:01:11 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
-Thu Jul 11 14:22:37 2013 Zachary Scott <e@zzak.io>
+ * 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.
- * 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
+Fri May 6 14:25:53 2011 Tinco Andringa <mail@tinco.nl>
-Thu Jul 11 13:48:03 2013 Zachary Scott <e@zzak.io>
+ * ext/syck/rubyext.c (mktime_do): YAML.load time correctly parse
+ usecs smaller than 1 fixes #4571
- * sprintf.c: Fix typo patch by @hynkle [Fixes GH-357]
- https://github.com/ruby/ruby/pull/357
+Thu May 5 22:23:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu Jul 11 13:00:34 2013 Zachary Scott <e@zzak.io>
+ * thread_pthread.c (native_mutex_reinitialize_atfork): removed
+ unused macro.
+ * thread_win32.c (native_mutex_reinitialize_atfork): ditto.
- * lib/securerandom.rb: Refactor conditions by Rafal Chmiel
- [Fixes GH-326] https://github.com/ruby/ruby/pull/326
+Thu May 5 22:09:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jul 11 12:04:47 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c (DAY_IN_NANOSECONDS): long long int is not
+ available on all platforms.
- * 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 May 5 17:36:31 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Thu Jul 11 10:46:38 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval.c (frame_func_id): store result of method_entry_of_iseq() to
+ cfp->me because method_entry_of_iseq() might become expensive.
- * tool/probes_to_wiki.rb: fix usage comment. use Enumerable#grep
- which yields each elements to reduce unnecessary array.
+Thu May 5 15:03:51 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Thu Jul 11 10:09:18 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * 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
- * process.c (rb_daemon): daemon(3) is implemented with fork(2).
- Therefore it needs rb_thread_atfork(). (and revert r41903)
+Wed May 4 22:13:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu Jul 11 03:22:10 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * benchmark/bm_vm4_pipe.rb: Reduced iterations. Too slow benchmark
+ is bad.
+ * benchmark/bm_vm4_thread_pass.rb: ditto.
- * tool/probes_to_wiki.rb: adding a script to convert probes.d to wiki
- format for easy wiki updates.
+Wed May 4 22:08:22 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu Jul 11 00:54:07 2013 Zachary Scott <zachary@zacharyscott.net>
+ * test/date/test_date_base.rb: don't use no message skip().
- * man/ri.1: Incorrect use of .Dd macro [Bug #8620] by Tristan Hill
+Wed May 4 21:11:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu Jul 11 00:48:29 2013 Zachary Scott <zachary@zacharyscott.net>
+ * benchmark/bm_io_select2.rb: reduce number of using file
+ descriptors. because gdb need some fds.
- * lib/delegate.rb: Add example for __setobj__ and __getobj__
- [Bug #8615] Patch by Caleb Thompson
+Wed May 4 19:00:59 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Jul 10 23:29:22 2013 Zachary Scott <zachary@zacharyscott.net>
+ * 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.
- * lib/logger.rb: Use :call-seq: for method signature rdoc
+Wed May 4 18:46:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Jul 10 23:23:18 2013 Zachary Scott <zachary@zacharyscott.net>
+ * 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]
- * lib/logger.rb (#add): Remove incorrect rdoc for return value
- [Bug #8567] Reported by Tim Pease.
+ * test/-ext-/wait_for_single_fd/test_wait_for_single_fd.rb: ditto.
-Wed Jul 10 23:12:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed May 4 12:46:25 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * string.c (rb_str_subpos): make public function.
+ * thread.c (rb_wait_for_single_fd): Added POLLNVAL check.
+ based on a patch from Eric Wong at [ruby-core:35991].
-Wed Jul 10 22:44:19 2013 Tanaka Akira <akr@fsij.org>
+Wed May 4 11:51:01 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c: Add a static assertion for RBIGNUM_EMBED_LEN_MAX.
+ * io.c (rb_f_select): remove useless ifdef.
-Wed Jul 10 22:31:25 2013 Masaki Matsushita <glass.saga@gmail.com>
+Wed May 4 11:42:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * string.c (rb_str_index): cache single byte flag and some
- cosmetic changes.
+ * ext/socket/init.c (wait_connectable): fix error handling code.
+ RB_WAITFD_OUT is turned on even though an error occur.
-Wed Jul 10 22:03:27 2013 Tanaka Akira <akr@fsij.org>
+Wed May 4 10:12:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (bary_2comp): Don't use bary_plus_one.
- (bary_add_one): Replaced by the implementation of bary_plus_one.
+ * 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 Jul 10 20:48:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed May 4 10:10:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (sizeof_bdigit_dbl): check sizeof(BDIGIT_DBL).
+ * ext/socket/init.c (wait_connectable): use rb_wait_for_single_fd().
+ The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
- * 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.
+ * ext/socket/init.c (try_wait_connectable, wait_connectable_ensure):
+ removed.
-Tue Jul 9 22:24:39 2013 Tanaka Akira <akr@fsij.org>
+Wed May 4 10:07:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (bary_mul1): No need to invoke MEMZERO at last.
- (bary_mul_single): Invoke MEMZERO here.
+ * 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]
-Tue Jul 9 21:40:01 2013 Kouhei Sutou <kou@cozmixng.org>
+Wed May 4 10:01:27 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * test/rexml/test_text.rb: Add missing tests for Text#<<.
- Reported by nagachika. Thanks!!!
+ * thread.c (rb_wait_for_single_fd): new. poll(2) based backend for
+ rb_wait_for_single_fd().
+ Now only Linux uses it.
-Tue Jul 9 18:02:38 2013 Akinori MUSHA <knu@iDaemons.org>
+ The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
- * 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.
+Wed May 4 09:56:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Jul 9 17:58:26 2013 Akinori MUSHA <knu@iDaemons.org>
+ * thread.c (rb_wait_for_single_fd): new.
+ * thread.c (select_single): select(2) based backend for
+ rb_wait_for_single_fd().
- * test/fileutils/test_fileutils.rb
- (TestFileUtils#assert_output_lines): New utility assertion
- method for testing verbose output.
+ * 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.
-Tue Jul 9 17:43:57 2013 Koichi Sasada <ko1@atdot.net>
+ * 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().
- * test/test_tracer.rb: catch up recent rubygems changes.
+ The patch was written by Eric Wong. [Ruby 1.9 - Feature #4531]
-Tue Jul 9 16:58:30 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Wed May 4 08:04:59 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * 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).
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: fix time dumping so that
+ Syck can load UTC times that Psych dumps.
-Tue Jul 9 15:57:20 2013 Akinori MUSHA <knu@iDaemons.org>
+Wed May 4 07:33:00 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * object.c: Fix rdoc for Kernel#<=>. [Fixes GH-352]
+ * thread.c (rb_fd_copy): fix wrong argument.This issue was pointed
+ out by Eric Wong. [ruby-core:35982]
-Tue Jul 9 15:53:51 2013 Akinori MUSHA <knu@iDaemons.org>
+Tue May 3 20:29:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * lib/fileutils.rb (FileUtils#mode_to_s): Define mode_to_s() also
- as singleton method, or FileUtils.chmod fails in verbose mode.
+ * 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 Jul 9 15:16:02 2013 Akinori MUSHA <knu@iDaemons.org>
+Tue May 3 18:23:57 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * test/fileutils/fileasserts.rb
- (Test::Unit::FileAssertions#assert_not_symlink): Add a missing
- optional argument "message".
+ * test/date/test_date.rb (TestDate#test_coerce):
+ test for [ruby-core:35127].
-Tue Jul 9 15:03:24 2013 Akinori MUSHA <knu@iDaemons.org>
+Tue May 3 04:27:53 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/fileutils.rb (FileUtils#chown, FileUtils#chown_R): If user
- and group are both nil, print ":".
+ * thread.c (rb_thread_select): preserve errno if no error
+ occurred.
-Tue Jul 9 12:47:08 2013 Masaki Matsushita <glass.saga@gmail.com>
+Tue May 3 03:57:04 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * io.c (appendline): use READ_CHAR_PENDING_XXX macros and
- RSTRING_END().
+ * include/ruby/intern.h (rb_w32_fdcopy): add prototype. fixes
+ #4640
- * io.c (rb_io_getline_1): rewrite nested if statement into one
- statement.
+Mon May 2 01:02:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Jul 9 11:04:35 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/fileutils.rb (FileUtils#chmod): accept symbolic mode argument.
+ The patch was written by takkanm. [ruby-core:26029][Feature #2190]
- * ext/{dl,fiddle}/win32/lib/win32/registry.rb (Win32::Registry#check):
- should report the position of the error.
+ * 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.
- * ext/{dl,fiddle}/win32/lib/win32/registry.rb
- (Win32::Registry#QueryValue): workaround for test-all crash.
+ * 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.
-Tue Jul 9 10:27:56 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Mon May 2 00:36:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/{dl,fiddle}/win32/lib/win32/registry.rb
- (Win32::Registry.expand_environ): use suitable encoding for the
- string.
+ * ext/socket/init.c (rsock_connect): add to care EINTR. based
+ on a patch from Eric Wong at [ruby-core:35621][Bug #4555]
- * 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.
+Sun May 1 01:06:24 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Jul 9 10:02:45 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * thread.c (rb_thread_select): release GVL while waiting select().
- * ext/{dl,fiddle}/win32/lib/win32/registry.rb
- (Win32::Registry::Error#initialize): use suitable encoding for the
- string.
+Sat Apr 30 23:10:15 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Jul 9 09:46:53 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * 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()
- * ext/dl/win32/lib/win32/registry.rb (Win32::Registry.expand_environ):
- use suitable encoding for the string. fixed a test-all error of
- r41838.
+Sat Apr 30 20:18:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/fiddle/win32/lib/win32/registry.rb: same changes of r41838 and
- this revision of dl's win32/registry.rb.
+ * 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]
-Tue Jul 9 07:39:45 2013 Eric Hodel <drbrain@segment7.net>
+ * thread.c (rb_thread_fd_select, rb_thread_wait_fd_rw):
+ adapt new argument type.
- * lib/rubygems: Update to RubyGems 2.0.4. See
- https://github.com/rubygems/rubygems/blob/2.0/History.txt for changes
+ * thread.c (rb_thread_select): make dummy implementation.
-Tue Jul 9 01:47:16 2013 Tanaka Akira <akr@fsij.org>
+Sat Apr 30 20:16:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (biglsh_bang): Don't shift a BDIGIT with BITSPERDIG bits.
- (bigrsh_bang): Ditto.
+ * thread.c (rb_fd_copy): Change function argument. Now
+ rb_fd_copy() has fully copy semantics.
+ * include/ruby/intern.h: ditto.
-Tue Jul 9 01:17:57 2013 Tanaka Akira <akr@fsij.org>
+Sat Apr 30 20:11:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (bigrsh_bang): Fix bignum digits overrun.
+ * include/ruby/intern.h (rb_thread_select): mark as deprecated.
-Tue Jul 9 00:46:22 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * bignum.c (biglsh_bang): Fix bignum digits under-run.
+Sat Apr 30 20:06:36 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jul 8 23:36:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread.c (do_select): remove useless ifdef. time calculation
+ is not heavy weight.
- * ext/dl/win32/lib/win32/registry.rb (Error, API): use WCHAR
- interfaces. c.f. [Bug #8508]
+Sat Apr 30 16:48:36 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jul 8 23:13:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * benchmark/bm_io_select3.rb: New.
- * 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]
+Sat Apr 30 16:27:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * numeric.c (finite): add declaration for strict ANSI.
- [ruby-core:55312] [Bug #8495]
+ * 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.
- * 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]
+Sat Apr 30 16:13:17 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * win32/win32.c (gettimeofday): use __cdecl instead of _cdecl.
+ * benchmark/bm_io_select.rb, benchmark/bm_io_select2.rb: New.
+ based on a patch from Eric Wong at [Feature #4531]
-Mon Jul 8 22:41:12 2013 Tanaka Akira <akr@fsij.org>
+Sat Apr 30 03:25:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (bary_mul): Arguments for work memory added.
- (bary_mul_balance): Ditto.
- (bary_mul_karatsuba): Ditto.
+ * test/io/wait/test_io_wait.rb: New. for testing ext/io/wait.
+ the patch was written by Eric Wong. [Feature #4531]
-Mon Jul 8 22:03:30 2013 Tanaka Akira <akr@fsij.org>
+Sat Apr 30 00:34:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (rb_big_sq_fast): New function for testing.
- (rb_big_mul_toom3): Ditto.
+ * include/ruby/win32.h: remove redundant declaration of
+ rb_w32_time_subtract().
- * internal.h (rb_big_sq_fast): Declared.
- (rb_big_mul_toom3): Ditto.
+Sat Apr 30 00:16:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jul 8 21:59:34 2013 Tanaka Akira <akr@fsij.org>
+ * thread_pthread.c (gvl_init): fix hangup if GVL_SIMPLE_LOCK=1.
+ We don't have to call mutex_unlock() before initialize it!
- * bignum.c (bary_mul_balance): Initialize a local variable to suppress
- a warning.
+Fri Apr 29 13:15:15 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jul 8 20:55:22 2013 Tanaka Akira <akr@fsij.org>
+ * thread_win32.c (native_cond_timedwait): New. r31373 caused
+ win32 build failure.
- * bignum.c (bary_mul_balance): Reduce work memory.
+ * thread_win32.c (__cond_timedwait, abs_timespec_to_timeout_ms):
+ New helper functions.
-Mon Jul 8 08:26:15 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+ * win32/win32.c (rb_w32_time_subtract): rename from subtract and
+ remove static.
- * test/openssl/test_pkey_ec.rb: Skip tests for "Oakley" curves as
- they are not suitable for ECDSA.
- [ruby-core:54881] [Bug #8384]
+Fri Apr 29 10:43:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jul 8 08:03:01 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * bignum.c (bary_mul): Add a RB_GC_GUARD.
+Fri Apr 29 10:25:31 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun Jul 7 23:56:32 2013 Tanaka Akira <akr@fsij.org>
+ * vm_method.c (rb_clear_cache_by_class): Revert r29673. It made
+ a segmentation fault regression. [Bug #4289][ruby-core:34554].
- * bignum.c (bary_mul_karatsuba): Unreachable code removed. Remove
- several branches.
+Fri Apr 29 10:24:51 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Jul 7 22:59:06 2013 Tanaka Akira <akr@fsij.org>
+ * io.c (make_writeconv): do not add textmode newline decorator if any
+ newline decorator is set already. fixes #4618, fixes #4619
- * internal.h (rb_big_mul_normal): Declared.
- (rb_big_mul_balance): Ditto.
- (rb_big_mul_karatsuba): Ditto.
+Fri Apr 29 10:17:42 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (rb_big_mul_normal): New function for tests.
- (rb_big_mul_balance): Ditto.
- (rb_big_mul_karatsuba): Ditto.
+ * thread.c (lock_func): small cleanup.
-Sun Jul 7 19:21:30 2013 Tanaka Akira <akr@fsij.org>
+Fri Apr 29 10:07:13 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c: Reorder functions to decrease forward reference.
+ * 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]
-Sun Jul 7 14:41:57 2013 Tanaka Akira <akr@fsij.org>
+ * thread.c (init_lock_timeout): New helper function.
- * 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.
+Thu Apr 28 16:15:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Jul 7 11:54:33 2013 Kouhei Sutou <kou@cozmixng.org>
+ * win32/{win32.c,dir.h} (rb_w32_uopendir): new API to pass UTF-8 path.
- * NEWS: Add REXML::Text#<< related updates.
+ * win32/win32.c (opendir_internal, rb_w32_opendir): extract and merge
+ common part of rb_w32_opendir() and rb_w32_uopendir().
-Sun Jul 7 11:49:19 2013 Kouhei Sutou <kou@cozmixng.org>
+ * dir.c (do_opendir, glob_helper): encoding.
- * lib/rexml/text.rb (REXML::Text#<<): Support appending in not
- "raw" mode. [Bug #8602] [ruby-dev:47482]
- Reported by Ippei Obayashi. Thanks!!!
+ * 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.
-Sun Jul 7 11:43:13 2013 Kouhei Sutou <kou@cozmixng.org>
+Thu Apr 28 15:32:53 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/rexml/text.rb (REXML::Text#<<): Support method chain use by "<<"
- like other objects.
+ * test/dl/test_base.rb (DL::LIBC_SO): its always msvc*.dll on
+ mswin/mingw.
-Sun Jul 7 11:34:18 2013 Kouhei Sutou <kou@cozmixng.org>
+Thu Apr 28 06:07:06 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rexml/text.rb (REXML::Text#clear_cache): Extract common
- cache clear code.
+ * lib/csv.rb (CSV::open): suppress universal newline decorator.
+ fixes #4603
-Sun Jul 7 11:01:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/csv.rb (CSV.read): no mode is needed.
- * 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].
+Thu Apr 28 06:06:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Jul 7 10:07:22 2013 Tanaka Akira <akr@fsij.org>
+ * io.c (rb_io_extract_modeenc, rb_f_backquote): set default text
+ mode. fixes #4619
- * 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.
+ * io.c (pipe_open): set universal newline decorator if needed.
-Sat Jul 6 07:37:43 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+Wed Apr 27 11:33:08 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * 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]
+ * 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.
- Thanks to Vit Ondruch for providing the patch!
+Wed Apr 27 07:42:44 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Jul 6 07:12:39 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+ * configure.in (STRIP): use proper toolchain. based on a patch
+ from Jon Forums at [ruby-core:35909]. fixes #4617
- * test/openssl/test_x509crl.rb: Remove unused variable.
- [ruby-core:53501] [Bug #8114]
+Wed Apr 27 01:20:59 2011 Tadayoshi Funaba <tadf@dotrb.org>
- Thanks, Vipul Amler, for pointing this out!
+ * ext/date/date_core.c (date_zone_to_diff): renamed.
+ * ext/date/date_parse.c: ditto.
+ * ext/date/date_strptime.c: ditto.
-Sat Jul 6 06:37:10 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+Wed Apr 27 01:16:59 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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]
+ * encoding.c (enc_find): accept Encoding objects.
- Thanks, Dirkjan Bussink, for the patch!
+Wed Apr 27 00:55:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Jul 6 06:06:16 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+ * transcode.c (econv_opts): add newline option.
- * 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:
+ * io.c (validate_enc_binmode, rb_io_extract_modeenc): set newline
+ decorator according to open mode.
- [id, criticality, octet_string] if critical,
- [id, octet_string] if not.
+ * transcode.c (rb_econv_prepare_options): new function, to prepare
+ econv options with newline flags.
- Making sure to pick the last element of X509 extension and use it as
- SAN value.
- [ruby-core:55685] [Bug #8575]
+ * include/ruby/encoding.h (ECONV_NEWLINE_DECORATOR_MASK): add.
- Thank you @nahi for providing the patch!
+Wed Apr 27 00:51:01 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Jul 6 04:49:38 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * file.c (rb_file_truncate): fix function.
- * 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.
+ * include/ruby/win32.h (ftruncate, truncate, ftello, fseeko): non-64
+ versions on mingw are useless because they use int32_t. fixes #4564
-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.
+Wed Apr 27 00:50:33 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Fri Jul 5 19:05:40 2013 Akinori MUSHA <knu@iDaemons.org>
+ * ext/date/date_core.c: modified validation methods.
+ * ext/date/lib/date.rb: ditto.
- * 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".
+Wed Apr 27 00:00:37 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Fri Jul 5 16:21:56 2013 Akinori MUSHA <knu@iDaemons.org>
+ * ext/date/date_core.c (dt_lite_set_tmx): should get df value.
- * 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
+Tue Apr 26 22:34:04 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * 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.
+ * ext/date/lib/date/format.rb (_iso8601): allowed day only civil
+ date. disallowed separatorless day only ordinal date.
-Fri Jul 5 12:14:40 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Mon Apr 25 21:31:36 2011 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- * test/ruby/test_rubyoptions.rb (TestRubyOptions#test_notfound): after
- r41710, the path of command uses backslash as the separator on
- Windows.
+ * 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
-Fri Jul 5 11:29:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Apr 25 20:53:32 2011 Tajima, Akio <artonx@yahoo.co.jp>
- * 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.
+ * win32/win32.c (kill): accept 0 only sig is SIGINT #4596
-Fri Jul 5 11:08:00 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Mon Apr 25 19:59:47 2011 Tajima, Akio <artonx@yahoo.co.jp>
- * 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.
+ * win32/win32.c (kill): accept 0 as pid, fixes #4596
-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.
+Mon Apr 25 16:43:45 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Jul 5 05:39:53 2013 Tanaka Akira <akr@fsij.org>
+ * random.c (random_rand): remove unused variables.
- * bignum.c (BARY_MUL1): Renamed from BARY_MUL.
- (bary_mul1): Renamed from bary_mul.
- (bary_mul): Renamed from bary_mul2.
+ * struct.c (rb_struct_define_without_accessor): ditto.
-Fri Jul 5 04:58:05 2013 Tanaka Akira <akr@fsij.org>
+ * strftime.c (rb_strftime_with_timespec): ditto.
- * bignum.c (bary_mul_balance): Extracted from bigmul1_balance and
- use bary_mul2 and bary_add to decrease allocations.
+ * sprintf.c: ditto.
-Fri Jul 5 02:14:00 2013 Akinori MUSHA <knu@iDaemons.org>
+ * time.c (time_asctime): remove useless GetTimeval().
- * 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.
+ * thread_pthread.c: cast to (void *) for %p.
- * 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.
+Mon Apr 25 11:02:11 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Jul 5 00:25:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/ripper/lib/ripper/sexp.rb: fix rdoc around sexp.
+ patched by Sho Hashimoto. fixes #4599
- * lib/mkmf.rb (have_framework): allow header file to check.
- [ruby-core:55745] [Bug #8593]
+Mon Apr 25 08:24:04 2011 Shota Fukumori <sorah@tubusu.net>
-Thu Jul 4 22:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * random.c (rb_f_rand, random_s_rand): RDocs for them.
- * 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
+Mon Apr 25 07:18:00 2011 Kenta Murata <mrkn@mrkn.jp>
-Thu Jul 4 20:39:20 2013 Tanaka Akira <akr@fsij.org>
+ * random.c (random_s_rand, Init_Random): Random.rand should behave as
+ Random::DEFAULT.rand rather than Kernel#rand.
- * tool/make-snapshot: Exit with EXIT_FAILURE when it fails.
+ * random.c (rand_range, random_rand): rand_range function extracted
+ from random_rand function.
-Thu Jul 4 20:20:23 2013 Tanaka Akira <akr@fsij.org>
+ * random.c (rb_f_rand): accept a Range argument as Random#rand
+ [ruby-dev:43427] #4605
- * 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.
+Mon Apr 25 03:31:06 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Thu Jul 4 18:25:25 2013 Tanaka Akira <akr@fsij.org>
+ * lib/time.rb: require 'date'.
+ * ext/date/lib/date/format.rb: removed require line.
- * bignum.c (rb_cstr_to_inum): Avoid temporary buffer allocation except
- very big base non-power-of-2 numbers.
+Mon Apr 25 03:08:39 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Thu Jul 4 15:51:56 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/date/lib/date/format.rb: require 'date'.
- * string.c (rb_str_succ): use ONIGENC_MBCLEN_CHARFOUND_P correctly.
+Mon Apr 25 03:04:16 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * string.c (rb_str_dump): ditto.
+ * ext/date/lib/date/format.rb (_iso8601): added a pattern.
-Thu Jul 4 10:04:11 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Mon Apr 25 02:51:22 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * regcomp.c (): Merge Onigmo 5.13.5 23b523076d6f1161.
+ * 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.
- * [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.
+Mon Apr 25 02:47:46 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Thu Jul 4 00:36:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/date/lib/date/format.rb (_iso8601): fixed a bug of regex.
- * internal.h (SIGNED_INTEGER_MAX): suppress warning C4146 on VC6.
- seems a logical ORed expression becomes unsigned.
+Mon Apr 25 02:12:26 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Thu Jul 4 00:13:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/date/lib/date/format.rb: an adjustment of regex.
- * ruby_atomic.h (rb_w32_atomic_cas): call InterlockedCompareExchange
- directly.
+Mon Apr 25 01:58:50 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * ruby_atomic.h (ATOMIC_CAS): fix missing function call.
+ * ext/date/lib/date/format.rb: omitted to call _parse.
-Wed Jul 3 23:47:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Apr 25 01:03:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ruby_atomic.h (ATOMIC_CAS): suppress C4022 and C4047 warnings in
- VC6. only InterlockedCompareExchange is declared using PVOID.
+ * string.c (rb_to_id): remove unused variable.
-Wed Jul 3 22:29:20 2013 Tanaka Akira <akr@fsij.org>
+Sun Apr 24 22:19:05 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * internal.h (ruby_digit36_to_number_table): Declared.
+ * complex.c, rational.c: omitted some method calls.
- * util.c (ruby_digit36_to_number_table): Moved from scan_digits.
+Sun Apr 24 02:57:27 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * bignum.c (conv_digit): Use ruby_digit36_to_number_table.
+ * ext/date/date_parse.c (n2i): takes long.
- * pack.c (hex2num): Ditto.
+Sun Apr 24 02:51:06 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Wed Jul 3 18:12:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/date/date_parse.c: reverted.
- * lib/mkmf.rb (install_dirs): revert DESTDIR prefix by r39841, since
- it is fixed by r41648. [ruby-core:55760] [Bug #8115]
+Sun Apr 24 02:25:23 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Jul 3 14:15:25 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * include/ruby/intern.h: pcc can't use __builtin_constant_p.
- * 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]
+ * vm_exec.c: change condition.
-Wed Jul 3 12:06:42 2013 Tanaka Akira <akr@fsij.org>
+Sun Apr 24 01:58:01 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * bignum.c (maxpow_in_bdigit): Renamed from calc_hbase and return
- maxpow.
+ * ext/date/date_core.c (leap_p): suppress warning: parentheses.
-Tue Jul 2 23:47:50 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c (date_s__parse_internal): remove unused
+ variable "str".
- * bignum.c (roomof): Cast to long.
- (rb_ull2big): Fix bignew arguments.
+ * ext/date/date_parse.c (parse_ddd_cb): use RSTRING_LENINT.
-Tue Jul 2 21:17:37 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_strftime.c (date_strftime_with_tmx): remove unused
+ variable.
- * bignum.c (rb_cstr_to_inum): Merge two temporary buffers.
+Sun Apr 24 00:34:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Jul 2 20:25:04 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_parse.c: removed some unused macros. use strchr()
+ instead of index().
- * bignum.c (rb_cstr_to_inum): Use BDIGIT_DBL to collect adjacent digits.
- (BDIGIT_DBL_MAX): New macro.
- (maxpow_in_bdigit_dbl): New function.
+Sat Apr 23 21:29:42 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Jul 2 17:23:33 2013 Shugo Maeda <shugo@ruby-lang.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.
- * doc/syntax/refinements.rdoc: add description of Module#using and
- refinement inheritance by module inclusion.
+Fri Apr 22 12:04:15 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Jul 2 17:22:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * array.c (rb_ary_sort_bang): fix rdoc.
+ patched by burningTyger. https://github.com/ruby/ruby/pull/11
- * internal.h: add EUC-JP and Windows-31J.
+Fri Apr 22 11:49:49 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * re.c (rb_char_to_option_kcode): use built-in encoding indexes in
- internal.h.
+ * lib/xmlrpc/create.rb (XMLRPC::Create#conv2value):
+ XML-RPC's int is 32bit int, and Fixnum also may be beyond 32bit.
- * internal.h: add UTF8-MAC.
+ * lib/xmlrpc/create.rb (XMLRPC::Create#conv2value):
+ XML-RPC doesn't allow Infinity and NaN.
+ http://www.xmlrpc.com/spec
- * dir.c (rb_utf8mac_encoding): use built-in encoding indexes in
- internal.h.
+Fri Apr 22 04:16:14 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * internal.h: add UTF-{16,32} dummy encodings.
+ * ext/psych/parser.c (parse): strings from psych have proper taint
+ markings.
- * string.c (rb_str_inspect, str_scrub0): use built-in encoding indexes
- in internal.h.
+ * test/psych/test_tainted.rb: test for string taint
- * internal.h: add UTF-{16,32}{BE,LE}.
+Thu Apr 21 01:30:02 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * io.c (io_strip_bom): use built-in encoding indexes in internal.h.
+ * random.c (rb_f_srand): fix rdoc: srand(0)'s 0 is a seed.
+ [ruby-core:35833] fixes #4590
- * internal.h (rb_{ascii8bit,utf8,usascii}_encindex): use built-in
- encoding indexes for optimization.
+Thu Apr 21 01:01:28 2011 Masaya Tarui <tarui@ruby-lang.org>
- * encoding.c (enc_inspect, rb_locale_encindex),
- (enc_set_filesystem_encoding, rb_filesystem_encindex): use built-in
- encoding indexes directly.
+ * win32/win32.c (CreateChild): maximum length of lpCommandLine is
+ 32,768 characters, including the Unicode terminating null character.
- * encoding.c (rb_enc_set_index, rb_enc_associate_index): validate
- argument encoding index.
+Wed Apr 20 21:32:11 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * include/ruby/encoding.h (ENCODING_SET): use rb_enc_set_index()
- instead of setting inlined bits directly.
+ * ext/date/date_strptime.c (date__strptime_internal): do not
+ overwrite local variables.
- * encoding.c (rb_enc_init): register preserved indexes.
+Wed Apr 20 14:41:28 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * internal.h (ruby_preserved_encindex): move from encoding.c.
+ * string.c (rb_str_each_line): check string's length when compare
+ separator and string. [ruby-core:35815] fixes #4586
-Tue Jul 2 11:14:36 2013 Shota Fukumori <sorah@cookpad.com>
+Wed Apr 20 00:02:13 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/mkmf.rb (try_config): Fix to not replace $LDFLAGS with $libs
- (1.9.3 behavior) [ruby-core:55752] [Bug #8595]
+ * misc/ruby-mode.el (ruby-parse-partial): use position of open paren.
-Tue Jul 2 00:39:59 2013 Tanaka Akira <akr@fsij.org>
+Tue Apr 19 01:00:21 2011 Tajima Akio <artonx@yahoo.co.jp>
- * ext/socket/ipsocket.c (init_inetsock_internal): Don't try mismatched
- address family if already failed.
+ * test/ruby/test_io.rb (TestIO#test_cross_thread_close_fd):
+ skip cross thread pipe close if windows
-Mon Jul 1 23:07:38 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Mon Apr 18 12:15:46 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * template/encdb.h.tmpl: define encoding index macros to use the index
- statically from C source.
+ * test/ruby/test_range.rb (TestRange#test_step_ruby_core_35753):
+ avoid float error. [ruby-core:35804]
-Mon Jul 1 22:57:19 2013 Tanaka Akira <akr@fsij.org>
+Sun Apr 17 00:20:14 2011 Tadayoshi Funaba <tadf@dotrb.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.
+ * ext/date/date_{core,strftime}.c: use struct tmx instead of vtm.
+ * ext/date/date_tmx.h: new.
-Mon Jul 1 20:22:00 2013 Kenta Murata <mrkn@cookpad.com>
+Sat Apr 16 22:23:52 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * ext/bigdecimal/bigdecimal.h (RB_UNUSED_VAR, UNREACHABLE):
- import macros from ruby.h for 1.9.3.
- [Bug #8588] [ruby-core:55730]
+ * ext/date/date_strftime.c (date_strftime_wo_timespec): changed
+ the way of validation of locale modifiers.
- * ext/bigdecimal/bigdecimal.gemspec: Bump version to 1.2.1.
+Sat Apr 16 21:55:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Jul 1 20:03:39 2013 Tanaka Akira <akr@fsij.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.
- * 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.
+Sat Apr 16 10:18:30 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-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>
+ * vm.c (Init_VM): suppress warning: "OPT_BASIC_OPERATIONS" is not
+ defined.
- * bignum.c (rb_cstr_to_inum): Skip leading zeros.
+Fri Apr 15 23:41:18 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Mon Jul 1 00:59:23 2013 Tanaka Akira <akr@fsij.org>
+ * ruby.c (proc_options): suppress warning:
+ "ALLOW_DEFAULT_SOURCE_ENCODING" is not defined.
- * 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.
+Fri Apr 15 15:10:29 2011 Akinori MUSHA <knu@iDaemons.org>
-Sun Jun 30 22:40:00 2013 Charlie Somerville <charliesome@ruby-lang.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]
- * lib/prime.rb: Corrected a few comments. Patch by @Nullset14.
- Fixes GH-346.
+Fri Apr 15 14:58:06 2011 Akinori MUSHA <knu@iDaemons.org>
-Sun Jun 30 21:53:38 2013 Tanaka Akira <akr@fsij.org>
+ * lib/fileutils.rb (FileUtils#touch): Fix corrupted output when
+ mtime is specified in addition to nocreate (and verbose).
+ ref [ruby-dev:43401]
- * bignum.c (rb_cstr_to_inum): Use rb_integer_unpack if base is a power
- of 2.
+Thu Apr 14 23:43:43 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Jun 30 10:59:23 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * numeric.c (ruby_float_step): wrong loop condition.
+ fixes [ruby-core:35753], reported by Joey Zhou.
- * 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]
+ * test/ruby/test_range.rb (TestRange#test_step_ruby_core_35753):
+ test above change.
- * io.c (spawnv, spawn): use UTF-8 spawn family. [Bug #1771]
+Thu Apr 14 22:48:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * process.c (proc_exec_sh, proc_spawn_cmd, proc_spawn_sh): ditto.
+ * lib/test/unit.rb (Test::Unit::Options#setup_options): set possible
+ values for completion. no conversion is needed.
- * win32/win32.c (translate_char, join_argv, has_redirection): make
- codepage aware.
+ * lib/test/unit.rb (Test::Unit::Runner::Worker#initialize): use
+ positional arguments instead of keyword arguments.
- * win32/win32.c (rb_w32_udln_find_exe_r, rb_w32_udln_find_file_r):
- codepage independent versions.
+ * 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.
- * win32/win32.c (w32_spawn): extract codepage aware code from
- rb_w32_spawn().
+ * lib/test/unit.rb (Test::Unit::Runner::Worker#died): rename using a
+ verb.
- * win32/win32.c (rb_w32_uspawn): add UTF-8 version function.
+ * lib/test/unit.rb (Test::Unit::Runner#_run_parallel): check if worker
+ is signaled and use its exit status.
- * win32/win32.c (w32_aspawn_flags): extract codepage aware code from
- rb_w32_aspawn_flags().
+ * lib/test/unit.rb (Test::Unit::Runner::Worker#dead): no longer @in
+ and @out are separated.
- * win32/win32.c (rb_w32_uaspawn_flags, rb_w32_uaspawn_flags): add
- UTF-8 version functions.
+Thu Apr 14 21:23:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * win32/win32.c (w32_getenv): extract codepage aware code from
- rb_w32_ugetenv() and rb_w32_getenv().
+ * variable.c (rb_autoload_p): search superclasses as same as actual
+ loading. fixes [ruby-core:35679]
- * win32/win32.c (w32_stati64): extract codepage aware code from
- rb_w32_ustati64() and rb_w32_stati64().
+Thu Apr 14 21:21:06 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * dln.h (DLN_FIND_EXTRA_ARG, DLN_FIND_EXTRA_ARG_DECL): allow extra
- arguments to dln_find_{exe,file}_r().
+ * include/ruby/win32.h (frexp, modf): wrongly declared as pure in
+ mingw math.h.
- * dln_find.c (dln_find_exe_r, dln_find_file_r): add extract arguments.
+ * include/ruby/win32.h (ftruncate, truncate): mingw64 misses
+ prototypes.
- * process.c (EXPORT_STR, EXPORT_DUP): convert to default process
- encoding if defined.
+ * win32/win32.c (rb_w32_read): suppress warning.
- * process.c (check_exec_env_i): convert environment variables too.
+Thu Apr 14 19:55:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * process.c (rb_exec_fillarg): convert program path and arguments too.
+ * 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]
-Sun Jun 30 01:57:08 2013 Tanaka Akira <akr@fsij.org>
+Thu Apr 14 16:01:45 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * bignum.c (big_rshift): Use abs2twocomp and twocomp2abs_bang.
+ * io.c (rb_f_syscall): suppress warning: "HAVE___SYSCALL" is not
+ defined.
-Sun Jun 30 00:14:20 2013 Tanaka Akira <akr@fsij.org>
+Thu Apr 14 00:41:09 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * bignum.c (RBIGNUM_SET_NEGATIVE_SIGN): New macro.
- (RBIGNUM_SET_POSITIVE_SIGN): Ditto.
- (rb_big_neg): Inline get2comp to avoid double negation.
+ * thread.c (thread_fd_close_i): IOError exception should be assigned
+ to rb_thread_t::thrown_errinfo.
-Sat Jun 29 23:26:41 2013 Tanaka Akira <akr@fsij.org>
+Wed Apr 13 20:12:26 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * 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.
+ * io.c (rb_io_fdatasync): remove unused variable.
-Sat Jun 29 22:31:59 2013 Tanaka Akira <akr@fsij.org>
+Tue Apr 12 20:54:12 2011 Tanaka Akira <akr@fsij.org>
- * bignum.c (bary_2comp): Simplified.
+ * include/ruby/st.h: parenthesize macro arguments.
-Sat Jun 29 09:33:53 2013 Tanaka Akira <akr@fsij.org>
+Tue Apr 12 19:19:50 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * bignum.c (bigor_int): Return -1 if y == -1.
+ * lib/uri/common.rb: avoid race condition. fixes #4572
-Sat Jun 29 09:07:16 2013 Tanaka Akira <akr@fsij.org>
+Tue Apr 12 18:07:13 2011 TAKAO Kouji <kouji@takao7.net>
- * 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.
+ * ext/readline/extconf.rb: --disable-libedit to disable
+ libedit. fixes #4550
-Sat Jun 29 08:19:58 2013 Tanaka Akira <akr@fsij.org>
+Tue Apr 12 10:37:39 2011 NAKAMURA Usaku <usa@ruby-lang.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.
+ * 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)
-Fri Jun 29 01:08:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Tue Apr 12 01:33:00 2011 Luis Lavena <luislavena@gmail.com>
- * 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
+ * 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.
- * test/ruby/test_integer_comb.rb (class TestIntegerComb): add test case
+Mon Apr 11 21:51:52 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri Jun 28 12:26:53 2013 Tanaka Akira <akr@fsij.org>
+ * io.c: revert r31230. Because it made a regression.
+ [ruby-core:35631]
- * bignum.c (rb_big_and): Allocate new bignum with same size to shorter
- argument if it's high bits are zero.
+Mon Apr 11 21:49:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri Jun 28 12:14:04 2013 Tanaka Akira <akr@fsij.org>
+ * 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]
- * ext/socket/ipsocket.c (init_inetsock_internal): Don't use local
- addresses which address family is different to remote address.
+Mon Apr 11 21:15:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri Jun 28 08:06:22 2013 Tanaka Akira <akr@fsij.org>
+ * file.c (rb_group_member): kill 256K of stack usage.
+ the patch was written by Eric Wong. [ruby-core:35699]
- * bignum.c (bigand_int): Add arguments, xn and hibitsx.
- Use twocomp2abs_bang.
+Mon Apr 11 07:24:13 2011 Eric Hodel <drbrain@segment7.net>
-Thu Jun 27 23:58:13 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl.c: Fix typo, document version constants.
- * bignum.c (abs2twocomp_bang): Removed.
- (abs2twocomp): Take n_ret argument to return actual length.
- (rb_big_and): Follow above change.
+Sun Apr 10 22:23:45 2011 Tanaka Akira <akr@fsij.org>
-Thu Jun 27 22:52:19 2013 Tanaka Akira <akr@fsij.org>
+ * include/ruby/ruby.h: parenthesize macro arguments.
- * 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.
+Sat Apr 9 23:31:47 2011 Shota Fukumori <sorah@tubusu.net>
-Thu Jun 27 20:03:13 2013 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * ext/stringio/stringio.c (strio_each, strio_readlines):
+ Use `NUM2LONG` instead of `FIX2INT`. Fixes [ruby-dev:43395].
- * ext/openssl/lib/openssl/ssl.rb (verify_certificate_identity): fix
- hostname verification. Patched by nahi.
+Sat Apr 9 23:22:27 2011 Shota Fukumori <sorah@tubusu.net>
- * test/openssl/test_ssl.rb (test_verify_certificate_identity): test for
- above.
+ * 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.
-Thu Jun 27 00:23:57 2013 Tanaka Akira <akr@fsij.org>
+Sat Apr 9 21:54:15 2011 Shota Fukumori <sorah@tubusu.net>
- * bignum.c (rb_big_pow): Retry if y is a Bignum and it is
- representable as a Fixnum.
- Use rb_absint_numwords.
+ * ext/stringio/stringio.c (strio_each, strio_readlines):
+ limit must not be zero. Fixes [ruby-dev:43392].
-Wed Jun 26 23:53:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * test/stringio/test_stringio.rb: Add tests for above.
- * ext/bigdecimal/bigdecimal.c (BigDecimal_save_rounding_mode): fix typo.
- Fixes GH-343. Patch by @jgarber.
+Sat Apr 9 18:01:36 2011 Tanaka Akira <akr@fsij.org>
-Wed Jun 26 23:22:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * include/ruby/util.h: parenthesize macro arguments.
- * enumerator.c (rb_enumeratorize_with_size): use strict definition
- rb_enumerator_size_func.
+Fri Apr 8 16:01:56 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Jun 26 23:11:14 2013 Kouhei Sutou <kou@cozmixng.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
- * 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.
+Thu Apr 7 20:03:52 2011 Tanaka Akira <akr@fsij.org>
-Wed Jun 26 22:44:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * include/ruby/io.h: parenthesize macro arguments.
- * include/ruby/intern.h (rb_enumeratorize_with_size): cast for
- backward compatibility.
+Wed Apr 6 21:08:31 2011 Tanaka Akira <akr@fsij.org>
- * include/ruby/intern.h (rb_enumerator_size_func): define strict
- function declaration for rb_enumeratorize_with_size().
+ * include/ruby/intern.h: parenthesize macro arguments.
-Wed Jun 26 21:01:22 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+Wed Apr 6 15:12:40 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * test/ruby/test_io.rb (TestIO#test_write_32bit_boundary): skip if
- writing a file is slow.
- [ruby-core:55541] [Bug #8519]
+ * ext/openssl/ossl_pkey_dh.c (ossl_dh_initialize):
+ pop pushed error after each try of reading. fixes #4550
-Wed Jun 26 16:42:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl_pkey_dsa.c (ossl_dsa_initialize): ditto.
- * 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.
+ * ext/openssl/ossl_pkey_ec.c (ossl_ec_initialize): ditto.
-Wed Jun 26 12:48:22 2013 Tanaka Akira <akr@fsij.org>
+Wed Apr 6 11:36:44 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * bignum.c (bigxor_int): Fix a buffer over read.
+ * ext/openssl/ossl_pkey_rsa.c (ossl_rsa_initialize):
+ pop pushed error after each try of reading. fixes #4550
-Wed Jun 26 12:13:12 2013 Tanaka Akira <akr@fsij.org>
+Tue Apr 5 20:33:43 2011 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).
+ * include/ruby/encoding.h: parenthesize macro arguments.
-Wed Jun 26 12:08:51 2013 Tanaka Akira <akr@fsij.org>
+Mon Apr 4 22:02:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * test/socket/test_udp.rb: Close sockets explicitly.
- Don't use fixed port number.
+ * 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]
-Wed Jun 26 07:27:17 2013 Tanaka Akira <akr@fsij.org>
+Mon Apr 4 21:41:26 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (bigand_int): Fix a buffer over read.
+ * 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]
-Wed Jun 26 06:48:07 2013 Tanaka Akira <akr@fsij.org>
+Mon Apr 4 11:50:40 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * bignum.c (bigadd_int): Fix a buffer over read.
+ * test/test_tempfile.rb: simply ignore platform dependent testcases
+ instead of skipping.
-Wed Jun 26 01:18:13 2013 Masaya Tarui <tarui@ruby-lang.org>
+Sun Apr 3 22:52:22 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * 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.
+ * ext/syslog/syslog.c: improve rdoc.
+ a patch by Jonas Pfenniger. [ruby-core:35592] fixes #4545
-Wed Jun 26 01:17:29 2013 Tanaka Akira <akr@fsij.org>
+Sun Apr 3 22:10:09 2011 Tanaka Akira <akr@fsij.org>
- * bignum.c (bigsub_int): Fix a buffer over read.
+ * ext/zlib/zlib.c: parenthesize macro arguments.
-Tue Jun 25 22:45:43 2013 Tanaka Akira <akr@fsij.org>
+Sun Apr 3 21:33:58 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (rb_absint_singlebit_p): Use POW2_P.
- (bary_pack): Ditto.
- (rb_big2str0): Ditto.
- (POW2_P): Moved to top.
+ * configure.in: disable fdatasync again on Mac OS X.
+ [ruby-core:35493][Bug #4500]
-Tue Jun 25 22:28:07 2013 Akinori MUSHA <knu@iDaemons.org>
+Sun Apr 3 21:16:20 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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]
+ * 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]
-Tue Jun 25 21:43:13 2013 Tanaka Akira <akr@fsij.org>
+ * io.c (fptr_finalize): ditto.
- * bignum.c (big2dbl): Use (BDIGIT)1 instead of 1UL.
- (bary_mul_normal): Remove a useless cast.
+ * io.c (maygvl_fclose): new.
+ * io.c (nogvl_fclose): ditto.
+ * io.c (maygvl_close): ditto.
+ * io.c (nogvl_close): ditto.
-Tue Jun 25 21:26:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Fri Apr 1 22:25:50 2011 Tanaka Akira <akr@fsij.org>
- * 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
+ * ext/syslog/syslog.c: parenthesize macro arguments.
-Tue Jun 25 20:36:31 2013 Tanaka Akira <akr@fsij.org>
+Fri Apr 1 18:53:06 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * bignum.c (big2ulong): "check" argument removed.
- (rb_big2ulong): Follow above change.
- (rb_big2long): Ditto.
- (rb_big_rshift): Ditto.
- (rb_big_aref): Ditto.
+ * 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'
-Tue Jun 25 20:08:29 2013 Tanaka Akira <akr@fsij.org>
+ * test/webrick/test_cookie.rb (test_parse_non_whitespace): test it.
- * bignum.c (rb_big2ulong_pack): Use rb_integer_pack.
- (rb_big_aref): Call big2ulong with TRUE for "check" argument.
- It should be non-effective.
+Fri Apr 1 13:19:20 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Jun 25 19:07:33 2013 Tanaka Akira <akr@fsij.org>
+ * vm_core.h (RUBY_VM_CHECK_INTS_TH): merge a patch by ko1
+ in [ruby-dev:43373].
- * 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
+Thu Mar 31 23:15:46 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Jun 25 19:03:00 2013 Tanaka Akira <akr@fsij.org>
+ * misc/ruby-mode.el (ruby-brace-to-do-end, ruby-do-end-to-brace):
+ adjust space between block beginning and block arguments
- * bignum.c (big2ulong): Add a cast.
- (big2ull): Add a specialized code for SIZEOF_LONG_LONG <=
- SIZEOF_BDIGITS.
+Thu Mar 31 20:42:05 2011 Tanaka Akira <akr@fsij.org>
-Tue Jun 25 12:42:57 2013 Tanaka Akira <akr@fsij.org>
+ * ext/strscan/strscan.c: parenthesize macro arguments.
- * bignum.c (integer_unpack_single_bdigit): Use "1 + ~u" instead of
- "-u" to suppress warning (C4146) by Visual Studio.
- Reported by ko1 via IRC.
+Thu Mar 31 18:06:12 2011 Shugo Maeda <shugo@ruby-lang.org>
-Tue Jun 25 12:28:57 2013 Tanaka Akira <akr@fsij.org>
+ * vm_insnhelper.c (vm_get_ev_const): should ignore crefs with
+ the NODE_FL_CREF_PUSHED_BY_EVAL flag.
- * bignum.c (big2ulong): Add code specialized for SIZEOF_LONG <=
- SIZEOF_BDIGITS.
- This prevents shift width warning from "num <<= BITSPERDIG".
+Thu Mar 31 16:49:56 2011 Shugo Maeda <shugo@ruby-lang.org>
-Tue Jun 25 12:23:30 2013 Koichi Sasada <ko1@atdot.net>
+ * vm_insnhelper.c (vm_get_ev_const): search root cref properly.
+ [ruby-dev:43365]
- * gc.c: fix oldgen/remembered_shady counting algorithm.
+Thu Mar 31 14:50:25 2011 Shugo Maeda <shugo@ruby-lang.org>
- * gc.c (rgengc_check_shady): increment
- `objspace->rgengc.remembered_shady_object_count' here.
+ * eval.c (rb_mod_s_constants): should ignore crefs with
+ the NODE_FL_CREF_PUSHED_BY_EVAL flag.
- * gc.c (rgengc_remember): return FALSE if obj is already remembered.
+Wed Mar 30 22:55:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (rgengc_rememberset_mark): make it void.
+ * misc/ruby-mode.el (ruby-toggle-block): toggle do/end and {}.
- * gc.c (gc_mark_children): fix to double counting oldgen_object_count
- at minor GC.
+ * misc/ruby-mode.el (ruby-move-to-block): move to opening of
+ block.
-Tue Jun 25 12:07:18 2013 Tanaka Akira <akr@fsij.org>
+Wed Mar 30 14:35:15 2011 Shugo Maeda <shugo@ruby-lang.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.
+ * 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]
- * marshal.c (shortlen): Use SIZEOF_BDIGITS instead of sizeof(BDIGIT).
+Wed Mar 30 00:24:53 2011 Tanaka Akira <akr@fsij.org>
- * ext/openssl/ossl_bn.c (ossl_bn_initialize): Use SIZEOF_BDIGITS
- instead of sizeof(BDIGIT).
+ * ext/stringio/stringio.c: parenthesize macro arguments.
-Tue Jun 25 11:40:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Mar 29 21:51:31 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * bignum.c (big2ulong): suppress shorten-64-to-32 warning. BDIGIT can
- be bigger than long now.
+ * object.c (rb_String): Kernel#String should call to_str before to_s.
- * bignum.c (LSHIFTX): remove redundant never-true expression.
+Tue Mar 29 10:28:08 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue Jun 25 00:55:54 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * test/webrick/test_filehandler.rb
+ (WEBrick::TestFileHandler#test_short_filename): the cgi doesn't exist
+ on current directory.
- * 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.
+Tue Mar 29 05:19:57 2011 Tanaka Akira <akr@fsij.org>
-Mon Jun 24 23:30:31 2013 Tanaka Akira <akr@fsij.org>
+ * ext/socket/raddrinfo.c: parenthesize macro arguments.
- * bignum.c (integer_unpack_single_bdigit): Refine code to filling
- higher bits and use BIGLO.
+Tue Mar 29 00:03:51 2011 Tajima Akio <artonx@yahoo.co.jp>
-Mon Jun 24 22:26:31 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+ * test/webrick/test_filehandler.rb (test_short_filename):
+ read real short filename by cmd because smb mounted files
+ have different naming convention.
- * test/rinda/test_rinda.rb (RingIPv6#prepare_ipv6):
- ifindex() function may not be implemented on Windows. We use another
- check for the case.
+Mon Mar 28 11:38:08 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Jun 24 22:11:37 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+ * ext/date/date_core.c (date_s_today): use int for year.
- * test/gdbm/test_gdbm.rb (TestGDBM#test_s_open_nolock):
- skip a failing test on Windows because flock() implementation is
- different from Unix.
+ * ext/date/date_core.c (datetime_s_now): ditto.
-Mon Jun 24 22:06:14 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+Mon Mar 28 11:07:41 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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]
+ * ext/extmk.rb: set MFLAGS from MAKEFLAGS when using nmake.
-Mon Jun 24 22:04:02 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+Mon Mar 28 11:07:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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.
+ * common.mk (love): all you need is love.
-Mon Jun 24 22:04:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Sun Mar 27 23:16:31 2011 Tanaka Akira <akr@fsij.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
+ * ext/socket/ipsocket.c: parenthesize macro arguments.
-Mon Jun 24 20:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Sun Mar 27 16:55:34 2011 Nobuyoshi Nakada <nobu@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
+ * misc/ruby-mode.el (ruby-mode-map): remove unnecessary
+ binding. fixes
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468952
-Mon Jun 24 07:57:18 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * misc/ruby-mode.el: suppress warnings at byte compile. fixes
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=502926
- * 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.
+Sun Mar 27 11:18:35 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Jun 24 02:53:09 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/date/date_core.c: removed unused variables.
- * array.c: Return value in Array overview example found by @PragTob
- [Fixes GH-336] https://github.com/ruby/ruby/pull/336
+Sat Mar 26 15:16:09 2011 Tanaka Akira <akr@fsij.org>
-Mon Jun 24 02:45:51 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/socket/getaddrinfo.c: parenthesize macro arguments.
- * array.c (rb_ary_zip): typo by @PragTob [Fixes GH-337]
- https://github.com/ruby/ruby/pull/337
+Sat Mar 26 05:27:34 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Jun 24 02:42:01 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/date/lib/date/format.rb (DateTime#strftime): removed because
+ date_core defines it.
- * win32/README.win32: grammar typo by @blankenshipz [Fixes GH-334]
- https://github.com/ruby/ruby/pull/334
+Fri Mar 25 21:59:45 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Mon Jun 24 00:59:35 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c: should not force cast with macros.
- * 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.
+Fri Mar 25 21:56:10 2011 Tanaka Akira <akr@fsij.org>
-Sun Jun 23 23:05:58 2013 Tanaka Akira <akr@fsij.org>
+ * ext/sdbm/init.c: parenthesize macro arguments.
- * 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.
+Fri Mar 25 19:39:40 2011 Ben Walton <bwalton@artsci.utoronto.ca>
- * include/ruby/ruby.h (RBIGNUM_EMBED_LEN_MAX): Define it only if it is
- not defined yet.
+ * test/test_syslog.rb:
+ Skip syslog tests that rely on LOG_PERROR unless it's defined
-Sun Jun 23 17:29:51 2013 Tanaka Akira <akr@fsij.org>
+ 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.
- * bignum.c (integer_unpack_single_bdigit): Use a cast.
+ This specifically addresses failures on Solaris 9.
-Sun Jun 23 15:38:07 2013 Koichi Sasada <ko1@atdot.net>
+ Use LOG_PID instead of LOG_PERROR in Syslog.open test
- * bootstraptest/test_thread.rb: rescue resource limitation errors.
+ 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.
-Sun Jun 23 08:19:27 2013 Tanaka Akira <akr@fsij.org>
+ Use LOG_PID instead.
- * bignum.c (integer_unpack_single_bdigit): Extracted from
- bary_unpack_internal.
+Fri Mar 25 15:42:17 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Sun Jun 23 07:41:52 2013 Tanaka Akira <akr@fsij.org>
+ * ext/sdbm/_sdbm.c (sdbm_open): use size_t.
- * bignum.c (bary_unpack_internal): Suppress warnings (C4146) on Visual Studio.
- Reported by ko1 via IRC.
+ * ext/syck/bytecode.c: ditto.
-Sun Jun 23 06:49:28 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/sdbm/_sdbm.c (delpair): use ptrdiff_t.
- * 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(),
+ * ext/sdbm/init.c: use RSTRING_LENINT.
- * class.c, eval.c, hash.c: use OBJ_WB_UNPROTECT().
+ * ext/dl/handle.c: suppress warning: shorten-64-to-32.
-Sun Jun 23 05:41:32 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/strscan/strscan.c: ditto.
- * 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.
+ * ext/syck/emitter.c: ditto.
- * vm_method.c (rb_method_entry_make): add write barriers.
+ * ext/syck/implicit.c: ditto.
-Sun Jun 23 01:27:54 2013 Tanaka Akira <akr@fsij.org>
+ * ext/syck/syck.c: ditto.
- * bignum.c (bytes_zero_p): Removed.
- (bary_pack): Don't call bytes_zero_p.
+ * ext/syck/token.c: ditto.
-Sun Jun 23 00:51:29 2013 Tanaka Akira <akr@fsij.org>
+Fri Mar 25 12:14:58 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * bignum.c (bytes_zero_p): Extracted from bary_pack.
- (bary_pack): Use bytes_zero_p.
+ * ext/nkf/nkf-utf8/nkf.c: import nkf 7f18e30.
-Sun Jun 23 00:16:57 2013 Tanaka Akira <akr@fsij.org>
+Fri Mar 25 11:49:29 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * bignum.c (MSB): New macro.
- (bary_unpack_internal): Use MSB.
- (bary_divmod): Ditto.
- (bigdivrem): Ditto.
+ * 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.
-Sat Jun 22 23:45:22 2013 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_dir_m17n.rb
+ (TestDir_M17N#test_filename_extutf8_invalid,
+ TestDir_M17N#test_filename_as_bytes_extutf8): ditto.
- * bignum.c (bary_swap): New function.
- (bary_pack): Use bary_swap.
- (bary_unpack_internal): Ditto.
+ * test/open-uri/test_open-uri.rb
+ (TestOpenURI#test_find_proxy_case_sensitive_env): ditto.
-Sat Jun 22 23:18:39 2013 Tanaka Akira <akr@fsij.org>
+ * test/dl/test_handle.rb (DL::TestHandle#test_NEXT,
+ DL::TestHandle#test_DEFAULT): ditto.
- * 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.
+Thu Mar 24 23:06:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Jun 22 21:46:18 2013 Tanaka Akira <akr@fsij.org>
+ * vm_insnhelper.c (vm_get_ev_const): should not autoload in
+ defined? mode.
- * bignum.c (rb_integer_unpack): Don't allocate a Bignum if possible.
+ * variable.c (rb_const_defined_0): fix autoloading base.
+ [ruby-core:35509]
-Sat Jun 22 21:03:58 2013 Tanaka Akira <akr@fsij.org>
+Thu Mar 24 22:48:43 2011 Tanaka Akira <akr@fsij.org>
- * pack.c (pack_unpack): Remove specialized unpackers for integers.
+ * ext/sdbm/_sdbm.c: parenthesize macro arguments.
-Sat Jun 22 20:36:50 2013 Tanaka Akira <akr@fsij.org>
+Thu Mar 24 14:45:57 2011 NARUSE, Yui <naruse@ruby-lang.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.
+ * ext/openssl/ossl.c: suppress warning: shorten-64-to-32.
-Sat Jun 22 18:53:10 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl.h: ditto.
- * 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.
+ * ext/openssl/ossl_asn1.c: ditto.
- * internal.h (INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION): Defined.
+ * ext/openssl/ossl_bio.c: ditto.
-Sat Jun 22 15:41:25 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_bn.c: ditto.
- * gc.c (rgengc_check_shady): add new WB miss checking
- on RGENGC_CHECK_MODE >= 2.
+ * ext/openssl/ossl_cipher.c: ditto.
- (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.
+ * ext/openssl/ossl_hmac.c: ditto.
- This idea of this checker is by Masaya Tarui <tarui@ruby-lang.org>.
+ * ext/openssl/ossl_ns_spki.c: ditto.
-Sat Jun 22 15:25:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * ext/openssl/ossl_ocsp.c: ditto.
- * ext/etc/etc.c (setup_passwd): revert r41560, unnecessary
+ * ext/openssl/ossl_pkcs5.c: ditto.
-Sat Jun 22 14:39:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * ext/openssl/ossl_pkey.c: ditto.
- * 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
+ * ext/openssl/ossl_pkey_dh.c: ditto.
-Sat Jun 22 14:35:40 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_pkey_dsa.c: ditto.
- * ext/dl/cfunc.c (rb_dlcfunc_call): Use rb_big_pack instead of
- rb_big2ulong_pack and rb_big2ull.
+ * ext/openssl/ossl_pkey_ec.c: ditto.
- * include/ruby/intern.h (rb_big2ulong_pack): Deprecated.
+ * ext/openssl/ossl_pkey_rsa.c: ditto.
-Sat Jun 22 14:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * ext/openssl/ossl_rand.c: ditto.
- * 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
+ * ext/openssl/ossl_ssl.c: ditto.
-Sat Jun 22 13:47:13 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_x509ext.c: ditto.
- * bignum.c (bary_pack): MEMZERO can be used even if nails is not zero.
+ * ext/openssl/ossl_x509name.c: ditto.
-Sat Jun 22 13:43:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Thu Mar 24 11:48:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/etc/etc.c (etc_getpwnam): use PRIsVALUE in format string instead
- of %s and RSTRING_PTR
+ * ext/openssl/ossl_rand.c (ossl_rand_egd_bytes): use NUM2INT because
+ the result is used with functions whose argument is int.
- * ext/etc/etc.c (etc_getgrnam): ditto
+ * ext/openssl/ossl_ssl.c (ossl_sslctx_setup): ditto.
-Sat Jun 22 13:07:15 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_x509store.c (ossl_x509store_set_purpose): ditto.
- * bignum.c (CLEAR_LOWBITS): Rewritten without RSHIFTX.
- (RSHIFTX): Removed.
+ * ext/openssl/ossl_x509store.c (ossl_x509store_set_trust): ditto.
-Sat Jun 22 10:38:03 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_x509store.c (ossl_x509stctx_set_purpose): ditto.
- * pack.c (num2i32): Removed.
- (pack_pack): Don't use num2i32.
+ * ext/openssl/ossl_x509store.c (ossl_x509stctx_set_trust): ditto.
-Sat Jun 22 09:55:13 2013 Tanaka Akira <akr@fsij.org>
+Thu Mar 24 11:36:55 2011 NARUSE, Yui <naruse@ruby-lang.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.
+ * ext/openssl/ossl_x509name.c: id_aref's type is ID.
-Sat Jun 22 09:11:33 2013 Ryan Davis <ryand-ruby@zenspider.com>
+Thu Mar 24 10:04:35 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * lib/minitest/*: Imported minitest 4.7.5 (r8724)
- * test/minitest/*: ditto
+ * ext/io/console/console.c (console_set_winsize):
+ suppress warning: shorten-64-to-32.
-Sat Jun 22 07:20:30 2013 Koichi Sasada <ko1@atdot.net>
+Thu Mar 24 09:56:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * 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))
+ * ext/openssl/ossl_ocsp.c (ossl_ocspreq_verify): flags is VALUE,
+ so it should use NUM2INT.
- * gc.c (gc_marks): record `oldgen_object_count' into current profile`
- record directly.
+ * ext/openssl/ossl_ocsp.c (ossl_ocspbres_verify): ditto.
- * gc.c (rgengc_rememberset_mark): same for remembered_normal_objects
- and remembered_shady_objects.
+Wed Mar 23 21:09:29 2011 Tanaka Akira <akr@fsij.org>
-Sat Jun 22 06:46:04 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/readline/readline.c: parenthesize macro arguments.
- * 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.
+Wed Mar 23 08:07:33 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c: use above fields.
+ * numeric.c (flo_round): fix inaccurate results.
-Sat Jun 22 06:05:36 2013 Koichi Sasada <ko1@atdot.net>
+Wed Mar 23 00:12:16 2011 Tajima Akio <artonx@yahoo.co.jp>
- * gc.c (rb_gc_giveup_promoted_writebarrier): remove `rest_sweep()'
- because all of remembered objects are called for gc_mark_children().
+ * win32/win32.c: wait process real termination after reading
+ exit code. fixes #4518
-Sat Jun 22 05:08:03 2013 Koichi Sasada <ko1@atdot.net>
+Tue Mar 22 21:20:10 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * gc.c (rgengc_rememberset_mark): call gc_mark_children() for
- remembered objects directly instead of pushing on the mark stack.
+ * lib/rubygems/test_case.rb: save current dir to @current_dir
+ before Dir.chdir.
-Sat Jun 22 04:48:53 2013 Koichi Sasada <ko1@atdot.net>
+Tue Mar 22 20:10:04 2011 Tanaka Akira <akr@fsij.org>
- * include/ruby/ruby.h (OBJ_WRITE): cast to (VALUE *) for second
- parameter `slot'. You don't need to write a cast (VALUE *) any more.
+ * ext/psych/parser.c: parenthesize macro arguments.
- * 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().
+Tue Mar 22 20:10:01 2011 Tanaka Akira <akr@fsij.org>
-Sat Jun 22 04:37:08 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ruby_missing.h: parenthesize macro arguments.
- * gc.c (slot_sweep_body): rename to slot_sweep().
- No need to separate major/minor GC.
+Tue Mar 22 13:33:22 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * gc.c (gc_setup_mark_bits): remove gc_clear_mark_bits() and unify to
- this function.
+ * ext/openssl/lib/openssl/buffering.rb: removed circular require of
+ openssl.rb.
-Sat Jun 22 04:20:21 2013 Koichi Sasada <ko1@atdot.net>
+ * 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"
- * gc.c (check_bitmap_consistency): add to check flag and bitmap consistency.
- Use this function in several places.
+Tue Mar 22 10:57:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Jun 22 02:18:07 2013 Tanaka Akira <akr@fsij.org>
+ * test/runner.rb: set Gem::TestCase's @@project_dir.
- * 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.
+ * lib/rubygems/test_case.rb: set Gem::TestCase's @@project_dir only
+ when it is not defined.
- * internal.h (swap16): Moved from pack.c
- (swap32): Ditto.
- (swap64): Ditto.
+Tue Mar 22 09:38:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Jun 21 21:29:49 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * numeric.c (flo_round): use pow instead of while-loop. fixes #4510
+ patched by Alex Young [ruby-core:35526]
- * 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.
+Tue Mar 22 06:47:46 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Jun 21 21:11:53 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/date/date_strftime.c (date_strftime_wo_timespec):
+ suppress warning: shorten-64-to-32.
- * gc.c (allocate_sorted_heaps): remove unused variable `add'.
+Tue Mar 22 06:42:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Jun 21 20:50:32 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/date/date_core.c: suppress warning: shorten-64-to-32.
- * include/ruby/ruby.h: constify RArray::as::ary and RArray::heap::ptr.
- Use RARRAY_ASET() or RARRAY_PTR_USE() to modify Array objects.
+Tue Mar 22 06:41:37 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * array.c, gc.c: catch up above changes.
+ * lib/test/unit/parallel.rb: remove unused variable.
-Fri Jun 21 20:32:13 2013 Koichi Sasada <ko1@atdot.net>
+Tue Mar 22 06:19:42 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * vm_eval.c (eval_string_with_cref): fix WB miss.
+ * enc/utf_16le.c: suppress warning: shorten-64-to-32.
-Fri Jun 21 20:15:49 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/dbm/dbm.c: ditto.
- * 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 *).
+ * ext/gdbm/gdbm.c: ditto.
- * struct.c, re.c, gc.c, marshal.c: rewrite with above APIs.
+ * parse.y (Init_ripper): suppress warning: unused value.
-Fri Jun 21 19:38:37 2013 Tanaka Akira <akr@fsij.org>
+Mon Mar 21 11:21:32 2011 Shota Fukumori <sorah@tubusu.net>
- * bignum.c (BDIGMAX): Use BIGRAD.
- (BIGLO): Use BDIGMAX.
- (bigdivrem1): Ditto.
- (bigor_int): Ditto.
- (rb_big_or): Ditto.
+ * lib/test/unit.rb: Refactoring. Unified if and elsif.
-Fri Jun 21 19:18:48 2013 Tanaka Akira <akr@fsij.org>
+Sun Mar 20 23:09:34 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * pack.c (pack_pack): Move the implementation for 'c' directive after
- pack_integer label.
+ * ext/date/date_strftime.c: checks duplicated modifiers.
-Fri Jun 21 19:11:56 2013 Koichi Sasada <ko1@atdot.net>
+Sun Mar 20 22:32:30 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * include/ruby/ruby.h, re.c: support write barrier for T_REGEXP.
+ * ext/date/date_strftime.c: removed unused code and arguments.
- 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.
+Sun Mar 20 21:34:49 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Fri Jun 21 18:56:58 2013 Tanaka Akira <akr@fsij.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.
- * bignum.c (bigsub_int): Use bdigit_roomof.
- (bigadd_int): Ditto.
- (bigand_int): Ditto.
- (bigor_int): Ditto.
- (bigxor_int): Ditto.
+Sun Mar 20 12:43:12 2011 Tanaka Akira <akr@fsij.org>
-Fri Jun 21 17:56:25 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_x509store.c: parenthesize macro arguments.
- * benchmark/gc/gcbench.rb: fix summary of benchmark result notation.
+Sun Mar 20 01:39:48 2011 Tajima Akio <artonx@yahoo.co.jp>
-Fri Jun 21 16:38:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * 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.
- * 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
+Sat Mar 19 18:35:05 2011 Tajima Akio <artonx@yahoo.co.jp>
-Fri Jun 21 15:26:45 2013 Koichi Sasada <ko1@atdot.net>
+ * hash.c (ruby_setenv): calculate total env block size for win32.
+ * test/ruby/test_env.rb: add test for above patch.
- * gc.c (gc_sweep): profile sweep time correctly when LAZY_SWEEP is
- disabled.
+Sat Mar 19 17:14:46 2011 Tajima Akio <artonx@yahoo.co.jp>
- * gc.c (gc_marks_test): store oldgen count and shady count
- before test marking and restore them after marking.
+ * 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.
-Fri Jun 21 15:07:42 2013 Koichi Sasada <ko1@atdot.net>
+Sat Mar 19 12:30:25 2011 Tanaka Akira <akr@fsij.org>
- * gc.c: enable lazy sweep (commit miss).
+ * ext/openssl/ossl_x509revoked.c: parenthesize macro arguments.
-Fri Jun 21 14:31:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Mar 18 20:44:36 2011 Tanaka Akira <akr@fsij.org>
- * hash.c (ruby_setenv): refine error message so include the variable
- name.
+ * ext/openssl/ossl_x509req.c: parenthesize macro arguments.
-Fri Jun 21 14:15:08 2013 Koichi Sasada <ko1@atdot.net>
+Fri Mar 18 08:48:06 2011 Oleg Shaldybin <oleg.shaldybin@gmail.com>
- * gc.c: fix to use total_allocated_object_num and heaps_used
- at the GC time for profiler.
+ * 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 Jun 21 12:35:35 2013 Koichi Sasada <ko1@atdot.net>
+Fri Mar 18 00:59:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c: RGENGC_CHECK_MODE should be 0.
+ * 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 Jun 21 11:18:25 2013 Koichi Sasada <ko1@atdot.net>
+Fri Mar 18 00:54:20 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (gc_marks_body): fix to get `th' in this function.
+ * include/ruby/ruby.h (rb_funcall_passing_block): add prototype.
+ a patch by James M. Lawrence at [ruby-core:35501]
-Fri Jun 21 10:21:44 2013 Koichi Sasada <ko1@atdot.net>
+Wed Mar 17 06:23:31 2011 Tanaka Akira <akr@fsij.org>
- * gc.c (heaps_header/heaps_slot): embed bitmaps into heaps_slot.
- no need to maintain allocation/free bitmaps.
+ * ext/openssl/ossl_x509name.c: parenthesize macro arguments.
-Fri Jun 21 09:22:16 2013 Koichi Sasada <ko1@atdot.net>
+Wed Mar 16 20:36:56 2011 Tanaka Akira <akr@fsij.org>
- * gc.c (slot_sweep_body): add counters at a time.
+ * ext/socket/ipsocket.c (init_inetsock_internal): raise an error on
+ listen(2) failure.
+ reported by Xavier Shay. [ruby-core:35505]
- * gc.c (gc_profile_dump_on): fix line break position.
+Wed Mar 16 15:06:21 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jun 21 08:14:00 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * ext/openssl/lib/openssl/buffering.rb (module OpenSSL): #flush should
+ not change sync mode on exception.
+ * test/openssl/test_buffering.rb: added
- * gc.c: refactoring bitmaps. introduce bits_t type and some Consts.
+Wed Mar 16 13:45:28 2011 Eric Hodel <drbrain@segment7.net>
-Fri Jun 21 08:04:32 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/lib/openssl/buffering.rb: de-nest Buffering module
- * gc.c: fix to support USE_RGENGC == 0 (disable RGenGC).
- If USE_RGENGC==0, it caused compilation error.
+ * ext/openssl/lib/openssl/buffering.rb: add RDoc
-Fri Jun 21 08:08:11 2013 Masaya Tarui <tarui@ruby-lang.org>
+Wed Mar 16 08:40:39 2011 Tanaka Akira <akr@fsij.org>
- * gc.c (lazy_sweep): Use is_lazy_sweeping()
- * gc.c (rest_sweep): Ditto.
- * gc.c (gc_prepare_free_objects): Ditto.
+ * ext/openssl/ossl_x509ext.c: parenthesize macro arguments.
-Fri Jun 21 07:34:47 2013 Koichi Sasada <ko1@atdot.net>
+Tue Mar 15 18:34:27 2011 Tanaka Akira <akr@fsij.org>
- * gc.c (gc_profile_record::oldgen_objects): added.
+ * ext/openssl/ossl_x509crl.c: parenthesize macro arguments.
- * 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
+Tue Mar 15 09:49:03 2011 Shota Fukumori <sorah@tubusu.net>
-Fri Jun 21 06:43:59 2013 Tanaka Akira <akr@fsij.org>
+ * test/misc/test_ruby_mode.rb (test_singleton_class): Skip for Pending.
- * bignum.c (rb_ull2big): Refactored.
- (rb_uint2big): Useless code removed.
+Mon Mar 14 21:20:44 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Fri Jun 21 05:37:39 2013 Koichi Sasada <ko1@atdot.net>
+ * test/ruby/test_require.rb (test_require_too_long_filename):
+ increase path length, because MAXPATHLEN is defined as 4096 on linux.
- * gc.c (gc_prof_sweep_timer_stop): accumulate sweep time only when
- record->gc_time > 0.
+ * test/ruby/test_require.rb (test_require_path_home_1): ditto.
-Fri Jun 21 00:37:31 2013 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_require.rb (test_require_path_home_2): ditto.
- * ext/bigdecimal: Workaround fix for bigdecimal test failures caused
- by [ruby-dev:47413] [Feature #8509]
+Mon Mar 14 19:54:37 2011 Tanaka Akira <akr@fsij.org>
- * 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/openssl/ossl_x509cert.c: parenthesize macro arguments.
- * ext/bigdecimal/bigdecimal.c (RBIGNUM_ZERO_P): Use rb_bigzero_p.
- (bigzero_p): Removed.
- (is_even): Use rb_big_pack.
+Sun Mar 13 18:11:28 2011 Tanaka Akira <akr@fsij.org>
-Thu Jun 20 22:52:42 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_x509attr.c: parenthesize macro arguments.
- * bignum.c (bigmul1_toom3): Don't call bignorm twice.
+Sun Mar 13 16:07:58 2011 Shota Fukumori <sorah@tubusu.net>
-Thu Jun 20 22:49:27 2013 Tanaka Akira <akr@fsij.org>
+ * lib/pstore.rb: Fix don't raise "nested transaction" when thread_safe
+ is true. Patch by Masaki Matsushita (Glass_saga). [ruby-dev:43337]
- * bignum.c (bignorm): Don't call bigtrunc if the result is a fixnum.
+ * test/test_pstore.rb: Test for above.
+ Patch by Masaki Matsushita (Glass_saga) [ruby-dev:43337]
-Thu Jun 20 22:29:42 2013 Tanaka Akira <akr@fsij.org>
+Sat Mar 12 04:12:41 2011 Tanaka Akira <akr@fsij.org>
- * bignum.c (rb_uint2big): Refactored.
+ * ext/openssl/ossl_ssl_session.c: parenthesize macro arguments.
-Thu Jun 20 22:24:41 2013 Tanaka Akira <akr@fsij.org>
+Sat Mar 12 02:27:07 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * bignum.c (dump_bignum): Use SIZEOF_BDIGITS.
+ * ext/date/date_core.c ({d,dt}_lite_marshal_load): checks the given
+ argument.
-Thu Jun 20 22:22:46 2013 Tanaka Akira <akr@fsij.org>
+Sat Mar 12 01:26:24 2011 Tadayoshi Funaba <tadf@dotrb.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.
+ * ext/date/date_core.c: changed some directives.
-Thu Jun 20 22:02:46 2013 Tanaka Akira <akr@fsij.org>
+Sat Mar 12 01:16:02 2011 Tadayoshi Funaba <tadf@dotrb.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.
+ * ext/date/date_core.c, ext/date/lib/*: moved rdoc descriptions.
-Thu Jun 20 21:17:19 2013 Koichi Sasada <ko1@atdot.net>
+Sat Mar 12 00:06:24 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * gc.c (rgengc_rememberset_mark): record
- (1) normal objects count in remember set
- (2) shady objects count in remember set
- each GC timing.
+ * ext/date/lib: moved from lib.
- * gc.c (gc_profile_record_get): enable to access above information
- and REMOVING_OBJECTS, EMPTY_OBJECTS.
+Fri Mar 11 23:32:38 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Thu Jun 20 18:29:26 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/date/delta*: removed undocumented delta.
- * benchmark/gc/gcbench.rb: Do not use GC::Profiler::disable because
- GC::Profiler::disable prohibit to access profiling data. It should
- be spec bug.
+Fri Mar 11 18:42:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- Skip GC::Profiler::report if RUBY_VERSION < '2.0.0'
+ * lib/mkmf.rb (find_executable0): should exclude directories.
-Thu Jun 20 17:59:08 2013 Koichi Sasada <ko1@atdot.net>
+Fri Mar 11 01:40:35 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * benchmark/gc/gcbench.rb: stop GC::Profiler before output results.
- Generating GC::Profiler result under profiling causes infinite loop.
+ * process.c (proc_getmaxgroups, proc_setmaxgroups): Process#maxgroups
+ and Process#maxgroups= now raise NotImplementedError if the
+ platform don't support supplementary groups concept.
-Thu Jun 20 17:24:24 2013 Koichi Sasada <ko1@atdot.net>
+Fri Mar 11 01:25:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * benchmark/gc/gcbench.rb: don't use __dir__ to make compatible
- with ruby 1.9.3.
+ * process.c (get_sc_ngroups_max): return -1 if platform don't
+ support NGROUPS_MAX.
-Thu Jun 20 16:57:19 2013 Koichi Sasada <ko1@atdot.net>
+Thu Mar 10 22:28:15 2011 Tanaka Akira <akr@fsij.org>
- * benchmark/bm_app_aobench.rb: use attr_accessor/reader instead of
- defining methods.
+ * ext/openssl/ossl_ssl.h: parenthesize macro arguments.
-Thu Jun 20 16:46:46 2013 Koichi Sasada <ko1@atdot.net>
+Thu Mar 10 21:59:37 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * benchmark/bm_app_aobench.rb: added.
+ * 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
- * benchmark/gc/aobench.rb: added.
+Thu Mar 10 16:00:22 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Jun 20 16:28:33 2013 Koichi Sasada <ko1@atdot.net>
+ * 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
- * benchmark/bm_so_binary_trees.rb: disable `puts' method
- and change iteration parameter to increase execution time.
+Thu Mar 10 10:52:01 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * benchmark/gc/binarytree.rb: added.
+ * 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 Jun 20 16:06:37 2013 Koichi Sasada <ko1@atdot.net>
+Thu Mar 10 10:09:35 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * benchmark/gc/pentomino.rb: added.
- Simply load pentomino puzzle in the benchmark/ directory.
+ * lib/test/unit.rb (Test::Unit::Runner::Worker#read): fix for the case
+ when IO#read or IO#gets returns nil.
-Thu Jun 20 15:32:56 2013 Koichi Sasada <ko1@atdot.net>
+Thu Mar 10 07:12:03 2011 Ryan Davis <ryand-ruby@zenspider.com>
- * benchmark/gc/redblack.rb: import red black tree benchmark from
- https://github.com/jruby/rubybench/blob/master/time/bench_red_black.rb
+ * 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.
- * benchmark/gc/ring.rb: add a benchmark. This benchmark create many
- old objects.
+Thu Mar 10 03:00:43 2011 Tanaka Akira <akr@fsij.org>
-Thu Jun 20 15:14:00 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_ssl.c: parenthesize macro arguments.
- * benchmark/gc: create a directory to store GC related benchmark.
+Wed Mar 9 23:51:26 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * benchmark/gc/gcbench.rb: moved from tool/gcbench.rb.
+ * test/ruby/test_io_m17n.rb (test_io_new_enc): "sjis" is now an alias
+ of Windows-31J.
- * benchmark/gc/hash(1|2).rb: ditto.
+Wed Mar 9 23:06:13 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * benchmark/gc/rdoc.rb: ditto.
+ * misc/ruby-mode.el (ruby-parse-partial): fix indent after aref.
- * benchmark/gc/null.rb: added.
+Wed Mar 9 12:50:24 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * common.mk: fix rule.
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: Rescue exceptions when
+ people implement the method method. Thanks Lin Jen-Shin.
+ [ruby-core:35255]
-Thu Jun 20 14:09:54 2013 Koichi Sasada <ko1@atdot.net>
+ * test/psych/visitors/test_yaml_tree.rb: test for implementation of
+ method method.
- * tool/hashbench1.rb: fix parameter too. Increase temporary objects.
+Wed Mar 9 11:53:31 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Jun 20 14:01:35 2013 Koichi Sasada <ko1@atdot.net>
+ * enc/shift_jis.c: Change SJIS as an alias of Windows-31J.
+ [ruby-dev:43027] fixes #4280
- * tool/hashbench1.rb: fix parameters.
+ * enc/shift_jis.c: Add PCK as an alias of Windows-31J.
-Thu Jun 20 14:00:34 2013 Koichi Sasada <ko1@atdot.net>
+Wed Mar 9 00:45:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * common.mk: remove dependency from ruby.
+ * ext/extmk.rb: nmake substitutes all occurrences in macro.
-Thu Jun 20 13:14:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/extmk.rb: workaround for nmake.
- * error.c (rb_check_backtrace): evaluate RARRAY_AREF only once.
- the first argument of RB_TYPE_P is expanded twice for non-immediate
- types.
+Tue Mar 8 23:49:45 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu Jun 20 08:09:29 2013 Koichi Sasada <ko1@atdot.net>
+ * process.c (proc_setgroups): cleanup.
- * tool/gcbench.rb: Summary in one line.
+Tue Mar 8 23:40:30 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * common.mk: separate gcbench-hash to gcbench-hash1 and gcbench-hash2.
+ * test/misc/test_ruby_mode.rb: test for ruby-mode.el.
-Thu Jun 20 08:07:23 2013 Tanaka Akira <akr@fsij.org>
+Tue Mar 8 23:27:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (BIGSIZE): New macro.
- (bigfixize): Use BIGSIZE.
- (big2ulong): Ditto.
- (check_shiftdown): Ditto.
- (rb_big_aref): Ditto.
+ * process.c (get_sc_ngroups_max): try to use NGROUPS_MAX at first if
+ _SC_NGROUP_MAX is not defined.
-Thu Jun 20 07:46:48 2013 Masaya Tarui <tarui@ruby-lang.org>
+Tue Mar 8 23:10:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (rb_gc_writebarrier): give up rescan A and register B directly
- if A has huge number of children.
+ * misc/ruby-mode.el (ruby-parse-partial): fix for array in block.
-Thu Jun 20 07:30:35 2013 Koichi Sasada <ko1@atdot.net>
+Tue Mar 8 21:44:49 2011 Tanaka Akira <akr@fsij.org>
- * common.mk: add new rules `gcbench-rdoc', `gcbench-hash'.
+ * ext/openssl/ossl_rand.c: parenthesize macro arguments.
- * tool/gcbench.rb: separate GC bench framework and process.
+Tue Mar 8 16:45:31 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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.
+ * 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.
- * tool/rdocbench.rb: separated.
+Tue Mar 8 15:57:20 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Jun 20 06:25:39 2013 Koichi Sasada <ko1@atdot.net>
+ * 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.
- * tool/rdocbench.rb: add summary.
+Tue Mar 8 12:30:06 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jun 20 06:18:01 2013 Koichi Sasada <ko1@atdot.net>
+ * misc/ruby-mode.el (ruby-deep-indent-paren-p, ruby-calculate-indent):
+ do not apply deep-indent inside parens at the beginning of
+ expressions.
- * gc.c (gc_profile_total_time): check objspace->profile.next_index > 0.
+Tue Mar 8 09:32:48 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Jun 20 05:47:41 2013 Koichi Sasada <ko1@atdot.net>
+ * common.mk (configure-ext, build-ext), ext/extmk.rb (extmake):
+ support parallel-make under ext.
- * gc.c (gc_prof_sweep_timer_start): fix merge miss.
+Tue Mar 8 09:25:23 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (GC_PROFILE_MORE_DETAIL): set it 0.
+ * process.c (proc_setgroups): use getgrnam() if getgrnam_r() is
+ not available.
-Thu Jun 20 05:38:56 2013 Koichi Sasada <ko1@atdot.net>
+ * process.c: RARRAY_LEN() returns long int.
- * gc.c: Accumulate sweep time to GC time.
- Now [GC time] is [mark time] + [sweep time] + [misc].
- ([GC time] >= [mark time] + [sweep time])
+Tue Mar 8 09:07:03 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (gc_prof_sweep_slot_timer_start/stop): rename to
- gc_prof_sweep_timer_start/stop and locate at lazy_sweep().
+ * configure.in (RUBY_REPLACE_TYPE): enclose in quotes for multiple
+ type names.
- * gc.c (elapsed_time_from): add a utility function.
+Tue Mar 8 01:43:11 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Jun 20 05:08:53 2013 Koichi Sasada <ko1@atdot.net>
+ * process.c (get_sc_ngroups_max): define to wrap sysconf(3).
+ this also supports Windows which doesn't have sysconf(3).
- * gc.c (gc_marks): fix wrong option. FALSE means major/full GC.
- It should be TRUE (minor marking).
+ * process.c (maxgroups): use get_sc_ngroups_max.
-Thu Jun 20 02:44:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * process.c (proc_setmaxgroups): ditto.
- * 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.
+Tue Mar 8 01:16:49 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Jun 20 01:34:15 2013 Tanaka Akira <akr@fsij.org>
+ * gc.c (rb_objspace): an initializer must be a constant.
- * 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.
+Tue Mar 8 01:11:44 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Jun 20 01:07:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * process.c (maxgroups): cast because sysconf(3)'s return value is long.
- * gc.c (MARKED_IN_BITMAP, FL_TEST2): return boolean value since always
- used as boolean value.
+ * process.c (proc_setmaxgroups): ditto.
- * gc.c (MARK_IN_BITMAP, CLEAR_IN_BITMAP): evaluate bits once.
+ * process.c (proc_setgroups): cast because RARRAY_LEN() is long.
-Thu Jun 20 00:05:07 2013 Koichi Sasada <ko1@atdot.net>
+Tue Mar 8 00:02:47 2011 Tanaka Akira <akr@fsij.org>
- * gc.c (RVALUE_PROMOTED): fix type.
+ * ext/openssl/ossl_pkey_rsa.c: parenthesize macro arguments.
-Wed Jun 19 23:39:01 2013 Koichi Sasada <ko1@atdot.net>
+Mon Mar 7 22:59:39 2011 Shota Fukumori <sorah@tubusu.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)
+ * lib/pstore.rb: Delete variable @transaction and fix #4474. Patch by
+ Masaki Matsushita (Glass_saga).
-Wed Jun 19 23:51:48 2013 Tanaka Akira <akr@fsij.org>
+ * test/test_pstore.rb(test_thread_safe): Add test for #4474.
- * bignum.c (bigfixize): Use rb_absint_size.
- (check_shiftdown): Ditto.
- (big2ulong): Use bdigit_roomof.
+Mon Mar 7 21:31:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Jun 19 23:32:23 2013 Koichi Sasada <ko1@atdot.net>
+ * process.c (proc_setgroups): replace getgrnam() with getgrnam_r()
+ because getgrnam() isn't thread safe.
- * gc.c (RVALUE_PROMOTED): check consistency between oldgen flag and
- oldgen bitmap if RGENGC_CHECK_MODE > 0.
+Mon Mar 7 20:49:12 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Jun 19 23:29:29 2013 Koichi Sasada <ko1@atdot.net>
+ * process.c (proc_getmaxgroups, proc_setmaxgroups): reflect
+ platform maxgroups limitation by default instead hardcoded 65536.
- * gc.c (rb_gc_force_recycle): clear oldgen bitmap, too.
+Mon Mar 7 17:13:00 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
-Wed Jun 19 21:02:13 2013 Tanaka Akira <akr@fsij.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.
- * 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.
+Mon Mar 7 09:05:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Jun 19 20:51:21 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * process.c: NUM2RLIM is defined but no getrlimit and setrlimit on
+ mingw.
- * gc.c (gc_stress_get): GC.stress can be Fixnum.
+Mon Mar 7 08:38:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Jun 19 19:31:30 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/date_core.c (DateTimeData): should not use bare 'long long'
+ and 'long double', which are not defined by C89.
- * 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.
+ * ext/date/date_core.c (dt_lite_plus): get rid of overflow at casting
+ down double to integer.
-Wed Jun 19 15:14:30 2013 Koichi Sasada <ko1@atdot.net>
+Mon Mar 7 00:21:11 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * process.c (proc_getgroups): get rid of maxgroups dependency.
+ ngroups can be calculated dynamically.
- * iseq.c: making non-shady iseq objects.
+Sun Mar 6 23:45:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * class.c, compile.c, proc.c, vm.c: add WB for iseq objects.
+ * configure.in: rlim_t use standard RUBY_REPLACE_TYPE mechanism.
- * vm_core.h, iseq.h: constify fields to detect WB insertion.
+Sun Mar 6 23:26:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Jun 19 15:11:13 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * process.c (proc_setmaxgroups): added negative value check.
+ This was suggested by Daniel Berger. Thanks Daniel!
+ [ruby-core:35426][Bug#4467]
- * gc.c (gc_mark_children): show more info for broken object.
+Sun Mar 6 23:18:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Jun 19 14:04:41 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * process.c (maxgroups, proc_setmaxgroups): increase max groups
+ limitation up to 65536.
- * test/ruby/envutil.rb (EnvUtil#rubybin): remove unnecessary
- unless expression.
+Sun Mar 6 22:20:59 2011 Tanaka Akira <akr@fsij.org>
-Wed Jun 19 07:47:48 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/openssl/ossl_pkey_ec.c: parenthesize macro arguments.
- * gc.c (garbage_collect_body): use FIX2INT for ruby_gc_stress.
+Sun Mar 6 21:49:04 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Jun 19 07:44:31 2013 Koichi Sasada <ko1@atdot.net>
+ * 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]
- * gc.c (rb_objspace::gc_stress): int -> VALUE to store Fixnum object.
+Sun Mar 6 05:21:41 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Jun 19 07:25:35 2013 Koichi Sasada <ko1@atdot.net>
+ * class.c: fix camelCase to snake_case in documentation code examples.
+ patched by Andrew Grimm. fixes Bug #4469
- * gc.c (make_deferred): clear flags to T_ZOMBIE.
+ * marshal.c: ditto.
- * gc.c (slot_sweep_body): fix indent.
+ * proc.c: ditto.
-Wed Jun 19 07:18:47 2013 Tanaka Akira <akr@fsij.org>
+ * sample/biorhythm.rb: ditto.
- * bignum.c (rb_big_aref): Apply BIGLO to ~xds[i] for environment which
- BDIGIT is 16bit.
+ * vm_eval.c: ditto.
-Wed Jun 19 07:09:26 2013 Koichi Sasada <ko1@atdot.net>
+ * vm_method.c: ditto.
- * 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)
+Sun Mar 6 03:22:27 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Jun 19 07:06:21 2013 Koichi Sasada <ko1@atdot.net>
+ * io.c (io_cntl): use rb_thread_io_blocking_region() instead
+ rb_thread_blocking_region().
- * gc.c (rgengc_remember): check T_NONE and T_ZOMBIE
- if RGENGC_CHECK_MODE > 0.
+Sat Mar 5 22:54:36 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Wed Jun 19 07:02:19 2013 Koichi Sasada <ko1@atdot.net>
+ * include/ruby/intern.h: fix a typo of prototype declaration.
+ rb_mutex_try_lock -> rb_mutex_trylock [ruby-dev:43213]
- * gc.c (RGENGC_CHECK_MODE): add new check mode `3'.
- In this mode, show all references if there is
- a miss-corrected object.
+Sat Mar 5 19:44:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed Jun 19 06:31:08 2013 Koichi Sasada <ko1@atdot.net>
+ * test/ruby/test_io.rb (TestIO#test_fcntl_lock): small clean up.
- * 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.
+Sat Mar 5 01:33:46 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- You can debug RGenGC (WB) using `GC.stress = 1'.
- Using this option, do minor marking at all possible places.
+ * 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]
- GC::STRESS_MINOR_MARK = 1 and GC::STRESS_LAZY_SWEEP = 2
- seem good to add.
+ * test/ruby/test_io.rb (TestIO#test_fcntl_lock): add new test for
+ IO.fcntl().
-Wed Jun 19 06:29:31 2013 Koichi Sasada <ko1@atdot.net>
+Fri Mar 4 23:09:12 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * vm.c (kwmerge_i): add WB.
+ * 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]
-Wed Jun 19 06:26:49 2013 Koichi Sasada <ko1@atdot.net>
+Fri Mar 4 22:01:14 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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()'
+ * io.c (io_cntl): change 'cmd' type to int. ioctl and fcntl need to
+ be passed int.
+ * io.c (rb_io_ctl): ditto.
-Wed Jun 19 04:33:22 2013 Koichi Sasada <ko1@atdot.net>
+Fri Mar 4 21:10:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * variable.c (rb_const_set): fix WB miss.
+ * configure.in: save warnflags. the patch is created by Eric Wong.
+ [Bug #4465]
- WBs had located before creating reference between a klass
- and constant value. It causes GC bug.
+Wed Mar 2 21:15:00 2011 Tanaka Akira <akr@fsij.org>
- # pseudo code:
- WB(klass, value); # WB and remember klass
- st_insert(klass->const_table, const_id, value);
+ * ext/openssl/ossl_pkey_dsa.c: parenthesize macro arguments.
- `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
+Thu Mar 3 22:10:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- Lesson: The place of a WB is important.
+ * process.c (check_exec_redirect_fd, check_exec_redirect): raise
+ ArgumentError if fd >= 3 on Windows because the feature is not
+ supported.
-Tue Jun 18 22:01:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * test/ruby/test_process.rb (test_execopts_redirect): remove meaningless
+ argument.
- * vm_insnhelper.c (vm_call_method): ensure methods of type
- VM_METHOD_TYPE_ATTR_SET are called with 1 argument
+Thu Mar 3 21:21:42 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/ruby/test_module.rb
- (TestModule#test_attr_writer_with_no_arguments): add test
- [ruby-core:55543] [Bug #8540]
+ * 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.
-Tue Jun 18 22:36:23 2013 Masaya Tarui <tarui@ruby-lang.org>
+Thu Mar 3 18:59:04 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * gc.c (gc_profile_record_flag): fix typo.
+ * string.c (rb_str_slice_bang): raise error when the string is frozen.
-Tue Jun 18 22:08:53 2013 Zachary Scott <zachary@zacharyscott.net>
+Thu Mar 3 14:25:19 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/objspace/object_tracing.c: Return for ::allocation_generation
+ * strftime.c (STRFTIME): return 0 and ERANGE when precision is too
+ large. [ruby-dev:43284] fixes #4456
-Tue Jun 18 22:04:35 2013 Zachary Scott <zachary@zacharyscott.net>
+Thu Mar 3 00:46:51 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/objspace/object_tracing.c: Document object_tracing methods.
+ * addr2line.c (uleb128): cast the value to unsigned long.
-Tue Jun 18 21:58:17 2013 Zachary Scott <zachary@zacharyscott.net>
+ * addr2line.c (fill_lines): print error when lseek fails.
- * gc.c: Rename rb_mObSpace -> rb_mObjSpace
+Thu Mar 3 00:36:29 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Jun 18 20:55:05 2013 Zachary Scott <zachary@zacharyscott.net>
+ * lib/rexml/encoding.rb (REXML::Encoding#encoding=): store @encoding
+ a String which means the name of the encoding.
+ this partially revert r29646.
- * ext/objspace/objspace.c: Document ObjectSpace::InternalObjectWrapper.
+ * lib/rexml/document.rb: follow above.
-Tue Jun 18 20:39:04 2013 Zachary Scott <zachary@zacharyscott.net>
+ * lib/rexml/output.rb: ditto.
- * ext/objspace/object_tracing.c: Teach rdoc object_tracing.c [Bug #8537]
+ * lib/rexml/parsers/baseparser.rb: ditto.
-Tue Jun 18 20:29:47 2013 Zachary Scott <zachary@zacharyscott.net>
+ * lib/rexml/source.rb: ditto.
- * ext/.document: add object_tracing.c to document file
+ * lib/rexml/xmldecl.rb: ditto.
-Tue Jun 18 20:20:27 2013 Zachary Scott <zachary@zacharyscott.net>
+Wed Mar 2 23:19:56 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/objspace/objspace.c: rdoc on require to overview from r41355
+ * string.c (str_byte_substr): return nil for negative length.
-Tue Jun 18 18:39:58 2013 Tanaka Akira <akr@fsij.org>
+Wed Mar 2 21:15:00 2011 Tanaka Akira <akr@fsij.org>
- * configure.in: Check __int128.
+ * ext/openssl/ossl_pkey_dh.c: parenthesize macro arguments.
- * 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.
+Wed Mar 2 14:24:04 2011 Shota Fukumori <sorah@tubusu.net>
- * include/ruby/ruby.h (PRI_64_PREFIX): Defined.
+ * lib/test/unit/parallel.rb: Fix name from `inclement_io` to
+ `increment_io`.
- * bignum.c (rb_big_pow): Don't use BITSPERDIG for the condition which
- rb_big_pow returns Float or Bignum.
+Wed Mar 2 14:06:01 2011 NARUSE, Yui <naruse@ruby-lang.org>
- [ruby-dev:47413] [Feature #8509]
+ * string.c (rb_str_slice_bang): move treatments which is only needed
+ when the result is not nil.
-Tue Jun 18 16:43:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Mar 2 14:02:29 2011 Shota Fukumori <sorah@tubusu.net>
- * 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.
+ * test/testunit/test_parallel.rb(TestParallel#spawn_runner):
+ Fix outputing empty line in running test.
-Tue Jun 18 12:53:25 2013 Tanaka Akira <akr@fsij.org>
+ * test/testunit/tests_for_parallel/test_third.rb: Remove `sleep`
- * bignum.c (nlz): Cast the result explicitly.
- (big2dbl): Don't assign BDIGIT values to int variable.
+Tue Mar 1 22:29:10 2011 Tanaka Akira <akr@fsij.org>
-Tue Jun 18 12:25:16 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_pkey.h: parenthesize macro arguments.
- * bignum.c (rb_big_xor): Non-effective code removed.
+Tue Mar 1 22:02:35 2011 Shota Fukumori <sorah@tubusu.net>
-Tue Jun 18 11:26:05 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/test/unit/parallel.rb: Fix number.
- * gc.c (gc_stat): add `generated_normal_object_count_types' for
- RGENGC_PROFILE >= 2.
+Tue Mar 1 21:48:22 2011 Shota Fukumori <sorah@tubusu.net>
-Tue Jun 18 11:02:18 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/test/unit/parallel.rb: For Windows.
- * gc.c (gc_mark_maybe): check to skip T_NONE.
+ * 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.
- * gc.c (markable_object_p): do not need to check (flags == 0) here.
+Tue Mar 1 20:51:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue Jun 18 10:17:37 2013 Koichi Sasada <ko1@atdot.net>
+ * test/ruby/test_system.rb (TestSystem#test_system_at):
+ remove tests for [bug#4396]. because we decided to reject this
+ ticket.
- * variable.c (rb_autoload): fix WB miss.
+Tue Mar 1 19:46:19 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Tue Jun 18 04:20:18 2013 Koichi Sasada <ko1@atdot.net>
+ * test/date/{test_date.rb,test_date_attr.rb}: [ruby-dev:43280]
- * gc.c (gc_mark_children): don't need to care about T_ZOMBIE here.
+Tue Mar 1 18:40:38 2011 Ryan Davis <ryan@YPCMC09457>
-Mon Jun 17 22:16:02 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+ * lib/rubygems*: Import rubygems 1.6.0 (released version @ 58d8a0b9)
+ * test/rubygems: Ditto
- * test/ruby/test_proc.rb (TestProc#test_block_given_method_to_proc):
- run test for r41359.
+Tue Mar 1 16:22:22 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Jun 17 21:42:18 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+ * win32/win32.c: revert r30987 because it causes some failures in
+ test-all, especially webrick.
- * include/ruby/ruby.h, vm_eval.c (rb_funcall_with_block):
- new function to invoke a method with a block passed
- as an argument.
+Tue Mar 1 15:59:53 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * string.c (sym_call): use the above function to avoid
- a block sharing. [ruby-dev:47438] [Bug #8531]
+ * 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]
- * vm_insnhelper.c (vm_yield_with_cfunc): don't set block
- in the frame.
+Tue Mar 1 13:25:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * test/ruby/test_symbol.rb (TestSymbol#test_block_given_to_proc):
- run related tests.
+ * ext/bigdecimal/bigdecimal.c (VpMemAlloc): CVE-2011-0188.
+ Fixes a bug reported by Drew Yao <ayao at apple.com>
-Mon Jun 17 21:33:27 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Tue Mar 1 10:34:39 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * string.c (rb_str_byteslice): Add String#byteslice. [ruby-core:35376]
- * proc.c (bmcall): use the above function to avoid a block sharing.
- [ruby-core:54626] [Bug #8341]
+Tue Mar 1 00:12:49 2011 Tajima Akio <artonx@yahoo.co.jp>
- * test/ruby/test_proc.rb (TestProc#test_block_persist_between_calls):
- run related tests.
+ * include/ruby/win32.h: define WIN32 if neither _WIN64 nor WIN32
+ defined. it forces to use push/pop for pack(4) pragma.
-Mon Jun 17 20:53:21 2013 Tanaka Akira <akr@fsij.org>
+Mon Feb 28 23:52:13 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * loadpath.c (RUBY_REVISION): Defined to suppress revision.h
- inclusion actually. r41352 removes the dependency.
+ * test/testunit/test_rake_integration.rb (test_with_rake_runner):
+ use assert_in_out_err for suppress messages.
-Mon Jun 17 18:15:57 2013 Benoit Daloze <eregontp@gmail.com>
+Mon Feb 28 22:48:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/objspace/objspace.c: let rdoc know about objspace methods.
- Specify 'objspace' should be required. See #8537.
+ * 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.
-Mon Jun 17 17:44:31 2013 Benoit Daloze <eregontp@gmail.com>
+ * 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.
- * gc.c (ObjectSpace): is a module not a class.
+Mon Feb 28 17:36:57 2011 Tanaka Akira <akr@fsij.org>
- * ext/objspace/objspace.c: try to include overview in rdoc,
- see #8537.
+ * ext/openssl/ossl_pkcs7.c: parenthesize macro arguments.
-Mon Jun 17 17:38:24 2013 Benoit Daloze <eregontp@gmail.com>
+Mon Feb 28 16:48:42 2011 Tanaka Akira <akr@fsij.org>
- * gc.c: fix example of ObjectSpace.define_finalizer in overview
+ * ext/openssl/ossl_pkcs12.c: parenthesize macro arguments.
-Mon Jun 17 16:59:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Feb 28 16:28:15 2011 NARUSE, Yui <naruse@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]
+ * 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 Jun 17 14:27:54 2013 Zachary Scott <zachary@zacharyscott.net>
+Mon Feb 28 16:38:56 2011 Tanaka Akira <akr@fsij.org>
- * vm_backtrace.c: Update rdoc for Backtrace#label with @_ko1
+ * ext/openssl/ossl_ocsp.c: parenthesize macro arguments.
-Mon Jun 17 13:04:01 2013 Akinori MUSHA <knu@iDaemons.org>
+Mon Feb 28 13:02:15 2011 Danial Pearce <github@tigris.id.au>
- * tool/ifchange (until): Fix the condition, although harmless in
- this case.
+ * lib/tempfile.rb: Fix example file paths in docs for tempfile.
+ https://github.com/ruby/ruby/pull/5
-Mon Jun 17 11:50:29 2013 Koichi Sasada <ko1@atdot.net>
+Mon Feb 28 12:56:18 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
- * gc.c (gc_mark_maybe): added. check `is_pointer_to_heap()' and
- type is not T_ZOMBIE.
+ * ext/openssl/ossl_cipher.c (ossl_cipher_init): typo fix.
+ https://github.com/ruby/ruby/pull/8
- * gc.c: use `gc_mark_maybe()'. T_ZOMBIE objects should not be pushed
- to the mark stack.
+Mon Feb 28 12:28:13 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Jun 17 07:56:24 2013 Tanaka Akira <akr@fsij.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.
- * bignum.c (bary_small_lshift): Renamed from bdigs_small_lshift.
- (bary_small_rshift): Renamed from bdigs_small_rshift.
+Mon Feb 28 11:57:40 2011 Shota Fukumori <sorah@tubusu.net>
-Mon Jun 17 07:38:48 2013 Tanaka Akira <akr@fsij.org>
+ * test/testunit/test_parallel.rb: Temporally disable test on Windows.
- * bignum.c (absint_numwords_bytes): Removed.
- (rb_absint_numwords): Don't call absint_numwords_bytes.
+Mon Feb 28 07:28:35 2011 Shota Fukumori <sorah@tubusu.net>
-Sun Jun 16 23:14:58 2013 Tanaka Akira <akr@fsij.org>
+ * lib/test/unit.rb(Test::Unit::Runner#after_worker_quit):
+ method name more be natural English.
- * 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.
+ * lib/test/unit.rb(Test::Unit::Runner::Worker.launch):
+ IO.sync doesn't need. Should use "b" for mode.
-Sun Jun 16 21:41:39 2013 Tanaka Akira <akr@fsij.org>
+Sun Feb 27 21:59:37 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * test/ruby/test_system.rb (TestSystem#test_system_redirect_win):
+ add test for system().
- * internal.h (rb_integer_unpack_2comp): Removed.
+Sun Feb 27 18:00:09 2011 Shota Fukumori <sorah@tubusu.net>
- * pack.c: Follow the above change.
+ * lib/test/unit.rb: Refactoring; Worker never use Hash for internal
+ storage.
-Sun Jun 16 18:41:42 2013 Tanaka Akira <akr@fsij.org>
+ * lib/test/unit.rb: Never use Kernel#spawn. Use IO.popen instead.
- * internal.h (INTEGER_PACK_2COMP): Defined.
- (rb_integer_pack_2comp): Removed.
+Sun Feb 27 13:16:48 2011 Tanaka Akira <akr@fsij.org>
- * 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.
+ * ext/openssl/ossl_ns_spki.c: parenthesize macro arguments.
- * pack.c (pack_pack): Ditto.
+Sat Feb 26 17:07:53 2011 Tadayoshi Funaba <tadf@dotrb.org>
- * sprintf.c (rb_str_format): Ditto.
+ * lib/date.rb: [Feature #4257]
-Sun Jun 16 17:48:14 2013 Tanaka Akira <akr@fsij.org>
+ * ext/date/extconf.rb: new
- * bignum.c (absint_numwords_generic): rb_funcall invocations removed.
+ * ext/date/date_core.c: new
-Sun Jun 16 16:04:38 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Sat Feb 26 16:10:23 2011 Shota Fukumori <sorah@tubusu.net>
- * tool/config_files.rb: use URI.read to allow it runs with Ruby 1.8.5.
+ * lib/test/unit.rb: --jobs-status won't puts over 2 lines.
-Sun Jun 16 14:32:25 2013 Tanaka Akira <akr@fsij.org>
+ * test/testunit/test_parallel.rb: Fix test for above.
- * bignum.c (bary_pack) Extracted from rb_integer_pack_internal.
- (absint_numwords_generic): Use bary_pack.
+ * lib/test/*: refactoring.
-Sun Jun 16 11:01:57 2013 Kouhei Sutou <kou@cozmixng.org>
+Sat Feb 26 07:10:05 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * NEWS (XMLRPC::Client#http): Add.
- [ruby-core:55197] [Feature #8461]
+ * ext/psych/lib/psych/scalar_scanner.rb: fix parsing timezone's whose
+ whose format is (+/-)hhmm. Thanks Goncalo Silva!
-Sun Jun 16 10:38:45 2013 Tanaka Akira <akr@fsij.org>
+ * test/psych/test_scalar_scanner.rb: test for bug.
- * 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.
+Thu Feb 24 23:02:55 2011 Tanaka Akira <akr@fsij.org>
-Sun Jun 16 08:55:22 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_hmac.c: parenthesize macro arguments.
- * bignum.c (bigdivrem): Use a BDIGIT variable to store the return
- value of bigdivrem_single.
+Thu Feb 24 22:53:10 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Jun 16 08:43:59 2013 Tanaka Akira <akr@fsij.org>
+ * common.mk (love): for the birthday.
- * 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.
+Thu Feb 24 22:51:54 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Jun 16 05:51:51 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * vm.c (ruby_vm_destruct): run vm exit hooks after all objects are
+ destructed.
- * 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.
+Thu Feb 24 14:40:33 2011 Shota Fukumori <sorah@tubusu.net>
-Sun Jun 16 05:15:36 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * ChangeLog (vim): Modeline for vim
- * gc.c: Add some columns to more detail profile.
- new columns: Allocated size, Prepare Time, Removing Objects, Empty Objects
+Thu Feb 24 13:39:25 2011 Shota Fukumori <sorah@tubusu.net>
-Sun Jun 16 02:04:40 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * common.mk: Use $RUNRUBY for worker process.
- * 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.
+ * lib/test/unit.rb: Fix bug.
-Sat Jun 15 23:50:24 2013 Tanaka Akira <akr@fsij.org>
+ * lib/test/unit.rb: @options[:ruby](@opts[:ruby]) is now Array.
- * bignum.c (bary_sub): New function.
- (absint_numwords_generic): Use bary_sub.
- (bigsub_core): Skip unnecessary copy.
+ * test/testunit/parallel.rb: Fix for above.
-Sat Jun 15 22:05:30 2013 Tanaka Akira <akr@fsij.org>
+Thu Feb 24 10:05:55 2011 Shota Fukumori <sorah@tubusu.net>
- * 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.
+ * test/testunit/tests_for_parallel/misc.rb: Fix bug in r30947.
-Sat Jun 15 20:13:46 2013 Tanaka Akira <akr@fsij.org>
+ * lib/test/unit.rb, lib/test/unit/assertions.rb: For this test.
- * 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.
+Wed Feb 23 23:07:38 2011 Shota Fukumori <sorah@tubusu.net>
-Sat Jun 15 19:35:04 2013 Tanaka Akira <akr@fsij.org>
+ * test/testunit/test_parallel.rb, test/testunit/parallel/*:
+ Test for r30939.
- * bignum.c (absint_numwords_bytes): Make it static.
- (absint_numwords_small): Ditto.
- (absint_numwords_generic): Ditto.
+ * lib/test/unit.rb: For test.
-Sat Jun 15 17:14:32 2013 Tanaka Akira <akr@fsij.org>
+ * lib/test/parallel.rb: For test.
- * bignum.c (bigmul1_normal): Shrink the result Bignum length.
+ * lib/test/unit/testcase.rb: For test.
-Sat Jun 15 10:19:42 2013 Zachary Scott <zachary@zacharyscott.net>
+Wed Feb 23 22:05:13 2011 Tanaka Akira <akr@fsij.org>
- * ext/bigdecimal/bigdecimal.c: Update overview formatting of headers
+ * ext/openssl/ossl_engine.c: parenthesize macro arguments.
-Sat Jun 15 10:19:06 2013 Zachary Scott <zachary@zacharyscott.net>
+Tue Feb 22 23:15:17 2011 Shota Fukumori <sorah@tubusu.net>
- * ext/bigdecimal/bigdecimal.gemspec: Update authors
+ * lib/test/unit.rb: Fix --ruby option doesn't effect.
-Sat Jun 15 10:02:26 2013 Tanaka Akira <akr@fsij.org>
+ * lib/test/unit.rb: Fix typo.
- * bignum.c (bdigs_small_rshift): Extracted from big_rshift.
- (bigdivrem): Use bdigs_small_rshift.
+Tue Feb 22 21:39:28 2011 Tanaka Akira <akr@fsij.org>
-Sat Jun 15 08:37:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/openssl/ossl_digest.c: parenthesize macro arguments.
- * 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]
+Tue Feb 22 14:34:26 2011 Shota Fukumori <sorah@tubusu.net>
-Sat Jun 15 02:40:18 2013 Tanaka Akira <akr@fsij.org>
+ * lib/test/unit.rb: Fix merging miss.
- * bignum.c (bdigs_small_lshift): Extracted from big_lshift.
- (bigdivrem): Use bdigs_small_lshift.
+Tue Feb 22 12:27:26 2011 Shota Fukumori <sorah@tubusu.net>
-Fri Jun 14 20:47:41 2013 Tanaka Akira <akr@fsij.org>
+ * 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]
- * bignum.c (bigdivrem): Reduce number of digits before bignew() for div.
+ * lib/test/unit/parallel.rb: Used at test/unit --jobs(-j) option.
-Fri Jun 14 20:12:37 2013 Tanaka Akira <akr@fsij.org>
+ * test/csv/test_serialization.rb: test/unit parallel running ready.
- * bignum.c (bigdivrem): Use bignew when ny == 1.
+ * test/rake/test_file_task.rb: test/unit parallel running ready.
-Fri Jun 14 18:52:51 2013 Koichi Sasada <ko1@atdot.net>
+Tue Feb 22 06:09:10 2011 Eric Hodel <drbrain@segment7.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?)
+ * ext/syslog/syslog.c: Apply documentation patch from mathew murphy.
+ [Bug #4149]
- * test/ruby/test_settracefunc.rb: add a test.
+Tue Feb 22 03:09:10 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Fri Jun 14 18:18:07 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/psych/lib/psych.rb: increase Psych to 1.1.0 for help with
+ debugging.
- * class.c, include/ruby/ruby.h: add write barriers for T_CLASS,
- T_MODULE, T_ICLASS.
+Tue Feb 22 03:04:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * constant.h: constify rb_const_entry_t::value and file to detect
- assignment.
+ * 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.
- * variable.c, internal.h (rb_st_insert_id_and_value, rb_st_copy):
- added. update table with write barrier.
+Tue Feb 22 02:41:51 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * method.h: constify some variables to detect assignment.
+ * 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.
- * object.c (init_copy): add WBs.
+Mon Feb 21 10:58:39 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * variable.c: ditto.
+ * 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.
- * vm_method.c (rb_add_method): ditto.
+Mon Feb 21 10:54:29 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Fri Jun 14 14:33:47 2013 Shugo Maeda <shugo@ruby-lang.org>
+ * 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.
- * NEWS: add a note for Module#using.
+Mon Feb 21 10:05:10 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Fri Jun 14 13:40:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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
- * .travis.yml (before_script): update config files.
+Mon Feb 21 10:01:01 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * common.mk ($(srcdir)/tool/config.{guess,sub}): use get-config_files.
+ * 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.
- * tool/config_files.rb: split get-config_files.
+Mon Feb 21 00:38:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * common.mk (update-config_files): rule to download config files.
+ * test/ruby/test_system.rb (TestSystem#test_system_at):
+ add testcase for bug4396.
- * tool/config.guess, tool/config.sub: remove and download from the
- upstream.
+Sun Feb 20 19:59:32 2011 Tanaka Akira <akr@fsij.org>
- * tool/config_files.rb: download config files from GNU.
+ * ext/openssl/ossl_cipher.c: parenthesize macro arguments.
-Fri Jun 14 12:21:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Feb 20 16:26:45 2011 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.
+ * thread.c (exec_recursive): prevent temporary objects from GC.
-Fri Jun 14 09:48:48 2013 Shugo Maeda <shugo@ruby-lang.org>
+ * prevent temporary objects from GC, and should not use
+ RSTRING_PTR() for function calls since it evaluates the argument
+ a couple of times.
- * NEWS: add notes for $SAFE.
+Sun Feb 20 16:22:53 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * doc/security.rdoc: remove the description of $SAFE=4.
+ * file.c (rb_file_flock): use rb_thread_io_blocking_region for the
+ time being.
-Fri Jun 14 00:14:29 2013 Tanaka Akira <akr@fsij.org>
+Sun Feb 20 05:33:17 2011 Ryan Davis <ryand-ruby@zenspider.com>
- * bignum.c (bigdivrem): Zero test condition simplified.
+ * lib/minitest/*.rb: Imported minitest 2.0.2 r6207.
+ * test/minitest/*: ditto
-Thu Jun 13 23:43:11 2013 Zachary Scott <zachary@zacharyscott.net>
+Sun Feb 20 02:14:09 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/bigdecimal/*: improve documentation, nodoc samples with @mrkn
+ * 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).
-Thu Jun 13 23:02:14 2013 Kouhei Sutou <kou@cozmixng.org>
+ * signal.c (init_sigchld): ditto.
- * lib/xmlrpc/client.rb (XMLRPC::Client#http): Add reader for raw
- Net::HTTP. [ruby-core:55197] [Feature #8461]
- Reported by Herwin Weststrate. Thanks!!!
+Sun Feb 20 00:46:51 2011 Tanaka Akira <akr@fsij.org>
-Thu Jun 13 22:44:52 2013 Kouhei Sutou <kou@cozmixng.org>
+ * ext/openssl/ossl_bn.c: parenthesize macro arguments.
- * 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.
+Sat Feb 19 22:37:42 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Thu Jun 13 22:35:50 2013 Kouhei Sutou <kou@cozmixng.org>
+ * vm_insnhelper.c (vm_check_if_namespace): guard temporary object
+ from GC.
- * lib/xmlrpc/client.rb (XMLRPC::Client#parse_set_cookies): Use
- guard style.
+Sat Feb 19 06:36:27 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Thu Jun 13 22:12:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/test/unit.rb: partial revert of r30849. [ruby-core:32864]
- * lib/fileutils.rb (FileUtils#rmdir): fix traversal loop, not trying
- remove same directory only.
+ * test/testunit/test_rake_integration.rb: adding an integration test
+ with the rake loader to prevent regressions.
-Thu Jun 13 21:30:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Feb 18 19:31:31 2011 Shugo Maeda <shugo@ruby-lang.org>
- * configure.in (opt-dir), tool/ifchange: get rid of "alternate value"
- expansion for legacy sh. [ruby-dev:47420] [Bug #8524]
+ * 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>
-Thu Jun 13 21:24:09 2013 Tanaka Akira <akr@fsij.org>
+Fri Feb 18 00:28:39 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * bignum.c (bigdivrem): Refactored to use ALLOCV_N for temporary
- buffers.
+ * compile.c (get_exception_sym2type): guard temporary object from GC.
-Thu Jun 13 18:54:11 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Thu Feb 17 23:54:29 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * 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.
+ * iseq.c (prepare_iseq_build): initialize iseq_compile_data::err_info
+ with nil. this fix exception in rb_iseq_load().
-Thu Jun 13 18:53:14 2013 Tanaka Akira <akr@fsij.org>
+Thu Feb 17 22:32:35 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * test/ruby/test_thread.rb (test_thread_local_security): Don't create
- an unused thread.
+ * test/ruby/test_marshal.rb (test_marshal_dump_extra_iv):
+ fix a typo of local variable. [Bug #3720] [ruby-dev:42083]
-Thu Jun 13 18:34:20 2013 Tanaka Akira <akr@fsij.org>
+Thu Feb 17 21:32:53 2011 Tanaka Akira <akr@fsij.org>
- * bignum.c (bigdivrem): Use nlz.
+ * ext/openssl/ossl.h: parenthesize macro arguments.
-Thu Jun 13 14:51:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Feb 16 20:37:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * include/ruby/ruby.h (RUBY_SAFE_LEVEL_CHECK): check constant safe
- level at compile time.
+ * 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.
-Thu Jun 13 14:39:08 2013 Shugo Maeda <shugo@ruby-lang.org>
+ * 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.
- * 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.
+Wed Feb 16 20:17:06 2011 Tanaka Akira <akr@fsij.org>
-Thu Jun 13 10:47:16 2013 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/openssl/openssl_missing.h: parenthesize macro arguments.
- * bootstraptest/test_autoload.rb, bootstraptest/test_method.rb:
- remove tests for $SAFE=4.
+Tue Feb 15 21:37:45 2011 Tanaka Akira <akr@fsij.org>
- * lib/pp.rb: use taint instead of untrust to avoid warnings when
- $VERBOSE is set to true.
+ * ext/gdbm/gdbm.c: parenthesize macro arguments.
-Thu Jun 13 06:12:18 2013 Tanaka Akira <akr@fsij.org>
+Tue Feb 15 20:34:53 2011 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]
+ * array.c (ary_join_1): fix array size.
-Thu Jun 13 05:32:13 2013 Eric Hodel <drbrain@segment7.net>
+Tue Feb 15 19:43:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/socket/extconf.rb: Enable RFC 3542 IPV6 socket options for OS X
- 10.7+. [ruby-trunk - Bug #8517]
+ * configure.in: fix and resubmit r30621. [ruby-dev:43203]
-Thu Jun 13 00:17:18 2013 Tanaka Akira <akr@fsij.org>
+Tue Feb 15 15:41:30 2011 NARUSE, Yui <naruse@ruby-lang.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.
+ * array.c (array_join): copy the encoding of the first element as
+ an initial encoding.
- * internal.h (rb_integer_unpack_2comp): Declared.
+ * array.c (array_join_0): ditto.
- * pack.c (pack_unpack): Use rb_integer_unpack_2comp and
- rb_integer_unpack.
+ * array.c (array_join_1): ditto.
-Wed Jun 12 23:27:03 2013 Shugo Maeda <shugo@ruby-lang.org>
+ * array.c (inspect_ary): ditto.
- * 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]
+ * array.c (array_join_1): add an argument to check the appending is
+ first one or not.
- * test/ruby/test_refinement.rb: related test.
+Tue Feb 15 15:40:53 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Jun 12 22:58:48 2013 Shugo Maeda <shugo@ruby-lang.org>
+ * hash.c (inspect_i): copy the encoding of the first key as
+ an initial encoding.
- * 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]
+Mon Feb 14 15:00:16 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * array.c (inspect_ary): don't taint the inspected result of a
+ recursive array.
- * include/ruby/ruby.h (OBJ_UNTRUSTED, OBJ_UNTRUST): OBJ_UNTRUSTED()
- and OBJ_UNTRUST() are aliases of OBJ_TAINTED() and OBJ_TAINT(),
- respectively.
+Tue Feb 15 15:43:29 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * 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.
- * 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.
+Tue Feb 15 15:39:37 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Jun 12 22:18:23 2013 Tanaka Akira <akr@fsij.org>
+ * string.c (rb_enc_cr_str_buf_cat): remove special treatment of
+ ASCII-8BIT receivers.
- * 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.
+ * string.c (str_gsub): set initial encoding of the buffer as the
+ same of the receiver. [ruby-core:35141]
-Wed Jun 12 20:18:03 2013 Kouhei Sutou <kou@cozmixng.org>
+Tue Feb 15 09:49:33 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/xmlrpc/client.rb (XMLRPC::Client#parse_set_cookies): Extract.
+ * 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.
-Wed Jun 12 18:19:41 2013 Tanaka Akira <akr@fsij.org>
+Mon Feb 14 23:01:19 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * 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.
+ * thread.c (rb_thread_io_blocking_region): reset th->waiting_fd
+ after blocking region, because remaining waiting_fd might
+ cause unnecessary IOError.
-Wed Jun 12 16:41:38 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Feb 14 21:06:50 2011 URABE Shyouhei <shyouhei@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]
+ * configure.in: revert r30621. That revision introduced mkmf test
+ failures and it turned out to be OK to revert. [ruby-dev:43203]
-Wed Jun 12 12:44:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Feb 14 21:04:01 2011 Tanaka Akira <akr@fsij.org>
- * io.c (io_getc): fix 7bit coderange condition, check if ascii read
- data instead of read length. [ruby-core:55444] [Bug #8516]
+ * ext/fiddle/conversions.h: parenthesize macro arguments.
-Wed Jun 12 12:35:13 2013 Tanaka Akira <akr@fsij.org>
+Mon Feb 14 18:41:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * pack.c (pack_pack): Use rb_integer_pack_2comp.
+ * 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.
-Wed Jun 12 12:07:04 2013 Tanaka Akira <akr@fsij.org>
+Mon Feb 14 17:28:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * sprintf.c (rb_str_format): Fix a dynamic format string.
+ * test/ruby/test_system.rb (TestSystem#test_system_at):
+ added test. [ruby-core:35218] (#4393)
-Wed Jun 12 12:04:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Feb 14 13:15:35 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * array.c (rb_ary_uniq_bang): must not be modified once frozen even in
- a callback method.
+ * win32/win32.c (is_internal_cmd): if the first char of prog is '@',
+ execute it via shell. [ruby-core:35218] (#4393)
-Wed Jun 12 12:03:43 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Feb 14 10:33:45 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * array.c (rb_ary_sort_bang): must not be modified once frozen even in
- a callback method.
+ * lib/test/unit.rb: revert r30863, because it causes too many noise.
-Wed Jun 12 12:00:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Feb 14 07:34:55 2011 Tanaka Akira <akr@fsij.org>
- * array.c (FL_SET_EMBED): shared object is frozen even when get
- unshared.
+ * ext/curses/curses.c: parenthesize macro arguments.
- * array.c (rb_ary_modify): ARY_SET_CAPA needs unshared array.
+Sun Feb 13 19:41:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Jun 12 07:32:01 2013 Tanaka Akira <akr@fsij.org>
+ * lib/test/unit.rb (Test::Unit::RequireFiles#non_options): skip
+ test suites failed to load instead of mere messages.
- * random.c (rand_int): Use rb_big_uminus.
+Sun Feb 13 09:56:44 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Jun 12 07:12:54 2013 Eric Hodel <drbrain@segment7.net>
+ * test/openssl/test_config.rb (OpenSSL#test_freeze): fix error
+ message assertion.
- * 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.
+ * test/io/nonblock/test_flush.rb (TestIONonblock#flush_test):
+ return true to finish the test.
-Wed Jun 12 06:35:01 2013 Tanaka Akira <akr@fsij.org>
+ * test/syck/test_string.rb (Syck::TestString#test_non_binary_string):
+ use assert_not instead of refute, unless required minitest
+ explicitly.
- * internal.h (INTEGER_PACK_NEGATIVE): Defined.
- (rb_integer_unpack): sign argument removed.
+ * test/test_prime.rb (TestPrime::sieve.Integer): ditto.
- * 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.
+ * test/xmlrpc/webrick_testing.rb (WEBrick_Testing#start_server):
+ catch IOError when server socket was closed.
- * pack.c (pack_unpack): Follow the above change.
+Sun Feb 13 07:39:51 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
- * random.c (int_pair_to_real_inclusive): Ditto.
- (make_seed_value): Ditto.
- (mt_state): Ditto.
- (limited_big_rand): Ditto.
+ * enum.c (enum_inject): typo fixed. a patch from Gaku Ueda in
+ [ruby-core:35216].
- * marshal.c (r_object0): Ditto.
+Sun Feb 13 00:48:47 2011 Tadayoshi Funaba <tadf@dotrb.org>
-Wed Jun 12 00:07:46 2013 Kouhei Sutou <kou@cozmixng.org>
+ * lib/date.rb (Date#===): [ruby-core:35127]
- * test/xmlrpc/test_client.rb (XMLRPC::ClientTest#test_cookie_simple):
- Add a test for the extracted method.
+Sun Feb 13 00:29:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Jun 11 23:56:24 2013 Kouhei Sutou <kou@cozmixng.org>
+ * lib/test/unit.rb (Test::Unit::Options#process_args): always
+ return options.
- * test/xmlrpc/test_client.rb (XMLRPC::ClientTest::Fake::HTTP#started):
- Add a missing empty line.
+ * lib/test/unit.rb (Test::Unit::RequireFiles#non_options): return
+ if any test case get loaded.
-Tue Jun 11 23:37:19 2013 Tanaka Akira <akr@fsij.org>
+ * lib/test/unit.rb (Test::Unit::AutoRunner#initialize): do not add
+ default directory if it is nil.
- * 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.
+ * lib/test/unit.rb (Test::Unit::AutoRunner#process_args): return
+ true if any test cases to run.
- * hash.c (rb_hash): Ditto.
+Sat Feb 12 23:17:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * time.c (v2w_bignum): Ditto.
+ * lib/test/unit.rb (assert_include): add alias.
-Tue Jun 11 23:01:57 2013 Tanaka Akira <akr@fsij.org>
+Sat Feb 12 14:44:20 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * bignum.c (validate_integer_pack_format): Refine error messages.
+ * thread.c (rb_thread_io_blocking_region): new function to run
+ blocking region with GIL released, for fd.
-Tue Jun 11 22:25:04 2013 Tanaka Akira <akr@fsij.org>
+ * thread.c (rb_thread_fd_close): implement. [ruby-core:35203]
- * 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.
+ * vm.c (th_init): rename from th_init2.
-Tue Jun 11 20:52:43 2013 Tanaka Akira <akr@fsij.org>
+Sat Feb 12 14:41:36 2011 Nobuyoshi Nakada <nobu@ruby-lang.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.
+ * lib/test/unit.rb (Test::Unit::AutoRunner#initialize): use
+ default_dir if no test case given.
- * internal.h (rb_integer_pack_2comp): Declared.
+ * lib/test/unit.rb (Test::Unit::Runner): rename from Test::Unit::Mini.
- * 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.
+ * lib/test/unit.rb (Test::Unit::GlobOption#non_options): run tests
+ under base directory if no argument given.
-Tue Jun 11 16:15:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Feb 12 08:03:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * array.c (ary_shrink_capa): shrink the capacity so it fits just with
- the length.
+ * test/ruby/test_settracefunc.rb (TestSetTraceFunc): ensure to use
+ method_added hook defined in Module.
- * array.c (ary_make_shared): release never used elements from frozen
- array to be shared. [ruby-dev:47416] [Bug #8510]
+Sat Feb 12 01:04:02 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Jun 11 12:49:01 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ruby.c (proc_options): enable rubygems if --gem option is given.
- * doc/re.rdoc: Rename to doc/regexp.rdoc
- * re.c: Update rdoc include for rename of file
+ * ruby.c (process_options): load rubygems if it is disabled but
+ --gem option is given.
-Tue Jun 11 07:13:13 2013 Masaya Tarui <tarui@ruby-lang.org>
+Fri Feb 11 23:27:50 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * eval_error.c (error_print): keep that errat is non-shady object.
- and guard errat from GC.
+ * 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.
-Tue Jun 11 05:04:25 2013 Benoit Daloze <eregontp@gmail.com>
+Fri Feb 11 23:17:04 2011 Tanaka Akira <akr@fsij.org>
- * 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.
+ * ext/dl/cfunc.c: parenthesize macro arguments.
-Mon Jun 10 23:51:51 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+Fri Feb 11 21:41:53 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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
+ * bin/testrb, test/runner.rb, lib/test/unit.rb: improve backward
+ compatibility.
-Mon Jun 10 21:51:03 2013 Kouhei Sutou <kou@cozmixng.org>
+Fri Feb 11 19:45:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/raddrinfo.c (nogvl_getaddrinfo): Fix indent.
+ * eval.c (ruby_cleanup): use rb_ary_free to free internal object.
-Mon Jun 10 21:49:43 2013 Kouhei Sutou <kou@cozmixng.org>
+ * gc.h (RUBY_FREE_UNLESS_NULL): get rid of double free.
+ [ruby-core:35192]
- * ext/socket/raddrinfo.c (nogvl_getaddrinfo): Add missing return
- value assignment.
+Fri Feb 11 16:57:03 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Jun 10 20:58:11 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * test/ruby/test_transcode.rb (test_from_cp50221): fix wrong
+ assertion and move back.
- * ext/socket/raddrinfo.c (nogvl_getaddrinfo): work around for Ubuntu
- 13.04's getaddrinfo issue with mdns4. [ruby-list:49420]
+Fri Feb 11 14:33:18 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Jun 10 19:34:39 2013 Tanaka Akira <akr@fsij.org>
+ * lib/test/unit/assertions.rb (assert_no_match): alias for
+ backward compatibility.
- * bignum.c (rb_integer_pack): Returns sign instead of words.
- (absint_numwords_generic): Follow the above change.
- (big2str_base_powerof2): Follow the above change.
+Fri Feb 11 12:06:48 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * internal.h: Ditto.
+ * ruby.c (add_gems, require_libraries, proc_options): add
+ --require and --gem options.
- * hash.c (rb_hash): Ditto.
+Fri Feb 11 12:03:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * pack.c (pack_pack): Ditto.
+ * configure.in (rubygems): add --disable-rubygems option.
- * random.c (int_pair_to_real_inclusive): Ditto.
- (rand_init): Ditto.
- (random_load): Ditto.
- (limited_big_rand): Ditto.
+Fri Feb 11 11:39:03 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * time.c (v2w_bignum): Ditto.
+ * template/fake.rb.in (CROSS_COMPILING): get rid of NameError.
-Mon Jun 10 17:20:01 2013 Koichi Sasada <ko1@atdot.net>
+Thu Feb 10 23:12:34 2011 Tanaka Akira <akr@fsij.org>
- * gc.c (rgengc_remember): permit promoted object.
- (rb_gc_writebarrier -> remember)
+ * ext/dl/dl.h: parenthesize macro arguments.
-Mon Jun 10 17:14:01 2013 Koichi Sasada <ko1@atdot.net>
+Wed Feb 9 23:11:27 2011 Tanaka Akira <akr@fsij.org>
- * gc.c (RVALUE_PROMOTE): fix parameter name (`x' to `obj')
- and make it inline function (like RVALUE_PROMOTE).
+ * ext/pty/pty.c: parenthesize macro arguments.
-Mon Jun 10 16:22:50 2013 Koichi Sasada <ko1@atdot.net>
+Tue Feb 8 11:47:11 2011 Loren Sands-Ramshaw <lorensr@gmail.com>
- * array.c (rb_ary_new_from_values): add assertion
- (ary should be young object).
+ * array.c: documentation clarification in rotate, rotate!,
+ index, and rindex. [ruby-core:35144]
-Mon Jun 10 16:05:59 2013 Koichi Sasada <ko1@atdot.net>
+Wed Feb 9 09:45:43 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * gc.c (wmap_mark): check allocation of `w->obj2wmap'.
- (no-allocation `w->obj2wmap' will be NULL pointer reference)
+ * test/rdoc/test_rdoc_encoding.rb: remove unnecessary (and wrong)
+ platform-dependent hacks.
-Mon Jun 10 15:36:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Feb 9 00:47:18 2011 Tanaka Akira <akr@fsij.org>
- * eval_error.c (error_print): use checking functions instead of
- catching exceptions.
+ * ext/etc/etc.c: parenthesize macro arguments.
- * eval_error.c (error_print): restore errinfo for the case new
- exception raised while printing the message. [ruby-core:55365]
- [Bug #8501]
+Tue Feb 8 19:38:00 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * eval_error.c (error_print): reduce calling setjmp.
+ * misc/ruby-mode.el (ruby-expr-beg): fix for invalid nest errors.
-Mon Jun 10 12:10:06 2013 Tanaka Akira <akr@fsij.org>
+Tue Feb 8 19:22:59 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * configure.in (AC_MSG_CHECKING): fixed typo. the patch is
+ created by Benoit Daloze. Thanks a lot. [Bug #4384][ruby-core:35148]
-Mon Jun 10 05:38:23 2013 Tanaka Akira <akr@fsij.org>
+Tue Feb 8 16:04:03 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (absint_numwords_small): New function.
- (absint_numwords_generic): Use absint_numwords_small if possible.
+ * io.c (rb_io_s_sysopen): use NUM2MODET() instead NUM2UINT().
-Mon Jun 10 01:07:57 2013 Tanaka Akira <akr@fsij.org>
+Tue Feb 8 15:59:23 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (absint_numwords_bytes): New function.
- (absint_numwords_generic): Extracted from rb_absint_numwords.
- (rb_absint_numwords): Use absint_numwords_bytes if possible.
+ * process.c (rb_run_exec_options_err): use MODET2NUM() instead
+ LONG2NUM().
-Sun Jun 9 21:33:15 2013 Tanaka Akira <akr@fsij.org>
+Tue Feb 8 13:59:56 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (rb_absint_numwords): Return (size_t)-1 when overflow.
- Refine variable names.
- (rb_absint_size): Refine variable names.
+ * configure.in: revert r30725. Now we have proper runtime fallback.
+ Therefore, no need compile time disabling. (see r30762).
- * internal.h (rb_absint_size): Refine an argument name.
- (rb_absint_numwords): Ditto.
+Tue Feb 8 01:00:21 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Sun Jun 9 16:51:41 2013 Tanaka Akira <akr@fsij.org>
+ * process.c (proc_setgroups): add GC guard to prevent intermediate
+ variable from GC.
- * bignum.c (rb_absint_numwords): Renamed from rb_absint_size_in_word.
+Tue Feb 8 00:56:33 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * internal.h (rb_absint_numwords): Follow the above change.
+ * misc/ruby-mode.el (ruby-expr-beg, ruby-in-here-doc-p): tell
+ singleton class definitions from here documents.
- * pack.c (pack_pack): Ditto.
+ * misc/ruby-mode.el (ruby-expr-beg, ruby-parse-partial): keyword
+ followed by colon is label.
- * random.c (rand_init): Ditto.
- (limited_big_rand): Ditto.
+Mon Feb 7 22:56:16 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Sun Jun 9 14:41:05 2013 Tanaka Akira <akr@fsij.org>
+ * lib/benchmark.rb (Benchmark#bmbm): use ensure clause instead of
+ Object#tap to restore STDOUT.sync.
- * bignum.c (rb_integer_pack): numwords_allocated argument removed.
+Mon Feb 7 22:34:20 2011 Tanaka Akira <akr@fsij.org>
- * internal.h (rb_integer_pack): Follow the above change.
+ * 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
- * hash.c (rb_hash): Ditto.
+Mon Feb 7 16:05:32 2011 Eric Hodel <drbrain@segment7.net>
- * time.c (v2w_bignum): Ditto.
+ * lib/rdoc: Upgrade to RDoc 3.5.3 Fixes [Bug #4376]
- * pack.c (pack_pack): Ditto.
+Mon Feb 7 11:46:59 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * random.c (int_pair_to_real_inclusive): Ditto.
- (rand_init): Ditto.
- (random_load): Ditto.
- (limited_big_rand): Ditto.
+ * common.mk (rdoc): add --encoding=UTF-8; ruby's rdoc must be UTF-8.
-Sun Jun 9 09:34:44 2013 Tanaka Akira <akr@fsij.org>
+Mon Feb 7 10:21:50 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * bignum.c (big2str_base_powerof2): New function.
- (rb_big2str0): Use big2str_base_powerof2 if base is 2, 4, 8, 16 or 32.
+ * 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 Jun 9 00:59:04 2013 Tanaka Akira <akr@fsij.org>
+Sun Feb 6 13:48:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * hash.c (rb_hash): Use rb_integer_pack to obtain least significant
- long integer.
+ * ext/json/lib/json/common.rb (JSON::MissingUnicodeSupport.iconv):
+ should not drop rest of the result. use Iconv.conv instead.
-Sat Jun 8 23:56:00 2013 Tanaka Akira <akr@fsij.org>
+Sun Feb 6 12:46:02 2011 Eric Hodel <drbrain@segment7.net>
- * numeric.c (rb_num_to_uint): Use rb_absint_size instead of
- RBIGNUM_LEN.
+ * string.c (gsub): Ensure result encoding is the same as input
+ encoding. [Bug #4340].
-Sat Jun 8 22:53:45 2013 Tanaka Akira <akr@fsij.org>
+Sun Feb 6 12:18:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * marshal.c (r_object0): Use rb_integer_unpack.
+ * parse.y (words, qwords): dispatch array events. based on a
+ patch from Michael Edgar. [Bug #4365].
-Sat Jun 8 22:18:57 2013 Tanaka Akira <akr@fsij.org>
+Sun Feb 6 12:12:59 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * time.c (v2w): Use rb_absint_size instead of RBIGNUM_LEN.
+ * test/fileutils/fileasserts.rb (FileAssertions): separate module.
-Sat Jun 8 21:47:33 2013 Tanaka Akira <akr@fsij.org>
+Sun Feb 6 11:29:23 2011 Tanaka Akira <akr@fsij.org>
- * time.c (v2w_bignum): Simplified using rb_integer_pack.
- (rb_big_abs_find_maxbit): Removed.
+ * ext/dbm/dbm.c: parenthesize macro arguments.
-Sat Jun 8 21:03:40 2013 Tanaka Akira <akr@fsij.org>
+Sat Feb 5 22:01:59 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (rb_absint_singlebit_p): New function.
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ revert r30796. r30797 and r30798 are an alternative fix.
+ [ruby-dev:43174]
- * internal.h (rb_absint_singlebit_p): Declared.
+Sat Feb 5 21:47:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * time.c (v2w_bignum): Use rb_absint_singlebit_p instead of
- rb_big_abs_find_minbit.
- (rb_big_abs_find_minbit): Removed.
+ * parse.y (mlhs_basic): include mlhs_post for ripper. a patch
+ from Michael Edgar at [ruby-core:35078].
-Sat Jun 8 20:24:23 2013 Tanaka Akira <akr@fsij.org>
+Sat Feb 5 21:22:21 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * time.c (rb_big_abs_find_maxbit): Use rb_absint_size.
- (bdigit_find_maxbit): Removed.
+ * lib/test/unit/assertions.rb (assert_block): move from
+ test/fileutils/fileasserts.rb.
-Sat Jun 8 19:47:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * test/fileutils/fileasserts.rb (assert_block): pass arguments
+ as-is. [ruby-dev:43174]
- * class.c (include_modules_at): invalidate method cache if included
- module contains constants
+Sat Feb 5 16:47:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * test/ruby/test_module.rb: add test
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ msg can be passed nil. [Bug #4371] [ruby-dev:43174]
-Sat Jun 8 19:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Sat Feb 5 15:18:25 2011 Eric Hodel <drbrain@segment7.net>
- * random.c (limited_big_rand): declare rnd, lim and mask as uint32_t
- to avoid 64 bit to 32 bit shorten warnings.
+ * lib/rdoc: Upgrade to RDoc 3.5.2
-Sat Jun 8 19:23:53 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Sat Feb 5 12:05:27 2011 Nobuyoshi Nakada <nobu@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.
+ * ext/syck/rubyext.c (syck_node_init_copy): SyckNode is not
+ copiable. [ruby-core:35094]
-Sat Jun 8 19:06:26 2013 Tanaka Akira <akr@fsij.org>
+Sat Feb 5 11:48:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * random.c: Unused RBignum internal accessing macros removed.
+ * ext/openssl/ossl_cipher.c (ossl_cipher_alloc): leave data ptr
+ NULL.
-Sat Jun 8 19:04:15 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_cipher.c (ossl_cipher_new, ossl_cipher_initialize):
+ allocate internal structure. [ruby-core:35094]
- * random.c (limited_big_rand): The argument, limit, is changed to
- VALUE. Use rb_integer_pack and rb_integer_unpack.
+ * ext/openssl/ossl_cipher.c (ossl_cipher_copy): ditto.
-Sat Jun 8 17:15:18 2013 Tanaka Akira <akr@fsij.org>
+Sat Feb 5 11:29:10 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * random.c (make_seed_value): Fix the length given for
- rb_integer_unpack.
+ * ext/json/parser/parser.h (GET_PARSER): raise TypeError.
-Sat Jun 8 16:38:02 2013 Tanaka Akira <akr@fsij.org>
+ * ext/json/parser/parser.rl (cParser_initialize): ditto.
- * bignum.c (rb_integer_unpack): Don't use rb_funcall if possible.
+ * ext/json/parser/parser.h (GET_PARSER): check if initialized.
+ [ruby-core:35079]
- * random.c: Use uint32_t for elements of seed.
- (make_seed_value): Use rb_integer_unpack.
+ * ext/json/parser/parser.rl (cParser_initialize): ditto.
-Sat Jun 8 15:58:18 2013 Tanaka Akira <akr@fsij.org>
+Sat Feb 5 10:09:31 2011 Nobuyoshi Nakada <nobu@ruby-lang.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.
+ * load.c (rb_get_expanded_load_path): always expand load paths.
-Sat Jun 8 15:30:03 2013 Tanaka Akira <akr@fsij.org>
+Sat Feb 5 09:38:08 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * random.c (rand_init): Use rb_integer_pack.
- (roomof): Removed.
+ * transcode.c (encoded_dup): extract.
-Sat Jun 8 14:58:32 2013 Tanaka Akira <akr@fsij.org>
+Sat Feb 5 03:37:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * internal.h (INTEGER_PACK_FORCE_BIGNUM): New flag constant.
+ * lib/fileutils.rb (FileUtils::LowMethods): make low level methods
+ in NoWrite and DryRun to do nothing. [ruby-dev:43129]
- * bignum.c (rb_integer_unpack): Support INTEGER_PACK_FORCE_BIGNUM.
+ * test/fileutils/fileasserts.rb: add message arguments.
- * random.c (int_pair_to_real_inclusive): Use
- INTEGER_PACK_FORCE_BIGNUM to use rb_big_mul instead of rb_funcall.
+ * test/fileutils/fileasserts.rb (Test::Unit::Assertions#assert_block):
+ show the given message.
-Sat Jun 8 14:17:01 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Feb 5 02:09:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in: check for NET_LUID. header macro varies across
- compiler versions.
+ * parse.y (lex_getline, parser_set_encode): set encoding of lines
+ in SCRIPT_LINES__ as source encoding. [ruby-dev:43168]
- * win32/win32.c: use configured macro.
+Sat Feb 5 02:08:37 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Jun 8 11:59:55 2013 Tanaka Akira <akr@fsij.org>
+ * vm.c (ruby_thread_data_type): add prefix.
- * random.c (int_pair_to_real_inclusive): Use rb_funcall instead of
- rb_big_mul because rb_integer_unpack can return a Fixnum.
+Sat Feb 5 00:59:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sat Jun 8 11:17:39 2013 Tanaka Akira <akr@fsij.org>
+ * 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]
- * random.c (int_pair_to_real_inclusive): Use rb_integer_pack.
+ * vm.c (thread_data_type): remove static.
-Sat Jun 8 09:49:42 2013 Tanaka Akira <akr@fsij.org>
+Fri Feb 4 19:14:27 2011 Tanaka Akira <akr@fsij.org>
- * random.c (int_pair_to_real_inclusive): Use rb_integer_unpack.
+ * enc/trans/utf8_mac.trans: parenthesize macro arguments.
-Sat Jun 8 08:12:22 2013 Tanaka Akira <akr@fsij.org>
+Fri Feb 4 12:11:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * random.c (random_load): Use rb_integer_pack.
+ * string.c (str_utf8_nth): fixed a condition of optimized lead
+ byte counting. [Bug #4366][ruby-dev:43170]
-Sat Jun 8 06:15:46 2013 Tanaka Akira <akr@fsij.org>
+Fri Feb 4 01:50:13 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * random.c (numberof): Removed.
+ * string.c (count_utf8_lead_bytes_with_word): wrote function
+ comments.
-Sat Jun 8 06:00:47 2013 Tanaka Akira <akr@fsij.org>
+Fri Feb 4 00:14:55 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * random.c: include internal.h.
- (mt_state): Use rb_integer_unpack.
+ * ext/zlib/zlib.c (gzfile_reader_get_unused): no need to dup
+ before rb_str_resurrect.
-Sat Jun 8 00:55:51 2013 Tanaka Akira <akr@fsij.org>
+Thu Feb 3 20:04:44 2011 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.
+ * ext/curses/curses.c (CHECK): unused macro removed.
-Sat Jun 8 00:37:32 2013 Tanaka Akira <akr@fsij.org>
+Thu Feb 3 18:33:26 2011 NARUSE, Yui <naruse@ruby-lang.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.
+ * ext/zlib/zlib.c (gzfile_reader_get_unused): use rb_str_resurrect
+ because gz->z.input is hidden string. [ruby-core:35057]
-Fri Jun 7 23:58:06 2013 Tanaka Akira <akr@fsij.org>
+Thu Feb 3 16:34:10 2011 NARUSE, Yui <naruse@ruby-lang.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.
+ * enc/shift_jis.c (code_to_mbc): cast as int from the subtraction of
+ pointers.
- * pack.c: Ditto.
+ * enc/utf_16le.c (utf16le_mbc_enc_len): use ptrdiff_t.
- * 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.
+ * enc/utf_32be.c (utf32be_left_adjust_char_head): ditto.
-Fri Jun 7 22:10:50 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * enc/utf_32le.c (utf32le_left_adjust_char_head): ditto.
- * lib/rubygems/specification.rb (Gem::Specification#to_yaml):
- use Gem::NoAliasYAMLTree.create instead of Gem::NoAliasYAMLTree.new
- to suppress deprecated warnings.
+Thu Feb 3 16:31:43 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Jun 7 21:39:39 2013 Tanaka Akira <akr@fsij.org>
+ * include/ruby/missing.h: don't use HAVE_STDDEF_H because it never
+ defined by configure though configure.bat defines it.
- * bignum.c (rb_integer_pack): Renamed from rb_int_export.
- (rb_integer_unpack): Renamed from rb_int_import.
+ * include/ruby/ruby.h: move include stddef.h to defines.h
- * internal.h, pack.c: Follow the above change.
+ * include/ruby/defines.h: ditto.
-Fri Jun 7 21:05:26 2013 Tanaka Akira <akr@fsij.org>
+Wed Feb 2 20:25:04 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * bignum.c (integer_format_loop_setup): Extracted from rb_int_export
- and rb_int_import.
+ * 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.
-Fri Jun 7 19:48:38 2013 Tanaka Akira <akr@fsij.org>
+Thu Feb 3 07:20:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * bignum.c (validate_integer_format): Extracted from rb_int_export and
- rb_int_import.
+ * ext/psych/lib/psych/visitors/to_ruby.rb: use Regexp::NOENCODING
+ rather than magic number.
-Fri Jun 7 19:23:15 2013 Tanaka Akira <akr@fsij.org>
+ * ext/syck/lib/syck/rubytypes.rb: ditto
- * bignum.c (rb_absint_size): Use numberof.
- (rb_int_export): Ditto.
+Thu Feb 3 07:16:11 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Fri Jun 7 18:58:56 2013 Tanaka Akira <akr@fsij.org>
+ * re.c (Init_Regexp): added a constant for ARG_ENCODING_NONE
+ [ruby-core:35054]
- * internal.h (numberof): Gathered from various files.
+ * test/ruby/test_regexp.rb: corresponding test.
- * 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.
+Thu Feb 3 07:02:16 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Fri Jun 7 18:24:39 2013 Tanaka Akira <akr@fsij.org>
+ * ext/psych/lib/psych/visitors/to_ruby.rb: ARG_ENCODING_NONE regular
+ expressions can round trip. [ruby-core:34969]
- * bignum.c (rb_absint_size): Declare a variable, i, just before used
- to suppress a warning.
- (rb_int_export): Ditto.
+ * test/psych/test_yaml.rb: test for ARG_ENCODING_NONE regex
-Fri Jun 7 17:41:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * ext/sych/lib/syck/rubytypes.rb: ARG_ENCODING_NONE regular
+ expressions can round trip.
- * 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
+ * test/syck/test_yaml.rb: test for ARG_ENCODING_NONE regex
-Fri Jun 7 17:31:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Wed Feb 2 17:09:22 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * internal.h (RCLASS_SUPER): use descriptive variable name
- * internal.h (RCLASS_SET_SUPER): ditto
+ * io.c (rb_io_fdatasync): Use fsync(2) if the underlying
+ operating system does not support fdatasync(2).
-Fri Jun 7 13:25:27 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Feb 2 14:51:08 2011 Eric Hodel <drbrain@segment7.net>
- * ext/json/fbuffer/fbuffer.h (fbuffer_append_str): change the place of
- RB_GC_GUARD. it should be after the object is used.
+ * 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
-Fri Jun 7 13:22:43 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Feb 2 09:27:53 2011 Eric Hodel <drbrain@segment7.net>
- * gc.c (before_gc_sweep): noinline can also avoid the segv instead of
- -O0 of r41084. this way is expected less slow.
+ * lib/rdoc: Upgrade to RDoc 3.5.1
-Fri Jun 7 11:45:42 2013 Kenta Murata <mrkn@cookpad.com>
+Wed Feb 2 00:30:43 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.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]
+ * include/ruby/st.h (st_table): Added comment why we need __extension__.
- * numeric.c (num_quo): ditto.
+Tue Feb 1 20:45:44 2011 Tanaka Akira <akr@fsij.org>
- * test/test_mathn.rb: add a test for the change at r41109.
+ * enc/encdb.c: parenthesize macro arguments.
-Fri Jun 7 11:41:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Feb 1 15:12:26 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * configure.in: revert r41106. size_t may not be unsigned
+ * 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.
- * bignum.c (rb_absint_size_in_word, rb_int_export, rb_int_import): use
- NUM2SIZET() and SIZET2NUM() already defined in ruby/ruby.h.
+Tue Feb 1 13:20:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri Jun 7 11:28:37 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * 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.
- * 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.
+Tue Feb 1 11:03:47 2011 Ryan Davis <ryan@lust.local>
-Fri Jun 7 11:25:56 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * lib/rubygems*: Import rubygems 1.5.0 (released version @ 1fb59d0)
+ * test/rubygems: Ditto
- * gc.c: introduce oldgen bitmap for preparing performance tuning.
+Tue Feb 1 08:01:39 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Jun 7 11:20:57 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * ext/io/console/console.c (console_set_winsize): new method to set
+ console size. [EXPERIMENTAL]
- * gc.c (MARKED_IN_BITMAP, MARK_IN_BITMAP, CLEAR_IN_BITMAP): bring
- bitmap macros in one place, and introduce BITMAP_BIT.
+ * ext/io/console/console.c (console_winsize): use GetWriteFD.
-Fri Jun 7 11:18:35 2013 Masaya Tarui <tarui@ruby-lang.org>
+Tue Feb 1 02:28:14 2011 Masaya Tarui <tarui@ruby-lnag.org>
- * array.c (ary_new): change order of allocation in order
- to remove FL_OLDGEN operation.
+ * include/ruby/win32.h, win32/win32.c: add rb_w32_inet_ntop.
+ inet_ntop's minimum supported client is Vista.
-Fri Jun 7 11:16:28 2013 Masaya Tarui <tarui@ruby-lang.org>
+Tue Feb 1 00:10:30 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * tool/rdocbench.rb: add gc total time information.
+ * 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
-Fri Jun 7 10:12:01 2013 Koichi Sasada <ko1@atdot.net>
+ * 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
- * gc.c: remove "Sunny" terminology.
- "Sunny" doesn't mean antonym of "Shady" (questionable, doubtful, etc).
- Instead of "Sunny", use "non-shady" or "normal".
+ * test/benchmark: remove unused variable warnings
-Fri Jun 7 09:29:33 2013 Kenta Murata <mrkn@cookpad.com>
+Mon Jan 31 23:27:23 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * bignum.c (rb_int_import): explicitly casting BDIGIT_DBL to BDIGIT
- to prevent warning.
+ * node.c (add_id): remove duplicated rb_id2str() call.
-Fri Jun 7 07:29:33 2013 Tanaka Akira <akr@fsij.org>
+Sun Jan 30 17:19:46 2011 Tanaka Akira <akr@fsij.org>
- * internal.h (rb_int_export): countp argument is split into
- wordcount_allocated and wordcount.
+ * missing/langinfo.c: parenthesize macro arguments.
- * bignum.c (rb_int_export): Follow the above change.
+Mon Jan 31 21:57:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * pack.c (pack_pack): Ditto.
+ * configure.in: revert r30698.
-Fri Jun 7 07:17:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Mon Jan 31 21:32:44 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
- * NEWS: describe a compatibility issue of Numeric#quo
- introduced at r41109.
+ * 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]
-Fri Jun 7 07:15:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Mon Jan 31 14:45:47 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * NEWS: fix style.
+ * lib/irb/locale.rb (IRB::Locale::#search_file):
+ Gem might be undefined if --disable-gems. [ruby-core:34990]
-Fri Jun 7 06:48:17 2013 Benoit Daloze <eregontp@gmail.com>
+Mon Jan 31 12:26:14 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * numeric.c: remove unused ID id_to_r introduced in r41109.
+ * 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.
-Fri Jun 7 06:15:31 2013 Tanaka Akira <akr@fsij.org>
+Mon Jan 31 04:45:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * bignum.c (rb_int_import): New function.
- (int_import_push_bits): Ditto.
+ * 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]
- * internal.h (rb_int_import): Declared.
+Sun Jan 30 17:19:46 2011 Tanaka Akira <akr@fsij.org>
- * pack.c (pack_unpack): Use rb_int_import for BER compressed integer.
+ * missing/crypt.c: parenthesize macro arguments.
-Thu Jun 6 22:24:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Sun Jan 30 16:40:27 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * numeric.c (num_quo): Use to_r method to convert the receiver to
- rational. [ruby-core:41575] [Bug #5736]
+ * test/rubygems/test_gem_security.rb (TestGemSecurity): valid only
+ if OpenSSL is available.
- * test/ruby/test_numeric.rb: add a test for the above change.
+ * test/dl/test_dl2.rb (TestDL#test_sin): math functions do not
+ work on x86_64 due to the design of DL2.
-Thu Jun 6 20:40:17 2013 Tanaka Akira <akr@fsij.org>
+ * test/dl/test_func.rb (DL::TestFunc#test_{sinf,sin): ditto.
- * 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.
+Sun Jan 30 16:09:22 2011 Tanaka Akira <akr@fsij.org>
- * internal.h (rb_absint_size): Declared.
- (rb_absint_size_in_word): Ditto.
- (rb_int_export): Ditto.
+ * strftime.c (rb_strftime_with_timespec): %G produces 4 digits.
- * 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.
+Sun Jan 30 15:13:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * pack.c (pack_pack): Use rb_int_export for BER compressed integer.
+ * enc/emacs_mule.c (emacsmule_islead): 7bit range is also leading
+ byte.
-Thu Jun 6 19:31:33 2013 Tadayoshi Funaba <tadf@dotrb.org>
+Sun Jan 30 13:03:16 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/date/date_core.c: fixed coding error [ruby-core:55337].
- reported by Riley Lynch.
+ * hash.c (rb_hash_fetch_m): use useful message for longer key, not a
+ nonsense id value.
-Thu Jun 6 14:16:37 2013 Narihiro Nakamura <authornari@gmail.com>
+ * string.c (rb_str_ellipsize): new function to ellipsize a string.
- * ext/objspace/object_tracing.c: rename allocation_info to
- lookup_allocation_info. At times I confused "struct
- allocation_info" with "function allocation_info".
+ * include/ruby/encoding.h (rb_enc_step_back): new function to step
+ back n characters.
-Thu Jun 6 13:57:06 2013 Narihiro Nakamura <authornari@gmail.com>
+Sun Jan 30 12:53:38 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/objspace/object_tracing.c: allocation_info function isn't
- called by any other file.
+ * enc/emacs_mule.c (emacsmule_islead): fix inverse condition.
-Thu Jun 6 09:41:00 2013 Kenta Murata <mrkn@cookpad.com>
+Sun Jan 30 09:37:25 2011 Yutaka Kanemoto <kanemoto@ruby-lang.org>
- * numeric.c (num_quo): should return a Float for a Float argument.
- [ruby-dev:44710] [Bug #5515]
+ * io.c (struct argf): char behaves like an unsigned char
+ by default on AIX.
- * test/ruby/test_fixnum.rb: Add an assertion for the above change.
+Sun Jan 30 08:02:55 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * test/ruby/test_bignum.rb: ditto.
+ * configure.in: Mac OS X wrongly reports it has fdatasync(3).
-Thu Jun 6 00:59:44 2013 Masaya Tarui <tarui@ruby-lang.org>
+Sun Jan 30 03:29:47 2011 NARUSE, Yui <naruse@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.
+ * ext/openssl/ossl_bn.c (GetBNPtr): add missing nil case.
+ patched by Martin Bosslet. [ruby-core:34987]
- change sunny old check point in order to save mark stack and
- remove unnatural rest_sweep & demote.
+Sun Jan 30 01:02:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu Jun 6 00:52:42 2013 Masaya Tarui <tarui@ruby-lang.org>
+ * include/ruby/ruby.h: Added NUM2MODET() and MODET2NUM() default
+ definition.
+ Because r30686 introduced win32 build failure.
- * gc.c (rgengc_rememberset_mark): change scan algorithm for performance:
- from object's pointer base to bitmap one.
+Sat Jan 29 22:16:26 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Jun 6 00:30:04 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * array.c (rb_ary_join): [].join.encoding must be US-ASCII.
+ [ruby-list:47790]
- * 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
+Sat Jan 29 20:22:39 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu Jun 6 00:05:08 2013 Akinori MUSHA <knu@iDaemons.org>
+ * benchmark/driver.rb (BenchmarkDriver#measure): Show command line
+ when abnormal exiting occur.
- * 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]
+Sat Jan 29 10:53:16 2011 Yusuke Endoh <mame@tsg.ne.jp>
-Wed Jun 5 22:40:42 2013 Shugo Maeda <shugo@ruby-lang.org>
+ * vm_insnhelper.c (vm_get_ev_const): no-scope reference to toplevel
+ private constant has been prohibited incorrectly.
- * lib/net/imap.rb (capability_response): should ignore trailing
- spaces. Thanks, Peter Kovacs. [ruby-core:55024] [Bug #8415]
+ * test/ruby/test_module.rb (test_toplevel_private_constant): add a
+ test for above.
- * test/net/imap/test_imap_response_parser.rb: related test.
+Sat Jan 29 08:43:23 2011 Ryan Davis <ryand-ruby@zenspider.com>
-Wed Jun 5 21:17:08 2013 Tanaka Akira <akr@fsij.org>
+ * lib/rubygems*: Import rubygems 1.5.0 (release candidate @ 09893d9)
+ * test/rubygems: Ditto
- * bignum.c (big_fdiv): Use nlz() instead of bdigbitsize().
- (bdigbitsize): Removed.
+Sat Jan 29 02:02:37 2011 Yusuke Endoh <mame@tsg.ne.jp>
-Wed Jun 5 20:32:00 2013 Kenta Murata <mrkn@cookpad.com>
+ * variable.c (rb_mod_const_of, sv_i): Module#constant should exclude
+ private constants. see [ruby-core:32912].
- * include/ruby/ruby.h: fix alignment in comment.
+ * test/ruby/test_module.rb (test_constants_with_private_constant): add
+ a test for above.
-Wed Jun 5 20:05:29 2013 Tanaka Akira <akr@fsij.org>
+Sat Jan 29 01:36:41 2011 Yusuke Endoh <mame@tsg.ne.jp>
- * 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.
+ * variable.c (rb_const_set): const_set should preserve constant
+ visibility. see [ruby-core:32912].
-Wed Jun 5 15:26:10 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * test/ruby/test_module.rb: add a test for above.
- * 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
+Sat Jan 29 01:24:57 2011 Yusuke Endoh <mame@tsg.ne.jp>
-Wed Jun 5 09:46:46 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * 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/fileutils/test_fileutils.rb (TestFileUtils#test_mkdir): add
- EACCES for Windows.
+ * test/ruby/test_class.rb (test_redefine_private_class),
+ test/ruby/test_module.rb
+ (test_define_module_under_private_constant): add tests for above.
-Wed Jun 5 08:13:37 2013 Tanaka Akira <akr@fsij.org>
+Sat Jan 29 01:19:17 2011 Yusuke Endoh <mame@tsg.ne.jp>
- * bignum.c (rb_big_pow): Don't need to multiply SIZEOF_BDIGITS.
- Use nlz instead of bitlength_bdigit.
- (bitlength_bdigit): Removed.
+ * 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].
-Wed Jun 5 07:14:18 2013 Tadayoshi Funaba <tadf@dotrb.org>
+ * 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.
- * ext/date/date_core.c (d_lite_cmp, d_lite_equal): simplified.
+ * test/ruby/test_marshal.rb (test_marshal_private_class): add a test.
+ This test had failed because of incompatibility of rb_const_get.
-Wed Jun 5 07:07:01 2013 Tadayoshi Funaba <tadf@dotrb.org>
+Sat Jan 29 00:30:44 2011 Yusuke Endoh <mame@tsg.ne.jp>
- * ext/date/date_core.c: fixed a bug [ruby-core:55295]. reported
- by Riley Lynch.
+ * variable.c (set_const_visibility): fix typo. a patch from Tomoyuki
+ Chikanaga in [ruby-core:32919].
-Wed Jun 5 06:44:08 2013 Eric Hodel <drbrain@segment7.net>
+Fri Jan 28 23:20:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * lib/rubygems: Update to RubyGems 2.0.3
+ * 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.
- * test/rubygems: Tests for the above.
+Fri Jan 28 21:56:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * NEWS: Added RubyGems 2.0.3 note.
+ * ext/dbm/extconf.rb: Added new header places for Fedora13.
-Wed Jun 5 06:35:15 2013 Eric Hodel <drbrain@segment7.net>
+Fri Jan 28 21:49:30 2011 Tanaka Akira <akr@fsij.org>
- * doc/marshal.rdoc: Add description of Marshal format.
+ * ext/zlib/zlib.c: parenthesize macro arguments.
-Wed Jun 5 01:16:09 2013 Benoit Daloze <eregontp@gmail.com>
+Fri Jan 28 17:47:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * array.c (Array#+): fix documentation example.
- Patch by Logan Serman. [Fixes GH-324]
+ * 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.
-Wed Jun 5 00:21:54 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Fri Jan 28 17:33:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * lib/irb/lc/ja/help-message: update help messages.
- following r41028. [ruby-dev:46707] [Feature #7510]
+ * test/gdbm/test_gdbm.rb (TestGDBM#test_s_open_no_create): skip
+ the test if gdbm version is 1.8.x.
-Wed Jun 5 00:09:32 2013 Tanaka Akira <akr@fsij.org>
+Fri Jan 28 16:30:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * marshal.c (r_object0): Generalize a round up expression.
- Use BDIGIT instead of int.
+ * 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]
-Tue Jun 4 23:44:02 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Fri Jan 28 16:19:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * object.c (rb_Hash): fix docs. patched by Stefan Sch"ussler.
- [ruby-core:55299] [Bug #8487]
+ * 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]
-Tue Jun 4 23:16:49 2013 Benoit Daloze <eregontp@gmail.com>
+Fri Jan 28 16:04:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * lib/irb/completion.rb: Use %w literal construction for long lists.
- Patch by Dave Goodchild. [Fixes GH-299]
+ * test/ruby/test_require.rb (TestRequire#test_require_path_home_{1,2,3}):
+ split from test_require_path_home.
-Tue Jun 4 23:08:42 2013 Benoit Daloze <eregontp@gmail.com>
+Fri Jan 28 13:04:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/objspace/objspace.c: improve wording and remove duplicated comment.
- Based on a patch by Dave Goodchild. [Fixes GH-299]
+ * configure.in (--with-valgrind): Fixed r29683. Now this option
+ is really default on.
-Tue Jun 4 18:41:47 2013 Tanaka Akira <akr@fsij.org>
+Fri Jan 28 12:05:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * bignum.c (bitlength_bdigit): Fix an off-by-one error.
+ * configure.in: Add #include<sys/stat.h> when struct stat is
+ tested. Otherwise, incomplete type dereference error will occur.
-Tue Jun 4 15:30:00 2013 Kenta Murata <mrkn@cookpad.com>
+Fri Jan 28 11:53:19 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.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
+ * configure.in: redundant variable names made strange conftest
+ error. Fixed it.
- * test/bigdecimal/test_bigdecimal_util.rb: fix for the above change.
+Fri Jan 28 11:47:00 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue Jun 4 00:44:27 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * 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.
- * test/fileutils/test_fileutils.rb (TestFileUtils#test_mkdir): add
- EEXIST for Linux. (suggested by nurse)
+Fri Jan 28 11:23:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jun 3 23:58:19 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * io.c (rb_io_open): Use NUM2MODET() instead NUM2UINT().
+ * io.c (rb_scan_open_args): ditto.
- * lib/fileutils.rb (FileUtils.rmdir): use remove_tailing_slash.
- * test/fileutils/test_fileutils.rb: test for above.
+Fri Jan 28 10:58:20 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jun 3 23:47:55 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * bignum.c (bitlength_bdigit): New function.
- (rb_big_pow): Use bitlength_bdigit instead of ffs.
+Fri Jan 28 02:37:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jun 3 23:11:19 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+ * re.c (rb_reg_raise): add GC guard to prevent intermediate
+ variable from GC.
- * 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]
+Fri Jan 28 02:35:41 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jun 3 19:02:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * hash.c (rb_hash_fetch_m): add GC guard to prevent intermediate
+ variable from GC.
- * dir.c (is_hfs): use the file descriptor instead of a path.
+Fri Jan 28 01:33:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon Jun 3 07:15:17 2013 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.
- * 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.
+Fri Jan 28 01:27:42 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * test/ruby/test_process.rb (TestProcess#test_too_long_path2):
+ Factored out from test_too_long_path. A test should only do
+ one test.
-Mon Jun 3 03:40:29 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Jan 27 23:29:36 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_insnhelper.c (vm_yield_setup_block_args): partially revert r41019.
- The code is not useless.
+ * st.c (st_foreach): check if unpacked.
-Mon Jun 3 01:25:25 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Thu Jan 27 23:14:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/socket/test_sockopt.rb: change test name. follow r41037.
+ * misc/ruby-mode.el (ruby-mode-map): remove deprecated binding.
+ use M-; instead.
-Mon Jun 3 01:08:43 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Thu Jan 27 21:58:32 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * test/rinda/test_rinda.rb: rename functions introduced in r41009.
+ * bignum.c (rb_str_to_inum): get rid of too huge alloca().
-Sun Jun 2 23:33:42 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+Thu Jan 27 21:43:29 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * object.c (rb_str_to_dbl): rewrite again. use ALLOCV instead
+ rb_str_tmp_new().
-Sun Jun 2 22:44:42 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Jan 27 21:41:47 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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)
+ * win32/win32.c: get rid of STRNDUPA(). It's dangerous API.
-Sun Jun 2 16:15:29 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jan 27 21:31:57 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * dln_find.c (dln_find_exe, dln_find_file): remove deprecated
- non-reentrant functions.
+ * win32/win32.c (rb_w32_aspawn): get rid of too huge alloca().
+ [Bug #4330] [ruby-core:34898]
-Sun Jun 2 15:04:35 2013 Zachary Scott <zachary@zacharyscott.net>
+Thu Jan 27 20:30:18 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * lib/cgi/util.rb, lib/erb.rb: Use String#b [Feature #8394] by znz
+ * win32/win32.c (rb_w32_spawn): get rid of too huge alloca().
-Sun Jun 2 14:10:21 2013 Zachary Scott <zachary@zacharyscott.net>
+Thu Jan 27 18:49:53 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * lib/irb/lc/help-message: Apply english updates for irb --help #7510
+ * win32/win32.c (open_dir_handle): get rid of too huge alloca().
-Sun Jun 2 12:03:58 2013 Zachary Scott <zachary@zacharyscott.net>
+Thu Jan 27 18:34:58 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * range.c: Fix rdoc on Range#bsearch [Bug #8242] [ruby-core:54143]
+ * file.c (w32_io_info): get rid of too huge alloca().
+ [Bug #4313] [ruby-core:34830]
-Sun Jun 2 02:08:37 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Jan 27 18:19:51 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * enc/euc_jp.c: fix typo: the name of EUC-JIS-2004.
+ * win32/win32.c (wstati64): get rid of too huge alloca().
+ [Bug #4316] [ruby-core:34834]
-Sat Jun 1 23:17:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Thu Jan 27 15:11:52 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * vm_eval.c (rb_mod_module_eval): mention in docs that arguments passed
- to the method are passed to the block
+ * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): get rid of too huge
+ alloca(). this is the real fix of [ruby-core:34833].
-Sat Jun 1 17:58:13 2013 Akinori MUSHA <knu@iDaemons.org>
+Thu Jan 27 12:46:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/set.rb (Set#freeze, taint, untaint): Save a "self" by
- utilizing super returning self, and add tests while at it.
+ * process.c (ALLOC_ARGV_WITH_STR): fix void pointer arithmetic.
-Sat Jun 1 17:24:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jan 27 08:41:40 2011 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]
+ * 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]
- * 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]
+Thu Jan 27 08:32:17 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Jun 1 11:16:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * include/ruby/ruby.h (ALLOCV): new API for exception-safe
+ temporary buffer. [ruby-core:34844]
- * error.c (rb_exc_new_cstr): rename from rb_exc_new2.
+ * string.c (rb_alloc_tmp_buffer, rb_free_tmp_buffer):
+ implementation of the API.
- * error.c (rb_exc_new_str): rename from rb_exc_new3.
+Thu Jan 27 08:22:49 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Jun 1 10:13:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * dln_find.c (dln_find_1): use rb_warning and return immediately
+ if fname is longer than buffer.
- * string.c (rb_str_new[2-5], rb_{tainted,usascii}_str_new2),
- (rb_str_buf_new2): remove old interfaces.
+Wed Jan 26 22:57:30 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Sat Jun 1 08:00:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * class.c (clone_method): add GC guard to prevent intermediate
+ variable from GC. [Bug #4321] [ruby-dev:43107]
- * ext/zlib/zlib.c (gzfile_read, gzfile_read_all, gzfile_getc),
- (gzreader_gets): check EOF. [ruby-core:55220] [Bug #8467]
+Wed Jan 26 22:45:16 2011 Tanaka Akira <akr@fsij.org>
-Sat Jun 1 07:32:15 2013 Tanaka Akira <akr@fsij.org>
+ * template/id.h.tmpl: parenthesize macro arguments.
- * bignum.c: Use BDIGIT type for hbase.
+Wed Jan 26 22:28:49 2011 CHIKANAGA Tomoyuki <nagachika00@gmail.com>
-Sat Jun 1 02:37:35 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * vm_eval.c (rb_throw_obj): add GC guard to prevent intermediate
+ variable from GC. [Bug #4322] [ruby-dev:43108]
- * ext/socket/option.c (sockopt_s_byte): constructor of the sockopt
- whose value's is byte.
+Wed Jan 26 17:08:59 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * ext/socket/option.c (sockopt_byte): getter for above.
+ * 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.
- * ext/socket/option.c (inspect_byte): inspect for above.
+Wed Jan 26 10:36:28 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/socket/option.c (sockopt_s_ip_multicast_loop): constructor of
- the sockopt whose optname is IP_MULTICAST_LOOP.
+ * string.c (=~): documentation fix; the return value is nil when
+ it doesn't match. patched by Andrei Kulakov [ruby-core:34562]
- * ext/socket/option.c (sockopt_ip_multicast_loop): getter for above.
+Tue Jan 25 08:41:58 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/option.c (sockopt_s_ip_multicast_ttl): constructor of
- the sockopt whose optname is IP_MULTICAST_TTL.
+ * dln_find.c (dln_find_1): omit too long pathnames.
- * ext/socket/option.c (sockopt_ip_multicast_ttl): getter for above.
+Tue Jan 25 08:28:19 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/option.c (sockopt_inspect): use above.
+ * string.c (rb_str_resize): get rid of out-of-bound access.
-Sat Jun 01 01:50:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Tue Jan 25 07:48:22 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * ext/bigdecimal/bigdecimal.c (BigDecimal_power): use rb_dbl2big
- to convert a double value to a Bignum.
+ * test/ruby/test_thread.rb: remove unused variables.
-Sat Jun 1 00:19:50 2013 Tanaka Akira <akr@fsij.org>
+Tue Jan 25 07:45:44 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * bignum.c (calc_hbase): Make hbase the maximum power of base
- representable in BDIGIT.
+ * test/ruby/test_thread.rb (TestThread#test_condvar_nolock_2): get
+ rid of method redefined.
-Fri May 31 23:56:13 2013 Tanaka Akira <akr@fsij.org>
+Tue Jan 25 07:00:52 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * bignum.c (calc_hbase): Extracted from rb_big2str0.
+ * string.c (rb_string_value_cstr): rb_str_modify can change
+ RSTRING_PTR.
-Fri May 31 23:22:24 2013 Tanaka Akira <akr@fsij.org>
+Tue Jan 25 03:24:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * test/ruby/test_thread.rb: Added various ConditionVariable tests.
-Fri May 31 17:57:21 2013 Zachary Scott <zachary@zacharyscott.net>
+Mon Jan 24 22:26:33 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * process.c: Improve Process::exec documentation
+ * object.c (rb_str_to_dbl): Fix again. use rb_str_tmp_new()
+ instead ALLOC_N.
-Fri May 31 17:26:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jan 24 21:50:48 2011 Tanaka Akira <akr@fsij.org>
- * vm_eval.c (rb_funcallv): add better names of rb_funcall2.
+ * vm_insnhelper.h: parenthesize macro arguments.
- * vm_eval.c (rb_funcallv_public): ditto for rb_funcall3.
+Mon Jan 24 21:28:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri May 31 17:04:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * object.c (rb_str_to_dbl): use ALLOC_N instead ALLOCA_N because
+ ALLOC_N may cause stack overflow.
- * array.c (rb_ary_new_capa): add better names of rb_ary_new2.
+Mon Jan 24 21:04:45 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * array.c (rb_ary_new_from_args): ditto for rb_ary_new3.
+ * error.c (rb_invalid_str): prevent intermediate variable from GC.
+ [ruby-core:34820]
- * array.c (rb_ary_new_from_values): ditto for rb_ary_new4.
+Sun Jan 23 23:01:54 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri May 31 16:35:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/io/console/test_io_console.rb: Don't run test if the system
+ don't support io/console.
- * configure.in (HAVE_ATTRIBUTE_FUNCTION_ALIAS): define to tell if
- alias attribute is available.
+Sun Jan 23 22:17:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri May 31 16:03:23 2013 Zachary Scott <zachary@zacharyscott.net>
+ * test/fiddle/test_fiddle.rb: Don't run test if the system don't support
+ fiddle.
- * object.c, proc.c: s/call_seq/call-seq in rdoc. [Fixes GH-322]
+ * test/fiddle/test_function.rb: ditto.
+ * test/fiddle/test_closure.rb: ditto.
-Fri May 31 15:56:36 2013 Zachary Scott <zachary@zacharyscott.net>
+Sun Jan 23 11:39:18 2011 Tanaka Akira <akr@fsij.org>
- * ext/openssl/ossl_ssl.c: Add missing paren in rdoc [Fixes GH-321]
+ * vm_exec.h: parenthesize macro arguments.
-Fri May 31 11:58:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Jan 23 10:33:02 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_method.c (set_visibility): extract from rb_mod_public(),
- rb_mod_protected() and rb_mod_private().
+ * template/fake.rb.in (ruby): suppress warnings.
-Thu May 30 19:47:42 2013 Yusuke Endoh <mame@tsg.ne.jp>
+Sun Jan 23 08:00:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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]
+ * string.c (str_nth_len, str_utf8_nth): return the rest length together.
- * test/ruby/test_keyword.rb: update a test for above.
+ * string.c (rb_str_substr): get rid of measure the length always
+ to improve performance for huge string. [ruby-core:34648]
-Thu May 30 17:55:04 2013 Zachary Scott <zachary@zacharyscott.net>
+Sun Jan 23 00:40:10 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * process.c: RDoc on Process.spawn
+ * test/test_syslog.rb: Fix to make a lot of test failure if
+ the platform doesn't support syslog.
-Thu May 30 00:08:14 2013 Koichi Sasada <ko1@atdot.net>
+Sat Jan 22 11:49:55 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * 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).
+ * ext/psych/lib/psych/visitors/to_ruby.rb: fixing merge key support
+ when multiple merge keys are specified.
-Wed May 29 10:33:27 2013 Koichi Sasada <ko1@atdot.net>
+ * test/psych/test_merge_keys.rb: tests for multi-merge key support
- * 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().
+Sat Jan 22 11:33:04 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Tue May 28 12:31:21 2013 Koichi Sasada <ko1@atdot.net>
+ * 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]
- * 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'.
+ * test/psych/test_merge_keys.rb: test for merge keys
- * 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>
+Sat Jan 22 10:25:19 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * test/objspace/test_objspace.rb: add a test.
+ * ext/psych/parser.c (parse): add the file name to the exception when
+ parse errors occur.
-Tue May 28 11:30:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/psych/test_parser.rb: test for parse error file name
- * ext/extmk.rb (extmake): leave makefiles untouched if the content is
- not changed, to get rid of unnecessary re-linking.
+Sat Jan 22 10:12:30 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Tue May 28 03:11:02 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/psych/parser.c (parse): fix assertion error when reusing a
+ parser after an exception has been raised
- * 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)
+ * test/psych/test_parser.rb: test for assertion error
- Note that hooks are not kicked immediately. Procs are kicked
- at postponed_job.
+Sat Jan 22 04:09:22 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- This feature is a sample of new internal event and
- rb_postponed_job API.
+ * ext/psych/lib/psych/nodes/node.rb: Make Psych::Nodes::Node
+ enumerable.
-Tue May 28 02:56:15 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/psych/lib/psych/visitors/depth_first.rb: Add a depth-first
+ visitor to enumerate over a YAML AST in a depth-first fashion
- * gc.c (gc_stat): remove wrong rest_sweep().
+ * test/psych/nodes/test_enumerable.rb: test for enumerating nodes
-Tue May 28 02:44:23 2013 Koichi Sasada <ko1@atdot.net>
+ * test/psych/visitors/test_depth_first.rb: test for depth-first
+ visitor
- * gc.c (garbage_collect_body): fix GC_ENABLE_LAZY_SWEEP condition.
+Sat Jan 22 00:53:42 2011 Tanaka Akira <akr@fsij.org>
- * gc.c (GC_NOTIFY): move debug print location and use stderr instead
- of stdout.
+ * vm_core.h: parenthesize macro arguments.
-Tue May 28 02:07:21 2013 Koichi Sasada <ko1@atdot.net>
+Fri Jan 21 18:15:09 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_trace.c (rb_postponed_job_register_one): fix iteration bug.
+ * configure.in: should not use -Werror=* flags while conftests.
- * ext/-test-/postponed_job/postponed_job.c,
- test/-ext-/postponed_job/test_postponed_job.rb: add a test.
+Fri Jan 21 09:17:00 2011 Luis Lavena <luislavena@gmail.com>
-Tue May 28 00:34:23 2013 Koichi Sasada <ko1@atdot.net>
+ * configure.in: Fix incorrectly detected x86_64-w64-mingw32 due
+ canonalization of target_os. Bug #3889 [ruby-core:32634]
- * 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) ...]
+Thu Jan 20 23:44:00 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/-test-/tracepoint/tracepoint.c,
- test/-ext-/tracepoint/test_tracepoint.rb: modify a test.
+ * 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.
-Tue May 28 00:18:57 2013 Koichi Sasada <ko1@atdot.net>
+Thu Jan 20 23:58:02 2011 Tanaka Akira <akr@fsij.org>
- * vm_trace.c (rb_postponed_job_flush): remove a wrong comment.
+ * node.h: parenthesize macro arguments.
-Mon May 27 22:09:33 2013 Tanaka Akira <akr@fsij.org>
+Thu Jan 20 23:25:28 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * include/ruby/ruby.h (RHASH_SIZE): Add a cast to suppress a
- warning, comparison between signed and unsigned integer
- expressions [-Wsign-compare], on ILP32.
+ * configure.in: Add '#include <stdlib.h>' to
+ rb_cv_localtime_overflow test too. It's reported by Tomoyuki
+ Chikanaga. Thanks.
-Mon May 27 19:25:47 2013 Koichi Sasada <ko1@atdot.net>
+Thu Jan 20 16:11:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * include/ruby/ruby.h: rename RUBY_INTERNAL_EVENT_FREE to
- RUBY_INTERNAL_EVENT_FREEOBJ.
+ * README.EXT, README.EXT.ja: You shouldn't choose ``conftest.c'' as a
+ name of a source file.
- * ext/-test-/tracepoint/tracepoint.c,
- ext/objspace/object_tracing.c,
- gc.c, vm_trace.c: catch up this change.
+Thu Jan 20 12:15:44 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Mon May 27 18:57:28 2013 Koichi Sasada <ko1@atdot.net>
+ * 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]
- * 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.
+Thu Jan 20 11:39:41 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * test/objspace/test_objspace.rb: add a test.
+ * test/webrick/utils.rb (TestWEBrick::RubyBin): test CGI does not need
+ to load rubygems. if it activated, ruby raises LoadError about
+ rbconfig.rb.
- * ext/objspace/object_tracing.c: ditto.
+Thu Jan 20 09:19:42 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * gc.c (rb_gc_count): add. This function returns GC count.
+ * ext/psych/lib/psych/visitors/json_tree.rb: Fix JSON emit for
+ DateTime and Time classes.
- * internal.h: add decl. of rb_gc_count(). Same as `GC.count'.
+ * test/psych/test_json_tree.rb: test for JSON emit
-Mon May 27 17:33:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Jan 20 08:02:46 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * tool/rbinstall.rb (install_recursive): add maxdepth option.
+ * ext/psych/lib/psych/coder.rb (represent_object): arbitrary objects
+ may be passed to the Psych::Coder object.
- * tool/rbinstall.rb (bin-comm): limit depth of bindir and reject empty
- files. [ruby-core:55101] [Bug #8432]
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: support for visiting
+ arbitrary objects set on the coder.
-Mon May 27 16:16:18 2013 Koichi Sasada <ko1@atdot.net>
+ * test/psych/test_coder.rb: supporting test case.
- * vm_trace.c (rb_postponed_job_flush, rb_postponed_job_register): use
- ruby_xmalloc/xfree. It is safe during GC.
+Thu Jan 20 06:03:17 2011 Tanaka Akira <akr@fsij.org>
-Mon May 27 09:24:03 2013 Koichi Sasada <ko1@atdot.net>
+ * method.h: parenthesize macro arguments.
- * test/-ext-/postponed_job/test_postponed_job.rb: fix typo and class name.
+Wed Jan 19 13:16:05 2011 Eric Hodel <drbrain@segment7.net>
-Mon May 27 09:05:17 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/rubygems/commands/sources_command.rb: Finish removing code,
+ (fixes sources command test).
- * 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'.
+Wed Jan 19 13:04:16 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- 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.
+ * proc.c (proc_call): Add gc guard to avoid segfault. The fix
+ is created by Tomoyuki Chikanaga. [Bug #4238][ruby-dev:42963]
- This change is mostly written by Aman Gupta (tmm1).
- https://bugs.ruby-lang.org/issues/8107#note-12
- [Feature #8107]
+Wed Jan 19 12:31:28 2011 Eric Hodel <drbrain@segment7.net>
- * 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.
+ * lib/rubygems.rb: Since gem_prelude requires rubygems, enable
+ custom_require always.
- * ext/-test-/tracepoint/extconf.rb,
- ext/-test-/tracepoint/tracepoint.c,
- test/-ext-/tracepoint/test_tracepoint.rb: add a test.
+Wed Jan 19 12:08:08 2011 Eric Hodel <drbrain@segment7.net>
-Mon May 27 08:38:21 2013 Koichi Sasada <ko1@atdot.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
- * ext/-test-/postponed_job/postponed_job.c: fix `init' function name.
+Wed Jan 19 08:13:59 2011 Ryan Davis <ryand-ruby@zenspider.com>
-Mon May 27 06:22:41 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/rubygems*: Import rubygems 1.5.0 (release candidate)
+ * test/rubygems: Ditto
- * 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.
+Tue Jan 18 23:31:01 2011 Yusuke Endoh <mame@tsg.ne.jp>
- 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).
+ * parse.y: avoid NULL reference. [ruby-dev:43067]
- This change is mostly written by Aman Gupta (tmm1).
- https://bugs.ruby-lang.org/issues/8107#note-15
- [Feature #8107]
+Wed Jan 19 02:54:04 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * gc.c: use postponed job API for finalizer.
+ * vsnprintf.c (cvt): set first byte of buf to NUL for the case when
+ no bytes are written to the buf. [ruby-dev:43062]
- * common.mk: add dependency from vm_trace.c to debug.h.
+Tue Jan 18 23:04:51 2011 Tanaka Akira <akr@fsij.org>
- * ext/-test-/postponed_job/extconf.rb, postponed_job.c,
- test/-ext-/postponed_job/test_postponed_job.rb: add a test.
+ * gc.h: parenthesize macro arguments.
- * thread.c: implement postponed API.
+Tue Jan 18 18:31:14 2011 Keiju Ishitsuka <keiju@ishitsuka.com>
- * vm_core.h: ditto.
+ * lib/irb/completion.rb: Irb tab completion support for XX::method
+ forms.
-Mon May 27 02:26:02 2013 Koichi Sasada <ko1@atdot.net>
+Tue Jan 18 15:05:55 2011 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * gc.c (gc_stat): collect promote_operation_count and
- types (RGENGC_PROFILE >= 2).
+ * lib/logger.rb: added RDoc document for logging message escape
+ by Hal Brodigan. See #3869
-Mon May 27 01:40:58 2013 Koichi Sasada <ko1@atdot.net>
+Tue Jan 18 07:53:52 2011 Tanaka Akira <akr@fsij.org>
- * 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.
+ * eval_intern.h: parenthesize macro arguments.
-Mon May 27 01:15:22 2013 Koichi Sasada <ko1@atdot.net>
+Tue Jan 18 04:42:44 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * hash.c (rb_hash_tbl_raw), internal.h: added.
- Returns st_table without shading hash.
+ * ext/psych/lib/psych/parser.rb (Mark): Adding a class to wrap
+ marker information
- * array.c: use rb_hash_tbl_raw() for read-only purpose.
+ * ext/psych/parser.c (mark): Add a method to return the mark object
+ for the parser
- * compile.c (iseq_compile_each): ditto.
+ * test/psych/test_parser.rb: tests for the Mark class.
- * gc.c (count_objects): ditto.
+Tue Jan 18 02:46:55 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * insns.def: ditto.
+ * ext/psych/lib/psych/visitors/json_tree.rb (visit_String): JSON
+ strings should be dumped with double quotes. [ruby-core:34186]
- * process.c: ditto.
+ * test/psych/test_json_tree.rb: test for double quotes
- * thread.c (clear_coverage): ditto.
+Mon Jan 17 23:36:33 2011 Tanaka Akira <akr@fsij.org>
- * vm_insnhelper.c: ditto.
+ * array.c (rb_ary_times): less MEMCPY calls.
-Mon May 27 00:31:09 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Mon Jan 17 22:54:33 2011 Tanaka Akira <akr@fsij.org>
- * tool/make-snapshot: use ENV["AUTOCONF"] instead of directly using
- literal "autoconf".
+ * debug.h: parenthesize macro arguments.
-Sun May 26 21:31:46 2013 Koichi Sasada <ko1@atdot.net>
+Mon Jan 17 21:40:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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().
+ * ruby.c (process_options): revert r30549.
- * include/ruby/intern.h: declare rb_hash_set_ifnone(hash, ifnone).
+Sun Jan 16 20:55:45 2011 Tanaka Akira <akr@fsij.org>
- * marshal.c (r_object0): use RHASH_SET_IFNONE().
+ * vsnprintf.c: parenthesize macro arguments.
- * ext/openssl/ossl_x509name.c (Init_ossl_x509name): ditto.
+Sat Jan 15 11:57:30 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat May 25 23:22:38 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+ * configure.in (warnflags): add -Werror=implicit-function-declaration
+ if available.
- * 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.
+ * lib/mkmf.rb (init_mkmf): ignore warnings in mkmf tests.
-Sat May 25 21:29:34 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * test/mkmf/base.rb (setup, teardown): restore config values.
- * 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
+ * test/mkmf/test_flags.rb: split from test_find_executable.rb.
-Sat May 25 18:46:23 2013 Yusuke Endoh <mame@tsg.ne.jp>
+Sat Jan 15 10:04:14 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * ruby.c (process_options): autoload rubygems.
-Sat May 25 18:08:06 2013 Yusuke Endoh <mame@tsg.ne.jp>
+ * tool/compile_prelude.rb (Prelude#initialize): ignore empty
+ preludes.
- * 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.
+ * ruby.c (ruby_init_prelude): get rid of global namespace
+ pollution.
-Sat May 25 17:06:25 2013 Koichi Sasada <ko1@atdot.net>
+Sat Jan 15 09:42:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (after_gc_sweep): reduce full GC timing.
+ * include/ruby/io.h: missing prototypes.
-Sat May 25 11:28:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Jan 14 23:25:55 2011 Tanaka Akira <akr@fsij.org>
- * variable.c (set_const_visibility): return without clearing method
- cache if no arguments.
+ * vm_method.c: parenthesize macro arguments.
- * vm_method.c (set_method_visibility): ditto.
+Fri Jan 14 15:32:29 2011 Shugo Maeda <shugo@ruby-lang.org>
-Sat May 25 11:27:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/net/imap/test_imap.rb: call neither logout nor disconnect
+ unless connected. patch by Kazuhiro NISHIYAMA. [ruby-dev:42860]
- * vm_method.c (set_method_visibility): quote unprintable method name.
+Fri Jan 14 14:56:57 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Sat May 25 11:24:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/net/imap.rb: use bytesize for binary strings.
+ patched by Yoshimasa Niwa. [ruby-core:34222]
- * eval.c (rb_frame_callee): returns the called name of the current
- frame, not the previous frame.
+Fri Jan 14 14:01:12 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * pack.c (pack_unpack): the resulted string of unpack('M') must have
+ ASCII-8BIT encoding (and ENC_CODERANGE_VALID). [ruby-core:34482]
- * variable.c (set_const_visibility): use the called name.
+Fri Jan 14 13:38:58 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Sat May 25 08:58:23 2013 Nobuyoshi Nakada <nobu@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
- * string.c (rb_str_quote_unprintable): check if argument is a string.
+Fri Jan 14 11:36:25 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri May 24 19:32:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+ * configure.in, win32/Makefile.sub (RUNRUBY): require path should
+ include "." because rbconfig.rb is there.
- * variable.c (set_const_visibility): use rb_frame_this_func() instead
- of rb_frame_callee() for getting the name of the called method
+Fri Jan 14 10:40:11 2011 Ryan Davis <ryan@lust.local>
- * test/ruby/test_module.rb: add test for private_constant with no args
+ * 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 May 24 18:53:10 2013 Koichi Sasada <ko1@atdot.net>
+Fri Jan 14 07:30:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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!)
+ * io.c (argf_next_argv): go advance when the next file cannot be
+ read. [ruby-core:34446]
-Fri May 24 17:07:00 2013 Charlie Somerville <charliesome@ruby-lang.org>
+Thu Jan 13 20:49:19 2011 Tanaka Akira <akr@fsij.org>
- * intern.h: remove dangling rb_class_init_copy declaration
- [ruby-core:55120] [Bug #8434]
+ * vm_insnhelper.c: parenthesize macro arguments.
-Fri May 24 16:31:23 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Jan 13 13:21:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * ext/strscan/strscan.c (strscan_aref): raise error if given
- name reference is not found.
+ * vm_dump.c: delete dashes to make lines 80 chars, Patched by
+ Shota Fukumori (sora_h). [Bug #4275] [ruby-dev:43021]
-Fri May 24 15:48:18 2013 Koichi Sasada <ko1@atdot.net>
+Thu Jan 13 13:21:00 2011 Kenta Murata <mrkn@mrkn.jp>
- * 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.
+ * vm_dump.c: fix misspelling of CrashReporter, Patched by Shota
+ Fukumori (sora_h). [Bug #4275] [ruby-dev:43021]
- * gc.c (after_gc_sweep): remove TODO comments.
+Thu Jan 13 06:27:29 2011 Ryan Davis <ryand-ruby@zenspider.com>
-Fri May 24 11:04:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * error.c: Exception#to_s should actually call to_s.
- * 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]
+Thu Jan 13 00:32:54 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Fri May 24 02:57:17 2013 Koichi Sasada <ko1@atdot.net>
+ * 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
- * object.c (rb_obj_clone): should not propagate OLDGEN status.
- This propagation had caused WB miss for class.
+Thu Jan 13 00:06:38 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu May 23 17:35:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (rb_f_syscall): Add warning messages. [ruby-core:34062]
- * 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 Jan 13 00:00:07 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Thu May 23 17:21:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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]
- * gc.c (gc_profile_dump_on): revert r40898. ok to show the record
- accumulating while lazy_sweep().
+Wed Jan 12 23:55:48 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed May 22 16:50:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (rb_f_syscall): Add 64bit Linux support. Some syscall takes
+ long type arguments.
- * 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 Jan 12 19:37:10 2011 Tanaka Akira <akr@fsij.org>
-Wed May 22 15:18:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * vm_dump.c: parenthesize macro arguments.
- * 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]
+Wed Jan 12 19:28:23 2011 Tanaka Akira <akr@fsij.org>
- * win32/win32.c (setup_overlapped, finish_overlapped): extract from
- rb_w32_read() and rb_w32_write().
+ * 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 May 22 14:19:56 2013 Koichi Sasada <ko1@atdot.net>
+Wed Jan 12 19:09:29 2011 Tanaka Akira <akr@fsij.org>
- * gc.c (gc_prepare_free_objects, rest_sweep, lazy_sweep): fix position
- of `during_gc' setting.
+ * enum.c (sort_by_i): reenter check more strictly.
+ (sort_by_cmp): ditto.
+ [ruby-dev:43003] reported by Usaku NAKAMURA.
-Wed May 22 07:36:08 2013 Koichi Sasada <ko1@atdot.net>
+Wed Jan 12 16:25:12 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * 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.
+ * lib/net/http.rb (Net::HTTP#connect): makes it timeout during
+ SSL handshake too. [ruby-core:34203]
+ Patch by Marc Slemko.
- * gc.c (gc_prepare_free_objects): use `garbage_collect_body()'.
+ * test/net/http/test_http.rb (TestNetHTTP_v1_2#test_timeout_during_HTTP_session):
+ test for [ruby-core:34203]
- * gc.c (slot_sweep, before_gc_sweep, after_gc_sweep): add logging code.
+ * test/net/http/test_https.rb (TestNetHTTPS#test_timeout_during_SSL_handshake):
+ ditto.
-Tue May 21 22:47:06 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Jan 12 16:24:53 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * ext/strscan/strscan.c (strscan_aref): support named captures.
- patched by Konstantin Haase [ruby-core:54664] [Feature #8343]
+ * ext/readline/extconf.rb: new checks for RL_PROMPT_START_IGNORE
+ and RL_PROMPT_END_IGNORE. [ruby-core:34331]
-Tue May 21 21:48:44 2013 Kouhei Sutou <kou@cozmixng.org>
+ * 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.
- * test/ruby/test_dir_m17n.rb (TestDir_M17N#test_entries_compose):
- Use #each instead of #map just for iteration.
+Wed Jan 12 15:53:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue May 21 19:57:22 2013 Akinori MUSHA <knu@iDaemons.org>
+ * README.EXT.ja (rb_ensure): typo.
- * ext/digest/lib/digest.rb (Digest::Class.file): Take optional
- arguments that are passed to the constructor of the digest
- class.
+Wed Jan 12 11:33:46 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Tue May 21 17:21:12 2013 Koichi Sasada <ko1@atdot.net>
+ * addr2line.c: OpenBSD uses the elf_abi.h header file instead of the
+ elf.h header file. patched by Jeremy Evans [ruby-core:34384]
- * gc.c: remove gc_profile_record::is_marked. always true.
+Wed Jan 12 03:59:36 2011 NARUSE, Yui <naruse@ruby-lang.org>
-Tue May 21 17:13:40 2013 Koichi Sasada <ko1@atdot.net>
+ * test/webrick/test_cgi.rb: Removes usage of deprecated
+ :RequestHandler option.
+ patched by Peter Weldon [ruby-core:34010]
- * gc.c: fix to collect additional information for GC::Profiler.
- * major/minor GC
- * trigger reason of GC
+ * test/webrick/test_httpproxy.rb: ditto.
- * gc.c (gc_profile_dump_on): change reporting format with
- added information.
+ * test/webrick/test_httpserver.rb: Add a test of the deprecation
+ behaviour.
- * gc.c (gc_profile_record_get): return added information by
- :GC_FLAGS => array.
+Wed Jan 12 08:37:07 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue May 21 16:45:31 2013 Koichi Sasada <ko1@atdot.net>
+ * hash.c (hash_i): return different values for inverse hash.
+ [ruby-core:34334]
- * 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 Jan 11 20:32:59 2011 Tanaka Akira <akr@fsij.org>
-Tue May 21 16:29:09 2013 Koichi Sasada <ko1@atdot.net>
+ * variable.c: parenthesize macro arguments.
- * 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.
+Tue Jan 11 13:06:38 2011 NAKAMURA Usaku <usa@ruby-lang.org>
- * tool/rdocbench.rb: added for `rdoc-bench'.
+ * array.c (rb_ary_resize): should care of embeded array when extending
+ the array.
-Tue May 21 16:25:05 2013 Koichi Sasada <ko1@atdot.net>
+ * array.c (rb_ary_resize): need to set capa when changing the real
+ size of the array.
+ these are latent bugs.
- * gc.c (gc_profile_dump_on): `count' should be (int) because it
- can be negative number.
- And use pointer for `record' (don't copy).
+Mon Jan 10 22:46:43 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue May 21 03:11:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * include/ruby/defines.h (CASEFOLD_FILESYSTEM): HFS+ is case
+ insensitive.
- * dir.c (dir_each): compose HFS file names from
- UTF8-MAC. [ruby-core:48745] [Bug #7267]
+ * load.c (loaded_feature_path, rb_feature_p, load_lock): on a
+ case-insensitive filesystem, loaded features search should
+ ignore case. [ruby-core:34297]
-Tue May 21 03:08:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jan 10 21:34:12 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/envutil.rb (assert_separately): require envutil in the
- child process too.
+ * common.mk (showflags): show LD commands.
-Tue May 21 03:07:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Jan 10 14:32:55 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (rb_str_conv_enc_opts): should infect.
+ * test/ruby/test_method.rb (TestMethod#test_define_method): method
+ transplanting between class and module is impossible.
-Mon May 20 22:24:45 2013 Akinori MUSHA <knu@iDaemons.org>
+Mon Jan 10 13:51:17 2011 Nobuyoshi Nakada <nobu@ruby-lang.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.
+ * misc/rdoc-mode.el (rdoc-mode): show trailing whitespace.
-Mon May 20 22:00:31 2013 Zachary Scott <zachary@zacharyscott.net>
+Mon Jan 10 11:22:02 2011 Tanaka Akira <akr@fsij.org>
- * lib/e2mmap.rb: Format of E2MM documentation
+ * util.c: parenthesize macro arguments.
-Mon May 20 21:41:15 2013 Zachary Scott <zachary@zacharyscott.net>
+Mon Jan 10 07:41:31 2011 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * ext/extmk.rb: nodoc this file
+ * misc/README: mention rdoc-mode.el and ruby-style.el.
-Mon May 20 20:43:32 2013 Zachary Scott <zachary@zacharyscott.net>
+Sun Jan 9 20:37:21 2011 Tanaka Akira <akr@fsij.org>
- * lib/cmath.rb: Remove duplicate RDoc heading from overview
+ * transcode.c: parenthesize macro arguments.
-Mon May 20 20:36:19 2013 Zachary Scott <zachary@zacharyscott.net>
+Sun Jan 9 16:31:53 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * lib/securerandom.rb: Update position of overview for RDoc
+ * io.c (Kernel.#syscall): implemented on LP64/LLP64 environments too.
+ also uses __syscall if available for *BSD on 64bit architecture.
+ [ruby-core:34062]
-Mon May 20 19:33:55 2013 Benoit Daloze <eregontp@gmail.com>
+Sun Jan 9 16:31:34 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * math.c: improve and fix documentation of sin, tan and log
+ * lib/irb/locale.rb (IRB::Locale::LOCALE_NAME_RE):
+ some platform has a locale without territory but with
+ encoding.
+ (#each_sub_locale): ditto.
-Mon May 20 19:31:49 2013 Benoit Daloze <eregontp@gmail.com>
+Sun Jan 9 14:47:50 2011 TAKAO Kouji <kouji@takao7.net>
- * lib/logger.rb (Logger::Application): show namespace in documentation
+ * ext/readline/readline.c: apply a patch from Nobuyoshi Nakada.
+ fixed #3616 [ruby-core:31484] IRB + readline incorrectly counts
+ non-printing characters in prompt
-Mon May 20 11:50:12 2013 Zachary Scott <zachary@zacharyscott.net>
+Sat Jan 8 21:47:26 2011 Tanaka Akira <akr@fsij.org>
- * lib/pp.rb: Revert part of r40834 and nodoc PP::ObjectMixin
- [ruby-core:55068]
+ * enum.c (enum_sort_by): use rb_ary_resize.
+ (ary_cutoff): removed.
-Mon May 20 10:40:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Jan 8 21:24:17 2011 Tanaka Akira <akr@fsij.org>
- * lib/webrick/htmlutils.rb (WEBrick::HTMLUtils#escape): replace HTML
- meta chars even in non-ascii string. [Bug #8425] [ruby-core:55052]
+ * pack.c (swapf): compilation condition simplified.
+ (swapd): ditto.
- * lib/webrick/httputils.rb (WEBrick::HTTPUtils#{_escape,_unescape}):
- fix %-escape encodings. [Bug #8425] [ruby-core:55052]
+Sat Jan 8 20:51:25 2011 Tanaka Akira <akr@fsij.org>
- * lib/webrick/httpservlet/filehandler.rb (set_dir_list): revert r20152
- partially and fix misuse of bytesize and regexp repetition operator.
+ * pack.c (swapd): remove duplicated code.
-Mon May 20 08:03:51 2013 Zachary Scott <zachary@zacharyscott.net>
+Sat Jan 8 19:28:55 2011 Tanaka Akira <akr@fsij.org>
- * lib/profiler.rb: Document Profiler__ methods
+ * thread.c: parenthesize macro arguments.
-Mon May 20 08:02:13 2013 Zachary Scott <zachary@zacharyscott.net>
+Fri Jan 7 23:07:40 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/tempfile.rb: nodoc Tempfile#inspect
+ * lib/mkmf.rb (configuration): backref needs to capture.
-Mon May 20 07:48:24 2013 Zachary Scott <zachary@zacharyscott.net>
+Fri Jan 7 21:57:22 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/stringio/stringio.c: Correct position of method rdoc
+ * misc/ruby-mode.el (ruby-mode-variables), misc/ruby-style.el:
+ show trailing whitespace.
-Mon May 20 07:27:41 2013 Zachary Scott <zachary@zacharyscott.net>
+ * misc/ruby-mode.el (ruby-font-lock-syntactic-keywords): highlight
+ regexp after open bracket. [ruby-core:34183]
- * math.c: RDoc formatting of Math core docs with domains and codomains
- Patch by @eLobato [Fixes GH-309]
+Fri Jan 7 00:37:35 2011 Tanaka Akira <akr@fsij.org>
-Mon May 20 05:58:12 2013 Zachary Scott <zachary@zacharyscott.net>
+ * string.c: parenthesize macro arguments.
- * ext/bigdecimal/bigdecimal.c: Formatting for BigMath [Fixes GH-306]
- Based on a patch by @eLobato.
- * ext/bigdecimal/lib/bigdecimal/math.rb: ditto
+Thu Jan 6 22:42:02 2011 Yukihiro Matsumoto <matz@ruby-lang.org>
-Mon May 20 04:56:59 2013 Zachary Scott <zachary@zacharyscott.net>
+ * 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.
- * lib/forwardable.rb: Forwardable examples in overview were broken
- Based on patch by @joem [Fixes GH-303] [Bug #8392]
+Thu Jan 6 20:55:49 2011 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon May 20 03:35:26 2013 Zachary Scott <zachary@zacharyscott.net>
+ * lib/mkmf.rb (create_makefile): ignore rest from first dot from
+ TARGET to generate init function name.
+ this is followup of r30464.
- * lib/optparse.rb: nodoc OptionParser::Version and SPLAT_PROC
+Thu Jan 6 11:27:01 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Mon May 20 03:16:52 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/psych/lib/psych/json/tree_builder.rb (start_mapping): tags
+ should not be included in JSON mapping
- * lib/pp.rb: Document PP::ObjectMixin [Fixes GH-312]
+Thu Jan 6 09:23:33 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Sun May 19 23:52:22 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+ * lib/net/protocol.rb (eof?): BufferedIO should proxy eof? to the
+ underlying IO object.
- * test/webrick/test_htmlutils.rb: add test for WEBrick::HTMLUtils.
+Thu Jan 6 09:12:31 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Sun May 19 23:12:07 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+ * lib/mkmf.rb (configuration): fixing gsub when multiple error flags
+ are passed to GCC.
- * encoding.c: document fix, change default script encoding.
- patched by @windwiny [Fixes GH-310]
+Thu Jan 6 05:25:49 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun May 19 17:29:07 2013 Akinori MUSHA <knu@iDaemons.org>
+ * array.c (rb_ary_modify): export.
- * lib/set.rb (Set#delete_if, Set#keep_if): Add comments.
+Thu Jan 6 05:14:41 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun May 19 11:37:36 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+ * ext/stringio/stringio.c (get_strio, strio_set_string)
+ (strio_reopen): check if frozen. [ruby-core:33648]
- * ext/fiddle/extconf.rb: ignore rc version of libffi to fix build failure.
+Thu Jan 6 05:10:58 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun May 19 10:38:50 2013 Akinori MUSHA <knu@iDaemons.org>
+ * array.c (rb_ary_resize): new utility function. [ruby-dev:42912]
- * misc/ruby-electric.el (ruby-electric-delete-backward-char): Use
- delete-char instead of delete-backward-char, which is an
- interactive function.
+Thu Jan 6 05:03:26 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun May 19 03:59:29 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * dln.c (init_funcname_len): ignore rest from first dot.
+ [ruby-dev:41774]
- * string.c (str_scrub0): added for refactoring.
+Thu Jan 6 02:55:48 2011 Aaron Patterson <aaron@tenderlovemaking.com>
-Sun May 19 03:48:26 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: use YAML 1.0 output
+ format for serializing nil values. Thanks Eric Hodel!
- * lib/uri/common.rb (URI.decode_www_form): scrub string if decoded
- bytes are invalid for the encoding.
+ * test/psych/test_nil.rb: test for nil values
-Sun May 19 02:46:32 2013 Akinori MUSHA <knu@iDaemons.org>
+Wed Jan 5 14:21:34 2011 Mark Dodwell <hi@mkdynamic.co.uk>
- * 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.
+ * string.c: fix rdoc typo.
+ https://github.com/shyouhei/ruby/pull/3
-Sun May 19 02:33:09 2013 Akinori MUSHA <knu@iDaemons.org>
+Wed Jan 5 14:06:01 2011 NAKAMURA Usaku <usa@ruby-lang.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.
+ * test/rdoc/test_rdoc_options.rb (TestRDocOptions#test_check_files):
+ skip on Windows because chmod 0 doesn't mean unreadable by owner.
- * misc/ruby-electric.el (ruby-electric-delete-backward-char):
- Introduce electric DEL that deletes what the previous electric
- command has input.
+Wed Jan 5 13:56:54 2011 Akinori MUSHA <knu@iDaemons.org>
- * misc/ruby-electric.el (ruby-electric-matching-char): Make
- electric quotes work again at the end of buffer.
+ * lib/net/http.rb (Net::HTTP#get): A header hash given should not
+ be modified.
-Sun May 19 01:39:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Jan 5 12:10:08 2011 Aaron Patterson <aaron@tenderlovemaking.com>
- * configure.in (setjmp-type): check if setjmpex() is really available.
- workaround for i686-w64-mingw32 which declares it but lacks its
- definition.
+ * 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]
- * include/ruby/defines.h: include setjmpex.h only if also setjmpex()
- is available.
+Sat Jan 1 17:02:50 2011 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-Sat May 18 23:57:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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.
- * configure.in (setjmp-type): use setjmpex() on w64-mingw32 to get rid
- of -Wclobbered warnings.
+Sat Jan 1 11:44:42 2011 Tanaka Akira <akr@fsij.org>
- * include/ruby/defines.h: include setjmpex.h here becase setjmp.h is
- included from win32.h via intrin.h, winnt.h, and so on.
+ * strftime.c: parenthesize macro arguments.
-Sat May 18 20:28:12 2013 Tanaka Akira <akr@fsij.org>
+Sat Jan 1 11:10:29 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/mkconstants.rb (INTEGER2NUM): Make less comparisons.
+ * ext/zlib/zlib.c: take care of platforms where long is bigger
+ than int.
-Sat May 18 20:15:28 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Sat Jan 1 11:03:58 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (str_scrub_bang): add String#scrub!. [Feature #8414]
+ * NEWS (optparse): shell completion support.
-Sat May 18 16:59:52 2013 Tanaka Akira <akr@fsij.org>
+ * misc/README (rb_optparse.{bash,zsh}): for shell completion.
- * ext/socket/mkconstants.rb (INTEGER2NUM): Renamed from INTEGER2VALUE.
+ * include/ruby/intern.h (VALUE rb_ary_print_on): I have never seen
+ this function anywhere.
-Sat May 18 16:57:58 2013 Tanaka Akira <akr@fsij.org>
+Sat Jan 1 04:20:11 2011 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/socket/mkconstants.rb (INTEGER2VALUE): Suppress a warning:
- comparison between signed and unsigned integer expressions
+ * 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]
-Sat May 18 16:38:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Dec 31 12:02:06 2010 Tanaka Akira <akr@fsij.org>
- * compile.c (iseq_compile_each): forward anonymous and first keyword
- rest argument one. [ruby-core:55033] [Bug #8416].
+ * enum.c (enum_sort_by): use less temporary objects.
-Sat May 18 15:49:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Dec 31 11:46:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_core.h (rb_vm_tag): move jmpbuf between tag and prev so ensure to
- be accessible.
+ * configure.in (warnflags), lib/mkmf.rb (configuration): turn
+ warnings into errors only for bundled extensions.
+ [ruby-core:33815]
-Sat May 18 11:05:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Dec 31 11:15:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * enumerator.c (inspect_enumerator): use VALUE instead of mere char*
- by using rb_sprintf() and rb_id2str().
+ * ext/zlib/zlib.c (sizeof): zlib.h mistakenly assumes the result
+ of sizeof to be int, not size_t.
- * enumerator.c (append_method): extract from inspect_enumerator().
+Fri Dec 31 10:27:34 2010 Tanaka Akira <akr@fsij.org>
-Sat May 18 09:00:32 2013 Tanaka Akira <akr@fsij.org>
+ * st.c: parenthesize macro arguments.
- * ext/socket/mkconstants.rb (INTEGER2VALUE): Use LONG2FIX if possible.
+Fri Dec 31 03:23:26 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sat May 18 00:38:47 2013 Tanaka Akira <akr@fsij.org>
+ * vsnprintf.c (BSD__uqtoa): Fix overflow when long != quad_t.
+ patched by Peter Weldon <peter.weldon AT null.net>
+ [ruby-core:33985]
- * ext/socket/mkconstants.rb: Convert integer constants bigger than int
- correctly.
+Fri Dec 31 03:00:34 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Fri May 17 22:02:15 2013 Tanaka Akira <akr@fsij.org>
+ * Makefile.in: remove unnecessary semicolons.
- * ext/socket/ifaddr.c: Use unsigned LONG_LONG to represent flags
- because SunOS 5.11 (OpenIndiana) defines ifa_flags as uint64_t.
+Thu Dec 30 23:09:47 2010 wanabe <s.wanabe@gmail.com>
-Fri May 17 21:47:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * vm.c (vm_define_method): guard iseq from GC while method definition.
+ [ruby-dev:42832]
- * cont.c: Typo in constant MAX_MACHINE_STACK_CACHE from '..MAHINE..'
- patch by @schmurfy [Fixes GH-307]
+Thu Dec 30 20:18:32 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri May 17 19:18:24 2013 Akinori MUSHA <knu@iDaemons.org>
+ * win32/Makefile.sub: ditto.
- * 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 ?\".
+Thu Dec 30 20:57:09 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri May 17 18:06:15 2013 Tanaka Akira <akr@fsij.org>
+ * Makefile.in: Check V=1 argument if run "make clean" or similar.
- * 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.
+Thu Dec 30 20:41:50 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Fri May 17 17:34:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * Makefile.in: Kill ugly line continuation.
- * gc.c (rb_gc_guarded_ptr): unoptimize on other compilers than gcc and
- msvc.
+Thu Dec 30 11:49:40 2010 Tanaka Akira <akr@fsij.org>
-Fri May 17 11:06:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * sprintf.c: parenthesize macro arguments.
- * eval_intern.h (TH_PUSH_TAG): ensure jmpbuf to be accessible before
- pushing tag to get rid of unaccessible tag by stack overflow.
+Wed Dec 29 21:20:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu May 16 17:15:32 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * io.c (maygvl_copy_stream_wait_readwrite): define if USE_SENDFILE
- * 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
+Wed Dec 29 20:37:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu May 16 16:19:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/extmk.rb: strip current directory prefix.
- * win32/Makefile.sub (verconf.in): no longer used.
+ * enc/depend (clean): remove name2ctype.h when out-of-place build.
- * win32/Makefile.sub (config.status): fix typo.
+ * win32/Makefile.sub (clean-enc): pass V to inferior make.
- * configure.in, template/verconf.h.in (RUBY_EXEC_PREFIX): fix for
- default prefix.
+Wed Dec 29 18:23:46 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu May 16 13:12:27 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * re.c (rb_reg_expr_str): need to escape if the coderange is invalid.
- * template/verconf.h.in: generate verconf.h from the template and
- rbconfig.rb.
+Wed Dec 29 10:06:51 2010 Tanaka Akira <akr@fsij.org>
-Thu May 16 05:47:18 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * signal.c: parenthesize macro arguments.
- * ext/psych/lib/psych/visitors/yaml_tree.rb: fix syntax error.
- Thanks @spastorino! [ruby-core:55011]
+Wed Dec 29 07:22:15 2010 Eric Hodel <drbrain@segment7.net>
-Thu May 16 03:05:45 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/rake/rdoctask.rb: Deprecate in favor of rdoc/task.
- * gc.c (rb_node_newnode): use newobj_of() instead of rb_newobj().
+Wed Dec 29 07:07:06 2010 Eric Hodel <drbrain@segment7.net>
-Thu May 16 02:03:39 2013 Tanaka Akira <akr@fsij.org>
+ * lib/rdoc: Import RDoc 3.1
- * ext/socket/depend: Add a dependency for ifaddr.o.
+Tue Dec 28 18:36:38 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu May 16 01:44:45 2013 Nobuyoshi Nakada <nobu@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.
- * common.mk (verconf.h): $< cannot be used in explicit rules with
- nmake.
+ * parse.y (compile_error): use above function.
+ [ruby-core:33951] (#4217)
- * win32/Makefile.sub (CONFIG_H): create verconf.in instead of
- verconf.h.
+Tue Dec 28 07:37:38 2010 Tanaka Akira <akr@fsij.org>
-Thu May 16 01:25:07 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * ruby.c: parenthesize macro arguments.
- * ext/psych/lib/psych/visitors/yaml_tree.rb: only emit warnings when
- -w is enabled.
+Tue Dec 28 07:17:11 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Wed May 15 18:58:17 2013 Koichi Sasada <ko1@atdot.net>
+ * NEWS: add ARGF.write and so on.
- * 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.
+Tue Dec 28 07:12:38 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * gc.c (rb_data_object_alloc, rb_data_typed_object_alloc):
- use newobj_of().
+ * NEWS: add new magic-comment. (warn-indent) [ruby-core:25442]
-Wed May 15 17:55:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Dec 28 04:32:37 2010 Aaron Patterson <aaron@tenderlovemaking.com>
- * configure.in (RUBY_PLATFORM): move to config.h as needed by
- version.c.
+ * ext/fiddle/extconf.rb: check for windows.h while building fiddle.
+ Thanks Jon Forums! [ruby-core:33923]
-Wed May 15 17:04:11 2013 Koichi Sasada <ko1@atdot.net>
+Tue Dec 28 01:45:12 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * gc.c: add an additional RGENGC_PROFILE mode (2).
- Profiling result can be check by GC.stat.
+ * NEWS: Add Zlib.deflate and Zlib.inflate.
+ [ruby-dev:42833]
- * gc.c (type_name): separate from obj_type_name().
+Mon Dec 27 21:22:33 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed May 15 16:58:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/configure.bat: Remove obsoleted coding rule. Now, we
+ don't support to build on Windows 95/98 and Me.
- * configure.in: save configured load path values into verconf.in.
+Mon Dec 27 18:27:13 2010 Tanaka Akira <akr@fsij.org>
- * common.mk (verconf.h): create from verconf.in with shvar_to_cpp.rb.
+ * re.c: parenthesize macro arguments.
- * tool/shvar_to_cpp.rb: turn shell variables into C macros.
- [Bug #7959]
+Mon Dec 27 15:22:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * loadpath.c: split load path staffs from version.c.
+ * win32/README.win32: note to need NT based OS to build ruby.
- * dmyloadpath.c: miniruby has no builtin load paths, so verconf.h is
- not needed.
+Mon Dec 27 12:14:46 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed May 15 03:56:09 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * common.mk (EXTMK_ARGS): specify to pass macro V, because nmake
+ doesn't pass it via MAKEFLAGS.
- * ext/psych/lib/psych/visitors/yaml_tree.rb: adding backwards
- compatible YAMLTree.new method
+Mon Dec 27 10:33:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Wed May 15 02:22:16 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * ext/zlib/zlib.c (Init_zlib): Add Zlib.deflate and Zlib.inflate.
+ [ruby-dev:42833]
- * 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
+Mon Dec 27 07:38:07 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Wed May 15 02:06:35 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * misc/rb_optparse.zsh: add compdef for generator.
- * test/psych/helper.rb: envutil is not available outside Ruby, so
- port the functions from envutil to the test helper.
+Mon Dec 27 07:32:07 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * test/psych/test_deprecated.rb: ditto
+ * lib/optparse.rb (OptionParser#compsys): escape brackets too.
+ [ruby-dev:42754]
- * test/psych/test_encoding.rb: ditto
+Mon Dec 27 01:30:08 2010 Tanaka Akira <akr@fsij.org>
-Wed May 15 00:42:54 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/socket/mkconstants.rb: add IF_NAMESIZE.
+ add a default for INET6_ADDRSTRLEN.
- * 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)
+Sun Dec 26 23:49:47 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Tue May 14 23:43:05 2013 Tanaka Akira <akr@fsij.org>
+ * win32/Makefile.sub: suppress a strange error message when RMALL
+ found no such file.
+ * win32/rmall.bat: new.
- * ext/socket/.document: Add ifaddr.c.
+Sun Dec 26 21:23:23 2010 <kosaki.motohiro@gmail.com>
-Tue May 14 23:24:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/Makefile.sub: fix 'nmake clean-enc' breakage since r28322.
- * ext/socket/extconf.rb: check for if_nametoindex() for
- i686-w64-mingw32, and check for declarations of if_indextoname() and
- if_nametoindex().
+Sun Dec 26 22:25:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/ifaddr.c (ifaddr_ifindex): not-implement unless
- if_nametoindex() is available.
+ * ext/ripper/depend (ripper.y): fix messages with nmake.
+ [ruby-dev:42896]
- * ext/socket/rubysocket.h: declare if_indextoname() and
- if_nametoindex() if available but not declared.
+Sun Dec 26 22:24:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue May 14 19:58:17 2013 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * file.c (file_expand_path): get rid of warnings caused by
+ -Wdeclaration-after-statement on cygwin.
- * 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.
+Sun Dec 26 20:28:34 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * process.c (before_exec): add small comment.
-Tue May 14 14:51:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Dec 26 20:52:21 2010 Tanaka Akira <akr@fsij.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.
+ * ext/socket/mkconstants.rb: define INET_ADDRSTRLEN as 16 if not
+ available. fix compilation error on mswin32-60. reported by nobu.
-Tue May 14 12:21:28 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Sun Dec 26 19:37:37 2010 Tanaka Akira <akr@fsij.org>
- * win32/win32.c (NET_LUID): mingw may have NET_LUID and not defined
- _IFDEF_.
+ * ext/socket/option.c: define IFNAMSIZ if not available.
+ fix compilation error on mingw32. reported by nobu.
-Tue May 14 03:33:17 2013 Koichi Sasada <ko1@atdot.net>
+Sun Dec 26 12:16:29 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * string.c (rb_str_new_frozen): remove debug print.
+ * lib/rdoc/ri/paths.rb (RDoc::RI::Paths::HOMEDIR): no exception if
+ HOME is not set. [ruby-core:33867]
-Tue May 14 03:22:51 2013 Koichi Sasada <ko1@atdot.net>
+Sun Dec 26 11:39:11 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * include/ruby/ruby.h: enable to generate write barrier protected
- arrays (T_ARRAY).
+ * parse.y (stmt): missing ripper rule. i.e., `a::B ||= c 1'.
+ http://twitter.com/#!/wannabe53/status/18797576396472321
+ http://twitter.com/#!/wannabe53/status/18798416150663168
-Tue May 14 03:21:42 2013 Koichi Sasada <ko1@atdot.net>
+Sun Dec 26 11:15:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * include/ruby/ruby.h: enable to generate write barrier protected
- strings (T_STRING).
+ * test/with_different_ofs.rb (DifferentOFS): should not affect
+ original classes.
-Tue May 14 03:19:59 2013 Koichi Sasada <ko1@atdot.net>
+Sun Dec 26 09:35:07 2010 Tanaka Akira <akr@fsij.org>
- * include/ruby/ruby.h: enable to generate write barrier protected
- objects (T_OBJECT).
+ * rational.c: parenthesize macro arguments.
-Tue May 14 03:17:15 2013 Koichi Sasada <ko1@atdot.net>
+Sun Dec 26 09:22:19 2010 Tanaka Akira <akr@fsij.org>
- * include/ruby/ruby.h: enable to generate write barrier protected
- objects for numeric types (Float, Complex, Rational, Bignum).
+ * 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>".
-Tue May 14 03:10:59 2013 Koichi Sasada <ko1@atdot.net>
+Sun Dec 26 04:31:15 2010 Luis Lavena <luislavena@gmail.com>
- * include/ruby/ruby.h: enable RGENGC (USE_RGENGC)
- but no type creates write protected (sunny) objects
- (RGENGC_WB_PROTECTED_* == 0).
+ * ext/dl/win32/registry.rb: Corrected RegCreateKeyExA signature.
+ Patch by Rafal Michalski [ruby-core:33874] [Ruby 1.9-Bug#4203]
-Tue May 14 02:47:30 2013 Koichi Sasada <ko1@atdot.net>
+Sun Dec 26 02:31:58 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * gc.c: support RGENGC. [ruby-trunk - Feature #8339]
- See this ticket about RGENGC.
+ * io.c (advice_arg_check): Change argument check.
+ Now, an unsupported advice makes NotImplementedError.
+ [ruby-dev:42887] [Ruby 1.9-Feature#4204]
- * 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.
+Sun Dec 26 03:00:53 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * include/ruby/ruby.h: disable RGENGC by default (USE_RGENGC == 0).
+ * ext/socket/extconf.rb: Fix build error which was introduced r30372.
- * array.c: add write barriers for T_ARRAY and generate sunny objects.
+Sun Dec 26 01:37:10 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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.
+ * ext/socket/extconf.rb: check the existence of if_indextoname().
- * bignum.c, marshal.c, random.c: generate T_BIGNUM sunny objects.
+ * ext/socket/option.c: yesterday's akr's commits destroyed the build of
+ some unrelated platforms (such as Windows).
- * complex.c, include/ruby/ruby.h: add write barriers for T_COMPLEX
- and generate sunny objects.
+Sat Dec 25 23:29:11 2010 Tanaka Akira <akr@fsij.org>
- * rational.c (nurat_s_new_internal), include/ruby/ruby.h: add write
- barriers for T_RATIONAL and generate sunny objects.
+ * 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>".
- * internal.h: add write barriers for RBasic::klass.
+ * ext/socket/extconf.rb: check struct ip_mreq and struct ip_mreqn.
- * numeric.c (rb_float_new_in_heap): generate sunny T_FLOAT objects.
+Sat Dec 25 22:49:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * object.c (rb_class_allocate_instance), range.c:
- generate sunny T_OBJECT objects.
+ * test/csv: DifferentOFS needs to be include in each classes.
- * string.c: add write barriers for T_STRING and generate sunny objects.
+ * test/digest/test_digest_extend.rb (TestDigestExtend#setup):
+ should not depend on the result of previous tests
- * variable.c: add write barriers for ivars.
+ * test/with_different_ofs.rb (DifferentOFS::WithDifferentOFS): give
+ name.
- * vm_insnhelper.c (vm_setivar): ditto.
+ * test/with_different_ofs.rb (DifferentOFS): test suite for test
+ suites affected by $,.
- * include/ruby/ruby.h, debug.c: use two flags
- FL_WB_PROTECTED and FL_OLDGEN.
+ * test/digest/test_digest_extend.rb (TestDigestExtend): should not
+ assume $, invariant.
- * node.h (NODE_FL_CREF_PUSHED_BY_EVAL, NODE_FL_CREF_OMOD_SHARED):
- move flag bits.
+ * test/csv/test_data_converters.rb, test/csv/test_table.rb: don't
+ call setup within tests.
-Tue May 14 01:54:48 2013 Koichi Sasada <ko1@atdot.net>
+Sat Dec 25 20:01:40 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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.
+ * io.c (pipe_open): Added rb_thread_atfork(). We must reinitialize
+ GVL at new process creation.
- * gc.c (after_gc_sweep): use objspace_live_num() instead of removed
- rb_objspace_t::marked_num.
+Sat Dec 25 18:26:55 2010 Tanaka Akira <akr@fsij.org>
- * gc.c (gc_mark_ptr, gc_marks): remove rb_objspace_t::marked_num code.
+ * 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>".
- * 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.
+ * ext/socket/extconf.rb: check struct ipv6_mreq.
- * gc.c (lazy_sweep): call after_gc_sweep() if there are no sweep_able entry.
+Sat Dec 25 18:04:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c (rest_sweep, gc_prepare_free_objects): remove after_gc_sweep() call.
+ * lib/csv.rb (CSV.foreach): 'rb' mode is defaulted in open.
-Tue May 14 01:50:41 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/csv.rb (CSV#init_separators): cannonicalize encoding options
+ as Encoding objects.
- * gc.c: disable GC_PROFILE_MORE_DETAIL (fix last commit).
+Sat Dec 25 18:30:34 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * gc.c (gc_prof_set_malloc_info): fix "objspace->heap.live_num" to
- "objspace_live_num(objspace)". There is no such member variable.
+ * thread.c (rb_thread_atfork): Add small comment why we need
+ reset random seed.
-Tue May 14 01:25:55 2013 Koichi Sasada <ko1@atdot.net>
+Sat Dec 25 17:33:55 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * gc.c: refactoring GC::Profiler.
+ * test/csv/base.rb (TestCSV.with_different_ofs): give name to
+ anonymous classes.
- * gc.c (gc_prof_sweep_timer_start/stop): removed because
- they doesn't support lazy sweep.
+ * lib/csv.rb (CSV#init_separators): use IO#gets with length
+ parameter to get rid of wrong convertion.
- * gc.c (gc_prof_sweep_slot_timer_start/stop): added.
- redefine `sweeping time' to accumulated time of all of
- slot_sweep().
+ * lib/csv.rb (CSV::foreach, CSV#initialize): directly use encoding
- * 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.
+ * lib/csv.rb, test/csv: should not assume $, invariant.
-Tue May 14 00:48:55 2013 Koichi Sasada <ko1@atdot.net>
+Sat Dec 25 16:08:06 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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].
+ * signal.c: change rb_atomic_t definition from uchar to uint.
- TODO: API design. RRATIONAL_SET(rat,num,den) is enough?
- TODO: Setting constify variable with cast has same issue of r40691.
+Sat Dec 25 15:04:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * complex.c, rational.c: use above macros.
+ * test/csv/test_encodings.rb (TestEncodings#setup): fix evil test
+ suite writing to the source directory.
-Mon May 13 21:49:17 2013 Tanaka Akira <akr@fsij.org>
+Sat Dec 25 15:08:08 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/socket/extconf.rb: Check socketpair again.
- It is required on Unix.
+ * 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]
-Mon May 13 21:20:32 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Sat Dec 25 14:27:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * win32/win32.c (getipaddrs): use alternative interface name if
- available, because if_nametoindex() requires them.
+ * io.c (rb_io_extract_encoding_option): accept Encoding object as
+ encoding: optional argument. [ruby-dev:42884]
-Mon May 13 20:23:24 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Sat Dec 25 13:37:55 2010 Ryan Davis <ryand-ruby@zenspider.com>
- * win32/win32.c, include/ruby/win32.h (getipaddrs): [experimental]
- emulate getipaddrs(3) on Unix.
+ * lib/minitest/*.rb: Imported minitest 2.0.2 r6093.
- * win32/Makefile.sub, configure.in (LIBS): need iphlpapi.lib for above
- function.
+Sat Dec 25 13:05:59 2010 Tanaka Akira <akr@fsij.org>
- * include/ruby/win32.h (socketpair): rb_w32_socketpair() doesn't
- substitute for any function, so use non-prefixed name.
+ * random.c: parenthesize macro arguments.
- * ext/socket/extconf.rb (socketpair); follow above change.
+Sat Dec 25 12:48:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon May 13 20:11:06 2013 Koichi Sasada <ko1@atdot.net>
+ * load.c (rb_f_require_relative): don't omit return type.
- * iseq.c (prepare_iseq_build): remove additional line break.
+Sat Dec 25 11:06:00 2010 Eric Hodel <drbrain@segment7.net>
-Mon May 13 19:29:54 2013 Koichi Sasada <ko1@atdot.net>
+ * load.c (rb_f_require_relative): Add documentation.
- * 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].
+Sat Dec 25 11:02:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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);
+ * ext/zlib/zlib.c (gzreader_gets): support optional length
+ parameter.
- TODO: API design. rb_obj_reveal() should be replaced with others.
+ * ext/zlib/zlib.c (gzfile_read, gzfile_readpartial): length should
+ be long.
- 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)".
+Sat Dec 25 10:51:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * ext/json/generator/generator.{c,h} (fbuffer_free_only_buffer):
+ unused.
- * 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/openssl/ossl_pkcs5.c (ossl_pkcs5_pbkdf2_hmac): add casts.
- * ext/coverage/coverage.c, ext/readline/readline.c,
- ext/socket/ancdata.c, ext/socket/init.c,
- * ext/zlib/zlib.c: ditto.
+Fri Dec 24 08:46:04 2010 Tanaka Akira <akr@fsij.org>
-Mon May 13 18:44:14 2013 Koichi Sasada <ko1@atdot.net>
+ * process.c: parenthesize macro arguments.
- * *.c, parse.y, insns.def: use RARRAY_AREF/ASET macro
- instead of using RARRAY_PTR().
+Thu Dec 23 19:17:14 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-Mon May 13 16:53:53 2013 Koichi Sasada <ko1@atdot.net>
+ * test/net/imap/cacert.pem: updated because it has been expired.
- * 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].
+ * test/net/imap/server.crt: signed again because CA cert was expired.
-Mon May 13 15:31:10 2013 Koichi Sasada <ko1@atdot.net>
+Thu Dec 23 11:16:52 2010 Tanaka Akira <akr@fsij.org>
- * object.c (rb_obj_setup): added.
+ * parse.y: parenthesize macro arguments.
- * include/ruby/ruby.h (OBJSETUP): use rb_obj_setup() instead of
- a macro.
+Thu Dec 23 11:00:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon May 13 15:24:16 2013 Koichi Sasada <ko1@atdot.net>
+ * error.c (rb_check_type): check for type from extensions for ruby
+ 1.8. see [ruby-core:33797].
- * gc.c (rb_data_object_alloc): check klass only if klass is not 0.
- klass==0 means internal object.
+Thu Dec 23 08:12:59 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-Mon May 13 14:57:28 2013 Koichi Sasada <ko1@atdot.net>
+ * lib/net/smtp.rb: refactoring Net::SMTP#esmtp= to use an
+ attr_accessor
- * gc.c (rb_data_object_alloc, rb_data_typed_object_alloc):
- use NEWOBJ_OF() instead of NEWOBJ().
+Thu Dec 23 06:35:41 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-Mon May 13 14:51:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/net/smtp.rb: Net::SMTP should close the SSL connection if the
+ connection verification fails.
- * 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]
+Thu Dec 23 01:47:58 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * vm_method.c (rb_method_entry_at): return the method entry for id at
- klass, without ancestors.
+ * NEWS: remove #object_id. [ruby-dev:42840]
- * class.c (rb_singleton_class_get): get the singleton class if exists,
- or nil.
+Wed Dec 22 08:56:39 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Mon May 13 10:20:59 2013 Yuki Yugui Sonoda <yugui@google.com>
+ * NEWS: add Module#private_constant and Module#public_constant.
+ [ruby-dev:39685][ruby-core:32698]
- * ext/openssl/ossl_ssl.c: Disabled OpenSSL::SSL::SSLSocket if
- defined(OPENSSL_NO_SOCK).
+Wed Dec 22 07:59:23 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- 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.
+ * NEWS: add IO#advise. [ruby-core:33110] [Ruby 1.9-Feature#4038]
-Mon May 13 10:30:04 2013 Zachary Scott <zachary@zacharyscott.net>
+Tue Dec 21 23:45:31 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
- * hash.c: Hash[] and {} are not equivalent by @eam [Fixes GH-301]
+ * gc.c (Init_GC): move back object_id to Kernel. [ruby-dev:42840]
-Mon May 13 10:04:22 2013 Zachary Scott <zachary@zacharyscott.net>
+Tue Dec 21 12:45:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * random.c: Document Random::DEFAULT by @eLobato [Fixes GH-304]
+ * configure.in (target_archs): remove temporary objects.
-Sun May 12 21:12:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * enc/Makefile.in, enc/depend (clean): remove work directories.
- * include/ruby/ruby.h (OFFT2NUM): RUBY_REPLACE_TYPE also defines macro
- to convert int type to VALUE if found.
+Tue Dec 21 07:39:12 2010 Tanaka Akira <akr@fsij.org>
-Wed May 8 13:46:52 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * pack.c: parenthesize macro arguments.
- * include/ruby/intern.h (rb_iv_set, rb_iv_get): removed. Because
- ruby.h has a declaration for that.
+Tue Dec 21 06:25:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed May 8 13:49:06 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * test/rexml/test_contrib.rb (ContribTester#test_pos): should not
+ use fixed path name for tests. [ruby-dev:42827]
- * 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.
+ * test/rexml/test_sax.rb (SAX2Tester#test_socket): should not use
+ fixed port for tests. [ruby-dev:42828]
-Sun May 12 17:52:23 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tue Dec 21 06:10:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in: removes 'ac_cv_func_fseeko=yes' form MinGW
- specific definitions.
+ * compile.c (setup_args), vm.c (invoke_block_from_c),
+ vm_insnhelper.c (caller_setup_args): reverted r30241 and r30243
+ except for the test.
-Sun May 12 17:25:46 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tue Dec 21 01:41:42 2010 Masaya Tarui <tarui@ruby-lnag.org>
- * file.c (rb_file_s_truncate): use correct type. chsize takes
- a long.
+ * 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.
-Sun May 12 17:18:46 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tue Dec 21 01:18:06 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * process.c: move '#define HAVE_SPAWNV 1' to win32/Makefile.sub.
- * win32/Makefile.sub: see above.
+ * error.c: Fix build error for win32. This regression was
+ introduced by r30271.
-Sun May 12 17:13:32 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tue Dec 21 00:59:40 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * configure.in: removes AC_CHECK_FUNCS(setitimer) because it's
- unused.
+ * thread.c (thread_cleanup_func): Moved interrupted_lock
+ destroying code from native_thread_destroy() to
+ thread_cleanup_func() because it's platform independent logic.
-Sun May 12 17:08:16 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * thread_win32.c (native_thread_destroy): ditto.
+ * thread_pthread.c (native_thread_destroy): ditto.
- * configure.in: removes AC_CHECK_FUNCS(pause) because it's unused.
+Tue Dec 21 00:46:20 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun May 12 17:05:18 2013 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]
- * signal.c (rb_f_kill): fixes typo. s/HAS_KILLPG/HAVE_KILLPG/.
+Tue Dec 21 00:22:44 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Sun May 12 17:03:27 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * error.c (exit_success_p): Check status code more carefully.
+ status code may have garbage in upper bit.
- * configure.in: abort if gettimeofday doesn't exist.
+Mon Dec 20 23:12:37 2010 Tanaka Akira <akr@fsij.org>
-Sun May 12 16:31:27 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * node.c: parenthesize macro arguments.
- * 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.
+Mon Dec 20 20:04:41 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Sun May 12 16:03:41 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * NEWS: add #__id__ and #object_id. [ruby-dev:42778]
- * configure.in: removes AC_CHECK_FUNC(fseeko, fseeko64, ftello,
- ftello64). They are not used from anywhere.
+Mon Dec 20 20:03:21 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * 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'.
+ * thread_pthread.c (native_thread_destroy): Fixed gvl_cond leak.
-Sun May 12 15:51:47 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Mon Dec 20 13:49:05 2010 Eric Hodel <drbrain@segment7.net>
- * configure.in: remove AC_CHECK_FUNC(close). It is not used from
- anywhere.
+ * NEWS: Add item for RDoc 3.0.1
-Sun May 12 15:50:45 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * lib/rdoc: Import RDoc 3.0.1, remove require for perl parser.
- * configure.in: adds comments for setjmp check.
+Mon Dec 20 12:15:32 2010 Eric Hodel <drbrain@segment7.net>
-Sun May 12 15:38:09 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * lib/rdoc: Import RDoc 3.0.
- * configure.in: move clock_gettime() check into regular place.
+Mon Dec 20 01:55:03 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
-Wed May 8 13:45:53 2013 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]
- * configure.in: add getenv() declaration check.
- * dln_find.c: add HAVE_DECL_GETENV test.
+Sun Dec 19 19:15:23 2010 Tanaka Akira <akr@fsij.org>
-Sun May 12 15:33:18 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * marshal.c: parenthesize macro arguments.
- * configure.in: sorts AC_CHECK_FUNCS()s as alphabetical order.
+Sat Dec 18 21:52:37 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Wed May 8 13:41:57 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * vsnprintf.c (BSD_vfprintf): suppress warning: "_WIN32" is not
+ defined.
- * bignum.c: remove redundant decl for big_lshift() big_rshift().
+Sat Dec 18 16:02:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun May 12 16:06:43 2013 NARUSE, Yui <naruse@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.
- * ext/socket/rubysocket.h (rsock_inspect_sockaddr): as r40646
- check HAVE_TYPE_STRUCT_SOCKADDR_DL.
+Sat Dec 18 14:42:29 2010 Tanaka Akira <akr@fsij.org>
-Sat May 11 23:01:58 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * load.c: parenthesize macro arguments.
- * 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 Dec 18 10:07:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat May 11 22:07:42 2013 Tanaka Akira <akr@fsij.org>
+ * compile.c (setup_args, iseq_compile_each): optimize AMPER LAMBDA
+ combination as block.
- * test/rinda/test_rinda.rb: Socket.getifaddrs may returns an interface
- which #addr method returns nil for venet0 in OpenVZ.
+Fri Dec 17 22:07:16 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat May 11 21:56:34 2013 Tanaka Akira <akr@fsij.org>
+ * gc.c (Init_GC): move #__id__ and #object_id to BasicObject.
+ [ruby-dev:42778]
- * ext/socket/raddrinfo.c (rsock_inspect_sockaddr): Add casts to
- suppress warnings.
+Fri Dec 17 19:35:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat May 11 17:28:51 2013 Tanaka Akira <akr@fsij.org>
+ * test/mkmf/base.rb (TestMkmf::FakeLog): capture output from mkmf.
- * ext/socket: New method, Socket.getifaddrs, implemented.
- [ruby-core:54777] [Feature #8368]
+ * test/mkmf/test_find_executable.rb (test_find_executable):
+ suppress meaningless differences for chkbuild.
-Sat May 11 00:47:22 2013 Tanaka Akira <akr@fsij.org>
+Fri Dec 17 13:26:54 2010 NAKAMURA Usaku <usa@ruby-lang.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/
+ * win32/setup.mak (BASERUBY): quit with an error when BASERUBY was not
+ able to set, just like configure.in does. [ruby-dev:42782]
-Fri May 10 23:56:34 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Dec 17 07:04:09 2010 Tanaka Akira <akr@fsij.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]
+ * iseq.c: parenthesize macro arguments.
-Fri May 10 20:22:40 2013 Tanaka Akira <akr@fsij.org>
+Fri Dec 17 04:18:37 2010 Eric Hodel <drbrain@segment7.net>
- * configure.in: Move library checks into "Checks for libraries." part.
+ * transcode.c (str_encode): Alter comment for better wording and ri
+ output.
-Fri May 10 19:32:01 2013 Tanaka Akira <akr@fsij.org>
+Fri Dec 17 00:05:40 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * configure.in: Reformat arguments of AC_CHECK_HEADERS and
- AC_CHECK_FUNCS to track modifications easily.
+ * 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]
-Fri May 10 12:01:36 2013 Tanaka Akira <akr@fsij.org>
+ * io.c (do_io_advise): Helper function.
+ * io.c (io_advise_sym_to_const): ditto.
- * 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 Dec 16 23:29:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu May 9 22:00:35 2013 Tanaka Akira <akr@fsij.org>
+ * tool/rbinstall.rb (bin-comm): use transformed name.
+ [ruby-dev:42777]
- * ext/socket/ancdata.c (bsock_sendmsg_internal): controls_num should
- not be negative.
+Thu Dec 16 21:52:07 2010 Tanaka Akira <akr@fsij.org>
-Thu May 9 21:09:57 2013 Tanaka Akira <akr@fsij.org>
+ * io.c: parenthesize macro arguments.
- * 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 Dec 16 21:46:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu May 9 20:43:41 2013 Tanaka Akira <akr@fsij.org>
+ * tool/mkconfig.rb (RbConfig): honor ARCHFLAGS and RC_ARCHS to
+ override embedded ARCH_FLAG value on universal-darwin.
- * 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 Dec 16 19:50:12 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu May 9 12:06:07 2013 Tanaka Akira <akr@fsij.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]
- * 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 Dec 16 08:04:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu May 9 11:30:02 2013 Zachary Scott <zachary@zacharyscott.net>
+ * node.h (RNode): match the type of flags to RBasic, and renamed
+ nd_file as nd_reserved.
- * string.c: Add call-seq alias for String#=== [Bug #8381]
+ * iseq.c (set_relation), vm_insnhelper.c (vm_cref_push): nd_file
+ is always zero-cleared.
-Thu May 9 11:14:18 2013 Zachary Scott <zachary@zacharyscott.net>
+Thu Dec 16 07:22:30 2010 Ryan Davis <ryand-ruby@zenspider.com>
- * doc/contributing.rdoc: Add guide for contributing to CRuby
+ * lib/minitest/unit.rb: Imported minitest 2.0.1 r6079.
-Thu May 9 04:55:49 2013 Tanaka Akira <akr@fsij.org>
+Wed Dec 15 20:45:02 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * configure.in: Check socket library again. shutdown() is used in
- io.c.
+ * lib/test/unit.rb (process_args): need to setup @help to print options.
-Thu May 9 01:52:31 2013 Tanaka Akira <akr@fsij.org>
+Wed Dec 15 11:19:33 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * configure.in: Don't check socketpair. socketpair is not used in
- ruby command itself.
+ * test/zlib/test_zlib.rb (test_to_io): forgotten to fix with r30201.
-Thu May 9 01:05:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Dec 15 11:07:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * class.c (rb_mod_included_modules): should not include non-modules.
- [ruby-core:53158] [Bug #8025]
+ * io.c (simple_sendfile): enable on Mac OS X.
-Wed May 8 22:46:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (nogvl_copy_stream_sendfile): moved precheck of copy length.
- * class.c (rb_mod_included_modules): should not include the original
- module itself. [ruby-core:53158] [Bug #8025]
+ * io.c (nogvl_copy_stream_sendfile): should wait for both of
+ read/write fds.
-Wed May 8 17:43:55 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Dec 15 07:11:55 2010 Tanaka Akira <akr@fsij.org>
- * io.c (rb_io_ext_int_to_encs): ignore internal encoding if external
- encoding is ASCII-8BIT. [Bug #8342]
+ * hash.c: parenthesize macro arguments.
-Wed May 8 13:49:38 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Dec 15 04:02:00 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/json/generator/generator.c (isArrayOrObject): cast char to
- unsigned char. [Bug #8378]
+ * 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 May 8 13:46:10 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Dec 15 03:41:31 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * ext/json/generator/depend: fix dependencies [Bug #8379]
+ * 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]
- * ext/json/parser/depend: ditto.
+Tue Dec 14 23:53:52 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Wed May 8 13:07:17 2013 Nobuyoshi Nakada <nobu@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.
- * parse.y (parser_yylex): fail if $, @, @@ are not followed by a valid
- name character. [ruby-core:54846] [Bug #8375].
+Tue Dec 14 20:31:33 2010 Tanaka Akira <akr@fsij.org>
-Wed May 8 13:06:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * gc.c: parenthesize macro arguments.
- * include/ruby/ruby.h (ISGRAPH): add missing macro.
+Tue Dec 14 18:31:48 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed May 8 06:42:56 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/test/unit.rb: help messages.
- * 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 Dec 14 18:19:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue May 7 22:12:34 2013 Tanaka Akira <akr@fsij.org>
+ * common.mk (help): there is no reason to use the abbreviation for here.
- * ext/readline/readline.c (insert_ignore_escape): Add a cast to
- unsigned char * before dereference.
- This suppress a warning on Cygwin.
+Tue Dec 14 15:03:46 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue May 7 12:15:24 2013 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_io.rb (test_reopen, test_reinitialize): should close
+ the temporary files.
- * 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 Dec 14 14:24:15 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue May 7 12:12:42 2013 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_io.rb (make_tempfile): change the prefix from 'foo'
+ to 'test_io' because the old one is meaningless and inconvenient.
- * 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.
+ * test/ruby/test_io.rb (test_binmode_after_closed): the temporary file
+ maked by make_temfile is already closed.
-Tue May 7 12:10:52 2013 Tanaka Akira <akr@fsij.org>
+Tue Dec 14 13:52:19 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/socket/socket.c (socket_s_ip_address_list): Cast EXTRA_SPACE as
- int. This suppress a warning.
+ * 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 May 7 12:09:29 2013 Tanaka Akira <akr@fsij.org>
+Tue Dec 14 13:34:33 2010 NAKAMURA Usaku <usa@ruby-lang.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.
+ * ext/zlib/zlib.c (gzfile_s_open): should close the IO if some error
+ occurs in initializing.
-Tue May 7 12:07:35 2013 Tanaka Akira <akr@fsij.org>
+Tue Dec 14 13:04:16 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * pack.c (swap32): Don't redefine it if it is already defined.
- Bionic defines it.
- (swap64): Ditto.
+ * lib/net/http.rb (Net::HTTPRequest#send_request_body_data):
+ set binmode to tempfile.
-Mon May 6 20:50:37 2013 Tanaka Akira <akr@fsij.org>
+Tue Dec 14 12:55:46 2010 NAKAMURA Usaku <usa@ruby-lang.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.
+ * test/zlib/test_zlib.rb (*): should close files associated with zlib.
-Sun May 5 18:56:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Dec 14 11:30:17 2010 NAKAMURA Usaku <usa@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.
+ * test/ruby/test_argf.rb (test_inplace_rename_impossible): unlink
+ the renamed temporary file on no_safe_rename platforms.
- * vm_insnhelper.c (vm_search_superclass): return error but not raise
- exceptions.
+ * 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.)
- * vm_insnhelper.c (vm_search_super_method): check the result of
- vm_search_superclass and raise exceptions on error.
+Tue Dec 14 11:27:07 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sun May 5 16:29:41 2013 Nobuyoshi Nakada <nobu@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.
- * insns.def (defined): get method entry from the method top level
- frame, not block frame. [ruby-core:54769] [Bug #8367]
+Tue Dec 14 11:25:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sun May 5 13:28:54 2013 Nobuyoshi Nakada <nobu@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.
- * template/ruby.pc.in (Cflags): use rubyarchhdrdir for multiarch.
- [Bug #7874]
+Tue Dec 14 10:25:57 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat May 4 07:20:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/openssl/ossl_asn1.c (ossl_asn1_decode0): how many gcc-c99isms
+ must a man mend; before he can build with VC? r30178
- * doc/security.rdoc: Add note about reporting security vulns
+Mon Dec 13 21:26:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sat May 4 04:13:27 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * io.c (simple_sendfile): disable the use of sendfile(2) on
+ FreeBSD. It blocks on TestIO#test_copy_stream_socket.
- * include/ruby/defines.h (RUBY_ATTR_ALLOC_SIZE): New for
- attribute((alloc_size(params))).
+Mon Dec 13 18:35:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * include/ruby/defines.h (xmalloc, xmalloc2, xcalloc)
- (xrealloc, xrealloc2): Annotated by RUBY_ATTR_ALLOC_SIZE.
- * include/ruby/ruby.h (rb_alloc_tmp_buffer): ditto.
+ * io.c: define USE_SENDFILE on FreeBSD or DragonFly BSD.
+ Remove Mac OS X because its argument is different from them.
-Fri May 3 19:32:13 2013 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
+Mon Dec 13 12:00:09 2010 Tanaka Akira <akr@fsij.org>
- * lib/cgi/util.rb: All class methods modulized.
- We can use these methods like a function when "include CGI::Util".
- [Feature #8354]
+ * file.c: parenthesize macro arguments.
-Fri May 3 14:09:45 2013 Tanaka Akira <akr@fsij.org>
+Mon Dec 13 11:21:14 2010 NARUSE, Yui <naruse@ruby-lang.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
+ * io.c (simple_sendfile): added for BSD version of sendfile(2).
-Fri May 3 13:35:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Dec 13 09:50:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/socket/{getaddrinfo,getnameinfo}.c: define socklen_t if not
- defined, e.g., older VC.
+ * 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]
-Fri May 3 13:29:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Dec 12 23:45:27 2010 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.
+ * compile.c (iseq_compile_each): fix for __goto__ and __label__
+ where were totally broken.
-Fri May 3 13:22:12 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Dec 12 22:45:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * win32/win32.c (poll_child_status): fix build error on older mingw.
+ * common.mk (ID_H_INCLUDES): now id.h depends on vm_opts.h.
-Fri May 3 00:15:58 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Sun Dec 12 20:42:47 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * common.mk: remove timestamps in distclean-ext realclean-ext.
+ * template/id.h.tmpl: suppress all warning: "SUPPORT_JOKE" is not
+ defined. [ruby-dev:42730]
-Thu May 2 23:23:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Dec 12 20:35:07 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * object.c (rb_obj_is_kind_of): skip prepending modules.
- [ruby-core:54742] [Bug #8357]
+ * misc/rb_optparse.zsh: update how to install.
- * object.c (rb_class_inherited_p): ditto.
- [ruby-core:54736] [Bug #8357]
+ * misc/rb_optparse.zsh: avoid error when setopt noclobber.
-Thu May 2 22:11:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/optparse.rb: fix typo. pointed out at
+ <http://d.hatena.ne.jp/nagachika/20101207>.
- * bin/irb: remove dead code from sample/irb.rb.
+Sun Dec 12 13:27:35 2010 Tanaka Akira <akr@fsij.org>
-Thu May 2 17:32:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * eval_error.c: parenthesize macro arguments.
- * marshal.c (copy_ivar_i): get rid of overwriting already copied
- instance variables. c.f. [Bug #8276]
+Sun Dec 12 11:53:24 2010 Tanaka Akira <akr@fsij.org>
-Thu May 2 16:55:43 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * error.c: parenthesize macro arguments.
- * thread.c (id_locals): use cached ID.
+Sun Dec 12 04:01:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * vm.c (ruby_thread_init): ditto.
+ * string.c (rb_str_inspect): fix: extra back slash is added when
+ the string is dummy encoding and includes \x22 or \x5C.
- * defs/id.def: add more predefined IDs used in core.
+Sun Dec 12 02:42:24 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-Thu May 2 13:42:42 2013 Ryan Davis <ryand-ruby@zenspider.com>
+ * ext/openssl/ossl_asn1.c: indefinite length BER to DER encoding is
+ properly supported. Thanks Martin Bosslet! [ruby-core:33082]
- * lib/minitest/*: Imported minitest 4.7.4 (r8483)
- * test/minitest/*: ditto
+Sat Dec 11 17:43:34 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Thu May 2 11:32:22 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/bigdecimal/bigdecimal.h: suppress "warning: 'VPrint' declared
+ 'static' but never defined".
- * 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.
+Sat Dec 11 09:24:57 2010 Tanaka Akira <akr@fsij.org>
- * test/ruby/test_process.rb (TestProcess#test_no_curdir): maybe now
- we can test it.
+ * encoding.c: parenthesize macro arguments.
- * test/ruby/test_thread.rb (TestThread#test_thread_timer_and_interrupt):
- ditto.
+Sat Dec 11 08:12:48 2010 Eric Hodel <drbrain@segment7.net>
-Thu May 2 11:24:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/openssl/ossl.c, ext/openssl/ossl_pkey_rsa.c: Document RSA, RSA
+ encryption/decryption and PKCS #5 encryption/decryption.
- * lib/yaml.rb: nodoc EngineManager, add History doc #8344
+Sat Dec 11 06:23:41 2010 Eric Hodel <drbrain@segment7.net>
-Wed May 1 21:11:17 2013 Tanaka Akira <akr@fsij.org>
+ * ext/openssl/ossl_x509name.c: include Comparable to provide #==.
+ Document OpenSSL::X509::Name#<=>. [Ruby 1.9-Feature#4116]
- * time.c (localtime_with_gmtoff_zone): musl libc may return NULL for
- tm_zone.
+Sat Dec 11 05:48:28 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Wed May 1 18:59:36 2013 Benoit Daloze <eregontp@gmail.com>
+ * ext/tk/lib/multi-tk.rb: infinite loop on method_missing at loading.
+ [ruby-dev:42716] [Ruby 1.9-Bug#4129]
- * enum.c (Enumerable#chunk): fix grammar of error message
- for symbols beginning with an underscore [Bug #8351]
+ * ext/tk/lib/multi-tk.rb: when no eventloop is running, ruby freezes at
+ exit.
-Wed May 1 16:47:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Dec 11 02:23:15 2010 Aaron Patterson <aaron@tenderlovemaking.com>
- * ext/curses/extconf.rb (curses_version): try once for each tests, a
- function or a variable. fallback to variable for old SVR4.
+ * ext/openssl/extconf.rb: try pkgconfig first, then fall back to
+ normal have_library, etc. Thanks Erik Hollensbe. [ruby-core:32406]
-Wed May 1 16:17:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Dec 10 22:33:39 2010 Tanaka Akira <akr@fsij.org>
- * ext/extmk.rb (extmake): extensions not to be installed should not
- make static libraries, but make dynamic libraries always.
+ * dln_find.c: parenthesize macro arguments.
-Wed May 1 12:20:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Fri Dec 10 20:05:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rake/version.rb: Fix RDoc warning with :include: [Bug #8347]
+ * template/id.h.tmpl (ruby_method_ids): suppress warnings.
+ [ruby-dev:42730]
-Wed May 1 11:40:25 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Dec 10 18:29:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * defs/id.def (predefined): add "idProc".
+ * ruby.c (ruby_init_loadpath_safe): relatively called non-shared
+ binary cannot be found in PATH, so use given pathname.
- * eval.c (frame_func_id): use predefined IDs.
+Fri Dec 10 18:28:40 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * proc.c (mnew, mproc, mlambda): use predefined IDs.
+ * cygwin/GNUmakefile.in (SCRIPTPROGRAMS): ignore backup files and etc.
- * vm.c (rb_vm_control_frame_id_and_class): ditto.
+ * cygwin/GNUmakefile.in (scriptbin): set executable bit.
- * vm.c (Init_VM): ditto.
+ * tool/rbinstall.rb (install_recursive): always skip default ignored
+ files. if block is given, call it instead of calling install.
-Tue Apr 30 23:18:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * tool/rbinstall.rb (bin-comm): use install_recursive.
- * lib/benchmark.rb: Update Benchmark results on newer CPU
+Fri Dec 10 18:12:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Apr 30 12:31:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/mkmf/base.rb (TestMkmf#config_value): extract macro value from
+ config.h.
- * proc.c (mproc, mlambda): use frozen core methods instead of plain
- global methods, so that methods cannot be overridden.
- [ruby-core:54687] [Bug #8345]
+ * test/mkmf/test_sizeof.rb (TestMkmf::TestSizeof#test_sizeof_builtin),
+ (TestMkmf::TestSizeof#test_sizeof_struct): more tests.
- * vm.c (Init_VM): define proc and lambda on the frozen core object.
+ * lib/mkmf.rb (check_signedness): should use the prelude code.
+ [ruby-dev:42731]
- * include/ruby/intern.h (rb_block_lambda): add declaration instead of
- deprecated rb_f_lambda.
+ * lib/mkmf.rb (Logging.log_close): separate from Logging.logfile.
-Mon Apr 29 17:02:30 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * test/mkmf/base.rb (TestMkmf::MKMFLOG): show mkmf.log at failures.
- * ext/nkf/nkf-utf8/nkf.h: Bionic libc doesn't have locale.
- [Feature #8338]
+ * 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>
-Mon Apr 29 06:58:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * compile.c (enum): remove a comma at end of enumerator list.
- * ext/openssl/ossl_bn.c (ossl_bn_initialize): no need of alloca for
- small fixed size array.
+ * constant.h (rb_const_flag_t): ditto.
- * ext/openssl/ossl_bn.c (ossl_bn_initialize): check overflow first,
- and use alloca for small size input.
+ * iseq.h (enum catch_type): ditto.
-Mon Apr 29 00:40:13 2013 Benoit Daloze <eregontp@gmail.com>
+ * iseq.h (enum defined_type): ditto.
- * lib/yaml.rb: Clarify documentation about YAML being always Psych.
- Give a tip about using Syck. See #8344.
+ * vm_core.h (enum iseq_type): ditto.
-Sun Apr 28 23:34:01 2013 Benoit Daloze <eregontp@gmail.com>
+ * vm_core.h (enum vm_special_object_type): ditto.
- * lib/yaml.rb: Use another trick to define the YAML module.
- https://twitter.com/n0kada/status/328342207511801856
+Fri Dec 10 10:47:53 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sun Apr 28 23:19:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * sprintf.c (_HAVE_SANE_QUAD_): Don't forget LP64, r30156.
- * lib/pp.rb: Update PP module overview by @geopet
+Fri Dec 10 10:37:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Apr 28 22:04:37 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+ * sprintf.c (_HAVE_SANE_QUAD_): if a certain platform has LONG_LONG in
+ 8 byte, it might be sane quad. [ruby-core:33634]
- * 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]
+Fri Dec 10 10:07:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sun Apr 28 12:38:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/net/http.rb: remove version 1.1 features.
- * README.EXT: correct method name to be used. [Bug #7982]
+Fri Dec 10 02:18:02 2010 Aaron Patterson <aaron@tenderlovemaking.com>
- * README.EXT.ja: add notes too.
+ * ext/openssl/ossl_x509store.c (ossl_x509stctx_cleanup): removing C
+ implementation of `cleanup`.
-Sun Apr 28 10:35:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * 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]
- * object.c: With feedback from Steve Klabnik, reverted a change to
- #untrusted? and #tainted?. Also adjusted grammar for $SAFE levels
+Thu Dec 9 20:14:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Apr 28 10:10:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * parse.y (lvar_defined_gen, shadowing_lvar_gen, dvar_defined): no
+ warnings for unused method and block arguments.
+ [ruby-dev:42718] [ruby-dev:42724]
- * lib/yaml.rb: Disable setting YAML const twice [ruby-core:54642]
+Thu Dec 9 19:25:49 2010 Tanaka Akira <akr@fsij.org>
-Sun Apr 28 09:50:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * dln.c: parenthesize macro arguments.
- * object.c: Documentation for taint and trust [Bug #8162]
+Thu Dec 9 18:51:06 2010 Tanaka Akira <akr@fsij.org>
-Sun Apr 28 09:40:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * lib/webrick/accesslog.rb (WEBrick::AccessLog#format): support
+ %{remote}p for logging remote (client) port number.
+ [ruby-dev:42670]
- * README.EXT: Copy note from r40505 for rb_sprintf() [Bug #7982]
+Thu Dec 9 11:00:30 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sun Apr 28 08:28:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * 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]
- * ext/curses/curses.c: Update Curses::Window example for nicer output
- Patch by Michal Suchanek [Bug #8121] [ruby-core:53520]
+ * array.c (rb_ary_reverse_m): ditto.
-Sun Apr 28 08:10:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * array.c (rb_ary_rotate_m): ditto.
- * README.EXT: Update note from r40504, by Jeremy Evans [Bug #7982]
+Wed Dec 8 21:38:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sun Apr 28 08:02:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/dl/lib/dl/struct.rb: clean a warning: assigned but unused
+ variable. patched by Kouhei Yanagita. [ruby-dev:42722]
- * README.EXT: Add note to warn use of %i in Exceptions [Bug #7982]
+ * ext/dl/lib/dl/import.rb: ditto.
-Sun Apr 28 02:41:05 2013 Tanaka Akira <akr@fsij.org>
+Wed Dec 8 21:36:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in: Fix a typo. Should check endgrent() instead of
- endgrnam().
+ * parse.y (shadowing_lvar_gen): fix line number. [ruby-dev:42718]
-Sun Apr 28 00:35:45 2013 Tanaka Akira <akr@fsij.org>
+Wed Dec 8 20:37:11 2010 Tanaka Akira <akr@fsij.org>
- * process.c (obj2gid): Don't call endgrent() if not exist.
- Bionic (Android's libc) don't have endgrent().
+ * dir.c: parenthesize macro arguments.
- * configure.in: Check endgrnam function.
+Tue Dec 7 22:37:15 2010 Masaya Tarui <tarui@ruby-lnag.org>
-Sat Apr 27 23:53:00 2013 Charlie Somerville <charlie@charliesomerville.com>
+ * io.c (io_read): duplicate string if shared. [ruby-dev:42719]
- * lib/yaml.rb: add security warning to YAML documentation
+Tue Dec 7 22:31:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Apr 27 23:25:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * lib/optparse.rb (OptionParser::Officious): separate completion
+ options from --help. [ruby-dev:42690]
- * lib/yaml.rb: Documentation for YAML module [Bug #8213]
+ * lib/optparse.rb (OptionParser::Completion#candidate),
+ (OptionParser::Switch#compsys): remove unused variables.
-Sat Apr 27 20:19:21 2013 Tanaka Akira <akr@fsij.org>
+Tue Dec 7 22:05:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * thread_pthread.c (ruby_init_stack): Add STACK_GROW_DIR_DETECTION.
- This fixes a compilation failure while cross-compiling for Tensilica
- Xtensa Processor.
+ * transcode.c (transcode_loop): call default handler of the given
+ hash, method, proc or [] method as fallback. [ruby-dev:42692]
-Sat Apr 27 19:32:44 2013 Benoit Daloze <eregontp@gmail.com>
+Tue Dec 7 21:59:37 2010 Kouhei Sutou <kou@cozmixng.org>
- * thread.c: fix typos and documentation
+ * lib/rexml/light/node.rb: remove circular require.
-Sat Apr 27 19:04:55 2013 Tanaka Akira <akr@fsij.org>
+Tue Dec 7 21:56:01 2010 Kouhei Sutou <kou@cozmixng.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
+ * test/rexml/test_light.rb: really suppress a warning.
-Sat Apr 27 17:22:50 2013 Tanaka Akira <akr@fsij.org>
+Tue Dec 7 21:51:57 2010 Kouhei Sutou <kou@cozmixng.org>
- * ext/socket/extconf.rb: Redundant test removed.
+ * test/rexml/test_light.rb: suppress a warning.
-Sat Apr 27 16:00:10 2013 Tanaka Akira <akr@fsij.org>
+Tue Dec 7 21:14:03 2010 Tanaka Akira <akr@fsij.org>
- * ext/socket/extconf.rb (test_recvmsg_with_msg_peek_creates_fds):
- Extracted.
+ * debug.c: parenthesize macro arguments.
-Sat Apr 27 15:50:40 2013 Tanaka Akira <akr@fsij.org>
+Tue Dec 7 21:06:38 2010 Kouhei Sutou <kou@cozmixng.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.
+ * lib/rexml/doctype.rb, test/rexml/test_doctype.rb: suppress warnings.
+ [ruby-core:33305]
+ Reported by Aaron Patterson. Thanks!!!
- * thread.c (TIMEVAL_SEC_MAX): Use SIGNED_INTEGER_MAX.
- (TIMEVAL_SEC_MIN): Use SIGNED_INTEGER_MIN.
+Tue Dec 7 18:56:52 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Apr 27 10:52:52 2013 Tanaka Akira <akr@fsij.org>
+ * ext/nkf/lib/kconv.rb (String#kconv): fix typo and update rdoc.
+ patched by Kouhei Yanagita [ruby-dev:42696]
- * 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).
+Tue Dec 7 20:32:11 2010 Kouhei Sutou <kou@cozmixng.org>
-Fri Apr 26 23:34:59 2013 Kouhei Sutou <kou@cozmixng.org>
+ * test/rexml/test_doctype.rb: add Accessor to test case name.
- * 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.
+Tue Dec 7 20:31:02 2010 Kouhei Sutou <kou@clear-code.com>
-Fri Apr 26 22:53:55 2013 Kouhei Sutou <kou@cozmixng.org>
+ * test/rexml/test_doctype.rb: Doctype -> DocType.
- * 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.
+Tue Dec 7 20:29:23 2010 Kouhei Sutou <kou@clear-code.com>
-Fri Apr 26 21:48:29 2013 Kouhei Sutou <kou@cozmixng.org>
+ * test/rexml/test_doctype_mixin.rb: rename to ...
+ * test/rexml/test_doctype.rb: ... this to remove needless name.
- * lib/rss/atom.rb (RSS::Atom::Entry): Fix indent of document comment.
+Tue Dec 7 17:03:16 2010 Shugo Maeda <shugo@ruby-lang.org>
-Fri Apr 26 21:21:17 2013 Kouhei Sutou <kou@cozmixng.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]
- * lib/rss/maker.rb (RSS::Maker): Fix indent of document comment.
+Tue Dec 7 08:00:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Apr 26 18:41:04 2013 Tanaka Akira <akr@fsij.org>
+ * configure.in, win32/Makefile.sub (WERRORFLAG): flag to treat
+ warnings as errors.
- * ext/socket/extconf.rb: Use a block of enable_config() for
- --{enable,disable}-close-fds-by-recvmsg-with-peek configure option
+ * lib/mkmf.rb (Logging.postpone): yield log file object.
-Fri Apr 26 18:08:08 2013 Tanaka Akira <akr@fsij.org>
+ * lib/mkmf.rb (xsystem): add options, :werror only right now.
- * dir.c (dir_set_pos): Fix a compilation error when seekdir() is not
- exist.
+ * lib/mkmf.rb (with_werror): check as if warnings are errors.
-Fri Apr 26 17:41:17 2013 Tanaka Akira <akr@fsij.org>
+ * lib/mkmf.rb (convertible_int): make declaration conflict
+ warnings errors not to pass wrong type. [ruby-dev:42684]
- * thread_pthread.c (ruby_init_stack): Add STACK_GROW_DIR_DETECTION.
- This fixes a compilation failure while cross-compiling for ARM.
+ * lib/mkmf.rb (COMMON_MACROS): get rid of conflicts.
-Fri Apr 26 14:35:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * win32/Makefile.sub (WARNFLAGS): make declaration conflict
+ warnings errors if possible.
- * 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
+Sun Dec 7 21:16:10 2010 Tanaka Akira <akr@fsij.org>
-Fri Apr 26 12:41:22 2013 Tanaka Akira <akr@fsij.org>
+ * cont.c: parenthesize macro arguments.
- * ext/curses/extconf.rb: Test linkability of curses_version at first.
+Tue Dec 7 00:27:14 2010 Masaya Tarui <tarui@ruby-lnag.org>
- * 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.
+ * win32/win32.c (rb_w32_read): fixed more for readline,
+ and so on. [ruby-core:33511]
-Fri Apr 26 00:07:52 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+Mon Dec 6 23:18:22 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rinda/ring.rb (Rinda::RingServer#initialize): accept array
- arguments of address to specify multicast interface.
+ * test/mkmf/base.rb (TestMkmf#setup): run quietly.
- * lib/rinda/ring.rb (Rinda::RingServer#make_socket): add optional
- arguments for multicast interface.
+ * test/mkmf/test_find_executable.rb (test_find_executable): use
+ configured results.
- * test/rinda/test_rinda.rb
- (TestRingFinger#test_ring_server_ipv4_multicast,
- TestRingFinger#test_ring_server_ipv6_multicast): add tests for
- above change.
+ * common.mk (test-build): test for build process.
- * 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]
+Mon Dec 6 22:47:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Apr 25 23:45:02 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+ * lib/optparse.rb (OptionParser#candidate): skip separators.
- * 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.
+ * sample/optparse/opttest.rb: should not override --help.
+ [ruby-dev:42690]
- * lib/rinda/ring.rb (Rinda::RingServer#make_socket): ditto.
+Mon Dec 6 19:00:48 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Thu Apr 25 23:39:42 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+ * misc/rb_optparse.zsh: fix typos.
- * 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.
+Mon Dec 6 18:59:04 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Thu Apr 25 23:16:28 2013 Tanaka Akira <akr@fsij.org>
+ * NEWS: add new encodings.
- * ext/curses/extconf.rb: Implement
- --with-curses-version={function,variable} configure option for
- cross-compiling.
+Mon Dec 6 18:56:42 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Thu Apr 25 18:15:46 2013 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_string.rb (TestString#test_scan): add a test for
+ [ruby-core:33338] #4087.
- * ext/socket/extconf.rb: Don't use WIDE getaddrinfo by default.
+Mon Dec 6 18:55:36 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Thu Apr 25 17:56:39 2013 Tanaka Akira <akr@fsij.org>
+ * test/uri/test_common.rb (TestCommon#test_encode_www_form): add
+ tests for r30015.
- * ext/socket/extconf.rb: Remove obsolete options: ---with-ipv6-lib and
- --with-ipv6-libdir.
+Mon Dec 6 10:39:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Apr 25 17:43:49 2013 Tanaka Akira <akr@fsij.org>
+ * lib/uri/common.rb (URI::Parser#initialize_pattern):
+ refix for restrict the pattern.
- * 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.
+Mon Dec 6 09:45:11 2010 Eric Hodel <drbrain@segment7.net>
-Thu Apr 25 16:11:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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
- * 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]
+Mon Dec 6 09:16:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * io.c (io_set_encoding_by_bom): reset extenal encoding if no BOM
- found. [ruby-core:54569]
+ * lib/uri/common.rb (URI::Parser#initialize_pattern):
+ workaround fix pattern of hostname for RFC 3986. [ruby-dev:42672]
-Thu Apr 25 14:35:01 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Mon Dec 6 09:14:38 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/openssl/ossl_bn.c (ossl_bn_initialize): allow Fixnum and Bignum.
- [ruby-core:53986] [Feature #8217]
+ * lib/mkmf.rb (check_signedness): rename unused variable prelude.
-Thu Apr 25 14:26:32 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Sun Dec 5 17:56:36 2010 Nobuyoshi Nakada <nobu@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]
+ * class.c (make_metaclass): fix probable typo. builtin type flag
+ cannot be used with FL_TEST.
- * 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.
+Sun Dec 5 12:09:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Apr 25 14:26:00 2013 Charlie Somerville <charlie@charliesomerville.com>
+ * lib/irb/init.rb (IRB.parse_opts): fix typo. [ruby-core:33574]
- * benchmark/bm_hash_shift.rb: add benchmark for Hash#shift
+Sun Dec 5 11:27:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * hash.c (rb_hash_shift): use st_shift if hash is not being iterated to
- delete element without iterating the whole hash.
+ * ruby.c (load_file_internal): decrement for ungotten line.
+ [ruby-dev:42680]
- * hash.c (shift_i): remove function
+Sun Dec 5 10:32:11 2010 Tanaka Akira <akr@fsij.org>
- * include/ruby/st.h (st_shift): add st_shift function
+ * complex.c: parenthesize macro arguments.
- * st.c (st_shift): ditto
+Sat Dec 4 11:39:17 2010 Eric Hodel <drbrain@segment7.net>
- [Bug #8312] [ruby-core:54524] Patch by funny-falcon
+ * ext/openssl/ossl_x509ext.c (initialize): add documentation.
-Thu Apr 25 12:03:38 2013 Tanaka Akira <akr@fsij.org>
+Sat Dec 4 11:21:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/extconf.rb: Extract C programs as toplevel constants.
+ * hash.c (rb_hash_update_by): new API for Hash#update.
-Thu Apr 25 02:23:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Dec 4 11:18:10 2010 Tanaka Akira <akr@fsij.org>
- * configure.in (RUBY_RM_RECURSIVE): this hack is needed by only
- autoconf 2.69 or earlier on darwin.
+ * class.c: parenthesize macro arguments.
-Thu Apr 25 01:22:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Dec 4 11:07:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/tracer.rb (get_line): simply read by File.readlines.
+ * vm_core.h (rb_vm_inc_const_missing_count): missing prototype.
- * lib/debug.rb (script_lines): get source lines from SCRIPT_LINES__ or
- read from the file.
+Sat Dec 4 08:50:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/debug.rb (display_list): use script_lines instead of recursion.
- [Bug #8318]
+ * ext/iconv/iconv.c (Init_iconv): no warnings if $VERBOSE is nil.
- * lib/debug.rb (line_at): use script_lines same as display_list.
+Sat Dec 4 08:25:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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]
+ * vm_insnhelper.c (vm_call_method): revert r30064 and r30071,
+ because of [ruby-core:26761]. Bug#4106 rejected.
-Wed Apr 24 21:51:13 2013 Tanaka Akira <akr@fsij.org>
+Sat Dec 4 07:46:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in: Check mblen().
- mblen() is optional in uClibc.
+ * lib/mkmf.rb (String#tr_cpp): substitute * with P like as
+ autoconf.
- * eval_intern.h (CharNext): Don't use mblen() is not available.
+Fri Dec 3 22:36:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Apr 24 15:55:06 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * vm_insnhelper.c (vm_call_method): protected methods should be
+ checked against the real class.
- * io.c (rb_fd_fix_cloexec): use rb_update_max_fd().
+Fri Dec 3 20:23:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Apr 24 14:08:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * lib/mkmf.rb (convertible_int): define printf format prefix too.
- * numeric.c: Fix wiki link on Float imprecision in overview, patched
- by Makoto Kishimoto [Bug #8304] [ruby-dev:47280]
+ * lib/mkmf.rb (convertible_int): detect convertible integer type.
+ port RUBY_REPLACE_INT from configure.in.
-Wed Apr 24 14:03:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/mkmf.rb (check_sizeof): should return integer always.
- * parse.y (parser_yylex): disallow $- without following identifier
- character. [ruby-talk:406969]
+Fri Dec 3 12:54:48 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * parse.y (is_special_global_name): mere $- is not a valid global
- variable name.
+ * win32/Makefile.sub (RCFLAGS): VC10 and after only. fixed the problem
+ of r30015. [ruby-core:33530]
-Wed Apr 24 13:54:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Fri Dec 3 12:41:52 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
- * string.c: Document String#setbyte return value by @gjmurakami-10gen
- [Fixes GH-294]
+ * 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.
-Wed Apr 24 13:45:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * vm.c (ruby_vm_destruct): ruby_current_vm termination should be
+ somewhere after rb_objspace_free for above reason.
- * class.c: Example of Object#methods by @windwiny [Fixes GH-293]
- * ruby.c: Document return values of Kernel #sub, #gsub, and #chop
+Fri Dec 3 12:17:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Apr 24 12:54:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * vm_insnhelper.c (vm_call_method): protected singleton methods should
+ be visible from same real class methods. [ruby-core:33506]
- * ext/socket/lib/socket.rb: Doc typos by @vipulnsward [Fixes GH-292]
+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]
-Wed Apr 24 12:54:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Fri Dec 3 06:52:46 2010 Tanaka Akira <akr@fsij.org>
- * ext/socket/lib/socket.rb: Doc typos by @vipulnsward [Fixes GH-292]
+ * compile.c: parenthesize macro arguments.
-Wed Apr 24 12:27:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Fri Dec 3 04:08:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * array.c: Fix documentation for Array#index and #replace aliases
- Based on a patch by @phiggins [Fixes GH-282]
+ * encoding.c (enc_alias_internal): use st_insert2 and change return
+ value to int.
-Tue Apr 23 21:14:38 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * encoding.c (enc_alias): follow enc_alias_internal.
- * 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]
+Fri Dec 3 01:52:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Apr 23 20:10:02 2013 Tanaka Akira <akr@fsij.org>
+ * encoding.c (enc_alias_internal): use xfree instead of free.
- * missing/isnan.c (isnan): Don't define if isnan() macro is defined.
- This fixes a compilation failure on uClibc based Gentoo system.
+Thu Dec 2 23:52:26 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-Tue Apr 23 17:40:40 2013 Martin Duerst <duerst@it.aoyama.ac.jp>
+ * NEWS: entry for ruby_vm_at_exit().
- * lib/rexml/document.rb, lib/rexml/element.rb,
- lib/rexml/formatters/pretty.rb: remove opinionated
- language in documentation. [Bug #8309],
- reported by Charles Beckmann
+ * eval.c (ruby_cleanup): bug fix around at_exit (1) timing was
+ wrong. (2) execution order was opposite.
-Tue Apr 23 14:04:44 2013 Shugo Maeda <shugo@ruby-lang.org>
+Thu Dec 2 23:05:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/net/imap.rb (getacl_response): parse the mailbox of an ACL
- response correctly. [ruby-core:54365] [Bug #8281]
+ * win32/Makefile.sub (RCFLAGS): -nologo switch is only available in
+ newer versions of rc.exe. fixed the problem of r30012.
-Tue Apr 23 11:58:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Dec 2 21:28:07 2010 NARUSE, Yui <naruse@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]
+ * ext/json/lib/json/add/rails.rb: removed.
-Tue Apr 23 10:26:50 2013 Akinori MUSHA <knu@iDaemons.org>
+Thu Dec 2 21:22:05 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * test/ruby/test_module.rb
- (TestModule#test_const_get_invalid_name)
- (test_const_defined_invalid_name): Fix expected values.
+ * encoding.c (enc_alias_internal): free the copied key and
+ return NULL when given key is already registered.
-Tue Apr 23 09:51:26 2013 Akinori MUSHA <knu@iDaemons.org>
+ * encoding.c (enc_alias): call set_encoding_const only when the
+ alias is not registered yet.
- * string.c (rb_str_inspect): NUL should not be represented as "\0"
- when octal digits may follow. [ruby-core:54458] [Bug #8290]
+Thu Dec 2 19:58:24 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-Mon Apr 22 22:54:00 2013 Charlie Somerville <charlie@charliesomerville.com>
+ * 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.
- * insns.def (opt_mod): Use % operator if both operands are positive for
- a significant performance improvement. Thanks to @samsaffron.
+ * include/ruby/vm.h: ditto.
-Mon Apr 22 17:09:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * vm_core.h (rb_vm_struct): new field.
- * marshal.c (r_object0): copy all instance variables not only generic
- ivars, before calling post proc. [ruby-core:51163] [Bug #7627]
+ * vm.c (vm_init2): initialize above new field.
-Mon Apr 22 10:25:21 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * eval.c (ruby_cleanup): trigger those hooks.
- * 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.
+Thu Dec 2 17:00:44 2010 Tanaka Akira <akr@fsij.org>
-Sun Apr 21 23:19:00 2013 Charlie Somerville <charlie@charliesomerville.com>
+ * bignum.c: parenthesize macro arguments.
- * configure.in: Revert using sigsetjmp by default due to performance
- problems on some systems (eg. older Linux)
+Thu Dec 2 15:31:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Sun Apr 21 21:35:00 2013 Charlie Somerville <charlie@charliesomerville.com>
+ * win32/win32.c (rb_w32_read): more fix. [ruby-core:33513]
- * 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]
+Thu Dec 2 13:41:43 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * configure.in: Manually check for presence of sigsetjmp. It is not a
- function on some systems, so AC_CHECK_FUNCS cannot be used.
+ * win32/win32.c (rb_w32_read): workaround for console reading troubles.
+ fixed [ruby-core:33511]
-Sun Apr 21 08:00:55 2013 Tanaka Akira <akr@fsij.org>
+Thu Dec 2 13:10:42 2010 NARUSE, Yui <naruse@ruby-lang.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.
+ * lib/uri/common.rb (URI.encode_www_form):
+ split key-value when the value is Array like object.
-Sun Apr 21 00:15:36 2013 Tanaka Akira <akr@fsij.org>
+Thu Dec 2 10:39:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * lib/tempfile.rb (Tempfile.create): Close when the block exits.
+ * lib/net/http.rb (Net::HTTP#set_form_data):
+ use URI.encode_www_form for application/x-www-form-urlencoded.
-Sat Apr 20 23:38:14 2013 Tanaka Akira <akr@fsij.org>
+Thu Dec 2 10:38:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * lib/webrick/httpauth/htpasswd.rb: Use Tempfile.create to avoid
- unintentional unlink() by the finalizer.
- lib/webrick/httpauth/htdigest.rb: Ditto.
+ * ext/extmk.rb: remove $makeflags.defined?, it should be $mflags.
-Sat Apr 20 22:47:48 2013 Tanaka Akira <akr@fsij.org>
+Thu Dec 2 10:19:47 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/tempfile.rb (Tempfile.create): New method.
- The method name is proposed by Shugo Maeda. [ruby-dev:47220]
- [ruby-core:41478] [Feature #5707]
+ * win32/Makefile.sub (rc): suppress meaningless message.
-Sat Apr 20 14:22:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Dec 2 10:09:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * marshal.c (w_object): dump no ivars to the original by marshal_dump.
- [ruby-core:54334] [Bug #8276]
+ * ext/json/generator/extconf.rb: remove the lines which set -O3
+ when -O option is not set.
+ Note that -O3 doesn't always exist.
- * marshal.c (r_object0): copy all ivars of marshal_dump data to the
- result object instead. [ruby-core:51163] [Bug #7627]
+ * ext/json/parser/extconf.rb: ditto.
-Sat Apr 20 02:33:27 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Dec 2 10:01:59 2010 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]
+ * ext/extmk.rb: define $makeflags.defined? like $mflags.
- * string.c (str_compat_and_valid): check given string is compatible
- and valid with given encoding.
+Thu Dec 2 07:20:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * lib/test/unit.rb (Test::Unit::GCStressOption): --gc-stress
+ option.
-Fri Apr 19 21:55:40 2013 Kouhei Sutou <kou@cozmixng.org>
+ * lib/test/unit.rb (Test::Unit::Mini#_run_suites): show the result
+ even when interrupted on the way.
- * 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]
+Thu Dec 2 07:08:38 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Apr 19 17:54:57 2013 Shugo Maeda <shugo@ruby-lang.org>
+ * ext/io/console/console.c (setattr): should retry on EINTR.
+ [ruby-dev:42666]
- * lib/net/imap.rb (body_type_msg): should accept
- message/delivery-status with extra data.
- [ruby-core:53741] [Bug #8167]
+Thu Dec 2 02:30:50 2010 Eric Hodel <drbrain@segment7.net>
- * test/net/imap/test_imap_response_parser.rb: related test.
+ * lib/net/http.rb: fixed positional wording to match revised order.
-Fri Apr 19 13:03:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Dec 2 01:24:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * marshal.c (w_object): do not dump encoding which is dumped with
- marshal_dump data. [ruby-core:54334] [Bug #8276]
+ * ext/json/lib/json/common.rb: don't use iconv on 1.9.
+ patched by Shota Fukumori [ruby-core:33164]
-Fri Apr 19 11:36:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Dec 2 01:02:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * configure.in (stack_protector): control use of -fstack-protector.
+ * ext/json: Update github/flori/json from 1.4.2+ to
+ e22b2f2bdfe6a9b0. this fixes some bugs.
- * configure.in (debugflags): let -fstack-protector precede and disable
- debugflags, because they can't work together on SmartOS. [Bug #8268]
+Thu Dec 2 00:05:44 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Apr 19 07:43:52 2013 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]
- * test/openssl/test_cipher.rb: Correct a typo
- by jgls <joerg@joergleis.com>
- https://github.com/ruby/ruby/pull/291 fix GH-291
+Wed Dec 1 22:01:49 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Apr 18 16:58:51 2013 Nobuyoshi Nakada <nobu@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]
- * 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]
+Wed Dec 1 21:43:21 2010 Tanaka Akira <akr@fsij.org>
-Thu Apr 18 16:20:51 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * array.c: parenthesize macro arguments.
- * 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]
+Wed Dec 1 21:41:57 2010 Tanaka Akira <akr@fsij.org>
-Thu Apr 18 16:20:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/socket/test_addrinfo.rb: extract Errno::EADDRINUSE as a method.
- * pack.c (pack_unpack): increase buffer size to fix buffer overflow,
- and fix garbage just after unpacking without missing paddings.
- [Bug #8286]
+ * test/socket/test_socket.rb: ditto.
-Thu Apr 18 13:35:54 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Dec 1 15:08:32 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * pack.c (pack_unpack): output characters even if the input doesn't
- have paddings. [Bug #8286]
+ * test/openssl/test_ssl.rb (test_not_started_session): non socket
+ argument of SSLSocket.new is not supported on Windows.
-Thu Apr 18 08:20:48 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Dec 1 14:36:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * common.mk (clean-ext): remove timestamps.
+ * string.c (rb_memhash): zero-filled strings should return
+ different values. [ruby-core:33500]
-Wed Apr 17 22:07:50 2013 Tanaka Akira <akr@fsij.org>
+Wed Dec 1 14:27:49 2010 Ryan Davis <ryand-ruby@zenspider.com>
- * ext/socket/rubysocket.h (SOCKLEN_MAX): Expression simplified.
+ * lib/minitest/*.rb: Imported minitest 2.0.0 r5952.
+ * test/minitest/*.rb: ditto.
+ * lib/test/unit.rb: Compatibility fix for minitest changes.
-Wed Apr 17 20:09:19 2013 Aman Gupta <ruby@tmm1.net>
+Wed Dec 1 10:16:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * compile.c (iseq_add_mark_object): Use new rb_iseq_add_mark_object().
+ * string.c (rb_str_inspect): fix typo (not 0xFD but 0xFE).
- * insns.def (setinlinecache): Ditto.
+Wed Dec 1 09:28:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * iseq.c (rb_iseq_add_mark_object): New function to allocate
- iseq->mark_ary on demand. [Bug #8142]
+ * 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]
- * iseq.h (rb_iseq_add_mark_object): Ditto.
+Wed Dec 1 01:29:15 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * iseq.c (prepare_iseq_build): Avoid allocating mark_ary until needed.
+ * 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]
- * iseq.c (rb_iseq_build_for_ruby2cext): Ditto.
+Tue Nov 30 17:04:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Apr 17 20:00:18 2013 Tanaka Akira <akr@fsij.org>
+ * addr2line.c (parse_debug_line_cu): ignore DW_LNE_set_discriminator.
+ To ignore, it needs to read a single unsigned LEB128 integer.
- * ext/socket/rubysocket.h (SOCKLEN_MAX): Defined.
+Tue Nov 30 16:29:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/socket/raddrinfo.c (ext/socket/raddrinfo.c): Reject too long
- Linux abstract socket name.
+ * 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.
-Wed Apr 17 19:45:27 2013 Aman Gupta <tmm1@ruby-lang.org>
+Tue Nov 30 16:23:23 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * iseq.c (iseq_location_setup): re-use existing string when iseq has
- the same path and absolute_path. [Bug #8149]
+ * lib/net/http.rb: improve rdoc.
+ patched by Eric Hodel ref #4100
-Wed Apr 17 11:38:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Nov 30 12:23:52 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
- UNASSIGNED is not a valid message.
+ * 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.
-Wed Apr 17 10:58:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Nov 30 11:39:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * thread.c (sleep_timeval): get rid of overflow on Windows where
- timeval.tv_sec is not time_t but mere long.
+ * lib/net/http.rb: improve rdoc.
+ patched by mathew murphy [ruby-core:33472] ref #4100
-Tue Apr 16 23:07:12 2013 Tanaka Akira <akr@fsij.org>
+Tue Nov 30 05:03:44 2010 Eric Hodel <drbrain@segment7.net>
- * ext/socket/unixsocket.c (unix_send_io): Suppress a warning by clang.
- (unix_recv_io): Ditto.
+ * lib/uri/common.rb (encode_www_form, encode_www_form_component):
+ Improve English in documentation.
-Tue Apr 16 12:27:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/openssl/ossl_ssl.c (ssl_version=, ciphers=): Document
+ #ssl_version=, add documentation for #ciphers=.
- * ext/sdbm/init.c: Fix comment indentation, by windwiny [Fixes GH-277]
+Mon Nov 29 22:55:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Apr 16 12:25:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * lib/uri/common.rb (URI::WFKV_): get rid of backtrack explosion
+ by nested repeat operators. [ruby-core:33464]
- * 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
+Mon Nov 29 22:53:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Apr 16 11:23:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * win32/Makefile.sub (scriptbin.mk): fix generated rules.
- * ext/openssl/*: Document synonymous methods, by windwiny [GH-277]
+ * win32/win32.c (rb_w32_write_console): fix argument type.
-Mon Apr 15 22:21:42 2013 Tanaka Akira <akr@fsij.org>
+Mon Nov 29 21:12:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/fiddle/depend: New file.
+ * misc/ruby-mode.el (ruby-forward-sexp): stop after literal hash
+ key labels.
-Mon Apr 15 22:01:02 2013 Akinori MUSHA <knu@iDaemons.org>
+ * misc/ruby-mode.el (ruby-font-lock-keywords): highlight literal
+ hash key labels as symbols.
- * misc/ruby-electric.el (ruby-electric-insert): Check
- ruby-electric-is-last-command-char-expandable-punct-p here.
+Mon Nov 29 18:31:31 2010 Martin Duerst <duerst@it.aoyama.ac.jp>
- * 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 "{ } }".
+ * 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 Apr 15 12:54:42 2013 Martin Bosslet <Martin.Bosslet@gmail.com>
+Mon Nov 29 14:31:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/openssl/ossl_ssl.c: Correct shutdown behavior w.r.t GC.
+ * win32/win32.c (rb_w32_isatty): use GetConsoleMode() to determine the
+ fd is console or not, just like rb_w32_write_console(). [experimental]
- * test/openssl/test_ssl.rb: Add tests to verify correct behavior.
+Mon Nov 29 14:19:40 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- [Bug #8240] Patch provided by Shugo Maeda. Thanks!
+ * include/ruby/win32.h (rb_w32_write_console): wrong prototype.
-Mon Apr 15 10:23:39 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Mon Nov 29 14:10:55 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/coverage/depend: fix id.h place as r40283.
+ * win32/win32.c (rb_w32_write_console): fixed indentation.
- * ext/coverage/extconf.rb: add topdir and topsrcdir to VPATH.
+Sun Nov 28 22:13:39 2010 Koichi Sasada <ko1@atdot.net>
-Sun Apr 14 19:46:14 2013 Tanaka Akira <akr@fsij.org>
+ * thread_pthread.c (NATIVE_MUTEX_LOCK_DEBUG): move and use it.
- * ext/-test-/debug/depend: New file.
+ * ChangeLog: fix my timezone.
- * ext/-test-/exception/depend: Ditto.
+Mon Nov 28 21:58:58 2010 Koichi Sasada <ko1@atdot.net>
- * ext/-test-/printf/depend: Ditto.
+ * thread_pthread.c: remove pthread_atfork().
- * ext/-test-/string/depend: Ditto.
+Mon Nov 28 21:54:22 2010 Koichi Sasada <ko1@atdot.net>
- * ext/coverage/depend: Ditto.
+ * thread_pthread.c (native_cond_*): Check return code.
+ (Some OSes except Linux return error code).
- * ext/io/console/depend: Ditto.
+Sun Nov 28 21:46:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/io/nonblock/depend: Ditto.
+ * thread_pthread.c (thread_start_func_1): initialize native thread
+ data immediately before starting.
- * ext/io/wait/depend: Ditto.
+Sun Nov 28 14:56:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/openssl/depend: Ditto.
+ * io.c (struct argf): make lineno long, and reorder members.
- * ext/pathname/depend: Ditto.
+Sun Nov 28 14:55:42 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/psych/depend: Ditto.
+ * thread_win32.c (gvl_release, gvl_init): suppress warnings.
- * ext/zlib/depend: Ditto.
+Sun Nov 28 14:48:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Apr 14 02:46:50 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * thread_pthread.c (gvl_release, gvl_init): suppress warnings.
- * lib/mkmf.rb (MakeMakefile#create_makefile): remove {$(VPATH)} other
- than nmake.
+ * vm_core.h (rb_vm_gvl_destroy): add prototype.
- * ext/ripper/depend: use VPATH expecting removed by above.
+Sun Nov 28 14:46:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Apr 13 23:06:20 2013 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.
- * lib/mkmf.rb (timestamp_file): gather timestamp files in one
- directory from each extension directories.
+Sun Nov 28 12:23:57 2010 Koichi Sasada <ko1@atdot.net>
-Sat Apr 13 21:09:02 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * thread.c, vm_core.h: make gvl_acquire/release/init/destruct
+ APIs to modularize GVL implementation.
- * lib/mkmf.rb (MakeMakefile#create_makefile): output new macro
- disthdrdir to specify the path of id.h, parse.h and etc.
+ * 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]
- * ext/ripper/depend: use above macro.
+ * thread_win32.c, thread_win32.h: Using simple lock
+ not by CRITICAL_SECTION but by Mutex.
+ Bug #3890 [ruby-dev:42315]
-Sat Apr 13 20:28:08 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * vm.c (ruby_vm_destruct): ditto.
- * Merge Onigmo 5.13.4 f22cf2e566712cace60d17f84d63119d7c5764ee.
- [bug] fix problem with optimization of \z (Issue #16) [Bug #8210]
+Sun Nov 28 04:40:00 2010 Luis Lavena <luislavena@gmail.com>
-Sat Apr 13 18:56:15 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * io.c (io_fwrite): use rb_w32_write_console under Windows.
- * ext/ripper/depend: parse.h and id.h may be created on topdir.
+ * win32/win32.c (rb_w32_write_console): added to write to write
+ Unicode using WriteConsoleW for stdout/stderr. [ruby-core:33166]
-Sat Apr 13 12:08:16 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+Sun Nov 28 03:58:47 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * lib/matrix.rb: Add Vector#cross_product, patch by Luis Ezcurdia
- [fix GH-276] [rubyspec:81eec89a124]
+ * lib/net/http.rb: improve rdoc.
+ patched by Mike Perham [ruby-core:33433]
-Sat Apr 13 10:20:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Nov 27 19:12:10 2010 Tanaka Akira <akr@fsij.org>
- * struct.c (rb_struct_define_without_accessor, rb_struct_define),
- (rb_struct_s_def): hide member names array.
+ * time.c: parenthesize macro arguments.
- * struct.c (anonymous_struct, new_struct, setup_struct): split
- make_struct() for each purpose.
+Sat Nov 27 18:08:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Apr 13 09:34:31 2013 Tanaka Akira <akr@fsij.org>
+ * time.c (leap_year_v_p): fixed typo. [ruby-dev:42631]
- * 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.
+Sat Nov 27 17:57:08 2010 Tanaka Akira <akr@fsij.org>
- * ext/-test-/old_thread_select/depend: Update dependencies.
+ * resolv.rb (Resolv::DNS): use the same DNS server when retry using
+ TCP. reported by Julian Mehnle. [ruby-core:32970]
- * ext/-test-/wait_for_single_fd/depend: Ditto.
+Sat Nov 27 15:45:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/bigdecimal/depend: Ditto.
+ * vm_dump.c (rb_vm_bugreport): see CrashReport log on Mac OS X.
- * ext/curses/depend: Ditto.
+ * configure.in: link addr2line only for ELF.
- * ext/digest/bubblebabble/depend: Ditto.
+Sat Nov 27 13:58:55 2010 Shugo Maeda <shugo@ruby-lang.org>
- * ext/digest/depend: Ditto.
+ * lib/optparse.rb (OptionParser#candidate): : was missing. Thanks,
+ Shota Fukumori. [ruby-dev:42634]
- * ext/digest/md5/depend: Ditto.
+Sat Nov 27 12:07:05 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
- * ext/digest/rmd160/depend: Ditto.
+ * man/ruby.1: Ruby man page from Arthur Gunn in [ruby-core:33412]
- * ext/digest/sha1/depend: Ditto.
+Sat Nov 27 11:29:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/digest/sha2/depend: Ditto.
+ * lib/optparse.rb (OptionParser#candidate): get rid of 1.9 syntax
+ so that BASERUBY can be 1.8.
- * ext/dl/callback/depend: Ditto.
+Sat Nov 27 08:16:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/dl/depend: Ditto.
+ * addr2line.c (rb_dump_backtrace_with_lines): should close fd on
+ edge case.
- * ext/etc/depend: Ditto.
+Fri Nov 26 13:33:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/nkf/depend: Ditto.
+ * addr2line.c: apply a patch from shinichiro.h.
- * ext/objspace/depend: Ditto.
+Fri Nov 26 12:21:20 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/pty/depend: Ditto.
+ * 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>
- * ext/readline/depend: Ditto.
+ * addr2line.h: ditto.
- * ext/ripper/depend: Ditto.
+ * common.mk: add addr2line.$(OBJEXT).
- * ext/sdbm/depend: Ditto.
+ * configure.in: check dl_iterate_phdr.
- * ext/socket/depend: Ditto.
+ * vm_dump.c (rb_vm_bugreport): use rb_dump_backtrace_with_lines in
+ addr2line.c when the binary is ELF.
- * ext/stringio/depend: Ditto.
+Fri Nov 26 12:12:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/strscan/depend: Ditto.
+ * 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]
- * ext/syslog/depend: Ditto.
+Fri Nov 26 11:40:11 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/-test-/num2int/depend: Removed.
+ * 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.
- * ext/dbm/depend: Ditto.
+Fri Nov 26 11:09:07 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/fcntl/depend: Ditto.
+ * vm_dump.c (dump_thread): show the displacement from the beginning
+ of the symbol.
- * ext/gdbm/depend: Ditto.
+Fri Nov 26 10:48:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/racc/cparse/depend: Ditto.
+ * vm_dump.c (dump_thread): follow the output of glibc.
+ see [ruby-dev:42627]
-Sat Apr 13 00:15:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Nov 26 09:48:45 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/etc/etc.c (Init_etc): move Passwd and Group under Etc namespace
- as primary names.
+ * re.c (rb_reg_initialize_str): should succeed the taint status from
+ the origin. [ruby-core:33338]
-Fri Apr 12 21:06:55 2013 Tanaka Akira <akr@fsij.org>
+Fri Nov 26 09:32:37 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * common.mk: pack.o depends on internal.h.
+ * vm_dump.c (dump_thread): seems to be necessary the 3rd argument of
+ SymGetLineFromAddr64(), even though MSDN says it can be zero.
-Fri Apr 12 20:59:24 2013 Tanaka Akira <akr@fsij.org>
+Fri Nov 26 09:03:38 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * bignum.c (ones): Use __builtin_popcountl if available.
+ * regcomp.c (onig_is_prelude): added to check whether ruby is still
+ in prelude (or other boot processes) or not.
- * internal.h (GCC_VERSION_SINCE): Macro moved from pack.c.
+ * regcomp.c (optimize_node_left): use onig_is_prelude for printing.
- * pack.c: Include internal.h for GCC_VERSION_SINCE.
+ * regcomp.c (set_optimize_info_from_tree): ditto.
-Fri Apr 12 18:29:42 2013 Tanaka Akira <akr@fsij.org>
+ * regcomp.c (onig_compile): ditto.
- * 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]
+ * regcomp.c (print_compiled_byte_code_list): print its address.
-Fri Apr 12 15:21:24 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * regcomp.c (print_indent_tree): print its contents tree of
+ ANCHOR_PREC_READ(_NOT) and ANCHOR_PREC_BEHIND(_NOT).
- * vm_insnhelper.c (vm_callee_setup_keyword_arg): non-symbol key is not
- a keyword argument, keep it as a positional argument.
+Thu Nov 25 23:10:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Apr 12 11:58:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * regcomp.c (print_distance_range): use PRIuSIZE.
- * 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
+ * regcomp.c (print_optimize_info): use %ld because the type of
+ calculated value of integers is long.
-Thu Apr 11 23:41:46 2013 Tanaka Akira <akr@fsij.org>
+ * regexec.c (onig_print_compiled_byte_code): add prototype.
- * common.mk: Add dependencies for include/ruby.h
+ * regexec.c (match_at): add 2nd argument.
- * tool/update-deps: Use "make -p all miniruby ruby golf" to extract
- dependencies in makefiles.
+Thu Nov 25 10:29:55 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Apr 11 23:21:17 2013 Tanaka Akira <akr@fsij.org>
+ * ext/dl/callback/mkcallback.rb (gencallback): shouldn't assume that
+ VALUE is the same size with long.
- * tool/update-deps: Use "make -p all golf" to extract dependencies in
- makefiles.
+Thu Nov 25 10:03:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Apr 11 21:02:19 2013 Tanaka Akira <akr@fsij.org>
+ * test/win32ole/test_err_in_callback.rb (teardown): remove tmp file
+ only when it exists.
- * common.mk: Dependency updated.
+Thu Nov 25 01:38:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * tool/update-deps: Rewritten.
+ * enc/trans/big5-hkscs-tbl.rb: Update table as HKSCS-2008.
+ patched by oCameLo oTnTh [ruby-core:33256]
-Thu Apr 11 19:59:48 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * enc/big5.c: add alias Big5-HKSCS:2008 to Big5-HKSCS.
- * 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)
+Wed Nov 24 15:18:07 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Apr 11 16:10:01 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * vsnprintf (BSD_vfprintf): use QUADINT macro only when _HAVE_SANE_QUAD_
+ macro is defined.
- * ext/fiddle/closure.c (USE_FFI_CLOSURE_ALLOC): define 0 on
- Mac OS X and Linux [Bug #3371]
+Wed Nov 24 12:47:16 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Apr 11 13:19:22 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * vsnprintf (BSD_vfprintf): added VC++ compatible size specifications
+ (I, I32, I64).
- * 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]
+Wed Nov 24 11:19:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Apr 11 11:11:38 2013 Akinori MUSHA <knu@iDaemons.org>
+ * string.c (rb_str_inspect): treat UTF-16 and UTF-32 as BE or LE.
- * dir.c: Fix a typo.
+Wed Nov 24 06:35:32 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Apr 11 10:39:34 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * enc/trans/utf_16_32.trans: add the UTF-32 converter.
- * ext/fiddle/closure.c (USE_FFI_CLOSURE_ALLOC): add missing case:
- RUBY_LIBFFI_MODVERSION is not defined (usually on Windows).
+Wed Nov 24 05:40:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Apr 11 09:27:04 2013 Konstantin Haase <me@rkh.im>
+Wed Nov 24 06:13:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * dir.c (file_s_fnmatch): Document File::FNM_EXTGLOB flag.
+ * win32/win32.c (filecp, wstr_to_mbstr, mbstr_to_wstr):
+ refactored.
-Thu Apr 11 09:17:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Wed Nov 24 05:40:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * README: Fix typo by Benjamin Winkler [Fixes GH-281]
+ * enc/trans/utf_16_32.trans: add a converter from UTF-8 to UTF-16.
-Thu Apr 11 06:15:51 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Nov 24 03:21:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * regint.h: fix typo: _M_AMD86 -> _M_AMD64.
+ * enc/trans/utf_16_32.trans: raise error on unpaired upper
+ surrogates.
- * siphash.c: ditto.
+Wed Nov 24 01:40:23 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * st.c: ditto.
+ * enc/utf_16_32.h: add UTF-16 and UTF-32 as a dummy encoding.
-Thu Apr 11 06:09:57 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * enc/trans/utf_16_32.trans: add a converter from UTF-16 to UTF-8.
- * ext/fiddle/extconf.rb: define RUBY_LIBFFI_MODVERSION macro.
+Tue Nov 23 21:59:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/fiddle/closure.c (USE_FFI_CLOSURE_ALLOC): define 0 or 1
- with platform and libffi's version. [Bug #3371]
+ * win32/win32.c (wlink, rb_w32_getppid): use typedef instead of
+ repeating complicated function prototypes.
-Thu Apr 11 05:30:43 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Tue Nov 23 18:54:03 2010 Nobuyoshi Nakada <nobu@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>`.
+ * vm.c (rb_thread_mark): should mark self in control
+ frames. [ruby-core:33289]
-Thu Apr 11 03:33:05 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Tue Nov 23 07:57:31 2010 Tadayoshi Funaba <tadf@dotrb.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
+ * lib/date/delta/parser.{ry,rb}: fixed a bug of token scanner.
-Wed Apr 10 17:39:13 2013 Tanaka Akira <akr@fsij.org>
+Tue Nov 23 07:29:24 2010 Tadayoshi Funaba <tadf@dotrb.org>
- * ext/bigdecimal/bigdecimal.c (VpCtoV): Initialize a local variable
- even when overflow.
+ * complex.c, rational.c ({nucomp,nurat}_expt): added a check.
-Wed Apr 10 12:32:37 2013 Tanaka Akira <akr@fsij.org>
+Tue Nov 23 07:27:27 2010 Tadayoshi Funaba <tadf@dotrb.org>
- * bignum.c (rb_ll2big): Don't overflow on signed integer negation.
+ * lib/date.rb (daynum): should be private.
- * 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.
+Tue Nov 23 07:22:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Apr 10 06:32:12 2013 Tanaka Akira <akr@fsij.org>
+ * ChangeLog (change-log-indent-text): hanging indent.
- * internal.h (MUL_OVERFLOW_INT_P): New macro.
+Tue Nov 23 06:30:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * sprintf.c (GETNUM): Don't overflow on signed integer multiplication.
+ * 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]
-Tue Apr 9 20:38:20 2013 Tanaka Akira <akr@fsij.org>
+ * configure.in (rubylibprefix): No ruby, No libprefix.
- * internal.h (MUL_OVERFLOW_SIGNED_INTEGER_P): New macro.
- (MUL_OVERFLOW_FIXNUM_P): Ditto.
- (MUL_OVERFLOW_LONG_P): Ditto.
+Tue Nov 23 01:05:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * array.c (rb_ary_product): Don't overflow on signed integer
- multiplication.
+ * vsnprintf.c (BSD_vfprintf): don't output floating point
+ when the precision is 0. [ruby-dev:42615]
- * numeric.c (fix_mul): Ditto.
- (int_pow): Ditto.
+Mon Nov 22 21:30:57 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * rational.c (f_imul): Ditto.
+ * string.c (rb_str_inspect): fix for ascii-compatible external
+ encoding and different encoding string. [ruby-core:33283]
- * insns.def (opt_mult): Ditto.
+Mon Nov 22 18:45:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * thread.c (sleep_timeval): Don't overflow on signed integer addition.
+ * lib/mkmf.rb (create_makefile): should not duplicate rules.
+ bug fix of r29842.
- * bignum.c (rb_int2big): Don't overflow on signed integer negation.
- (rb_big2ulong): Ditto.
- (rb_big2long): Ditto.
- (rb_big2ull): Ditto.
- (rb_big2ll): Ditto.
+Mon Nov 22 18:04:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Apr 9 19:45:44 2013 Tanaka Akira <akr@fsij.org>
+ * enc/big5.c: split CP950 from Big5.
- * 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.
+ * enc/big5.c: split CP951 from Big5-HKSCS.
-Tue Apr 9 15:26:12 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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/
- * compile.c (iseq_compile_each): append keyword hash to argument array
- to splat if needed. [ruby-core:54094] [Bug #8236]
+ * tool/transcode-tblgen.rb (import_ucm): add to import ucm files.
-Tue Apr 9 10:02:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Nov 22 18:33:30 2010 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.
+ * string.c (rb_str_inspect): append for each chars instead of bulk
+ copy if encoding conversion is needed. [ruby-core:33283]
-Tue Apr 9 04:57:59 JST 2013 Charles Oliver Nutter <headius@headius.com>
+Mon Nov 22 14:22:45 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * 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]
-Tue Apr 9 02:44:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Nov 22 11:58:11 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/socket/extconf.rb: $defs needs -D or -U. nothing is added
- otherwize.
+ * string.c (rb_str_concat): set ENC_CODERANGE_VALID when the
+ receiver is 7BIT and the argument is non ASCII.
- * ext/socket/extconf.rb: check struct in_addr6, which is defined in
- VC6 instead of in6_addr.
+Mon Nov 22 01:48:58 2010 Tadayoshi Funaba <tadf@dotrb.org>
- * ext/socket/option.c (optname_to_sym): fix macro name.
+ * lib/date.rb: some improvements for performance.
- * ext/socket/constants.c (rsock_cmsg_type_arg): fix macro name.
+Sat Nov 20 07:45:50 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-Mon Apr 8 23:57:21 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/mkmf.rb: adding compilation support for ObjC/ObjC++ extensions.
+ Thanks Scott Gonyea! [ruby-core:33260]
- * object.c (id_for_setter): extract common code from const, class
- variable, instance variable setters.
+Sat Nov 20 01:57:55 2010 Akio Tajima <artonx@yahoo.co.jp>
-Mon Apr 8 23:55:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * common.mk: add dependency(insns.inc) to compile.obj
- * ext/depend (ENCOBJS, TRANSOBJS): use explicit path to ruby.h for
- nmake.
+Fri Nov 19 23:05:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * win32/Makefile.sub (insns_rules.mk): remove extra backslash.
-Mon Apr 8 20:30:37 2013 Yuki Yugui Sonoda <yugui@google.com>
+ * cygwin/GNUmakefile.in, win32/Makefile.sub (clean): rc files are
+ made at compile time, so should be removed by clean.
- * ext/depend (ENCOBJS, TRANSOBJS): Add missing dependencies.
+Fri Nov 19 22:09:46 2010 Kouhei Sutou <kou@cozmixng.org>
-Mon Apr 8 17:19:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.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]
- * ext/win32ole/win32ole.c (fole_missing): should check actual argument
- count before accessing.
+Fri Nov 19 21:07:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Apr 8 16:03:55 2013 Yuki Yugui Sonoda <yugui@google.com>
+ * lib/optparse.rb: shell completion support for zsh. based on
+ <http://d.hatena.ne.jp/rubikitch/20071002/zshcomplete>
- 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.
+ * lib/optparse.rb: shell completion support for bash.
-Mon Apr 8 12:05:02 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Fri Nov 19 00:00:00 2010 Nobuyoshi Nakada <nobu@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.
+ * cygwin/GNUmakefile.in (SCRIPTPROGRAMS): no needs on cygwin.
- * object.c (rb_mod_const_set): ditto.
+ * win32/Makefile.sub (scriptbin): create script binaries.
- * object.c (rb_mod_cvar_set): ditto.
+Thu Nov 18 23:21:23 2010 Kouhei Sutou <kou@cozmixng.org>
-Sun Apr 7 13:56:16 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * 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/ruby/test_require.rb (TestRequire#test_require_nonascii_path):
- RUBY_PLATFORM should escape as Regexp,
- because RUBY_PLATFORM may contain '.'.
+ * test/rexml/test_core.rb: add a test for it.
-Sun Apr 7 10:44:01 2013 Tanaka Akira <akr@fsij.org>
+Thu Nov 18 22:58:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * include/ruby/defines.h: Simplify the logic to include sys/select.h.
- This fixes a compilation error on Haiku (gcc2 and gcc4).
+ * include/ruby/io.h (rb_io_buffer_t): extract from rb_io_t.
- * configure.in: Use shared linker as $(CC) for Haiku.
- This fixes a build error on Haiku (gcc2).
+Thu Nov 18 07:37:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Apr 7 10:41:30 2013 Tanaka Akira <akr@fsij.org>
+ * Makefile.in (reconfig): force reconfigure with previous options.
- * lib/resolv.rb (MDNSOneShot#sender): Delete an unused variable.
+ * common.mk (showconfig): show configure flags, like as
+ `config.status --config' generated by recent autoconf.
-Sun Apr 7 03:24:36 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Nov 18 07:16:49 2010 Nobuyoshi Nakada <nobu@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
+ * missing/langinfo.c (strncasecmp): get rid of redefinition.
- * addr2line.c (imax): inline is defined by configure.
+Thu Nov 18 00:02:17 2010 James Edward Gray II <jeg2@ruby-lang.org>
-Sun Apr 7 01:40:39 2013 Akinori MUSHA <knu@iDaemons.org>
+ * lib/csv.rb: Upgrading output encoding with ASCII content
+ as needed. [ruby-core:33229]
- * misc/ruby-electric.el (ruby-electric-hash): New electric
- function that expands a hash sign inside a string or regexp to
- "#{}".
+Wed Nov 17 23:19:21 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * misc/ruby-electric.el (ruby-electric-curlies): Do not insert
- spaces inside when the curly brace is a delimiter of %r, %w,
- etc.
+ * win32/configure.bat: remove quotes from arguments to be quoted.
- * misc/ruby-electric.el (ruby-electric-curlies): Insert another
- space before a closing curly brace when
- ruby-electric-newline-before-closing-bracket is nil.
+ * lib/mkmf.rb (create_makefile): use forward slashes in messages.
-Sun Apr 7 01:01:26 2013 Tanaka Akira <akr@fsij.org>
+ * lib/mkmf.rb (create_makefile): make extension libraries messages
+ brief.
- * strftime.c (rb_strftime_with_timespec): Test yday range.
- [ruby-core:44088] [Bug #6247] reported by Ruby Submit.
+ * win32/Makefile.sub (MAKEDIRS): should not include silent flag.
-Sat Apr 6 23:46:54 2013 Naohisa Goto <ngotogenome@gmail.com>
+ * common.mk (ext/ripper/ripper.c, ext/json/parser/parser.c): pass
+ Q and ECHO. [ruby-core:33226]
- * configure.in (AC_CHECK_HEADERS): atomic.h for Solaris atomic_ops.
+Wed Nov 17 16:09:52 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * ruby_atomic.h: Skip using Solaris10 atomic_ops on Solaris 9 or
- earlier if atomic.h is not available. [ruby-dev:47229] [Bug #8228]
+ * test/test_tracer.rb: new test case.
+ minimal regression test for r29280.
-Sat Apr 6 23:40:40 2013 Tanaka Akira <akr@fsij.org>
+Wed Nov 17 16:04:23 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * lib/resolv.rb: Support LOC resources.
- [ruby-core:23361] [Feature #1436] by JB Smith.
+ * 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.
-Sat Apr 6 23:38:09 2013 Naohisa Goto <ngotogenome@gmail.com>
+Wed Nov 17 15:16:48 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * 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]
+ * regint.h (OnigOpInfoType): constify name.
-Sat Apr 6 23:31:38 2013 Tanaka Akira <akr@fsij.org>
+ * regcomp.c (op2name): constify return value.
- * lib/resolv.rb: Add one-shot multicast DNS support.
- [ruby-core:53387] [Feature #8089] by Eric Hodel.
+ * regcomp.c (onig_print_compiled_byte_code): use PRIuPTR and
+ uintptr_t to clean warnings.
-Sat Apr 6 22:12:01 2013 Tanaka Akira <akr@fsij.org>
+ * regcomp.c (print_indent_tree): use PRIxPTR and intptr_t.
- * lib/resolv.rb (Resolv::DNS.fetch_resource): New method to obtain
- full result.
- [ruby-dev:43587] [Feature #4788] proposed by Makoto Kishimoto.
+ * regexec.c (match_at): use PRIdPTR and intptr_t.
-Sat Apr 6 20:17:51 2013 Tanaka Akira <akr@fsij.org>
+Wed Nov 17 09:49:10 2010 NARUSE, Yui <naruse@ruby-lang.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.
+ * enc/shift_jis.c (property_name_to_ctype): fix memory leak.
- * ext/socket/rubysocket.h: Follow the above change.
+ * enc/euc_jp.c (property_name_to_ctype): ditto.
-Sat Apr 6 19:24:59 2013 Tanaka Akira <akr@fsij.org>
+Wed Nov 17 08:54:04 2010 James Edward Gray II <jeg2@ruby-lang.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.
+ * lib/csv.rb: Upgrading output encoding as needed. [ruby-core:33135]
- * ext/socket/rubysocket.h (rsock_sys_fail_sockaddr): Follow the above
- change.
+Tue Nov 16 22:30:39 2010 Yusuke Endoh <mame@tsg.ne.jp>
-Sat Apr 6 14:28:23 2013 Tanaka Akira <akr@fsij.org>
+ * vm_insnhelper.c (vm_throw): remove fear of undefined behavior :-)
+ Coverity Scan found this bug.
- * 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.
+Tue Nov 16 09:33:00 2010 Kenta Murata <mrkn@mrkn.jp>
- * 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/bigdecimal/lib/bigdecimal/util.rb (to_digits): avoid unused
+ variables warning, reported by Aaron Patterson.
- * 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.
+Tue Nov 16 06:39:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Apr 6 13:34:20 2013 Tanaka Akira <akr@fsij.org>
+ * pack.c (PACK_ITEM_ADJUST): return nil not result array and yield
+ values if block is given. [ruby-core:33193]
- * ext/socket/socket.c (rsock_sys_fail_sockaddr): Delete 2nd argument.
+Tue Nov 16 00:21:20 2010 Yusuke Endoh <mame@tsg.ne.jp>
- * ext/socket/rubysocket.h (rsock_sys_fail_sockaddr): Follow above
- change.
+ * regparse.c (and_cclass, or_cclass): fix memory leak. Coverity Scan
+ found this bug. [ruby-dev:42579]
-Sat Apr 6 13:13:39 2013 Tanaka Akira <akr@fsij.org>
+Tue Nov 16 00:07:32 2010 Yusuke Endoh <mame@tsg.ne.jp>
- * ext/socket/socket.c (rsock_sys_fail_path): Use rb_str_inspect only
- for String to avoid SEGV.
+ * gc.c (assign_heap_slot): fix fear of memory leak and memory
+ violation. Coverity Scan found this bug.
-Sat Apr 6 12:40:16 2013 Tanaka Akira <akr@fsij.org>
+Mon Nov 15 23:54:45 2010 Yusuke Endoh <mame@tsg.ne.jp>
- * ext/socket/rubysocket.h (rsock_sys_fail_host_port): Wrap by NORETURN.
- (rsock_sys_fail_path): Ditto.
- (rsock_sys_fail_sockaddr): Ditto.
+ * eval_intern.h (CHECK_STACK_OVERFLOW): it was not intended to add
+ size_t to a pointer typed VALUE*. Coverity Scan found this defect.
-Sat Apr 6 11:49:35 2013 Tanaka Akira <akr@fsij.org>
+Mon Nov 15 23:41:21 2010 Yusuke Endoh <mame@tsg.ne.jp>
- * ext/socket/socket.c (rsock_sys_fail_path): Use rb_str_inspect if the
- path contains a NUL.
+ * 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.
-Sat Apr 6 11:39:19 2013 Tanaka Akira <akr@fsij.org>
+Mon Nov 15 22:47:27 2010 Yusuke Endoh <mame@tsg.ne.jp>
- * ext/socket: Improve socket exception message to show socket address.
- [ruby-core:45617] [Feature #6583] proposed Eric Hodel.
+ * vm_eval.c (rb_funcall): ensure va_end after va_init_list. Coverity
+ Scan found this bug.
- * ext/socket/rubysocket.h (rsock_sys_fail_host_port): Declared.
- (rsock_sys_fail_path): Ditto.
- (rsock_sys_fail_sockaddr): Ditto.
+Mon Nov 15 08:36:12 2010 Aaron Patterson <aaron@tenderlovemaking.com>
- * ext/socket/udpsocket.c (udp_connect): Use rsock_sys_fail_host_port.
- (udp_bind): Ditto.
- (udp_send): Ditto.
+ * lib/racc/parser.rb (do_parse, yyparse): using class eval to define
+ method and avoid __send__.
- * ext/socket/init.c (rsock_init_sock): Specify a string for rb_sys_fail
- argument.
- (make_fd_nonblock): Ditto.
- (rsock_s_accept): Ditto.
+Mon Nov 15 06:43:48 2010 Aaron Patterson <aaron@tenderlovemaking.com>
- * ext/socket/ipsocket.c (init_inetsock_internal): Use
- rsock_sys_fail_host_port.
+ * etc/openssl/ossl_ssl.c (ossl_ssl_get_cert): raise exception if
+ pointer is invalid. Thanks Ippei Obayashi! [ruby-dev:42573]
- * 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.
+Sun Nov 14 17:57:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * enc/Makefile.in (distclean): should not remove sources which are
+ distributed in tarball.
- * 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.
+Sun Nov 14 16:48:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Apr 6 11:23:18 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+ * parse.y (parser_set_token_info): turn on/off with directives.
+ [ruby-core:25442]
- * test/ruby/test_require.rb (TestRequire#test_require_nonascii_path):
- fix load path for encoding to run the test as stand-alone.
+Sun Nov 14 12:05:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Apr 6 09:54:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (argf_readlines): forward to current_file for arguments
+ check. http://twitter.com/nagachika/status/3634254856589312
- * pack.c (NATINT_LEN): fix definition order, must be after
- NATINT_PACK.
+Sun Nov 14 08:48:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Apr 6 03:11:07 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * win32/setup.mak (-basic-vars-, -runtime-): suppress trailing
+ space and compiler command line.
- * ext/psych/lib/psych/visitors/yaml_tree.rb: fix symbol keys in coder
- emission. Thanks @tjwallace
- * test/psych/test_coder.rb: test for change
+Sun Nov 14 04:22:32 2010 Alexander Zavorine <alexandre.zavorine@nokia.com>
-Sat Apr 6 02:54:08 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * symbian/setup (config.h): Added HAVE_LABS and HAVE_LLABS to config.h.
- * 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
+ * symbian/configure.bat: Changed packaging version in line with API
+ style 3 versioning.
-Sat Apr 6 02:30:28 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Nov 13 16:37:56 2010 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]
+ * common.mk (showflags, help): emit messages at once.
-Sat Apr 6 02:06:04 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * win32/Makefile.sub (MSG, EOM): remove surrounding quotes by %~I.
- * ext/psych/lib/psych/visitors/to_ruby.rb: correctly register
- self-referential strings. Fixes tenderlove/psych #135
+Sat Nov 13 01:31:30 2010 Akio Tajima <artonx@yahoo.co.jp>
- * test/psych/test_string.rb: appropriate test.
+ * win32/Makefile.sub: reorder variable End Of Message (don't display it)
-Sat Apr 6 01:21:56 2013 Tanaka Akira <akr@fsij.org>
+Fri Nov 12 20:52:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.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.
+ * common.mk (showflags, help): use caret to quote leading spaces on
+ Windows.
-Sat Apr 6 00:19:30 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+ * Makefile.in, common.mk, cygwin/GNUmakefile.in, enc/depend,
+ ext/ripper/depend, lib/mkmf.rb, win32/Makefile.sub: caddle up.
- * 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]
+Fri Nov 12 16:35:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * test/ruby/test_require.rb (TestRequire#test_require_nonascii_path):
- a test for the above.
+ * 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 Apr 5 20:41:49 2013 Tanaka Akira <akr@fsij.org>
+Fri Nov 12 09:58:30 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * include/ruby/defines.h (HAVE_TRUE_LONG_LONG): Defined to distinguish
- availability of long long and availability of 64bit integer type.
+ * 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.
- * pack.c: Use HAVE_TRUE_LONG_LONG to distinguish q! and Q! support.
+Fri Nov 12 00:30:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Apr 5 20:19:42 2013 Tanaka Akira <akr@fsij.org>
+ * win32/Makefile.sub (config.h): need PRI_LL_PREFIX.
- * addr2line.c: Include ruby/missing.h to fix compile error on Debian.
+Thu Nov 11 23:38:32 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Apr 5 19:39:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in: ANSI C-conforming const and volatile are mandatory
- * compile.c (iseq_compile_each): fix of defined? with empty
- expression. [ruby-core:53999] [Bug #8220]
+ * configure.in (AC_C_CONST, AC_C_INLINE, AC_C_VOLATILE): check
+ before used in other checks.
-Fri Apr 5 13:22:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (RUBY_CHECK_PRINTF_PREFIX): should not break from
+ RUBY_WERROR_FLAG, so that ac_c_werror_flag gets restored.
- * ext/curses/curses.c (Init_curses): fix implementation function,
- crmode should be same as cbreak. [ruby-core:54013] [Bug #8222]
+Thu Nov 11 23:04:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Apr 5 12:06:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/iconv/iconv.c (warn_deprecated): show caller position.
- * ext/curses/hello.rb: Typo in Curses example by Drew Blas
- [Fixes GH-273]
+Thu Nov 11 23:03:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Apr 4 23:45:13 2013 Tanaka Akira <akr@fsij.org>
+ * io.c (argf_close): untie tied io before closing.
- * 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.
+ * io.c (argf_write): add ARGF.write and so on.
-Thu Apr 4 23:24:45 2013 Tanaka Akira <akr@fsij.org>
+ * io.c (argf_read_nonblock): add ARGF.read_nonblock.
- * ext/socket/extconf.rb: Remove condition for bcc.
+Thu Nov 11 21:49:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Apr 4 22:53:23 2013 Tanaka Akira <akr@fsij.org>
+ * lib/rdoc/stats.rb (RDoc#print): get rid of NaN.
- * include/ruby/ruby.h (FIX2LONG): Parenthesize the macro body.
+Thu Nov 11 21:47:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Apr 4 22:32:32 2013 Tanaka Akira <akr@fsij.org>
+ * common.mk (SHOWFLAGS): show compile flags.
- * time.c (time_strftime): Describe %L and %N truncates digits under
- the specified length.
- [ruby-core:52130] [Bug #7829]
+ * 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 Apr 4 22:08:46 2013 Tanaka Akira <akr@fsij.org>
+Thu Nov 11 21:32:09 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * object.c (rb_mod_cvar_set): Reverted "avoid inadvertent
- symbol creation" to avoid SEGV by
- Class.new.class_variable_set(1, 2).
+ * lib/mkmf.rb (try_func): accept variable address.
-Thu Apr 4 20:07:19 2013 Tanaka Akira <akr@fsij.org>
+ * ext/win32ole/extconf.rb: libuuid is needed on cygwin.
- * ext/pathname/pathname.c (path_write): New method.
- (path_binwrite): Ditto.
- [ruby-core:49468] [Feature #7378]
+Thu Nov 11 21:24:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Apr 4 16:51:29 2013 Yuki Yugui Sonoda <yugui@google.com>
+ * file.c (file_expand_path): use cygwin_conv_path on cygwin 1.7 or
+ later.
- * thread_pthread.c: Fixes wrong scopes of #if USE_SLEEPY_TIMER_THREAD
- .. #endif sections. This fixes a build error on NativeClient.
+ * ruby.c (push_include_cygwin): ditto.
-Wed Apr 3 17:25:31 2013 Yuki Yugui Sonoda <yugui@google.com>
+Thu Nov 11 20:49:48 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * thread_pthread.c (ruby_init_stack): Avoid using uninitialized value.
- stackaddr and size are not set if get_stack() fails.
+ * include/ruby/ruby.h (PRI_LL_PREFIX): format type specifier for
+ LONG_LONG may vary on platforms.
-Thu Apr 4 16:55:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Nov 11 20:45:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * struct.c (make_struct): avoid inadvertent symbol creation.
- (rb_struct_aref): ditto.
- (rb_struct_aset): ditto.
+ * configure.in (SYMBOL_PREFIX): separate from EXPORT_PREFIX.
-Thu Apr 4 16:54:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/mkexports.rb (Exports#each_export): use SYMBOL_PREFIX.
- * object.c (rb_mod_const_set): avoid inadvertent symbol creation.
- (rb_obj_ivar_set): ditto.
- (rb_mod_cvar_set): ditto.
+Wed Nov 10 07:20:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Apr 4 15:46:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * cygwin/GNUmakefile.in (scriptbin): make executable file from
+ scripts with stub.
- * enum.c (enum_inject): avoid inadvertent symbol creation.
+ * ruby.c (load_file_internal): assume xflag for exe file as well
+ as no-shebang file.
-Thu Apr 4 14:37:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * tool/rbinstall.rb: install script programs.
- * thread.c (rb_thread_aref): avoid inadvertent symbol creation.
- (rb_thread_variable_get): ditto.
- (rb_thread_key_p): ditto.
- (rb_thread_variable_p): ditto.
+ * win32/mkexports.rb (Exports#initialize): alias ruby_sysinit for
+ stub.
-Thu Apr 4 11:33:57 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * win32/stub.c: stub for scripts. [EXPERIMENTAL]
- * ext/openssl/ossl_bn.c (ossl_bn_to_i): Use bn2hex to speed up.
- In general, binary to/from decimal needs extra cost.
+Tue Nov 9 21:57:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Apr 4 07:24:18 2013 Tanaka Akira <akr@fsij.org>
+ * dln.c (init_funcname): allocate and build initialization
+ funciton name at once.
- * ext/socket/extconf.rb: Specify arguments to test functions.
+Tue Nov 9 21:14:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Apr 4 03:25:09 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * configure.in (AC_FUNC_GETPGRP, AC_FUNC_SETPGRP): no need when
+ not used.
- * ext/openssl/ossl_bn.c (ossl_bn_initialize): fix can't create from bn.
+ * configure.in (EXPORT_PREFIX): check generic prefix.
-Wed Apr 3 22:09:25 2013 Tanaka Akira <akr@fsij.org>
+Tue Nov 9 13:24:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/socket/extconf.rb: Test functions and libraries after headers.
+ * regenc.c (onigenc_minimum_property_name_to_ctype):
+ \p{...} should be case insensitive. [ruby-core:33000]
-Wed Apr 3 21:23:29 2013 Tanaka Akira <akr@fsij.org>
+ * regenc.c (onigenc_property_list_add_property):
+ ditto.
- * io.c (rb_io_seek_m): Accept :CUR, :END, :SET as "whence" argument.
- (interpret_seek_whence): New function.
- [ruby-dev:45818] [Feature #6643]
+ * enc/euc_jp.c (init_property_list, property_name_to_ctype):
+ to lowercase property names.
-Wed Apr 3 20:52:49 2013 Tanaka Akira <akr@fsij.org>
+ * enc/shift_jis.c (init_property_list, property_name_to_ctype):
+ ditto.
- * process.c: Describe the behavior which Ruby invokes a commandline
- directly without shell if the commandline is simple enough.
- [ruby-core:50459] [Bug #7489]
+Tue Nov 9 13:29:36 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Wed Apr 3 20:27:37 2013 Tanaka Akira <akr@fsij.org>
+ * win32/win32.c (overlapped_socket_io): get rid of a warning of 64bit
+ mingw.
- * ext/extmk.rb (extmake): Invoke Logging::log_close in a ensure
- clause.
+Tue Nov 9 10:44:19 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Apr 3 18:53:58 2013 Tanaka Akira <akr@fsij.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/
- * 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.
+Tue Nov 9 07:30:15 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/mkmf.rb (Logging.log_opened?): New method.
+ * error.c (rb_syserr_new): new function to make SystemCallError
+ instance without errno. [EXPERIMENTAL]
- [ruby-dev:47215] [Bug #8209]
+ * error.c (rb_syserr_fail, rb_mod_syserr_fail): ditto.
-Wed Apr 3 17:11:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Nov 9 05:54:57 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * 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]
+ * lib/*.rb: Remove unused variable warnings.
+ Patch by Run Paint [ruby-core:30991]
-Wed Apr 3 16:35:32 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/rubygems/*, lib/rdoc/*.rb, lib/rake/*.rb: ditto
- * bignum.c (rb_big_eq): hide intermediate Bignums not just freeing
- memory. [ruby-core:53893] [Bug #8204]
+Mon Nov 8 18:26:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * object.c (rb_obj_hide): hide an object by clearing klass.
+ * util.c (ruby_hdtoa): fix type cast and bufsize.
- * bignum.c (rb_big_eq): test as Fixnum if possible and get rid of zero
- length Bignum. [ruby-core:53893] [Bug #8204]
+Mon Nov 8 15:40:56 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Apr 2 23:56:03 2013 Tanaka Akira <akr@fsij.org>
+ * vsnprintf.c (BSD_vfprintf): fix precision specifier doesn't
+ work well on %f. [ruby-dev:42552]
- * 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]
+Mon Nov 8 14:41:40 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Tue Apr 2 20:24:52 2013 Tanaka Akira <akr@fsij.org>
+ * win32/win32.c (get_wsa_extension_function): typos.
- * 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]
+Mon Nov 8 13:41:33 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Apr 2 19:24:26 2013 Tanaka Akira <akr@fsij.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
- * ext/-test-/num2int/num2int.c: Define utility methods
- as module methods of Num2int.
+Mon Nov 8 12:16:39 2010 Ben Walton <bwalton@artsci.utoronto.ca>
- * test/-ext-/num2int/test_num2int.rb: Follow the above change.
+ * configure.in: support -h for solaris linker when gcc not used
-Tue Apr 2 18:49:01 2013 Tanaka Akira <akr@fsij.org>
+Mon Nov 8 11:47:39 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/securerandom.rb: Don't use Array#to_s.
- [ruby-core:52058] [Bug #7811] fixed by zzak (Zachary Scott).
+ * win32/win32.c (finish_overlapped_socket): refactoring.
-Tue Apr 2 17:38:20 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Mon Nov 8 11:02:21 2010 NAKAMURA Usaku <usa@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]
+ * win32/win32.c (get_proc_address): refactoring.
-Tue Apr 2 16:00:06 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * win32/win32.c (get_wsa_exetinsion_function): refactoring.
- * vm_dump.c (rb_print_backtrace): separate to ease showing C backtrace.
+Mon Nov 8 09:45:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * internal.h (rb_print_backtrace): ditto.
+ * 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
-Tue Apr 2 15:22:09 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Mon Nov 8 07:26:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/envutil.rb (assert_separately): stop_auto_run of
- Test::Unit::Runner to prevent auto runner use ARGV.
+ * configure.in: check only the first symbol to get rid of
+ duplication. [ruby-core:33084] #4031
- * test/ruby/envutil.rb (assert_separately): add $: to separate process.
+Sun Nov 7 10:13:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/envutil.rb (assert_separately): fail if stderr is not
- empty and ignore_stderr is false.
+ * configure.in (NM): check on all platforms. #4031
-Tue Apr 2 06:46:59 2013 Tanaka Akira <akr@fsij.org>
+Sun Nov 7 06:16:33 2010 Aaron Patterson <aaron@tenderlovemaking.com>
- * ext/-test-/num2int/num2int.c: Rename utility methods
- to global functions to ease manual experiments.
+ * test/openssl/test_ocsp.rb: adding test for r29699. Thanks Elise
+ Huard! [ruby-core:32460]
- * test/-ext-/num2int/test_num2int.rb: Follow the above change.
+Sat Nov 6 07:33:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Apr 1 22:26:17 2013 Tanaka Akira <akr@fsij.org>
+ * configure.in (rb_cv_export_prefix): check for prefixed
+ underscore of exported symbols
- * 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.
+ * tool/rbinstall.rb (bin-comm): prepend prolog shell script if
+ necessary.
-Mon Apr 1 22:08:02 2013 Benoit Daloze <eregontp@gmail.com>
+ * configure.in (LIBRUBY_RELATIVE): use rpath token expansion.
- * ext/zlib/zlib.c (Zlib::Inflate.new):
- Fix documentation syntax and naming errors.
- Based on patch by Robin Dupret. Fix GH-271.
+Sat Nov 6 07:24:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Apr 1 21:22:31 2013 Tanaka Akira <akr@fsij.org>
+ * template/ruby.pc.in (arch, sitearch): reordered.
- * test/-ext-/num2int/test_num2int.rb: Test small bignums.
+ * configure.in: keep failed file.
-Mon Apr 1 21:10:56 2013 Tanaka Akira <akr@fsij.org>
+Sat Nov 6 07:03:49 2010 Nobuyoshi Nakada <nobu@ruby-lang.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.
+ * process.c (rb_fork_err): save errinfo before fdopen.
-Mon Apr 1 20:57:57 2013 Tanaka Akira <akr@fsij.org>
+Sat Nov 6 00:43:58 2010 Aaron Patterson <aaron@tenderlovemaking.com>
- * ext/-test-/num2int/num2int.c: Return string for result, instead of
- printing.
+ * 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]
- * test/-ext-/num2int/test_num2int.rb: updated to follow above change.
+Fri Nov 5 12:23:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Apr 1 20:08:07 2013 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_{process,system}.rb (test_fallback_to_sh):
+ meaningless and wrong tests where /bin/sh does not exist.
- * 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.
+ * process.c (proc_spawn_v): should spawn, not exec.
-Mon Apr 1 18:41:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Nov 5 01:21:31 2010 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.
+ * process.c (proc_exec_v, proc_spawn_v): try to execute with sh if
+ no shebang. [ruby-core:32745] [EXPERIMENTAL]
-Mon Apr 1 14:22:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Nov 5 00:39:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in: check clang version by predefined macro values.
- [Bug #8192]
+ * io.c (rb_io_readlines, rb_io_each_line): limit must not be zero.
+ a patch from Tomoyuki Chikanaga at [ruby-dev:42538]. #4024
-Mon Apr 1 12:05:15 2013 Tanaka Akira <akr@fsij.org>
+Fri Nov 5 00:14:15 2010 Aaron Patterson <aaron@tenderlovemaking.com>
- * numeric.c (check_uint): Take the 1st argument as unsigned long,
- instead of VALUE. Refine the validity test conditions.
- (check_ushort): Ditto.
+ * ext/fiddle/extconf.rb: fixing ffi library location on windows.
+ Thanks Usa! [ruby-core:32930]
-Mon Apr 1 07:15:03 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Thu Nov 4 20:04:44 2010 Koichi Sasada <ko1@atdot.net>
- * configure.in: use quadrigraph to put '[' or ']'. [Bug #8192]
+ * gc.c (rb_newobj): force garbage_collect() if GC.stress == true.
-Mon Apr 1 04:16:41 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Nov 4 19:48:22 2010 Koichi Sasada <ko1@atdot.net>
- * configure.in: kick old clang. [ruby-dev:47204] [Bug #8192]
+ * ChangeLog: missed to write a last ChangeLog.
-Mon Apr 1 01:12:46 2013 Tanaka Akira <akr@fsij.org>
+ * gc.c (gc_finalize_deferred): removed.
- * include/ruby/ruby.h (FIX2ULONG): Make it consistent with NUM2ULONG.
+ * gc.c (rb_gc_finalize_deferred): Do not invoke a free_unused_heaps().
- * ext/-test-/num2int/num2int.c: Add utility methods for FIX2XXX tests.
+Thu Nov 4 19:45:27 2010 Koichi Sasada <ko1@atdot.net>
- * test/-ext-/num2int/test_num2int.rb: Add tests for FIX2XXX.
+ * gc.c (run_final): do not need argument obj.
-Sun Mar 31 17:17:56 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Nov 4 19:26:10 2010 Koichi Sasada <ko1@atdot.net>
- * proc.c (rb_mod_define_method): consider visibility in define_method.
- patch by mashiro <mail AT mashiro.org>. fix GH-268.
+ * gc.c (before_gc_sweep): fix commit miss.
-Sun Mar 31 15:40:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Nov 4 19:20:46 2010 Koichi Sasada <ko1@atdot.net>
- * win32/configure.bat: try to fix option arguments split by commas and
- equals here. this batch file no longer run with old command.com.
+ * gc.c (after_gc_sweep, before_gc_sweep):
+ invoke rb_sweep_method_entry() as soon as possible.
- * tool/mkconfig.rb: no hacks for cmd.exe.
+Thu Nov 4 19:13:58 2010 Koichi Sasada <ko1@atdot.net>
-Sun Mar 31 13:47:04 2013 Tanaka Akira <akr@fsij.org>
+ * gc.c (after_gc_sweep, slot_sweep): finalizers should be invoked
+ as soon as possible.
- * 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.
+Thu Nov 4 10:30:40 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-Sun Mar 31 06:27:17 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (--with-valgrind): Now this option is default on.
+ You can still explicitly disable this feature by specifying
+ --without-valgrind.
- * 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]
+Thu Nov 4 02:06:16 2010 Yusuke Endoh <mame@tsg.ne.jp>
-Sat Mar 30 14:11:28 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * cont.c (fiber_t_alloc): raise an error when fiber is going to be
+ initialized twice. [ruby-dev:42524]
- * bcc32: removed. agreed at
- http://bugs.ruby-lang.org/projects/ruby/wiki/DevelopersMeeting20130223Japan
+Thu Nov 4 02:04:25 2010 Yusuke Endoh <mame@tsg.ne.jp>
-Sat Mar 30 03:58:00 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * cont.c (rb_fiber_resume): raise an "double resume" error when root
+ fiber is going to be resumed. [ruby-dev:42523]
- * 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).
+Wed Nov 3 14:17:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Mar 30 03:49:21 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * lib/ostruct.rb (OpenStruct#delete_field): also undefine
+ accessor methods. [ruby-core:33010]
- * 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).
+Wed Nov 3 14:13:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Mar 29 22:09:46 2013 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]
- * thread.c (rb_mutex_synchronize_m): yield no block params. patch by
- splattael (Peter Suschlik) in [ruby-core:53773] [Bug #8097].
- fix GH-266.
+Wed Nov 3 08:58:59 2010 Koichi Sasada <ko1@atdot.net>
-Fri Mar 29 16:51:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * gc.c, vm.c, vm_core.h: remove USE_VALUE_CACHE option.
- * io.c (argf_next_argv): set init flag if succeeded to forward, after
- skipping.
+Wed Nov 3 07:47:25 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
- * io.c (argf_block_call_i, argf_block_call): no more forwarding if
- forwarded after skipping. [ruby-list:49185]
+ * lib/irb/ruby-lex.rb (RubyLex#identify_string): parse multiple
+ regex options. a patch from Heesob Park in [ruby-core:32988].
- * io.c (argf_close): deal with init flag.
+Wed Nov 3 07:33:57 2010 Tanaka Akira <akr@fsij.org>
- * io.c (argf_block_call_i, argf_block_call): forward next file if
- skipped while iteration, to get rid of IOError. [ruby-list:49185]
+ * vm_method.c (rb_clear_cache_by_class): just return if the class has
+ no method. reported by Eric Wong. [ruby-core:32689]
-Fri Mar 29 11:09:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Nov 2 22:50:25 2010 Aaron Patterson <aaron@tenderlovemaking.com>
- * lib/mkmf.rb (configuration): not include all CFLAGS in CXXFLAGS, to
- use different set than C for C++. [ruby-core:45273] [Bug #6504]
+ * ext/psych/lib/psych/visitors/visitor.rb (initialize): push accessor
+ methods to subclass that actually uses them.
-Fri Mar 29 10:24:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Nov 2 22:47:08 2010 Aaron Patterson <aaron@tenderlovemaking.com>
- * 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]
+ * ext/psych/lib/psych/visitors/visitor.rb (accept): switch to
+ a dispatch cache rather than case / when statement.
-Fri Mar 29 06:39:42 2013 Tanaka Akira <akr@fsij.org>
+Tue Nov 2 21:46:52 2010 Kouhei Sutou <kou@cozmixng.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
+ * NEWS: fix a typo.
-Fri Mar 29 00:54:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Nov 2 20:10:32 2010 Tajima Akio <artonx@yahoo.co.jp>
- * lib/mkmf.rb (MAIN_DOES_NOTHING): ensure symbols for tests to be
- preserved. [ruby-core:53745] [Bug #8169]
+ * test/rake/test_tasks.rb: clear env var which is used by the test.
+ [ruby-dev:42508]
-Thu Mar 28 23:11:25 2013 Tanaka Akira <akr@fsij.org>
+Tue Nov 2 00:25:54 2010 NAKAMURA Usaku <usa@ruby-lang.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.
+ * ext/socket/extconf.rb: win64 is just same with win32 about socket.
+ notice: but wince is not same.
-Thu Mar 28 23:10:10 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Nov 1 21:25:57 2010 URABE Shyouhei <shyouhei@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]
+ * 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().
-Thu Mar 28 18:22:21 2013 Tanaka Akira <akr@fsij.org>
+Sun Oct 31 23:27:09 2010 Koichi Sasada <ko1@atdot.net>
- * test/-ext-/num2int/test_num2int.rb: extract
- assert_num2i_success_internal and assert_num2i_error_internal and
- provide assertion messages as "NUM2XXX(NNN)".
+ * gc.c (finalizer_table, objspace->final.table):
+ Create finalizer_table at Init_heap().
+ Remove all null checks of finalizer_table.
-Thu Mar 28 07:05:25 2013 Tanaka Akira <akr@fsij.org>
+ * gc.c (mark_tbl): skip if no table entries.
- * include/ruby/intern.h: Delete redundant inclusions caused by
- AC_INCLUDES_DEFAULT in defines.h.
+ * gc.c (slot_swee): remove useless need_call_final check.
- * include/ruby/defines.h: Ditto.
+Sun Oct 31 22:32:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * include/ruby/ruby.h: Ditto.
+ * gc.c (rb_objspace_free): finalizers should be called separately
+ from freeing objspace. [ruby-dev:42479]
- * include/ruby/st.h: Ditto.
+Sun Oct 31 22:24:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Mar 28 06:51:31 2013 Tanaka Akira <akr@fsij.org>
+ * eval.c (ruby_cleanup): free current VM and its objspace even
+ when exiting by SystemExit.
- * 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.
+Sun Oct 31 22:10:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Mar 27 22:09:14 2013 Tanaka Akira <akr@fsij.org>
+ * compile.c (new_child_iseq): adjust argument types.
- * 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.
+ * 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.
- * 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.
+ * compile.c (iseq_set_exception_table): suppress warnings.
-Wed Mar 27 20:59:47 2013 Tanaka Akira <akr@fsij.org>
+ * insns.def (putspecialobject, defined): ditto.
- * test/-ext-/num2int/test_num2int.rb (assert_num2i_success): New
- utility method.
- (assert_num2i_error): Ditto.
+ * iseq.c (iseq_load): ditto.
-Wed Mar 27 20:37:59 2013 Tanaka Akira <akr@fsij.org>
+Sun Oct 31 09:30:51 2010 Koichi Sasada <ko1@atdot.net>
- * time.c (num_exact): Use to_r method only if to_int method is
- available.
- [ruby-core:53764] [Bug #8173] Reported by Hiro Asari.
+ * 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.
-Wed Mar 27 12:07:40 2013 Tanaka Akira <akr@fsij.org>
+ * 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.
- * test/-ext-/num2int/test_num2int.rb (test_num2ll): test LLONG_MIN,
- not LONG_MIN.
+ * iseq.h: define enum catch_type and enum defined_type.
-Wed Mar 27 12:02:45 2013 Tanaka Akira <akr@fsij.org>
+ * insns.def: apply above changes.
- * internal.h (TIMET_MAX_PLUS_ONE): definition simplified.
+ * iseq.c: define ISEQ_MAJOR_VERSION and ISEQ_MINOR_VERSION.
-Wed Mar 27 06:39:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Oct 30 23:38:59 2010 Kouhei Sutou <kou@cozmixng.org>
- * lib/mkmf.rb (MAIN_DOES_NOTHING): force to refer symbols for tests
- to be preserved. [ruby-core:53745] [Bug #8169]
+ * lib/rexml/encoding.rb: untabify.
-Wed Mar 27 05:15:37 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Oct 30 21:06:37 2010 Kouhei Sutou <kou@cozmixng.org>
- * configure.in (RUBY_REPLACE_TYPE): define SIGNEDNESS_OF_type same as
- check_signedness of mkmf.rb.
+ * lib/rexml/encoding.rb: use Ruby native encoding mechanism.
+ [ruby-dev:42464]
+ * lib/rexml/encodings/: remove.
- * internal.h (TIMET_MAX, TIMET_MIN, TIMET_MAX_PLUS_ONE): use
- SIGNEDNESS_OF_TIME_T.
+ * 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.
-Wed Mar 27 00:28:45 2013 Tanaka Akira <akr@fsij.org>
+ * test/rexml/, test/rss/: follow the above encoding changes.
- * internal.h (TIMET_MAX_PLUS_ONE): Defined.
+ * NEWS: add REXML's incompatible change about encoding.
- * thread.c (double2timeval): Saturate out-of-range values.
+Sat Oct 30 17:23:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 26 23:41:18 2013 Tanaka Akira <akr@fsij.org>
+ * util.c (ruby_strtod): get rid of overflow/underflow as possible.
- * internal.h: Define TIMET_MAX and TIMET_MIN here.
+Sat Oct 30 14:37:39 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * time.c: Remove TIMET_MAX and TIMET_MIN definitions.
+ * configure.in (ruby_pc): erase runtime-defined variables and
+ check if generated pc file is valid.
- * thread.c: Ditto.
+ * template/ruby.pc.in (DEFFILE): need for mingw.
- * thread_pthread.c: Remove TIMET_MAX definition.
+ * template/ruby.pc.in (LIBRUBY): fix the order.
- * thread_win32.c: Ditto.
+Sat Oct 30 11:33:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 26 22:31:10 2013 Tanaka Akira <akr@fsij.org>
+ * win32/Makefile.sub (ruby_pc): ignore missing variables.
- * ext/socket/socket.c (sockaddr_len): return the shortest length for
- unknown socket address.
+ * template/ruby.pc.in: add missing variables for mswin.
-Tue Mar 26 22:14:46 2013 Tanaka Akira <akr@fsij.org>
+Sat Oct 30 10:24:35 2010 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
- * thread.c (double2timeval): convert the infinity to TIME_MAX to avoid
- SEGV by Thread.new {}.join(Float::INFINITY) on
- Debian GNU/Linux (amd64).
+ * object.c: Make BasicObject.new accept no parameter.
+ Revert of r26135 [ruby-core:27080], as per [ruby-core:32952].
-Mon Mar 25 07:09:20 2013 Eric Hodel <drbrain@segment7.net>
+Sat Oct 30 09:40:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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]
+ * enum.c: use constants in id.h.
-Mon Mar 25 06:59:01 2013 Eric Hodel <drbrain@segment7.net>
+Sat Oct 30 09:08:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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]
+ * ext/fiddle/closure.c (fiddle_closure): embed cif not reference
+ so that the content surely get initialized. [ruby-dev:42480]
-Sun Mar 24 10:38:24 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sat Oct 30 07:01:53 2010 Tanaka Akira <akr@fsij.org>
- * addr2line.c (putce): suppress unused return value warning.
+ * lib/resolv-replace.rb: suppress warning.
-Mon Mar 25 02:01:03 2013 Narihiro Nakamura <authornari@gmail.com>
+ * lib/open-uri.rb: ditto.
- * proc.c (bm_free): need to clean up the mark flag of a free and
- unlinked method entry. [Bug #8100] [ruby-core:53439]
+Sat Oct 30 06:32:52 2010 Tanaka Akira <akr@fsij.org>
-Sun Mar 24 22:13:51 2013 NARUSE, Yui <naruse@ruby-lang.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]
- * 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]
+Sat Oct 30 05:58:54 2010 Tanaka Akira <akr@fsij.org>
-Sun Mar 24 18:29:46 2013 Akinori MUSHA <knu@iDaemons.org>
+ * lib/resolv.rb: retry via TCP if UDP reply is truncated.
+ fixed by Julian Mehnle. [ruby-core:32407]
- * string.c (rb_str_rpartition): Fix String#rpartition(/re/)
- against a multibyte string. [Bug #8138] [ruby-dev:47183]
+Sat Oct 30 00:35:13 2010 Koichi Sasada <ko1@atdot.net>
-Sun Mar 24 13:42:24 2013 Narihiro Nakamura <authornari@gmail.com>
+ * iseq.c (iseq_s_compile): fix optional argument.
+ a patch from Yutaka HARA [ruby-core:32953] [Ruby 1.9-Bug#4001]
- * gc.c (GC_ENABLE_LAZY_SWEEP): new macro to switch lazy sweeping
- for debugging. [Feature #8024] [ruby-dev:47135]
+Sat Oct 30 00:24:42 2010 Koichi Sasada <ko1@atdot.net>
-Sun Mar 24 12:55:47 2013 Narihiro Nakamura <authornari@gmail.com>
+ * ext/objspace/objspace.c (memsize_of): take care of
+ T_CLASS/const_tbl.
+ a patch from nagachika <nagachika00@gmail.com> [ruby-dev:42490]
- * 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.
+Fri Oct 29 23:32:36 2010 Koichi Sasada <ko1@atdot.net>
-Sun Mar 24 11:03:31 2013 Tanaka Akira <akr@fsij.org>
+ * 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/ruby/test_require.rb: Remove temporally files in the tests.
+ * test/runner.rb: ditto.
- * test/ruby/test_rubyoptions.rb: Ditto.
+Fri Oct 29 10:02:03 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * test/logger/test_logger.rb: Ditto.
+ * 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
- * test/psych/test_psych.rb: Ditto.
+Fri Oct 29 05:13:34 2010 Koichi Sasada <ko1@atdot.net>
- * test/readline/test_readline.rb: Ditto.
+ * 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/syslog/test_syslog_logger.rb: Ditto.
+ * test/objspace/test_objspace.rb: fix test for above change.
- * test/webrick/test_httpauth.rb: Ditto.
+Fri Oct 29 03:04:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/zlib/test_zlib.rb: Ditto.
+ * string.c (rb_str_dump): fix expected length. [ruby-core:32935]
-Sun Mar 24 05:36:29 2013 Eric Hodel <drbrain@segment7.net>
+Thu Oct 28 23:31:39 2010 Koichi Sasada <ko1@atdot.net>
- * lib/rinda/ring.rb: Added documentation for multicast support.
+ * gc.c (before_gc_sweep, run_final): fix decrement timing of final_num.
- * NEWS: Point to above documentation.
+Thu Oct 28 20:11:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sun Mar 24 05:32:39 2013 Eric Hodel <drbrain@segment7.net>
+ * 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
- * test/rinda/test_rinda.rb: Restore tests commented out while fixing
- test slowdown bug before r39895.
+Thu Oct 28 20:06:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sun Mar 24 05:03:36 2013 Eric Hodel <drbrain@segment7.net>
+ * include/ruby/oniguruma.h (ONIGENC_CTYPE_SPECIAL_MASK):
+ change mask from 128 to 256. [ruby-core:32931]
- * 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.
+Thu Oct 28 12:06:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * NEWS: Update with Rinda multicast support
+ * 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]
-Sun Mar 24 04:13:27 2013 Eric Hodel <drbrain@segment7.net>
+Thu Oct 28 04:00:08 2010 Koichi Sasada <ko1@atdot.net>
- * test/rinda/test_rinda.rb: Fixed test failures in r39890 and r39891
- due to stopping DRb service.
+ * gc.c (GC.stat): added. [ruby-dev:38607]
-Sun Mar 24 03:34:02 2013 Eric Hodel <drbrain@segment7.net>
+ * test/ruby/test_gc.rb: add a test for above.
- * 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.
+Thu Oct 28 03:13:06 2010 Koichi Sasada <ko1@atdot.net>
-Sun Mar 24 02:14:53 2013 Tanaka Akira <akr@fsij.org>
+ * ext/objspace/objspace.c (memsize_of): fix rdoc.
- * test/mkmf/test_have_macro.rb: remove temporally files in the tests.
+ * ext/objspace/objspace.c (total_memsize_of_all_objects): added.
-Sat Mar 23 23:50:04 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * 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).
- * addr2line.c (kprintf): added from FreeBSD libstand's printf.
- this is consided as async signal safe function.
+Wed Oct 27 23:55:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * addr2line.c (rb_dump_backtrace_with_lines): use kfprintf.
- [Bug #8144] [ruby-core:53632]
+ * ext/iconv/iconv.c (Init_iconv): warn deprecated use.
-Sat Mar 23 23:28:00 2013 Kenta Murata <mrkn@mrkn.jp>
+Wed Oct 27 18:50:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/bigdecimal/bigdecimal.c (BigDecimal_divide): Use Qnil and NIL_P
- instead of (VALUE)0 as a return value.
+ * 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
- * ext/bigdecimal/bigdecimal.c (BigDecimal_div): ditto.
+Wed Oct 27 18:27:17 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/bigdecimal/bigdecimal.c (BigDecimal_divremain): ditto.
+ * test/ruby/test_io.rb (TestIO#pipe): should close write end of pipe
+ before closing read end, to get rid of timing problem.
- * ext/bigdecimal/bigdecimal.c (BigDecimal_remainder): ditto.
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#pipe): ditto.
-Sat Mar 23 17:39:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Oct 27 18:14:27 2010 NAKAMURA Usaku <usa@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]
+ * win32/win32.c (rb_w32_getppid): support Win64.
-Fri Mar 22 17:48:34 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Oct 27 15:07:19 2010 NAKAMURA Usaku <usa@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].
+ * 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.
-Fri Mar 22 17:38:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Oct 27 13:51:25 2010 NAKAMURA Usaku <usa@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]
+ * test/ruby/test_io.rb (TestIO#pipe): need to propagate exceptions
+ in read/write thread. fix r29541.
-Fri Mar 22 10:29:00 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#pipe): ditto.
- * ext/bigdecimal/bigdecimal.c: Fix style.
+Wed Oct 27 12:05:40 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Mar 22 05:30:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * class.c (clone_const): need to return value. fix r29602.
- * parse.y (ambiguous_operator): refine warning message, since this
- warning is shown after literal too.
+Wed Oct 27 11:58:58 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Mar 22 04:51:14 2013 Nobuyoshi Nakada <nobu@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.
- * vm_insnhelper.c (vm_callee_setup_keyword_arg): should check required
- keyword arguments even if rest hash is defined. [ruby-core:53608]
- [Bug #8139]
+Wed Oct 27 09:25:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Mar 22 01:00:17 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * cont.c: apply documentation patch by Run Paint Run Run.
+ [ruby-core:32915]
- * process.c (rb_execarg_addopt, run_exec_pgroup): use rb_pid_t
- instead of pid_t.
+Wed Oct 27 02:12:10 2010 Yusuke Endoh <mame@tsg.ne.jp>
- * ext/pty/pty.c (raise_from_check, pty_check): ditto.
+ * 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]
-Fri Mar 22 00:04:15 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * test/ruby/test_module.rb: add tests for above.
- * addr2line.c (rb_dump_backtrace_with_lines): output line at once.
+Wed Oct 27 02:02:54 2010 Yusuke Endoh <mame@tsg.ne.jp>
-Thu Mar 21 23:17:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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]).
- * thread.c (ruby_kill): get rid of deadlock on signal 0.
- [ruby-dev:47182] [Bug #8137]
+Wed Oct 27 01:56:34 2010 Yusuke Endoh <mame@tsg.ne.jp>
-Thu Mar 21 22:39:46 2013 Naohisa Goto <ngotogenome@gmail.com>
+ * 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]).
- * 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]
+Tue Oct 26 18:51:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Mar 21 16:48:06 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/scanf.rb (extract_float): allow 2.e+2 style.
+ [ruby-dev:42452] #3978
- * parse.y (simple_re_meta): escape all closing characters, not only
- round parenthesis. [ruby-core:53578] [Bug #8133]
+Tue Oct 26 18:09:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Mar 21 13:50:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * Makefile.in (ASFLAGS): needs INCFLAGS.
- * vm_core.h (UNINITIALIZED_VAR): suppress warnings by clang 4.2.
- [ruby-core:51742] [Bug #7756]
+ * configure.in (rb_cv_dynamic_alloca): check if extra source for
+ dynamic size alloca.
-Thu Mar 21 07:34:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * missing/x86_64-chkstk.s (___chkstk): necessary for alloca of
+ amd64-mingw32msvc-gcc on Ubuntu.
- * ext/date/date_core.c: Typo in Date::MONTHNAMES by Matt Gauger
- [GH fixes #261]
+ * thread_win32.c (ruby_alloca_chkstk): check stack overflow
-Wed Mar 20 22:53:14 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Oct 26 18:04:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/mkmf.rb (find_library): fix to format message.
- [ruby-core:53568] [Bug #8130]
+ * template/ruby.pc.in (Libs): needs DLDFLAGS.
-Wed Mar 20 22:52:52 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Oct 26 12:47:10 2010 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]
+ * common.mk (pkgconfig-data): moved from Makefile.in.
-Wed Mar 20 17:47:53 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * tool/rbinstall.rb: install pc file only if non-empty.
+ [ruby-core:32901] #3983
- * 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.
+ * win32/Makefile.sub (ruby_pc): create pc file.
-Wed Mar 20 16:40:48 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+Tue Oct 26 09:13:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_signal.rb (test_hup_me): skip if HUP isn't supported.
- On Windows this test causes ArgumentError.
+ * configure.in (rb_cv_gcc_atomic_builtins): check for atomic
+ builtins, all are not available in Apple derivative gcc.
-Wed Mar 20 16:24:12 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
+Tue Oct 26 00:29:26 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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]
+ * Makefile.in (pkgconfig-data): create pkg-config metadata file.
-Wed Mar 20 15:22:07 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * tool/rbinstall.rb: install pkg-config metadata file.
- * test/win32ole/test_err_in_callback.rb (TestErrInCallBack#setup): use
- relative path to get rid of "too long commandline" error.
+ * template/ruby.pc.in: template of pkg-config metadata file.
-Wed Mar 20 04:27:42 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Mon Oct 25 16:38:07 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
- * test/rinda/test_rinda.rb: remove unused variables.
- patched by Vipul A M <vipulnsward@gmail.com>
+ * 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.
-Wed Mar 20 04:15:32 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Mon Oct 25 06:21:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/bigdecimal/bigdecimal.c: fixed typo.
- patched by Vipul A M <vipulnsward@gmail.com>
+ * vsnprintf.c (BSD_vfprintf): prec digits fractal part should be
+ appended to 0 if prec is given. [ruby-dev:42453] #3979
-Sat Mar 16 03:40:49 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Mon Oct 25 02:57:21 2010 Koichi Sasada <ko1@atdot.net>
- * test/ruby/test_signal.rb (test_hup_me): added a few comments.
+ * common.mk (run.gdb): Quit gdb on 'make gdb' when
+ no signals are received.
-Sat Mar 16 03:39:38 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Mon Oct 25 00:25:23 2010 Tadayoshi Funaba <tadf@dotrb.org>
- * thread.c (ruby_kill): added a few comments.
+ * lib/date.rb: some corrections of documentation.
-Sat Mar 16 03:36:56 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sun Oct 24 17:14:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * thread.c (ruby_kill): release GVL while waiting signal delivered.
+ * 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]
-Tue Mar 19 19:50:48 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * include/ruby/intern.h (rb_check_frozen): optimize.
+ [ruby-core:32878]
- * ruby_kill (internal.h, thread.c): use rb_pid_t instead of pid_t.
- this fixes the build failure of mswin introduced at r39819.
+Sun Oct 24 15:16:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 19 17:09:30 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/test/unit.rb (Test::Unit::Mini#run): abort if interrupted.
- * string.c (rb_str_conv_enc_opts): convert with one converter, instead
- of re-creating converters for each buffer expansion.
+ * lib/test/unit.rb (Test::Unit::Mini#run_test_suites): show the
+ result even when interrupted on the way.
-Tue Mar 19 17:06:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/test/unit.rb (Test::Unit::Mini#run_test_suites): ensure
+ output sync mode to be restored.
- * dir.c (glob_helper): compose HFS file names from UTF8-MAC.
- [ruby-core:48745] [Bug #7267]
+Sun Oct 24 14:11:16 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Mar 16 01:44:29 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * vm.c (vm_define_method): defined method is run with the default
+ public visibility regardless the visibility context of definition.
+ [ruby-core:30638]
- * internal.h: added a declaration of ruby_kill().
- * thread.c (ruby_kill): helper function of kill().
+Sun Oct 24 12:08:54 2010 Aaron Patterson <aaron@tenderlovemaking.com>
- * 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]
+ * lib/test/unit.rb: make test/unit play nicely with the rake test
+ loader. [ruby-core:32864]
- * 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.
+Sun Oct 24 00:25:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_signal.rb (TestSignal#test_hup_me): test for
- the above.
+ * test/ruby/test_rubyoptions.rb (test_segv_test): follow up the
+ change at r29556.
-Sat Mar 16 00:42:39 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Sat Oct 23 14:39:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * io.c (linux_iocparm_len): enable only exist _IOC_SIZE().
- Because musl libc doesn't have it. [Bug #8051] [ruby-core:53229]
+ * lib/mkmf.rb: $extmk should be true for test/runner.
-Tue Mar 19 10:05:04 2013 Shota Fukumori <her@sorah.jp>
+Sat Oct 23 10:55:37 2010 Koichi Sasada <ko1@atdot.net>
- * ext/objspace/objspace.c: Fix typo in doc. Patch by Sho Hashimoto.
- [Bug #8116] [ruby-dev:47177]
+ * vm_dump.c (rb_vm_bugreport): fix to add bug outputs.
+ - loaded script ($0)
+ - loaded features ($")
+ - process memory map on Linux (/proc/self/maps)
-Tue Mar 19 02:13:00 2013 Kenta Murata <mrkn@mrkn.jp>
+ * vm_dump.c (rb_vmdebug_stack_dump_raw): fix header message.
- * configure.in: set ac_cv_prog_cxx if CXX is supplied.
+Fri Oct 22 14:50:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 19 01:18:00 2013 Kenta Murata <mrkn@mrkn.jp>
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ assertion message must not be nil.
- * configure.in: Fix c++ compiler auto-selection not only for
- Darwin 11.x, but also the other versions of Darwin.
+Fri Oct 22 13:59:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Mar 19 00:26:22 2013 Narihiro Nakamura <authornari@gmail.com>
+ * lib/test/unit/assertions.rb (Test::Unit::Assertions#assert):
+ treat nil case. Please run test-all before commit such change.
- * gc.c: Improve accuracy of objspace_live_num() and
- allocated/freed counters. patched by tmm1(Aman Gupta).
- [Bug #8092] [ruby-core:53392]
+Thu Oct 21 23:58:14 2010 Koichi Sasada <ko1@atdot.net>
-Mon Mar 18 21:42:48 2013 Narihiro Nakamura <authornari@gmail.com>
+ * gc.c (gc_lazy_sweep): Variable declarations should be at
+ the head of block.
- * gc.c: Avoid unnecessary heap growth. patched by tmm1(Aman Gupta).
- [Bug #8093] [ruby-core:53393]
+Thu Oct 21 23:56:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Mar 18 17:58:36 2013 Narihiro Nakamura <authornari@gmail.com>
+ * gc.c (objspace_each_objects, rb_objspace_each_objects): use
+ struct.
- * gc.c: Fix unlimited memory growth with large values of
- RUBY_FREE_MIN. patched by tmm1(Aman Gupta).
- [Bug #8095] [ruby-core:53405]
+ * gc.c (objspace_each_objects): fix return with no value.
-Mon Mar 18 14:46:19 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Thu Oct 21 23:47:12 2010 Nobuyoshi Nakada <nobu@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.
+ * dir.c (dir_initialize): remove useless intermediate variable.
-Mon Mar 18 13:29:52 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Oct 21 16:07:20 2010 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.
+ * io.c (rb_f_select): change rdoc.
+ patched by Eito Katagiri [ruby-core:31805]
- * configure.in: check execinfo.h on darwin.
+Thu Oct 21 15:55:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Mar 18 11:03:23 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * lib/webrick/httpauth/digestauth.rb
+ (WEBrick::HTTPAuth::ProxyDigestAuth#check_uri): privated.
+ [ruby-dev:42344]
- * vm_exec.h (END_INSN): revert r39517 because the segv seems fixed by
- r39806.
+Thu Oct 21 15:50:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Mar 18 10:41:06 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * io.c (rb_f_select): add correct rdoc.
+ patched by Dave Thomas [ruby-core:32467]
- * vm_exec.c: Correct predefined macro name. This typo is introduced by
- r36534 and should be backported to ruby_2_0_0.
+Thu Oct 21 15:42:01 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Mon Mar 18 03:18:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * lib/net/telnet.rb (Net::Telnet#close): added.
+ patched by Erik Hollensbe [ruby-dev:42260] #3830
- * array.c: Typo in Array#delete by Timo Sand [GH fixes #258]
+Thu Oct 21 13:08:00 2010 Narihiro Nakamura <authornari@gmail.com>
-Mon Mar 18 01:14:56 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * gc.c (rb_objspace_each_objects): don't lazy sweep in
+ rb_objspace_each_objects. [Bug #3940] [ruby-dev:42369]
- * io.c (io_fillbuf): show fd number on failure to debug.
- http://c5632.rubyci.org/~chkbuild/ruby-trunk/log/20130316T050302Z.diff.html.gz
+Thu Oct 21 00:05:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Mar 17 02:38:21 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * test/ruby/test_io.rb (TestIO#pipe): get rid of deadlock on pipe.
+ a patch from Tomoyuki Chikanaga at [ruby-dev:42435]. #3970
- * ext/date/date_core.c: include sys/time.h for avoiding implicit
- declaration of gettimeofday().
+ * test/ruby/test_io_m17n.rb (TestIO_M17N#pipe): ditto.
-Sun Mar 17 00:55:31 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Wed Oct 20 23:54:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * include/ruby/missing.h: removed __linux__. it's unnecessary.
+ * ext/dbm/dbm.c: rdoc based on a patch by mathew meta AT
+ pobox.com, at [ruby-core:32853].
-Fri Mar 15 14:57:16 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Wed Oct 20 10:47:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * util.c (ruby_strtod): reject 0x1.p+0. [ruby-dev:42432] #3966
-Wed Mar 13 15:16:35 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Wed Oct 20 10:00:57 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * include/ruby/missing.h (__syscall): moved to...
- * io.c: here. because __syscall() is only used from io.c.
+ * vsnprintf.c (BSD_vfprintf): print floating point on "%#a".
+ [ruby-dev:42431] Bug#3965
- * 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].
+Tue Oct 19 19:30:11 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Mar 13 14:38:53 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * vsnprintf.c (BSD_vfprintf): clear ALT flag for %a.
+ [ruby-core:32841] [ruby-core:32848]
- * include/ruby/missing.h (struct timespec): include <sys/time.h>
+Tue Oct 19 12:19:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Mar 13 13:54:45 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * vsnprintf.c (BSD_vfprintf): fix over-count of field size.
- * 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.
+Tue Oct 19 03:08:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * file.c: include sys/time.h explicitly.
- * random.c: ditto.
- * thread_pthread.c: ditto.
- * time.c: ditto.
- * ext/date/date_strftime.c: ditto.
+ * vsnprintf.c (BSD_vfprintf): use HEXPREFIX flag for prefix of %a.
+ [ruby-core:32841]
-Fri Mar 15 14:45:02 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Mon Oct 18 13:18:01 2010 Akinori MUSHA <knu@iDaemons.org>
- * configure.in (_FORTIFY_SOURCE): added a few comments.
+ * ext/digest/digest.c (rb_digest_class_init): Define
+ Digest::Class.new(). [Feature #3954]
-Fri Mar 15 14:17:55 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Mon Oct 18 12:58:40 2010 Tanaka Akira <akr@fsij.org>
- * thread_pthread.c (numberof): renamed from ARRAY_SIZE() because
- other all files use numberof().
+ * pack.c (pack_pack): refine the document. [ruby-dev:42397]
+ (pack_unpack): ditto.
-Say Mar 15 01:33:00 2013 Charles Oliver Nutter <headius@headius.com>
+Mon Oct 18 10:19:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * lib/net/http.rb (transport_request): @socket may be nil.
+ patched by Egbert Eich [ruby-core:32829]
-Fri Mar 15 23:06:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Oct 18 09:57:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * time.c (GetTimeval): check if already initialized instance.
+ * sprintf.c (BSD_vfprintf): wrong padding around prefix and
+ floating point with %a. [ruby-dev:42403] Bug #3956
- * time.c (GetNewTimeval): check if newly created instance.
+Sun Oct 17 22:36:33 2010 Tadayoshi Funaba <tadf@dotrb.org>
- * time.c (time_init_0, time_init_1, time_init_copy, time_mload): must
- be newly created instance. [ruby-core:53436] [Bug #8099]
+ * lib/date/delta.rb: added an rdoc tag.
-Fri Mar 15 14:51:33 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Oct 17 10:47:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * file.c (rb_sys_fail_path_with_func): share same function, and path
- may be nil.
+ * variable.c (rb_mod_remove_const): update rdoc.
+ [ruby-core:31957]
-Fri Mar 15 08:24:51 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Sun Oct 17 10:40:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * io.c (rb_sys_fail_path): define & use rb_sys_fail_path0 like r39752
+ * class.c (rb_define_{class,module}_id_under): register to be
+ marked, which probably are defined and used internally.
-Fri Mar 15 04:08:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Sat Oct 16 11:10:55 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * proc.c: Typo in Proc.arity found by Jack Nagel [Bug #8094]
+ * ext/win32ole/win32ole.c (ole_encoding2cp): set codepage 20936
+ according to GB2312. [Bug #3937] [ruby-core:32758]
-Thu Mar 14 16:59:09 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Oct 16 10:54:57 2010 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.
+ * Makefile.in (CPP): already used in .c.i rule.
- * file.c (rb_sys_fail_path): use RUBY_FUNCTION_NAME_STRING.
+ * cygwin/GNUmakefile.in (DLLWRAP, WINDRES): add --driver-name and
+ --preprocessor options explicitly. [ruby-core:32776]
-Thu Mar 14 14:12:34 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Sat Oct 16 10:06:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * file.c (rb_sys_fail_path): use rb_sys_fail_path0 only on GCC.
- __func__ is C99 feature.
+ * ext/sdbm/_sdbm.c (SEEDUPS, BADMESS): make settable using command
+ line options.
-Thu Mar 14 12:59:59 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/sdbm/_sdbm.c (makroom): suppress unused result warning.
- * 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
+ * ext/sdbm/extconf.rb: disable BADMESS, a library should not emit
+ messages directly.
- * file.c (rb_sys_fail_path): use rb_sys_fail_path0.
+Sat Oct 16 08:39:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Mar 14 12:53:15 2013 Luis Lavena <luislavena@gmail.com>
+ * dln.c (dln_strerror): get English message first, instead of
+ system default. see [ruby-dev:42358].
- * 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]
+Sat Oct 16 00:08:00 2010 Koichi Sasada <ko1@atdot.net>
-Thu Mar 14 11:53:01 2013 Narihiro Nakamura <authornari@gmail.com>
+ * hash.c (rb_hash_aref): skip calling "default" method
+ if it is not needed, for speed-up.
- * NEWS: describe RUBY_HEAP_SLOTS_GROWTH_FACTOR.
+Fri Oct 15 23:36:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Mar 14 10:01:12 2013 Eric Hodel <drbrain@segment7.net>
+ * file.c (NUM2DEVT, DEVT2NUM, PRI_DEVT_PREFIX): fallback to
+ unsigned int.
- * doc/globals.rdoc: $? is thread-local
+Fri Oct 15 22:54:46 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
-Wed Mar 13 23:25:59 2013 Narihiro Nakamura <authornari@gmail.com>
+ * ext/win32ole/win32ole.c (ole_hresult2msg): get English message first,
+ instead of system default. [ruby-core:32765]
- * 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]
+Fri Oct 15 22:47:31 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Mar 13 19:43:46 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * include/ruby/ruby.h (VALUE): prefer long over uintptr_t,
+ FIX2LONG expects VALUE to be long at least.
- * doc/irb/irb.rd.ja: fix typo
+ * include/ruby/ruby.h (FIX2LONG): parenthesize the argument.
- * ext/tk/MANUAL_tcltklib.eng: fix typos
+Fri Oct 15 20:30:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/tk/sample/tktextframe.rb (Tk#component_delegates): fix typo
+ * configure.in (dev_t): use RUBY_REPLACE_TYPE.
-Wed Mar 13 15:13:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * file.c (rb_stat_inspect): use PRI_DEVT_PREFIX.
- * class.c (rb_obj_singleton_methods): collect methods from the origin
- class. [ruby-core:53207] [Bug #8044]
+Fri Oct 15 17:26:57 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Mar 13 14:51:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * pack.c (pack_pack): simplify comparison of explicit_endian
+ as pointed by nobu.
- * 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]
+ * pack.c (pack_unpack): ditto.
-Wed Mar 13 13:06:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Oct 15 16:40:37 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * configure.in (rm, shvar_to_cpp, unexpand_shvar): local is not
- available on old shells.
+ * pack.c (pack_pack): fix more than one modifiers appear in the
+ format string. [ruby-core:32793]
- * configure.in (shvar_to_cpp): escape quotes for old shells.
- [Bug #7959] [Bug #8071]
+ * pack.c (pack_unpack): ditto.
-Wed Mar 13 11:11:07 2013 Shugo Maeda <shugo@ruby-lang.org>
+Thu Oct 14 23:20:42 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * object.c (Init_Object): remove Module#used, which has been
- introduced in Ruby 2.0 by mistake. [Bug #7916] [ruby-core:52719]
+ * test/win32ole/test_folderitem2_invokeverb.rb: refactoring.
-Wed Mar 13 05:49:29 2013 Eric Hodel <drbrain@segment7.net>
+Thu Oct 14 22:18:29 2010 Koichi Sasada <ko1@atdot.net>
- * lib/irb.rb: Fix typo
+ * insns.def, iseq.c, vm_insnhelper.c: rename variable name
+ (ip -> iseq).
-Tue Mar 12 22:20:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Oct 14 20:41:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * compile.c (iseq_set_arguments, iseq_compile_each): support required
- keyword arguments. [ruby-core:51454] [Feature #7701]
+ * pack.c (pack_pack): support endian modifiers: < and >.
+ [ruby-dev:42376] Feature #3491
- * iseq.c (rb_iseq_parameters): ditto.
+ * pack.c (pack_unpack): ditto.
- * parse.y (f_kw, f_block_kw): ditto. this syntax is still
- experimental, the notation may change.
+Thu Oct 14 20:50:51 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * vm_core.h (rb_iseq_struct): ditto.
+ * ext/win32ole/win32ole.c (reg_get_val): expand environment in
+ the pathname. [Bug #3907]
- * vm_insnhelper.c (vm_callee_setup_keyword_arg): ditto.
+Thu Oct 14 07:35:07 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Mar 12 17:02:53 2013 TAKANO Mitsuhiro <tak@no32.tk>
+ * 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.
- * date_core.c: clearly specify operator precedence.
+ * file.c (rb_stat_dev): use DEVT2NUM.
-Tue Mar 12 17:00:45 2013 TAKANO Mitsuhiro <tak@no32.tk>
+ * file.c (rb_stat_dev_major): dev_t is not long. major(3)'s return
+ value is int.
- * insns.def: fix condition.
+ * file.c (rb_stat_dev_minor): dev_t is not long. minor(3)'s return
+ value is int.
-Tue Mar 12 16:48:19 2013 TAKANO Mitsuhiro <tak@no32.tk>
+ * configure.in: check size of dev_t.
- * rational.c: fix dangling if, else-if and else.
+Thu Oct 14 07:22:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Mar 12 06:27:59 2013 Eric Hodel <drbrain@segment7.net>
+ * 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.
- * 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.
+Thu Oct 14 04:16:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * lib/rubygems/ext/ext_conf_builder.rb: Use full path to siteconf.rb
- in case the extconf.rb changes directories (like memcached does).
+ * numeric.c (ruby_float_step): fix Numeric#step with infinity unit
+ doesn't works well. [ruby-core:32779]
- * 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.
+Wed Oct 13 23:16:46 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * tool/enc-unicode.rb: get rid of lots of warnings.
-Tue Mar 12 02:25:19 2013 Eric Hodel <drbrain@segment7.net>
+ * iseq.c (insn_operand_intern, rb_iseq_disasm): fix format specifiers.
- * 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.
+ * vm.c (thread_free): ditto.
-Mon Mar 11 22:44:57 2013 Tanaka Akira <akr@fsij.org>
+ * numeric.c (check_uint): get rid of overflow on LLP64 platforms.
- * 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.
+ * insns.def (opt_case_dispatch): use st_data_t.
-Mon Mar 11 19:22:54 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+Wed Oct 13 22:32:34 2010 Takeyuki FUJIOKA <xibbar@ruby-lang.org>
- * test/mkmf/base.rb: class name conflict.
+ * lib/cgi/util.rb (CGI::unescape): bugfix to unescape the multibyte
+ string. Thanks nobu and tDiary dev members. [Bug #3909]
-Mon Mar 11 18:45:09 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Oct 13 21:13:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * enumerator.c (enumerator_with_index): try to convert given offset to
- integer. fix bug introduced in r39594.
+ * numeric.c (int_chr): raise error when the value is negative.
-Mon Mar 11 17:27:57 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Oct 13 19:24:08 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
- * test/ruby/envutil.rb (EnvUtil.with_default_external): add for
- changing Encoding.default_external without warnings.
+ * vm.c (ruby_vm_destruct): This function type was wrong; correct to the prototype.
- * test/ruby/envutil.rb (EnvUtil.with_default_internal): ditto.
+Wed Oct 13 14:58:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * test/ruby/test_io_m17n.rb: use above with_default_external.
+ * numeric.c (rb_num_to_uint): fix 32bit logic.
-Mon Mar 11 16:57:00 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Wed Oct 13 12:53:43 2010 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]
+ * numeric.c (rb_num_to_uint): added to check the range of arguments.
+ Mainly for negative value with NUM2UINT on 32bit environment.
-Mon Mar 11 12:25:12 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * string.c (rb_str_concat): use rb_num_to_uint.
- * Merge Onigmo d4bad41e16e3eccd97ccce6f1f96712e557c4518.
- fix lookbehind assertion fails with /m mode enabled. [Bug #8023]
- fix \Z matches where it shouldn't. [Bug #8001]
+Wed Oct 13 12:10:02 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Mar 11 11:53:35 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * thread_win32.c (w32_error): get English message first, instead
+ of system default. see [ruby-core:32765].
+ [experimental]
- * lib/mkmf.rb (MakeMakefile#dir_config, MakeMakefile#_libdir_basename):
- defer use of instance variable until needed. [Bug #8074]
+Wed Oct 13 11:04:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Mar 7 10:42:28 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * debug.c (ruby_set_debug_option): define always for binary
+ compatibility with debug env enabled binary.
- * 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.
+ * signal.c (ruby_enable_coredump): ditto.
-Thu Mar 7 10:40:49 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Wed Oct 13 10:52:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * tool/change_maker.rb (#diff2index): check Encoding::BINARY.
- BASERUBY may still be 1.8.x.
+ * include/ruby/ruby.h (ruby_executable_node): missing prototype.
-Thu Mar 7 08:47:42 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Wed Oct 13 05:23:04 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * NEWS (Mutex#owned?): no longer experimental.
+ * missing/strchr.c: add strlen's prototype.
-Sun Mar 10 23:38:15 2013 Luis Lavena <luislavena@gmail.com>
+ * missing/strstr.c: ditto.
- * 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.
+Wed Oct 13 00:21:17 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Mar 10 23:27:05 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/syck/rubyext.c (struct mktime_arg): constified.
- * 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]
+ * ext/syck/rubyext.c (mktime_do, mktime_r, rb_syck_mktime): fix
+ function signatures.
-Sun Mar 10 17:00:22 2013 Tadayoshi Funaba <tadf@dotrb.org>
+Wed Oct 13 00:18:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * complex.c: edited rdoc.
- * rational.c: ditto.
+ * st.c (MurmurMagic): get rid of literal overflow.
-Sun Mar 10 15:02:39 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * configure.in (RUBY_CHECK_PRINTF_PREFIX): check for printf format
+ specifier if possible.
- * process.c (setup_communication_pipe): remove unused function.
- it was unintentionally added r39683.
+Tue Oct 12 23:58:19 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Mar 6 00:30:40 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * win32/win32.c (rb_w32_open_osfhandle, rb_w32_wopen, rb_w32_pipe):
+ use uintptr_t instead of long for win64.
- * tool/gen_ruby_tapset.rb: add tapset generator.
+ * win32/win32.c (socketpair_internal): suppress warnings.
-Wed Mar 6 03:27:43 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * win32/win32.c (ftruncate): use HANDLE instead of long for win64.
- * probes.d (symbol-create): change argument name `string' to
- `str'. `string' is a keyword for systemtap.
+ * vsnprintf.c (BSD_vfprintf): fix cast.
-Tue Mar 5 22:23:01 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * numeric.c (rb_num2fix): result of rb_num2long is SIGNED_VALUE.
- * probes.d: added argument name
+ * 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.
-Thu Mar 7 01:17:00 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * compile.c (iseq_build_body), insns.def (getglobal, setglobal),
+ iseq.c (iseq_load, iseq_data_to_ary), util.c (valid_filename):
+ use VALUE.
- * 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.
+ * gc.c (obj_free, rb_objspace_call_finalizer): fix truncating
+ cast.
-Thu Mar 7 00:14:51 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * gc.c (mark_current_machine_context): suppress warnings.
- * io.c (rb_update_max_fd): use ATOMIC_CAS because this function
- is used from timer thread too.
+ * compile.c (iseq_compile_each): fix truncating cast.
-Wed Mar 6 23:30:21 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * cont.c (fiber_setcontext): missing variable definition.
- * 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.
+Tue Oct 12 19:25:13 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Mar 6 22:36:19 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * error.c (exc_to_s): use OBJ_INFECT.
- * 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.
+ * error.c (name_err_to_s): ditto.
- * thread_pthread.c (timer_thread_sleep): adjust the above changes.
+ * error.c (name_err_mesg_to_str): ditto.
- * thread_pthread.c (setup_communication_pipe_internal): factor
- out pipe initialize logic.
+ * error.c (syserr_initialize): ditto.
-Wed Mar 6 22:56:14 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tue Oct 12 19:07:55 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * thread_pthread.c (ubf_select): add to small comments why we
- need to call rb_thread_wakeup_timer_thread().
+ * error.c (syserr_initialize): taint message if mesg is given
+ and it is tainted.
-Wed Mar 6 21:42:24 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tue Oct 12 18:25:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * io.c (rb_io_ungetc): always see Bignum. On 32bit valid value
+ may be a Bignum. On 64bit for errors. [ruby-dev:42366]
-Sun Mar 3 02:42:29 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tue Oct 12 18:25:04 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * thread_pthread.c (consume_communication_pipe): retry when
- read returned CCP_READ_BUFF_SIZE.
+ * string.c (rb_str_concat): use unsigned int for GB18030.
-Wed Mar 6 21:31:35 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tue Oct 12 17:53:49 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * numeric (check_uint): the mask must refer to VALUE.
-Wed Mar 6 21:00:23 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tue Oct 12 17:47:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * thread_pthread.c (USE_SLEEPY_TIMER_THREAD): use more accurate
- ifdef conditions.
+ * numeric (check_uint): set MSB for negative value.
-Sun Mar 3 02:30:36 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * numeric (rb_num2uint): return value's type of rb_num2ulong
+ is VALUE.
- * 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.
+ * numeric (int_chr): variable i can't be negative.
-Sun Mar 10 09:12:51 2013 Tadayoshi Funaba <tadf@dotrb.org>
+Tue Oct 12 16:04:37 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * complex.c: described syntax of string form.
- * rational.c: ditto.
+ * win32/win32.c (rb_w32_strerror): get English message first, instead
+ of system default. see [ruby-dev:42358].
+ [experimental]
-Sat Mar 9 11:58:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Oct 12 15:52:35 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * marshal.c (w_extended): check for prepended object.
- [ruby-core:53206] [Bug #8043]
+ * 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].
-Sat Mar 9 08:36:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Oct 12 15:36:09 2010 NARUSE, Yui <naruse@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].
+ * io.c (rb_io_ungetc): use unsigned int for GB18030.
-Sat Mar 9 00:25:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Oct 12 15:14:21 2010 NARUSE, Yui <naruse@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]
+ * io.c (rb_io_putc): support multibyte characters.
+ [ruby-core:30697]
-Fri Mar 8 19:44:00 2013 Akinori MUSHA <knu@iDaemons.org>
+Tue Oct 12 15:10:31 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * man/rake.1, man/ruby.1: Use the Pa macro to make URLs stand out.
+ * numeric.c (rb_enc_uint_chr): split from int_chr.
-Fri Mar 8 13:20:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * numeric.c (int_chr): use rb_enc_uint_chr.
- * ext/pathname/pathname.c (path_f_pathname): rdoc for Pathname()
+ * include/ruby/encoding.h (rb_enc_uint_chr): added.
-Fri Mar 8 12:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Tue Oct 12 14:04:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * man/rake.1: Document ENVIRONMENT variables on RAKE(1) manpage
+ * 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.
-Fri Mar 8 10:44:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Tue Oct 12 12:20:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * lib/webrick/httpproxy.rb: Fix typos in HTTPProxyServer [Bug #8013]
- Patch by Nobuhiro IMAI [ruby-core:53127]
+ * vm_dump.c (dump_thread): foolish mistake.
-Fri Mar 8 03:16:15 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+Tue Oct 12 10:39:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * class.c (rb_mod_ancestors): Include singleton_class in ancestors
- list [Feature #8035]
+ * configure.in (RUBY_MINGW32): canonicalize only on mingw.
- * test/ruby/test_module.rb (class): test for above
+Mon Oct 11 20:20:23 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * test/ruby/marshaltestlib.rb (module): adapt test
+ * 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
- * NEWS: list change
+Mon Oct 11 17:42:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Mar 7 14:21:37 2013 Nobuyoshi Nakada <nobu@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]
- * compile.c (iseq_compile_each): pass keyword arguments to zsuper,
- with current values. [ruby-core:53114] [Bug #8008]
+Mon Oct 11 14:03:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Thu Mar 7 12:53:47 2013 Eric Hodel <drbrain@segment7.net>
+ * error.c (syserr_initialize): set the encoding of Errno::*#message
+ as locale. [ruby-dev:42358]
- * lib/rubygems/commands/setup_command.rb: Install .pem files.
- * test/rubygems/test_gem_commands_setup_command.rb: Test for the
- above.
+Mon Oct 11 06:38:27 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * 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]
- * lib/rubygems.rb: Version 2.0.2
+Mon Oct 11 06:11:30 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * lib/rubygems/test_utilities.rb: Ensure scheme and uri class match.
+ * io.c (rb_io_set_encoding): use rb_funcall2 when the io is not
+ a T_FILE. [ruby-dev:42356]
-Thu Mar 7 10:39:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Oct 10 18:42:23 2010 Akinori MUSHA <knu@iDaemons.org>
- * tool/rbinstall.rb (gem): Gem.ensure_gem_subdirectories now has mode
- option since r39607. refix of r38870.
+ * lib/set.rb (Set#replace): Apply a bit of optimization.
-Wed Mar 6 13:14:28 2013 Eric Hodel <drbrain@segment7.net>
+Sun Oct 10 10:20:07 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/rubygems/test_gem_spec_fetcher.rb: Removed unused variable.
+ * configure.in (RUBY_MINGW32): canonicalize as like mswin version.
-Wed Mar 6 08:10:15 2013 Eric Hodel <drbrain@segment7.net>
+Sun Oct 10 05:33:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/rubygems/test_require.rb: Fix tests when 'a.rb' exists.
- [ruby-trunk - Bug #7749]
+ * vm_core.h (rb_signal_buff_size, rb_signal_exec): moved
+ declarations from thread.c.
-Wed Mar 6 08:00:59 2013 Eric Hodel <drbrain@segment7.net>
+Sat Oct 9 16:54:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rubygems.rb: Allow specification of directory permissions.
- [ruby-trunk - Bug #7713]
- * test/rubygems/test_gem.rb: Test for the above.
+ * configure.in (RSHIFT): quote to get rid of argument expansion
+ for autoconf 2.68.
-Wed Mar 6 07:40:21 2013 Eric Hodel <drbrain@segment7.net>
+Sat Oct 9 11:00:06 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * thread.c (thread_reset_event_flags, exec_event_hooks): ignore
+ hooks marked as removed.
- * lib/rubygems/security.rb: Make OpenSSL optional for RubyGems.
- * lib/rubygems/commands/cert_command.rb: ditto.
+ * thread.c (thread_exec_event_hooks): remove hooks to be removed.
- * lib/rubygems/config_file.rb: Display file with YAML error, not
- ~/.gemrc
+ * thread.c (rb_threadptr_remove_event_hook, rb_remove_event_hook):
+ defer removing hooks if running the hooks. [ruby-dev:42350]
- * 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.
+Sat Oct 9 10:51:00 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * thread.c (rb_threadptr_exec_event_hooks): suppress each event
+ hooks separately.
- * lib/rubygems.rb: Update win_platform? check for JRuby compatibility.
+ * thread.c (thread_suppress_tracing): split from
+ ruby_suppress_tracing, accepting thread pointer and event mask.
- * test/rubygems/test_gem_installer.rb: Update for Ruby 1.9.2
- compatibility
+Sat Oct 9 08:16:01 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Mar 6 01:19:28 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
+ * thread.c (rb_threadptr_remove_event_hook): fix typo.
- * enumerator.c (enumerator_with_index, lazy_take): use INT2FIX(0)
- instead of INT2NUM(0).
+Fri Oct 8 10:52:25 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/bigdecimal/bigdecimal.c (BigMath_s_exp): ditto.
+ * common.mk (RBCONFIG): depends on version.h due to
+ RUBY_PATCHLEVEL. [ruby-core:32709]
- * ext/fiddle/function.c (function_call): ditto.
+Fri Oct 8 00:24:54 2010 James Edward Gray II <jeg2@ruby-lang.org>
- * ext/openssl/ossl_x509store.c (ossl_x509store_initialize): ditto.
+ * lib/csv.rb: Fixing documentation typos. [ruby-core:32712]
- * process.c (proc_getsid): ditto.
+Thu Oct 7 09:14:28 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * transcode.c (econv_finish): ditto.
+ * vm_exec.c (vm_exec_core): Treat clang as non gcc on this
+ context: It has __asm__ but doesn't works well.
-Tue Mar 5 21:36:43 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Oct 6 12:28:22 2010 Tanaka Akira <akr@fsij.org>
- * class.c (rb_prepend_module): check redefinition of built-in optimized
- methods. [ruby-dev:47124] [Bug #7983]
+ * lib/uri/generic.rb (URI::Generic#hostname): new method.
+ (URI::Generic#hostname=): ditto.
- * vm.c (rb_vm_check_redefinition_by_prepend): ditto.
+ * lib/open-uri.rb: use URI#hostname
-Tue Mar 5 20:29:25 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/net/http.rb: ditto.
- * proc.c (mnew): revert r39224. [ruby-core:53038] [Bug #7988]
+ reported by Adam Majer. [ruby-core:32056]
-Tue Mar 5 20:23:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Oct 6 11:52:12 2010 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.
+ * 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 Mar 5 12:30:55 2013 Eric Hodel <drbrain@segment7.net>
+Tue Oct 5 22:17:02 2010 wanabe <s.wanabe@gmail.com>
- * lib/rubygems.rb: Bump version to 2.0.1 for upcoming bugfix release
+ * win32/mkexports.rb: revert r29320 and r29402.
- * lib/rubygems/ext/ext_conf_builder.rb: Restore ruby 1.8 compatibility
- for [Bug #7698]
- * test/rubygems/test_gem_installer.rb: Ditto.
+Mon Oct 4 12:43:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rubygems/package.rb: Restore ruby 1.8 compatibility.
+ * parse.y (regexp): dregexp has literal string only at the head
+ and successors are array. [ruby-core:32682]
- * test/rubygems/test_gem_dependency_installer.rb: Fix warnings
+Mon Oct 4 10:22:21 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Mar 5 12:24:23 2013 Eric Hodel <drbrain@segment7.net>
+ * random.c (rand_init): This checks the value is in 32bit or not,
+ so use int32_t, not int.
- * enumerator.c (enumerator_with_index): Restore handling of a nil memo
- from r39594.
+Mon Oct 4 09:47:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Mar 5 10:40:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * random.c (rand_init): remove useless assignment.
- * 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]
+ * re.c (update_char_offset): remove unused variable.
-Tue Mar 5 10:20:16 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * re.c (read_escaped_byte): ditto.
- * enumerator.c (enumerator_with_index_i): allow Bignum as offset, to
- get rid of conversion exception and integer overflow.
- [ruby-dev:47131] [Bug #8010]
+Mon Oct 4 09:30:42 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * numeric.c (rb_int_succ, rb_int_pred): shortcut optimization for
- Bignum.
+ * 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]
-Tue Mar 5 10:02:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Oct 4 07:57:51 2010 NARUSE, Yui <naruse@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]
+ * cont.c (fiber_memsize): Return size.
+ Before this change, fiber_memsize always returns 0.
-Mon Mar 4 15:33:40 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Oct 4 07:16:55 2010 NARUSE, Yui <naruse@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]
+ * enc/unicode.c (onigenc_unicode_property_name_to_ctype):
+ remove useless assignment.
-Mon Mar 4 14:13:36 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * vm.c (vm_make_proc_from_block): ditto.
- * 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]
+ * variable.c (rb_ivar_count): ditto.
-Mon Mar 4 10:23:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Mon Oct 4 06:40:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * encoding.c: Typo in Encoding overview by Tom Wardrop [GH fixes #255]
+ * Makefile.in (clean-rdoc): Don't use \ in variable expansion.
+ BSD make treats it as an escape character.
-Sun Mar 3 12:35:08 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Mon Oct 4 00:01:53 2010 wanabe <s.wanabe@gmail.com>
- * lib/mkmf.rb (MakeMakefile#libpath_env): set runtime library path for
- the case rpath is disabled.
+ * tool/config.sub: revert r29320, r29324, r29347, r29354, r29365
+ to automake-1.11.1. [ruby-core:32634]
-Sun Mar 3 12:17:47 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/mkexports.rb: no longer use 'mingw64'. a patch from Luis Lavena
+ at [ruby-core:32678].
- * 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 Oct 3 20:36:37 2010 Akio Tajima (arton) <artonx@yahoo.co.jp>
-Sun Mar 3 07:33:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * test/win32ole/test_folderitem2_invokeverb.rb: Change creating
+ shortcut verb to 'Link' [Bug #3339]
- * ext/socket/tcpserver.c: Grammar for TCPServer.new from r39554
+Sun Oct 3 19:44:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Mar 3 01:17:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * configure.in (Makefile): get rid of duplicated ruby target when
+ already there it was.
- * 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]
+Sat Oct 2 22:59:32 2010 Masaki Suketa <masaki.suketa@nifty.ne.jp>
- * lib/rubygems/ext/ext_conf_builder.rb (Gem::Ext::ExtConfBuilder.build):
- use RUBYOPT instead of -r option, and revert some tests. [Bug #7698]
+ * test/win32ole/test_thread.rb: add for win32ole with Thread.
- * 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]
+Fri Oct 1 17:03:00 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-Sun Mar 3 00:04:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * test/webrick/test_httpproxy.rb (TestWEBrickHTTPProxy::test_upstream_proxy):
+ My machine fails this test at this line, saying 503 service unavailable.
- * enc/depend (CPPFLAGS), lib/mkmf.rb (MakeMakefile#create_makefile):
- define RUBY_EXPORT for static-linked-ext mswin. [Bug #7960]
+Thu Sep 30 16:11:08 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Mar 2 22:49:47 2013 Nobuyoshi Nakada <nobu@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]
- * win32/Makefile.sub (ENCOBJS, EXTOBJS, config.h): definitions for
- static-linked-ext. [Bug #7960]
+Thu Sep 30 15:18:23 2010 Yukihiro Matsumoto <matz@ruby-lang.org>
-Sat Mar 2 17:34:19 2013 Tanaka Akira <akr@fsij.org>
+ * parse.y (command_asgn): allow command_call to be right hand side
+ expression of chained assignment. [ruby-dev:42313]
- * 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).
+Thu Sep 30 10:55:38 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Mar 2 02:45:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * hash.c (ruby_setenv): workaround for old Windows. a patch from
+ Heesob Park. [ruby-core:32353]
- * array.c: typo in comment patch by Nami-Doc [Github fixes #253]
+Thu Sep 30 09:29:06 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Mar 2 01:33:17 2013 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
- * Merge Onigmo 0fe387da2fee089254f6b04990541c731a26757f
- v5.13.3 [Bug#7972] [Bug#7974]
+Thu Sep 30 09:34:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Mar 1 11:09:06 2013 Eric Hodel <drbrain@segment7.net>
+ * vm_dump.c (dump_thread): fixed wrong type of return value of
+ SymGetModuleBase64(). [ruby-dev:42306]
- * lib/fileutils.rb: Revert r34669 which altered the way
- metaprogramming in FileUtils occurred. [ruby-trunk - Bug #7958]
+Wed Sep 29 21:04:05 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
- * 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.
+ * test/ruby/test_rubyoptions.rb (TestRubyOptions::test_script_from_stdin):
+ As usual, PTY is not always available.
-Fri Mar 1 09:18:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Wed Sep 29 18:38:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/psych.rb: specify in rdoc what object is returned in parser
- By Adam Stankiewicz [Github tenderlove/psych#133]
+ * tool/config.sub (x64): regularize only for pc vendor, and strip
+ useless 64 suffix.
-Fri Mar 1 07:21:41 2013 Eric Hodel <drbrain@segment7.net>
+Wed Sep 29 17:53:02 2010 Kenta Murata <mrkn@mrkn.jp>
- * 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.
+ * ext/bigdecimal/bigdecimal.c (BIGDECIMAL_ENABLE_VPRINT):
+ VPrint is usually disabled. It's only used in debugging.
- * 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.
+Wed Sep 29 17:41:34 2010 Kenta Murata <mrkn@mrkn.jp>
-Fri Mar 1 03:25:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_save_limit):
+ return the result of a block.
- * ext/psych/lib/psych.rb: rdoc for Psych overview by Adam Stankiewicz
- [Github tenderlove/psych#134]
+ * test/bigdecimal/test_bigdecimal.rb (test_save_limit):
+ add a test for the above change.
-Thu Feb 28 22:57:48 2013 Koichi Sasada <ko1@atdot.net>
+Wed Sep 29 16:18:03 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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.
+ * vm_dump.c (dump_thread): remove unused optional arguments.
- * test/ruby/test_iseq.rb: add a test.
+Wed Sep 29 13:26:30 2010 Kenta Murata <mrkn@mrkn.jp>
-Thu Feb 28 22:23:27 2013 Tanaka Akira <akr@fsij.org>
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_save_rounding_mode):
+ return the result of a block.
- * 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.
+ * test/bigdecimal/test_bigdecimal.rb (test_save_rounding_mode):
+ add a test for the above change.
-Thu Feb 28 21:33:01 2013 WATANABE Hirofumi <eban@ruby-lang.org>
+ * test/bigdecimal/test_bigdecimal.rb (test_save_exception_mode):
+ add a test for the return value of BigDecimal.save_exception_mode.
- * configure.in(AC_DISABLE_OPTION_CHECKING): avoid warning "WARNING:
- Unrecognized options: --with-PACKAGE".
+Wed Sep 29 12:45:30 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Thu Feb 28 20:22:04 2013 Koichi Sasada <ko1@atdot.net>
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_div2, BigDecimal_add2,
+ BigDecimal_sub2, BigDecimal_mult2, VpLimitRound): remove meaningless
+ casts to get rid of compiler warnings.
- * 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.
+Wed Sep 29 12:35:13 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/ruby/test_iseq.rb: add a test of lines after ISeq#to_a.
+ * ext/bigdecimal/bigdecimal.c (VPrint, VpToString): fix format.
-Thu Feb 28 08:20:33 2013 Eric Hodel <drbrain@segment7.net>
+Wed Sep 29 12:31:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rubygems/available_set.rb: Undent for style
+ * lib/rdoc/known_classes.rb (RDoc::KNOWN_CLASSES): add Encoding.
- * 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.
+Tue Sep 28 20:50:23 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rubygems/dependency_installer.rb: Don't display "Done installing
- documentation" if documentation will not be installed.
- * lib/rubygems/rdoc.rb: ditto
+ * tool/config.sub (x64): regularize same as mswin.
- * lib/rubygems/dependency_list.rb: Use Array#concat for Ruby 1.x
- performance.
+Tue Sep 28 20:06:14 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * 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.
+ * vm_dump.c (rb_vm_bugreport): add windows support.
+ based on patches from Peter Weldon at [ruby-core:32551]
- * lib/rubygems/package.rb: Use more explicit feature check to work
- around JRuby bug #552
+Mon Sep 27 23:30:34 2010 Koichi Sasada <ko1@atdot.net>
- * lib/rubygems/ssl_certs/GeoTrust_Global_CA.pem: Added GeoTrust root
- certificate.
+ * 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]
- * test/rubygems/test_gem_source_list.rb: Use "example" instead of real
- hostname
+Mon Sep 27 15:54:03 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-Thu Feb 28 05:57:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * 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.
- * thread.c: rdoc formatting for Thread, ThreadGroup, and ThreadError
+Mon Sep 27 15:25:05 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-Thu Feb 28 02:42:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * test/net/imap/test_imap.rb: resurrection of r29259.
+ this change depends on minitest 1.7.1.
- * vm.c: Typo in overview for example of Thread#status returning false
- Reported by Lee Jarvis
+ * lib/test/unit/assertions.rb: ditto.
-Wed Feb 27 22:54:27 2013 Tanaka Akira <akr@fsij.org>
+Sun Sep 26 22:59:45 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/rubysocket.h (union_sockaddr): make it longer for SunOS
- and Darwin.
+ * tool/config.sub (x86_64-pc-mingw64): regularize.
-Wed Feb 27 21:14:34 2013 Kouhei Sutou <kou@cozmixng.org>
+Sun Sep 26 22:21:07 2010 wanabe <s.wanabe@gmail.com>
- * 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.
+ * 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]
-Wed Feb 27 19:53:32 2013 Benoit Daloze <eregontp@gmail.com>
+Sun Sep 26 10:25:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm.c (Thread): fix typos in overview
+ * tool/config.{guess,sub}: updated to automake-1.11.1.
-Wed Feb 27 13:21:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Sat Sep 25 22:48:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm.c (Thread): Typo in overview, swap setting and getting
+ * configure.in (LIBRUBY_DLDFLAGS): fix quoting.
-Wed Feb 27 13:02:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Sat Sep 25 10:30:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm.c (Thread): Documentation overview of Thread class
+ * configure.in (LIBRUBY_DLDFLAGS): use -unexported_symbol only
+ when available. http://trac.macports.org/ticket/26341
-Wed Feb 27 12:57:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Sat Sep 25 10:05:49 2010 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
- * thread.c (rb_thread_wakeup): rdoc formatting
+ * configure.in: Always add -mieee for Renesas SH4.
+ Thanks, Nobuhiro Iwamatsu. [Feature #3874] [ruby-core:32548]
-Wed Feb 27 12:53:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Sat Sep 25 01:34:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * thread.c (rb_thread_group): rdoc formatting
+ * Makefile.in (install-cross): target to install cross-compiling
+ stuff.
-Wed Feb 27 12:33:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Fri Sep 24 23:44:59 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/ostruct.rb: Typo in OpenStruct overview [Github Fixes #251]
- Patch by Chun-wei Kuo
+ * string.c (sym_call), vm.c (invoke_block_from_c),
+ vm_insnhelper.c (vm_yield_with_cfunc): pass given block.
+ [ruby-core:32075]
-Wed Feb 27 12:13:32 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * vm_eval.c (rb_funcall_passing_block): new function to call
+ method with passing given block.
- * 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]
+Fri Sep 24 15:50:43 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Feb 27 10:23:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * string.c (rb_str_to_i): fix rdoc: String#to_i raises an
+ exception when base is invalid. [ruby-core:31685]
- * thread.c (thread_raise_m): rdoc formatting
+Fri Sep 24 15:28:35 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Tue Feb 26 23:32:44 2013 Kouhei Sutou <kou@cozmixng.org>
+ * string.c (rb_str_rindex): use rb_enc_prev_char instead of repeated
+ str_nth.
+ patched by Michael Selig [ruby-core:32498]
- * 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.
+Fri Sep 24 14:19:12 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-Tue Feb 26 23:26:13 2013 Kouhei Sutou <kou@cozmixng.org>
+ * test/test_pty.rb: Same as 229281; existence of PTY class do not
+ guarantee a successful pty operation.
- * 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]
+Fri Sep 24 06:25:55 2010 Ryan Davis <ryand-ruby@zenspider.com>
-Tue Feb 26 15:12:11 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * lib/minitest/*.rb: Imported minitest 1.7.2 r5879.
+ * test/minitest/*.rb: ditto.
- * 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.
+Thu Sep 23 23:09:08 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Feb 26 15:04:19 2013 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.
- * configure.in (unexpand_shvar): get rid of non-portable shell
- behavior on OpenBSD, so no extra quotes. [Bug #7959]
+Thu Sep 23 23:08:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Tue Feb 26 10:24:49 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * tool/config.sub: mingw64 should use x86_64. [ruby-core:32514]
- * parse.y (IS_LABEL_POSSIBLE): allow labels for keyword arguments just
- after method definition without a parenthesis. [ruby-core:52820]
- [Bug #7942]
+Thu Sep 23 21:40:40 2010 wanabe <s.wanabe@gmail.com>
-Tue Feb 26 04:50:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/socket/raddrinfo.c (init_addrinfo, inspect_sockaddr): suppress
+ warnings. see [ruby-core:31932].
- * error.c: clarify reason for sleep in SignalException example
+Thu Sep 23 19:27:57 2010 wanabe <s.wanabe@gmail.com>
-Tue Feb 26 03:47:00 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * thread_win32.c (w32_wait_events, w32_close_handle): suppress warnings.
+ see [ruby-core:31932].
- * error.c: clarify a document of SignalException. Process.kill()
- doesn't have any guarantee when signal will be delivered.
- [Bug #7951] [ruby-core:52864]
+Thu Sep 23 18:54:39 2010 wanabe <s.wanabe@gmail.com>
-Mon Feb 25 23:51:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * tool/config.sub: add mingw64.
- * include/ruby/version.h: bump RUBY_API_VERSION same as RUBY_VERSION.
+ * win32/mkexports.rb (Exports::Mingw64): added.
-Mon Feb 25 21:03:34 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * win32/mkexports.rb (Exports::Mingw32): renamed from Exports::Mingw.
- * string.c (str_byte_substr): don't set coderange if it's not known.
- [Bug #7954] [ruby-dev:47108]
+Thu Sep 23 09:01:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Feb 25 16:47:02 2013 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]
- * common.mk (realclean-local): miniprelude.c is made by srcs, so it
- should not removed by distclean but by realclean. [Bug #6807]
+Wed Sep 22 17:12:01 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
-Mon Feb 25 16:30:30 2013 Eric Hodel <drbrain@segment7.net>
+ * test/openssl/utils.rb (OpenSSL#silent): always restore $VERBOSE.
+ [ruby-dev:42285]
- * 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.
+Wed Sep 22 16:59:40 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * test/rubygems/test_gem_commands_push_command.rb: Remove duplicated
- test.
+ * 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.
-Mon Feb 25 15:47:18 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Sep 22 01:55:48 2010 Koichi Sasada <ko1@atdot.net>
- * enc/depend (ARFLAGS): VisualC++ linker does not allow spaces between
- output option and the output file name. [Bug #7950]
+ * bootstraptest/test_method.rb: fix last commit.
- * enc/depend (RANLIB): set default command to do nothing, or make the
- entire line a label on Windows.
+Wed Sep 22 01:49:52 2010 Koichi Sasada <ko1@atdot.net>
-Mon Feb 25 14:41:07 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * bootstraptest/test_method.rb: add a test for [ruby-core:30534].
- * lib/mkmf.rb (MakeMakefile#init_mkmf): default libdirname to libdir.
+Wed Sep 22 00:52:44 2010 WATANABE Hirofumi <eban@ruby-lang.org>
- * tool/rbinstall.rb: ditto.
+ * lib/rdoc/ri/store.rb (save_cache): remove duplicate entries.
-Mon Feb 25 13:12:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Sep 22 00:00:05 2010 Tanaka Akira <akr@fsij.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.
+ * ext/pathname/pathname.c (path_f_pathname): Pathname() translated
+ from pathname.rb.
-Mon Feb 25 12:48:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Tue Sep 21 22:18:30 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * thread.c: Document Thread::new, clean up ::fork and mention calling
- super if subclassing Thread
+ * tool/mkconfig.rb: fixed build problem on mswin64 introduced in r29278.
-Mon Feb 25 12:38:50 2013 Tanaka Akira <akr@fsij.org>
+Tue Sep 21 02:42:35 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
- * 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.
+ * test/pathname/test_pathname.rb (TestPathname#test_mkdir): fix typo.
-Mon Feb 25 11:03:38 2013 Akinori MUSHA <knu@iDaemons.org>
+Mon Sep 20 23:23:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in (unexpand_shvar): Use the numeric comparison
- operator instead of '==' which is a ksh extension. [Bug #7941]
+ * 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 Feb 25 02:37:56 2013 Tanaka Akira <akr@fsij.org>
+Mon Sep 20 11:25:49 2010 Tanaka Akira <akr@fsij.org>
- * ext/socket: define and use union_sockaddr instead of struct
- sockaddr_storage for less casts.
+ * ext/pathname/pathname.c (Init_pathname): Pathname#=~ undefinition
+ translated from pathname.rb.
- * ext/socket/rubysocket.h (union_sockaddr): defined.
+Mon Sep 20 02:34:11 2010 Kenta Murata <mrkn@mrkn.jp>
- * ext/socket/socket.c (sock_accept): use union_sockaddr.
- (sock_accept_nonblock): ditto.
- (sock_sysaccept): ditto.
- (sock_s_getnameinfo): ditto.
+ * ext/bigdecimal/bigdecimal.c (check_rounding_mode, BigDecimal_mode):
+ raise ArgumentError instead of TypeError passing invalid modes.
- * ext/socket/basicsocket.c (bsock_getsockname): ditto.
- (bsock_getpeername): ditto.
- (bsock_local_address): ditto.
- (bsock_remote_address): ditto.
+ * test/bigdecimal/test_bigdecimal.rb (test_mode, test_round):
+ change against the above modifications.
- * ext/socket/ancdata.c (bsock_recvmsg_internal): ditto.
+Sun Sep 19 22:08:39 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * ext/socket/init.c (recvfrom_arg): ditto.
- (recvfrom_blocking): ditto.
- (rsock_s_recvfrom): ditto.
- (rsock_s_recvfrom_nonblock): ditto.
- (rsock_getfamily): ditto.
+ * lib/mkmf.rb (try_link): rdoc
+ (try_compile): ditto
+ (try_cpp): ditto
+ (try_func): ditto
+ (try_var): ditto
+ (try_run): ditto
+ (egrep_cpp): 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.
+Sun Sep 19 20:43:33 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * ext/socket/tcpserver.c (tcp_accept): ditto.
- (tcp_accept_nonblock): ditto.
- (tcp_sysaccept): ditto.
+ * 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.
- * ext/socket/ipsocket.c (ip_addr): ditto.
- (ip_peeraddr): ditto.
- (ip_s_getaddress): ditto.
+Sun Sep 19 20:37:45 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
-Sun Feb 24 21:15:05 2013 Tadayoshi Funaba <tadf@dotrb.org>
+ * common.mk (clean): removes all documents on cleaning.o
+ (CAPIOUT): new variable.
+ (clean-capi, distclean-capi, realclean-capi): new targets
- * ext/date/date_core.c: [ruby-core:52303]
+ * Makefile.in (clean-capi, distclean-capi, realclean-capi): ditto.
-Sun Feb 24 15:33:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * win32/Makefile.sub (clean-capi, distclean-capi, realclean-capi):
+ ditto.
- * 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 Sep 19 13:44:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Feb 24 15:32:36 2013 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].
- * 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 Sep 19 07:48:20 2010 Tanaka Akira <akr@fsij.org>
-Sun Feb 24 15:14:43 2013 Eric Hodel <drbrain@segment7.net>
+ * ext/pathname/pathname.c (path_unlink): Pathname#unlink and
+ Pathname#delete translated from pathname.rb.
- * 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.
+Sun Sep 19 06:06:07 2010 Kenta Murata <mrkn@mrkn.jp>
-Wed Feb 20 14:28:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/bigdecimal/bigdecimal.c (check_rounding_mode): added for
+ converting symbol to rounding mode number.
- * thread.c: Document ThreadGroup::Default
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_mode, BigDecimal_round):
+ support to specify rounding mode by symbol.
-Wed Feb 20 14:23:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * test/bigdecimal/test_bigdecimal.rb (test_mode, test_round):
+ add tests for above changes.
- * thread.c: Grammar for #backtrace_locations and ::handle_interrupt
+Sun Sep 19 05:14:35 2010 Kenta Murata <mrkn@mrkn.jp>
-Sun Feb 24 13:35:57 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * 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]
- * 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]
+ * test/bigdecimal/test_bigdecimal.rb: add tests for above changes.
-Wed Feb 20 13:23:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Sat Sep 18 20:09:51 2010 Tanaka Akira <akr@fsij.org>
- * object.c: Document methods receiving string and convert to symbol
- Patch by Stefan Rusterholz
- * vm_eval.c: ditto
- * vm_method.c: ditto
+ * ext/pathname/pathname.c (path_each_entry): Pathname#each_entry
+ translated from pathname.rb.
-Wed Feb 20 07:20:56 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Fri Sep 17 23:44:07 2010 Kouhei Sutou <kou@cozmixng.org>
- * signal.c (sigsegv): suppress unused result warning. Because
- write(2) is marked __warn_unused_result__ on Linux glibc.
+ * lib/rexml/xpath_parser.rb, test/rexml/test_xpath.rb:
+ add missing method availability check. [ruby-core:32447]
+ Reported by Wiebe Cazemier. Thanks!!!
-Sun Feb 24 07:50:53 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Sep 17 23:23:26 2010 Kouhei Sutou <kou@cozmixng.org>
- * compile.c (iseq_set_arguments): no keyword check if any keyword rest
- argument exists, even unnamed. [ruby-core:52744] [Bug #7922]
+ * test/rexml/test_sax.rb: don't use thread and sleep to avoid slow test.
-Sat Feb 23 16:51:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Fri Sep 17 23:10:44 2010 Kouhei Sutou <kou@cozmixng.org>
- * thread.c: Documentation for Thread#backtrace_locations
+ * test/rexml/test_core.rb: enable.
-Sat Feb 23 16:05:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Fri Sep 17 22:46:02 2010 Kouhei Sutou <kou@cozmixng.org>
- * vm.c: Typo in ObjectSpace::WeakMap overview
+ * test/rexml/: untabify.
-Sat Feb 23 16:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Fri Sep 17 22:29:56 2010 Kouhei Sutou <kou@cozmixng.org>
- * thread.c: Improved rdoc for ::handle_interrupt, ::pending_interrupt?
- and #pending_interrupt?
+ * test/rexml/: fix fixture data path. All REXML tests are worked.
-Sat Feb 23 12:26:43 2013 Akinori MUSHA <knu@iDaemons.org>
+Fri Sep 17 22:15:15 2010 Kouhei Sutou <kou@cozmixng.org>
- * misc/ruby-electric.el (ruby-electric-curlies)
- (ruby-electric-matching-char, ruby-electric-bar): Avoid electric
- insertion when there is a prefix argument.
+ * test/rexml/test_listener.rb: remove needless codes.
- * 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.
+Fri Sep 17 22:12:23 2010 Kouhei Sutou <kou@cozmixng.org>
-Sat Feb 23 12:35:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * 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.
- * 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
+Fri Sep 17 16:48:49 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-Sat Feb 23 10:50:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * 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.
- * array.c (rb_ary_diff, rb_ary_and, rb_ary_or): Document return order
- [RubySpec #7803]
+Fri Sep 17 08:30:27 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Feb 23 10:17:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * lib/tracer.rb: count only non-internal libraries in stack trace,
+ ignoring custom_require. [ruby-core:31858]
- * object.c (rb_obj_comp): Documenting Object#<=> return values
- Patch by Stefan Rusterholz
+Fri Sep 17 02:18:41 2010 Akinori MUSHA <knu@iDaemons.org>
-Sat Feb 23 09:48:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.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.
- * dir.c (file_s_fnmatch, fnmatch_brace): encoding-incompatible pattern
- and string do not match, instead of exception. [ruby-dev:47069]
- [Bug #7911]
+Thu Sep 16 23:47:59 2010 Tanaka Akira <akr@fsij.org>
-Sat Feb 23 08:57:46 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * ext/pathname/pathname.c (path_opendir): Pathname#opendir translated
+ from pathname.rb.
- * doc/NEWS-*: Update NEWS from their respective branches
+Thu Sep 16 21:40:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Feb 23 08:14:43 2013 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
+ * lib/test/unit.rb (Test::Unit::GlobOption): merged RejectOption.
- * NEWS: many additions for Ruby 2.0.0
+ * test/runner.rb: utilize GlobOption.
- * object.c: Add doc for Module.prepended
+Thu Sep 16 21:31:24 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Feb 23 07:52:53 2013 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.
- * template/ruby.pc.in: reorder library flags which may refer library
- names. [Bug #7913]
+Thu Sep 16 21:02:30 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Fri Feb 22 23:46:20 2013 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
+ * lib/rdoc/ri/paths.rb (RDoc::RI::Paths.each): HOMEDIR can be nil
+ if $HOME is unset.
- * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit):
- fix a typo in comment in r39384.
+Thu Sep 16 14:50:42 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
-Fri Feb 22 18:31:46 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * 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.
- * lib/rexml/document.rb (REXML::Document.entity_expansion_text_limit):
- new attribute to read/write entity expansion text limit. the default
- limit is 10Kb.
+Thu Sep 16 08:30:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rexml/text.rb (REXML::Text.unnormalize): check above attribute.
+ * 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].
-Fri Feb 22 17:36:23 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Thu Sep 16 08:27:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/test_rbconfig.rb (TestRbConfig): fix r39372.
- It must see RbConfig::CONFIG instead of CONFIG.
+ * ext/etc/extconf.rb: use expanded sysconfdir with empty DESTDIR.
+ [ruby-core:32394]
-Fri Feb 22 14:55:41 2013 Naohisa Goto <ngotogenome@gmail.com>
+Thu Sep 16 06:07:24 2010 Tanaka Akira <akr@fsij.org>
- * signal.c (ruby_abort): fix typo in r39354 [Bug #5014]
+ * ext/pathname/pathname.c (path_rmdir): Pathname#rmdir translated
+ from pathname.rb.
-Fri Feb 22 12:46:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Sep 16 00:36:25 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * random.c (rb_random_ulong_limited): fix error message for negative
- value. [ruby-dev:47061] [Bug #7903]
+ * ext/readline/extconf.rb: Remove Readline 6 check because
+ Ruby's license is now GPLv3 compatible. [ruby-core:28736]
-Fri Feb 22 11:36:45 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Sep 16 00:26:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * test/test_rbconfig.rb (TestRbConfig): skip user defined values by
- configuration options. [Bug #7902]
+ * 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]
-Fri Feb 22 11:33:42 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * COPYING.ja: ditto.
- * lib/mkmf.rb (MakeMakefile#init_mkmf): adjust default library path
- for multiarch. [Bug #7874]
+ * BSDL: added. this is from The FreeBSD License.
-Fri Feb 22 11:10:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Wed Sep 15 21:07:06 2010 Tanaka Akira <akr@fsij.org>
- * enum.c (Enumerable#chunk: Improved examples, grammar, and formatting
- Patch by Dan Bernier and Rich Bruchal of newhaven.rb
- [Github documenting-ruby/ruby#8]
+ * ext/pathname/pathname.c (path_mkdir): Pathname#mkdir translated
+ from pathname.rb.
-Fri Feb 22 11:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Wed Sep 15 13:37:00 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
- * 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]
+ * 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.
-Fri Feb 22 07:04:41 2013 Eric Hodel <drbrain@segment7.net>
+Wed Sep 15 09:12:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * 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.
+ * io.c (rb_io_puts): fix for wide char encoding strings.
+ [ruby-dev:42212]
-Fri Feb 22 06:30:57 2013 Eric Hodel <drbrain@segment7.net>
+Wed Sep 15 07:27:52 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * doc/globals.rdoc: Document what setting $DEBUG does.
+ * string.c (rb_str_format_m): mentioned about Hash argument. a patch
+ from Daniel Bovensiepen at [ruby-core:32386].
- * doc/globals.rdoc: Added pointer to $-d for full documentation.
+ * sprintf.c (get_hash): ditto, and fix typo.
-Fri Feb 22 06:27:07 2013 Eric Hodel <drbrain@segment7.net>
+Wed Sep 15 07:22:20 2010 Tanaka Akira <akr@fsij.org>
- * doc/globals.rdoc: Document what setting $VERBOSE does. [Bug #7899]
+ * ext/pathname/pathname.c (path_entries): Pathname#entries translated
+ from pathname.rb.
- * doc/globals.rdoc: Added pointer to $-w and $-v for full
- documentation.
+Wed Sep 15 02:13:44 2010 Aaron Patterson <aaron@tenderlovemaking.com>
-Fri Feb 22 02:33:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/fiddle/closure.c : Don't use FFI closure alloc on OpenBSD.
+ Thanks Jeremy Evans! [ruby-core:32384]
- * lib/abbrev.rb: Add words parameter to Abbrev::abbrev
- Patch by Devin Weaver [Github documenting-ruby/ruby#7]
+Tue Sep 14 20:17:48 2010 Tanaka Akira <akr@fsij.org>
-Thu Feb 21 17:28:14 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * ext/pathname/pathname.c (path_s_getwd): Pathname.getwd and
+ Pathname.pwd translated from pathname.rb.
- * tool/merger.rb: add interaction when only ChangeLog is modified.
+Tue Sep 14 05:13:04 2010 Tanaka Akira <akr@fsij.org>
-Thu Feb 21 16:34:46 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/pathname/pathname.c (path_s_glob): Pathname.glob translated
+ from pathname.rb.
- * signal.c (check_stack_overflow): extract duplicated code and get rid
- of declaration-after-statement. [Bug #5014]
+Tue Sep 14 01:24:51 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-Thu Feb 21 14:14:13 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * ext/socket/raddrinfo.c (ruby_getaddrinfo__aix): suppress a
+ warning.
- * signal.c (sigsegv): avoid to use async signal unsafe functions
- when nested sigsegv is happen.
- [Bug #5014] [ruby-dev:44082]
+Mon Sep 13 20:48:30 2010 Tanaka Akira <akr@fsij.org>
-Thu Feb 21 13:47:59 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * ext/pathname/pathname.c (path_zero_p): Pathname#zero? translated
+ from pathname.rb.
- * file.c (rb_group_member): added an error check. SUS says,
- getgroups(small_value) may return EINVAL.
+Mon Sep 13 19:56:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Feb 21 13:37:07 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * ext/socket/rubysocket.h (__DARWIN_ALIGNBYTES): workaround of a
+ bug in system header of darwin 9. [ruby-core:32341]
- * process.c (RB_MAX_GROUPS): moved to
- * internal.h (RB_MAX_GROUPS): here.
+Mon Sep 13 18:11:55 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * file.c (rb_group_member): use RB_MAX_GROUPS instead of
- RUBY_GROUP_MAX. They are the same.
+ * lib/mkmf.rb (try_do): fix typo. a patch from Peter Weldon
+ at [ruby-core:32327].
-Thu Feb 21 13:15:40 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Mon Sep 13 10:12:09 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * 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.
+ * util.c (ruby_strtod): reject Float('0x0.').
+ [ruby-dev:42239] Bug #3820
-Thu Feb 21 13:04:59 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Mon Sep 13 09:23:58 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * file.c (eaccess): use access() when not using setuid nor setgid.
- This is minor optimization.
+ * 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]
-Thu Feb 21 12:56:19 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Mon Sep 13 06:45:24 2010 Tanaka Akira <akr@fsij.org>
- * file.c (rb_group_member): get rid of NGROUPS dependency.
- [Bug #7886] [ruby-core:52537]
+ * ext/pathname/pathname.c (path_writable_real_p):
+ Pathname#writable_real? translated from pathname.rb.
-Thu Feb 21 12:45:03 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Sep 12 21:21:50 2010 Tadayoshi Funaba <tadf@dotrb.org>
- * ruby.c (ruby_init_loadpath_safe): try two levels upper for stripping
- libdir name. [Bug #7874]
+ * lib/date.rb: [ruby-core:32096] Thanks Colin Bartlett.
- * configure.in (libdir_basename): expand with multiarch in configure,
- not to defer the expansion till ruby.pc.in and mkmf.rb. [Bug #7874]
+Sun Sep 12 19:30:27 2010 Tanaka Akira <akr@fsij.org>
- * configure.in (libdir_basename): also -rpath and -install_name flags
- are affected when libruby directory changes. [Bug #7874]
+ * ext/pathname/pathname.c (path_world_writable_p):
+ Pathname#world_writable? translated from pathname.rb.
-Wed Feb 20 19:27:02 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Sep 12 09:16:06 2010 Tanaka Akira <akr@fsij.org>
- * include/ruby/ruby.h (HAVE_RB_SCAN_ARGS_OPTIONAL_HASH): for
- rb_scan_args() optional hash feature. [Bug #7861]
+ * ext/pathname/pathname.c (path_writable_p): Pathname#writable?
+ translated from pathname.rb.
-Wed Feb 20 18:02:26 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sun Sep 12 08:36:15 2010 Tanaka Akira <akr@fsij.org>
- * configure.in (target_os): do not strip -gnu suffix on Linux if
- --target is given explicitly. [Bug #7874]
+ * 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]
- * configure.in (libdirname): adjust library path name which libruby
- files will be installed. [Bug #7874]
+Sun Sep 12 04:27:13 2010 Tanaka Akira <akr@fsij.org>
- * tool/rbinstall.rb (libdir): ditto.
+ * process.c (rlimit_resource_name2int): use STRCASECMP to avoid
+ ALLOCA_N.
-Wed Feb 20 13:37:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Sat Sep 11 16:47:41 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/pty/pty.c: Documentation for the PTY module
+ * 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]
-Wed Feb 20 12:18:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Sat Sep 11 15:19:57 2010 Eric Hodel <drbrain@segment7.net>
- * object.c: Document Data class [Bug #7890] [ruby-core:52549]
- Patch by Matthew Mongeau
+ * lib/webrick/httpauth/digestauth.rb (WEBrick::Config::DigestAuth):
+ Add documentation
-Wed Feb 20 11:50:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * lib/webrick/config.rb (WEBrick::Config::DigestAuth): Add
+ documentation
- * lib/mutex_m.rb: Add rdoc for Mutex_m module
+Sat Sep 11 12:32:05 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Wed Feb 20 09:34:43 2013 Eric Hodel <drbrain@segment7.net>
+ * include/ruby/intern.h (rb_set_kcode, rb_get_kcode): removed
+ zombie prototype declarations. a patch from Eric Hodel
+ at [ruby-core:32305].
- * 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.
+Sat Sep 11 06:53:12 2010 Tanaka Akira <akr@fsij.org>
-Wed Feb 20 07:51:19 2013 Eric Hodel <drbrain@segment7.net>
+ * ext/pathname/pathname.c (path_symlink_p): Pathname#symlink?
+ translated from pathname.rb.
- * lib/rubygems/installer.rb: Use gsub instead of gsub! to avoid
- altering @bin_dir. Fixes tests on windows. [ruby-trunk - Bug #7885]
+Fri Sep 10 23:03:43 2010 Tanaka Akira <akr@fsij.org>
-Tue Feb 19 20:50:00 2013 Kenta MURATA <mrkn@mrkn.jp>
+ * ext/pathname/pathname.c (path_sticky_p): Pathname#sticky? translated
+ from pathname.rb.
- * ext/bigdecimal/bigdecimal.gemspec: bump to 1.2.0.
- [ruby-core:51777] [Bug #7761]
+Fri Sep 10 19:11:13 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Tue Feb 19 13:07:25 2013 Akinori MUSHA <knu@iDaemons.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.
- * ext/syslog/syslog.c (Init_syslog): Define inspect as a singleton
- method and remove it as an instance method. [Bug #6502]
+ * test/webrick/test_httprequest.rb: test added.
-Tue Feb 19 12:30:00 2013 Zachary Scott <zachary@zacharyscott.net>
+Fri Sep 10 17:49:34 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * object.c: rdoc formatting for Kernel#Array()
- * array.c: Add rdoc for Array() method to Creating Arrays section
+ * ext/openssl/lib/openssl/x509-internal.rb: removed unused local
+ variable.
-Tue Feb 19 10:35:52 2013 Eric Hodel <drbrain@segment7.net>
+ * test/openssl/*: less warnings while test running with -w.
- * ext/openssl/ossl.c (class OpenSSL): Use only inner parenthesis in
- create_extension examples.
+Fri Sep 10 16:49:20 2010 Akinori MUSHA <knu@iDaemons.org>
-Tue Feb 19 10:27:12 2013 Eric Hodel <drbrain@segment7.net>
+ * class.c (rb_scan_args): Add support for optional keyword
+ argument hash. [ruby-dev:42221] [ruby-dev:38048]
- * ext/openssl/ossl.c (class OpenSSL): Fixed ExtensionFactory example.
- Patch by Richard Bradley. [ruby-trunk - Bug #7551]
+ * README.EXT, README.EXT.ja: Update documentation accordingly.
-Tue Feb 19 08:32:11 2013 Koichi Sasada <ko1@atdot.net>
+ * dir.c (dir_initialize): Make use of the new rb_scan_args()
+ feature.
- * vm_eval.c (vm_call0_body): check interrupts after method dispatch
- from C methods. [Bug #7878]
+ * 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.
-Tue Feb 19 08:14:40 2013 Eric Hodel <drbrain@segment7.net>
+ * transcode.c (str_transcode, econv_args)
+ (econv_primitive_convert): Ditto.
- * lib/rubygems/installer.rb: Fixed placement of executables with
- --user-install. [ruby-trunk - Bug #7779]
- * test/rubygems/test_gem_installer.rb: Test for above.
+ * ext/zlib/zlib.c (rb_gzreader_initialize): Ditto.
-Tue Feb 19 06:04:06 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Fri Sep 10 10:33:18 2010 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).
+ * random.c (rb_genrand_ulong_limited): renamed from
+ rb_rand_internal and now this is public API.
- * configure.in: remove r38342's hack and check libunwind.
+ * include/ruby/ruby.h (rb_genrand_ulong_limited): added.
-Tue Feb 19 04:26:29 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * bignum.c (big_sparse_p): use rb_genrand_ulong_limited.
- * configure.in: check whether backtrace(3) works well or not.
+Fri Sep 10 13:07:22 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * vm_dump.c: set HAVE_BACKTRACE 0 if BROKEN_BACKTRACE.
+ * ext/digest/lib/digest.rb: removed unused exception variable
+ assignment to avoid a warning.
-Mon Feb 18 16:30:18 2013 Akinori MUSHA <knu@iDaemons.org>
+Fri Sep 10 07:29:14 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/ipaddr.rb (IPAddr#in6_addr): Fix a typo with the closing
- parenthesis.
+ * ext/etc/etc.c (etc_systmpdir): assume system default tmpdir
+ safe. [ruby-dev:42089]
-Mon Feb 18 12:32:24 2013 Akinori MUSHA <knu@iDaemons.org>
+Fri Sep 10 07:03:23 2010 Tanaka Akira <akr@fsij.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]
+ * ext/pathname/pathname.c (path_size_p): Pathname#size? translated from
+ pathname.rb.
-Mon Feb 18 10:09:54 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Sep 10 02:15:29 2010 Tanaka Akira <akr@fsij.org>
- * configure.in (unexpand_shvar): regularize a shell variable by
- unexpanding shell variables in it.
+ * ext/socket/option.c (inspect_peercred): support OpenBSD-current.
+ patch by Jeremy Evans. [ruby-core:32240]
-Sun Feb 17 20:55:44 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Thu Sep 9 23:25:53 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * compar.c (rb_invcmp): compare by inversed comparison, with preventing
- from infinite recursion. [ruby-core:52305] [Bug #7870]
+ * vm.c (vm_backtrace_each): skip allocator frames which have no
+ name. [ruby-core:32231]
- * string.c (rb_str_cmp_m), time.c (time_cmp): get rid of infinite
- recursion.
+Thu Sep 9 22:39:08 2010 Tanaka Akira <akr@fsij.org>
-Sun Feb 17 17:23:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/pathname/pathname.c (path_size): Pathname#size translated from
+ pathname.rb.
- * 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]
+Thu Sep 9 22:34:48 2010 wanabe <s.wanabe@gmail.com>
-Sun Feb 17 01:19:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * 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]
- * ext/psych/lib/psych/y.rb: Document Kernel#y by Adam Stankiewicz
- [Github tenderlove/psych#127]
+ * insns.def (opt_case_dispatch): ditto.
-Sun Feb 17 00:52:14 2013 NARUSE, Yui <naruse@ruby-lang.org>
+ * test/ruby/test_case.rb: add tests.
- * 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.
+Thu Sep 9 17:15:15 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Sat Feb 16 20:51:17 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+ * test/net/http/test_https.rb (test_identity_verify_failure): follows
+ the SSL hostname check error message of openssl.
- * vm.c (ENV_IN_HEAP_P): fix off-by-one error.
+Thu Sep 9 10:44:46 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Feb 16 20:47:16 2013 Akinori MUSHA <knu@iDaemons.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]
- * 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.
+Thu Sep 9 09:02:01 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Feb 16 20:43:20 2013 Tanaka Akira <akr@fsij.org>
+ * tool/rbinstall.rb (install?): gemspec filename should include
+ its version. patched by Luis Lavena [ruby-core:32165]
- * ext/socket/ancdata.c (rsock_recvmsg): ignore truncated part of
- socket address returned from recvmsg().
+Wed Sep 8 22:46:31 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
- * ext/socket/init.c (recvfrom_blocking): ignore truncated part of
- socket address returned from recvfrom().
- (rsock_s_recvfrom_nonblock): ditto.
+ * 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.
-Sat Feb 16 20:05:26 2013 Ayumu AIZAWA <ayumu.aizawa@gmail.com>
+Wed Sep 8 20:56:57 2010 Tanaka Akira <akr@fsij.org>
- * test/ruby/test_thread.rb: fixed typo
- patched by Hiroki Matsue via https://github.com/ruby/ruby/pull/248
+ * ext/pathname/pathname.c (path_setgid_p): Pathname#setgid? translated
+ from pathname.rb.
-Sat Feb 16 16:08:35 2013 Koichi Sasada <ko1@atdot.net>
+Wed Sep 8 06:25:41 2010 Tanaka Akira <akr@fsij.org>
- * 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]
+ * ext/pathname/pathname.c (path_setuid_p): Pathname#setuid? translated
+ from pathname.rb.
- 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.
+Tue Sep 7 21:03:35 2010 Tanaka Akira <akr@fsij.org>
- * test/ruby/test_method.rb: add a test.
+ * ext/pathname/pathname.c (path_readable_real_p):
+ Pathname#readable_real? translated from pathname.rb.
-Sat Feb 16 15:45:56 2013 Koichi Sasada <ko1@atdot.net>
+Mon Sep 6 23:07:25 2010 Tanaka Akira <akr@fsij.org>
- * 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]
+ * ext/pathname/pathname.c (path_world_readable_p):
+ Pathname#world_readable? translated from pathname.rb.
- * test/ruby/test_settracefunc.rb: add a test.
+Mon Sep 6 11:03:13 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Sat Feb 16 13:40:13 2013 Nobuyoshi Nakada <nobu@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.
- * configure.in (shvar_to_cpp): do not substitute exec_prefix itself
- with RUBY_EXEC_PREFIX, which cause recursive definition.
- [ruby-core:52296] [Bug #7860]
+Mon Sep 6 10:46:55 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
-Sat Feb 16 13:13:04 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * Fixed exception message for SSL post connection check failure. Patch
+ by Paul Betteridge. ref [Bug #3704]
- * ext/io/console/io-console.gemspec: bump to 0.4.2. now explicitly
- requires ruby 1.9.3 or later. [Bug #7847]
+Mon Sep 6 10:31:59 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/io/console/console.c (console_dev): compatibility with ruby 1.8.
+ * ext/readline/readline.c (readline_s_get_line_buffer):
+ Readline.line_buffer should return locale string.
+ [ruby-dev:42184] #3791
- * ext/io/console/console.c (rawmode_opt, console_dev): compatibility
- with ruby 1.9. [ruby-core:52220] [Bug #7847]
+Mon Sep 6 09:47:24 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Feb 16 12:45:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * util.c (ruby_strtod): check there is at least 1 digit after
+ "0x" before ".". [ruby-dev:42183] #3790
- * 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]
+Mon Sep 6 09:44:50 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sat Feb 16 12:15:20 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+ * util.c (ruby_strtod): check integer overflow.
+ [ruby-dev:42180] #3789
- * parse.y: add dtrace probe for symbol create.
+Mon Sep 6 06:17:21 2010 Tanaka Akira <akr@fsij.org>
- * probes.d: ditto
+ * ext/pathname/pathname.c (path_readable_p): Pathname#readable?
+ translated from pathname.rb.
-Sat Feb 16 09:27:37 2013 Tanaka Akira <akr@fsij.org>
+Sun Sep 5 23:02:34 2010 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 ?".
+ * ext/pathname/pathname.c (path_owned_p): Pathname#owned?
+ translated from pathname.rb.
-Sat Feb 16 09:24:37 2013 Tanaka Akira <akr@fsij.org>
+Sat Sep 4 23:48:47 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/extconf.rb: reorder header tests to consider inclusion
- order in rubysocket.h.
+ * file.c (rb_file_s_readlink): symlink target should be in
+ filesystem encoding.
-Sat Feb 16 08:42:58 2013 Tanaka Akira <akr@fsij.org>
+Sat Sep 4 10:40:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in, ext/socket/extconf.rb: test netinet/in_systm.h in
- ext/socket/extconf.rb instead of configure.in.
+ * load.c (ruby_init_ext): export for golfers.
- Originally, netinet/in_systm.h is included for NextStep, OpenStep,
- and Rhapsody. [ruby-core:1596]
+ * vm_core.h (rb_iseq_eval, rb_iseq_compile_with_option): ditto.
-Sat Feb 16 07:55:40 2013 Tanaka Akira <akr@fsij.org>
+Sun May 23 17:29:41 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- * configure.in: don't test xti.h here.
+ * common.mk (capi): uses a timestamp file to get rid of
+ generating twice.
- * ext/socket/extconf.rb: test xti.h here.
+Fri Jun 18 01:33:21 2010 Yuki Sonoda (Yugui) <yugui@yugui.jp>
- Originally, xti.h is included for IRIX [ruby-core:14447].
+ * enc/Makefile.in (realclean): has been missing. necessary
+ for make realclean-enc.
-Sat Feb 16 07:16:49 2013 Tanaka Akira <akr@fsij.org>
+Fri Sep 3 23:51:26 2010 Tanaka Akira <akr@fsij.org>
- * ext/socket/extconf.rb: test struct sockaddr_un and its member,
- sun_len.
+ * ext/pathname/pathname.c (path_socket_p): Pathname#socket?
+ translated from pathname.rb.
- * ext/socket/sockport.h (INIT_SOCKADDR_UN): new macro defined.
+Fri Sep 3 06:40:44 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/socket.c (sock_s_pack_sockaddr_un): use INIT_SOCKADDR_UN.
+ * ext/pty/pty.c (chfunc): pass through exceptions.
- * ext/socket/unixsocket.c (rsock_init_unixsock): ditto.
+ * io.c (rb_io_bufwrite, rb_io_bufread): added.
- * ext/socket/raddrinfo.c (init_unix_addrinfo): ditto.
- (addrinfo_mload): ditto.
+ * process.c (rb_fork_err): protect from exceptions.
-Sat Feb 16 07:05:59 2013 Tanaka Akira <akr@fsij.org>
+Fri Sep 3 06:16:07 2010 Tanaka Akira <akr@fsij.org>
- * ext/socket/sockport.h (INIT_SOCKADDR_IN): don't need family
- argument. it is always AF_INET.
+ * ext/pathname/pathname.c (path_pipe_p): Pathname#pipe?
+ translated from pathname.rb.
- * ext/socket/raddrinfo.c (make_inetaddr): follow INIT_SOCKADDR_IN
- change.
- (addrinfo_ipv6_to_ipv4): ditto.
+Fri Sep 3 06:14:40 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Feb 16 04:21:07 2013 NAKAMURA Usaku <usa@ruby-lang.org>
+ * ext/pty/pty.c (chfunc): restore errno from SystemCallError and
+ propagate proper exception to the parent. [ruby-dev:41965]
- * ext/socket/extconf.rb: workaround for mswin/mingw build problem.
- sendmsg emulation in win32/win32.c is not enough.
+Thu Sep 2 22:10:38 2010 Tanaka Akira <akr@fsij.org>
-Sat Feb 16 00:19:20 2013 Tanaka Akira <akr@fsij.org>
+ * ext/pathname/pathname.c (path_file_p): Pathname#file?
+ translated from pathname.rb.
- * ext/socket/extconf.rb: use all all tested available headers for
- have_func.
+Thu Sep 2 09:12:02 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Feb 15 22:21:37 2013 Akinori MUSHA <knu@iDaemons.org>
+ * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): don't forget to free
+ memory.
- * 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]
+Thu Sep 2 09:01:13 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Fri Feb 15 20:29:11 2013 Tanaka Akira <akr@fsij.org>
+ * win32/win32.c (CreateChild): unicodize.
- * ext/socket/sockport.h (SET_SIN_LEN): defined for strict-aliasing
- rule.
- (INIT_SOCKADDR_IN): ditto.
+ * win32/win32.c (rb_w32_spawn, rb_w32_aspawn): convert arguments of
+ CreateChild() from ACP to WideChar.
- * ext/socket/raddrinfo.c (make_inetaddr): use INIT_SOCKADDR_IN.
- (addrinfo_ipv6_to_ipv4): ditto.
+Thu Sep 2 06:53:43 2010 Tanaka Akira <akr@fsij.org>
-Fri Feb 15 18:24:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/pathname/pathname.c (path_directory_p): Pathname#directory?
+ translated from pathname.rb.
- * lib/mkmf.rb (MakeMakefile#try_run): bail out explicitly if cross
- compiling, because it cannot work of course.
+Wed Sep 1 22:03:41 2010 Tanaka Akira <akr@fsij.org>
-Fri Feb 15 12:34:58 2013 Tanaka Akira <akr@fsij.org>
+ * ext/pathname/pathname.c (path_grpowned_p): Pathname#grpowned?
+ translated from pathname.rb.
- * ext/socket/extconf.rb: test struct sockaddr_storage directly.
+Wed Sep 1 17:39:02 2010 Ryan Davis <ryand-ruby@zenspider.com>
- * ext/socket/rubysocket.h: use HAVE_TYPE_STRUCT_SOCKADDR_STORAGE.
+ * lib/minitest/*.rb: Imported minitest 1.7.1 r5835.
+ * test/minitest/*.rb: ditto.
-Fri Feb 15 12:26:13 2013 Tanaka Akira <akr@fsij.org>
+Wed Sep 1 16:50:42 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/socket/getaddrinfo.c (GET_AI): don't cast 1st argument for
- INIT_SOCKADDR.
+ * string.c (tr_setup_table): optimized. don't create hash objects
+ when given pattern is ASCII only.
-Fri Feb 15 08:12:11 2013 Tanaka Akira <akr@fsij.org>
+ * string.c (tr_find): ditto.
- * ext/socket/sockport.h (SET_SS_LEN): removed.
- (SET_SIN_LEN): removed.
- (INIT_SOCKADDR): new macro.
+Wed Sep 1 14:35:29 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/socket/ancdata.c (extract_ipv6_pktinfo): use INIT_SOCKADDR.
+ * array.c (rb_ary_rotate_m): fix typo of rdoc.
+ patched by Andrei Kulakov [ruby-core:31975]
- * ext/socket/raddrinfo.c (make_inetaddr): use INIT_SOCKADDR.
- (addrinfo_ipv6_to_ipv4): ditto.
+Wed Sep 1 14:33:36 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * ext/socket/getaddrinfo.c (GET_AI): use INIT_SOCKADDR.
+ * enum.c (enum_zip): fix typo of rdoc.
+ patched by Andrei Kulakov [ruby-core:31974]
-Fri Feb 15 07:49:27 2013 Eric Hodel <drbrain@segment7.net>
+Wed Sep 1 12:56:36 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * lib/rdoc.rb: Update to release version of 4.0.0
+ * 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]
- * lib/rubygems.rb: Update to release version of 2.0.0
+Tue Aug 31 21:10:23 2010 Tanaka Akira <akr@fsij.org>
-Fri Feb 15 07:07:27 2013 Tanaka Akira <akr@fsij.org>
+ * ext/pathname/pathname.c (path_exist_p): Pathname#exist? translated
+ from pathname.rb.
- * ext/socket/sockport.h (SA_LEN): removed because unused now.
- (SS_LEN): ditto.
- (SIN_LEN): ditto.
+Tue Aug 31 17:32:34 2010 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
-Thu Feb 14 10:45:31 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+ * ext/tk/stubs.c: fix [Bug #3771] "VC++ can't make ext/tk with enabling
+ stubs". Thanks, Akio Tajima [ruby-dev:42159].
- * test/ruby/test_process.rb (test_setsid): Added a workaround for
- MacOS X. Patch by nagachika. [Bug #7826] [ruby-core:52126]
+Tue Aug 31 03:42:14 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Fri Feb 15 00:15:31 2013 Tanaka Akira <akr@fsij.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.
- * ext/socket/sockport.h (VALIDATE_SOCKLEN): new macro to validate
- sa_len member of 4.4BSD socket address.
+ * string.c (tr_find): nodel can't be NULL; if NULL, it means
+ it is not specified.
- * ext/socket/getnameinfo.c (getnameinfo): use VALIDATE_SOCKLEN,
- instead of SA_LEN.
+Mon Aug 30 21:29:21 2010 Tanaka Akira <akr@fsij.org>
- * ext/socket/socket.c (sock_s_getnameinfo): use VALIDATE_SOCKLEN
- instead of SS_LEN.
+ * ext/pathname/pathname.c (path_executable_real_p):
+ Pathname#executable_real? translated from pathname.rb.
-Thu Feb 14 22:25:54 2013 Tanaka Akira <akr@fsij.org>
+Mon Aug 30 15:00:13 2010 NARUSE, Yui <naruse@ruby-lang.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.
+ * string.c (tr_setup_table): initialize negating table when
+ negating string is given. [ruby-core:31851]
-Thu Feb 14 20:11:23 2013 Tanaka Akira <akr@fsij.org>
+ * string.c (tr_find): add a sentence for the time when
+ target characters include negating one.
- * ext/socket: always operate length of socket address companion with
- socket address.
+ * string.c (rb_str_count): move definition.
- * ext/socket/rubysocket.h (rsock_make_ipaddr): add an argument for
- socket address length.
- (rsock_ipaddr): ditto.
+Mon Aug 30 07:32:41 2010 Tanaka Akira <akr@fsij.org>
- * ext/socket/ipsocket.c (ip_addr): pass length to rsock_ipaddr.
- (ip_peeraddr): ditto.
- (ip_s_getaddress): pass length to rsock_make_ipaddr.
+ * ext/pathname/pathname.c (path_executable_p): Pathname#executable?
+ translated from pathname.rb.
- * 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.
+Sun Aug 29 23:54:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * ext/socket/init.c (rsock_s_recvfrom): pass length to rsock_ipaddr.
- (rsock_s_recvfrom_nonblock): ditto.
+ * lib/rdoc/parser/ruby.rb (RDoc#parse_call_parameters): don't
+ include assignment. [Bug #3759], [ruby-dev:42154]
- * ext/socket/tcpsocket.c (tcp_sockaddr): pass length to
- rsock_make_ipaddr.
+ * lib/rdoc/parser/ruby.rb (RDoc#parse_class): ignore non-constant
+ name singleton class. [Bug #3759], [ruby-dev:42154]
- * 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.
+Sun Aug 29 23:25:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Feb 14 14:31:43 2013 Eric Hodel <drbrain@segment7.net>
+ * file.c (rb_get_path_check): clarify error message for
+ ASCII-incompatible path name.
- * lib/net/http.rb: Removed OpenSSL dependency from Net::HTTP.
+Sun Aug 29 16:02:54 2010 NARUSE, Yui <naruse@ruby-lang.org>
- * test/net/http/test_http.rb: Remove Zlib dependency from tests.
- * test/net/http/test_http_request.rb: ditto.
+ * 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.
-Thu Feb 14 11:08:15 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * tool/node_name.rb: read stdin with while gets.
- * class.c (include_modules_at): detect cyclic prepend with original
- method table. [ruby-core:52205] [Bug #7841]
+Sun Aug 29 13:22:43 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Feb 14 10:30:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * vm.c (rb_thread_method_id_and_class): curried proc has no
+ method. [ruby-core:31871]
- * vm_method.c: call method_removed hook on called class, not on
- prepending iclass. [ruby-core:52207] [Bug #7843]
+Sun Aug 29 12:51:33 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Feb 14 10:05:57 2013 Eric Hodel <drbrain@segment7.net>
+ * 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].
- * 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.
+Sun Aug 29 12:19:58 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Thu Feb 14 08:18:47 2013 Tanaka Akira <akr@fsij.org>
+ * load.c (load_failed): should honor encoding. [ruby-core:31915]
- * 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.
+Sun Aug 29 09:35:10 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Wed Feb 13 20:59:48 2013 Tanaka Akira <akr@fsij.org>
+ * common.mk (clean): exclude *.inc. [ruby-dev:41931]
- * ext/socket/extconf.rb: don't define socklen_t here, just test.
+ * common.mk (distclean): include *.inc.
- * ext/socket/rubysocket.h: define socklen_t if not available.
+ * common.mk (help): change description about clean and distclean.
-Wed Feb 13 18:37:50 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Aug 29 06:34:52 2010 Tanaka Akira <akr@fsij.org>
- * proc.c (mnew): skip prepending modules and return the method bound
- on the given class. [ruby-core:52160] [Bug #7836]
+ * ext/pathname/pathname.c (path_chardev_p): Pathname#chardev?
+ translated from pathname.rb.
-Wed Feb 13 18:11:59 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Aug 28 17:39:33 2010 Kenta Murata <mrkn@mrkn.jp>
- * proc.c (method_original_name): new methods Method#original_name and
- UnboundMethod#original_name. [ruby-core:52048] [Bug #7806]
- [EXPERIMENTAL]
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_save_exception_mode,
+ BigDecimal_save_rounding_mode, BigDecimal_save_limit): added.
- * proc.c (method_inspect): show the given name primarily, and
- original_id if aliased. [ruby-core:52048] [Bug #7806]
+ * test/bigdecimal/test_bigdecimal.rb: added tests for the above
+ features.
-Wed Feb 13 17:56:39 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Sat Aug 28 08:11:05 2010 Tanaka Akira <akr@fsij.org>
- * configure.in (warnflags): disable -Werror by default unless
- development. [ruby-core:52131] [Bug #7830]
+ * ext/pathname/pathname.c (path_blockdev_p): Pathname#blockdev?
+ translated from pathname.rb.
-Wed Feb 13 06:05:52 2013 Eric Hodel <drbrain@segment7.net>
+Fri Aug 27 16:20:01 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
- * 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.
+ * string.c (rb_str_prepend): new method by Shota Fukumori (sora_h)
+ [Feature #3765]
-Wed Feb 13 05:49:21 2013 Tanaka Akira <akr@fsij.org>
+Fri Aug 27 15:24:20 2010 NAKAMURA Usaku <usa@ruby-lang.org>
- * ext/socket/extconf.rb: test functions just after struct members.
+ * math.c (math_atan2): you should know that M_PI is not the feature
+ of C90.
+ fixed build failure caused by r29115.
-Tue Feb 12 12:02:35 2013 NARUSE, Yui <naruse@ruby-lang.org>
+Fri Aug 27 15:26:33 2010 Nobuyoshi Nakada <nobu@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
+ * file.c (null_device): move from io.c.
-Mon Feb 11 23:08:48 2013 Tanaka Akira <akr@fsij.org>
+Fri Aug 27 12:47:44 2010 Kenta Murata <mrkn@mrkn.jp>
- * configure.in: enable rb_cv_page_size_log test for MirOS BSD.
+ * math.c (math_atan2): change the behavior when x and y are zero.
+ [ruby-dev:42090] [Bug #3736] [ruby-dev:42116]
-Mon Feb 11 20:06:38 2013 Tanaka Akira <akr@fsij.org>
+ * test/ruby/test_math.rb (test_atan2): add tests for the above
+ changes.
- * configure.in: use -pthread on mirbsd*.
+Fri Aug 27 12:26:23 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Mon Feb 11 16:07:09 2013 Tanaka Akira <akr@fsij.org>
+ * object.c (rb_obj_class): remove mention of obsolete method.
+ a patch from Run Paint Run Run at [ruby-core:31842].
- * configure.in: add SOLIBS and LIBRUBY_SO definition for mirbsd*.
+Fri Aug 27 12:25:03 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Mon Feb 11 13:17:20 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * io.c (null_device): the name of null device. [ruby-dev:41791]
- * configure.in (rubysitearchprefix): sitearchdir and vendorarchdir
- should use sitearch, not arch. [ruby-dev:46964] [Bug #7823]
+Fri Aug 27 07:57:34 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * win32/Makefile.sub (config.status): site and vendor directories
- should use sitearch, not arch. [ruby-dev:46964] [Bug #7823]
+ * array.c (rb_ary_shuffle_bang): bail out from modification during
+ shuffle.
-Mon Feb 11 12:31:25 2013 Tanaka Akira <akr@fsij.org>
+ * array.c (rb_ary_sample): ditto.
- * configure.in: move OS specific header/function knowledge before
- automatic header tests.
+Fri Aug 27 05:11:51 2010 Tanaka Akira <akr@fsij.org>
-Mon Feb 11 11:04:29 2013 Tanaka Akira <akr@fsij.org>
+ * ext/pathname/pathname.c (path_sysopen): Pathname#sysopen translated
+ from pathname.rb.
- * configure.in: move the test for -march=i486 just after
- RUBY_UNIVERSAL_ARCH/RUBY_DEFAULT_ARCH.
+Thu Aug 26 22:53:56 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Feb 10 23:42:26 2013 Tanaka Akira <akr@fsij.org>
+ * array.c (rb_ary_shuffle): rdoc fix. argument name was missing.
+ a patch from Run Paint Run Run at [ruby-core:31848].
- * ext/socket/extconf.rb: test structure members just after types test.
+Thu Aug 26 21:49:46 2010 Tanaka Akira <akr@fsij.org>
-Sun Feb 10 20:58:17 2013 Tanaka Akira <akr@fsij.org>
+ * ext/pathname/pathname.c (path_readlines): Pathname#readlines
+ translated from pathname.rb.
- * ext/socket/extconf.rb: test types just after headers test.
+Thu Aug 26 10:37:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
-Sun Feb 10 16:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * 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]
- * 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
+Thu Aug 26 10:38:11 2010 Yutaka Kanemoto <kanemoto@ruby-lang.org>
-Sun Feb 10 15:26:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * test/dl/test_base.rb: AIX does not have dynamically loadable lib[cm].
- * lib/rake/doc/*: Sync Rake rdoc files from upstream
+ * test/fiddle/helper.rb: AIX does not have dynamically loadable lib[cm].
-Sun Feb 10 15:50:02 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Thu Aug 26 09:49:50 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * vm_exec.h (DISPATCH_ARCH_DEPEND_WAY): use __asm__ __volatile__
- instead of asm volatile.
+ * array.c (rb_ary_shuffle_bang): check number of argument.
-Sun Feb 10 15:50:02 2013 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+Tue Aug 26 09:11:40 2010 Kenta Murata <mrkn@mrkn.jp>
- * gc.h (SET_MACHINE_STACK_END): use __volatile__ instead of volatile.
+ * ext/bigdecimal/bigdecimal.c (Init_bigdecimal,
+ rmpd_set_thread_local_exception_mode, VpGetException,
+ VpSetException): thread-local exception mode.
-Sun Feb 10 14:25:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * ext/bigdecimal/bigdecimal.c (Init_bigdecimal,
+ rmpd_set_thread_local_precision_limit, VpGetPrecLimit,
+ VpSetPrecLimit): thread-local precision limit.
- * doc/rake/, lib/rake/doc/: Move Rake rdoc files to lib/rake
+ * ext/bigdecimal/bigdecimal.c (Init_bigdecimal,
+ rmpd_set_thread_local_rounding_mode, VpGetRoundMode,
+ VpSetRoundMode, VpException, VpInternalRound):
+ thread-local rounding mode.
-Sun Feb 10 12:10:25 2013 Tanaka Akira <akr@fsij.org>
+ * ext/bigdecimal/bigdecimal.c (BigDecimal_mode, BigDecimal_round,
+ VpIsRoundMode, VpGetRoundMode, VpSetRoundMode, VpActiveRound,
+ VpMidRound, VpLeftRound), ext/bigdecimal/bigdecimal.h:
+ use unsigned short for rounding mode.
- * ext/socket/extconf.rb: test headers at first.
+ * test/bigdecimal/test_bigdecimal.rb (test_mode): add test for
+ setting rounding mode.
-Sun Feb 10 12:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * test/bigdecimal/test_bigdecimal.rb (test_thread_local_mode):
+ add test for setting mode thread-locally.
- * doc/rake/*: Removed stale Rake static files
+Thu Aug 26 07:29:54 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sun Feb 10 09:10:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * array.c (rb_ary_{shuffle_bang,sample}): use Random class object.
- * lib/pp.rb, lib/prettyprint.rb: Documentation for PP and PrettyPrint
- Based on a patch by Vincent Batts [ruby-core:51253] [Bug #7656]
+ * random.c (try_get_rnd): use default_rand for Random as same as
+ singleton methods.
-Sat Feb 9 21:11:21 2013 Tanaka Akira <akr@fsij.org>
+ * random.c (rb_random_real): check the range of result.
- * 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.
+Wed Aug 25 22:11:11 2010 Tanaka Akira <akr@fsij.org>
-Sat Feb 9 17:45:58 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/pathname/pathname.c (path_binread): Pathname#binread translated
+ from pathname.rb.
- * configure.in, version.c: prevent duplicated load paths by empty
- version string, it does not work right now.
+Wed Aug 25 03:42:43 2010 NAKAMURA Usaku <usa@ruby-lang.org>
-Sat Feb 9 17:38:41 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+ * ext/dl/cfunc.c (rb_dlcfunc_call): workaround for VC9 for x64.
+ reported by kuwamoto shintaro in [ruby-dev:42125].
- * configure.in: fix arch parameters in help message. [Bug #7804]
+Tue Aug 24 23:28:50 2010 Yusuke Endoh <mame@tsg.ne.jp>
-Sat Feb 9 13:13:00 2013 Zachary Scott <zachary@zacharyscott.net>
+ * .gitignore: updated.
- * vm_trace.c: Note about TracePoint events set, and comment on
- Kernel#set_trace_func to prefer new TracePoint API
+Tue Aug 24 22:07:28 2010 Tanaka Akira <akr@fsij.org>
-Sat Feb 9 10:07:47 2013 Kazuki Tsujimoto <kazuki@callcc.net>
+ * ext/pathname/pathname.c (path_read): Pathname#read translated from
+ pathname.rb.
- * BSDL: update copyright notice for 2013.
+Tue Aug 24 10:11:04 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
-Sat Feb 9 09:24:38 2013 Eric Hodel <drbrain@segment7.net>
+ * configure.in: read API version from include/ruby/version.h.
- * lib/rubygems/package/old.rb: Fix behavior only on ruby 1.8.
+ * {bcc,win}32/setup.mak (-version-): ditto.
- * lib/rubygems/package.rb: Include checksums.yaml.gz signatures for
- verification.
- * test/rubygems/test_gem_package.rb: Test for the above.
+ * version.h (RUBY_LIB_VERSION): use API version numbers.
-Sat Feb 9 01:23:24 2013 Tanaka Akira <akr@fsij.org>
+Tue Aug 24 07:07:28 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * test/fiddle/helper.rb: specify libc and libm locations for MirOS BSD.
+ * array.c (rb_ary_shuffle_bang, rb_ary_sample): add optional
+ argument random. [ruby-dev:41923] [EXPERIMENTAL]
- * test/dl/test_base.rb: ditto.
+ * random.c (rb_random_{int32,real,bytes}): fallback to normal
+ method invocation.
-Fri Feb 8 23:25:33 2013 Tanaka Akira <akr@fsij.org>
+Tue Aug 24 06:08:10 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in: change CFLAGS temporally to test
- ARCH_FLAG="-march=i486".
+ * include/ruby/version.h (RUBY_API_VERSION_*): renamed and moved
+ from version.h. [ruby-dev:42103]
-Fri Feb 8 21:19:41 2013 Tanaka Akira <akr@fsij.org>
+Tue Aug 24 05:58:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
- * configure.in: don't define ARCH_FLAG="-march=i486" if it causes
- compilation problem.
+ * ChangeLog: flushed. [ruby-dev:42050]
-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
diff --git a/GPL b/GPL
index d159169d10..5b6e7c66c2 100644
--- a/GPL
+++ b/GPL
@@ -1,12 +1,12 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
- Preamble
+ Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
+the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
-
- GNU GENERAL PUBLIC LICENSE
+
+ GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
-
+
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
-
+
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
-
+
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
- NO WARRANTY
+ NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@@ -303,9 +303,10 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
Also add information on how to contact you by electronic and paper mail.
@@ -335,5 +336,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
+library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
diff --git a/Makefile.in b/Makefile.in
index d3313bea2e..df521cae94 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,13 +1,9 @@
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. ####
@@ -18,7 +14,6 @@ PLATFORM_DIR = @PLATFORM_DIR@
CC = @CC@
CPP = @CPP@
-LD = @LD@
YACC = bison
PURIFY =
AUTOCONF = autoconf
@@ -26,7 +21,6 @@ AUTOCONF = autoconf
MKFILES = @MAKEFILES@
BASERUBY = @BASERUBY@
TEST_RUNNABLE = @TEST_RUNNABLE@
-CROSS_COMPILING = @CROSS_COMPILING@
DOXYGEN = @DOXYGEN@
prefix = @prefix@
@@ -40,7 +34,6 @@ datadir = @datadir@
arch = @arch@
sitearch = @sitearch@
sitedir = @sitedir@
-archlibdir = @archlibdir@
ruby_version = @ruby_version@
TESTUI = console
@@ -53,7 +46,6 @@ 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@
@@ -61,50 +53,36 @@ CFLAGS = @CFLAGS@ $(ARCH_FLAG)
cflags = @cflags@
optflags = @optflags@
debugflags = @debugflags@
-warnflags = @warnflags@ @strict_warnflags@
-cppflags = @cppflags@
+warnflags = @warnflags@
INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir) -I$(srcdir)
XCFLAGS = @XCFLAGS@
CPPFLAGS = @CPPFLAGS@ $(INCFLAGS)
LDFLAGS = @STATIC@ $(CFLAGS) @LDFLAGS@
-EXTLDFLAGS = @EXTLDFLAGS@
+EXTLDFLAGS =
XLDFLAGS = @XLDFLAGS@ $(EXTLDFLAGS)
-EXTLIBS =
+EXTLIBS =
LIBS = @LIBS@ $(EXTLIBS)
MISSING = @LIBOBJS@ @ALLOCA@
LDSHARED = @LIBRUBY_LDSHARED@
-DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(XLDFLAGS) $(ARCH_FLAG)
+DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(EXTLDFLAGS) $(ARCH_FLAG)
SOLIBS = @SOLIBS@
MAINLIBS = @MAINLIBS@
ARCHMINIOBJS = @MINIOBJS@
-DLNOBJ = @DLNOBJ@
-ENCOBJS = @ENCOBJS@
-EXTOBJS = @EXTOBJS@
BUILTIN_ENCOBJS = @BUILTIN_ENCOBJS@
BUILTIN_TRANSSRCS = @BUILTIN_TRANSSRCS@
BUILTIN_TRANSOBJS = @BUILTIN_TRANSOBJS@
-POSTLINK = @POSTLINK@
RUBY_BASE_NAME=@RUBY_BASE_NAME@
RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@
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'
+RUNRUBY = @RUNRUBY@ $(RUNRUBYOPT) -- $(RUN_OPTS)
XRUBY = @XRUBY@
-BTESTRUBY = @BTESTRUBY@\
- $(MINIRUBYOPT)
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@@ -113,7 +91,7 @@ XRUBY_LIBDIR = @XRUBY_LIBDIR@
XRUBY_RUBYLIBDIR = @XRUBY_RUBYLIBDIR@
XRUBY_RUBYHDRDIR = @XRUBY_RUBYHDRDIR@
-DEFAULT_PRELUDES = $(GEM_PRELUDE)
+DEFAULT_PRELUDES = $(@USE_RUBYGEMS@_GEM_PRELUDE)
#### End of system configuration section. ####
@@ -128,8 +106,6 @@ 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@
@@ -158,10 +134,6 @@ 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
@@ -173,25 +145,14 @@ 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
@@ -202,13 +163,12 @@ all:
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)$@
+ $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(DMYEXT) $(LIBS) $(OUTFLAG)$@
$(PROGRAM):
@$(RM) $@
$(ECHO) linking $@
- $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@
- $(Q) $(POSTLINK)
+ $(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) $(OUTFLAG)$@
# We must `rm' the library each time this rule is invoked because "updating" a
# MAB library on Apple/NeXT (see --enable-fat-binary in configure) is not
@@ -216,21 +176,19 @@ $(PROGRAM):
$(LIBRUBY_A):
@$(RM) $@
$(ECHO) linking static-library $@
- $(Q) $(AR) $(ARFLAGS) $@ $(LIBRUBY_A_OBJS) $(DMYEXT)
+ $(Q) $(AR) $(ARFLAGS) $@ $(OBJS) $(DMYEXT)
@-$(RANLIB) $@ 2> /dev/null || true
- $(ECHO) verifying static-library $@
- @$(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(LIBRUBY_A) $(MAINLIBS) $(EXTLIBS) $(LIBS) $(OUTFLAG)conftest$(EXEEXT)
- @$(RM) conftest$(EXEEXT) conftest.c
$(LIBRUBY_SO):
@-$(PRE_LIBRUBY_UPDATE)
$(ECHO) linking shared-library $@
- $(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) $(DLDOBJS) $(DTRACE_OBJ) $(SOLIBS) $(EXTSOLIBS) $(OUTFLAG)$@
+ $(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) $(DLDOBJS) $(SOLIBS) $(OUTFLAG)$@
-$(Q) $(OBJCOPY) -w -L '$(SYMBOL_PREFIX)Init_*' -L '$(SYMBOL_PREFIX)*_threadptr_*' $@
- $(Q) $(POSTLINK)
- @-$(MINIRUBY) -e 'ARGV.each{|link| File.delete link rescue nil; \
+ @-$(MINIRUBY) -e 'ARGV.each{|link| File.delete link if File.exist? link; \
File.symlink "$(LIBRUBY_SO)", link}' \
$(LIBRUBY_ALIASES) || true
+
+fake: $(arch)-fake.rb
$(arch)-fake.rb: config.status $(srcdir)/template/fake.rb.in
@./config.status --file=$@:$(srcdir)/template/fake.rb.in
@chmod +x $@
@@ -259,16 +217,14 @@ install-cross: $(arch)-fake.rb $(RBCONFIG) rbconfig.rb $(arch_hdrdir)/ruby/confi
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; \
- { \
+ MAKE=$(MAKE) $(SHELL) ./config.status
+ @{ \
echo "all:; -@rm -f conftest.mk"; \
echo "conftest.mk: .force; @echo AUTO_REMAKE"; \
echo ".force:"; \
} > conftest.mk || exit 1; \
$(MAKE) -f conftest.mk | grep '^AUTO_REMAKE$$' >/dev/null 2>&1 || \
- { echo "$@ updated, restart."; exit 1; }
+ { echo "Makefile updated, restart."; exit 1; }
uncommon.mk: $(srcdir)/common.mk
sed 's/{\$$([^(){}]*)[^{}]*}//g' $< > $@
@@ -279,8 +235,7 @@ 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
+reconfig config.status: $(srcdir)/configure $(srcdir)/enc/Makefile.in
@PWD= MINIRUBY="$(MINIRUBY)"; export MINIRUBY; \
set $(SHELL) $($@-args); $(reconfig-exec-$(V))
@@ -288,7 +243,6 @@ $(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
@@ -322,7 +276,7 @@ enc/unicode/name2ctype.h: enc/unicode/name2ctype.kwd
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 && \
+ gperf $(NAME2CTYPE_OPTIONS) < $? > $@-2.h && \
diff -DUSE_UNICODE_PROPERTIES $@-1.h $@-2.h > $@.tmp || :; \
$(MV) $@.tmp $@ && \
$(CP) $? $(?:.kwd=.src) && \
@@ -343,47 +297,16 @@ enc/unicode/name2ctype.h: enc/unicode/name2ctype.kwd
.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)
+ $(Q) $(CPP) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -E $< > $@
clean-local::
- $(Q)$(RM) ext/extinit.c ext/extinit.$(OBJEXT) ext/ripper/y.output \
- enc/encinit.c enc/encinit.$(OBJEXT)
+ $(Q)$(RM) ext/extinit.c ext/extinit.$(OBJEXT) ext/ripper/y.output
-$(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)$(RM) $(INSTALLED_LIST) $(arch_hdrdir)/ruby/config.h
-$(Q)$(RMDIRS) $(arch_hdrdir)/ruby 2> /dev/null || true
clean-ext distclean-ext realclean-ext::
@@ -401,10 +324,8 @@ clean-ext 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:
@@ -430,16 +351,9 @@ 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 \
@@ -472,9 +386,4 @@ $(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'
+ $(Q) $(BASERUBY) -Ks $(srcdir)/tool/insns2vm.rb $(INSNS2VMOPT) $@
diff --git a/NEWS b/NEWS
index afd15faf3b..30fec33fdd 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,5 @@
-# -*- rdoc -*-
-
-= NEWS for Ruby 2.1.0
+# -*- rd -*-
+= NEWS
This document is a list of user visible feature changes made between
releases except for bug fixes.
@@ -9,372 +8,334 @@ 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
+== Changes since the 1.9.2 release
+=== License
-=== Language changes
+* Ruby's License is changed from a dual license with GPLv2
+ to a dual license with 2-clause BSDL.
-* 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.
+=== Known platform dependent issues
+==== OS X Lion
-* Mutex
- * misc
- * Mutex#owned? is no longer experimental.
+* You have to configure ruby with '--with-gcc=gcc-4.2' if you're using
+ Xcode 4.1, or, if you're using Xcode 4.2, you have to configure ruby
+ with '--with-gcc=clang'.
-* 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.
+=== C API updates
-* open-uri
- * Support multiple fields with same field name (like Set-Cookie).
+* rb_scan_args() is enhanced with support for option hash argument
+ extraction.
+
+* ruby_vm_at_exit() added. This enables extension libs to hook a VM
+ termination.
+
+* rb_reserved_fd_p() added. If you want to close all file descriptors,
+ check using this API. [ruby-core:37759]
+
+=== Library updates (outstanding ones only)
+
+* builtin classes
+
+ * ARGF
+ * new methods:
+ * ARGF.print
+ * ARGF.printf
+ * ARGF.putc
+ * ARGF.puts
+ * ARGF.read_nonblock
+ * ARGF.to_write_io
+ * ARGF.write
-* Pathname
- * New methods:
- * Pathname#write
- * Pathname#binwrite
+ * Array
+ * extended method:
+ * Array#pack supports endian modifiers
-* 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.
+ * Bignum
+ * Multiplication algorithm for Bignums with a large number of digits over
+ 150 BDIGITs is changed in order to reduce its calculation time.
+ Now such large Bignums are multiplied by using Toom-3 algorithm.
- For a complete list of changes since rake 0.9.6 see:
+ * Encoding
+ * new encodings:
+ * CP950
+ * CP951
+ * UTF-16
+ * UTF-32
+ * change alias:
+ * SJIS is Windows-31J
- http://rake.rubyforge.org/doc/release_notes/rake-10_1_0_rdoc.html
+ * File
+ * new constant:
+ * File::NULL
+ name of NULL device.
+ * File::DIRECT
+ name of O_DIRECT.
- http://rake.rubyforge.org/doc/release_notes/rake-10_0_3_rdoc.html
+ * IO
+ * extended method:
+ * IO#putc supports multibyte characters
+ * new methods:
+ * IO#advise
+ * IO.write(name, string, [offset] )
+ Write `string` to file `name`.
+ Opposite with File.read.
+ * IO.binwrite(name, string, [offset] )
+ binary version of IO.write.
-* RbConfig
- * New constants:
- * RbConfig::SIZEOF is added to provide the size of C types.
+ * Kernel
+ * move #__id__ to BasicObject.
+ * extended method:
+ * Kernel#rand supports range argument
-* RDoc
- * Updated to 4.1.0. Major enhancements include a modified default template
- * and accessibility enhancements.
+ * Module
+ * new methods:
+ * Module#private_constant
+ * Module#public_constant
- For a list of minor enhancements and bug fixes see:
- https://github.com/rdoc/rdoc/blob/v4.1.0.preview.1/History.rdoc
+ * Random
+ * extended method:
+ * Random.rand supports range argument
-* Resolv
- * New methods:
- * Resolv::DNS.fetch_resource
- * One-shot multicast DNS support
- * Support LOC resources
+ * String
+ * extended method:
+ * String#unpack supports endian modifiers
+ * new method:
+ * String#prepend
+ * String#byteslice
-* 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.
+ * Time
+ * extended method:
+ * Time#strftime supports %:z and %::z.
+
+ * Process
+ * Process#maxgroups and Process#maxgroups= now raise NotImplementedError if
+ the platform don't support supplementary groups concept.
+
+* bigdecimal
+
+ * BigDecimal#power and BigDecimal#** support non-integral exponent.
+
+ * Kernel.BigDecimal and BigDecimal.new now accept instances of Integer,
+ Rational, Float, and BigDecimal. If you pass a Rational or a Float to
+ them, you must specify the precision to produce the digits of a BigDecimal.
+
+ * The behavior of BigDecimal#coerce with a Rational is changed. It uses
+ the precision of the receiver BigDecimal to produce the digits of a
+ BigDecimal from the given Rational.
+
+* bigdecimal/util
+
+ * BigDecimal#to_d and Integer#to_d are added.
+
+ * Float#to_d accepts a precision.
+
+ * Rational#to_d raises ArgumentError when passing zero or negative
+ precision.
+
+ * Rational#to_d
+
+ * Zero and an implicit precision is deprecated.
+ This feature is removed at the next release of bigdecimal.
+
+ * A negative precision isn't supported.
+ Be careful it is an incompatible change.
+
+* date
+
+ * Accepts flonum explicitly with limitations.
+ * If the given offset is flonum, DateTime assumes its precision is
+ at most second.
+
+ DateTime.new(2001,2,3,0,0,0,3.0/24) ==
+ DateTime.new(2001,2,3,0,0,0,'+03:00')
+ #=> true
+
+ * If the given operand for -/+ is flonum, DateTime assumes its
+ precision is at most nanosecond.
+
+ DateTime.new(2001,2,3) + 0.5 == DateTime.new(2001,2,3,12)
+ #=> true
+
+ * Precision of offset is always at most second.
+
+ Rational('0.5') == Rational('0.500001') #=> false
+ DateTime.new(2001,2,3,0,0,0,Rational('0.5')) ==
+ DateTime.new(2001,2,3,0,0,0,Rational('0.500001'))
+ #=> true
+
+ * Ignores long offset and far reform day (with warning).
+
+ * Now accepts only:
+
+ -1<=offset<=1 (-24:00..+24:00)
+ 2298874<=start<=2426355 or -/+oo
+ (proleptic Gregorian/Julian mean -/+oo)
+
+ * A method strftime cannot produce huge output (same as Time's one).
+
+ * Even though Date/DateTime can handle far dates, the following causes
+ an exception.
+
+ DateTime.new(1<<10000).strftime('%Y') # Errno::ERANGE
+
+ * Changed the format of inspect.
+ * Changed the format of marshal (but, can load old dumps).
-* REXML::Parsers::StreamParser
- * Supports "entity" event.
+* io/console
+ * new methods:
+ * IO#noecho {|io| }
+ * IO#echo=
+ * IO#echo?
+ * IO#raw {|io| }
+ * IO#raw!
+ * IO#getch
+ * IO#winsize
+ * IO.console
-* REXML::Text
- * REXML::Text#<< supports method chain like 'text << "XXX" << "YYY"'.
- * REXML::Text#<< supports not "raw" mode.
+* json
+ * updated to v1.5.4.
-* Rinda::RingServer, Rinda::RingFinger
- * Rinda now supports multicast sockets. See Rinda::RingServer and
- Rinda::RingFinger for details.
+* matrix
+ * new classes:
+ * Matrix::EigenvalueDecomposition
+ * Matrix::LUPDecomposition
+ * new methods:
+ * Matrix#diagonal?
+ * Matrix#eigen
+ * Matrix#eigensystem
+ * Matrix#hermitian?
+ * Matrix#lower_triangular?
+ * Matrix#lup
+ * Matrix#lup_decomposition
+ * Matrix#normal?
+ * Matrix#orthogonal?
+ * Matrix#permutation?
+ * Matrix#round
+ * Matrix#symmetric?
+ * Matrix#unitary?
+ * Matrix#upper_triangular?
+ * Matrix#zero?
+ * Vector#magnitude, #norm
+ * Vector#normalize
+ * extended methods:
+ * Matrix#each and #each_with_index can iterate on a subset of the elements
+ * Matrix#find_index returns [row, column] and can iterate on a subset
+ of the elements
+ * Matrix#** implements Numeric exponents (using the eigensystem)
+ * Matrix.zero can build rectangular matrices
+
+* minitest
+ * Minitest has been updated to version 2.2.2.
+ * For full details, see https://github.com/seattlerb/minitest/blob/master/History.txt
+
+* net/http
+ * SNI (Server Name Indication) supported for HTTPS.
+
+ * Allow to configure to wait server returning '100 continue' response
+ before sending HTTP request body. Set Net::HTTP#continue_timeout AND pass
+ 'expect' => '100-continue' to a extra HTTP header.
+
+ For example, the following code sends HTTP header and waits for getting
+ '100 continue' response before sending HTTP request body. When 0.5 [sec]
+ timeout occurs or the server send '100 continue', the client sends HTTP
+ request body.
+ http.continue_timeout = 0.5
+ http.request_post('/continue', 'body=BODY', 'expect' => '100-continue')
-* RubyGems
- * Updated to 2.2.0. Notable new features include:
+ * new method:
+ * Net::HTTPRequest#set_form): Added to support
+ both application/x-www-form-urlencoded and multipart/form-data.
- * 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
+* objspace
+ * new method:
+ * ObjectSpace::memsize_of_all
+
+* openssl
+ * PKey::RSA and PKey::DSA now use the generic X.509 encoding scheme
+ (e.g. used in a X.509 certificate's Subject Public Key Info) when
+ exporting public keys to DER or PEM. Backward compatibility is
+ ensured by (already existing) fallbacks during creation.
+ * OpenSSL::ASN1::Constructive#new and OpenSSL::ASN1::Primitive#new
+ (and the constructors of their sub-classes) will no longer force
+ tagging to be set to :EXPLICIT when tag and/or tag_class are passed
+ as parameters. tagging must be set explicitly.
+ * Support for infinite length encodings via infinite_length attribute.
+ * OpenSSL::PKey.read( file | string [, pwd] ) allows to read arbitrary
+ public/private keys in DER-/PEM-encoded form with an optional password
+ for encrypted PEM encodings.
+ * Add new method OpenSSL::X509::Name#hash_old as a wrapper of
+ X509_NAME_hash_old() defined from OpenSSL 1.0.0. It returns OpenSSL 0.9.8
+ compatible hash value.
+
+* optparse
+ * support for bash/zsh completion.
+
+* Rake
+ * Rake has been upgraded from 0.8.7 to 0.9.2.2. For full release notes see
+ https://github.com/jimweirich/rake/blob/master/CHANGES
- * Updated to 2.2.2. Fixes some minor bugs and performance regressions.
+* RDoc
+ * RDoc has been upgraded to version 3.9.4. For full release notes see
+ http://docs.seattlerb.org/rdoc/History_txt.html
- For a complete list of enhancements and bug fixes see:
- https://github.com/rubygems/rubygems/tree/master/History.txt
+* rexml
+ * Support Ruby native encoding mechanism and iconv dependency is dropped.
-* Set
- * New methods:
- * Set#intersect?
- * Set#disjoint?
+* RubyGems
+ * RubyGems has been upgraded to version 1.8.10. For full release notes see
+ http://rubygems.rubyforge.org/rubygems-update/History_txt.html
+
+* stringio
+ * extended method:
+ * StringIO#set_encoding can get 2nd argument and optional hash.
+
+* test/unit
+ * New arguments:
+ * -j N, --jobs=N: Allow run N testcases at once.
+ * --jobs-status: Show status of jobs when parallel running.
+ * --no-retry: Don't retry testcases which failed when parallel running.
+ * --ruby=RUBY: path to ruby for job(worker) process. optional.
+ * --hide-skip: Hide skip messages. You'll see the number of skips at end of
+ test result.
+
+* uri
+ * new methods:
+ * URI::Generic#hostname
+ * URI::Generic#hostname=
+
+* webrick
+ * new method:
+ * WEBrick::HTTPRequest#continue for generating '100 continue' response.
+ * new logging directive:
+ * %{remote}p for remote (client) port number.
-* Socket
- * New methods:
- * Socket.getifaddrs
+* yaml
+ * The default YAML engine is now Psych. You may downgrade to syck by setting
+ YAML::ENGINE.yamler = 'syck'.
-* 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.
+* zlib
+ * new methods:
+ * Zlib.deflate
+ * Zlib.inflate
-=== C API updates
+* FileUtils
+ * extended method:
+ * FileUtils#chmod supports symbolic mode argument.
-* rb_gc_set_params() is deprecated. This is only used in Ruby internal.
+=== Language changes
-* rb_gc_count() added. This returns the number of times GC occurred.
+* Regexps now support Unicode 6.0. (new characters and scripts)
-* rb_gc_stat() added. This allows access to specific GC.stat() values from C
- without any allocation overhead.
+* [experimental] Regexps now support Age property.
+ Unlike Perl, current implementation takes interpretation of the
+ interpretation of UTS #18.
+ http://www.unicode.org/reports/tr18/
-* rb_gc_latest_gc_info() added. This allows access to GC.latest_gc_info().
+* Turning on/off indentation warnings with directives.
+ ("# -*- warn-indent: true -*-" / "# -*- warn-indent: false -*-")
-* 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.
+=== Compatibility issues (excluding feature bug fixes)
-* rb_profile_frames() added. Provides low-cost access to the current ruby stack
- for callstack profiling.
+ * Rational#to_d
-* 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.
+ See above.
diff --git a/README b/README
index 3ffe3553a8..3d2e636e4d 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-= What's Ruby
+* What's Ruby
Ruby is the interpreted scripting language for quick and
easy object-oriented programming. It has many features to
@@ -6,130 +6,113 @@ process text files and to do system management tasks (as in
Perl). It is simple, straight-forward, and extensible.
-== Features of Ruby
+* 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-like/POSIX compatible platforms
+ + 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
+ cf. http://redmine.ruby-lang.org/wiki/ruby-19/SupportedPlatforms
-== How to get Ruby
-
-For a complete list of ways to install Ruby, including using third party
-tools like rvm, see:
-
-http://www.ruby-lang.org/en/downloads/
+* How to get Ruby
The Ruby distribution files can be found in the following FTP site:
-ftp://ftp.ruby-lang.org/pub/ruby/
+ ftp://ftp.ruby-lang.org/pub/ruby/
The trunk of the Ruby source tree can be checked out with the
following command:
$ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby
-Or if you are using git then use the following command:
-
- $ git clone git://github.com/ruby/ruby.git
-
There are some other branches under development. Try the following
command and see the list of branches:
$ svn ls http://svn.ruby-lang.org/repos/ruby/branches/
-Or if you are using git then use the following command:
-
- $ git ls-remote git://github.com/ruby/ruby.git
-== Ruby home-page
+* Ruby home-page
The URL of the Ruby home-page is:
-http://www.ruby-lang.org/
+ http://www.ruby-lang.org/
-== Mailing list
+* Mailing list
There is a mailing list to talk about Ruby.
To subscribe this list, please send the following phrase
- subscribe YourFirstName YourFamilyName
+ subscribe YourFirstName YourFamilyName
e.g.
subscribe Joseph Smith
-in the mail body (not subject) to the address <mailto:ruby-talk-ctl@ruby-lang.org>.
+in the mail body (not subject) to the address <ruby-talk-ctl@ruby-lang.org>.
-== How to compile and install
+* 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.
-
-1. If +./configure+ does not exist or is older than configure.in,
+ 1. If ./configure does not exist or is older than configure.in,
run autoconf to (re)generate configure.
-2. Run +./configure+, which will generate config.h and Makefile.
+ 2. Run ./configure, which will generate config.h and Makefile.
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.
+ environment. Specify optflags=.. and warnflags=.. as necessary
+ to override them.
-3. Edit +defines.h+ if you need. Usually this step will not be needed.
+ 3. Edit defines.h if you need. Usually this step will not be needed.
-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
+ 4. Remove comment mark(#) before the module names from ext/Setup (or
+ add module names if not present), if you want to link modules
statically.
If you don't want to compile non static extension modules
(probably on architectures which does not allow dynamic loading),
- remove comment mark from the line "<tt>#option nodynamic</tt>" in
- +ext/Setup+.
-
- Usually this step will not be needed.
+ remove comment mark from the line "#option nodynamic" in
+ ext/Setup.
-5. Run +make+.
+ 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>",
+ 6. Optionally, run 'make test' to check whether the compiled Ruby
+ interpreter works well. If you see the message "test succeeded",
your ruby works as it should (hopefully).
-7. Run '<tt>make install</tt>'
+ 7. Run 'make install'
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
+ * ${DESTDIR}${prefix}/bin
+ * ${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}
+ * ${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
+ * ${DESTDIR}${prefix}/lib
+ * ${DESTDIR}${prefix}/lib/ruby
+ * ${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}
+ * ${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
+ * ${DESTDIR}${prefix}/lib/ruby/site_ruby
+ * ${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}
+ * ${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
+ * ${DESTDIR}${prefix}/lib/ruby/vendor_ruby
+ * ${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}
+ * ${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
+ * ${DESTDIR}${prefix}/lib/ruby/gems/${MAJOR}.${MINOR}.${TEENY}
+ * ${DESTDIR}${prefix}/share/man/man1
+ * ${DESTDIR}${prefix}/share/ri/${MAJOR}.${MINOR}.${TEENY}/system
+
+ If Ruby's API version is `x.y.z', the ((|${MAJOR}|)) is `x', the
+ ((|${MINOR}|)) is `y', and the ((|${TEENY}|)) is `z'.
+
+ NOTE: teeny of the API version may be different from one of
Ruby's program version
You may have to be a super user to install ruby.
@@ -137,30 +120,21 @@ This is what you need to do to compile and install Ruby:
If you fail to compile ruby, please send the detailed error report with
the error log and machine/OS type, to help others.
-Some extension libraries may not get compiled because of lack of
-necessary external libraries and/or headers, then you will need to run
-'<tt>make distclean-ext</tt>' to remove old configuration after
-installing them in such case.
-
-== Copying
-
-See the file +COPYING+.
-== Feedback
+* Copying
-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).
+See the file COPYING.
-Bug reports should be filed at http://bugs.ruby-lang.org
-== The Author
+* The Author
-Ruby was originally designed and developed by Yukihiro Matsumoto (Matz) in 1995.
+Feel free to send comments and bug reports to the author. Here is the
+author's latest mail address:
-<mailto:matz@ruby-lang.org>
+ matz@netlab.jp
---
+-------------------------------------------------------
+created at: Thu Aug 3 11:57:36 JST 1995
Local variables:
-mode: rdoc
+mode: indented-text
end:
diff --git a/README.EXT b/README.EXT
index 6f7340ceda..de63f54699 100644
--- a/README.EXT
+++ b/README.EXT
@@ -1,8 +1,8 @@
-# README.EXT - -*- RDoc -*- created at: Mon Aug 7 16:45:54 JST 1995
+.\" README.EXT - -*- Text -*- created at: Mon Aug 7 16:45:54 JST 1995
This document explains how to make extension libraries for Ruby.
-= Basic Knowledge
+1. Basic knowledge
In C, variables have types and data do not have types. In contrast,
Ruby variables do not have a static type, and data themselves have
@@ -13,46 +13,47 @@ has its data-type.
To retrieve C data from a VALUE, you need to:
-1. Identify the VALUE's data type
-2. Convert the VALUE into C data
+ (1) Identify the VALUE's data type
+ (2) Convert the VALUE into C data
Converting to the wrong data type may cause serious problems.
-== Data-Types
+
+1.1 Data-types
The Ruby interpreter has the following data types:
-T_NIL :: nil
-T_OBJECT :: ordinary object
-T_CLASS :: class
-T_MODULE :: module
-T_FLOAT :: floating point number
-T_STRING :: string
-T_REGEXP :: regular expression
-T_ARRAY :: array
-T_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
+ 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 :: included module
-T_MATCH :: MatchData object
-T_UNDEF :: undefined
-T_NODE :: syntax tree node
-T_ZOMBIE :: object awaiting finalization
+ T_ICLASS
+ T_MATCH
+ T_UNDEF
+ T_NODE
+ T_ZOMBIE
Most of the types are represented by C structures.
-== Check Data Type of the VALUE
+1.2 Check Data Type of the VALUE
The macro TYPE() defined in ruby.h shows the data type of the VALUE.
TYPE() returns the constant number T_XXXX described above. To handle
@@ -86,7 +87,7 @@ There are also faster check macros for fixnums and nil.
FIXNUM_P(obj)
NIL_P(obj)
-== Convert VALUE into C Data
+1.3 Convert VALUE into C data
The data for type T_NIL, T_FALSE, T_TRUE are nil, false, true
respectively. They are singletons for the data type.
@@ -125,33 +126,30 @@ 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).
+instance, RARRAY(obj). See "ruby.h".
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)'.
+allocated region can be accessed by `RSTRING_PTR(str)'. For arrays,
+use `RARRAY_LEN(ary)' and `RARRAY_PTR(ary)' respectively.
Notice: Do not change the value of the structure directly, unless you
are responsible for the result. This ends up being the cause of
interesting bugs.
-== Convert C Data into VALUE
+1.4 Convert C data into VALUE
To convert C data to Ruby values:
-FIXNUM ::
+ * FIXNUM
- left shift 1 bit, and turn on LSB.
+ left shift 1 bit, and turn on LSB.
-Other pointer values::
+ * Other pointer values
- cast to VALUE.
+ cast to VALUE.
-You can determine whether a VALUE is pointer or not by checking its LSB.
+You can determine whether a VALUE is pointer or not by checking its LSB.
Notice Ruby does not allow arbitrary pointer values to be a VALUE. They
should be pointers to the structures which Ruby knows about. The known
@@ -159,161 +157,146 @@ structures are defined in <ruby.h>.
To convert C numbers to Ruby values, use these macros.
-INT2FIX() :: for integers within 31bits.
-INT2NUM() :: for arbitrary sized integer.
+ INT2FIX() for integers within 31bits.
+ INT2NUM() for arbitrary sized integer.
INT2NUM() converts an integer into a Bignum if it is out of the FIXNUM
range, but is a bit slower.
-== Manipulating Ruby Data
+1.5 Manipulating Ruby data
As I already mentioned, it is not recommended to modify an object's
internal structure. To manipulate objects, use the functions supplied
by the Ruby interpreter. Some (not all) of the useful functions are
listed below:
-=== String Functions
-
-rb_str_new(const char *ptr, long len) ::
-
- Creates a new Ruby string.
-
-rb_str_new2(const char *ptr) ::
-rb_str_new_cstr(const char *ptr) ::
-
- Creates a new Ruby string from a C string. This is equivalent to
- rb_str_new(ptr, strlen(ptr)).
+ String functions
-rb_tainted_str_new(const char *ptr, long len) ::
+ rb_str_new(const char *ptr, long len)
- Creates a new tainted Ruby string. Strings from external data
- sources should be tainted.
+ Creates a new Ruby string.
-rb_tainted_str_new2(const char *ptr) ::
-rb_tainted_str_new_cstr(const char *ptr) ::
+ rb_str_new2(const char *ptr)
+ rb_str_new_cstr(const char *ptr)
- Creates a new tainted Ruby string from a C string.
+ Creates a new Ruby string from a C string. This is equivalent to
+ rb_str_new(ptr, strlen(ptr)).
-rb_sprintf(const char *format, ...) ::
-rb_vsprintf(const char *format, va_list ap) ::
+ rb_tainted_str_new(const char *ptr, long len)
- Creates a new Ruby string with printf(3) format.
+ Creates a new tainted Ruby string. Strings from external data
+ sources should be tainted.
- 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.
+ rb_tainted_str_new2(const char *ptr)
+ rb_tainted_str_new_cstr(const char *ptr)
-rb_str_cat(VALUE str, const char *ptr, long len) ::
+ Creates a new tainted Ruby string from a C string.
- Appends len bytes of data from ptr to the Ruby string.
+ rb_sprintf(const char *format, ...)
+ rb_vsprintf(const char *format, va_list ap)
-rb_str_cat2(VALUE str, const char* ptr) ::
+ Creates a new Ruby string with printf(3) format.
- Appends C string ptr to Ruby string str. This function is
- equivalent to rb_str_cat(str, ptr, strlen(ptr)).
+ rb_str_cat(VALUE str, const char *ptr, long len)
-rb_str_catf(VALUE str, const char* format, ...) ::
-rb_str_vcatf(VALUE str, const char* format, va_list ap) ::
+ Appends len bytes of data from ptr to the Ruby string.
- 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.
+ rb_str_cat2(VALUE str, const char* ptr)
-rb_enc_str_new(const char *ptr, long len, rb_encoding *enc) ::
-rb_enc_str_new_cstr(const char *ptr, rb_encoding *enc) ::
+ Appends C string ptr to Ruby string str. This function is
+ equivalent to rb_str_cat(str, ptr, strlen(ptr)).
- Creates a new Ruby string with the specified encoding.
+ rb_str_catf(VALUE str, const char* format, ...)
+ rb_str_vcatf(VALUE str, const char* format, va_list ap)
-rb_usascii_str_new(const char *ptr, long len) ::
-rb_usascii_str_new_cstr(const char *ptr) ::
+ 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.
- Creates a new Ruby string with encoding US-ASCII.
+ rb_enc_str_new(const char *ptr, long len, rb_encoding *enc)
+
+ Creates a new Ruby string with the specified encoding.
+
+ rb_usascii_str_new(const char *ptr, long len)
+ rb_usascii_str_new_cstr(const char *ptr)
-rb_str_resize(VALUE str, long len) ::
+ Creates a new Ruby string with encoding US-ASCII.
- 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_resize(VALUE str, long len)
-rb_str_set_len(VALUE str, long len) ::
+ 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.
- 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.
+ rb_str_set_len(VALUE str, long len)
-=== Array Functions
+ 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.
-rb_ary_new() ::
+ Array functions
- Creates an array with no elements.
+ rb_ary_new()
-rb_ary_new2(long len) ::
-rb_ary_new_capa(long len) ::
+ Creates an array with no elements.
- Creates an array with no elements, allocating internal buffer
- for len elements.
+ rb_ary_new2(long len)
-rb_ary_new3(long n, ...) ::
-rb_ary_new_from_args(long n, ...) ::
+ Creates an array with no elements, allocating internal buffer
+ for len elements.
- Creates an n-element array from the arguments.
+ rb_ary_new3(long n, ...)
-rb_ary_new4(long n, VALUE *elts) ::
-rb_ary_new_from_values(long n, VALUE *elts) ::
+ Creates an n-element array from the arguments.
- Creates an n-element array from a C array.
+ rb_ary_new4(long n, VALUE *elts)
-rb_ary_to_ary(VALUE obj) ::
+ Creates an n-element array from a C array.
- Converts the object into an array.
- Equivalent to Object#to_ary.
+ rb_ary_to_ary(VALUE obj)
-There are many functions to operate an array. They may dump core if other
-types are given.
+ Converts the object into an array.
+ Equivalent to Object#to_ary.
-rb_ary_aref(argc, VALUE *argv, VALUE ary) ::
+ There are many functions to operate an array.
+ They may dump core if other types are given.
- Equivalent to Array#[].
+ rb_ary_aref(argc, VALUE *argv, VALUE ary)
-rb_ary_entry(VALUE ary, long offset) ::
+ Equivaelent to Array#[].
- ary[offset]
+ rb_ary_entry(VALUE ary, long offset)
-rb_ary_store(VALUE ary, long offset, VALUE obj) ::
+ ary[offset]
- ary[offset] = obj
+ rb_ary_subseq(VALUE ary, long beg, long len)
-rb_ary_subseq(VALUE ary, long beg, long len) ::
+ ary[beg, 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_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) ::
+2. Extending Ruby with C
- Appends len elements of objects from ptr to the array.
-
-= Extending Ruby with C
-
-== Adding New Features to Ruby
+2.1 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
+ * Classes, Modules
+ * Methods, Singleton Methods
+ * Constants
-=== Class and Module Definition
+2.1.1 Class/module definition
To define a class or module, use the functions below:
@@ -328,21 +311,21 @@ 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
+2.1.2 Method/singleton method definition
To define methods or singleton methods, use these functions:
- void rb_define_method(VALUE klass, const char *name,
+ void rb_define_method(VALUE klass, const char *name,
VALUE (*func)(), int argc)
- void rb_define_singleton_method(VALUE object, const char *name,
+ void rb_define_singleton_method(VALUE object, const char *name,
VALUE (*func)(), int argc)
The `argc' represents the number of the arguments to the C function,
which must be less than 17. But I doubt you'll need that many.
If `argc' is negative, it specifies the calling sequence, not number of
-the arguments.
+the arguments.
If argc is -1, the function will be called as:
@@ -360,16 +343,16 @@ where obj is the receiver, and args is the Ruby array containing
actual arguments.
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.
+as the name of method to be defined. See 2.2.2 for IDs.
- void rb_define_method_id(VALUE klass, ID name,
+ 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,
+ void rb_define_private_method(VALUE klass, const char *name,
VALUE (*func)(), int argc)
- void rb_define_protected_method(VALUE klass, const char *name,
+ void rb_define_protected_method(VALUE klass, const char *name,
VALUE (*func)(), int argc)
At last, rb_define_module_function defines a module functions,
@@ -386,7 +369,7 @@ or
To define module functions, use:
- void rb_define_module_function(VALUE module, const char *name,
+ void rb_define_module_function(VALUE module, const char *name,
VALUE (*func)(), int argc)
In addition, function-like methods, which are private methods defined
@@ -411,7 +394,7 @@ 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
+2.1.3 Constant definition
We have 2 functions to define constants:
@@ -421,11 +404,11 @@ We have 2 functions to define constants:
The former is to define a constant under specified class/module. The
latter is to define a global constant.
-== Use Ruby Features from C
+2.2 Use Ruby features from C
There are several ways to invoke Ruby's features from C code.
-=== Evaluate Ruby Programs in a String
+2.2.1 Evaluate Ruby Programs in a String
The easiest way to use Ruby's functionality from a C program is to
evaluate the string as Ruby program. This function will do the job:
@@ -435,7 +418,7 @@ evaluate the string as Ruby program. This function will do the job:
Evaluation is done under the current context, thus current local variables
of the innermost method (which is defined by Ruby) can be accessed.
-Note that the evaluation can raise an exception. There is a safer
+Note that the evaluation can raise an exception. There is a safer
function:
VALUE rb_eval_string_protect(const char *str, int *state)
@@ -443,7 +426,8 @@ function:
It returns nil when an error occur. Moreover, *state is zero if str was
successfully evaluated, or nonzero otherwise.
-=== ID or Symbol
+
+2.2.2 ID or Symbol
You can invoke methods directly, without parsing the string. First I
need to explain about ID. ID is the integer number to represent
@@ -451,30 +435,18 @@ Ruby's identifiers such as variable names. The Ruby data type
corresponding to ID is Symbol. It can be accessed from Ruby in the
form:
- :Identifier
-
+ :Identifier
or
-
- :"any kind of string"
+ :"any kind of string"
You can get the ID value from a string within C code by using
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
@@ -484,7 +456,7 @@ and to convert Ruby Symbol object to ID, use
ID SYM2ID(VALUE symbol)
-=== Invoke Ruby Method from C
+2.2.3 Invoke Ruby method from C
To invoke methods directly, you can use the function below
@@ -493,7 +465,7 @@ To invoke methods directly, you can use the function below
This function invokes a method on the recv, with the method name
specified by the symbol mid.
-=== Accessing the Variables and Constants
+2.2.4 Accessing the variables and constants
You can access class variables and instance variables using access
functions. Also, global variables can be shared between both
@@ -510,11 +482,11 @@ To access the constants of the class/module:
VALUE rb_const_get(VALUE obj, ID id)
-See also Constant Definition above.
+See 2.1.3 for defining new constant.
-= Information Sharing Between Ruby and C
+3. Information sharing between Ruby and C
-=== Ruby Constants That C Can Be Accessed From C
+3.1 Ruby constants that C can be accessed from C
As stated in section 1.3,
the following Ruby constants can be referred from C.
@@ -528,7 +500,7 @@ Boolean values. Qfalse is false in C also (i.e. 0).
Ruby nil in C scope.
-== Global Variables Shared Between C and Ruby
+3.2 Global variables shared between C and Ruby
Information can be shared between the two environments using shared global
variables. To define them, you can use functions listed below:
@@ -572,12 +544,12 @@ The prototypes of the getter and setter functions are as follows:
void (*setter)(VALUE val, ID id);
-== Encapsulate C Data into a Ruby Object
+3.3 Encapsulate C data into a Ruby object
To wrap and objectify a C pointer as a Ruby object (so called
DATA), use Data_Wrap_Struct().
- Data_Wrap_Struct(klass, mark, free, sval)
+ Data_Wrap_Struct(klass, mark, free, ptr)
Data_Wrap_Struct() returns a created DATA object. The klass argument
is the class for the DATA object. The mark argument is the function
@@ -610,25 +582,25 @@ Data_Get_Struct().
A pointer to the structure will be assigned to the variable sval.
-See the example below for details.
+See the example below for details.
-= Example - Creating dbm Extension
+4. Example - Creating dbm extension
OK, here's the example of making an extension library. This is the
extension to access DBMs. The full source is included in the ext/
directory in the Ruby's source tree.
-== Make the Directory
+(1) make the directory
% mkdir ext/dbm
Make a directory for the extension library under ext directory.
-== Design the Library
+(2) design the library
You need to design the library features, before making it.
-== Write the C Code
+(3) write C code.
You need to write C code for your extension library. If your library
has only one source file, choosing ``LIBRARY.c'' as a file name is
@@ -645,37 +617,41 @@ 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
+--
+void
+Init_dbm(void)
+{
+ /* define DBM class */
+ cDBM = rb_define_class("DBM", rb_cObject);
+ /* DBM includes Enumerate module */
+ rb_include_module(cDBM, rb_mEnumerable);
+
+ /* DBM has class method open(): arguments are received as C array */
+ rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1);
+
+ /* DBM instance method close(): no args */
+ rb_define_method(cDBM, "close", fdbm_close, 0);
+ /* DBM instance method []: 1 argument */
+ rb_define_method(cDBM, "[]", fdbm_fetch, 1);
+ :
+
+ /* ID for a instance variable to store DBM data */
+ id_dbm = rb_intern("dbm");
+}
+--
+
+The dbm extension wraps the dbm struct in the C environment using
Data_Make_Struct.
- struct dbmdata {
- int di_size;
- DBM *di_dbm;
- };
+--
+struct dbmdata {
+ int di_size;
+ DBM *di_dbm;
+};
+
- obj = Data_Make_Struct(klass, struct dbmdata, 0, free_dbm, dbmp);
+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.
@@ -683,10 +659,12 @@ 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();\
- }
+--
+#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.
@@ -694,11 +672,13 @@ 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)
- {
- /* ... */
- }
+--
+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.
@@ -706,15 +686,17 @@ 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 */
- }
- /* ... */
- }
+--
+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
@@ -729,21 +711,25 @@ references.
The following is an example of a method that takes arguments by Ruby's
array:
- static VALUE
- thread_initialize(VALUE thread, VALUE args)
- {
- /* ... */
- }
+--
+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
+** 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)
-== Prepare extconf.rb
+(4) prepare extconf.rb
If the file named extconf.rb exists, it will be executed to generate
Makefile.
@@ -756,26 +742,10 @@ need to put
at the top of the file. You can use the functions below to check
various conditions.
- 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
-
-See MakeMakefile for full documentation of these functions.
+ have_library(lib, func): check whether library containing function exists.
+ have_func(func, header): check whether function exists
+ have_header(header): check whether header file exists
+ create_makefile(target): generate Makefile
The value of the variables below will affect the Makefile.
@@ -792,7 +762,7 @@ If a compilation condition is not fulfilled, you should not call
``create_makefile''. The Makefile will not be generated, compilation will
not be done.
-== Prepare Depend (Optional)
+(5) prepare depend (optional)
If the file named depend exists, Makefile will include that file to
check dependencies. You can make this file by invoking
@@ -801,7 +771,7 @@ check dependencies. You can make this file by invoking
It's harmless. Prepare it.
-== Generate Makefile
+(6) generate Makefile
Try generating the Makefile by:
@@ -816,7 +786,7 @@ 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.
-== Run make
+(7) make
Type
@@ -825,38 +795,36 @@ Type
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
+(8) debug
You may need to rb_debug the extension. Extensions can be linked
statically by adding the directory name in the ext/Setup file so that
you can inspect the extension with the debugger.
-== Done! Now You Have the Extension Library
+(9) done, now you have the extension library
You can do anything you want with your library. The author of Ruby
will not claim any restrictions on your code depending on the Ruby API.
Feel free to use, modify, distribute or sell your program.
-= Appendix A. Ruby Source Files Overview
-
-== Ruby Language Core
-
-class.c :: 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
+Appendix A. Ruby source files overview
-== Ruby Syntax Parser
+ruby language core
-parse.y :: grammar definition
-parse.c :: automatically generated from parse.y
-keywords :: reserved keywords
-lex.c :: automatically generated from keywords
+ 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 Evaluator (a.k.a. YARV)
+ruby syntax parser
+ parse.y
+ -> parse.c : automatically generated
+ keywords : reserved keywords
+ -> lex.c : automatically generated
+ruby evaluator (a.k.a. YARV)
compile.c
eval.c
eval_error.c
@@ -864,7 +832,7 @@ lex.c :: automatically generated from keywords
eval_safe.c
insns.def : definition of VM instructions
iseq.c : implementation of VM::ISeq
- thread.c : thread management and context switching
+ thread.c : thread management and context swiching
thread_win32.c : thread implementation
thread_pthread.c : ditto
vm.c
@@ -881,8 +849,7 @@ lex.c :: automatically generated from keywords
-> opt*.inc : automatically generated
-> vm.inc : automatically generated
-== Regular Expression Engine (Oniguruma)
-
+regular expression engine (oniguruma)
regex.c
regcomp.c
regenc.c
@@ -891,18 +858,18 @@ lex.c :: automatically generated from keywords
regparse.c
regsyntax.c
-== Utility Functions
+utility functions
-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
+ debug.c : debug symbols for C debuggger
+ dln.c : dynamic loading
+ st.c : general purpose hash table
+ strftime.c : formatting times
+ util.c : misc utilities
-== Ruby Interpreter Implementation
+ruby interpreter implementation
dmyext.c
- dmydln.c
+ dmydln.c
dmyencoding.c
id.c
inits.c
@@ -913,683 +880,587 @@ util.c :: misc utilities
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
+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.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) ::
+Appendix B. Ruby extension API reference
- This macro retrieves the pointer value from DATA, and assigns it to
- the variable sval.
+** Types
-== Checking Data Types
+ VALUE
-TYPE(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).
- Internal type (T_NIL, T_FIXNUM, etc.)
+** Variables and constants
-FIXNUM_P(value) ::
+ Qnil
- Is +value+ a Fixnum?
+const: nil object
-NIL_P(value) ::
+ Qtrue
- Is +value+ nil?
+const: true object(default true value)
-void Check_Type(VALUE value, int type) ::
+ Qfalse
- Ensures +value+ is of the given internal +type+ or raises a TypeError
+const: false object
-SaveStringValue(value) ::
+** C pointer wrapping
- Checks that +value+ is a String and is not tainted
+ Data_Wrap_Struct(VALUE klass, void (*mark)(), void (*free)(), void *sval)
-== Data Type Conversion
+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.
-FIX2INT(value), INT2FIX(i) ::
+ Data_Make_Struct(klass, type, mark, free, sval)
- Fixnum <-> integer
+This macro allocates memory using malloc(), assigns it to the variable
+sval, and returns the DATA encapsulating the pointer to memory region.
-FIX2LONG(value), LONG2FIX(l) ::
+ Data_Get_Struct(data, type, sval)
- Fixnum <-> long
+This macro retrieves the pointer value from DATA, and assigns it to
+the variable sval.
-NUM2INT(value), INT2NUM(i) ::
+** Checking data types
- Numeric <-> integer
+TYPE(value)
+FIXNUM_P(value)
+NIL_P(value)
+void Check_Type(VALUE value, int type)
+void Check_SafeStr(VALUE value)
-NUM2UINT(value), UINT2NUM(ui) ::
+** Data type conversion
- Numeric <-> unsigned integer
+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)
+NUM2DBL(value)
+rb_float_new(f)
+StringValue(value)
+StringValuePtr(value)
+StringValueCStr(value)
+rb_str_new2(s)
-NUM2LONG(value), LONG2NUM(l) ::
+** defining class/module
- Numeric <-> long
+ VALUE rb_define_class(const char *name, VALUE super)
-NUM2ULONG(value), ULONG2NUM(ul) ::
+Defines a new Ruby class as a subclass of super.
- Numeric <-> unsigned long
+ VALUE rb_define_class_under(VALUE module, const char *name, VALUE super)
-NUM2LL(value), LL2NUM(ll) ::
+Creates a new Ruby class as a subclass of super, under the module's
+namespace.
- Numeric <-> long long
+ VALUE rb_define_module(const char *name)
-NUM2ULL(value), ULL2NUM(ull) ::
+Defines a new Ruby module.
- Numeric <-> unsigned long long
+ VALUE rb_define_module_under(VALUE module, const char *name)
-NUM2OFFT(value), OFFT2NUM(off) ::
+Defines a new Ruby module under the module's namespace.
- Numeric <-> off_t
+ void rb_include_module(VALUE klass, VALUE module)
-NUM2SIZET(value), SIZET2NUM(size) ::
+Includes module into class. If class already includes it, just
+ignored.
- Numeric <-> size_t
+ void rb_extend_object(VALUE object, VALUE module)
-NUM2SSIZET(value), SSIZET2NUM(ssize) ::
+Extend the object with the module's attributes.
- Numeric <-> ssize_t
+** Defining Global Variables
-rb_integer_pack(value, words, numwords, wordsize, nails, flags), rb_integer_unpack(words, numwords, wordsize, nails, flags) ::
+ void rb_define_variable(const char *name, VALUE *var)
- Numeric <-> Arbitrary size integer buffer
+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.
-NUM2DBL(value) ::
+ void rb_define_readonly_variable(const char *name, VALUE *var)
- Numeric -> double
+Defines a read-only global variable. Works just like
+rb_define_variable(), except the defined variable is read-only.
-rb_float_new(f) ::
+ void rb_define_virtual_variable(const char *name,
+ VALUE (*getter)(), VALUE (*setter)())
- double -> Float
+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:
-StringValue(value) ::
+ VALUE getter(ID id)
+ void setter(VALUE val, ID id)
- Object with #to_str -> String
+The getter function must return the value for the access.
-StringValuePtr(value) ::
+ void rb_define_hooked_variable(const char *name, VALUE *var,
+ VALUE (*getter)(), VALUE (*setter)())
- Object with #to_str -> pointer to String data
+Defines hooked variable. It's a virtual variable with a C variable.
+The getter is called as
-StringValueCStr(value) ::
+ VALUE getter(ID id, VALUE *var)
- Object with #to_str -> pointer to String data without NULL bytes
+returning a new value. The setter is called as
-rb_str_new2(s) ::
+ void setter(VALUE val, ID id, VALUE *var)
- char * -> String
+GC requires C global variables which hold Ruby values to be marked.
-== Defining Class and Module
+ void rb_global_variable(VALUE *var)
-VALUE rb_define_class(const char *name, VALUE super) ::
+Tells GC to protect these variables.
- Defines a new Ruby class as a subclass of super.
+** Constant Definition
-VALUE rb_define_class_under(VALUE module, const char *name, VALUE super) ::
+ void rb_define_const(VALUE klass, const char *name, VALUE val)
- Creates a new Ruby class as a subclass of super, under the module's
- namespace.
+Defines a new constant under the class/module.
-VALUE rb_define_module(const char *name) ::
+ void rb_define_global_const(const char *name, VALUE val)
- Defines a new Ruby module.
+Defines a global constant. This is just the same as
-VALUE rb_define_module_under(VALUE module, const char *name) ::
+ rb_define_const(cKernal, name, val)
- Defines a new Ruby module under the module's namespace.
+** Method Definition
-void rb_include_module(VALUE klass, VALUE module) ::
+ rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
- Includes module into class. If class already includes it, just ignored.
+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.
-void rb_extend_object(VALUE object, VALUE module) ::
+ rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
- Extend the object with the module's attributes.
+Defines a private method for the class. Arguments are same as
+rb_define_method().
-== Defining Global Variables
+ rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
-void rb_define_variable(const char *name, VALUE *var) ::
+Defines a singleton method. Arguments are same as rb_define_method().
- 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.
+ rb_scan_args(int argc, VALUE *argv, const char *fmt, ...)
-void rb_define_readonly_variable(const char *name, VALUE *var) ::
+Retrieve argument from argc and argv to given VALUE references
+according to the format string. The format can be described in ABNF
+as follows:
- Defines a read-only global variable. Works just like
- rb_define_variable(), except the defined variable is read-only.
+--
+scan-arg-spec := param-arg-spec [option-hash-arg-spec] [block-arg-spec]
-void rb_define_virtual_variable(const char *name, VALUE (*getter)(), VALUE (*setter)()) ::
+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
- 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:
+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
+--
- VALUE getter(ID id)
- void setter(VALUE val, ID id)
+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 getter function must return the value for the access.
+The number of given arguments, excluding an option hash or iterator
+block, is returned.
-void rb_define_hooked_variable(const char *name, VALUE *var, VALUE (*getter)(), VALUE (*setter)()) ::
+** Invoking Ruby method
- Defines hooked variable. It's a virtual variable with a C variable.
- The getter is called as
+ VALUE rb_funcall(VALUE recv, ID mid, int narg, ...)
- VALUE getter(ID id, VALUE *var)
+Invokes a method. To retrieve mid from a method name, use rb_intern().
- returning a new value. The setter is called as
+ VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)
- void setter(VALUE val, ID id, VALUE *var)
+Invokes a method, passing arguments by an array of values.
- GC requires C global variables which hold Ruby values to be marked.
+ VALUE rb_eval_string(const char *str)
-void rb_global_variable(VALUE *var)
+Compiles and executes the string as a Ruby program.
- Tells GC to protect these variables.
+ ID rb_intern(const char *name)
-== Constant Definition
+Returns ID corresponding to the name.
-void rb_define_const(VALUE klass, const char *name, VALUE val) ::
+ char *rb_id2name(ID id)
- Defines a new constant under the class/module.
+Returns the name corresponding ID.
-void rb_define_global_const(const char *name, VALUE val) ::
+ char *rb_class2name(VALUE klass)
- Defines a global constant. This is just the same as
+Returns the name of the class.
- rb_define_const(cKernal, name, val)
+ int rb_respond_to(VALUE object, ID id)
-== Method Definition
+Returns true if the object responds to the message specified by id.
-rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc) ::
+** Instance Variables
- 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.
+ VALUE rb_iv_get(VALUE obj, const char *name)
-rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc) ::
+Retrieve the value of the instance variable. If the name is not
+prefixed by `@', that variable shall be inaccessible from Ruby.
- Defines a private method for the class. Arguments are same as
- rb_define_method().
+ VALUE rb_iv_set(VALUE obj, const char *name, VALUE val)
-rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc) ::
+Sets the value of the instance variable.
- Defines a singleton method. Arguments are same as rb_define_method().
+** Control Structure
-rb_scan_args(int argc, VALUE *argv, const char *fmt, ...) ::
+ VALUE rb_block_call(VALUE recv, ID mid, int argc, VALUE * argv,
+ VALUE (*func) (ANYARGS), VALUE data2)
- Retrieve argument from argc and argv to given VALUE references
- according to the format string. The format can be described in ABNF
- as follows:
+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.
- scan-arg-spec := param-arg-spec [option-hash-arg-spec] [block-arg-spec]
+ [OBSOLETE] VALUE rb_iterate(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2)
- 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
+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.
+
+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.
- 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
+ VALUE rb_yield(VALUE val)
- 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.
+Evaluates the block with value val.
- The number of given arguments, excluding an option hash or iterator
- block, is returned.
+ VALUE rb_rescue(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)
-== Invoking Ruby method
+Calls the function func1, with arg1 as the argument. If an exception
+occurs during func1, it calls func2 with arg2 as the argument. The
+return value of rb_rescue() is the return value from func1 if no
+exception occurs, from func2 otherwise.
-VALUE rb_funcall(VALUE recv, ID mid, int narg, ...) ::
+ VALUE rb_ensure(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)
- Invokes a method. To retrieve mid from a method name, use rb_intern().
- Able to call even private/protected methods.
+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 occured.
-VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv) ::
-VALUE rb_funcallv(VALUE recv, ID mid, int argc, VALUE *argv) ::
+ VALUE rb_protect(VALUE (*func) (VALUE), VALUE arg, int *state)
- Invokes a method, passing arguments as an array of values.
- Able to call even private/protected methods.
+Calls the function func with arg as the argument. If no exception
+occured 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.
-VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, VALUE *argv) ::
+ void rb_jump_tag(int state)
- Invokes a method, passing arguments as an array of values.
- Able to call only public methods.
+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.
-VALUE rb_eval_string(const char *str) ::
+** Exceptions and Errors
- Compiles and executes the string as a Ruby program.
+ void rb_warn(const char *fmt, ...)
-ID rb_intern(const char *name) ::
+Prints a warning message according to a printf-like format.
- Returns ID corresponding to the name.
+ void rb_warning(const char *fmt, ...)
-char *rb_id2name(ID id) ::
+Prints a warning message according to a printf-like format, if
+$VERBOSE is true.
- Returns the name corresponding ID.
+void rb_raise(rb_eRuntimeError, const char *fmt, ...)
-char *rb_class2name(VALUE klass) ::
+Raises RuntimeError. The fmt is a format string just like printf().
- Returns the name of the class.
+ void rb_raise(VALUE exception, const char *fmt, ...)
-int rb_respond_to(VALUE object, ID id) ::
+Raises a class exception. The fmt is a format string just like printf().
- Returns true if the object responds to the message specified by id.
+ void rb_fatal(const char *fmt, ...)
-== Instance Variables
+Raises a fatal error, terminates the interpreter. No exception handling
+will be done for fatal errors, but ensure blocks will be executed.
-VALUE rb_iv_get(VALUE obj, const char *name) ::
+ void rb_bug(const char *fmt, ...)
- Retrieve the value of the instance variable. If the name is not
- prefixed by `@', that variable shall be inaccessible from Ruby.
+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.
-VALUE rb_iv_set(VALUE obj, const char *name, VALUE val) ::
-
- Sets the value of the instance variable.
-
-== Control Structure
-
-VALUE rb_block_call(VALUE recv, ID mid, int argc, VALUE * argv, VALUE (*func) (ANYARGS), VALUE data2) ::
-
- 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.
-
-[OBSOLETE] VALUE rb_iterate(VALUE (*func1)(), void *arg1, VALUE (*func2)(), void *arg2) ::
-
- Calls the function func1, supplying func2 as the block. func1 will be
- called with the argument arg1. func2 receives the value from yield as
- the first argument, arg2 as the second argument.
-
- 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.
-
-VALUE rb_yield(VALUE val) ::
-
- Evaluates the block with value val.
-
-VALUE rb_rescue(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) ::
-
- Calls the function func1, with arg1 as the argument. If an exception
- occurs during func1, it calls func2 with arg2 as the argument. The
- return value of rb_rescue() is the return value from func1 if no
- exception occurs, from func2 otherwise.
-
-VALUE rb_ensure(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) ::
-
- Calls the function func1 with arg1 as the argument, then calls func2
- with arg2 if execution terminated. The return value from
- rb_ensure() is that of func1 when no exception occurred.
-
-VALUE rb_protect(VALUE (*func) (VALUE), VALUE arg, int *state) ::
-
- 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.
-
-void rb_jump_tag(int state) ::
-
- 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.
-
-void rb_iter_break() ::
-
- Exits from the current innermost block. This function never return to
- the caller.
-
-void rb_iter_break_value(VALUE value) ::
-
- Exits from the current innermost block with the value. The block will
- return the given argument value. This function never return to the
- caller.
-
-== Exceptions and Errors
-
-void rb_warn(const char *fmt, ...) ::
-
- Prints a warning message according to a printf-like format.
-
-void rb_warning(const char *fmt, ...) ::
-
- Prints a warning message according to a printf-like format, if
- $VERBOSE is true.
-
-void rb_raise(rb_eRuntimeError, const char *fmt, ...) ::
-
- Raises RuntimeError. The fmt is a format string just like printf().
-
-void rb_raise(VALUE exception, const char *fmt, ...) ::
-
- Raises a class exception. The fmt is a format string just like printf().
-
-void rb_fatal(const char *fmt, ...) ::
-
- Raises a fatal error, terminates the interpreter. No exception handling
- will be done for fatal errors, but ensure blocks will be executed.
-
-void rb_bug(const char *fmt, ...) ::
-
- Terminates the interpreter immediately. This function should be
- called under the situation caused by the bug in the interpreter. No
- exception handling nor ensure execution will be done.
-
-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
+** Initialize and Start the Interpreter
The embedding API functions are below (not needed for extension libraries):
-void ruby_init() ::
+ void ruby_init()
- Initializes the interpreter.
+Initializes the interpreter.
-void ruby_options(int argc, char **argv) ::
+ void ruby_options(int argc, char **argv)
- Process command line arguments for the interpreter.
+Process command line arguments for the interpreter.
-void ruby_run() ::
+ void ruby_run()
- Starts execution of the interpreter.
+Starts execution of the interpreter.
-void ruby_script(char *name) ::
+ void ruby_script(char *name)
- Specifies the name of the script ($0).
+Specifies the name of the script ($0).
-== Hooks for the Interpreter Events
+** Hooks for the Interpreter Events
- void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events,
- VALUE data)
+ void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data)
Adds a hook function for the specified interpreter events.
-events should be OR'ed value of:
-
- RUBY_EVENT_LINE
- RUBY_EVENT_CLASS
- RUBY_EVENT_END
- RUBY_EVENT_CALL
- RUBY_EVENT_RETURN
- RUBY_EVENT_C_CALL
- RUBY_EVENT_C_RETURN
- RUBY_EVENT_RAISE
- RUBY_EVENT_ALL
+events should be Or'ed value of:
+
+ RUBY_EVENT_LINE
+ RUBY_EVENT_CLASS
+ RUBY_EVENT_END
+ RUBY_EVENT_CALL
+ RUBY_EVENT_RETURN
+ RUBY_EVENT_C_CALL
+ RUBY_EVENT_C_RETURN
+ RUBY_EVENT_RAISE
+ RUBY_EVENT_ALL
The definition of rb_event_hook_func_t is below:
- typedef void (*rb_event_hook_func_t)(rb_event_t event, VALUE data,
- VALUE self, ID id, VALUE klass)
+ typedef void (*rb_event_hook_func_t)(rb_event_t event, VALUE data,
+ VALUE self, ID id, VALUE klass)
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.
- int rb_remove_event_hook(rb_event_hook_func_t func)
+ int rb_remove_event_hook(rb_event_hook_func_t func)
Removes the specified hook function.
-== Macros for Compatibility
+** Macros for the Compatibilities
Some macros to check API compatibilities are available by default.
-NORETURN_STYLE_NEW ::
+ NORETURN_STYLE_NEW
- Means that NORETURN macro is functional style instead of prefix.
+Means that NORETURN macro is functional style instead of prefix.
-HAVE_RB_DEFINE_ALLOC_FUNC ::
+ HAVE_RB_DEFINE_ALLOC_FUNC
- 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").
+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").
-HAVE_RB_REG_NEW_STR ::
+ HAVE_RB_REG_NEW_STR
- 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").
+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 ::
+ HAVE_RB_IO_T
- Means that type rb_io_t is provided.
+Means that type rb_io_t is provided.
-USE_SYMBOL_AS_METHOD_NAME ::
+ USE_SYMBOL_AS_METHOD_NAME
- Means that Symbols will be returned as method names, e.g.,
- Module#methods, #singleton_methods and so on.
+Means that Symbols will be returned as method names, e.g.,
+Module#methods, #singleton_methods and so on.
-HAVE_RUBY_*_H ::
+ 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.
+Defined in ruby.h and means correspoinding header is available. For
+instance, when HAVE_RUBY_ST_H is defined you should use ruby/st.h not
+mere st.h.
-RB_EVENT_HOOKS_HAVE_CALLBACK_DATA ::
+ RB_EVENT_HOOKS_HAVE_CALLBACK_DATA
- Means that rb_add_event_hook() takes the third argument `data', to be
- passed to the given event hook function.
+Means that rb_add_event_hook() takes the third argument `data', to be
+passed to the given event hook function.
-= Appendix C. Functions available for use in extconf.rb
+Appendix C. Functions Available in extconf.rb
-See documentation for {mkmf}[rdoc-ref:MakeMakefile].
+These functions are available in extconf.rb:
-= Appendix D. Generational GC
+ have_macro(macro, headers)
-Ruby 2.1 introduced a generational garbage collector (called RGenGC).
-RGenGC (mostly) keeps compatibility.
+Checks whether macro is defined with header. Returns true if the macro
+is defined.
-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.
+ have_library(lib, func)
-If your library adheres to the following tips, performance can
-be further improved. Especially, the "Don't touch pointers directly" section is
-important.
+Checks whether the library exists, containing the specified function.
+Returns true if the library exists.
-== Incompatibility
+ find_library(lib, func, path...)
-You can't write RBASIC(obj)->klass field directly because it is const
-value now.
+Checks whether a library which contains the specified function exists in
+path. Returns true if the library exists.
-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:
+ have_func(func, header)
-VALUE rb_obj_hide(VALUE obj) ::
+Checks whether func exists with header. Returns true if the function
+exists. To check functions in an additional library, you need to
+check that library first using have_library().
- Clear RBasic::klass field. The object will be an internal object.
- ObjectSpace::each_object can't find this object.
+ have_var(var, header)
-VALUE rb_obj_reveal(VALUE obj, VALUE klass) ::
+Checks whether var exists with header. Returns true if the variable
+exists. To check variables in an additional library, you need to
+check that library first using have_library().
- Reset RBasic::klass to be klass.
- We expect the `klass' is hidden class by rb_obj_hide().
+ have_header(header)
-== Write barriers
+Checks whether header exists. Returns true if the header file exists.
-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.
+ find_header(header, path...)
-=== Don't touch pointers directly
+Checks whether header exists in path. Returns true if the header file
+exists.
-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.
+ have_struct_member(type, member, header)
-DO NOT USE THESE MACROS and instead use the corresponding C-APIs such as
-rb_ary_aref(), rb_ary_store() and so on.
+Checks whether type has member with header. Returns true if the type
+is defined and has the member.
-=== Consider whether to insert write barriers
+ have_type(type, header, opt)
-You don't need to care about write barriers if you only use built-in
-types.
+Checks whether type is defined with header. Returns true if the type
+is defined.
-If you support T_DATA objects, you may consider using write barriers.
+ check_sizeof(type, header)
-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.
+Checks the size of type in char with header. Returns the size if the
+type is defined, otherwise nil.
-(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.
+ create_makefile(target)
-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.
+Generates the Makefile for the extension library. If you don't invoke
+this method, the compilation will not be done.
-=== Combine with built-in types
+ find_executable(bin, path)
-Please consider utilizing built-in types. Most built-in types support
-write barrier, so you can use them to avoid manually inserting write
-barriers.
+Finds command in path, which is File::PATH_SEPARATOR-separated list of
+directories. If path is nil or omitted, environment variable PATH
+will be used. Returns the path name of the command if it is found,
+otherwise nil.
-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.
+ with_config(withval[, default=nil])
+
+Parses the command line options and returns the value specified by
+--with-<withval>.
+
+ enable_config(config, *defaults)
+ disable_config(config, *defaults)
-With use of such techniques, you don't need to insert write barriers
-anymore.
+Parses the command line options for boolean. Returns true if
+--enable-<config> is given, or false if --disable-<config> is given.
+Otherwise, yields defaults to the given block and returns the result
+if it is called with a block, or returns defaults.
-=== Insert write barriers
+ dir_config(target[, default_dir])
+ dir_config(target[, default_include, default_lib])
-[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.
+Parses the command line options and adds the directories specified by
+--with-<target>-dir, --with-<target>-include, and/or --with-<target>-lib
+to $CFLAGS and/or $LDFLAGS. --with-<target>-dir=/path is equivalent to
+--with-<target>-include=/path/include --with-<target>-lib=/path/lib.
+Returns an array of the added directories ([include_dir, lib_dir]).
-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.
+ pkg_config(pkg)
-For a complete guide for RGenGC and write barriers, please refer to
-<https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/RGenGC>.
+Obtains the information for pkg by pkg-config command. The actual
+command name can be overridden by --with-pkg-config command line
+option.
/*
* Local variables:
diff --git a/README.EXT.ja b/README.EXT.ja
index 5ccc9306d1..f2d7609ff5 100644
--- a/README.EXT.ja
+++ b/README.EXT.ja
@@ -1,963 +1,941 @@
-# README.EXT.ja - -*- RDoc -*- created at: Mon Aug 7 16:45:54 JST 1995
+.\" README.EXT.ja - -*- Text -*- created at: Mon Aug 7 16:45:54 JST 1995
-Rubyの拡張ライブラリの作り方を説明します.
+Rubyγĥ饤֥κޤ
-= 基礎知識
+1μ
-Cの変数には型があり,データには型がありません.ですから,た
-とえばポインタをintの変数に代入すると,その値は整数として取
-り扱われます.逆にRubyの変数には型がなく,データに型がありま
-す.この違いのため,CとRubyは相互に変換しなければ,お互いの
-データをアクセスできません.
+CѿˤϷꡤǡˤϷޤ󡥤Ǥ顤
+ȤХݥ󥿤intѿȡͤȤƼ
+갷ޤդRubyѿˤϷʤǡ˷
+ΰ㤤ΤᡤCRubyߤѴʤСߤ
+ǡ򥢥Ǥޤ
-RubyのデータはVALUEというCの型で表現されます.VALUE型のデー
-タはそのデータタイプを自分で知っています.このデータタイプと
-いうのはデータ(オブジェクト)の実際の構造を意味していて,Ruby
-のクラスとはまた違ったものです.
+RubyΥǡVALUEȤCηɽޤVALUEΥǡ
+ϤΥǡפʬΤäƤޤΥǡפ
+Τϥǡ(֥)μºݤι¤̣ƤơRuby
+Υ饹ȤϤޤäΤǤ
-VALUEからCにとって意味のあるデータを取り出すためには
+VALUECˤȤäựΤǡФˤ
-1. VALUEのデータタイプを知る
-2. VALUEをCのデータに変換する
+ (1) VALUEΥǡפΤ
+ (2) VALUECΥǡѴ
-の両方が必要です.(1)を忘れると間違ったデータの変換が行われ
-て,最悪プログラムがcore dumpします.
+ξɬפǤ(1)˺ȴְäǡѴԤ
+ơǰץबcore dumpޤ
-== データタイプ
+1.1 ǡ
-Rubyにはユーザが使う可能性のある以下のタイプがあります.
+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_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
+ T_ICLASS
+ T_MATCH
+ T_UNDEF
+ T_NODE
+ T_ZOMBIE
-ほとんどのタイプはCの構造体で実装されています.
+ۤȤɤΥפCι¤ΤǼƤޤ
-== VALUEのデータタイプをチェックする
+1.2 VALUEΥǡפå
-ruby.hではTYPE()というマクロが定義されていて,VALUEのデータ
-タイプを知ることが出来ます.TYPE()マクロは上で紹介したT_XXXX
-の形式の定数を返します.VALUEのデータタイプに応じて処理する
-場合には,TYPE()の値で分岐することになります.
+ruby.hǤTYPE()ȤޥƤơVALUEΥǡ
+פΤ뤳ȤޤTYPE()ޥϾǾҲ𤷤T_XXXX
+η֤ޤVALUEΥǡפ˱ƽ
+ˤϡTYPE()ͤʬ뤳Ȥˤʤޤ
switch (TYPE(obj)) {
case T_FIXNUM:
- /* 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のデータタイプが正しいかどうかチェックす
-るためには,この関数を使います.
+δؿvaluetype̵С㳰ȯޤ
+Ϳ줿VALUEΥǡפɤå
+뤿ˤϡδؿȤޤ
-FIXNUMとNILに関してはより高速な判別マクロが用意されています.
+FIXNUMNIL˴ؤƤϤ®Ƚ̥ޥѰդƤޤ
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()」があります.
+1.3 VALUECΥǡѴ
+
+ǡפT_NILT_FALSET_TRUEǤǡϤ줾
+nilfalsetrueǤΥǡפΥ֥ȤϤҤ
+ĤĤ¸ߤޤ
-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 文字が含まれている可能性もあります.
+ǡפT_FIXNUMλ31bitޤ63bitΥ
+ǤlongΥ32bitΥץåȥեǤ
+31bitˡlongΥ64bitΥץåȥեǤ63bit
+ˤʤޤ. FIXNUM C Ѵ뤿ˤϥޥ
+FIX2INT()פޤϡFIX2LONG()פȤޤΥޥ
+Ѥݤˤϻ˥ǡפFIXNUMǤ뤳Ȥǧ
+ɬפޤŪ®ѴԤȤǤޤ
+FIX2LONG()פ㳰ȯޤ󤬡FIX2INT()פ
+̤intΥ˼ޤʤˤ㳰ȯޤ
+줫顤FIXNUM˸¤餺RubyΥǡѴ
+NUM2INT()פӡNUM2LONG()פȤޥޤ
+ΥޥϥޥϥǡפΥå̵ǻȤޤ
+(ѴǤʤˤ㳰ȯ)Ʊͤ˥å̵
+ǻȤѴޥdoubleФNUM2DBL()פޤ
-それ以外のデータタイプは対応するCの構造体があります.対応す
-る構造体のあるVALUEはそのままキャスト(型変換)すれば構造体の
-ポインタに変換できます.
+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 ʸޤޤƤǽ⤢ޤ
-構造体は「struct RXxxxx」という名前でruby.hで定義されていま
-す.例えば文字列は「struct RString」です.実際に使う可能性が
-あるのは文字列と配列くらいだと思います.
+ʳΥǡפбCι¤Τޤб
+빽¤ΤΤVALUEϤΤޤޥ㥹(Ѵ)й¤Τ
+ݥ󥿤ѴǤޤ
-ruby.hでは構造体へキャストするマクロも「RXXXXX()」(全部大文
-字にしたもの)という名前で提供されています(例: RSTRING()).た
-だし、構造体への直接のアクセスはできるだけ避け,対応する
-rb_xxxx() といった関数を使うようにして下さい.例えば,配列の
-要素へアクセスする場合は,rb_ary_entry(ary, offset),
-rb_ary_store(ary, offset, obj) を利用するようにして下さい.
+¤Τϡstruct RXxxxxפȤ̾ruby.hƤ
+㤨ʸϡstruct RStringפǤºݤ˻Ȥǽ
+Τʸ󤯤餤Ȼפޤ
-構造体からデータを取り出すマクロが提供されています.文字列
-strの長さを得るためには「RSTRING_LEN(str)」とし,文字列strを
-char*として得るためには「RSTRING_PTR(str)」とします.
+ruby.hǤϹ¤Τإ㥹ȤޥRXXXXX()(ʸ
+ˤ)Ȥ̾󶡤Ƥޤ(: RSTRING())
-Rubyの構造体を直接アクセスする時に気をつけなければならないこ
-とは,配列や文字列の構造体の中身は参照するだけで,直接変更し
-ないことです.直接変更した場合,オブジェクトの内容の整合性が
-とれなくなって,思わぬバグの原因になります.
+¤ΤǡФޥ󶡤Ƥޤʸ
+strĹ뤿ˤϡRSTRING_LEN(str)פȤʸstr
+char*Ȥ뤿ˤϡRSTRING_PTR(str)פȤޤ
+ˤϡ줾RARRAY_LEN(ary)סRARRAY_PTR(ary)פ
+ʤޤ
-== CのデータをVALUEに変換する
+Rubyι¤Τľܥ˵ĤʤФʤʤ
+Ȥϡʸι¤ΤȤϻȤǡľѹ
+ʤȤǤľѹ硤֥ȤƤ
+Ȥʤʤäơפ̥Хθˤʤޤ
-VALUEの実際の構造は
+1.4 CΥǡVALUEѴ
-FIXNUMの場合 ::
+VALUEμºݤι¤
- 1bit左シフトして,LSBを立てる.
+ * FIXNUMξ
-その他のポインタの場合 ::
+ 1bitեȤơLSBΩƤ롥
- そのままVALUEにキャストする.
+ * ¾Υݥ󥿤ξ
-となっています.よって,LSBをチェックすればVALUEがFIXNUMかど
-うかわかるわけです(ポインタのLSBが立っていないことを仮定して
-いる).
+ ΤޤVALUE˥㥹Ȥ롥
-ですから,FIXNUM以外のRubyのオブジェクトの構造体は単にVALUE
-にキャストするだけでVALUEに変換出来ます.ただし,任意の構造
-体がVALUEにキャスト出来るわけではありません.キャストするの
-はRubyの知っている構造体(ruby.hで定義されているstruct RXxxx
-のもの)だけです.
+ȤʤäƤޤäơLSBåVALUEFIXNUM
+狼櫓Ǥ(ݥ󥿤LSBΩäƤʤȤꤷ
+)
-FIXNUMに関しては変換マクロを経由する必要があります.Cの整数
-からVALUEに変換するマクロは以下のものがあります.必要に応じ
-て使い分けてください.
+Ǥ顤FIXNUMʳRubyΥ֥Ȥι¤ΤñVALUE
+˥㥹ȤVALUEѴޤǤդι¤
+ΤVALUE˥㥹Ƚ櫓ǤϤޤ󡥥㥹Ȥ
+RubyΤäƤ빽¤(ruby.hƤstruct RXxxx
+Τ)Ǥ
-INT2FIX() :: もとの整数が31bitまたは63bit以内に収まる自信
- がある時
-INT2NUM() :: 任意の整数からVALUEへ
+FIXNUM˴ؤƤѴޥͳɬפޤC
+VALUEѴޥϰʲΤΤޤɬפ˱
+ƻȤʬƤ
-INT2NUM()は整数がFIXNUMの範囲に収まらない場合,Bignumに変換
-してくれます(が,少し遅い).
+ INT2FIX() Ȥ31bitޤ63bit˼ޤ뼫
+
+ INT2NUM() ǤդVALUE
-== Rubyのデータを操作する
+INT2NUM()FIXNUMϰϤ˼ޤʤ硤BignumѴ
+Ƥޤ(٤)
-先程も述べた通り,Rubyの構造体をアクセスする時に内容の更新を
-行うことは勧められません.で,Rubyのデータを操作する時には
-Rubyが用意している関数を用いてください.
+1.5 RubyΥǡ
-ここではもっとも使われるであろう文字列と配列の生成/操作を行
-う関数をあげます(全部ではないです).
+Ҥ٤̤ꡤRubyι¤Τ򥢥Ƥι
+ԤȤϴޤ󡥤ǡRubyΥǡˤ
+RubyѰդƤؿѤƤ
-=== 文字列に対する関数
+ǤϤäȤȤǤʸ/
+ؿ򤢤ޤ(ǤϤʤǤ)
-rb_str_new(const char *ptr, long len) ::
+ ʸФؿ
- 新しいRubyの文字列を生成する.
+ rb_str_new(const char *ptr, long len)
-rb_str_new2(const char *ptr)
-rb_str_new_cstr(const char *ptr)
+ Rubyʸ롥
- Cの文字列からRubyの文字列を生成する.この関数の機能は
- rb_str_new(ptr, strlen(ptr))と同等である.
+ rb_str_new2(const char *ptr)
+ rb_str_new_cstr(const char *ptr)
-rb_tainted_str_new(const char *ptr, long len)
+ Cʸ󤫤Rubyʸ롥δؿεǽ
+ rb_str_new(ptr, strlen(ptr))ƱǤ롥
- 汚染マークが付加された新しいRubyの文字列を生成する.外部
- からのデータに基づく文字列には汚染マークが付加されるべき
- である.
+ rb_tainted_str_new(const char *ptr, long len)
-rb_tainted_str_new2(const char *ptr)
-rb_tainted_str_new_cstr(const char *ptr)
+ ޡղä줿Rubyʸ롥
+ Υǡ˴Ťʸˤϱޡղä٤
+ Ǥ롥
- Cの文字列から汚染マークが付加されたRubyの文字列を生成する.
+ rb_tainted_str_new2(const char *ptr)
+ rb_tainted_str_new_cstr(const char *ptr)
-rb_sprintf(const char *format, ...)
-rb_vsprintf(const char *format, va_list ap)
+ Cʸ󤫤ޡղä줿Rubyʸ롥
- Cの文字列formatと続く引数をprintf(3)のフォーマットにしたがって
- 整形し,Rubyの文字列を生成する.
+ rb_sprintf(const char *format, ...)
+ rb_vsprintf(const char *format, va_list ap)
- 注意: %iはObject#to_s('+'フラグが指定されているときはObject#inspect)を
- 使ったVALUEの出力に使用されているため,整数には%dを使用すること.
+ Cʸformat³printf(3)ΥեޥåȤˤä
+ Rubyʸ롥
-rb_str_cat(VALUE str, const char *ptr, long len)
+ rb_str_cat(VALUE str, const char *ptr, long len)
- Rubyの文字列strにlenバイトの文字列ptrを追加する.
+ RubyʸstrlenХȤʸptrɲä롥
-rb_str_cat2(VALUE str, const char* ptr)
+ rb_str_cat2(VALUE str, const char* ptr)
- Rubyの文字列strにCの文字列ptrを追加する.この関数の機能は
- rb_str_cat(str, ptr, strlen(ptr))と同等である.
+ RubyʸstrCʸ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)
+ 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)) と同等である.
+ 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)
+ rb_enc_str_new(const char *ptr, long len, rb_encoding *enc)
+
+ ꤵ줿󥳡ǥ󥰤Rubyʸ.
+
+ rb_usascii_str_new(const char *ptr, long len)
+ rb_usascii_str_new_cstr(const char *ptr)
- 指定されたエンコーディングでRubyの文字列を生成する.
+ 󥳡ǥ󥰤US-ASCIIRubyʸ.
-rb_usascii_str_new(const char *ptr, long len)
-rb_usascii_str_new_cstr(const char *ptr)
+ rb_str_resize(VALUE str, long len)
- エンコーディングがUS-ASCIIのRubyの文字列を生成する.
+ RubyʸΥlenХȤѹ롥strĹ
+ ʤƥåȤƤʤФʤʤlenĹû
+ ϡlenХȤۤʬƤϼΤƤ롥len
+ ĹĹϡĹۤʬƤ¸
+ ʤǥߤˤʤδؿθƤӽФˤä
+ RSTRING_PTR(str)ѹ뤫⤷ʤȤա
-rb_str_resize(VALUE str, long len)
+ rb_str_set_len(VALUE str, long len)
- Rubyの文字列のサイズをlenバイトに変更する.strの長さは前
- 以てセットされていなければならない.lenが元の長さよりも短
- い時は,lenバイトを越えた部分の内容は捨てられる.lenが元
- の長さよりも長い時は,元の長さを越えた部分の内容は保存さ
- れないでゴミになるだろう.この関数の呼び出しによって
- RSTRING_PTR(str)が変更されるかもしれないことに注意.
+ RubyʸΥlenХȤ˥åȤ롥strѹ
+ ǽǤʤ㳰ȯ롥RSTRING_LEN(str)Ȥ̵طˡ
+ lenХȤޤǤƤ¸롥lenstr̤ۤƤ
+ ƤϤʤʤ
-rb_str_set_len(VALUE str, long len)
- Rubyの文字列のサイズをlenバイトにセットする.strが変更可
- 能でなければ例外が発生する.RSTRING_LEN(str)とは無関係に,
- lenバイトまでの内容は保存される.lenはstrの容量を越えてい
- てはならない.
+ Фؿ
+ rb_ary_new()
-== 配列に対する関数
+ Ǥ0롥
-rb_ary_new()
+ rb_ary_new2(long len)
- 要素が0の配列を生成する.
+ Ǥ0롥lenʬΰ򤢤餫
+ ƤƤ
-rb_ary_new2(long len)
-rb_ary_new_capa(long len)
+ rb_ary_new3(long n, ...)
- 要素が0の配列を生成する.len要素分の領域をあらかじめ割り
- 当てておく.
+ ǻꤷnǤޤ롥
-rb_ary_new3(long n, ...)
-rb_ary_new_from_args(long n, ...)
+ rb_ary_new4(long n, VALUE *elts)
- 引数で指定したn要素を含む配列を生成する.
+ ͿnǤ롥
-rb_ary_new4(long n, VALUE *elts)
-rb_ary_new_from_values(long n, VALUE *elts)
+ rb_ary_to_ary(VALUE obj)
- 配列で与えたn要素の配列を生成する.
+ ֥ȤѴ.
+ Object#to_aryƱǤ.
-rb_ary_to_ary(VALUE obj)
+ ¾ˤؿ¿.
+ aryϤʤФʤʤ. ʤ
+ Ǥ.
- オブジェクトを配列に変換する.
- Object#to_aryと同等である.
+ rb_ary_aref(argc, VALUE *argv, VALUE ary)
-他にも配列を操作する関数が多数ある. これらは
-引数aryに配列を渡さなければならない. さもないと
-コアを吐く.
+ Array#[]Ʊ.
-rb_ary_aref(argc, VALUE *argv, VALUE ary)
+ rb_ary_entry(VALUE ary, long offset)
- Array#[]と同等.
+ ary[offset]
-rb_ary_entry(VALUE ary, long offset)
+ rb_ary_subseq(VALUE ary, long beg, long len)
- ary[offset]
+ ary[beg, len]
-rb_ary_store(VALUE ary, long offset, VALUE obj) ::
+ rb_ary_push(VALUE ary, VALUE val)
+ rb_ary_pop(VALUE ary)
+ rb_ary_shift(VALUE ary)
+ rb_ary_unshift(VALUE ary, VALUE val)
- ary[offset] = obj
+2RubyεǽȤ
-rb_ary_subseq(VALUE ary, long beg, long len)
+ŪRubyǽ񤱤뤳ȤCǤ񤱤ޤRubyΤΤCǵ
+ҤƤǤ顤ȤʤǤɡ
+Rubyγĥ˻ȤȤ¿ͽ¬뵡ǽ濴˾
+𤷤ޤ
- ary[beg, len]
+2.1 Ruby˵ǽɲä
-rb_ary_push(VALUE ary, VALUE val)
-rb_ary_pop(VALUE ary)
-rb_ary_shift(VALUE ary)
-rb_ary_unshift(VALUE ary, VALUE val)
+Ruby󶡤ƤؿȤRuby󥿥ץ꥿˿ǽ
+ɲä뤳ȤǤޤRubyǤϰʲεǽɲäؿ
+󶡤Ƥޤ
-rb_ary_cat(VALUE ary, const VALUE *ptr, long len)
+ * 饹⥸塼
+ * ᥽åɡðۥ᥽åɤʤ
+ *
- 配列aryにptrからlen個のオブジェクトを追加する.
+ǤϽ˾Ҳ𤷤ޤ
-= Rubyの機能を使う
+2.1.1 饹/⥸塼
-原理的に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)
-=== メソッド/特異メソッド定義
+2.1.2 ᥽å/ðۥ᥽å
-メソッドや特異メソッドを定義するには以下の関数を使います.
+᥽åɤðۥ᥽åɤˤϰʲδؿȤޤ
- void rb_define_method(VALUE klass, const char *name,
- VALUE (*func)(), int argc)
+ 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)
+ void rb_define_singleton_method(VALUE object, const char *name,
+ VALUE (*func)(), int argc)
-念のため説明すると「特異メソッド」とは,その特定のオブジェク
-トに対してだけ有効なメソッドです.RubyではよくSmalltalkにお
-けるクラスメソッドとして,クラスに対する特異メソッドが使われ
-ます.
+ǰΤȡðۥ᥽åɡפȤϡΥ֥
+ȤФƤͭʥ᥽åɤǤRubyǤϤ褯Smalltalkˤ
+륯饹᥽åɤȤơ饹Фðۥ᥽åɤȤ
-これらの関数の argcという引数はCの関数へ渡される引数の数(と
-形式)を決めます.argcが0以上の時は関数に引き渡す引数の数を意
-味します.16個以上の引数は使えません(が,要りませんよね,そ
-んなに).実際の関数には先頭の引数としてselfが与えられますの
-で,指定した数より1多い引数を持つことになります.
+δؿ argcȤCδؿϤο(
+)ޤargc0ʾλϴؿ˰Ϥο
+̣ޤ16İʾΰϻȤޤ(פޤ͡
+ʤ)ºݤδؿˤƬΰȤselfͿޤ
+ǡꤷ1¿ĤȤˤʤޤ
-argcが負の時は引数の数ではなく,形式を指定したことになります.
-argcが-1の時は引数を配列に入れて渡されます.argcが-2の時は引
-数はRubyの配列として渡されます.
+argcλϰοǤϤʤꤷȤˤʤޤ
+argc-1λϰϤޤargc-2λϰ
+RubyȤϤޤ
-メソッドを定義する関数はまだいくつかあります. ひとつはメソッド
-名としてIDを取ります. IDについては2.2.2を参照.
+᥽åɤؿϤޤĤޤ. ҤȤĤϥ᥽å
+̾ȤIDޤ. IDˤĤƤ2.2.2򻲾.
- void rb_define_method_id(VALUE klass, ID name,
+ void rb_define_method_id(VALUE klass, ID name,
VALUE (*func)(ANYARGS), int argc)
-private/protectedなメソッドを定義するふたつの関数があります.
+private/protectedʥ᥽åɤդĤδؿޤ.
- void rb_define_private_method(VALUE klass, const char *name,
+ void rb_define_private_method(VALUE klass, const char *name,
VALUE (*func)(), int argc)
- void rb_define_protected_method(VALUE klass, const char *name,
+ void rb_define_protected_method(VALUE klass, const char *name,
VALUE (*func)(), int argc)
-privateメソッドとは関数形式でしか呼び出すことの出来ないメソッ
-ドです.
+private᥽åɤȤϴؿǤƤӽФȤνʤ᥽
+ɤǤ
-最後に, rb_define_module関数はモジュール関数を定義します.
-モジュール関数とはモジュールの特異メソッドであり,同時に
-privateメソッドでもあるものです.例をあげるとMathモジュール
-のsqrt()などがあげられます.このメソッドは
+Ǹˡ rb_define_moduleؿϥ⥸塼ؿޤ
+⥸塼ؿȤϥ⥸塼ðۥ᥽åɤǤꡤƱ
+private᥽åɤǤ⤢ΤǤ򤢤Math⥸塼
+sqrt()ʤɤޤΥ᥽åɤ
Math.sqrt(4)
-という形式でも
+ȤǤ
include Math
sqrt(4)
-という形式でも使えます.モジュール関数を定義する関数は以下の
-通りです.
+ȤǤȤޤ⥸塼ؿؿϰʲ
+̤Ǥ
- void rb_define_module_function(VALUE module, const char *name,
+ void rb_define_module_function(VALUE module, const char *name,
VALUE (*func)(), int argc)
-関数的メソッド(Kernelモジュールのprivate method)を定義するた
-めの関数は以下の通りです.
+ؿŪ᥽å(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を定義したり削除したりするための関数は
-以下の通りです.
+饹᥽åallocateꤹ뤿δؿ
+ʲ̤Ǥ
void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass));
void rb_undef_alloc_func(VALUE klass);
-funcはクラスを引数として受け取って,新しく割り当てられたイン
-スタンスを返さなくてはなりません.このインスタンスは,外部リ
-ソースなどを含まない,できるだけ「空」のままにしておいたほう
-がよいでしょう.
+funcϥ饹ȤƼäơƤ줿
+󥹤֤ʤƤϤʤޤ󡥤Υ󥹥󥹤ϡ
+ʤɤޤޤʤǤֶפΤޤޤˤƤۤ
+褤Ǥ礦
-=== 定数定義
+2.1.3
-拡張ライブラリが必要な定数はあらかじめ定義しておいた方が良い
-でしょう.定数を定義する関数は二つあります.
+ĥ饤֥꤬ɬפϤ餫Ƥɤ
+Ǥ礦ؿĤޤ
void rb_define_const(VALUE klass, const char *name, VALUE val)
void rb_define_global_const(const char *name, VALUE val)
-前者は特定のクラス/モジュールに属する定数を定義するもの,後
-者はグローバルな定数を定義するものです.
+ԤΥ饹/⥸塼°Ρ
+ԤϥХΤǤ
-== Rubyの機能をCから呼び出す
+2.2 RubyεǽCƤӽФ
-既に『1.5 Rubyのデータを操作する』で一部紹介したような関数を
-使えば,Rubyの機能を実現している関数を直接呼び出すことが出来
-ます.
+ˡ1.5 RubyΥǡ٤ǰҲ𤷤褦ʴؿ
+ȤСRubyεǽ¸ƤؿľܸƤӽФȤ
-# このような関数の一覧表はいまのところありません.ソースを見
-# るしかないですね.
+# Τ褦ʴؿΰɽϤޤΤȤޤ󡥥
+# 뤷ʤǤ͡
-それ以外にもRubyの機能を呼び出す方法はいくつかあります.
+ʳˤRubyεǽƤӽФˡϤĤޤ
-=== Rubyのプログラムをevalする
+2.2.1 RubyΥץeval
-CからRubyの機能を呼び出すもっとも簡単な方法として,文字列で
-与えられたRubyのプログラムを評価する以下の関数があります.
+CRubyεǽƤӽФäȤñˡȤơʸ
+Ϳ줿RubyΥץɾʲδؿޤ
VALUE rb_eval_string(const char *str)
-この評価は現在の環境で行われます.つまり,現在のローカル変数
-などを受け継ぎます.
+ɾϸߤδĶǹԤޤĤޤꡤߤΥѿ
+ʤɤѤޤ
-評価は例外を発生するかもしれないことに注意しましょう. より安全
-な関数もあります.
+ɾ㳰ȯ뤫⤷ʤȤդޤ礦.
+ʴؿ⤢ޤ.
VALUE rb_eval_string_protect(const char *str, int *state)
-この関数はエラーが発生するとnilを返します.そして,成功時には
-*stateはゼロに,さもなくば非ゼロになります.
-
-=== IDまたはシンボル
+δؿϥ顼ȯnil֤ޤơˤ
+*stateϥˡʤ󥼥ˤʤޤ
-Cから文字列を経由せずにRubyのメソッドを呼び出すこともできま
-す.その前に,Rubyインタプリタ内でメソッドや変数名を指定する
-時に使われているIDについて説明しておきましょう.
-IDとは変数名,メソッド名を表す整数です.Rubyの中では
+2.2.2 IDޤϥܥ
- :識別子
+CʸͳRubyΥ᥽åɤƤӽФȤǤ
+ˡRuby󥿥ץ꥿ǥ᥽åɤѿ̾ꤹ
+˻ȤƤIDˤĤƤޤ礦
-または
+IDȤѿ̾᥽å̾ɽǤRubyǤ
- :"任意の文字列"
+ :̻
+ :"Ǥդʸ"
-でアクセスできます.Cからこの整数を得るためには関数
+ǥǤޤC餳뤿ˤϴؿ
rb_intern(const char *name)
- rb_intern_str(VALUE name)
-を使います.Rubyから引数として与えられたシンボル(または文字
-列)をIDに変換するには以下の関数を使います.
+Ȥޤ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の文字列を使います.
+2.2.3 CRubyΥ᥽åɤƤӽФ
-=== CからRubyのメソッドを呼び出す
-
-Cから文字列を経由せずにRubyのメソッドを呼び出すためには以下
-の関数を使います.
+CʸͳRubyΥ᥽åɤƤӽФˤϰʲ
+δؿȤޤ
VALUE rb_funcall(VALUE recv, ID mid, int argc, ...)
-この関数はオブジェクトrecvのmidで指定されるメソッドを呼び出
-します.その他に引数の指定の仕方が違う以下の関数もあります.
+δؿϥ֥recvmidǻꤵ᥽åɤƤӽ
+ޤ¾˰λλ㤦ʲδؿ⤢ޤ
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の配列を与えます.
+applyˤϰȤRubyͿޤ
-=== 変数/定数を参照/更新する
+2.2.4 ѿ/򻲾/
-Cから関数を使って参照・更新できるのは,定数,インスタンス変
-数です.大域変数は一部のものはCの大域変数としてアクセスでき
-ます.ローカル変数を参照する方法は公開していません.
+CؿȤäƻȡǤΤϡ󥹥
+ǤѿϰΤΤCѿȤƥǤ
+ޤѿ򻲾ȤˡϸƤޤ
-オブジェクトのインスタンス変数を参照・更新する関数は以下の通
-りです.
+֥ȤΥ󥹥ѿ򻲾ȡؿϰʲ
VALUE rb_ivar_get(VALUE obj, ID id)
VALUE rb_ivar_set(VALUE obj, ID id, VALUE val)
-idはrb_intern()で得られるものを使ってください.
+idrb_intern()ΤȤäƤ
-定数を参照するには以下の関数を使ってください.
+򻲾ȤˤϰʲδؿȤäƤ
VALUE rb_const_get(VALUE obj, ID id)
-定数を新しく定義するためには『2.1.3 定数定義』で紹介さ
-れている関数を使ってください.
+򿷤뤿ˤϡ2.1.3 ٤ǾҲ
+ƤؿȤäƤ
-= RubyとCとの情報共有
+3RubyCȤξͭ
-C言語とRubyの間で情報を共有する方法について解説します.
+CRubyδ֤ǾͭˡˤĤƲ⤷ޤ
-== Cから参照できるRubyの定数
+3.1 C黲ȤǤRuby
-以下のRubyの定数はCのレベルから参照できます.
+ʲRubyCΥ٥뤫黲ȤǤޤ
Qtrue
Qfalse
-真偽値.QfalseはC言語でも偽とみなされます(つまり0).
+ ͡QfalseCǤ⵶Ȥߤʤޤ(Ĥޤ0)
Qnil
-C言語から見た「nil」.
+ C줫鸫nilס
-== CとRubyで共有される大域変数
+3.2 CRubyǶͭѿ
-CとRubyで大域変数を使って情報を共有できます.共有できる大域
-変数にはいくつかの種類があります.そのなかでもっとも良く使わ
-れると思われるのはrb_define_variable()です.
+CRubyѿȤäƾͭǤޤͭǤ
+ѿˤϤĤμबޤΤʤǤäȤɤȤ
+ȻפΤrb_define_variable()Ǥ
void rb_define_variable(const char *name, VALUE *var)
-この関数はRubyとCとで共有する大域変数を定義します.変数名が
-`$'で始まらない時には自動的に追加されます.この変数の値を変
-更すると自動的にRubyの対応する変数の値も変わります.
+δؿRubyCȤǶͭѿޤѿ̾
+`$'ǻϤޤʤˤϼưŪɲäޤѿͤ
+ȼưŪRubyбѿͤѤޤ
-またRuby側からは更新できない変数もあります.このread onlyの
-変数は以下の関数で定義します.
+ޤRuby¦ϹǤʤѿ⤢ޤread only
+ѿϰʲδؿޤ
void rb_define_readonly_variable(const char *name, VALUE *var)
-これら変数の他にhookをつけた大域変数を定義できます.hook付き
-の大域変数は以下の関数を用いて定義します.hook付き大域変数の
-値の参照や設定はhookで行う必要があります.
+ѿ¾hookĤѿǤޤhookդ
+ѿϰʲδؿѤޤhookդѿ
+ͤλȤhookǹԤɬפޤ
void rb_define_hooked_variable(const char *name, VALUE *var,
VALUE (*getter)(), void (*setter)())
-この関数はCの関数によってhookのつけられた大域変数を定義しま
-す.変数が参照された時には関数getterが,変数に値がセットされ
-た時には関数setterが呼ばれる.hookを指定しない場合はgetterや
-setterに0を指定します.
-# getterもsetterも0ならばrb_define_variable()と同じになる.
+δؿCδؿˤähookΤĤ줿ѿ
+ѿȤ줿ˤϴؿgetterѿͤåȤ
+ˤϴؿsetterƤФ롥hookꤷʤgetter
+setter0ꤷޤ
+# gettersetter0ʤrb_define_variable()Ʊˤʤ롥
-getterとsetterの仕様は次の通りです.
+gettersetterλͤϼ̤Ǥ
VALUE (*getter)(ID id, VALUE *var);
void (*setter)(VALUE val, ID id, VALUE *var);
-それから,対応するCの変数を持たないRubyの大域変数を定義する
-こともできます. その変数の値はフック関数のみによって取得・設定
-されます.
+줫顤бCѿʤRubyѿ
+ȤǤޤ. ѿͤϥեåؿΤߤˤäƼ
+ޤ.
void rb_define_virtual_variable(const char *name,
VALUE (*getter)(), void (*setter)())
-この関数によって定義されたRubyの大域変数が参照された時には
-getterが,変数に値がセットされた時にはsetterが呼ばれます.
+δؿˤä줿RubyѿȤ줿ˤ
+getterѿͤåȤ줿ˤsetterƤФޤ
-getterとsetterの仕様は以下の通りです.
+gettersetterλͤϰʲ̤Ǥ
(*getter)(ID id);
(*setter)(VALUE val, ID id);
-== CのデータをRubyオブジェクトにする
+3.3 CΥǡRuby֥Ȥˤ
-Cの世界で定義されたデータ(構造体)をRubyのオブジェクトとして
-取り扱いたい場合がありえます.このような場合には,Dataという
-RubyオブジェクトにCの構造体(へのポインタ)をくるむことでRuby
-オブジェクトとして取り扱えるようになります.
+C줿ǡ(¤)RubyΥ֥ȤȤ
+갷礬ꤨޤΤ褦ʾˤϡDataȤ
+Ruby֥ȤCι¤(ؤΥݥ)򤯤ळȤRuby
+֥ȤȤƼ갷褦ˤʤޤ
-Dataオブジェクトを生成して構造体をRubyオブジェクトにカプセル
-化するためには,以下のマクロを使います.
+Data֥Ȥƹ¤ΤRuby֥Ȥ˥ץ
+뤿ˤϡʲΥޥȤޤ
- Data_Wrap_Struct(klass, mark, free, sval)
+ Data_Wrap_Struct(klass, mark, free, ptr)
-このマクロの戻り値は生成されたDataオブジェクトです.
+Υޥͤ줿Data֥ȤǤ
-klassはこのDataオブジェクトのクラスです.markはこの構造体が
-Rubyのオブジェクトへの参照がある時に使う関数です.そのような
-参照を含まない時には0を指定します.
+klassϤData֥ȤΥ饹Ǥptrϥץ벽
+Cι¤ΤؤΥݥ󥿤ǤmarkϤι¤ΤRubyΥ֥
+ȤؤλȤ˻ȤؿǤΤ褦ʻȤޤޤʤ
+ˤ0ꤷޤ
-# そのような参照は勧められません.
+# Τ褦ʻȤϴޤ
-freeはこの構造体がもう不要になった時に呼ばれる関数です.この
-関数がガーベージコレクタから呼ばれます.これが-1の場合は,単
-純に開放されます.
+freeϤι¤Τ⤦פˤʤä˸ƤФؿǤ
+ؿ١쥯ƤФޤ줬-1ξϡñ
+˳ޤ
-markおよびfree関数はGC実行中に呼び出されます.
-なお, GC実行中はRubyオブジェクトのアロケーションは禁止されま
-す. よって, markおよびfree関数でRubyオブジェクトのアロケーシ
-ョンは行わないでください.
+markfreeؿGC¹˸ƤӽФޤ.
+ʤ, GC¹Ruby֥ȤΥ϶ػߤ
+. ä, markfreeؿRuby֥ȤΥ
+ϹԤʤǤ.
-Cの構造体の割当とDataオブジェクトの生成を同時に行うマクロと
-して以下のものが提供されています.
+Cι¤ΤγData֥ȤƱ˹Ԥޥ
+ưʲΤΤ󶡤Ƥޤ
Data_Make_Struct(klass, type, mark, free, sval)
-このマクロの戻り値は生成されたDataオブジェクトです.このマク
-ロは以下の式のように働きます:
-
- (sval = ALLOC(type), Data_Wrap_Struct(klass, mark, free, sval))
+Υޥͤ줿Data֥ȤǤ
-klass, mark, freeはData_Wrap_Structと同じ働きをします.type
-は割り当てるC構造体の型です.割り当てられた構造体は変数sval
-に代入されます.この変数の型は (type*) である必要があります.
+klass, mark, freeData_Wrap_StructƱƯ򤷤ޤtype
+ϳƤC¤ΤηǤƤ줿¤Τѿsval
+ޤѿη (type*) Ǥɬפޤ
-Dataオブジェクトからポインタを取り出すのは以下のマクロを用い
-ます.
+Data֥Ȥݥ󥿤ФΤϰʲΥޥѤ
Data_Get_Struct(obj, type, sval)
-Cの構造体へのポインタは変数svalに代入されます.
+Cι¤ΤؤΥݥ󥿤ѿsvalޤ
-これらのDataの使い方はちょっと分かりにくいので,後で説明する
-例題を参照してください.
+DataλȤϤäʬˤΤǡ
+򻲾ȤƤ
-= 例題 - dbmパッケージを作る
+4 - dbmѥå
-ここまでの説明でとりあえず拡張ライブラリは作れるはずです.
-Rubyのextディレクトリにすでに含まれているdbmライブラリを例に
-して段階的に説明します.
+ޤǤǤȤꤢĥ饤֥ϺϤǤ
+Rubyextǥ쥯ȥˤǤ˴ޤޤƤdbm饤֥
+ʳŪޤ
-== ディレクトリを作る
+(1) ǥ쥯ȥ
% 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でトラブルを起こします.
+Ruby 1.1ǤդΥǥ쥯ȥǥʥߥå饤֥
+뤳ȤǤ褦ˤʤޤRubyŪ˥󥯤
+RubyŸǥ쥯ȥβextǥ쥯ȥ˳ĥ
+饤֥ѤΥǥ쥯ȥɬפޤ̾Ŭ
+ǹޤ
+
+(2) ߷פ
+
+ޤʤǤɡɤǽ¸뤫ɤޤ
+פɬפޤɤʥ饹Ĥ뤫Υ饹ˤ
+ɤʥ᥽åɤ뤫饹󶡤ʤɤˤĤ߷
+
+(3) 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);
+ /* DBMEnumerate⥸塼򥤥󥯥롼ɤ */
+ 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Υǡб륪֥ȤˤʤϤ
+顤CdbmRuby˼ɬפޤ
+
+
+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)
+{
+ :
+}
+--
+
+οΥפ1self2ʹߤ᥽å
+ΰȤʤޤ
+
+οΤΤ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Ϳ
+줿äƤˤʤޤself3ȤͿ
+
+Ϳ줿Ϥ뤿δؿopen()ǤȤ
+Ƥrb_scan_args()Ǥ3˻ꤷեޥåȤ˽
+4ѿʹߤ˻ꤷVALUEؤλȤͤƤ
+
+
+
+RubyȤƼ᥽åɤˤ
+Thread#initializeޤϤǤ
+
+--
+static VALUE
+thread_initialize(VALUE thread, VALUE args)
+{
+ :
+}
+--
+
+1self2RubyǤ
+
+** ջ
+
+RubyȶͭϤʤRubyΥ֥ȤǼǽΤ
+CѿϰʲδؿȤäRuby󥿥ץ꥿ѿ¸
+򶵤ƤƤǤʤGCǥȥ֥򵯤ޤ
void rb_global_variable(VALUE *var)
-== extconf.rbを用意する
+(4) extconf.rbѰդ
-Makefileを作る場合の雛型になるextconf.rbというファイルを作り
-ます.extconf.rbはライブラリのコンパイルに必要な条件のチェッ
-クなどを行うことが目的です.まず,
+Makefileοˤʤextconf.rbȤե
+ޤextconf.rbϥ饤֥ΥѥɬפʾΥ
+ʤɤԤȤŪǤޤ
require 'mkmf'
-をextconf.rbの先頭に置きます.extconf.rbの中では以下のRuby関
-数を使うことが出来ます.
+extconf.rbƬ֤ޤextconf.rbǤϰʲRuby
+ȤȤޤ
- have_library(lib, func): ライブラリの存在チェック
- have_func(func, header): 関数の存在チェック
- have_header(header): ヘッダファイルの存在チェック
- create_makefile(target[, target_prefix]): Makefileの生成
+ have_library(lib, func): 饤֥¸ߥå
+ have_func(func, header): ؿ¸ߥå
+ have_header(header): إåե¸ߥå
+ create_makefile(target): Makefile
-以下の変数を使うことができます.
+ʲѿȤȤǤޤ
- $CFLAGS: コンパイル時に追加的に指定するフラグ(-Oなど)
- $CPPFLAGS: プリプロセッサに追加的に指定するフラグ(-Iや-Dなど)
- $LDFLAGS: リンク時に追加的に指定するフラグ(-Lなど)
- $objs: リンクされるオブジェクトファイル名のリスト
+ $CFLAGS: ѥɲŪ˻ꤹե饰(-Oʤ)
+ $CPPFLAGS: ץץåɲŪ˻ꤹե饰(-I-Dʤ)
+ $LDFLAGS: 󥯻ɲŪ˻ꤹե饰(-Lʤ)
+ $objs: 󥯤륪֥ȥե̾Υꥹ
-オブジェクトファイルのリストは,通常はソースファイルを検索し
-て自動的に生成されますが,makeの途中でソースを生成するような
-場合は明示的に指定する必要があります.
+֥ȥեΥꥹȤϡ̾ϥե򸡺
+ƼưŪޤmakeǥ褦
+Ū˻ꤹɬפޤ
-ライブラリをコンパイルする条件が揃わず,そのライブラリをコン
-パイルしない時にはcreate_makefileを呼ばなければMakefileは生
-成されず,コンパイルも行われません.
+饤֥򥳥ѥ뤹郎·鷺Υ饤֥򥳥
+ѥ뤷ʤˤcreate_makefileƤФʤMakefile
+줺ѥԤޤ
-== dependを用意する
+(5) dependѰդ
-もし,ディレクトリにdependというファイルが存在すれば,
-Makefileが依存関係をチェックしてくれます.
+⤷ǥ쥯ȥdependȤե뤬¸ߤС
+Makefile¸طåƤޤ
% gcc -MM *.c > depend
-などで作ることが出来ます.あって損は無いでしょう.
+ʤɤǺ뤳Ȥޤä»̵Ǥ礦
-== Makefileを生成する
+(6) Makefile
-Makefileを実際に生成するためには
+Makefileºݤ뤿ˤ
ruby extconf.rb
-とします.extconf.rbに require 'mkmf' の行がない場合にはエラー
-になりますので,引数を追加して
+Ȥޤextconf.rb require 'mkmf' ιԤʤˤϥ顼
+ˤʤޤΤǡɲä
ruby -r mkmf extconf.rb
-としてください.
+ȤƤ
-site_ruby ディレクトリでなく,
-vendor_ruby ディレクトリにインストールする場合には
-以下のように --vendor オプションを加えてください.
+site_ruby ǥ쥯ȥǤʤ
+vendor_ruby ǥ쥯ȥ˥󥹥ȡ뤹ˤ
+ʲΤ褦 --vendor ץäƤ
ruby extconf.rb --vendor
-ディレクトリをext以下に用意した場合にはRuby全体のmakeの時に
-自動的にMakefileが生成されますので,このステップは不要です.
+ǥ쥯ȥextʲѰդˤRubyΤmakeλ
+ưŪMakefileޤΤǡΥƥåפפǤ
-== makeする
+(7) make
-動的リンクライブラリを生成する場合にはその場でmakeしてくださ
-い.必要であれば make install でインストールされます.
+ưŪ󥯥饤֥ˤϤξmakeƤ
+ɬפǤ make install ǥ󥹥ȡ뤵ޤ
-ext以下にディレクトリを用意した場合は,Rubyのディレクトリで
-makeを実行するとMakefileを生成からmake,必要によってはそのモ
-ジュールのRubyへのリンクまで自動的に実行してくれます.
-extconf.rbを書き換えるなどしてMakefileの再生成が必要な時はま
-たRubyディレクトリでmakeしてください.
+extʲ˥ǥ쥯ȥѰդϡRubyΥǥ쥯ȥ
+make¹ԤMakefilemakeɬפˤäƤϤΥ
+塼RubyؤΥ󥯤ޤǼưŪ˼¹ԤƤޤ
+extconf.rb񤭴ʤɤMakefileκɬפʻϤ
+Rubyǥ쥯ȥmakeƤ
-拡張ライブラリはmake installでRubyライブラリのディレクトリの
-下にコピーされます.もし拡張ライブラリと協調して使うRubyで記
-述されたプログラムがあり,Rubyライブラリに置きたい場合には,
-拡張ライブラリ用のディレクトリの下に lib というディレクトリ
-を作り,そこに 拡張子 .rb のファイルを置いておけば同時にイン
-ストールされます.
+ĥ饤֥make installRuby饤֥Υǥ쥯ȥ
+˥ԡޤ⤷ĥ饤֥ȶĴƻȤRubyǵ
+Ҥ줿ץबꡤRuby饤֥֤ˤϡ
+ĥ饤֥ѤΥǥ쥯ȥβ lib Ȥǥ쥯ȥ
+ꡤ ĥ .rb Υե֤ƤƱ˥
+ȡ뤵ޤ
-== デバッグ
+(8) ǥХå
-まあ,デバッグしないと動かないでしょうね.ext/Setupにディレ
-クトリ名を書くと静的にリンクするのでデバッガが使えるようにな
-ります.その分コンパイルが遅くなりますけど.
+ޤǥХåʤưʤǤ礦͡ext/Setup˥ǥ
+ȥ̾񤯤Ū˥󥯤ΤǥǥХåȤ褦ˤ
+ޤʬѥ뤬٤ʤޤɡ
-== できあがり
+(9) Ǥ
-後はこっそり使うなり,広く公開するなり,売るなり,ご自由にお
-使いください.Rubyの作者は拡張ライブラリに関して一切の権利を
-主張しません.
+ϤäȤʤꡤʤꡤʤꡤͳˤ
+ȤRubyκԤϳĥ饤֥˴ؤưڤθ
+ĥޤ
-= Appendix A. Rubyのソースコードの分類
+Appendix A. RubyΥɤʬ
-Rubyのソースはいくつかに分類することが出来ます.このうちクラ
-スライブラリの部分は基本的に拡張ライブラリと同じ作り方になっ
-ています.これらのソースは今までの説明でほとんど理解できると
-思います.
+RubyΥϤĤʬह뤳ȤޤΤ
+饤֥ʬϴŪ˳ĥ饤֥Ʊˤʤ
+ƤޤΥϺޤǤǤۤȤǤ
+פޤ
-== Ruby言語のコア
+RubyΥ
-class.c :: クラスとモジュール
-error.c :: 例外クラスと例外機構
-gc.c :: 記憶領域管理
-load.c :: ライブラリのロード
-object.c :: オブジェクト
-variable.c :: 変数と定数
+ class.c : 饹ȥ⥸塼
+ error.c : 㳰饹㳰
+ gc.c : ΰ
+ load.c : 饤֥Υ
+ object.c : ֥
+ variable.c : ѿ
-== Rubyの構文解析器
+Rubyιʸϴ
+ parse.y : ϴȹʸ
+ -> parse.c : ư
+ keywords : ͽ
+ -> lex.c : ư
- parse.y : 字句解析器と構文定義
- -> parse.c : 自動生成
- keywords : 予約語
- -> lex.c : 自動生成
-
-== Rubyの評価器 (通称YARV)
+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 : 同上
+ insns.def : ۵
+ iseq.c : VM::ISeqμ
+ thread.c : åɴȥƥڤؤ
+ thread_win32.c : åɼ
+ thread_pthread.c : Ʊ
vm.c
vm_dump.c
vm_eval.c
@@ -965,15 +943,14 @@ variable.c :: 変数と定数
vm_insnhelper.c
vm_method.c
- opt_insns_unif.def : 命令融合
- opt_operand.def : 最適化のための定義
-
- -> insn*.inc : 自動生成
- -> opt*.inc : 自動生成
- -> vm.inc : 自動生成
+ opt_insns_unif.def : ̿ͻ
+ opt_operand.def : ŬΤ
-== 正規表現エンジン (鬼車)
+ -> insn*.inc : ư
+ -> opt*.inc : ư
+ -> vm.inc : ư
+ɽ󥸥 ()
regex.c
regcomp.c
regenc.c
@@ -982,15 +959,15 @@ variable.c :: 変数と定数
regparse.c
regsyntax.c
-== ユーティリティ関数
+桼ƥƥؿ
-debug.c :: Cデバッガ用のデバッグシンボル
-dln.c :: 動的ローディング
-st.c :: 汎用ハッシュ表
-strftime.c :: 時刻整形
-util.c :: その他のユーティリティ
+ debug.c : CǥХåѤΥǥХåܥ
+ dln.c : ưŪǥ
+ st.c : ѥϥåɽ
+ strftime.c :
+ util.c : ¾Υ桼ƥƥ
-== Rubyコマンドの実装
+Rubyޥɤμ
dmyext.c
dmydln.c
@@ -1004,644 +981,587 @@ util.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コマンドの実装
-
+饹饤֥
+
+ 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.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 : 自動生成
+ golf_prelude.rb : gorubyͭΥ饤֥
+ -> golf_prelude.c : ư
-= Appendix B. 拡張用関数リファレンス
-C言語からRubyの機能を利用するAPIは以下の通りである.
+Appendix B. ĥѴؿե
-== 型
+C줫RubyεǽѤAPIϰʲ̤Ǥ롥
-VALUE ::
+**
- Rubyオブジェクトを表現する型.必要に応じてキャストして用いる.
- 組み込み型を表現するCの型はruby.hに記述してあるRで始まる構造
- 体である.VALUE型をこれらにキャストするためにRで始まる構造体
- 名を全て大文字にした名前のマクロが用意されている.
+VALUE
-== 変数・定数
+ Ruby֥Ȥɽ뷿ɬפ˱ƥ㥹ȤѤ롥
+ Ȥ߹߷ɽCηruby.h˵ҤƤRǻϤޤ빽¤
+ ΤǤ롥VALUE򤳤˥㥹Ȥ뤿RǻϤޤ빽¤
+ ̾ʸˤ̾ΥޥѰդƤ롥
-Qnil ::
+** ѿ
- 定数: nilオブジェクト
+Qnil
-Qtrue ::
+ : nil֥
- 定数: trueオブジェクト(真のデフォルト値)
+Qtrue
-Qfalse ::
+ : true֥(Υǥե)
- 定数: falseオブジェクト
+Qfalse
-== Cデータのカプセル化
+ : false֥
-Data_Wrap_Struct(VALUE klass, void (*mark)(), void (*free)(), void *sval) ::
+** CǡΥץ벽
- Cの任意のポインタをカプセル化したRubyオブジェクトを返す.こ
- のポインタがRubyからアクセスされなくなった時,freeで指定した
- 関数が呼ばれる.また,このポインタの指すデータが他のRubyオブ
- ジェクトを指している場合,markに指定する関数でマークする必要
- がある.
+Data_Wrap_Struct(VALUE klass, void (*mark)(), void (*free)(), void *sval)
-Data_Make_Struct(klass, type, mark, free, sval) ::
+ CǤդΥݥ󥿤򥫥ץ벽Ruby֥Ȥ֤
+ Υݥ󥿤Ruby饢ʤʤäfreeǻꤷ
+ ؿƤФ롥ޤΥݥ󥿤λؤǡ¾Ruby
+ ȤؤƤ硤mark˻ꤹؿǥޡɬ
+ 롥
- type型のメモリをmallocし,変数svalに代入した後,それをカプセ
- ル化したデータを返すマクロ.
+Data_Make_Struct(klass, type, mark, free, sval)
-Data_Get_Struct(data, type, sval) ::
+ typeΥmallocѿsval塤򥫥ץ
+ 벽ǡ֤ޥ
- dataからtype型のポインタを取り出し変数svalに代入するマクロ.
+Data_Get_Struct(data, type, sval)
-== 型チェック
+ datatypeΥݥ󥿤Фѿsvalޥ
- TYPE(value)
- FIXNUM_P(value)
- NIL_P(value)
- void Check_Type(VALUE value, int type)
- SafeStringValue(value)
+** å
-== 型変換
+TYPE(value)
+FIXNUM_P(value)
+NIL_P(value)
+void Check_Type(VALUE value, int type)
+void Check_SafeStr(VALUE 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)
+** Ѵ
-== クラス/モジュール定義
+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)
+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(const char *name, VALUE super)
-VALUE rb_define_class_under(VALUE module, const char *name, VALUE super) ::
+ superΥ֥饹ȤƿRuby饹롥
- superのサブクラスとして新しいRubyクラスを定義し,moduleの
- 定数として定義する.
+VALUE rb_define_class_under(VALUE module, const char *name, VALUE super)
-VALUE rb_define_module(const char *name) ::
+ superΥ֥饹ȤƿRuby饹module
+ Ȥ롥
- 新しいRubyモジュールを定義する.
+VALUE rb_define_module(const char *name)
-VALUE rb_define_module_under(VALUE module, const char *name) ::
+ Ruby⥸塼롥
- 新しいRubyモジュールを定義し,moduleの定数として定義する.
+VALUE rb_define_module_under(VALUE module, const char *name)
-void rb_include_module(VALUE klass, VALUE module) ::
+ Ruby⥸塼moduleȤ롥
- モジュールをインクルードする.classがすでにmoduleをインク
- ルードしている時には何もしない(多重インクルードの禁止).
+void rb_include_module(VALUE klass, VALUE module)
-void rb_extend_object(VALUE object, VALUE module) ::
+ ⥸塼򥤥󥯥롼ɤ롥classǤmodule򥤥
+ 롼ɤƤˤϲ⤷ʤ(¿ť󥯥롼ɤζػ)
- オブジェクトをモジュール(で定義されているメソッド)で拡張する.
+void rb_extend_object(VALUE object, VALUE module)
-== 大域変数定義
+ ֥Ȥ⥸塼(Ƥ᥽å)dzĥ롥
-void rb_define_variable(const char *name, VALUE *var) ::
+** ѿ
- RubyとCとで共有するグローバル変数を定義する.変数名が`$'で
- 始まらない時には自動的に追加される.nameとしてRubyの識別子
- として許されない文字(例えば` ')を含む場合にはRubyプログラ
- ムからは見えなくなる.
+void rb_define_variable(const char *name, VALUE *var)
-void rb_define_readonly_variable(const char *name, VALUE *var) ::
+ RubyCȤǶͭ륰Хѿ롥ѿ̾`$'
+ ϤޤʤˤϼưŪɲä롥nameȤRubyμ̻
+ ȤƵʤʸ(㤨` ')ޤˤRubyץ
+ फϸʤʤ롥
- RubyとCとで共有するread onlyのグローバル変数を定義する.
- read onlyであること以外はrb_define_variable()と同じ.
+void rb_define_readonly_variable(const char *name, VALUE *var)
-void rb_define_virtual_variable(const char *name, VALUE (*getter)(), void (*setter)()) ::
+ RubyCȤǶͭread onlyΥХѿ롥
+ read onlyǤ뤳Ȱʳrb_define_variable()Ʊ
- 関数によって実現されるRuby変数を定義する.変数が参照された
- 時にはgetterが,変数に値がセットされた時にはsetterが呼ばれ
- る.
+void rb_define_virtual_variable(const char *name,
+ VALUE (*getter)(), void (*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)
+ ؿˤäƼ¸Rubyѿ롥ѿȤ줿
+ ˤgetterѿͤåȤ줿ˤsetterƤФ
+ 롥
- GCのため,Rubyプログラムからはアクセスされないが, Rubyオブ
- ジェクトを含む大域変数をマークする.
+void rb_define_hooked_variable(const char *name, VALUE *var,
+ VALUE (*getter)(), void (*setter)())
-== 定数
+ ؿˤähookΤĤ줿Хѿ롥ѿ
+ Ȥ줿ˤgetterؿͤåȤ줿ˤ
+ setterƤФ롥gettersetter0ꤷˤhook
+ ꤷʤΤƱˤʤ롥
-void rb_define_const(VALUE klass, const char *name, VALUE val) ::
+void rb_global_variable(VALUE *var)
- 定数を定義する.
+ GCΤᡤRubyץफϥʤ, Ruby
+ Ȥޤѿޡ롥
-void rb_define_global_const(const char *name, VALUE val) ::
+**
- 大域定数を定義する.
+void rb_define_const(VALUE klass, const char *name, VALUE val)
- rb_define_const(rb_cObject, name, val)
+ 롥
- と同じ意味.
+void rb_define_global_const(const char *name, VALUE val)
-== メソッド定義
+ 롥
-rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc) ::
+ rb_define_const(rb_cObject, name, val)
- メソッドを定義する.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_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
-rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc) ::
+ ᥽åɤ롥argcselfοargc-1λ,
+ ؿˤϰο(selfޤޤʤ)1, 2
+ ȤͿ(3self)argc-2λ,
+ 1self, 2args(argsϰޤRuby)
+ Ϳ롥
+
+rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
- 特異メソッドを定義する.引数はrb_define_method()と同じ.
+ private᥽åɤ롥rb_define_method()Ʊ
-rb_scan_args(int argc, VALUE *argv, const char *fmt, ...) ::
+rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
- argc, argv形式で与えられた指定されたフォーマットに従って引
- 数を分解し,続くVALUEへの参照にセットします.このフォーマッ
- トは,ABNFで記述すると以下の通りです.
+ ðۥ᥽åɤ롥rb_define_method()Ʊ
- scan-arg-spec := param-arg-spec [option-hash-arg-spec] [block-arg-spec]
+rb_scan_args(int argc, VALUE *argv, const char *fmt, ...)
- 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
+ argc, argvͿ줿ꤵ줿եޥåȤ˽äư
+ ʬ򤷡³VALUEؤλȤ˥åȤޤΥեޥ
+ ȤϡABNFǵҤȰʲ̤Ǥ
- 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 := "&" ; イテレータブロックを取得するための
- ; 指定
+--
+scan-arg-spec := param-arg-spec [option-hash-arg-spec] [block-arg-spec]
- フォーマットが"12"の場合,引数は最低1つで,3つ(1+2)まで許さ
- れるという意味になります.従って,フォーマット文字列に続い
- て3つのVALUEへの参照を置く必要があります.それらには取得した
- 変数がセットされます.変数への参照の代わりにNULLを指定する
- こともでき,その場合は取得した引数の値は捨てられます.なお,
- 省略可能引数が省略された時の変数の値はnil(C言語のレベルでは
- Qnil)になります.
+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 := "&" ; ƥ졼֥å뤿
+ ;
+--
-== Rubyメソッド呼び出し
+ եޥåȤ"12"ξ硤Ϻ1Ĥǡ3(1+2)ޤǵ
+ Ȥ̣ˤʤޤäơեޥåʸ³
+ 3ĤVALUEؤλȤ֤ɬפޤˤϼ
+ ѿåȤޤѿؤλȤNULLꤹ
+ ȤǤξϼͤϼΤƤޤʤ
+ άǽά줿ѿͤnil(CΥ٥Ǥ
+ Qnil)ˤʤޤ
-VALUE rb_funcall(VALUE recv, ID mid, int narg, ...) ::
+ ֤ͤͿ줿οǤץϥå太ӥ
+ ƥ졼֥åϿޤ
- メソッド呼び出し.文字列からmidを得るためにはrb_intern()を
- 使う.
- private/protectedなメソッドでも呼び出せる.
+** Ruby᥽åɸƤӽФ
-VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv) ::
-VALUE rb_funcallv(VALUE recv, ID mid, int argc, VALUE *argv) ::
+VALUE rb_funcall(VALUE recv, ID mid, int narg, ...)
- メソッド呼び出し.引数をargc, argv形式で渡す.
- private/protectedなメソッドでも呼び出せる.
+ ᥽åɸƤӽФʸ󤫤mid뤿ˤrb_intern()
+ Ȥ
-VALUE rb_funcallv_public(VALUE recv, ID mid, int argc, VALUE *argv) ::
+VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)
- メソッド呼び出し.
- publicなメソッドしか呼べない.
+ ᥽åɸƤӽФargc, argvϤ
VALUE rb_eval_string(const char *str)
- 文字列をRubyスクリプトとしてコンパイル・実行する.
-
-ID rb_intern(const char *name) ::
-
- 文字列に対応するIDを返す.
-
-char *rb_id2name(ID id) ::
+ ʸRubyץȤȤƥѥ롦¹Ԥ롥
- IDに対応する文字列を返す(デバッグ用).
+ID rb_intern(const char *name)
-char *rb_class2name(VALUE klass) ::
+ ʸбID֤
- クラスの名前を返す(デバッグ用).クラスが名前を持たない時に
- は, 祖先を遡って名前を持つクラスの名前を返す.
+char *rb_id2name(ID id)
-int rb_respond_to(VALUE obj, ID id) ::
+ IDбʸ֤(ǥХå)
- objがidで示されるメソッドを持つかどうかを返す.
+char *rb_class2name(VALUE klass)
-== インスタンス変数
+ 饹֤̾(ǥХå)饹̾ʤ
+ , ̤ä̾ĥ饹֤̾
-VALUE rb_iv_get(VALUE obj, const char *name) ::
+int rb_respond_to(VALUE obj, ID id)
- objのインスタンス変数の値を得る.`@'で始まらないインスタン
- ス変数は Rubyプログラムからアクセスできない「隠れた」イン
- スタンス変数になる.定数は大文字の名前を持つクラス(または
- モジュール)のインスタンス変数として実装されている.
+ objidǼ᥽åɤĤɤ֤
-VALUE rb_iv_set(VALUE obj, const char *name, VALUE val) ::
+** 󥹥ѿ
- objのインスタンス変数をvalにセットする.
+VALUE rb_iv_get(VALUE obj, const char *name)
-== 制御構造
+ objΥ󥹥ѿͤ롥`@'ǻϤޤʤ󥹥
+ ѿ Rubyץफ饢Ǥʤֱ줿ץ
+ ѿˤʤ롥ʸ̾ĥ饹(ޤ
+ ⥸塼)Υ󥹥ѿȤƼƤ롥
-VALUE rb_block_call(VALUE obj, ID mid, int argc, VALUE * argv, VALUE (*func) (ANYARGS), VALUE data2) ::
+VALUE rb_iv_set(VALUE obj, const char *name, VALUE val)
- funcをブロックとして設定し,objをレシーバ,argcとargvを引数
- としてmidメソッドを呼び出す.funcは第一引数にyieldされた値,
- 第二引数にdata2を受け取る.複数の値がyieldされた場合(Cでは
- rb_yield_values()とrb_yield_values2(), rb_yield_splat()),
- data2はArrayとしてパックされている.第三, 第四引数のargcと
- argvによってyieldされた値を取り出すことができる.
+ objΥ󥹥ѿval˥åȤ롥
-[OBSOLETE] VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) ::
+** 湽¤
- func2をブロックとして設定し, func1をイテレータとして呼ぶ.
- func1には arg1が引数として渡され, func2には第1引数にイテレー
- タから与えられた値, 第2引数にarg2が渡される.
+VALUE rb_block_call(VALUE obj, ID mid, int argc, VALUE * argv,
+ VALUE (*func) (ANYARGS), VALUE data2)
- 1.9でrb_iterateを使う場合は, func1の中でRubyレベルのメソッド
- を呼び出さなければならない.
- 1.9でobsoleteとなった. 代わりにrb_block_callが用意された.
+ func֥åȤꤷobj쥷Сargcargv
+ Ȥmid᥽åɤƤӽФfuncyield줿͡
+ data2롥ʣͤyield줿(CǤ
+ rb_yield_values()rb_yield_values2(), rb_yield_splat())
+ data2ArrayȤƥѥåƤ롥軰, Ͱargc
+ argvˤäyield줿ͤФȤǤ롥
-VALUE rb_yield(VALUE val) ::
+[OBSOLETE] VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)
- valを値としてイテレータブロックを呼び出す.
+ func2֥åȤꤷ, func1򥤥ƥ졼ȤƸƤ֡
+ func1ˤ arg1ȤϤ, func2ˤ1˥ƥ졼
+ Ϳ줿, 2arg2Ϥ롥
+
+ 1.9rb_iterateȤ, func1Ruby٥Υ᥽å
+ ƤӽФʤФʤʤ.
+ 1.9obsoleteȤʤä. rb_block_callѰդ줿.
-VALUE rb_rescue(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) ::
+VALUE rb_yield(VALUE val)
- 関数func1をarg1を引数に呼び出す.func1の実行中に例外が発生
- した時には func2をarg2を引数として呼ぶ.戻り値は例外が発生
- しなかった時はfunc1の戻り値, 例外が発生した時にはfunc2の戻
- り値である.
+ valͤȤƥƥ졼֥åƤӽФ
-VALUE rb_ensure(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) ::
+VALUE rb_rescue(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)
- 関数func1をarg1を引数として実行し, 実行終了後(たとえ例外が
- 発生しても) func2をarg2を引数として実行する.戻り値はfunc1
- の戻り値である(例外が発生した時は戻らない).
+ ؿfunc1arg1˸ƤӽФfunc1μ¹㳰ȯ
+ ˤ func2arg2ȤƸƤ֡ͤ㳰ȯ
+ ʤäfunc1, 㳰ȯˤfunc2
+ ͤǤ롥
-VALUE rb_protect(VALUE (*func) (VALUE), VALUE arg, int *state) ::
+VALUE rb_ensure(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)
- 関数funcをargを引数として実行し, 例外が発生しなければその戻
- り値を返す.例外が発生した場合は, *stateに非0をセットして
- Qnilを返す.
- rb_jump_tag()を呼ばずに捕捉した例外を無視する場合には,
- rb_set_errinfo(Qnil)でエラー情報をクリアしなければならない.
+ ؿfunc1arg1ȤƼ¹Ԥ, ¹Խλ(Ȥ㳰
+ ȯƤ) func2arg2ȤƼ¹Ԥ롥ͤfunc1
+ ͤǤ(㳰ȯʤ)
-void rb_jump_tag(int state) ::
+VALUE rb_protect(VALUE (*func) (VALUE), VALUE arg, int *state)
- rb_protect()やrb_eval_string_protect()で捕捉された例外を再
- 送する.stateはそれらの関数から返された値でなければならない.
- この関数は直接の呼び出し元に戻らない.
+ ؿfuncargȤƼ¹Ԥ, 㳰ȯʤФ
+ ֤ͤ㳰ȯ, *state0򥻥åȤ
+ Qnil֤
-void rb_iter_break() ::
+void rb_jump_tag(int state)
- 現在の最も内側のブロックを終了する.この関数は直接の呼び出
- し元に戻らない.
+ rb_protect()rb_eval_string_protect()ª줿㳰
+ 롥stateϤδؿ֤줿ͤǤʤФʤʤ
+ δؿľܤθƤӽФʤ
-void rb_iter_break_value(VALUE value) ::
+** 㳰顼
- 現在の最も内側のブロックをvalueで終了する.ブロックは引数で
- 与えられたvalueを返す.この関数は直接の呼び出し元に戻らない.
+void rb_warning(const char *fmt, ...)
-== 例外・エラー
+ rb_verboseɸ२顼Ϥ˷ٹɽ롥
+ printf()Ʊ
-void rb_warning(const char *fmt, ...) ::
+void rb_raise(rb_eRuntimeError, const char *fmt, ...)
- rb_verbose時に標準エラー出力に警告情報を表示する.引数は
- printf()と同じ.
+ RuntimeError㳰ȯ롥printf()Ʊ
-void rb_raise(rb_eRuntimeError, const char *fmt, ...) ::
+void rb_raise(VALUE exception, const char *fmt, ...)
- RuntimeError例外を発生させる.引数はprintf()と同じ.
+ exceptionǻꤷ㳰ȯ롥fmtʲΰ
+ printf()Ʊ
-void rb_raise(VALUE exception, const char *fmt, ...) ::
+void rb_fatal(const char *fmt, ...)
- exceptionで指定した例外を発生させる.fmt以下の引数は
- printf()と同じ.
+ ̿Ū㳰ȯ롥̾㳰ϹԤʤ줺, 󥿡
+ ץ꥿λ(ensureǻꤵ줿ɤϽλ
+ ¹Ԥ)
-void rb_fatal(const char *fmt, ...) ::
+void rb_bug(const char *fmt, ...)
- 致命的例外を発生させる.通常の例外処理は行なわれず, インター
- プリタが終了する(ただしensureで指定されたコードは終了前に
- 実行される).
+ 󥿡ץ꥿ʤɥץΥХǤȯϤΤʤ
+ λƤ֡󥿡ץ꥿ϥפľ˽λ롥
+ 㳰ϰڹԤʤʤ
-void rb_bug(const char *fmt, ...) ::
+** Rubyν¹
- インタープリタなどプログラムのバグでしか発生するはずのない
- 状況の時呼ぶ.インタープリタはコアダンプし直ちに終了する.
- 例外処理は一切行なわれない.
+Ruby򥢥ץꥱˤϰʲΥ󥿥ե
+Ȥ̾γĥ饤֥ˤɬפʤ
-注意: %iはObject#to_s('+'フラグが指定されているときはObject#inspect)を
-使ったVALUEの出力に使用されているため,整数には%dを使用すること.
+void ruby_init()
-== Rubyの初期化・実行
+ Ruby󥿥ץ꥿νԤʤ
-Rubyをアプリケーションに埋め込む場合には以下のインタフェース
-を使う.通常の拡張ライブラリには必要ない.
+void ruby_options(int argc, char **argv)
-void ruby_init() ::
+ Ruby󥿥ץ꥿Υޥɥ饤νԤʤ
- Rubyインタプリタの初期化を行なう.
+void ruby_run()
-void ruby_options(int argc, char **argv) ::
+ Ruby󥿥ץ꥿¹Ԥ롥
- Rubyインタプリタのコマンドライン引数の処理を行なう.
+void ruby_script(char *name)
-void ruby_run() ::
+ RubyΥץ̾($0)ꤹ롥
- Rubyインタプリタを実行する.
+** 󥿥ץ꥿Υ٥ȤΥեå
-void ruby_script(char *name) ::
+ void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data)
- Rubyのスクリプト名($0)を設定する.
+ꤵ줿󥿥ץ꥿Υ٥ȤФեåؿɲäޤ
+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
- void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events,
- VALUE data)
+rb_event_hook_func_tϰʲ̤Ǥ:
-指定されたインタプリタのイベントに対するフック関数を追加します.
-eventsは以下の値のorでなければなりません:
+ typedef void (*rb_event_hook_func_t)(rb_event_t event, VALUE data,
+ VALUE self, ID id, VALUE klass)
- 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_add_event_hook() 3 data ϡեåؿ2
+Ϥޤ1.8ǤϸߤNODEؤΥݥ󥿤Ǥ
+ RB_EVENT_HOOKS_HAVE_CALLBACK_DATA ⻲ȤƤ
-rb_event_hook_func_tの定義は以下の通りです:
+ int rb_remove_event_hook(rb_event_hook_func_t func)
- 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 ޥؿޥȤƤ뤳Ȥ̣롥
-APIの互換性をチェックするために以下のマクロがデフォルトで定義されています.
+HAVE_RB_DEFINE_ALLOC_FUNC
-NORETURN_STYLE_NEW ::
-
- NORETURN マクロが関数型マクロとして定義されていることを意味する.
-
-HAVE_RB_DEFINE_ALLOC_FUNC ::
-
- rb_define_alloc_func() 関数が提供されていること,つまり
- allocation framework が使われることを意味する.
+ rb_define_alloc_func() ؿ󶡤Ƥ뤳ȡĤޤ
+ allocation framework Ȥ뤳Ȥ̣롥
have_func("rb_define_alloc_func", "ruby.h")
- の結果と同じ.
+ η̤Ʊ
-HAVE_RB_REG_NEW_STR ::
+HAVE_RB_REG_NEW_STR
- StringオブジェクトからRegexpオブジェクトを作る
- rb_reg_new_str() 関数が提供されていることを意味する.
+ String֥ȤRegexp֥Ȥ
+ rb_reg_new_str() ؿ󶡤Ƥ뤳Ȥ̣롥
have_func("rb_reg_new_str", "ruby.h").
- の結果と同じ.
+ η̤Ʊ
-HAVE_RB_IO_T ::
+HAVE_RB_IO_T
- rb_io_t 型が提供されていることを意味する.
+ rb_io_t 󶡤Ƥ뤳Ȥ̣롥
-USE_SYMBOL_AS_METHOD_NAME ::
+USE_SYMBOL_AS_METHOD_NAME
- メソッド名を返すメソッド,Module#methods, #singleton_methods
- などがSymbolを返すことを意味する.
+ ᥽å֤̾᥽åɡModule#methods, #singleton_methods
+ ʤɤSymbol֤Ȥ̣롥
-HAVE_RUBY_*_H ::
+HAVE_RUBY_*_H
- ruby.h で定義されている.対応するヘッダが提供されていること
- を意味する.たとえば,HAVE_RUBY_ST_H が定義されている場合は
- 単なる st.h ではなく ruby/st.h を使用する.
+ ruby.h Ƥ롥бإå󶡤Ƥ뤳
+ ̣롥ȤСHAVE_RUBY_ST_H Ƥ
+ ñʤ st.h ǤϤʤ ruby/st.h Ѥ롥
-RB_EVENT_HOOKS_HAVE_CALLBACK_DATA ::
+RB_EVENT_HOOKS_HAVE_CALLBACK_DATA
- rb_add_event_hook() がフック関数に渡す data を第3引数として
- 受け取ることを意味する.
+ rb_add_event_hook() եåؿϤ data 3Ȥ
+ 뤳Ȥ̣롥
-= Appendix C. extconf.rbで使える関数たち
+Appendix C. extconf.rbǻȤؿ
-extconf.rbの中では利用可能なコンパイル条件チェックの関数は以
-下の通りである.
+extconf.rbǤѲǽʥѥåδؿϰ
+̤Ǥ롥
-have_macro(macro, headers) ::
+have_macro(macro, headers)
- ヘッダファイルheaderをインクルードしてマクロmacroが定義さ
- れているかどうかチェックする.マクロが定義されている時true
- を返す.
+ إåեheader򥤥󥯥롼ɤƥޥmacro
+ Ƥ뤫ɤå롥ޥƤtrue
+ ֤
-have_library(lib, func) ::
+have_library(lib, func)
- 関数funcを定義しているライブラリlibの存在をチェックする.
- チェックに成功すると,-llibを$libsに追加し,trueを返す.
+ ؿfuncƤ饤֥lib¸ߤå롥
+ 饤֥꤬¸ߤtrue֤
-find_library(lib, func, path...) ::
+find_library(lib, func, path...)
- 関数funcを定義しているライブラリlibの存在を -Lpath を追加
- しながらチェックする.チェックに成功すると,-llibを$libsに
- 追加し,trueを返す.
+ ؿfuncƤ饤֥lib¸ߤ -Lpath ɲ
+ ʤå롥饤֥꤬դätrue֤
-have_func(func, header) ::
+have_func(func, header)
- ヘッダファイルheaderをインクルードして関数funcの存在をチェ
- ックする.funcが標準ではリンクされないライブラリ内のもので
- ある時には先にhave_libraryでそのライブラリをチェックしてお
- く事.チェックに成功すると,プリプロセッサマクロ
- `HAVE_{FUNC}` を定義し,trueを返す.
+ إåեheader򥤥󥯥롼ɤƴؿfunc¸ߤ
+ å롥funcɸǤϥ󥯤ʤ饤֥ΤΤ
+ ˤhave_libraryǤΥ饤֥åƤ
+ ؿ¸ߤtrue֤
-have_var(var, header) ::
+have_var(var, header)
- ヘッダファイルheaderをインクルードして変数varの存在をチェッ
- クする.varが標準ではリンクされないライブラリ内のものであ
- る時には先にhave_libraryでそのライブラリをチェックしておく
- 事.チェックに成功すると,プリプロセッサマクロ
- `HAVE_{VAR}` を定義し,trueを返す.
+ إåեheader򥤥󥯥롼ɤѿvar¸ߤ
+ 롥varɸǤϥ󥯤ʤ饤֥ΤΤǤ
+ ˤhave_libraryǤΥ饤֥åƤ
+ ѿ¸ߤtrue֤
-have_header(header) ::
+have_header(header)
- ヘッダファイルの存在をチェックする.チェックに成功すると,
- プリプロセッサマクロ `HAVE_{HEADER_H}` を定義し,trueを返す.
- (スラッシュやドットはアンダースコアに置換される)
+ إåե¸ߤå롥إåե뤬¸ߤ
+ true֤
-find_header(header, path...) ::
+find_header(header, path...)
- ヘッダファイルheaderの存在を -Ipath を追加しながらチェック
- する.チェックに成功すると,プリプロセッサマクロ
- `HAVE_{HEADER_H}` を定義し,trueを返す.
- (スラッシュやドットはアンダースコアに置換される)
+ إåեheader¸ߤ -Ipath ɲäʤå
+ 롥إåե뤬դätrue֤
-have_struct_member(type, member[, header[, opt]]) ::
+have_struct_member(type, member, header)
- ヘッダファイルheaderをインクルードして型typeが定義され,
- なおかつメンバmemberが存在するかをチェックする.チェックに
- 成功すると,プリプロセッサマクロ `HAVE_{TYPE}_{MEMBER}` を
- 定義し,trueを返す.
+ إåեheader򥤥󥯥롼ɤƷtype˥member
+ ¸ߤ뤫å롥typeƤơmember
+ Ĥtrue֤
-have_type(type, header, opt) ::
+have_type(type, header, opt)
- ヘッダファイルheaderをインクルードして型typeが存在するかを
- チェックする.チェックに成功すると,プリプロセッサマクロ
- `HAVE_TYPE_{TYPE}` を定義し,trueを返す.
+ إåեheader򥤥󥯥롼ɤƷtype¸ߤ뤫
+ å롥typeƤtrue֤
-check_sizeof(type, header) ::
+check_sizeof(type, header)
- ヘッダファイルheaderをインクルードして型typeのchar単位サイ
- ズを調べる.チェックに成功すると,プリプロセッサマクロ
- `SIZEOF_{TYPE}` を定義し,そのサイズを返す.定義されていな
- いときはnilを返す.
+ إåեheader򥤥󥯥롼ɤƷtypecharñ̥
+ Ĵ٤롥typeƤΥ֤
+ ƤʤȤnil֤
-create_makefile(target[, target_prefix]) ::
+create_makefile(target)
- 拡張ライブラリ用のMakefileを生成する.この関数を呼ばなけれ
- ばそのライブラリはコンパイルされない.targetはモジュール名
- を表す.
+ ĥ饤֥ѤMakefile롥δؿƤФʤ
+ ФΥ饤֥ϥѥ뤵ʤtargetϥ⥸塼̾
+ ɽ
-find_executable(command, path) ::
+find_executable(command, path)
- コマンドcommandをFile::PATH_SEPARATORで区切られたパス名の
- リストpathから探す.pathがnilまたは省略された場合は,環境
- 変数PATHの値を使用する.実行可能なコマンドが見つかった場合
- はパスを含むファイル名,見つからなかった場合はnilを返す.
+ ޥcommandFile::PATH_SEPARATORǶڤ줿ѥ̾
+ ꥹpathõpathnilޤϾά줿ϡĶ
+ ѿPATHͤѤ롥¹ԲǽʥޥɤĤä
+ ϥѥޤե̾Ĥʤänil֤
-with_config(withval[, default=nil]) ::
+with_config(withval[, default=nil])
- コマンドライン上の--with-<withval>で指定されたオプション値
- を得る.
+ ޥɥ饤--with-<withval>ǻꤵ줿ץ
+ 롥
-enable_config(config, *defaults) ::
-disable_config(config, *defaults) ::
+enable_config(config, *defaults)
+disable_config(config, *defaults)
- コマンドライン上の--enable-<config>または
- --disable-<config>で指定された真偽値を得る.
- --enable-<config>が指定されていた場合はtrue,
- --disable-<config>が指定されていた場合はfalseを返す.
- どちらも指定されていない場合は,ブロックつきで呼び出されて
- いる場合は*defaultsをyieldした結果,ブロックなしなら
- *defaultsを返す.
+ ޥɥ饤--enable-<config>ޤ
+ --disable-<config>ǻꤵ줿ͤ롥
+ --enable-<config>ꤵƤtrue
+ --disable-<config>ꤵƤfalse֤
+ ɤꤵƤʤϡ֥åĤǸƤӽФ
+ *defaultsyield̡֥åʤʤ
+ *defaults֤
-dir_config(target[, default_dir]) ::
-dir_config(target[, default_include, default_lib]) ::
+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>-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は、過去の拡張ライブラリに(ほぼ)互換性を保つように開発されている
-ため、拡張ライブラリ側の対応はほぼ不要です。
-
-ただし、対応をすることで性能を向上することができる可能性があります。もし
-拡張ライブラリに高い性能が必要である場合は対応を検討して下さい。
+ Ǥ롥ɲä줿 include ǥ쥯ȥ lib ǥ
+ ȥ֤ ([include_dir, lib_dir])
-とくにRARRAY_PTR()/RHASH_TBL()のようなマクロを用いてポインタに直接アクセ
-スするようなコードは書かないようにして下さい。代わりに、rb_ary_aref(),
-rb_ary_store() などの、適切な API 関数を利用するようにして下さい。
+pkg_config(pkg)
-そのほか、対応についての詳細は README.ext の「Appendix D. Generational
-GC」を参照して下さい。
+ pkg-configޥɤѥåpkgξ롥
+ pkg-configμºݤΥޥ̾ϡ--with-pkg-configޥ
+ 饤󥪥ץǻǽ
/*
* Local variables:
diff --git a/README.ja b/README.ja
index 9ab2f3ca0e..dd7f67ca59 100644
--- a/README.ja
+++ b/README.ja
@@ -1,192 +1,185 @@
-= Rubyとは
+* RubyȤ
-Rubyはシンプルかつ強力なオブジェクト指向スクリプト言語です.
-Rubyは最初から純粋なオブジェクト指向言語として設計されていま
-すから,オブジェクト指向プログラミングを手軽に行う事が出来ま
-す.もちろん通常の手続き型のプログラミングも可能です.
+Rubyϥץ뤫ĶϤʥ֥ȻظץȸǤ
+RubyϺǽ餫ʥ֥ȻظȤ߷פƤ
+顤֥Ȼظץߥ󥰤ڤ˹Ԥ
+̾μ³Υץߥ󥰤ǽǤ
-Rubyはテキスト処理関係の能力などに優れ,Perlと同じくらい強力
-です.さらにシンプルな文法と,例外処理やイテレータなどの機構
-によって,より分かりやすいプログラミングが出来ます.
+RubyϥƥȽطǽϤʤɤͥ졤PerlƱ餤
+Ǥ˥ץʸˡȡ㳰䥤ƥ졼ʤɤε
+ˤäơʬ䤹ץߥ󥰤ޤ
-== Rubyの特長
+* RubyĹ
-* シンプルな文法
-* 普通のオブジェクト指向機能(クラス,メソッドコールなど)
-* 特殊なオブジェクト指向機能(Mixin, 特異メソッドなど)
-* 演算子オーバーロード
-* 例外処理機能
-* イテレータとクロージャ
-* ガーベージコレクタ
-* ダイナミックローディング (アーキテクチャによる)
-* 移植性が高い.多くのUnix-like/POSIX互換プラットフォーム上で
- 動くだけでなく,Windows, Mac OS X,BeOSなどの上でも動く
- cf. http://bugs.ruby-lang.org/projects/ruby-trunk/wiki/SupportedPlatformsJa
+ + ץʸˡ
+ + ̤Υ֥Ȼظǽ(饹᥽åɥʤ)
+ + üʥ֥Ȼظǽ(Mixin, ðۥ᥽åɤʤ)
+ + 黻ҥС
+ + 㳰ǽ
+ + ƥ졼ȥ
+ + ١쥯
+ + ʥߥåǥ (ƥˤ)
+ + ܿ⤤¿Unix-like/POSIXߴץåȥե
+ ưǤʤWindows Mac OS XBeOSʤɤξǤư
+ cf. http://redmine.ruby-lang.org/wiki/ruby-19/SupportedPlatformsJa
-== 入手法
+* ˡ
-=== FTPで
+** FTP
-以下の場所においてあります.
+ʲξˤƤޤ
-ftp://ftp.ruby-lang.org/pub/ruby/
+ ftp://ftp.ruby-lang.org/pub/ruby/
-=== Subversionで
+** 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のホームページのURLは
-http://www.ruby-lang.org/
-です.
+* ᡼󥰥ꥹ
+RubyΥ᡼󥰥ꥹȤޤô˾
-== メーリングリスト
+ ruby-list-ctl@ruby-lang.org
-Rubyのメーリングリストがあります。参加希望の方は
-
-mailto:ruby-list-ctl@ruby-lang.org
-
-まで本文に
+ޤʸ
subscribe YourFirstName YourFamilyName
+
+Ƚ񤤤äƲ
-と書いて送って下さい。
-
-Ruby開発者向けメーリングリストもあります。こちらではrubyのバ
-グ、将来の仕様拡張など実装上の問題について議論されています。
-参加希望の方は
+RubyȯԸ᡼󥰥ꥹȤ⤢ޤǤrubyΥ
+λͳĥʤɼˤĤƵƤޤ
+ô˾
-mailto:ruby-dev-ctl@ruby-lang.org
+ ruby-dev-ctl@ruby-lang.org
-までruby-listと同様の方法でメールしてください。
+ޤruby-listƱͤˡǥ᡼뤷Ƥ
-Ruby拡張モジュールについて話し合うruby-extメーリングリストと
-数学関係の話題について話し合うruby-mathメーリングリストと
-英語で話し合うruby-talkメーリングリストもあります。参加方法
-はどれも同じです。
+Rubyĥ⥸塼ˤĤä礦ruby-ext᡼󥰥ꥹȤ
+شطˤĤä礦ruby-math᡼󥰥ꥹȤ
+Ѹä礦ruby-talk᡼󥰥ꥹȤ⤢ޤˡ
+ϤɤƱǤ
-== コンパイル・インストール
+* ѥ롦󥹥ȡ
-以下の手順で行ってください.
+ʲμǹԤäƤ
-1. もし +configure+ ファイルが見つからない、もしくは
- +configure.in+ より古いようなら、 +autoconf+ を実行して
- 新しく +configure+ を生成する
+ 1. ⤷configureե뤬Ĥʤ⤷
+ configure.inŤ褦ʤ顢autoconf¹Ԥ
+ configure
-2. +configure+ を実行して +Makefile+ などを生成する
+ 2. configure¹ԤMakefileʤɤ
- 環境によってはデフォルトのCコンパイラ用オプションが付き
- ます. +configure+ オプションで <tt>optflags=..</tt> <tt>warnflags=..</tt> 等
- で上書きできます.
+ ĶˤäƤϥǥեȤCѥѥץդ
+ ޤconfigureץ optflags=.. warnflags=..
+ Ǿ񤭤Ǥޤ
-3. (必要ならば)+defines.h+ を編集する
+ 3. (ɬפʤ)defines.hԽ
- 多分,必要無いと思います.
+ ¿ʬɬ̵Ȼפޤ
-4. (必要ならば)+ext/Setup+ に静的にリンクする拡張モジュールを
- 指定する
+ 4. (ɬפʤ)ext/SetupŪ˥󥯤ĥ⥸塼
+ ꤹ
- +ext/Setup+ に記述したモジュールは静的にリンクされます.
+ ext/Setup˵Ҥ⥸塼Ū˥󥯤ޤ
- ダイナミックローディングをサポートしていないアーキテク
- チャでは +Setup+ の1行目の「<tt>option nodynamic</tt>」という行のコ
- メントを外す必要があります.また,このアーキテクチャで
- 拡張モジュールを利用するためには,あらかじめ静的にリン
- クしておく必要があります.
+ ʥߥåǥ󥰤򥵥ݡȤƤʤƥ
+ ǤSetup1ܤΡoption nodynamicפȤԤΥ
+ Ȥ򳰤ɬפޤޤΥƥ
+ ĥ⥸塼Ѥ뤿ˤϡ餫Ū˥
+ Ƥɬפޤ
-5. +make+ を実行してコンパイルする
+ 5. make¹Ԥƥѥ뤹
-6. <tt>make check</tt>でテストを行う.
+ 6. make testǥƥȤԤ
- 「<tt>check succeeded</tt>」と表示されれば成功です.ただしテスト
- に成功しても完璧だと保証されている訳ではありません.
+ test succeededפɽǤƥ
+ ƤⴰݾڤƤǤϤޤ
-7. <tt>make install</tt>
+ 7. make install
- 以下のディレクトリを作って,そこにファイルをインストー
- ルします.
+ ʲΥǥ쥯ȥäơ˥ե򥤥󥹥ȡ
+ 뤷ޤ
- * <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>
+ * ${DESTDIR}${prefix}/bin
+ * ${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}
+ * ${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
+ * ${DESTDIR}${prefix}/lib
+ * ${DESTDIR}${prefix}/lib/ruby
+ * ${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}
+ * ${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
+ * ${DESTDIR}${prefix}/lib/ruby/site_ruby
+ * ${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}
+ * ${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
+ * ${DESTDIR}${prefix}/lib/ruby/vendor_ruby
+ * ${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}
+ * ${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
+ * ${DESTDIR}${prefix}/lib/ruby/gems/${MAJOR}.${MINOR}.${TEENY}
+ * ${DESTDIR}${prefix}/share/man/man1
+ * ${DESTDIR}${prefix}/share/ri/${MAJOR}.${MINOR}.${TEENY}/system
- RubyのAPIバージョンが'_x.y.z_'であれば,<tt>${MAJOR}</tt>は
- '_x_'で,<tt>${MINOR}</tt>は'_y_',<tt>${TEENY}</tt>は'_z_'です.
+ RubyAPIС`x.y.z'ǤС((|${MAJOR}|))
+ `x'ǡ((|${MINOR}|))`y'((|${TEENY}|))`z'Ǥ
- <b>注意</b>: APIバージョンの +teeny+ は,Rubyプログラムのバージョ
- ンとは異なることがあります.
+ : APIСteenyϡRubyץΥС
+ Ȥϰۤʤ뤳Ȥޤ
- +root+ で作業する必要があるかもしれません.
+ rootǺȤɬפ뤫⤷ޤ
-もし,コンパイル時にエラーが発生した場合にはエラーのログとマ
-シン,OSの種類を含むできるだけ詳しいレポートを作者に送ってく
-ださると他の方のためにもなります.
+⤷ѥ˥顼ȯˤϥ顼Υȥ
+OSμޤǤܤݡȤԤäƤ
+¾Τˤʤޤ
-== 移植
+* ܿ
-UNIXであれば +configure+ がほとんどの差異を吸収してくれるはずで
-すが,思わぬ見落としがあった場合(あるに違いない),作者にその
-ことをレポートすれば,解決できるかも知れません.
+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>で括られてい
-る部分を参考にしてください.
+ƥˤäȤ¸ΤGCǤRubyGCо
+Υƥ㤬setjmp()ޤgetcontext()ˤäƤΥ
+jmp_bufucontext_t˳Ǽ뤳Ȥȡjmp_buf
+ucontext_tȥå32bit饤ȤƤ뤳Ȥ
+ƤޤäԤΩʤб˺Ǥ
+ԤβŪñǡgc.cǥåޡƤ
+ʬ˥饤ȤΥХȿ餷ƥޡ륳ɤ
+ɲäǺѤߤޤdefined(__mc68000__)פdzƤ
+ʬ򻲹ͤˤƤ
-レジスタウィンドウを持つCPUでは,レジスタウィンドウをスタッ
-クにフラッシュするアセンブラコードを追加する必要があるかも知
-れません.
+쥸ɥCPUǤϡ쥸ɥ򥹥
+˥եå夹륢֥饳ɤɲäɬפ뤫
-== 配布条件
+* ۾
-+COPYING.ja+ ファイルを参照してください。
+COPYING.jaե򻲾ȤƤ
-== 著者
+*
-コメント,バグレポートその他は mailto:matz@ruby-lang.org まで.
+ȡХݡȤ¾ matz@netlab.jp ޤǡ
-------------------------------------------------------
created at: Thu Aug 3 11:57:36 JST 1995
---
Local variables:
-mode: rdoc
+mode: indented-text
end:
diff --git a/ToDo b/ToDo
new file mode 100644
index 0000000000..7e5ef523a8
--- /dev/null
+++ b/ToDo
@@ -0,0 +1,124 @@
+Language Spec.
+
+- Class#allocate - basicNew
+- class Foo::Bar<Baz .. end, module Boo::Bar .. end
+- raise exception by `` error
+- a +1 to be a+1, not a(+1).
+- clarify evaluation order of operator argument (=~, .., ...)
+- :symbol => value hash in the form of {symbol: value, ...} ??
+* operator !! for rescue. ???
+* objectify characters
+* ../... outside condition invokes operator method too.
+* ... inside condition turns off just before right condition.???
+* package or access control for global variables??
+* named arguments like foo(nation:="german") or foo(nation: "german").
+* method to retrieve argument information (needs new C API)
+* multiple return values, yield values. maybe incompatible ???
+* cascading method invocation ???
+* def Class#method .. end ??
+* def Foo::Bar::baz() .. end ??
+* I18N (or M17N) script/string/regexp
+* discourage use of symbol variables (e.g. $/, etc.) in manual
+* discourage use of Perlish features by giving warnings.
+* non confusing in-block local variable (is it possible?)
+ + remove scope by block
+ + variables appears within block may have independent values.
+* Regexp: make /o thread safe.
+* decide whether begin with rescue or ensure make do..while loop.
+* unify == and eql? again
+* to_i returns nil if str contains no digit.
+* jar like combined library package. -> RubyGems?
+* method combination, e.g. before, after, around, etc.
+* .. or something like defadvice in Emacs.
+* property - for methods, or for objects in general.
+* "in" modifier, to annotate, or to encourage assertion.
+* selector namespace - something like generic-flet in CLOS, to help RubyBehavior
+* private instance variable (as in Python?) @_foo in class Foo => @_Foo_foo
+* warn/error "bare word" method, like "foo", you should type "foo()"
+
+Hacking Interpreter
+
+- generational GC
+* non-blocking open (e.g. for named pipe) for thread
+* avoid blocking with gethostbyname/gethostbyaddr (use fork ???)
+* objectify interpreters ???
+* remove rb_eval() recursions
+* syntax tree -> bytecode ???
+* scrambled script, or script filter
+* setuid ruby
+* performance tune for in-block (dynamic) local variables.
+* give warnings to assign magic variables.
+* export rb_io_{addstr,printf,puts,print}
+* autoload should work with threads [ruby-talk:4589]
+* remove stdio dependency from IOs.
+* warn for inconsistent local variable usage (lv m and method m at the same time).
+* MicroRuby
+* Built-in Interactive Ruby.
+* Parser API
+* trap every method invocation, which can be enabled by e.g. trap_call :method.
+* unify Errno exceptions of same errno, or new exception comparison scheme.
+* 2.times{|i| if i==0 then a = 15 else puts eval("a") end} should print nil.
+* Thread#max_stack_size attribute (possible??)
+
+Standard Libraries
+
+- Module#define_method which takes a name and a body (block, proc or method).
+- Enume#inject
+- Array#fetch
+- IO::for_fd
+- Process::waitall [ruby-talk:4557]
+- Process::Status
+- File::lchown, File::lchmod; xxx - still need work for non existing platforms
+- move Time::times to Process.
+- Enumerable#sort_by for Schwartzian transformation
+- fork_and_kill_other_threads.
+- signal list (Signal::trap, Signal::list).
+- move NameError under StandardError.
+- Integer#to_s(base)
+- Hash::new{default}
+- hash etc. should handle self referenceing array/hash
+- Array#select(n1,n2...) works like Array#indexes(n1,n2...)
+- use Mersenne Twister RNG for random.
+- deprecate Array#indexes, and Array#indices.
+- remove dependency on MAXPATHLEN.
+- String#scanf(?)
+* Object#fmt(?)
+* Time::strptime
+* Integer[num], Float[num]; Fixnum[num]?
+* method to retrieve non-number trailer for to_i/to_f.
+* Stream or Port, abstract superclass of IO ?
+* String#{pred,prev}, String#downto
+* optional stepsize argument for succ()
+* Ruby module -- Ruby::Version, Ruby::Interpreter
+* introduce Boolean class; super of TrueClass, FalseClass
+* synchronized method - synchronized{...}, synchronized :foo, :bar
+* Array#&, Array#| to allow duplication. ???
+* way to specify immortal (fork endurance) thread;
+* or raise ForkException to every thread but fork caller.
+* new user-defined marshal scheme. _dump(dumper), _load(restorer)
+* library to load per-user profile seeking .ruby_profile or ruby.ini file.
+* warning framework (warn, warning for Ruby level)
+* marshal should not depend on sprintf (works bad with locale).
+* ternary arg pow: a.pow(b,c) == a**b%c
+* new caller(), e.g. call_stack; needs better name.
+* pointer share mechanism similar to one in String for Array.
+* require "1.6" etc. by /usr/lib/ruby/1.6/1.6.rb ;-)
+* save both "feature names" and "normalized path" in $"
+* implement Mutex_m (or MutexMixin) using Mutex.
+
+Extension Libraries
+
+* ptk.rb pTk wrapper that is compatible to tk.rb
+* Berkeley DB extension
+* BitVector
+* thread-safe fcgi
+
+Ruby Libraries
+
+- urllib.rb, nttplib.rb, etc.
+* format like perl's
+
+Tools
+
+* freeze or undump to bundle everything
+* bundle using zlib
diff --git a/addr2line.c b/addr2line.c
index f936694724..219d1d4b47 100644
--- a/addr2line.c
+++ b/addr2line.c
@@ -1,6 +1,6 @@
/**********************************************************************
- addr2line.c -
+ addr2line.h -
$Author$
@@ -9,7 +9,6 @@
**********************************************************************/
#include "ruby/config.h"
-#include "ruby/missing.h"
#include "addr2line.h"
#include <stdio.h>
@@ -17,10 +16,14 @@
#ifdef USE_ELF
+#ifdef __OpenBSD__
+#include <elf_abi.h>
+#else
+#include <elf.h>
+#endif
#include <fcntl.h>
#include <limits.h>
#include <stdio.h>
-#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
@@ -28,33 +31,10 @@
#include <sys/stat.h>
#include <unistd.h>
-#ifdef __OpenBSD__
-#include <elf_abi.h>
-#else
-#include <elf.h>
+#if defined(HAVE_ALLOCA_H)
+#include <alloca.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
@@ -88,11 +68,6 @@ void *alloca();
# 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;
@@ -109,8 +84,7 @@ typedef struct {
static char binary_filename[PATH_MAX];
static unsigned long
-uleb128(char **p)
-{
+uleb128(char **p) {
unsigned long r = 0;
int s = 0;
for (;;) {
@@ -126,8 +100,7 @@ uleb128(char **p)
}
static long
-sleb128(char **p)
-{
+sleb128(char **p) {
long r = 0;
int s = 0;
for (;;) {
@@ -157,7 +130,7 @@ get_nth_dirname(unsigned long dir, char *p)
while (*p) p++;
p++;
if (!*p) {
- kprintf("Unexpected directory number %lu in %s\n",
+ fprintf(stderr, "Unexpected directory number %lu in %s\n",
dir, binary_filename);
return "";
}
@@ -177,7 +150,7 @@ fill_filename(int file, char *include_directories, char *filenames,
filename = p;
if (!*p) {
/* Need to output binary file name? */
- kprintf("Unexpected file number %d in %s\n",
+ fprintf(stderr, "Unexpected file number %d in %s\n",
file, binary_filename);
return;
}
@@ -242,19 +215,19 @@ parse_debug_line_cu(int num_traces, void **traces,
int default_is_stmt, line_base;
unsigned int header_length, minimum_instruction_length, line_range,
opcode_base;
- /* unsigned char *standard_opcode_lengths; */
+ unsigned char *standard_opcode_lengths;
/* The registers. */
unsigned long addr = 0;
unsigned int file = 1;
unsigned int line = 1;
- /* unsigned int column = 0; */
+ 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; */
+ int basic_block = 0;
+ int end_sequence = 0;
+ int prologue_end = 0;
+ int epilogue_begin = 0;
+ unsigned int isa = 0;
p = *debug_line;
@@ -290,7 +263,7 @@ parse_debug_line_cu(int num_traces, void **traces,
opcode_base = *(unsigned char *)p;
p++;
- /* standard_opcode_lengths = (unsigned char *)p - 1; */
+ standard_opcode_lengths = (unsigned char *)p - 1;
p += opcode_base - 1;
include_directories = p;
@@ -310,7 +283,7 @@ parse_debug_line_cu(int num_traces, void **traces,
do { \
fill_line(num_traces, traces, addr, file, line, \
include_directories, filenames, lines); \
- /*basic_block = prologue_end = epilogue_begin = 0;*/ \
+ basic_block = prologue_end = epilogue_begin = 0; \
} while (0)
while (p < cu_end) {
@@ -333,13 +306,13 @@ parse_debug_line_cu(int num_traces, void **traces,
file = (unsigned int)uleb128(&p);
break;
case DW_LNS_set_column:
- /*column = (unsigned int)*/(void)uleb128(&p);
+ column = (unsigned int)uleb128(&p);
break;
case DW_LNS_negate_stmt:
is_stmt = !is_stmt;
break;
case DW_LNS_set_basic_block:
- /*basic_block = 1; */
+ basic_block = 1;
break;
case DW_LNS_const_add_pc:
a = ((255 - opcode_base) / line_range) *
@@ -351,35 +324,35 @@ parse_debug_line_cu(int num_traces, void **traces,
addr += a;
break;
case DW_LNS_set_prologue_end:
- /* prologue_end = 1; */
+ prologue_end = 1;
break;
case DW_LNS_set_epilogue_begin:
- /* epilogue_begin = 1; */
+ epilogue_begin = 1;
break;
case DW_LNS_set_isa:
- /* isa = (unsigned int)*/(void)uleb128(&p);
+ isa = (unsigned int)uleb128(&p);
break;
case 0:
a = *(unsigned char *)p++;
op = *p++;
switch (op) {
case DW_LNE_end_sequence:
- /* end_sequence = 1; */
+ end_sequence = 1;
FILL_LINE();
addr = 0;
file = 1;
line = 1;
- /* column = 0; */
+ column = 0;
is_stmt = default_is_stmt;
- /* end_sequence = 0; */
- /* isa = 0; */
+ 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",
+ fprintf(stderr, "Unsupported operation in %s\n",
binary_filename);
break;
case DW_LNE_set_discriminator:
@@ -387,7 +360,7 @@ parse_debug_line_cu(int num_traces, void **traces,
uleb128(&p);
break;
default:
- kprintf("Unknown extended opcode: %d in %s\n",
+ fprintf(stderr, "Unknown extended opcode: %d in %s\n",
op, binary_filename);
}
break;
@@ -415,7 +388,7 @@ parse_debug_line(int num_traces, void **traces,
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",
+ fprintf(stderr, "Unexpected size of .debug_line in %s\n",
binary_filename);
}
}
@@ -477,39 +450,22 @@ fill_lines(int num_traces, void **traces, char **syms, int check_debuglink,
if (filesize < 0) {
int e = errno;
close(fd);
- kprintf("lseek: %s\n", strerror(e));
+ fprintf(stderr, "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);
+ file = (char *)mmap(NULL, 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);
+ fprintf(stderr, "mmap: %s\n", strerror(e));
return;
}
current_line->fd = fd;
current_line->mapped = file;
- current_line->mapped_size = (size_t)filesize;
+ current_line->mapped_size = filesize;
for (i = 0; i < num_traces; i++) {
const char *path;
@@ -520,6 +476,7 @@ fill_lines(int num_traces, void **traces, char **syms, int check_debuglink,
}
}
+ ehdr = (ElfW(Ehdr) *)file;
shdr = (ElfW(Shdr) *)(file + ehdr->e_shoff);
shstr_shdr = shdr + ehdr->e_shstrndx;
@@ -618,22 +575,23 @@ rb_dump_backtrace_with_lines(int num_traces, void **trace, char **syms)
fill_lines(num_traces, trace, syms, 1, &lines[i], lines);
}
+ /* fprintf may not be async-signal safe */
for (i = 0; i < num_traces; i++) {
line_info_t *line = &lines[i];
if (line->line > 0) {
+ fprintf(stderr, "%s ", syms[i]);
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);
+ fprintf(stderr, "%s/", line->dirname);
}
+ fprintf(stderr, "%s", line->filename);
} else {
- kprintf("%s ???:%d\n", syms[i], line->line);
+ fprintf(stderr, "???");
}
+ fprintf(stderr, ":%d\n", line->line);
} else {
- kprintf("%s\n", syms[i]);
+ fprintf(stderr, "%s\n", syms[i]);
}
}
@@ -647,436 +605,6 @@ rb_dump_backtrace_with_lines(int num_traces, void **trace, char **syms)
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/array.c b/array.c
index 7760e3313e..e427cb3320 100644
--- a/array.c
+++ b/array.c
@@ -16,17 +16,17 @@
#include "ruby/st.h"
#include "ruby/encoding.h"
#include "internal.h"
-#include "probes.h"
-#include "id.h"
#ifndef ARRAY_DEBUG
# define NDEBUG
#endif
#include <assert.h>
+#define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
+
VALUE rb_cArray;
-static ID id_cmp, id_div, id_power;
+static ID id_cmp;
#define ARY_DEFAULT_SIZE 16
#define ARY_MAX_SIZE (LONG_MAX / (int)sizeof(VALUE))
@@ -39,14 +39,6 @@ rb_mem_clear(register VALUE *mem, register long size)
}
}
-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)
{
@@ -55,46 +47,6 @@ memfill(register VALUE *mem, register long size, register VALUE val)
}
}
-static void
-ary_memfill(VALUE ary, long beg, long size, VALUE val)
-{
- RARRAY_PTR_USE(ary, ptr, {
- memfill(ptr + beg, size, val);
- RB_OBJ_WRITTEN(ary, Qundef, val);
- });
-}
-
-static void
-ary_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 {
- 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)
@@ -109,11 +61,11 @@ ary_memcpy(VALUE ary, long beg, long argc, const VALUE *argv)
(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)); \
+ assert(!OBJ_FROZEN(a)); \
FL_SET((a), RARRAY_EMBED_FLAG); \
} while (0)
#define FL_UNSET_EMBED(ary) FL_UNSET((ary), RARRAY_EMBED_FLAG|RARRAY_EMBED_LEN_MASK)
@@ -174,18 +126,15 @@ ary_memcpy(VALUE ary, long beg, long argc, const VALUE *argv)
#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_); \
+ assert(!ARY_EMBED_P(ary)); \
+ assert(ARY_SHARED_P(ary)); \
+ assert(ARY_SHARED_ROOT_P(value)); \
+ 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); \
@@ -211,35 +160,23 @@ ary_resize_capa(VALUE ary, long capacity)
ARY_SET_HEAP_LEN(ary, len);
}
else {
- SIZED_REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, capacity, RARRAY(ary)->as.heap.aux.capa);
+ REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, (capacity));
}
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);
+ VALUE *ptr = RARRAY_PTR(ary);
+ if (len > capacity) len = capacity;
+ MEMCPY(RARRAY(ary)->as.ary, ptr, VALUE, len);
FL_SET_EMBED(ary);
ARY_SET_LEN(ary, len);
- ruby_xfree((VALUE *)ptr);
+ xfree(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)
{
@@ -308,6 +245,8 @@ static inline void
rb_ary_modify_check(VALUE ary)
{
rb_check_frozen(ary);
+ if (!OBJ_UNTRUSTED(ary) && rb_safe_level() >= 4)
+ rb_raise(rb_eSecurityError, "Insecure: can't modify array");
}
void
@@ -315,84 +254,26 @@ 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);
+ long len = RARRAY_LEN(ary);
if (len <= RARRAY_EMBED_LEN_MAX) {
- const VALUE *ptr = ARY_HEAP_PTR(ary);
+ VALUE *ptr = ARY_HEAP_PTR(ary);
+ VALUE shared = ARY_SHARED(ary);
FL_UNSET_SHARED(ary);
FL_SET_EMBED(ary);
- MEMCPY((VALUE *)ARY_EMBED_PTR(ary), ptr, VALUE, len);
+ MEMCPY(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);
+ MEMCPY(ptr, RARRAY_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)
{
@@ -403,8 +284,8 @@ rb_ary_freeze(VALUE 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?
+ * Return <code>true</code> if this array is frozen (or temporarily frozen
+ * while being sorted).
*/
static VALUE
@@ -414,50 +295,21 @@ rb_ary_frozen_p(VALUE ary)
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());
- }
+ NEWOBJ(ary, struct RArray);
+ OBJSETUP(ary, klass, T_ARRAY);
+ FL_SET_EMBED((VALUE)ary);
+ ARY_SET_EMBED_LEN((VALUE)ary, 0);
- return ary_alloc(klass);
+ return (VALUE)ary;
}
static VALUE
ary_new(VALUE klass, long capa)
{
- VALUE ary,*ptr;
+ VALUE ary;
if (capa < 0) {
rb_raise(rb_eArgError, "negative array size (or size too big)");
@@ -465,40 +317,34 @@ ary_new(VALUE klass, long capa)
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());
- }
-
+ ary = ary_alloc(klass);
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_PTR(ary, ALLOC_N(VALUE, capa));
ARY_SET_CAPA(ary, capa);
ARY_SET_HEAP_LEN(ary, 0);
}
- else {
- ary = ary_alloc(klass);
- }
return ary;
}
VALUE
-rb_ary_new_capa(long capa)
+rb_ary_new2(long capa)
{
return ary_new(rb_cArray, capa);
}
+
VALUE
rb_ary_new(void)
{
return rb_ary_new2(RARRAY_EMBED_LEN_MAX);
}
+#include <stdarg.h>
+
VALUE
-rb_ary_new_from_args(long n, ...)
+rb_ary_new3(long n, ...)
{
va_list ar;
VALUE ary;
@@ -508,7 +354,7 @@ rb_ary_new_from_args(long n, ...)
va_start(ar, n);
for (i=0; i<n; i++) {
- RARRAY_ASET(ary, i, va_arg(ar, VALUE));
+ RARRAY_PTR(ary)[i] = va_arg(ar, VALUE);
}
va_end(ar);
@@ -517,13 +363,13 @@ rb_ary_new_from_args(long n, ...)
}
VALUE
-rb_ary_new_from_values(long n, const VALUE *elts)
+rb_ary_new4(long n, const VALUE *elts)
{
VALUE ary;
ary = rb_ary_new2(n);
if (n > 0 && elts) {
- ary_memcpy(ary, 0, n, elts);
+ MEMCPY(RARRAY_PTR(ary), elts, VALUE, n);
ARY_SET_LEN(ary, n);
}
@@ -540,7 +386,7 @@ void
rb_ary_free(VALUE ary)
{
if (ARY_OWNS_HEAP_P(ary)) {
- ruby_sized_xfree((void *)ARY_HEAP_PTR(ary), ARY_HEAP_SIZE(ary));
+ xfree(ARY_HEAP_PTR(ary));
}
}
@@ -574,19 +420,18 @@ ary_make_shared(VALUE ary)
return ary;
}
else if (OBJ_FROZEN(ary)) {
- ary_shrink_capa(ary);
+ ary_resize_capa(ary, ARY_HEAP_LEN(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 */
+ NEWOBJ(shared, struct RArray);
+ OBJSETUP(shared, 0, T_ARRAY);
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);
+ ARY_SET_LEN((VALUE)shared, RARRAY_LEN(ary));
+ ARY_SET_PTR((VALUE)shared, RARRAY_PTR(ary));
FL_SET_SHARED_ROOT(shared);
ARY_SET_SHARED_NUM((VALUE)shared, 1);
FL_SET_SHARED(ary);
@@ -596,15 +441,14 @@ ary_make_shared(VALUE ary)
}
}
+
static VALUE
ary_make_substitution(VALUE ary)
{
- long len = RARRAY_LEN(ary);
-
- if (len <= RARRAY_EMBED_LEN_MAX) {
- VALUE subst = rb_ary_new2(len);
- ary_memcpy(subst, 0, len, RARRAY_CONST_PTR(ary));
- ARY_SET_EMBED_LEN(subst, len);
+ if (RARRAY_LEN(ary) <= RARRAY_EMBED_LEN_MAX) {
+ VALUE subst = rb_ary_new2(RARRAY_LEN(ary));
+ MEMCPY(ARY_EMBED_PTR(subst), RARRAY_PTR(ary), VALUE, RARRAY_LEN(ary));
+ ARY_SET_EMBED_LEN(subst, RARRAY_LEN(ary));
return subst;
}
else {
@@ -719,8 +563,8 @@ rb_ary_initialize(int argc, VALUE *argv, VALUE ary)
rb_ary_modify(ary);
if (argc == 0) {
- if (ARY_OWNS_HEAP_P(ary) && RARRAY_CONST_PTR(ary) != 0) {
- ruby_sized_xfree((void *)RARRAY_CONST_PTR(ary), ARY_HEAP_SIZE(ary));
+ if (ARY_OWNS_HEAP_P(ary) && RARRAY_PTR(ary)) {
+ xfree(RARRAY_PTR(ary));
}
rb_ary_unshare_safe(ary);
FL_SET_EMBED(ary);
@@ -760,26 +604,27 @@ rb_ary_initialize(int argc, VALUE *argv, VALUE ary)
}
}
else {
- ary_memfill(ary, 0, len, val);
+ memfill(RARRAY_PTR(ary), len, val);
ARY_SET_LEN(ary, len);
}
return ary;
}
+
/*
- * Returns a new array populated with the given objects.
- *
- * Array.[]( 1, 'a', /^A/ ) # => [1, "a", /^A/]
- * Array[ 1, 'a', /^A/ ] # => [1, "a", /^A/]
- * [ 1, 'a', /^A/ ] # => [1, "a", /^A/]
- */
+* Returns a new array populated with the given objects.
+*
+* Array.[]( 1, 'a', /^A/ )
+* Array[ 1, 'a', /^A/ ]
+* [ 1, 'a', /^A/ ]
+*/
static VALUE
rb_ary_s_create(int argc, VALUE *argv, VALUE klass)
{
VALUE ary = ary_new(klass, argc);
if (argc > 0 && argv) {
- ary_memcpy(ary, 0, argc, argv);
+ MEMCPY(RARRAY_PTR(ary), argv, VALUE, argc);
ARY_SET_LEN(ary, argc);
}
@@ -789,13 +634,11 @@ rb_ary_s_create(int argc, VALUE *argv, VALUE klass)
void
rb_ary_store(VALUE ary, long idx, VALUE val)
{
- long len = RARRAY_LEN(ary);
-
if (idx < 0) {
- idx += len;
+ idx += RARRAY_LEN(ary);
if (idx < 0) {
rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
- idx - len, -len);
+ idx - RARRAY_LEN(ary), -RARRAY_LEN(ary));
}
}
else if (idx >= ARY_MAX_SIZE) {
@@ -806,14 +649,15 @@ rb_ary_store(VALUE ary, long idx, VALUE val)
if (idx >= ARY_CAPA(ary)) {
ary_double_capa(ary, idx);
}
- if (idx > len) {
- ary_mem_clear(ary, len, idx - len + 1);
+ if (idx > RARRAY_LEN(ary)) {
+ rb_mem_clear(RARRAY_PTR(ary) + RARRAY_LEN(ary),
+ idx-RARRAY_LEN(ary) + 1);
}
- if (idx >= len) {
+ if (idx >= RARRAY_LEN(ary)) {
ARY_SET_LEN(ary, idx + 1);
}
- RARRAY_ASET(ary, idx, val);
+ RARRAY_PTR(ary)[idx] = val;
}
static VALUE
@@ -825,7 +669,7 @@ ary_make_partial(VALUE ary, VALUE klass, long offset, long len)
if (len <= RARRAY_EMBED_LEN_MAX) {
VALUE result = ary_alloc(klass);
- ary_memcpy(result, 0, len, RARRAY_CONST_PTR(ary) + offset);
+ MEMCPY(ARY_EMBED_PTR(result), RARRAY_PTR(ary) + offset, VALUE, len);
ARY_SET_EMBED_LEN(result, len);
return result;
}
@@ -834,7 +678,7 @@ ary_make_partial(VALUE ary, VALUE klass, long offset, long len)
FL_UNSET_EMBED(result);
shared = ary_make_shared(ary);
- ARY_SET_PTR(result, RARRAY_CONST_PTR(ary));
+ ARY_SET_PTR(result, RARRAY_PTR(ary));
ARY_SET_LEN(result, RARRAY_LEN(ary));
rb_ary_set_shared(result, shared);
@@ -861,24 +705,24 @@ ary_take_first_or_last(int argc, VALUE *argv, VALUE ary, enum ary_take_pos_flags
{
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;
+ if (n > RARRAY_LEN(ary)) {
+ n = RARRAY_LEN(ary);
}
else if (n < 0) {
rb_raise(rb_eArgError, "negative array size");
}
if (last) {
- offset = len - n;
+ offset = RARRAY_LEN(ary) - n;
}
return ary_make_partial(ary, rb_cArray, offset, n);
}
+static VALUE rb_ary_push_1(VALUE ary, VALUE item);
+
/*
* call-seq:
* ary << obj -> ary
@@ -895,22 +739,20 @@ ary_take_first_or_last(int argc, VALUE *argv, VALUE ary, enum ary_take_pos_flags
VALUE
rb_ary_push(VALUE ary, VALUE item)
{
- long idx = RARRAY_LEN(ary);
-
- ary_ensure_room_for_push(ary, 1);
- RARRAY_ASET(ary, idx, item);
- ARY_SET_LEN(ary, idx + 1);
- return ary;
+ rb_ary_modify(ary);
+ return rb_ary_push_1(ary, item);
}
-VALUE
-rb_ary_cat(VALUE ary, const VALUE *ptr, long len)
+static VALUE
+rb_ary_push_1(VALUE ary, VALUE item)
{
- long oldlen = RARRAY_LEN(ary);
+ long idx = RARRAY_LEN(ary);
- ary_ensure_room_for_push(ary, len);
- ary_memcpy(ary, oldlen, len, ptr);
- ARY_SET_LEN(ary, oldlen + len);
+ if (idx >= ARY_CAPA(ary)) {
+ ary_double_capa(ary, idx);
+ }
+ RARRAY_PTR(ary)[idx] = item;
+ ARY_SET_LEN(ary, idx + 1);
return ary;
}
@@ -918,22 +760,23 @@ rb_ary_cat(VALUE ary, const VALUE *ptr, long len)
* call-seq:
* ary.push(obj, ... ) -> ary
*
- * Append --- Pushes the given object(s) on to the end of this array. This
+ * Append---Pushes the given object(s) on to the end of this array. This
* expression returns the array itself, so several appends
- * may be chained together. See also Array#pop for the opposite
- * effect.
+ * may be chained together.
*
* a = [ "a", "b", "c" ]
* a.push("d", "e", "f")
* #=> ["a", "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);
+ rb_ary_modify(ary);
+ while (argc--) {
+ rb_ary_push_1(ary, *argv++);
+ }
+ return ary;
}
VALUE
@@ -941,17 +784,16 @@ rb_ary_pop(VALUE ary)
{
long n;
rb_ary_modify_check(ary);
- n = RARRAY_LEN(ary);
- if (n == 0) return Qnil;
+ if (RARRAY_LEN(ary) == 0) return Qnil;
if (ARY_OWNS_HEAP_P(ary) &&
- n * 3 < ARY_CAPA(ary) &&
+ RARRAY_LEN(ary) * 3 < ARY_CAPA(ary) &&
ARY_CAPA(ary) > ARY_DEFAULT_SIZE)
{
- ary_resize_capa(ary, n * 2);
+ ary_resize_capa(ary, RARRAY_LEN(ary) * 2);
}
- --n;
+ n = RARRAY_LEN(ary)-1;
ARY_SET_LEN(ary, n);
- return RARRAY_AREF(ary, n);
+ return RARRAY_PTR(ary)[n];
}
/*
@@ -960,11 +802,10 @@ rb_ary_pop(VALUE ary)
* ary.pop(n) -> new_ary
*
* Removes the last element from +self+ and returns it, or
- * +nil+ if the array is empty.
+ * <code>nil</code> 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.
+ * 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.
*
* a = [ "a", "b", "c", "d" ]
* a.pop #=> "d"
@@ -991,26 +832,23 @@ VALUE
rb_ary_shift(VALUE ary)
{
VALUE top;
- long len = RARRAY_LEN(ary);
rb_ary_modify_check(ary);
- if (len == 0) return Qnil;
- top = RARRAY_AREF(ary, 0);
+ if (RARRAY_LEN(ary) == 0) return Qnil;
+ top = RARRAY_PTR(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 */
+ if (RARRAY_LEN(ary) < ARY_DEFAULT_SIZE) {
+ MEMMOVE(RARRAY_PTR(ary), RARRAY_PTR(ary)+1, VALUE, RARRAY_LEN(ary)-1);
ARY_INCREASE_LEN(ary, -1);
return top;
}
assert(!ARY_EMBED_P(ary)); /* ARY_EMBED_LEN_MAX < ARY_DEFAULT_SIZE */
- RARRAY_ASET(ary, 0, Qnil);
+ RARRAY_PTR(ary)[0] = Qnil;
ary_make_shared(ary);
}
- else if (ARY_SHARED_OCCUPIED(ARY_SHARED(ary))) {
- RARRAY_ASET(ary, 0, Qnil);
+ else if (ARY_SHARED_NUM(ARY_SHARED(ary)) == 1) {
+ RARRAY_PTR(ary)[0] = Qnil;
}
ARY_INCREASE_PTR(ary, 1); /* shift ptr */
ARY_INCREASE_LEN(ary, -1);
@@ -1023,14 +861,12 @@ rb_ary_shift(VALUE ary)
* 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
+ * Returns the first element of +self+ and removes it (shifting all
+ * other elements down by one). Returns <code>nil</code> if the array
* is empty.
*
- * If a number +n+ is given, returns an array of the first +n+ elements
- * (or less) just like <code>array.slice!(0, n)</code> does. With +ary+
- * containing only the remainder elements, not including what was shifted to
- * +new_ary+. See also Array#unshift for the opposite effect.
+ * 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.
*
* args = [ "-m", "-q", "filename" ]
* args.shift #=> "-m"
@@ -1055,78 +891,25 @@ rb_ary_shift_m(int argc, VALUE *argv, VALUE 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);
+ if (ARY_SHARED_NUM(ARY_SHARED(ary)) == 1) {
+ rb_mem_clear(RARRAY_PTR(ary), n);
}
ARY_INCREASE_PTR(ary, n);
}
else {
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr, ptr + n, VALUE, RARRAY_LEN(ary)-n);
- }); /* WB: no new reference */
+ MEMMOVE(RARRAY_PTR(ary), RARRAY_PTR(ary)+n, VALUE, RARRAY_LEN(ary)-n);
}
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;
- }
- }
-
- rb_ary_modify(ary);
- capa = ARY_CAPA(ary);
- if (capa - (capa >> 6) <= new_len) {
- ary_double_capa(ary, new_len);
- }
-
- /* use shared array for big "queues" */
- if (new_len > ARY_DEFAULT_SIZE * 4) {
- /* make a room for unshifted items */
- capa = ARY_CAPA(ary);
- ary_make_shared(ary);
-
- 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.
+ * Prepends objects to the front of +self+,
+ * moving other elements upwards.
*
* a = [ "b", "c", "d" ]
* a.unshift("a") #=> ["a", "b", "c", "d"]
@@ -1136,16 +919,19 @@ ary_ensure_room_for_unshift(VALUE ary, int argc)
static VALUE
rb_ary_unshift_m(int argc, VALUE *argv, VALUE ary)
{
- long len = RARRAY_LEN(ary);
+ long len;
- if (argc == 0) {
- rb_ary_modify_check(ary);
- return ary;
+ rb_ary_modify(ary);
+ if (argc == 0) return ary;
+ if (ARY_CAPA(ary) <= (len = RARRAY_LEN(ary)) + argc) {
+ ary_double_capa(ary, len + argc);
}
- ary_ensure_room_for_unshift(ary, argc);
- ary_memcpy(ary, 0, argc, argv);
- ARY_SET_LEN(ary, len + argc);
+ /* sliding items */
+ MEMMOVE(RARRAY_PTR(ary) + argc, RARRAY_PTR(ary), VALUE, len);
+ MEMCPY(RARRAY_PTR(ary), argv, VALUE, argc);
+ ARY_INCREASE_LEN(ary, argc);
+
return ary;
}
@@ -1159,12 +945,11 @@ rb_ary_unshift(VALUE ary, VALUE item)
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) {
+ if (RARRAY_LEN(ary) == 0) return Qnil;
+ if (offset < 0 || RARRAY_LEN(ary) <= offset) {
return Qnil;
}
- return RARRAY_AREF(ary, offset);
+ return RARRAY_PTR(ary)[offset];
}
VALUE
@@ -1180,13 +965,12 @@ VALUE
rb_ary_subseq(VALUE ary, long beg, long len)
{
VALUE klass;
- long alen = RARRAY_LEN(ary);
- if (beg > alen) return Qnil;
+ if (beg > RARRAY_LEN(ary)) return Qnil;
if (beg < 0 || len < 0) return Qnil;
- if (alen < len || alen < beg + len) {
- len = alen - beg;
+ if (RARRAY_LEN(ary) < len || RARRAY_LEN(ary) < beg + len) {
+ len = RARRAY_LEN(ary) - beg;
}
klass = rb_obj_class(ary);
if (len == 0) return ary_new(klass, 0);
@@ -1203,16 +987,13 @@ rb_ary_subseq(VALUE ary, long beg, long len)
* 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.
+ * Element Reference---Returns the element at _index_,
+ * or returns a subarray starting at _start_ and
+ * continuing for _length_ elements, or returns a subarray
+ * specified by _range_.
+ * Negative indices count backward from the end of the
+ * array (-1 is the last element). Returns +nil+ if the index
+ * (or starting index) are out of range.
*
* a = [ "a", "b", "c", "d", "e" ]
* a[2] + a[0] + a[1] #=> "cab"
@@ -1224,7 +1005,6 @@ rb_ary_subseq(VALUE ary, long beg, long len)
* a[-3, 3] #=> [ "c", "d", "e" ]
* # special cases
* a[5] #=> nil
- * a[6, 1] #=> nil
* a[5, 1] #=> []
* a[5..10] #=> []
*
@@ -1245,7 +1025,7 @@ rb_ary_aref(int argc, VALUE *argv, VALUE ary)
return rb_ary_subseq(ary, beg, len);
}
if (argc != 1) {
- rb_scan_args(argc, argv, "11", NULL, NULL);
+ rb_scan_args(argc, argv, "11", 0, 0);
}
arg = argv[0];
/* special case - speeding up */
@@ -1268,9 +1048,9 @@ rb_ary_aref(int argc, VALUE *argv, VALUE ary)
* 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#[].
+ * Returns the element at _index_. A
+ * negative index counts from the end of +self+. Returns +nil+
+ * if the index is out of range. See also <code>Array#[]</code>.
*
* a = [ "a", "b", "c", "d", "e" ]
* a.at(0) #=> "a"
@@ -1289,9 +1069,8 @@ rb_ary_at(VALUE ary, VALUE pos)
* 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.
+ * If the array is empty, the first form returns <code>nil</code>, and the
+ * second form returns an empty array.
*
* a = [ "q", "r", "s", "t" ]
* a.first #=> "q"
@@ -1303,7 +1082,7 @@ rb_ary_first(int argc, VALUE *argv, VALUE ary)
{
if (argc == 0) {
if (RARRAY_LEN(ary) == 0) return Qnil;
- return RARRAY_AREF(ary, 0);
+ return RARRAY_PTR(ary)[0];
}
else {
return ary_take_first_or_last(argc, argv, ary, ARY_TAKE_FIRST);
@@ -1316,9 +1095,7 @@ rb_ary_first(int argc, VALUE *argv, VALUE ary)
* 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.
+ * the first form returns <code>nil</code>.
*
* a = [ "w", "x", "y", "z" ]
* a.last #=> "z"
@@ -1329,9 +1106,8 @@ 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);
+ if (RARRAY_LEN(ary) == 0) return Qnil;
+ return RARRAY_PTR(ary)[RARRAY_LEN(ary)-1];
}
else {
return ary_take_first_or_last(argc, argv, ary, ARY_TAKE_LAST);
@@ -1341,24 +1117,21 @@ rb_ary_last(int argc, VALUE *argv, VALUE ary)
/*
* call-seq:
* ary.fetch(index) -> obj
- * ary.fetch(index, default) -> obj
- * ary.fetch(index) { |index| block } -> 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.
+ * Tries to return the element at position <i>index</i>. If the index
+ * lies outside the array, the first form throws an
+ * <code>IndexError</code> exception, the second form returns
+ * <i>default</i>, and the third form returns the value of invoking
+ * the block, passing in the index. Negative values of <i>index</i>
+ * count from the end of the array.
*
* a = [ 11, 22, 33, 44 ]
* a.fetch(1) #=> 22
* a.fetch(-1) #=> 44
* a.fetch(4, 'cat') #=> "cat"
- * a.fetch(100) { |i| puts "#{i} is out of bounds" }
- * #=> "100 is out of bounds"
+ * a.fetch(4) { |i| i*i } #=> 16
*/
static VALUE
@@ -1386,90 +1159,70 @@ rb_ary_fetch(int argc, VALUE *argv, VALUE ary)
}
return ifnone;
}
- return RARRAY_AREF(ary, idx);
+ return RARRAY_PTR(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.
+ * ary.index(obj) -> int or nil
+ * ary.index {|item| block} -> int or nil
+ * ary.index -> an_enumerator
*
- * See also Array#rindex.
+ * Returns the index of the first object in +self+ such that the object is
+ * <code>==</code> to <i>obj</i>. If a block is given instead of an
+ * argument, returns index of first object for which <em>block</em> is true.
+ * Returns <code>nil</code> if no match is found.
+ * See also <code>Array#rindex</code>.
*
- * An Enumerator is returned if neither a block nor argument is given.
+ * If neither block nor argument is given, an enumerator is returned instead.
*
* a = [ "a", "b", "c" ]
- * a.index("b") #=> 1
- * a.index("z") #=> nil
- * a.index { |x| x == "b" } #=> 1
+ * a.index("b") #=> 1
+ * a.index("z") #=> nil
+ * a.index{|x|x=="b"} #=> 1
+ *
+ * This is an alias of <code>#find_index</code>.
*/
static VALUE
rb_ary_index(int argc, VALUE *argv, VALUE ary)
{
- const VALUE *ptr;
VALUE val;
- long i, len;
+ long i;
if (argc == 0) {
RETURN_ENUMERATOR(ary, 0, 0);
for (i=0; i<RARRAY_LEN(ary); i++) {
- if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) {
+ if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) {
return LONG2NUM(i);
}
}
return Qnil;
}
- rb_check_arity(argc, 0, 1);
- val = argv[0];
+ rb_scan_args(argc, argv, "1", &val);
if (rb_block_given_p())
rb_warn("given block not used");
- len = RARRAY_LEN(ary);
- ptr = RARRAY_CONST_PTR(ary);
- for (i=0; i<len; i++) {
- VALUE e = ptr[i];
- switch (rb_equal_opt(e, val)) {
- case Qundef:
- if (!rb_equal(e, val)) break;
- case Qtrue:
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ if (rb_equal(RARRAY_PTR(ary)[i], val))
return LONG2NUM(i);
- case Qfalse:
- continue;
- }
- len = RARRAY_LEN(ary);
- ptr = RARRAY_CONST_PTR(ary);
}
return Qnil;
}
/*
* call-seq:
- * ary.rindex(obj) -> int or nil
- * ary.rindex { |item| block } -> int or nil
- * ary.rindex -> Enumerator
- *
- * Returns the _index_ of the last object in +self+ <code>==</code> to +obj+.
+ * ary.rindex(obj) -> int or nil
+ * ary.rindex {|item| block} -> int or nil
+ * ary.rindex -> an_enumerator
*
- * 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 the index of the last object in +self+
+ * <code>==</code> to <i>obj</i>. If a block is given instead of an
+ * argument, returns index of first object for which <em>block</em> is
+ * true, starting from the last object.
+ * Returns <code>nil</code> if no match is found.
+ * See also <code>Array#index</code>.
*
- * Returns +nil+ if no match is found.
- *
- * See also Array#index.
- *
- * If neither block nor argument is given, an Enumerator is returned instead.
+ * If neither block nor argument is given, an enumerator is returned instead.
*
* a = [ "a", "b", "b", "b", "c" ]
* a.rindex("b") #=> 3
@@ -1480,40 +1233,29 @@ rb_ary_index(int argc, VALUE *argv, VALUE ary)
static VALUE
rb_ary_rindex(int argc, VALUE *argv, VALUE ary)
{
- const VALUE *ptr;
VALUE val;
- long i = RARRAY_LEN(ary), len;
+ long i = RARRAY_LEN(ary);
if (argc == 0) {
RETURN_ENUMERATOR(ary, 0, 0);
while (i--) {
- if (RTEST(rb_yield(RARRAY_AREF(ary, i))))
+ if (RTEST(rb_yield(RARRAY_PTR(ary)[i])))
return LONG2NUM(i);
- if (i > (len = RARRAY_LEN(ary))) {
- i = len;
+ if (i > RARRAY_LEN(ary)) {
+ i = RARRAY_LEN(ary);
}
}
return Qnil;
}
- rb_check_arity(argc, 0, 1);
- val = argv[0];
+ rb_scan_args(argc, argv, "1", &val);
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:
+ if (rb_equal(RARRAY_PTR(ary)[i], val))
return LONG2NUM(i);
- case Qfalse:
- continue;
+ if (i > RARRAY_LEN(ary)) {
+ i = RARRAY_LEN(ary);
}
- if (i > (len = RARRAY_LEN(ary))) {
- i = len;
- }
- ptr = RARRAY_CONST_PTR(ary);
}
return Qnil;
}
@@ -1531,19 +1273,17 @@ static void
rb_ary_splice(VALUE ary, long beg, long len, VALUE rpl)
{
long rlen;
- long olen;
if (len < 0) rb_raise(rb_eIndexError, "negative length (%ld)", len);
- olen = RARRAY_LEN(ary);
if (beg < 0) {
- beg += olen;
+ beg += RARRAY_LEN(ary);
if (beg < 0) {
rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
- beg - olen, -olen);
+ beg - RARRAY_LEN(ary), -RARRAY_LEN(ary));
}
}
- if (olen < len || olen < beg + len) {
- len = olen - beg;
+ if (RARRAY_LEN(ary) < len || RARRAY_LEN(ary) < beg + len) {
+ len = RARRAY_LEN(ary) - beg;
}
if (rpl == Qundef) {
@@ -1552,55 +1292,39 @@ rb_ary_splice(VALUE ary, long beg, long len, VALUE rpl)
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) {
+ rb_ary_modify(ary);
+ if (beg >= RARRAY_LEN(ary)) {
if (beg > ARY_MAX_SIZE - rlen) {
rb_raise(rb_eIndexError, "index %ld too big", beg);
}
- ary_ensure_room_for_push(ary, rlen-len); /* len is 0 or negative */
len = beg + rlen;
- ary_mem_clear(ary, olen, beg - olen);
+ if (len >= ARY_CAPA(ary)) {
+ ary_double_capa(ary, len);
+ }
+ rb_mem_clear(RARRAY_PTR(ary) + RARRAY_LEN(ary), beg - RARRAY_LEN(ary));
if (rlen > 0) {
- ary_memcpy(ary, beg, rlen, RARRAY_CONST_PTR(rpl));
+ MEMCPY(RARRAY_PTR(ary) + beg, RARRAY_PTR(rpl), VALUE, rlen);
}
ARY_SET_LEN(ary, len);
}
else {
long alen;
- rb_ary_modify(ary);
- alen = olen + rlen - len;
+ alen = RARRAY_LEN(ary) + rlen - len;
if (alen >= ARY_CAPA(ary)) {
ary_double_capa(ary, alen);
}
if (len != rlen) {
- RARRAY_PTR_USE(ary, ptr,
- MEMMOVE(ptr + beg + rlen, ptr + beg + len,
- VALUE, olen - (beg + len)));
+ MEMMOVE(RARRAY_PTR(ary) + beg + rlen, RARRAY_PTR(ary) + beg + len,
+ VALUE, RARRAY_LEN(ary) - (beg + len));
ARY_SET_LEN(ary, alen);
}
if (rlen > 0) {
- MEMMOVE(RARRAY_PTR(ary) + beg, RARRAY_CONST_PTR(rpl), VALUE, rlen);
+ MEMMOVE(RARRAY_PTR(ary) + beg, RARRAY_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);
}
/*!
@@ -1626,8 +1350,8 @@ rb_ary_resize(VALUE ary, long len)
if (len >= ARY_CAPA(ary)) {
ary_double_capa(ary, len);
}
- ary_mem_clear(ary, olen, len - olen);
- ARY_SET_LEN(ary, len);
+ rb_mem_clear(RARRAY_PTR(ary) + olen, len - olen);
+ ARY_SET_LEN(ary, len);
}
else if (ARY_EMBED_P(ary)) {
ARY_SET_EMBED_LEN(ary, len);
@@ -1636,12 +1360,12 @@ rb_ary_resize(VALUE ary, long len)
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 */
+ MEMCPY(ARY_EMBED_PTR(ary), tmp, VALUE, len);
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);
+ REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, len);
ARY_SET_CAPA(ary, len);
}
ARY_SET_HEAP_LEN(ary, len);
@@ -1655,21 +1379,16 @@ rb_ary_resize(VALUE ary, long len)
* 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.
+ * Element Assignment---Sets the element at _index_,
+ * or replaces a subarray starting at _start_ and
+ * continuing for _length_ elements, or replaces a subarray
+ * specified by _range_. If indices are greater than
+ * the current capacity of the array, the array grows
+ * automatically. A negative indices will count backward
+ * from the end of the array. Inserts elements if _length_ is
+ * zero. An +IndexError+ is raised if a negative index points
+ * past the beginning of the array. See also
+ * <code>Array#push</code>, and <code>Array#unshift</code>.
*
* a = Array.new
* a[4] = "4"; #=> [nil, nil, nil, nil, "4"]
@@ -1680,8 +1399,6 @@ rb_ary_resize(VALUE ary, long len)
* 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
@@ -1696,7 +1413,9 @@ rb_ary_aset(int argc, VALUE *argv, VALUE ary)
rb_ary_splice(ary, beg, len, argv[2]);
return argv[2];
}
- rb_check_arity(argc, 2, 2);
+ if (argc != 2) {
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)", argc);
+ }
rb_ary_modify_check(ary);
if (FIXNUM_P(argv[0])) {
offset = FIX2LONG(argv[0]);
@@ -1718,10 +1437,8 @@ fixnum:
* call-seq:
* ary.insert(index, obj...) -> ary
*
- * Inserts the given values before the element with the given +index+.
- *
- * Negative indices count backwards from the end of the array, where +-1+ is
- * the last element.
+ * Inserts the given values before the element with the given index
+ * (which may be negative).
*
* a = %w{ a b c d }
* a.insert(2, 99) #=> ["a", "b", 99, "c", "d"]
@@ -1733,7 +1450,9 @@ rb_ary_insert(int argc, VALUE *argv, VALUE ary)
{
long pos;
- rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS);
+ if (argc < 1) {
+ rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
+ }
rb_ary_modify_check(ary);
if (argc == 1) return ary;
pos = NUM2LONG(argv[0]);
@@ -1747,24 +1466,15 @@ rb_ary_insert(int argc, VALUE *argv, VALUE ary)
return ary;
}
-static VALUE
-rb_ary_length(VALUE ary);
-
-static VALUE
-ary_enum_length(VALUE ary, VALUE args, VALUE eobj)
-{
- return rb_ary_length(ary);
-}
-
/*
* call-seq:
- * ary.each { |item| block } -> ary
- * ary.each -> Enumerator
+ * ary.each {|item| block } -> ary
+ * ary.each -> an_enumerator
*
- * Calls the given block once for each element in +self+, passing that element
- * as a parameter.
+ * Calls <i>block</i> once for each element in +self+, passing that
+ * element as a parameter.
*
- * An Enumerator is returned if no block is given.
+ * If no block is given, an enumerator is returned instead.
*
* a = [ "a", "b", "c" ]
* a.each {|x| print x, " -- " }
@@ -1780,22 +1490,23 @@ rb_ary_each(VALUE array)
long i;
volatile VALUE ary = array;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ RETURN_ENUMERATOR(ary, 0, 0);
for (i=0; i<RARRAY_LEN(ary); i++) {
- rb_yield(RARRAY_AREF(ary, i));
+ rb_yield(RARRAY_PTR(ary)[i]);
}
return ary;
}
/*
* call-seq:
- * ary.each_index { |index| block } -> ary
- * ary.each_index -> Enumerator
+ * ary.each_index {|index| block } -> ary
+ * ary.each_index -> an_enumerator
+ *
+ * Same as <code>Array#each</code>, but passes the index of the element
+ * instead of the element itself.
*
- * Same as Array#each, but passes the +index+ of the element instead of the
- * element itself.
+ * If no block is given, an enumerator is returned instead.
*
- * An Enumerator is returned if no block is given.
*
* a = [ "a", "b", "c" ]
* a.each_index {|x| print x, " -- " }
@@ -1809,7 +1520,7 @@ static VALUE
rb_ary_each_index(VALUE ary)
{
long i;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ RETURN_ENUMERATOR(ary, 0, 0);
for (i=0; i<RARRAY_LEN(ary); i++) {
rb_yield(LONG2NUM(i));
@@ -1819,10 +1530,11 @@ rb_ary_each_index(VALUE ary)
/*
* call-seq:
- * ary.reverse_each { |item| block } -> ary
- * ary.reverse_each -> Enumerator
+ * ary.reverse_each {|item| block } -> ary
+ * ary.reverse_each -> an_enumerator
*
- * Same as Array#each, but traverses +self+ in reverse order.
+ * Same as <code>Array#each</code>, but traverses +self+ in reverse
+ * order.
*
* a = [ "a", "b", "c" ]
* a.reverse_each {|x| print x, " " }
@@ -1837,14 +1549,12 @@ rb_ary_reverse_each(VALUE ary)
{
long len;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ RETURN_ENUMERATOR(ary, 0, 0);
len = RARRAY_LEN(ary);
while (len--) {
- long nlen;
- rb_yield(RARRAY_AREF(ary, len));
- nlen = RARRAY_LEN(ary);
- if (nlen < len) {
- len = nlen;
+ rb_yield(RARRAY_PTR(ary)[len]);
+ if (RARRAY_LEN(ary) < len) {
+ len = RARRAY_LEN(ary);
}
}
return ary;
@@ -1857,7 +1567,6 @@ rb_ary_reverse_each(VALUE ary)
* Returns the number of elements in +self+. May be zero.
*
* [ 1, 2, 3, 4, 5 ].length #=> 5
- * [].length #=> 0
*/
static VALUE
@@ -1871,7 +1580,7 @@ rb_ary_length(VALUE ary)
* call-seq:
* ary.empty? -> true or false
*
- * Returns +true+ if +self+ contains no elements.
+ * Returns <code>true</code> if +self+ contains no elements.
*
* [].empty? #=> true
*/
@@ -1887,17 +1596,16 @@ rb_ary_empty_p(VALUE ary)
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);
+ VALUE dup = rb_ary_new2(RARRAY_LEN(ary));
+ MEMCPY(RARRAY_PTR(dup), RARRAY_PTR(ary), VALUE, RARRAY_LEN(ary));
+ ARY_SET_LEN(dup, RARRAY_LEN(ary));
return dup;
}
VALUE
rb_ary_resurrect(VALUE ary)
{
- return rb_ary_new4(RARRAY_LEN(ary), RARRAY_CONST_PTR(ary));
+ return rb_ary_new4(RARRAY_LEN(ary), RARRAY_PTR(ary));
}
extern VALUE rb_output_fs;
@@ -1928,13 +1636,14 @@ 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));
+ if (max > 0) rb_enc_copy(result, RARRAY_PTR(ary)[0]);
for (i=0; i<max; i++) {
- val = RARRAY_AREF(ary, i);
+ val = RARRAY_PTR(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);
+ if (OBJ_UNTRUSTED(val)) OBJ_TAINT(result);
}
}
@@ -1947,13 +1656,14 @@ ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result, int *first)
if (i > 0 && !NIL_P(sep))
rb_str_buf_append(result, sep);
- val = RARRAY_AREF(ary, i);
- if (RB_TYPE_P(val, T_STRING)) {
+ val = RARRAY_PTR(ary)[i];
+ switch (TYPE(val)) {
+ case T_STRING:
str_join:
rb_str_buf_append(result, val);
*first = FALSE;
- }
- else if (RB_TYPE_P(val, T_ARRAY)) {
+ break;
+ case T_ARRAY:
obj = val;
ary_join:
if (val == ary) {
@@ -1968,8 +1678,8 @@ ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result, int *first)
args[3] = (VALUE)first;
rb_exec_recursive(recursive_join, obj, (VALUE)args);
}
- }
- else {
+ break;
+ default:
tmp = rb_check_string_type(val);
if (!NIL_P(tmp)) {
val = tmp;
@@ -1996,17 +1706,19 @@ rb_ary_join(VALUE ary, VALUE sep)
{
long len = 1, i;
int taint = FALSE;
+ int untrust = FALSE;
VALUE val, tmp, result;
if (RARRAY_LEN(ary) == 0) return rb_usascii_str_new(0, 0);
- if (OBJ_TAINTED(ary)) taint = TRUE;
+ if (OBJ_TAINTED(ary) || OBJ_TAINTED(sep)) taint = TRUE;
+ if (OBJ_UNTRUSTED(ary) || OBJ_UNTRUSTED(sep)) untrust = TRUE;
if (!NIL_P(sep)) {
StringValue(sep);
len += RSTRING_LEN(sep) * (RARRAY_LEN(ary) - 1);
}
for (i=0; i<RARRAY_LEN(ary); i++) {
- val = RARRAY_AREF(ary, i);
+ val = RARRAY_PTR(ary)[i];
tmp = rb_check_string_type(val);
if (NIL_P(tmp) || tmp != val) {
@@ -2014,6 +1726,7 @@ rb_ary_join(VALUE ary, VALUE sep)
result = rb_str_buf_new(len + (RARRAY_LEN(ary)-i)*10);
rb_enc_associate(result, rb_usascii_encoding());
if (taint) OBJ_TAINT(result);
+ if (untrust) OBJ_UNTRUST(result);
ary_join_0(ary, sep, i, result);
first = i == 0;
ary_join_1(ary, ary, sep, i, result, &first);
@@ -2025,6 +1738,7 @@ rb_ary_join(VALUE ary, VALUE sep)
result = rb_str_buf_new(len);
if (taint) OBJ_TAINT(result);
+ if (untrust) OBJ_UNTRUST(result);
ary_join_0(ary, sep, RARRAY_LEN(ary), result);
return result;
@@ -2032,12 +1746,10 @@ rb_ary_join(VALUE ary, VALUE sep)
/*
* call-seq:
- * ary.join(separator=$,) -> str
+ * ary.join(sep=$,) -> str
*
* Returns a string created by converting each element of the array to
- * a string, separated by the given +separator+.
- * If the +separator+ is +nil+, it uses current $,.
- * If both the +separator+ and $, are nil, it uses empty string.
+ * a string, separated by <i>sep</i>.
*
* [ "a", "b", "c" ].join #=> "abc"
* [ "a", "b", "c" ].join("-") #=> "a-b-c"
@@ -2058,31 +1770,32 @@ static VALUE
inspect_ary(VALUE ary, VALUE dummy, int recur)
{
int tainted = OBJ_TAINTED(ary);
+ int untrust = OBJ_UNTRUSTED(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));
+ s = rb_inspect(RARRAY_PTR(ary)[i]);
if (OBJ_TAINTED(s)) tainted = TRUE;
+ if (OBJ_UNTRUSTED(s)) untrust = 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);
+ if (untrust) OBJ_UNTRUST(str);
return str;
}
/*
* call-seq:
+ * ary.to_s -> string
* ary.inspect -> string
- * ary.to_s -> string
*
* Creates a string representation of +self+.
- *
- * [ "a", "b", "c" ].to_s #=> "[\"a\", \"b\", \"c\"]"
*/
static VALUE
@@ -2102,9 +1815,8 @@ rb_ary_to_s(VALUE ary)
* call-seq:
* ary.to_a -> ary
*
- * Returns +self+.
- *
- * If called on a subclass of Array, converts the receiver to an Array object.
+ * Returns +self+. If called on a subclass of Array, converts
+ * the receiver to an Array object.
*/
static VALUE
@@ -2120,37 +1832,6 @@ rb_ary_to_a(VALUE 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}
- */
-
-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);
- }
- 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 hash;
-}
-
-/*
- * call-seq:
* ary.to_ary -> ary
*
* Returns +self+.
@@ -2163,7 +1844,8 @@ rb_ary_to_ary_m(VALUE ary)
}
static void
-ary_reverse(VALUE *p1, VALUE *p2)
+ary_reverse(p1, p2)
+ VALUE *p1, *p2;
{
while (p1 < p2) {
VALUE tmp = *p1;
@@ -2175,15 +1857,13 @@ ary_reverse(VALUE *p1, VALUE *p2)
VALUE
rb_ary_reverse(VALUE ary)
{
- VALUE *p2;
- long len = RARRAY_LEN(ary);
+ VALUE *p1, *p2;
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 */
+ if (RARRAY_LEN(ary) > 1) {
+ p1 = RARRAY_PTR(ary);
+ p2 = p1 + RARRAY_LEN(ary) - 1; /* points last item */
+ ary_reverse(p1, p2);
}
return ary;
}
@@ -2207,7 +1887,7 @@ rb_ary_reverse_bang(VALUE ary)
/*
* call-seq:
- * ary.reverse -> new_ary
+ * ary.reverse -> new_ary
*
* Returns a new array containing +self+'s elements in reverse order.
*
@@ -2222,8 +1902,8 @@ rb_ary_reverse_m(VALUE 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;
+ VALUE *p1 = RARRAY_PTR(ary);
+ VALUE *p2 = RARRAY_PTR(dup) + len - 1;
do *p2-- = *p1++; while (--len > 0);
}
ARY_SET_LEN(dup, RARRAY_LEN(ary));
@@ -2259,13 +1939,11 @@ rb_ary_rotate(VALUE ary, long cnt)
/*
* call-seq:
- * ary.rotate!(count=1) -> ary
+ * ary.rotate!(cnt=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.
+ * Rotates +self+ in place so that the element at +cnt+ comes first,
+ * and returns +self+. If +cnt+ is negative then it rotates in
+ * the opposite direction.
*
* a = [ "a", "b", "c", "d" ]
* a.rotate! #=> ["b", "c", "d", "a"]
@@ -2290,13 +1968,11 @@ rb_ary_rotate_bang(int argc, VALUE *argv, VALUE ary)
/*
* call-seq:
- * ary.rotate(count=1) -> new_ary
- *
- * Returns a new array by rotating +self+ so that the element at +count+ is
- * the first element of the new array.
+ * ary.rotate(cnt=1) -> new_ary
*
- * If +count+ is negative then it rotates in the opposite direction, starting
- * from the end of +self+ where +-1+ is the last element.
+ * Returns new array by rotating +self+ so that the element at
+ * +cnt+ in +self+ is the first element of the new array. If +cnt+
+ * is negative then it rotates in the opposite direction.
*
* a = [ "a", "b", "c", "d" ]
* a.rotate #=> ["b", "c", "d", "a"]
@@ -2308,8 +1984,7 @@ rb_ary_rotate_bang(int argc, VALUE *argv, VALUE ary)
static VALUE
rb_ary_rotate_m(int argc, VALUE *argv, VALUE ary)
{
- VALUE rotated;
- const VALUE *ptr;
+ VALUE rotated, *ptr, *ptr2;
long len, cnt = 1;
switch (argc) {
@@ -2322,10 +1997,11 @@ rb_ary_rotate_m(int argc, VALUE *argv, VALUE ary)
rotated = rb_ary_new2(len);
if (len > 0) {
cnt = rotate_count(cnt, len);
- ptr = RARRAY_CONST_PTR(ary);
+ ptr = RARRAY_PTR(ary);
+ ptr2 = RARRAY_PTR(rotated);
len -= cnt;
- ary_memcpy(rotated, 0, len, ptr + cnt);
- ary_memcpy(rotated, len, cnt, ptr);
+ MEMCPY(ptr2, ptr + cnt, VALUE, len);
+ MEMCPY(ptr2 + len, ptr, VALUE, cnt);
}
ARY_SET_LEN(rotated, RARRAY_LEN(ary));
return rotated;
@@ -2343,7 +2019,7 @@ enum {
sort_optimizable_count
};
-#define STRING_P(s) (RB_TYPE_P((s), T_STRING) && CLASS_OF(s) == rb_cString)
+#define STRING_P(s) (TYPE(s) == T_STRING && CLASS_OF(s) == rb_cString)
#define SORT_OPTIMIZABLE_BIT(type) (1U << TOKEN_PASTE(sort_opt_,type))
#define SORT_OPTIMIZABLE(data, type) \
@@ -2393,7 +2069,7 @@ sort_2(const void *ap, const void *bp, void *dummy)
return rb_str_cmp(a, b);
}
- retval = rb_funcallv(a, id_cmp, 1, &b);
+ retval = rb_funcall(a, id_cmp, 1, b);
n = rb_cmpint(retval, a, b);
sort_reentered(data->ary);
@@ -2403,22 +2079,17 @@ sort_2(const void *ap, const void *bp, void *dummy)
/*
* 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+.
+ * ary.sort! {| a,b | block } -> ary
*
- * See also Enumerable#sort_by.
+ * Sorts +self+. Comparisons for
+ * the sort will be done using the <code><=></code> operator or using
+ * an optional code block. The block implements a comparison between
+ * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also
+ * <code>Enumerable#sort_by</code>.
*
* a = [ "d", "a", "e", "c", "b" ]
* a.sort! #=> ["a", "b", "c", "d", "e"]
- * a.sort! { |x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
+ * a.sort! {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
*/
VALUE
@@ -2429,29 +2100,29 @@ rb_ary_sort_bang(VALUE 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);
+ RBASIC(tmp)->klass = 0;
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);
+ ruby_qsort(RARRAY_PTR(tmp), RARRAY_LEN(tmp), sizeof(VALUE),
+ rb_block_given_p()?sort_1:sort_2, &data);
+
if (ARY_EMBED_P(tmp)) {
+ assert(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));
+ MEMCPY(RARRAY_PTR(ary), ARY_EMBED_PTR(tmp), VALUE, ARY_EMBED_LEN(tmp));
ARY_SET_LEN(ary, ARY_EMBED_LEN(tmp));
}
else {
- if (!ARY_EMBED_P(ary) && ARY_HEAP_PTR(ary) == ARY_HEAP_PTR(tmp)) {
+ assert(!ARY_EMBED_P(tmp));
+ if (ARY_HEAP_PTR(ary) == ARY_HEAP_PTR(tmp)) {
+ assert(!ARY_EMBED_P(ary));
FL_UNSET_SHARED(ary);
- ARY_SET_CAPA(ary, RARRAY_LEN(tmp));
+ ARY_SET_CAPA(ary, ARY_CAPA(tmp));
}
else {
assert(!ARY_SHARED_P(tmp));
@@ -2463,11 +2134,11 @@ rb_ary_sort_bang(VALUE ary)
rb_ary_unshare(ary);
}
else {
- ruby_sized_xfree((void *)ARY_HEAP_PTR(ary), ARY_HEAP_SIZE(ary));
+ xfree(ARY_HEAP_PTR(ary));
}
- ARY_SET_PTR(ary, RARRAY_CONST_PTR(tmp));
- ARY_SET_HEAP_LEN(ary, len);
- ARY_SET_CAPA(ary, RARRAY_LEN(tmp));
+ ARY_SET_PTR(ary, RARRAY_PTR(tmp));
+ ARY_SET_HEAP_LEN(ary, RARRAY_LEN(tmp));
+ ARY_SET_CAPA(ary, ARY_CAPA(tmp));
}
/* tmp was lost ownership for the ptr */
FL_UNSET(tmp, FL_FREEZE);
@@ -2476,7 +2147,7 @@ rb_ary_sort_bang(VALUE ary)
FL_SET(tmp, FL_FREEZE);
}
/* tmp will be GC'ed. */
- RBASIC_SET_CLASS_RAW(tmp, rb_cArray); /* rb_cArray must be marked */
+ RBASIC(tmp)->klass = rb_cArray;
}
return ary;
}
@@ -2484,23 +2155,17 @@ rb_ary_sort_bang(VALUE 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+.
+ * ary.sort {| a,b | block } -> new_ary
*
- *
- * See also Enumerable#sort_by.
+ * 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 implements a comparison between
+ * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also
+ * <code>Enumerable#sort_by</code>.
*
* a = [ "d", "a", "e", "c", "b" ]
* a.sort #=> ["a", "b", "c", "d", "e"]
- * a.sort { |x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
+ * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
*/
VALUE
@@ -2511,123 +2176,22 @@ rb_ary_sort(VALUE 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
-rb_ary_bsearch(VALUE ary)
-{
- long low = 0, high = RARRAY_LEN(ary), mid;
- int smaller = 0, satisfied = 0;
- VALUE v, val;
-
- RETURN_ENUMERATOR(ary, 0, 0);
- while (low < high) {
- mid = low + ((high - low) / 2);
- val = rb_ary_entry(ary, mid);
- v = rb_yield(val);
- if (FIXNUM_P(v)) {
- if (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);
-}
-
static VALUE
-sort_by_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, dummy))
+sort_by_i(VALUE i)
{
return rb_yield(i);
}
/*
* call-seq:
- * ary.sort_by! { |obj| block } -> ary
- * ary.sort_by! -> Enumerator
+ * ary.sort_by! {| obj | block } -> ary
+ * ary.sort_by! -> an_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.
+ * If no block is given, an enumerator is returned instead.
*
*/
@@ -2636,7 +2200,7 @@ rb_ary_sort_by_bang(VALUE ary)
{
VALUE sorted;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ RETURN_ENUMERATOR(ary, 0, 0);
rb_ary_modify(ary);
sorted = rb_block_call(ary, rb_intern("sort_by"), 0, 0, sort_by_i, 0);
rb_ary_replace(ary, sorted);
@@ -2646,23 +2210,20 @@ rb_ary_sort_by_bang(VALUE 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.
+ * ary.collect {|item| block } -> new_ary
+ * ary.map {|item| block } -> new_ary
+ * ary.collect -> an_enumerator
+ * ary.map -> an_enumerator
*
- * See also Enumerable#collect.
+ * Invokes <i>block</i> once for each element of +self+. Creates a
+ * new array containing the values returned by the block.
+ * See also <code>Enumerable#collect</code>.
*
- * If no block is given, an Enumerator is returned instead.
+ * 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"]
+ * a.collect {|x| x + "!" } #=> ["a!", "b!", "c!", "d!"]
+ * a #=> ["a", "b", "c", "d"]
*/
static VALUE
@@ -2671,10 +2232,10 @@ rb_ary_collect(VALUE ary)
long i;
VALUE collect;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ RETURN_ENUMERATOR(ary, 0, 0);
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)));
+ rb_ary_push(collect, rb_yield(RARRAY_PTR(ary)[i]));
}
return collect;
}
@@ -2684,21 +2245,18 @@ rb_ary_collect(VALUE ary)
* 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.
+ * ary.collect -> an_enumerator
+ * ary.map -> an_enumerator
*
- * See also Enumerable#collect.
+ * Invokes the block once for each element of +self+, replacing the
+ * element with the value returned by _block_.
+ * See also <code>Enumerable#collect</code>.
*
- * If no block is given, an Enumerator is returned instead.
+ * 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!"]
+ * a.collect! {|x| x + "!" }
+ * a #=> [ "a!", "b!", "c!", "d!" ]
*/
static VALUE
@@ -2706,10 +2264,10 @@ rb_ary_collect_bang(VALUE ary)
{
long i;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ RETURN_ENUMERATOR(ary, 0, 0);
rb_ary_modify(ary);
for (i = 0; i < RARRAY_LEN(ary); i++) {
- rb_ary_store(ary, i, rb_yield(RARRAY_AREF(ary, i)));
+ rb_ary_store(ary, i, rb_yield(RARRAY_PTR(ary)[i]));
}
return ary;
}
@@ -2726,13 +2284,15 @@ rb_get_values_at(VALUE obj, long olen, int argc, VALUE *argv, VALUE (*func) (VAL
continue;
}
/* check if idx is Range */
- if (rb_range_beg_len(argv[i], &beg, &len, olen, 1)) {
- long end = olen < beg+len ? olen : beg+len;
- for (j = beg; j < end; j++) {
- rb_ary_push(result, (*func)(obj, j));
+ switch (rb_range_beg_len(argv[i], &beg, &len, olen, 0)) {
+ case Qfalse:
+ break;
+ case Qnil:
+ continue;
+ default:
+ for (j=0; j<len; j++) {
+ rb_ary_push(result, (*func)(obj, j+beg));
}
- if (beg + len > j)
- rb_ary_resize(result, RARRAY_LEN(result) + (beg + len) - j);
continue;
}
rb_ary_push(result, (*func)(obj, NUM2LONG(argv[i])));
@@ -2742,20 +2302,18 @@ rb_get_values_at(VALUE obj, long olen, int argc, VALUE *argv, VALUE (*func) (VAL
/*
* 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.
+ * ary.values_at(selector,... ) -> new_ary
*
- * See also Array#select.
+ * Returns an array containing the elements in
+ * +self+ corresponding to the given selector(s). The selectors
+ * may be either integer indices or ranges.
+ * See also <code>Array#select</code>.
*
* a = %w{ a b c d e f }
- * a.values_at(1, 3, 5) # => ["b", "d", "f"]
- * a.values_at(1, 3, 5, 7) # => ["b", "d", "f", nil]
- * a.values_at(-1, -2, -2, -7) # => ["f", "e", "e", nil]
- * a.values_at(4..6, 3...6) # => ["e", "f", nil, "d", "e", "f"]
+ * a.values_at(1, 3, 5)
+ * a.values_at(1, 3, 5, 7)
+ * a.values_at(-1, -3, -5, -7)
+ * a.values_at(1..3, 2...5)
*/
static VALUE
@@ -2767,20 +2325,17 @@ rb_ary_values_at(int argc, VALUE *argv, VALUE ary)
/*
* call-seq:
- * ary.select { |item| block } -> new_ary
- * ary.select -> Enumerator
+ * ary.select {|item| block } -> new_ary
+ * ary.select -> an_enumerator
*
- * Returns a new array containing all elements of +ary+
- * for which the given +block+ returns a true value.
+ * Invokes the block passing in successive elements from +self+,
+ * returning an array containing those elements for which the block
+ * returns a true value (equivalent to <code>Enumerable#select</code>).
*
- * If no block is given, an Enumerator is returned instead.
- *
- * [1,2,3,4,5].select { |num| num.even? } #=> [2, 4]
+ * If no block is given, an enumerator is returned instead.
*
* a = %w{ a b c d e f }
- * a.select { |v| v =~ /[aeiou]/ } #=> ["a", "e"]
- *
- * See also Enumerable#select.
+ * a.select {|v| v =~ /[aeiou]/} #=> ["a", "e"]
*/
static VALUE
@@ -2789,10 +2344,10 @@ rb_ary_select(VALUE ary)
VALUE result;
long i;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ RETURN_ENUMERATOR(ary, 0, 0);
result = rb_ary_new2(RARRAY_LEN(ary));
for (i = 0; i < RARRAY_LEN(ary); i++) {
- if (RTEST(rb_yield(RARRAY_AREF(ary, i)))) {
+ if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) {
rb_ary_push(result, rb_ary_elt(ary, i));
}
}
@@ -2801,17 +2356,16 @@ rb_ary_select(VALUE ary)
/*
* call-seq:
- * ary.select! {|item| block } -> ary or nil
- * ary.select! -> Enumerator
- *
- * Invokes the given block passing in successive elements from +self+,
- * deleting elements for which the block returns a +false+ value.
- *
- * If changes were made, it will return +self+, otherwise it returns +nil+.
+ * ary.select! {|item| block } -> ary or nil
+ * ary.select! -> an_enumerator
*
- * See also Array#keep_if
+ * Invokes the block passing in successive elements from
+ * +self+, deleting elements for which the block returns a
+ * false value. It returns +self+ if changes were made,
+ * otherwise it returns <code>nil</code>.
+ * See also <code>Array#keep_if</code>
*
- * If no block is given, an Enumerator is returned instead.
+ * If no block is given, an enumerator is returned instead.
*
*/
@@ -2820,10 +2374,10 @@ rb_ary_select_bang(VALUE ary)
{
long i1, i2;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ RETURN_ENUMERATOR(ary, 0, 0);
rb_ary_modify(ary);
for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
- VALUE v = RARRAY_AREF(ary, i1);
+ VALUE v = RARRAY_PTR(ary)[i1];
if (!RTEST(rb_yield(v))) continue;
if (i1 != i2) {
rb_ary_store(ary, i2, v);
@@ -2831,61 +2385,46 @@ rb_ary_select_bang(VALUE ary)
i2++;
}
- if (i1 == i2) return Qnil;
- if (i2 < i1)
+ if (RARRAY_LEN(ary) == i2) return Qnil;
+ if (i2 < RARRAY_LEN(ary))
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+.
+ * ary.keep_if {|item| block } -> ary
+ * ary.keep_if -> an_enumerator
*
- * See also Array#select!
+ * Deletes every element of +self+ for which <i>block</i> evaluates
+ * to false.
+ * See also <code>Array#select!</code>
*
- * If no block is given, an Enumerator is returned instead.
+ * 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"]
+ * 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);
+ RETURN_ENUMERATOR(ary, 0, 0);
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+.
+ * ary.delete(obj) -> obj or nil
+ * ary.delete(obj) { block } -> obj or nil
*
- * 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!)
+ * Deletes items from +self+ that are equal to <i>obj</i>.
+ * If any items are found, returns <i>obj</i>. If
+ * the item is not found, returns <code>nil</code>. If the optional
+ * code block is given, returns the result of <i>block</i> if the item
+ * is not found. (To remove <code>nil</code> elements and
+ * get an informative return value, use #compact!)
*
* a = [ "a", "b", "b", "b", "c" ]
* a.delete("b") #=> "b"
@@ -2901,7 +2440,7 @@ rb_ary_delete(VALUE ary, VALUE item)
long i1, i2;
for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
- VALUE e = RARRAY_AREF(ary, i1);
+ VALUE e = RARRAY_PTR(ary)[i1];
if (rb_equal(e, item)) {
v = e;
@@ -2919,32 +2458,16 @@ rb_ary_delete(VALUE ary, VALUE item)
return Qnil;
}
- ary_resize_smaller(ary, i2);
-
- return v;
-}
-
-void
-rb_ary_delete_same(VALUE ary, VALUE item)
-{
- long i1, i2;
-
- for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
- VALUE e = RARRAY_AREF(ary, i1);
-
- if (e == item) {
- continue;
- }
- if (i1 != i2) {
- rb_ary_store(ary, i2, e);
+ rb_ary_modify(ary);
+ if (RARRAY_LEN(ary) > i2) {
+ ARY_SET_LEN(ary, i2);
+ if (i2 * 2 < ARY_CAPA(ary) &&
+ ARY_CAPA(ary) > ARY_DEFAULT_SIZE) {
+ ary_resize_capa(ary, i2*2);
}
- i2++;
- }
- if (RARRAY_LEN(ary) == i2) {
- return;
}
- ary_resize_smaller(ary, i2);
+ return v;
}
VALUE
@@ -2960,10 +2483,9 @@ rb_ary_delete_at(VALUE ary, long pos)
}
rb_ary_modify(ary);
- del = RARRAY_AREF(ary, pos);
- RARRAY_PTR_USE(ary, ptr, {
- MEMMOVE(ptr+pos, ptr+pos+1, VALUE, len-pos-1);
- });
+ del = RARRAY_PTR(ary)[pos];
+ MEMMOVE(RARRAY_PTR(ary)+pos, RARRAY_PTR(ary)+pos+1, VALUE,
+ RARRAY_LEN(ary)-pos-1);
ARY_INCREASE_LEN(ary, -1);
return del;
@@ -2973,12 +2495,11 @@ rb_ary_delete_at(VALUE ary, long pos)
* 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.
+ * Deletes the element at the specified index, returning that element,
+ * or <code>nil</code> if the index is out of range. See also
+ * <code>Array#slice!</code>.
*
- * See also Array#slice!
- *
- * a = ["ant", "bat", "cat", "dog"]
+ * a = %w( ant bat cat dog )
* a.delete_at(2) #=> "cat"
* a #=> ["ant", "bat", "dog"]
* a.delete_at(99) #=> nil
@@ -2996,11 +2517,9 @@ rb_ary_delete_at_m(VALUE ary, VALUE pos)
* 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.
+ * Deletes the element(s) given by an index (optionally with a length)
+ * or by a range. Returns the deleted object (or objects), or
+ * <code>nil</code> if the index is out of range.
*
* a = [ "a", "b", "c" ]
* a.slice!(1) #=> "b"
@@ -3033,8 +2552,8 @@ rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary)
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));
+ arg2 = rb_ary_new4(len, RARRAY_PTR(ary)+pos);
+ RBASIC(arg2)->klass = rb_obj_class(ary);
rb_ary_splice(ary, pos, len, Qundef);
return arg2;
}
@@ -3068,9 +2587,9 @@ ary_reject(VALUE orig, VALUE result)
long i;
for (i = 0; i < RARRAY_LEN(orig); i++) {
- VALUE v = RARRAY_AREF(orig, i);
+ VALUE v = RARRAY_PTR(orig)[i];
if (!RTEST(rb_yield(v))) {
- rb_ary_push(result, v);
+ rb_ary_push_1(result, v);
}
}
return result;
@@ -3084,7 +2603,7 @@ ary_reject_bang(VALUE ary)
rb_ary_modify_check(ary);
for (i = 0; i < RARRAY_LEN(ary); ) {
- VALUE v = RARRAY_AREF(ary, i);
+ VALUE v = RARRAY_PTR(ary)[i];
if (RTEST(rb_yield(v))) {
rb_ary_delete_at(ary, i);
result = ary;
@@ -3098,38 +2617,38 @@ ary_reject_bang(VALUE ary)
/*
* 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.
+ * ary.reject! {|item| block } -> ary or nil
+ * ary.reject! -> an_enumerator
*
- * The array is changed instantly every time the block is called, not after
- * the iteration is over.
+ * Equivalent to <code>Array#delete_if</code>, deleting elements from
+ * +self+ for which the block evaluates to true, but returns
+ * <code>nil</code> if no changes were made.
+ * The array is changed instantly every time the block is called and
+ * not after the iteration is over.
+ * See also <code>Enumerable#reject</code> and <code>Array#delete_if</code>.
*
- * See also Enumerable#reject and Array#delete_if.
+ * If no block is given, an enumerator is returned instead.
*
- * 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_ENUMERATOR(ary, 0, 0);
return ary_reject_bang(ary);
}
/*
* call-seq:
- * ary.reject {|item| block } -> new_ary
- * ary.reject -> Enumerator
+ * ary.reject {|item| block } -> new_ary
+ * ary.reject -> an_enumerator
*
- * Returns a new array containing the items in +self+ for which the given
- * block is not +true+.
+ * Returns a new array containing the items in +self+
+ * for which the block is not true.
+ * See also <code>Array#delete_if</code>
*
- * See also Array#delete_if
+ * If no block is given, an enumerator is returned instead.
*
- * If no block is given, an Enumerator is returned instead.
*/
static VALUE
@@ -3137,7 +2656,7 @@ rb_ary_reject(VALUE ary)
{
VALUE rejected_ary;
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ RETURN_ENUMERATOR(ary, 0, 0);
rejected_ary = rb_ary_new();
ary_reject(ary, rejected_ary);
return rejected_ary;
@@ -3145,34 +2664,32 @@ rb_ary_reject(VALUE ary)
/*
* call-seq:
- * ary.delete_if { |item| block } -> ary
- * ary.delete_if -> Enumerator
+ * ary.delete_if {|item| block } -> ary
+ * ary.delete_if -> an_enumerator
*
- * Deletes every element of +self+ for which block evaluates to +true+.
+ * Deletes every element of +self+ for which <i>block</i> evaluates
+ * to true.
+ * The array is changed instantly every time the block is called and
+ * not after the iteration is over.
+ * See also <code>Array#reject!</code>
*
- * The array is changed instantly every time the block is called, not after
- * the iteration is over.
+ * If no block is given, an enumerator is returned instead.
*
- * 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]
+ * a = [ "a", "b", "c" ]
+ * a.delete_if {|x| x >= "b" } #=> ["a"]
*/
static VALUE
rb_ary_delete_if(VALUE ary)
{
- RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
+ RETURN_ENUMERATOR(ary, 0, 0);
ary_reject_bang(ary);
return ary;
}
static VALUE
-take_i(RB_BLOCK_CALL_FUNC_ARGLIST(val, cbarg))
+take_i(VALUE val, VALUE *args, int argc, VALUE *argv)
{
- 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);
@@ -3188,88 +2705,61 @@ take_items(VALUE obj, long n)
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));
+ rb_block_call(obj, rb_intern("each"), 0, 0, take_i, (VALUE)args);
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.
+ * 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>self.size</code> <em>n</em>-element
+ * arrays, where <em>n</em> is one more that the count of arguments. If
+ * the size of any argument is less than <code>enumObj.size</code>,
+ * <code>nil</code> values are supplied. If a block 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]]
+ * [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);
+ long len;
VALUE result = Qnil;
+ len = RARRAY_LEN(ary);
for (i=0; i<argc; i++) {
argv[i] = take_items(argv[i], len);
}
+ if (!rb_block_given_p()) {
+ result = rb_ary_new2(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++) {
+ VALUE tmp = rb_ary_new2(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);
- }
+ rb_ary_push(tmp, rb_ary_elt(ary, i));
+ for (j=0; j<argc; j++) {
+ rb_ary_push(tmp, rb_ary_elt(argv[j], i));
}
- else {
- for (i=0; i<RARRAY_LEN(ary); i++) {
- VALUE tmp = rb_ary_new2(argc+1);
-
- rb_ary_push(tmp, RARRAY_AREF(ary, i));
- for (j=0; j<argc; j++) {
- rb_ary_push(tmp, rb_ary_elt(argv[j], i));
- }
- rb_yield(tmp);
- }
+ if (NIL_P(result)) {
+ rb_yield(tmp);
}
- }
- 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));
- }
+ else {
rb_ary_push(result, tmp);
}
}
-
return result;
}
@@ -3277,13 +2767,11 @@ rb_ary_zip(int argc, VALUE *argv, VALUE ary)
* call-seq:
* ary.transpose -> new_ary
*
- * Assumes that +self+ is an array of arrays and transposes the rows and
- * columns.
+ * 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
@@ -3317,10 +2805,9 @@ rb_ary_transpose(VALUE ary)
/*
* call-seq:
* ary.replace(other_ary) -> ary
- * ary.initialize_copy(other_ary) -> ary
*
- * Replaces the contents of +self+ with the contents of +other_ary+,
- * truncating or expanding if necessary.
+ * Replaces the contents of +self+ with the contents of
+ * <i>other_ary</i>, truncating or expanding if necessary.
*
* a = [ "a", "b", "c", "d", "e" ]
* a.replace([ "x", "y", "z" ]) #=> ["x", "y", "z"]
@@ -3335,17 +2822,19 @@ rb_ary_replace(VALUE copy, VALUE orig)
if (copy == orig) return copy;
if (RARRAY_LEN(orig) <= RARRAY_EMBED_LEN_MAX) {
+ VALUE *ptr;
VALUE shared = 0;
if (ARY_OWNS_HEAP_P(copy)) {
- RARRAY_PTR_USE(copy, ptr, ruby_sized_xfree(ptr, ARY_HEAP_SIZE(copy)));
- }
+ xfree(RARRAY_PTR(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));
+ ptr = RARRAY_PTR(orig);
+ MEMCPY(RARRAY_PTR(copy), ptr, VALUE, RARRAY_LEN(orig));
if (shared) {
rb_ary_decrement_share(shared);
}
@@ -3354,13 +2843,13 @@ rb_ary_replace(VALUE copy, VALUE orig)
else {
VALUE shared = ary_make_shared(orig);
if (ARY_OWNS_HEAP_P(copy)) {
- RARRAY_PTR_USE(copy, ptr, ruby_sized_xfree(ptr, ARY_HEAP_SIZE(copy)));
+ xfree(RARRAY_PTR(copy));
}
else {
rb_ary_unshare_safe(copy);
}
FL_UNSET_EMBED(copy);
- ARY_SET_PTR(copy, RARRAY_CONST_PTR(orig));
+ ARY_SET_PTR(copy, RARRAY_PTR(orig));
ARY_SET_LEN(copy, RARRAY_LEN(orig));
rb_ary_set_shared(copy, shared);
}
@@ -3396,32 +2885,27 @@ rb_ary_clear(VALUE 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
+ * 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.
+ * may be the entire array) to <i>obj</i>. A <i>start</i> of
+ * <code>nil</code> is equivalent to zero. A <i>length</i> of
+ * <code>nil</code> is equivalent to <i>self.length</i>. The last three
+ * forms fill the array with the value of the block. The block is
+ * passed the absolute index of each element to be filled.
+ * Negative values of <i>start</i> count from the end of the array.
*
* a = [ "a", "b", "c", "d" ]
* a.fill("x") #=> ["x", "x", "x", "x"]
* a.fill("z", 2, 2) #=> ["x", "x", "z", "z"]
* a.fill("y", 0..1) #=> ["y", "y", "z", "z"]
- * a.fill { |i| i*i } #=> [0, 1, 4, 9]
- * a.fill(-2) { |i| i*i*i } #=> [0, 1, 8, 27]
+ * a.fill {|i| i*i} #=> [0, 1, 4, 9]
+ * a.fill(-2) {|i| i*i*i} #=> [0, 1, 8, 27]
*/
static VALUE
@@ -3429,6 +2913,7 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
{
VALUE item, arg1, arg2;
long beg = 0, end = 0, len = 0;
+ VALUE *p, *pend;
int block_p = FALSE;
if (rb_block_given_p()) {
@@ -3470,7 +2955,7 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
if (end >= ARY_CAPA(ary)) {
ary_resize_capa(ary, end);
}
- ary_mem_clear(ary, RARRAY_LEN(ary), end - RARRAY_LEN(ary));
+ rb_mem_clear(RARRAY_PTR(ary) + RARRAY_LEN(ary), end - RARRAY_LEN(ary));
ARY_SET_LEN(ary, end);
}
@@ -3481,11 +2966,15 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
for (i=beg; i<end; i++) {
v = rb_yield(LONG2NUM(i));
if (i>=RARRAY_LEN(ary)) break;
- RARRAY_ASET(ary, i, v);
+ RARRAY_PTR(ary)[i] = v;
}
}
else {
- ary_memfill(ary, beg, len, item);
+ p = RARRAY_PTR(ary) + beg;
+ pend = p + len;
+ while (p < pend) {
+ *p++ = item;
+ }
}
return ary;
}
@@ -3494,32 +2983,23 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
* call-seq:
* ary + other_ary -> new_ary
*
- * Concatenation --- Returns a new array built by concatenating the
+ * Concatenation---Returns a new array built by concatenating the
* two arrays together to produce a third array.
*
* [ 1, 2, 3 ] + [ 4, 5 ] #=> [ 1, 2, 3, 4, 5 ]
- * a = [ "a", "b", "c" ]
- * c = a + [ "d", "e", "f" ]
- * c #=> [ "a", "b", "c", "d", "e", "f" ]
- * a #=> [ "a", "b", "c" ]
- *
- * See also Array#concat.
*/
VALUE
rb_ary_plus(VALUE x, VALUE y)
{
VALUE z;
- long len, xlen, ylen;
+ long len;
y = to_ary(y);
- xlen = RARRAY_LEN(x);
- ylen = RARRAY_LEN(y);
- len = xlen + ylen;
+ len = RARRAY_LEN(x) + RARRAY_LEN(y);
z = rb_ary_new2(len);
-
- ary_memcpy(z, 0, xlen, RARRAY_CONST_PTR(x));
- ary_memcpy(z, xlen, ylen, RARRAY_CONST_PTR(y));
+ MEMCPY(RARRAY_PTR(z), RARRAY_PTR(x), VALUE, RARRAY_LEN(x));
+ MEMCPY(RARRAY_PTR(z) + RARRAY_LEN(x), RARRAY_PTR(y), VALUE, RARRAY_LEN(y));
ARY_SET_LEN(z, len);
return z;
}
@@ -3528,16 +3008,12 @@ rb_ary_plus(VALUE x, VALUE y)
* call-seq:
* ary.concat(other_ary) -> ary
*
- * Appends the elements of +other_ary+ to +self+.
+ * Appends the elements of <i>other_ary</i> to +self+.
*
* [ "a", "b" ].concat( ["c", "d"] ) #=> [ "a", "b", "c", "d" ]
- * a = [ 1, 2, 3 ]
- * a.concat( [ 4, 5 ] )
- * a #=> [ 1, 2, 3, 4, 5 ]
- *
- * See also Array#+.
*/
+
VALUE
rb_ary_concat(VALUE x, VALUE y)
{
@@ -3555,11 +3031,9 @@ rb_ary_concat(VALUE x, VALUE y)
* 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+.
+ * Repetition---With a String argument, equivalent to
+ * self.join(str). Otherwise, returns a new array
+ * built by concatenating the _int_ copies of +self+.
*
*
* [ 1, 2, 3 ] * 3 #=> [ 1, 2, 3, 1, 2, 3, 1, 2, 3 ]
@@ -3570,8 +3044,7 @@ rb_ary_concat(VALUE x, VALUE y)
static VALUE
rb_ary_times(VALUE ary, VALUE times)
{
- VALUE ary2, tmp;
- const VALUE *ptr;
+ VALUE ary2, tmp, *ptr, *ptr2;
long t, len;
tmp = rb_check_string_type(times);
@@ -3595,16 +3068,17 @@ rb_ary_times(VALUE ary, VALUE times)
ary2 = ary_new(rb_obj_class(ary), len);
ARY_SET_LEN(ary2, len);
- ptr = RARRAY_CONST_PTR(ary);
+ ptr = RARRAY_PTR(ary);
+ ptr2 = RARRAY_PTR(ary2);
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));
+ MEMCPY(ptr2, ptr, VALUE, t);
+ while (t <= len/2) {
+ MEMCPY(ptr2+t, ptr2, VALUE, t);
t *= 2;
}
if (t < len) {
- ary_memcpy(ary2, t, len-t, RARRAY_CONST_PTR(ary2));
+ MEMCPY(ptr2+t, ptr2, VALUE, len-t);
}
}
out:
@@ -3617,13 +3091,13 @@ rb_ary_times(VALUE ary, VALUE times)
* 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
+ * Searches through an array whose elements are also arrays
+ * comparing _obj_ with the first element of each contained array
+ * using obj.==.
+ * Returns the first contained array that matches (that
+ * is, the first associated array),
+ * or +nil+ if no match is found.
+ * See also <code>Array#rassoc</code>.
*
* s1 = [ "colors", "red", "blue", "green" ]
* s2 = [ "letters", "a", "b", "c" ]
@@ -3640,9 +3114,9 @@ rb_ary_assoc(VALUE ary, VALUE key)
VALUE v;
for (i = 0; i < RARRAY_LEN(ary); ++i) {
- v = rb_check_array_type(RARRAY_AREF(ary, i));
+ v = rb_check_array_type(RARRAY_PTR(ary)[i]);
if (!NIL_P(v) && RARRAY_LEN(v) > 0 &&
- rb_equal(RARRAY_AREF(v, 0), key))
+ rb_equal(RARRAY_PTR(v)[0], key))
return v;
}
return Qnil;
@@ -3652,14 +3126,10 @@ rb_ary_assoc(VALUE ary, VALUE key)
* 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.
+ * Searches through the array whose elements are also arrays. Compares
+ * _obj_ with the second element of each contained array using
+ * <code>==</code>. Returns the first contained array that matches. See
+ * also <code>Array#assoc</code>.
*
* a = [ [ 1, "one"], [2, "two"], [3, "three"], ["ii", "two"] ]
* a.rassoc("two") #=> [2, "two"]
@@ -3673,10 +3143,10 @@ rb_ary_rassoc(VALUE ary, VALUE value)
VALUE v;
for (i = 0; i < RARRAY_LEN(ary); ++i) {
- v = RARRAY_AREF(ary, i);
- if (RB_TYPE_P(v, T_ARRAY) &&
+ v = RARRAY_PTR(ary)[i];
+ if (TYPE(v) == T_ARRAY &&
RARRAY_LEN(v) > 1 &&
- rb_equal(RARRAY_AREF(v, 1), value))
+ rb_equal(RARRAY_PTR(v)[1], value))
return v;
}
return Qnil;
@@ -3685,32 +3155,12 @@ rb_ary_rassoc(VALUE ary, VALUE value)
static VALUE
recursive_equal(VALUE ary1, VALUE ary2, int recur)
{
- long i, len1;
- const VALUE *p1, *p2;
+ long i;
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++;
+ for (i=0; i<RARRAY_LEN(ary1); i++) {
+ if (!rb_equal(rb_ary_elt(ary1, i), rb_ary_elt(ary2, i)))
+ return Qfalse;
}
return Qtrue;
}
@@ -3719,9 +3169,9 @@ recursive_equal(VALUE ary1, VALUE ary2, int recur)
* 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+.
+ * Equality---Two arrays are equal if they contain the same number
+ * of elements and if each element is equal to (according to
+ * Object.==) the corresponding element in the other array.
*
* [ "a", "c" ] == [ "a", "c", 7 ] #=> false
* [ "a", "c", 7 ] == [ "a", "c", 7 ] #=> true
@@ -3733,14 +3183,13 @@ static VALUE
rb_ary_equal(VALUE ary1, VALUE ary2)
{
if (ary1 == ary2) return Qtrue;
- if (!RB_TYPE_P(ary2, T_ARRAY)) {
+ if (TYPE(ary2) != T_ARRAY) {
if (!rb_respond_to(ary2, rb_intern("to_ary"))) {
return Qfalse;
}
return rb_equal(ary2, ary1);
}
if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return Qfalse;
- if (RARRAY_CONST_PTR(ary1) == RARRAY_CONST_PTR(ary2)) return Qtrue;
return rb_exec_recursive_paired(recursive_equal, ary1, ary2, ary2);
}
@@ -3761,42 +3210,35 @@ recursive_eql(VALUE ary1, VALUE ary2, int recur)
* 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?).
+ * Returns <code>true</code> if +self+ and _other_ are the same object,
+ * or are both arrays with the same content.
*/
static VALUE
rb_ary_eql(VALUE ary1, VALUE ary2)
{
if (ary1 == ary2) return Qtrue;
- if (!RB_TYPE_P(ary2, T_ARRAY)) return Qfalse;
+ if (TYPE(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)
+recursive_hash(VALUE ary, VALUE dummy, int recur)
{
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));
+ if (recur) {
+ h = rb_hash_uint(h, NUM2LONG(rb_hash(rb_cArray)));
+ }
+ else {
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ n = rb_hash(RARRAY_PTR(ary)[i]);
+ h = rb_hash_uint(h, NUM2LONG(n));
+ }
}
h = rb_hash_end(h);
return LONG2FIX(h);
@@ -3804,10 +3246,25 @@ rb_ary_hash(VALUE ary)
/*
* call-seq:
- * ary.include?(object) -> true or false
+ * 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 <code>eql?</code>).
+ */
+
+static VALUE
+rb_ary_hash(VALUE ary)
+{
+ return rb_exec_recursive_outer(recursive_hash, ary, 0);
+}
+
+/*
+ * call-seq:
+ * ary.include?(obj) -> true or false
*
- * Returns +true+ if the given +object+ is present in +self+ (that is, if any
- * element <code>==</code> +object+), otherwise returns +false+.
+ * Returns <code>true</code> if the given object is present in
+ * +self+ (that is, if any object <code>==</code> <i>anObject</i>),
+ * <code>false</code> otherwise.
*
* a = [ "a", "b", "c" ]
* a.include?("b") #=> true
@@ -3820,7 +3277,7 @@ rb_ary_includes(VALUE ary, VALUE item)
long i;
for (i=0; i<RARRAY_LEN(ary); i++) {
- if (rb_equal(RARRAY_AREF(ary, i), item)) {
+ if (rb_equal(RARRAY_PTR(ary)[i], item)) {
return Qtrue;
}
}
@@ -3839,8 +3296,7 @@ recursive_cmp(VALUE ary1, VALUE ary2, int recur)
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);
+ VALUE v = rb_funcall(rb_ary_elt(ary1, i), id_cmp, 1, rb_ary_elt(ary2, i));
if (v != INT2FIX(0)) {
return v;
}
@@ -3852,21 +3308,16 @@ recursive_cmp(VALUE ary1, VALUE ary2, int recur)
* 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.
+ * Comparison---Returns an integer (-1, 0,
+ * or +1) if this array is less than, equal to, or greater than
+ * <i>other_ary</i>. Each object in each array is compared
+ * (using <=>). If any value isn't
+ * equal, then that inequality is the return value. If all the
+ * values found are equal, then the return is based on a
+ * comparison of the array lengths. Thus, two arrays are
+ * ``equal'' according to <code>Array#<=></code> if and only if they have
+ * the same length and the value of each element is equal to the
+ * value of the corresponding element in the other array.
*
* [ "a", "a", "c" ] <=> [ "a", "b", "c" ] #=> -1
* [ 1, 2, 3, 4, 5, 6 ] <=> [ 1, 2 ] #=> +1
@@ -3896,10 +3347,7 @@ ary_add_hash(VALUE hash, VALUE ary)
long i;
for (i=0; i<RARRAY_LEN(ary); i++) {
- VALUE elt = RARRAY_AREF(ary, i);
- if (rb_hash_lookup2(hash, elt, Qundef) == Qundef) {
- rb_hash_aset(hash, elt, elt);
- }
+ rb_hash_aset(hash, RARRAY_PTR(ary)[i], Qtrue);
}
return hash;
}
@@ -3909,7 +3357,7 @@ ary_tmp_hash_new(void)
{
VALUE hash = rb_hash_new();
- RBASIC_CLEAR_CLASS(hash);
+ RBASIC(hash)->klass = 0;
return hash;
}
@@ -3949,38 +3397,32 @@ ary_recycle_hash(VALUE hash)
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.
+ * Array Difference---Returns a new array that is a copy of
+ * the original array, removing any items that also appear in
+ * <i>other_ary</i>. (If you need set-like behavior, see the
+ * library class Set.)
*
* [ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ] #=> [ 3, 3, 5 ]
- *
- * If you need set-like behavior, see the library class Set.
*/
static VALUE
rb_ary_diff(VALUE ary1, VALUE ary2)
{
VALUE ary3;
- VALUE hash;
+ volatile 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;
+ if (st_lookup(RHASH_TBL(hash), RARRAY_PTR(ary1)[i], 0)) continue;
rb_ary_push(ary3, rb_ary_elt(ary1, i));
}
ary_recycle_hash(hash);
@@ -3991,16 +3433,10 @@ rb_ary_diff(VALUE ary1, VALUE ary2)
* 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' ]
+ * Set Intersection---Returns a new array
+ * containing elements common to the two arrays, with no duplicates.
*
- * See also Array#uniq.
+ * [ 1, 1, 3, 5 ] & [ 1, 2, 3 ] #=> [ 1, 3 ]
*/
@@ -4008,20 +3444,20 @@ 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;
+ ary3 = rb_ary_new2(RARRAY_LEN(ary1) < RARRAY_LEN(ary2) ?
+ RARRAY_LEN(ary1) : RARRAY_LEN(ary2));
hash = ary_make_hash(ary2);
- table = rb_hash_tbl_raw(hash);
+
+ if (RHASH_EMPTY_P(hash))
+ return ary3;
for (i=0; i<RARRAY_LEN(ary1); i++) {
- v = RARRAY_AREF(ary1, i);
- vv = (st_data_t)v;
- if (st_delete(table, &vv, 0)) {
+ vv = (st_data_t)(v = rb_ary_elt(ary1, i));
+ if (st_delete(RHASH_TBL(hash), &vv, 0)) {
rb_ary_push(ary3, v);
}
}
@@ -4030,44 +3466,40 @@ rb_ary_and(VALUE ary1, VALUE ary2)
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.
+ * Set Union---Returns a new array by joining this array with
+ * <i>other_ary</i>, removing duplicates.
*
- * It compares elements using their #hash and #eql? methods for efficiency.
- *
- * [ "a", "b", "c" ] | [ "c", "d", "a" ] #=> [ "a", "b", "c", "d" ]
- *
- * See also Array#uniq.
+ * [ "a", "b", "c" ] | [ "c", "d", "a" ]
+ * #=> [ "a", "b", "c", "d" ]
*/
static VALUE
rb_ary_or(VALUE ary1, VALUE ary2)
{
- VALUE hash, ary3;
+ VALUE hash, ary3, v;
+ st_data_t vv;
long i;
ary2 = to_ary(ary2);
- hash = ary_make_hash(ary1);
+ ary3 = rb_ary_new2(RARRAY_LEN(ary1)+RARRAY_LEN(ary2));
+ hash = ary_add_hash(ary_make_hash(ary1), ary2);
+ for (i=0; i<RARRAY_LEN(ary1); i++) {
+ vv = (st_data_t)(v = rb_ary_elt(ary1, i));
+ if (st_delete(RHASH_TBL(hash), &vv, 0)) {
+ rb_ary_push(ary3, v);
+ }
+ }
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);
+ vv = (st_data_t)(v = rb_ary_elt(ary2, i));
+ if (st_delete(RHASH_TBL(hash), &vv, 0)) {
+ rb_ary_push(ary3, v);
}
}
- ary3 = rb_hash_values(hash);
ary_recycle_hash(hash);
return ary3;
}
@@ -4084,14 +3516,10 @@ push_value(st_data_t key, st_data_t val, st_data_t ary)
* 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).
+ * Removes duplicate elements from +self+. If a block is given,
+ * it will use the return value of the block for comparison.
+ * Returns <code>nil</code> if no changes are made (that is, no
+ * duplicates are found).
*
* a = [ "a", "a", "b", "b", "c" ]
* a.uniq! # => ["a", "b", "c"]
@@ -4107,29 +3535,38 @@ push_value(st_data_t key, st_data_t val, st_data_t ary)
static VALUE
rb_ary_uniq_bang(VALUE ary)
{
- VALUE hash;
- long hash_size;
+ VALUE hash, v;
+ long i, j;
rb_ary_modify_check(ary);
if (RARRAY_LEN(ary) <= 1)
return Qnil;
- if (rb_block_given_p())
+ if (rb_block_given_p()) {
hash = ary_make_hash_by(ary);
- else
- hash = ary_make_hash(ary);
-
- hash_size = RHASH_SIZE(hash);
- if (RARRAY_LEN(ary) == hash_size) {
- return Qnil;
+ if (RARRAY_LEN(ary) == (i = RHASH_SIZE(hash))) {
+ return Qnil;
+ }
+ 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, i);
+ st_foreach(RHASH_TBL(hash), push_value, ary);
}
- 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);
+ else {
+ hash = ary_make_hash(ary);
+ if (RARRAY_LEN(ary) == (long)RHASH_SIZE(hash)) {
+ return Qnil;
+ }
+ for (i=j=0; i<RARRAY_LEN(ary); i++) {
+ st_data_t vv = (st_data_t)(v = rb_ary_elt(ary, i));
+ if (st_delete(RHASH_TBL(hash), &vv, 0)) {
+ rb_ary_store(ary, j++, v);
+ }
+ }
+ ARY_SET_LEN(ary, j);
}
- ary_resize_capa(ary, hash_size);
- st_foreach(rb_hash_tbl_raw(hash), push_value, ary);
ary_recycle_hash(hash);
return ary;
@@ -4140,11 +3577,8 @@ rb_ary_uniq_bang(VALUE ary)
* 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.
+ * 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.
*
* a = [ "a", "a", "b", "b", "c" ]
* a.uniq # => ["a", "b", "c"]
@@ -4157,19 +3591,26 @@ rb_ary_uniq_bang(VALUE ary)
static VALUE
rb_ary_uniq(VALUE ary)
{
- VALUE hash, uniq;
+ VALUE hash, uniq, v;
+ long i;
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);
+ uniq = ary_new(rb_obj_class(ary), RHASH_SIZE(hash));
+ st_foreach(RHASH_TBL(hash), push_value, uniq);
}
else {
hash = ary_make_hash(ary);
- uniq = rb_hash_values(hash);
+ uniq = ary_new(rb_obj_class(ary), RHASH_SIZE(hash));
+ for (i=0; i<RARRAY_LEN(ary); i++) {
+ st_data_t vv = (st_data_t)(v = rb_ary_elt(ary, i));
+ if (st_delete(RHASH_TBL(hash), &vv, 0)) {
+ rb_ary_push(uniq, v);
+ }
+ }
}
- RBASIC_SET_CLASS(uniq, rb_obj_class(ary));
ary_recycle_hash(hash);
return uniq;
@@ -4180,8 +3621,8 @@ rb_ary_uniq(VALUE ary)
* ary.compact! -> ary or nil
*
* Removes +nil+ elements from the array.
- *
- * Returns +nil+ if no changes were made, otherwise returns the array.
+ * Returns +nil+ if no changes were made, otherwise returns
+ * <i>ary</i>.
*
* [ "a", nil, "b", nil, "c" ].compact! #=> [ "a", "b", "c" ]
* [ "a", "b", "c" ].compact! #=> nil
@@ -4194,18 +3635,21 @@ rb_ary_compact_bang(VALUE ary)
long n;
rb_ary_modify(ary);
- p = t = (VALUE *)RARRAY_CONST_PTR(ary); /* WB: no new reference */
+ p = t = RARRAY_PTR(ary);
end = p + RARRAY_LEN(ary);
while (t < end) {
if (NIL_P(*t)) t++;
else *p++ = *t++;
}
- n = p - RARRAY_CONST_PTR(ary);
+ n = p - RARRAY_PTR(ary);
if (RARRAY_LEN(ary) == n) {
return Qnil;
}
- ary_resize_smaller(ary, n);
+ ARY_SET_LEN(ary, n);
+ if (n * 2 < ARY_CAPA(ary) && ARY_DEFAULT_SIZE * 2 < ARY_CAPA(ary)) {
+ ary_resize_capa(ary, n * 2);
+ }
return ary;
}
@@ -4230,50 +3674,45 @@ rb_ary_compact(VALUE ary)
/*
* call-seq:
- * ary.count -> int
- * ary.count(obj) -> int
+ * 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.
+ * Returns the number of elements. If an argument is given, counts
+ * the number of elements which equals to <i>obj</i>. If a block is
+ * given, counts the number of elements yielding a true value.
*
* ary = [1, 2, 4, 2]
- * ary.count #=> 4
- * ary.count(2) #=> 2
- * ary.count { |x| x%2 == 0 } #=> 3
+ * 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;
+ long n = 0;
if (argc == 0) {
- VALUE v;
+ VALUE *p, *pend;
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++;
+ for (p = RARRAY_PTR(ary), pend = p + RARRAY_LEN(ary); p < pend; p++) {
+ if (RTEST(rb_yield(*p))) n++;
}
}
else {
- VALUE obj;
+ VALUE obj, *p, *pend;
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++;
+ for (p = RARRAY_PTR(ary), pend = p + RARRAY_LEN(ary); p < pend; p++) {
+ if (rb_equal(*p, obj)) n++;
}
}
@@ -4296,7 +3735,7 @@ flatten(VALUE ary, int level, int *modified)
while (1) {
while (i < RARRAY_LEN(ary)) {
- elt = RARRAY_AREF(ary, i++);
+ elt = RARRAY_PTR(ary)[i++];
tmp = rb_check_array_type(elt);
if (RBASIC(result)->klass) {
rb_raise(rb_eRuntimeError, "flatten reentered");
@@ -4330,21 +3769,19 @@ flatten(VALUE ary, int level, int *modified)
st_free_table(memo);
- RBASIC_SET_CLASS(result, rb_class_of(ary));
+ RBASIC(result)->klass = rb_class_of(ary);
return result;
}
/*
* call-seq:
* ary.flatten! -> ary or nil
- * ary.flatten!(level) -> ary or nil
+ * ary.flatten!(level) -> array 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.
+ * Returns <code>nil</code> if no modifications were made (i.e.,
+ * <i>ary</i> contains no subarrays.) If the optional <i>level</i>
+ * argument determines the level of recursion to flatten.
*
* a = [ 1, 2, [3, [4, 5] ] ]
* a.flatten! #=> [1, 2, 3, 4, 5]
@@ -4382,14 +3819,10 @@ rb_ary_flatten_bang(int argc, VALUE *argv, VALUE ary)
* 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.
+ * Returns a new array that is a one-dimensional flattening of this
+ * array (recursively). That is, for every element that is an array,
+ * extract its elements into the new array. If the optional
+ * <i>level</i> 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]]
@@ -4417,9 +3850,9 @@ rb_ary_flatten(int argc, VALUE *argv, VALUE ary)
#define OPTHASH_GIVEN_P(opts) \
(argc > 0 && !NIL_P((opts) = rb_check_hash_type(argv[argc-1])) && (--argc, 1))
-static ID id_random;
+static VALUE sym_random;
-#define RAND_UPTO(max) (long)rb_random_ulong_limited((randgen), (max)-1)
+#define RAND_UPTO(max) (long)(rb_random_real(randgen)*(max))
/*
* call-seq:
@@ -4427,41 +3860,36 @@ static ID id_random;
* ary.shuffle!(random: rng) -> ary
*
* Shuffles elements in +self+ in place.
- *
- * The optional +rng+ argument will be used as the random number generator.
+ * If +rng+ is given, it 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;
+ VALUE *ptr, opts, *snap_ptr, randgen = rb_cRandom;
+ long i, snap_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;
- }
+ randgen = rb_hash_lookup2(opts, sym_random, randgen);
+ }
+ if (argc > 0) {
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);
}
- 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;
+ i = RARRAY_LEN(ary);
+ ptr = RARRAY_PTR(ary);
+ snap_len = i;
+ snap_ptr = ptr;
+ while (i) {
+ long j = RAND_UPTO(i);
+ VALUE tmp;
+ if (snap_len != RARRAY_LEN(ary) || snap_ptr != RARRAY_PTR(ary)) {
+ rb_raise(rb_eRuntimeError, "modified during shuffle");
}
- }); /* WB: no new reference */
+ tmp = ptr[--i];
+ ptr[i] = ptr[j];
+ ptr[j] = tmp;
+ }
return ary;
}
@@ -4471,12 +3899,12 @@ rb_ary_shuffle_bang(int argc, VALUE *argv, VALUE ary)
* ary.shuffle -> new_ary
* ary.shuffle(random: rng) -> new_ary
*
- * Returns a new array with elements of +self+ shuffled.
+ * Returns a new array with elements of this array 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.
+ * If +rng+ is given, it will be used as the random number generator.
*
* a.shuffle(random: Random.new(1)) #=> [1, 3, 2]
*/
@@ -4497,49 +3925,40 @@ rb_ary_shuffle(int argc, VALUE *argv, VALUE ary)
* 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.
+ * 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
+ * <code>nil</code> and the second form returns an empty array.
*
- * 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]
+ * If +rng+ is given, it will be used as the random number generator.
*/
static VALUE
rb_ary_sample(int argc, VALUE *argv, VALUE ary)
{
- VALUE nv, result;
+ VALUE nv, result, *ptr;
VALUE opts, randgen = rb_cRandom;
long n, len, i, j, k, idx[10];
- long rnds[numberof(idx)];
+ double 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;
- }
+ randgen = rb_hash_lookup2(opts, sym_random, randgen);
}
+ ptr = RARRAY_PTR(ary);
len = RARRAY_LEN(ary);
if (argc == 0) {
- if (len < 2)
+ if (len == 0) return Qnil;
+ if (len == 1) {
i = 0;
- else
- i = RAND_UPTO(len);
-
- return rb_ary_elt(ary, i);
+ }
+ else {
+ double x = rb_random_real(randgen);
+ if ((len = RARRAY_LEN(ary)) == 0) return Qnil;
+ i = (long)(x * len);
+ }
+ return RARRAY_PTR(ary)[i];
}
rb_scan_args(argc, argv, "1", &nv);
n = NUM2LONG(nv);
@@ -4547,44 +3966,40 @@ rb_ary_sample(int argc, VALUE *argv, VALUE ary)
if (n > len) n = len;
if (n <= numberof(idx)) {
for (i = 0; i < n; ++i) {
- rnds[i] = RAND_UPTO(len - i);
+ rnds[i] = rb_random_real(randgen);
}
}
- 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);
- }
- }
+ ptr = RARRAY_PTR(ary);
if (n > len) n = len;
switch (n) {
case 0:
- return rb_ary_new_capa(0);
+ return rb_ary_new2(0);
case 1:
- i = rnds[0];
- return rb_ary_new_from_values(1, &RARRAY_AREF(ary, i));
+ i = (long)(rnds[0] * len);
+ return rb_ary_new4(1, &ptr[i]);
case 2:
- i = rnds[0];
- j = rnds[1];
+ i = (long)(rnds[0] * len);
+ j = (long)(rnds[1] * (len-1));
if (j >= i) j++;
- return rb_ary_new_from_args(2, RARRAY_AREF(ary, i), RARRAY_AREF(ary, j));
+ return rb_ary_new3(2, ptr[i], ptr[j]);
case 3:
- i = rnds[0];
- j = rnds[1];
- k = rnds[2];
+ i = (long)(rnds[0] * len);
+ j = (long)(rnds[1] * (len-1));
+ k = (long)(rnds[2] * (len-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));
+ return rb_ary_new3(3, ptr[i], ptr[j], ptr[k]);
}
if (n <= numberof(idx)) {
+ VALUE *ptr_result;
long sorted[numberof(idx)];
- sorted[0] = idx[0] = rnds[0];
+ sorted[0] = idx[0] = (long)(rnds[0] * len);
for (i=1; i<n; i++) {
- k = rnds[i];
+ k = (long)(rnds[i] * --len);
for (j = 0; j < i; ++j) {
if (k < sorted[j]) break;
++k;
@@ -4592,65 +4007,48 @@ rb_ary_sample(int argc, VALUE *argv, VALUE ary)
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]);
- }
- });
+ result = rb_ary_new2(n);
+ ptr_result = RARRAY_PTR(result);
+ for (i=0; i<n; i++) {
+ ptr_result[i] = ptr[idx[i]];
+ }
}
else {
- result = rb_ary_dup(ary);
- RBASIC_CLEAR_CLASS(result);
+ VALUE *ptr_result;
+ result = rb_ary_new4(len, ptr);
+ RBASIC(result)->klass = 0;
+ ptr_result = RARRAY_PTR(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);
+ 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(result)->klass = 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
+ * ary.cycle(n=nil) {|obj| block } -> nil
+ * ary.cycle(n=nil) -> an_enumerator
*
- * Calls the given block for each element +n+ times or forever if +nil+ is
- * given.
+ * Calls <i>block</i> for each element repeatedly _n_ times or
+ * forever if none or +nil+ is given. If a non-positive number is
+ * given or the array is empty, does nothing. Returns +nil+ if the
+ * loop has finished without getting interrupted.
*
- * Does nothing if a non-positive number is given or the array is empty.
+ * If no block is given, an enumerator is returned instead.
*
- * 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.
+ * 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.
*
*/
@@ -4662,7 +4060,7 @@ rb_ary_cycle(int argc, VALUE *argv, VALUE ary)
rb_scan_args(argc, argv, "01", &nv);
- RETURN_SIZED_ENUMERATOR(ary, argc, argv, rb_ary_cycle_size);
+ RETURN_ENUMERATOR(ary, argc, argv);
if (NIL_P(nv)) {
n = -1;
}
@@ -4673,40 +4071,19 @@ rb_ary_cycle(int argc, VALUE *argv, VALUE ary)
while (RARRAY_LEN(ary) > 0 && (n < 0 || 0 < n--)) {
for (i=0; i<RARRAY_LEN(ary); i++) {
- rb_yield(RARRAY_AREF(ary, i));
+ rb_yield(RARRAY_PTR(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 tmpbuf_discard(s) (rb_str_resize((s), 0L), RBASIC(s)->klass = 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;
-}
+#define tmpary_discard(a) (ary_discard(a), RBASIC(a)->klass = rb_cArray)
/*
- * Recursively compute permutations of +r+ elements of the set
- * <code>[0..n-1]</code>.
- *
+ * Recursively compute permutations of r elements of the set [0..n-1].
* When we have a complete permutation of array indexes, copy the values
* at those indexes into a new array and yield that array.
*
@@ -4720,7 +4097,7 @@ yield_indexed_values(const VALUE values, const long r, const long *const p)
static void
permute0(long n, long r, long *p, long index, char *used, VALUE values)
{
- long i;
+ long i,j;
for (i = 0; i < n; i++) {
if (used[i] == 0) {
p[index] = i;
@@ -4731,7 +4108,17 @@ permute0(long n, long r, long *p, long index, char *used, VALUE values)
used[i] = 0; /* index unused */
}
else {
- if (!yield_indexed_values(values, r, p)) {
+ /* We have a complete permutation of array indexes */
+ /* Build a ruby array of the corresponding values */
+ /* And yield it to the associated block */
+ VALUE result = rb_ary_new2(r);
+ VALUE *result_array = RARRAY_PTR(result);
+ const VALUE *values_array = RARRAY_PTR(values);
+
+ for (j = 0; j < r; j++) result_array[j] = values_array[p[j]];
+ ARY_SET_LEN(result, r);
+ rb_yield(result);
+ if (RBASIC(values)->klass) {
rb_raise(rb_eRuntimeError, "permute reentered");
}
}
@@ -4740,70 +4127,29 @@ permute0(long n, long r, long *p, long index, char *used, VALUE values)
}
/*
- * 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 -> an_enumerator
* ary.permutation(n) { |p| block } -> ary
- * ary.permutation(n) -> Enumerator
+ * ary.permutation(n) -> an_enumerator
*
- * When invoked with a block, yield all permutations of length +n+ of the
- * elements of the array, then return the array itself.
+ * When invoked with a block, yield all permutations of length <i>n</i>
+ * of the elements of <i>ary</i>, then return the array itself.
+ * If <i>n</i> is not specified, yield all permutations of all elements.
+ * The implementation makes no guarantees about the order in which
+ * the permutations are yielded.
*
- * 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.
+ * 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
+ * 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
@@ -4813,7 +4159,7 @@ rb_ary_permutation(int argc, VALUE *argv, VALUE ary)
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 */
+ RETURN_ENUMERATOR(ary, argc, argv); /* Return enumerator if no block */
rb_scan_args(argc, argv, "01", &num);
r = NIL_P(num) ? n : NUM2LONG(num); /* Permutation size from argument */
@@ -4825,48 +4171,38 @@ rb_ary_permutation(int argc, VALUE *argv, VALUE ary)
}
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)));
+ rb_yield(rb_ary_new3(1, RARRAY_PTR(ary)[i]));
}
}
else { /* this is the general case */
- volatile VALUE t0 = tmpbuf(r,sizeof(long));
+ volatile VALUE t0 = tmpbuf(n,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);
+ RBASIC(ary0)->klass = 0;
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);
+ RBASIC(ary0)->klass = 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.
+ * ary.combination(n) -> an_enumerator
*
- * The implementation makes no guarantees about the order in which the
- * combinations are yielded.
+ * When invoked with a block, yields all combinations of length <i>n</i>
+ * of elements from <i>ary</i> and then returns <i>ary</i> 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.
+ * If no block is given, an enumerator is returned instead.
*
* Examples:
*
@@ -4886,7 +4222,7 @@ rb_ary_combination(VALUE ary, VALUE num)
long n, i, len;
n = NUM2LONG(num);
- RETURN_SIZED_ENUMERATOR(ary, 1, &num, rb_ary_combination_size);
+ RETURN_ENUMERATOR(ary, 1, &num);
len = RARRAY_LEN(ary);
if (n < 0 || len < n) {
/* yield nothing */
@@ -4896,23 +4232,25 @@ rb_ary_combination(VALUE ary, VALUE num)
}
else if (n == 1) {
for (i = 0; i < len; i++) {
- rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
+ rb_yield(rb_ary_new3(1, RARRAY_PTR(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);
+ volatile VALUE t0 = tmpbuf(n+1, sizeof(long));
+ long *stack = (long*)RSTRING_PTR(t0);
+ volatile VALUE cc = tmpary(n);
+ VALUE *chosen = RARRAY_PTR(cc);
long lev = 0;
- RBASIC_CLEAR_CLASS(ary0);
- MEMZERO(stack+1, long, n);
+ MEMZERO(stack, long, n);
stack[0] = -1;
for (;;) {
+ chosen[lev] = RARRAY_PTR(ary)[stack[lev+1]];
for (lev++; lev < n; lev++) {
- stack[lev+1] = stack[lev]+1;
+ chosen[lev] = RARRAY_PTR(ary)[stack[lev+1] = stack[lev]+1];
}
- if (!yield_indexed_values(ary0, n, stack+1)) {
+ rb_yield(rb_ary_new4(n, chosen));
+ if (RBASIC(t0)->klass) {
rb_raise(rb_eRuntimeError, "combination reentered");
}
do {
@@ -4921,16 +4259,15 @@ rb_ary_combination(VALUE ary, VALUE num)
} while (stack[lev+1]+n == len+lev+1);
}
done:
- ALLOCV_END(t0);
- RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
+ tmpbuf_discard(t0);
+ tmpary_discard(cc);
}
return ary;
}
/*
- * Recursively compute repeated permutations of +r+ elements of the set
- * <code>[0..n-1]</code>.
- *
+ * Recursively compute repeated permutations of r elements of the set
+ * [0..n-1].
* When we have a complete repeated permutation of array indexes, copy the
* values at those indexes into a new array and yield that array.
*
@@ -4943,47 +4280,41 @@ rb_ary_combination(VALUE ary, VALUE num)
static void
rpermute0(long n, long r, long *p, long index, VALUE values)
{
- long i;
+ long i, j;
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)) {
+ /* We have a complete permutation of array indexes */
+ /* Build a ruby array of the corresponding values */
+ /* And yield it to the associated block */
+ VALUE result = rb_ary_new2(r);
+ VALUE *result_array = RARRAY_PTR(result);
+ const VALUE *values_array = RARRAY_PTR(values);
+
+ for (j = 0; j < r; j++) result_array[j] = values_array[p[j]];
+ ARY_SET_LEN(result, r);
+ rb_yield(result);
+ if (RBASIC(values)->klass) {
rb_raise(rb_eRuntimeError, "repeated permute reentered");
}
}
}
}
-static VALUE
-rb_ary_repeated_permutation_size(VALUE ary, VALUE args, VALUE eobj)
-{
- long n = RARRAY_LEN(ary);
- long k = NUM2LONG(RARRAY_AREF(args, 0));
- VALUE v;
-
- if (k < 0) {
- return LONG2FIX(0);
- }
-
- v = LONG2NUM(k);
- return rb_funcallv(LONG2NUM(n), id_power, 1, &v);
-}
-
/*
* call-seq:
* ary.repeated_permutation(n) { |p| block } -> ary
- * ary.repeated_permutation(n) -> Enumerator
+ * ary.repeated_permutation(n) -> an_enumerator
*
- * When invoked with a block, yield all repeated permutations of length +n+ of
- * the elements of the array, then return the array itself.
+ * When invoked with a block, yield all repeated permutations of length
+ * <i>n</i> of the elements of <i>ary</i>, then return the array itself.
+ * The implementation makes no guarantees about the order in which
+ * the repeated permutations are yielded.
*
- * 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.
+ * If no block is given, an enumerator is returned instead.
*
* Examples:
*
@@ -5001,7 +4332,7 @@ 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 */
+ RETURN_ENUMERATOR(ary, 1, &num); /* Return enumerator if no block */
r = NUM2LONG(num); /* Permutation size from argument */
if (r < 0) {
@@ -5012,18 +4343,18 @@ rb_ary_repeated_permutation(VALUE ary, VALUE num)
}
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)));
+ rb_yield(rb_ary_new3(1, RARRAY_PTR(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);
+ RBASIC(ary0)->klass = 0;
rpermute0(n, r, p, 0, ary0); /* compute and yield repeated permutations */
tmpbuf_discard(t0);
- RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
+ RBASIC(ary0)->klass = rb_cArray;
}
return ary;
}
@@ -5031,6 +4362,7 @@ rb_ary_repeated_permutation(VALUE ary, VALUE num)
static void
rcombinate0(long n, long r, long *p, long index, long rest, VALUE values)
{
+ long j;
if (rest > 0) {
for (; index < n; ++index) {
p[r-rest] = index;
@@ -5038,47 +4370,43 @@ rcombinate0(long n, long r, long *p, long index, long rest, VALUE values)
}
}
else {
- if (!yield_indexed_values(values, r, p)) {
+ VALUE result = rb_ary_new2(r);
+ VALUE *result_array = RARRAY_PTR(result);
+ const VALUE *values_array = RARRAY_PTR(values);
+
+ for (j = 0; j < r; ++j) result_array[j] = values_array[p[j]];
+ ARY_SET_LEN(result, r);
+ rb_yield(result);
+ if (RBASIC(values)->klass) {
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.
+ * ary.repeated_combination(n) -> an_enumerator
*
- * The implementation makes no guarantees about the order in which the repeated
- * combinations are yielded.
+ * When invoked with a block, yields all repeated combinations of
+ * length <i>n</i> of elements from <i>ary</i> and then returns
+ * <i>ary</i> 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.
+ * 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
+ * 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
*
*/
@@ -5088,7 +4416,7 @@ 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 */
+ RETURN_ENUMERATOR(ary, 1, &num); /* Return enumerator if no block */
len = RARRAY_LEN(ary);
if (n < 0) {
/* yield nothing */
@@ -5098,7 +4426,7 @@ rb_ary_repeated_combination(VALUE ary, VALUE num)
}
else if (n == 1) {
for (i = 0; i < len; i++) {
- rb_yield(rb_ary_new3(1, RARRAY_AREF(ary, i)));
+ rb_yield(rb_ary_new3(1, RARRAY_PTR(ary)[i]));
}
}
else if (len == 0) {
@@ -5108,11 +4436,11 @@ rb_ary_repeated_combination(VALUE ary, VALUE num)
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);
+ RBASIC(ary0)->klass = 0;
rcombinate0(len, n, p, 0, n, ary0); /* compute and yield repeated combinations */
tmpbuf_discard(t0);
- RBASIC_SET_CLASS_RAW(ary0, rb_cArray);
+ RBASIC(ary0)->klass = rb_cArray;
}
return ary;
}
@@ -5123,12 +4451,11 @@ rb_ary_repeated_combination(VALUE ary, VALUE num)
* 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, <i>product</i> will yield all combinations
+ * and return +self+ instead.
*
- * 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]]
@@ -5150,8 +4477,8 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary)
long i,j;
long resultlen = 1;
- RBASIC_CLEAR_CLASS(t0);
- RBASIC_CLEAR_CLASS(t1);
+ RBASIC(t0)->klass = 0;
+ RBASIC(t1)->klass = 0;
/* initialize the arrays of arrays */
ARY_SET_LEN(t0, n);
@@ -5173,14 +4500,15 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary)
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]);
+ long k = RARRAY_LEN(arrays[i]), l = resultlen;
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;
+ if (resultlen < k || resultlen < l || resultlen / k != l) {
+ rb_raise(rb_eRangeError, "too big to product");
+ }
}
result = rb_ary_new2(resultlen);
}
@@ -5193,7 +4521,7 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary)
}
/* put it on the result array */
- if (NIL_P(result)) {
+ if(NIL_P(result)) {
FL_SET(t0, FL_USER5);
rb_yield(subarray);
if (! FL_TEST(t0, FL_USER5)) {
@@ -5231,11 +4559,7 @@ done:
* 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
+ * Returns first n elements from <i>ary</i>.
*
* a = [1, 2, 3, 4, 5, 0]
* a.take(3) #=> [1, 2, 3]
@@ -5254,18 +4578,16 @@ rb_ary_take(VALUE obj, VALUE n)
/*
* 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.
+ * ary.take_while {|arr| block } -> new_ary
+ * ary.take_while -> an_enumerator
*
- * If no block is given, an Enumerator is returned instead.
+ * Passes elements to the block until the block returns +nil+ or +false+,
+ * then stops iterating and returns an array of all prior elements.
*
- * See also Array#drop_while
+ * If no block is given, an enumerator is returned instead.
*
* a = [1, 2, 3, 4, 5, 0]
- * a.take_while { |i| i < 3 } #=> [1, 2]
+ * a.take_while {|i| i < 3 } #=> [1, 2]
*
*/
@@ -5276,7 +4598,7 @@ rb_ary_take_while(VALUE ary)
RETURN_ENUMERATOR(ary, 0, 0);
for (i = 0; i < RARRAY_LEN(ary); i++) {
- if (!RTEST(rb_yield(RARRAY_AREF(ary, i)))) break;
+ if (!RTEST(rb_yield(RARRAY_PTR(ary)[i]))) break;
}
return rb_ary_take(ary, LONG2FIX(i));
}
@@ -5285,12 +4607,8 @@ rb_ary_take_while(VALUE ary)
* 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
+ * Drops first n elements from +ary+ and returns the rest of
+ * the elements in an array.
*
* a = [1, 2, 3, 4, 5, 0]
* a.drop(3) #=> [4, 5, 0]
@@ -5313,16 +4631,14 @@ rb_ary_drop(VALUE ary, VALUE n)
/*
* 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.
+ * ary.drop_while {|arr| block } -> new_ary
+ * ary.drop_while -> an_enumerator
*
- * If no block is given, an Enumerator is returned instead.
+ * 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.
*
- * See also Array#take_while
+ * If no block is given, an enumerator is returned instead.
*
* a = [1, 2, 3, 4, 5, 0]
* a.drop_while {|i| i < 3 } #=> [3, 4, 5, 0]
@@ -5336,246 +4652,18 @@ rb_ary_drop_while(VALUE ary)
RETURN_ENUMERATOR(ary, 0, 0);
for (i = 0; i < RARRAY_LEN(ary); i++) {
- if (!RTEST(rb_yield(RARRAY_AREF(ary, i)))) break;
+ if (!RTEST(rb_yield(RARRAY_PTR(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]
- *
+
+
+/* Arrays are ordered, integer-indexed collections of any object.
+ * Array indexing starts at 0, as in C or Java. A negative index is
+ * assumed to be relative to the end of the array---that is, an index of -1
+ * indicates the last element of the array, -2 is the next to last
+ * element in the array, and so on.
*/
void
@@ -5587,7 +4675,7 @@ Init_Array(void)
rb_cArray = rb_define_class("Array", rb_cObject);
rb_include_module(rb_cArray, rb_mEnumerable);
- rb_define_alloc_func(rb_cArray, empty_ary_alloc);
+ rb_define_alloc_func(rb_cArray, ary_alloc);
rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);
rb_define_singleton_method(rb_cArray, "try_convert", rb_ary_s_try_convert, 1);
rb_define_method(rb_cArray, "initialize", rb_ary_initialize, -1);
@@ -5596,7 +4684,6 @@ Init_Array(void)
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);
@@ -5689,10 +4776,7 @@ Init_Array(void)
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("**");
+ sym_random = ID2SYM(rb_intern("random"));
}
diff --git a/atomic.h b/atomic.h
new file mode 100644
index 0000000000..5b3fb99024
--- /dev/null
+++ b/atomic.h
@@ -0,0 +1,56 @@
+#ifndef RUBY_ATOMIC_H
+#define RUBY_ATOMIC_H
+
+#ifdef _WIN32
+#if defined _MSC_VER && _MSC_VER > 1200
+#pragma intrinsic(_InterlockedOr)
+#endif
+typedef LONG rb_atomic_t;
+
+# define ATOMIC_SET(var, val) InterlockedExchange(&(var), (val))
+# define ATOMIC_INC(var) InterlockedIncrement(&(var))
+# define ATOMIC_DEC(var) InterlockedDecrement(&(var))
+#if defined __GNUC__
+# define ATOMIC_OR(var, val) __asm__("lock\n\t" "orl\t%1, %0" : "=m"(var) : "Ir"(val))
+#elif defined _MSC_VER && _MSC_VER <= 1200
+# define ATOMIC_OR(var, val) rb_w32_atomic_or(&(var), (val))
+static inline void
+rb_w32_atomic_or(volatile rb_atomic_t *var, rb_atomic_t val)
+{
+#ifdef _M_IX86
+ __asm mov eax, var;
+ __asm mov ecx, val;
+ __asm lock or [eax], ecx;
+#else
+#error unsupported architecture
+#endif
+}
+#else
+# define ATOMIC_OR(var, val) _InterlockedOr(&(var), (val))
+#endif
+# define ATOMIC_EXCHANGE(var, val) InterlockedExchange(&(var), (val))
+
+#elif defined HAVE_GCC_ATOMIC_BUILTINS
+/* @shyouhei hack to support atomic operations in case of gcc. Gcc
+ * has its own pseudo-insns to support them. See info, or
+ * http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html */
+
+typedef unsigned int rb_atomic_t; /* Anything OK */
+# define ATOMIC_SET(var, val) __sync_lock_test_and_set(&(var), (val))
+# define ATOMIC_INC(var) __sync_fetch_and_add(&(var), 1)
+# define ATOMIC_DEC(var) __sync_fetch_and_sub(&(var), 1)
+# define ATOMIC_OR(var, val) __sync_or_and_fetch(&(var), (val))
+# define ATOMIC_EXCHANGE(var, val) __sync_lock_test_and_set(&(var), (val))
+
+#else
+typedef int rb_atomic_t;
+extern rb_atomic_t ruby_atomic_exchange(rb_atomic_t *ptr, rb_atomic_t val);
+
+# define ATOMIC_SET(var, val) ((var) = (val))
+# define ATOMIC_INC(var) (++(var))
+# define ATOMIC_DEC(var) (--(var))
+# define ATOMIC_OR(var, val) ((var) |= (val))
+# define ATOMIC_EXCHANGE(var, val) ruby_atomic_exchange(&(var), (val))
+#endif
+
+#endif /* RUBY_ATOMIC_H */
diff --git a/bcc32/Makefile.sub b/bcc32/Makefile.sub
new file mode 100644
index 0000000000..1cd26a8643
--- /dev/null
+++ b/bcc32/Makefile.sub
@@ -0,0 +1,617 @@
+# -*- makefile -*-
+
+SHELL = $(COMSPEC)
+MKFILES = Makefile
+
+!ifndef MFLAGS
+MFLAGS=-
+!endif
+
+#### Start of system configuration section. ####
+!ifndef OS
+OS = bccwin32
+!endif
+!if !defined(RT)
+!error RT not defined. Retry from configure pass.
+!endif
+
+arch = $(ARCH)-$(OS)
+
+## variables may be overridden by $(compile_dir)/Makefile
+!ifndef srcdir
+srcdir = ..
+!endif
+!ifndef RUBY_INSTALL_NAME
+RUBY_INSTALL_NAME = ruby
+!endif
+!ifndef RUBYW_INSTALL_NAME
+RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME:ruby=rubyw)
+!elif "$(RUBYW_INSTALL_NAME)" == "$(RUBY_INSTALL_NAME)"
+RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME:ruby=rubyw)
+!endif
+!if "$(RUBYW_INSTALL_NAME)" == "$(RUBY_INSTALL_NAME)"
+RUBYW_INSTALL_NAME = $(RUBY_INSTALL_NAME)w
+!endif
+!ifndef RUBY_SO_NAME
+RUBY_SO_NAME = $(RT)-$(RUBY_INSTALL_NAME)$(MAJOR)$(MINOR)$(TEENY)
+!endif
+!ifndef icondirs
+!ifdef ICONDIRS
+icondirs=$(ICONDIRS)
+!endif
+!endif
+!ifdef icondirs
+icondirs=$(icondirs:\=/)
+iconinc=-I$(icondirs: = -I)
+!endif
+###############
+
+.SUFFIXES: .y
+
+!ifndef CC
+CC = bcc32
+!endif
+!ifndef CPP
+CPP = cpp32
+!endif
+!ifndef RC
+RC = brcc32
+!endif
+!ifndef YACC
+YACC = bison
+!endif
+!ifndef AR
+AR = tlib
+!endif
+!ifndef BASERUBY
+BASERUBY = ruby
+!endif
+
+PURIFY =
+AUTOCONF = autoconf
+IFCHANGE = $(srcdir:/=\)\win32\ifchange.bat
+RM = $(srcdir:/=\)\win32\rm.bat
+CP = copy > nul
+MV = move > nul
+
+!if !defined(PROCESSOR_ARCHITECTURE)
+PROCESSOR_ARCHITECTURE = x86
+!endif
+MACHINE = $(PROCESSOR_ARCHITECTURE)
+!if "$(PROCESSOR_ARCHITECTURE)" == "x86"
+!ifndef PROCESSOR_LEVEL
+PROCESSOR_LEVEL = 5
+!endif
+!if 6 < $(PROCESSOR_LEVEL)
+PROCESSOR_LEVEL = 6
+!endif
+PROCESSOR_FLAG = -$(PROCESSOR_LEVEL)
+CPU = i$(PROCESSOR_LEVEL)86
+ARCH = i386
+!else
+CPU = $(PROCESSOR_ARCHITECTURE)
+ARCH = $(PROCESSOR_ARCHITECTURE)
+!endif
+!ifndef DEBUGFLAGS
+DEBUGFLAGS =
+!endif
+!ifndef OPTFLAGS
+OPTFLAGS = -O
+!endif
+
+!ifndef prefix
+prefix = /usr
+!endif
+!ifndef exec_prefix
+exec_prefix = $(prefix)
+!endif
+!ifndef libdir
+libdir = $(exec_prefix)/lib
+!endif
+!if !defined(datadir)
+datadir = $(prefix)/share
+!endif
+!ifndef EXTOUT
+EXTOUT = .ext
+!endif
+!ifndef TESTUI
+TESTUI = console
+!endif
+!ifndef TESTS
+TESTS =
+!endif
+!ifndef RDOCTARGET
+RDOCTARGET = install-doc
+!endif
+
+OUTFLAG = -o
+COUTFLAG = -o
+!ifndef CFLAGS
+CFLAGS = -q -tWR -tWC $(DEBUGFLAGS) $(OPTFLAGS) $(PROCESSOR_FLAG) -w- -wsus -wcpt -wdup -wext -wrng -wrpt -wzdi
+!endif
+!ifndef DEFS
+DEFS =
+!endif
+!ifndef CPPFLAGS
+CPPFLAGS =
+!endif
+CPPFLAGS = $(DEFS) $(CPPFLAGS)
+!ifndef CXXFLAGS
+CXXFLAGS = $(CFLAGS)
+!endif
+!ifndef LDFLAGS
+LDFLAGS = -S:$(STACK)
+!endif
+!ifndef RFLAGS
+RFLAGS = $(iconinc)
+!endif
+!ifndef EXTLIBS
+EXTLIBS =
+!endif
+!ifndef MEMLIB
+MEMLIB =
+!endif
+LIBS = $(MEMLIB) cw32i.lib import32.lib ws2_32.lib $(EXTLIBS)
+MISSING = acosh.obj cbrt.obj crypt.obj erf.obj lgamma_r.obj strlcat.obj strlcpy.obj tgamma.obj win32.obj
+
+!ifndef STACK
+STACK = 0x2000000
+!endif
+
+XCFLAGS = -DRUBY_EXPORT -I. -I$(arch_hdrdir) -I$(hdrdir) -I$(srcdir) -I$(srcdir)/missing
+
+ARFLAGS = /a /p32
+LD = ilink32 -q -Gn
+LDSHARED = $(LD)
+XLDFLAGS = -Tpe c0x32.obj
+WLDFLAGS = -aa -Tpe c0w32.obj
+DLDFLAGS = -Tpd c0d32.obj
+LIBRUBY_LDSHARED = $(LDSHARED)
+LIBRUBY_DLDFLAGS = -Gi $(DLDFLAGS) $(EXTLDFLAGS)
+LDOBJECTS = $(MAINOBJ)
+
+SOLIBS =
+
+EXEEXT = .exe
+PROGRAM=$(RUBY_INSTALL_NAME)$(EXEEXT)
+WPROGRAM=$(RUBYW_INSTALL_NAME)$(EXEEXT)
+RUBYDEF = $(RUBY_SO_NAME).def
+MINIRUBY = .\miniruby$(EXEEXT) -I$(srcdir)/lib $(MINIRUBYOPT)
+RUNRUBY = .\$(PROGRAM) -i"$(EXTOUT)/$(arch)" "$(srcdir)/runruby.rb" --extout="$(EXTOUT)" --
+
+ORGLIBPATH = $(LIB)
+
+#### End of system configuration section. ####
+
+LIBRUBY_A = $(RUBY_SO_NAME)-static.lib
+LIBRUBY_SO = $(RUBY_SO_NAME).dll
+LIBRUBY = $(RUBY_SO_NAME).lib
+LIBRUBYARG = $(LIBRUBY)
+THREAD_MODEL = win32
+
+PREP = miniruby$(EXEEXT)
+
+OBJEXT = obj
+ASMEXT = asm
+
+INSTALLED_LIST= .installed.list
+
+MKMAIN_CMD = mkmain.bat
+
+SRC_FILE = $(<:\=/)
+
+WINMAINOBJ = winmain.$(OBJEXT)
+ARCHMINIOBJS = dmydln.$(OBJEXT)
+
+arch_hdrdir = $(EXTOUT)/include/$(arch)
+hdrdir = $(srcdir)/include
+VPATH = $(arch_hdrdir)/ruby;$(hdrdir)/ruby;$(srcdir);$(srcdir)/enc;$(srcdir)/missing;$(srcdir)/win32
+
+.path.c = .;$(srcdir);$(srcdir)/enc;$(srcdir)/win32;$(srcdir)/missing
+.path.ci = $(srcdir)
+.path.inc = .;$(srcdir)
+.path.def = .;$(srcdir)
+.path.h = .;$(arch_hdrdir)/ruby;$(hdrdir)/ruby;$(srcdir);$(srcdir)/win32;$(srcdir)/missing
+.path.y = $(srcdir)
+.path. = $(srcdir)
+
+.c.obj:
+ $(CC) $(CFLAGS) $(XCFLAGS) -I. $(CPPFLAGS) $(COUTFLAG)$@ -c $(<:/=\)
+
+.c.asm:
+ $(CC) $(CFLAGS) $(XCFLAGS) -I. $(CPPFLAGS) $(COUTFLAG)$@ -S $(<:\=/)
+
+.rc.res:
+ $(RC) $(RFLAGS) -I. -I$(<D). $(iconinc) -I$(srcdir)/win32 $(RFLAGS) -fo$@ $(<:/=\)
+
+all: $(srcdir)/bcc32/Makefile.sub $(srcdir)/common.mk
+
+ruby: $(PROGRAM)
+rubyw: $(WPROGRAM)
+
+!include $(srcdir)/common.mk
+
+$(MKFILES): $(srcdir)/bcc32/Makefile.sub $(srcdir)/bcc32/configure.bat $(srcdir)/bcc32/setup.mak
+ $(COMSPEC) /C $(srcdir:/=\)\bcc32\configure.bat $(configure_args)
+ @echo $(MKFILES) should be updated, re-run $(MAKE).
+ @$(MAKE) > nul -q -f &&|
+PHONY: nul
+ @exit
+|
+
+PHONY: nul
+
+RUBY_CONFIG_H = $(arch_hdrdir)/ruby/config.h
+CONFIG_H = ./.config.h.time
+
+config: config.status
+
+config.status: $(CONFIG_H)
+
+guard = INCLUDE_RUBY_CONFIG_H
+
+$(CONFIG_H): $(MKFILES) $(srcdir)/bcc32/Makefile.sub
+ @if not exist $(arch_hdrdir:/=\) md $(arch_hdrdir:/=\)
+ @if not exist $(arch_hdrdir:/=\)\ruby md $(arch_hdrdir:/=\)\ruby
+ @$(IFCHANGE) $(RUBY_CONFIG_H:/=\) &&|
+\#ifndef $(guard)
+\#define $(guard) 1
+\#define NO_BIG_INLINE 1
+\#define HAVE_SYS_TYPES_H 1
+\#define HAVE_SYS_STAT_H 1
+\#define HAVE_STDLIB_H 1
+\#define HAVE_STRING_H 1
+\#define HAVE_MEMORY_H 1
+\#define HAVE_LONG_LONG 1
+\#define HAVE_OFF_T 1
+\#define SIZEOF_INT 4
+\#define SIZEOF_SHORT 2
+\#define SIZEOF_LONG 4
+\#define SIZEOF_LONG_LONG 0
+\#define SIZEOF___INT64 8
+\#define SIZEOF_OFF_T 8
+\#define SIZEOF_VOIDP 4
+\#define SIZEOF_FLOAT 4
+\#define SIZEOF_DOUBLE 8
+\#define SIZEOF_TIME_T 4
+\#define SIZEOF_RLIM_T 0
+\#define SIZEOF_SIZE_T 4
+\#define SIZEOF_PTRDIFF_T 4
+\#define HAVE_PROTOTYPES 1
+\#define TOKEN_PASTE(x,y) x\#\#y
+\#define HAVE_STDARG_PROTOTYPES 1
+\#define NORETURN(x) x
+\#define RUBY_EXTERN extern __declspec(dllimport)
+\#define HAVE_DECL_SYS_NERR 1
+\#define HAVE_LIMITS_H 1
+\#define HAVE_FCNTL_H 1
+\#define HAVE_UTIME_H 1
+\#define HAVE_FLOAT_H 1
+\#define rb_uid_t uid_t
+\#define rb_gid_t gid_t
+\#define rb_pid_t int
+\#define HAVE_STRUCT_STAT_ST_RDEV 1
+\#define HAVE_ST_RDEV 1
+!if $(BORLANDC) < 0x0580
+\#define int8_t signed char
+\#define uint8_t unsigned char
+\#define int16_t short
+\#define uint16_t unsigned short
+\#define int32_t int
+\#define uint32_t unsigned int
+\#define int64_t __int64
+\#define uint64_t unsigned __int64
+\#define ssize_t int
+!endif
+\#define HAVE_INT8_T 1
+\#define HAVE_UINT8_T 1
+\#define SIZEOF_INT8_T 1
+\#define HAVE_INT16_T 1
+\#define HAVE_UINT16_T 1
+\#define SIZEOF_INT32_T 2
+\#define HAVE_INT32_T 1
+\#define HAVE_UINT32_T 1
+\#define SIZEOF_INT32_T 4
+\#define HAVE_INT64_T 1
+\#define HAVE_UINT64_T 1
+\#define SIZEOF_INT64_T 8
+\#define HAVE_INTPTR_T 1
+\#define HAVE_UINTPTR_T 1
+\#define HAVE_SSIZE_T 1
+\#define GETGROUPS_T int
+\#define RETSIGTYPE void
+\#define HAVE_ALLOCA 1
+\#define HAVE_DUP2 1
+\#define HAVE_MEMMOVE 1
+\#define HAVE_MKDIR 1
+\#define HAVE_STRCASECMP 1
+\#define HAVE_STRNCASECMP 1
+\#define HAVE_STRERROR 1
+\#define HAVE_STRFTIME 1
+\#define HAVE_STRCHR 1
+\#define HAVE_STRSTR 1
+\#define HAVE_STRTOD 1
+\#define HAVE_STRTOL 1
+\#define HAVE_STRTOUL 1
+\#define HAVE_SNPRINTF 1
+\#define HAVE_VSNPRINTF 1
+\#define HAVE_ISNAN 1
+\#define HAVE_FINITE 1
+\#define HAVE_HYPOT 1
+\#define HAVE_FMOD 1
+\#define HAVE_WAITPID 1
+\#define HAVE_FSYNC 1
+\#define HAVE_GETCWD 1
+\#define HAVE_TRUNCATE 1
+\#define HAVE_FTRUNCATE 1
+\#define HAVE_FSEEKO 1
+\#define HAVE_FTELLO 1
+\#define HAVE_TIMES 1
+\#define HAVE_FCNTL 1
+\#define HAVE_LINK 1
+\#define HAVE_TELLDIR 1
+\#define HAVE_SEEKDIR 1
+\#define HAVE_COSH 1
+\#define HAVE_SINH 1
+\#define HAVE_TANH 1
+\#define RSHIFT(x,y) ((x)>>(int)y)
+\#define FILE_COUNT level
+\#define FILE_READPTR curp
+\#define RUBY_SETJMP(env) setjmp(env)
+\#define RUBY_LONGJMP(env,val) longjmp(env,val)
+\#define RUBY_JMP_BUF jmp_buf
+\#define inline __inline
+\#define NEED_IO_SEEK_BETWEEN_RW 1
+\#define STACK_GROW_DIRECTION -1
+\#define DEFAULT_KCODE KCODE_NONE
+\#define LOAD_RELATIVE 1
+\#define DLEXT ".so"
+\#define RUBY_LIB_PREFIX "/lib/ruby"
+\#define RUBY_PLATFORM "$(ARCH)-$(OS)"
+\#endif /* $(guard) */
+|
+ @exit > $(@:/=\)
+
+config.status: $(MKFILES) $(srcdir)/bcc32/Makefile.sub $(srcdir)/common.mk
+ @echo Creating $@
+ @type > $@ &&|
+# Generated automatically by Makefile.sub.
+s,@SHELL@,$$(COMSPEC),;t t
+s,@BUILD_FILE_SEPARATOR@,\,;t t
+s,@PATH_SEPARATOR@,;,;t t
+s,@CFLAGS@,$(CFLAGS),;t t
+s,@DEFS@,$(DEFS),;t t
+s,@CPPFLAGS@,$(CPPFLAGS),;t t
+s,@CXXFLAGS@,$(CXXFLAGS),;t t
+s,@FFLAGS@,$(FFLAGS),;t t
+s,@LDFLAGS@,,;t t
+s,@LIBS@,$(LIBS),;t t
+s,@exec_prefix@,$${prefix},;t t
+s,@prefix@,$(prefix),;t t
+s,@program_transform_name@,s,,,,;t t
+s,@bindir@,$${exec_prefix}/bin,;t t
+s,@sbindir@,$${exec_prefix}/sbin,;t t
+s,@libexecdir@,$${exec_prefix}/libexec,;t t
+s,@datadir@,$${prefix}/share,;t t
+s,@sysconfdir@,$${prefix}/etc,;t t
+s,@sharedstatedir@,/etc,;t t
+s,@localstatedir@,/var,;t t
+s,@libdir@,$${exec_prefix}/lib,;t t
+s,@includedir@,$${prefix}/include,;t t
+s,@oldincludedir@,/usr/include,;t t
+s,@infodir@,$${prefix}/info,;t t
+s,@mandir@,$${prefix}/man,;t t
+s,@ridir@,$${prefix}/share/ri,;t t
+s,@build@,$(CPU)-pc-$(OS),;t t
+s,@build_alias@,$(CPU)-$(OS),;t t
+s,@build_cpu@,$(CPU),;t t
+s,@build_vendor@,pc,;t t
+s,@build_os@,$(OS),;t t
+s,@host@,$(CPU)-pc-$(OS),;t t
+s,@host_alias@,$(CPU)-$(OS),;t t
+s,@host_cpu@,$(CPU),;t t
+s,@host_vendor@,pc,;t t
+s,@host_os@,$(OS),;t t
+s,@target@,$(ARCH)-pc-$(OS),;t t
+s,@target_alias@,$(ARCH)-$(OS),;t t
+s,@target_cpu@,$(ARCH),;t t
+s,@target_vendor@,pc,;t t
+s,@target_os@,$(OS),;t t
+s,@CC@,$(CC),;t t
+s,@CPP@,cpp32,;t t
+s,@CXX@,$$(CC),;t t
+s,@LD@,$(LD),;t t
+s,@YACC@,$(YACC),;t t
+s,@RANLIB@,,;t t
+s,@AR@,$(AR),;t t
+s,@ARFLAGS@,$(ARFLAGS) ,;t t
+s,@LN_S@,$(LN_S),;t t
+s,@SET_MAKE@,MFLAGS = -$$(MAKEFLAGS),;t t
+s,@RM@,$$(top_srcdir:/=\)\win32\rm.bat,;t t
+s,@CP@,copy > nul,;t t
+s,@LIBOBJS@, $(MISSING),;t t
+s,@ALLOCA@,$(ALLOCA),;t t
+s,@DEFAULT_KCODE@,$(DEFAULT_KCODE),;t t
+s,@EXEEXT@,.exe,;t t
+s,@OBJEXT@,obj,;t t
+s,@XCFLAGS@,$(XCFLAGS),;t t
+s,@XLDFLAGS@,$(XLDFLAGS),;t t
+s,@DLDFLAGS@,$(DLDFLAGS),;t t
+s,@ARCH_FLAG@,$(ARCH_FLAG),;t t
+s,@STATIC@,$(STATIC),;t t
+s,@CCDLFLAGS@,,;t t
+s,@LDSHARED@,$(LDSHARED),;t t
+s,@DLEXT@,so,;t t
+s,@LIBEXT@,lib,;t t
+s,@STRIP@,$(STRIP),;t t
+s,@EXTSTATIC@,$(EXTSTATIC),;t t
+s,@setup@,Setup,;t t
+s,@MINIRUBY@,$(MINIRUBY),;t t
+s,@PREP@,miniruby$(EXEEXT),;t t
+s,@RUNRUBY@,$(RUNRUBY),;t t
+s,@EXTOUT@,$(EXTOUT),;t t
+s,@ARCHFILE@,,;t t
+s,@RDOCTARGET@,,;t t
+s,@LIBRUBY_LDSHARED@,$$(LDSHARED),;t t
+s,@LIBRUBY_DLDFLAGS@,-Gi $$(DLDFLAGS),;t t
+s,@RUBY_INSTALL_NAME@,$(RUBY_INSTALL_NAME),;t t
+s,@rubyw_install_name@,$(RUBYW_INSTALL_NAME),;t t
+s,@RUBYW_INSTALL_NAME@,$(RUBYW_INSTALL_NAME),;t t
+s,@RUBY_SO_NAME@,$(RUBY_SO_NAME),;t t
+s,@LIBRUBY_A@,$$(RUBY_SO_NAME)-static.lib,;t t
+s,@LIBRUBY_SO@,$$(RUBY_SO_NAME).dll,;t t
+s,@LIBRUBY_ALIASES@,$(LIBRUBY_ALIASES),;t t
+s,@LIBRUBY@,$$(RUBY_SO_NAME).lib,;t t
+s,@LIBRUBYARG@,$$(LIBRUBYARG_SHARED),;t t
+s,@LIBRUBYARG_STATIC@,$$(LIBRUBY_A),;t t
+s,@LIBRUBYARG_SHARED@,$$(LIBRUBY),;t t
+s,@SOLIBS@,$(SOLIBS),;t t
+s,@DLDLIBS@,$(DLDLIBS),;t t
+s,@ENABLE_SHARED@,yes,;t t
+s,@OUTFLAG@,$(OUTFLAG),;t t
+s,@COUTFLAG@,$(COUTFLAG),;t t
+s,@CPPOUTFILE@,,;t t
+s,@LIBPATHFLAG@, -L"%s",;t t
+s,@RPATHFLAG@,,;t t
+s,@LIBARG@,%s.lib,;t t
+s,@LINK_SO@,$$(LDSHARED) $$(DLDFLAGS) $$(LIBPATH) $$(OBJS:/=\), $$(@:/=\), nul, $$(LIBS) $$(LOCAL_LIBS), $$(DEFFILE:/=\), $$(RESFILE:/=\),;t t
+s,@COMPILE_C@,$$(CC) $$(INCFLAGS) $$(CFLAGS) $$(CPPFLAGS) $(COUTFLAG)$$(@) -c $$(<:/=\),;t t
+s,@COMPILE_CXX@,$$(CXX) $$(INCFLAGS) $$(CXXFLAGS) $$(CPPFLAGS) -P $(COUTFLAG)$$(@) -c $$(<:/=\),;t t
+s,@COMPILE_RULES@,{$$(srcdir)}.%s{}.%s: {$$(topdir)}.%s{}.%s: {$$(hdrdir)}.%s{}.%s: .%s.%s:,;t t
+s,@RULE_SUBST@,{.;$$(VPATH)}%s,;t t
+s,@COMMON_LIBS@,m advapi32 avicap32 avifil32 cap comctl32 comdlg32 dlcapi gdi32 glu32 imagehlp imm32 inetmib1 kernel32 loadperf lsapi32 lz32 mapi32 mgmtapi mpr msacm32 msvfw32 nddeapi netapi32 ole32 oleaut32 oledlg olepro32 opengl32 pdh pkpd32 rasapi32 rasdlg rassapi rpcrt4 setupapi shell32 shfolder snmpapi sporder tapi32 url user32 vdmdbg version win32spl winmm wintrust wsock32,;t t
+s,@COMMON_MACROS@,WIN32_LEAN_AND_MEAN WIN32,;t t
+s,@COMMON_HEADERS@,winsock2.h windows.h,;t t
+s,@cleanlibs@,$$*.tds,;t t
+s,@cleanobjs@,$$*-$$(arch).def $$*.il? $$*.lib,;t t
+s,@TRY_LINK@,$$(CC) -oconftest $$(INCFLAGS) -I$$(hdrdir) $$(CPPFLAGS) $$(CFLAGS) $$(LIBPATH) $$(LDFLAGS) $$(src) $$(LOCAL_LIBS) $$(LIBS),;t t
+s,@EXPORT_PREFIX@,_,;t t
+s,@arch@,$(ARCH)-$(OS),;t t
+s,@sitearch@,$(ARCH)-$(OS),;t t
+s,@sitedir@,$${prefix}/lib/ruby/site_ruby,;t t
+s,@vendordir@,$${prefix}/lib/ruby/vendor_ruby,;t t
+s,@rubyhdrdir@,$$(includedir)/ruby-$$(MAJOR).$$(MINOR).$$(TEENY),;t t
+s,@sitehdrdir@,$$(rubyhdrdir)/site_ruby,;t t
+s,@vendorhdrdir@,$$(rubyhdrdir)/vendor_ruby,;t t
+s,@configure_args@,--enable-shared $(configure_args),;t t
+s,@configure_input@,$$configure_input,;t t
+s,@srcdir@,$(srcdir),;t t
+s,@top_srcdir@,$(srcdir),;t t
+|
+
+miniruby$(EXEEXT):
+ @echo $(LIBS)
+ $(LD) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(MINIOBJS) $(COMMONOBJS:/=\) $(DMYEXT),$@,nul,$(LIBS)
+
+$(PROGRAM): $(MAINOBJ) $(LIBRUBY_SO) $(RUBY_INSTALL_NAME).res
+ $(LD) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ),$@,nul,$(LIBRUBYARG) $(LIBS),,$(RUBY_INSTALL_NAME).res
+
+$(WPROGRAM): $(MAINOBJ) $(WINMAINOBJ) $(LIBRUBY_SO) $(RUBYW_INSTALL_NAME).res
+ $(LD) $(LDFLAGS) $(WLDFLAGS) $(MAINOBJ) $(WINMAINOBJ),$@,nul,$(LIBRUBYARG) $(LIBS),,$(RUBYW_INSTALL_NAME).res
+
+$(LIBRUBY_A): $(OBJS) $(DMYEXT)
+ @-if exist $@ del $@
+ $(AR) $(ARFLAGS) "$@" $(OBJS) $(DMYEXT)
+
+# $(LIBRUBY): $(LIBRUBY_SO)
+# implib $@ $(LIBRUBY_SO)
+
+$(LIBRUBY_SO): $(LIBRUBY_A) $(DLDOBJS) $(RUBYDEF) $(RUBY_SO_NAME).res
+ @echo $(DLDOBJS)
+ @$(PRE_LIBRUBY_UPDATE)
+ $(LIBRUBY_LDSHARED) $(LIBRUBY_DLDFLAGS) $(DLDOBJS:/=\),$(LIBRUBY_SO),nul,$(LIBRUBY_A) $(LIBS),$(RUBYDEF),$(RUBY_SO_NAME).res
+
+$(LIBRUBY): $(LIBRUBY_SO)
+
+$(RUBYDEF): $(LIBRUBY_A) $(PREP)
+ $(MINIRUBY) $(srcdir)/bcc32/mkexports.rb -output=$@ -base=$(RUBY_SO_NAME) $(LIBRUBY_A)
+
+$(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc: rbconfig.rb $(srcdir)/revision.h $(srcdir)/win32/resource.rb
+ @$(MINIRUBY) $(srcdir)/win32/resource.rb \
+ -ruby_name=$(RUBY_INSTALL_NAME) \
+ -rubyw_name=$(RUBYW_INSTALL_NAME) \
+ -so_name=$(RUBY_SO_NAME) \
+ . $(icondirs) $(srcdir)/win32
+
+lex.c: {$(srcdir)}lex.c.blt
+ copy "$(?:/=\)" $@
+
+post-install-bin::
+ @$(NULLCMD)
+post-install-lib::
+ @$(NULLCMD)
+post-install-ext-comm::
+ @$(NULLCMD)
+post-install-ext-arch::
+ @$(NULLCMD)
+post-install-man::
+ @$(NULLCMD)
+post-install-doc::
+ @$(NULLCMD)
+
+clean-local::
+ @$(RM) $(WINMAINOBJ) ext\extinit.c ext\extinit.$(OBJEXT) *.tds *.il? $(RUBY_SO_NAME).lib
+ @$(RM) $(RUBY_INSTALL_NAME).res $(RUBYW_INSTALL_NAME).res $(RUBY_SO_NAME).res
+ @$(RM) *.map *.pdb *.ilk *.exp $(RUBYDEF) ext\ripper\y.output
+
+distclean-local::
+ @$(RM) ext\config.cache $(RBCONFIG:/=\)
+ @$(RM) $(RUBY_INSTALL_NAME).rc $(RUBYW_INSTALL_NAME).rc $(RUBY_SO_NAME).rc
+
+clean-ext distclean-ext realclean-ext::
+ @for /R ext %I in (.) do @if exist %I\Makefile ( \
+ echo $(@:-ext=)ing %~nI & \
+ cd %I & \
+ $(MAKE) $(MFLAGS) $(@:-ext=) & \
+ cd %CD% \
+ )
+
+ext/extinit.obj: ext/extinit.c $(SETUP)
+ $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c ext/extinit.c
+
+main.$(OBJEXT): win32.h
+ascii.$(OBJEXT): win32.h
+array.$(OBJEXT): win32.h
+bignum.$(OBJEXT): win32.h
+class.$(OBJEXT): win32.h
+compar.$(OBJEXT): win32.h
+dir.$(OBJEXT): dir.h win32.h
+dln.$(OBJEXT): win32.h
+enum.$(OBJEXT): win32.h
+error.$(OBJEXT): win32.h
+euc_jp.$(OBJEXT): win32.h
+eval.$(OBJEXT): win32.h
+file.$(OBJEXT): win32.h
+gc.$(OBJEXT): win32.h
+hash.$(OBJEXT): win32.h
+inits.$(OBJEXT): win32.h
+io.$(OBJEXT): win32.h
+marshal.$(OBJEXT): win32.h
+math.$(OBJEXT): win32.h
+numeric.$(OBJEXT): win32.h
+object.$(OBJEXT): win32.h
+pack.$(OBJEXT): win32.h
+parse.$(OBJEXT): win32.h
+process.$(OBJEXT): win32.h
+prec.$(OBJEXT): win32.h
+random.$(OBJEXT): win32.h
+range.$(OBJEXT): win32.h
+re.$(OBJEXT): win32.h
+regcomp.$(OBJEXT): win32.h
+regenc.$(OBJEXT): win32.h
+regerror.$(OBJEXT): win32.h
+regexec.$(OBJEXT): win32.h
+reggnu.$(OBJEXT): win32.h
+regparse.$(OBJEXT): win32.h
+ruby.$(OBJEXT): win32.h
+signal.$(OBJEXT): win32.h
+sjis.$(OBJEXT): win32.h
+sprintf.$(OBJEXT): win32.h
+st.$(OBJEXT): win32.h
+string.$(OBJEXT): win32.h
+struct.$(OBJEXT): win32.h
+time.$(OBJEXT): win32.h
+utf_8.$(OBJEXT): win32.h
+util.$(OBJEXT): win32.h
+variable.$(OBJEXT): win32.h
+version.$(OBJEXT): win32.h
diff --git a/bcc32/README.bcc32 b/bcc32/README.bcc32
new file mode 100644
index 0000000000..cd33eec0a1
--- /dev/null
+++ b/bcc32/README.bcc32
@@ -0,0 +1,130 @@
+=begin
+
+= How to build ruby using Borland C++
+
+== Requirement
+
+(1) Borland C++ 5.0 or later.
+
+(2) Please set environment variable (({PATH}))
+ to run required commands properly from the command line.
+
+ Note: building ruby requires following commands.
+ * make
+ * bcc32
+ * tlib
+ * ilink32
+
+(3) If you want to build from CVS source, following commands are required.
+ * bison ((<URL:http://gnuwin32.sourceforge.net/packages/bison.htm>))
+ * sed ((<URL:http://gnuwin32.sourceforge.net/packages/sed.htm>))
+
+(4) We strongly recommend to build ruby on C++Builder, to link following files.
+ * usebormm.lib
+ * memmgr.lib
+
+ RTL's internal memory manager cannot handle large memory block properly,
+ so we should use borlndmm.dll instead.
+ 10000.times { "" << "." * 529671; GC.start } # crash
+
+== How to compile and install
+
+(1) Execute bcc32\configure.bat on your build directory.
+ ex. c:\src\ruby> bcc32\configure.bat
+ You can specify the target platform as an argument.
+ For example, run `((%configure i686-bccwin32%))'
+ You can also specify the install directory.
+ For example, run `((%configure --prefix=<install_directory>%))'
+ Default of the install directory is /usr .
+ The default ((|<PLATFORM>|)) is `(({i386-bccwin32}))'.
+
+(2) Change ((|RUBY_INSTALL_NAME|)) and ((|RUBY_SO_NAME|)) in (({Makefile}))
+ if you want to change the name of the executable files.
+ And add ((|RUBYW_INSTALL_NAME|)) to change the name of the
+ executable without console window if also you want.
+
+(3) Run `((%make%))'
+
+(4) Run `((%make test%))'
+
+(5) Run `((%make install%))'
+
+(6) Requires dynamic RTL (cc3250.dll on C++Builder5) and borlndmm.dll (If built with
+ usebormm.lib) to use installed binary. These files are ordinary in bcc32's bin
+ directory.
+
+== Icons
+
+Any icon files(*.ico) in the build directory, directories specified with
+((|icondirs|)) make variable and (({win32})) directory under the ruby
+source directory will be included in DLL or executable files, according
+to their base names.
+ $(RUBY_INSTALL_NAME).ico or ruby.ico --> $(RUBY_INSTALL_NAME).exe
+ $(RUBYW_INSTALL_NAME).ico or rubyw.ico --> $(RUBYW_INSTALL_NAME).exe
+ the others --> $(RUBY_SO_NAME).dll
+
+Although no icons are distributed with the ruby source or in the official
+site, you can use anything you like. For example, followings are written
+in Japanese, but you can download at least.
+
+* ((<URL:http://member.nifty.ne.jp/ueivu/rubyico.html>)) or
+ ((<zipped icons|URL:http://member.nifty.ne.jp/ueivu/Ruby_ico.zip>))
+* ((<URL:http://homepage1.nifty.com/a_nakata/ruby/>)) or
+ ((<icon itself|URL:http://homepage1.nifty.com/a_nakata/ruby/RubyIcon.ico>))
+
+== Build examples
+
+* Build on the ruby source directory.
+
+ ex.)
+ ruby source directory: C:\ruby
+ build directory: C:\ruby
+ install directory: C:\usr\local
+
+ C:
+ cd \ruby
+ bcc32\configure --prefix=/usr/local
+ make
+ make test
+ make install
+
+* Build on the relative directory from the ruby source directory and CPU type
+ i386.
+
+ ex.)
+ ruby source directory: C:\ruby
+ build directory: C:\ruby\bccwin32
+ install directory: C:\usr\local
+ CPU i386
+
+ C:
+ cd \ruby
+ mkdir bccwin32
+ cd bccwin32
+ ..\bcc32\configure --prefix=/usr/local
+ make
+ make test
+ make install
+
+* Build on the different drive.
+
+ ex.)
+ ruby source directory: C:\src\ruby
+ build directory: D:\build\ruby
+ install directory: C:\usr\local
+
+ D:
+ cd D:\build\ruby
+ C:\src\ruby\bcc32\configure --prefix=C:/usr/local
+ make
+ make test
+ make install
+
+== Bugs
+
+You can ((*NOT*)) use a path name contains any white space characters as
+the ruby source directory, this restriction comes from the behavior of
+(({!INCLUDE})) directives of (({MAKE})).
+((- you may call it a bug. -))
+
+=end
diff --git a/bcc32/configure.bat b/bcc32/configure.bat
new file mode 100755
index 0000000000..8cdfc64b03
--- /dev/null
+++ b/bcc32/configure.bat
@@ -0,0 +1,163 @@
+@echo off
+::: Don't set environment variable in batch file other than autoexec.bat
+::: to avoid "Out of environment space" problem on Windows 95/98.
+::: set TMPMAKE=~tmp~.mak
+
+echo> ~tmp~.mak ####
+echo>> ~tmp~.mak conf = %0
+echo>> ~tmp~.mak $(conf:\=/): nul
+echo>> ~tmp~.mak @del ~setup~.mak
+echo>> ~tmp~.mak @-$(MAKE) -l$(MAKEFLAGS) -f $(@D)setup.mak \
+if exist pathlist.tmp del pathlist.tmp
+if exist confargs.mk del confargs.mk
+:loop
+if "%1" == "" goto :end
+if "%1" == "--prefix" goto :prefix
+if "%1" == "prefix" goto :prefix
+if "%1" == "--srcdir" goto :srcdir
+if "%1" == "srcdir" goto :srcdir
+if "%1" == "--target" goto :target
+if "%1" == "target" goto :target
+if "%1" == "--with-static-linked-ext" goto :extstatic
+if "%1" == "--program-suffix" goto :suffix
+if "%1" == "RUBY_SUFFIX" goto :suffix
+if "%1" == "--program-name" goto :installname
+if "%1" == "--install-name" goto :installname
+if "%1" == "RUBY_INSTALL_NAME" goto :installname
+if "%1" == "--so-name" goto :soname
+if "%1" == "RUBY_SO_NAME" goto :soname
+if "%1" == "--enable-install-doc" goto :enable-rdoc
+if "%1" == "--disable-install-doc" goto :disable-rdoc
+if "%1" == "--extout" goto :extout
+if "%1" == "EXTOUT" goto :extout
+if "%1" == "--with-baseruby" goto :baseruby
+if "%1" == "BASERUBY" goto :baseruby
+if "%1" == "--path" goto :path
+if "%1" == "-h" goto :help
+if "%1" == "--help" goto :help
+ echo>>confargs.tmp %1 \
+ shift
+goto :loop
+:srcdir
+ echo>> ~tmp~.mak -Dsrcdir=%2 \
+ echo>>confargs.tmp --srcdir=%2 \
+ shift
+ shift
+goto :loop
+:prefix
+ echo>> ~tmp~.mak -Dprefix=%2 \
+ echo>>confargs.tmp %1=%2 \
+ shift
+ shift
+goto :loop
+:suffix
+ echo>>confargs.mk !ifndef RUBY_SUFFIX
+ echo>>confargs.mk RUBY_SUFFIX = %2
+ echo>>confargs.mk !endif
+ echo>>confargs.tmp %1=%2 \
+ shift
+ shift
+goto :loop
+:installname
+ echo>>confargs.mk !ifndef RUBY_INSTALL_NAME
+ echo>>confargs.mk RUBY_INSTALL_NAME = %2
+ echo>>confargs.mk !endif
+ echo>>confargs.tmp %1=%2 \
+ shift
+ shift
+goto :loop
+:soname
+ echo>>confargs.mk !ifndef RUBY_SO_NAME
+ echo>>confargs.mk RUBY_SO_NAME = %2
+ echo>>confargs.mk !endif
+ echo>>confargs.tmp %1=%2 \
+ shift
+ shift
+goto :loop
+:target
+ echo>> ~tmp~.mak %2 \
+ echo>>confargs.tmp --target=%2 \
+ shift
+ shift
+goto :loop
+:extstatic
+ echo>>confargs.mk !ifndef EXTSTATIC
+ echo>>confargs.mk EXTSTATIC = static
+ echo>>confargs.mk !endif
+ echo>>confargs.tmp %1 \
+ shift
+goto :loop
+:enable-rdoc
+ echo>>confargs.mk !ifndef RDOCTARGET
+ echo>>confargs.mk RDOCTARGET = install-doc
+ echo>>confargs.mk !endif
+ echo>>confargs.tmp %1 \
+ shift
+goto :loop
+:disable-rdoc
+ echo>>confargs.mk !ifndef RDOCTARGET
+ echo>>confargs.mk RDOCTARGET = install-nodoc
+ echo>>confargs.mk !endif
+ echo>>confargs.tmp %1 \
+ shift
+goto :loop
+:extout
+ echo>>confargs.mk !ifndef EXTOUT
+ echo>>confargs.mk EXTOUT = %2
+ echo>>confargs.mk !endif
+ echo>>confargs.tmp %1=%2 \
+ shift
+ shift
+goto :loop
+:baseruby
+ echo>>confargs.mk !ifndef BASERUBY
+ echo>>confargs.mk BASERUBY = %2
+ echo>>confargs.mk !endif
+ echo>>confargs.tmp %1=%2 \
+ shift
+ shift
+goto :loop
+:path
+ echo>>pathlist.tmp %2;\
+ echo>>confargs.tmp %1=%2 \
+ shift
+ shift
+goto :loop
+:help
+ echo Configuration:
+ echo --help display this help
+ echo --srcdir=DIR find the sources in DIR [configure dir or `..']
+ echo Installation directories:
+ echo --prefix=PREFIX install files in PREFIX (ignored currently)
+ echo System types:
+ echo --target=TARGET configure for TARGET [i386-bccwin32]
+ echo Optional Package:
+ echo --with-baseruby=RUBY use RUBY as baseruby [ruby]
+ echo --with-static-linked-ext link external modules statically
+ echo --enable-install-doc install rdoc indexes during install
+ del *.tmp
+ del ~tmp~.mak
+goto :exit
+:end
+echo>> ~tmp~.mak -Dbcc32dir=$(@D)
+if not exist confargs.tmp goto :noconfargs
+ echo>>confargs.mk configure_args = \
+ type>>confargs.mk confargs.tmp
+ echo.>>confargs.mk
+ echo>>confargs.mk ####
+:noconfargs
+if not exist pathlist.tmp goto :nopathlist
+ echo>>confargs.mk pathlist = \
+ type>>confargs.mk pathlist.tmp
+ echo.>>confargs.mk
+ echo>>confargs.mk ####
+ echo>>confargs.mk PATH = $(pathlist:;=/bin;)$(PATH)
+ echo>>confargs.mk INCLUDE = $(pathlist:;=/include;)
+ echo>>confargs.mk LIB = $(pathlist:;=/lib;)
+:nopathlist
+if exist confargs.mk copy confargs.mk ~setup~.mak > nul
+type>>~setup~.mak ~tmp~.mak
+del *.tmp > nul
+del ~tmp~.mak > nul
+make -s -f ~setup~.mak
+:exit
diff --git a/bcc32/mkexports.rb b/bcc32/mkexports.rb
new file mode 100755
index 0000000000..888ab2e2a6
--- /dev/null
+++ b/bcc32/mkexports.rb
@@ -0,0 +1,26 @@
+#!./miniruby -s
+
+$:.unshift(File.expand_path("../..", __FILE__))
+require 'win32/mkexports'
+
+class Exports::Bcc < Exports
+ def forwarding(internal, export)
+ internal[/\A_?/]+export
+ end
+
+ def each_line(objs, &block)
+ objs.each do |obj|
+ opt = /\.(?:so|dll)\z/i =~ obj ? "-ee" : "-oiPUBDEF -oiPUBD32"
+ IO.foreach("|tdump -q #{opt} #{obj.tr('/', '\\')} < nul", &block)
+ end
+ end
+
+ def each_export(objs)
+ objdump(objs) do |l|
+ next unless /(?:PUBDEF|PUBD32|EXPORT)/ =~ l
+ yield $1 if /'(.*?)'/ =~ l
+ end
+ yield "_strcasecmp", "_stricmp"
+ yield "_strncasecmp", "_strnicmp"
+ end
+end
diff --git a/bcc32/setup.mak b/bcc32/setup.mak
new file mode 100644
index 0000000000..df2fd3c128
--- /dev/null
+++ b/bcc32/setup.mak
@@ -0,0 +1,179 @@
+# -*- makefile -*-
+
+!if "$(srcdir)" != ""
+bcc32dir = $(srcdir)/bcc32
+!elseif "$(bcc32dir)" == "bcc32/"
+srcdir = .
+!elseif "$(bcc32dir:/bcc32/=)/bcc32/" == "$(bcc32dir)"
+srcdir = $(bcc32dir:/bcc32/=)
+!else
+srcdir = $(bcc32dir)/..
+!endif
+!ifndef prefix
+prefix = /usr
+!endif
+OS = bccwin32
+RT = $(OS)
+BANG = !
+APPEND = echo.>>$(MAKEFILE)
+!ifdef MAKEFILE
+MAKE = $(MAKE) -f $(MAKEFILE)
+!else
+MAKEFILE = Makefile
+!endif
+
+all: Makefile
+Makefile: -prologue- -generic- -epilogue-
+i386-$(OS): -prologue- -i386- -epilogue-
+i486-$(OS): -prologue- -i486- -epilogue-
+i586-$(OS): -prologue- -i586- -epilogue-
+i686-$(OS): -prologue- -i686- -epilogue-
+alpha-$(OS): -prologue- -alpha- -epilogue-
+
+-prologue-: -basic-vars- -version- -system-vars-
+
+-basic-vars-: nul
+ @echo Creating $(MAKEFILE)
+ @type > $(MAKEFILE) &&|
+\#\#\# Makefile for ruby $(OS) \#\#\#
+$(BANG)ifndef srcdir
+srcdir = $(srcdir:\=/)
+$(BANG)endif
+$(BANG)ifndef prefix
+prefix = $(prefix:\=/)
+$(BANG)endif
+$(BANG)if !defined(BASERUBY)
+!if defined(BASERUBY)
+BASERUBY = $(BASERUBY)
+!endif
+|
+!if !defined(BASERUBY)
+ @for %I in (ruby.exe) do @echo BASERUBY = "%~$$PATH:I" >> $(MAKEFILE)
+!endif
+ @type >> $(MAKEFILE) &&|
+$(BANG)endif
+|
+!if exist(confargs.mk)
+ @type confargs.mk >> $(MAKEFILE)
+ @del confargs.mk
+!endif
+
+-system-vars-: -runtime- -bormm-
+
+-bormm-: nul
+ @-ilink32 -q -Gn -x usebormm.lib > nul
+ @-if exist usebormm.tds $(APPEND) MEMLIB = usebormm.lib
+ @if exist usebormm.* del usebormm.*
+
+-osname-: nul
+ @echo OS = >>$(MAKEFILE)
+
+-runtime-: nul
+ type > conftest.c &&|
+\#include <stdio.h>
+int main(){printf("");return 0;}
+|
+ bcc32 conftest.c cw32i.lib > nul
+ tdump conftest.exe < nul > conftest.i
+ grep "^Imports from CC" conftest.i > conftest.c
+ cpp32 -P- -DFile=\# -DImports=RTNAME -Dfrom== conftest.c > nul
+ $(MAKE) > nul -DBANG=$(BANG) -f &&|
+-runtime-: nul
+$(BANG)include conftest.i
+RT = $$(RTNAME:.DLL=)
+OS = $$(RT:CC32=)
+-runtime-:
+ del conftest.*
+$(BANG)if "$$(OS)" == "50"
+ echo OS = bccwin32 >> $(MAKEFILE)
+$(BANG)else
+ echo OS = bccwin32_$$(OS) >> $(MAKEFILE)
+$(BANG)endif
+|
+ @echo RT = $$(OS) >> $(MAKEFILE)
+
+-version-: nul
+ @cpp32 -I$(srcdir) -P- -o$(MAKEFILE) > nul &&|
+\#define RUBY_REVISION 0
+\#include "version.h"
+MAJOR = RUBY_API_VERSION_MAJOR
+MINOR = RUBY_API_VERSION_MINOR
+TEENY = RUBY_API_VERSION_TEENY
+
+BORLANDC = __BORLANDC__
+|
+ @$(MAKE) > nul -DBANG=$(BANG) -f &&,
+-version-: nul
+$(BANG)include $(MAKEFILE)
+$(BANG)include $(MAKEFILE).i
+-version-:
+ @del $(MAKEFILE).i
+ @type >> $(MAKEFILE) &&|
+MAJOR = $$(MAJOR)
+MINOR = $$(MINOR)
+TEENY = $$(TEENY)
+BORLANDC = $$(BORLANDC)
+|
+,
+
+-generic-: nul
+!if defined(PROCESSOR_ARCHITECTURE) || defined(PROCESSOR_LEVEL)
+ @type >> $(MAKEFILE) &&|
+!if defined(PROCESSOR_ARCHITECTURE)
+$(BANG)ifndef PROCESSOR_ARCHITECTURE
+PROCESSOR_ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
+$(BANG)endif
+!endif
+!if defined(PROCESSOR_LEVEL)
+$(BANG)ifndef PROCESSOR_LEVEL
+PROCESSOR_LEVEL = $(PROCESSOR_LEVEL)
+$(BANG)endif
+!endif
+|
+!endif
+
+-alpha-: nul
+ @$(APPEND) !ifndef PROCESSOR_ARCHITECTURE
+ @$(APPEND) PROCESSOR_ARCHITECTURE = alpha
+ @$(APPEND) !endif
+-ix86-: nul
+ @$(APPEND) !ifndef PROCESSOR_ARCHITECTURE
+ @$(APPEND) PROCESSOR_ARCHITECTURE = x86
+ @$(APPEND) !endif
+
+-i386-: -ix86-
+ @$(APPEND) !ifndef PROCESSOR_LEVEL
+ @$(APPEND) PROCESSOR_LEVEL = 3
+ @$(APPEND) !endif
+-i486-: -ix86-
+ @$(APPEND) !ifndef PROCESSOR_LEVEL
+ @$(APPEND) PROCESSOR_LEVEL = 4
+ @$(APPEND) !endif
+-i586-: -ix86-
+ @$(APPEND) !ifndef PROCESSOR_LEVEL
+ @$(APPEND) PROCESSOR_LEVEL = 5
+ @$(APPEND) !endif
+-i686-: -ix86-
+ @$(APPEND) !ifndef PROCESSOR_LEVEL
+ @$(APPEND) PROCESSOR_LEVEL = 6
+ @$(APPEND) !endif
+
+-epilogue-: -encs-
+
+-encs-: nul
+ @$(MAKE) -f $(srcdir)/win32/enc-setup.mak srcdir="$(srcdir)" MAKEFILE=$(MAKEFILE)
+
+-epilogue-: nul
+ @type >> $(MAKEFILE) &&|
+
+\# RUBY_INSTALL_NAME = ruby
+\# RUBY_SO_NAME = $$(RT)-$$(RUBY_INSTALL_NAME)$$(MAJOR)$$(MINOR)
+\# CFLAGS = -q $$(DEBUGFLAGS) $$(OPTFLAGS) $$(PROCESSOR_FLAG) -w- -wsus -wcpt -wdup -wext -wrng -wrpt -wzdi
+\# CPPFLAGS = -I. -I$$(srcdir) -I$$(srcdir)/missing -DLIBRUBY_SO=\"$$(LIBRUBY_SO)\"
+\# STACK = 0x2000000
+\# LDFLAGS = -S:$$(STACK)
+\# RFLAGS = $$(iconinc)
+\# EXTLIBS = cw32.lib import32.lib user32.lib kernel32.lib
+$(BANG)include $$(srcdir)/bcc32/Makefile.sub
+|
+ @echo type "`$(MAKE)'" to make ruby for $(OS).
diff --git a/benchmark/bm_app_aobench.rb b/benchmark/bm_app_aobench.rb
deleted file mode 100644
index 807349089f..0000000000
--- a/benchmark/bm_app_aobench.rb
+++ /dev/null
@@ -1,292 +0,0 @@
-# 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_mandelbrot.rb b/benchmark/bm_app_mandelbrot.rb
index 801b75e8e2..89069db7ab 100644
--- a/benchmark/bm_app_mandelbrot.rb
+++ b/benchmark/bm_app_mandelbrot.rb
@@ -3,7 +3,7 @@ require 'complex'
def mandelbrot? z
i = 0
while i<100
- i += 1
+ i+=1
z = z * z
return false if z.abs > 2
end
diff --git a/benchmark/bm_app_raise.rb b/benchmark/bm_app_raise.rb
index 5db8f95d50..01d2ae3219 100644
--- a/benchmark/bm_app_raise.rb
+++ b/benchmark/bm_app_raise.rb
@@ -1,6 +1,6 @@
-i = 0
+i=0
while i<300000
- i += 1
+ i+=1
begin
raise
rescue
diff --git a/benchmark/bm_app_strconcat.rb b/benchmark/bm_app_strconcat.rb
index 7eed7c1aed..7b2f2da5a7 100644
--- a/benchmark/bm_app_strconcat.rb
+++ b/benchmark/bm_app_strconcat.rb
@@ -1,5 +1,5 @@
-i = 0
+i=0
while i<2_000_000
"#{1+1} #{1+1} #{1+1}"
- i += 1
+ i+=1
end
diff --git a/benchmark/bm_hash_flatten.rb b/benchmark/bm_hash_flatten.rb
deleted file mode 100644
index e944aae9f2..0000000000
--- a/benchmark/bm_hash_flatten.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-h = {}
-
-10000.times do |i|
- h[i] = nil
-end
-
-1000.times do
- h.flatten
-end
diff --git a/benchmark/bm_hash_keys.rb b/benchmark/bm_hash_keys.rb
deleted file mode 100644
index 6863cd01f9..0000000000
--- a/benchmark/bm_hash_keys.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-h = {}
-
-10000.times do |i|
- h[i] = nil
-end
-
-5000.times do
- h.keys
-end
diff --git a/benchmark/bm_hash_shift.rb b/benchmark/bm_hash_shift.rb
deleted file mode 100644
index a645671a5b..0000000000
--- a/benchmark/bm_hash_shift.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-h = {}
-
-10000.times do |i|
- h[i] = nil
-end
-
-50000.times do
- k, v = h.shift
- h[k] = v
-end
diff --git a/benchmark/bm_hash_values.rb b/benchmark/bm_hash_values.rb
deleted file mode 100644
index 069441302f..0000000000
--- a/benchmark/bm_hash_values.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-h = {}
-
-10000.times do |i|
- h[i] = nil
-end
-
-5000.times do
- h.values
-end
diff --git a/benchmark/bm_io_select2.rb b/benchmark/bm_io_select2.rb
index 10e37d71b2..7b167af774 100644
--- a/benchmark/bm_io_select2.rb
+++ b/benchmark/bm_io_select2.rb
@@ -2,11 +2,7 @@
ios = []
nr = 1000000
-if defined?(Process::RLIMIT_NOFILE)
- max = Process.getrlimit(Process::RLIMIT_NOFILE)[0]
-else
- max = 64
-end
+max = Process.getrlimit(Process::RLIMIT_NOFILE)[0]
puts "max fd: #{max} (results not apparent with <= 1024 max fd)"
((max / 2) - 10).times do
diff --git a/benchmark/bm_io_select3.rb b/benchmark/bm_io_select3.rb
index 7d0ba1f092..fcdbb96e0e 100644
--- a/benchmark/bm_io_select3.rb
+++ b/benchmark/bm_io_select3.rb
@@ -2,11 +2,7 @@
ios = []
nr = 100
-if defined?(Process::RLIMIT_NOFILE)
- max = Process.getrlimit(Process::RLIMIT_NOFILE)[0]
-else
- max = 64
-end
+max = Process.getrlimit(Process::RLIMIT_NOFILE)[0]
puts "max fd: #{max} (results not apparent with <= 1024 max fd)"
(max - 10).times do
diff --git a/benchmark/bm_loop_whileloop.rb b/benchmark/bm_loop_whileloop.rb
index 0072822c06..43d35e1131 100644
--- a/benchmark/bm_loop_whileloop.rb
+++ b/benchmark/bm_loop_whileloop.rb
@@ -1,4 +1,4 @@
-i = 0
+i=0
while i<30_000_000 # benchmark loop 1
- i += 1
+ i+=1
end
diff --git a/benchmark/bm_loop_whileloop2.rb b/benchmark/bm_loop_whileloop2.rb
index 47d02dffc4..e514989661 100644
--- a/benchmark/bm_loop_whileloop2.rb
+++ b/benchmark/bm_loop_whileloop2.rb
@@ -1,4 +1,4 @@
-i = 0
+i=0
while i< 6_000_000 # benchmark loop 2
- i += 1
+ i+=1
end
diff --git a/benchmark/bm_so_binary_trees.rb b/benchmark/bm_so_binary_trees.rb
index b1693e4109..6a26465578 100644
--- a/benchmark/bm_so_binary_trees.rb
+++ b/benchmark/bm_so_binary_trees.rb
@@ -4,9 +4,7 @@
# contributed by Jesse Millikan
# disable output
-alias puts_orig puts
-def puts str
- # disable puts
+def STDOUT.write_ *args
end
def item_check(tree)
@@ -27,7 +25,7 @@ def bottom_up_tree(item, depth)
end
end
-max_depth = 16 # ARGV[0].to_i
+max_depth = 12 # 16 # ARGV[0].to_i
min_depth = 4
max_depth = min_depth + 2 if min_depth + 2 > max_depth
@@ -57,6 +55,3 @@ min_depth.step(max_depth + 1, 2) do |depth|
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
index 873214de7c..56b9410632 100644
--- a/benchmark/bm_so_concatenate.rb
+++ b/benchmark/bm_so_concatenate.rb
@@ -5,9 +5,9 @@
# based on code from Aristarkh A Zagorodnikov and Dat Nguyen
STUFF = "hello\n"
-i = 0
+i=0
while i<10
- i += 1
+ i+=1
hello = ''
4_000_000.times do |e|
hello << STUFF
diff --git a/benchmark/bm_so_exception.rb b/benchmark/bm_so_exception.rb
index deb003a594..d8b461290c 100644
--- a/benchmark/bm_so_exception.rb
+++ b/benchmark/bm_so_exception.rb
@@ -56,6 +56,6 @@ end
i = 1
max = NUM+1
while i < max
- i += 1
+ i+=1
some_function(i+1)
end
diff --git a/benchmark/bm_so_lists.rb b/benchmark/bm_so_lists.rb
index e8f4a2a5f7..f8d26797aa 100644
--- a/benchmark/bm_so_lists.rb
+++ b/benchmark/bm_so_lists.rb
@@ -40,7 +40,7 @@ end
i = 0
while i<NUM
- i += 1
+ i+=1
result = test_lists()
end
diff --git a/benchmark/bm_so_nsieve_bits.rb b/benchmark/bm_so_nsieve_bits.rb
index 6f958ee44e..019b8b6382 100644
--- a/benchmark/bm_so_nsieve_bits.rb
+++ b/benchmark/bm_so_nsieve_bits.rb
@@ -1,5 +1,4 @@
#!/usr/bin/ruby
-#coding: us-ascii
#
# The Great Computer Language Shootout
# http://shootout.alioth.debian.org/
diff --git a/benchmark/bm_so_random.rb b/benchmark/bm_so_random.rb
index a66b9e8e63..57f700b863 100644
--- a/benchmark/bm_so_random.rb
+++ b/benchmark/bm_so_random.rb
@@ -12,9 +12,9 @@ end
N = 3_000_000
-i = 0
+i=0
while i<N
- i +=1
+ i+=1
gen_random(100.0)
end
# "%.9f" % gen_random(100.0)
diff --git a/benchmark/bm_so_sieve.rb b/benchmark/bm_so_sieve.rb
index 43dc302648..3f1b138bd1 100644
--- a/benchmark/bm_so_sieve.rb
+++ b/benchmark/bm_so_sieve.rb
@@ -4,12 +4,12 @@ count = i = j = 0
flags0 = Array.new(8192,1)
k = 0
while k < num
- k += 1
+ k+=1
count = 0
flags = flags0.dup
i = 2
while i<8192
- i += 1
+ i+=1
if flags[i]
# remove all multiples of prime: i
j = i*i
diff --git a/benchmark/bm_vm1_attr_ivar.rb b/benchmark/bm_vm1_attr_ivar.rb
deleted file mode 100644
index 16906f3605..0000000000
--- a/benchmark/bm_vm1_attr_ivar.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-class C
- attr_reader :a, :b
- def initialize
- @a = nil
- @b = nil
- end
-end
-obj = C.new
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- j = obj.a
- k = obj.b
-end
diff --git a/benchmark/bm_vm1_attr_ivar_set.rb b/benchmark/bm_vm1_attr_ivar_set.rb
deleted file mode 100644
index 7e7a6b48c0..0000000000
--- a/benchmark/bm_vm1_attr_ivar_set.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-class C
- attr_accessor :a, :b
- def initialize
- @a = nil
- @b = nil
- end
-end
-obj = C.new
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- obj.a = 1
- obj.b = 2
-end
diff --git a/benchmark/bm_vm1_block.rb b/benchmark/bm_vm1_block.rb
index a9f56b15ea..0a97883974 100644
--- a/benchmark/bm_vm1_block.rb
+++ b/benchmark/bm_vm1_block.rb
@@ -2,9 +2,9 @@ def m
yield
end
-i = 0
+i=0
while i<30_000_000 # while loop 1
- i += 1
+ i+=1
m{
}
end
diff --git a/benchmark/bm_vm1_const.rb b/benchmark/bm_vm1_const.rb
index ac59ebccf1..066916dc31 100644
--- a/benchmark/bm_vm1_const.rb
+++ b/benchmark/bm_vm1_const.rb
@@ -2,7 +2,7 @@ Const = 1
i = 0
while i<30_000_000 # while loop 1
- i += 1
+ i+= 1
j = Const
k = Const
end
diff --git a/benchmark/bm_vm1_ensure.rb b/benchmark/bm_vm1_ensure.rb
index a1596145f2..b1948f7621 100644
--- a/benchmark/bm_vm1_ensure.rb
+++ b/benchmark/bm_vm1_ensure.rb
@@ -1,6 +1,6 @@
-i = 0
+i=0
while i<30_000_000 # benchmark loop 1
- i += 1
+ i+=1
begin
begin
ensure
diff --git a/benchmark/bm_vm1_float_simple.rb b/benchmark/bm_vm1_float_simple.rb
deleted file mode 100644
index d4581439ff..0000000000
--- a/benchmark/bm_vm1_float_simple.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-i = 0.0; f = 0.0
-while i<30_000_000
- i += 1
- f += 0.1; f -= 0.1
- f += 0.1; f -= 0.1
- f += 0.1; f -= 0.1
-end
diff --git a/benchmark/bm_vm1_gc_short_lived.rb b/benchmark/bm_vm1_gc_short_lived.rb
deleted file mode 100644
index e78bca5668..0000000000
--- a/benchmark/bm_vm1_gc_short_lived.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_short_with_complex_long.rb b/benchmark/bm_vm1_gc_short_with_complex_long.rb
deleted file mode 100644
index b66052dee0..0000000000
--- a/benchmark/bm_vm1_gc_short_with_complex_long.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-def nested_hash h, n
- if n == 0
- ''
- else
- 10.times{
- h[Object.new] = nested_hash(h, n-1)
- }
- end
-end
-
-long_lived = Hash.new
-nested_hash long_lived, 6
-
-GC.start
-GC.start
-
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
-
diff --git a/benchmark/bm_vm1_gc_short_with_long.rb b/benchmark/bm_vm1_gc_short_with_long.rb
deleted file mode 100644
index 298dbc845b..0000000000
--- a/benchmark/bm_vm1_gc_short_with_long.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-long_lived = Array.new(1_000_000){|i| "#{i}"}
-GC.start
-GC.start
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_short_with_symbol.rb b/benchmark/bm_vm1_gc_short_with_symbol.rb
deleted file mode 100644
index 6b15c1b7bf..0000000000
--- a/benchmark/bm_vm1_gc_short_with_symbol.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# make many symbols
-50_000.times{|i| sym = "sym#{i}".to_sym}
-GC.start
-GC.start
-
-i = 0
-while i<30_000_000 # while loop 1
- a = '' # short-lived String
- b = ''
- c = ''
- d = ''
- e = ''
- f = ''
- i+=1
-end
diff --git a/benchmark/bm_vm1_gc_wb_ary.rb b/benchmark/bm_vm1_gc_wb_ary.rb
deleted file mode 100644
index ecfab51dbf..0000000000
--- a/benchmark/bm_vm1_gc_wb_ary.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-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
deleted file mode 100644
index 017eff4f94..0000000000
--- a/benchmark/bm_vm1_gc_wb_obj.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-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
index 68a73cf92f..3ba56427f4 100644
--- a/benchmark/bm_vm1_ivar.rb
+++ b/benchmark/bm_vm1_ivar.rb
@@ -2,7 +2,7 @@
i = 0
while i<30_000_000 # while loop 1
- i += 1
+ i+= 1
j = @a
k = @a
end
diff --git a/benchmark/bm_vm1_ivar_set.rb b/benchmark/bm_vm1_ivar_set.rb
index bd81b06c34..c8076c6ab6 100644
--- a/benchmark/bm_vm1_ivar_set.rb
+++ b/benchmark/bm_vm1_ivar_set.rb
@@ -1,6 +1,6 @@
i = 0
while i<30_000_000 # while loop 1
- i += 1
+ i+= 1
@a = 1
@b = 2
end
diff --git a/benchmark/bm_vm1_length.rb b/benchmark/bm_vm1_length.rb
index 353de3ab0e..ccb773278f 100644
--- a/benchmark/bm_vm1_length.rb
+++ b/benchmark/bm_vm1_length.rb
@@ -1,8 +1,8 @@
a = 'abc'
b = [1, 2, 3]
-i = 0
+i=0
while i<30_000_000 # while loop 1
- i += 1
+ i+=1
a.length
b.length
end
diff --git a/benchmark/bm_vm1_lvar_init.rb b/benchmark/bm_vm1_lvar_init.rb
deleted file mode 100644
index 36f2068811..0000000000
--- a/benchmark/bm_vm1_lvar_init.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-def m v
- unless v
- # unreachable code
- v1 = v2 = v3 = v4 = v5 = v6 = v7 = v8 = v9 = v10 =
- v11 = v12 = v13 = v14 = v15 = v16 = v17 = v18 = v19 = v20 =
- v21 = v22 = v23 = v24 = v25 = v26 = v27 = v28 = v29 = v30 =
- v31 = v32 = v33 = v34 = v35 = v36 = v37 = v38 = v39 = v40 =
- v41 = v42 = v43 = v44 = v45 = v46 = v47 = v48 = v49 = v50 = 1
- end
-end
-
-i = 0
-
-while i<30_000_000 # while loop 1
- i += 1
- m i
-end
-
diff --git a/benchmark/bm_vm1_lvar_set.rb b/benchmark/bm_vm1_lvar_set.rb
deleted file mode 100644
index 222e864134..0000000000
--- a/benchmark/bm_vm1_lvar_set.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<30_000_000 # while loop 1
- i += 1
- a = b = c = d = e = f = g = h = j = k = l = m = n = o = p = q = r = 1
-end
diff --git a/benchmark/bm_vm1_neq.rb b/benchmark/bm_vm1_neq.rb
index bbb4ae07a4..9254a0ca9b 100644
--- a/benchmark/bm_vm1_neq.rb
+++ b/benchmark/bm_vm1_neq.rb
@@ -3,6 +3,6 @@ obj1 = Object.new
obj2 = Object.new
while i<30_000_000 # while loop 1
- i += 1
+ i+= 1
obj1 != obj2
end
diff --git a/benchmark/bm_vm1_not.rb b/benchmark/bm_vm1_not.rb
index b09ecdcc21..ee9d0f3605 100644
--- a/benchmark/bm_vm1_not.rb
+++ b/benchmark/bm_vm1_not.rb
@@ -2,6 +2,6 @@ i = 0
obj = Object.new
while i<30_000_000 # while loop 1
- i += 1
+ i+= 1
!obj
end
diff --git a/benchmark/bm_vm1_rescue.rb b/benchmark/bm_vm1_rescue.rb
index b0d3e2bdfa..3af12bb0f3 100644
--- a/benchmark/bm_vm1_rescue.rb
+++ b/benchmark/bm_vm1_rescue.rb
@@ -1,6 +1,6 @@
-i = 0
+i=0
while i<30_000_000 # while loop 1
- i += 1
+ i+=1
begin
rescue
end
diff --git a/benchmark/bm_vm1_simplereturn.rb b/benchmark/bm_vm1_simplereturn.rb
index 63f9f21675..8e9bcb0129 100644
--- a/benchmark/bm_vm1_simplereturn.rb
+++ b/benchmark/bm_vm1_simplereturn.rb
@@ -1,9 +1,9 @@
def m
return 1
end
-i = 0
+i=0
while i<30_000_000 # while loop 1
- i += 1
+ i+=1
m
end
diff --git a/benchmark/bm_vm1_swap.rb b/benchmark/bm_vm1_swap.rb
index 918f8b2112..611baf6b99 100644
--- a/benchmark/bm_vm1_swap.rb
+++ b/benchmark/bm_vm1_swap.rb
@@ -1,8 +1,8 @@
a = 1
b = 2
-i = 0
+i=0
while i<30_000_000 # while loop 1
- i += 1
+ i+=1
a, b = b, a
end
diff --git a/benchmark/bm_vm1_yield.rb b/benchmark/bm_vm1_yield.rb
deleted file mode 100644
index 775597cea6..0000000000
--- a/benchmark/bm_vm1_yield.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-def m
- i = 0
- while i<30_000_000 # while loop 1
- i += 1
- yield
- end
-end
-
-m{}
-
diff --git a/benchmark/bm_vm2_array.rb b/benchmark/bm_vm2_array.rb
index df9037c83c..7713ae9f25 100644
--- a/benchmark/bm_vm2_array.rb
+++ b/benchmark/bm_vm2_array.rb
@@ -1,5 +1,5 @@
-i = 0
+i=0
while i<6_000_000 # benchmark loop 2
- i += 1
+ i+=1
a = [1,2,3,4,5,6,7,8,9,10]
end
diff --git a/benchmark/bm_vm2_bigarray.rb b/benchmark/bm_vm2_bigarray.rb
deleted file mode 100644
index b02509d6a2..0000000000
--- a/benchmark/bm_vm2_bigarray.rb
+++ /dev/null
@@ -1,106 +0,0 @@
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- a = [
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- 1,2,3,4,5,6,7,8,9,10,
- ]
-end
diff --git a/benchmark/bm_vm2_bighash.rb b/benchmark/bm_vm2_bighash.rb
deleted file mode 100644
index 5e3f437bb8..0000000000
--- a/benchmark/bm_vm2_bighash.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-i = 0
-while i<60_000 # benchmark loop 2
- i += 1
- a = {0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9, 10=>10, 11=>11, 12=>12, 13=>13, 14=>14, 15=>15, 16=>16, 17=>17, 18=>18, 19=>19, 20=>20, 21=>21, 22=>22, 23=>23, 24=>24, 25=>25, 26=>26, 27=>27, 28=>28, 29=>29, 30=>30, 31=>31, 32=>32, 33=>33, 34=>34, 35=>35, 36=>36, 37=>37, 38=>38, 39=>39, 40=>40, 41=>41, 42=>42, 43=>43, 44=>44, 45=>45, 46=>46, 47=>47, 48=>48, 49=>49, 50=>50, 51=>51, 52=>52, 53=>53, 54=>54, 55=>55, 56=>56, 57=>57, 58=>58, 59=>59, 60=>60, 61=>61, 62=>62, 63=>63, 64=>64, 65=>65, 66=>66, 67=>67, 68=>68, 69=>69, 70=>70, 71=>71, 72=>72, 73=>73, 74=>74, 75=>75, 76=>76, 77=>77, 78=>78, 79=>79, 80=>80, 81=>81, 82=>82, 83=>83, 84=>84, 85=>85, 86=>86, 87=>87, 88=>88, 89=>89, 90=>90, 91=>91, 92=>92, 93=>93, 94=>94, 95=>95, 96=>96, 97=>97, 98=>98, 99=>99, 100=>100, 101=>101, 102=>102, 103=>103, 104=>104, 105=>105, 106=>106, 107=>107, 108=>108, 109=>109, 110=>110, 111=>111, 112=>112, 113=>113, 114=>114, 115=>115, 116=>116, 117=>117, 118=>118, 119=>119, 120=>120, 121=>121, 122=>122, 123=>123, 124=>124, 125=>125, 126=>126, 127=>127, 128=>128, 129=>129, 130=>130, 131=>131, 132=>132, 133=>133, 134=>134, 135=>135, 136=>136, 137=>137, 138=>138, 139=>139, 140=>140, 141=>141, 142=>142, 143=>143, 144=>144, 145=>145, 146=>146, 147=>147, 148=>148, 149=>149, 150=>150, 151=>151, 152=>152, 153=>153, 154=>154, 155=>155, 156=>156, 157=>157, 158=>158, 159=>159, 160=>160, 161=>161, 162=>162, 163=>163, 164=>164, 165=>165, 166=>166, 167=>167, 168=>168, 169=>169, 170=>170, 171=>171, 172=>172, 173=>173, 174=>174, 175=>175, 176=>176, 177=>177, 178=>178, 179=>179, 180=>180, 181=>181, 182=>182, 183=>183, 184=>184, 185=>185, 186=>186, 187=>187, 188=>188, 189=>189, 190=>190, 191=>191, 192=>192, 193=>193, 194=>194, 195=>195, 196=>196, 197=>197, 198=>198, 199=>199, 200=>200, 201=>201, 202=>202, 203=>203, 204=>204, 205=>205, 206=>206, 207=>207, 208=>208, 209=>209, 210=>210, 211=>211, 212=>212, 213=>213, 214=>214, 215=>215, 216=>216, 217=>217, 218=>218, 219=>219, 220=>220, 221=>221, 222=>222, 223=>223, 224=>224, 225=>225, 226=>226, 227=>227, 228=>228, 229=>229, 230=>230, 231=>231, 232=>232, 233=>233, 234=>234, 235=>235, 236=>236, 237=>237, 238=>238, 239=>239, 240=>240, 241=>241, 242=>242, 243=>243, 244=>244, 245=>245, 246=>246, 247=>247, 248=>248, 249=>249, 250=>250, 251=>251, 252=>252, 253=>253, 254=>254, 255=>255, 256=>256, 257=>257, 258=>258, 259=>259, 260=>260, 261=>261, 262=>262, 263=>263, 264=>264, 265=>265, 266=>266, 267=>267, 268=>268, 269=>269, 270=>270, 271=>271, 272=>272, 273=>273, 274=>274, 275=>275, 276=>276, 277=>277, 278=>278, 279=>279, 280=>280, 281=>281, 282=>282, 283=>283, 284=>284, 285=>285, 286=>286, 287=>287, 288=>288, 289=>289, 290=>290, 291=>291, 292=>292, 293=>293, 294=>294, 295=>295, 296=>296, 297=>297, 298=>298, 299=>299, 300=>300, 301=>301, 302=>302, 303=>303, 304=>304, 305=>305, 306=>306, 307=>307, 308=>308, 309=>309, 310=>310, 311=>311, 312=>312, 313=>313, 314=>314, 315=>315, 316=>316, 317=>317, 318=>318, 319=>319, 320=>320, 321=>321, 322=>322, 323=>323, 324=>324, 325=>325, 326=>326, 327=>327, 328=>328, 329=>329, 330=>330, 331=>331, 332=>332, 333=>333, 334=>334, 335=>335, 336=>336, 337=>337, 338=>338, 339=>339, 340=>340, 341=>341, 342=>342, 343=>343, 344=>344, 345=>345, 346=>346, 347=>347, 348=>348, 349=>349, 350=>350, 351=>351, 352=>352, 353=>353, 354=>354, 355=>355, 356=>356, 357=>357, 358=>358, 359=>359, 360=>360, 361=>361, 362=>362, 363=>363, 364=>364, 365=>365, 366=>366, 367=>367, 368=>368, 369=>369, 370=>370, 371=>371, 372=>372, 373=>373, 374=>374, 375=>375, 376=>376, 377=>377, 378=>378, 379=>379, 380=>380, 381=>381, 382=>382, 383=>383, 384=>384, 385=>385, 386=>386, 387=>387, 388=>388, 389=>389, 390=>390, 391=>391, 392=>392, 393=>393, 394=>394, 395=>395, 396=>396, 397=>397, 398=>398, 399=>399, 400=>400, 401=>401, 402=>402, 403=>403, 404=>404, 405=>405, 406=>406, 407=>407, 408=>408, 409=>409, 410=>410, 411=>411, 412=>412, 413=>413, 414=>414, 415=>415, 416=>416, 417=>417, 418=>418, 419=>419, 420=>420, 421=>421, 422=>422, 423=>423, 424=>424, 425=>425, 426=>426, 427=>427, 428=>428, 429=>429, 430=>430, 431=>431, 432=>432, 433=>433, 434=>434, 435=>435, 436=>436, 437=>437, 438=>438, 439=>439, 440=>440, 441=>441, 442=>442, 443=>443, 444=>444, 445=>445, 446=>446, 447=>447, 448=>448, 449=>449, 450=>450, 451=>451, 452=>452, 453=>453, 454=>454, 455=>455, 456=>456, 457=>457, 458=>458, 459=>459, 460=>460, 461=>461, 462=>462, 463=>463, 464=>464, 465=>465, 466=>466, 467=>467, 468=>468, 469=>469, 470=>470, 471=>471, 472=>472, 473=>473, 474=>474, 475=>475, 476=>476, 477=>477, 478=>478, 479=>479, 480=>480, 481=>481, 482=>482, 483=>483, 484=>484, 485=>485, 486=>486, 487=>487, 488=>488, 489=>489, 490=>490, 491=>491, 492=>492, 493=>493, 494=>494, 495=>495, 496=>496, 497=>497, 498=>498, 499=>499, 500=>500,}
-end
diff --git a/benchmark/bm_vm2_case.rb b/benchmark/bm_vm2_case.rb
index adc6e4df0a..cd09788a85 100644
--- a/benchmark/bm_vm2_case.rb
+++ b/benchmark/bm_vm2_case.rb
@@ -1,4 +1,4 @@
-i = 0
+i=0
while i<6_000_000 # while loop 2
case :foo
when :bar
@@ -8,7 +8,7 @@ while i<6_000_000 # while loop 2
when :boo
raise
when :foo
- i += 1
+ i+=1
end
end
diff --git a/benchmark/bm_vm2_defined_method.rb b/benchmark/bm_vm2_defined_method.rb
index 053ed6c912..06c0d01baa 100644
--- a/benchmark/bm_vm2_defined_method.rb
+++ b/benchmark/bm_vm2_defined_method.rb
@@ -2,8 +2,8 @@ class Object
define_method(:m){}
end
-i = 0
+i=0
while i<6_000_000 # benchmark loop 2
- i += 1
+ i+=1
m; m; m; m; m; m; m; m;
end
diff --git a/benchmark/bm_vm2_dstr.rb b/benchmark/bm_vm2_dstr.rb
deleted file mode 100644
index 58c0f7bbc3..0000000000
--- a/benchmark/bm_vm2_dstr.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-i = 0
-x = y = 'z'
-while i<6_000_000 # benchmark loop 2
- i += 1
- str = "foo#{x}bar#{y}baz"
-end
diff --git a/benchmark/bm_vm2_eval.rb b/benchmark/bm_vm2_eval.rb
index 307cfc28ef..e72b4661ac 100644
--- a/benchmark/bm_vm2_eval.rb
+++ b/benchmark/bm_vm2_eval.rb
@@ -1,6 +1,6 @@
-i = 0
+i=0
while i<6_000_000 # benchmark loop 2
- i += 1
+ i+=1
eval("1")
end
diff --git a/benchmark/bm_vm2_method.rb b/benchmark/bm_vm2_method.rb
index a8ccff7138..f92e39a73f 100644
--- a/benchmark/bm_vm2_method.rb
+++ b/benchmark/bm_vm2_method.rb
@@ -2,8 +2,8 @@ def m
nil
end
-i = 0
+i=0
while i<6_000_000 # benchmark loop 2
- i += 1
+ i+=1
m; m; m; m; m; m; m; m;
end
diff --git a/benchmark/bm_vm2_method_missing.rb b/benchmark/bm_vm2_method_missing.rb
deleted file mode 100644
index 2badc73101..0000000000
--- a/benchmark/bm_vm2_method_missing.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class C
- def method_missing mid
- end
-end
-
-obj = C.new
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m; obj.m;
-end
diff --git a/benchmark/bm_vm2_method_with_block.rb b/benchmark/bm_vm2_method_with_block.rb
deleted file mode 100644
index b4efb4f520..0000000000
--- a/benchmark/bm_vm2_method_with_block.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-def m
- nil
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
- m{}; m{}; m{}; m{}; m{}; m{}; m{}; m{};
-end
diff --git a/benchmark/bm_vm2_mutex.rb b/benchmark/bm_vm2_mutex.rb
index 7362f738c5..01b1c478cb 100644
--- a/benchmark/bm_vm2_mutex.rb
+++ b/benchmark/bm_vm2_mutex.rb
@@ -2,8 +2,8 @@ require 'thread'
m = Mutex.new
-i = 0
+i=0
while i<6_000_000 # benchmark loop 2
- i += 1
+ i+=1
m.synchronize{}
end
diff --git a/benchmark/bm_vm2_poly_method.rb b/benchmark/bm_vm2_poly_method.rb
index c82c0e4bce..921457d817 100644
--- a/benchmark/bm_vm2_poly_method.rb
+++ b/benchmark/bm_vm2_poly_method.rb
@@ -12,9 +12,9 @@ end
o1 = C1.new
o2 = C2.new
-i = 0
+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
+ i+=1
end
diff --git a/benchmark/bm_vm2_poly_method_ov.rb b/benchmark/bm_vm2_poly_method_ov.rb
index aa5fd1dd38..bf09837dd7 100644
--- a/benchmark/bm_vm2_poly_method_ov.rb
+++ b/benchmark/bm_vm2_poly_method_ov.rb
@@ -12,9 +12,9 @@ end
o1 = C1.new
o2 = C2.new
-i = 0
+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
+ i+=1
end
diff --git a/benchmark/bm_vm2_proc.rb b/benchmark/bm_vm2_proc.rb
index 65e5217371..3f51056bf9 100644
--- a/benchmark/bm_vm2_proc.rb
+++ b/benchmark/bm_vm2_proc.rb
@@ -6,9 +6,9 @@ pr = m{
a = 1
}
-i = 0
+i=0
while i<6_000_000 # benchmark loop 2
- i += 1
+ i+=1
pr.call
end
diff --git a/benchmark/bm_vm2_raise1.rb b/benchmark/bm_vm2_raise1.rb
deleted file mode 100644
index aa5387987f..0000000000
--- a/benchmark/bm_vm2_raise1.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-def rec n
- if n > 0
- rec n-1
- else
- raise
- end
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
-
- begin
- rec 1
- rescue
- # ignore
- end
-end
diff --git a/benchmark/bm_vm2_raise2.rb b/benchmark/bm_vm2_raise2.rb
deleted file mode 100644
index 1f61c63157..0000000000
--- a/benchmark/bm_vm2_raise2.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-def rec n
- if n > 0
- rec n-1
- else
- raise
- end
-end
-
-i = 0
-while i<6_000_000 # benchmark loop 2
- i += 1
-
- begin
- rec 10
- rescue
- # ignore
- end
-end
diff --git a/benchmark/bm_vm2_regexp.rb b/benchmark/bm_vm2_regexp.rb
index 55f9e957a3..428099e55a 100644
--- a/benchmark/bm_vm2_regexp.rb
+++ b/benchmark/bm_vm2_regexp.rb
@@ -1,6 +1,6 @@
-i = 0
+i=0
str = 'xxxhogexxx'
while i<6_000_000 # benchmark loop 2
/hoge/ =~ str
- i += 1
+ i+=1
end
diff --git a/benchmark/bm_vm2_send.rb b/benchmark/bm_vm2_send.rb
index 6a3ab6fdab..37c79fb1c3 100644
--- a/benchmark/bm_vm2_send.rb
+++ b/benchmark/bm_vm2_send.rb
@@ -5,8 +5,8 @@ end
o = C.new
-i = 0
+i=0
while i<6_000_000 # benchmark loop 2
- i += 1
+ i+=1
o.__send__ :m
end
diff --git a/benchmark/bm_vm2_super.rb b/benchmark/bm_vm2_super.rb
index afd8579e7b..d4f0b647de 100644
--- a/benchmark/bm_vm2_super.rb
+++ b/benchmark/bm_vm2_super.rb
@@ -16,5 +16,5 @@ obj = CC.new
i = 0
while i<6_000_000 # benchmark loop 2
obj.m
- i += 1
+ i+=1
end
diff --git a/benchmark/bm_vm2_unif1.rb b/benchmark/bm_vm2_unif1.rb
index 1774625942..775f4d37e6 100644
--- a/benchmark/bm_vm2_unif1.rb
+++ b/benchmark/bm_vm2_unif1.rb
@@ -3,6 +3,6 @@ def m a, b
end
while i<6_000_000 # benchmark loop 2
- i += 1
+ i+=1
m 100, 200
end
diff --git a/benchmark/bm_vm2_zsuper.rb b/benchmark/bm_vm2_zsuper.rb
index 2a43e62217..7e90df1822 100644
--- a/benchmark/bm_vm2_zsuper.rb
+++ b/benchmark/bm_vm2_zsuper.rb
@@ -16,5 +16,5 @@ obj = CC.new
while i<6_000_000 # benchmark loop 2
obj.m 10
- i += 1
+ i+=1
end
diff --git a/benchmark/bm_vm3_backtrace.rb b/benchmark/bm_vm3_backtrace.rb
deleted file mode 100644
index 0fbf73e1ca..0000000000
--- a/benchmark/bm_vm3_backtrace.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# get last backtrace
-
-begin
- caller(0, 0)
-rescue ArgumentError
- alias caller_orig caller
- def caller lev, n
- caller_orig(lev)[0..n]
- end
-end
-
-def rec n
- if n < 0
- 100_000.times{
- caller(0, 1)
- }
- else
- rec(n-1)
- end
-end
-
-rec 50
diff --git a/benchmark/bm_vm3_clearmethodcache.rb b/benchmark/bm_vm3_clearmethodcache.rb
index 9661323cd2..a25c372f06 100644
--- a/benchmark/bm_vm3_clearmethodcache.rb
+++ b/benchmark/bm_vm3_clearmethodcache.rb
@@ -1,6 +1,6 @@
-i = 0
+i=0
while i<200_000
- i += 1
+ i+=1
Class.new{
def m; end
diff --git a/benchmark/bm_vm_thread_create_join.rb b/benchmark/bm_vm_thread_create_join.rb
index 393cd45df9..325a66d587 100644
--- a/benchmark/bm_vm_thread_create_join.rb
+++ b/benchmark/bm_vm_thread_create_join.rb
@@ -1,6 +1,6 @@
-i = 0
+i=0
while i<100_000 # benchmark loop 3
- i += 1
+ i+=1
Thread.new{
}.join
end
diff --git a/benchmark/bm_vm_thread_mutex1.rb b/benchmark/bm_vm_thread_mutex1.rb
index 5c9f85dfb7..588506e87c 100644
--- a/benchmark/bm_vm_thread_mutex1.rb
+++ b/benchmark/bm_vm_thread_mutex1.rb
@@ -7,9 +7,9 @@ max = 2000
lmax = max * max
(1..1).map{
Thread.new{
- i = 0
+ i=0
while i<lmax
- i += 1
+ i+=1
m.synchronize{
r += 1
}
diff --git a/benchmark/bm_vm_thread_mutex2.rb b/benchmark/bm_vm_thread_mutex2.rb
index 10de59054f..d700b146d4 100644
--- a/benchmark/bm_vm_thread_mutex2.rb
+++ b/benchmark/bm_vm_thread_mutex2.rb
@@ -7,9 +7,9 @@ max = 2000
lmax = (max * max)/2
(1..2).map{
Thread.new{
- i = 0
+ i=0
while i<lmax
- i += 1
+ i+=1
m.synchronize{
r += 1
}
diff --git a/benchmark/bm_vm_thread_mutex3.rb b/benchmark/bm_vm_thread_mutex3.rb
index 7f9a44b39d..f502b6ac84 100644
--- a/benchmark/bm_vm_thread_mutex3.rb
+++ b/benchmark/bm_vm_thread_mutex3.rb
@@ -6,9 +6,9 @@ r = 0
max = 2000
(1..max).map{
Thread.new{
- i = 0
+ i=0
while i<max
- i += 1
+ i+=1
m.synchronize{
r += 1
}
diff --git a/benchmark/bm_vm_thread_pass_flood.rb b/benchmark/bm_vm_thread_pass_flood.rb
index 27157d1a6f..56b5b0a956 100644
--- a/benchmark/bm_vm_thread_pass_flood.rb
+++ b/benchmark/bm_vm_thread_pass_flood.rb
@@ -2,7 +2,7 @@
Thread.new{loop{Thread.pass}}
}
-i = 0
+i=0
while i<10000
i += 1
end
diff --git a/benchmark/bm_vm_thread_queue.rb b/benchmark/bm_vm_thread_queue.rb
deleted file mode 100644
index 37381ae62b..0000000000
--- a/benchmark/bm_vm_thread_queue.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require 'thread'
-
-n = 1_000_000
-q = Queue.new
-consumer = Thread.new{
- while q.pop
- # consuming
- end
-}
-
-producer = Thread.new{
- n.times{
- q.push true
- }
- q.push nil
-}
-
-consumer.join
diff --git a/benchmark/bmx_temp.rb b/benchmark/bmx_temp.rb
new file mode 100644
index 0000000000..0b4b219ca2
--- /dev/null
+++ b/benchmark/bmx_temp.rb
@@ -0,0 +1,9 @@
+def m
+ nil
+end
+
+i=0
+while i<800000 # benchmark loop 2
+ i+=1
+ m; m; m; m; m; m; m; m;
+end
diff --git a/benchmark/driver.rb b/benchmark/driver.rb
index cbc72cf604..7dab292a15 100644
--- a/benchmark/driver.rb
+++ b/benchmark/driver.rb
@@ -60,25 +60,22 @@ class BenchmarkDriver
if /(.+)::(.+)/ =~ e
# ex) ruby-a::/path/to/ruby-a
- label = $1.strip
- path = $2
- version = `#{path} -v`.chomp
+ v = $1.strip
+ e = $2
else
- path = e
- version = label = `#{path} -v`.chomp
+ v = `#{e} -v`.chomp
+ v.sub!(/ patchlevel \d+/, '')
end
- [path, label, version]
+ [e, v]
}.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, ...]]], ...]
@@ -87,33 +84,14 @@ class BenchmarkDriver
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}\""
+ @execs.each_with_index{|(e, v), i|
+ message "target #{i}: #{v}"
}
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
+ def average results
+ results.inject(:+) / results.length
end
def show_results
@@ -125,7 +103,7 @@ class BenchmarkDriver
message
message PP.pp(@results, "", 79)
message
- message "Elapsed time: #{Time.now - @start_time} (sec)"
+ message "Elapesed time: #{Time.now - @start_time} (sec)"
end
output '-----------------------------------------------------------'
@@ -135,49 +113,50 @@ class BenchmarkDriver
output "minimum results in each #{@repeat} measurements."
end
- output "Execution time (sec)"
- output "name\t#{@execs.map{|(_, v)| v}.join("\t")}"
+ difference = "\taverage difference" if @execs.length == 2
+ total_difference = 0
+
+ output "name\t#{@execs.map{|(e, v)| v}.join("\t")}#{difference}"
@results.each{|v, result|
rets = []
- s = adjusted_results(v, result){|r|
+ s = nil
+ result.each_with_index{|e, i|
+ r = e.min
+ case v
+ when /^vm1_/
+ if @loop_wl1
+ r -= @loop_wl1[i]
+ s = '*'
+ end
+ when /^vm2_/
+ if @loop_wl2
+ r -= @loop_wl2[i]
+ s = '*'
+ end
+ end
rets << sprintf("%.3f", r)
}
+
+ if difference
+ diff = average(result.last) - average(result.first)
+ total_difference += diff
+ rets << sprintf("%.3f", diff)
+ end
+
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]}"
+ if difference and @verbose
+ output '-----------------------------------------------------------'
+ output "average total difference is #{total_difference}"
end
end
def files
flag = {}
+ vm1 = vm2 = wl1 = wl2 = false
@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
@@ -239,35 +218,31 @@ class BenchmarkDriver
end
def measure executable, file
- cmd = "#{executable} #{@ruby_arg} #{file}"
-
+ cmd = "#{executable} #{file}"
m = Benchmark.measure{
- system(cmd, out: File::NULL)
+ `#{cmd}`
}
if $? != 0
- output "\`#{cmd}\' exited with abnormal status (#{$?})"
- 0
- else
- m.real
+ raise "\`#{cmd}\' exited with abnormal status (#{$?})"
end
+
+ m.real
end
end
if __FILE__ == $0
opt = {
- :execs => [],
- :dir => File.dirname(__FILE__),
+ :execs => ['ruby'],
+ :dir => './',
: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
- }
+ "Specify benchmark one or more targets. (exec1; exec2; exec3, ...)"){|e|
+ opt[:execs] = e.split(/;/)
}
o.on('-d', '--directory [DIRECTORY]', "Benchmark suites directory"){|d|
opt[:dir] = d
@@ -275,17 +250,11 @@ if __FILE__ == $0
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('-o', '--output-file [FILE]', "Output file"){|o|
+ opt[:output] = o
}
o.on('-q', '--quiet', "Run without notify information except result table."){|q|
opt[:quiet] = q
diff --git a/benchmark/gc/aobench.rb b/benchmark/gc/aobench.rb
deleted file mode 100644
index 2eed7abc83..0000000000
--- a/benchmark/gc/aobench.rb
+++ /dev/null
@@ -1 +0,0 @@
-require_relative '../bm_app_aobench.rb'
diff --git a/benchmark/gc/binary_trees.rb b/benchmark/gc/binary_trees.rb
deleted file mode 100644
index af8ea722aa..0000000000
--- a/benchmark/gc/binary_trees.rb
+++ /dev/null
@@ -1 +0,0 @@
-require_relative '../bm_so_binary_trees.rb'
diff --git a/benchmark/gc/gcbench.rb b/benchmark/gc/gcbench.rb
deleted file mode 100644
index 09a404466a..0000000000
--- a/benchmark/gc/gcbench.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-require 'benchmark'
-require 'pp'
-require 'optparse'
-
-$list = true
-$gcprof = true
-
-opt = OptionParser.new
-opt.on('-q'){$list = false}
-opt.on('-d'){$gcprof = false}
-opt.parse!(ARGV)
-
-script = File.join(File.dirname(__FILE__), ARGV.shift)
-script += '.rb' unless FileTest.exist?(script)
-raise "#{script} not found" unless FileTest.exist?(script)
-
-puts "Script: #{script}"
-
-if $gcprof
- GC::Profiler.enable
-end
-
-tms = Benchmark.measure{|x|
- load script
-}
-
-gc_time = 0
-
-if $gcprof
- gc_time = GC::Profiler.total_time
- GC::Profiler.report if $list and RUBY_VERSION >= '2.0.0' # before 1.9.3, report() may run infinite loop
- GC::Profiler.disable
-end
-
-pp GC.stat
-
-puts "#{RUBY_DESCRIPTION} #{GC::OPTS.inspect}" if defined?(GC::OPTS)
-
-desc = "#{RUBY_VERSION}#{RUBY_PATCHLEVEL >= 0 ? "p#{RUBY_PATCHLEVEL}" : "dev"}"
-name = File.basename(script, '.rb')
-
-puts
-puts script
-puts Benchmark::CAPTION
-puts tms
-puts "GC total time (sec): #{gc_time}"
-
-# show High-Water Mark on Linux
-if File.exist?('/proc/self/status') && /VmHWM:\s*(\d+.+)/ =~ File.read('/proc/self/status')
- puts
- puts "VmHWM: #{$1.chomp}"
-end
-
-puts
-puts "Summary of #{name} on #{desc}\t#{tms.real}\t#{gc_time}\t#{GC.count}"
-puts " (real time in sec, GC time in sec, GC count)"
diff --git a/benchmark/gc/hash1.rb b/benchmark/gc/hash1.rb
deleted file mode 100644
index cb030d458d..0000000000
--- a/benchmark/gc/hash1.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-value = 0.01
-h = {}
-n = 50_000
-
-1.upto(n){|i|
- h["%020d" % i] = "v-#{i}"
-}
-
-(n * 1_000).times{
- ''
-}
diff --git a/benchmark/gc/hash2.rb b/benchmark/gc/hash2.rb
deleted file mode 100644
index e8c943fb21..0000000000
--- a/benchmark/gc/hash2.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-value = 0.01
-h = {}
-n = 4*(10**6)
-
-1.upto(n){|i|
- h["%020d" % i] = value * i
-}
diff --git a/benchmark/gc/null.rb b/benchmark/gc/null.rb
deleted file mode 100644
index c05a79f561..0000000000
--- a/benchmark/gc/null.rb
+++ /dev/null
@@ -1 +0,0 @@
-# null
diff --git a/benchmark/gc/pentomino.rb b/benchmark/gc/pentomino.rb
deleted file mode 100644
index 94ba74be89..0000000000
--- a/benchmark/gc/pentomino.rb
+++ /dev/null
@@ -1 +0,0 @@
-require_relative '../bm_app_pentomino.rb'
diff --git a/benchmark/gc/rdoc.rb b/benchmark/gc/rdoc.rb
deleted file mode 100644
index 14c89f5611..0000000000
--- a/benchmark/gc/rdoc.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require 'rdoc/rdoc'
-require 'tmpdir'
-
-srcdir = File.expand_path('../..', __dir__)
-
-Dir.mktmpdir('rdocbench-'){|d|
- dir = File.join(d, 'rdocbench')
- args = %W(--root #{srcdir} --page-dir #{srcdir}/doc --encoding=UTF-8 --no-force-update --all --ri --debug --quiet #{srcdir})
- args << '--op' << dir
-
- r = RDoc::RDoc.new
- r.document args
-}
diff --git a/benchmark/gc/redblack.rb b/benchmark/gc/redblack.rb
deleted file mode 100644
index c66290140a..0000000000
--- a/benchmark/gc/redblack.rb
+++ /dev/null
@@ -1,366 +0,0 @@
-# This benchmark is imported from https://github.com/jruby/rubybench/blob/master/time/bench_red_black.rb
-# License is License is Apache-2
-
-require 'benchmark'
-
-# Algorithm based on "Introduction to Algorithms" by Cormen and others
-class RedBlackTree
- class Node
- attr_accessor :color
- attr_accessor :key
- attr_accessor :left
- attr_accessor :right
- attr_accessor :parent
-
- RED = :red
- BLACK = :black
- COLORS = [RED, BLACK].freeze
-
- def initialize(key, color = RED)
- raise ArgumentError, "Bad value for color parameter" unless COLORS.include?(color)
- @color = color
- @key = key
- @left = @right = @parent = NilNode.instance
- end
-
- def black?
- return color == BLACK
- end
-
- def red?
- return color == RED
- end
- end
-
- class NilNode < Node
- class << self
- private :new
-
- # it's not thread safe
- def instance
- @instance ||= begin
- def instance
- return @instance
- end
-
- new
- end
- end
- end
-
- def initialize
- self.color = BLACK
- self.key = 0
- self.left = nil
- self.right = nil
- self.parent = nil
- end
-
- def nil?
- return true
- end
- end
-
- include Enumerable
-
- attr_accessor :root
- attr_accessor :size
-
- def initialize
- self.root = NilNode.instance
- self.size = 0
- end
-
- def add(key)
- insert(Node.new(key))
- end
-
- def insert(x)
- insert_helper(x)
-
- x.color = Node::RED
- while x != root && x.parent.color == Node::RED
- if x.parent == x.parent.parent.left
- y = x.parent.parent.right
- if !y.nil? && y.color == Node::RED
- x.parent.color = Node::BLACK
- y.color = Node::BLACK
- x.parent.parent.color = Node::RED
- x = x.parent.parent
- else
- if x == x.parent.right
- x = x.parent
- left_rotate(x)
- end
- x.parent.color = Node::BLACK
- x.parent.parent.color = Node::RED
- right_rotate(x.parent.parent)
- end
- else
- y = x.parent.parent.left
- if !y.nil? && y.color == Node::RED
- x.parent.color = Node::BLACK
- y.color = Node::BLACK
- x.parent.parent.color = Node::RED
- x = x.parent.parent
- else
- if x == x.parent.left
- x = x.parent
- right_rotate(x)
- end
- x.parent.color = Node::BLACK
- x.parent.parent.color = Node::RED
- left_rotate(x.parent.parent)
- end
- end
- end
- root.color = Node::BLACK
- end
-
- alias << insert
-
- def delete(z)
- y = (z.left.nil? || z.right.nil?) ? z : successor(z)
- x = y.left.nil? ? y.right : y.left
- x.parent = y.parent
-
- if y.parent.nil?
- self.root = x
- else
- if y == y.parent.left
- y.parent.left = x
- else
- y.parent.right = x
- end
- end
-
- z.key = y.key if y != z
-
- if y.color == Node::BLACK
- delete_fixup(x)
- end
-
- self.size -= 1
- return y
- end
-
- def minimum(x = root)
- while !x.left.nil?
- x = x.left
- end
- return x
- end
-
- def maximum(x = root)
- while !x.right.nil?
- x = x.right
- end
- return x
- end
-
- def successor(x)
- if !x.right.nil?
- return minimum(x.right)
- end
- y = x.parent
- while !y.nil? && x == y.right
- x = y
- y = y.parent
- end
- return y
- end
-
- def predecessor(x)
- if !x.left.nil?
- return maximum(x.left)
- end
- y = x.parent
- while !y.nil? && x == y.left
- x = y
- y = y.parent
- end
- return y
- end
-
- def inorder_walk(x = root)
- x = self.minimum
- while !x.nil?
- yield x.key
- x = successor(x)
- end
- end
-
- alias each inorder_walk
-
- def reverse_inorder_walk(x = root)
- x = self.maximum
- while !x.nil?
- yield x.key
- x = predecessor(x)
- end
- end
-
- alias reverse_each reverse_inorder_walk
-
- def search(key, x = root)
- while !x.nil? && x.key != key
- key < x.key ? x = x.left : x = x.right
- end
- return x
- end
-
- def empty?
- return self.root.nil?
- end
-
- def black_height(x = root)
- height = 0
- while !x.nil?
- x = x.left
- height +=1 if x.nil? || x.black?
- end
- return height
- end
-
-private
-
- def left_rotate(x)
- raise "x.right is nil!" if x.right.nil?
- y = x.right
- x.right = y.left
- y.left.parent = x if !y.left.nil?
- y.parent = x.parent
- if x.parent.nil?
- self.root = y
- else
- if x == x.parent.left
- x.parent.left = y
- else
- x.parent.right = y
- end
- end
- y.left = x
- x.parent = y
- end
-
- def right_rotate(x)
- raise "x.left is nil!" if x.left.nil?
- y = x.left
- x.left = y.right
- y.right.parent = x if !y.right.nil?
- y.parent = x.parent
- if x.parent.nil?
- self.root = y
- else
- if x == x.parent.left
- x.parent.left = y
- else
- x.parent.right = y
- end
- end
- y.right = x
- x.parent = y
- end
-
- def insert_helper(z)
- y = NilNode.instance
- x = root
- while !x.nil?
- y = x
- z.key < x.key ? x = x.left : x = x.right
- end
- z.parent = y
- if y.nil?
- self.root = z
- else
- z.key < y.key ? y.left = z : y.right = z
- end
- self.size += 1
- end
-
- def delete_fixup(x)
- while x != root && x.color == Node::BLACK
- if x == x.parent.left
- w = x.parent.right
- if w.color == Node::RED
- w.color = Node::BLACK
- x.parent.color = Node::RED
- left_rotate(x.parent)
- w = x.parent.right
- end
- if w.left.color == Node::BLACK && w.right.color == Node::BLACK
- w.color = Node::RED
- x = x.parent
- else
- if w.right.color == Node::BLACK
- w.left.color = Node::BLACK
- w.color = Node::RED
- right_rotate(w)
- w = x.parent.right
- end
- w.color = x.parent.color
- x.parent.color = Node::BLACK
- w.right.color = Node::BLACK
- left_rotate(x.parent)
- x = root
- end
- else
- w = x.parent.left
- if w.color == Node::RED
- w.color = Node::BLACK
- x.parent.color = Node::RED
- right_rotate(x.parent)
- w = x.parent.left
- end
- if w.right.color == Node::BLACK && w.left.color == Node::BLACK
- w.color = Node::RED
- x = x.parent
- else
- if w.left.color == Node::BLACK
- w.right.color = Node::BLACK
- w.color = Node::RED
- left_rotate(w)
- w = x.parent.left
- end
- w.color = x.parent.color
- x.parent.color = Node::BLACK
- w.left.color = Node::BLACK
- right_rotate(x.parent)
- x = root
- end
- end
- end
- x.color = Node::BLACK
- end
-end
-
-def rbt_bm
- n = 100_000
- a1 = []; n.times { a1 << rand(999_999) }
- a2 = []; n.times { a2 << rand(999_999) }
-
- start = Time.now
-
- tree = RedBlackTree.new
-
- n.times {|i| tree.add(i) }
- n.times { tree.delete(tree.root) }
-
- tree = RedBlackTree.new
- a1.each {|e| tree.add(e) }
- a2.each {|e| tree.search(e) }
- tree.inorder_walk {|key| key + 1 }
- tree.reverse_inorder_walk {|key| key + 1 }
- n.times { tree.minimum }
- n.times { tree.maximum }
-
- return Time.now - start
-end
-
-N = (ARGV[0] || 10).to_i
-
-N.times do
- # puts rbt_bm.to_f
- rbt_bm.to_f
- # puts "GC.count = #{GC.count}" if GC.respond_to?(:count)
-end
diff --git a/benchmark/gc/ring.rb b/benchmark/gc/ring.rb
deleted file mode 100644
index be2c7b7250..0000000000
--- a/benchmark/gc/ring.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# create many old objects
-
-max = 30_000_000
-
-class Ring
- attr_reader :next_ring
- def initialize n = nil
- @next_ring = n
- end
-
-
- def size
- s = 1
- ring = self
- while ring.next_ring
- s += 1
- ring = ring.next_ring
- end
- s
- end
-end
-
-ring = Ring.new
-
-max.times{
- ring = Ring.new(ring)
-}
-
-# p ring.size
diff --git a/benchmark/other-lang/fact.rb b/benchmark/other-lang/fact.rb
index 6cedc752cd..7e97b22b39 100644
--- a/benchmark/other-lang/fact.rb
+++ b/benchmark/other-lang/fact.rb
@@ -6,8 +6,8 @@ def fact(n)
end
end
-i = 0
+i=0
while i<10000
- i += 1
+ i+=1
fact(100)
end
diff --git a/benchmark/other-lang/loop.rb b/benchmark/other-lang/loop.rb
index b367b9dbf3..d43cef61f3 100644
--- a/benchmark/other-lang/loop.rb
+++ b/benchmark/other-lang/loop.rb
@@ -1,4 +1,4 @@
-i = 0
+i=0
while i<30000000
- i += 1
+ i+=1
end
diff --git a/bignum.c b/bignum.c
index 27d8d8a6a7..04df7ba4ea 100644
--- a/bignum.c
+++ b/bignum.c
@@ -10,7 +10,6 @@
**********************************************************************/
#include "ruby/ruby.h"
-#include "ruby/thread.h"
#include "ruby/util.h"
#include "internal.h"
@@ -25,2848 +24,30 @@
#endif
#include <assert.h>
-#if defined(HAVE_LIBGMP) && defined(HAVE_GMP_H)
-#define USE_GMP
-#include <gmp.h>
-#endif
-
-#define RB_BIGNUM_TYPE_P(x) RB_TYPE_P((x), T_BIGNUM)
-
VALUE rb_cBignum;
-const char ruby_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-
-#ifndef SIZEOF_BDIGIT_DBL
-# if SIZEOF_INT*2 <= SIZEOF_LONG_LONG
-# define SIZEOF_BDIGIT_DBL SIZEOF_LONG_LONG
-# else
-# define SIZEOF_BDIGIT_DBL SIZEOF_LONG
-# endif
-#endif
-STATIC_ASSERT(sizeof_bdigit_dbl, sizeof(BDIGIT_DBL) == SIZEOF_BDIGIT_DBL);
-STATIC_ASSERT(sizeof_bdigit_dbl_signed, sizeof(BDIGIT_DBL_SIGNED) == SIZEOF_BDIGIT_DBL);
-STATIC_ASSERT(sizeof_bdigit, SIZEOF_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
+static VALUE big_three = Qnil;
-#ifdef WORDS_BIGENDIAN
-# define HOST_BIGENDIAN_P 1
-#else
-# define HOST_BIGENDIAN_P 0
+#if defined __MINGW32__
+#define USHORT _USHORT
#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)
+#define DIGSPERLONG (SIZEOF_LONG/SIZEOF_BDIGITS)
+#if HAVE_LONG_LONG
+# define DIGSPERLL (SIZEOF_LONG_LONG/SIZEOF_BDIGITS)
#endif
+#define BIGUP(x) ((BDIGIT_DBL)(x) << BITSPERDIG)
+#define BIGDN(x) RSHIFT((x),BITSPERDIG)
+#define BIGLO(x) ((BDIGIT)((x) & (BIGRAD-1)))
+#define BDIGMAX ((BDIGIT)-1)
#define BIGZEROP(x) (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)
-{
- BDIGIT_DBL maxpow;
- int exponent;
-
- assert(2 <= base && base <= 36);
-
- {
-#if SIZEOF_BDIGIT_DBL == 2
- maxpow = maxpow16_num[base-2];
- exponent = maxpow16_exp[base-2];
-#elif SIZEOF_BDIGIT_DBL == 4
- maxpow = maxpow32_num[base-2];
- exponent = maxpow32_exp[base-2];
-#elif SIZEOF_BDIGIT_DBL == 8 && defined HAVE_UINT64_T
- maxpow = maxpow64_num[base-2];
- exponent = maxpow64_exp[base-2];
-#elif SIZEOF_BDIGIT_DBL == 16 && defined HAVE_UINT128_T
- maxpow = maxpow128_num[base-2];
- exponent = maxpow128_exp[base-2];
-#else
- maxpow = base;
- exponent = 1;
- while (maxpow <= BDIGIT_DBL_MAX / base) {
- maxpow *= base;
- exponent++;
- }
-#endif
- }
-
- *exp_ret = exponent;
- return maxpow;
-}
-
-static inline BDIGIT_DBL
-bary2bdigitdbl(const BDIGIT *ds, size_t n)
-{
- assert(n <= 2);
-
- if (n == 2)
- return ds[0] | BIGUP(ds[1]);
- if (n == 1)
- return ds[0];
- return 0;
-}
-
-static inline void
-bdigitdbl2bary(BDIGIT *ds, size_t n, BDIGIT_DBL num)
-{
- assert(n == 2);
-
- ds[0] = BIGLO(num);
- ds[1] = (BDIGIT)BIGDN(num);
-}
-
-static int
-bary_cmp(const BDIGIT *xds, size_t xn, const BDIGIT *yds, size_t yn)
-{
- BARY_TRUNC(xds, xn);
- BARY_TRUNC(yds, yn);
-
- if (xn < yn)
- return -1;
- if (xn > yn)
- return 1;
-
- while (xn-- && xds[xn] == yds[xn])
- ;
- if (xn == (size_t)-1)
- return 0;
- return xds[xn] < yds[xn] ? -1 : 1;
-}
-
-static BDIGIT
-bary_small_lshift(BDIGIT *zds, const BDIGIT *xds, size_t n, int shift)
-{
- size_t i;
- BDIGIT_DBL num = 0;
- assert(0 <= shift && shift < BITSPERDIG);
-
- for (i=0; i<n; i++) {
- num = num | (BDIGIT_DBL)*xds++ << shift;
- *zds++ = BIGLO(num);
- num = BIGDN(num);
- }
- return BIGLO(num);
-}
-
-static void
-bary_small_rshift(BDIGIT *zds, const BDIGIT *xds, size_t n, int shift, BDIGIT higher_bdigit)
-{
- BDIGIT_DBL num = 0;
- BDIGIT x;
-
- assert(0 <= shift && shift < BITSPERDIG);
-
- num = BIGUP(higher_bdigit);
- while (n--) {
- num = (num | xds[n]) >> shift;
- x = xds[n];
- zds[n] = BIGLO(num);
- num = BIGUP(x);
- }
-}
-
-static int
-bary_zero_p(BDIGIT *xds, size_t xn)
-{
- if (xn == 0)
- return 1;
- do {
- if (xds[--xn]) return 0;
- } while (xn);
- return 1;
-}
-
-static void
-bary_neg(BDIGIT *ds, size_t n)
-{
- while (n--)
- ds[n] = BIGLO(~ds[n]);
-}
-
-static int
-bary_2comp(BDIGIT *ds, size_t n)
-{
- size_t i;
- i = 0;
- for (i = 0; i < n; i++) {
- if (ds[i] != 0) {
- goto non_zero;
- }
- }
- return 1;
-
- non_zero:
- ds[i] = BIGLO(~ds[i] + 1);
- i++;
- for (; i < n; i++) {
- ds[i] = BIGLO(~ds[i]);
- }
- return 0;
-}
-
-static void
-bary_swap(BDIGIT *ds, size_t num_bdigits)
-{
- BDIGIT *p1 = ds;
- BDIGIT *p2 = ds + num_bdigits - 1;
- for (; p1 < p2; p1++, p2--) {
- BDIGIT tmp = *p1;
- *p1 = *p2;
- *p2 = tmp;
- }
-}
-
-#define INTEGER_PACK_WORDORDER_MASK \
- (INTEGER_PACK_MSWORD_FIRST | \
- INTEGER_PACK_LSWORD_FIRST)
-#define INTEGER_PACK_BYTEORDER_MASK \
- (INTEGER_PACK_MSBYTE_FIRST | \
- INTEGER_PACK_LSBYTE_FIRST | \
- INTEGER_PACK_NATIVE_BYTE_ORDER)
-
-static void
-validate_integer_pack_format(size_t numwords, size_t wordsize, size_t nails, int flags, int supported_flags)
-{
- int wordorder_bits = flags & INTEGER_PACK_WORDORDER_MASK;
- int byteorder_bits = flags & INTEGER_PACK_BYTEORDER_MASK;
-
- if (flags & ~supported_flags) {
- rb_raise(rb_eArgError, "unsupported flags specified");
- }
- if (wordorder_bits == 0) {
- if (1 < numwords)
- rb_raise(rb_eArgError, "word order not specified");
- }
- else if (wordorder_bits != INTEGER_PACK_MSWORD_FIRST &&
- wordorder_bits != INTEGER_PACK_LSWORD_FIRST)
- rb_raise(rb_eArgError, "unexpected word order");
- if (byteorder_bits == 0) {
- rb_raise(rb_eArgError, "byte order not specified");
- }
- else if (byteorder_bits != INTEGER_PACK_MSBYTE_FIRST &&
- byteorder_bits != INTEGER_PACK_LSBYTE_FIRST &&
- byteorder_bits != INTEGER_PACK_NATIVE_BYTE_ORDER)
- rb_raise(rb_eArgError, "unexpected byte order");
- if (wordsize == 0)
- rb_raise(rb_eArgError, "invalid wordsize: %"PRI_SIZE_PREFIX"u", wordsize);
- if (SSIZE_MAX < wordsize)
- rb_raise(rb_eArgError, "too big wordsize: %"PRI_SIZE_PREFIX"u", wordsize);
- if (wordsize <= nails / CHAR_BIT)
- rb_raise(rb_eArgError, "too big nails: %"PRI_SIZE_PREFIX"u", nails);
- if (SIZE_MAX / wordsize < numwords)
- rb_raise(rb_eArgError, "too big numwords * wordsize: %"PRI_SIZE_PREFIX"u * %"PRI_SIZE_PREFIX"u", numwords, wordsize);
-}
-
-static void
-integer_pack_loop_setup(
- size_t numwords, size_t wordsize, size_t nails, int flags,
- size_t *word_num_fullbytes_ret,
- int *word_num_partialbits_ret,
- size_t *word_start_ret,
- ssize_t *word_step_ret,
- size_t *word_last_ret,
- size_t *byte_start_ret,
- int *byte_step_ret)
-{
- int wordorder_bits = flags & INTEGER_PACK_WORDORDER_MASK;
- int byteorder_bits = flags & INTEGER_PACK_BYTEORDER_MASK;
- size_t word_num_fullbytes;
- int word_num_partialbits;
- size_t word_start;
- ssize_t word_step;
- size_t word_last;
- size_t byte_start;
- int byte_step;
-
- word_num_partialbits = CHAR_BIT - (int)(nails % CHAR_BIT);
- if (word_num_partialbits == CHAR_BIT)
- word_num_partialbits = 0;
- word_num_fullbytes = wordsize - (nails / CHAR_BIT);
- if (word_num_partialbits != 0) {
- word_num_fullbytes--;
- }
-
- if (wordorder_bits == INTEGER_PACK_MSWORD_FIRST) {
- word_start = wordsize*(numwords-1);
- word_step = -(ssize_t)wordsize;
- word_last = 0;
- }
- else {
- word_start = 0;
- word_step = wordsize;
- word_last = wordsize*(numwords-1);
- }
-
- if (byteorder_bits == INTEGER_PACK_NATIVE_BYTE_ORDER) {
-#ifdef WORDS_BIGENDIAN
- byteorder_bits = INTEGER_PACK_MSBYTE_FIRST;
-#else
- byteorder_bits = INTEGER_PACK_LSBYTE_FIRST;
-#endif
- }
- if (byteorder_bits == INTEGER_PACK_MSBYTE_FIRST) {
- byte_start = wordsize-1;
- byte_step = -1;
- }
- else {
- byte_start = 0;
- byte_step = 1;
- }
-
- *word_num_partialbits_ret = word_num_partialbits;
- *word_num_fullbytes_ret = word_num_fullbytes;
- *word_start_ret = word_start;
- *word_step_ret = word_step;
- *word_last_ret = word_last;
- *byte_start_ret = byte_start;
- *byte_step_ret = byte_step;
-}
-
-static inline void
-integer_pack_fill_dd(BDIGIT **dpp, BDIGIT **dep, BDIGIT_DBL *ddp, int *numbits_in_dd_p)
-{
- if (*dpp < *dep && BITSPERDIG <= (int)sizeof(*ddp) * CHAR_BIT - *numbits_in_dd_p) {
- *ddp |= (BDIGIT_DBL)(*(*dpp)++) << *numbits_in_dd_p;
- *numbits_in_dd_p += BITSPERDIG;
- }
- else if (*dpp == *dep) {
- /* higher bits are infinity zeros */
- *numbits_in_dd_p = (int)sizeof(*ddp) * CHAR_BIT;
- }
-}
-
-static inline BDIGIT_DBL
-integer_pack_take_lowbits(int n, BDIGIT_DBL *ddp, int *numbits_in_dd_p)
-{
- BDIGIT_DBL ret;
- ret = (*ddp) & (((BDIGIT_DBL)1 << n) - 1);
- *ddp >>= n;
- *numbits_in_dd_p -= n;
- return ret;
-}
-
-#if !defined(WORDS_BIGENDIAN)
-static int
-bytes_2comp(unsigned char *buf, size_t len)
-{
- size_t i;
- for (i = 0; i < len; i++)
- buf[i] = ~buf[i];
- for (i = 0; i < len; i++) {
- buf[i]++;
- if (buf[i] != 0)
- return 0;
- }
- return 1;
-}
-#endif
-
-static int
-bary_pack(int sign, BDIGIT *ds, size_t num_bdigits, void *words, size_t numwords, size_t wordsize, size_t nails, int flags)
-{
- BDIGIT *dp, *de;
- unsigned char *buf, *bufend;
-
- dp = ds;
- de = ds + num_bdigits;
-
- validate_integer_pack_format(numwords, wordsize, nails, flags,
- INTEGER_PACK_MSWORD_FIRST|
- INTEGER_PACK_LSWORD_FIRST|
- INTEGER_PACK_MSBYTE_FIRST|
- INTEGER_PACK_LSBYTE_FIRST|
- INTEGER_PACK_NATIVE_BYTE_ORDER|
- INTEGER_PACK_2COMP|
- INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION);
-
- while (dp < de && de[-1] == 0)
- de--;
- if (dp == de) {
- sign = 0;
- }
-
- if (!(flags & INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION)) {
- if (sign == 0) {
- MEMZERO(words, unsigned char, numwords * wordsize);
- return 0;
- }
- if (nails == 0 && numwords == 1) {
- int need_swap = wordsize != 1 &&
- (flags & INTEGER_PACK_BYTEORDER_MASK) != INTEGER_PACK_NATIVE_BYTE_ORDER &&
- ((flags & INTEGER_PACK_MSBYTE_FIRST) ? !HOST_BIGENDIAN_P : HOST_BIGENDIAN_P);
- if (0 < sign || !(flags & INTEGER_PACK_2COMP)) {
- BDIGIT d;
- if (wordsize == 1) {
- *((unsigned char *)words) = (unsigned char)(d = dp[0]);
- return ((1 < de - dp || CLEAR_LOWBITS(d, 8) != 0) ? 2 : 1) * sign;
- }
-#if defined(HAVE_UINT16_T) && 2 <= SIZEOF_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);
- }
- 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
-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
@@ -2877,7 +58,7 @@ 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("_%08"PRIxBDIGIT, BDIGITS(x)[i]);
}
printf(", len=%lu", RBIGNUM_LEN(x));
puts("");
@@ -2896,7 +77,13 @@ rb_big_dump(VALUE x)
static int
bigzero_p(VALUE x)
{
- return bary_zero_p(BDIGITS(x), RBIGNUM_LEN(x));
+ long i;
+ BDIGIT *ds = BDIGITS(x);
+
+ for (i = RBIGNUM_LEN(x) - 1; 0 <= i; i--) {
+ if (ds[i]) return 0;
+ }
+ return 1;
}
int
@@ -2917,7 +104,7 @@ rb_cmpint(VALUE val, VALUE a, VALUE b)
if (l < 0) return -1;
return 0;
}
- if (RB_BIGNUM_TYPE_P(val)) {
+ if (TYPE(val) == T_BIGNUM) {
if (BIGZEROP(val)) return 0;
if (RBIGNUM_SIGN(val)) return 1;
return -1;
@@ -2952,7 +139,6 @@ rb_big_realloc(VALUE big, long len)
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);
@@ -2979,21 +165,23 @@ rb_big_resize(VALUE big, long 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));
+ NEWOBJ(big, struct RBignum);
+ OBJSETUP(big, klass, T_BIGNUM);
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;
}
- OBJ_FREEZE(big);
+
return (VALUE)big;
}
+#define bignew(len,sign) bignew_1(rb_cBignum,(len),(sign))
+
VALUE
rb_big_new(long len, int sign)
{
@@ -3010,22 +198,26 @@ rb_big_clone(VALUE x)
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);
+ BDIGIT_DBL num;
- if (bary_2comp(ds, i)) {
- big_extend_carry(x);
+ if (!i) return;
+ while (i--) ds[i] = ~ds[i];
+ i = 0; num = 1;
+ do {
+ num += ds[i];
+ ds[i++] = BIGLO(num);
+ num = BIGDN(num);
+ } while (i < RBIGNUM_LEN(x));
+ if (num != 0) {
+ rb_big_resize(x, RBIGNUM_LEN(x)+1);
+ ds = BDIGITS(x);
+ ds[RBIGNUM_LEN(x)-1] = 1;
}
}
@@ -3035,36 +227,6 @@ 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)
{
@@ -3082,52 +244,36 @@ bigtrunc(VALUE x)
static inline VALUE
bigfixize(VALUE x)
{
- size_t n = RBIGNUM_LEN(x);
+ long len = 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];
+ if (len == 0) return INT2FIX(0);
+ if ((size_t)(len*SIZEOF_BDIGITS) <= sizeof(long)) {
+ long num = 0;
+#if 2*SIZEOF_BDIGITS > SIZEOF_LONG
+ num = (long)ds[0];
+#else
+ while (len--) {
+ num = (long)(BIGUP(num) + ds[len]);
+ }
#endif
-
- if (RBIGNUM_POSITIVE_P(x)) {
- if (POSFIXABLE(u)) return LONG2FIX((long)u);
- }
- else {
- if (u <= -FIXNUM_MIN) return LONG2FIX(-(long)u);
+ if (num >= 0) {
+ if (RBIGNUM_SIGN(x)) {
+ if (POSFIXABLE(num)) return LONG2FIX(num);
+ }
+ else {
+ if (NEGFIXABLE(-num)) return LONG2FIX(-num);
+ }
+ }
}
-
- return_big:
- rb_big_resize(x, n);
return x;
}
static VALUE
bignorm(VALUE x)
{
- if (RB_BIGNUM_TYPE_P(x)) {
- x = bigfixize(x);
+ if (!FIXNUM_P(x) && TYPE(x) == T_BIGNUM) {
+ x = bigfixize(bigtrunc(x));
}
return x;
}
@@ -3141,20 +287,19 @@ rb_big_norm(VALUE x)
VALUE
rb_uint2big(VALUE n)
{
- long i;
- VALUE big = bignew(bdigit_roomof(SIZEOF_VALUE), 1);
- BDIGIT *digits = BDIGITS(big);
+ BDIGIT_DBL num = n;
+ long i = 0;
+ BDIGIT *digits;
+ VALUE big;
-#if SIZEOF_BDIGITS >= SIZEOF_VALUE
- digits[0] = n;
-#else
- for (i = 0; i < bdigit_roomof(SIZEOF_VALUE); i++) {
- digits[i] = BIGLO(n);
- n = BIGDN(n);
+ big = bignew(DIGSPERLONG, 1);
+ digits = BDIGITS(big);
+ while (i < DIGSPERLONG) {
+ digits[i++] = BIGLO(num);
+ num = BIGDN(num);
}
-#endif
- i = bdigit_roomof(SIZEOF_VALUE);
+ i = DIGSPERLONG;
while (--i && !digits[i]) ;
RBIGNUM_SET_LEN(big, i+1);
return big;
@@ -3164,17 +309,13 @@ VALUE
rb_int2big(SIGNED_VALUE n)
{
long neg = 0;
- VALUE u;
VALUE big;
if (n < 0) {
- u = 1 + (VALUE)(-(n + 1)); /* u = -n avoiding overflow */
+ n = -n;
neg = 1;
}
- else {
- u = n;
- }
- big = rb_uint2big(u);
+ big = rb_uint2big(n);
if (neg) {
RBIGNUM_SET_SIGN(big, 0);
}
@@ -3195,790 +336,257 @@ rb_int2inum(SIGNED_VALUE n)
return rb_int2big(n);
}
-void
-rb_big_pack(VALUE val, unsigned long *buf, long num_longs)
-{
- rb_integer_pack(val, buf, num_longs, sizeof(long), 0,
- INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER|
- INTEGER_PACK_2COMP);
-}
-
-VALUE
-rb_big_unpack(unsigned long *buf, long num_longs)
-{
- return rb_integer_unpack(buf, num_longs, sizeof(long), 0,
- INTEGER_PACK_LSWORD_FIRST|INTEGER_PACK_NATIVE_BYTE_ORDER|
- INTEGER_PACK_2COMP);
-}
+#if SIZEOF_LONG % SIZEOF_BDIGITS != 0
+# error unexpected SIZEOF_LONG : SIZEOF_BDIGITS ratio
+#endif
/*
- * 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.
- *
+ * buf is an array of long integers.
+ * buf is ordered from least significant word to most significant word.
+ * buf[0] is the least significant word and
+ * buf[num_longs-1] is the most significant word.
+ * This means words in buf is little endian.
+ * However each word in buf is native endian.
+ * (buf[i]&1) is the least significant bit and
+ * (buf[i]&(1<<(SIZEOF_LONG*CHAR_BIT-1))) is the most significant bit
+ * for each 0 <= i < num_longs.
+ * So buf is little endian at whole on a little endian machine.
+ * But buf is mixed endian on a big endian machine.
*/
-size_t
-rb_absint_size(VALUE val, int *nlz_bits_ret)
+void
+rb_big_pack(VALUE val, unsigned long *buf, long num_longs)
{
- BDIGIT *dp;
- BDIGIT *de;
- BDIGIT fixbuf[bdigit_roomof(sizeof(long))];
-
- int num_leading_zeros;
-
val = rb_to_int(val);
-
+ if (num_longs == 0)
+ return;
if (FIXNUM_P(val)) {
- long v = FIX2LONG(val);
- if (v < 0) {
- v = -v;
+ long i;
+ long tmp = FIX2LONG(val);
+ buf[0] = (unsigned long)tmp;
+ tmp = tmp < 0 ? ~0L : 0;
+ for (i = 1; i < num_longs; i++)
+ buf[i] = (unsigned long)tmp;
+ return;
+ }
+ else {
+ long len = RBIGNUM_LEN(val);
+ BDIGIT *ds = BDIGITS(val), *dend = ds + len;
+ long i, j;
+ for (i = 0; i < num_longs && ds < dend; i++) {
+ unsigned long l = 0;
+ for (j = 0; j < DIGSPERLONG && ds < dend; j++, ds++) {
+ l |= ((unsigned long)*ds << (j * BITSPERDIG));
+ }
+ buf[i] = l;
}
-#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);
+ for (; i < num_longs; i++)
+ buf[i] = 0;
+ if (RBIGNUM_NEGATIVE_P(val)) {
+ for (i = 0; i < num_longs; i++) {
+ buf[i] = ~buf[i];
+ }
+ for (i = 0; i < num_longs; i++) {
+ buf[i]++;
+ if (buf[i] != 0)
+ return;
}
}
-#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)
+/* See rb_big_pack comment for endianness of buf. */
+VALUE
+rb_big_unpack(unsigned long *buf, long num_longs)
{
- static const BDIGIT char_bit[1] = { CHAR_BIT };
- BDIGIT numbytes_bary[bdigit_roomof(sizeof(numbytes))];
- BDIGIT val_numbits_bary[bdigit_roomof(sizeof(numbytes) + 1)];
- BDIGIT nlz_bits_in_msbyte_bary[1];
- BDIGIT word_numbits_bary[bdigit_roomof(sizeof(word_numbits))];
- BDIGIT div_bary[numberof(val_numbits_bary) + BIGDIVREM_EXTRA_WORDS];
- BDIGIT mod_bary[numberof(word_numbits_bary)];
- BDIGIT one[1] = { 1 };
- size_t nlz_bits;
- size_t mod;
- int sign;
- size_t numwords;
-
- nlz_bits_in_msbyte_bary[0] = nlz_bits_in_msbyte;
-
- /*
- * val_numbits = numbytes * CHAR_BIT - nlz_bits_in_msbyte
- * div, mod = val_numbits.divmod(word_numbits)
- * numwords = mod == 0 ? div : div + 1
- * nlz_bits = mod == 0 ? 0 : word_numbits - mod
- */
-
- bary_unpack(BARY_ARGS(numbytes_bary), &numbytes, 1, sizeof(numbytes), 0,
- INTEGER_PACK_NATIVE_BYTE_ORDER);
- BARY_SHORT_MUL(val_numbits_bary, numbytes_bary, char_bit);
- if (nlz_bits_in_msbyte)
- BARY_SUB(val_numbits_bary, val_numbits_bary, nlz_bits_in_msbyte_bary);
- bary_unpack(BARY_ARGS(word_numbits_bary), &word_numbits, 1, sizeof(word_numbits), 0,
- INTEGER_PACK_NATIVE_BYTE_ORDER);
- BARY_DIVMOD(div_bary, mod_bary, val_numbits_bary, word_numbits_bary);
- if (BARY_ZERO_P(mod_bary)) {
- nlz_bits = 0;
- }
- 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);
+ while (2 <= num_longs) {
+ if (buf[num_longs-1] == 0 && (long)buf[num_longs-2] >= 0)
+ num_longs--;
+ else if (buf[num_longs-1] == ~0UL && (long)buf[num_longs-2] < 0)
+ num_longs--;
+ else
+ break;
}
- 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;
+ if (num_longs == 0)
+ return INT2FIX(0);
+ else if (num_longs == 1)
+ return LONG2NUM((long)buf[0]);
+ else {
+ VALUE big;
+ BDIGIT *ds;
+ long len = num_longs * DIGSPERLONG;
+ long i;
+ big = bignew(len, 1);
+ ds = BDIGITS(big);
+ for (i = 0; i < num_longs; i++) {
+ unsigned long d = buf[i];
+#if SIZEOF_LONG == SIZEOF_BDIGITS
+ *ds++ = d;
#else
- {
- int i;
- for (i = 0; i < numberof(fixbuf); i++) {
- fixbuf[i] = BIGLO(v);
- v = BIGDN(v);
+ int j;
+ for (j = 0; j < DIGSPERLONG; j++) {
+ *ds++ = BIGLO(d);
+ d = BIGDN(d);
}
- }
#endif
- dp = fixbuf;
- de = fixbuf + numberof(fixbuf);
+ }
+ if ((long)buf[num_longs-1] < 0) {
+ get2comp(big);
+ RBIGNUM_SET_SIGN(big, 0);
+ }
+ return bignorm(big);
}
- 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);
}
+#define QUAD_SIZE 8
-/*
- * 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.
- */
+#if SIZEOF_LONG_LONG == QUAD_SIZE && SIZEOF_BDIGITS*2 == SIZEOF_LONG_LONG
-int
-rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags)
+void
+rb_quad_pack(char *buf, VALUE val)
{
- int sign;
- BDIGIT *ds;
- size_t num_bdigits;
- BDIGIT fixbuf[bdigit_roomof(sizeof(long))];
-
- RB_GC_GUARD(val) = rb_to_int(val);
+ LONG_LONG q;
+ 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);
+ q = FIX2LONG(val);
}
else {
- sign = RBIGNUM_POSITIVE_P(val) ? 1 : -1;
- ds = BDIGITS(val);
- num_bdigits = RBIGNUM_LEN(val);
- }
+ long len = RBIGNUM_LEN(val);
+ BDIGIT *ds;
- return bary_pack(sign, ds, num_bdigits, words, numwords, wordsize, nails, flags);
+ if (len > SIZEOF_LONG_LONG/SIZEOF_BDIGITS) {
+ len = SIZEOF_LONG_LONG/SIZEOF_BDIGITS;
+ }
+ ds = BDIGITS(val);
+ q = 0;
+ while (len--) {
+ q = BIGUP(q);
+ q += ds[len];
+ }
+ if (!RBIGNUM_SIGN(val)) q = -q;
+ }
+ memcpy(buf, (char*)&q, SIZEOF_LONG_LONG);
}
-/*
- * 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)
+rb_quad_unpack(const char *buf, int sign)
{
- 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;
+ unsigned LONG_LONG q;
+ long neg = 0;
+ long i;
+ BDIGIT *digits;
+ VALUE big;
+
+ memcpy(&q, buf, SIZEOF_LONG_LONG);
+ if (sign) {
+ if (FIXABLE((LONG_LONG)q)) return LONG2FIX((LONG_LONG)q);
+ if ((LONG_LONG)q < 0) {
+ q = -(LONG_LONG)q;
+ neg = 1;
+ }
}
else {
- val = bignew((long)num_bdigits, 0);
- ds = BDIGITS(val);
+ if (POSFIXABLE(q)) return LONG2FIX(q);
}
- 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);
+ i = 0;
+ big = bignew(DIGSPERLL, 1);
+ digits = BDIGITS(big);
+ while (i < DIGSPERLL) {
+ digits[i++] = BIGLO(q);
+ q = BIGDN(q);
}
- 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);
-}
+ i = DIGSPERLL;
+ while (i-- && !digits[i]) ;
+ RBIGNUM_SET_LEN(big, i+1);
-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));
+ if (neg) {
+ RBIGNUM_SET_SIGN(big, 0);
+ }
+ return bignorm(big);
}
-#define conv_digit(c) (ruby_digit36_to_number_table[(unsigned char)(c)])
+#else
-static void
-str2big_scan_digits(const char *s, const char *str, int base, int badcheck, size_t *num_digits_p, size_t *len_p)
+static int
+quad_buf_complement(char *buf, size_t len)
{
- 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()");
- }
+ 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;
}
- *num_digits_p = num_digits;
- *len_p = digits_end - digits_start;
+ return 1;
}
-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;
+void
+rb_quad_pack(char *buf, VALUE val)
+{
+ long len;
- 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;
- }
+ memset(buf, 0, QUAD_SIZE);
+ val = rb_to_int(val);
+ if (FIXNUM_P(val)) {
+ val = rb_int2big(FIX2LONG(val));
}
- if (numbits) {
- *dp++ = BIGLO(dd);
+ len = RBIGNUM_LEN(val) * SIZEOF_BDIGITS;
+ if (len > QUAD_SIZE) {
+ len = QUAD_SIZE;
}
- 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);
+ memcpy(buf, (char*)BDIGITS(val), len);
+ if (RBIGNUM_NEGATIVE_P(val)) {
+ quad_buf_complement(buf, QUAD_SIZE);
}
-
- 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;
+#define BNEG(b) (RSHIFT(((BDIGIT*)(b))[QUAD_SIZE/SIZEOF_BDIGITS-1],BITSPERDIG-1) != 0)
- uds = ALLOCV_N(BDIGIT, tmpuv, 2*num_bdigits);
- vds = uds + num_bdigits;
+VALUE
+rb_quad_unpack(const char *buf, int sign)
+{
+ VALUE big = bignew(QUAD_SIZE/SIZEOF_BDIGITS, 1);
- powerv = power_cache_get_power(base, power_level, NULL);
+ memcpy((char*)BDIGITS(big), buf, QUAD_SIZE);
+ if (sign && BNEG(buf)) {
+ char *tmp = (char*)BDIGITS(big);
- 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;
+ RBIGNUM_SET_SIGN(big, 0);
+ quad_buf_complement(tmp, QUAD_SIZE);
}
- BARY_TRUNC(uds, num_bdigits);
- z = bignew(num_bdigits, sign);
- MEMCPY(BDIGITS(z), uds, BDIGIT, num_bdigits);
-
- if (tmpuv)
- ALLOCV_END(tmpuv);
- return z;
+ return bignorm(big);
}
-#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;
+ char *end;
+ char sign = 1, nondigit = 0;
int c;
+ BDIGIT_DBL num;
+ long len, blen = 1;
+ long i;
VALUE z;
+ BDIGIT *zds;
- int bits_per_digit;
-
- const char *digits_start, *digits_end;
- size_t num_digits;
- size_t num_bdigits;
- size_t len;
+#undef ISDIGIT
+#define ISDIGIT(c) ('0' <= (c) && (c) <= '9')
+#define conv_digit(c) \
+ (!ISASCII(c) ? -1 : \
+ ISDIGIT(c) ? ((c) - '0') : \
+ ISLOWER(c) ? ((c) - 'a' + 10) : \
+ ISUPPER(c) ? ((c) - 'A' + 10) : \
+ -1)
if (!str) {
- if (badcheck) {
- bad:
- rb_invalid_str(s, "Integer()");
- }
+ if (badcheck) goto bad;
return INT2FIX(0);
}
while (ISSPACE(*str)) str++;
@@ -3999,19 +607,15 @@ rb_cstr_to_inum(const char *str, int base, int badcheck)
switch (str[1]) {
case 'x': case 'X':
base = 16;
- str += 2;
break;
case 'b': case 'B':
base = 2;
- str += 2;
break;
case 'o': case 'O':
base = 8;
- str += 2;
break;
case 'd': case 'D':
base = 10;
- str += 2;
break;
default:
base = 8;
@@ -4024,28 +628,47 @@ rb_cstr_to_inum(const char *str, int base, int badcheck)
base = 10;
}
}
- else if (base == 2) {
+ switch (base) {
+ case 2:
+ len = 1;
if (str[0] == '0' && (str[1] == 'b'||str[1] == 'B')) {
str += 2;
}
- }
- else if (base == 8) {
+ break;
+ case 3:
+ len = 2;
+ break;
+ case 8:
if (str[0] == '0' && (str[1] == 'o'||str[1] == 'O')) {
str += 2;
}
- }
- else if (base == 10) {
+ case 4: case 5: case 6: case 7:
+ len = 3;
+ break;
+ case 10:
if (str[0] == '0' && (str[1] == 'd'||str[1] == 'D')) {
str += 2;
}
- }
- else if (base == 16) {
+ case 9: case 11: case 12: case 13: case 14: case 15:
+ len = 4;
+ break;
+ case 16:
+ len = 4;
if (str[0] == '0' && (str[1] == 'x'||str[1] == 'X')) {
str += 2;
}
- }
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
+ break;
+ default:
+ if (base < 2 || 36 < base) {
+ rb_raise(rb_eArgError, "invalid radix %d", base);
+ }
+ if (base <= 32) {
+ len = 5;
+ }
+ else {
+ len = 6;
+ }
+ break;
}
if (*str == '0') { /* squeeze preceding 0s */
int us = 0;
@@ -4064,10 +687,9 @@ rb_cstr_to_inum(const char *str, int base, int badcheck)
if (badcheck) goto bad;
return INT2FIX(0);
}
+ len *= strlen(str)*sizeof(char);
- bits_per_digit = bit_length(base-1);
- if (bits_per_digit * strlen(str) <= sizeof(long) * CHAR_BIT) {
- char *end;
+ if ((size_t)len <= (sizeof(long)*CHAR_BIT)) {
unsigned long val = STRTOUL(str, &end, base);
if (str < end && *end == '_') goto bigparse;
@@ -4090,36 +712,50 @@ rb_cstr_to_inum(const char *str, int base, int badcheck)
return bignorm(big);
}
}
-
bigparse:
- digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
- digits_end = digits_start + len;
+ len = (len/BITSPERDIG)+1;
+ if (badcheck && *str == '_') goto bad;
- if (POW2_P(base)) {
- z = str2big_poweroftwo(sign, digits_start, digits_end, num_digits,
- bits_per_digit);
+ z = bignew(len, sign);
+ zds = BDIGITS(z);
+ for (i=len;i--;) zds[i]=0;
+ while ((c = *str++) != 0) {
+ if (c == '_') {
+ if (nondigit) {
+ if (badcheck) goto bad;
+ break;
+ }
+ nondigit = c;
+ continue;
+ }
+ else if ((c = conv_digit(c)) < 0) {
+ break;
+ }
+ if (c >= base) break;
+ nondigit = 0;
+ i = 0;
+ num = c;
+ for (;;) {
+ while (i<blen) {
+ num += (BDIGIT_DBL)zds[i]*base;
+ zds[i++] = BIGLO(num);
+ num = BIGDN(num);
+ }
+ if (num) {
+ blen++;
+ continue;
+ }
+ break;
+ }
}
- else {
- int digits_per_bdigits_dbl;
- maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
- num_bdigits = roomof(num_digits, digits_per_bdigits_dbl)*2;
-
-#ifdef USE_GMP
- if (GMP_STR2BIG_DIGITS < num_bdigits) {
- z = str2big_gmp(sign, digits_start, digits_end, num_digits,
- num_bdigits, base);
- }
- else
-#endif
- if (num_bdigits < KARATSUBA_MUL_DIGITS) {
- z = str2big_normal(sign, digits_start, digits_end,
- num_bdigits, base);
- }
- else {
- z = str2big_karatsuba(sign, digits_start, digits_end, num_digits,
- num_bdigits, digits_per_bdigits_dbl, base);
- }
+ if (badcheck) {
+ str--;
+ if (s+1 < str && str[-1] == '_') goto bad;
+ while (*str && ISSPACE(*str)) str++;
+ if (*str) {
+ bad:
+ rb_invalid_str(s, "Integer()");
+ }
}
return bignorm(z);
@@ -4134,7 +770,6 @@ rb_str_to_inum(VALUE str, int base, int badcheck)
VALUE ret;
StringValue(str);
- rb_must_asciicompat(str);
if (badcheck) {
s = StringValueCStr(str);
}
@@ -4157,176 +792,24 @@ rb_str_to_inum(VALUE str, int base, int badcheck)
return ret;
}
-VALUE
-rb_str2big_poweroftwo(VALUE arg, int base, int badcheck)
-{
- int positive_p = 1;
- const char *s, *str;
- const char *digits_start, *digits_end;
- size_t num_digits;
- size_t len;
- VALUE z;
-
- if (base < 2 || 36 < base || !POW2_P(base)) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
- }
-
- rb_must_asciicompat(arg);
- s = str = StringValueCStr(arg);
- if (*str == '-') {
- str++;
- positive_p = 0;
- }
-
- digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
- digits_end = digits_start + len;
-
- z = str2big_poweroftwo(positive_p, digits_start, digits_end, num_digits,
- bit_length(base-1));
-
- RB_GC_GUARD(arg);
-
- return bignorm(z);
-}
-
-VALUE
-rb_str2big_normal(VALUE arg, int base, int badcheck)
-{
- int positive_p = 1;
- const char *s, *str;
- const char *digits_start, *digits_end;
- size_t num_digits;
- size_t len;
- VALUE z;
-
- int digits_per_bdigits_dbl;
- size_t num_bdigits;
-
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
- }
-
- rb_must_asciicompat(arg);
- s = str = StringValueCStr(arg);
- if (*str == '-') {
- str++;
- positive_p = 0;
- }
-
- digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
- digits_end = digits_start + len;
-
- maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
- num_bdigits = roomof(num_digits, digits_per_bdigits_dbl)*2;
-
- z = str2big_normal(positive_p, digits_start, digits_end,
- num_bdigits, base);
-
- RB_GC_GUARD(arg);
-
- return bignorm(z);
-}
-
-VALUE
-rb_str2big_karatsuba(VALUE arg, int base, int badcheck)
-{
- int positive_p = 1;
- const char *s, *str;
- const char *digits_start, *digits_end;
- size_t num_digits;
- size_t len;
- VALUE z;
-
- int digits_per_bdigits_dbl;
- size_t num_bdigits;
-
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
- }
-
- rb_must_asciicompat(arg);
- s = str = StringValueCStr(arg);
- if (*str == '-') {
- str++;
- positive_p = 0;
- }
-
- digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
- digits_end = digits_start + len;
-
- maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
- num_bdigits = roomof(num_digits, digits_per_bdigits_dbl)*2;
-
- z = str2big_karatsuba(positive_p, digits_start, digits_end, num_digits,
- num_bdigits, digits_per_bdigits_dbl, base);
-
- RB_GC_GUARD(arg);
-
- return bignorm(z);
-}
-
-#ifdef USE_GMP
-VALUE
-rb_str2big_gmp(VALUE arg, int base, int badcheck)
-{
- int positive_p = 1;
- const char *s, *str;
- const char *digits_start, *digits_end;
- size_t num_digits;
- size_t len;
- VALUE z;
-
- int digits_per_bdigits_dbl;
- size_t num_bdigits;
-
- if (base < 2 || 36 < base) {
- rb_raise(rb_eArgError, "invalid radix %d", base);
- }
-
- rb_must_asciicompat(arg);
- s = str = StringValueCStr(arg);
- if (*str == '-') {
- str++;
- positive_p = 0;
- }
-
- digits_start = str;
- str2big_scan_digits(s, str, base, badcheck, &num_digits, &len);
- digits_end = digits_start + len;
-
- maxpow_in_bdigit_dbl(base, &digits_per_bdigits_dbl);
- num_bdigits = roomof(num_digits, digits_per_bdigits_dbl)*2;
-
- z = str2big_gmp(positive_p, digits_start, digits_end, num_digits, num_bdigits, base);
-
- RB_GC_GUARD(arg);
-
- return bignorm(z);
-}
-#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);
+ BDIGIT_DBL num = n;
+ long i = 0;
+ BDIGIT *digits;
+ VALUE 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);
+ big = bignew(DIGSPERLL, 1);
+ digits = BDIGITS(big);
+ while (i < DIGSPERLL) {
+ digits[i++] = BIGLO(num);
+ num = BIGDN(num);
}
-#endif
- i = bdigit_roomof(SIZEOF_LONG_LONG);
+ i = DIGSPERLL;
while (i-- && !digits[i]) ;
RBIGNUM_SET_LEN(big, i+1);
return big;
@@ -4336,17 +819,13 @@ 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 */
+ n = -n;
neg = 1;
}
- else {
- u = n;
- }
- big = rb_ull2big(u);
+ big = rb_ull2big(n);
if (neg) {
RBIGNUM_SET_SIGN(big, 0);
}
@@ -4381,168 +860,128 @@ 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;
+const char ruby_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz";
- 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 {
- 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 bigsqr(VALUE x);
+static void bigdivmod(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp);
-static VALUE
-big_shift2(VALUE x, int lshift_p, VALUE y)
-{
- int sign;
- size_t lens[2];
- size_t shift_numdigits;
- int shift_numbits;
+#define POW2_P(x) (((x)&((x)-1))==0)
- assert(POW2_P(CHAR_BIT));
- assert(POW2_P(BITSPERDIG));
+static inline int
+ones(register unsigned long x)
+{
+#if SIZEOF_LONG == 8
+# define MASK_55 0x5555555555555555UL
+# define MASK_33 0x3333333333333333UL
+# define MASK_0f 0x0f0f0f0f0f0f0f0fUL
+#else
+# define MASK_55 0x55555555UL
+# define MASK_33 0x33333333UL
+# define MASK_0f 0x0f0f0f0fUL
+#endif
+ x -= (x >> 1) & MASK_55;
+ x = ((x >> 2) & MASK_33) + (x & MASK_33);
+ x = ((x >> 4) + x) & MASK_0f;
+ x += (x >> 8);
+ x += (x >> 16);
+#if SIZEOF_LONG == 8
+ x += (x >> 32);
+#endif
+ return (int)(x & 0x7f);
+#undef MASK_0f
+#undef MASK_33
+#undef MASK_55
+}
- 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 inline unsigned long
+next_pow2(register unsigned long x)
+{
+ x |= x >> 1;
+ x |= x >> 2;
+ x |= x >> 4;
+ x |= x >> 8;
+ x |= x >> 16;
+#if SIZEOF_LONG == 8
+ x |= x >> 32;
+#endif
+ return x + 1;
}
-static VALUE
-big_lshift(VALUE x, unsigned long shift)
+static inline int
+floor_log2(register unsigned long x)
{
- long s1 = shift/BITSPERDIG;
- int s2 = (int)(shift%BITSPERDIG);
- return big_shift3(x, 1, s1, s2);
+ x |= x >> 1;
+ x |= x >> 2;
+ x |= x >> 4;
+ x |= x >> 8;
+ x |= x >> 16;
+#if SIZEOF_LONG == 8
+ x |= x >> 32;
+#endif
+ return (int)ones(x) - 1;
}
-static VALUE
-big_rshift(VALUE x, unsigned long shift)
+static inline int
+ceil_log2(register unsigned long x)
{
- long s1 = shift/BITSPERDIG;
- int s2 = (int)(shift%BITSPERDIG);
- return big_shift3(x, 0, s1, s2);
+ return floor_log2(x) + !POW2_P(x);
}
-#define MAX_BASE36_POWER_TABLE_ENTRIES (SIZEOF_SIZE_T * CHAR_BIT + 1)
+#define LOG2_KARATSUBA_DIGITS 7
+#define KARATSUBA_DIGITS (1L<<LOG2_KARATSUBA_DIGITS)
+#define MAX_BIG2STR_TABLE_ENTRIES 64
-static VALUE base36_power_cache[35][MAX_BASE36_POWER_TABLE_ENTRIES];
-static size_t base36_numdigits_cache[35][MAX_BASE36_POWER_TABLE_ENTRIES];
+static VALUE big2str_power_cache[35][MAX_BIG2STR_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;
+ for (j = 0; j < MAX_BIG2STR_TABLE_ENTRIES; ++j) {
+ big2str_power_cache[i][j] = Qnil;
}
}
}
static inline VALUE
-power_cache_get_power(int base, int power_level, size_t *numdigits_ret)
+power_cache_get_power0(int base, int i)
{
- /*
- * 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 (NIL_P(big2str_power_cache[base - 2][i])) {
+ big2str_power_cache[base - 2][i] =
+ i == 0 ? rb_big_pow(rb_int2big(base), INT2FIX(KARATSUBA_DIGITS))
+ : bigsqr(power_cache_get_power0(base, i - 1));
+ rb_gc_register_mark_object(big2str_power_cache[base - 2][i]);
}
- if (numdigits_ret)
- *numdigits_ret = base36_numdigits_cache[base - 2][power_level];
- return base36_power_cache[base - 2][power_level];
+ return big2str_power_cache[base - 2][i];
}
-/*
- * deprecated. (used only from deprecated rb_big2str0)
- *
- * big2str_muraken_find_n1
+static VALUE
+power_cache_get_power(int base, long n1, long* m1)
+{
+ int i, m;
+ long j;
+ VALUE t;
+
+ if (n1 <= KARATSUBA_DIGITS)
+ rb_bug("n1 > KARATSUBA_DIGITS");
+
+ m = ceil_log2(n1);
+ if (m1) *m1 = 1 << m;
+ i = m - LOG2_KARATSUBA_DIGITS;
+ if (i >= MAX_BIG2STR_TABLE_ENTRIES)
+ i = MAX_BIG2STR_TABLE_ENTRIES - 1;
+ t = power_cache_get_power0(base, i);
+
+ j = KARATSUBA_DIGITS*(1 << i);
+ while (n1 > j) {
+ t = bigsqr(t);
+ j *= 2;
+ }
+ return t;
+}
+
+/* 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},
@@ -4590,430 +1029,122 @@ big2str_find_n1(VALUE x, int base)
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]);
+ return (long)ceil(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)
+static long
+big2str_orig(VALUE x, int base, char* ptr, long len, long hbase, int trim)
{
- VALUE b;
- size_t half_numdigits, lower_numdigits;
- int lower_power_level;
- size_t bn;
- const BDIGIT *bds;
- size_t len;
+ long i = RBIGNUM_LEN(x), j = len;
+ BDIGIT* ds = BDIGITS(x);
- /*
- * 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.
- */
+ while (i && j > 0) {
+ long k = i;
+ BDIGIT_DBL num = 0;
- 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;
+ while (k--) { /* x / hbase */
+ num = BIGUP(num) + ds[k];
+ ds[k] = (BDIGIT)(num / hbase);
+ num %= hbase;
+ }
+ if (trim && ds[i-1] == 0) i--;
+ k = SIZEOF_BDIGITS;
+ while (k--) {
+ ptr[--j] = ruby_digitmap[num % base];
+ num /= base;
+ if (j <= 0) break;
+ if (trim && i == 0 && num == 0) break;
}
- 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--;
+ if (trim) {
+ while (j < len && ptr[j] == '0') j++;
+ MEMMOVE(ptr, ptr + j, char, len - j);
+ len -= j;
}
- return result;
-}
-
-VALUE
-rb_big2str_poweroftwo(VALUE x, int base)
-{
- return big2str_base_poweroftwo(x, base);
+ return len;
}
-static VALUE
-big2str_generic(VALUE x, int base)
+static long
+big2str_karatsuba(VALUE x, int base, char* ptr,
+ long n1, long len, long hbase, int trim)
{
- 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");
- }
+ long lh, ll, m1;
+ VALUE b, q, r;
- 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);
+ if (BIGZEROP(x)) {
+ if (trim) return 0;
+ else {
+ memset(ptr, '0', len);
+ return len;
+ }
}
- 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++;
+ if (n1 <= KARATSUBA_DIGITS) {
+ return big2str_orig(x, base, ptr, len, hbase, trim);
}
- 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;
+ b = power_cache_get_power(base, n1, &m1);
+ bigdivmod(x, b, &q, &r);
+ lh = big2str_karatsuba(q, base, ptr, (len - m1)/2,
+ len - m1, hbase, trim);
+ rb_big_resize(q, 0);
+ ll = big2str_karatsuba(r, base, ptr + lh, m1/2,
+ m1, hbase, !lh && trim);
+ rb_big_resize(r, 0);
- 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_generic(x, base);
+ return lh + ll;
}
-#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)
+rb_big2str0(VALUE x, int base, int trim)
{
- BDIGIT *xds;
- size_t xn;
+ int off;
+ VALUE ss, xx;
+ long n1, n2, len, hbase;
+ char* ptr;
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) {
+ if (BIGZEROP(x)) {
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);
- }
+ n2 = big2str_find_n1(x, base);
+ n1 = (n2 + 1) / 2;
+ ss = rb_usascii_str_new(0, n2 + 1); /* plus one for sign */
+ ptr = RSTRING_PTR(ss);
+ ptr[0] = RBIGNUM_SIGN(x) ? '+' : '-';
-#ifdef USE_GMP
- if (GMP_BIG2STR_DIGITS < xn) {
- return big2str_gmp(x, base);
- }
+ hbase = base*base;
+#if SIZEOF_BDIGITS > 2
+ hbase *= hbase;
#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] = '+';
+ off = !(trim && RBIGNUM_SIGN(x)); /* erase plus sign if trim */
+ xx = rb_big_clone(x);
+ RBIGNUM_SET_SIGN(xx, 1);
+ if (n1 <= KARATSUBA_DIGITS) {
+ len = off + big2str_orig(xx, base, ptr + off, n2, hbase, trim);
}
-
- 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);
+ else {
+ len = off + big2str_karatsuba(xx, base, ptr + off, n1,
+ n2, hbase, trim);
}
+ rb_big_resize(xx, 0);
- RSTRING_PTR(str)[RSTRING_LEN(str)] = '\0';
+ ptr[len] = '\0';
+ rb_str_resize(ss, len);
- return str;
+ return ss;
}
VALUE
rb_big2str(VALUE x, int base)
{
- return rb_big2str1(x, base);
+ return rb_big2str0(x, base, 1);
}
/*
@@ -5045,74 +1176,62 @@ rb_big_to_s(int argc, VALUE *argv, VALUE x)
return rb_big2str(x, base);
}
-static unsigned long
-big2ulong(VALUE x, const char *type)
+static VALUE
+big2ulong(VALUE x, const char *type, int check)
{
long len = RBIGNUM_LEN(x);
- unsigned long num;
+ BDIGIT_DBL num;
BDIGIT *ds;
- if (len == 0)
- return 0;
- if (BIGSIZE(x) > sizeof(long)) {
- rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type);
+ if (len > DIGSPERLONG) {
+ if (check)
+ rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type);
+ len = DIGSPERLONG;
}
ds = BDIGITS(x);
-#if SIZEOF_LONG <= SIZEOF_BDIGITS
- num = (unsigned long)ds[0];
-#else
num = 0;
while (len--) {
- num <<= BITSPERDIG;
- num += (unsigned long)ds[len]; /* overflow is already checked */
+ num = BIGUP(num);
+ num += ds[len];
}
-#endif
- return num;
+ return (VALUE)num;
}
-/* deprecated */
VALUE
rb_big2ulong_pack(VALUE x)
{
- unsigned long num;
- rb_integer_pack(x, &num, 1, sizeof(num), 0,
- INTEGER_PACK_NATIVE_BYTE_ORDER|INTEGER_PACK_2COMP);
+ VALUE num = big2ulong(x, "unsigned long", FALSE);
+ if (!RBIGNUM_SIGN(x)) {
+ return (VALUE)(-(SIGNED_VALUE)num);
+ }
return num;
}
VALUE
rb_big2ulong(VALUE x)
{
- unsigned long num = big2ulong(x, "unsigned long");
+ VALUE num = big2ulong(x, "unsigned long", TRUE);
- 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;
+ if (!RBIGNUM_SIGN(x)) {
+ if ((long)num < 0) {
+ rb_raise(rb_eRangeError, "bignum out of range of unsigned long");
+ }
+ return (VALUE)(-(SIGNED_VALUE)num);
}
- rb_raise(rb_eRangeError, "bignum out of range of unsigned long");
+ return num;
}
SIGNED_VALUE
rb_big2long(VALUE x)
{
- unsigned long num = big2ulong(x, "long");
+ VALUE num = big2ulong(x, "long", TRUE);
- 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;
+ if ((long)num < 0 &&
+ (RBIGNUM_SIGN(x) || (long)num != LONG_MIN)) {
+ rb_raise(rb_eRangeError, "bignum too big to convert into `long'");
}
- rb_raise(rb_eRangeError, "bignum too big to convert into `long'");
+ if (!RBIGNUM_SIGN(x)) return -(SIGNED_VALUE)num;
+ return num;
}
#if HAVE_LONG_LONG
@@ -5121,22 +1240,17 @@ static unsigned LONG_LONG
big2ull(VALUE x, const char *type)
{
long len = RBIGNUM_LEN(x);
- unsigned LONG_LONG num;
- BDIGIT *ds = BDIGITS(x);
+ BDIGIT_DBL num;
+ BDIGIT *ds;
- if (len == 0)
- return 0;
- if (BIGSIZE(x) > SIZEOF_LONG_LONG)
+ if (len > SIZEOF_LONG_LONG/SIZEOF_BDIGITS)
rb_raise(rb_eRangeError, "bignum too big to convert into `%s'", type);
-#if SIZEOF_LONG_LONG <= SIZEOF_BDIGITS
- num = (unsigned LONG_LONG)ds[0];
-#else
+ ds = BDIGITS(x);
num = 0;
while (len--) {
num = BIGUP(num);
num += ds[len];
}
-#endif
return num;
}
@@ -5145,16 +1259,9 @@ 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");
+ if (!RBIGNUM_SIGN(x))
+ return (VALUE)(-(SIGNED_VALUE)num);
+ return num;
}
LONG_LONG
@@ -5162,17 +1269,12 @@ rb_big2ll(VALUE x)
{
unsigned LONG_LONG num = big2ull(x, "long long");
- if (RBIGNUM_POSITIVE_P(x)) {
- if (num <= LLONG_MAX)
- return num;
+ if ((LONG_LONG)num < 0 && (RBIGNUM_SIGN(x)
+ || (LONG_LONG)num != LLONG_MIN)) {
+ rb_raise(rb_eRangeError, "bignum too big to convert into `long long'");
}
- 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'");
+ if (!RBIGNUM_SIGN(x)) return -(LONG_LONG)num;
+ return num;
}
#endif /* HAVE_LONG_LONG */
@@ -5193,7 +1295,7 @@ dbl2big(double d)
rb_raise(rb_eFloatDomainError, "NaN");
}
- while (1.0 <= u) {
+ while (!POSFIXABLE(u) || 0 != (long)u) {
u /= (double)(BIGRAD);
i++;
}
@@ -5215,6 +1317,27 @@ rb_dbl2big(double d)
return bignorm(dbl2big(d));
}
+static int
+nlz(BDIGIT x)
+{
+ BDIGIT y;
+ int n = BITSPERDIG;
+#if BITSPERDIG > 64
+ y = x >> 64; if (y) {n -= 64; x = y;}
+#endif
+#if BITSPERDIG > 32
+ y = x >> 32; if (y) {n -= 32; x = y;}
+#endif
+#if BITSPERDIG > 16
+ y = x >> 16; if (y) {n -= 16; x = y;}
+#endif
+ y = x >> 8; if (y) {n -= 8; x = y;}
+ y = x >> 4; if (y) {n -= 4; x = y;}
+ y = x >> 2; if (y) {n -= 2; x = y;}
+ y = x >> 1; if (y) {return n - 2;}
+ return n - x;
+}
+
static double
big2dbl(VALUE x)
{
@@ -5236,17 +1359,16 @@ big2dbl(VALUE x)
d = ds[i] + BIGRAD*d;
}
dl = ds[i];
- if (bits && (dl & ((BDIGIT)1 << (bits %= BITSPERDIG)))) {
- int carry = (dl & ~(BDIGMAX << bits)) != 0;
+ if (bits && (dl & (1UL << (bits %= BITSPERDIG)))) {
+ int carry = dl & ~(~(BDIGIT)0 << bits);
if (!carry) {
while (i-- > 0) {
- carry = ds[i] != 0;
- if (carry) break;
+ if ((carry = ds[i]) != 0) break;
}
}
if (carry) {
- dl &= BDIGMAX << bits;
- dl = BIGLO(dl + ((BDIGIT)1 << bits));
+ dl &= (BDIGIT)~0 << bits;
+ dl += (BDIGIT)1 << bits;
if (!dl) d += 1;
}
}
@@ -5295,165 +1417,108 @@ rb_big_to_f(VALUE x)
return DBL2NUM(rb_big2dbl(x));
}
-VALUE
-rb_integer_float_cmp(VALUE x, VALUE y)
-{
- double yd = RFLOAT_VALUE(y);
- double yi, yf;
- VALUE rel;
-
- if (isnan(yd))
- return Qnil;
- if (isinf(yd)) {
- if (yd > 0.0) return INT2FIX(-1);
- else return INT2FIX(1);
- }
- yf = modf(yd, &yi);
- if (FIXNUM_P(x)) {
-#if SIZEOF_LONG * CHAR_BIT < DBL_MANT_DIG /* assume FLT_RADIX == 2 */
- double xd = (double)FIX2LONG(x);
- if (xd < yd)
- return INT2FIX(-1);
- if (xd > yd)
- return INT2FIX(1);
- return INT2FIX(0);
-#else
- long xn, yn;
- if (yi < FIXNUM_MIN)
- return INT2FIX(1);
- if (FIXNUM_MAX+1 <= yi)
- return INT2FIX(-1);
- xn = FIX2LONG(x);
- yn = (long)yi;
- if (xn < yn)
- return INT2FIX(-1);
- if (xn > yn)
- return INT2FIX(1);
- if (yf < 0.0)
- return INT2FIX(1);
- if (0.0 < yf)
- return INT2FIX(-1);
- return INT2FIX(0);
-#endif
- }
- y = rb_dbl2big(yi);
- rel = rb_big_cmp(x, y);
- if (yf == 0.0 || rel != INT2FIX(0))
- return rel;
- if (yf < 0.0)
- return INT2FIX(1);
- return INT2FIX(-1);
-}
-
-VALUE
-rb_integer_float_eq(VALUE x, VALUE y)
-{
- double yd = RFLOAT_VALUE(y);
- double yi, yf;
-
- if (isnan(yd) || isinf(yd))
- return Qfalse;
- yf = modf(yd, &yi);
- if (yf != 0)
- return Qfalse;
- if (FIXNUM_P(x)) {
-#if SIZEOF_LONG * CHAR_BIT < DBL_MANT_DIG /* assume FLT_RADIX == 2 */
- double xd = (double)FIX2LONG(x);
- if (xd != yd)
- return Qfalse;
- return Qtrue;
-#else
- long xn, yn;
- if (yi < LONG_MIN || LONG_MAX < yi)
- return Qfalse;
- xn = FIX2LONG(x);
- yn = (long)yi;
- if (xn != yn)
- return Qfalse;
- return Qtrue;
-#endif
- }
- y = rb_dbl2big(yi);
- return rb_big_eq(x, y);
-}
-
/*
* 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.
+ * Comparison---Returns -1, 0, or +1 depending on whether <i>big</i> is
+ * less than, equal to, or greater than <i>numeric</i>. This is the
+ * basis for the tests in <code>Comparable</code>.
*
*/
VALUE
rb_big_cmp(VALUE x, VALUE y)
{
- int cmp;
+ long xlen = RBIGNUM_LEN(x);
+ BDIGIT *xds, *yds;
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
- }
- else if (RB_FLOAT_TYPE_P(y)) {
- return rb_integer_float_cmp(x, y);
- }
- else {
+ break;
+
+ case T_BIGNUM:
+ break;
+
+ case T_FLOAT:
+ {
+ double a = RFLOAT_VALUE(y);
+
+ if (isinf(a)) {
+ if (a > 0.0) return INT2FIX(-1);
+ else return INT2FIX(1);
+ }
+ return rb_dbl_cmp(rb_big2dbl(x), a);
+ }
+
+ default:
return rb_num_coerce_cmp(x, y, rb_intern("<=>"));
}
if (RBIGNUM_SIGN(x) > RBIGNUM_SIGN(y)) return INT2FIX(1);
if (RBIGNUM_SIGN(x) < RBIGNUM_SIGN(y)) return INT2FIX(-1);
+ if (xlen < RBIGNUM_LEN(y))
+ return (RBIGNUM_SIGN(x)) ? INT2FIX(-1) : INT2FIX(1);
+ if (xlen > RBIGNUM_LEN(y))
+ return (RBIGNUM_SIGN(x)) ? 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);
-}
+ xds = BDIGITS(x);
+ yds = BDIGITS(y);
-enum big_op_t {
- big_op_gt,
- big_op_ge,
- big_op_lt,
- big_op_le
-};
+ while(xlen-- && (xds[xlen]==yds[xlen]));
+ if (-1 == xlen) return INT2FIX(0);
+ return (xds[xlen] > yds[xlen]) ?
+ (RBIGNUM_SIGN(x) ? INT2FIX(1) : INT2FIX(-1)) :
+ (RBIGNUM_SIGN(x) ? INT2FIX(-1) : INT2FIX(1));
+}
static VALUE
-big_op(VALUE x, VALUE y, enum big_op_t op)
+big_op(VALUE x, VALUE y, int op)
{
VALUE rel;
int n;
- if (FIXNUM_P(y) || RB_BIGNUM_TYPE_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
+ case T_BIGNUM:
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;
+ break;
+
+ case T_FLOAT:
+ {
+ double a = RFLOAT_VALUE(y);
+
+ if (isinf(a)) {
+ if (a > 0.0) rel = INT2FIX(-1);
+ else rel = INT2FIX(1);
+ break;
+ }
+ rel = rb_dbl_cmp(rb_big2dbl(x), a);
+ break;
+ }
+
+ default:
+ {
+ ID id = 0;
+ switch (op) {
+ case 0: id = '>'; break;
+ case 1: id = rb_intern(">="); break;
+ case 2: id = '<'; break;
+ case 3: id = rb_intern("<="); break;
+ }
+ return rb_num_coerce_relop(x, y, id);
}
- return rb_num_coerce_relop(x, y, id);
}
if (NIL_P(rel)) return Qfalse;
n = FIX2INT(rel);
switch (op) {
- case big_op_gt: return n > 0 ? Qtrue : Qfalse;
- case big_op_ge: return n >= 0 ? Qtrue : Qfalse;
- case big_op_lt: return n < 0 ? Qtrue : Qfalse;
- case big_op_le: return n <= 0 ? Qtrue : Qfalse;
+ case 0: return n > 0 ? Qtrue : Qfalse;
+ case 1: return n >= 0 ? Qtrue : Qfalse;
+ case 2: return n < 0 ? Qtrue : Qfalse;
+ case 3: return n <= 0 ? Qtrue : Qfalse;
}
return Qundef;
}
@@ -5469,7 +1534,7 @@ big_op(VALUE x, VALUE y, enum big_op_t op)
static VALUE
big_gt(VALUE x, VALUE y)
{
- return big_op(x, y, big_op_gt);
+ return big_op(x, y, 0);
}
/*
@@ -5483,7 +1548,7 @@ big_gt(VALUE x, VALUE y)
static VALUE
big_ge(VALUE x, VALUE y)
{
- return big_op(x, y, big_op_ge);
+ return big_op(x, y, 1);
}
/*
@@ -5497,7 +1562,7 @@ big_ge(VALUE x, VALUE y)
static VALUE
big_lt(VALUE x, VALUE y)
{
- return big_op(x, y, big_op_lt);
+ return big_op(x, y, 2);
}
/*
@@ -5511,7 +1576,7 @@ big_lt(VALUE x, VALUE y)
static VALUE
big_le(VALUE x, VALUE y)
{
- return big_op(x, y, big_op_le);
+ return big_op(x, y, 3);
}
/*
@@ -5528,16 +1593,22 @@ big_le(VALUE x, VALUE y)
VALUE
rb_big_eq(VALUE x, VALUE y)
{
- if (FIXNUM_P(y)) {
- if (bignorm(x) == y) return Qtrue;
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
- }
- else if (RB_FLOAT_TYPE_P(y)) {
- return rb_integer_float_eq(x, y);
- }
- else {
+ break;
+ case T_BIGNUM:
+ break;
+ case T_FLOAT:
+ {
+ volatile double a, b;
+
+ a = RFLOAT_VALUE(y);
+ if (isnan(a) || isinf(a)) return Qfalse;
+ b = rb_big2dbl(x);
+ return (a == b)?Qtrue:Qfalse;
+ }
+ default:
return rb_equal(y, x);
}
if (RBIGNUM_SIGN(x) != RBIGNUM_SIGN(y)) return Qfalse;
@@ -5557,10 +1628,10 @@ rb_big_eq(VALUE x, VALUE y)
* 68719476736.eql?(68719476736.0) #=> false
*/
-VALUE
+static VALUE
rb_big_eql(VALUE x, VALUE y)
{
- if (!RB_BIGNUM_TYPE_P(y)) return Qfalse;
+ if (TYPE(y) != T_BIGNUM) 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;
@@ -5600,50 +1671,79 @@ static VALUE
rb_big_neg(VALUE x)
{
VALUE z = rb_big_clone(x);
- BDIGIT *ds = BDIGITS(z);
- long n = RBIGNUM_LEN(z);
-
- if (!n) return INT2FIX(-1);
+ BDIGIT *ds;
+ long i;
- if (RBIGNUM_POSITIVE_P(z)) {
- if (bary_add_one(ds, n)) {
- big_extend_carry(z);
- }
- RBIGNUM_SET_NEGATIVE_SIGN(z);
- }
- else {
- bary_neg(ds, n);
- if (bary_add_one(ds, n))
- return INT2FIX(-1);
- bary_neg(ds, n);
- RBIGNUM_SET_POSITIVE_SIGN(z);
+ if (!RBIGNUM_SIGN(x)) get2comp(z);
+ ds = BDIGITS(z);
+ i = RBIGNUM_LEN(x);
+ if (!i) return INT2FIX(~(SIGNED_VALUE)0);
+ while (i--) {
+ ds[i] = ~ds[i];
}
+ RBIGNUM_SET_SIGN(z, !RBIGNUM_SIGN(z));
+ if (RBIGNUM_SIGN(x)) get2comp(z);
return bignorm(z);
}
-static VALUE
-bigsub(VALUE x, VALUE y)
+static void
+bigsub_core(BDIGIT *xds, long xn, BDIGIT *yds, long yn, BDIGIT *zds, long zn)
{
- VALUE z;
- BDIGIT *xds, *yds, *zds;
- long xn, yn, zn;
-
- xn = RBIGNUM_LEN(x);
- yn = RBIGNUM_LEN(y);
- zn = xn < yn ? yn : xn;
-
- z = bignew(zn, 1);
+ BDIGIT_DBL_SIGNED num;
+ long i;
- xds = BDIGITS(x);
- yds = BDIGITS(y);
- zds = BDIGITS(z);
+ for (i = 0, num = 0; i < yn; i++) {
+ num += (BDIGIT_DBL_SIGNED)xds[i] - yds[i];
+ zds[i] = BIGLO(num);
+ num = BIGDN(num);
+ }
+ while (num && i < xn) {
+ num += xds[i];
+ zds[i++] = BIGLO(num);
+ num = BIGDN(num);
+ }
+ while (i < xn) {
+ zds[i] = xds[i];
+ i++;
+ }
+ assert(i <= zn);
+ while (i < zn) {
+ zds[i++] = 0;
+ }
+}
- if (bary_sub(zds, zn, xds, xn, yds, yn)) {
- bary_2comp(zds, zn);
- RBIGNUM_SET_NEGATIVE_SIGN(z);
+static VALUE
+bigsub(VALUE x, VALUE y)
+{
+ VALUE z = 0;
+ long i = RBIGNUM_LEN(x);
+ BDIGIT *xds, *yds;
+
+ /* if x is smaller than y, swap */
+ if (RBIGNUM_LEN(x) < RBIGNUM_LEN(y)) {
+ z = x; x = y; y = z; /* swap x y */
+ }
+ else if (RBIGNUM_LEN(x) == RBIGNUM_LEN(y)) {
+ xds = BDIGITS(x);
+ yds = BDIGITS(y);
+ while (i > 0) {
+ i--;
+ if (xds[i] > yds[i]) {
+ break;
+ }
+ if (xds[i] < yds[i]) {
+ z = x; x = y; y = z; /* swap x y */
+ break;
+ }
+ }
}
+ z = bignew(RBIGNUM_LEN(x), z==0);
+ bigsub_core(BDIGITS(x), RBIGNUM_LEN(x),
+ BDIGITS(y), RBIGNUM_LEN(y),
+ BDIGITS(z), RBIGNUM_LEN(z));
+
return z;
}
@@ -5654,7 +1754,7 @@ bigsub_int(VALUE x, long y0)
{
VALUE z;
BDIGIT *xds, *zds;
- long xn, zn;
+ long xn;
BDIGIT_DBL_SIGNED num;
long i, y;
@@ -5662,19 +1762,10 @@ bigsub_int(VALUE x, long y0)
xds = BDIGITS(x);
xn = RBIGNUM_LEN(x);
- if (xn == 0)
- return LONG2NUM(-y0);
-
- 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));
+ z = bignew(xn, RBIGNUM_SIGN(x));
zds = BDIGITS(z);
-#if SIZEOF_BDIGITS >= SIZEOF_LONG
- assert(xn == zn);
+#if SIZEOF_BDIGITS == SIZEOF_LONG
num = (BDIGIT_DBL_SIGNED)xds[0] - y;
if (xn == 1 && num < 0) {
RBIGNUM_SET_SIGN(z, !RBIGNUM_SIGN(x));
@@ -5685,62 +1776,26 @@ bigsub_int(VALUE x, long y0)
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;
+ for (i=0; i<(int)(sizeof(y)/sizeof(BDIGIT)); i++) {
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;
+ while (num && i < xn) {
num += xds[i];
- zds[i] = BIGLO(num);
+ 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:
+ while (i < xn) {
zds[i] = xds[i];
+ i++;
}
-#if SIZEOF_BDIGITS < SIZEOF_LONG
- for (; i < zn; i++) {
- num_is_zero_z:
- zds[i] = 0;
- }
-#endif
- goto finish;
-
- finish:
- assert(num == 0 || num == -1);
if (num < 0) {
- get2comp(z);
- RBIGNUM_SET_SIGN(z, !RBIGNUM_SIGN(x));
+ z = bigsub(x, rb_int2big(y0));
}
RB_GC_GUARD(x);
return bignorm(z);
@@ -5758,75 +1813,79 @@ bigadd_int(VALUE x, long y)
xds = BDIGITS(x);
xn = RBIGNUM_LEN(x);
- if (xn == 0)
- return LONG2NUM(y);
-
- zn = xn;
-#if SIZEOF_BDIGITS < SIZEOF_LONG
- if (zn < bdigit_roomof(SIZEOF_LONG))
- zn = bdigit_roomof(SIZEOF_LONG);
-#endif
- zn++;
-
+ if (xn < 2) {
+ zn = 3;
+ }
+ else {
+ zn = xn + 1;
+ }
z = bignew(zn, RBIGNUM_SIGN(x));
zds = BDIGITS(z);
-#if SIZEOF_BDIGITS >= SIZEOF_LONG
+#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;
+ for (i=0; i<(int)(sizeof(y)/sizeof(BDIGIT)); i++) {
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);
+#endif
+ while (num && i < xn) {
+ num += xds[i];
+ zds[i++] = BIGLO(num);
num = BIGDN(num);
- y = BIGDN(y);
}
- goto finish;
+ if (num) zds[i++] = (BDIGIT)num;
+ else while (i < xn) {
+ zds[i] = xds[i];
+ i++;
+ }
+ assert(i <= zn);
+ while (i < zn) {
+ zds[i++] = 0;
+ }
+ RB_GC_GUARD(x);
+ return bignorm(z);
+}
-#endif
+static void
+bigadd_core(BDIGIT *xds, long xn, BDIGIT *yds, long yn, BDIGIT *zds, long zn)
+{
+ BDIGIT_DBL num = 0;
+ long i;
- 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);
+ if (xn > yn) {
+ BDIGIT *tds;
+ tds = xds; xds = yds; yds = tds;
+ i = xn; xn = yn; yn = i;
+ }
+
+ i = 0;
+ while (i < xn) {
+ num += (BDIGIT_DBL)xds[i] + yds[i];
+ zds[i++] = BIGLO(num);
num = BIGDN(num);
}
- for (; i < zn; i++) {
- y_is_zero_z:
- if (num == 0) goto num_is_zero_z;
- zds[i] = BIGLO(num);
+ while (num && i < yn) {
+ num += yds[i];
+ zds[i++] = BIGLO(num);
num = BIGDN(num);
}
- goto finish;
-
- for (;i < xn; i++) {
- num_is_zero_x:
- zds[i] = xds[i];
+ while (i < yn) {
+ zds[i] = yds[i];
+ i++;
}
- for (; i < zn; i++) {
- num_is_zero_z:
- zds[i] = 0;
+ if (num) zds[i++] = (BDIGIT)num;
+ assert(i <= zn);
+ while (i < zn) {
+ zds[i++] = 0;
}
- goto finish;
-
- finish:
- RB_GC_GUARD(x);
- return bignorm(z);
}
static VALUE
@@ -5849,9 +1908,9 @@ bigadd(VALUE x, VALUE y, int sign)
}
z = bignew(len, sign);
- bary_add(BDIGITS(z), RBIGNUM_LEN(z),
- BDIGITS(x), RBIGNUM_LEN(x),
- BDIGITS(y), RBIGNUM_LEN(y));
+ bigadd_core(BDIGITS(x), RBIGNUM_LEN(x),
+ BDIGITS(y), RBIGNUM_LEN(y),
+ BDIGITS(z), RBIGNUM_LEN(z));
return z;
}
@@ -5868,7 +1927,8 @@ rb_big_plus(VALUE x, VALUE y)
{
long n;
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
n = FIX2LONG(y);
if ((n > 0) != RBIGNUM_SIGN(x)) {
if (n < 0) {
@@ -5880,14 +1940,14 @@ rb_big_plus(VALUE x, VALUE y)
n = -n;
}
return bigadd_int(x, n);
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
+
+ case T_BIGNUM:
return bignorm(bigadd(x, y, 1));
- }
- else if (RB_FLOAT_TYPE_P(y)) {
+
+ case T_FLOAT:
return DBL2NUM(rb_big2dbl(x) + RFLOAT_VALUE(y));
- }
- else {
+
+ default:
return rb_num_coerce_bin(x, y, '+');
}
}
@@ -5904,7 +1964,8 @@ rb_big_minus(VALUE x, VALUE y)
{
long n;
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
n = FIX2LONG(y);
if ((n > 0) != RBIGNUM_SIGN(x)) {
if (n < 0) {
@@ -5916,76 +1977,573 @@ rb_big_minus(VALUE x, VALUE y)
n = -n;
}
return bigsub_int(x, n);
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
+
+ case T_BIGNUM:
return bignorm(bigadd(x, y, 0));
- }
- else if (RB_FLOAT_TYPE_P(y)) {
+
+ case T_FLOAT:
return DBL2NUM(rb_big2dbl(x) - RFLOAT_VALUE(y));
- }
- else {
+
+ default:
return rb_num_coerce_bin(x, y, '-');
}
}
-static VALUE
-bigsq(VALUE x)
+static long
+big_real_len(VALUE x)
{
- long xn, zn;
- VALUE z;
- BDIGIT *xds, *zds;
-
- xn = RBIGNUM_LEN(x);
- zn = 2 * xn;
+ long i = RBIGNUM_LEN(x);
+ BDIGIT *xds = BDIGITS(x);
+ while (--i && !xds[i]);
+ return i + 1;
+}
- z = bignew(zn, 1);
+static VALUE
+bigmul1_single(VALUE x, VALUE y)
+{
+ BDIGIT_DBL n;
+ VALUE z = bignew(2, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
+ BDIGIT *xds, *yds, *zds;
xds = BDIGITS(x);
+ yds = BDIGITS(y);
zds = BDIGITS(z);
-#ifdef USE_GMP
- if (xn < GMP_MUL_DIGITS)
- bary_sq_fast(zds, zn, xds, xn);
- else
- bary_mul(zds, zn, xds, xn, xds, xn);
-#else
- if (xn < KARATSUBA_MUL_DIGITS)
- bary_sq_fast(zds, zn, xds, xn);
- else
- bary_mul(zds, zn, xds, xn, xds, xn);
-#endif
+ n = (BDIGIT_DBL)xds[0] * yds[0];
+ zds[0] = BIGLO(n);
+ zds[1] = (BDIGIT)BIGDN(n);
- RB_GC_GUARD(x);
return z;
}
static VALUE
-bigmul0(VALUE x, VALUE y)
+bigmul1_normal(VALUE x, VALUE y)
{
- long xn, yn, zn;
- VALUE z;
+ long xl = RBIGNUM_LEN(x), yl = RBIGNUM_LEN(y), i, j = xl + yl + 1;
+ BDIGIT_DBL n = 0;
+ VALUE z = bignew(j, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
BDIGIT *xds, *yds, *zds;
- if (x == y)
- return bigsq(x);
+ xds = BDIGITS(x);
+ yds = BDIGITS(y);
+ zds = BDIGITS(z);
+ while (j--) zds[j] = 0;
+ for (i = 0; i < xl; i++) {
+ BDIGIT_DBL dd;
+ dd = xds[i];
+ if (dd == 0) continue;
+ n = 0;
+ for (j = 0; j < yl; j++) {
+ BDIGIT_DBL ee = n + (BDIGIT_DBL)dd * yds[j];
+ n = zds[i + j] + ee;
+ if (ee) zds[i + j] = BIGLO(n);
+ n = BIGDN(n);
+ }
+ if (n) {
+ zds[i + j] = (BDIGIT)n;
+ }
+ }
+ rb_thread_check_ints();
+ return z;
+}
+
+static VALUE bigmul0(VALUE x, VALUE y);
+
+/* balancing multiplication by slicing larger argument */
+static VALUE
+bigmul1_balance(VALUE x, VALUE y)
+{
+ VALUE z, t1, t2;
+ long i, xn, yn, r, n;
+ BDIGIT *yds, *zds, *t1ds;
xn = RBIGNUM_LEN(x);
yn = RBIGNUM_LEN(y);
- zn = xn + yn;
+ assert(2 * xn <= yn || 3 * xn <= 2*(yn+2));
- z = bignew(zn, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
+ z = bignew(xn + yn, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
+ t1 = bignew(xn, 1);
- xds = BDIGITS(x);
yds = BDIGITS(y);
zds = BDIGITS(z);
+ t1ds = BDIGITS(t1);
- bary_mul(zds, zn, xds, xn, yds, yn);
+ for (i = 0; i < xn + yn; i++) zds[i] = 0;
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
+ n = 0;
+ while (yn > 0) {
+ r = xn > yn ? yn : xn;
+ MEMCPY(t1ds, yds + n, BDIGIT, r);
+ RBIGNUM_SET_LEN(t1, r);
+ t2 = bigmul0(x, t1);
+ bigadd_core(zds + n, RBIGNUM_LEN(z) - n,
+ BDIGITS(t2), big_real_len(t2),
+ zds + n, RBIGNUM_LEN(z) - n);
+ yn -= r;
+ n += r;
+ }
+
+ return z;
+}
+
+/* split a bignum into high and low bignums */
+static void
+big_split(VALUE v, long n, volatile VALUE *ph, volatile VALUE *pl)
+{
+ long hn = 0, ln = RBIGNUM_LEN(v);
+ VALUE h, l;
+ BDIGIT *vds = BDIGITS(v);
+
+ if (ln > n) {
+ hn = ln - n;
+ ln = n;
+ }
+
+ if (!hn) {
+ h = rb_uint2big(0);
+ }
+ else {
+ while (--hn && !vds[hn + ln]);
+ h = bignew(hn += 2, 1);
+ MEMCPY(BDIGITS(h), vds + ln, BDIGIT, hn - 1);
+ BDIGITS(h)[hn - 1] = 0; /* margin for carry */
+ }
+
+ while (--ln && !vds[ln]);
+ l = bignew(ln += 2, 1);
+ MEMCPY(BDIGITS(l), vds, BDIGIT, ln - 1);
+ BDIGITS(l)[ln - 1] = 0; /* margin for carry */
+
+ *pl = l;
+ *ph = h;
+}
+
+/* multiplication by karatsuba method */
+static VALUE
+bigmul1_karatsuba(VALUE x, VALUE y)
+{
+ long i, n, xn, yn, t1n, t2n;
+ VALUE xh, xl, yh, yl, z, t1, t2, t3;
+ BDIGIT *zds;
+
+ xn = RBIGNUM_LEN(x);
+ yn = RBIGNUM_LEN(y);
+ n = yn / 2;
+ big_split(x, n, &xh, &xl);
+ if (x == y) {
+ yh = xh; yl = xl;
+ }
+ else big_split(y, n, &yh, &yl);
+
+ /* x = xh * b + xl
+ * y = yh * b + yl
+ *
+ * Karatsuba method:
+ * x * y = z2 * b^2 + z1 * b + z0
+ * where
+ * z2 = xh * yh
+ * z0 = xl * yl
+ * z1 = (xh + xl) * (yh + yl) - z2 - z0
+ *
+ * ref: http://en.wikipedia.org/wiki/Karatsuba_algorithm
+ */
+
+ /* allocate a result bignum */
+ z = bignew(xn + yn, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
+ zds = BDIGITS(z);
+
+ /* t1 <- xh * yh */
+ t1 = bigmul0(xh, yh);
+ t1n = big_real_len(t1);
+
+ /* copy t1 into high bytes of the result (z2) */
+ MEMCPY(zds + 2 * n, BDIGITS(t1), BDIGIT, t1n);
+ for (i = 2 * n + t1n; i < xn + yn; i++) zds[i] = 0;
+
+ if (!BIGZEROP(xl) && !BIGZEROP(yl)) {
+ /* t2 <- xl * yl */
+ t2 = bigmul0(xl, yl);
+ t2n = big_real_len(t2);
+
+ /* copy t2 into low bytes of the result (z0) */
+ MEMCPY(zds, BDIGITS(t2), BDIGIT, t2n);
+ for (i = t2n; i < 2 * n; i++) zds[i] = 0;
+ }
+ else {
+ t2 = Qundef;
+ t2n = 0;
+
+ /* copy 0 into low bytes of the result (z0) */
+ for (i = 0; i < 2 * n; i++) zds[i] = 0;
+ }
+
+ /* xh <- xh + xl */
+ if (RBIGNUM_LEN(xl) > RBIGNUM_LEN(xh)) {
+ t3 = xl; xl = xh; xh = t3;
+ }
+ /* xh has a margin for carry */
+ bigadd_core(BDIGITS(xh), RBIGNUM_LEN(xh),
+ BDIGITS(xl), RBIGNUM_LEN(xl),
+ BDIGITS(xh), RBIGNUM_LEN(xh));
+
+ /* yh <- yh + yl */
+ if (x != y) {
+ if (RBIGNUM_LEN(yl) > RBIGNUM_LEN(yh)) {
+ t3 = yl; yl = yh; yh = t3;
+ }
+ /* yh has a margin for carry */
+ bigadd_core(BDIGITS(yh), RBIGNUM_LEN(yh),
+ BDIGITS(yl), RBIGNUM_LEN(yl),
+ BDIGITS(yh), RBIGNUM_LEN(yh));
+ }
+ else yh = xh;
+
+ /* t3 <- xh * yh */
+ t3 = bigmul0(xh, yh);
+
+ i = xn + yn - n;
+ /* subtract t1 from t3 */
+ bigsub_core(BDIGITS(t3), big_real_len(t3), BDIGITS(t1), t1n, BDIGITS(t3), big_real_len(t3));
+
+ /* subtract t2 from t3; t3 is now the middle term of the product */
+ if (t2 != Qundef) bigsub_core(BDIGITS(t3), big_real_len(t3), BDIGITS(t2), t2n, BDIGITS(t3), big_real_len(t3));
+
+ /* add t3 to middle bytes of the result (z1) */
+ bigadd_core(zds + n, i, BDIGITS(t3), big_real_len(t3), zds + n, i);
+
+ return z;
+}
+
+static void
+biglsh_bang(BDIGIT *xds, long xn, unsigned long shift)
+{
+ long const s1 = shift/BITSPERDIG;
+ int const s2 = (int)(shift%BITSPERDIG);
+ int const s3 = BITSPERDIG-s2;
+ BDIGIT* zds;
+ BDIGIT num;
+ long i;
+ if (s1 >= xn) {
+ MEMZERO(xds, BDIGIT, xn);
+ return;
+ }
+ zds = xds + xn - 1;
+ xn -= s1 + 1;
+ num = xds[xn]<<s2;
+ do {
+ *zds-- = num | xds[--xn]>>s3;
+ num = xds[xn]<<s2;
+ }
+ while (xn > 0);
+ *zds = num;
+ for (i = s1; i > 0; --i)
+ *zds-- = 0;
+}
+
+static void
+bigrsh_bang(BDIGIT* xds, long xn, unsigned long shift)
+{
+ long s1 = shift/BITSPERDIG;
+ int s2 = (int)(shift%BITSPERDIG);
+ int s3 = BITSPERDIG - s2;
+ int i;
+ BDIGIT num;
+ BDIGIT* zds;
+ if (s1 >= xn) {
+ MEMZERO(xds, BDIGIT, xn);
+ return;
+ }
+
+ i = 0;
+ zds = xds + s1;
+ num = *zds++>>s2;
+ do {
+ xds[i++] = (BDIGIT)(*zds<<s3) | num;
+ num = *zds++>>s2;
+ }
+ while (i < xn - s1 - 1);
+ xds[i] = num;
+ MEMZERO(xds + xn - s1, BDIGIT, s1);
+}
+
+static void
+big_split3(VALUE v, long n, volatile VALUE* p0, volatile VALUE* p1, volatile VALUE* p2)
+{
+ VALUE v0, v12, v1, v2;
+
+ big_split(v, n, &v12, &v0);
+ big_split(v12, n, &v2, &v1);
+
+ *p0 = bigtrunc(v0);
+ *p1 = bigtrunc(v1);
+ *p2 = bigtrunc(v2);
+}
+
+static VALUE big_lshift(VALUE, unsigned long);
+static VALUE big_rshift(VALUE, unsigned long);
+static VALUE bigdivrem(VALUE, VALUE, volatile VALUE*, volatile VALUE*);
+
+static VALUE
+bigmul1_toom3(VALUE x, VALUE y)
+{
+ long n, xn, yn, zn;
+ VALUE x0, x1, x2, y0, y1, y2;
+ VALUE u0, u1, u2, u3, u4, v1, v2, v3;
+ VALUE z0, z1, z2, z3, z4, z, t;
+ BDIGIT* zds;
+
+ xn = RBIGNUM_LEN(x);
+ yn = RBIGNUM_LEN(y);
+ assert(xn <= yn); /* assume y >= x */
+
+ n = (yn + 2) / 3;
+ big_split3(x, n, &x0, &x1, &x2);
+ if (x == y) {
+ y0 = x0; y1 = x1; y2 = x2;
+ }
+ else big_split3(y, n, &y0, &y1, &y2);
+
+ /*
+ * 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, z4, and z5.
+ *
+ * (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 */
+ u1 = bigtrunc(bigadd(x0, x2, 1));
+
+ /* x(-1) : u2 <- u1 - x1 = x0 - x1 + x2 */
+ u2 = bigtrunc(bigsub(u1, x1));
+
+ /* x(1) : u1 <- u1 + x1 = x0 + x1 + x2 */
+ u1 = bigtrunc(bigadd(u1, x1, 1));
+
+ /* x(-2) : u3 <- 2 * (u2 + x2) - x0 = x0 - 2 * (x1 - 2 * x2) */
+ u3 = bigadd(u2, x2, 1);
+ if (BDIGITS(u3)[RBIGNUM_LEN(u3)-1] & BIGRAD_HALF) {
+ rb_big_resize(u3, RBIGNUM_LEN(u3) + 1);
+ BDIGITS(u3)[RBIGNUM_LEN(u3)-1] = 0;
+ }
+ biglsh_bang(BDIGITS(u3), RBIGNUM_LEN(u3), 1);
+ u3 = bigtrunc(bigadd(bigtrunc(u3), x0, 0));
+
+ if (x == y) {
+ v1 = u1; v2 = u2; v3 = u3;
+ }
+ else {
+ /* v1 <- y0 + y2 */
+ v1 = bigtrunc(bigadd(y0, y2, 1));
+
+ /* y(-1) : v2 <- v1 - y1 = y0 - y1 + y2 */
+ v2 = bigtrunc(bigsub(v1, y1));
+
+ /* y(1) : v1 <- v1 + y1 = y0 + y1 + y2 */
+ v1 = bigtrunc(bigadd(v1, y1, 1));
+
+ /* y(-2) : v3 <- 2 * (v2 + y2) - y0 = y0 - 2 * (y1 - 2 * y2) */
+ v3 = bigadd(v2, y2, 1);
+ if (BDIGITS(v3)[RBIGNUM_LEN(v3)-1] & BIGRAD_HALF) {
+ rb_big_resize(v3, RBIGNUM_LEN(v3) + 1);
+ BDIGITS(v3)[RBIGNUM_LEN(v3)-1] = 0;
+ }
+ biglsh_bang(BDIGITS(v3), RBIGNUM_LEN(v3), 1);
+ v3 = bigtrunc(bigadd(bigtrunc(v3), y0, 0));
+ }
+
+ /* z(0) : u0 <- x0 * y0 */
+ u0 = bigtrunc(bigmul0(x0, y0));
+
+ /* z(1) : u1 <- u1 * v1 */
+ u1 = bigtrunc(bigmul0(u1, v1));
+
+ /* z(-1) : u2 <- u2 * v2 */
+ u2 = bigtrunc(bigmul0(u2, v2));
+
+ /* z(-2) : u3 <- u3 * v3 */
+ u3 = bigtrunc(bigmul0(u3, v3));
+
+ /* z(inf) : u4 <- x2 * y2 */
+ u4 = bigtrunc(bigmul0(x2, y2));
+
+ /* for GC */
+ v1 = v2 = v3 = Qnil;
+
+ /*
+ * [Step2] interpolating z0, z1, z2, z3, z4, and z5.
+ */
+
+ /* z0 <- z(0) == u0 */
+ z0 = u0;
+
+ /* z4 <- z(inf) == u4 */
+ z4 = u4;
+
+ /* z3 <- (z(-2) - z(1)) / 3 == (u3 - u1) / 3 */
+ z3 = bigadd(u3, u1, 0);
+ bigdivrem(z3, big_three, &z3, NULL); /* TODO: optimize */
+ bigtrunc(z3);
+
+ /* z1 <- (z(1) - z(-1)) / 2 == (u1 - u2) / 2 */
+ z1 = bigtrunc(bigadd(u1, u2, 0));
+ bigrsh_bang(BDIGITS(z1), RBIGNUM_LEN(z1), 1);
+
+ /* z2 <- z(-1) - z(0) == u2 - u0 */
+ z2 = bigtrunc(bigadd(u2, u0, 0));
+
+ /* z3 <- (z2 - z3) / 2 + 2 * z(inf) == (z2 - z3) / 2 + 2 * u4 */
+ z3 = bigtrunc(bigadd(z2, z3, 0));
+ bigrsh_bang(BDIGITS(z3), RBIGNUM_LEN(z3), 1);
+ t = big_lshift(u4, 1); /* TODO: combining with next addition */
+ z3 = bigtrunc(bigadd(z3, t, 1));
+
+ /* z2 <- z2 + z1 - z(inf) == z2 + z1 - u4 */
+ z2 = bigtrunc(bigadd(z2, z1, 1));
+ z2 = bigtrunc(bigadd(z2, u4, 0));
+
+ /* z1 <- z1 - z3 */
+ z1 = bigtrunc(bigadd(z1, z3, 0));
+
+ /*
+ * [Step3] Substituting base value into b of the polynomial z(b),
+ */
+
+ zn = 6*n + 1;
+ z = bignew(zn, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
+ zds = BDIGITS(z);
+ MEMCPY(zds, BDIGITS(z0), BDIGIT, RBIGNUM_LEN(z0));
+ MEMZERO(zds + RBIGNUM_LEN(z0), BDIGIT, zn - RBIGNUM_LEN(z0));
+ bigadd_core(zds + n, zn - n, BDIGITS(z1), big_real_len(z1), zds + n, zn - n);
+ bigadd_core(zds + 2*n, zn - 2*n, BDIGITS(z2), big_real_len(z2), zds + 2*n, zn - 2*n);
+ bigadd_core(zds + 3*n, zn - 3*n, BDIGITS(z3), big_real_len(z3), zds + 3*n, zn - 3*n);
+ bigadd_core(zds + 4*n, zn - 4*n, BDIGITS(z4), big_real_len(z4), zds + 4*n, zn - 4*n);
+ z = bignorm(z);
+
+ return bignorm(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 VALUE
+bigsqr_fast(VALUE x)
+{
+ long len = RBIGNUM_LEN(x), i, j;
+ VALUE z = bignew(2 * len + 1, 1);
+ BDIGIT *xds = BDIGITS(x), *zds = BDIGITS(z);
+ BDIGIT_DBL c, v, w;
+
+ for (i = 2 * len + 1; i--; ) zds[i] = 0;
+ for (i = 0; i < len; 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;
+ for (j = i + 1; j < len; j++) {
+ w = (BDIGIT_DBL)xds[j];
+ c += (BDIGIT_DBL)zds[i + j] + BIGLO(v) * w;
+ zds[i + j] = BIGLO(c);
+ c = BIGDN(c);
+ if (BIGDN(v)) c += w;
+ }
+ if (c) {
+ c += (BDIGIT_DBL)zds[i + len];
+ zds[i + len] = BIGLO(c);
+ c = BIGDN(c);
+ }
+ if (c) zds[i + len + 1] += (BDIGIT)c;
+ }
return z;
}
+#define KARATSUBA_MUL_DIGITS 70
+#define TOOM3_MUL_DIGITS 150
+
+
+/* determine whether a bignum is sparse or not by random sampling */
+static inline VALUE
+big_sparse_p(VALUE x)
+{
+ long c = 0, n = RBIGNUM_LEN(x);
+
+ if ( BDIGITS(x)[rb_genrand_ulong_limited(n / 2) + n / 4]) c++;
+ if (c <= 1 && BDIGITS(x)[rb_genrand_ulong_limited(n / 2) + n / 4]) c++;
+ if (c <= 1 && BDIGITS(x)[rb_genrand_ulong_limited(n / 2) + n / 4]) c++;
+
+ return (c <= 1) ? Qtrue : Qfalse;
+}
+
+static VALUE
+bigmul0(VALUE x, VALUE y)
+{
+ long xn, yn;
+
+ xn = RBIGNUM_LEN(x);
+ yn = RBIGNUM_LEN(y);
+
+ /* make sure that y is longer than x */
+ if (xn > yn) {
+ VALUE t;
+ long tn;
+ t = x; x = y; y = t;
+ tn = xn; xn = yn; yn = tn;
+ }
+ assert(xn <= yn);
+
+ /* normal multiplication when x is small */
+ if (xn < KARATSUBA_MUL_DIGITS) {
+ normal:
+ if (x == y) return bigsqr_fast(x);
+ if (xn == 1 && yn == 1) return bigmul1_single(x, y);
+ return bigmul1_normal(x, y);
+ }
+
+ /* normal multiplication when x or y is a sparse bignum */
+ if (big_sparse_p(x)) goto normal;
+ if (big_sparse_p(y)) return bigmul1_normal(y, x);
+
+ /* balance multiplication by slicing y when x is much smaller than y */
+ if (2 * xn <= yn) return bigmul1_balance(x, y);
+
+ if (xn < TOOM3_MUL_DIGITS) {
+ /* multiplication by karatsuba method */
+ return bigmul1_karatsuba(x, y);
+ }
+ else if (3*xn <= 2*(yn + 2))
+ return bigmul1_balance(x, y);
+ return bigmul1_toom3(x, y);
+}
+
/*
* call-seq:
* big * other -> Numeric
@@ -5996,112 +2554,196 @@ bigmul0(VALUE x, VALUE y)
VALUE
rb_big_mul(VALUE x, VALUE y)
{
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
- }
- else if (RB_FLOAT_TYPE_P(y)) {
+ break;
+
+ case T_BIGNUM:
+ break;
+
+ case T_FLOAT:
return DBL2NUM(rb_big2dbl(x) * RFLOAT_VALUE(y));
- }
- else {
+
+ default:
return rb_num_coerce_bin(x, y, '*');
}
return bignorm(bigmul0(x, y));
}
+struct big_div_struct {
+ long nx, ny;
+ BDIGIT *yds, *zds;
+ VALUE stop;
+};
+
static VALUE
-bigdivrem(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp)
+bigdivrem1(void *ptr)
{
- long xn = RBIGNUM_LEN(x), yn = RBIGNUM_LEN(y);
- VALUE z;
- BDIGIT *xds, *yds, *zds;
- BDIGIT dd;
+ struct big_div_struct *bds = (struct big_div_struct*)ptr;
+ long nx = bds->nx, ny = bds->ny;
+ long i, j, nyzero;
+ BDIGIT *yds = bds->yds, *zds = bds->zds;
+ BDIGIT_DBL t2;
+ BDIGIT_DBL_SIGNED num;
+ BDIGIT q;
- VALUE q = Qnil, r = Qnil;
- BDIGIT *qds, *rds;
- long qn, rn;
+ j = nx==ny?nx+1:nx;
+ for (nyzero = 0; !yds[nyzero]; nyzero++);
+ do {
+ if (bds->stop) return Qnil;
+ if (zds[j] == yds[ny-1]) q = (BDIGIT)BIGRAD-1;
+ else q = (BDIGIT)((BIGUP(zds[j]) + zds[j-1])/yds[ny-1]);
+ if (q) {
+ i = nyzero; num = 0; t2 = 0;
+ do { /* multiply and subtract */
+ BDIGIT_DBL ee;
+ t2 += (BDIGIT_DBL)yds[i] * q;
+ ee = num - BIGLO(t2);
+ num = (BDIGIT_DBL)zds[j - ny + i] + ee;
+ if (ee) zds[j - ny + i] = BIGLO(num);
+ num = BIGDN(num);
+ t2 = BIGDN(t2);
+ } while (++i < ny);
+ num += zds[j - ny + i] - t2;/* borrow from high digit; don't update */
+ while (num) { /* "add back" required */
+ i = 0; num = 0; q--;
+ do {
+ BDIGIT_DBL ee = num + yds[i];
+ num = (BDIGIT_DBL)zds[j - ny + i] + ee;
+ if (ee) zds[j - ny + i] = BIGLO(num);
+ num = BIGDN(num);
+ } while (++i < ny);
+ num--;
+ }
+ }
+ zds[j] = q;
+ } while (--j >= ny);
+ return Qnil;
+}
- yds = BDIGITS(y);
- BARY_TRUNC(yds, yn);
- if (yn == 0)
- rb_num_zerodiv();
+static void
+rb_big_stop(void *ptr)
+{
+ VALUE *stop = (VALUE*)ptr;
+ *stop = Qtrue;
+}
- xds = BDIGITS(x);
- BARY_TRUNC(xds, xn);
+static VALUE
+bigdivrem(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp)
+{
+ struct big_div_struct bds;
+ long nx = RBIGNUM_LEN(x), ny = RBIGNUM_LEN(y);
+ long i, j;
+ VALUE z, yy, zz;
+ BDIGIT *xds, *yds, *zds, *tds;
+ BDIGIT_DBL t2;
+ BDIGIT dd, q;
- if (xn < yn || (xn == yn && xds[xn - 1] < yds[yn - 1])) {
+ if (BIGZEROP(y)) rb_num_zerodiv();
+ xds = BDIGITS(x);
+ yds = BDIGITS(y);
+ if (nx < ny || (nx == ny && xds[nx - 1] < yds[ny - 1])) {
if (divp) *divp = rb_int2big(0);
if (modp) *modp = x;
return Qnil;
}
- if (yn == 1) {
+ if (ny == 1) {
dd = yds[0];
- z = bignew(xn, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
+ z = rb_big_clone(x);
zds = BDIGITS(z);
- dd = bigdivrem_single(zds, xds, xn, dd);
+ t2 = 0; i = nx;
+ while (i--) {
+ t2 = BIGUP(t2) + zds[i];
+ zds[i] = (BDIGIT)(t2 / dd);
+ t2 %= dd;
+ }
+ RBIGNUM_SET_SIGN(z, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
if (modp) {
- *modp = rb_uint2big((VALUE)dd);
+ *modp = rb_uint2big((VALUE)t2);
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);
+ z = bignew(nx==ny?nx+2:nx+1, RBIGNUM_SIGN(x)==RBIGNUM_SIGN(y));
+ zds = BDIGITS(z);
+ if (nx==ny) zds[nx+1] = 0;
+ while (!yds[ny-1]) ny--;
+
+ dd = 0;
+ q = yds[ny-1];
+ while ((q & (BDIGIT)(1UL<<(BITSPERDIG-1))) == 0) {
+ q <<= 1UL;
+ dd++;
+ }
+ if (dd) {
+ yy = rb_big_clone(y);
+ tds = BDIGITS(yy);
+ j = 0;
+ t2 = 0;
+ while (j<ny) {
+ t2 += (BDIGIT_DBL)yds[j]<<dd;
+ tds[j++] = BIGLO(t2);
+ t2 = BIGDN(t2);
+ }
+ yds = tds;
+ RB_GC_GUARD(y) = yy;
+ j = 0;
+ t2 = 0;
+ while (j<nx) {
+ t2 += (BDIGIT_DBL)xds[j]<<dd;
+ zds[j++] = BIGLO(t2);
+ t2 = BIGDN(t2);
+ }
+ zds[j] = (BDIGIT)t2;
}
else {
- qn = 0;
- qds = NULL;
+ zds[nx] = 0;
+ j = nx;
+ while (j--) zds[j] = xds[j];
}
- if (modp) {
- rn = yn;
- r = bignew(rn, RBIGNUM_SIGN(x));
- rds = BDIGITS(r);
+ bds.nx = nx;
+ bds.ny = ny;
+ bds.zds = zds;
+ bds.yds = yds;
+ bds.stop = Qfalse;
+ if (nx > 10000 || ny > 10000) {
+ rb_thread_blocking_region(bigdivrem1, &bds, rb_big_stop, &bds.stop);
}
else {
- rn = 0;
- rds = NULL;
+ bigdivrem1(&bds);
}
- bary_divmod_branch(qds, qn, rds, rn, xds, xn, yds, yn);
-
- if (divp) {
- bigtrunc(q);
- *divp = q;
- }
- if (modp) {
- bigtrunc(r);
- *modp = r;
+ if (divp) { /* move quotient down in z */
+ *divp = zz = rb_big_clone(z);
+ zds = BDIGITS(zz);
+ j = (nx==ny ? nx+2 : nx+1) - ny;
+ for (i = 0;i < j;i++) zds[i] = zds[i+ny];
+ if (!zds[i-1]) i--;
+ RBIGNUM_SET_LEN(zz, i);
+ }
+ if (modp) { /* normalize remainder */
+ *modp = zz = rb_big_clone(z);
+ zds = BDIGITS(zz);
+ while (--ny && !zds[ny]); ++ny;
+ if (dd) {
+ t2 = 0; i = ny;
+ while(i--) {
+ t2 = (t2 | zds[i]) >> dd;
+ q = zds[i];
+ zds[i] = BIGLO(t2);
+ t2 = BIGUP(q);
+ }
+ }
+ if (!zds[ny-1]) ny--;
+ RBIGNUM_SET_LEN(zz, ny);
+ RBIGNUM_SET_SIGN(zz, RBIGNUM_SIGN(x));
}
-
- return Qnil;
+ return z;
}
static void
@@ -6125,22 +2767,26 @@ rb_big_divide(VALUE x, VALUE y, ID op)
{
VALUE z;
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
- }
- else if (RB_FLOAT_TYPE_P(y)) {
- if (op == '/') {
- return DBL2NUM(rb_big2dbl(x) / RFLOAT_VALUE(y));
- }
- else {
- double dy = RFLOAT_VALUE(y);
- if (dy == 0.0) rb_num_zerodiv();
- return rb_dbl2big(rb_big2dbl(x) / dy);
+ break;
+
+ case T_BIGNUM:
+ break;
+
+ case T_FLOAT:
+ {
+ double div = rb_big2dbl(x) / RFLOAT_VALUE(y);
+ if (op == '/') {
+ return DBL2NUM(div);
+ }
+ else {
+ return rb_dbl2big(div);
+ }
}
- }
- else {
+
+ default:
return rb_num_coerce_bin(x, y, op);
}
bigdivmod(x, y, &z, 0);
@@ -6190,10 +2836,15 @@ rb_big_modulo(VALUE x, VALUE y)
{
VALUE z;
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (!RB_BIGNUM_TYPE_P(y)) {
+ break;
+
+ case T_BIGNUM:
+ break;
+
+ default:
return rb_num_coerce_bin(x, y, '%');
}
bigdivmod(x, y, 0, &z);
@@ -6215,10 +2866,15 @@ rb_big_remainder(VALUE x, VALUE y)
{
VALUE z;
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (!RB_BIGNUM_TYPE_P(y)) {
+ break;
+
+ case T_BIGNUM:
+ break;
+
+ default:
return rb_num_coerce_bin(x, y, rb_intern("remainder"));
}
bigdivrem(x, y, 0, &z);
@@ -6238,10 +2894,15 @@ rb_big_divmod(VALUE x, VALUE y)
{
VALUE div, mod;
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
y = rb_int2big(FIX2LONG(y));
- }
- else if (!RB_BIGNUM_TYPE_P(y)) {
+ break;
+
+ case T_BIGNUM:
+ break;
+
+ default:
return rb_num_coerce_bin(x, y, rb_intern("divmod"));
}
bigdivmod(x, y, &div, &mod);
@@ -6249,59 +2910,84 @@ rb_big_divmod(VALUE x, VALUE y)
return rb_assoc_new(bignorm(div), bignorm(mod));
}
+static int
+bdigbitsize(BDIGIT x)
+{
+ int size = 1;
+ int nb = BITSPERDIG / 2;
+ BDIGIT bits = (~0 << nb);
+
+ if (!x) return 0;
+ while (x > 1) {
+ if (x & bits) {
+ size += nb;
+ x >>= nb;
+ }
+ x &= ~bits;
+ nb /= 2;
+ bits >>= nb;
+ }
+
+ return size;
+}
+
+static VALUE big_lshift(VALUE, unsigned long);
+static VALUE big_rshift(VALUE, unsigned long);
+
static VALUE
big_shift(VALUE x, long n)
{
if (n < 0)
- return big_lshift(x, 1+(unsigned long)(-(n+1)));
+ return big_lshift(x, (unsigned long)-n);
else if (n > 0)
return big_rshift(x, (unsigned long)n);
return x;
}
static VALUE
-big_fdiv(VALUE x, VALUE y, long ey)
+big_fdiv(VALUE x, VALUE y)
{
#define DBL_BIGDIG ((DBL_MANT_DIG + BITSPERDIG) / BITSPERDIG)
VALUE z;
- long l, ex;
+ long l, ex, ey;
+ int i;
bigtrunc(x);
- l = RBIGNUM_LEN(x);
- ex = l * BITSPERDIG - nlz(BDIGITS(x)[l-1]);
+ l = RBIGNUM_LEN(x) - 1;
+ ex = l * BITSPERDIG;
+ ex += bdigbitsize(BDIGITS(x)[l]);
ex -= 2 * DBL_BIGDIG * BITSPERDIG;
if (ex) x = big_shift(x, ex);
- bigdivrem(x, y, &z, 0);
- l = ex - ey;
+ switch (TYPE(y)) {
+ case T_FIXNUM:
+ y = rb_int2big(FIX2LONG(y));
+ case T_BIGNUM: {
+ bigtrunc(y);
+ l = RBIGNUM_LEN(y) - 1;
+ ey = l * BITSPERDIG;
+ ey += bdigbitsize(BDIGITS(y)[l]);
+ ey -= DBL_BIGDIG * BITSPERDIG;
+ if (ey) y = big_shift(y, ey);
+ bignum:
+ 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);
- }
+ {
+ /* Visual C++ can't be here */
+ if (l > INT_MAX) return DBL2NUM(INFINITY);
+ if (l < INT_MIN) return DBL2NUM(0.0);
+ }
#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);
+ return DBL2NUM(ldexp(big2dbl(z), (int)l));
+ }
+ case T_FLOAT:
+ y = dbl2big(ldexp(frexp(RFLOAT_VALUE(y), &i), DBL_MANT_DIG));
+ ey = i - DBL_MANT_DIG;
+ goto bignum;
+ }
+ rb_bug("big_fdiv");
+ /* NOTREACHED */
}
/*
@@ -6323,29 +3009,39 @@ rb_big_fdiv(VALUE x, VALUE y)
double dx, dy;
dx = big2dbl(x);
- if (FIXNUM_P(y)) {
+ switch (TYPE(y)) {
+ case T_FIXNUM:
dy = (double)FIX2LONG(y);
if (isinf(dx))
- return big_fdiv_int(x, rb_int2big(FIX2LONG(y)));
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
+ return big_fdiv(x, y);
+ break;
+
+ case T_BIGNUM:
dy = rb_big2dbl(y);
if (isinf(dx) || isinf(dy))
- return big_fdiv_int(x, y);
- }
- else if (RB_FLOAT_TYPE_P(y)) {
+ return big_fdiv(x, y);
+ break;
+
+ case T_FLOAT:
dy = RFLOAT_VALUE(y);
if (isnan(dy))
return y;
if (isinf(dx))
- return big_fdiv_float(x, y);
- }
- else {
+ return big_fdiv(x, y);
+ break;
+
+ default:
return rb_num_coerce_bin(x, y, rb_intern("fdiv"));
}
return DBL2NUM(dx / dy);
}
+static VALUE
+bigsqr(VALUE x)
+{
+ return bigtrunc(bigmul0(x, x));
+}
+
/*
* call-seq:
* big ** exponent -> numeric
@@ -6365,21 +3061,20 @@ rb_big_pow(VALUE x, VALUE y)
double d;
SIGNED_VALUE yy;
- again:
if (y == INT2FIX(0)) return INT2FIX(1);
- if (RB_FLOAT_TYPE_P(y)) {
+ switch (TYPE(y)) {
+ case T_FLOAT:
d = RFLOAT_VALUE(y);
if ((!RBIGNUM_SIGN(x) && !BIGZEROP(x)) && d != round(d))
return rb_funcall(rb_complex_raw1(x), rb_intern("**"), 1, y);
- }
- else if (RB_BIGNUM_TYPE_P(y)) {
- y = bignorm(y);
- if (FIXNUM_P(y))
- goto again;
+ break;
+
+ case T_BIGNUM:
rb_warn("in a**b, b may be too big");
d = rb_big2dbl(y);
- }
- else if (FIXNUM_P(y)) {
+ break;
+
+ case T_FIXNUM:
yy = FIX2LONG(y);
if (yy < 0)
@@ -6387,84 +3082,85 @@ rb_big_pow(VALUE x, VALUE 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;
+ const long xlen = RBIGNUM_LEN(x) - 1;
+ const long xbits = ffs(RBIGNUM_DIGITS(x)[xlen]) + SIZEOF_BDIGITS*BITSPERDIG*xlen;
+ const long BIGLEN_LIMIT = BITSPERDIG*1024*1024;
- if (xbits == (size_t)-1 ||
- (xbits > BIGLEN_LIMIT) ||
- (xbits * yy > BIGLEN_LIMIT)) {
+ if ((xbits > BIGLEN_LIMIT) || (xbits * yy > BIGLEN_LIMIT)) {
rb_warn("in a**b, b may be too big");
d = (double)yy;
+ break;
}
- else {
- for (mask = FIXNUM_MAX + 1; mask; mask >>= 1) {
- if (z) z = bigsq(z);
- if (yy & mask) {
- z = z ? bigtrunc(bigmul0(z, x)) : x;
- }
+ for (mask = FIXNUM_MAX + 1; mask; mask >>= 1) {
+ if (z) z = bigsqr(z);
+ if (yy & mask) {
+ z = z ? bigtrunc(bigmul0(z, x)) : x;
}
- return bignorm(z);
}
+ return bignorm(z);
}
- }
- else {
+ /* NOTREACHED */
+ break;
+
+ default:
return rb_num_coerce_bin(x, y, rb_intern("**"));
}
return DBL2NUM(pow(rb_big2dbl(x), d));
}
+static inline VALUE
+bit_coerce(VALUE x)
+{
+ while (!FIXNUM_P(x) && TYPE(x) != T_BIGNUM) {
+ if (TYPE(x) == T_FLOAT) {
+ rb_raise(rb_eTypeError, "can't convert Float into Integer");
+ }
+ x = rb_to_int(x);
+ }
+ return x;
+}
+
static VALUE
-bigand_int(VALUE x, long xn, BDIGIT hibitsx, long y)
+bigand_int(VALUE x, long y)
{
VALUE z;
BDIGIT *xds, *zds;
- long zn;
+ long xn, zn;
long i;
- BDIGIT hibitsy;
+ char sign;
if (y == 0) return INT2FIX(0);
- if (xn == 0) return hibitsx ? LONG2NUM(y) : 0;
- hibitsy = 0 <= y ? 0 : BDIGMAX;
+ sign = (y > 0);
xds = BDIGITS(x);
-#if SIZEOF_BDIGITS >= SIZEOF_LONG
- if (!hibitsy) {
+ zn = xn = RBIGNUM_LEN(x);
+#if SIZEOF_BDIGITS == SIZEOF_LONG
+ if (sign) {
y &= xds[0];
return LONG2NUM(y);
}
#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);
+ z = bignew(zn, RBIGNUM_SIGN(x) || sign);
zds = BDIGITS(z);
-#if SIZEOF_BDIGITS >= SIZEOF_LONG
+#if SIZEOF_BDIGITS == SIZEOF_LONG
i = 1;
- zds[0] = xds[0] & BIGLO(y);
+ zds[0] = xds[0] & y;
#else
- for (i=0; i < xn; i++) {
- if (y == 0 || y == -1) break;
- zds[i] = xds[i] & BIGLO(y);
- y = BIGDN(y);
- }
- for (; i < zn; i++) {
- if (y == 0 || y == -1) break;
- zds[i] = hibitsx & BIGLO(y);
- y = BIGDN(y);
+ {
+ BDIGIT_DBL num = y;
+
+ for (i=0; i<(int)(sizeof(y)/sizeof(BDIGIT)); i++) {
+ zds[i] = xds[i] & BIGLO(num);
+ num = BIGDN(num);
+ }
}
#endif
- for (;i < xn; i++) {
- zds[i] = xds[i] & hibitsy;
- }
- for (;i < zn; i++) {
- zds[i] = hibitsx & hibitsy;
+ while (i < xn) {
+ zds[i] = sign?0:xds[i];
+ i++;
}
- twocomp2abs_bang(z, hibitsx && hibitsy);
- RB_GC_GUARD(x);
+ if (!RBIGNUM_SIGN(z)) get2comp(z);
return bignorm(z);
}
@@ -6476,121 +3172,86 @@ bigand_int(VALUE x, long xn, BDIGIT hibitsx, long y)
*/
VALUE
-rb_big_and(VALUE x, VALUE y)
+rb_big_and(VALUE xx, VALUE yy)
{
- VALUE z;
+ volatile VALUE x, y, z;
BDIGIT *ds1, *ds2, *zds;
- long i, xn, yn, n1, n2;
- BDIGIT hibitsx, hibitsy;
- BDIGIT hibits1, hibits2;
- VALUE tmpv;
- BDIGIT tmph;
- long tmpn;
+ long i, l1, l2;
+ char sign;
- if (!FIXNUM_P(y) && !RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bit(x, y, '&');
+ x = xx;
+ y = bit_coerce(yy);
+ if (!RBIGNUM_SIGN(x)) {
+ x = rb_big_clone(x);
+ get2comp(x);
}
-
- hibitsx = abs2twocomp(&x, &xn);
if (FIXNUM_P(y)) {
- return bigand_int(x, xn, hibitsx, FIX2LONG(y));
+ return bigand_int(x, FIX2LONG(y));
}
- hibitsy = abs2twocomp(&y, &yn);
- if (xn > yn) {
- tmpv = x; x = y; y = tmpv;
- tmpn = xn; xn = yn; yn = tmpn;
- tmph = hibitsx; hibitsx = hibitsy; hibitsy = tmph;
+ if (!RBIGNUM_SIGN(y)) {
+ y = rb_big_clone(y);
+ get2comp(y);
}
- n1 = xn;
- n2 = yn;
- ds1 = BDIGITS(x);
- ds2 = BDIGITS(y);
- hibits1 = hibitsx;
- hibits2 = hibitsy;
-
- if (!hibits1)
- n2 = n1;
-
- z = bignew(n2, 0);
+ if (RBIGNUM_LEN(x) > RBIGNUM_LEN(y)) {
+ l1 = RBIGNUM_LEN(y);
+ l2 = RBIGNUM_LEN(x);
+ ds1 = BDIGITS(y);
+ ds2 = BDIGITS(x);
+ sign = RBIGNUM_SIGN(y);
+ }
+ else {
+ l1 = RBIGNUM_LEN(x);
+ l2 = RBIGNUM_LEN(y);
+ ds1 = BDIGITS(x);
+ ds2 = BDIGITS(y);
+ sign = RBIGNUM_SIGN(x);
+ }
+ z = bignew(l2, RBIGNUM_SIGN(x) || RBIGNUM_SIGN(y));
zds = BDIGITS(z);
- for (i=0; i<n1; i++) {
+ for (i=0; i<l1; i++) {
zds[i] = ds1[i] & ds2[i];
}
- for (; i<n2; i++) {
- zds[i] = hibits1 & ds2[i];
+ for (; i<l2; i++) {
+ zds[i] = sign?0:ds2[i];
}
- twocomp2abs_bang(z, hibits1 && hibits2);
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
+ if (!RBIGNUM_SIGN(z)) get2comp(z);
return bignorm(z);
}
static VALUE
-bigor_int(VALUE x, long xn, BDIGIT hibitsx, long y)
+bigor_int(VALUE x, long y)
{
VALUE z;
BDIGIT *xds, *zds;
- long zn;
+ long xn, zn;
long i;
- BDIGIT hibitsy;
+ char sign;
- if (y == -1) return INT2FIX(-1);
- if (xn == 0) return hibitsx ? INT2FIX(-1) : LONG2FIX(y);
- hibitsy = 0 <= y ? 0 : BDIGMAX;
+ sign = (y >= 0);
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);
+ zn = xn = RBIGNUM_LEN(x);
+ z = bignew(zn, RBIGNUM_SIGN(x) && sign);
zds = BDIGITS(z);
-#if SIZEOF_BDIGITS >= SIZEOF_LONG
+#if SIZEOF_BDIGITS == SIZEOF_LONG
i = 1;
- zds[0] = xds[0] | BIGLO(y);
- if (i < zn)
- goto y_is_fixed_point;
- goto finish;
+ zds[0] = xds[0] | y;
#else
- for (i=0; i < xn; i++) {
- if (y == 0 || y == -1) goto y_is_fixed_point;
- zds[i] = xds[i] | BIGLO(y);
- y = BIGDN(y);
- }
- if (hibitsx)
- goto fill_hibits;
- for (; i < zn; i++) {
- if (y == 0 || y == -1) goto y_is_fixed_point;
- zds[i] = BIGLO(y);
- y = BIGDN(y);
- }
- goto finish;
-#endif
+ {
+ BDIGIT_DBL num = y;
- y_is_fixed_point:
- if (hibitsy)
- goto fill_hibits;
- for (; i < xn; i++) {
- zds[i] = xds[i];
- }
- if (hibitsx)
- goto fill_hibits;
- for (; i < zn; i++) {
- zds[i] = 0;
+ for (i=0; i<(int)(sizeof(y)/sizeof(BDIGIT)); i++) {
+ zds[i] = xds[i] | BIGLO(num);
+ num = BIGDN(num);
+ }
}
- goto finish;
-
- fill_hibits:
- for (; i < zn; i++) {
- zds[i] = BDIGMAX;
+#endif
+ while (i < xn) {
+ zds[i] = sign?xds[i]:(BDIGIT)(BIGRAD-1);
+ i++;
}
-
- finish:
- twocomp2abs_bang(z, hibitsx || hibitsy);
- RB_GC_GUARD(x);
+ if (!RBIGNUM_SIGN(z)) get2comp(z);
return bignorm(z);
}
@@ -6602,96 +3263,87 @@ bigor_int(VALUE x, long xn, BDIGIT hibitsx, long y)
*/
VALUE
-rb_big_or(VALUE x, VALUE y)
+rb_big_or(VALUE xx, VALUE yy)
{
- VALUE z;
+ volatile VALUE x, y, z;
BDIGIT *ds1, *ds2, *zds;
- long i, xn, yn, n1, n2;
- BDIGIT hibitsx, hibitsy;
- BDIGIT hibits1, hibits2;
- VALUE tmpv;
- BDIGIT tmph;
- long tmpn;
+ long i, l1, l2;
+ char sign;
- if (!FIXNUM_P(y) && !RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bit(x, y, '|');
- }
+ x = xx;
+ y = bit_coerce(yy);
- hibitsx = abs2twocomp(&x, &xn);
+ if (!RBIGNUM_SIGN(x)) {
+ x = rb_big_clone(x);
+ get2comp(x);
+ }
if (FIXNUM_P(y)) {
- return bigor_int(x, xn, hibitsx, FIX2LONG(y));
+ return bigor_int(x, FIX2LONG(y));
}
- hibitsy = abs2twocomp(&y, &yn);
- if (xn > yn) {
- tmpv = x; x = y; y = tmpv;
- tmpn = xn; xn = yn; yn = tmpn;
- tmph = hibitsx; hibitsx = hibitsy; hibitsy = tmph;
+ if (!RBIGNUM_SIGN(y)) {
+ y = rb_big_clone(y);
+ get2comp(y);
}
- n1 = xn;
- n2 = yn;
- ds1 = BDIGITS(x);
- ds2 = BDIGITS(y);
- hibits1 = hibitsx;
- hibits2 = hibitsy;
-
- if (hibits1)
- n2 = n1;
-
- z = bignew(n2, 0);
+ if (RBIGNUM_LEN(x) > RBIGNUM_LEN(y)) {
+ l1 = RBIGNUM_LEN(y);
+ l2 = RBIGNUM_LEN(x);
+ ds1 = BDIGITS(y);
+ ds2 = BDIGITS(x);
+ sign = RBIGNUM_SIGN(y);
+ }
+ else {
+ l1 = RBIGNUM_LEN(x);
+ l2 = RBIGNUM_LEN(y);
+ ds1 = BDIGITS(x);
+ ds2 = BDIGITS(y);
+ sign = RBIGNUM_SIGN(x);
+ }
+ z = bignew(l2, RBIGNUM_SIGN(x) && RBIGNUM_SIGN(y));
zds = BDIGITS(z);
- for (i=0; i<n1; i++) {
+ for (i=0; i<l1; i++) {
zds[i] = ds1[i] | ds2[i];
}
- for (; i<n2; i++) {
- zds[i] = hibits1 | ds2[i];
+ for (; i<l2; i++) {
+ zds[i] = sign?ds2[i]:(BDIGIT)(BIGRAD-1);
}
- twocomp2abs_bang(z, hibits1 || hibits2);
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
+ if (!RBIGNUM_SIGN(z)) get2comp(z);
return bignorm(z);
}
static VALUE
-bigxor_int(VALUE x, long xn, BDIGIT hibitsx, long y)
+bigxor_int(VALUE x, long y)
{
VALUE z;
BDIGIT *xds, *zds;
- long zn;
+ long xn, zn;
long i;
- BDIGIT hibitsy;
+ char sign;
- hibitsy = 0 <= y ? 0 : BDIGMAX;
+ sign = (y >= 0) ? 1 : 0;
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);
+ zn = xn = RBIGNUM_LEN(x);
+ z = bignew(zn, !(RBIGNUM_SIGN(x) ^ sign));
zds = BDIGITS(z);
-#if SIZEOF_BDIGITS >= SIZEOF_LONG
+#if SIZEOF_BDIGITS == SIZEOF_LONG
i = 1;
- zds[0] = xds[0] ^ BIGLO(y);
+ zds[0] = xds[0] ^ 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);
+ {
+ BDIGIT_DBL num = y;
+
+ for (i=0; i<(int)(sizeof(y)/sizeof(BDIGIT)); i++) {
+ zds[i] = xds[i] ^ BIGLO(num);
+ num = BIGDN(num);
+ }
}
#endif
- for (; i < xn; i++) {
- zds[i] = xds[i] ^ hibitsy;
- }
- for (; i < zn; i++) {
- zds[i] = hibitsx ^ hibitsy;
+ while (i < xn) {
+ zds[i] = sign?xds[i]:~xds[i];
+ i++;
}
- twocomp2abs_bang(z, (hibitsx ^ hibitsy) != 0);
- RB_GC_GUARD(x);
+ if (!RBIGNUM_SIGN(z)) get2comp(z);
return bignorm(z);
}
/*
@@ -6702,53 +3354,68 @@ bigxor_int(VALUE x, long xn, BDIGIT hibitsx, long y)
*/
VALUE
-rb_big_xor(VALUE x, VALUE y)
+rb_big_xor(VALUE xx, VALUE yy)
{
+ volatile VALUE x, y;
VALUE z;
BDIGIT *ds1, *ds2, *zds;
- long i, xn, yn, n1, n2;
- BDIGIT hibitsx, hibitsy;
- BDIGIT hibits1, hibits2;
- VALUE tmpv;
- BDIGIT tmph;
- long tmpn;
+ long i, l1, l2;
+ char sign;
- if (!FIXNUM_P(y) && !RB_BIGNUM_TYPE_P(y)) {
- return rb_num_coerce_bit(x, y, '^');
- }
+ x = xx;
+ y = bit_coerce(yy);
- hibitsx = abs2twocomp(&x, &xn);
+ if (!RBIGNUM_SIGN(x)) {
+ x = rb_big_clone(x);
+ get2comp(x);
+ }
if (FIXNUM_P(y)) {
- return bigxor_int(x, xn, hibitsx, FIX2LONG(y));
+ return bigxor_int(x, 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);
+ if (!RBIGNUM_SIGN(y)) {
+ y = rb_big_clone(y);
+ get2comp(y);
+ }
+ if (RBIGNUM_LEN(x) > RBIGNUM_LEN(y)) {
+ l1 = RBIGNUM_LEN(y);
+ l2 = RBIGNUM_LEN(x);
+ ds1 = BDIGITS(y);
+ ds2 = BDIGITS(x);
+ sign = RBIGNUM_SIGN(y);
+ }
+ else {
+ l1 = RBIGNUM_LEN(x);
+ l2 = RBIGNUM_LEN(y);
+ ds1 = BDIGITS(x);
+ ds2 = BDIGITS(y);
+ sign = RBIGNUM_SIGN(x);
+ }
+ RBIGNUM_SET_SIGN(x, RBIGNUM_SIGN(x)?1:0);
+ RBIGNUM_SET_SIGN(y, RBIGNUM_SIGN(y)?1:0);
+ z = bignew(l2, !(RBIGNUM_SIGN(x) ^ RBIGNUM_SIGN(y)));
zds = BDIGITS(z);
- for (i=0; i<n1; i++) {
+ for (i=0; i<l1; i++) {
zds[i] = ds1[i] ^ ds2[i];
}
- for (; i<n2; i++) {
- zds[i] = hibitsx ^ ds2[i];
+ for (; i<l2; i++) {
+ zds[i] = sign?ds2[i]:~ds2[i];
}
- twocomp2abs_bang(z, (hibits1 ^ hibits2) != 0);
- RB_GC_GUARD(x);
- RB_GC_GUARD(y);
+ if (!RBIGNUM_SIGN(z)) get2comp(z);
+
return bignorm(z);
}
+static VALUE
+check_shiftdown(VALUE y, VALUE x)
+{
+ if (!RBIGNUM_LEN(x)) return INT2FIX(0);
+ if (RBIGNUM_LEN(y) > SIZEOF_LONG / SIZEOF_BDIGITS) {
+ return RBIGNUM_SIGN(x) ? INT2FIX(0) : INT2FIX(-1);
+ }
+ return Qnil;
+}
+
/*
* call-seq:
* big << numeric -> integer
@@ -6759,33 +3426,59 @@ rb_big_xor(VALUE x, VALUE y)
VALUE
rb_big_lshift(VALUE x, VALUE y)
{
- int lshift_p;
- size_t shift_numdigits;
- int shift_numbits;
+ long shift;
+ int neg = 0;
for (;;) {
if (FIXNUM_P(y)) {
- long l = FIX2LONG(y);
- unsigned long shift;
- if (0 <= l) {
- lshift_p = 1;
- shift = l;
- }
- else {
- lshift_p = 0;
- shift = 1+(unsigned long)(-(l+1));
+ shift = FIX2LONG(y);
+ if (shift < 0) {
+ neg = 1;
+ shift = -shift;
}
- shift_numbits = (int)(shift & (BITSPERDIG-1));
- shift_numdigits = shift >> bit_length(BITSPERDIG-1);
- return bignorm(big_shift3(x, lshift_p, shift_numdigits, shift_numbits));
+ break;
}
- else if (RB_BIGNUM_TYPE_P(y)) {
- return bignorm(big_shift2(x, 1, y));
+ else if (TYPE(y) == T_BIGNUM) {
+ if (!RBIGNUM_SIGN(y)) {
+ VALUE t = check_shiftdown(y, x);
+ if (!NIL_P(t)) return t;
+ neg = 1;
+ }
+ shift = big2ulong(y, "long", TRUE);
+ break;
}
y = rb_to_int(y);
}
+
+ x = neg ? big_rshift(x, shift) : big_lshift(x, shift);
+ return bignorm(x);
}
+static VALUE
+big_lshift(VALUE x, unsigned long shift)
+{
+ BDIGIT *xds, *zds;
+ long s1 = shift/BITSPERDIG;
+ int s2 = (int)(shift%BITSPERDIG);
+ VALUE z;
+ BDIGIT_DBL num = 0;
+ long len, i;
+
+ len = RBIGNUM_LEN(x);
+ z = bignew(len+s1+1, RBIGNUM_SIGN(x));
+ zds = BDIGITS(z);
+ for (i=0; i<s1; i++) {
+ *zds++ = 0;
+ }
+ xds = BDIGITS(x);
+ for (i=0; i<len; i++) {
+ num = num | (BDIGIT_DBL)*xds++<<s2;
+ *zds++ = BIGLO(num);
+ num = BIGDN(num);
+ }
+ *zds = BIGLO(num);
+ return z;
+}
/*
* call-seq:
@@ -6797,31 +3490,77 @@ rb_big_lshift(VALUE x, VALUE y)
VALUE
rb_big_rshift(VALUE x, VALUE y)
{
- int lshift_p;
- size_t shift_numdigits;
- int shift_numbits;
+ long shift;
+ int neg = 0;
for (;;) {
if (FIXNUM_P(y)) {
- long l = FIX2LONG(y);
- unsigned long shift;
- if (0 <= l) {
- lshift_p = 0;
- shift = l;
- }
- else {
- lshift_p = 1;
- shift = 1+(unsigned long)(-(l+1));
+ shift = FIX2LONG(y);
+ if (shift < 0) {
+ neg = 1;
+ shift = -shift;
}
- shift_numbits = (int)(shift & (BITSPERDIG-1));
- shift_numdigits = shift >> bit_length(BITSPERDIG-1);
- return bignorm(big_shift3(x, lshift_p, shift_numdigits, shift_numbits));
+ break;
}
- else if (RB_BIGNUM_TYPE_P(y)) {
- return bignorm(big_shift2(x, 0, y));
+ else if (TYPE(y) == T_BIGNUM) {
+ if (RBIGNUM_SIGN(y)) {
+ VALUE t = check_shiftdown(y, x);
+ if (!NIL_P(t)) return t;
+ }
+ else {
+ neg = 1;
+ }
+ shift = big2ulong(y, "long", TRUE);
+ break;
}
y = rb_to_int(y);
}
+
+ x = neg ? big_lshift(x, shift) : big_rshift(x, shift);
+ return bignorm(x);
+}
+
+static VALUE
+big_rshift(VALUE x, unsigned long shift)
+{
+ BDIGIT *xds, *zds;
+ long s1 = shift/BITSPERDIG;
+ int s2 = (int)(shift%BITSPERDIG);
+ VALUE z;
+ BDIGIT_DBL num = 0;
+ long i, j;
+ volatile VALUE save_x;
+
+ if (s1 > RBIGNUM_LEN(x)) {
+ if (RBIGNUM_SIGN(x))
+ return INT2FIX(0);
+ else
+ return INT2FIX(-1);
+ }
+ if (!RBIGNUM_SIGN(x)) {
+ save_x = x = rb_big_clone(x);
+ get2comp(x);
+ }
+ xds = BDIGITS(x);
+ i = RBIGNUM_LEN(x); j = i - s1;
+ if (j == 0) {
+ if (RBIGNUM_SIGN(x)) return INT2FIX(0);
+ else return INT2FIX(-1);
+ }
+ z = bignew(j, RBIGNUM_SIGN(x));
+ if (!RBIGNUM_SIGN(x)) {
+ num = ((BDIGIT_DBL)~0) << BITSPERDIG;
+ }
+ zds = BDIGITS(z);
+ while (i--, j--) {
+ num = (num | xds[i]) >> s2;
+ zds[j] = BIGLO(num);
+ num = BIGUP(xds[i]);
+ }
+ if (!RBIGNUM_SIGN(x)) {
+ get2comp(z);
+ }
+ return z;
}
/*
@@ -6847,40 +3586,42 @@ static VALUE
rb_big_aref(VALUE x, VALUE y)
{
BDIGIT *xds;
- unsigned long shift;
+ BDIGIT_DBL num;
+ VALUE shift;
long i, s1, s2;
- BDIGIT bit;
- if (RB_BIGNUM_TYPE_P(y)) {
+ if (TYPE(y) == T_BIGNUM) {
if (!RBIGNUM_SIGN(y))
return INT2FIX(0);
bigtrunc(y);
- if (BIGSIZE(y) > sizeof(long)) {
+ if (RBIGNUM_LEN(y) > DIGSPERLONG) {
out_of_range:
return RBIGNUM_SIGN(x) ? INT2FIX(0) : INT2FIX(1);
}
- shift = big2ulong(y, "long");
+ shift = big2ulong(y, "long", FALSE);
}
else {
i = NUM2LONG(y);
if (i < 0) return INT2FIX(0);
- shift = i;
+ shift = (VALUE)i;
}
s1 = shift/BITSPERDIG;
s2 = shift%BITSPERDIG;
- bit = (BDIGIT)1 << s2;
if (s1 >= RBIGNUM_LEN(x)) goto out_of_range;
-
- xds = BDIGITS(x);
- 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);
+ if (!RBIGNUM_SIGN(x)) {
+ xds = BDIGITS(x);
+ i = 0; num = 1;
+ while (num += ~xds[i], ++i <= s1) {
+ num = BIGDN(num);
+ }
+ }
+ else {
+ num = BDIGITS(x)[s1];
+ }
+ if (num & ((BDIGIT_DBL)1<<s2))
+ return INT2FIX(1);
+ return INT2FIX(0);
}
/*
@@ -6900,36 +3641,29 @@ rb_big_hash(VALUE x)
}
/*
- * call-seq:
- * big.coerce(numeric) -> array
- *
- * Returns an array with both a +numeric+ and a +big+ represented as Bignum
- * objects.
- *
- * This is achieved by converting +numeric+ to a Bignum.
- *
- * A TypeError is raised if the +numeric+ is not a Fixnum or Bignum type.
- *
- * (0x3FFFFFFFFFFFFFFF+1).coerce(42) #=> [42, 4611686018427387904]
+ * MISSING: documentation
*/
static VALUE
rb_big_coerce(VALUE x, VALUE y)
{
if (FIXNUM_P(y)) {
- y = rb_int2big(FIX2LONG(y));
+ return rb_assoc_new(rb_int2big(FIX2LONG(y)), x);
}
- else if (!RB_BIGNUM_TYPE_P(y)) {
+ else if (TYPE(y) == T_BIGNUM) {
+ return rb_assoc_new(y, x);
+ }
+ else {
rb_raise(rb_eTypeError, "can't coerce %s to Bignum",
rb_obj_classname(y));
}
- return rb_assoc_new(y, x);
+ /* not reached */
+ return Qnil;
}
/*
* call-seq:
* big.abs -> aBignum
- * big.magnitude -> aBignum
*
* Returns the absolute value of <i>big</i>.
*
@@ -6961,79 +3695,7 @@ rb_big_abs(VALUE x)
static VALUE
rb_big_size(VALUE big)
{
- return SIZET2NUM(BIGSIZE(big));
-}
-
-/*
- * call-seq:
- * int.bit_length -> integer
- *
- * Returns the number of bits of the value of <i>int</i>.
- *
- * "the number of bits" means that
- * the bit position of the highest bit which is different to the sign bit.
- * (The bit position of the bit 2**n is n+1.)
- * If there is no such bit (zero or minus one), zero is returned.
- *
- * I.e. This method returns ceil(log2(int < 0 ? -int : int+1)).
- *
- * (-2**10000-1).bit_length #=> 10001
- * (-2**10000).bit_length #=> 10000
- * (-2**10000+1).bit_length #=> 10000
- *
- * (-2**1000-1).bit_length #=> 1001
- * (-2**1000).bit_length #=> 1000
- * (-2**1000+1).bit_length #=> 1000
- *
- * (2**1000-1).bit_length #=> 1000
- * (2**1000).bit_length #=> 1001
- * (2**1000+1).bit_length #=> 1001
- *
- * (2**10000-1).bit_length #=> 10000
- * (2**10000).bit_length #=> 10001
- * (2**10000+1).bit_length #=> 10001
- *
- */
-
-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--;
- }
- }
-
- 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);
+ return LONG2FIX(RBIGNUM_LEN(big)*SIZEOF_BDIGITS);
}
/*
@@ -7046,7 +3708,7 @@ rb_big_bit_length(VALUE big)
static VALUE
rb_big_odd_p(VALUE num)
{
- if (RBIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1) {
+ if (BDIGITS(num)[0] & 1) {
return Qtrue;
}
return Qfalse;
@@ -7062,7 +3724,7 @@ rb_big_odd_p(VALUE num)
static VALUE
rb_big_even_p(VALUE num)
{
- if (RBIGNUM_LEN(num) != 0 && BDIGITS(num)[0] & 1) {
+ if (BDIGITS(num)[0] & 1) {
return Qfalse;
}
return Qtrue;
@@ -7092,7 +3754,6 @@ 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);
@@ -7127,13 +3788,11 @@ Init_Bignum(void)
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();
+
+ big_three = rb_uint2big(3);
+ rb_gc_register_mark_object(big_three);
}
diff --git a/bin/erb b/bin/erb
index 6a7ea7d593..6b92ac2284 100755
--- a/bin/erb
+++ b/bin/erb
@@ -72,7 +72,7 @@ class ERB
require ARGV.req_arg
when '-S' # security level
arg = ARGV.req_arg
- raise "invalid safe_level #{arg.dump}" unless arg =~ /^[0-3]$/
+ raise "invalid safe_level #{arg.dump}" unless arg =~ /^[0-4]$/
safe_level = arg.to_i
when '-T' # trim mode
arg = ARGV.req_arg
@@ -105,7 +105,7 @@ class ERB
-v enable verbose mode
-d set $DEBUG to true
-r library load a library
- -S safe_level set $SAFE (0..3)
+ -S safe_level set $SAFE (0..4)
-E ex[:in] set default external/internal encodings
-U set default encoding to UTF-8.
-T trim_mode specify trim_mode (0..2, -)
diff --git a/bin/irb b/bin/irb
index c64ee85fbd..6c8465c802 100755
--- a/bin/irb
+++ b/bin/irb
@@ -8,4 +8,13 @@
require "irb"
-IRB.start(__FILE__)
+if __FILE__ == $0
+ IRB.start(__FILE__)
+else
+ # check -e option
+ if /^-e$/ =~ $0
+ IRB.start(__FILE__)
+ else
+ IRB.setup(__FILE__)
+ end
+end
diff --git a/bin/rake b/bin/rake
index 4e0bbb7b7a..0de43c97ec 100755
--- a/bin/rake
+++ b/bin/rake
@@ -24,7 +24,6 @@
begin
require 'rubygems'
- gem 'rake'
rescue LoadError
end
diff --git a/bin/rdoc b/bin/rdoc
index aaa23292df..20d866c220 100755
--- a/bin/rdoc
+++ b/bin/rdoc
@@ -18,10 +18,6 @@ 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
diff --git a/bin/testrb b/bin/testrb
index 23a00b439f..e9046eb147 100755
--- a/bin/testrb
+++ b/bin/testrb
@@ -1,3 +1,10 @@
#!/usr/bin/env ruby
require 'test/unit'
-exit Test::Unit::AutoRunner.run(true)
+tests = Test::Unit::AutoRunner.new(true)
+tests.options.banner.sub!(/\[options\]/, '\& tests...')
+unless tests.process_args(ARGV)
+ abort tests.options.banner
+end
+files = tests.to_run
+$0 = files.size == 1 ? File.basename(files[0]) : files.to_s
+exit tests.run
diff --git a/bootstraptest/runner.rb b/bootstraptest/runner.rb
index 5fdfc42a63..df58ca58f3 100755
--- a/bootstraptest/runner.rb
+++ b/bootstraptest/runner.rb
@@ -1,4 +1,4 @@
-"exec" "${RUBY-ruby}" "-x" "$0" "$@" || true # -*- mode: ruby; coding: utf-8 -*-
+"exec" "${RUBY-ruby}" "-x" "$0" "$@"; true # -*- mode: ruby; coding: utf-8 -*-
#!./ruby
# $Id$
@@ -61,9 +61,6 @@ def main
@ruby = File.expand_path('miniruby')
@verbose = false
$stress = false
- @color = nil
- @tty = nil
- @quiet = false
dir = nil
quiet = false
tests = nil
@@ -84,17 +81,8 @@ def main
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
@@ -104,16 +92,12 @@ 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
@@ -126,24 +110,6 @@ End
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)
@@ -169,34 +135,23 @@ def exec_test(pathes)
@errbuf = []
@location = nil
pathes.each do |path|
- @basename = File.basename(path)
- $stderr.print @basename, " "
+ $stderr.print "\n#{File.basename(path)} "
$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
+ $stderr.puts
if @error == 0
if @count == 0
$stderr.puts "No tests, no problem"
else
- $stderr.puts "#{@passed}PASS#{@reset} all #{@count} tests"
+ $stderr.puts "PASS all #{@count} tests"
end
exit true
else
@errbuf.each do |msg|
$stderr.puts msg
end
- $stderr.puts "#{@failed}FAIL#{@reset} #{@error}/#{@count} tests failed"
+ $stderr.puts "FAIL #{@error}/#{@count} tests failed"
exit false
end
end
@@ -204,42 +159,22 @@ 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}
+ faildesc = yield
if !faildesc
- if @tty
- $stderr.print "#{@progress_bs}#{@progress[@count % @progress.size]}"
- else
- $stderr.print '.'
- end
+ $stderr.print '.'
$stderr.puts if @verbose
else
- $stderr.print "#{@failed}F#{@reset}"
+ $stderr.print 'F'
$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)
@@ -321,7 +256,7 @@ def assert_normal_exit(testsrc, *rest)
$stderr.reopen(old_stderr)
old_stderr.close
end
- if status && status.signaled?
+ if status.signaled?
signo = status.termsig
signame = Signal.list.invert[signo]
unless ignore_signals and ignore_signals.include?(signame)
@@ -407,7 +342,6 @@ def get_result_string(src, opt = '')
begin
`#{@ruby} -W0 #{opt} #{filename}`
ensure
- raise Interrupt if $? and $?.signaled? && $?.termsig == Signal.list["INT"]
raise CoreDumpError, "core dumped" if $? and $?.coredump?
end
else
@@ -415,27 +349,6 @@ def get_result_string(src, opt = '')
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
@@ -443,12 +356,7 @@ def newtest
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
+ @errbuf.push "\##{@count} #{@location}: #{msg} #{additional_message}"
@error += 1
end
diff --git a/bootstraptest/test_autoload.rb b/bootstraptest/test_autoload.rb
index a9f8e6dacd..e8df6684b6 100644
--- a/bootstraptest/test_autoload.rb
+++ b/bootstraptest/test_autoload.rb
@@ -43,6 +43,46 @@ assert_equal 'ok', %q{
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"
+ proc{$SAFE=4; ZZZ.ok}.call
+}
+
+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"
+ proc{$SAFE=4; ZZZ.ok}.call
+}
+
+assert_equal 'ok', %q{
+ open("zzz.rb", "w") {|f| f.puts "class ZZZ; def hoge;:ok;end;end"}
+ autoload :ZZZ, File.join(Dir.pwd, 'zzz.rb')
+ module M; end
+ Thread.new{M.instance_eval('$SAFE=4; ZZZ.new.hoge')}.value
+}
+
+assert_equal 'ok', %q{
+ open("zzz.rb", "w") {|f| f.puts "class ZZZ; def hoge;:ok;end;end"}
+ autoload :ZZZ, File.join(Dir.pwd, 'zzz.rb')
+ module M; end
+ Thread.new{$SAFE=4; M.instance_eval('ZZZ.new.hoge')}.value
+}
+
+assert_equal 'ok', %q{
+ open("zzz.rb", "w") {|f| f.puts "class ZZZ; def hoge;:ok;end;end"}
+ autoload :ZZZ, File.join(Dir.pwd, 'zzz.rb')
+ Thread.new{$SAFE=4; eval('ZZZ.new.hoge')}.value
+}
+
+assert_equal 'ok', %q{
+ open("zzz.rb", "w") {|f| f.puts "class ZZZ; def hoge;:ok;end;end"}
+ autoload :ZZZ, File.join(Dir.pwd, 'zzz.rb')
+ module M; end
+ Thread.new{eval('$SAFE=4; ZZZ.new.hoge')}.value
+}
+
assert_equal 'okok', %q{
open("zzz.rb", "w") {|f| f.puts "class ZZZ; def self.ok;:ok;end;end"}
autoload :ZZZ, "./zzz.rb"
diff --git a/bootstraptest/test_block.rb b/bootstraptest/test_block.rb
index 6a2ccfc6da..ea6768cc25 100644
--- a/bootstraptest/test_block.rb
+++ b/bootstraptest/test_block.rb
@@ -565,35 +565,3 @@ assert_normal_exit %q{
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
index b7fe0a1acd..664dd2f166 100644
--- a/bootstraptest/test_class.rb
+++ b/bootstraptest/test_class.rb
@@ -11,16 +11,6 @@ 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
diff --git a/bootstraptest/test_eval.rb b/bootstraptest/test_eval.rb
index bf7478006d..c347d50ac9 100644
--- a/bootstraptest/test_eval.rb
+++ b/bootstraptest/test_eval.rb
@@ -264,18 +264,24 @@ assert_equal 'ok', %q{
}, '[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]'
+ begin
+ nil.instance_eval {
+ def a() :a end
+ }
+ rescue TypeError
+ :ok
+ end
+}, '[ruby-core:16796]'
assert_equal 'ok', %q{
- nil.instance_exec {
- def defd_using_instance_exec() :ok end
- }
- nil.defd_using_instance_exec
-}, '[ruby-core:28324]'
+ begin
+ nil.instance_exec {
+ def a() :a end
+ }
+ rescue TypeError
+ :ok
+ end
+}, '[ruby-core:16796]'
assert_normal_exit %q{
eval("", method(:proc).call {}.binding)
@@ -310,15 +316,6 @@ assert_normal_exit %q{
end
begin
eval "class C; @@h = #{hash.inspect}; end"
+ rescue SystemStackError
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
index 35c8d25e37..f7d5eeaa07 100644
--- a/bootstraptest/test_exception.rb
+++ b/bootstraptest/test_exception.rb
@@ -414,19 +414,3 @@ assert_equal 'exception class/object expected', %q{
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_flow.rb b/bootstraptest/test_flow.rb
index 0390062a24..fc93a5a46c 100644
--- a/bootstraptest/test_flow.rb
+++ b/bootstraptest/test_flow.rb
@@ -562,30 +562,3 @@ assert_equal %Q{ENSURE\n}, %q{
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_io.rb b/bootstraptest/test_io.rb
index f7360f34b3..7304aebc26 100644
--- a/bootstraptest/test_io.rb
+++ b/bootstraptest/test_io.rb
@@ -53,7 +53,7 @@ assert_equal 'ok', %q{
STDIN.reopen(rw)
STDIN.reopen(save)
rw.close
- File.unlink(tmpname) unless RUBY_PLATFORM['nacl']
+ File.unlink(tmpname)
:ok
}
@@ -70,16 +70,10 @@ assert_equal 'ok', %q{
STDIN.print "a"
STDIN.reopen(save)
rw.close
- File.unlink(tmpname) unless RUBY_PLATFORM['nacl']
+ File.unlink(tmpname)
: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"
}
diff --git a/bootstraptest/test_literal.rb b/bootstraptest/test_literal.rb
index b95a2f2d0a..ab028e2c1e 100644
--- a/bootstraptest/test_literal.rb
+++ b/bootstraptest/test_literal.rb
@@ -65,10 +65,8 @@ 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
+assert_equal "foo\n", %q(`echo foo`)
+assert_equal "foo\n", %q(s = "foo"; `echo #{s}`)
# regexp
assert_equal '', '//.source'
@@ -202,30 +200,3 @@ assert_equal 'ok', %q{
assert_equal 'ok', %q{
"#{}o""#{}k""#{}"
}, '[ruby-core:25284]'
-
-assert_equal 'ok', %q{ # long array literal
- x = nil
- eval "a = [#{(1..10_000).map{'x'}.join(", ")}]"
- :ok
-}
-
-assert_equal 'ok', %q{ # long array literal (optimized)
- eval "a = [#{(1..10_000).to_a.join(", ")}]"
- :ok
-}
-
-assert_equal 'ok', %q{ # long hash literal
- x = nil
- eval "a = {#{(1..10_000).map{|n| "#{n} => x"}.join(', ')}}"
- :ok
-}
-
-assert_equal 'ok', %q{ # long hash literal (optimized)
- eval "a = {#{(1..10_000).map{|n| "#{n} => #{n}"}.join(', ')}}"
- :ok
-}
-
-assert_equal 'ok', %q{
- [print(:ok), exit] # void literal with side-effect
- :dummy
-}
diff --git a/bootstraptest/test_literal_suffix.rb b/bootstraptest/test_literal_suffix.rb
deleted file mode 100644
index 4316c9e040..0000000000
--- a/bootstraptest/test_literal_suffix.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-# numbers with suffix
-assert_equal '0/1', '0r'
-assert_equal 'Rational', '0r.class'
-assert_equal '1/1', '1r'
-assert_equal 'Rational', '1r.class'
-assert_equal '-1/1', '-1r'
-assert_equal 'Rational', '(-1r).class'
-assert_equal '1/1', '0x1r'
-assert_equal 'Rational', '0x1r.class'
-assert_equal '1/1', '0b1r'
-assert_equal 'Rational', '0b1r.class'
-assert_equal '1/1', '0d1r'
-assert_equal 'Rational', '0d1r.class'
-assert_equal '1/1', '0o1r'
-assert_equal 'Rational', '0o1r.class'
-assert_equal '1/1', '01r'
-assert_equal 'Rational', '01r.class'
-assert_equal '6/5', '1.2r'
-assert_equal 'Rational', '1.2r.class'
-assert_equal '-6/5', '-1.2r'
-assert_equal 'Rational', '(-1.2r).class'
-assert_equal '0+0i', '0i'
-assert_equal 'Complex', '0i.class'
-assert_equal '0+1i', '1i'
-assert_equal 'Complex', '1i.class'
-assert_equal '0+1i', '0x1i'
-assert_equal 'Complex', '0x1i.class'
-assert_equal '0+1i', '0b1i'
-assert_equal 'Complex', '0b1i.class'
-assert_equal '0+1i', '0d1i'
-assert_equal 'Complex', '0d1i.class'
-assert_equal '0+1i', '0o1i'
-assert_equal 'Complex', '0o1i.class'
-assert_equal '0+1i', '01i'
-assert_equal 'Complex', '01i.class'
-assert_equal '0+1.2i', '1.2i'
-assert_equal 'Complex', '1.2i.class'
-assert_equal '0+1/1i', '1ri'
-assert_equal 'Complex', '1ri.class'
-assert_equal '0+6/5i', '1.2ri'
-assert_equal 'Complex', '1.2ri.class'
-assert_equal '0+10.0i', '1e1i'
-assert_equal 'Complex', '1e1i.class'
-assert_equal '1', '1if true'
-assert_equal '1', '1rescue nil'
-assert_equal '10000000000000000001/10000000000000000000',
- '1.0000000000000000001r'
-
-assert_equal 'syntax error, unexpected tIDENTIFIER, expecting end-of-input',
- %q{begin eval('1ir', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end}
-assert_equal 'syntax error, unexpected tIDENTIFIER, expecting end-of-input',
- %q{begin eval('1.2ir', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end}
-assert_equal 'syntax error, unexpected tIDENTIFIER, expecting end-of-input',
- %q{begin eval('1e1r', nil, '', 0); rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end}
diff --git a/bootstraptest/test_method.rb b/bootstraptest/test_method.rb
index 0a7cb0a577..2baf33539d 100644
--- a/bootstraptest/test_method.rb
+++ b/bootstraptest/test_method.rb
@@ -886,6 +886,50 @@ 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 %q{[:ok, :ok, :ok, :ok, :ok, :ok, :ng, :ng]}, %q{
+ $ans = []
+ class Foo
+ def m
+ end
+ end
+
+ c1 = c2 = nil
+
+ lambda{
+ $SAFE = 4
+ c1 = Class.new{
+ def m
+ end
+ }
+ c2 = Class.new(Foo){
+ alias mm m
+ }
+ }.call
+
+ def test
+ begin
+ yield
+ rescue SecurityError
+ $ans << :ok
+ else
+ $ans << :ng
+ end
+ end
+
+ o1 = c1.new
+ o2 = c2.new
+
+ test{o1.m}
+ test{o2.mm}
+ test{o1.send :m}
+ test{o2.send :mm}
+ test{o1.public_send :m}
+ test{o2.public_send :mm}
+ test{o1.method(:m).call}
+ test{o2.method(:mm).call}
+ $ans
+}
+
assert_equal 'ok', %q{
class C
def x=(n)
@@ -957,8 +1001,8 @@ assert_equal 'ok', %q{
assert_normal_exit %q{
begin
- Process.setrlimit(Process::RLIMIT_STACK, 4_206_592)
- # FreeBSD SEGVs this less than 4M + 12K bytes.
+ Process.setrlimit(Process::RLIMIT_STACK, 4_202_496)
+ # FreeBSD fails this less than 4M + 8K bytes.
rescue Exception
exit
end
@@ -1140,81 +1184,3 @@ assert_equal 'ok', %q{
'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_proc.rb b/bootstraptest/test_proc.rb
index c23394e8d2..3d347004ea 100644
--- a/bootstraptest/test_proc.rb
+++ b/bootstraptest/test_proc.rb
@@ -456,28 +456,3 @@ assert_equal 'ok', %q{
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_syntax.rb b/bootstraptest/test_syntax.rb
index 80eaa6416d..ef1c622ace 100644
--- a/bootstraptest/test_syntax.rb
+++ b/bootstraptest/test_syntax.rb
@@ -529,7 +529,7 @@ def assert_syntax_error expected, code, 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 "syntax error, unexpected tSTAR, 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}
@@ -541,7 +541,7 @@ assert_equal %q{1}, %q{
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_syntax_error %q{syntax error, unexpected $end}, %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]'
diff --git a/bootstraptest/test_thread.rb b/bootstraptest/test_thread.rb
index 7baa806a45..2494cccbf3 100644
--- a/bootstraptest/test_thread.rb
+++ b/bootstraptest/test_thread.rb
@@ -10,8 +10,7 @@ assert_equal %q{ok}, %q{
:ok
}.value
}
-assert_equal %q{ok}, %q{
-begin
+assert_equal %q{20100}, %q{
v = 0
(1..200).map{|i|
Thread.new{
@@ -20,10 +19,7 @@ begin
}.each{|t|
v += t.value
}
- v == 20100 ? :ok : v
-rescue ThreadError => e
- :ok if /can't create Thread/ =~ e.message
-end
+ v
}
assert_equal %q{5000}, %q{
5000.times{|e|
@@ -45,17 +41,13 @@ assert_equal %q{5000}, %q{
}
}
}
-assert_equal %q{ok}, %q{
-begin
- :ok if 5000 == 5000.times{
+assert_equal %q{5000}, %q{
+ 5000.times{
t = Thread.new{}
while t.alive?
Thread.pass
end
}
-rescue NoMemoryError
- :ok
-end
}
assert_equal %q{100}, %q{
100.times{
@@ -197,18 +189,18 @@ assert_equal %q{11}, %q{
}.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
+begin
+ 100.times do |i|
+ begin
+ th = Thread.start(Thread.current) {|u| u.raise }
+ raise
+ rescue
+ ensure
+ th.join
end
- rescue
end
+rescue
+end
}, '[ruby-dev:31371]'
assert_equal 'true', %{
@@ -275,7 +267,7 @@ assert_normal_exit %q{
assert_equal 'ok', %q{
def m
- t = Thread.new { while true; // =~ "" end }
+ t = Thread.new { while true do // =~ "" end }
sleep 0.1
10.times {
if /((ab)*(ab)*)*(b)/ =~ "ab"*7
@@ -388,9 +380,7 @@ assert_equal 'ok', %q{
assert_equal 'ok', %q{
begin
- 100.times{
- (1..100).map{ Thread.new(true) {|x| x == false } }.each{|th| th.join}
- }
+ 10000.times { Thread.new(true) {|x| x == false } }
rescue NoMemoryError, StandardError
end
:ok
diff --git a/class.c b/class.c
index 8f11f45b53..df19812d15 100644
--- a/class.c
+++ b/class.c
@@ -31,113 +31,8 @@
#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);
- }
-
- RCLASS_EXT(klass)->module_subclasses = NULL;
-}
-
-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);
- }
-}
-
-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);
-}
+extern st_table *rb_class_tbl;
+static ID id_attached;
/**
* Allocates a struct RClass for a new class.
@@ -154,22 +49,15 @@ rb_class_detach_module_subclasses(VALUE klass)
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);
+ rb_classext_t *ext = ALLOC(rb_classext_t);
+ NEWOBJ(obj, struct RClass);
+ OBJSETUP(obj, klass, flags);
+ obj->ptr = ext;
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_M_TBL(obj) = 0;
+ RCLASS_SUPER(obj) = 0;
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;
}
@@ -188,8 +76,8 @@ rb_class_boot(VALUE super)
{
VALUE klass = class_alloc(T_CLASS, rb_cClass);
- RCLASS_SET_SUPER(klass, super);
- RCLASS_M_TBL_INIT(klass);
+ RCLASS_SUPER(klass) = super;
+ RCLASS_M_TBL(klass) = st_init_numtable();
OBJ_INFECT(klass, super);
return (VALUE)klass;
@@ -205,7 +93,7 @@ rb_class_boot(VALUE super)
void
rb_check_inheritable(VALUE super)
{
- if (!RB_TYPE_P(super, T_CLASS)) {
+ if (TYPE(super) != T_CLASS) {
rb_raise(rb_eTypeError, "superclass must be a Class (%s given)",
rb_obj_classname(super));
}
@@ -232,186 +120,140 @@ rb_class_new(VALUE super)
return rb_class_boot(super);
}
-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;
-}
+struct clone_method_data {
+ st_table *tbl;
+ VALUE klass;
+};
-static void
-clone_method(VALUE klass, ID mid, const rb_method_entry_t *me)
+VALUE rb_iseq_clone(VALUE iseqval, VALUE newcbase);
+
+static int
+clone_method(ID mid, const rb_method_entry_t *me, struct clone_method_data *data)
{
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);
+ newiseqval = rb_iseq_clone(me->def->body.iseq->self, data->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_add_method(data->klass, mid, VM_METHOD_TYPE_ISEQ, iseq, me->flag);
RB_GC_GUARD(newiseqval);
}
else {
- rb_method_entry_set(klass, mid, me, me->flag);
+ rb_method_entry_set(data->klass, mid, me, me->flag);
}
-}
-
-static int
-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)
+clone_const(ID key, const rb_const_entry_t *ce, st_table *tbl)
{
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);
+ *nce = *ce;
+ st_insert(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");
- }
+ return clone_const((ID)key, (const rb_const_entry_t *)value, (st_table *)data);
}
/* :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;
+ rb_obj_init_copy(clone, orig);
if (!FL_TEST(CLASS_OF(clone), FL_SINGLETON)) {
- RBASIC_SET_CLASS(clone, rb_singleton_class_clone(orig));
+ RBASIC(clone)->klass = 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;
- }
+ RCLASS_SUPER(clone) = RCLASS_SUPER(orig);
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);
+ if (RCLASS_IV_TBL(clone)) {
+ st_free_table(RCLASS_IV_TBL(clone));
+ }
+ RCLASS_IV_TBL(clone) = st_copy(RCLASS_IV_TBL(orig));
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;
-
+ if (RCLASS_CONST_TBL(clone)) {
+ rb_free_const_table(RCLASS_CONST_TBL(clone));
+ }
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);
+ st_foreach(RCLASS_CONST_TBL(orig), clone_const_i, (st_data_t)RCLASS_CONST_TBL(clone));
}
if (RCLASS_M_TBL(orig)) {
- RCLASS_M_TBL_INIT(clone);
- st_foreach(RCLASS_M_TBL(orig), clone_method_i, (st_data_t)clone);
+ struct clone_method_data data;
+
+ if (RCLASS_M_TBL(clone)) {
+ rb_free_m_table(RCLASS_M_TBL(clone));
+ }
+ data.tbl = RCLASS_M_TBL(clone) = st_init_numtable();
+ data.klass = clone;
+ st_foreach(RCLASS_M_TBL(orig), clone_method,
+ (st_data_t)&data);
}
return clone;
}
+/* :nodoc: */
VALUE
-rb_singleton_class_clone(VALUE obj)
+rb_class_init_copy(VALUE clone, VALUE orig)
{
- return rb_singleton_class_clone_and_attach(obj, Qundef);
+ 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");
+ }
+ return rb_mod_init_copy(clone, orig);
}
VALUE
-rb_singleton_class_clone_and_attach(VALUE obj, VALUE attach)
+rb_singleton_class_clone(VALUE obj)
{
VALUE klass = RBASIC(obj)->klass;
if (!FL_TEST(klass, FL_SINGLETON))
return klass;
else {
+ struct clone_method_data data;
/* copy singleton(unnamed) class */
- VALUE clone = class_alloc(RBASIC(klass)->flags, 0);
+ VALUE clone = class_alloc((RBASIC(klass)->flags & ~(FL_MARK)), 0);
if (BUILTIN_TYPE(obj) == T_CLASS) {
- RBASIC_SET_CLASS(clone, clone);
+ RBASIC(clone)->klass = (VALUE)clone;
}
else {
- RBASIC_SET_CLASS(clone, rb_singleton_class_clone(klass));
+ RBASIC(clone)->klass = rb_singleton_class_clone(klass);
}
- RCLASS_SET_SUPER(clone, RCLASS_SUPER(klass));
- RCLASS_EXT(clone)->allocator = RCLASS_EXT(klass)->allocator;
+ RCLASS_SUPER(clone) = RCLASS_SUPER(klass);
if (RCLASS_IV_TBL(klass)) {
- RCLASS_IV_TBL(clone) = rb_st_copy(clone, RCLASS_IV_TBL(klass));
+ RCLASS_IV_TBL(clone) = st_copy(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);
+ st_foreach(RCLASS_CONST_TBL(klass), clone_const_i, (st_data_t)RCLASS_CONST_TBL(clone));
}
- 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);
+ RCLASS_M_TBL(clone) = st_init_numtable();
+ data.tbl = RCLASS_M_TBL(clone);
+ data.klass = (VALUE)clone;
+ st_foreach(RCLASS_M_TBL(klass), clone_method,
+ (st_data_t)&data);
+ rb_singleton_class_attached(RBASIC(clone)->klass, (VALUE)clone);
FL_SET(clone, FL_SINGLETON);
-
- return clone;
+ return (VALUE)clone;
}
}
@@ -426,14 +268,13 @@ rb_singleton_class_attached(VALUE klass, VALUE obj)
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);
+ st_insert(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
@@ -442,14 +283,6 @@ rb_singleton_class_attached(VALUE klass, VALUE obj)
*/
#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.
@@ -459,7 +292,7 @@ rb_singleton_class_attached(VALUE klass, VALUE obj)
* @note this macro creates a new eigenclass if necessary.
*/
#define ENSURE_EIGENCLASS(klass) \
- (HAVE_METACLASS_P(klass) ? METACLASS_OF(klass) : make_metaclass(klass))
+ (rb_ivar_get(METACLASS_OF(klass), id_attached) == (klass) ? METACLASS_OF(klass) : make_metaclass(klass))
/*!
@@ -481,18 +314,17 @@ make_metaclass(VALUE klass)
rb_singleton_class_attached(metaclass, klass);
if (META_CLASS_OF_CLASS_CLASS_P(klass)) {
- SET_METACLASS_OF(klass, metaclass);
- SET_METACLASS_OF(metaclass, metaclass);
+ METACLASS_OF(klass) = 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));
+ METACLASS_OF(klass) = metaclass;
+ 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);
+ RCLASS_SUPER(metaclass) = super ? ENSURE_EIGENCLASS(super) : rb_cClass;
OBJ_INFECT(metaclass, RCLASS_SUPER(metaclass));
@@ -512,10 +344,10 @@ make_singleton_class(VALUE obj)
VALUE klass = rb_class_boot(orig_class);
FL_SET(klass, FL_SINGLETON);
- RBASIC_SET_CLASS(obj, klass);
+ RBASIC(obj)->klass = klass;
rb_singleton_class_attached(klass, obj);
- SET_METACLASS_OF(klass, METACLASS_OF(rb_class_real(orig_class)));
+ METACLASS_OF(klass) = METACLASS_OF(rb_class_real(orig_class));
return klass;
}
@@ -523,10 +355,12 @@ make_singleton_class(VALUE obj)
static VALUE
boot_defclass(const char *name, VALUE super)
{
+ extern st_table *rb_class_tbl;
VALUE obj = rb_class_boot(super);
ID id = rb_intern(name);
rb_name_class(obj, id);
+ st_add_direct(rb_class_tbl, id, obj);
rb_const_set((rb_cObject ? rb_cObject : obj), id, obj);
return obj;
}
@@ -534,16 +368,19 @@ boot_defclass(const char *name, VALUE super)
void
Init_class_hierarchy(void)
{
+ id_attached = rb_intern("__attached__");
+
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);
+ RBASIC(rb_cClass)->klass
+ = RBASIC(rb_cModule)->klass
+ = RBASIC(rb_cObject)->klass
+ = RBASIC(rb_cBasicObject)->klass
+ = rb_cClass;
}
@@ -635,7 +472,7 @@ rb_define_class(const char *name, VALUE super)
id = rb_intern(name);
if (rb_const_defined(rb_cObject, id)) {
klass = rb_const_get(rb_cObject, id);
- if (!RB_TYPE_P(klass, T_CLASS)) {
+ if (TYPE(klass) != T_CLASS) {
rb_raise(rb_eTypeError, "%s is not a class", name);
}
if (rb_class_real(RCLASS_SUPER(klass)) != super) {
@@ -647,7 +484,7 @@ rb_define_class(const char *name, VALUE super)
rb_warn("no super class for `%s', Object assumed", name);
}
klass = rb_define_class_id(id, super);
- rb_vm_add_root_module(id, klass);
+ st_add_direct(rb_class_tbl, id, klass);
rb_name_class(klass, id);
rb_const_set(rb_cObject, id, klass);
rb_class_inherited(super, klass);
@@ -702,7 +539,7 @@ rb_define_class_id_under(VALUE outer, ID id, VALUE super)
if (rb_const_defined_at(outer, id)) {
klass = rb_const_get_at(outer, id);
- if (!RB_TYPE_P(klass, T_CLASS)) {
+ if (TYPE(klass) != T_CLASS) {
rb_raise(rb_eTypeError, "%s is not a class", rb_id2name(id));
}
if (rb_class_real(RCLASS_SUPER(klass)) != super) {
@@ -727,7 +564,9 @@ VALUE
rb_module_new(void)
{
VALUE mdl = class_alloc(T_MODULE, rb_cModule);
- RCLASS_M_TBL_INIT(mdl);
+
+ RCLASS_M_TBL(mdl) = st_init_numtable();
+
return (VALUE)mdl;
}
@@ -751,12 +590,12 @@ rb_define_module(const char *name)
id = rb_intern(name);
if (rb_const_defined(rb_cObject, id)) {
module = rb_const_get(rb_cObject, id);
- if (RB_TYPE_P(module, T_MODULE))
+ if (TYPE(module) == T_MODULE)
return module;
rb_raise(rb_eTypeError, "%s is not a module", rb_obj_classname(module));
}
module = rb_define_module_id(id);
- rb_vm_add_root_module(id, module);
+ st_add_direct(rb_class_tbl, id, module);
rb_const_set(rb_cObject, id, module);
return module;
@@ -775,7 +614,7 @@ rb_define_module_id_under(VALUE outer, ID id)
if (rb_const_defined_at(outer, id)) {
module = rb_const_get_at(outer, id);
- if (RB_TYPE_P(module, T_MODULE))
+ if (TYPE(module) == T_MODULE)
return module;
rb_raise(rb_eTypeError, "%s::%s is not a module",
rb_class2name(outer), rb_obj_classname(module));
@@ -788,8 +627,8 @@ rb_define_module_id_under(VALUE outer, ID id)
return module;
}
-VALUE
-rb_include_class_new(VALUE module, VALUE super)
+static VALUE
+include_class_new(VALUE module, VALUE super)
{
VALUE klass = class_alloc(T_ICLASS, rb_cClass);
@@ -804,16 +643,13 @@ rb_include_class_new(VALUE module, VALUE super)
}
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);
+ RCLASS_M_TBL(klass) = RCLASS_M_TBL(module);
+ RCLASS_SUPER(klass) = super;
+ if (TYPE(module) == T_ICLASS) {
+ RBASIC(klass)->klass = RBASIC(module)->klass;
}
else {
- RBASIC_SET_CLASS(klass, module);
+ RBASIC(klass)->klass = module;
}
OBJ_INFECT(klass, module);
OBJ_INFECT(klass, super);
@@ -821,52 +657,33 @@ rb_include_class_new(VALUE module, VALUE super)
return (VALUE)klass;
}
-static int include_modules_at(const VALUE klass, VALUE c, VALUE module);
-
void
rb_include_module(VALUE klass, VALUE module)
{
+ VALUE p, c;
int changed = 0;
rb_frozen_class_p(klass);
+ if (!OBJ_UNTRUSTED(klass)) {
+ rb_secure(4);
+ }
- if (!RB_TYPE_P(module, T_MODULE)) {
+ if (TYPE(module) != T_MODULE) {
Check_Type(module, T_MODULE);
}
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));
-
+ c = 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;
+ if (RCLASS_M_TBL(klass) == RCLASS_M_TBL(module))
+ rb_raise(rb_eArgError, "cyclic include detected");
/* ignore if the module included already in superclasses */
for (p = RCLASS_SUPER(klass); p; p = RCLASS_SUPER(p)) {
switch (BUILTIN_TYPE(p)) {
case T_ICLASS:
- if (RCLASS_M_TBL_WRAPPER(p) == RCLASS_M_TBL_WRAPPER(module)) {
+ if (RCLASS_M_TBL(p) == RCLASS_M_TBL(module)) {
if (!superclass_seen) {
c = p; /* move insertion point */
}
@@ -878,95 +695,13 @@ include_modules_at(const VALUE klass, VALUE c, VALUE module)
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 (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);
- }
+ c = RCLASS_SUPER(c) = include_class_new(module, RCLASS_SUPER(c));
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;
+ changed = 1;
skip:
module = RCLASS_SUPER(module);
}
-
- if (method_changed) rb_clear_method_cache_by_class(klass);
- if (constant_changed) rb_clear_constant_cache();
-
- return method_changed;
-}
-
-static 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_prepend_module(VALUE klass, VALUE module)
-{
- 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);
- }
+ if (changed) rb_clear_cache();
}
/*
@@ -991,13 +726,10 @@ 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);
+ if (BUILTIN_TYPE(p) == T_ICLASS) {
+ rb_ary_push(ary, RBASIC(p)->klass);
}
}
return ary;
@@ -1058,10 +790,12 @@ rb_mod_ancestors(VALUE mod)
VALUE p, ary = rb_ary_new();
for (p = mod; p; p = RCLASS_SUPER(p)) {
+ if (FL_TEST(p, FL_SINGLETON))
+ continue;
if (BUILTIN_TYPE(p) == T_ICLASS) {
rb_ary_push(ary, RBASIC(p)->klass);
}
- else if (p == RCLASS_ORIGIN(p)) {
+ else {
rb_ary_push(ary, p);
}
}
@@ -1123,10 +857,10 @@ method_entry_i(st_data_t key, st_data_t value, st_data_t data)
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 ((ID)key == ID_ALLOCATOR) {
+ return ST_CONTINUE;
}
+
if (!st_lookup(list, key, 0)) {
if (UNDEFINED_METHOD_ENTRY_P(me)) {
type = -1; /* none */
@@ -1143,7 +877,7 @@ 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;
+ int recur;
st_table *list;
if (argc == 0) {
@@ -1155,15 +889,10 @@ class_instance_method_list(int argc, VALUE *argv, VALUE mod, int obj, int (*func
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;
+ st_foreach(RCLASS_M_TBL(mod), method_entry_i, (st_data_t)list);
+ if (BUILTIN_TYPE(mod) == T_ICLASS) continue;
if (obj && FL_TEST(mod, FL_SINGLETON)) continue;
if (!recur) break;
}
@@ -1262,14 +991,11 @@ rb_class_public_instance_methods(int argc, VALUE *argv, VALUE mod)
/*
* call-seq:
- * obj.methods(regular=true) -> array
+ * obj.methods -> 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()
@@ -1280,14 +1006,6 @@ rb_class_public_instance_methods(int argc, VALUE *argv, VALUE mod)
* # :==~, :!, :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
@@ -1295,6 +1013,9 @@ rb_obj_methods(int argc, VALUE *argv, VALUE obj)
{
retry:
if (argc == 0) {
+ VALUE args[1];
+
+ args[0] = Qtrue;
return class_instance_method_list(argc, argv, CLASS_OF(obj), 1, ins_methods_i);
}
else {
@@ -1390,8 +1111,8 @@ rb_obj_public_methods(int argc, VALUE *argv, VALUE obj)
VALUE
rb_obj_singleton_methods(int argc, VALUE *argv, VALUE obj)
{
- VALUE recur, ary, klass, origin;
- st_table *list, *mtbl;
+ VALUE recur, ary, klass;
+ st_table *list;
if (argc == 0) {
recur = Qtrue;
@@ -1400,17 +1121,14 @@ rb_obj_singleton_methods(int argc, VALUE *argv, VALUE obj)
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);
+ st_foreach(RCLASS_M_TBL(klass), 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);
+ while (klass && (FL_TEST(klass, FL_SINGLETON) || TYPE(klass) == T_ICLASS)) {
+ st_foreach(RCLASS_M_TBL(klass), method_entry_i, (st_data_t)list);
klass = RCLASS_SUPER(klass);
}
}
@@ -1522,20 +1240,6 @@ rb_undef_method(VALUE klass, const char *name)
}\
} while (0)
-static inline VALUE
-special_singleton_class_of(VALUE obj)
-{
- SPECIAL_SINGLETON(Qnil, rb_cNilClass);
- SPECIAL_SINGLETON(Qfalse, rb_cFalseClass);
- SPECIAL_SINGLETON(Qtrue, rb_cTrueClass);
- return Qnil;
-}
-
-VALUE
-rb_special_singleton_class(VALUE obj)
-{
- return special_singleton_class_of(obj);
-}
/*!
* \internal
@@ -1551,20 +1255,14 @@ singleton_class_of(VALUE obj)
{
VALUE klass;
- if (FIXNUM_P(obj) || FLONUM_P(obj) || SYMBOL_P(obj)) {
+ if (FIXNUM_P(obj) || SYMBOL_P(obj)) {
rb_raise(rb_eTypeError, "can't define singleton");
}
- if (SPECIAL_CONST_P(obj)) {
- klass = special_singleton_class_of(obj);
- if (NIL_P(klass))
- rb_bug("unknown immediate %p", (void *)obj);
- return klass;
- }
- else {
- enum ruby_value_type type = BUILTIN_TYPE(obj);
- if (type == T_FLOAT || type == T_BIGNUM) {
- rb_raise(rb_eTypeError, "can't define singleton");
- }
+ if (rb_special_const_p(obj)) {
+ SPECIAL_SINGLETON(Qnil, rb_cNilClass);
+ SPECIAL_SINGLETON(Qfalse, rb_cFalseClass);
+ SPECIAL_SINGLETON(Qtrue, rb_cTrueClass);
+ rb_bug("unknown immediate %p", (void *)obj);
}
if (FL_TEST(RBASIC(obj)->klass, FL_SINGLETON) &&
@@ -1581,31 +1279,17 @@ singleton_class_of(VALUE obj)
else {
FL_UNSET(klass, FL_TAINT);
}
+ if (OBJ_UNTRUSTED(obj)) {
+ OBJ_UNTRUST(klass);
+ }
+ else {
+ FL_UNSET(klass, FL_UNTRUSTED);
+ }
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.
@@ -1630,7 +1314,7 @@ 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);
+ if (TYPE(obj) == T_CLASS) (void)ENSURE_EIGENCLASS(klass);
return klass;
}
@@ -1715,7 +1399,7 @@ rb_define_attr(VALUE klass, const char *name, int read, int write)
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);
+ const rb_method_entry_t *me = rb_method_entry(CLASS_OF(obj), rb_intern("to_s"));
if (me && me->def && me->def->type == VM_METHOD_TYPE_CFUNC &&
me->def->body.cfunc.func == rb_any_to_s)
return 1;
@@ -1788,12 +1472,9 @@ rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...)
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;
- }
+ hash = rb_check_convert_type(last, T_HASH, "Hash", "to_hash");
+ if (!NIL_P(hash))
+ argc--;
}
}
/* capture leading mandatory arguments */
@@ -1849,127 +1530,18 @@ rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...)
}
va_end(vargs);
- if (argi < argc) {
- argc_error:
- rb_error_arity(argc, n_mand, f_var ? UNLIMITED_ARGUMENTS : n_mand + n_opt);
- }
+ if (argi < argc)
+ goto argc_error;
return argc;
-}
-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
+ argc_error:
+ if (0 < n_opt)
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for %d..%d%s)",
+ argc, n_mand, n_mand + n_opt, f_var ? "+" : "");
+ else
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for %d%s)",
+ argc, n_mand, f_var ? "+" : "");
}
/*!
diff --git a/common.mk b/common.mk
index de1b671fdd..c9ef64111e 100644
--- a/common.mk
+++ b/common.mk
@@ -2,38 +2,41 @@ bin: $(PROGRAM) $(WPROGRAM)
lib: $(LIBRUBY)
dll: $(LIBRUBY_SO)
-.SUFFIXES: .inc .h .c .y .i .$(DTRACE_EXT)
+.SUFFIXES: .inc .h .c .y .i
# V=0 quiet, V=1 verbose. other values don't work.
V = 0
Q1 = $(V:1=)
Q = $(Q1:0=@)
+n=$(NULLCMD)
+ECHO1 = $(V:1=@$n)
ECHO = $(ECHO1:0=@echo)
-RUBYLIB = $(PATH_SEPARATOR)
+RUBYLIB = -
RUBYOPT = -
RUN_OPTS = --disable-gems
-SPEC_GIT_BASE = git://github.com/nurse
+SPEC_GIT_BASE = git://github.com/rubyspec
MSPEC_GIT_URL = $(SPEC_GIT_BASE)/mspec.git
RUBYSPEC_GIT_URL = $(SPEC_GIT_BASE)/rubyspec.git
STATIC_RUBY = static-ruby
EXTCONF = extconf.rb
+RBCONFIG = ./.rbconfig.time
LIBRUBY_EXTS = ./.libruby-with-ext.time
REVISION_H = ./.revision.time
PLATFORM_D = ./$(PLATFORM_DIR)/.time
RDOCOUT = $(EXTOUT)/rdoc
CAPIOUT = doc/capi
+ID_H_TARGET = -id.h-
DMYEXT = dmyext.$(OBJEXT)
NORMALMAINOBJ = main.$(OBJEXT)
MAINOBJ = $(NORMALMAINOBJ)
-EXTOBJS =
+EXTOBJS =
DLDOBJS = $(DMYEXT)
-EXTSOLIBS =
-MINIOBJS = $(ARCHMINIOBJS) miniinit.$(OBJEXT) miniprelude.$(OBJEXT)
+MINIOBJS = $(ARCHMINIOBJS) dmyencoding.$(OBJEXT) dmyversion.$(OBJEXT) miniprelude.$(OBJEXT)
ENC_MK = enc.mk
COMMONOBJS = array.$(OBJEXT) \
@@ -43,7 +46,6 @@ COMMONOBJS = array.$(OBJEXT) \
complex.$(OBJEXT) \
dir.$(OBJEXT) \
dln_find.$(OBJEXT) \
- encoding.$(OBJEXT) \
enum.$(OBJEXT) \
enumerator.$(OBJEXT) \
error.$(OBJEXT) \
@@ -85,32 +87,30 @@ COMMONOBJS = array.$(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) \
+EXPORTOBJS = dln.$(OBJEXT) \
+ encoding.$(OBJEXT) \
+ version.$(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
+YES_GEM_PRELUDE = $(GEM_PRELUDE)
+NO_GEM_PRELUDE =
PRELUDES = prelude.c miniprelude.c
GOLFPRELUDES = golf_prelude.c
@@ -120,7 +120,7 @@ SCRIPT_ARGS = --dest-dir="$(DESTDIR)" \
--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 = $(SUDO) $(MINIRUBY) $(srcdir)/tool/rbinstall.rb
INSTRUBY_ARGS = $(SCRIPT_ARGS) \
--data-mode=$(INSTALL_DATA_MODE) \
--prog-mode=$(INSTALL_PROG_MODE) \
@@ -143,7 +143,7 @@ COMPILE_PRELUDE = $(MINIRUBY) -I$(srcdir) $(srcdir)/tool/compile_prelude.rb
all: showflags main docs
-main: showflags $(EXTSTATIC:static=lib)encs exts
+main: showflags encs exts
@$(NULLCMD)
.PHONY: showflags
@@ -159,47 +159,46 @@ showflags:
" DLDFLAGS = $(DLDFLAGS)" \
" SOLIBS = $(SOLIBS)" \
$(MESSAGE_END)
- -@$(CC_VERSION)
.PHONY: showconfig
showconfig:
- @$(ECHO_BEGIN) \
- $(configure_args) \
- $(ECHO_END)
+ @$(MESSAGE_BEGIN) \
+ "$(configure_args)" \
+ $(MESSAGE_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
+$(EXTS_MK): $(MKFILES) incs $(PREP) $(RBCONFIG) $(LIBRUBY)
+ @$(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)"
+ $(Q)$(MAKE) -f $(EXTS_MK) $(MFLAGS)
-$(MKMAIN_CMD): $(MKFILES) all-incs $(PREP) $(RBCONFIG) $(LIBRUBY)
- $(Q)$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --command-output=$@ $(EXTMK_ARGS)
+$(MKMAIN_CMD): $(MKFILES) incs $(PREP) $(RBCONFIG) $(LIBRUBY)
+ @$(MINIRUBY) $(srcdir)/ext/extmk.rb --make="$(MAKE)" --command-output=$@ $(EXTMK_ARGS)
prog: program wprogram
-$(PREP): $(MKFILES)
+loadpath: $(PREP) PHONY
+ $(MINIRUBY) -e 'p $$:'
-miniruby$(EXEEXT): config.status $(ALLOBJS) $(ARCHFILE) $(DTRACE_OBJ)
+$(PREP): $(MKFILES)
-objs: $(ALLOBJS)
+miniruby$(EXEEXT): config.status $(NORMALMAINOBJ) $(MINIOBJS) $(COMMONOBJS) $(DMYEXT) $(ARCHFILE)
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)"
+doc/capi/.timestamp: Doxyfile $(PREP)
+ $(Q) $(MAKEDIRS) doc/capi
$(ECHO) generating capi
$(Q) $(DOXYGEN) -b
- $(Q) $(MINIRUBY) -e 'File.open(ARGV[0], "w"){|f| f.puts(Time.now)}' "$@"
+ $(Q) $(MINIRUBY) -e 'File.open("$(CAPIOUT)/.timestamp", "w"){|f| f.puts(Time.now)}'
Doxyfile: $(srcdir)/template/Doxyfile.tmpl $(PREP) $(srcdir)/tool/generic_erb.rb $(RBCONFIG)
$(ECHO) generating $@
@@ -208,11 +207,10 @@ Doxyfile: $(srcdir)/template/Doxyfile.tmpl $(PREP) $(srcdir)/tool/generic_erb.rb
program: showflags $(PROGRAM)
wprogram: showflags $(WPROGRAM)
-mini: PHONY miniruby$(EXEEXT)
-$(PROGRAM) $(WPROGRAM): $(LIBRUBY) $(MAINOBJ) $(OBJS) $(EXTOBJS) $(SETUP) $(PREP)
+$(PROGRAM): $(LIBRUBY) $(MAINOBJ) $(OBJS) $(EXTOBJS) $(SETUP) $(PREP)
-$(LIBRUBY_A): $(OBJS) $(MAINOBJ) $(DTRACE_OBJ) $(DTRACE_GLOMMED_OBJ) $(DMYEXT) $(ARCHFILE)
+$(LIBRUBY_A): $(OBJS) $(DMYEXT) $(ARCHFILE)
$(LIBRUBY_SO): $(OBJS) $(DLDOBJS) $(LIBRUBY_A) $(PREP) $(LIBRUBY_SO_UPDATE) $(BUILTIN_ENCOBJS)
@@ -220,11 +218,11 @@ $(LIBRUBY_EXTS):
@exit > $@
$(STATIC_RUBY)$(EXEEXT): $(MAINOBJ) $(DLDOBJS) $(EXTOBJS) $(LIBRUBY_A)
- $(Q)$(RM) $@
+ @$(RM) $@
$(PURIFY) $(CC) $(MAINOBJ) $(DLDOBJS) $(EXTOBJS) $(LIBRUBY_A) $(MAINLIBS) $(EXTLIBS) $(LIBS) $(OUTFLAG)$@ $(LDFLAGS) $(XLDFLAGS)
-ruby.imp: $(COMMONOBJS)
- $(Q)$(NM) -Pgp $(COMMONOBJS) | \
+ruby.imp: $(EXPORTOBJS)
+ @$(NM) -Pgp $(EXPORTOBJS) | \
awk 'BEGIN{print "#!"}; $$2~/^[BDT]$$/&&$$1!~/^(Init_|.*_threadptr_|\.)/{print $$1}' | \
sort -u -o $@
@@ -235,33 +233,33 @@ $(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
+do-install-all: $(PROGRAM)
$(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
+do-install-nodoc: $(PREP)
$(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)
+do-install-local: $(PREP)
$(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
+do-install-ext: $(PREP)
$(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
+do-install-arch: $(PREP)
+ $(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=bin --install=ext-arch
post-install-arch:: post-install-bin post-install-ext-arch
install-comm: pre-install-comm do-install-comm post-install-comm
@@ -272,7 +270,7 @@ 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)
+do-install-bin: $(PREP)
$(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=bin
post-install-bin::
@$(NULLCMD)
@@ -286,14 +284,14 @@ post-install-lib::
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
+do-install-ext-comm: $(PREP)
$(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
+do-install-ext-arch: $(PREP)
$(INSTRUBY) --make="$(MAKE)" $(INSTRUBY_ARGS) --install=ext-arch
post-install-ext-arch::
@$(NULLCMD)
@@ -322,11 +320,6 @@ dont-install-all: $(PROGRAM)
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
@@ -409,30 +402,13 @@ do-install-doc: $(PROGRAM)
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)"
+ $(Q) $(XRUBY) "$(srcdir)/bin/rdoc" --encoding=UTF-8 --no-force-update --all --ri --op "$(RDOCOUT)" $(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
+ $(Q) $(XRUBY) "$(srcdir)/bin/rdoc" --encoding=UTF-8 --all --quiet -C $(RDOCFLAGS) "$(srcdir)"
nodoc: PHONY
@@ -446,19 +422,19 @@ post-no-install-doc::
CLEAR_INSTALLED_LIST = clear-installed-list
-install-prereq: $(CLEAR_INSTALLED_LIST) yes-fake PHONY
+install-prereq: $(CLEAR_INSTALLED_LIST) 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)
+ @$(RM) $(OBJS) $(MINIOBJS) $(MAINOBJ) $(LIBRUBY_A) $(LIBRUBY_SO) $(LIBRUBY) $(LIBRUBY_ALIASES)
+ @$(RM) $(PROGRAM) $(WPROGRAM) miniruby$(EXEEXT) dmyext.$(OBJEXT) $(ARCHFILE) .*.time
+ @$(RM) y.tab.c y.output encdb.h transdb.h prelude.c config.log rbconfig.rb $(ruby_pc)
clean-ext:: PHONY
clean-golf: PHONY
- $(Q)$(RM) $(GORUBY)$(EXEEXT) $(GOLFOBJS)
+ @$(RM) $(GORUBY)$(EXEEXT) $(GOLFOBJS)
clean-rdoc: PHONY
clean-capi: PHONY
clean-platform: PHONY
@@ -467,12 +443,12 @@ 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)
+ @$(RM) $(MKFILES) yasmdata.rb *.inc
+ @$(RM) config.cache config.status config.status.lineno $(PRELUDES)
+ @$(RM) *~ *.bak *.stackdump core *.core gmon.out $(PREP)
distclean-ext:: PHONY
distclean-golf: clean-golf
- $(Q)$(RM) $(GOLFPRELUDES)
+ @$(RM) $(GOLFPRELUDES)
distclean-rdoc: PHONY
distclean-capi: PHONY
distclean-extout: clean-extout
@@ -480,67 +456,58 @@ 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
+ @$(RM) parse.c parse.h lex.c newline.c revision.h
+realclean-ext::
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: test test-all
check-ruby: test test-ruby
-fake: $(CROSS_COMPILING)-fake
-yes-fake: $(arch)-fake.rb $(RBCONFIG) PHONY
-no-fake: PHONY
-
-btest: $(TEST_RUNNABLE)-btest
+btest: miniruby$(EXEEXT) $(TEST_RUNNABLE)-btest
no-btest: PHONY
-yes-btest: fake miniruby$(EXEEXT) PHONY
- $(BOOTSTRAPRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(BTESTRUBY) $(RUN_OPTS)" $(OPTS) $(TESTOPTS)
+yes-btest: PHONY
+ $(BOOTSTRAPRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(MINIRUBY)" $(OPTS)
-btest-ruby: $(TEST_RUNNABLE)-btest-ruby
+btest-ruby: miniruby$(EXEEXT) $(RBCONFIG) $(PROGRAM) $(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)
+yes-btest-ruby: PHONY
+ @$(RUNRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(PROGRAM) -I$(srcdir)/lib" -q $(OPTS)
-test-sample: $(TEST_RUNNABLE)-test-sample
+test-sample: miniruby$(EXEEXT) $(RBCONFIG) $(PROGRAM) $(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)
+yes-test-sample: PHONY
+ @$(RUNRUBY) $(srcdir)/tool/rubytest.rb
test-knownbugs: test-knownbug
-test-knownbug: $(TEST_RUNNABLE)-test-knownbug
+test-knownbug: miniruby$(EXEEXT) $(PROGRAM) $(RBCONFIG) $(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
+yes-test-knownbug: PHONY
+ -$(RUNRUBY) "$(srcdir)/bootstraptest/runner.rb" --ruby="$(PROGRAM)" $(OPTS) $(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)
+yes-test-all: PHONY
+ $(RUNRUBY) "$(srcdir)/test/runner.rb" --ruby="$(RUNRUBY)" $(TESTS)
TESTS_BUILD = mkmf
no-test-all: PHONY
- $(MINIRUBY) -I"$(srcdir)/lib" "$(srcdir)/test/runner.rb" $(TESTOPTS) $(TESTS_BUILD)
+ $(MINIRUBY) -I"$(srcdir)/lib" "$(srcdir)/test/runner.rb" $(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-
+yes-test-ruby: PHONY
+ $(RUNRUBY) "$(srcdir)/test/runner.rb" ruby
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=$@ \
+ @$(MINIRUBY) $(srcdir)/tool/mkconfig.rb -timestamp=$@ \
-install_name=$(RUBY_INSTALL_NAME) \
-so_name=$(RUBY_SO_NAME) rbconfig.rb
@@ -549,27 +516,18 @@ 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)
+encs enc trans: showflags $(ENC_MK) $(LIBRUBY) $(PREP)
$(ECHO) making $@
- $(Q) $(MAKE) -f $(ENC_MK) V="$(V)" \
- RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" \
- $(MFLAGS) $@
-
+ $(Q) $(MAKE) -f $(ENC_MK) RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(MFLAGS) $@
-libenc enc: {$(VPATH)}encdb.h
-libtrans trans: {$(VPATH)}transdb.h
+enc: {$(VPATH)}encdb.h
+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)
+ $(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)
+ $(Q) $(MINIRUBY) $(srcdir)/enc/make_encmake.rb --builtin-encs="$(BUILTIN_ENCOBJS)" --builtin-transes="$(BUILTIN_TRANSOBJS)" $@ $(ENCS)
.PRECIOUS: $(MKFILES)
@@ -585,35 +543,16 @@ $(ENC_MK): $(srcdir)/enc/make_encmake.rb $(srcdir)/enc/Makefile.in $(srcdir)/enc
PHONY:
-{$(VPATH)}parse.c: {$(VPATH)}parse.y $(srcdir)/tool/ytab.sed {$(VPATH)}id.h
-{$(VPATH)}parse.h: {$(VPATH)}parse.c
+{$(VPATH)}parse.c: {$(VPATH)}parse.y $(srcdir)/tool/ytab.sed
+parse.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
-
-###
+ $(YACC) -d $(YFLAGS) -o y.tab.c $(SRC_FILE)
+ sed -f $(srcdir)/tool/ytab.sed -e "/^#/s!y\.tab\.c!$@!" y.tab.c > $@.new
+ @$(MV) $@.new $@
+ sed -e "/^#line.*y\.tab\.h/d;/^#line.*parse\.y/d" y.tab.h > $(@:.c=.h).new
+ @$(IFCHANGE) $(@:.c=.h) $(@:.c=.h).new
+ @$(RM) y.tab.c y.tab.h
acosh.$(OBJEXT): {$(VPATH)}acosh.c
alloca.$(OBJEXT): {$(VPATH)}alloca.c {$(VPATH)}config.h
@@ -625,12 +564,9 @@ 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
@@ -640,18 +576,34 @@ dl_os2.$(OBJEXT): {$(VPATH)}dl_os2.c
ia64.$(OBJEXT): {$(VPATH)}ia64.s
$(CC) $(CFLAGS) -c $<
+$(PLATFORM_D):
+ $(Q) $(MAKEDIRS) $(PLATFORM_DIR)
+ @exit > $@
+
+win32/win32.$(OBJEXT): {$(VPATH)}win32/win32.c $(RUBY_H_INCLUDES) $(PLATFORM_D)
+win32/file.$(OBJEXT): {$(VPATH)}win32/file.c $(RUBY_H_INCLUDES) $(PLATFORM_D)
+
###
-addr2line.$(OBJEXT): {$(VPATH)}addr2line.c {$(VPATH)}addr2line.h {$(VPATH)}config.h
+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
+ID_H_INCLUDES = {$(VPATH)}id.h {$(VPATH)}vm_opts.h
+VM_CORE_H_INCLUDES = {$(VPATH)}vm_core.h {$(VPATH)}thread_$(THREAD_MODEL).h \
+ {$(VPATH)}node.h {$(VPATH)}method.h {$(VPATH)}atomic.h \
+ $(ID_H_INCLUDES)
+
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
+ $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h
bignum.$(OBJEXT): {$(VPATH)}bignum.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \
- {$(VPATH)}thread.h {$(VPATH)}internal.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
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}debug.h {$(VPATH)}internal.h \
+ {$(VPATH)}constant.h
compar.$(OBJEXT): {$(VPATH)}compar.c $(RUBY_H_INCLUDES)
complex.$(OBJEXT): {$(VPATH)}complex.c $(RUBY_H_INCLUDES) \
- {$(VPATH)}internal.h $(hdrdir)/ruby.h
+ {$(VPATH)}internal.h
dir.$(OBJEXT): {$(VPATH)}dir.c $(RUBY_H_INCLUDES) {$(VPATH)}util.h \
$(ENCODING_H_INCLUDES) \
{$(VPATH)}internal.h
@@ -659,69 +611,71 @@ 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
+dmyencoding.$(OBJEXT): {$(VPATH)}dmyencoding.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}regenc.h {$(VPATH)}util.h $(ENCODING_H_INCLUDES) \
+ {$(VPATH)}encoding.c {$(VPATH)}internal.h
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
+ {$(VPATH)}util.h $(ID_H_INCLUDES)
+enumerator.$(OBJEXT): {$(VPATH)}enumerator.c $(RUBY_H_INCLUDES)
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
+ {$(VPATH)}debug.h \
+ {$(VPATH)}internal.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
+ {$(VPATH)}eval_jump.c {$(VPATH)}debug.h {$(VPATH)}gc.h {$(VPATH)}iseq.h \
+ $(ENCODING_H_INCLUDES) {$(VPATH)}internal.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
+ {$(VPATH)}dln.h {$(VPATH)}debug.h \
+ {$(VPATH)}internal.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
+ {$(VPATH)}debug.h {$(VPATH)}internal.h {$(VPATH)}constant.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
+ $(ENCODING_H_INCLUDES)
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
+ {$(VPATH)}util.h $(ENCODING_H_INCLUDES) {$(VPATH)}dln.h {$(VPATH)}internal.h
+main.$(OBJEXT): {$(VPATH)}main.c $(RUBY_H_INCLUDES) {$(VPATH)}debug.h \
+ {$(VPATH)}node.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
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}debug.h
numeric.$(OBJEXT): {$(VPATH)}numeric.c $(RUBY_H_INCLUDES) \
- {$(VPATH)}util.h $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}id.h
+ {$(VPATH)}util.h $(ENCODING_H_INCLUDES) {$(VPATH)}internal.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
+ {$(VPATH)}internal.h {$(VPATH)}constant.h
pack.$(OBJEXT): {$(VPATH)}pack.c $(RUBY_H_INCLUDES) {$(VPATH)}encoding.h \
- {$(VPATH)}oniguruma.h {$(VPATH)}internal.h
+ {$(VPATH)}oniguruma.h
parse.$(OBJEXT): {$(VPATH)}parse.c $(RUBY_H_INCLUDES) {$(VPATH)}node.h \
- $(ENCODING_H_INCLUDES) {$(VPATH)}id.h {$(VPATH)}regenc.h \
+ $(ENCODING_H_INCLUDES) $(ID_H_INCLUDES) {$(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
+ {$(VPATH)}parse.h \
+ {$(VPATH)}internal.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
+ {$(VPATH)}debug.h {$(VPATH)}internal.h {$(VPATH)}iseq.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
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}debug.h {$(VPATH)}internal.h
random.$(OBJEXT): {$(VPATH)}random.c $(RUBY_H_INCLUDES) \
- {$(VPATH)}siphash.c {$(VPATH)}siphash.h {$(VPATH)}internal.h
+ {$(VPATH)}siphash.c {$(VPATH)}siphash.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
+ $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h
+rational.$(OBJEXT): {$(VPATH)}rational.c $(RUBY_H_INCLUDES) {$(VPATH)}internal.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
@@ -741,125 +695,88 @@ 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
+ {$(VPATH)}dln.h {$(VPATH)}debug.h {$(VPATH)}internal.h
+safe.$(OBJEXT): {$(VPATH)}safe.c $(RUBY_H_INCLUDES) \
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}debug.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
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}debug.h
sprintf.$(OBJEXT): {$(VPATH)}sprintf.c $(RUBY_H_INCLUDES) {$(VPATH)}re.h \
- {$(VPATH)}regex.h {$(VPATH)}vsnprintf.c $(ENCODING_H_INCLUDES) {$(VPATH)}internal.h
+ {$(VPATH)}regex.h {$(VPATH)}vsnprintf.c $(ENCODING_H_INCLUDES)
st.$(OBJEXT): {$(VPATH)}st.c $(RUBY_H_INCLUDES)
strftime.$(OBJEXT): {$(VPATH)}strftime.c $(RUBY_H_INCLUDES) \
- {$(VPATH)}timev.h $(ENCODING_H_INCLUDES)
+ {$(VPATH)}timev.h
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
+ {$(VPATH)}regex.h $(ENCODING_H_INCLUDES) {$(VPATH)}internal.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
+ {$(VPATH)}debug.h {$(VPATH)}thread_$(THREAD_MODEL).c $(ENCODING_H_INCLUDES) \
+ {$(VPATH)}internal.h {$(VPATH)}io.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
+ {$(VPATH)}debug.h {$(VPATH)}internal.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)}node.h {$(VPATH)}util.h {$(VPATH)}encoding.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)
+ {$(VPATH)}version.h $(srcdir)/version.h $(srcdir)/revision.h {$(VPATH)}config.h
+dmyversion.$(OBJEXT): {$(VPATH)}dmyversion.c version.$(OBJEXT)
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)}insns_info.inc {$(VPATH)}optinsn.inc {$(VPATH)}debug.h \
{$(VPATH)}optunifs.inc {$(VPATH)}opt_sc.inc {$(VPATH)}insns.inc \
- {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+ {$(VPATH)}internal.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
+ {$(VPATH)}insns_info.inc {$(VPATH)}node_name.inc {$(VPATH)}debug.h {$(VPATH)}internal.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
+ {$(VPATH)}vm.inc {$(VPATH)}insns.inc {$(VPATH)}debug.h \
+ {$(VPATH)}internal.h {$(VPATH)}vm.h {$(VPATH)}constant.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
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}debug.h {$(VPATH)}addr2line.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
+ {$(VPATH)}util.h {$(VPATH)}debug.h
+id.$(OBJEXT): {$(VPATH)}id.c $(RUBY_H_INCLUDES) $(ID_H_INCLUDES)
miniprelude.$(OBJEXT): {$(VPATH)}miniprelude.c $(RUBY_H_INCLUDES) \
- $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}debug.h {$(VPATH)}internal.h
prelude.$(OBJEXT): {$(VPATH)}prelude.c $(RUBY_H_INCLUDES) \
- $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}debug.h {$(VPATH)}internal.h
golf_prelude.$(OBJEXT): {$(VPATH)}golf_prelude.c $(RUBY_H_INCLUDES) \
- $(VM_CORE_H_INCLUDES) {$(VPATH)}internal.h {$(VPATH)}vm_opts.h
+ $(VM_CORE_H_INCLUDES) {$(VPATH)}debug.h {$(VPATH)}internal.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)
+ {$(VPATH)}debug.h {$(VPATH)}node.h
ascii.$(OBJEXT): {$(VPATH)}ascii.c {$(VPATH)}regenc.h {$(VPATH)}config.h \
- {$(VPATH)}oniguruma.h {$(VPATH)}missing.h $(RUBY_H_INCLUDES)
+ {$(VPATH)}oniguruma.h {$(VPATH)}missing.h
us_ascii.$(OBJEXT): {$(VPATH)}us_ascii.c {$(VPATH)}regenc.h \
- {$(VPATH)}config.h {$(VPATH)}oniguruma.h {$(VPATH)}missing.h $(RUBY_H_INCLUDES)
+ {$(VPATH)}config.h {$(VPATH)}oniguruma.h {$(VPATH)}missing.h
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)
+ {$(VPATH)}missing.h {$(VPATH)}intern.h {$(VPATH)}enc/unicode/name2ctype.h \
+ {$(VPATH)}subst.h
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)
+ {$(VPATH)}oniguruma.h {$(VPATH)}missing.h
-$(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 \
+newline.c: $(srcdir)/enc/trans/newline.trans $(srcdir)/tool/transcode-tblgen.rb
+ $(Q) $(BASERUBY) "$(srcdir)/tool/transcode-tblgen.rb" -vo newline.c $(srcdir)/enc/trans/newline.trans
+newline.$(OBJEXT): {$(VPATH)}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)"
@@ -880,10 +797,9 @@ INSNS2VMOPT = --srcdir="$(srcdir)"
{$(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
+srcs: {$(VPATH)}parse.c {$(VPATH)}lex.c {$(VPATH)}newline.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
+EXT_SRCS = $(srcdir)/ext/ripper/ripper.c $(srcdir)/ext/json/parser/parser.c
srcs-ext: $(EXT_SRCS)
@@ -891,21 +807,15 @@ 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
+ $(srcdir)/revision.h $(REVISION_H) enc/unicode/name2ctype.h
insns: $(INSNS)
-id.h: $(srcdir)/tool/generic_erb.rb $(srcdir)/template/id.h.tmpl $(srcdir)/defs/id.def
+id.h: parse.h $(srcdir)/tool/generic_erb.rb $(srcdir)/template/id.h.tmpl
$(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
+ $(srcdir)/template/id.h.tmpl --vpath=$(VPATH) parse.h
node_name.inc: {$(VPATH)}node.h
$(ECHO) generating $@
@@ -919,19 +829,16 @@ transdb.h: $(PREP) srcs-enc $(srcdir)/tool/generic_erb.rb $(srcdir)/template/tra
$(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
+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 \
+ $(srcdir)/lib/rubygems/defaults.rb $(srcdir)/lib/rubygems/custom_require.rb \
$(PRELUDE_SCRIPTS) $(PREP)
$(ECHO) generating $@
$(Q) $(COMPILE_PRELUDE) $(PRELUDE_SCRIPTS) $@
@@ -940,11 +847,6 @@ golf_prelude.c: $(srcdir)/tool/compile_prelude.rb $(RBCONFIG) $(srcdir)/prelude.
$(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
@@ -954,69 +856,51 @@ $(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
+ @-$(BASERUBY) $(srcdir)/tool/file2lastrev.rb --revision.h "$(srcdir)" > "$(srcdir)/revision.tmp"
+ @$(IFCHANGE) "--timestamp=$@" "$(srcdir)/revision.h" "$(srcdir)/revision.tmp"
-$(srcdir)/ext/ripper/ripper.c: parse.y id.h
+$(srcdir)/ext/ripper/ripper.c: parse.y
$(ECHO) generating $@
$(Q) $(CHDIR) $(@D) && $(exec) $(MAKE) -f depend $(MFLAGS) \
- Q=$(Q) ECHO=$(ECHO) top_srcdir=../.. srcdir=. VPATH=../.. RUBY="$(BASERUBY)" PATH_SEPARATOR="$(PATH_SEPARATOR)"
+ Q=$(Q) ECHO=$(ECHO) top_srcdir=../.. srcdir=. RUBY=$(BASERUBY)
$(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)"
+ Q=$(Q) ECHO=$(ECHO) top_srcdir=../../.. srcdir=.
##
-run: fake miniruby$(EXEEXT) PHONY
- $(BTESTRUBY) $(TESTRUN_SCRIPT) $(RUNOPT)
+run: miniruby$(EXEEXT) PHONY
+ $(MINIRUBY) $(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)
+parse: miniruby$(EXEEXT) PHONY
+ $(MINIRUBY) $(srcdir)/tool/parse.rb $(TESTRUN_SCRIPT)
COMPARE_RUBY = $(BASERUBY)
-ITEM =
-OPTS =
+ITEM =
+OPTS =
benchmark: $(PROGRAM) PHONY
$(BASERUBY) $(srcdir)/benchmark/driver.rb -v \
- --executables="$(COMPARE_RUBY); built-ruby::$(RUNRUBY)" \
+ --executables="$(COMPARE_RUBY); $(RUNRUBY)" \
--pattern='bm_' --directory=$(srcdir)/benchmark $(OPTS)
benchmark-each: $(PROGRAM) PHONY
$(BASERUBY) $(srcdir)/benchmark/driver.rb -v \
- --executables="$(COMPARE_RUBY); built-ruby::$(RUNRUBY)" \
+ --executables="$(COMPARE_RUBY); $(RUNRUBY)" \
--pattern=$(ITEM) --directory=$(srcdir)/benchmark $(OPTS)
tbench: $(PROGRAM) PHONY
$(BASERUBY) $(srcdir)/benchmark/driver.rb -v \
- --executables="$(COMPARE_RUBY); built-ruby::$(RUNRUBY)" \
+ --executables="$(COMPARE_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 b ruby_debug_breakpoint > run.gdb
echo '# handle SIGINT nostop' >> run.gdb
echo '# handle SIGPIPE nostop' >> run.gdb
echo '# b rb_longjmp' >> run.gdb
@@ -1033,19 +917,13 @@ 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)
+ gdb -x run.gdb --quiet --args $(PROGRAM) $(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)
+ -@$(MAKE) $(MFLAGS) REVISION_FORCE=PHONY "$(REVISION_H)"
info: info-program info-libruby_a info-libruby_so info-arch
info-program:
@@ -1063,8 +941,6 @@ change: PHONY
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)
@@ -1085,12 +961,10 @@ help: PHONY
" 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-all: all ruby tests" \
" 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" \
@@ -1100,5 +974,5 @@ help: PHONY
" golf: for golfers" \
"" \
"see DeveloperHowto for more detail: " \
- " http://bugs.ruby-lang.org/wiki/ruby/DeveloperHowto" \
+ " http://redmine.ruby-lang.org/wiki/ruby/DeveloperHowto" \
$(MESSAGE_END)
diff --git a/compar.c b/compar.c
index 2f4db291a4..65def78484 100644
--- a/compar.c
+++ b/compar.c
@@ -32,36 +32,9 @@ rb_cmperr(VALUE x, VALUE y)
}
static VALUE
-invcmp_recursive(VALUE x, VALUE y, int recursive)
-{
- if (recursive) return Qnil;
- return rb_check_funcall(y, cmp, 1, &x);
-}
-
-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_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]);
+ VALUE c = rb_funcall(a[0], cmp, 1, a[1]);
if (NIL_P(c)) return Qfalse;
if (rb_cmpint(c, a[0], a[1]) == 0) return Qtrue;
@@ -81,9 +54,6 @@ cmp_failed(void)
* 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
diff --git a/compile.c b/compile.c
index 099c280f75..f4211ed860 100644
--- a/compile.c
+++ b/compile.c
@@ -19,6 +19,7 @@
#include "insns.inc"
#include "insns_info.inc"
+#define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
#define FIXNUM_INC(n, i) ((n)+(INT2FIX(i)&~FIXNUM_FLAG))
#define FIXNUM_OR(n, i) ((n)|INT2FIX(i))
@@ -50,7 +51,7 @@ typedef struct iseq_label_data {
typedef struct iseq_insn_data {
LINK_ELEMENT link;
enum ruby_vminsn_type insn_id;
- unsigned int line_no;
+ int line_no;
int operand_size;
int sc_state;
VALUE *operands;
@@ -127,7 +128,7 @@ struct iseq_compile_data_ensure_node_stack {
(ruby_debug_print_node(1, CPDEBUG, "", (NODE *)(node)), gl_node_level)), \
gl_node_level++)
-#define debug_node_end() gl_node_level --
+#define debug_node_end() gl_node_level --;
#else
@@ -164,17 +165,17 @@ r_value(VALUE value)
/* 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_filename(iseq) \
+ (((rb_iseq_t*)DATA_PTR(iseq))->filename)
-#define iseq_absolute_path(iseq) \
- (((rb_iseq_t*)DATA_PTR(iseq))->location.absolute_path)
+#define iseq_filepath(iseq) \
+ (((rb_iseq_t*)DATA_PTR(iseq))->filepath)
#define NEW_ISEQVAL(node, name, type, line_no) \
- new_child_iseq(iseq, (node), rb_fstring(name), 0, (type), (line_no))
+ new_child_iseq(iseq, (node), (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))
+ new_child_iseq(iseq, (node), (name), iseq->self, (type), (line_no))
/* add instructions */
#define ADD_SEQ(seq1, seq2) \
@@ -184,14 +185,16 @@ r_value(VALUE value)
#define ADD_INSN(seq, line, insn) \
ADD_ELEM((seq), (LINK_ELEMENT *) new_insn_body(iseq, (line), BIN(insn), 0))
+/* add an instruction with label operand */
+#define ADD_INSNL(seq, line, insn, label) \
+ ADD_ELEM((seq), (LINK_ELEMENT *) \
+ new_insn_body(iseq, (line), BIN(insn), 1, (VALUE)(label)))
+
/* 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)))
@@ -208,10 +211,10 @@ r_value(VALUE value)
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))
+ ADD_SEND_R((seq), (line), (id), (argc), (VALUE)Qfalse, (VALUE)INT2FIX(VM_CALL_FCALL_BIT))
#define ADD_CALL_WITH_BLOCK(seq, line, id, argc, block) \
- ADD_SEND_R((seq), (line), (id), (argc), (block), (VALUE)INT2FIX(VM_CALL_FCALL))
+ ADD_SEND_R((seq), (line), (id), (argc), (block), (VALUE)INT2FIX(VM_CALL_FCALL_BIT))
#define ADD_SEND_R(seq, line, id, argc, block, flag) \
ADD_ELEM((seq), (LINK_ELEMENT *) \
@@ -222,14 +225,14 @@ r_value(VALUE value)
do { \
if ((event) == RUBY_EVENT_LINE && iseq->coverage && \
(line) != iseq->compile_data->last_coverable_line) { \
- RARRAY_ASET(iseq->coverage, (line) - 1, INT2FIX(0)); \
+ RARRAY_PTR(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)
+ }while(0);
/* add label */
#define ADD_LABEL(seq, label) \
@@ -248,7 +251,7 @@ r_value(VALUE value)
(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)))
+ (iseqv), (VALUE)(lc) | 1)))
/* compile node */
#define COMPILE(anchor, desc, node) \
@@ -278,7 +281,7 @@ r_value(VALUE value)
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); \
+ iseq->compile_data->err_info = GET_THREAD()->errinfo; \
GET_THREAD()->errinfo = tmp; \
ret = 0; \
break; \
@@ -298,7 +301,7 @@ r_value(VALUE value)
#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)
+#define hide_obj(obj) do {OBJ_FREEZE(obj); RBASIC(obj)->klass = 0;} while (0)
#include "optinsn.inc"
#if OPT_INSTRUCTIONS_UNIFICATION
@@ -324,6 +327,7 @@ static void debug_list(ISEQ_ARG_DECLARE LINK_ANCHOR *anchor);
static void dump_disasm_list(LINK_ELEMENT *elem);
static int insn_data_length(INSN *iobj);
+static int insn_data_line_no(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, ...);
@@ -414,12 +418,12 @@ static int
iseq_add_mark_object(rb_iseq_t *iseq, VALUE v)
{
if (!SPECIAL_CONST_P(v)) {
- rb_iseq_add_mark_object(iseq, v);
+ rb_ary_push(iseq->mark_ary, v);
}
return COMPILE_OK;
}
-#define ruby_sourcefile RSTRING_PTR(iseq->location.path)
+#define ruby_sourcefile RSTRING_PTR(iseq->filename)
static int
iseq_add_mark_object_compile_time(rb_iseq_t *iseq, VALUE v)
@@ -440,7 +444,6 @@ validate_label(st_data_t name, st_data_t label, st_data_t arg)
int ret;
COMPILE_ERROR((ruby_sourcefile, lobj->position,
"%s: undefined label", rb_id2name((ID)name)));
- if (ret) break;
} while (0);
}
return ST_CONTINUE;
@@ -473,46 +476,37 @@ rb_iseq_compile_node(VALUE self, NODE *node)
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;
- }
+ 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_LABEL(ret, start);
+ COMPILE(ret, "block body", node->nd_body);
+ ADD_LABEL(ret, end);
+
+ /* 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->line_no), 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->line_no), 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:
@@ -542,7 +536,7 @@ rb_iseq_compile_node(VALUE self, NODE *node)
}
if (iseq->type == ISEQ_TYPE_RESCUE || iseq->type == ISEQ_TYPE_ENSURE) {
- ADD_INSN2(ret, 0, getlocal, INT2FIX(2), INT2FIX(0));
+ ADD_INSN2(ret, 0, getdynamic, INT2FIX(2), INT2FIX(0));
ADD_INSN1(ret, 0, throw, INT2FIX(0) /* continue throw */ );
}
else {
@@ -583,72 +577,18 @@ rb_iseq_translate_threaded_code(rb_iseq_t *iseq)
/* definition of data structure for compiler */
/*********************************************/
-/*
- * On 32-bit SPARC, GCC by default generates SPARC V7 code that may require
- * 8-byte word alignment. On the other hand, Oracle Solaris Studio seems to
- * generate SPARCV8PLUS code with unaligned memory accesss instructions.
- * That is why the STRICT_ALIGNMENT is defined only with GCC.
- */
-#if defined(__sparc) && SIZEOF_VOIDP == 4 && defined(__GNUC__)
- #define STRICT_ALIGNMENT
-#endif
-
-#ifdef STRICT_ALIGNMENT
- #if defined(HAVE_TRUE_LONG_LONG) && SIZEOF_LONG_LONG > SIZEOF_VALUE
- #define ALIGNMENT_SIZE SIZEOF_LONG_LONG
- #else
- #define ALIGNMENT_SIZE SIZEOF_VALUE
- #endif
- #define PADDING_SIZE_MAX ((size_t)((ALIGNMENT_SIZE) - 1))
- #define ALIGNMENT_SIZE_MASK PADDING_SIZE_MAX
- /* Note: ALIGNMENT_SIZE == (2 ** N) is expected. */
-#else
- #define PADDING_SIZE_MAX 0
-#endif /* STRICT_ALIGNMENT */
-
-#ifdef STRICT_ALIGNMENT
-/* calculate padding size for aligned memory access */
-static size_t
-calc_padding(void *ptr, size_t size)
-{
- size_t mis;
- size_t padding = 0;
-
- mis = (size_t)ptr & ALIGNMENT_SIZE_MASK;
- if (mis > 0) {
- padding = ALIGNMENT_SIZE - mis;
- }
-/*
- * On 32-bit sparc or equivalents, when a single VALUE is requested
- * and padding == sizeof(VALUE), it is clear that no padding is needed.
- */
-#if ALIGNMENT_SIZE > SIZEOF_VALUE
- if (size == sizeof(VALUE) && padding == sizeof(VALUE)) {
- padding = 0;
- }
-#endif
-
- return padding;
-}
-#endif /* STRICT_ALIGNMENT */
-
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;
-#ifdef STRICT_ALIGNMENT
- size_t padding = calc_padding((void *)&storage->buff[storage->pos], size);
-#else
- const size_t padding = 0; /* expected to be optimized by compiler */
-#endif /* STRICT_ALIGNMENT */
- if (storage->pos + size + padding > storage->size) {
+ if (storage->pos + size > storage->size) {
unsigned long alloc_size = storage->size * 2;
retry:
- if (alloc_size < size + PADDING_SIZE_MAX) {
+ if (alloc_size < size) {
alloc_size *= 2;
goto retry;
}
@@ -660,15 +600,8 @@ compile_data_alloc(rb_iseq_t *iseq, size_t size)
storage->pos = 0;
storage->size = alloc_size;
storage->buff = (char *)(&storage->buff + 1);
-#ifdef STRICT_ALIGNMENT
- padding = calc_padding((void *)&storage->buff[storage->pos], size);
-#endif /* STRICT_ALIGNMENT */
}
-#ifdef STRICT_ALIGNMENT
- storage->pos += (int)padding;
-#endif /* STRICT_ALIGNMENT */
-
ptr = (void *)&storage->buff[storage->pos];
storage->pos += size;
return ptr;
@@ -1003,41 +936,20 @@ new_insn_body(rb_iseq_t *iseq, int line_no, int insn_id, int argc, ...)
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)
+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);
+ INSN *iobj = 0;
+ VALUE *operands =
+ (VALUE *)compile_data_alloc(iseq, sizeof(VALUE) * 5);
+ operands[0] = id;
+ operands[1] = argc;
+ operands[2] = block;
+ operands[3] = flag;
+ operands[4] = INT2FIX(iseq->ic_size++);
+ iobj = new_insn_core(iseq, line_no, BIN(send), 5, operands);
+ return iobj;
}
static VALUE
@@ -1047,9 +959,8 @@ new_child_iseq(rb_iseq_t *iseq, NODE *node,
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);
+ ret = rb_iseq_new_with_opt(node, name, iseq_filename(iseq->self), iseq_filepath(iseq->self), INT2FIX(line_no),
+ parent, type, iseq->compile_data->option);
debugs("[new_child_iseq]< ---------------------------------------\n");
iseq_add_mark_object(iseq, ret);
return ret;
@@ -1121,17 +1032,6 @@ iseq_set_exception_local_table(rb_iseq_t *iseq)
}
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;
@@ -1185,34 +1085,52 @@ 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;
+ NODE *node_aux = node_args->nd_next;
+ NODE *node_opt = node_args->nd_opt;
ID rest_id = 0;
int last_comma = 0;
ID block_id = 0;
+ NODE *node_init = 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)));
}
+ /*
+ * new argument information:
+ * NODE_ARGS [m: int, o: NODE_OPT_ARG, ->]
+ * NODE_ARGS_AUX [r: ID, b: ID, ->]
+ * NODE_ARGS_AUX [Pst: id, Plen: int, init: NODE*]
+ * optarg information:
+ * NODE_OPT_ARGS [idx, expr, next ->]
+ * init arg:
+ * NODE_AND(m_init, p_init)
+ * if "r" is 1, it's means "{|x,|}" type block parameter.
+ */
- iseq->argc = (int)args->pre_args_num;
+ iseq->argc = (int)node_args->nd_frml;
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 (node_aux) {
+ rest_id = node_aux->nd_rest;
+ if (rest_id == 1) {
+ last_comma = 1;
+ rest_id = 0;
+ }
+ block_id = (ID)node_aux->nd_body;
+ node_aux = node_aux->nd_next;
+
+ if (node_aux) {
+ ID post_start_id = node_aux->nd_pid;
+ iseq->arg_post_start = get_dyna_var_idx_at_raw(iseq, post_start_id);
+ iseq->arg_post_len = (int)node_aux->nd_plen;
+ node_init = node_aux->nd_next;
+ }
}
- if (args->opt_args) {
- NODE *node = args->opt_args;
+ if (node_opt) {
+ NODE *node = node_opt;
LABEL *label;
VALUE labels = rb_ary_tmp_new(1);
int i = 0, j;
@@ -1234,7 +1152,7 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args)
iseq->arg_opts = i;
iseq->arg_opt_table = ALLOC_N(VALUE, i);
- MEMCPY(iseq->arg_opt_table, RARRAY_CONST_PTR(labels), VALUE, i);
+ MEMCPY(iseq->arg_opt_table, RARRAY_PTR(labels), VALUE, i);
for (j = 0; j < i; j++) {
iseq->arg_opt_table[j] &= ~1;
}
@@ -1244,53 +1162,13 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args)
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;
+ if (node_init) {
+ if (node_init->nd_1st) { /* m_init */
+ COMPILE_POPED(optargs, "init arguments (m)", node_init->nd_1st);
}
- 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;
+ if (node_init->nd_2nd) { /* p_init */
+ COMPILE_POPED(optargs, "init arguments (p)", node_init->nd_2nd);
}
- 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) {
@@ -1310,15 +1188,11 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args)
}
if (iseq->arg_opts != 0 || iseq->arg_post_len != 0 ||
- iseq->arg_rest != -1 || iseq->arg_block != -1 ||
- iseq->arg_keyword != -1) {
+ iseq->arg_rest != -1 || iseq->arg_block != -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) {
+ if (iseq->arg_block != -1) {
iseq->arg_size = iseq->arg_block + 1;
}
else if (iseq->arg_post_len) {
@@ -1340,8 +1214,7 @@ iseq_set_arguments(rb_iseq_t *iseq, LINK_ANCHOR *optargs, NODE *node_args)
}
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->arg_opts == 0 && iseq->arg_post_len == 0 && iseq->arg_rest == -1) {
if (iseq->argc == 1 && last_comma == 0) {
/* {|a|} */
iseq->arg_simple |= 0x02;
@@ -1408,7 +1281,7 @@ 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);
+ if (TYPE(a) == T_STRING) return rb_str_hash(a);
{
VALUE hval = rb_hash(a);
return (st_index_t)FIX2LONG(hval);
@@ -1420,21 +1293,6 @@ static const struct st_hash_type cdhash_type = {
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
*/
@@ -1443,8 +1301,7 @@ 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;
+ struct iseq_insn_info_entry *insn_info_table;
LINK_ELEMENT *list;
VALUE *generated_iseq;
@@ -1487,7 +1344,7 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
default:
dump_disasm_list(FIRST_ELEMENT(anchor));
dump_disasm_list(list);
- rb_compile_error(RSTRING_PTR(iseq->location.path), line,
+ rb_compile_error(RSTRING_PTR(iseq->filename), line,
"error: set_sequence");
break;
}
@@ -1496,11 +1353,9 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
/* 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); */
+ insn_info_table = ALLOC_N(struct iseq_insn_info_entry, k);
+ iseq->ic_entries = ALLOC_N(struct iseq_inline_cache_entry, iseq->ic_size);
+ MEMZERO(iseq->ic_entries, struct iseq_inline_cache_entry, iseq->ic_size);
list = FIRST_ELEMENT(anchor);
k = pos = sp = 0;
@@ -1532,11 +1387,11 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
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,
+ rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
"operand size miss! (%d for %d)",
iobj->operand_size, len - 1);
xfree(generated_iseq);
- xfree(line_info_table);
+ xfree(insn_info_table);
return 0;
}
@@ -1549,29 +1404,50 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
/* label(destination position) */
lobj = (LABEL *)operands[j];
if (!lobj->set) {
- rb_compile_error(RSTRING_PTR(iseq->location.path), iobj->line_no,
+ rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
"unknown label");
}
if (lobj->sp == -1) {
lobj->sp = sp;
}
- generated_iseq[pos + 1 + j] = lobj->position - (pos + len);
+ 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);
-
+ /*
+ * [obj, label, ...]
+ */
+ int i;
+ VALUE lits = operands[j];
+ VALUE map = rb_hash_new();
+ RHASH_TBL(map)->type = &cdhash_type;
+
+ for (i=0; i < RARRAY_LEN(lits); i+=2) {
+ VALUE obj = rb_ary_entry(lits, i);
+ VALUE lv = rb_ary_entry(lits, i+1);
+ lobj = (LABEL *)(lv & ~1);
+
+ if (!lobj->set) {
+ rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
+ "unknown label");
+ }
+ if (!st_lookup(rb_hash_tbl(map), obj, 0)) {
+ rb_hash_aset(map, obj, INT2FIX(lobj->position - (pos+len)));
+ }
+ else {
+ rb_compile_warning(RSTRING_PTR(iseq->filename), iobj->line_no,
+ "duplicated when clause is ignored");
+ }
+ }
hide_obj(map);
generated_iseq[pos + 1 + j] = map;
+ iseq_add_mark_object(iseq, map);
break;
}
case TS_LINDEX:
+ case TS_DINDEX:
case TS_NUM: /* ulong */
generated_iseq[pos + 1 + j] = FIX2INT(operands[j]);
break;
@@ -1596,25 +1472,14 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
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);
+ IC ic = &iseq->ic_entries[ic_index];
+ if (UNLIKELY(ic_index >= iseq->ic_size)) {
+ rb_bug("iseq_set_sequence: ic_index overflow: index: %d, size: %d",
+ ic_index, iseq->ic_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;
@@ -1626,19 +1491,18 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
}
break;
default:
- rb_compile_error(RSTRING_PTR(iseq->location.path), iobj->line_no,
+ rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
"unknown operand type: %c", type);
xfree(generated_iseq);
- xfree(line_info_table);
+ xfree(insn_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++;
- }
+ insn_info_table[k].line_no = iobj->line_no;
+ insn_info_table[k].position = pos;
+ insn_info_table[k].sp = sp;
pos += len;
+ k++;
break;
}
case ISEQ_ELEMENT_LABEL:
@@ -1666,21 +1530,19 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
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++;
- }
+ insn_info_table[k].line_no = adjust->line_no;
+ insn_info_table[k].position = pos;
+ insn_info_table[k].sp = sp;
+ 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++;
- }
+ insn_info_table[k].line_no = adjust->line_no;
+ insn_info_table[k].position = pos;
+ insn_info_table[k].sp = sp;
+ k++;
generated_iseq[pos++] = BIN(jump);
generated_iseq[pos++] = 0;
}
@@ -1706,12 +1568,10 @@ iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
iseq->iseq = (void *)generated_iseq;
iseq->iseq_size = pos;
+ iseq->insn_info_table = insn_info_table;
+ iseq->insn_info_size = k;
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;
}
@@ -1730,18 +1590,18 @@ label_get_sp(LABEL *lobj)
static int
iseq_set_exception_table(rb_iseq_t *iseq)
{
- const VALUE *tptr, *ptr;
+ 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);
+ tptr = RARRAY_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]);
+ ptr = RARRAY_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));
@@ -1771,7 +1631,7 @@ iseq_set_exception_table(rb_iseq_t *iseq)
}
}
- RB_OBJ_WRITE(iseq->self, &iseq->compile_data->catch_table_ary, 0); /* free */
+ iseq->compile_data->catch_table_ary = 0; /* free */
return COMPILE_OK;
}
@@ -1945,17 +1805,15 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
* send ...
* leave
* =>
- * send ..., ... | VM_CALL_TAILCALL, ...
+ * send ..., ... | VM_CALL_TAILCALL_BIT, ...
* 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;
- }
+ if (piobj->insn_id == BIN(send) &&
+ piobj->operands[2] == 0 /* block */
+ ) {
+ piobj->operands[3] = FIXNUM_OR(piobj->operands[3], VM_CALL_TAILCALL_BIT);
}
}
return COMPILE_OK;
@@ -1964,18 +1822,18 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal
static int
insn_set_specialized_instruction(rb_iseq_t *iseq, INSN *iobj, int insn_id)
{
- int old_opsize = iobj->operand_size;
+ int i, old_opsize = iobj->operand_size;
+
iobj->insn_id = insn_id;
iobj->operand_size = insn_len(insn_id) - 1;
+ /* printf("iobj->operand_size: %d\n", iobj->operand_size); */
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);
+ iobj->operands = (VALUE *)compile_data_alloc(iseq, iobj->operand_size);
+ }
+
+ for (i=0; i<iobj->operand_size; i++) {
+ iobj->operands[i] = INT2FIX(iseq->ic_size++);
}
return COMPILE_OK;
@@ -1985,50 +1843,72 @@ 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;
+ ID mid = SYM2ID(OPERAND_AT(iobj, 0));
+ int argc = FIX2INT(OPERAND_AT(iobj, 1));
+ VALUE block = OPERAND_AT(iobj, 2);
+ VALUE flag = OPERAND_AT(iobj, 3);
+
+ /* TODO: should be more sophisticated search */
+ if (block == 0 && flag == INT2FIX(0)) {
+ if (argc == 0) {
+ if (mid == idLength) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_length));
}
- 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;
+ else if (mid == idSize) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_size));
}
- break;
- case 2:
- switch (ci->mid) {
- case idASET: SP_INSN(aset); return COMPILE_OK;
+ else if (mid == idSucc) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_succ));
+ }
+ else if (mid == idNot) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_not));
+ }
+ }
+ else if (argc == 1) {
+ if (0) {
+ }
+ else if (mid == idPLUS) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_plus));
+ }
+ else if (mid == idMINUS) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_minus));
+ }
+ else if (mid == idMULT) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_mult));
+ }
+ else if (mid == idDIV) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_div));
+ }
+ else if (mid == idMOD) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_mod));
+ }
+ else if (mid == idEq) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_eq));
+ }
+ else if (mid == idNeq) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_neq));
+ }
+ else if (mid == idLT) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_lt));
+ }
+ else if (mid == idLE) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_le));
+ }
+ else if (mid == idGT) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_gt));
+ }
+ else if (mid == idGE) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_ge));
+ }
+ else if (mid == idLTLT) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_ltlt));
+ }
+ else if (mid == idAREF) {
+ insn_set_specialized_instruction(iseq, iobj, BIN(opt_aref));
}
- break;
}
- }
- if (ci->flag & VM_CALL_ARGS_SKIP_SETUP) {
- iobj->insn_id = BIN(opt_send_simple);
}
}
-#undef SP_INSN
-
return COMPILE_OK;
}
@@ -2177,7 +2057,7 @@ insn_set_sc_state(rb_iseq_t *iseq, INSN *iobj, int state)
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,
+ rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
"insn_set_sc_state error\n");
return 0;
}
@@ -2279,7 +2159,7 @@ iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
case SCS_XX:
goto normal_insn;
default:
- rb_compile_error(RSTRING_PTR(iseq->location.path), iobj->line_no,
+ rb_compile_error(RSTRING_PTR(iseq->filename), iobj->line_no,
"unreachable");
}
/* remove useless pop */
@@ -2310,8 +2190,10 @@ iseq_set_sequence_stackcaching(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
return COMPILE_OK;
}
+
+
static int
-compile_dstr_fragments(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int *cntp)
+compile_dstr_fragments(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int *cntp)
{
NODE *list = node->nd_next;
VALUE lit = node->nd_lit;
@@ -2319,21 +2201,13 @@ compile_dstr_fragments(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE *node, int *cntp)
debugp_param("nd_lit", lit);
if (!NIL_P(lit)) {
+ hide_obj(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);
- }
+ COMPILE(ret, "each string", list->nd_head);
cnt++;
list = list->nd_next;
}
@@ -2405,164 +2279,65 @@ compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * cond,
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)
+ VALUE opt_p, 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;
+ int len = (int)node->nd_alen, line = (int)nd_line(node), i=0;
+ DECL_ANCHOR(anchor);
+ INIT_ANCHOR(anchor);
+ if (nd_type(node) != NODE_ZARRAY) {
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 (nd_type(node) != NODE_ARRAY) {
+ rb_bug("compile_array: This node is not NODE_ARRAY, but %s",
+ ruby_node_name(nd_type(node)));
}
- 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));
- }
- }
- }
+ i++;
+ if (opt_p && nd_type(node->nd_head) != NODE_LIT) {
+ opt_p = Qfalse;
}
- else {
- if (!poped) {
- switch (type) {
- case COMPILE_ARRAY_TYPE_ARRAY:
- ADD_INSN1(anchor, line, newarray, INT2FIX(i));
+ COMPILE_(anchor, "array element", node->nd_head, poped);
+ node = node->nd_next;
+ }
+ }
- if (first) {
- first = 0;
- }
- else {
- ADD_INSN(anchor, line, concatarray);
- }
+ if (len != i) {
+ if (0) {
+ rb_bug("node error: compile_array (%d: %d-%d)",
+ (int)nd_line(node_root), len, i);
+ }
+ len = i;
+ }
- 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);
- }
+ if (opt_p == Qtrue) {
+ if (!poped) {
+ VALUE ary = rb_ary_tmp_new(len);
+ node = node_root;
+ while (node) {
+ rb_ary_push(ary, node->nd_head->nd_lit);
+ node = node->nd_next;
}
+ OBJ_FREEZE(ary);
+ iseq_add_mark_object_compile_time(iseq, ary);
+ ADD_INSN1(ret, nd_line(node_root), duparray, ary);
}
}
+ else {
+ if (!poped) {
+ ADD_INSN1(anchor, line, newarray, INT2FIX(len));
+ }
+ 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)
+compile_array(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE* node_root, VALUE opt_p)
{
- return compile_array_(iseq, ret, node_root, type, 0);
+ return compile_array_(iseq, ret, node_root, opt_p, 0);
}
static VALUE
@@ -2572,7 +2347,7 @@ case_when_optimizable_literal(NODE * node)
case NODE_LIT: {
VALUE v = node->nd_lit;
double ival;
- if (RB_TYPE_P(v, T_FLOAT) &&
+ if (TYPE(v) == T_FLOAT &&
modf(RFLOAT_VALUE(v), &ival) == 0.0) {
return FIXABLE(ival) ? LONG2FIX((long)ival) : rb_dbl2big(ival);
}
@@ -2582,46 +2357,43 @@ case_when_optimizable_literal(NODE * node)
break;
}
case NODE_STR:
- return node->nd_lit = rb_fstring(node->nd_lit);
+ return node->nd_lit;
}
- return Qundef;
+ return Qfalse;
}
-static int
-when_vals(rb_iseq_t *iseq, LINK_ANCHOR *cond_seq, NODE *vals, LABEL *l1, int only_special_literals, VALUE literals)
+static VALUE
+when_vals(rb_iseq_t *iseq, LINK_ANCHOR *cond_seq, NODE *vals, LABEL *l1, VALUE special_literals)
{
while (vals) {
- NODE* val = vals->nd_head;
- VALUE lit = case_when_optimizable_literal(val);
+ VALUE lit;
+ NODE* val;
+
+ val = vals->nd_head;
- if (lit == Qundef) {
- only_special_literals = 0;
+ if (special_literals &&
+ (lit = case_when_optimizable_literal(val)) != Qfalse) {
+ rb_ary_push(special_literals, lit);
+ rb_ary_push(special_literals, (VALUE)(l1) | 1);
}
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);
- }
+ special_literals = Qfalse;
}
- 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);
+ OBJ_FREEZE(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_INSN1(cond_seq, nd_line(val), topn, INT2FIX(1));
+ ADD_SEND(cond_seq, nd_line(val), ID2SYM(idEqq), INT2FIX(1));
ADD_INSNL(cond_seq, nd_line(val), branchif, l1);
vals = vals->nd_next;
}
- return only_special_literals;
+ return special_literals;
}
static int
@@ -2630,16 +2402,15 @@ 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);
+
+ dupidx = iobj->operands[1];
+ dupidx = FIXNUM_INC(dupidx, 1);
+ iobj->operands[1] = dupidx;
ADD_INSN1(ret, nd_line(node), topn, dupidx);
ADD_ELEM(ret, (LINK_ELEMENT *)iobj);
@@ -2852,23 +2623,23 @@ static int
defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret,
NODE *node, LABEL **lfinish, VALUE needstr)
{
- enum defined_type expr_type = 0;
+ const char *estr = 0;
enum node_type type;
switch (type = nd_type(node)) {
/* easy literals */
case NODE_NIL:
- expr_type = DEFINED_NIL;
+ estr = "nil";
break;
case NODE_SELF:
- expr_type = DEFINED_SELF;
+ estr = "self";
break;
case NODE_TRUE:
- expr_type = DEFINED_TRUE;
+ estr = "true";
break;
case NODE_FALSE:
- expr_type = DEFINED_FALSE;
+ estr = "false";
break;
case NODE_ARRAY:{
@@ -2889,13 +2660,13 @@ defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret,
case NODE_AND:
case NODE_OR:
default:
- expr_type = DEFINED_EXPR;
+ estr = "expression";
break;
/* variables */
case NODE_LVAR:
case NODE_DVAR:
- expr_type = DEFINED_LVAR;
+ estr = "local-variable";
break;
case NODE_IVAR:
@@ -3017,14 +2788,16 @@ defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret,
case NODE_CDECL:
case NODE_CVDECL:
case NODE_CVASGN:
- expr_type = DEFINED_ASGN;
+ estr = "assignment";
break;
}
- if (expr_type) {
+ if (estr != 0) {
if (needstr != Qfalse) {
- VALUE str = rb_iseq_defined_string(expr_type);
- ADD_INSN1(ret, nd_line(node), putobject, str);
+ VALUE str = rb_str_new2(estr);
+ hide_obj(str);
+ ADD_INSN1(ret, nd_line(node), putstring, str);
+ iseq_add_mark_object_compile_time(iseq, str);
}
else {
ADD_INSN1(ret, nd_line(node), putobject, Qtrue);
@@ -3048,7 +2821,7 @@ defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *ret,
VALUE rescue = NEW_CHILD_ISEQVAL(NEW_NIL(),
rb_str_concat(rb_str_new2
("defined guard in "),
- iseq->location.label),
+ iseq->name),
ISEQ_TYPE_DEFINED_GUARD, 0);
APPEND_LABEL(ret, lcur, lstart);
ADD_LABEL(ret, lend);
@@ -3075,10 +2848,10 @@ make_name_for_block(rb_iseq_t *iseq)
}
if (level == 1) {
- return rb_sprintf("block in %"PRIsVALUE, ip->location.label);
+ return rb_sprintf("block in %s", RSTRING_PTR(ip->name));
}
else {
- return rb_sprintf("block (%d levels) in %"PRIsVALUE, level, ip->location.label);
+ return rb_sprintf("block (%d levels) in %s", level, RSTRING_PTR(ip->name));
}
}
@@ -3158,7 +2931,7 @@ setup_args(rb_iseq_t *iseq, LINK_ANCHOR *args, NODE *argn, VALUE *flag)
INIT_ANCHOR(args_splat);
if (argn && nd_type(argn) == NODE_BLOCK_PASS) {
COMPILE(arg_block, "block", argn->nd_body);
- *flag |= VM_CALL_ARGS_BLOCKARG;
+ *flag |= VM_CALL_ARGS_BLOCKARG_BIT;
argn = argn->nd_head;
}
@@ -3169,7 +2942,7 @@ setup_args(rb_iseq_t *iseq, LINK_ANCHOR *args, NODE *argn, VALUE *flag)
COMPILE(args, "args (splat)", argn->nd_head);
argc = INT2FIX(1);
nsplat++;
- *flag |= VM_CALL_ARGS_SPLAT;
+ *flag |= VM_CALL_ARGS_SPLAT_BIT;
break;
}
case NODE_ARGSCAT:
@@ -3192,10 +2965,11 @@ setup_args(rb_iseq_t *iseq, LINK_ANCHOR *args, NODE *argn, VALUE *flag)
}
INSERT_LIST(args_splat, tmp);
nsplat++;
- *flag |= VM_CALL_ARGS_SPLAT;
+ *flag |= VM_CALL_ARGS_SPLAT_BIT;
if (next_is_array) {
- argc = INT2FIX(compile_array(iseq, args, argn->nd_head, COMPILE_ARRAY_TYPE_ARGS) + 1);
+ argc = INT2FIX(compile_array(iseq, args, argn->nd_head, Qfalse) + 1);
+ POP_ELEMENT(args);
}
else {
argn = argn->nd_head;
@@ -3204,7 +2978,8 @@ setup_args(rb_iseq_t *iseq, LINK_ANCHOR *args, NODE *argn, VALUE *flag)
break;
}
case NODE_ARRAY: {
- argc = INT2FIX(compile_array(iseq, args, argn, COMPILE_ARRAY_TYPE_ARGS));
+ argc = INT2FIX(compile_array(iseq, args, argn, Qfalse));
+ POP_ELEMENT(args);
break;
}
default: {
@@ -3224,23 +2999,12 @@ setup_args(rb_iseq_t *iseq, LINK_ANCHOR *args, NODE *argn, VALUE *flag)
ADD_SEQ(args, args_splat);
}
- if (*flag & VM_CALL_ARGS_BLOCKARG) {
+ if (*flag & VM_CALL_ARGS_BLOCKARG_BIT) {
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
@@ -3253,8 +3017,6 @@ 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) {
@@ -3264,14 +3026,13 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
return COMPILE_OK;
}
- iseq->compile_data->last_line = line = (int)nd_line(node);
+ iseq->compile_data->last_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;
+ ADD_TRACE(ret, nd_line(node), RUBY_EVENT_LINE);
}
switch (type) {
@@ -3295,9 +3056,9 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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);
+ then_label = NEW_LABEL(nd_line(node));
+ else_label = NEW_LABEL(nd_line(node));
+ end_label = NEW_LABEL(nd_line(node));
compile_branch_condition(iseq, cond_seq, node->nd_cond,
then_label, else_label);
@@ -3308,7 +3069,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
ADD_LABEL(ret, then_label);
ADD_SEQ(ret, then_seq);
- ADD_INSNL(ret, line, jump, end_label);
+ ADD_INSNL(ret, nd_line(node), jump, end_label);
ADD_LABEL(ret, else_label);
ADD_SEQ(ret, else_seq);
@@ -3324,15 +3085,11 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
DECL_ANCHOR(head);
DECL_ANCHOR(body_seq);
DECL_ANCHOR(cond_seq);
- int only_special_literals = 1;
- VALUE literals = rb_hash_new();
+ VALUE special_literals = rb_ary_tmp_new(1);
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;
@@ -3341,39 +3098,37 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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);
+ endlabel = NEW_LABEL(nd_line(node));
+ elselabel = NEW_LABEL(nd_line(node));
ADD_SEQ(ret, head); /* case VAL */
while (type == NODE_WHEN) {
LABEL *l1;
- l1 = NEW_LABEL(line);
+ l1 = NEW_LABEL(nd_line(node));
ADD_LABEL(body_seq, l1);
- ADD_INSN(body_seq, line, pop);
+ ADD_INSN(body_seq, nd_line(node), pop);
COMPILE_(body_seq, "when body", node->nd_body, poped);
- ADD_INSNL(body_seq, line, jump, endlabel);
+ ADD_INSNL(body_seq, nd_line(node), 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);
+ special_literals = when_vals(iseq, cond_seq, vals, l1, special_literals);
break;
case NODE_SPLAT:
case NODE_ARGSCAT:
case NODE_ARGSPUSH:
- only_special_literals = 0;
- ADD_INSN (cond_seq, nd_line(vals), dup);
+ special_literals = 0;
COMPILE(cond_seq, "when/cond splat", vals);
- ADD_INSN1(cond_seq, nd_line(vals), checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE | VM_CHECKMATCH_ARRAY));
+ ADD_INSN1(cond_seq, nd_line(vals), checkincludearray, Qtrue);
ADD_INSNL(cond_seq, nd_line(vals), branchif, l1);
break;
default:
@@ -3390,14 +3145,13 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
break;
}
type = nd_type(node);
- line = nd_line(node);
}
/* else */
if (node) {
ADD_LABEL(cond_seq, elselabel);
- ADD_INSN(cond_seq, line, pop);
+ ADD_INSN(cond_seq, nd_line(node), pop);
COMPILE_(cond_seq, "else", node, poped);
- ADD_INSNL(cond_seq, line, jump, endlabel);
+ ADD_INSNL(cond_seq, nd_line(node), jump, endlabel);
}
else {
debugs("== else (implicit)\n");
@@ -3409,11 +3163,11 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
ADD_INSNL(cond_seq, nd_line(tempnode), jump, endlabel);
}
- if (only_special_literals) {
- iseq_add_mark_object(iseq, literals);
-
+ if (special_literals) {
ADD_INSN(ret, nd_line(tempnode), dup);
- ADD_INSN2(ret, nd_line(tempnode), opt_case_dispatch, literals, elselabel);
+ ADD_INSN2(ret, nd_line(tempnode), opt_case_dispatch,
+ special_literals, elselabel);
+ iseq_add_mark_object_compile_time(iseq, special_literals);
}
ADD_SEQ(ret, cond_seq);
@@ -3429,13 +3183,13 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
DECL_ANCHOR(body_seq);
INIT_ANCHOR(body_seq);
- endlabel = NEW_LABEL(line);
+ endlabel = NEW_LABEL(nd_line(node));
while (node && nd_type(node) == NODE_WHEN) {
- LABEL *l1 = NEW_LABEL(line = nd_line(node));
+ LABEL *l1 = NEW_LABEL(nd_line(node));
ADD_LABEL(body_seq, l1);
COMPILE_(body_seq, "when", node->nd_body, poped);
- ADD_INSNL(body_seq, line, jump, endlabel);
+ ADD_INSNL(body_seq, nd_line(node), jump, endlabel);
vals = node->nd_head;
if (!vals) {
@@ -3455,7 +3209,8 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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_INSN1(ret, nd_line(vals), checkincludearray, Qfalse);
+ ADD_INSN(ret, nd_line(vals), pop);
ADD_INSNL(ret, nd_line(vals), branchif, l1);
break;
default:
@@ -3483,28 +3238,28 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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_label = iseq->compile_data->start_label = NEW_LABEL(nd_line(node)); /* next */
+ LABEL *redo_label = iseq->compile_data->redo_label = NEW_LABEL(nd_line(node)); /* redo */
+ LABEL *break_label = iseq->compile_data->end_label = NEW_LABEL(nd_line(node)); /* break */
+ LABEL *end_label = NEW_LABEL(nd_line(node));
- LABEL *next_catch_label = NEW_LABEL(line);
+ LABEL *next_catch_label = NEW_LABEL(nd_line(node));
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);
+ ADD_INSNL(ret, nd_line(node), jump, next_label);
}
else {
- tmp_label = NEW_LABEL(line);
- ADD_INSNL(ret, line, jump, tmp_label);
+ tmp_label = NEW_LABEL(nd_line(node));
+ ADD_INSNL(ret, nd_line(node), jump, tmp_label);
}
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), putnil);
ADD_LABEL(ret, next_catch_label);
- ADD_INSN(ret, line, pop);
- ADD_INSNL(ret, line, jump, next_label);
+ ADD_INSN(ret, nd_line(node), pop);
+ ADD_INSNL(ret, nd_line(node), jump, next_label);
if (tmp_label) ADD_LABEL(ret, tmp_label);
ADD_LABEL(ret, redo_label);
@@ -3516,31 +3271,31 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
redo_label, end_label);
}
else if (type == NODE_UNTIL) {
- /* until */
+ /* untile */
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);
+ ADD_CALL_RECEIVER(ret, nd_line(node));
+ ADD_CALL(ret, nd_line(node), ID2SYM(idGets), INT2FIX(0));
+ ADD_INSNL(ret, nd_line(node), branchif, redo_label);
/* opt_n */
}
ADD_LABEL(ret, end_label);
if (node->nd_state == Qundef) {
- /* ADD_INSN(ret, line, putundef); */
+ /* ADD_INSN(ret, nd_line(node), putundef); */
rb_bug("unsupported: putundef");
}
else {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), putnil);
}
ADD_LABEL(ret, break_label); /* break */
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
ADD_CATCH_ENTRY(CATCH_TYPE_BREAK, redo_label, break_label,
@@ -3560,8 +3315,9 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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);
+ LABEL *retry_label = NEW_LABEL(nd_line(node));
+ LABEL *retry_end_l = NEW_LABEL(nd_line(node));
+ ID mid = 0;
ADD_LABEL(ret, retry_label);
if (nd_type(node) == NODE_FOR) {
@@ -3569,21 +3325,22 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
iseq->compile_data->current_block =
NEW_CHILD_ISEQVAL(node->nd_body, make_name_for_block(iseq),
- ISEQ_TYPE_BLOCK, line);
+ ISEQ_TYPE_BLOCK, nd_line(node));
- ADD_SEND_R(ret, line, ID2SYM(idEach), INT2FIX(0),
+ mid = idEach;
+ ADD_SEND_R(ret, nd_line(node), 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);
+ ISEQ_TYPE_BLOCK, nd_line(node));
COMPILE(ret, "iter caller", node->nd_iter);
}
ADD_LABEL(ret, retry_end_l);
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
iseq->compile_data->current_block = prevblock;
@@ -3599,23 +3356,23 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
/* while/until */
LABEL *splabel = NEW_LABEL(0);
ADD_LABEL(ret, splabel);
- ADD_ADJUST(ret, line, iseq->compile_data->redo_label);
+ ADD_ADJUST(ret, nd_line(node), 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_INSNL(ret, nd_line(node), jump, iseq->compile_data->end_label);
ADD_ADJUST_RESTORE(ret, splabel);
if (!poped) {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), 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 */ );
+ ADD_INSN1(ret, nd_line(node), throw, INT2FIX(level | 0x02) /* TAG_BREAK */ );
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
}
else if (iseq->type == ISEQ_TYPE_EVAL) {
@@ -3662,25 +3419,25 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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(ret, nd_line(node), iseq->compile_data->redo_label);
+ ADD_INSNL(ret, nd_line(node), jump, iseq->compile_data->start_label);
ADD_ADJUST_RESTORE(ret, splabel);
if (!poped) {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), 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);
+ ADD_ADJUST(ret, nd_line(node), 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_INSNL(ret, nd_line(node), jump, iseq->compile_data->end_label);
ADD_ADJUST_RESTORE(ret, splabel);
if (!poped) {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), putnil);
}
}
else if (iseq->type == ISEQ_TYPE_EVAL) {
@@ -3712,10 +3469,10 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
}
if (ip != 0) {
COMPILE(ret, "next val", node->nd_stts);
- ADD_INSN1(ret, line, throw, INT2FIX(level | 0x03) /* TAG_NEXT */ );
+ ADD_INSN1(ret, nd_line(node), throw, INT2FIX(level | 0x03) /* TAG_NEXT */ );
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
}
else {
@@ -3729,12 +3486,12 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
LABEL *splabel = NEW_LABEL(0);
debugs("redo in while");
ADD_LABEL(ret, splabel);
- ADD_ADJUST(ret, line, iseq->compile_data->redo_label);
+ ADD_ADJUST(ret, nd_line(node), iseq->compile_data->redo_label);
add_ensure_iseq(ret, iseq, 0);
- ADD_INSNL(ret, line, jump, iseq->compile_data->redo_label);
+ ADD_INSNL(ret, nd_line(node), jump, iseq->compile_data->redo_label);
ADD_ADJUST_RESTORE(ret, splabel);
if (!poped) {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), putnil);
}
}
else if (iseq->type == ISEQ_TYPE_EVAL) {
@@ -3747,12 +3504,12 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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(ret, nd_line(node), iseq->compile_data->start_label);
+ ADD_INSNL(ret, nd_line(node), jump, iseq->compile_data->start_label);
ADD_ADJUST_RESTORE(ret, splabel);
if (!poped) {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), putnil);
}
}
else {
@@ -3779,11 +3536,11 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
ip = ip->parent_iseq;
}
if (ip != 0) {
- ADD_INSN(ret, line, putnil);
- ADD_INSN1(ret, line, throw, INT2FIX(level | 0x05) /* TAG_REDO */ );
+ ADD_INSN(ret, nd_line(node), putnil);
+ ADD_INSN1(ret, nd_line(node), throw, INT2FIX(level | 0x05) /* TAG_REDO */ );
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
}
else {
@@ -3794,11 +3551,11 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
}
case NODE_RETRY:{
if (iseq->type == ISEQ_TYPE_RESCUE) {
- ADD_INSN(ret, line, putnil);
- ADD_INSN1(ret, line, throw, INT2FIX(0x04) /* TAG_RETRY */ );
+ ADD_INSN(ret, nd_line(node), putnil);
+ ADD_INSN1(ret, nd_line(node), throw, INT2FIX(0x04) /* TAG_RETRY */ );
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
}
else {
@@ -3811,26 +3568,26 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
break;
}
case NODE_RESCUE:{
- LABEL *lstart = NEW_LABEL(line);
- LABEL *lend = NEW_LABEL(line);
- LABEL *lcont = NEW_LABEL(line);
+ LABEL *lstart = NEW_LABEL(nd_line(node));
+ LABEL *lend = NEW_LABEL(nd_line(node));
+ LABEL *lcont = NEW_LABEL(nd_line(node));
VALUE rescue = NEW_CHILD_ISEQVAL(
node->nd_resq,
- rb_str_concat(rb_str_new2("rescue in "), iseq->location.label),
- ISEQ_TYPE_RESCUE, line);
+ rb_str_concat(rb_str_new2("rescue in "), iseq->name),
+ ISEQ_TYPE_RESCUE, nd_line(node));
ADD_LABEL(ret, lstart);
COMPILE(ret, "rescue head", node->nd_head);
ADD_LABEL(ret, lend);
if (node->nd_else) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
COMPILE(ret, "rescue else", node->nd_else);
}
- ADD_INSN(ret, line, nop);
+ ADD_INSN(ret, nd_line(node), nop);
ADD_LABEL(ret, lcont);
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
/* register catch entry */
@@ -3844,28 +3601,30 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
LABEL *label_miss, *label_hit;
while (resq) {
- label_miss = NEW_LABEL(line);
- label_hit = NEW_LABEL(line);
+ label_miss = NEW_LABEL(nd_line(node));
+ label_hit = NEW_LABEL(nd_line(node));
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);
+ ADD_INSN2(ret, nd_line(node), getdynamic, INT2FIX(2), INT2FIX(0));
+ ADD_SEND(ret, nd_line(node), ID2SYM(idEqq), INT2FIX(1));
+ ADD_INSNL(ret, nd_line(node), 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));
+ ADD_INSN2(ret, nd_line(node), getdynamic, 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);
+ ADD_INSN1(ret, nd_line(node), checkincludearray, Qtrue);
+ ADD_INSN(ret, nd_line(node), swap);
+ ADD_INSN(ret, nd_line(node), pop);
+ ADD_INSNL(ret, nd_line(node), branchif, label_hit);
break;
default:
rb_bug("NODE_RESBODY: unknown node (%s)",
@@ -3873,18 +3632,19 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
}
}
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_INSN1(ret, nd_line(node), putobject,
+ rb_eStandardError);
+ ADD_INSN2(ret, nd_line(node), getdynamic, INT2FIX(2), INT2FIX(0));
+ ADD_SEND(ret, nd_line(node), ID2SYM(idEqq), INT2FIX(1));
+ ADD_INSNL(ret, nd_line(node), branchif, label_hit);
}
- ADD_INSNL(ret, line, jump, label_miss);
+ ADD_INSNL(ret, nd_line(node), 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, nd_line(node), nop);
}
- ADD_INSN(ret, line, leave);
+ ADD_INSN(ret, nd_line(node), leave);
ADD_LABEL(ret, label_miss);
resq = resq->nd_head;
}
@@ -3895,11 +3655,11 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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);
+ iseq->name),
+ ISEQ_TYPE_ENSURE, nd_line(node));
+ LABEL *lstart = NEW_LABEL(nd_line(node));
+ LABEL *lend = NEW_LABEL(nd_line(node));
+ LABEL *lcont = NEW_LABEL(nd_line(node));
struct ensure_range er;
struct iseq_compile_data_ensure_node_stack enl;
struct ensure_range *erange;
@@ -3916,7 +3676,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
COMPILE_(ret, "ensure head", node->nd_head, poped);
ADD_LABEL(ret, lend);
if (ensr->anchor.next == 0) {
- ADD_INSN(ret, line, nop);
+ ADD_INSN(ret, nd_line(node), nop);
}
else {
ADD_SEQ(ret, ensr);
@@ -3936,19 +3696,19 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
case NODE_AND:
case NODE_OR:{
- LABEL *end_label = NEW_LABEL(line);
+ LABEL *end_label = NEW_LABEL(nd_line(node));
COMPILE(ret, "nd_1st", node->nd_1st);
if (!poped) {
- ADD_INSN(ret, line, dup);
+ ADD_INSN(ret, nd_line(node), dup);
}
if (type == NODE_AND) {
- ADD_INSNL(ret, line, branchunless, end_label);
+ ADD_INSNL(ret, nd_line(node), branchunless, end_label);
}
else {
- ADD_INSNL(ret, line, branchif, end_label);
+ ADD_INSNL(ret, nd_line(node), branchif, end_label);
}
if (!poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
COMPILE_(ret, "nd_2nd", node->nd_2nd, poped);
ADD_LABEL(ret, end_label);
@@ -3968,9 +3728,9 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
COMPILE(ret, "rvalue", node->nd_value);
if (!poped) {
- ADD_INSN(ret, line, dup);
+ ADD_INSN(ret, nd_line(node), dup);
}
- ADD_INSN2(ret, line, setlocal, INT2FIX(idx), INT2FIX(get_lvar_level(iseq)));
+ ADD_INSN1(ret, nd_line(node), setlocal, INT2FIX(idx));
break;
}
@@ -3981,7 +3741,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
debugp_param("dassn id", rb_str_new2(rb_id2name(node->nd_vid) ? rb_id2name(node->nd_vid) : "*"));
if (!poped) {
- ADD_INSN(ret, line, dup);
+ ADD_INSN(ret, nd_line(node), dup);
}
idx = get_dyna_var_idx(iseq, node->nd_vid, &lv, &ls);
@@ -3990,16 +3750,17 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
rb_bug("NODE_DASGN(_CURR): unknown id (%s)", rb_id2name(node->nd_vid));
}
- ADD_INSN2(ret, line, setlocal, INT2FIX(ls - idx), INT2FIX(lv));
+ ADD_INSN2(ret, nd_line(node), setdynamic,
+ INT2FIX(ls - idx), INT2FIX(lv));
break;
}
case NODE_GASGN:{
COMPILE(ret, "lvalue", node->nd_value);
if (!poped) {
- ADD_INSN(ret, line, dup);
+ ADD_INSN(ret, nd_line(node), dup);
}
- ADD_INSN1(ret, line, setglobal,
+ ADD_INSN1(ret, nd_line(node), setglobal,
((VALUE)node->nd_entry | 1));
break;
}
@@ -4007,36 +3768,36 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
case NODE_IASGN2:{
COMPILE(ret, "lvalue", node->nd_value);
if (!poped) {
- ADD_INSN(ret, line, dup);
+ ADD_INSN(ret, nd_line(node), dup);
}
- ADD_INSN2(ret, line, setinstancevariable,
- ID2SYM(node->nd_vid), INT2FIX(iseq->is_size++));
+ ADD_INSN2(ret, nd_line(node), setinstancevariable,
+ ID2SYM(node->nd_vid), INT2FIX(iseq->ic_size++));
break;
}
case NODE_CDECL:{
COMPILE(ret, "lvalue", node->nd_value);
if (!poped) {
- ADD_INSN(ret, line, dup);
+ ADD_INSN(ret, nd_line(node), dup);
}
if (node->nd_vid) {
- ADD_INSN1(ret, line, putspecialobject,
+ ADD_INSN1(ret, nd_line(node), putspecialobject,
INT2FIX(VM_SPECIAL_OBJECT_CONST_BASE));
- ADD_INSN1(ret, line, setconstant, ID2SYM(node->nd_vid));
+ ADD_INSN1(ret, nd_line(node), setconstant, ID2SYM(node->nd_vid));
}
else {
compile_cpath(ret, iseq, node->nd_else);
- ADD_INSN1(ret, line, setconstant, ID2SYM(node->nd_else->nd_mid));
+ ADD_INSN1(ret, nd_line(node), 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_INSN(ret, nd_line(node), dup);
}
- ADD_INSN1(ret, line, setclassvariable,
+ ADD_INSN1(ret, nd_line(node), setclassvariable,
ID2SYM(node->nd_vid));
break;
}
@@ -4071,7 +3832,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
*/
if (!poped) {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), putnil);
}
COMPILE(ret, "NODE_OP_ASGN1 recv", node->nd_recv);
switch (nd_type(node->nd_args->nd_head)) {
@@ -4085,8 +3846,8 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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));
+ ADD_INSN1(ret, nd_line(node), dupn, FIXNUM_INC(argc, 1 + boff));
+ ADD_SEND_R(ret, nd_line(node), ID2SYM(idAREF), argc, Qfalse, LONG2FIX(flag));
if (id == 0 || id == 1) {
/* 0: or, 1: and
@@ -4098,92 +3859,92 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
nil
end
*/
- LABEL *label = NEW_LABEL(line);
- LABEL *lfin = NEW_LABEL(line);
+ LABEL *label = NEW_LABEL(nd_line(node));
+ LABEL *lfin = NEW_LABEL(nd_line(node));
- ADD_INSN(ret, line, dup);
+ ADD_INSN(ret, nd_line(node), dup);
if (id == 0) {
/* or */
- ADD_INSNL(ret, line, branchif, label);
+ ADD_INSNL(ret, nd_line(node), branchif, label);
}
else {
/* and */
- ADD_INSNL(ret, line, branchunless, label);
+ ADD_INSNL(ret, nd_line(node), branchunless, label);
}
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), 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));
+ ADD_INSN1(ret, nd_line(node), setn, FIXNUM_INC(argc, 2+boff));
}
- if (flag & VM_CALL_ARGS_SPLAT) {
- ADD_INSN1(ret, line, newarray, INT2FIX(1));
+ if (flag & VM_CALL_ARGS_SPLAT_BIT) {
+ ADD_INSN1(ret, nd_line(node), newarray, INT2FIX(1));
if (boff > 0) {
- ADD_INSN1(ret, line, dupn, INT2FIX(3));
- ADD_INSN(ret, line, swap);
- ADD_INSN(ret, line, pop);
+ ADD_INSN1(ret, nd_line(node), dupn, INT2FIX(3));
+ ADD_INSN(ret, nd_line(node), swap);
+ ADD_INSN(ret, nd_line(node), pop);
}
- ADD_INSN(ret, line, concatarray);
+ ADD_INSN(ret, nd_line(node), concatarray);
if (boff > 0) {
- ADD_INSN1(ret, line, setn, INT2FIX(3));
- ADD_INSN(ret, line, pop);
- ADD_INSN(ret, line, pop);
+ ADD_INSN1(ret, nd_line(node), setn, INT2FIX(3));
+ ADD_INSN(ret, nd_line(node), pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
- ADD_SEND_R(ret, line, ID2SYM(idASET),
+ ADD_SEND_R(ret, nd_line(node), ID2SYM(idASET),
argc, Qfalse, LONG2FIX(flag));
}
else {
if (boff > 0)
- ADD_INSN(ret, line, swap);
- ADD_SEND_R(ret, line, ID2SYM(idASET),
+ ADD_INSN(ret, nd_line(node), swap);
+ ADD_SEND_R(ret, nd_line(node), ID2SYM(idASET),
FIXNUM_INC(argc, 1), Qfalse, LONG2FIX(flag));
}
- ADD_INSN(ret, line, pop);
- ADD_INSNL(ret, line, jump, lfin);
+ ADD_INSN(ret, nd_line(node), pop);
+ ADD_INSNL(ret, nd_line(node), jump, lfin);
ADD_LABEL(ret, label);
if (!poped) {
- ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 2+boff));
+ ADD_INSN1(ret, nd_line(node), setn, FIXNUM_INC(argc, 2+boff));
}
- ADD_INSN1(ret, line, adjuststack, FIXNUM_INC(argc, 2+boff));
+ ADD_INSN1(ret, nd_line(node), 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));
+ ADD_SEND(ret, nd_line(node), ID2SYM(id), INT2FIX(1));
if (!poped) {
- ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 2+boff));
+ ADD_INSN1(ret, nd_line(node), setn, FIXNUM_INC(argc, 2+boff));
}
- if (flag & VM_CALL_ARGS_SPLAT) {
- ADD_INSN1(ret, line, newarray, INT2FIX(1));
+ if (flag & VM_CALL_ARGS_SPLAT_BIT) {
+ ADD_INSN1(ret, nd_line(node), newarray, INT2FIX(1));
if (boff > 0) {
- ADD_INSN1(ret, line, dupn, INT2FIX(3));
- ADD_INSN(ret, line, swap);
- ADD_INSN(ret, line, pop);
+ ADD_INSN1(ret, nd_line(node), dupn, INT2FIX(3));
+ ADD_INSN(ret, nd_line(node), swap);
+ ADD_INSN(ret, nd_line(node), pop);
}
- ADD_INSN(ret, line, concatarray);
+ ADD_INSN(ret, nd_line(node), concatarray);
if (boff > 0) {
- ADD_INSN1(ret, line, setn, INT2FIX(3));
- ADD_INSN(ret, line, pop);
- ADD_INSN(ret, line, pop);
+ ADD_INSN1(ret, nd_line(node), setn, INT2FIX(3));
+ ADD_INSN(ret, nd_line(node), pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
- ADD_SEND_R(ret, line, ID2SYM(idASET),
+ ADD_SEND_R(ret, nd_line(node), ID2SYM(idASET),
argc, Qfalse, LONG2FIX(flag));
}
else {
if (boff > 0)
- ADD_INSN(ret, line, swap);
- ADD_SEND_R(ret, line, ID2SYM(idASET),
+ ADD_INSN(ret, nd_line(node), swap);
+ ADD_SEND_R(ret, nd_line(node), ID2SYM(idASET),
FIXNUM_INC(argc, 1), Qfalse, LONG2FIX(flag));
}
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_OP_ASGN2:{
ID atype = node->nd_next->nd_mid;
- LABEL *lfin = NEW_LABEL(line);
- LABEL *lcfin = NEW_LABEL(line);
+ LABEL *lfin = NEW_LABEL(nd_line(node));
+ LABEL *lcfin = NEW_LABEL(nd_line(node));
/*
class C; attr_accessor :c; end
r = C.new
@@ -4227,121 +3988,53 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
*/
COMPILE(ret, "NODE_OP_ASGN2#recv", node->nd_recv);
- ADD_INSN(ret, line, dup);
- ADD_SEND(ret, line, ID2SYM(node->nd_next->nd_vid),
+ ADD_INSN(ret, nd_line(node), dup);
+ ADD_SEND(ret, nd_line(node), ID2SYM(node->nd_next->nd_vid),
INT2FIX(0));
if (atype == 0 || atype == 1) { /* 0: OR or 1: AND */
- ADD_INSN(ret, line, dup);
+ ADD_INSN(ret, nd_line(node), dup);
if (atype == 0) {
- ADD_INSNL(ret, line, branchif, lcfin);
+ ADD_INSNL(ret, nd_line(node), branchif, lcfin);
}
else {
- ADD_INSNL(ret, line, branchunless, lcfin);
+ ADD_INSNL(ret, nd_line(node), branchunless, lcfin);
}
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), 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),
+ ADD_INSN(ret, nd_line(node), swap);
+ ADD_INSN1(ret, nd_line(node), topn, INT2FIX(1));
+ ADD_SEND(ret, nd_line(node), ID2SYM(node->nd_next->nd_aid),
INT2FIX(1));
- ADD_INSNL(ret, line, jump, lfin);
+ ADD_INSNL(ret, nd_line(node), jump, lfin);
ADD_LABEL(ret, lcfin);
- ADD_INSN(ret, line, swap);
+ ADD_INSN(ret, nd_line(node), swap);
ADD_LABEL(ret, lfin);
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
if (poped) {
/* we can apply more optimize */
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
}
else {
COMPILE(ret, "NODE_OP_ASGN2 val", node->nd_value);
- ADD_SEND(ret, line, ID2SYM(node->nd_next->nd_mid),
+ ADD_SEND(ret, nd_line(node), ID2SYM(node->nd_next->nd_mid),
INT2FIX(1));
if (!poped) {
- ADD_INSN(ret, line, swap);
- ADD_INSN1(ret, line, topn, INT2FIX(1));
+ ADD_INSN(ret, nd_line(node), swap);
+ ADD_INSN1(ret, nd_line(node), topn, INT2FIX(1));
}
- ADD_SEND(ret, line, ID2SYM(node->nd_next->nd_aid),
+ ADD_SEND(ret, nd_line(node), 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));
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_OP_ASGN_AND:
case NODE_OP_ASGN_OR:{
- LABEL *lfin = NEW_LABEL(line);
+ LABEL *lfin = NEW_LABEL(nd_line(node));
LABEL *lassign;
if (nd_type(node) == NODE_OP_ASGN_OR) {
@@ -4351,47 +4044,36 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
defined_expr(iseq, ret, node->nd_head, lfinish, Qfalse);
lassign = lfinish[1];
if (!lassign) {
- lassign = NEW_LABEL(line);
+ lassign = NEW_LABEL(nd_line(node));
}
- ADD_INSNL(ret, line, branchunless, lassign);
+ ADD_INSNL(ret, nd_line(node), branchunless, lassign);
}
else {
- lassign = NEW_LABEL(line);
+ lassign = NEW_LABEL(nd_line(node));
}
COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_head", node->nd_head);
- ADD_INSN(ret, line, dup);
+ ADD_INSN(ret, nd_line(node), dup);
if (nd_type(node) == NODE_OP_ASGN_AND) {
- ADD_INSNL(ret, line, branchunless, lfin);
+ ADD_INSNL(ret, nd_line(node), branchunless, lfin);
}
else {
- ADD_INSNL(ret, line, branchif, lfin);
+ ADD_INSNL(ret, nd_line(node), branchif, lfin);
}
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), 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);
+ ADD_INSN(ret, nd_line(node), 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 */
/*
@@ -4411,18 +4093,12 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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);
+ if (mid == idBitblt) {
+ ADD_INSN(ret, nd_line(node), bitblt);
break;
}
- else if (mid == id_answer) {
- ADD_INSN(ret, line, answer);
+ else if (mid == idAnswer) {
+ ADD_INSN(ret, nd_line(node), answer);
break;
}
}
@@ -4450,8 +4126,8 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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;
+ label = NEW_LABEL(nd_line(node));
+ label->position = nd_line(node);
st_insert(labels_table, (st_data_t)label_name, (st_data_t)label);
}
else {
@@ -4464,7 +4140,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
if (mid == goto_id) {
- ADD_INSNL(ret, line, jump, label);
+ ADD_INSNL(ret, nd_line(node), jump, label);
}
else {
ADD_LABEL(ret, label);
@@ -4478,7 +4154,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
COMPILE(recv, "recv", node->nd_recv);
}
else if (type == NODE_FCALL || type == NODE_VCALL) {
- ADD_CALL_RECEIVER(recv, line);
+ ADD_CALL_RECEIVER(recv, nd_line(node));
}
/* args */
@@ -4497,45 +4173,43 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
switch (nd_type(node)) {
case NODE_VCALL:
- flag |= VM_CALL_VCALL;
+ flag |= VM_CALL_VCALL_BIT;
/* VCALL is funcall, so fall through */
case NODE_FCALL:
- flag |= VM_CALL_FCALL;
+ flag |= VM_CALL_FCALL_BIT;
}
- ADD_SEND_R(ret, line, ID2SYM(mid),
+ ADD_SEND_R(ret, nd_line(node), ID2SYM(mid),
argc, parent_block, LONG2FIX(flag));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_SUPER:
case NODE_ZSUPER:{
DECL_ANCHOR(args);
- int argc;
+ VALUE 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);
+ argc = setup_args(iseq, args, node->nd_args, &flag);
}
else {
/* NODE_ZSUPER */
int i;
rb_iseq_t *liseq = iseq->local_iseq;
- int lvar_level = get_lvar_level(iseq);
- argc = liseq->argc;
+ argc = INT2FIX(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));
+ ADD_INSN1(args, nd_line(node), getlocal, INT2FIX(idx));
}
if (!liseq->arg_simple) {
@@ -4544,18 +4218,18 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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));
+ ADD_INSN1(args, nd_line(node), getlocal, INT2FIX(idx));
}
i += j;
- argc = i;
+ argc = INT2FIX(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;
+ ADD_INSN1(args, nd_line(node), getlocal, INT2FIX(idx));
+ argc = INT2FIX(liseq->arg_rest + 1);
+ flag |= VM_CALL_ARGS_SPLAT_BIT;
}
if (liseq->arg_post_len) {
@@ -4567,63 +4241,43 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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, nd_line(node), getlocal, INT2FIX(idx));
}
- ADD_INSN1(args, line, newarray, INT2FIX(j));
- ADD_INSN (args, line, concatarray);
- /* argc is settled at above */
+ ADD_INSN1(args, nd_line(node), newarray, INT2FIX(j));
+ ADD_INSN (args, nd_line(node), concatarray);
+ /* argc is setteled 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));
+ ADD_INSN1(args, nd_line(node), getlocal, INT2FIX(idx));
}
- 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;
+ argc = INT2FIX(post_len + post_start);
}
}
}
}
/* dummy receiver */
- ADD_INSN1(ret, line, putobject, nd_type(node) == NODE_ZSUPER ? Qfalse : Qtrue);
+ ADD_INSN1(ret, nd_line(node), 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));
+ ADD_INSN3(ret, nd_line(node), invokesuper,
+ argc, parent_block, LONG2FIX(flag));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_ARRAY:{
- compile_array_(iseq, ret, node, COMPILE_ARRAY_TYPE_ARRAY, poped);
+ compile_array_(iseq, ret, node, Qtrue, poped);
break;
}
case NODE_ZARRAY:{
if (!poped) {
- ADD_INSN1(ret, line, newarray, INT2FIX(0));
+ ADD_INSN1(ret, nd_line(node), newarray, INT2FIX(0));
}
break;
}
@@ -4633,33 +4287,37 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
COMPILE(ret, "values item", n->nd_head);
n = n->nd_next;
}
- ADD_INSN1(ret, line, newarray, INT2FIX(node->nd_alen));
+ ADD_INSN1(ret, nd_line(node), newarray, INT2FIX(node->nd_alen));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_HASH:{
DECL_ANCHOR(list);
+ VALUE size = 0;
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);
+ case NODE_ARRAY:{
+ compile_array(iseq, list, node->nd_head, Qfalse);
+ size = OPERAND_AT(POP_ELEMENT(list), 0);
ADD_SEQ(ret, list);
break;
-
+ }
case NODE_ZARRAY:
- ADD_INSN1(ret, line, newhash, INT2FIX(0));
+ size = INT2FIX(0);
break;
default:
rb_bug("can't make hash with this node: %s", ruby_node_name(type));
}
+ ADD_INSN1(ret, nd_line(node), newhash, size);
+
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
@@ -4676,25 +4334,25 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
if (is->type == ISEQ_TYPE_METHOD) {
splabel = NEW_LABEL(0);
ADD_LABEL(ret, splabel);
- ADD_ADJUST(ret, line, 0);
+ ADD_ADJUST(ret, nd_line(node), 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_TRACE(ret, nd_line(node), RUBY_EVENT_RETURN);
+ ADD_INSN(ret, nd_line(node), leave);
ADD_ADJUST_RESTORE(ret, splabel);
if (!poped) {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), putnil);
}
}
else {
- ADD_INSN1(ret, line, throw, INT2FIX(0x01) /* TAG_RETURN */ );
+ ADD_INSN1(ret, nd_line(node), throw, INT2FIX(0x01) /* TAG_RETURN */ );
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
}
}
@@ -4719,10 +4377,10 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
}
ADD_SEQ(ret, args);
- ADD_INSN1(ret, line, invokeblock, new_callinfo(iseq, 0, FIX2INT(argc), 0, flag));
+ ADD_INSN2(ret, nd_line(node), invokeblock, argc, LONG2FIX(flag));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
@@ -4732,7 +4390,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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)));
+ ADD_INSN1(ret, nd_line(node), getlocal, INT2FIX(idx));
}
break;
}
@@ -4744,23 +4402,23 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
if (idx < 0) {
rb_bug("unknown dvar (%s)", rb_id2name(node->nd_vid));
}
- ADD_INSN2(ret, line, getlocal, INT2FIX(ls - idx), INT2FIX(lv));
+ ADD_INSN2(ret, nd_line(node), getdynamic, INT2FIX(ls - idx), INT2FIX(lv));
}
break;
}
case NODE_GVAR:{
- ADD_INSN1(ret, line, getglobal,
+ ADD_INSN1(ret, nd_line(node), getglobal,
((VALUE)node->nd_entry | 1));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), 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++));
+ ADD_INSN2(ret, nd_line(node), getinstancevariable,
+ ID2SYM(node->nd_vid), INT2FIX(iseq->ic_size++));
}
break;
}
@@ -4768,41 +4426,41 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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++;
+ LABEL *lend = NEW_LABEL(nd_line(node));
+ int ic_index = iseq->ic_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_INSN2(ret, nd_line(node), getinlinecache, lend, INT2FIX(ic_index));
+ ADD_INSN1(ret, nd_line(node), getconstant, ID2SYM(node->nd_vid));
+ ADD_INSN1(ret, nd_line(node), setinlinecache, INT2FIX(ic_index));
ADD_LABEL(ret, lend);
}
else {
- ADD_INSN(ret, line, putnil);
- ADD_INSN1(ret, line, getconstant, ID2SYM(node->nd_vid));
+ ADD_INSN(ret, nd_line(node), putnil);
+ ADD_INSN1(ret, nd_line(node), getconstant, ID2SYM(node->nd_vid));
}
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_CVAR:{
if (!poped) {
- ADD_INSN1(ret, line, getclassvariable,
+ ADD_INSN1(ret, nd_line(node), getclassvariable,
ID2SYM(node->nd_vid));
}
break;
}
case NODE_NTH_REF:{
if (!poped) {
- ADD_INSN2(ret, line, getspecial, INT2FIX(1) /* '~' */,
+ ADD_INSN2(ret, nd_line(node), getspecial, INT2FIX(1) /* '~' */,
INT2FIX(node->nd_nth << 1));
}
break;
}
case NODE_BACK_REF:{
if (!poped) {
- ADD_INSN2(ret, line, getspecial, INT2FIX(1) /* '~' */,
+ ADD_INSN2(ret, nd_line(node), getspecial, INT2FIX(1) /* '~' */,
INT2FIX(0x01 | (node->nd_nth << 1)));
}
break;
@@ -4815,10 +4473,10 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
INIT_ANCHOR(recv);
INIT_ANCHOR(val);
- switch (nd_type(node)) {
+ switch(nd_type(node)) {
case NODE_MATCH:
- ADD_INSN1(recv, line, putobject, node->nd_lit);
- ADD_INSN2(val, line, getspecial, INT2FIX(0),
+ ADD_INSN1(recv, nd_line(node), putobject, node->nd_lit);
+ ADD_INSN2(val, nd_line(node), getspecial, INT2FIX(0),
INT2FIX(0));
break;
case NODE_MATCH2:
@@ -4837,38 +4495,38 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
INSN_OF(recv->last) == BIN(putobject) &&
nd_type(node) == NODE_MATCH2) {
ADD_SEQ(ret, val);
- ADD_INSN1(ret, line, opt_regexpmatch1,
+ ADD_INSN1(ret, nd_line(node), 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));
+ ADD_INSN(ret, nd_line(node), opt_regexpmatch2);
}
}
else {
ADD_SEQ(ret, recv);
ADD_SEQ(ret, val);
- ADD_SEND(ret, line, ID2SYM(idEqTilde), INT2FIX(1));
+ ADD_SEND(ret, nd_line(node), ID2SYM(idEqTilde), INT2FIX(1));
}
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_LIT:{
debugp_param("lit", node->nd_lit);
if (!poped) {
- ADD_INSN1(ret, line, putobject, node->nd_lit);
+ ADD_INSN1(ret, nd_line(node), 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);
+ OBJ_FREEZE(node->nd_lit);
+ ADD_INSN1(ret, nd_line(node), putstring, node->nd_lit);
}
break;
}
@@ -4876,28 +4534,28 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
compile_dstr(iseq, ret, node);
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), 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));
+ OBJ_FREEZE(node->nd_lit);
+ ADD_CALL_RECEIVER(ret, nd_line(node));
+ ADD_INSN1(ret, nd_line(node), putobject, node->nd_lit);
+ ADD_CALL(ret, nd_line(node), ID2SYM(idBackquote), INT2FIX(1));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_DXSTR:{
- ADD_CALL_RECEIVER(ret, line);
+ ADD_CALL_RECEIVER(ret, nd_line(node));
compile_dstr(iseq, ret, node);
- ADD_CALL(ret, line, ID2SYM(idBackquote), INT2FIX(1));
+ ADD_CALL(ret, nd_line(node), ID2SYM(idBackquote), INT2FIX(1));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
@@ -4905,10 +4563,10 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
COMPILE(ret, "nd_body", node->nd_body);
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
else {
- ADD_INSN(ret, line, tostring);
+ ADD_INSN(ret, nd_line(node), tostring);
}
break;
}
@@ -4916,78 +4574,83 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
compile_dregx(iseq, ret, node);
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), 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);
+ /* TODO: once? */
+ LABEL *lend = NEW_LABEL(nd_line(node));
+ int ic_index = iseq->ic_size++;
- ADD_INSN2(ret, line, once, block_iseq, INT2FIX(ic_index));
+ ADD_INSN2(ret, nd_line(node), onceinlinecache, lend, INT2FIX(ic_index));
+ ADD_INSN(ret, nd_line(node), pop);
+
+ compile_dregx(iseq, ret, node);
+
+ ADD_INSN1(ret, nd_line(node), setinlinecache, INT2FIX(ic_index));
+ ADD_LABEL(ret, lend);
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), 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);
+ ADD_INSN1(ret, nd_line(node), splatarray, Qfalse);
+ ADD_INSN(ret, nd_line(node), pop);
COMPILE(ret, "argscat body", node->nd_body);
- ADD_INSN1(ret, line, splatarray, Qfalse);
- ADD_INSN(ret, line, pop);
+ ADD_INSN1(ret, nd_line(node), splatarray, Qfalse);
+ ADD_INSN(ret, nd_line(node), pop);
}
else {
COMPILE(ret, "argscat head", node->nd_head);
COMPILE(ret, "argscat body", node->nd_body);
- ADD_INSN(ret, line, concatarray);
+ ADD_INSN(ret, nd_line(node), 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);
+ ADD_INSN1(ret, nd_line(node), splatarray, Qfalse);
+ ADD_INSN(ret, nd_line(node), 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);
+ ADD_INSN1(ret, nd_line(node), newarray, INT2FIX(1));
+ ADD_INSN(ret, nd_line(node), concatarray);
}
break;
}
case NODE_SPLAT:{
COMPILE(ret, "splat", node->nd_head);
- ADD_INSN1(ret, line, splatarray, Qtrue);
+ ADD_INSN1(ret, nd_line(node), splatarray, Qtrue);
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_DEFN:{
VALUE iseqval = NEW_ISEQVAL(node->nd_defn,
- rb_id2str(node->nd_mid),
- ISEQ_TYPE_METHOD, line);
+ rb_str_dup(rb_id2str(node->nd_mid)),
+ ISEQ_TYPE_METHOD, nd_line(node));
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));
+ ADD_INSN1(ret, nd_line(node), putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, nd_line(node), putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CBASE));
+ ADD_INSN1(ret, nd_line(node), putobject, ID2SYM(node->nd_mid));
+ ADD_INSN1(ret, nd_line(node), putiseq, iseqval);
+ ADD_SEND (ret, nd_line(node), ID2SYM(id_core_define_method), INT2FIX(3));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
debugp_param("defn", iseqval);
@@ -4995,53 +4658,53 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
}
case NODE_DEFS:{
VALUE iseqval = NEW_ISEQVAL(node->nd_defn,
- rb_id2str(node->nd_mid),
- ISEQ_TYPE_METHOD, line);
+ rb_str_dup(rb_id2str(node->nd_mid)),
+ ISEQ_TYPE_METHOD, nd_line(node));
debugp_param("defs/iseq", iseqval);
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, nd_line(node), 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));
+ ADD_INSN1(ret, nd_line(node), putobject, ID2SYM(node->nd_mid));
+ ADD_INSN1(ret, nd_line(node), putiseq, iseqval);
+ ADD_SEND (ret, nd_line(node), ID2SYM(id_core_define_singleton_method), INT2FIX(3));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), 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));
+ ADD_INSN1(ret, nd_line(node), putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, nd_line(node), 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));
+ ADD_SEND(ret, nd_line(node), ID2SYM(id_core_set_method_alias), INT2FIX(3));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), 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));
+ ADD_INSN1(ret, nd_line(node), putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, nd_line(node), putobject, ID2SYM(node->u1.id));
+ ADD_INSN1(ret, nd_line(node), putobject, ID2SYM(node->u2.id));
+ ADD_SEND(ret, nd_line(node), ID2SYM(id_core_set_variable_alias), INT2FIX(2));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), 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));
+ ADD_INSN1(ret, nd_line(node), putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, nd_line(node), putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CBASE));
COMPILE(ret, "undef arg", node->u2.node);
- ADD_SEND(ret, line, ID2SYM(id_core_undef_method), INT2FIX(2));
+ ADD_SEND(ret, nd_line(node), ID2SYM(id_core_undef_method), INT2FIX(2));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
@@ -5050,17 +4713,14 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
NEW_CHILD_ISEQVAL(
node->nd_body,
rb_sprintf("<class:%s>", rb_id2name(node->nd_cpath->nd_mid)),
- ISEQ_TYPE_CLASS, line);
+ ISEQ_TYPE_CLASS, nd_line(node));
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));
+ ADD_INSN3(ret, nd_line(node), defineclass,
+ ID2SYM(node->nd_cpath->nd_mid), iseqval, INT2FIX(noscope ? 3 : 0));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
@@ -5068,42 +4728,39 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
VALUE iseqval = NEW_CHILD_ISEQVAL(
node->nd_body,
rb_sprintf("<module:%s>", rb_id2name(node->nd_cpath->nd_mid)),
- ISEQ_TYPE_CLASS, line);
+ ISEQ_TYPE_CLASS, nd_line(node));
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));
+ ADD_INSN (ret, nd_line(node), putnil); /* dummy */
+ ADD_INSN3(ret, nd_line(node), defineclass,
+ ID2SYM(node->nd_cpath->nd_mid), iseqval, INT2FIX(noscope ? 5 : 2));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_SCLASS:{
ID singletonclass;
VALUE iseqval =
- NEW_ISEQVAL(node->nd_body, rb_str_new2("singleton class"),
- ISEQ_TYPE_CLASS, line);
+ NEW_ISEQVAL(node->nd_body, rb_str_new2("singletonclass"),
+ ISEQ_TYPE_CLASS, nd_line(node));
COMPILE(ret, "sclass#recv", node->nd_recv);
- ADD_INSN (ret, line, putnil);
+ ADD_INSN (ret, nd_line(node), putnil);
CONST_ID(singletonclass, "singletonclass");
- ADD_INSN3(ret, line, defineclass,
- ID2SYM(singletonclass), iseqval,
- INT2FIX(VM_DEFINECLASS_TYPE_SINGLETON_CLASS));
+ ADD_INSN3(ret, nd_line(node), defineclass,
+ ID2SYM(singletonclass), iseqval, INT2FIX(1));
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), 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++;
+ LABEL *lend = NEW_LABEL(nd_line(node));
+ int ic_index = iseq->ic_size++;
DECL_ANCHOR(pref);
DECL_ANCHOR(body);
@@ -5113,16 +4770,16 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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));
+ ADD_INSN2(ret, nd_line(node), getinlinecache, lend, INT2FIX(ic_index));
}
else {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), putnil);
}
ADD_SEQ(ret, body);
if (iseq->compile_data->option->inline_const_cache) {
- ADD_INSN1(ret, line, setinlinecache, INT2FIX(ic_index));
+ ADD_INSN1(ret, nd_line(node), setinlinecache, INT2FIX(ic_index));
ADD_LABEL(ret, lend);
}
}
@@ -5133,38 +4790,38 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
}
else {
/* function call */
- ADD_CALL_RECEIVER(ret, line);
+ ADD_CALL_RECEIVER(ret, nd_line(node));
COMPILE(ret, "colon2#nd_head", node->nd_head);
- ADD_CALL(ret, line, ID2SYM(node->nd_mid),
+ ADD_CALL(ret, nd_line(node), ID2SYM(node->nd_mid),
INT2FIX(1));
}
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_COLON3:{
- LABEL *lend = NEW_LABEL(line);
- int ic_index = iseq->is_size++;
+ LABEL *lend = NEW_LABEL(nd_line(node));
+ int ic_index = iseq->ic_size++;
- debugi("colon3#nd_mid", node->nd_mid);
+ 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_INSN2(ret, nd_line(node), getinlinecache, lend, INT2FIX(ic_index));
+ ADD_INSN(ret, nd_line(node), pop);
}
- ADD_INSN1(ret, line, putobject, rb_cObject);
- ADD_INSN1(ret, line, getconstant, ID2SYM(node->nd_mid));
+ ADD_INSN1(ret, nd_line(node), putobject, rb_cObject);
+ ADD_INSN1(ret, nd_line(node), getconstant, ID2SYM(node->nd_mid));
if (iseq->compile_data->option->inline_const_cache) {
- ADD_INSN1(ret, line, setinlinecache, INT2FIX(ic_index));
+ ADD_INSN1(ret, nd_line(node), setinlinecache, INT2FIX(ic_index));
ADD_LABEL(ret, lend);
}
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
@@ -5174,83 +4831,82 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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);
+ ADD_INSN(ret, nd_line(node), pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
else {
- ADD_INSN1(ret, line, newrange, flag);
+ ADD_INSN1(ret, nd_line(node), 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);
+ LABEL *lend = NEW_LABEL(nd_line(node));
+ LABEL *lfin = NEW_LABEL(nd_line(node));
+ LABEL *ltrue = NEW_LABEL(nd_line(node));
+ VALUE key = rb_sprintf("flipflag/%s-%p-%d",
+ RSTRING_PTR(iseq->name), (void *)iseq,
+ iseq->compile_data->flip_cnt++);
+
+ hide_obj(key);
+ iseq_add_mark_object_compile_time(iseq, key);
+ ADD_INSN2(ret, nd_line(node), getspecial, key, INT2FIX(0));
+ ADD_INSNL(ret, nd_line(node), branchif, lend);
/* *flip == 0 */
COMPILE(ret, "flip2 beg", node->nd_beg);
- ADD_INSN(ret, line, dup);
- ADD_INSNL(ret, line, branchunless, lfin);
+ ADD_INSN(ret, nd_line(node), dup);
+ ADD_INSNL(ret, nd_line(node), 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);
+ ADD_INSN(ret, nd_line(node), dup);
+ ADD_INSN1(ret, nd_line(node), setspecial, key);
+ ADD_INSNL(ret, nd_line(node), jump, lfin);
}
else {
- ADD_INSN1(ret, line, setspecial, key);
+ ADD_INSN1(ret, nd_line(node), 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_INSNL(ret, nd_line(node), branchunless, ltrue);
+ ADD_INSN1(ret, nd_line(node), putobject, Qfalse);
+ ADD_INSN1(ret, nd_line(node), setspecial, key);
ADD_LABEL(ret, ltrue);
- ADD_INSN1(ret, line, putobject, Qtrue);
+ ADD_INSN1(ret, nd_line(node), putobject, Qtrue);
ADD_LABEL(ret, lfin);
break;
}
case NODE_SELF:{
if (!poped) {
- ADD_INSN(ret, line, putself);
+ ADD_INSN(ret, nd_line(node), putself);
}
break;
}
case NODE_NIL:{
if (!poped) {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), putnil);
}
break;
}
case NODE_TRUE:{
if (!poped) {
- ADD_INSN1(ret, line, putobject, Qtrue);
+ ADD_INSN1(ret, nd_line(node), putobject, Qtrue);
}
break;
}
case NODE_FALSE:{
if (!poped) {
- ADD_INSN1(ret, line, putobject, Qfalse);
+ ADD_INSN1(ret, nd_line(node), putobject, Qfalse);
}
break;
}
case NODE_ERRINFO:{
if (!poped) {
if (iseq->type == ISEQ_TYPE_RESCUE) {
- ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(0));
+ ADD_INSN2(ret, nd_line(node), getdynamic, INT2FIX(2), INT2FIX(0));
}
else {
rb_iseq_t *ip = iseq;
@@ -5263,29 +4919,24 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
level++;
}
if (ip) {
- ADD_INSN2(ret, line, getlocal, INT2FIX(2), INT2FIX(level));
+ ADD_INSN2(ret, nd_line(node), getdynamic, INT2FIX(2), INT2FIX(level));
}
else {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), 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 {
+ if (!poped) {
LABEL *lfinish[2];
- lfinish[0] = NEW_LABEL(line);
+ lfinish[0] = NEW_LABEL(nd_line(node));
lfinish[1] = 0;
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), putnil);
defined_expr(iseq, ret, node->nd_head, lfinish, Qtrue);
- ADD_INSN(ret, line, swap);
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), swap);
+ ADD_INSN(ret, nd_line(node), pop);
if (lfinish[1]) {
ADD_LABEL(ret, lfinish[1]);
}
@@ -5294,65 +4945,32 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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);
+ LABEL *lend = NEW_LABEL(nd_line(node));
+ VALUE block = NEW_CHILD_ISEQVAL(node->nd_body, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, nd_line(node));
+ int ic_index = iseq->ic_size++;
- ADD_INSN2(ret, line, once, once_iseq, INT2FIX(is_index));
+ ADD_INSN2(ret, nd_line(node), onceinlinecache, lend, INT2FIX(ic_index));
+ ADD_INSN(ret, nd_line(node), pop);
+
+ ADD_INSN1(ret, nd_line(node), putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_INSN1(ret, nd_line(node), putiseq, block);
+ ADD_SEND (ret, nd_line(node), ID2SYM(id_core_set_postexe), INT2FIX(1));
+
+ ADD_INSN1(ret, nd_line(node), setinlinecache, INT2FIX(ic_index));
+ ADD_LABEL(ret, lend);
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);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
case NODE_DSYM:{
compile_dstr(iseq, ret, node);
if (!poped) {
- ADD_SEND(ret, line, ID2SYM(idIntern), INT2FIX(0));
+ ADD_SEND(ret, nd_line(node), ID2SYM(idIntern), INT2FIX(0));
}
else {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
@@ -5367,8 +4985,8 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
argc = setup_args(iseq, args, node->nd_args, &flag);
if (node->nd_recv == (NODE *) 1) {
- flag |= VM_CALL_FCALL;
- ADD_INSN(recv, line, putself);
+ flag |= VM_CALL_FCALL_BIT;
+ ADD_INSN(recv, nd_line(node), putself);
}
else {
COMPILE(recv, "recv", node->nd_recv);
@@ -5378,39 +4996,53 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
debugp_param("nd_mid", ID2SYM(node->nd_mid));
if (!poped) {
- ADD_INSN(ret, line, putnil);
+ ADD_INSN(ret, nd_line(node), 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));
+ if (flag & VM_CALL_ARGS_BLOCKARG_BIT) {
+ ADD_INSN1(ret, nd_line(node), topn, INT2FIX(1));
+ if (flag & VM_CALL_ARGS_SPLAT_BIT) {
+ ADD_INSN1(ret, nd_line(node), putobject, INT2FIX(-1));
+ ADD_SEND(ret, nd_line(node), ID2SYM(idAREF), INT2FIX(1));
}
- ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 3));
- ADD_INSN (ret, line, pop);
+ ADD_INSN1(ret, nd_line(node), setn, FIXNUM_INC(argc, 3));
+ ADD_INSN (ret, nd_line(node), 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 if (flag & VM_CALL_ARGS_SPLAT_BIT) {
+ ADD_INSN(ret, nd_line(node), dup);
+ ADD_INSN1(ret, nd_line(node), putobject, INT2FIX(-1));
+ ADD_SEND(ret, nd_line(node), ID2SYM(idAREF), INT2FIX(1));
+ ADD_INSN1(ret, nd_line(node), setn, FIXNUM_INC(argc, 2));
+ ADD_INSN (ret, nd_line(node), pop);
}
else {
- ADD_INSN1(ret, line, setn, FIXNUM_INC(argc, 1));
+ ADD_INSN1(ret, nd_line(node), 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);
+ ADD_SEND_R(ret, nd_line(node), ID2SYM(node->nd_mid), argc, 0, LONG2FIX(flag));
+ ADD_INSN(ret, nd_line(node), pop);
break;
}
+ case NODE_OPTBLOCK:{
+ /* for optimize */
+ LABEL *redo_label = NEW_LABEL(0);
+ LABEL *next_label = NEW_LABEL(0);
+
+ iseq->compile_data->start_label = next_label;
+ iseq->compile_data->redo_label = redo_label;
+
+ ADD_LABEL(ret, redo_label);
+ COMPILE_(ret, "optblock body", node->nd_head, 1 /* pop */ );
+ ADD_LABEL(ret, next_label);
+ ADD_INSN(ret, 0, opt_checkenv);
+ break;
+ }
case NODE_PRELUDE:{
COMPILE_POPED(ret, "prelude", node->nd_head);
COMPILE_(ret, "body", node->nd_body, poped);
@@ -5418,13 +5050,13 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
}
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 block = NEW_CHILD_ISEQVAL(node->nd_body, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, nd_line(node));
VALUE argc = INT2FIX(0);
- ADD_INSN1(ret, line, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
- ADD_CALL_WITH_BLOCK(ret, line, ID2SYM(idLambda), argc, block);
+ ADD_INSN1(ret, nd_line(node), putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE));
+ ADD_CALL_WITH_BLOCK(ret, nd_line(node), ID2SYM(idLambda), argc, block);
if (poped) {
- ADD_INSN(ret, line, pop);
+ ADD_INSN(ret, nd_line(node), pop);
}
break;
}
@@ -5433,13 +5065,6 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)
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;
}
@@ -5460,29 +5085,16 @@ calc_sp_depth(int depth, INSN *insn)
return insn_stack_increase(depth, insn->insn_id, insn->operands);
}
-static VALUE
-opobj_inspect(VALUE obj)
+static int
+insn_data_line_no(INSN *iobj)
{
- 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);
+ return insn_len(iobj->line_no);
}
-
-
static VALUE
insn_data_to_s_detail(INSN *iobj)
{
- VALUE str = rb_sprintf("%-20s ", insn_name(iobj->insn_id));
+ VALUE str = rb_sprintf("%-16s", insn_name(iobj->insn_id));
if (iobj->operands) {
const char *types = insn_op_types(iobj->insn_id);
@@ -5490,6 +5102,7 @@ insn_data_to_s_detail(INSN *iobj)
for (j = 0; types[j]; j++) {
char type = types[j];
+ printf("str: %"PRIxVALUE", type: %c\n", str, type);
switch (type) {
case TS_OFFSET: /* label(destination position) */
@@ -5503,39 +5116,30 @@ insn_data_to_s_detail(INSN *iobj)
{
rb_iseq_t *iseq = (rb_iseq_t *)OPERAND_AT(iobj, j);
VALUE val = Qnil;
- if (0 && iseq) { /* TODO: invalidate now */
+ if (iseq) {
val = iseq->self;
}
- rb_str_concat(str, opobj_inspect(val));
+ rb_str_concat(str, rb_inspect(val));
}
break;
case TS_LINDEX:
+ case TS_DINDEX:
case TS_NUM: /* ulong */
case TS_VALUE: /* VALUE */
- {
- VALUE v = OPERAND_AT(iobj, j);
- rb_str_concat(str, opobj_inspect(v));
- break;
- }
+ rb_str_concat(str, rb_inspect(OPERAND_AT(iobj, j)));
+ break;
case TS_ID: /* ID */
- rb_str_concat(str, opobj_inspect(OPERAND_AT(iobj, j)));
+ rb_str_concat(str, rb_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 */
+ case TS_IC: /* method 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;
@@ -5567,7 +5171,8 @@ dump_disasm_list(struct iseq_link_element *link)
{
iobj = (INSN *)link;
str = insn_data_to_s_detail(iobj);
- printf("%04d %-65s(%4d)\n", pos, StringValueCStr(str), iobj->line_no);
+ printf("%04d %-65s(%4d)\n", pos, StringValueCStr(str),
+ insn_data_line_no(iobj));
pos += insn_data_length(iobj);
break;
}
@@ -5585,7 +5190,7 @@ dump_disasm_list(struct iseq_link_element *link)
case ISEQ_ELEMENT_ADJUST:
{
ADJUST *adjust = (ADJUST *)link;
- printf("adjust: [label: %d]\n", adjust->label ? adjust->label->label_no : -1);
+ printf("adjust: [label: %d]\n", adjust->label->label_no);
break;
}
default:
@@ -5597,19 +5202,13 @@ dump_disasm_list(struct iseq_link_element *link)
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])));
+ rb_ary_push(ary, rb_obj_freeze(rb_str_new2(insn_name_info[i])));
}
return rb_obj_freeze(ary);
}
@@ -5668,17 +5267,16 @@ iseq_build_from_ary_exception(rb_iseq_t *iseq, struct st_table *labels_table,
int i;
for (i=0; i<RARRAY_LEN(exception); i++) {
- VALUE v, type, eiseqval;
- const VALUE *ptr;
+ VALUE v, type, *ptr, eiseqval;
LABEL *lstart, *lend, *lcont;
int sp;
- RB_GC_GUARD(v) = rb_convert_type(RARRAY_AREF(exception, i), T_ARRAY,
+ RB_GC_GUARD(v) = rb_convert_type(RARRAY_PTR(exception)[i], T_ARRAY,
"Array", "to_ary");
if (RARRAY_LEN(v) != 6) {
rb_raise(rb_eSyntaxError, "wrong exception entry");
}
- ptr = RARRAY_CONST_PTR(v);
+ ptr = RARRAY_PTR(v);
type = get_exception_sym2type(ptr[0]);
if (ptr[1] == Qnil) {
eiseqval = 0;
@@ -5692,8 +5290,6 @@ iseq_build_from_ary_exception(rb_iseq_t *iseq, struct st_table *labels_table,
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;
@@ -5713,33 +5309,15 @@ insn_make_insn_table(void)
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);
+ VALUE *ptr = RARRAY_PTR(body);
long i, len = RARRAY_LEN(body);
int j;
int line_no = 0;
-
/*
* index -> LABEL *label
*/
@@ -5759,22 +5337,22 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *anchor,
else if (FIXNUM_P(obj)) {
line_no = NUM2INT(obj);
}
- else if (RB_TYPE_P(obj, T_ARRAY)) {
+ else if (TYPE(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);
+ insn = (argc < 0) ? Qnil : RARRAY_PTR(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,
+ rb_compile_error(RSTRING_PTR(iseq->filename), 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,
+ rb_compile_error(RSTRING_PTR(iseq->filename), line_no,
"operand size mismatch");
}
@@ -5789,6 +5367,7 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *anchor,
break;
}
case TS_LINDEX:
+ case TS_DINDEX:
case TS_NUM:
(void)NUM2INT(op);
argv[j] = op;
@@ -5800,7 +5379,16 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *anchor,
case TS_ISEQ:
{
if (op != Qnil) {
- argv[j] = iseq_build_load_iseq(iseq, op);
+ if (TYPE(op) == T_ARRAY) {
+ argv[j] = rb_iseq_load(op, iseq->self, Qnil);
+ }
+ else if (CLASS_OF(op) == rb_cISeq) {
+ argv[j] = op;
+ }
+ else {
+ rb_raise(rb_eSyntaxError, "ISEQ is required");
+ }
+ iseq_add_mark_object(iseq, argv[j]);
}
else {
argv[j] = 0;
@@ -5813,30 +5401,8 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *anchor,
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);
- }
+ if (NUM2INT(op) >= iseq->ic_size)
+ iseq->ic_size = NUM2INT(op) + 1;
break;
case TS_ID:
argv[j] = rb_convert_type(op, T_SYMBOL,
@@ -5896,7 +5462,7 @@ rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE locals, VALUE args,
iseq->local_size = iseq->local_table_size + 1;
for (i=0; i<RARRAY_LEN(locals); i++) {
- VALUE lv = RARRAY_AREF(locals, i);
+ VALUE lv = RARRAY_PTR(locals)[i];
tbl[i] = FIXNUM_P(lv) ? (ID)FIX2LONG(lv) : SYM2ID(CHECK_SYMBOL(lv));
}
diff --git a/complex.c b/complex.c
index e1d5ff9f2a..5b1a5102a1 100644
--- a/complex.c
+++ b/complex.c
@@ -1,5 +1,5 @@
/*
- complex.c: Coded by Tadayoshi Funaba 2008-2012
+ complex.c: Coded by Tadayoshi Funaba 2008-2011
This implementation is based on Keiju Ishitsuka's Complex library
which is written in ruby.
@@ -18,11 +18,10 @@
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;
+static ID id_abs, id_abs2, id_arg, id_cmp, id_conj, id_convert,
+ id_denominator, id_divmod, id_eqeq_p, id_expt, id_fdiv, id_floor,
+ id_idiv, id_imag, id_inspect, id_negate, id_numerator, id_quo,
+ id_real, id_real_p, id_to_f, id_to_i, id_to_r, id_to_s;
#define f_boolcast(x) ((x) ? Qtrue : Qfalse)
@@ -76,6 +75,20 @@ f_add(VALUE x, VALUE y)
}
inline static VALUE
+f_cmp(VALUE x, VALUE y)
+{
+ if (FIXNUM_P(x) && FIXNUM_P(y)) {
+ long c = FIX2LONG(x) - FIX2LONG(y);
+ if (c > 0)
+ c = 1;
+ else if (c < 0)
+ c = -1;
+ return INT2FIX(c);
+ }
+ return rb_funcall(x, id_cmp, 1, y);
+}
+
+inline static VALUE
f_div(VALUE x, VALUE y)
{
if (FIXNUM_P(y) && FIX2LONG(y) == 1)
@@ -92,13 +105,23 @@ f_gt_p(VALUE x, VALUE y)
}
inline static VALUE
+f_lt_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);
+}
+
+binop(mod, '%')
+
+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))
+ if (FIXNUM_P(x) || TYPE(x) == T_BIGNUM)
return ZERO;
}
else if (iy == 1)
@@ -107,7 +130,7 @@ f_mul(VALUE x, VALUE y)
else if (FIXNUM_P(x)) {
long ix = FIX2LONG(x);
if (ix == 0) {
- if (FIXNUM_P(y) || RB_TYPE_P(y, T_BIGNUM))
+ if (FIXNUM_P(y) || TYPE(y) == T_BIGNUM)
return ZERO;
}
else if (ix == 1)
@@ -128,24 +151,29 @@ f_sub(VALUE x, VALUE y)
}
fun1(abs)
+fun1(abs2)
fun1(arg)
+fun1(conj)
fun1(denominator)
+fun1(floor)
+fun1(imag)
fun1(inspect)
fun1(negate)
fun1(numerator)
+fun1(real)
fun1(real_p)
inline static VALUE
f_to_i(VALUE x)
{
- if (RB_TYPE_P(x, T_STRING))
+ if (TYPE(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))
+ if (TYPE(x) == T_STRING)
return DBL2NUM(rb_str_to_dbl(x, 0));
return rb_funcall(x, id_to_f, 0);
}
@@ -153,6 +181,8 @@ f_to_f(VALUE x)
fun1(to_r)
fun1(to_s)
+fun2(divmod)
+
inline static VALUE
f_eqeq_p(VALUE x, VALUE y)
{
@@ -163,6 +193,7 @@ f_eqeq_p(VALUE x, VALUE y)
fun2(expt)
fun2(fdiv)
+fun2(idiv)
fun2(quo)
inline static VALUE
@@ -178,16 +209,17 @@ f_negative_p(VALUE x)
inline static VALUE
f_zero_p(VALUE x)
{
- if (RB_TYPE_P(x, T_FIXNUM)) {
+ switch (TYPE(x)) {
+ case T_FIXNUM:
return f_boolcast(FIX2LONG(x) == 0);
- }
- else if (RB_TYPE_P(x, T_BIGNUM)) {
+ case T_BIGNUM:
return Qfalse;
- }
- else if (RB_TYPE_P(x, T_RATIONAL)) {
- VALUE num = RRATIONAL(x)->num;
+ case T_RATIONAL:
+ {
+ VALUE num = RRATIONAL(x)->num;
- return f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 0);
+ return f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 0);
+ }
}
return rb_funcall(x, id_eqeq_p, 1, ZERO);
}
@@ -197,18 +229,19 @@ f_zero_p(VALUE x)
inline static VALUE
f_one_p(VALUE x)
{
- if (RB_TYPE_P(x, T_FIXNUM)) {
+ switch (TYPE(x)) {
+ case T_FIXNUM:
return f_boolcast(FIX2LONG(x) == 1);
- }
- else if (RB_TYPE_P(x, T_BIGNUM)) {
+ case T_BIGNUM:
return Qfalse;
- }
- else if (RB_TYPE_P(x, T_RATIONAL)) {
- VALUE num = RRATIONAL(x)->num;
- VALUE den = RRATIONAL(x)->den;
+ case 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 f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 1 &&
+ FIXNUM_P(den) && FIX2LONG(den) == 1);
+ }
}
return rb_funcall(x, id_eqeq_p, 1, ONE);
}
@@ -226,6 +259,12 @@ k_numeric_p(VALUE x)
}
inline static VALUE
+k_integer_p(VALUE x)
+{
+ return f_kind_of_p(x, rb_cInteger);
+}
+
+inline static VALUE
k_fixnum_p(VALUE x)
{
return f_kind_of_p(x, rb_cFixnum);
@@ -273,10 +312,11 @@ k_complex_p(VALUE x)
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));
+ NEWOBJ(obj, struct RComplex);
+ OBJSETUP(obj, klass, T_COMPLEX);
- RCOMPLEX_SET_REAL(obj, real);
- RCOMPLEX_SET_IMAG(obj, imag);
+ obj->real = real;
+ obj->imag = imag;
return (VALUE)obj;
}
@@ -343,10 +383,13 @@ nucomp_canonicalization(int f)
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)) {
+ switch (TYPE(num)) {
+ case T_FIXNUM:
+ case T_BIGNUM:
+ case T_FLOAT:
+ case T_RATIONAL:
+ break;
+ default:
if (!k_numeric_p(num) || !f_real_p(num))
rb_raise(rb_eTypeError, "not a real");
}
@@ -396,8 +439,6 @@ nucomp_s_canonicalize_internal(VALUE klass, VALUE real, VALUE imag)
* 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)
@@ -419,6 +460,13 @@ nucomp_s_new(int argc, VALUE *argv, VALUE klass)
}
inline static VALUE
+f_complex_new1(VALUE klass, VALUE x)
+{
+ assert(!k_complex_p(x));
+ return nucomp_s_canonicalize_internal(klass, x, ZERO);
+}
+
+inline static VALUE
f_complex_new2(VALUE klass, VALUE x, VALUE y)
{
assert(!k_complex_p(x));
@@ -430,31 +478,6 @@ f_complex_new2(VALUE klass, VALUE x, VALUE y)
* 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)
@@ -492,6 +515,7 @@ m_log_bang(VALUE x)
imp1(sin)
imp1(sinh)
+imp1(sqrt)
static VALUE
m_cos(VALUE x)
@@ -524,8 +548,6 @@ m_sin(VALUE x)
}
#if 0
-imp1(sqrt)
-
static VALUE
m_sqrt(VALUE x)
{
@@ -565,10 +587,10 @@ f_complex_polar(VALUE klass, VALUE x, VALUE y)
*
* 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)
+ * 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)
@@ -593,9 +615,6 @@ nucomp_s_polar(int argc, VALUE *argv, VALUE klass)
* cmp.real -> real
*
* Returns the real part.
- *
- * Complex(7).real #=> 7
- * Complex(9, -4).real #=> 9
*/
static VALUE
nucomp_real(VALUE self)
@@ -610,9 +629,6 @@ nucomp_real(VALUE self)
* cmp.imaginary -> real
*
* Returns the imaginary part.
- *
- * Complex(7).imaginary #=> 0
- * Complex(9, -4).imaginary #=> -4
*/
static VALUE
nucomp_imag(VALUE self)
@@ -626,8 +642,6 @@ nucomp_imag(VALUE self)
* -cmp -> complex
*
* Returns negation of the value.
- *
- * -Complex(1, 2) #=> (-1-2i)
*/
static VALUE
nucomp_negate(VALUE self)
@@ -665,12 +679,6 @@ f_addsub(VALUE self, VALUE other,
* 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)
@@ -683,12 +691,6 @@ nucomp_add(VALUE self, VALUE other)
* 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)
@@ -701,12 +703,6 @@ nucomp_sub(VALUE self, VALUE other)
* 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)
@@ -794,11 +790,10 @@ f_divide(VALUE self, VALUE other,
*
* 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)
+ * For example:
+ *
+ * Complex(10.0) / 3 #=> (3.3333333333333335+(0/1)*i)
+ * Complex(10) / 3 #=> ((10/3)+(0/1)*i) # not (3+0i)
*/
static VALUE
nucomp_div(VALUE self, VALUE other)
@@ -814,7 +809,9 @@ nucomp_div(VALUE self, VALUE other)
*
* Performs division as each part is a float, never returns a float.
*
- * Complex(11, 22).fdiv(3) #=> (3.6666666666666665+7.333333333333333i)
+ * For example:
+ *
+ * Complex(11,22).fdiv(3) #=> (3.6666666666666665+7.333333333333333i)
*/
static VALUE
nucomp_fdiv(VALUE self, VALUE other)
@@ -834,8 +831,10 @@ f_reciprocal(VALUE x)
*
* Performs exponentiation.
*
- * Complex('i') ** 2 #=> (-1+0i)
- * Complex(-8) ** Rational(1, 3) #=> (1.0000000000000002+1.7320508075688772i)
+ * For example:
+ *
+ * Complex('i') ** 2 #=> (-1+0i)
+ * Complex(-8) ** Rational(1,3) #=> (1.0000000000000002+1.7320508075688772i)
*/
static VALUE
nucomp_expt(VALUE self, VALUE other)
@@ -888,7 +887,7 @@ nucomp_expt(VALUE self, VALUE other)
if (r)
break;
- x = nucomp_s_new_internal(CLASS_OF(self),
+ x = f_complex_new2(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));
@@ -921,12 +920,6 @@ nucomp_expt(VALUE self, VALUE other)
* 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)
@@ -951,7 +944,7 @@ 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))
+ if (TYPE(other) == T_COMPLEX)
return rb_assoc_new(other, self);
rb_raise(rb_eTypeError, "%s can't be coerced into %s",
@@ -965,9 +958,6 @@ nucomp_coerce(VALUE self, VALUE other)
* 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)
@@ -994,9 +984,6 @@ nucomp_abs(VALUE self)
* 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)
@@ -1014,7 +1001,8 @@ nucomp_abs2(VALUE self)
*
* Returns the angle part of its polar form.
*
- * Complex.polar(3, Math::PI/2).arg #=> 1.5707963267948966
+ * Complex.polar(3, Math::PI/2).arg #=> 1.5707963267948966
+ *
*/
static VALUE
nucomp_arg(VALUE self)
@@ -1029,8 +1017,6 @@ nucomp_arg(VALUE self)
* cmp.rectangular -> array
*
* Returns an array; [cmp.real, cmp.imag].
- *
- * Complex(1, 2).rectangular #=> [1, 2]
*/
static VALUE
nucomp_rect(VALUE self)
@@ -1044,8 +1030,6 @@ nucomp_rect(VALUE self)
* cmp.polar -> array
*
* Returns an array; [cmp.abs, cmp.arg].
- *
- * Complex(1, 2).polar #=> [2.23606797749979, 1.1071487177940904]
*/
static VALUE
nucomp_polar(VALUE self)
@@ -1059,8 +1043,6 @@ nucomp_polar(VALUE self)
* cmp.conjugate -> complex
*
* Returns the complex conjugate.
- *
- * Complex(1, 2).conjugate #=> (1-2i)
*/
static VALUE
nucomp_conj(VALUE self)
@@ -1128,6 +1110,8 @@ nucomp_denominator(VALUE self)
*
* Returns the numerator.
*
+ * For example:
+ *
* 1 2 3+4i <- numerator
* - + -i -> ----
* 2 3 6 <- denominator
@@ -1189,13 +1173,15 @@ nucomp_eql_p(VALUE self, VALUE other)
inline static VALUE
f_signbit(VALUE x)
{
-#if defined(HAVE_SIGNBIT) && defined(__GNUC__) && defined(__sun) && \
+#if defined(HAVE_SIGNBIT) && defined(__GNUC__) && defined(__sun__) && \
!defined(signbit)
extern int signbit(double);
#endif
- if (RB_TYPE_P(x, T_FLOAT)) {
+ switch (TYPE(x)) {
+ case T_FLOAT: {
double f = RFLOAT_VALUE(x);
return f_boolcast(!isnan(f) && signbit(f));
+ }
}
return f_negative_p(x);
}
@@ -1231,12 +1217,6 @@ f_format(VALUE self, VALUE (*func)(VALUE))
* 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)
@@ -1249,12 +1229,6 @@ nucomp_to_s(VALUE self)
* 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)
@@ -1270,25 +1244,6 @@ nucomp_inspect(VALUE self)
/* :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;
@@ -1303,11 +1258,13 @@ nucomp_marshal_dump(VALUE self)
static VALUE
nucomp_marshal_load(VALUE self, VALUE a)
{
+ get_dat1(self);
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));
+ dat->real = RARRAY_PTR(a)[0];
+ dat->imag = RARRAY_PTR(a)[1];
+ rb_copy_generic_ivar(self, a);
return self;
}
@@ -1346,12 +1303,7 @@ rb_Complex(VALUE x, VALUE y)
* 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
+ * Returns the value as an integer if possible.
*/
static VALUE
nucomp_to_i(VALUE self)
@@ -1370,12 +1322,7 @@ nucomp_to_i(VALUE self)
* 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
+ * Returns the value as a float if possible.
*/
static VALUE
nucomp_to_f(VALUE self)
@@ -1394,14 +1341,8 @@ nucomp_to_f(VALUE self)
* 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.
+ * If the imaginary part is exactly 0, returns the real part as a Rational,
+ * otherwise a RangeError is raised.
*/
static VALUE
nucomp_to_r(VALUE self)
@@ -1420,14 +1361,8 @@ nucomp_to_r(VALUE self)
* 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.
+ * If the imaginary part is exactly 0, returns the real part as a Rational,
+ * otherwise a RangeError is raised.
*/
static VALUE
nucomp_rationalize(int argc, VALUE *argv, VALUE self)
@@ -1446,21 +1381,6 @@ nucomp_rationalize(int argc, VALUE *argv, VALUE self)
/*
* 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.
@@ -1483,306 +1403,160 @@ numeric_to_c(VALUE self)
return rb_complex_new1(self);
}
-#include <ctype.h>
+static VALUE comp_pat0, comp_pat1, comp_pat2, a_slash, a_dot_and_an_e,
+ null_string, underscores_pat, an_underscore;
-inline static int
-issign(int c)
-{
- return (c == '-' || c == '+');
-}
+#define WS "\\s*"
+#define DIGITS "(?:[0-9](?:_[0-9]|[0-9])*)"
+#define NUMERATOR "(?:" DIGITS "?\\.)?" DIGITS "(?:[eE][-+]?" DIGITS ")?"
+#define DENOMINATOR DIGITS
+#define NUMBER "[-+]?" NUMERATOR "(?:\\/" DENOMINATOR ")?"
+#define NUMBERNOS NUMERATOR "(?:\\/" DENOMINATOR ")?"
+#define PATTERN0 "\\A" WS "(" NUMBER ")@(" NUMBER ")" WS
+#define PATTERN1 "\\A" WS "([-+])?(" NUMBER ")?[iIjJ]" WS
+#define PATTERN2 "\\A" WS "(" NUMBER ")(([-+])(" NUMBERNOS ")?[iIjJ])?" WS
-static int
-read_sign(const char **s,
- char **b)
+static void
+make_patterns(void)
{
- int sign = '?';
+ static const char comp_pat0_source[] = PATTERN0;
+ static const char comp_pat1_source[] = PATTERN1;
+ static const char comp_pat2_source[] = PATTERN2;
+ static const char underscores_pat_source[] = "_+";
- if (issign(**s)) {
- sign = **b = **s;
- (*s)++;
- (*b)++;
- }
- return sign;
-}
+ if (comp_pat0) return;
-inline static int
-isdecimal(int c)
-{
- return isdigit((unsigned char)c);
-}
+ comp_pat0 = rb_reg_new(comp_pat0_source, sizeof comp_pat0_source - 1, 0);
+ rb_gc_register_mark_object(comp_pat0);
-static int
-read_digits(const char **s, int strict,
- char **b)
-{
- int us = 1;
+ comp_pat1 = rb_reg_new(comp_pat1_source, sizeof comp_pat1_source - 1, 0);
+ rb_gc_register_mark_object(comp_pat1);
- if (!isdecimal(**s))
- return 0;
+ comp_pat2 = rb_reg_new(comp_pat2_source, sizeof comp_pat2_source - 1, 0);
+ rb_gc_register_mark_object(comp_pat2);
- 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;
-}
+ a_slash = rb_usascii_str_new2("/");
+ rb_gc_register_mark_object(a_slash);
-inline static int
-islettere(int c)
-{
- return (c == 'e' || c == 'E');
-}
+ a_dot_and_an_e = rb_usascii_str_new2(".eE");
+ rb_gc_register_mark_object(a_dot_and_an_e);
-static int
-read_num(const char **s, int strict,
- char **b)
-{
- if (**s != '.') {
- if (!read_digits(s, strict, b))
- return 0;
- }
+ null_string = rb_usascii_str_new2("");
+ rb_gc_register_mark_object(null_string);
- if (**s == '.') {
- **b = **s;
- (*s)++;
- (*b)++;
- if (!read_digits(s, strict, b)) {
- (*b)--;
- return 0;
- }
- }
+ underscores_pat = rb_reg_new(underscores_pat_source,
+ sizeof underscores_pat_source - 1, 0);
+ rb_gc_register_mark_object(underscores_pat);
- if (islettere(**s)) {
- **b = **s;
- (*s)++;
- (*b)++;
- read_sign(s, b);
- if (!read_digits(s, strict, b)) {
- (*b)--;
- return 0;
- }
- }
- return 1;
+ an_underscore = rb_usascii_str_new2("_");
+ rb_gc_register_mark_object(an_underscore);
}
-inline static int
-read_den(const char **s, int strict,
- char **b)
-{
- if (!read_digits(s, strict, b))
- return 0;
- return 1;
-}
+#define id_match rb_intern("match")
+#define f_match(x,y) rb_funcall((x), id_match, 1, (y))
-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);
+#define id_gsub_bang rb_intern("gsub!")
+#define f_gsub_bang(x,y,z) rb_funcall((x), id_gsub_bang, 2, (y), (z))
static VALUE
-str2num(char *s)
+string_to_c_internal(VALUE self)
{
- 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" */
- }
+ VALUE s;
- 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);
+ s = self;
- if (isimagunit(**s)) {
- (*s)++;
- *ret = rb_complex_new2(ZERO, num);
- return 1; /* e.g. "3i" */
- }
+ if (RSTRING_LEN(s) == 0)
+ return rb_assoc_new(Qnil, self);
- 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@-" */
+ {
+ VALUE m, sr, si, re, r, i;
+ int po;
+
+ m = f_match(comp_pat0, s);
+ if (!NIL_P(m)) {
+ sr = rb_reg_nth_match(1, m);
+ si = rb_reg_nth_match(2, m);
+ re = rb_reg_match_post(m);
+ po = 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" */
+ if (NIL_P(m)) {
+ m = f_match(comp_pat1, s);
+ if (!NIL_P(m)) {
+ sr = Qnil;
+ si = rb_reg_nth_match(1, m);
+ if (NIL_P(si))
+ si = rb_usascii_str_new2("");
+ {
+ VALUE t;
+
+ t = rb_reg_nth_match(2, m);
+ if (NIL_P(t))
+ t = rb_usascii_str_new2("1");
+ rb_str_concat(si, t);
+ }
+ re = rb_reg_match_post(m);
+ po = 0;
}
- **b = '\0';
- num2 = str2num(bb);
}
- if (!isimagunit(**s)) {
- *ret = rb_complex_new2(num, ZERO);
- return 0; /* e.g. "1+3x" */
+ if (NIL_P(m)) {
+ m = f_match(comp_pat2, s);
+ if (NIL_P(m))
+ return rb_assoc_new(Qnil, self);
+ sr = rb_reg_nth_match(1, m);
+ if (NIL_P(rb_reg_nth_match(2, m)))
+ si = Qnil;
+ else {
+ VALUE t;
+
+ si = rb_reg_nth_match(3, m);
+ t = rb_reg_nth_match(4, m);
+ if (NIL_P(t))
+ t = rb_usascii_str_new2("1");
+ rb_str_concat(si, t);
+ }
+ re = rb_reg_match_post(m);
+ po = 0;
}
- (*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;
+ r = INT2FIX(0);
+ i = INT2FIX(0);
+ if (!NIL_P(sr)) {
+ if (strchr(RSTRING_PTR(sr), '/'))
+ r = f_to_r(sr);
+ else if (strpbrk(RSTRING_PTR(sr), ".eE"))
+ r = f_to_f(sr);
+ else
+ r = f_to_i(sr);
+ }
+ if (!NIL_P(si)) {
+ if (strchr(RSTRING_PTR(si), '/'))
+ i = f_to_r(si);
+ else if (strpbrk(RSTRING_PTR(si), ".eE"))
+ i = f_to_f(si);
+ else
+ i = f_to_i(si);
+ }
+ if (po)
+ return rb_assoc_new(rb_complex_polar(r, i), re);
+ else
+ return rb_assoc_new(rb_complex_new2(r, i), re);
}
- 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);
+ VALUE a = string_to_c_internal(self);
+ if (NIL_P(RARRAY_PTR(a)[0]) || RSTRING_LEN(RARRAY_PTR(a)[1]) > 0) {
+ VALUE s = f_inspect(self);
rb_raise(rb_eArgError, "invalid value for convert(): %s",
- StringValuePtr(ins));
+ StringValuePtr(s));
}
-
- return num;
+ return RARRAY_PTR(a)[0];
}
+#define id_gsub rb_intern("gsub")
+#define f_gsub(x,y,z) rb_funcall((x), id_gsub, 2, (y), (z))
+
/*
* call-seq:
* str.to_c -> complex
@@ -1792,6 +1566,8 @@ string_to_c_strict(VALUE self)
* sequences can be separated by an underscore. Returns zero for null
* or garbage string.
*
+ * For example:
+ *
* '9'.to_c #=> (9+0i)
* '2.5'.to_c #=> (2.5+0i)
* '2.5/1'.to_c #=> ((5/2)+0i)
@@ -1803,31 +1579,23 @@ string_to_c_strict(VALUE self)
* '-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);
+ VALUE s, a, backref;
- s = RSTRING_PTR(self);
-
- if (s && s[RSTRING_LEN(self)]) {
- rb_str_modify(self);
- s = RSTRING_PTR(self);
- s[RSTRING_LEN(self)] = '\0';
- }
+ backref = rb_backref_get();
+ rb_match_busy(backref);
- if (!s)
- s = (char *)"";
+ s = f_gsub(self, underscores_pat, an_underscore);
+ a = string_to_c_internal(s);
- (void)parse_comp(s, 0, &num);
+ rb_backref_set(backref);
- return num;
+ if (!NIL_P(RARRAY_PTR(a)[0]))
+ return RARRAY_PTR(a)[0];
+ return rb_complex_new1(INT2FIX(0));
}
static VALUE
@@ -1843,17 +1611,30 @@ nucomp_s_convert(int argc, VALUE *argv, VALUE klass)
backref = rb_backref_get();
rb_match_busy(backref);
- if (RB_TYPE_P(a1, T_STRING)) {
+ switch (TYPE(a1)) {
+ case T_FIXNUM:
+ case T_BIGNUM:
+ case T_FLOAT:
+ break;
+ case T_STRING:
a1 = string_to_c_strict(a1);
+ break;
}
- if (RB_TYPE_P(a2, T_STRING)) {
+ switch (TYPE(a2)) {
+ case T_FIXNUM:
+ case T_BIGNUM:
+ case T_FLOAT:
+ break;
+ case T_STRING:
a2 = string_to_c_strict(a2);
+ break;
}
rb_backref_set(backref);
- if (RB_TYPE_P(a1, T_COMPLEX)) {
+ switch (TYPE(a1)) {
+ case T_COMPLEX:
{
get_dat1(a1);
@@ -1862,7 +1643,8 @@ nucomp_s_convert(int argc, VALUE *argv, VALUE klass)
}
}
- if (RB_TYPE_P(a2, T_COMPLEX)) {
+ switch (TYPE(a2)) {
+ case T_COMPLEX:
{
get_dat1(a2);
@@ -1871,7 +1653,8 @@ nucomp_s_convert(int argc, VALUE *argv, VALUE klass)
}
}
- if (RB_TYPE_P(a1, T_COMPLEX)) {
+ switch (TYPE(a1)) {
+ case T_COMPLEX:
if (argc == 1 || (k_exact_zero_p(a2)))
return a1;
}
@@ -1959,7 +1742,6 @@ numeric_arg(VALUE self)
/*
* call-seq:
* num.rect -> array
- * num.rectangular -> array
*
* Returns an array; [num, 0].
*/
@@ -2047,30 +1829,35 @@ float_arg(VALUE self)
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_abs2 = rb_intern("abs2");
id_arg = rb_intern("arg");
+ id_cmp = rb_intern("<=>");
+ id_conj = rb_intern("conj");
id_convert = rb_intern("convert");
id_denominator = rb_intern("denominator");
+ id_divmod = rb_intern("divmod");
id_eqeq_p = rb_intern("==");
id_expt = rb_intern("**");
id_fdiv = rb_intern("fdiv");
+ id_floor = rb_intern("floor");
+ id_idiv = rb_intern("div");
+ id_imag = rb_intern("imag");
id_inspect = rb_intern("inspect");
id_negate = rb_intern("-@");
id_numerator = rb_intern("numerator");
id_quo = rb_intern("quo");
+ id_real = rb_intern("real");
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);
@@ -2159,10 +1946,8 @@ Init_Complex(void)
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, "marshal_dump", nucomp_marshal_dump, 0);
+ rb_define_method(rb_cComplex, "marshal_load", nucomp_marshal_load, 1);
/* --- */
@@ -2170,10 +1955,11 @@ Init_Complex(void)
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);
+ make_patterns();
+
rb_define_method(rb_cString, "to_c", string_to_c, 0);
rb_define_private_method(CLASS_OF(rb_cComplex), "convert", nucomp_s_convert, -1);
@@ -2197,9 +1983,6 @@ Init_Complex(void)
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));
}
diff --git a/configure.in b/configure.in
index 5968bbdb14..b006a01a81 100644
--- a/configure.in
+++ b/configure.in
@@ -1,37 +1,15 @@
dnl Process this file with autoconf to produce a configure script.
+dnl {
AC_INIT()
-{
AC_CONFIG_AUX_DIR(tool)
-AC_PREREQ(2.67)
+AC_PREREQ(2.60)
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
+dnl environment section {
AC_ARG_WITH(baseruby,
AS_HELP_STRING([--with-baseruby=RUBY], [use RUBY as baseruby; RUBY is the pathname of ruby]),
@@ -41,20 +19,10 @@ AC_ARG_WITH(baseruby,
[
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
+test "`RUBYOPT=- $BASERUBY -e 'p 42' 2>/dev/null`" = 42 ||
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*], [
@@ -65,10 +33,7 @@ AC_CACHE_CHECK(for mingw32 environment, rb_cv_mingw32,
#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
+test "$rb_cv_mingw32" = yes && target_os="mingw32"
])
AS_CASE(["$target_os"], [mingw*msvc], [
target_os="`echo ${target_os} | sed 's/msvc$//'`"
@@ -78,93 +43,12 @@ 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])
-
- 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"
+[cppflags=$CPPFLAGS
+CPPFLAGS='-o conftest.i'
+AC_TRY_CPP([], rb_cv_cppoutfile=yes, rb_cv_cppoutfile=no)
+CPPFLAGS=$cppflags
rm -f conftest*])
if test "$rb_cv_cppoutfile" = yes; then
CPPOUTFILE='-o conftest.i'
@@ -199,11 +83,12 @@ RUBY_PROGRAM_VERSION=`sed -n 's/^#define RUBY_VERSION "\(.*\)"/\1/p' $srcdir/ver
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)
+if test "$MAJOR" = "1"; then
+ AC_DEFINE(CANONICALIZATION_FOR_MATHN)
+fi
+
dnl checks for alternative programs
AC_CANONICAL_BUILD
-RUBY_RM_RECURSIVE
AC_ARG_WITH(gcc,
AS_HELP_STRING([--without-gcc], [never use gcc]),
[
@@ -218,7 +103,7 @@ then
(it is also a good idea to do 'make clean' before compiling))
fi
AS_CASE(["$build_os"],
- [darwin1*.*], [
+ [darwin11.*], [
AS_CASE(["x$CC"],
[xgcc-4.2|x/usr/bin/gcc-4.2], [: ${CXX=g++-4.2}],
[xgcc|x/usr/bin/gcc], [: ${CXX=g++}],
@@ -226,7 +111,6 @@ AS_CASE(["$build_os"],
[xclang|x/usr/bin/clang], [: ${CXX=clang++}])
])
test -z "$CC" || ac_cv_prog_CC="$CC"
-test -z "$CXX" || ac_cv_prog_CXX="$CXX"
if test "$program_prefix" = NONE; then
program_prefix=
@@ -235,57 +119,30 @@ 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)
+ [# RUBY_APPEND_OPTION($1, $2)
AS_CASE([" [$]{$1-} "],
[*' $2 '*], [], [' '], [ $1="$2"], [ $1="[$]$1 $2"])])
AC_DEFUN([RUBY_APPEND_OPTIONS],
- [# RUBY_APPEND_OPTIONS($1)
- for rb_opt in $2; do
+ [{ for rb_opt in $2; do # RUBY_APPEND_OPTIONS($1, $2)
AS_CASE([" [$]{$1-} "],
[*" [$]{rb_opt} "*], [], [' '], [ $1="[$]{rb_opt}"], [ $1="[$]$1 [$]{rb_opt}"])
- done])
+ done; }])
AC_DEFUN([RUBY_PREPEND_OPTION],
- [# RUBY_PREPEND_OPTION($1)
+ [# RUBY_PREPEND_OPTION($1, $2)
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
+ [{ unset rb_opts; for rb_opt in $2; do # RUBY_PREPEND_OPTIONS($1, $2)
AS_CASE([" [$]{rb_opts} [$]{$1-} "],
[*" [$]{rb_opt} "*], [], [' '], [ $1="[$]{rb_opt}"], [ rb_opts="[$]{rb_opts}[$]{rb_opt} "])
done
- $1="[$]{rb_opts}[$]$1"])
+ $1="[$]{rb_opts}[$]$1"; }])
AC_ARG_WITH(arch,
AS_HELP_STRING([--with-arch=ARCHS],
@@ -339,6 +196,7 @@ if test ${target_archs+set}; then
target=`echo $target | sed "s/^$target_cpu-/-/"`
target_alias=`echo $target_alias | sed "s/^$target_cpu-/-/"`
if test "${universal_binary-no}" = yes; then
+ RUBY_PREREQ_AC(2.63, [ to compile universal binary])
AC_SUBST(try_header,try_compile)
target_cpu=universal
real_cross_compiling=$cross_compiling
@@ -420,43 +278,17 @@ if test -z "${CXXFLAGS+set}"; then
cxxflags="$cxxflags "'${optflags} ${debugflags} ${warnflags}'
fi
-RUBY_NACL
-AS_CASE(["$host_os:$build_os"],
-[darwin*:darwin*], [
- AC_CHECK_TOOLS(CC, [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_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///'`
- gcc_minor=`echo =__GNUC_MINOR__ | $CC -E -xc - | sed '/^=/!d;s///'`
- test -n "$gcc_major" || gcc_major=0
- test -n "$gcc_minor" || gcc_minor=0
- # RUBY_APPEND_OPTIONS(XCFLAGS, ["-include ruby/config.h" "-include ruby/missing.h"])
+ RUBY_APPEND_OPTIONS(XCFLAGS, ["-include ruby/config.h" "-include ruby/missing.h"])
else
linker_flag=
fi
@@ -469,44 +301,12 @@ RUBY_CPPOUTFILE
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_MINGW32
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
@@ -543,9 +343,6 @@ AS_CASE(["$target_os"],
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}
],
@@ -568,55 +365,8 @@ 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"`])
@@ -646,7 +396,7 @@ $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
+if test -e conf$$.dir/src/cdcmd; then
read CHDIR < conf$$.dir/src/cdcmd 2> /dev/null
else
CHDIR=cd
@@ -655,8 +405,8 @@ rm -fr conf$$.dir
AC_MSG_RESULT([$CHDIR])
AC_SUBST(CHDIR)
-}
-{ # compiler section
+dnl }
+dnl compiler section {
AC_DEFUN([RUBY_WERROR_FLAG], [dnl
save_CFLAGS="$CFLAGS"
@@ -676,27 +426,8 @@ 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])
+ AC_MSG_CHECKING([whether ]$1[ is accepted])
RUBY_WERROR_FLAG([
CFLAGS="[$]CFLAGS $1"
AC_TRY_COMPILE([$4], [$5],
@@ -710,7 +441,7 @@ AC_DEFUN(RUBY_TRY_CFLAGS, [
AC_DEFUN(RUBY_TRY_LDFLAGS, [
save_LDFLAGS="$LDFLAGS"
LDFLAGS="[$]LDFLAGS $1"
- AC_MSG_CHECKING([whether $1 is accepted as LDFLAGS])
+ AC_MSG_CHECKING([whether $1 is accepted])
RUBY_WERROR_FLAG([
AC_TRY_LINK([$4], [$5],
[$2
@@ -722,45 +453,28 @@ AC_DEFUN(RUBY_TRY_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
+ particular_werror_flags=yes
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 \
+ -Werror-implicit-function-declaration \
; do
- if test "$particular_werror_flags" != yes; then
+ if test "$particular_werror_flags" = yes; then
+ wflag=`echo x$wflag | sed 's/^x-Werror-/-Werror=/;s/^x//'`
+ else
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
- ])
+ RUBY_TRY_CFLAGS($wflag, [warnflags="${warnflags+$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)
+ warnflags="${warnflags+$warnflags }$wflag"
particular_werror_flags=no
])
])
@@ -772,387 +486,43 @@ if test "$GCC:${warnflags+set}:no" = yes::no; then
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"])
+ AS_CASE(["$target_os"],[aix*],[warnflags="-qinfo=por"])
fi
if test "$GCC" = yes; then
- if test "$gcc_major" -ge 4; then
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
+ @%:@if !(defined __GNUC__ && __GNUC__ >= 4)
+ @%:@error not GCC 4 or later
+ >>>not GCC 4 or later<<<
+ @%:@endif])],
+ [visibility_option=yes], [visibility_option=no])
+ if test "$visibility_option" = yes; 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=:
+ test "$visibility_option" = no || 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.
-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()
- if test $gcc_major -lt 4 -o \( $gcc_major -eq 4 -a $gcc_minor -lt 3 \); then
- ac_cv_func___builtin_setjmp=no
- fi
- 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
-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
@@ -1161,18 +531,7 @@ 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
- ])
- ])
+AS_CASE(["$target_os"],[mingw*], [ac_cv_type_off_t=yes;ac_cv_sizeof_off_t=8])
AC_C_BIGENDIAN
AC_C_CONST
@@ -1231,8 +590,11 @@ static ac__type_sizeof_ *rbcv_ptr;
done
done
}])
- m4_ifval([$2][$3],
- [test "${AS_TR_SH(ac_cv_sizeof_$1)@%:@SIZEOF_}" = "${AS_TR_SH(ac_cv_sizeof_$1)}" && ]){
+ m4_ifval([$2][$3], [case "${AS_TR_SH(ac_cv_sizeof_$1)}" in
+ #(
+ [SIZEOF_*]);;
+ #(
+ *)])
test "$universal_binary" = yes && cross_compiling=yes
AC_COMPUTE_INT([t], AS_TR_CPP(SIZEOF_$1), [AC_INCLUDES_DEFAULT([$4])]
[${cond+$cond
@@ -1246,7 +608,7 @@ ${cond+@%:@endif}
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
- }
+ m4_ifval([$2][$3], [;; esac])
: ${AS_TR_SH(ac_cv_sizeof_$1)=0}
])
{
@@ -1277,19 +639,16 @@ 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
+ RUBY_WERROR_FLAG(for pri in $2; do
AC_TRY_COMPILE(
[@%:@include <stdio.h>
@%:@include <stddef.h>
@@ -1316,11 +675,6 @@ 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],
@@ -1333,7 +687,10 @@ AC_DEFUN([RUBY_REPLACE_TYPE], [dnl
[*" signed "*], [ ],
[*" unsigned "*], [
u=U],
- [RUBY_CHECK_SIGNEDNESS($n, [], [u=U], [$4])])
+ [
+ AC_COMPILE_IFELSE(
+ [AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT([$4])], [($n)-1 > 0])],
+ [u=U])])
if test x"$t" = x; then
for t in "long long" long int short; do
test -n "$u" && t="unsigned $t"
@@ -1358,9 +715,7 @@ AC_DEFUN([RUBY_REPLACE_TYPE], [dnl
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,
@@ -1372,17 +727,7 @@ 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)
+RUBY_REPLACE_TYPE(rlim_t, [int long "long long"], RLIM, [@%:@include <sys/resource.h>])
AC_CACHE_CHECK(for prototypes, rb_cv_have_prototypes,
[AC_TRY_COMPILE([int foo(int x) { return 0; }], [return foo(10);],
@@ -1393,12 +738,12 @@ if test "$rb_cv_have_prototypes" = yes; then
fi
AC_CACHE_CHECK(token paste string, rb_cv_tokenpaste,
- [AC_TRY_COMPILE([@%:@define paste(a,b) a@%:@@%:@b],
+ [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])
+ AC_DEFINE(TOKEN_PASTE(x,y),[x##y])
else
AC_DEFINE(TOKEN_PASTE(x,y),[x/**/y])
fi
@@ -1468,12 +813,12 @@ if test "$rb_cv_va_args_macro" = yes; then
fi
AC_DEFUN([RUBY_DEFINE_IF], [dnl
- m4_ifval([$1], [AS_LITERAL_IF([$1], [], [test "X$1" = X || ])cat <<EOH >> confdefs.h
+ m4_ifval([$1],[test "$1" && 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
+AC_DEFINE_UNQUOTED($2, $3)
+ m4_ifval([$1],[test "$1" && cat <<EOH >> confdefs.h
@%:@endif /* $1 */
EOH
])dnl
@@ -1489,7 +834,7 @@ 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])
+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([
@@ -1506,11 +851,10 @@ ${rbcv_cond+[@%:@endif]})
done
])])
if test "$rbcv" != x; then
- RUBY_DEFINE_IF(m4_ifval([$4],[${rbcv_cond}]), attrib[(x)], $rbcv)
+ RUBY_DEFINE_IF([${rbcv_cond}], attrib[(x)], $rbcv)
fi
-m4_ifval([$4], [unset rbcv_cond])dnl
-AS_VAR_POPDEF([attrib])dnl
-AS_VAR_POPDEF([rbcv])dnl
+AS_VAR_POPDEF([attrib])
+AS_VAR_POPDEF([rbcv])
])
RUBY_FUNC_ATTRIBUTE(noreturn, NORETURN)
@@ -1531,28 +875,12 @@ if test "$GCC" = yes; then
[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_CACHE_CHECK([for atomic builtins], [rb_cv_gcc_atomic_builtins], [
AC_TRY_LINK([unsigned char atomic_var;],
[
__sync_lock_test_and_set(&atomic_var, 0);
@@ -1560,22 +888,10 @@ if test "$GCC" = yes; then
__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()])
+ [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
fi
@@ -1594,27 +910,237 @@ 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 }
+dnl header and library section {
dnl Check whether we need to define sys_nerr locally
AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default
-@%:@include <errno.h>])
+#include <errno.h>])
+
+AC_ARG_ENABLE(win95,
+ AS_HELP_STRING([--enable-win95], [enable Windows 95 series support]),
+ [AS_CASE(["$enableval"],[yes|no],[enable_win95=$enableval],[unset enable_win95])])
+
+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.
+AS_CASE(["$target_os"],[*bsd*|dragonfly*],[],[ac_cv_func_daemon=no])
-AC_CHECK_DECLS([getenv])
+AS_CASE(["$target_os"],
+[solaris*], [
+ AC_DEFINE(SIZEOF_STRUCT_DIRENT_TOO_SMALL, 1)
+ LIBS="-lm $LIBS"
+ ],
+# GNU Hurd
+[gnu*], [
+ AC_DEFINE(SIZEOF_STRUCT_DIRENT_TOO_SMALL, 1)
+ LIBS="-lm $LIBS"
+ ],
+[nextstep*], [ ],
+[openstep*], [ ],
+[rhapsody*], [ ],
+[darwin*], [ RUBY_PREPEND_OPTION(LIBS, -lobjc)
+ RUBY_APPEND_OPTIONS(CPPFLAGS, -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE)
+ 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
+ ],
+[hpux*], [ LIBS="-lm $LIBS"
+ ac_cv_c_inline=no],
+[human*], [ ac_cv_func_getpgrp_void=yes
+ ac_cv_func_setitimer=no
+ AC_CHECK_LIB(signal, _harderr)
+ AC_CHECK_LIB(hmem, hmemset)
+ AC_CHECK_FUNCS(select)
+ AC_CACHE_CHECK(whether PD libc _dtos18 fail to convert big number,
+ rb_cv_missing__dtos18,
+ [AC_TRY_RUN([
+#include <stdio.h>
+int
+main()
+{
+ char buf[256];
+ sprintf(buf, "%g", 1e+300);
+ return (strcmp (buf, "1e+300") ? 0 : 1);
+}
+],
+ rb_cv_missing__dtos18=yes, rb_cv_missing__dtos18=no, rb_cv_missing__dtos18=no)])
+ if test "$rb_cv_missing__dtos18" = yes; then
+ AC_DEFINE(MISSING__DTOS18)
+ fi
+ AC_CACHE_CHECK(whether PD libc fconvert fail to round,
+ rb_cv_missing_fconvert,
+ [AC_TRY_RUN([
+#include <stdio.h>
+#include <math.h>
+int
+main()
+{
+ char buf[256];
+ sprintf(buf, "%f", log(exp(1.0)));
+ return (strcmp (buf, "1.000000") ? 0 : 1);
+}
+],
+ rb_cv_missing_fconvert=yes, rb_cv_missing_fconvert=no, rb_cv_missing_fconvert=no)])
+ if test "$rb_cv_missing_fconvert" = yes; then
+ AC_DEFINE(MISSING_FCONVERT)
+ fi
+ ],
+[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 -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_func_fseeko=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
+ rb_cv_large_fd_select=yes
+ AC_LIBOBJ([langinfo])
+ : ${enable_win95=maybe}
+ ],
+[os2-emx*], [ LIBS="-lm $LIBS"
+ ac_cv_lib_dir_opendir=no],
+[msdosdjgpp*], [
+ LIBS="-lm $LIBS"
+ ac_cv_func_getpgrp_void=yes
+ ac_cv_func_setitimer=no
+ ac_cv_sizeof_rlim_t=4
+ ac_cv_func_fork=no
+ ac_cv_func_setrlimit=no
+ ac_cv_header_sys_socket_h=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"
+ ],
+[bow], [ ac_cv_func_setitimer=no
+ ],
+[superux*], [ ac_cv_func_setitimer=no
+ ],
+[ LIBS="-lm $LIBS"])
+AC_CHECK_LIB(crypt, crypt)
+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, socketpair) # SunOS/Solaris
+AC_CHECK_LIB(rt, clock_gettime) # GNU/Linux
+if test "${enable_win95}" = maybe; then
+ AC_HAVE_LIBRARY(unicows, [enable_win95=yes], [enable_win95=no])
+fi
+if test "${enable_win95}" = yes; then
+ AC_DEFINE(WIN95)
+ LIBS="-lunicows $LIBS"
+fi
AS_CASE(["$target_cpu"],
[alpha*|sh4|sh4el|sh4eb], [AS_CASE(["$target_os"::"$GCC"],
@@ -1632,10 +1158,19 @@ else
ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=yes}
fi
+dnl Checks for header files.
+AC_HEADER_DIRENT
+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 xti.h netinet/in_systm.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)
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)
@@ -1657,36 +1192,8 @@ 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
@@ -1722,7 +1229,6 @@ typedef $1 t; int s = sizeof(t) == 42;])],
["$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)
@@ -1750,46 +1256,74 @@ 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
+for addr in __libc_stack_end _SEND; do
AC_TRY_LINK(
- [extern void *__libc_stack_end;],
- [if (!__libc_stack_end) return 1;],
- [rb_cv_stack_end_address="__libc_stack_end"])
-])
+ [extern void *$addr;],
+ [if (!$addr) return 1;],
+ [rb_cv_stack_end_address="$addr"; break])
+done])
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>
+AC_CACHE_CHECK(for gc_mark and gc_children stack frame approximate size(word), rb_cv_gc_mark_stackframe_word,
+[save_CFLAGS="$CFLAGS"
+CFLAGS="-O0"
+AC_TRY_RUN([
+int word;
+char *stack_start;
+
+void
+set_stackframe_word()
+{
+ int dumy = 42;
+ int diff;
+
+ if (stack_start < (char *)&dumy) {
+ diff = (int)((char *)&dumy - stack_start);
+ }
+ else {
+ diff = (int)(stack_start - (char *)&dumy);
+ }
+ word = (diff/sizeof(void *));
+ if ((diff % sizeof(void *)) != 0) {
+ word++;
+ }
+}
+
+void
+gc_mark_children(void *p1, void *p2, int lev)
+{
+ void *obj = p2;
+
+ set_stackframe_word(p1,p2,lev);
+}
+
+void
+gc_mark(void *p1, void *p2, int lev)
+{
+ void *obj = p2;
+
+ gc_mark_children(p1,p2,lev++);
+}
int
main() {
- if ((int)log2((double)sysconf(_SC_PAGESIZE)) != $page_log) return 1;
- return 0;
+ int dumy = 42;
+
+ stack_start = (char *)&dumy;
+ gc_mark(0, 0, 255);
+ return word;
}
- ],
- 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
-])
+],
+ [rb_cv_gc_mark_stackframe_word="$?"],
+ [rb_cv_gc_mark_stackframe_word="$?"],
+ [rb_cv_gc_mark_stackframe_word="30"])
+CFLAGS="$save_CFLAGS"])
+AC_DEFINE_UNQUOTED(GC_MARK_STACKFRAME_WORD, $rb_cv_gc_mark_stackframe_word)
+
dnl Checks for library functions.
AC_TYPE_GETGROUPS
@@ -1865,7 +1399,6 @@ 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,
@@ -1879,136 +1412,19 @@ if test "$rb_cv_have_signbit" = yes; then
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_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall __syscall chroot getcwd eaccess\
+ truncate ftruncate ftello chsize times utimes utimensat fcntl lockf lstat\
+ truncate64 ftruncate64 ftello64 fseeko fseeko64 \
+ link symlink readlink readdir_r fsync fdatasync fchown posix_fadvise\
+ setitimer setruid seteuid setreuid setresuid socketpair\
+ setrgid setegid setregid setresgid issetugid pause lchown lchmod\
+ getpgrp setpgrp getpgid setpgid initgroups getgroups setgroups\
+ getpriority getrlimit setrlimit sysconf close getgrnam_r\
+ dlopen sigprocmask sigaction sigsetjmp _setjmp _longjmp\
+ setsid telldir seekdir fchmod cosh sinh tanh log2 round\
+ setuid setgid daemon select_large_fdset setenv unsetenv\
+ mktime timegm gmtime_r clock_gettime gettimeofday poll ppoll\
+ pread sendfile shutdown sigaltstack dl_iterate_phdr)
AC_CACHE_CHECK(for unsetenv returns a value, rb_cv_unsetenv_return_value,
[AC_TRY_COMPILE([
@@ -2020,89 +1436,49 @@ 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])
+[AC_TRY_LINK([@%:@include <setjmp.h>
+ jmp_buf jb; void t(v) int v; {__builtin_longjmp(jb, v);}],
+ [__builtin_setjmp(jb);],
+ [ac_cv_func___builtin_setjmp=yes],
+ [ac_cv_func___builtin_setjmp=no])
])
-# 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],
+ [__builtin_setjmp], [ setjmp_prefix=__builtin_],
[_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)
+ if test "${setjmp_prefix}" && eval test '$ac_cv_func_'${setjmp_prefix}setjmp = no; then
+ AC_MSG_ERROR(${setjmp_prefix}setjmp 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 (\(.*\))"`
+elif test "$ac_cv_func___builtin_setjmp" = yes; then
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_MSG_RESULT(${setjmp_prefix}setjmp)
+AC_DEFINE_UNQUOTED([RUBY_SETJMP(env)], [${setjmp_prefix}setjmp(env${setjmp_sigmask+,0})])
+AC_DEFINE_UNQUOTED([RUBY_LONGJMP(env,val)], [${setjmp_prefix}longjmp(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]),
@@ -2113,7 +1489,7 @@ if test "$use_setreuid" = yes; then
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>],
+ [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])])
@@ -2248,7 +1624,7 @@ main()
],
rb_cv_localtime_overflow=yes,
rb_cv_localtime_overflow=no,
- rb_cv_localtime_overflow=no)])
+ rb_cv_localtime_overflow=yes)])
if test "$rb_cv_localtime_overflow" = no; then
AC_DEFINE(LOCALTIME_OVERFLOW_PROBLEM)
fi
@@ -2286,16 +1662,9 @@ main()
fi
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
@@ -2324,7 +1693,6 @@ else
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)"
@@ -2344,7 +1712,6 @@ 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
@@ -2382,10 +1749,6 @@ if test "$rb_cv_frptr" != "not found"; then
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
@@ -2480,7 +1843,7 @@ if test x"$enable_pthread" = xyes; then
[root], [],
[c_r], [MAINLIBS="-pthread $MAINLIBS"],
[AS_CASE(["$target_os"],
- [openbsd*|mirbsd*], [LIBS="-pthread $LIBS"],
+ [openbsd*], [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")
@@ -2489,43 +1852,7 @@ if test x"$enable_pthread" = xyes; then
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
+ pthread_condattr_setclock pthread_sigmask)
fi
if test x"$ac_cv_header_ucontext_h" = xyes; then
if test x"$rb_with_pthread" = xyes; then
@@ -2598,9 +1925,25 @@ main(int argc, char *argv[])
test x$rb_cv_fork_with_pthread = xyes || AC_DEFINE(CANNOT_FORK_WITH_PTHREAD)
fi
+AS_CASE(["$target_os"],
+[freebsd*], [
+ AC_CHECK_HEADERS([/usr/local/include/execinfo.h])
+ if test "x$ac_cv_header__usr_local_include_execinfo_h" = xyes; then :
+ RUBY_APPEND_OPTION(CPPFLAGS, -I/usr/local/include)
+ LDFLAGS="${LDFLAGS:+$LDFLAGS }-L/usr/local/lib"
+ DLDFLAGS="${DLDFLAGS:+$DLDFLAGS }-L/usr/local/lib"
+ AC_CHECK_LIB([execinfo], [backtrace])
+ fi])
+AC_CHECK_FUNCS(backtrace)
+
+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)])
-}
-{ # runtime section
+dnl }
+dnl runtime section {
dnl wheather use dln_a_out or not
AC_ARG_WITH(dln-a-out,
@@ -2626,14 +1969,11 @@ if test "$rb_cv_binary_elf" = yes; then
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
+ AC_LIBOBJ([addr2line])
fi
AS_CASE(["$target_os"],
-[linux* | gnu* | k*bsd*-gnu | bsdi* | kopensolaris*-gnu | nacl], [
+[linux* | gnu* | k*bsd*-gnu | bsdi* | kopensolaris*-gnu], [
if test "$rb_cv_binary_elf" = no; then
with_dln_a_out=yes
else
@@ -2660,7 +2000,7 @@ if test "$with_dln_a_out" != yes; then
AC_MSG_CHECKING(whether OS depend dynamic link works)
if test "$GCC" = yes; then
AS_CASE(["$target_os"],
- [darwin*], [
+ [nextstep*|openstep*|rhapsody*|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
@@ -2669,7 +2009,7 @@ if test "$with_dln_a_out" != yes; then
# 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*], [ ],
+ [human*|bsdi*|beos*|haiku*|cygwin*|mingw*|aix*|interix*], [ ],
[
RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC)])
else
@@ -2692,7 +2032,7 @@ if test "$with_dln_a_out" != yes; then
AS_CASE(["$target_os"],
[hpux*], [ DLDFLAGS="$DLDFLAGS -E"
- : ${LDSHARED='$(LD) -b'}
+ : ${LDSHARED='ld -b'}
XLDFLAGS="$XLDFLAGS -Wl,-E"
: ${LIBPATHENV=SHLIB_PATH}
if test "$rb_cv_prog_gnu_ld" = no; then
@@ -2711,17 +2051,17 @@ if test "$with_dln_a_out" != yes; then
: ${LIBPATHENV=LD_LIBRARY_PATH_64}
fi
rb_cv_dlopen=yes],
- [sunos*], [ : ${LDSHARED='$(LD) -assert nodefinitions'}
+ [sunos*], [ : ${LDSHARED='ld -assert nodefinitions'}
rb_cv_dlopen=yes],
- [irix*], [ : ${LDSHARED='$(LD) -shared'}
+ [irix*], [ : ${LDSHARED='ld -shared'}
rb_cv_dlopen=yes],
- [sysv4*], [ : ${LDSHARED='$(LD) -G'}
+ [sysv4*], [ : ${LDSHARED='ld -G'}
rb_cv_dlopen=yes],
[nto-qnx*], [ : ${LDSHARED='$(CC) -shared'}
rb_cv_dlopen=yes],
- [esix*|uxpds*], [ : ${LDSHARED='$(LD) -G'}
+ [esix*|uxpds*], [ : ${LDSHARED="ld -G"}
rb_cv_dlopen=yes],
- [osf*], [ : ${LDSHARED='$(LD) -shared -expect_unresolved "*"'}
+ [osf*], [ : ${LDSHARED="ld -shared -expect_unresolved \"*\""}
rb_cv_dlopen=yes],
[bsdi3*], [ AS_CASE(["$CC"],
[*shlicc*], [ : ${LDSHARED='$(CC) -r'}
@@ -2740,27 +2080,33 @@ if test "$with_dln_a_out" != yes; then
: ${LDSHARED='$(CC) -shared'}
if test "$rb_cv_binary_elf" = yes; then
LDFLAGS="$LDFLAGS -rdynamic"
- DLDFLAGS="$DLDFLAGS "'-Wl,-soname,$@'
+ DLDFLAGS="$DLDFLAGS "'-Wl,-soname,$(.TARGET)'
else
- test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED='$(LD) -Bshareable'
+ test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED="ld -Bshareable"
fi
rb_cv_dlopen=yes],
- [openbsd*|mirbsd*], [ : ${LDSHARED='$(CC) -shared ${CCDLFLAGS}'}
+ [openbsd*], [ : ${LDSHARED='$(CC) -shared ${CCDLFLAGS}'}
if test "$rb_cv_binary_elf" = yes; then
LDFLAGS="$LDFLAGS -Wl,-E"
fi
rb_cv_dlopen=yes],
+ [nextstep*], [ : ${LDSHARED='$(CC) -r -nostdlib'}
+ LDFLAGS="$LDFLAGS -u libsys_s"
+ rb_cv_dlopen=yes],
+ [openstep*], [ : ${LDSHARED='$(CC) -dynamic -bundle -undefined suppress'}
+ : ${LDFLAGS=""}
+ rb_cv_dlopen=yes],
+ [rhapsody*], [ : ${LDSHARED='$(CC) -dynamic -bundle -undefined suppress'}
+ : ${LDFLAGS=""}
+ 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" \
- ])
+ : ${DLDFLAGS="${linker_flag}-undefined${linker_flag:+,}dynamic_lookup ${linker_flag}-multiply_defined${linker_flag:+,}suppress ${linker_flag}-flat_namespace"}
: ${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
+ 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"
@@ -2768,42 +2114,46 @@ if test "$with_dln_a_out" != yes; then
rb_cv_dlopen=yes],
[aix*], [ : ${LDSHARED='$(CC)'}
LDSHARED="$LDSHARED ${linker_flag}-G"
- EXTDLDFLAGS='-e$(TARGET_ENTRY)'
+ DLDFLAGS='-eInit_$(TARGET)'
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}
+ : ${LIBPATHENV=SHLIB_PATH}
RPATHFLAG=" ${linker_flag}-blibpath:%1\$-s:${prefix}/lib:${LIBPATH:-/usr/lib:/lib}"
rb_cv_dlopen=yes],
+ [human*], [ : ${DLDFLAGS=''}
+ : ${LDSHARED=''}
+ : ${LDFLAGS=''}
+ : ${LINK_SO='ar cru $@ $(OBJS)'}
+ 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"
+ : ${LDSHARED="ld -xms"}
+ DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -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"
+ : ${LDSHARED="ld -shared"}
+ DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -L/boot/home/config/lib \$(topdir)/_APP_ -lbe -lroot"
+ LDFLAGS="$LDFLAGS -L/boot/develop/lib/x86 -L/boot/home/config/lib -lbe -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"
+ : ${LDSHARED="ld -xms"}
+ DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'
],
[i586*], [
- : ${LDSHARED='$(CC) -shared'}
+ : ${LDSHARED="ld -shared"}
+ DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -lbe -lroot"
])
: ${LIBPATHENV=LIBRARY_PATH}
rb_cv_dlopen=yes ],
[nto-qnx*], [ DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
- : ${LDSHARED='$(LD) -Bshareable -x'}
+ : ${LDSHARED='ld -Bshareable -x'}
LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib"
rb_cv_dlopen=yes],
[cygwin*|mingw*], [
@@ -2812,13 +2162,12 @@ if test "$with_dln_a_out" != yes; then
DLDFLAGS="${DLDFLAGS} -Wl,--enable-auto-image-base,--enable-auto-import"
: ${LIBPATHENV=""}
rb_cv_dlopen=yes],
- [hiuxmpp], [ : ${LDSHARED='$(LD) -r'}],
+ [hiuxmpp], [ : ${LDSHARED='ld -r'}],
[atheos*], [ : ${LDSHARED='$(CC) -shared'}
rb_cv_dlopen=yes],
[os2-emx*], [ LDFLAGS="$LDFLAGS -Zomf"
],
- [nacl], [ LDSHARED='$(CC) -shared' ],
- [ : ${LDSHARED='$(LD)'}])
+ [ : ${LDSHARED='ld'}])
AC_MSG_RESULT($rb_cv_dlopen)
fi
if test "${LDSHAREDXX}" = ""; then
@@ -2843,99 +2192,6 @@ 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
@@ -2967,7 +2223,7 @@ else
AS_CASE(["$target_os"],
[hpux*], [
DLEXT=sl],
- [darwin*], [
+ [nextstep*|openstep*|rhapsody*|darwin*], [
RUBY_APPEND_OPTION(XLDFLAGS, [-Wl,-u,_objc_msgSend])
DLEXT=bundle],
[os2-emx*], [
@@ -2983,13 +2239,10 @@ 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
+ else
+ unset load_relative
fi
fi
-if test x"$LOAD_RELATIVE" = x1; then
- load_relative=yes
-else
- unset load_relative
-fi
len=2 # .rb
n=`expr "$DLEXT" : '.*'`; test "$n" -gt "$len" && len=$n
@@ -3008,7 +2261,7 @@ fi
AS_CASE(["$target_os"],
[linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu], [
STRIP="$STRIP -S -x"],
- [darwin*], [
+ [nextstep* | openstep* | rhapsody* | darwin*], [
STRIP="$STRIP -A -n"])
AC_ARG_WITH(ext,
@@ -3022,58 +2275,30 @@ AC_SUBST(EXTSTATIC)dnl
AC_ARG_WITH(static-linked-ext,
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)
+AS_CASE(["$target_os"],
+ [human*], [
+ setup=Setup.x68
+ ],
+ dnl OS/2 environment w/ Autoconf 2.1x for EMX
+ [os2-emx], [
+ setup=Setup.emx
+ ],
+ [*djgpp*], [
+ setup=Setup.dj
+ ],
+ [
+ setup=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)
+AC_SUBST(setup)
-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
+if test "$prefix" = NONE; then
+ 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'
+ test x"$MINIRUBY" = x && MINIRUBY="${RUBY-$BASERUBY} -I`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"]']`
@@ -3081,41 +2306,20 @@ if test x"$cross_compiling" = xyes; then
AC_SUBST(XRUBY_RUBYLIBDIR)
AC_SUBST(XRUBY_RUBYHDRDIR)
PREP='$(arch)-fake.rb'
- RUNRUBY_COMMAND='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`'
- RUNRUBY='$(RUNRUBY_COMMAND)'
+ RUNRUBY='$(MINIRUBY) -I`cd $(srcdir)/lib; pwd`'
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) --'
+ RUNRUBY='$(MINIRUBY) $(srcdir)/tool/runruby.rb --extout=$(EXTOUT)'
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}])
@@ -3128,25 +2332,13 @@ LIBRUBYARG='$(LIBRUBYARG_STATIC)'
SOLIBS=
AS_CASE(["$target_os"],
- [cygwin*|mingw*|beos*|haiku*|darwin*|os2-emx*], [
+ [cygwin*|mingw*|beos*|haiku*|openstep*|nextstep*|rhapsody*|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)'])
@@ -3160,48 +2352,33 @@ 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}
+libprefix='$(libdir)'
+LIBRUBY_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_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'
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_RPATHFLAGS="'-Wl,-rpath,\$\${ORIGIN}/../${libdir_basename}'"
LIBRUBY_RELATIVE=yes
fi
],
@@ -3216,14 +2393,14 @@ AS_CASE("$enable_shared", [yes], [
[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"
+ LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR)$(MINOR)'
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*], [
+ [openbsd*], [
SOLIBS='$(LIBS)'
LIBRUBY_SO='lib$(RUBY_SO_NAME).so.$(MAJOR).'`expr ${MINOR} \* 10 + ${TEENY}`
],
@@ -3244,14 +2421,14 @@ AS_CASE("$enable_shared", [yes], [
LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).sl.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).sl'
],
[aix*], [
- LIBRUBY_DLDFLAGS="${linker_flag}-bnoentry $XLDFLAGS $LDFLAGS_OPTDIR"
+ LIBRUBY_DLDFLAGS="${linker_flag}-bnoentry $XLDFLAGS"
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"
+ LIBRUBY_DLDFLAGS='-f ruby.exp -lnet -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o'
])
],
[darwin*], [
@@ -3271,53 +2448,16 @@ AS_CASE("$enable_shared", [yes], [
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}"
+ LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS${linker_flag}-R ${linker_flag}${libprefix} -L\$(libdir)"
LIBRUBYARG_SHARED="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_SHARED"
LIBRUBYARG_STATIC="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_STATIC"
fi
@@ -3333,55 +2473,8 @@ if test "$EXEEXT" = .exe; then
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 }
+dnl build section {
dnl build rdoc index if requested
RDOCTARGET=""
@@ -3431,23 +2524,28 @@ AC_CACHE_CHECK([for prefix of external symbols], rb_cv_symbol_prefix, [
])
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)
],
+ [nextstep*|openstep*], [
+ RUBY_APPEND_OPTION(CPPFLAGS, -I/usr/local/include)
+ ],
+ [rhapsody*], [
+ RUBY_APPEND_OPTIONS(CFLAGS, -pipe -no-precomp)
+ ],
[darwin*], [
RUBY_APPEND_OPTION(CFLAGS, -pipe)
- RUBY_APPEND_OPTION(XLDFLAGS, [-framework CoreFoundation])
- RUBY_APPEND_OPTION(LIBRUBYARG_STATIC, [-framework CoreFoundation])
+ ],
+ [human*], [
+ AC_LIBOBJ([x68.o])
+ CFLAGS="$CFLAGS -fansi-only"
+ XCFLAGS="$XCFLAGS -cc1-stack=262144 -cpp-stack=2694144"
+ EXEEXT=.x
+ OBJEXT=o
],
[os2-emx], [
AC_LIBOBJ([os2])
@@ -3476,7 +2574,7 @@ AS_CASE(["$target_os"],
CPPFLAGS="$CPPFLAGS -I/boot/home/config/include"
],
[cygwin*|mingw*], [
- RUBY_SO_NAME="${RUBY_SO_NAME}"'$(MAJOR)$(MINOR)$(TEENY)'
+ RUBY_SO_NAME="${RUBY_SO_NAME}${MAJOR}${MINOR}${TEENY}"
LIBRUBY_DLDFLAGS="${DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)'
AS_CASE(["$target_os"],
[cygwin*], [
@@ -3520,13 +2618,9 @@ AS_CASE(["$target_os"],
XCFLAGS="$XCFLAGS -DYYMAXDEPTH=300"
YACC="$YACC -Nl40000 -Nm40000"
])],
- [nacl], [
- FIRSTMAKEFILE=GNUmakefile:nacl/GNUmakefile.in
+ [*msdosdjgpp*], [
+ FIRSTMAKEFILE=GNUmakefile:djgpp/GNUmakefile.in
])
-
-AS_CASE(["$with_gmp: $SOLIBS "], [no:* | *' -lgmp '*|*' $(LIBS) '*], [],
- [SOLIBS="-lgmp $SOLIBS"])
-
MINIOBJS="$MINIDLNOBJ"
AS_CASE(["$THREAD_MODEL"],
@@ -3540,7 +2634,7 @@ AC_ARG_ENABLE(debug-env,
[AC_DEFINE(RUBY_DEBUG_ENV)])
AS_CASE(["$FIRSTMAKEFILE"], [*GNUmakefile:*], [gnumake=yes], [
- AC_MSG_CHECKING([if ${MAKE-make} is GNU make])
+ AC_MSG_CHECKING([for if ${MAKE-make} is GNU make])
mkdir conftest.dir
echo "all:; @echo yes" > conftest.dir/GNUmakefile
echo "all:; @echo no" > conftest.dir/Makefile
@@ -3548,7 +2642,8 @@ AS_CASE(["$FIRSTMAKEFILE"], [*GNUmakefile:*], [gnumake=yes], [
rm -fr conftest.dir
AS_CASE(["$gnumake"],
[*yes*], [
- FIRSTMAKEFILE=GNUmakefile:template/GNUmakefile.in
+ echo "include Makefile" > GNUmakefile
+ echo "-include uncommon.mk" >> GNUmakefile
gnumake=yes],
[
gnumake=no])
@@ -3557,20 +2652,22 @@ AS_CASE(["$FIRSTMAKEFILE"], [*GNUmakefile:*], [gnumake=yes], [
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=@:)' >> 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=:
+ else
echo 'A=1' > conftest.dir/Makefile
- echo 'B=$(A:1=@'$cmd')' >> conftest.dir/Makefile
+ echo 'B=$(A:1=@true)' >> 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
+ NULLCMD=true
+ else
+ AC_MSG_ERROR(no candidate for safe null command)
fi
- done
- rm -fr conftest.dir
- if test -z "$NULLCMD"; then
- AC_MSG_ERROR(no candidate for safe null command)
fi
+ rm -fr conftest.dir
AC_MSG_RESULT($NULLCMD)
])
AC_SUBST(NULLCMD)
@@ -3593,7 +2690,7 @@ if test "${universal_binary-no}" = yes ; then
archflagpat=`eval echo '"'"${ARCH_FLAG}"'"' | sed 's/[[][|.*]]/\\&/g'`
new_cflags=`echo "$CFLAGS" | sed "s|$archflagpat"'||'`
for archs in ${universal_archnames}; do
- cpu=${archs@%:@*=}
+ cpu=${archs#*=}
archs=${archs%=*}
CFLAGS="$new_cflags -arch $archs"
archs="__${archs}__"
@@ -3607,42 +2704,6 @@ if test "${universal_binary-no}" = yes ; then
])])
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
@@ -3660,17 +2721,14 @@ if test "${ARCH_FLAG}"; then
LDFLAGS=`echo "$LDFLAGS" | sed "s| *$archflagpat"'||'`
fi
warnflags="$rb_cv_warnflags"
-AC_SUBST(cppflags)dnl
+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)
@@ -3697,9 +2755,7 @@ 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="Makefile `echo $FIRSTMAKEFILE | sed 's/:.*//'`"
MAKEFILES="`echo $MAKEFILES`"
AC_SUBST(MAKEFILES)
@@ -3718,28 +2774,22 @@ AS_CASE(["$target_os"],
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)
+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"])
+RUBY_LIB_PREFIX=`eval echo \\"${rubylibprefix}\\"`
+AC_SUBST(rubylibprefix)
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])
+RIDIR=`eval echo \\"${ridir}\\"`
AC_SUBST(ridir)
AC_SUBST(RI_BASE_NAME)
@@ -3757,70 +2807,96 @@ 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'`"
+ ruby_version="`$CPP -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]),
+ AS_HELP_STRING([--with-sitedir=DIR], [site libraries in DIR [[RUBY_LIB_PREFIX/site_ruby]]]),
[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}'}])
+dir="${sitedir}"
+until SITE_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${SITE_DIR}"; do
+ dir="${SITE_DIR}"
+done
AC_ARG_WITH(vendordir,
- AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]),
+ AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]]]),
[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}'}])
+dir="${vendordir}"
+until VENDOR_DIR=`eval echo \\"${dir}\\"`; test "x${dir}" = "x${VENDOR_DIR}"; do
+ dir="${VENDOR_DIR}"
+done
if test "${LOAD_RELATIVE+set}"; then
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
- RUBY_EXEC_PREFIX=''
+ RUBY_EXEC_PREFIX=""
+ RUBY_LIB_PREFIX="`eval echo "$RUBY_LIB_PREFIX" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
+ RUBY_SITE_LIB_PATH="`eval echo "$SITE_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
+ RUBY_VENDOR_LIB_PATH="`eval echo "$VENDOR_DIR" | sed 's|^NONE/|/|;s|^'"$prefix"'/|/|'`"
+else
+ RUBY_EXEC_PREFIX="`eval echo \\"$exec_prefix/\\" | sed 's|^NONE/|'"$prefix"'/|;s|/$||'`"
+ RUBY_LIB_PREFIX="`eval echo \\"$RUBY_LIB_PREFIX\\" | sed 's|^NONE/|'"$prefix"'/|'`"
+ RUBY_SITE_LIB_PATH="`eval echo \\"$SITE_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
+ RUBY_VENDOR_LIB_PATH="`eval echo \\"$VENDOR_DIR\\" | sed 's|^NONE/|'"$prefix"'/|'`"
fi
-AC_SUBST(RUBY_EXEC_PREFIX)
+pat=`echo "$RUBY_LIB_PREFIX/" | tr -c '\012' .`'\(.*\)'
+AS_CASE(["$RUBY_SITE_LIB_PATH"],
+ ["$RUBY_LIB_PREFIX/"*], [
+ RUBY_SITE_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_SITE_LIB_PATH\" : \"$pat\"`"'"'
+ ],
+ [
+ RUBY_SITE_LIB_PATH="\"${RUBY_SITE_LIB_PATH}\""
+ ])
+AS_CASE(["$RUBY_VENDOR_LIB_PATH"],
+ ["$RUBY_LIB_PREFIX/"*], [
+ RUBY_VENDOR_LIB_PATH='RUBY_LIB_PREFIX"/'"`expr \"$RUBY_VENDOR_LIB_PATH\" : \"$pat\"`"'"'
+ ],
+ [
+ RUBY_VENDOR_LIB_PATH="\"${RUBY_VENDOR_LIB_PATH}\""
+ ])
+pat=`echo "$RUBY_EXEC_PREFIX/" | tr -c '\012' .`'\(.*\)'
+AS_CASE(["$RUBY_LIB_PREFIX"],
+ ["$RUBY_EXEC_PREFIX/"*], [
+ RUBY_LIB_PREFIX='RUBY_EXEC_PREFIX"/'"`expr \"$RUBY_LIB_PREFIX\" : \"$pat\"`"'"'
+ ],
+ [
+ RUBY_LIB_PREFIX="\"${RUBY_LIB_PREFIX}\""
+ ])
+
+if test ${RUBY_LIB_VERSION_STYLE+set}; then
+ AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION_STYLE, $RUBY_LIB_VERSION_STYLE)
+else
+ AC_DEFINE_UNQUOTED(RUBY_LIB_VERSION, [$RUBY_LIB_VERSION])
+fi
+AC_DEFINE_UNQUOTED(RUBY_EXEC_PREFIX, "${RUBY_EXEC_PREFIX}")
+AC_DEFINE_UNQUOTED(RUBY_LIB_PREFIX, ${RUBY_LIB_PREFIX})
+if test "x$SITE_DIR" = xno; then
+ AC_DEFINE(NO_RUBY_SITE_LIB)
+else
+ AC_DEFINE_UNQUOTED(RUBY_SITE_LIB, ${RUBY_SITE_LIB_PATH})
+fi
+if test "x$VENDOR_DIR" = xno; then
+ AC_DEFINE(NO_RUBY_VENDOR_LIB)
+else
+ AC_DEFINE_UNQUOTED(RUBY_VENDOR_LIB, ${RUBY_VENDOR_LIB_PATH})
+fi
-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
+configure_args=$ac_configure_args
+AC_SUBST(configure_args)dnl
if test "${universal_binary-no}" = yes ; then
arch="universal-${target_os}"
@@ -3836,7 +2912,7 @@ if test "${universal_binary-no}" = yes ; then
RUBY_DEFINE_IF([defined __${archs}__], RUBY_PLATFORM_CPU, ["${cpu}"])
done
fi
- ints='long int short'
+ ints='long int'
test "$ac_cv_type_long_long" = yes && ints="'long long' $ints"
AC_SUBST(UNIVERSAL_ARCHNAMES, "${universal_archnames}")
AC_SUBST(UNIVERSAL_INTS, "${ints}")
@@ -3850,54 +2926,50 @@ fi
unset sitearch
AS_CASE(["$target_os"],[mingw*],[sitearch="$target_cpu-$rb_cv_msvcrt"])
+test ${sitearch+set} && AC_DEFINE_UNQUOTED(RUBY_SITEARCH, "${sitearch}")
: ${sitearch='${arch}'}
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)
+ AC_DEFINE_UNQUOTED(RUBY_SEARCH_PATH,"$search_path")
fi
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}'}])
+ [rubyhdrdir='${includedir}/${RUBY_BASE_NAME}-${ruby_version}'])
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(opt-dir,
+ AS_HELP_STRING([--with-opt-dir=DIR-LIST],
+ [add optional headers and libraries directories separated by $PATH_SEPARATOR]),
+ [
+ CPPFLAGS="$CPPFLAGS `echo \"$PATH_SEPARATOR$withval\" | sed \"s|$PATH_SEPARATOR\([[^$PATH_SEPARATOR]*]\)| -I\1/include|g;s/^ //\"`"
+ set -x
+ val=`IFS="$PATH_SEPARATOR"
+ for dir in $withval; do
+ echo x ${LIBPATHFLAG} ${RPATHFLAG} |
+ sed -E 's/^x *//;s'"${PATH_SEPARATOR}"'%1\\$-s|%s'"${IFS}${dir}/lib${IFS}g"
+ done | tr '\012' ' '`
+ set +x
+ LDFLAGS="$LDFLAGS${LDFLAGS:+ }$val"
+ DLDFLAGS="$DLDFLAGS${DLDFLAGS:+ }$val"
+ ])
AC_ARG_WITH(mantype,
AS_HELP_STRING([--with-mantype=TYPE], [specify man page type; TYPE is one of man and doc]),
@@ -3966,28 +3038,21 @@ 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
+AC_CONFIG_FILES($FIRSTMAKEFILE)
+AC_CONFIG_FILES(Makefile, [{
+ if test -d "$srcdir/.svn"; then
VCS='svn'
+ VCSUP='$(VCS) up $(SVNUPOPTIONS)'
elif test -d "$srcdir/.git/svn"; then
VCS='git svn'
+ VCSUP='$(VCS) rebase $(GITSVNREBASEOPTIONS)'
elif test -d "$srcdir/.git"; then
VCS='git'
+ VCSUP='$(VCS) pull $(GITPULLOPTIONS)'
else
VCS='echo cannot'
+ VCSUP='$(VCS)'
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
@@ -3996,20 +3061,12 @@ AC_CONFIG_FILES(Makefile, [
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],
+ } > confmk$$.tmp && mv -f confmk$$.tmp Makefile &&
+ {
+ grep '^ruby:' Makefile > /dev/null ||
+ ${MAKE-make} info-program | grep '^PROGRAM=ruby$' > /dev/null ||
+ echo 'ruby: $(PROGRAM);' >> Makefile
+ }],
[EXEEXT='$EXEEXT' gnumake='$gnumake'])
AC_ARG_WITH([ruby-pc],
@@ -4035,5 +3092,5 @@ AC_CONFIG_FILES($ruby_pc:template/ruby.pc.in,
[ruby_pc='$ruby_pc' PKG_CONFIG='$PKG_CONFIG'])
AC_OUTPUT
-}
-}
+dnl }
+dnl }
diff --git a/constant.h b/constant.h
index 3dc9b8d4ef..8232910737 100644
--- a/constant.h
+++ b/constant.h
@@ -18,9 +18,7 @@ typedef enum {
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;
+ VALUE value; /* should be mark */
} rb_const_entry_t;
VALUE rb_mod_private_constant(int argc, VALUE *argv, VALUE obj);
diff --git a/cont.c b/cont.c
index 3b05f995d4..1e42974145 100644
--- a/cont.c
+++ b/cont.c
@@ -15,6 +15,9 @@
#include "gc.h"
#include "eval_intern.h"
+#if ((defined(_WIN32) && _WIN32_WINNT >= 0x0400) || (defined(HAVE_GETCONTEXT) && defined(HAVE_SETCONTEXT))) && !defined(__NetBSD__) && !defined(sun) && !defined(FIBER_USE_NATIVE)
+#define FIBER_USE_NATIVE 1
+
/* FIBER_USE_NATIVE enables Fiber performance improvement using system
* dependent method such as make/setcontext on POSIX system or
* CreateFiber() API on Windows.
@@ -26,45 +29,12 @@
* 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)
+#elif !defined(FIBER_USE_NATIVE)
#define FIBER_USE_NATIVE 0
#endif
@@ -77,7 +47,8 @@
#define RB_PAGE_SIZE (pagesize)
#define RB_PAGE_MASK (~(RB_PAGE_SIZE - 1))
static long pagesize;
-#endif /*FIBER_USE_NATIVE*/
+#define FIBER_MACHINE_STACK_ALLOCATION_SIZE (0x10000)
+#endif
#define CAPTURE_JUST_VALID_VM_STACK 1
@@ -97,20 +68,16 @@ typedef struct rb_context_struct {
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;
+ VALUE *machine_stack;
+ VALUE *machine_stack_src;
#ifdef __ia64
- VALUE *register_stack;
- VALUE *register_stack_src;
- int register_stack_size;
+ VALUE *machine_register_stack;
+ VALUE *machine_register_stack_src;
+ int machine_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;
+ size_t machine_stack_size;
} rb_context_t;
enum fiber_status {
@@ -120,13 +87,13 @@ enum fiber_status {
};
#if FIBER_USE_NATIVE && !defined(_WIN32)
-#define MAX_MACHINE_STACK_CACHE 10
+#define MAX_MAHINE_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 machine_stack_cache[MAX_MAHINE_STACK_CACHE];
static machine_stack_cache_t terminated_machine_stack;
#endif
@@ -136,12 +103,6 @@ typedef struct rb_fiber_struct {
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;
@@ -162,7 +123,7 @@ static VALUE rb_eFiberError;
#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)
+} while(0)
NOINLINE(static VALUE cont_capture(volatile int *stat));
@@ -190,11 +151,11 @@ cont_mark(void *ptr)
#endif
}
- if (cont->machine.stack) {
+ if (cont->machine_stack) {
if (cont->type == CONTINUATION_CONTEXT) {
/* cont */
- rb_gc_mark_locations(cont->machine.stack,
- cont->machine.stack + cont->machine.stack_size);
+ rb_gc_mark_locations(cont->machine_stack,
+ cont->machine_stack + cont->machine_stack_size);
}
else {
/* fiber */
@@ -202,15 +163,15 @@ cont_mark(void *ptr)
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);
+ 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);
+ if (cont->machine_register_stack) {
+ rb_gc_mark_locations(cont->machine_register_stack,
+ cont->machine_register_stack + cont->machine_register_stack_size);
}
#endif
}
@@ -227,8 +188,7 @@ cont_free(void *ptr)
#if FIBER_USE_NATIVE
if (cont->type == CONTINUATION_CONTEXT) {
/* cont */
- ruby_xfree(cont->ensure_array);
- RUBY_FREE_UNLESS_NULL(cont->machine.stack);
+ RUBY_FREE_UNLESS_NULL(cont->machine_stack);
}
else {
/* fiber */
@@ -258,11 +218,10 @@ cont_free(void *ptr)
#endif
}
#else /* not FIBER_USE_NATIVE */
- ruby_xfree(cont->ensure_array);
- RUBY_FREE_UNLESS_NULL(cont->machine.stack);
+ RUBY_FREE_UNLESS_NULL(cont->machine_stack);
#endif
#ifdef __ia64
- RUBY_FREE_UNLESS_NULL(cont->machine.register_stack);
+ RUBY_FREE_UNLESS_NULL(cont->machine_register_stack);
#endif
RUBY_FREE_UNLESS_NULL(cont->vm_stack);
@@ -288,12 +247,12 @@ cont_memsize(const void *ptr)
size += n * sizeof(*cont->vm_stack);
}
- if (cont->machine.stack) {
- size += cont->machine.stack_size * sizeof(*cont->machine.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);
+ if (cont->machine_register_stack) {
+ size += cont->machine_register_stack_size * sizeof(*cont->machine_register_stack);
}
#endif
}
@@ -357,8 +316,7 @@ fiber_memsize(const void *ptr)
size_t size = 0;
if (ptr) {
size = sizeof(*fib);
- if (fib->cont.type != ROOT_FIBER_CONTEXT &&
- fib->cont.saved_thread.local_storage != NULL) {
+ if (fib->cont.type != ROOT_FIBER_CONTEXT) {
size += st_memsize(fib->cont.saved_thread.local_storage);
}
size += cont_memsize(&fib->cont);
@@ -382,49 +340,48 @@ cont_save_machine_stack(rb_thread_t *th, rb_context_t *cont)
{
size_t size;
- SET_MACHINE_STACK_END(&th->machine.stack_end);
+ SET_MACHINE_STACK_END(&th->machine_stack_end);
#ifdef __ia64
- th->machine.register_stack_end = rb_ia64_bsp();
+ 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;
+ 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;
+ 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);
+ if (cont->machine_stack) {
+ REALLOC_N(cont->machine_stack, VALUE, size);
}
else {
- cont->machine.stack = ALLOC_N(VALUE, size);
+ cont->machine_stack = ALLOC_N(VALUE, size);
}
FLUSH_REGISTER_WINDOWS;
- MEMCPY(cont->machine.stack, cont->machine.stack_src, VALUE, size);
+ 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);
+ 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);
+ cont->machine_register_stack = ALLOC_N(VALUE, size);
}
- MEMCPY(cont->machine.register_stack, cont->machine.register_stack_src, 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
@@ -432,13 +389,13 @@ 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 */
+ /* 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;
+ 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;
+ cont->saved_thread.machine_register_stack_start = 0;
+ cont->saved_thread.machine_register_stack_end = 0;
#endif
}
@@ -491,22 +448,6 @@ cont_capture(volatile int *stat)
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;
@@ -518,7 +459,7 @@ cont_capture(volatile int *stat)
}
else {
*stat = 0;
- return contval;
+ return cont->self;
}
}
@@ -566,10 +507,6 @@ cont_restore_thread(rb_context_t *cont)
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
@@ -581,7 +518,7 @@ fiber_set_stack_location(void)
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));
+ th->machine_stack_start = (void*)(((VALUE)ptr & RB_PAGE_MASK) + STACK_UPPER((void *)&ptr, 0, RB_PAGE_SIZE));
}
static VOID CALLBACK
@@ -624,10 +561,9 @@ fiber_machine_stack_alloc(size_t size)
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));
+ rb_raise(rb_eFiberError, "can't alloc machine stack to fiber");
}
/* guard page setup */
@@ -656,7 +592,7 @@ fiber_initialize_machine_stack_context(rb_fiber_t *fib, size_t size)
rb_raise(rb_eFiberError, "can't create fiber");
}
}
- sth->machine.stack_maxsize = size;
+ sth->machine_stack_maxsize = size;
#else /* not WIN32 */
ucontext_t *context = &fib->context;
char *ptr;
@@ -668,11 +604,11 @@ fiber_initialize_machine_stack_context(rb_fiber_t *fib, size_t size)
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;
+ 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;
+ sth->machine_register_stack_maxsize = sth->machine_stack_maxsize;
#endif
}
@@ -684,34 +620,34 @@ 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);
+ fiber_initialize_machine_stack_context(newfib, FIBER_MACHINE_STACK_ALLOCATION_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");
+ 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);
+ 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;
+ 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;
+ 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;
+ 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");
@@ -721,6 +657,17 @@ fiber_setcontext(rb_fiber_t *newfib, rb_fiber_t *oldfib)
/* swap machine context */
#ifdef _WIN32
SwitchToFiber(newfib->fib_handle);
+#elif defined(__FreeBSD__) /* FreeBSD 9 doesn't work with swapcontext */
+ if (!ruby_setjmp(oldfib->cont.jmpbuf)) {
+ if (newfib->status != RUNNING) {
+ if (setcontext(&newfib->context) < 0) {
+ rb_bug("context switch between fiber failed");
+ }
+ }
+ else {
+ ruby_longjmp(newfib->cont.jmpbuf, 1);
+ }
+ }
#else
swapcontext(&oldfib->context, &newfib->context);
#endif
@@ -744,16 +691,16 @@ cont_restore_1(rb_context_t *cont)
((_JUMP_BUFFER*)(&buf))->Frame;
}
#endif
- if (cont->machine.stack_src) {
+ if (cont->machine_stack_src) {
FLUSH_REGISTER_WINDOWS;
- MEMCPY(cont->machine.stack_src, cont->machine.stack,
- VALUE, cont->machine.stack_size);
+ 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);
+ if (cont->machine_register_stack_src) {
+ MEMCPY(cont->machine_register_stack_src, cont->machine_register_stack,
+ VALUE, cont->machine_register_stack_size);
}
#endif
@@ -788,7 +735,7 @@ register_stack_extend(rb_context_t *cont, VALUE *vp, VALUE *curr_bsp)
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) {
+ 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);
@@ -800,7 +747,7 @@ register_stack_extend(rb_context_t *cont, VALUE *vp, VALUE *curr_bsp)
static void
cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
{
- if (cont->machine.stack_src) {
+ if (cont->machine_stack_src) {
#ifdef HAVE_ALLOCA
#define STACK_PAD_SIZE 1
#else
@@ -813,7 +760,7 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
/* Stack grows downward */
#endif
#if STACK_GROW_DIRECTION <= 0
- volatile VALUE *const end = cont->machine.stack_src;
+ volatile VALUE *const end = cont->machine_stack_src;
if (&space[0] > end) {
# ifdef HAVE_ALLOCA
volatile VALUE *sp = ALLOCA_N(VALUE, &space[0] - end);
@@ -829,7 +776,7 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
/* Stack grows upward */
#endif
#if STACK_GROW_DIRECTION >= 0
- volatile VALUE *const end = cont->machine.stack_src + cont->machine.stack_size;
+ 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]);
@@ -846,17 +793,17 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
cont_restore_1(cont);
}
#ifdef __ia64
-#define cont_restore_0(cont, vp) register_stack_extend((cont), (vp), (VALUE*)rb_ia64_bsp())
+#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
+ * Continuation objects are generated by <code>Kernel#callcc</code>,
+ * after having <code>require</code>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
+ * 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).
*
@@ -902,15 +849,15 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
* call-seq:
* callcc {|cont| block } -> obj
*
- * Generates a Continuation object, which it passes to
+ * Generates a <code>Continuation</code> 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
+ * <em>cont</em><code>.call</code> will cause the <code>callcc</code>
* to return (as will falling through the end of the block). The
- * value returned by the #callcc is the value of the
+ * value returned by the <code>callcc</code> 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
+ * class <code>Continuation</code> for more details. Also see
+ * <code>Kernel::throw</code> for an alternative mechanism for
* unwinding a call stack.
*/
@@ -931,7 +878,7 @@ rb_callcc(VALUE self)
static VALUE
make_passing_arg(int argc, VALUE *argv)
{
- switch (argc) {
+ switch(argc) {
case 0:
return Qnil;
case 1:
@@ -941,80 +888,6 @@ make_passing_arg(int argc, VALUE *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, ...)
@@ -1052,14 +925,10 @@ rb_cont_call(int argc, VALUE *argv, VALUE contval)
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 */
}
@@ -1130,10 +999,11 @@ rb_cont_call(int argc, VALUE *argv, VALUE contval)
*
*/
+#define FIBER_VM_STACK_SIZE (4 * 1024)
+
static const rb_data_type_t fiber_data_type = {
"fiber",
{fiber_mark, fiber_free, fiber_memsize,},
- NULL, NULL, RUBY_TYPED_FREE_IMMEDIATELY
};
static VALUE
@@ -1181,20 +1051,18 @@ fiber_init(VALUE fibval, VALUE proc)
fiber_link_join(fib);
- th->stack_size = th->vm->default_params.fiber_vm_stack_size / sizeof(VALUE);
+ th->stack_size = FIBER_VM_STACK_SIZE;
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->bp = 0;
+ th->cfp->lfp = th->stack;
+ *th->cfp->lfp = 0;
+ th->cfp->dfp = th->stack;
th->cfp->self = Qnil;
- th->cfp->klass = Qnil;
th->cfp->flag = 0;
th->cfp->iseq = 0;
th->cfp->proc = 0;
@@ -1230,19 +1098,20 @@ 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 (fib->prev == Qnil) {
+ rb_thread_t *th = GET_THREAD();
- if (root_fiber == curr) {
+ if (th->root_fiber != curr) {
+ return th->root_fiber;
+ }
+ else {
rb_raise(rb_eFiberError, "can't yield from root fiber");
}
- return root_fiber;
}
else {
+ VALUE prev = fib->prev;
fib->prev = Qnil;
return prev;
}
@@ -1260,8 +1129,8 @@ rb_fiber_terminate(rb_fiber_t *fib)
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;
+ fib->cont.machine_stack = NULL;
+ fib->cont.machine_stack_size = 0;
#endif
rb_fiber_transfer(return_fiber(), 1, &value);
}
@@ -1281,27 +1150,27 @@ rb_fiber_start(void)
TH_PUSH_TAG(th);
if ((state = EXEC_TAG()) == 0) {
int argc;
- const VALUE *argv, args = cont->value;
+ VALUE *argv, args;
GetProcPtr(cont->saved_thread.first_proc, proc);
- argv = (argc = cont->argc) > 1 ? RARRAY_CONST_PTR(args) : &args;
+ args = cont->value;
+ argv = (argc = cont->argc) > 1 ? RARRAY_PTR(args) : &args;
cont->value = Qnil;
th->errinfo = Qnil;
- th->root_lep = rb_vm_ep_local_ep(proc->block.ep);
- th->root_svar = Qnil;
+ th->local_lfp = proc->block.lfp;
+ th->local_svar = Qnil;
fib->status = RUNNING;
- cont->value = rb_vm_invoke_proc(th, proc, argc, argv, 0);
+ cont->value = rb_vm_invoke_proc(th, proc, proc->block.self, argc, argv, 0);
}
TH_POP_TAG();
if (state) {
- if (state == TAG_RAISE || state == TAG_FATAL) {
- rb_threadptr_pending_interrupt_enque(th, th->errinfo);
+ if (state == TAG_RAISE) {
+ th->thrown_errinfo = 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);
+ th->thrown_errinfo =
+ rb_vm_make_jump_tag_but_local_jump(state, th->errinfo);
}
RUBY_VM_SET_INTERRUPT(th);
}
@@ -1358,20 +1227,20 @@ fiber_store(rb_fiber_t *next_fib)
#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
+ if (ruby_setjmp(fib->cont.jmpbuf)) {
+#else /* FIBER_USE_NATIVE */
+ {
fiber_setcontext(next_fib, fib);
#ifndef _WIN32
if (terminated_machine_stack.ptr) {
- if (machine_stack_cache_index < MAX_MACHINE_STACK_CACHE) {
+ if (machine_stack_cache_index < MAX_MAHINE_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) {
+ if (terminated_machine_stack.ptr != fib->cont.machine_stack) {
munmap((void*)terminated_machine_stack.ptr, terminated_machine_stack.size * sizeof(VALUE));
}
else {
@@ -1406,13 +1275,6 @@ fiber_switch(VALUE fibval, int argc, VALUE *argv, int is_resume)
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");
}
@@ -1450,10 +1312,6 @@ fiber_switch(VALUE fibval, int argc, VALUE *argv, int is_resume)
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);
@@ -1465,7 +1323,7 @@ fiber_switch(VALUE fibval, int argc, VALUE *argv, int is_resume)
rb_bug("rb_fiber_resume: unreachable");
}
#endif
- RUBY_VM_CHECK_INTS(th);
+ RUBY_VM_CHECK_INTS();
return value;
}
@@ -1485,9 +1343,6 @@ rb_fiber_resume(VALUE fibval, int argc, VALUE *argv)
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);
}
@@ -1566,41 +1421,11 @@ rb_fiber_m_resume(int argc, VALUE *argv, VALUE fib)
* 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_m_transfer(int argc, VALUE *argv, VALUE fib)
{
- rb_fiber_t *fib;
- GetFiberPtr(fibval, fib);
- fib->transfered = 1;
- return rb_fiber_transfer(fibval, argc, argv);
+ return rb_fiber_transfer(fib, argc, argv);
}
/*
@@ -1661,7 +1486,7 @@ Init_Cont(void)
#else /* not WIN32 */
pagesize = sysconf(_SC_PAGESIZE);
#endif
- SET_MACHINE_STACK_END(&th->machine.stack_end);
+ SET_MACHINE_STACK_END(&th->machine_stack_end);
#endif
rb_cFiber = rb_define_class("Fiber", rb_cObject);
@@ -1672,7 +1497,9 @@ Init_Cont(void)
rb_define_method(rb_cFiber, "resume", rb_fiber_m_resume, -1);
}
-RUBY_SYMBOL_EXPORT_BEGIN
+#if defined __GNUC__ && __GNUC__ >= 4
+#pragma GCC visibility push(default)
+#endif
void
ruby_Init_Continuation_body(void)
@@ -1693,4 +1520,6 @@ ruby_Init_Fiber_as_Coroutine(void)
rb_define_singleton_method(rb_cFiber, "current", rb_fiber_s_current, 0);
}
-RUBY_SYMBOL_EXPORT_END
+#if defined __GNUC__ && __GNUC__ >= 4
+#pragma GCC visibility pop
+#endif
diff --git a/cygwin/GNUmakefile.in b/cygwin/GNUmakefile.in
index 5bd414d786..19d1727dd7 100644
--- a/cygwin/GNUmakefile.in
+++ b/cygwin/GNUmakefile.in
@@ -1,4 +1,5 @@
include Makefile
+-include uncommon.mk
ENABLE_SHARED=@ENABLE_SHARED@
DLLWRAP = @DLLWRAP@ --target=@target_os@ --driver-name="$(CC)"
@@ -29,9 +30,6 @@ else
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
diff --git a/debug.c b/debug.c
index 2f1e03cc3a..dcc710bc4a 100644
--- a/debug.c
+++ b/debug.c
@@ -12,7 +12,7 @@
#include "ruby/ruby.h"
#include "ruby/encoding.h"
#include "ruby/util.h"
-#include "vm_debug.h"
+#include "debug.h"
#include "eval_intern.h"
#include "vm_core.h"
#include "id.h"
@@ -24,7 +24,6 @@ const union {
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,
@@ -33,10 +32,11 @@ const union {
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_MARK = FL_MARK,
+ RUBY_FL_RESERVED = FL_RESERVED,
RUBY_FL_FINALIZE = FL_FINALIZE,
RUBY_FL_TAINT = FL_TAINT,
+ RUBY_FL_UNTRUSTED = FL_UNTRUSTED,
RUBY_FL_EXIVAR = FL_EXIVAR,
RUBY_FL_FREEZE = FL_FREEZE,
RUBY_FL_SINGLETON = FL_SINGLETON,
diff --git a/vm_debug.h b/debug.h
index 32e060732c..f1d11304f0 100644
--- a/vm_debug.h
+++ b/debug.h
@@ -1,6 +1,6 @@
/**********************************************************************
- vm_debug.h - YARV Debug function interface
+ debug.h - YARV Debug function interface
$Author$
created at: 04/08/25 02:33:49 JST
@@ -15,7 +15,9 @@
#include "ruby/ruby.h"
#include "node.h"
-RUBY_SYMBOL_EXPORT_BEGIN
+#if defined __GNUC__ && __GNUC__ >= 4
+#pragma GCC visibility push(default)
+#endif
#define dpv(h,v) ruby_debug_print_value(-1, 0, (h), (v))
#define dp(v) ruby_debug_print_value(-1, 0, "", (v))
@@ -32,6 +34,8 @@ void ruby_debug_breakpoint(void);
void ruby_debug_gc_check_func(void);
void ruby_set_debug_option(const char *str);
-RUBY_SYMBOL_EXPORT_END
+#if defined __GNUC__ && __GNUC__ >= 4
+#pragma GCC visibility pop
+#endif
#endif /* RUBY_DEBUG_H */
diff --git a/defs/default_gems b/defs/default_gems
index e73e383b26..030d84f6f5 100644
--- a/defs/default_gems
+++ b/defs/default_gems
@@ -1,5 +1,7 @@
-# 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
+# gem versioning file [executable files under bin]
+rake lib/rake/version.rb [rake]
+rdoc lib/rdoc.rb [rdoc ri]
+minitest lib/minitest/unit.rb
+json ext/json/lib/json/version.rb
+io-console ext/io/console/io-console.gemspec
+bigdecimal ext/bigdecimal/bigdecimal.gemspec
diff --git a/defs/gmake.mk b/defs/gmake.mk
deleted file mode 100644
index 0acb88ef57..0000000000
--- a/defs/gmake.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- 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
deleted file mode 100644
index 53ed3775ad..0000000000
--- a/defs/id.def
+++ /dev/null
@@ -1,105 +0,0 @@
-# -*- 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/opt_operand.def b/defs/opt_operand.def
index ab7103a421..5ca1d74028 100644
--- a/defs/opt_operand.def
+++ b/defs/opt_operand.def
@@ -7,16 +7,53 @@
# wildcard: *
#
-getlocal *, 0
-getlocal *, 1
-setlocal *, 0
-setlocal *, 1
+__END__
+
+getlocal 2
+getlocal 3
+getlocal 4
+
+setlocal 2
+setlocal 3
+setlocal 4
+
+getdynamic *, 0
+getdynamic 1, 0
+getdynamic 2, 0
+getdynamic 3, 0
+getdynamic 4, 0
+
+setdynamic *, 0
+setdynamic 1, 0
+setdynamic 2, 0
+setdynamic 3, 0
+setdynamic 4, 0
putobject INT2FIX(0)
putobject INT2FIX(1)
+putobject Qtrue
+putobject Qfalse
+
+# CALL
+send *, *, Qfalse, 0, *
+send *, 0, Qfalse, 0, *
+send *, 1, Qfalse, 0, *
+send *, 2, Qfalse, 0, *
+send *, 3, Qfalse, 0, *
+
+# FCALL
+send *, *, Qfalse, 0x04, *
+send *, 0, Qfalse, 0x04, *
+send *, 1, Qfalse, 0x04, *
+send *, 2, Qfalse, 0x04, *
+send *, 3, Qfalse, 0x04, *
+
+# VCALL
+send *, 0, Qfalse, 0x0c, *
+
__END__
-putobject Qtrue
-putobject Qfalse
+
+
diff --git a/dir.c b/dir.c
index 3188a9eb38..387a2490b6 100644
--- a/dir.c
+++ b/dir.c
@@ -30,7 +30,12 @@
# define NAMLEN(dirent) strlen((dirent)->d_name)
#else
# define dirent direct
-# define NAMLEN(dirent) (dirent)->d_namlen
+# if !defined __NeXT__
+# define NAMLEN(dirent) (dirent)->d_namlen
+# else
+# /* On some versions of NextStep, d_namlen is always zero, so avoid it. */
+# define NAMLEN(dirent) strlen((dirent)->d_name)
+# endif
# if HAVE_SYS_NDIR_H
# include <sys/ndir.h>
# endif
@@ -44,10 +49,6 @@
# 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>
@@ -63,6 +64,10 @@ char *strchr(char*,char);
#include "ruby/util.h"
+#if !defined HAVE_LSTAT && !defined lstat
+#define lstat stat
+#endif
+
/* define system APIs */
#ifdef _WIN32
#undef chdir
@@ -75,46 +80,12 @@ char *strchr(char*,char);
#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 rb_sys_fail_path(path) rb_sys_fail_str(path)
#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
@@ -166,7 +137,7 @@ bracket(
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)) {
+ (r2 <= (send-s) && memcmp(t2, s, r) == 0)) {
ok = 1;
continue;
}
@@ -381,7 +352,6 @@ dir_memsize(const void *ptr)
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);
@@ -411,12 +381,8 @@ dir_s_alloc(VALUE klass)
/*
* 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)
@@ -424,20 +390,18 @@ dir_initialize(int argc, VALUE *argv, VALUE dir)
struct dir_data *dp;
rb_encoding *fsenc;
VALUE dirname, opt, orig;
- static ID keyword_ids[1];
+ static VALUE sym_enc;
- if (!keyword_ids[0]) {
- keyword_ids[0] = rb_intern("encoding");
+ if (!sym_enc) {
+ sym_enc = ID2SYM(rb_intern("encoding"));
}
-
fsenc = rb_filesystem_encoding();
- rb_scan_args(argc, argv, "1:", &dirname, &opt);
+ argc = 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)) {
+ VALUE enc = rb_hash_aref(opt, sym_enc);
+ if (!NIL_P(enc)) {
fsenc = rb_to_encoding(enc);
}
}
@@ -470,12 +434,7 @@ dir_initialize(int argc, VALUE *argv, VALUE dir)
/*
* 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
@@ -507,6 +466,8 @@ static struct dir_data *
dir_check(VALUE dir)
{
struct dir_data *dirp;
+ if (!OBJ_UNTRUSTED(dir) && rb_safe_level() >= 4)
+ rb_raise(rb_eSecurityError, "Insecure: operation on trusted Dir");
rb_check_frozen(dir);
dirp = rb_check_typeddata(dir, &dir_data_type);
if (!dirp->dir) dir_closed();
@@ -542,7 +503,6 @@ dir_inspect(VALUE dir)
/*
* call-seq:
* dir.path -> string or nil
- * dir.to_path -> string or nil
*
* Returns the path parameter passed to <em>dir</em>'s constructor.
*
@@ -559,10 +519,50 @@ dir_path(VALUE dir)
return rb_str_dup(dirp->path);
}
-#if defined _WIN32
-# define READDIR(dir, enc) rb_w32_readdir((dir), (enc))
+#if defined HAVE_READDIR_R
+# define READDIR(dir, enc, entry, dp) (readdir_r((dir), (entry), &(dp)) == 0 && (dp) != 0)
+#elif defined _WIN32
+# define READDIR(dir, enc, entry, dp) (((dp) = rb_w32_readdir_with_enc((dir), (enc))) != 0)
+#else
+# define READDIR(dir, enc, entry, dp) (((dp) = readdir(dir)) != 0)
+#endif
+#if defined HAVE_READDIR_R
+# define IF_HAVE_READDIR_R(something) something
#else
-# define READDIR(dir, enc) readdir((dir))
+# define IF_HAVE_READDIR_R(something) /* nothing */
+#endif
+
+#if defined SIZEOF_STRUCT_DIRENT_TOO_SMALL
+# include <limits.h>
+# define NAME_MAX_FOR_STRUCT_DIRENT 255
+# if defined NAME_MAX
+# if NAME_MAX_FOR_STRUCT_DIRENT < NAME_MAX
+# undef NAME_MAX_FOR_STRUCT_DIRENT
+# define NAME_MAX_FOR_STRUCT_DIRENT NAME_MAX
+# endif
+# endif
+# if defined _POSIX_NAME_MAX
+# if NAME_MAX_FOR_STRUCT_DIRENT < _POSIX_NAME_MAX
+# undef NAME_MAX_FOR_STRUCT_DIRENT
+# define NAME_MAX_FOR_STRUCT_DIRENT _POSIX_NAME_MAX
+# endif
+# endif
+# if defined _XOPEN_NAME_MAX
+# if NAME_MAX_FOR_STRUCT_DIRENT < _XOPEN_NAME_MAX
+# undef NAME_MAX_FOR_STRUCT_DIRENT
+# define NAME_MAX_FOR_STRUCT_DIRENT _XOPEN_NAME_MAX
+# endif
+# endif
+# define DEFINE_STRUCT_DIRENT \
+ union { \
+ struct dirent dirent; \
+ char dummy[offsetof(struct dirent, d_name) + \
+ NAME_MAX_FOR_STRUCT_DIRENT + 1]; \
+ }
+# define STRUCT_DIRENT(entry) ((entry).dirent)
+#else
+# define DEFINE_STRUCT_DIRENT struct dirent
+# define STRUCT_DIRENT(entry) (entry)
#endif
/*
@@ -582,16 +582,20 @@ dir_read(VALUE dir)
{
struct dir_data *dirp;
struct dirent *dp;
+ IF_HAVE_READDIR_R(DEFINE_STRUCT_DIRENT entry);
GetDIR(dir, dirp);
errno = 0;
- if ((dp = READDIR(dirp->dir, dirp->enc)) != NULL) {
+ if (READDIR(dirp->dir, dirp->enc, &STRUCT_DIRENT(entry), dp)) {
return rb_external_str_new_with_enc(dp->d_name, NAMLEN(dp), dirp->enc);
}
+ else if (errno == 0) { /* end of stream */
+ return Qnil;
+ }
else {
- if (errno != 0) rb_sys_fail(0);
- return Qnil; /* end of stream */
+ rb_sys_fail(0);
}
+ return Qnil; /* not reached */
}
/*
@@ -619,25 +623,13 @@ dir_each(VALUE dir)
{
struct dir_data *dirp;
struct dirent *dp;
- IF_HAVE_HFS(int hfs_p);
+ IF_HAVE_READDIR_R(DEFINE_STRUCT_DIRENT entry);
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);
+ while (READDIR(dirp->dir, dirp->enc, &STRUCT_DIRENT(entry), dp)) {
+ rb_yield(rb_external_str_new_with_enc(dp->d_name, NAMLEN(dp), dirp->enc));
if (dirp->dir == NULL) dir_closed();
}
return dir;
@@ -700,10 +692,9 @@ dir_seek(VALUE dir, VALUE pos)
#define dir_seek rb_f_notimplement
#endif
-#ifdef HAVE_SEEKDIR
/*
* call-seq:
- * dir.pos = integer -> integer
+ * dir.pos( integer ) -> integer
*
* Synonym for <code>Dir#seek</code>, but returns the position
* parameter.
@@ -721,9 +712,6 @@ dir_set_pos(VALUE dir, VALUE pos)
dir_seek(dir, pos);
return pos;
}
-#else
-#define dir_set_pos rb_f_notimplement
-#endif
/*
* call-seq:
@@ -741,6 +729,9 @@ dir_rewind(VALUE dir)
{
struct dir_data *dirp;
+ if (rb_safe_level() >= 4 && !OBJ_UNTRUSTED(dir)) {
+ rb_raise(rb_eSecurityError, "Insecure: can't close");
+ }
GetDIR(dir, dirp);
rewinddir(dirp->dir);
return dir;
@@ -888,6 +879,7 @@ rb_dir_getwd(void)
char *path;
VALUE cwd;
+ rb_secure(4);
path = my_getcwd();
cwd = rb_tainted_str_new2(path);
rb_enc_associate(cwd, rb_filesystem_encoding());
@@ -1032,25 +1024,18 @@ sys_warning_1(VALUE mesg)
*/
#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);
+ 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)
{
@@ -1060,9 +1045,6 @@ do_lstat(const char *path, struct stat *pst, int flags)
return ret;
}
-#else
-#define do_lstat do_stat
-#endif
static DIR *
do_opendir(const char *path, int flags, rb_encoding *enc)
@@ -1153,9 +1135,10 @@ find_dirsep(const char *p, const char *pend, int flags, rb_encoding *enc)
}
/* Remove escaping backslashes */
-static char *
-remove_backslashes(char *p, register const char *pend, rb_encoding *enc)
+static void
+remove_backslashes(char *p, rb_encoding *enc)
{
+ register const char *pend = p + strlen(p);
char *t = p;
char *s = p;
@@ -1174,8 +1157,6 @@ remove_backslashes(char *p, register const char *pend, rb_encoding *enc)
if (t != s)
memmove(t, s, p - s); /* move '\0' too */
-
- return p;
}
/* Globing pattern */
@@ -1194,7 +1175,6 @@ 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);
@@ -1205,14 +1185,13 @@ glob_make_pattern(const char *p, const char *e, int flags, rb_encoding *enc)
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) {
+ if (!magic && *m) {
const char *m2;
while (!has_magic(m+1, m2 = find_dirsep(m+1, e, flags, enc), flags, enc) &&
*m2) {
@@ -1269,21 +1248,23 @@ glob_free_pattern(struct glob_pattern *list)
}
static char *
-join_path(const char *path, long len, int dirsep, const char *name, size_t namlen)
+join_path(const char *path, int dirsep, const char *name)
{
- char *buf = GLOB_ALLOC_N(char, len+namlen+(dirsep?1:0)+1);
+ long len = strlen(path);
+ long len2 = strlen(name)+(dirsep?1:0)+1;
+ char *buf = GLOB_ALLOC_N(char, len+len2);
if (!buf) return 0;
memcpy(buf, path, len);
if (dirsep) {
buf[len++] = '/';
}
- memcpy(buf+len, name, namlen);
- buf[len+namlen] = '\0';
+ buf[len] = '\0';
+ strlcat(buf+len, name, len2);
return buf;
}
-enum answer {UNKNOWN = -1, NO, YES};
+enum answer { YES, NO, UNKNOWN };
#ifndef S_ISDIR
# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
@@ -1333,7 +1314,6 @@ glob_helper(
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;
@@ -1359,7 +1339,6 @@ glob_helper(
}
}
- pathlen = strlen(path);
if (*path) {
if (match_all && exist == UNKNOWN) {
if (do_lstat(path, &st, flags) == 0) {
@@ -1386,7 +1365,7 @@ glob_helper(
if (status) return status;
}
if (match_dir && isdir == YES) {
- char *tmp = join_path(path, pathlen, dirsep, "", 0);
+ char *tmp = join_path(path, dirsep, "");
if (!tmp) return -1;
status = glob_call_func(func, tmp, arg, enc);
GLOB_FREE(tmp);
@@ -1399,50 +1378,20 @@ glob_helper(
if (magical || recursive) {
struct dirent *dp;
DIR *dirp;
- IF_HAVE_HFS(int hfs_p);
+ IF_HAVE_READDIR_R(DEFINE_STRUCT_DIRENT entry);
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;
+ while (READDIR(dirp, enc, &STRUCT_DIRENT(entry), dp)) {
+ char *buf = join_path(path, dirsep, dp->d_name);
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 */
+ if (recursive && strcmp(dp->d_name, ".") != 0 && strcmp(dp->d_name, "..") != 0
+ && fnmatch("*", rb_usascii_encoding(), dp->d_name, flags) == 0) {
#ifndef _WIN32
if (do_lstat(buf, &st, flags) == 0)
new_isdir = S_ISDIR(st.st_mode) ? YES : S_ISLNK(st.st_mode) ? UNKNOWN : NO;
@@ -1468,7 +1417,7 @@ glob_helper(
p = p->next; /* 0 times recursion */
}
if (p->type == PLAIN || p->type == MAGICAL) {
- if (fnmatch(p->str, enc, name, flags) == 0)
+ if (fnmatch(p->str, enc, dp->d_name, flags) == 0)
*new_end++ = p->next;
}
}
@@ -1501,8 +1450,7 @@ glob_helper(
break;
}
memcpy(name, (*cur)->str, len);
- if (escape)
- len = remove_backslashes(name, name+len-1, enc) - name;
+ if (escape) remove_backslashes(name, enc);
new_beg = new_end = GLOB_ALLOC_N(struct glob_pattern *, end - beg);
if (!new_beg) {
@@ -1518,7 +1466,7 @@ glob_helper(
}
}
- buf = join_path(path, pathlen, dirsep, name, len);
+ buf = join_path(path, dirsep, name);
GLOB_FREE(name);
if (!buf) {
GLOB_FREE(new_beg);
@@ -1766,7 +1714,7 @@ rb_push_glob(VALUE str, int flags) /* '\0' is delimiter */
}
static VALUE
-dir_globs(long argc, const VALUE *argv, int flags)
+dir_globs(long argc, VALUE *argv, int flags)
{
VALUE ary = rb_ary_new();
long i;
@@ -1784,9 +1732,11 @@ dir_globs(long argc, const VALUE *argv, int flags)
/*
* call-seq:
+ * Dir[ array ] -> array
* Dir[ string [, string ...] ] -> array
*
* Equivalent to calling
+ * <code>Dir.glob(</code><i>array,</i><code>0)</code> and
* <code>Dir.glob([</code><i>string,...</i><code>],0)</code>.
*
*/
@@ -1801,56 +1751,48 @@ dir_s_aref(int argc, VALUE *argv, VALUE obj)
/*
* 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.glob( pattern, [flags] ) -> array
+ * Dir.glob( pattern, [flags] ) {| filename | block } -> nil
+ *
+ * Returns the filenames found by expanding <i>pattern</i> which is
+ * an +Array+ of the patterns or the pattern +String+, either as an
+ * <i>array</i> or as parameters to the block. Note that this pattern
+ * is not a regexp (it's closer to a shell glob). See
+ * <code>File::fnmatch</code> for the meaning of the <i>flags</i>
+ * parameter. Note that case sensitivity depends on your system (so
+ * <code>File::FNM_CASEFOLD</code> 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. <code>*</code>
+ * will match all files; <code>c*</code> will
+ * match all files beginning with
+ * <code>c</code>; <code>*c</code> will match
+ * all files ending with <code>c</code>; and
+ * <code>\*c\*</code> will match all files that
+ * have <code>c</code> in them (including at
+ * the beginning or end). Equivalent to
+ * <code>/ .* /x</code> in regexp. Note, this
+ * will not match Unix-like hidden files (dotfiles).
+ * In order to include those in the match results,
+ * you must use something like "{*,.*}".
+ * <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>. Matching literals
+ * may be more than one character in length.
+ * More than two literals may be specified.
+ * Equivalent to pattern alternation in
+ * regexp.
+ * <code>\</code>:: Escapes the next metacharacter.
+ * Note that this means you cannot use backslash in windows
+ * as part of a glob, i.e. Dir["c:\\foo*"] will not work
+ * use Dir["c:/foo*"] instead
*
* Dir["config.?"] #=> ["config.h"]
* Dir.glob("config.?") #=> ["config.h"]
@@ -1891,7 +1833,7 @@ dir_s_glob(int argc, VALUE *argv, VALUE obj)
}
else {
volatile VALUE v = ary;
- ary = dir_globs(RARRAY_LEN(v), RARRAY_CONST_PTR(v), flags);
+ ary = dir_globs(RARRAY_LEN(v), RARRAY_PTR(v), flags);
}
if (rb_block_given_p()) {
@@ -1905,18 +1847,17 @@ static VALUE
dir_open_dir(int argc, VALUE *argv)
{
VALUE dir = rb_funcall2(rb_cDir, rb_intern("open"), argc, argv);
+ struct dir_data *dirp;
- rb_check_typeddata(dir, &dir_data_type);
+ TypedData_Get_Struct(dir, struct dir_data, &dir_data_type, dirp);
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
+ * Dir.foreach( dirname ) {| filename | block } -> nil
+ * Dir.foreach( dirname ) -> 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.
@@ -1946,16 +1887,12 @@ dir_foreach(int argc, VALUE *argv, VALUE io)
/*
* call-seq:
- * Dir.entries( dirname ) -> array
- * Dir.entries( dirname, encoding: enc ) -> array
+ * Dir.entries( dirname ) -> 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"]
*
*/
@@ -1968,81 +1905,43 @@ dir_entries(int argc, VALUE *argv, VALUE io)
return rb_ensure(rb_Array, dir, dir_close, dir);
}
-static int
-fnmatch_brace(const char *pattern, VALUE val, void *enc)
-{
- 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);
-}
-
/*
* 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:
+ * Returns true if <i>path</i> matches against <i>pattern</i> 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. <code>*</code>
+ * will match all files; <code>c*</code> will
+ * match all files beginning with
+ * <code>c</code>; <code>*c</code> will match
+ * all files ending with <code>c</code>; and
+ * <code>\*c*</code> will match all files that
+ * have <code>c</code> in them (including at
+ * the beginning or end). Equivalent to
+ * <code>/ .* /x</code> in regexp.
+ * <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.
+ *
+ * <i>flags</i> is a bitwise OR of the <code>FNM_xxx</code>
+ * parameters. The same glob pattern and flags are used by
+ * <code>Dir::glob</code>.
*
* 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{at,ub}s', 'cats') #=> false # { } isn't supported
*
* File.fnmatch('c?t', 'cat') #=> true # '?' match only 1 character
* File.fnmatch('c??t', 'cat') #=> false # ditto
@@ -2060,7 +1959,7 @@ fnmatch_brace(const char *pattern, VALUE val, void *enc)
*
* 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('\a', '\a', File::FNM_NOESCAPE) #=> true # FNM_NOESACPE makes '\' ordinary
* File.fnmatch('[\?]', '?') #=> true # can escape inside bracket expression
*
* File.fnmatch('*', '.profile') #=> false # wildcard doesn't match leading
@@ -2102,22 +2001,9 @@ file_s_fnmatch(int argc, VALUE *argv, VALUE obj)
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);
+ if (fnmatch(RSTRING_PTR(pattern), rb_enc_get(pattern), RSTRING_PTR(path),
+ flags) == 0)
+ return Qtrue;
return Qfalse;
}
@@ -2136,41 +2022,12 @@ 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;
+ rb_scan_args(argc, argv, "01", &user);
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));
-
-}
-
-#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
-
-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);
+ return rb_home_dir(u, rb_str_new(0, 0));
}
/*
@@ -2221,43 +2078,15 @@ Init_Dir(void)
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_cDir,"exist?", rb_file_directory_p, 1); /* in file.c */
+ rb_define_singleton_method(rb_cDir,"exists?", rb_file_directory_p, 1); /* in file.c */
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 85ebe27cae..44410f75e4 100644
--- a/dln.c
+++ b/dln.c
@@ -75,7 +75,7 @@ void *xrealloc();
char *getenv();
#endif
-#ifdef __APPLE__
+#if defined(__APPLE__) && defined(__MACH__) /* Mac OS X */
# if defined(HAVE_DLOPEN)
/* Mac OS X with dlopen (10.3 or later) */
# define MACOSX_DLOPEN
@@ -228,7 +228,7 @@ load_header(int fd, struct exec *hdrp, long 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
@@ -530,7 +530,7 @@ 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
@@ -539,7 +539,7 @@ reloc_undef(int no, struct undef *undef, struct reloc_arg *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;
@@ -763,11 +763,11 @@ load_1(int fd, long disp, const char *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 */
@@ -798,7 +798,7 @@ load_1(int fd, long disp, const char *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;
@@ -1255,25 +1255,20 @@ dln_load(const char *file)
#if defined _WIN32 && !defined __CYGWIN__
HINSTANCE handle;
- WCHAR *winfile;
+ char winfile[MAXPATHLEN];
char message[1024];
void (*init_fct)();
char *buf;
+ if (strlen(file) >= MAXPATHLEN) dln_loaderror("filename too long");
+
/* 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();
- }
+ strlcpy(winfile, file, sizeof(winfile));
/* Load file */
- handle = LoadLibraryW(winfile);
- free(winfile);
-
- if (!handle) {
+ if ((handle = LoadLibrary(winfile)) == NULL) {
error = dln_strerror();
goto failed;
}
@@ -1323,28 +1318,13 @@ dln_load(const char *file)
# 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 = (void*)dlopen(file, RTLD_LAZY|RTLD_GLOBAL)) == NULL) {
-#ifdef __native_client__
- free(orig);
-#endif
error = dln_strerror();
goto failed;
}
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 */
@@ -1405,7 +1385,7 @@ dln_load(const char *file)
}
#endif /* _AIX */
-#if defined(MACOSX_DYLD)
+#if defined(NeXT) || defined(MACOSX_DYLD)
#define DLN_DEFINED
/*----------------------------------------------------
By SHIROYAMA Takayuki Psi@fortune.nest.or.jp
@@ -1416,6 +1396,43 @@ dln_load(const char *file)
sunshine@sunshineco.com,
and... Miss ARAI Akino(^^;)
----------------------------------------------------*/
+#if defined(NeXT) && (NS_TARGET_MAJOR < 4)/* NeXTSTEP rld functions */
+
+ {
+ NXStream* s;
+ unsigned long init_address;
+ char *object_files[2] = {NULL, NULL};
+
+ void (*init_fct)();
+
+ object_files[0] = (char*)file;
+
+ s = NXOpenFile(2,NX_WRITEONLY);
+
+ /* Load object file, if return value ==0 , load failed*/
+ if(rld_load(s, NULL, object_files, NULL) == 0) {
+ NXFlush(s);
+ NXClose(s);
+ dln_loaderror("Failed to load %.200s", file);
+ }
+
+ /* lookup the initial function */
+ if(rld_lookup(s, buf, &init_address) == 0) {
+ NXFlush(s);
+ NXClose(s);
+ dln_loaderror("Failed to lookup Init function %.200s", file);
+ }
+
+ NXFlush(s);
+ NXClose(s);
+
+ /* Cannot call *init_address directory, so copy this value to
+ function pointer */
+ init_fct = (void(*)())init_address;
+ (*init_fct)();
+ return (void*)init_address;
+ }
+#else/* OPENSTEP dyld functions */
{
int dyld_result;
NSObjectFileImage obj_file; /* handle, but not use it */
@@ -1434,7 +1451,7 @@ dln_load(const char *file)
NSLinkModule(obj_file, file, NSLINKMODULE_OPTION_BINDNOW);
/* lookup the initial function */
- if (!NSIsSymbolNameDefined(buf)) {
+ if(!NSIsSymbolNameDefined(buf)) {
dln_loaderror("Failed to lookup Init function %.200s",file);
}
init_fct = NSAddressOfSymbol(NSLookupAndBindSymbol(buf));
@@ -1442,6 +1459,7 @@ dln_load(const char *file)
return (void*)init_fct;
}
+#endif /* rld or dyld */
#endif
#if defined(__BEOS__) || defined(__HAIKU__)
diff --git a/dln.h b/dln.h
index d98b2607e2..abbd6d85a3 100644
--- a/dln.h
+++ b/dln.h
@@ -28,17 +28,14 @@
# 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
+#if defined __GNUC__ && __GNUC__ >= 4
+#pragma GCC visibility push(default)
#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);
+DEPRECATED(char *dln_find_exe(const char*,const char*));
+DEPRECATED(char *dln_find_file(const char*,const char*));
+char *dln_find_exe_r(const char*,const char*,char*,size_t);
+char *dln_find_file_r(const char*,const char*,char*,size_t);
#ifdef USE_DLN_A_OUT
extern char *dln_argv0;
@@ -46,6 +43,8 @@ extern char *dln_argv0;
void *dln_load(const char*);
-RUBY_SYMBOL_EXPORT_END
+#if defined __GNUC__ && __GNUC__ >= 4
+#pragma GCC visibility pop
+#endif
#endif
diff --git a/dln_find.c b/dln_find.c
index f41ceb051d..7ce3a957ed 100644
--- a/dln_find.c
+++ b/dln_find.c
@@ -11,11 +11,19 @@
#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
#define dln_warning rb_warning
#define dln_warning_arg
#else
+#define dln_notimplement --->>> dln not implemented <<<---
+#define dln_memerror abort
+#define dln_exit exit
#define dln_warning fprintf
#define dln_warning_arg stderr,
+static void dln_loaderror(const char *format, ...);
#endif
#include "dln.h"
@@ -37,6 +45,14 @@ char *dln_argv0;
# include <strings.h>
#endif
+#ifndef xmalloc
+void *xmalloc();
+void *xcalloc();
+void *xrealloc();
+#endif
+
+#define free(x) xfree(x)
+
#include <stdio.h>
#if defined(_WIN32)
#include "missing/file.h"
@@ -59,16 +75,14 @@ char *dln_argv0;
# include <unistd.h>
#endif
-#if !defined(_WIN32) && !HAVE_DECL_GETENV
+#ifndef _WIN32
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);
+static char *dln_find_1(const char *fname, const char *path, char *buf, size_t size, int exe_flag);
char *
-dln_find_exe_r(const char *fname, const char *path, char *buf, size_t size
- DLN_FIND_EXTRA_ARG_DECL)
+dln_find_exe_r(const char *fname, const char *path, char *buf, size_t size)
{
char *envpath = 0;
@@ -84,23 +98,35 @@ dln_find_exe_r(const char *fname, const char *path, char *buf, size_t size
path = "/usr/local/bin:/usr/ucb:/usr/bin:/bin:.";
#endif
}
- buf = dln_find_1(fname, path, buf, size, 1 DLN_FIND_EXTRA_ARG);
+ buf = dln_find_1(fname, path, buf, size, 1);
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)
+dln_find_file_r(const char *fname, const char *path, char *buf, size_t size)
{
if (!path) path = ".";
- return dln_find_1(fname, path, buf, size, 0 DLN_FIND_EXTRA_ARG);
+ return dln_find_1(fname, path, buf, size, 0);
+}
+
+static char fbuf[MAXPATHLEN];
+
+char *
+dln_find_exe(const char *fname, const char *path)
+{
+ return dln_find_exe_r(fname, path, fbuf, sizeof(fbuf));
+}
+
+char *
+dln_find_file(const char *fname, const char *path)
+{
+ return dln_find_file_r(fname, path, fbuf, sizeof(fbuf));
}
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)
+ int exe_flag /* non 0 if looking for executable. */)
{
register const char *dp;
register const char *ep;
diff --git a/dmydln.c b/dmydln.c
index 25872efc98..2c8aacc06a 100644
--- a/dmydln.c
+++ b/dmydln.c
@@ -4,6 +4,4 @@ void*
dln_load(const char *file)
{
rb_loaderror("this executable file can't load extension libraries");
-
- UNREACHABLE;
}
diff --git a/dmyencoding.c b/dmyencoding.c
new file mode 100644
index 0000000000..1bd1106e69
--- /dev/null
+++ b/dmyencoding.c
@@ -0,0 +1,2 @@
+#define NO_LOCALE_CHARMAP 1
+#include "encoding.c"
diff --git a/dmyext.c b/dmyext.c
index 34ea7a02f4..4d273f7faf 100644
--- a/dmyext.c
+++ b/dmyext.c
@@ -2,8 +2,3 @@ void
Init_ext(void)
{
}
-
-void
-Init_enc(void)
-{
-}
diff --git a/dmyversion.c b/dmyversion.c
new file mode 100644
index 0000000000..279c6ea95a
--- /dev/null
+++ b/dmyversion.c
@@ -0,0 +1,2 @@
+#define NO_INITIAL_LOAD_PATH 1
+#include "version.c"
diff --git a/doc/.document b/doc/.document
deleted file mode 100644
index b48c0387a7..0000000000
--- a/doc/.document
+++ /dev/null
@@ -1,4 +0,0 @@
-*.rdoc
-ChangeLog*
-NEWS-*
-syntax
diff --git a/doc/ChangeLog-1.8.0 b/doc/ChangeLog-1.8.0
index 07d7c6b165..e16c7f4f20 100644
--- a/doc/ChangeLog-1.8.0
+++ b/doc/ChangeLog-1.8.0
@@ -42,7 +42,7 @@ Sun Aug 3 23:56:50 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
Sun Aug 3 22:07:47 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * ext/tk/lib/tkentry.rb: support 'validatecommand' option of
+ * ext/tk/lib/tkentry.rb: support 'validatecommand' option of
TkEntry/TkSpinbox widget
* ext/tk/sample/{demos-en,demos-jp}/spin.rb: add
@@ -60,7 +60,7 @@ Sun Aug 3 18:03:44 2003 WATANABE Hirofumi <eban@ruby-lang.org>
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/sample/{demos-en,demos-jp}/image3.rb: add
* ext/tk/lib/tkcanvas.rb: bug fix on Tk object ID management
@@ -84,7 +84,7 @@ Sat Aug 2 23:51:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
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
+ * ext/tk/lib/tk.rb: bug fix --- TkGrid failed to treat
RELATIVE PLACEMENT
* ext/tk/sample/demos-en/, demos-jp/: add or modify some
@@ -122,7 +122,7 @@ Sat Aug 2 14:02:39 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
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
+ * 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,
@@ -238,7 +238,7 @@ Fri Aug 1 09:54:38 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
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
+ * 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
@@ -255,13 +255,13 @@ Thu Jul 31 23:44:00 2003 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
Thu Jul 31 23:04:45 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * ext/tk/sample/resource.en, ext/tk/sample/resource.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,
+ * ext/tk/lib/tk.rb: add Tk::Encoding.{encoding_convertfrom,
encoding_convertto}
- * ext/tk/lib/tk.rb: add TkOptionDB.read_with_encoding to read
+ * 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>
@@ -274,15 +274,15 @@ 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
+ * ext/tk/lib/tk.rb: initialize error of instance variable on
TkComposite
- * ext/tk/lib/multi-tk.rb: initialize error on encoding-system on
+ * 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
+ * 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>
@@ -311,13 +311,13 @@ Thu Jul 31 08:18:00 2003 Nathaniel Talbott <ntalbott@ruby-lang.org>
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
+ * 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
+ * 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
+ * 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>
@@ -411,17 +411,17 @@ 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/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
+ * 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
+ * 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>
@@ -514,14 +514,14 @@ Mon Jul 28 22:57:52 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
Tue Jul 29 16:20:36 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * ext/tcltklib/tcltklib.c: bug fix and
+ * 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
+ * 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
+ * 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>
@@ -541,8 +541,8 @@ Tue Jul 29 12:15:37 2003 NAKAMURA Usaku <usa@ruby-lang.org>
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/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>
@@ -571,7 +571,7 @@ Tue Jul 29 01:24:32 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* 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
+ * 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>
@@ -643,7 +643,7 @@ 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
+ * 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
@@ -732,12 +732,12 @@ Fri Jul 26 00:04:25 2003 NAKAMURA, Hiroshi <nakahiro@sarion.co.jp>
Fri Jul 25 16:43:03 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
- * ext/tcltklib/tcltklib.c: add TclTkIp#create_slave,
+ * 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
+ * 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
@@ -747,10 +747,10 @@ 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
+ * 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
+ * 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
@@ -1110,7 +1110,7 @@ Thu Jul 17 13:42:53 2003 WATANABE Hirofumi <eban@ruby-lang.org>
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
+ * 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>
@@ -1139,7 +1139,7 @@ Tue Jul 15 14:38:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
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
+ * 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>
@@ -1196,7 +1196,7 @@ Fri Jul 11 16:09:09 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
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
+ * 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
@@ -1306,7 +1306,7 @@ Thu Jul 3 14:22:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
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
+ * 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>
@@ -1459,11 +1459,11 @@ Thu Jun 26 21:34:49 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
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: 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
+ * 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
@@ -1478,7 +1478,7 @@ 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,
+ * 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
@@ -1493,10 +1493,10 @@ 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
+ * 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:
+ * 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>
@@ -1610,14 +1610,14 @@ Sun Jun 22 23:42:20 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
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
+ * 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
+ * ext/tk/sample/tkmenubutton.rb: sample of TkMenubutton and
TkOptionMenubutton
Sat Jun 21 23:15:08 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
@@ -1625,7 +1625,7 @@ 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.
+ * 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>
@@ -1636,10 +1636,10 @@ Sat Jun 21 13:56:09 2003 Takaaki Uematsu <uema2x@jcom.home.ne.jp>
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/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
+ * 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>
@@ -1647,10 +1647,10 @@ 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
+ * 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
+ * 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>
@@ -1660,7 +1660,7 @@ Fri Jun 20 23:28:27 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
Fri Jun 20 15:04:28 2003 NAKAMURA Usaku <usa@ruby-lang.org>
- * defines.h (PATH_ENV): name of PATH environment. [new].
+ * defines.h (PATH_ENV): name of PATH environment. [new].
* defines.h (ENV_IGNORECASE): define for case insensitive platforms
to access environment variables.
@@ -1678,7 +1678,7 @@ Fri Jun 20 14:52:46 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
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]".
+ * parse.y (new_yield): distinguish "yield 1,2" and "yield [1,2]".
[ruby-dev:20360]
* eval.c (rb_eval): support new_yield() change.
@@ -1688,7 +1688,7 @@ Fri Jun 20 03:09:21 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
[ruby-list:36935]
* parse.y (no_blockarg): separate no block argument check and
- ret_args argument processing.
+ ret_args argument processing.
Fri Jun 20 00:45:19 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
@@ -1696,9 +1696,9 @@ Fri Jun 20 00:45:19 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
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.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>
@@ -1710,17 +1710,17 @@ Thu Jun 19 16:14:43 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tcltklib/tcltklib.c: add TclTkLib::EventFlag::NONE ( == 0 )
- * ext/tcltklib/tcltklib.c: add set_no_event_wait() and
+ * 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
+ * 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
+ * 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 )
@@ -1730,7 +1730,7 @@ Thu Jun 19 16:14:43 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tkafter.rb: set_callback returns self
- * ext/tk/lib/tkafter.rb: continue() raises an exception, if already
+ * 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.
@@ -1768,15 +1768,15 @@ Wed Jun 18 19:46:21 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tk.rb: rename 'no_create' option to 'without_creating'
- * ext/tk/lib/tk.rb: add TkWindow#pack_in, TkWindow#grid_in,
+ * 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
+ * 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.
+ * 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
@@ -1788,21 +1788,21 @@ Wed Jun 18 19:46:21 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tk.rb: TkBindTag.new accepts a block
- * ext/tk/lib/tk.rb: If given taglist, TkWindow#bindtags(taglist)
+ * 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
+ * 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
+ * ext/tk/lib/tk.rb: Tk::Wm.client returns the argument string
when setting name
- * ext/tk/lib/tk.rb: TkGrid.columnconfiginfo and rowconfiginfo
+ * ext/tk/lib/tk.rb: TkGrid.columnconfiginfo and rowconfiginfo
given a slot return a number.
- * ext/tk/lib/tk.rb: TkWindow.grid_columnconfiginfo and
+ * ext/tk/lib/tk.rb: TkWindow.grid_columnconfiginfo and
grid_rowconfiginfo --- ditto
* ext/tk/lib/tk.rb: rename and define alias :: TkOption ==> TkOptionDB
@@ -1813,10 +1813,10 @@ Wed Jun 18 19:46:21 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tk.rb: some TkComm methods change to module functions
- * ext/tk/lib/tk.rb: add support for -displayof option to some
+ * 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 ---
+ * 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
@@ -1837,7 +1837,7 @@ Wed Jun 18 19:46:21 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tkentry.rb: TkEntry#bbox returns an array of four numbers
- * ext/tk/lib/tkentry.rb: scan validatecommand arguments and
+ * 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
@@ -1932,7 +1932,7 @@ Fri Jun 13 09:24:39 2003 Shugo Maeda <shugo@ruby-lang.org>
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.
+ initialize method.
* ext/tk/MANIFEST : forgot to commit when added tkmacpkg.rb
and tkwinpkg.rb
@@ -1947,7 +1947,7 @@ Thu Jun 12 21:14:11 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* 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
+ * 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>
@@ -8346,7 +8346,7 @@ 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-
+ * 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
@@ -8354,7 +8354,7 @@ Tue Jun 4 07:03:33 2002 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tk*.rb: Allow to use Symbols for parameters.
- * ext/tk/lib/tkcanvas.rb: (TkcItem) Add 'coords' parameter to the
+ * 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'.
@@ -8363,7 +8363,7 @@ Tue Jun 4 07:03:33 2002 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
'use' parameter.
* ext/tk/lib/tk.rb: Add new parameter 'widgetname' to the widget
- constructor to support effective use of Resource Database.
+ constructor to support effective use of Resource Database.
* ext/tk/lib/tk.rb: TkOption::get always returns a tainted string.
@@ -13763,7 +13763,7 @@ 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
+ * error.c (syserr_eqq): comparison between SytemCallErrors should
based on their error numbers.
Tue Apr 17 16:54:39 2001 K.Kosako <kosako@sofnec.co.jp>
diff --git a/doc/ChangeLog-1.9.3 b/doc/ChangeLog-1.9.3
index b8e3162511..d440e76965 100644
--- a/doc/ChangeLog-1.9.3
+++ b/doc/ChangeLog-1.9.3
@@ -1,12154 +1,3 @@
-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>