From ef260b085eea729efaa46e93ac71d08a3fa210c6 Mon Sep 17 00:00:00 2001 From: matz Date: Sun, 30 Mar 2008 15:00:12 +0000 Subject: [PATCH] revert git backfire in r15860; sorry git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15861 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- complex.c | 45 ++++----- ext/tk/sample/encstr_usage.rb | 5 +- ext/tk/sample/irbtkw.rbw | 24 ++++- ext/tk/sample/tkrttimer.rb | 13 ++- ext/tk/stubs.c | 64 +++++++++++- io.c | 181 ++++++++++++++++++++++++---------- lib/complex.rb | 32 ------ lib/rational.rb | 32 ------ version.h | 6 +- 9 files changed, 246 insertions(+), 156 deletions(-) diff --git a/complex.c b/complex.c index 58704110ce..1644746360 100644 --- a/complex.c +++ b/complex.c @@ -84,6 +84,22 @@ f_add(VALUE x, VALUE y) return r; } +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) { @@ -184,22 +200,6 @@ fun1(to_r) 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 @@ nucomp_inexact_p(VALUE self) return f_boolcast(!nucomp_exact_p(self)); } -extern VALUE rb_gcd(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)); -} +extern VALUE rb_lcm(VALUE x, VALUE 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 diff --git a/ext/tk/sample/encstr_usage.rb b/ext/tk/sample/encstr_usage.rb index 4285ec861c..b22c2504ac 100644 --- a/ext/tk/sample/encstr_usage.rb +++ b/ext/tk/sample/encstr_usage.rb @@ -11,7 +11,7 @@ t1 = TkText.new(:height=>5).pack 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', 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 diff --git a/ext/tk/sample/irbtkw.rbw b/ext/tk/sample/irbtkw.rbw index f6a35be6ed..3fb6dde626 100644 --- a/ext/tk/sample/irbtkw.rbw +++ b/ext/tk/sample/irbtkw.rbw @@ -4,7 +4,7 @@ # # by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp) # -release = '2006/11/06' +release = '2008/03/08' require 'tk' begin @@ -15,10 +15,32 @@ end 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) diff --git a/ext/tk/sample/tkrttimer.rb b/ext/tk/sample/tkrttimer.rb index 531f4a8d5a..0abd4ecbd2 100644 --- a/ext/tk/sample/tkrttimer.rb +++ b/ext/tk/sample/tkrttimer.rb @@ -17,8 +17,17 @@ TkLabel.new(f2, :text=>'use TkRTTimer class').pack 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=>< #include @@ -86,7 +92,12 @@ static DL_HANDLE tcl_dll = (DL_HANDLE)0; 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 @@ ruby_open_tk_dll() } 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 @@ tk_stubs_init_p() 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 @@ ruby_tcl_stubs_init() } 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 @@ ruby_tk_stubs_init(Tcl_Interp *tcl_ip) } 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 open_tcl_dll = 0; 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 @@ ruby_open_tcl_dll(char *appname) 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 @@ int ruby_open_tk_dll() 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 @@ tk_stubs_init_p() } 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 @@ ruby_tcl_stubs_init() } 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 @@ ruby_tk_stubs_init(Tcl_Interp *tcl_ip) } 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) diff --git a/io.c b/io.c index 504c4571b9..9a7d6e8864 100644 --- a/io.c +++ b/io.c @@ -2228,64 +2228,12 @@ rb_io_each_byte(VALUE io) return io; } -/* - * call-seq: - * str.lines(sep=$/) => anEnumerator - * str.lines(limit) => anEnumerator - * str.lines(sep, limit) => anEnumerator - * - * Returns an enumerator that gives each line in the string. - * - * "foo\nbar\n".lines.to_a #=> ["foo\n", "bar\n"] - * "foo\nb ar".lines.sort #=> ["b ar", "foo\n"] - */ - -static VALUE -rb_io_lines(int argc, VALUE *argv, VALUE str) +static VALUE +io_getc(rb_io_t *fptr, rb_encoding *enc) { - return rb_enumeratorize(str, ID2SYM(rb_intern("each_line")), argc, argv); -} - -/* - * call-seq: - * str.bytes => anEnumerator - * - * Returns an enumerator that gives each byte in the string. - * - * "hello".bytes.to_a #=> [104, 101, 108, 108, 111] - */ - -static VALUE -rb_io_bytes(VALUE str) -{ - return rb_enumeratorize(str, ID2SYM(rb_intern("each_byte")), 0, 0); -} - -/* - * call-seq: - * ios.getc => fixnum or nil - * - * Reads a one-character string from ios. Returns - * nil if called at end of file. - * - * f = File.new("testfile") - * f.getc #=> "8" - * f.getc #=> "1" - */ - -static VALUE -rb_io_getc(VALUE io) -{ - rb_io_t *fptr; int r, n; VALUE str; - rb_encoding *enc; - GetOpenFile(io, fptr); - rb_io_check_readable(fptr); - - enc = io_input_encoding(fptr); - READ_CHECK(fptr); if (io_fillbuf(fptr) < 0) { return Qnil; } @@ -2318,6 +2266,117 @@ rb_io_getc(VALUE io) return io_enc_str(str, fptr); } +/* + * call-seq: + * ios.each_char {|c| block } => ios + * + * Calls the given block once for each character in ios, + * passing the character as an argument. The stream must be opened for + * reading or an IOError will be raised. + * + * f = File.new("testfile") + * f.each_char {|c| print c, ' ' } #=> # + */ + +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 + * + * Returns an enumerator that gives each line in the string. + * + * "foo\nbar\n".lines.to_a #=> ["foo\n", "bar\n"] + * "foo\nb ar".lines.sort #=> ["b ar", "foo\n"] + */ + +static VALUE +rb_io_lines(int argc, VALUE *argv, VALUE io) +{ + return rb_enumeratorize(io, ID2SYM(rb_intern("each_line")), argc, argv); +} + +/* + * call-seq: + * str.bytes => anEnumerator + * + * Returns an enumerator that gives each byte in the string. + * + * "hello".bytes.to_a #=> [104, 101, 108, 108, 111] + */ + +static VALUE +rb_io_bytes(VALUE io) +{ + return rb_enumeratorize(io, ID2SYM(rb_intern("each_byte")), 0, 0); +} + +/* + * call-seq: + * ios.chars => anEnumerator + * + * Returns an enumerator that gives each character in ios. + * The stream must be opened for reading or an IOError + * 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 ios. Returns + * nil if called at end of file. + * + * f = File.new("testfile") + * f.getc #=> "8" + * f.getc #=> "1" + */ + +static VALUE +rb_io_getc(VALUE io) +{ + rb_io_t *fptr; + int r, n; + VALUE str; + rb_encoding *enc; + + GetOpenFile(io, fptr); + rb_io_check_readable(fptr); + + enc = io_input_encoding(fptr); + READ_CHECK(fptr); + return io_getc(fptr, enc); +} int rb_getc(FILE *f) { @@ -7005,6 +7064,17 @@ argf_each_byte(VALUE argf) } } +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) { @@ -7303,8 +7373,10 @@ Init_IO(void) 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 @@ Init_IO(void) 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); diff --git a/lib/complex.rb b/lib/complex.rb index 505b0120e3..9d926023a7 100644 --- a/lib/complex.rb +++ b/lib/complex.rb @@ -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 diff --git a/lib/rational.rb b/lib/rational.rb index b12bf7ef38..87c5d3f111 100644 --- a/lib/rational.rb +++ b/lib/rational.rb @@ -15,35 +15,3 @@ class Bignum 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 diff --git a/version.h b/version.h index 7ea651cc9c..8d99c70921 100644 --- a/version.h +++ b/version.h @@ -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[];