summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYukihiro Matsumoto <matz@ruby-lang.org>1994-10-31 23:27:44 (GMT)
committerTakashi Kokubun <takashikkbn@gmail.com>2019-08-17 13:09:30 (GMT)
commitc31025779da3020b9d1e9ad4c920e76b6b97d5fd (patch)
tree0823b3c8ef654b96e495d87933f356192de7d773
parent29f237a8b1df650089b54447f070726c75706b6f (diff)
version 0.55v0_55
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.55.tar.gz
-rw-r--r--array.c2
-rw-r--r--bignum.c2
-rw-r--r--class.c2
-rw-r--r--defines.h2
-rw-r--r--dict.c2
-rw-r--r--dln.c3
-rw-r--r--env.h4
-rw-r--r--error.c2
-rw-r--r--etc.c2
-rw-r--r--eval.c35
-rw-r--r--file.c157
-rw-r--r--gc.c2
-rw-r--r--glob.c2
-rw-r--r--gnuglob.c2
-rw-r--r--inits.c2
-rw-r--r--io.c20
-rw-r--r--math.c2
-rw-r--r--node.h2
-rw-r--r--numeric.c2
-rw-r--r--object.c2
-rw-r--r--parse.y2
-rw-r--r--process.c2
-rw-r--r--random.c2
-rw-r--r--re.c2
-rw-r--r--ruby.14
-rw-r--r--ruby.c2
-rw-r--r--sample/io.rb3
-rw-r--r--socket.c2
-rw-r--r--spec73
-rw-r--r--string.c95
-rw-r--r--time.c2
-rw-r--r--variable.c2
-rw-r--r--version.h4
33 files changed, 263 insertions, 181 deletions
diff --git a/array.c b/array.c
index a68f97a..1c5e3b5 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 1235e03..ce18bef 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 26af086..4a36f0e 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 ed09838..0d60006 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 e679c33..4dab1a8 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 0b4ea6b..ccf74b5 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 34c411d..ebf3780 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 b67d79a..747fa68 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 731ef9e..7fd4dd3 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 88ceaea..85bc389 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 77245e0..8d4a1e1 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; i<args->len; 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; i<len; i++) {
- path = RARRAY(rest)->ptr[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; i<len; i++) {
- Check_Type(RARRAY(rest)->ptr[i], T_STRING);
- }
-
- for (i=0; i<len; i++) {
- if (chown(RSTRING(RARRAY(rest)->ptr[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; i<len; i++) {
- Check_Type(RARRAY(rest)->ptr[i], T_STRING);
- }
-
- for (i=0; i<len; i++) {
- if (utimes(RSTRING(RARRAY(rest)->ptr[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; i<len; i++) {
- Check_Type(args->ptr[i], T_STRING);
- }
- for (i=0; i<len; i++) {
- if (unlink(RSTRING(args->ptr[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 9961b44..0dcaae7 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 1c21d25..d74aa1f 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 da758bc..32068e4 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 <alloca.h>
#else
char *alloca ();
diff --git a/inits.c b/inits.c
index 609e125..6b227fb 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 dd01345..75bc384 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 09c9c8c..6a6c720 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 59aa240..608c78c 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 4310902..2c9ed8b 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 5a60b79..19eab4a 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 a4122de..10002fc 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 0f36bf7..32ef856 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 a8344fa..8a2f18c 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 5523df6..164f24b 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 ad08231..d0d8671 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 88e76b9..0d53a7b 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 b5591af..0b8a537 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 57be073..b65c6b7 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 4e8becc..ba592a0 100644
--- a/spec
+++ b/spec
@@ -915,7 +915,8 @@ Rubyには厳密な意味では関数はないがKernelクラスの関数メソッドは(全ての
システム変数`$_'の指す文字列に対して置換を行なう. 文字列内で
patternにマッチする部分を全てreplaceに置き換える. Stringクラス
- のgsubメソッドの解説を参照のこと.
+ のgsubメソッドの解説を参照のこと. gsubメソッドは`$_'の値を更新
+ する.
iterator_p()
@@ -1035,8 +1036,9 @@ Rubyには厳密な意味では関数はないがKernelクラスの関数メソッドは(全ての
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 34ca5f1..98f1d8e 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 eea9783..b54cfca 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 1a06def..ae3163d 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 d2d5a5a..8ff9d4f 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"