[#15841] abstract method — Tanaka Akira <akr@...17n.org>
最近、abstract method が欲しくなり、次のようなものを書きました。
[#15846] Ruby M17N request — "K.Kosako" <kosako@...>
今書いているライブラリを、あらかじめRuby M17Nに対応させておこうとして、
まつもと ゆきひろです
Yukihiro Matsumotoさんの<1012831868.125952.28017.nullmailer@ev.netlab.jp>から
<20020205045749.0AAA015B@helium.ruby-lang.org>から
At Mon, 25 Feb 2002 19:57:05 +0900,
At Mon, 25 Feb 2002 21:00:46 +0900,
まつもと ゆきひろです
まつもと ゆきひろです
Yukihiro Matsumotoさんの<1014656883.878972.23459.nullmailer@ev.netlab.jp>から
At Mon, 25 Feb 2002 19:57:05 +0900,
At Sun, 3 Mar 2002 07:15:40 +0900,
まつもと ゆきひろです
Yukihiro Matsumotoさんの<1015574625.778743.29060.nullmailer@ev.netlab.jp>から
まつもと ゆきひろです
なかだです。
nobu.nakada@nifty.ne.jpさんの
なかだです。
nobu.nakada@nifty.ne.jpさんの
なかだです。
なかだです。
nobu.nakada@nifty.ne.jpさんの
あおきです。
なかだです。
[#15855] Re: [ruby-cvs] ruby: * io.c (fptr_finalize): should raise error when fclose fails. — nobu.nakada@...
なかだです。
[#15861] syscall — nobu.nakada@...
なかだです。
西山和広です。
なかだです。
In article <200202091509.g19F9mO16072@sharui.nakada.kanuma.tochigi.jp>,
まつもと ゆきひろです
なかだです。
[#15867] [BUG?] include after module definition and extend module — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
In article <1014021831.527593.5892.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <1014100898.366150.14204.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <1014126659.698034.15364.nullmailer@ev.netlab.jp>,
[#15903] -L option in extmk.rb — nobu.nakada@...
なかだです。
[#15914] making net/*.rb grok URI — "Akinori MUSHA" <knu@...>
net/*.rb モジュール群をぜひとも標準添付となった URI クラスに
At Mon, 18 Feb 2002 04:33:42 +0900,
あおきです。
At Mon, 18 Feb 2002 15:24:22 +0900,
あおきです。
高橋征義です。
In article <200202190432.NAA18796@mx.inac.co.jp>,
高橋征義です。
In article <20020221020159R.maki@rubycolor.org>,
なかだです。
In article <200202202350.g1KNoc731179@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
In article <200202210553.g1L5rk713061@sharui.nakada.kanuma.tochigi.jp>,
まつもと ゆきひろです
In article <1014277711.428770.25909.nullmailer@ev.netlab.jp>,
[#15918] win32 方面 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#15988] Re: [rubyist:1097] Re: % 記法 — nobu.nakada@...
なかだです。
なかだです。
西山和広です。
まつもと ゆきひろです
なかだです。
[#15994] subdir in mkmf.rb — nobu.nakada@...
なかだです。
[#16040] Digest::MD5 SEGV (ruby_1_6) — m_seki@...
[#16049] defined? autoload constant — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
なかだです。
けいじゅ@日本ラショナルソフトウェアです.
なかだです。
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
[#16050] ParseDate.to_time — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#16059] New Struct — Shin-ichiro HARA <sinara@...>
原です。
[#16068] UNIXSocket#{send_io,recv_io} — Tanaka Akira <akr@...17n.org>
しばらく前にふと気が向いて UNIXSocket#{send_io,recv_io} というものをでっ
まつもと ゆきひろです
In article <1014700933.711454.28068.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
[#16082] Array#select without block — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
新井です。
まつもと ゆきひろです
[#16102] No trace_func event at if-elsif-else line — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。どうせ一年も先の話なのでのんびりと。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
まつもと ゆきひろです
なひです。
[#16112] ruby 1.6.7 preview 1 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#16126] patch for gdbm, dbm and sdbm — Koji Arai <JCA02266@...>
新井です。
[#16134] Defining (Python) Source Code Encoding — TAKAHASHI Masayoshi <maki@...>
高橋征義です。ruby-list の「localized document」ともやや関係あり?
新井です。
なかだです。
[#16138] Hash implementation — MORITA Naoyuki <naohaq@...>
はじめまして、森田と申すものです。
[#16145] ruby 1.6.7 (2002-02-27)/marshal data too short (ArgumentError) — m_seki@...
[ruby-dev:15835] Re: 文字列→整数変換
なかだです。
At Fri, 1 Feb 2002 10:41:31 +0900,
matz@ruby-lang.org (Yukihiro Matsumoto) wrote:
> |rb_cstr2inum()は、今のところ基数が0ならエラーで例外としてますが、
> |上の二つを追加しようとすると無理があります。badcheckを引数に追
> |加したほうがいいと思うんですが、これのインターフェースって変え
> |ちゃっても大丈夫なもんでしょうか。たぶん使ってる拡張ライブラリ
> |はないとは思うんですが。
>
> 変えない方が良いんじゃないかなあ。実は以前にも「誰も使ってな
> いだろう」と思って変えちゃったんですが、実際に困ったという話
> を聞いたことがありますので。
>
> たぶん、元のrb_cstr2inum()をラッパーとして残すのが良いのでは。
ということで、Integer()のほうのパッチです。Float()のほうは別に
します。
Index: bignum.c
===================================================================
RCS file: /cvs/ruby/src/ruby/bignum.c,v
retrieving revision 1.52
diff -u -2 -p -r1.52 bignum.c
--- bignum.c 2002/01/16 02:17:30 1.52
+++ bignum.c 2002/02/01 08:35:12
@@ -187,12 +187,12 @@ rb_int2inum(n)
VALUE
-rb_cstr2inum(str, base)
+rb_cstr_to_inum(str, base, badcheck)
const char *str;
int base;
+ int badcheck;
{
const char *s = str;
char *end;
- int badcheck = (base==0)?1:0;
- char sign = 1, c;
+ char sign = 1, c, nondigit = 0;
BDIGIT_DBL num;
long len, blen = 1;
@@ -201,5 +201,10 @@ rb_cstr2inum(str, base)
BDIGIT *zds;
- while (*str && ISSPACE(*str)) str++;
+ if (badcheck) {
+ while (ISSPACE(*str)) str++;
+ }
+ else {
+ while (ISSPACE(*str) || *str == '_') str++;
+ }
if (str[0] == '+') {
@@ -214,5 +219,5 @@ rb_cstr2inum(str, base)
return INT2FIX(0);
}
- if (base == 0) {
+ if (base <= 0) {
if (str[0] == '0') {
if (str[1] == 'x' || str[1] == 'X') {
@@ -226,4 +231,7 @@ rb_cstr2inum(str, base)
}
}
+ else if (base < -1) {
+ base = -base;
+ }
else {
base = 10;
@@ -291,16 +299,25 @@ rb_cstr2inum(str, base)
case '5': case '6': case '7':
c = c - '0';
+ nondigit = 0;
break;
case 'a': case 'b': case 'c':
case 'd': case 'e': case 'f':
- if (base != 16) c = base;
- else c = c - 'a' + 10;
- break;
+ c -= 'a' - 'A';
case 'A': case 'B': case 'C':
case 'D': case 'E': case 'F':
- if (base != 16) c = base;
- else c = c - 'A' + 10;
+ if (base != 16) {
+ nondigit = c;
+ c = base;
+ }
+ else {
+ c = c - 'A' + 10;
+ nondigit = 0;
+ }
break;
case '_':
+ if (badcheck) {
+ if (nondigit) goto bad;
+ nondigit = c;
+ }
continue;
default:
@@ -335,7 +352,8 @@ rb_cstr2inum(str, base)
VALUE
-rb_str2inum(str, base)
+rb_str_to_inum(str, base, badcheck)
VALUE str;
int base;
+ int badcheck;
{
char *s;
@@ -352,8 +370,24 @@ rb_str2inum(str, base)
s = p;
}
- if (base == 0 && len != strlen(s)) {
+ if (badcheck && len != strlen(s)) {
rb_raise(rb_eArgError, "string for Integer contains null byte");
}
- return rb_cstr2inum(s, base);
+ return rb_cstr_to_inum(s, base, badcheck);
+}
+
+VALUE
+rb_cstr2inum(str, base)
+ const char *str;
+ int base;
+{
+ return rb_cstr_to_inum(str, base, base==0);
+}
+
+VALUE
+rb_str2inum(str, base)
+ VALUE str;
+ int base;
+{
+ return rb_str_to_inum(str, base, base==0);
}
Index: intern.h
===================================================================
RCS file: /cvs/ruby/src/ruby/intern.h,v
retrieving revision 1.77
diff -u -2 -p -u -r1.77 intern.h
--- intern.h 2002/01/11 09:18:50 1.77
+++ intern.h 2002/02/01 05:36:44
@@ -62,4 +62,6 @@ VALUE rb_int2big _((long));
VALUE rb_uint2inum _((unsigned long));
VALUE rb_int2inum _((long));
+VALUE rb_cstr_to_inum _((const char*, int, int));
+VALUE rb_str_to_inum _((VALUE, int, int));
VALUE rb_cstr2inum _((const char*, int));
VALUE rb_str2inum _((VALUE, int));
Index: object.c
===================================================================
RCS file: /cvs/ruby/src/ruby/object.c,v
retrieving revision 1.71
diff -u -2 -p -u -r1.71 object.c
--- object.c 2002/02/01 06:02:59 1.71
+++ object.c 2002/02/01 08:01:58
@@ -946,5 +946,5 @@ rb_Integer(val)
case T_STRING:
- return rb_str2inum(val, 0);
+ return rb_str_to_inum(val, 0, Qtrue);
case T_FIXNUM:
Index: parse.y
===================================================================
RCS file: /cvs/ruby/src/ruby/parse.y,v
retrieving revision 1.146
diff -u -2 -p -u -r1.146 parse.y
--- parse.y 2002/01/28 09:33:56 1.146
+++ parse.y 2002/02/01 02:14:35
@@ -3346,5 +3346,5 @@ yylex()
}
else if (nondigit) goto trailing_uc;
- yylval.val = rb_cstr2inum(tok(), 16);
+ yylval.val = rb_cstr_to_inum(tok(), 16, Qfalse);
return tINTEGER;
}
@@ -3370,5 +3370,5 @@ yylex()
}
else if (nondigit) goto trailing_uc;
- yylval.val = rb_cstr2inum(tok(), 2);
+ yylval.val = rb_cstr_to_inum(tok(), 2, Qfalse);
return tINTEGER;
}
@@ -3389,5 +3389,5 @@ yylex()
tokfix();
if (nondigit) goto trailing_uc;
- yylval.val = rb_cstr2inum(tok(), 8);
+ yylval.val = rb_cstr_to_inum(tok(), 8, Qfalse);
return tINTEGER;
}
@@ -3483,5 +3483,5 @@ yylex()
return tFLOAT;
}
- yylval.val = rb_cstr2inum(tok(), 10);
+ yylval.val = rb_cstr_to_inum(tok(), 10, Qfalse);
return tINTEGER;
}
Index: sprintf.c
===================================================================
RCS file: /cvs/ruby/src/ruby/sprintf.c,v
retrieving revision 1.18
diff -u -2 -p -u -r1.18 sprintf.c
--- sprintf.c 2001/10/22 06:48:14 1.18
+++ sprintf.c 2002/02/01 02:14:22
@@ -398,5 +398,5 @@ rb_f_sprintf(argc, argv)
break;
case T_STRING:
- val = rb_str2inum(val, 0);
+ val = rb_str_to_inum(val, 0, Qtrue);
goto bin_retry;
case T_BIGNUM:
Index: string.c
===================================================================
RCS file: /cvs/ruby/src/ruby/string.c,v
retrieving revision 1.96
diff -u -2 -p -u -r1.96 string.c
--- string.c 2002/01/28 08:44:37 1.96
+++ string.c 2002/02/01 07:48:11
@@ -1767,5 +1767,5 @@ rb_str_to_i(argc, argv, str)
rb_raise(rb_eArgError, "illegal radix %d", base);
}
- return rb_str2inum(str, base);
+ return rb_str_to_inum(str, base, Qfalse);
}
@@ -2964,5 +2964,5 @@ rb_str_hex(str)
VALUE str;
{
- return rb_str2inum(str, 16);
+ return rb_str_to_inum(str, 16, Qfalse);
}
@@ -2971,19 +2971,5 @@ rb_str_oct(str)
VALUE str;
{
- int base = 8;
-
- if (RSTRING(str)->len > 2 && RSTRING(str)->ptr[0] == '0') {
- switch (RSTRING(str)->ptr[1]) {
- case 'x':
- case 'X':
- base = 16;
- break;
- case 'b':
- case 'B':
- base = 2;
- break;
- }
- }
- return rb_str2inum(str, base);
+ return rb_str_to_inum(str, -8, Qfalse);
}
Index: time.c
===================================================================
RCS file: /cvs/ruby/src/ruby/time.c,v
retrieving revision 1.52
diff -u -2 -p -u -r1.52 time.c
--- time.c 2001/12/22 16:58:16 1.52
+++ time.c 2002/02/01 02:12:16
@@ -219,5 +219,5 @@ obj2long(obj)
{
if (TYPE(obj) == T_STRING) {
- obj = rb_str2inum(obj, 10);
+ obj = rb_str_to_inum(obj, 10, Qfalse);
}
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦