зеркало из https://github.com/github/ruby.git
2000-05-10
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@684 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
6f4170c2a7
Коммит
014f2164ed
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,12 @@
|
||||||
|
Tue May 9 17:08:43 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
|
* array.c (Init_Array): prepare 'append' as alias to `push'.
|
||||||
|
|
||||||
|
* eval.c (massign): no longer convert nil into empty array.
|
||||||
|
|
||||||
|
* io.c (rb_io_s_popen): optional 3rd argument to give proc, which
|
||||||
|
will be executed in spawned child process.
|
||||||
|
|
||||||
Mon May 8 23:47:39 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
|
Mon May 8 23:47:39 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
|
||||||
|
|
||||||
* eval.c (rb_callcc): prev & next should be initialized to zero.
|
* eval.c (rb_callcc): prev & next should be initialized to zero.
|
||||||
|
@ -5,7 +14,7 @@ Mon May 8 23:47:39 2000 Katsuyuki Komatsu <komatsu@sarion.co.jp>
|
||||||
Mon May 8 23:17:36 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
|
Mon May 8 23:17:36 2000 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||||
|
|
||||||
* dln.c (dln_init): remove possible buffer overrun. This is
|
* dln.c (dln_init): remove possible buffer overrun. This is
|
||||||
suggested by Aleksi Niemela <aleksi.niemela@cinnober.com>
|
suggested by Aleksi Niemela <aleksi.niemela@cinnober.com>.
|
||||||
|
|
||||||
* dln.c (init_funcname): ditto.
|
* dln.c (init_funcname): ditto.
|
||||||
|
|
||||||
|
|
1
array.c
1
array.c
|
@ -1601,6 +1601,7 @@ Init_Array()
|
||||||
rb_define_method(rb_cArray, "last", rb_ary_last, 0);
|
rb_define_method(rb_cArray, "last", rb_ary_last, 0);
|
||||||
rb_define_method(rb_cArray, "concat", rb_ary_concat, 1);
|
rb_define_method(rb_cArray, "concat", rb_ary_concat, 1);
|
||||||
rb_define_method(rb_cArray, "<<", rb_ary_push, 1);
|
rb_define_method(rb_cArray, "<<", rb_ary_push, 1);
|
||||||
|
rb_define_method(rb_cArray, "append", rb_ary_push_m, -1);
|
||||||
rb_define_method(rb_cArray, "push", rb_ary_push_m, -1);
|
rb_define_method(rb_cArray, "push", rb_ary_push_m, -1);
|
||||||
rb_define_method(rb_cArray, "pop", rb_ary_pop, 0);
|
rb_define_method(rb_cArray, "pop", rb_ary_pop, 0);
|
||||||
rb_define_method(rb_cArray, "shift", rb_ary_shift, 0);
|
rb_define_method(rb_cArray, "shift", rb_ary_shift, 0);
|
||||||
|
|
5
dln.c
5
dln.c
|
@ -1211,10 +1211,12 @@ dln_load(file)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
HINSTANCE handle;
|
HINSTANCE handle;
|
||||||
char winfile[255];
|
char winfile[MAXPATHLEN];
|
||||||
void (*init_fct)();
|
void (*init_fct)();
|
||||||
char buf[MAXPATHLEN];
|
char buf[MAXPATHLEN];
|
||||||
|
|
||||||
|
if (strlen(file) >= MAXPATHLEN) rb_loaderror("filename too long");
|
||||||
|
|
||||||
/* Load the file as an object one */
|
/* Load the file as an object one */
|
||||||
init_funcname(buf, file);
|
init_funcname(buf, file);
|
||||||
|
|
||||||
|
@ -1421,6 +1423,7 @@ dln_load(file)
|
||||||
|
|
||||||
if (err_stat != B_NO_ERROR) {
|
if (err_stat != B_NO_ERROR) {
|
||||||
char real_name[MAXPATHLEN];
|
char real_name[MAXPATHLEN];
|
||||||
|
|
||||||
strcpy(real_name, buf);
|
strcpy(real_name, buf);
|
||||||
strcat(real_name, "__Fv");
|
strcat(real_name, "__Fv");
|
||||||
err_stat = get_image_symbol(img_id, real_name,
|
err_stat = get_image_symbol(img_id, real_name,
|
||||||
|
|
27
eval.c
27
eval.c
|
@ -3437,10 +3437,14 @@ massign(self, node, val, check)
|
||||||
list = node->nd_head;
|
list = node->nd_head;
|
||||||
|
|
||||||
if (TYPE(val) != T_ARRAY) {
|
if (TYPE(val) != T_ARRAY) {
|
||||||
|
#if 0
|
||||||
if (!check && NIL_P(val))
|
if (!check && NIL_P(val))
|
||||||
val = rb_ary_new2(0);
|
val = rb_ary_new2(0);
|
||||||
else
|
else
|
||||||
val = rb_ary_new3(1, val);
|
val = rb_ary_new3(1, val);
|
||||||
|
#else
|
||||||
|
val = rb_ary_new3(1, val);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
len = RARRAY(val)->len;
|
len = RARRAY(val)->len;
|
||||||
for (i=0; list && i<len; i++) {
|
for (i=0; list && i<len; i++) {
|
||||||
|
@ -4636,7 +4640,12 @@ eval_under(under, self, src, file, line)
|
||||||
{
|
{
|
||||||
VALUE args[4];
|
VALUE args[4];
|
||||||
|
|
||||||
Check_SafeStr(src);
|
if (ruby_safe_level >= 4) {
|
||||||
|
Check_Type(src, T_STRING);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Check_SafeStr(src);
|
||||||
|
}
|
||||||
args[0] = self;
|
args[0] = self;
|
||||||
args[1] = src;
|
args[1] = src;
|
||||||
args[2] = (VALUE)file;
|
args[2] = (VALUE)file;
|
||||||
|
@ -6632,6 +6641,7 @@ rb_thread_schedule()
|
||||||
thread_t next; /* OK */
|
thread_t next; /* OK */
|
||||||
thread_t th;
|
thread_t th;
|
||||||
thread_t curr;
|
thread_t curr;
|
||||||
|
int found = 0;
|
||||||
|
|
||||||
select_err:
|
select_err:
|
||||||
rb_thread_pending = 0;
|
rb_thread_pending = 0;
|
||||||
|
@ -6646,6 +6656,14 @@ rb_thread_schedule()
|
||||||
curr = curr->prev;
|
curr = curr->prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FOREACH_THREAD_FROM(curr, th) {
|
||||||
|
if (th->status == THREAD_RUNNABLE || th->status == THREAD_TO_KILL) {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
END_FOREACH_FROM(curr, th);
|
||||||
|
|
||||||
if (num_waiting_on_join) {
|
if (num_waiting_on_join) {
|
||||||
FOREACH_THREAD_FROM(curr, th) {
|
FOREACH_THREAD_FROM(curr, th) {
|
||||||
if ((th->wait_for&WAIT_JOIN) && rb_thread_dead(th->join)) {
|
if ((th->wait_for&WAIT_JOIN) && rb_thread_dead(th->join)) {
|
||||||
|
@ -6653,6 +6671,7 @@ rb_thread_schedule()
|
||||||
th->wait_for &= ~WAIT_JOIN;
|
th->wait_for &= ~WAIT_JOIN;
|
||||||
th->status = THREAD_RUNNABLE;
|
th->status = THREAD_RUNNABLE;
|
||||||
num_waiting_on_join--;
|
num_waiting_on_join--;
|
||||||
|
found = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
END_FOREACH_FROM(curr, th);
|
END_FOREACH_FROM(curr, th);
|
||||||
|
@ -6662,7 +6681,7 @@ rb_thread_schedule()
|
||||||
fd_set readfds;
|
fd_set readfds;
|
||||||
struct timeval delay_tv, *delay_ptr;
|
struct timeval delay_tv, *delay_ptr;
|
||||||
double delay, now; /* OK */
|
double delay, now; /* OK */
|
||||||
int n, max, found;
|
int n, max;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
max = 0;
|
max = 0;
|
||||||
|
@ -6765,13 +6784,11 @@ rb_thread_schedule()
|
||||||
th->thread, th->status,
|
th->thread, th->status,
|
||||||
th->wait_for, th==main_thread?"(main)":"",
|
th->wait_for, th==main_thread?"(main)":"",
|
||||||
th->file, th->line);
|
th->file, th->line);
|
||||||
if (th->status == THREAD_STOPPED) {
|
|
||||||
next = th;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
END_FOREACH_FROM(curr, th);
|
END_FOREACH_FROM(curr, th);
|
||||||
/* raise fatal error to main thread */
|
/* raise fatal error to main thread */
|
||||||
rb_thread_deadlock();
|
rb_thread_deadlock();
|
||||||
|
next = main_thread;
|
||||||
rb_thread_ready(next);
|
rb_thread_ready(next);
|
||||||
next->gid = 0;
|
next->gid = 0;
|
||||||
next->status = THREAD_TO_KILL;
|
next->status = THREAD_TO_KILL;
|
||||||
|
|
14
io.c
14
io.c
|
@ -1557,9 +1557,9 @@ rb_io_s_popen(argc, argv, self)
|
||||||
VALUE self;
|
VALUE self;
|
||||||
{
|
{
|
||||||
char *mode;
|
char *mode;
|
||||||
VALUE pname, pmode, port;
|
VALUE pname, pmode, port, proc;
|
||||||
|
|
||||||
if (rb_scan_args(argc, argv, "11", &pname, &pmode) == 1) {
|
if (rb_scan_args(argc, argv, "12", &pname, &pmode, &proc) == 1) {
|
||||||
mode = "r";
|
mode = "r";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1573,7 +1573,12 @@ rb_io_s_popen(argc, argv, self)
|
||||||
Check_SafeStr(pname);
|
Check_SafeStr(pname);
|
||||||
port = pipe_open(RSTRING(pname)->ptr, mode);
|
port = pipe_open(RSTRING(pname)->ptr, mode);
|
||||||
if (NIL_P(port)) {
|
if (NIL_P(port)) {
|
||||||
rb_yield(port);
|
if (!NIL_P(proc)) {
|
||||||
|
rb_eval_cmd(proc, rb_ary_new2(0));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rb_yield(port);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (rb_iterator_p()) {
|
else if (rb_iterator_p()) {
|
||||||
return rb_ensure(rb_yield, port, rb_io_close, port);
|
return rb_ensure(rb_yield, port, rb_io_close, port);
|
||||||
|
@ -2275,6 +2280,9 @@ rb_io_initialize(argc, argv, io)
|
||||||
fp->f = rb_fdopen(NUM2INT(fnum), m);
|
fp->f = rb_fdopen(NUM2INT(fnum), m);
|
||||||
fp->mode = rb_io_mode_flags(m);
|
fp->mode = rb_io_mode_flags(m);
|
||||||
|
|
||||||
|
if (rb_iterator_p()) {
|
||||||
|
return rb_ensure(rb_yield, io, rb_io_close, io);
|
||||||
|
}
|
||||||
return io;
|
return io;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -726,7 +726,7 @@ ok(a == [1, 2, 3])
|
||||||
ok(a == [4])
|
ok(a == [4])
|
||||||
|
|
||||||
*a = nil
|
*a = nil
|
||||||
ok(a == [])
|
ok(a == [nil])
|
||||||
|
|
||||||
check "call"
|
check "call"
|
||||||
def aaa(a, b=100, *rest)
|
def aaa(a, b=100, *rest)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#define RUBY_VERSION "1.5.3"
|
#define RUBY_VERSION "1.5.3"
|
||||||
#define RUBY_RELEASE_DATE "2000-05-09"
|
#define RUBY_RELEASE_DATE "2000-05-10"
|
||||||
#define RUBY_VERSION_CODE 153
|
#define RUBY_VERSION_CODE 153
|
||||||
#define RUBY_RELEASE_CODE 20000509
|
#define RUBY_RELEASE_CODE 20000510
|
||||||
|
|
Загрузка…
Ссылка в новой задаче