ruby-changes:4370
From: ko1@a...
Date: Mon, 31 Mar 2008 00:00:28 +0900 (JST)
Subject: [ruby-changes:4370] matz - Ruby:r15861 (trunk): revert git backfire in r15860; sorry
matz 2008-03-31 00:00:12 +0900 (Mon, 31 Mar 2008) New Revision: 15861 Modified files: trunk/complex.c trunk/ext/tk/sample/encstr_usage.rb trunk/ext/tk/sample/irbtkw.rbw trunk/ext/tk/sample/tkrttimer.rb trunk/ext/tk/stubs.c trunk/io.c trunk/lib/complex.rb trunk/lib/rational.rb trunk/version.h Log: revert git backfire in r15860; sorry http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/tk/sample/irbtkw.rbw?r1=15861&r2=15860&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/version.h?r1=15861&r2=15860&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/complex.rb?r1=15861&r2=15860&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/tk/sample/tkrttimer.rb?r1=15861&r2=15860&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/complex.c?r1=15861&r2=15860&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/rational.rb?r1=15861&r2=15860&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/io.c?r1=15861&r2=15860&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/tk/stubs.c?r1=15861&r2=15860&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/tk/sample/encstr_usage.rb?r1=15861&r2=15860&diff_format=u Index: complex.c =================================================================== --- complex.c (revision 15860) +++ complex.c (revision 15861) @@ -85,6 +85,22 @@ } inline static VALUE +f_cmp(VALUE x, VALUE y) +{ + VALUE r; + if (FIXNUM_P(x) && FIXNUM_P(y)) { + long c = FIX2LONG(x) - FIX2LONG(y); + if (c > 0) + c = 1; + else if (c < 0) + c = -1; + r = INT2FIX(c); + } else + r = rb_funcall(x, id_cmp, 1, y); + return r; +} + +inline static VALUE f_div(VALUE x, VALUE y) { VALUE r; @@ -184,22 +200,6 @@ fun1(to_s) fun1(truncate) -inline static VALUE -f_cmp(VALUE x, VALUE y) -{ - VALUE r; - if (FIXNUM_P(x) && FIXNUM_P(y)) { - long c = FIX2LONG(x) - FIX2LONG(y); - if (c > 0) - c = 1; - else if (c < 0) - c = -1; - r = INT2FIX(c); - } else - r = rb_funcall(x, id_cmp, 1, y); - return r; -} - fun2(coerce) fun2(divmod) @@ -1016,22 +1016,13 @@ return f_boolcast(!nucomp_exact_p(self)); } -extern VALUE rb_gcd(VALUE x, VALUE y); +extern VALUE rb_lcm(VALUE x, VALUE y); static VALUE -f_lcm(VALUE x, VALUE y) -{ - if (f_zero_p(x) || f_zero_p(y)) - return ZERO; - else - return f_abs(f_mul(f_div(x, rb_gcd(x, y)), y)); -} - -static VALUE nucomp_denominator(VALUE self) { get_dat1(self); - return f_lcm(f_denominator(dat->real), f_denominator(dat->image)); + return rb_lcm(f_denominator(dat->real), f_denominator(dat->image)); } static VALUE Index: io.c =================================================================== --- io.c (revision 15860) +++ io.c (revision 15861) @@ -2228,8 +2228,79 @@ return io; } +static VALUE +io_getc(rb_io_t *fptr, rb_encoding *enc) +{ + int r, n; + VALUE str; + + if (io_fillbuf(fptr) < 0) { + return Qnil; + } + r = rb_enc_precise_mbclen(fptr->rbuf+fptr->rbuf_off, fptr->rbuf+fptr->rbuf_off+fptr->rbuf_len, enc); + if (MBCLEN_CHARFOUND_P(r) && + (n = MBCLEN_CHARFOUND_LEN(r)) <= fptr->rbuf_len) { + str = rb_str_new(fptr->rbuf+fptr->rbuf_off, n); + fptr->rbuf_off += n; + fptr->rbuf_len -= n; + } + else if (MBCLEN_NEEDMORE_P(r)) { + str = rb_str_new(fptr->rbuf+fptr->rbuf_off, fptr->rbuf_len); + fptr->rbuf_len = 0; + getc_needmore: + if (io_fillbuf(fptr) != -1) { + rb_str_cat(str, fptr->rbuf+fptr->rbuf_off, 1); + fptr->rbuf_off++; + fptr->rbuf_len--; + r = rb_enc_precise_mbclen(RSTRING_PTR(str), RSTRING_PTR(str)+RSTRING_LEN(str), enc); + if (MBCLEN_NEEDMORE_P(r)) { + goto getc_needmore; + } + } + } + else { + str = rb_str_new(fptr->rbuf+fptr->rbuf_off, 1); + fptr->rbuf_off++; + fptr->rbuf_len--; + } + return io_enc_str(str, fptr); +} + /* * call-seq: + * ios.each_char {|c| block } => ios + * + * Calls the given block once for each character in <em>ios</em>, + * passing the character as an argument. The stream must be opened for + * reading or an <code>IOError</code> will be raised. + * + * f = File.new("testfile") + * f.each_char {|c| print c, ' ' } #=> #<File:testfile> + */ + +static VALUE +rb_io_each_char(VALUE io) +{ + rb_io_t *fptr; + rb_encoding *enc; + VALUE c; + + RETURN_ENUMERATOR(io, 0, 0); + GetOpenFile(io, fptr); + rb_io_check_readable(fptr); + + enc = io_input_encoding(fptr); + READ_CHECK(fptr); + while (!NIL_P(c = io_getc(fptr, enc))) { + rb_yield(c); + } + return io; +} + + + +/* + * call-seq: * str.lines(sep=$/) => anEnumerator * str.lines(limit) => anEnumerator * str.lines(sep, limit) => anEnumerator @@ -2241,9 +2312,9 @@ */ static VALUE -rb_io_lines(int argc, VALUE *argv, VALUE str) +rb_io_lines(int argc, VALUE *argv, VALUE io) { - return rb_enumeratorize(str, ID2SYM(rb_intern("each_line")), argc, argv); + return rb_enumeratorize(io, ID2SYM(rb_intern("each_line")), argc, argv); } /* @@ -2256,13 +2327,31 @@ */ static VALUE -rb_io_bytes(VALUE str) +rb_io_bytes(VALUE io) { - return rb_enumeratorize(str, ID2SYM(rb_intern("each_byte")), 0, 0); + return rb_enumeratorize(io, ID2SYM(rb_intern("each_byte")), 0, 0); } /* * call-seq: + * ios.chars => anEnumerator + * + * Returns an enumerator that gives each character in <em>ios</em>. + * The stream must be opened for reading or an <code>IOError</code> + * will be raised. + * + * f = File.new("testfile) + * f.chars.each {|c| print c, ' ' } + */ + +static VALUE +rb_io_chars(VALUE io) +{ + return rb_enumeratorize(io, ID2SYM(rb_intern("each_char")), 0, 0); +} + +/* + * call-seq: * ios.getc => fixnum or nil * * Reads a one-character string from <em>ios</em>. Returns @@ -2286,38 +2375,8 @@ enc = io_input_encoding(fptr); READ_CHECK(fptr); - if (io_fillbuf(fptr) < 0) { - return Qnil; - } - r = rb_enc_precise_mbclen(fptr->rbuf+fptr->rbuf_off, fptr->rbuf+fptr->rbuf_off+fptr->rbuf_len, enc); - if (MBCLEN_CHARFOUND_P(r) && - (n = MBCLEN_CHARFOUND_LEN(r)) <= fptr->rbuf_len) { - str = rb_str_new(fptr->rbuf+fptr->rbuf_off, n); - fptr->rbuf_off += n; - fptr->rbuf_len -= n; - } - else if (MBCLEN_NEEDMORE_P(r)) { - str = rb_str_new(fptr->rbuf+fptr->rbuf_off, fptr->rbuf_len); - fptr->rbuf_len = 0; - getc_needmore: - if (io_fillbuf(fptr) != -1) { - rb_str_cat(str, fptr->rbuf+fptr->rbuf_off, 1); - fptr->rbuf_off++; - fptr->rbuf_len--; - r = rb_enc_precise_mbclen(RSTRING_PTR(str), RSTRING_PTR(str)+RSTRING_LEN(str), enc); - if (MBCLEN_NEEDMORE_P(r)) { - goto getc_needmore; - } - } - } - else { - str = rb_str_new(fptr->rbuf+fptr->rbuf_off, 1); - fptr->rbuf_off++; - fptr->rbuf_len--; - } - return io_enc_str(str, fptr); + return io_getc(fptr, enc); } - int rb_getc(FILE *f) { @@ -7006,6 +7065,17 @@ } static VALUE +argf_each_char(VALUE argf) +{ + RETURN_ENUMERATOR(argf, 0, 0); + for (;;) { + if (!next_argv()) return Qnil; + rb_block_call(current_file, rb_intern("each_char"), 0, 0, rb_yield, 0); + next_p = 1; + } +} + +static VALUE argf_filename(VALUE argf) { next_argv(); @@ -7303,8 +7373,10 @@ rb_define_method(rb_cIO, "each", rb_io_each_line, -1); rb_define_method(rb_cIO, "each_line", rb_io_each_line, -1); rb_define_method(rb_cIO, "each_byte", rb_io_each_byte, 0); + rb_define_method(rb_cIO, "each_char", rb_io_each_char, 0); rb_define_method(rb_cIO, "lines", rb_io_lines, -1); rb_define_method(rb_cIO, "bytes", rb_io_bytes, 0); + rb_define_method(rb_cIO, "chars", rb_io_chars, 0); rb_define_method(rb_cIO, "syswrite", rb_io_syswrite, 1); rb_define_method(rb_cIO, "sysread", rb_io_sysread, -1); @@ -7401,6 +7473,7 @@ rb_define_method(rb_cARGF, "each", argf_each_line, -1); rb_define_method(rb_cARGF, "each_line", argf_each_line, -1); rb_define_method(rb_cARGF, "each_byte", argf_each_byte, 0); + rb_define_method(rb_cARGF, "each_char", argf_each_char, 0); rb_define_method(rb_cARGF, "read", argf_read, -1); rb_define_method(rb_cARGF, "readpartial", argf_readpartial, -1); Index: lib/rational.rb =================================================================== --- lib/rational.rb (revision 15860) +++ lib/rational.rb (revision 15861) @@ -15,35 +15,3 @@ alias rpower ** end - -class Integer - - def gcd(other) - min = self.abs - max = other.abs - while min > 0 - tmp = min - min = max % min - max = tmp - end - max - end - - def lcm(other) - if self.zero? or other.zero? - 0 - else - (self.div(self.gcd(other)) * other).abs - end - end - - def gcdlcm(other) - gcd = self.gcd(other) - if self.zero? or other.zero? - [gcd, 0] - else - [gcd, (self.div(gcd) * other).abs] - end - end - -end Index: lib/complex.rb =================================================================== --- lib/complex.rb (revision 15860) +++ lib/complex.rb (revision 15861) @@ -1,35 +1,3 @@ -class Integer - - def gcd(other) - min = self.abs - max = other.abs - while min > 0 - tmp = min - min = max % min - max = tmp - end - max - end - - def lcm(other) - if self.zero? or other.zero? - 0 - else - (self.div(self.gcd(other)) * other).abs - end - end - - def gcdlcm(other) - gcd = self.gcd(other) - if self.zero? or other.zero? - [gcd, 0] - else - [gcd, (self.div(gcd) * other).abs] - end - end - -end - module Math alias exp! exp Index: ext/tk/stubs.c =================================================================== --- ext/tk/stubs.c (revision 15860) +++ ext/tk/stubs.c (revision 15861) @@ -1,5 +1,11 @@ +/************************************************ + + stubs.c - Tcl/Tk stubs support + +************************************************/ + +#include "ruby.h" #include "stubs.h" -#include "ruby/ruby.h" #include <tcl.h> #include <tk.h> @@ -86,7 +92,12 @@ static DL_HANDLE tk_dll = (DL_HANDLE)0; int +#ifdef RUBY_VM ruby_open_tcl_dll(char *appname) +#else +ruby_open_tcl_dll(appname) + char *appname; +#endif { void (*p_Tcl_FindExecutable)(const char *); int n; @@ -168,7 +179,12 @@ } int +#ifdef RUBY_VM ruby_open_tcltk_dll(char *appname) +#else +ruby_open_tcltk_dll(appname) + char *appname; +#endif { return( ruby_open_tcl_dll(appname) || ruby_open_tk_dll() ); } @@ -187,7 +203,12 @@ Tcl_Interp * +#ifdef RUBY_VM ruby_tcl_create_ip_and_stubs_init(int *st) +#else +ruby_tcl_create_ip_and_stubs_init(st) + int *st; +#endif { Tcl_Interp *tcl_ip; @@ -269,7 +290,12 @@ } int +#ifdef RUBY_VM ruby_tk_stubs_init(Tcl_Interp *tcl_ip) +#else +ruby_tk_stubs_init(tcl_ip) + Tcl_Interp *tcl_ip; +#endif { Tcl_ResetResult(tcl_ip); @@ -304,7 +330,12 @@ } int +#ifdef RUBY_VM ruby_tk_stubs_safeinit(Tcl_Interp *tcl_ip) +#else +ruby_tk_stubs_safeinit(tcl_ip) + Tcl_Interp *tcl_ip; +#endif { Tcl_ResetResult(tcl_ip); @@ -390,7 +421,12 @@ static int call_tk_stubs_init = 0; int +#ifdef RUBY_VM ruby_open_tcl_dll(char *appname) +#else +ruby_open_tcl_dll(appname) + char *appname; +#endif { if (appname) { Tcl_FindExecutable(appname); @@ -402,7 +438,8 @@ return TCLTK_STUBS_OK; } -int ruby_open_tk_dll() +int +ruby_open_tk_dll() { if (!open_tcl_dll) { /* ruby_open_tcl_dll(RSTRING_PTR(rb_argv0)); */ @@ -412,7 +449,13 @@ return TCLTK_STUBS_OK; } -int ruby_open_tcltk_dll(char *appname) +int +#ifdef RUBY_VM +ruby_open_tcltk_dll(char *appname) +#else +ruby_open_tcltk_dll(appname) + char *appname; +#endif { return( ruby_open_tcl_dll(appname) || ruby_open_tk_dll() ); } @@ -430,7 +473,12 @@ } Tcl_Interp * +#ifdef RUBY_VM ruby_tcl_create_ip_and_stubs_init(int *st) +#else +ruby_tcl_create_ip_and_stubs_init(st) + int *st; +#endif { Tcl_Interp *tcl_ip; @@ -458,7 +506,12 @@ } int +#ifdef RUBY_VM ruby_tk_stubs_init(Tcl_Interp *tcl_ip) +#else +ruby_tk_stubs_init(tcl_ip) + Tcl_Interp *tcl_ip; +#endif { if (Tk_Init(tcl_ip) == TCL_ERROR) return FAIL_Tk_Init; @@ -474,7 +527,12 @@ } int +#ifdef RUBY_VM ruby_tk_stubs_safeinit(Tcl_Interp *tcl_ip) +#else +ruby_tk_stubs_safeinit(tcl_ip) + Tcl_Interp *tcl_ip; +#endif { #if TCL_MAJOR_VERSION >= 8 if (Tk_SafeInit(tcl_ip) == TCL_ERROR) Index: ext/tk/sample/encstr_usage.rb =================================================================== --- ext/tk/sample/encstr_usage.rb (revision 15860) +++ ext/tk/sample/encstr_usage.rb (revision 15861) @@ -11,7 +11,7 @@ t2 = TkText.new(:height=>5).pack t3 = TkText.new(:height=>5).pack -src_str = IO.readlines('iso2022-kr.txt').join +src_str = IO.readlines(File.join(File.dirname(__FILE__),'iso2022-kr.txt')).join t1.insert('end', "use neither Tk::EncodedString class nor Tk.encoding= method\n\n") @@ -23,7 +23,8 @@ t2.insert('end', enc_str) Tk.encoding = 'iso2022-kr' -t3.insert('end', "use Tk.encoding = 'iso2022-kr'\n\n") +t3.insert('end', "use Tk.encoding = 'iso2022-kr' (Tk.force_default_encoding? == #{Tk.force_default_encoding?})\n\n") + t3.insert('end', src_str) Tk.mainloop Index: ext/tk/sample/tkrttimer.rb =================================================================== --- ext/tk/sample/tkrttimer.rb (revision 15860) +++ ext/tk/sample/tkrttimer.rb (revision 15861) @@ -17,8 +17,17 @@ label2 = TkLabel.new(:parent=>f2, :relief=>:raised, :width=>10).pack(:fill=>:both) -TkLabel.new(:text=>'Interval setting of each timer is 10 ms.', - :padx=>10, :pady=>5).pack +TkLabel.new(:padx=>10, :pady=>5, :justify=>'left', :text=><<EOT).pack +Interval setting of each timer object is 10 ms. +Each timer object counts up the value on each callback +(the value is not the clock data). +The count of the TkTimer object is delayed by execution +time of callbacks and inaccuracy of interval. +On the other hand, the count of the TkRTTimer object is +not delayed. Its callback interval is not accurate too. +But it can compute error correction about the time when +a callback should start. +EOT # define the procedure repeated by the TkTimer object tick = proc{|aobj| #<== TkTimer object Index: ext/tk/sample/irbtkw.rbw =================================================================== --- ext/tk/sample/irbtkw.rbw (revision 15860) +++ ext/tk/sample/irbtkw.rbw (revision 15861) @@ -4,7 +4,7 @@ # # by Hidetoshi NAGAI (nagai@a...) # -release = '2006/11/06' +release = '2008/03/08' require 'tk' begin @@ -15,10 +15,32 @@ require 'irb' +if TkCore::WITH_ENCODING +else + # $KCODE setup + case Tk.encoding + when 'shiftjis', 'cp932' + $KCODE='SJIS' + when 'euc-jp' + $KCODE='EUC' + when 'utf-8', 'unicode' + $KCODE='UTF8' + else + # unknown + end +end + # console setup top = TkToplevel.new(:title=>'IRB console') top.protocol(:WM_DELETE_WINDOW){ Tk.exit } +case (Tk.windowingsystem) +when 'win32' + fnt = ['MS Gothic', '-12'] +else + fnt = ['courier', '-12'] +end + console = TkTextIO.new(top, :mode=>:console, :width=>80).pack(:side=>:left, :expand=>true, :fill=>:both) Index: version.h =================================================================== --- version.h (revision 15860) +++ version.h (revision 15861) @@ -1,7 +1,7 @@ #define RUBY_VERSION "1.9.0" -#define RUBY_RELEASE_DATE "2008-03-30" +#define RUBY_RELEASE_DATE "2008-03-29" #define RUBY_VERSION_CODE 190 -#define RUBY_RELEASE_CODE 20080330 +#define RUBY_RELEASE_CODE 20080329 #define RUBY_PATCHLEVEL 0 #define RUBY_VERSION_MAJOR 1 @@ -9,7 +9,7 @@ #define RUBY_VERSION_TEENY 0 #define RUBY_RELEASE_YEAR 2008 #define RUBY_RELEASE_MONTH 3 -#define RUBY_RELEASE_DAY 30 +#define RUBY_RELEASE_DAY 29 #ifdef RUBY_EXTERN RUBY_EXTERN const char ruby_version[]; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/