1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* string.c (rb_str_ljust): now takes optional argument to specify

pad string. [ruby-talk:70482]

* string.c (rb_str_rjust): ditto.

* string.c (rb_str_center): ditto.

* string.c (rb_str_justify): utility function.

* eval.c (rb_add_method): call singleton_method_added or
  method_added for every method definition (after ruby_running).
  [ruby-talk:70471]

* array.c (rb_ary_reverse_bang): Array#reverse! should not return
  nil even for arrays sized less than 2.

* io.c (argf_eof): should not block after reading all argument
  files. (ruby-bugs-ja PR#449)


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3742 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2003-05-02 06:41:33 +00:00
parent f701792f6f
commit 776e2693e7
8 changed files with 134 additions and 100 deletions

View file

@ -1,3 +1,28 @@
Fri May 2 09:38:06 2003 Warren Brown <wkb@airmail.net>
* string.c (rb_str_ljust): now takes optional argument to specify
pad string. [ruby-talk:70482]
* string.c (rb_str_rjust): ditto.
* string.c (rb_str_center): ditto.
* string.c (rb_str_justify): utility function.
Fri May 2 04:10:59 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval.c (rb_add_method): call singleton_method_added or
method_added for every method definition (after ruby_running).
[ruby-talk:70471]
* array.c (rb_ary_reverse_bang): Array#reverse! should not return
nil even for arrays sized less than 2.
Thu May 1 23:18:01 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* io.c (argf_eof): should not block after reading all argument
files. (ruby-bugs-ja PR#449)
Fri May 2 15:10:41 2003 Minero Aoki <aamine@loveruby.net> Fri May 2 15:10:41 2003 Minero Aoki <aamine@loveruby.net>
* lib/fileutils.rb: use hashes to pass options. * lib/fileutils.rb: use hashes to pass options.

13
array.c
View file

@ -344,9 +344,6 @@ rb_ary_push_m(argc, argv, ary)
VALUE *argv; VALUE *argv;
VALUE ary; VALUE ary;
{ {
if (argc <= 0) {
rb_raise(rb_eArgError, "wrong number arguments (at least 1)");
}
while (argc--) { while (argc--) {
rb_ary_push(ary, *argv++); rb_ary_push(ary, *argv++);
} }
@ -431,10 +428,6 @@ rb_ary_unshift_m(argc, argv, ary)
{ {
long len = RARRAY(ary)->len; long len = RARRAY(ary)->len;
if (argc <= 0) {
rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
}
/* make rooms by setting the last item */ /* make rooms by setting the last item */
rb_ary_store(ary, len + argc - 1, Qnil); rb_ary_store(ary, len + argc - 1, Qnil);
@ -759,8 +752,8 @@ rb_ary_insert(argc, argv, ary)
{ {
long pos; long pos;
if (argc < 2) { if (argc < 1) {
rb_raise(rb_eArgError, "wrong number of arguments (at least 2)"); rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
} }
pos = NUM2LONG(argv[0]); pos = NUM2LONG(argv[0]);
if (pos == -1) { if (pos == -1) {
@ -770,6 +763,7 @@ rb_ary_insert(argc, argv, ary)
pos++; pos++;
} }
if (argc == 1) return ary;
rb_ary_update(ary, pos, 0, rb_ary_new4(argc - 1, argv + 1)); rb_ary_update(ary, pos, 0, rb_ary_new4(argc - 1, argv + 1));
return ary; return ary;
} }
@ -1057,7 +1051,6 @@ static VALUE
rb_ary_reverse_bang(ary) rb_ary_reverse_bang(ary)
VALUE ary; VALUE ary;
{ {
if (RARRAY(ary)->len <= 1) return Qnil;
return rb_ary_reverse(ary); return rb_ary_reverse(ary);
} }

28
eval.c
View file

@ -279,6 +279,14 @@ rb_add_method(klass, mid, node, noex)
rb_clear_cache_by_id(mid); rb_clear_cache_by_id(mid);
body = NEW_METHOD(node, noex); body = NEW_METHOD(node, noex);
st_insert(RCLASS(klass)->m_tbl, mid, (st_data_t)body); st_insert(RCLASS(klass)->m_tbl, mid, (st_data_t)body);
if (node && mid != ID_ALLOCATOR && ruby_running) {
if (FL_TEST(klass, FL_SINGLETON)) {
rb_funcall(rb_iv_get(klass, "__attached__"), singleton_added, 1, ID2SYM(mid));
}
else {
rb_funcall(klass, added, 1, ID2SYM(mid));
}
}
} }
void void
@ -3353,14 +3361,6 @@ rb_eval(self, n)
if (scope_vmode == SCOPE_MODFUNC) { if (scope_vmode == SCOPE_MODFUNC) {
rb_add_method(rb_singleton_class(ruby_class), rb_add_method(rb_singleton_class(ruby_class),
node->nd_mid, defn, NOEX_PUBLIC); node->nd_mid, defn, NOEX_PUBLIC);
rb_funcall(ruby_class, singleton_added, 1, ID2SYM(node->nd_mid));
}
if (FL_TEST(ruby_class, FL_SINGLETON)) {
rb_funcall(rb_iv_get(ruby_class, "__attached__"),
singleton_added, 1, ID2SYM(node->nd_mid));
}
else {
rb_funcall(ruby_class, added, 1, ID2SYM(node->nd_mid));
} }
result = Qnil; result = Qnil;
} }
@ -3396,7 +3396,6 @@ rb_eval(self, n)
defn->nd_rval = (VALUE)ruby_cref; defn->nd_rval = (VALUE)ruby_cref;
rb_add_method(klass, node->nd_mid, defn, rb_add_method(klass, node->nd_mid, defn,
NOEX_PUBLIC|(body?body->nd_noex&NOEX_UNDEF:0)); NOEX_PUBLIC|(body?body->nd_noex&NOEX_UNDEF:0));
rb_funcall(recv, singleton_added, 1, ID2SYM(node->nd_mid));
result = Qnil; result = Qnil;
} }
break; break;
@ -6033,7 +6032,6 @@ rb_mod_modfunc(argc, argv, module)
m = RCLASS(m)->super; m = RCLASS(m)->super;
} }
rb_add_method(rb_singleton_class(module), id, body->nd_body, NOEX_PUBLIC); rb_add_method(rb_singleton_class(module), id, body->nd_body, NOEX_PUBLIC);
rb_funcall(module, singleton_added, 1, ID2SYM(id));
} }
return module; return module;
} }
@ -7418,16 +7416,6 @@ rb_mod_define_method(argc, argv, mod)
noex = NOEX_PUBLIC; noex = NOEX_PUBLIC;
} }
rb_add_method(mod, id, node, noex); rb_add_method(mod, id, node, noex);
if (scope_vmode == SCOPE_MODFUNC) {
rb_add_method(rb_singleton_class(mod), id, node, NOEX_PUBLIC);
rb_funcall(mod, singleton_added, 1, ID2SYM(id));
}
if (FL_TEST(mod, FL_SINGLETON)) {
rb_funcall(rb_iv_get(mod, "__attached__"), singleton_added, 1, ID2SYM(id));
}
else {
rb_funcall(mod, added, 1, ID2SYM(id));
}
return body; return body;
} }

14
io.c
View file

@ -3756,13 +3756,12 @@ argf_readchar()
static VALUE static VALUE
argf_eof() argf_eof()
{ {
if (!next_argv()) return Qtrue; if (current_file) {
if (next_p == 1) { if (init_p == 0) return Qtrue;
return Qtrue; if (rb_io_eof(current_file)) {
} next_p = 1;
if (rb_io_eof(current_file)) { return Qtrue;
next_p = 1; }
return Qtrue;
} }
return Qfalse; return Qfalse;
} }
@ -4052,7 +4051,6 @@ Init_IO()
rb_define_singleton_method(argf, "lineno", argf_lineno, 0); rb_define_singleton_method(argf, "lineno", argf_lineno, 0);
rb_define_singleton_method(argf, "lineno=", argf_set_lineno, 1); rb_define_singleton_method(argf, "lineno=", argf_set_lineno, 1);
current_file = rb_stdin;
rb_global_variable(&current_file); rb_global_variable(&current_file);
filename = rb_str_new2("-"); filename = rb_str_new2("-");
rb_define_readonly_variable("$FILENAME", &filename); rb_define_readonly_variable("$FILENAME", &filename);

View file

@ -10,8 +10,8 @@
# #
# #
require "rational.rb"
require "complex.rb" require "complex.rb"
require "rational.rb"
require "matrix.rb" require "matrix.rb"
class Integer class Integer

View file

@ -329,7 +329,7 @@ class Integer
end end
class Fixnum class Fixnum
if not defined? Complex unless defined? Complex
alias power! **; alias power! **;
end end
@ -347,13 +347,13 @@ class Fixnum
end end
end end
if not defined? Complex unless defined? Complex
alias ** rpower alias ** rpower
end end
end end
class Bignum class Bignum
if not defined? power! unless defined? Complex
alias power! ** alias power! **
end end
@ -371,7 +371,7 @@ class Bignum
end end
end end
if not defined? Complex unless defined? Complex
alias ** rpower alias ** rpower
end end
end end

View file

@ -1398,9 +1398,9 @@ Init_Object()
rb_define_method(rb_mKernel, "kind_of?", rb_obj_is_kind_of, 1); rb_define_method(rb_mKernel, "kind_of?", rb_obj_is_kind_of, 1);
rb_define_method(rb_mKernel, "is_a?", rb_obj_is_kind_of, 1); rb_define_method(rb_mKernel, "is_a?", rb_obj_is_kind_of, 1);
rb_define_global_function("singleton_method_added", rb_obj_dummy, 1); rb_define_private_method(rb_mKernel, "singleton_method_added", rb_obj_dummy, 1);
rb_define_global_function("singleton_method_removed", rb_obj_dummy, 1); rb_define_private_method(rb_mKernel, "singleton_method_removed", rb_obj_dummy, 1);
rb_define_global_function("singleton_method_undefined", rb_obj_dummy, 1); rb_define_private_method(rb_mKernel, "singleton_method_undefined", rb_obj_dummy, 1);
rb_define_global_function("sprintf", rb_f_sprintf, -1); rb_define_global_function("sprintf", rb_f_sprintf, -1);
rb_define_global_function("format", rb_f_sprintf, -1); rb_define_global_function("format", rb_f_sprintf, -1);

138
string.c
View file

@ -3121,71 +3121,101 @@ rb_str_sum(argc, argv, str)
} }
static VALUE static VALUE
rb_str_ljust(str, w) rb_str_justify(argc, argv, str, jflag)
int argc;
VALUE *argv;
VALUE str; VALUE str;
VALUE w; char jflag;
{ {
long width = NUM2LONG(w);
VALUE res;
char *p, *pend;
if (width < 0 || RSTRING(str)->len >= width) return rb_str_dup(str);
res = rb_str_new5(str, 0, width);
memcpy(RSTRING(res)->ptr, RSTRING(str)->ptr, RSTRING(str)->len);
p = RSTRING(res)->ptr + RSTRING(str)->len; pend = RSTRING(res)->ptr + width;
while (p < pend) {
*p++ = ' ';
}
OBJ_INFECT(res, str);
return res;
}
static VALUE
rb_str_rjust(str, w)
VALUE str;
VALUE w; VALUE w;
{ long width, flen = 0;
long width = NUM2LONG(w);
VALUE res; VALUE res;
char *p, *pend; char *p, *pend, *f = " ";
if (width < 0 || RSTRING(str)->len >= width) return rb_str_dup(str);
res = rb_str_new5(str, 0, width);
p = RSTRING(res)->ptr; pend = p + width - RSTRING(str)->len;
while (p < pend) {
*p++ = ' ';
}
memcpy(pend, RSTRING(str)->ptr, RSTRING(str)->len);
OBJ_INFECT(res, str);
return res;
}
static VALUE
rb_str_center(str, w)
VALUE str;
VALUE w;
{
long width = NUM2LONG(w);
VALUE res;
char *p, *pend;
long n; long n;
VALUE pad;
if (rb_scan_args(argc, argv, "11", &w, &pad) == 2) {
if (!NIL_P(pad)) {
StringValue(pad);
if (RSTRING(pad)->len > 0) {
f = RSTRING(pad)->ptr;
flen = RSTRING(pad)->len;
}
}
}
width = NUM2LONG(w);
if (width < 0 || RSTRING(str)->len >= width) return rb_str_dup(str); if (width < 0 || RSTRING(str)->len >= width) return rb_str_dup(str);
res = rb_str_new5(str, 0, width); res = rb_str_new5(str, 0, width);
n = (width - RSTRING(str)->len)/2; p = RSTRING(res)->ptr;
p = RSTRING(res)->ptr; pend = p + n; if (jflag != 'l') {
while (p < pend) { n = width - RSTRING(str)->len;
*p++ = ' '; pend = p + ((jflag == 'r') ? n : n/2);
if (flen <= 1) {
while (p < pend) {
*p++ = *f;
}
}
else {
char *q = f;
while (p + flen <= pend) {
memcpy(p,f,flen);
p += flen;
}
while (p < pend) {
*p++ = *q++;
}
}
} }
memcpy(pend, RSTRING(str)->ptr, RSTRING(str)->len); memcpy(p, RSTRING(str)->ptr, RSTRING(str)->len);
p = pend + RSTRING(str)->len; pend = RSTRING(res)->ptr + width; if (jflag != 'r') {
while (p < pend) { p += RSTRING(str)->len; pend = RSTRING(res)->ptr + width;
*p++ = ' '; if (flen <= 1) {
while (p < pend) {
*p++ = *f;
}
}
else {
while (p + flen <= pend) {
memcpy(p,f,flen);
p += flen;
}
while (p < pend) {
*p++ = *f++;
}
}
} }
OBJ_INFECT(res, str); OBJ_INFECT(res, str);
if (flen > 0) OBJ_INFECT(res, pad);
return res; return res;
} }
static VALUE
rb_str_ljust(argc, argv, str)
int argc;
VALUE *argv;
VALUE str;
{
return rb_str_justify(argc, argv, str, 'l');
}
static VALUE
rb_str_rjust(argc, argv, str)
int argc;
VALUE *argv;
VALUE str;
{
return rb_str_justify(argc, argv, str, 'r');
}
static VALUE
rb_str_center(argc, argv, str)
int argc;
VALUE *argv;
VALUE str;
{
return rb_str_justify(argc, argv, str, 'c');
}
void void
rb_str_setter(val, id, var) rb_str_setter(val, id, var)
VALUE val; VALUE val;
@ -3265,9 +3295,9 @@ Init_String()
rb_define_method(rb_cString, "scan", rb_str_scan, 1); rb_define_method(rb_cString, "scan", rb_str_scan, 1);
rb_define_method(rb_cString, "ljust", rb_str_ljust, 1); rb_define_method(rb_cString, "ljust", rb_str_ljust, -1);
rb_define_method(rb_cString, "rjust", rb_str_rjust, 1); rb_define_method(rb_cString, "rjust", rb_str_rjust, -1);
rb_define_method(rb_cString, "center", rb_str_center, 1); rb_define_method(rb_cString, "center", rb_str_center, -1);
rb_define_method(rb_cString, "sub", rb_str_sub, -1); rb_define_method(rb_cString, "sub", rb_str_sub, -1);
rb_define_method(rb_cString, "gsub", rb_str_gsub, -1); rb_define_method(rb_cString, "gsub", rb_str_gsub, -1);