From c31025779da3020b9d1e9ad4c920e76b6b97d5fd Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Tue, 1 Nov 1994 08:27:44 +0900 Subject: version 0.55 https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.55.tar.gz --- array.c | 2 +- bignum.c | 2 +- class.c | 2 +- defines.h | 2 +- dict.c | 2 +- dln.c | 3 ++ env.h | 4 +- error.c | 2 +- etc.c | 2 +- eval.c | 35 +++++++------ file.c | 157 +++++++++++++++++++++++++++++++++++++++-------------------- gc.c | 2 +- glob.c | 2 +- gnuglob.c | 2 +- inits.c | 2 +- io.c | 20 +++++--- math.c | 2 +- node.h | 2 +- numeric.c | 2 +- object.c | 2 +- parse.y | 2 +- process.c | 2 +- random.c | 2 +- re.c | 2 +- ruby.1 | 4 +- ruby.c | 2 +- sample/io.rb | 3 +- socket.c | 2 +- spec | 73 ++++++++++++++------------- string.c | 95 +++++++++++++++++++----------------- time.c | 2 +- variable.c | 2 +- version.h | 4 +- 33 files changed, 263 insertions(+), 181 deletions(-) diff --git a/array.c b/array.c index a68f97ad3c..1c5e3b5b27 100644 --- a/array.c +++ b/array.c @@ -3,7 +3,7 @@ array.c - $Author: matz $ - $Date: 1994/10/14 06:19:01 $ + $Date: 1994/11/01 08:27:44 $ created at: Fri Aug 6 09:46:12 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/bignum.c b/bignum.c index 1235e0343f..ce18befc92 100644 --- a/bignum.c +++ b/bignum.c @@ -3,7 +3,7 @@ bignum.c - $Author: matz $ - $Date: 1994/10/14 06:19:03 $ + $Date: 1994/11/01 08:27:46 $ created at: Fri Jun 10 00:48:55 JST 1994 ************************************************/ diff --git a/class.c b/class.c index 26af086f07..4a36f0e928 100644 --- a/class.c +++ b/class.c @@ -3,7 +3,7 @@ class.c - $Author: matz $ - $Date: 1994/10/14 06:19:04 $ + $Date: 1994/11/01 08:27:48 $ created at: Tue Aug 10 15:05:44 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/defines.h b/defines.h index ed098386b4..0d600066eb 100644 --- a/defines.h +++ b/defines.h @@ -19,7 +19,7 @@ /* define USE_DLN to load object file(.o). */ #ifdef HAVE_A_OUT_H -#undef USE_DLN +#define USE_DLN #ifdef USE_DLN #define LIBC_NAME "libc.a" #define DLN_DEFAULT_PATH "/lib:/usr/lib:." diff --git a/dict.c b/dict.c index e679c331a4..4dab1a8947 100644 --- a/dict.c +++ b/dict.c @@ -3,7 +3,7 @@ dict.c - $Author: matz $ - $Date: 1994/10/14 10:00:52 $ + $Date: 1994/11/01 08:27:49 $ created at: Mon Nov 22 18:51:18 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/dln.c b/dln.c index 0b4ea6b968..ccf74b5a63 100644 --- a/dln.c +++ b/dln.c @@ -172,6 +172,9 @@ dln_find_1(fname, path, exe_flag) #ifndef N_COMM # define N_COMM 0x12 #endif +#ifndef N_MAGIC +# define N_MAGIC(x) (x).a_magic +#endif #define INVALID_OBJECT(h) (N_MAGIC(h) != OMAGIC) diff --git a/env.h b/env.h index 34c411df49..ebf378073f 100644 --- a/env.h +++ b/env.h @@ -3,8 +3,8 @@ env.h - $Author: matz $ - $Revision: 1.4 $ - $Date: 1994/10/14 06:19:14 $ + $Revision: 1.5 $ + $Date: 1994/11/01 08:27:51 $ created at: Mon Jul 11 11:53:03 JST 1994 ************************************************/ diff --git a/error.c b/error.c index b67d79ab08..747fa68623 100644 --- a/error.c +++ b/error.c @@ -3,7 +3,7 @@ error.c - $Author: matz $ - $Date: 1994/10/14 06:19:16 $ + $Date: 1994/11/01 08:27:52 $ created at: Mon Aug 9 16:11:34 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/etc.c b/etc.c index 731ef9e6eb..7fd4dd39aa 100644 --- a/etc.c +++ b/etc.c @@ -3,7 +3,7 @@ etc.c - $Author: matz $ - $Date: 1994/10/14 06:19:17 $ + $Date: 1994/11/01 08:27:53 $ created at: Tue Mar 22 18:39:19 JST 1994 ************************************************/ diff --git a/eval.c b/eval.c index 88ceaead18..85bc3897f3 100644 --- a/eval.c +++ b/eval.c @@ -3,7 +3,7 @@ eval.c - $Author: matz $ - $Date: 1994/10/14 10:00:53 $ + $Date: 1994/11/01 08:27:55 $ created at: Thu Jun 10 14:22:17 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto @@ -1051,7 +1051,7 @@ rb_eval(node) VALUE str, str2; NODE *list = node->nd_next; - str = node->nd_lit; + str = str_new3(node->nd_lit); while (list) { if (list->nd_head->type == NODE_STR) { str2 = list->nd_head->nd_lit; @@ -1618,16 +1618,22 @@ rb_ensure(b_proc, data1, e_proc, data2) struct st_table *new_idhash(); static void -rb_undefined(obj, id) +rb_undefined(obj, id, noex) VALUE obj; ID id; + int noex; { VALUE desc = obj_as_string(obj); + char *format; if (RSTRING(desc)->len > 160) { desc = Fkrn_to_s(obj); } - Fail("undefined method `%s' for \"%s\"(%s)", + if (noex) + format = "method `%s' not available for \"%s\"(%s)"; + else + format = "undefined method `%s' for \"%s\"(%s)"; + Fail(format, rb_id2name(id), RSTRING(desc)->ptr, rb_class2name(CLASS_OF(obj))); @@ -1646,17 +1652,10 @@ rb_call(class, recv, mid, argc, argv, func) VALUE result; struct cache_entry *ent; - PUSH_ENV(); - Qself = recv; - the_env->last_func = mid; - the_env->argc = argc; - the_env->argv = argv; - iter_level--; - /* is it in the method cache? */ ent = cache + EXPR1(class, mid); if (ent->class == class && ent->mid == mid) { - if (ent->method == Qnil) rb_undefined(recv, mid); + if (ent->method == Qnil) rb_undefined(recv, mid, 0); class = ent->origin; mid = ent->mid; body = ent->method->nd_head; @@ -1666,12 +1665,20 @@ rb_call(class, recv, mid, argc, argv, func) ID id = mid; if ((body = rb_get_method_body(&class, &id, &noex)) == Qnil) { - rb_undefined(recv, mid); + rb_undefined(recv, mid, 0); } mid = id; } - if (!func && noex) rb_undefined(recv, mid); + if (!func && noex) rb_undefined(recv, mid, 1); + + PUSH_ENV(); + Qself = recv; + the_env->last_func = mid; + the_env->argc = argc; + the_env->argv = argv; + iter_level--; + the_env->last_class = class; if (body->type == NODE_CFUNC) { diff --git a/file.c b/file.c index 77245e045e..8d4a1e13bf 100644 --- a/file.c +++ b/file.c @@ -4,7 +4,7 @@ file.c - $Author: matz $ - $Date: 1994/10/14 06:19:20 $ + $Date: 1994/11/01 08:27:57 $ created at: Mon Nov 15 12:24:34 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto @@ -55,6 +55,51 @@ file_open(fname, mode) return port; } +static int +apply2files0(func, args, arg, gl) + void (*func)(); + struct RArray *args; + void *arg; + int gl; +{ + int i, n; + VALUE path; + + for (i=n=0; ilen; i++) { + path = args->ptr[i]; + if (TYPE(path) == T_STRING) { + if (gl) { + char *p; + p = RSTRING(path)->ptr; + while (*p) { + switch (*p++) { + case '*': case '?': + case '[': case ']': + case '{': case '}': + path = glob_new(path); + goto glob; + } + } + } + (*func)(path, arg); + n++; + } + else { + extern VALUE C_Glob; + + if (!obj_is_kind_of(path, C_Glob)) { + WrongType(path, T_STRING); + } + glob: + n += apply2files0(func, rb_to_a(path), arg, 0); + } + } + + return n; +} + +#define apply2files(func,args,arg) apply2files0(func,args,arg,1) + static VALUE Ffile_tell(obj) VALUE obj; @@ -772,27 +817,29 @@ Ffile_ctime2(obj) return time_new(st.st_ctime, 0); } +static void +chmod_internal(path, mode) + struct RString *path; + int mode; +{ + if (chmod(path->ptr, mode) == -1) + rb_sys_fail(RSTRING(path)->ptr); +} + static VALUE Ffile_chmod(obj, args) VALUE obj, args; { VALUE vmode; VALUE rest; - int mode, i, len; + int mode, n; VALUE path; rb_scan_args(args, "1*", &vmode, &rest); mode = NUM2INT(vmode); - len = RARRAY(rest)->len; - for (i=0; iptr[i]; - Check_Type(path, T_STRING); - if (chmod(RSTRING(path)->ptr, mode) == -1) - rb_sys_fail(RSTRING(path)->ptr); - } - - return INT2FIX(i); + n = apply2files(chmod_internal, rest, mode); + return INT2FIX(n); } static VALUE @@ -811,39 +858,43 @@ Ffile_chmod2(obj, vmode) return INT2FIX(0); } +struct chown_args { + int owner, group; +}; + +static void +chown_internal(path, args) + struct RString *path; + struct chown_args *args; +{ + if (chown(path->ptr, args->owner, args->group) < 0) + rb_sys_fail(path->ptr); +} + static VALUE Ffile_chown(obj, args) VALUE obj, args; { VALUE o, g, rest; - int owner, group; - int i, len; + struct chown_args arg; + int n; - len = rb_scan_args(args, "2*", &o, &g, &rest); + rb_scan_args(args, "2*", &o, &g, &rest); if (o == Qnil) { - owner = -1; + arg.owner = -1; } else { - owner = NUM2INT(o); + arg.owner = NUM2INT(o); } if (g == Qnil) { - group = -1; + arg.group = -1; } else { - group = NUM2INT(g); - } - - len -= 2; - for (i=0; iptr[i], T_STRING); - } - - for (i=0; iptr[i])->ptr, owner, group) < 0) - rb_sys_fail(RSTRING(RARRAY(rest)->ptr[i])->ptr); + arg.group = NUM2INT(g); } - return INT2FIX(i); + n = apply2files(chown_internal, rest, &arg); + return INT2FIX(n); } Ffile_chown2(obj, owner, group) @@ -861,30 +912,30 @@ Ffile_chown2(obj, owner, group) struct timeval *time_timeval(); +static void +utime_internal(path, tvp) + struct RString *path; + struct timeval tvp[]; +{ + if (utimes(path->ptr, tvp) < 0) + rb_sys_fail(path->ptr); +} + static VALUE Ffile_utime(obj, args) VALUE obj, args; { VALUE atime, mtime, rest; struct timeval tvp[2]; - int i, len; + int n; - len = rb_scan_args(args, "2*", &atime, &mtime, &rest); + rb_scan_args(args, "2*", &atime, &mtime, &rest); tvp[0] = *time_timeval(atime); tvp[1] = *time_timeval(mtime); - len -= 2; - for (i=0; iptr[i], T_STRING); - } - - for (i=0; iptr[i])->ptr, tvp) < 0) - rb_sys_fail(RSTRING(RARRAY(rest)->ptr[i])->ptr); - } - - return INT2FIX(i); + n = apply2files(utime_internal, rest, tvp); + return INT2FIX(n); } static VALUE @@ -928,23 +979,23 @@ Ffile_readlink(obj, path) return str_new(buf, cc); } +static void +unlink_internal(path) + struct RString *path; +{ + if (unlink(path->ptr) < 0) + rb_sys_fail(path->ptr); +} + static VALUE Ffile_unlink(obj, args) VALUE obj; struct RArray *args; { - int i, len; - - len = args->len; - for (i=0; iptr[i], T_STRING); - } - for (i=0; iptr[i])->ptr) < 0) - rb_sys_fail(RSTRING(args->ptr[i])->ptr); - } + int n; - return INT2FIX(i); + n = apply2files(unlink_internal, args, Qnil); + return INT2FIX(n); } static VALUE diff --git a/gc.c b/gc.c index 9961b44bd9..0dcaae74d6 100644 --- a/gc.c +++ b/gc.c @@ -3,7 +3,7 @@ gc.c - $Author: matz $ - $Date: 1994/10/14 06:19:22 $ + $Date: 1994/11/01 08:27:58 $ created at: Tue Oct 5 09:44:46 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/glob.c b/glob.c index 1c21d25f14..d74aa1ffce 100644 --- a/glob.c +++ b/glob.c @@ -111,7 +111,7 @@ glob_new0(class, str) VALUE glob_new(str) - char *str; + struct RString *str; { return glob_new0(C_Glob, str); } diff --git a/gnuglob.c b/gnuglob.c index da758bc170..32068e42d9 100644 --- a/gnuglob.c +++ b/gnuglob.c @@ -86,7 +86,7 @@ extern void bcopy (); # endif /* !RISC6000 */ #endif /* USG */ -#if defined(sparc) && !defined(__GNUC__) +#if defined(HAVE_ALLOCA_H) && !defined(__GNUC__) #include #else char *alloca (); diff --git a/inits.c b/inits.c index 609e1250e1..6b227fb498 100644 --- a/inits.c +++ b/inits.c @@ -3,7 +3,7 @@ inits.c - $Author: matz $ - $Date: 1994/10/14 06:19:24 $ + $Date: 1994/11/01 08:28:00 $ created at: Tue Dec 28 16:01:58 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/io.c b/io.c index dd013456d7..75bc3848e1 100644 --- a/io.c +++ b/io.c @@ -3,7 +3,7 @@ io.c - $Author: matz $ - $Date: 1994/10/14 10:00:55 $ + $Date: 1994/11/01 08:28:01 $ created at: Fri Oct 15 18:08:59 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto @@ -883,13 +883,21 @@ rb_xstring(str) struct timeval *time_timeval(); -#ifdef __linux__ -# define READ_PENDING(fp) ((fp)->_gptr < (fp)->_egptr > 0) -#else +#ifdef STDSTDIO +# define READ_PENDING(fp) ((fp)->_cnt != 0) +#else # ifdef __SLBF -# define READ_PENDING(fp) ((fp)->_r > 0) +# define READ_PENDING(fp) ((fp)->_r > 0) # else -# define READ_PENDING(fp) ((fp)->_cnt != 0) +# ifdef __linux__ +# ifdef _other_gbase +# define READ_PENDING(fp) ((fp)->_IO_read_ptr < (fp)->_IO_read_end) +# else +# define READ_PENDING(fp) ((fp)->_gptr < (fp)->_egptr) +# endif +# else +--------------> You Lose <-------------- +# endif # endif #endif diff --git a/math.c b/math.c index 09c9c8cf10..6a6c720c1e 100644 --- a/math.c +++ b/math.c @@ -3,7 +3,7 @@ math.c - $Author: matz $ - $Date: 1994/10/14 06:19:27 $ + $Date: 1994/11/01 08:28:03 $ created at: Tue Jan 25 14:12:56 JST 1994 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/node.h b/node.h index 59aa24095b..608c78c28d 100644 --- a/node.h +++ b/node.h @@ -3,7 +3,7 @@ node.h - $Author: matz $ - $Date: 1994/10/14 06:19:30 $ + $Date: 1994/11/01 08:28:04 $ created at: Fri May 28 15:14:02 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/numeric.c b/numeric.c index 4310902c2f..2c9ed8bc59 100644 --- a/numeric.c +++ b/numeric.c @@ -3,7 +3,7 @@ numeric.c - $Author: matz $ - $Date: 1994/10/14 06:19:31 $ + $Date: 1994/11/01 08:28:06 $ created at: Fri Aug 13 18:33:09 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/object.c b/object.c index 5a60b791e6..19eab4a1bd 100644 --- a/object.c +++ b/object.c @@ -3,7 +3,7 @@ object.c - $Author: matz $ - $Date: 1994/10/14 10:00:56 $ + $Date: 1994/11/01 08:28:07 $ created at: Thu Jul 15 12:01:24 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/parse.y b/parse.y index a4122de4b9..10002fca92 100644 --- a/parse.y +++ b/parse.y @@ -3,7 +3,7 @@ parse.y - $Author: matz $ - $Date: 1994/10/14 06:19:35 $ + $Date: 1994/11/01 08:28:09 $ created at: Fri May 28 18:02:42 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/process.c b/process.c index 0f36bf7c39..32ef856e97 100644 --- a/process.c +++ b/process.c @@ -3,7 +3,7 @@ process.c - $Author: matz $ - $Date: 1994/10/14 10:00:58 $ + $Date: 1994/11/01 08:28:14 $ created at: Tue Aug 10 14:30:50 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/random.c b/random.c index a8344fa570..8a2f18c947 100644 --- a/random.c +++ b/random.c @@ -3,7 +3,7 @@ random.c - $Author: matz $ - $Date: 1994/10/14 10:00:59 $ + $Date: 1994/11/01 08:28:18 $ created at: Fri Dec 24 16:39:21 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/re.c b/re.c index 5523df600c..164f24b242 100644 --- a/re.c +++ b/re.c @@ -3,7 +3,7 @@ re.c - $Author: matz $ - $Date: 1994/10/14 06:19:40 $ + $Date: 1994/11/01 08:28:21 $ created at: Mon Aug 9 18:24:49 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/ruby.1 b/ruby.1 index ad082319b2..d0d8671ef1 100644 --- a/ruby.1 +++ b/ruby.1 @@ -97,7 +97,7 @@ ruby \- % echo matz > /tmp/junk % cat /tmp/junk matz - % ruby -p -i.bak -e '$_.toupper' /tmp/junk + % ruby -p -i.bak -e '$_.upcase' /tmp/junk % cat /tmp/junk MATZ % cat /tmp/junk.bak @@ -158,7 +158,7 @@ ruby \- #! /usr/local/bin/ruby \-s # \-xyzオプションが与えられると"true"を表示する. - if $xyz then print("true\\n") end + print "true\n" if $xyz .fi .TP 5 diff --git a/ruby.c b/ruby.c index 88e76b946b..0d53a7b1a9 100644 --- a/ruby.c +++ b/ruby.c @@ -3,7 +3,7 @@ ruby.c - $Author: matz $ - $Date: 1994/10/14 06:19:43 $ + $Date: 1994/11/01 08:28:24 $ created at: Tue Aug 10 12:47:31 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/sample/io.rb b/sample/io.rb index b5591af7e4..0b8a537ef4 100644 --- a/sample/io.rb +++ b/sample/io.rb @@ -1,5 +1,6 @@ home = getenv("HOME") -print(home.sub("m", "&&"), home, "\n") +home.sub("m", "&&") +print(home, "\n") print(home.reverse, "\n") if File.s("io.rb") diff --git a/socket.c b/socket.c index 57be0734ff..b65c6b7e6f 100644 --- a/socket.c +++ b/socket.c @@ -3,7 +3,7 @@ socket.c - $Author: matz $ - $Date: 1994/10/14 06:19:46 $ + $Date: 1994/11/01 08:28:26 $ created at: Thu Mar 31 12:21:29 JST 1994 ************************************************/ diff --git a/spec b/spec index 4e8beccac3..ba592a06fe 100644 --- a/spec +++ b/spec @@ -915,7 +915,8 @@ Ruby システム変数`$_'の指す文字列に対して置換を行なう. 文字列内で patternにマッチする部分を全てreplaceに置き換える. Stringクラス - のgsubメソッドの解説を参照のこと. + のgsubメソッドの解説を参照のこと. gsubメソッドは`$_'の値を更新 + する. iterator_p() @@ -1035,8 +1036,9 @@ Ruby sub(pattern, replace) システム変数`$_'の指す文字列に対して置換を行なう. 文字列内で最 - 初にpatternにマッチする部分をreplaceに置き換える. Stringクラス - のsubメソッドの解説を参照のこと. + 初にpatternにマッチする部分をreplaceに置き換える. subメソッド + は`$_'の値を更新する. その他の詳細に関してはStringクラスのsub + メソッドの解説を参照のこと. syscall(num, arg...) @@ -1906,13 +1908,14 @@ Single Methods: chmod(mode, path, file...) ファイルのパーミッションを変更する(cf chmod(2)). 変更したファ - イル数を返す. + イル数を返す. fileにはワイルドカードも許す. chown(owner, group, file...) ファイルの所有者とグループを変更する(cf chown(2)). nilか-1を指 定することによって所有者やグループを現在のまま変えないでおくこ - とができる. 変更したファイル数を返す. + とができる. 変更したファイル数を返す. fileにはワイルドカードも + 許す. link(old, new) @@ -1952,12 +1955,14 @@ Single Methods: unlink(file...) ファイルを削除する. ディレクトリの削除にはDir.rmdirを使うこと. + fileにはワイルドカードも許す. utime(atime, mtime, file...) ファイルのアクセス時刻をatimeに, 修正時刻をmtimeに設定する. atime, mtimeは数またはTimeクラスのインスタンスでなければならな - い. + い. fileにはワイルドカードも許す. + これ以外にFileTestモジュールのメソッドも特異メソッドとして持つ. @@ -2926,9 +2931,15 @@ Methods: イト目からlenバイト分の部分文字列をvalとして与えられた文字列で 置き換える. + capitalize + + 文字列中の最初の文字を(それがアルファベットであれば), 大文字に + 変換し, 残る文字列中のアルファベットを小文字に置き換える. + chop - 文字列の最後のバイトを切り落とす. + 文字列の最後のバイトを切り落とす. 元の文字列を変更することに注 + 意すること. crypt(salt) @@ -2939,7 +2950,12 @@ Methods: 文字列のうち, strに含まれる文字を削除する. 文字列の指定はtrと 同様であり, a-bでaからbまでの範囲を, 先頭の^で文字列の否定(含 - まれてないものを指定)を意味する. + まれてないものを指定)を意味する. 元の文字列を変更することに注 + 意すること. + + downcase + + 文字列中のアルファベットを全て小文字に置き換えた文字列を返す. each @@ -2951,9 +2967,9 @@ Methods: gsub(pattern, replace) - 文字列中でpatternにマッチする部分を全てreplaceに置き換える. 置 - 換文字列replace中の&と\0はマッチした文字列に, \1..\9はn番目の - 括弧の内容に置き換えられる. + 文字列中でpatternにマッチする部分を全てreplaceに置き換える. + 置換文字列replace中の&と\0はマッチした文字列に, \1..\9はn番目 + の括弧の内容に置き換えられる. hex @@ -2969,11 +2985,6 @@ Methods: 文字列に一意に対応する整数を返す. 文字列はナル文字を含んではな らない. - lcfirst - - 文字列中の最初の文字を(それがアルファベットであれば), 小文字に - 変換する. - length size @@ -3037,7 +3048,8 @@ Methods: 文字列のうち, strに含まれる文字が連続していた場合, 一文字に圧 縮する. strが省略された場合, すべての文字を対象とする. 文字列 の指定はtrと同様であり, `a-b'でaからbまでの範囲を, 先頭の`^'で - 文字列の否定(含まれてないものを指定)を意味する. + 文字列の否定(含まれてないものを指定)を意味する. 元の文字列を変 + 更することに注意すること. strip @@ -3046,7 +3058,7 @@ Methods: sub(pattern, replace) 文字列中でpatternにマッチする部分をreplaceに置き換える. 置換文 - 字列replace中の&と\0はマッチした文字列に, \1..\9はn番目の括弧 + 字列replace中の&と\0はマッチした文字列に, \1..\9は n番目の括弧 の内容に置き換えられる. sub()はgsub()と異なり, 最初のマッチだ けを置換する. @@ -3063,8 +3075,7 @@ Methods: swapcase 文字列中のアルファベットのうち大文字を小文字に, 小文字を大文字 - にに置き換える. 元の文字列が更新されることに注意. 動作としては - tr("a-zA-Z", "A-Za-z")より少し速い. + に置き換える. to_f @@ -3075,18 +3086,14 @@ Methods: 文字列を10進数を表す文字列と解釈して, 整数に変換する. toupper - uc - upcase - 文字列中のアルファベットを全て大文字に置き換える. 元の文字列が - 更新されることに注意. tr("a-z", "A-Z")より少し速い. + 文字列中のアルファベットを全て大文字に置き換えた文字列を返す. + tr("a-z", "A-Z")より少し速い. tolower - lc - downcase - 文字列中のアルファベットを全て小文字に置き換える. 元の文字列が - 更新されることに注意. tr("A-Z", "a-z")より少し速い. + 文字列中のアルファベットを全て小文字に置き換えた文字列を返す. + tr("A-Z", "a-z")より少し速い. tr(search, replace) @@ -3109,11 +3116,6 @@ Methods: 簡便のため, str.tr(src,repl).squeeze(repl)に相当するメソッド tr_s(src,repl) が提供されている. - ucfirst - - 文字列中の最初の文字を(それがアルファベットであれば), 大文字に - 変換する. - unpack(template) 文字列をtemplate文字列にしたがってアンパックし, それらの要素を @@ -3145,6 +3147,11 @@ Methods: rubyのunpackはperlと違ってチェックサムの計算機能がないことに注 意すること. + + upcase + + 文字列中のアルファベットを全て大文字に置き換えた文字列を返す. + upto(end) selfから始まって, endまで「次の」文字列を順に与えるイテレータ. diff --git a/string.c b/string.c index 34ca5f1b0b..98f1d8efb4 100644 --- a/string.c +++ b/string.c @@ -3,7 +3,7 @@ string.c - $Author: matz $ - $Date: 1994/10/14 10:01:01 $ + $Date: 1994/11/01 08:28:38 $ created at: Mon Aug 9 17:12:58 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto @@ -29,12 +29,12 @@ str_new(ptr, len) OBJSETUP(str, C_String, T_STRING); str->len = len; + str->orig = Qnil; str->ptr = ALLOC_N(char,len+1); if (ptr) { memcpy(str->ptr, ptr, len); } str->ptr[len] = '\0'; - str->orig = Qnil; return (VALUE)str; } @@ -691,7 +691,7 @@ str_sub(str, pat, val, once) if (once) break; } if (n == 0) return Qnil; - return INT2FIX(n); + return (VALUE)str; } static VALUE @@ -785,8 +785,6 @@ Fstr_sub_internal(str, pat, val, once) VALUE str, pat, val; int once; { - VALUE reg, result; - Check_Type(val, T_STRING); str_modify(str); @@ -795,9 +793,7 @@ Fstr_sub_internal(str, pat, val, once) return str_sub(str, pat, val, once); case T_STRING: - reg = re_regcomp(pat); - result = str_sub(str, reg, val, once); - return result; + return str_sub(str, re_regcomp(pat), val, once); default: /* type failed */ @@ -959,15 +955,14 @@ Fstr_inspect(str) } static VALUE -Fstr_toupper(str) +Fstr_upcase(str) struct RString *str; { - char *s; - int i; + char *s, *send; str_modify(str); - s = str->ptr; - for (i=0; i < str->len; i++) { + s = str->ptr; send = s + str->len; + while (s < send) { if (islower(*s)) { *s = toupper(*s); } @@ -978,15 +973,14 @@ Fstr_toupper(str) } static VALUE -Fstr_tolower(str) +Fstr_downcase(str) struct RString *str; { - char *s; - int i; + char *s, *send; str_modify(str); - s = str->ptr; - for (i=0; i < str->len; i++) { + s = str->ptr; send = s + str->len; + while (s < send) { if (isupper(*s)) { *s = tolower(*s); } @@ -997,43 +991,32 @@ Fstr_tolower(str) } static VALUE -Fstr_ucfirst(str) +Fstr_capitalize(str) struct RString *str; { char *s, *send; - int i; str_modify(str); s = str->ptr; send = s + str->len; if (islower(*s)) *s = toupper(*s); + while (++s < send) { + if (isupper(*s)) { + *s = tolower(*s); + } + } return (VALUE)str; } static VALUE -Fstr_lcfirst(str) +Fstr_swapcase(str) struct RString *str; { char *s, *send; - int i; str_modify(str); s = str->ptr; send = s + str->len; - if (isupper(*s)) - *s = tolower(*s); - return (VALUE)str; -} - -static VALUE -Fstr_swapcase(str) - struct RString *str; -{ - char *s; - int i; - - str_modify(str); - s = str->ptr; - for (i=0; i < str->len; i++) { + while (s < send) { if (isupper(*s)) { *s = tolower(*s); } @@ -1046,6 +1029,20 @@ Fstr_swapcase(str) return (VALUE)str; } +static VALUE +Fstr_toupper(str) + struct RString *str; +{ + return Fstr_upcase(str_new(str_new(str->ptr, str->len))); +} + +static VALUE +Fstr_tolower(str) + struct RString *str; +{ + return Fstr_downcase(str_new(str_new(str->ptr, str->len))); +} + struct tr { int last, max; char *p, *pend; @@ -1474,8 +1471,18 @@ Fstr_strip(str) t++; if (s > str->ptr || t < e) { - str_modify(str); - return str_new(s, t-s); + char *p = str->ptr; + int len = t-s; + + str->ptr = ALLOC_N(char, len+1); + memcpy(str->ptr, p, len); + str->ptr[len] = '\0'; + if (str->orig) { + str->orig = Qnil; + } + else { + free(p); + } } return (VALUE)str; } @@ -1649,13 +1656,11 @@ Init_String() rb_define_method(C_String, "_inspect", Fstr_inspect, 0); rb_define_method(C_String, "toupper", Fstr_toupper, 0); - rb_define_alias(C_String, "upcase", "toupper"); - rb_define_alias(C_String, "uc", "toupper"); rb_define_method(C_String, "tolower", Fstr_tolower, 0); - rb_define_alias(C_String, "downcase", "tolower"); - rb_define_alias(C_String, "lc", "tolower"); - rb_define_method(C_String, "ucfirst", Fstr_ucfirst, 0); - rb_define_method(C_String, "lcfirst", Fstr_lcfirst, 0); + + rb_define_method(C_String, "upcase", Fstr_upcase, 0); + rb_define_method(C_String, "downcase", Fstr_downcase, 0); + rb_define_method(C_String, "capitalize", Fstr_capitalize, 0); rb_define_method(C_String, "swapcase", Fstr_swapcase, 0); rb_define_method(C_String, "hex", Fstr_hex, 0); diff --git a/time.c b/time.c index eea9783a30..b54cfcaddf 100644 --- a/time.c +++ b/time.c @@ -3,7 +3,7 @@ time.c - $Author: matz $ - $Date: 1994/08/12 11:06:46 $ + $Date: 1994/11/01 08:28:40 $ created at: Tue Dec 28 14:31:59 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto diff --git a/variable.c b/variable.c index 1a06defe5e..ae3163de19 100644 --- a/variable.c +++ b/variable.c @@ -3,7 +3,7 @@ variable.c - $Author: matz $ - $Date: 1994/08/19 09:32:10 $ + $Date: 1994/11/01 08:28:42 $ created at: Tue Apr 19 23:55:15 JST 1994 ************************************************/ diff --git a/version.h b/version.h index d2d5a5a450..8ff9d4fc2b 100644 --- a/version.h +++ b/version.h @@ -1,2 +1,2 @@ -#define RUBY_VERSION "0.54" -#define VERSION_DATE "94/10/26" +#define RUBY_VERSION "0.55" +#define VERSION_DATE "94/11/18" -- cgit v1.2.3