зеркало из https://github.com/github/ruby.git
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1061 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
2322a13127
Коммит
3a7020854d
30
ChangeLog
30
ChangeLog
|
@ -1,3 +1,33 @@
|
||||||
|
Tue Dec 12 15:45:42 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* parse.y (newline_node): cancel newline unification.
|
||||||
|
|
||||||
|
Mon Dec 11 23:01:57 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* parse.y (yylex): supports cases `?' precedes EOF and newline.
|
||||||
|
|
||||||
|
Mon Dec 11 12:11:25 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* eval.c (call_end_proc): some frame members were left
|
||||||
|
uninitialized.
|
||||||
|
|
||||||
|
Mon Dec 11 01:14:58 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* io.c (rb_io_fptr_finalize): do not fclose stdin, stdout and
|
||||||
|
stderr at exit.
|
||||||
|
|
||||||
|
Sat Dec 9 17:34:48 2000 Tachino Nobuhiro <tachino@open.nm.fujitsu.co.jp>
|
||||||
|
|
||||||
|
* time.c (time_cmp): should check with kind_of?, not instance_of?
|
||||||
|
|
||||||
|
* time.c (time_eql): ditto.
|
||||||
|
|
||||||
|
* time.c (time_minus): ditto.
|
||||||
|
|
||||||
|
Fri Dec 8 17:23:25 2000 Tachino Nobuhiro <tachino@open.nm.fujitsu.co.jp>
|
||||||
|
|
||||||
|
* sprintf.c (rb_f_sprintf): proper string precision treat.
|
||||||
|
|
||||||
Fri Dec 8 10:44:05 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
|
Fri Dec 8 10:44:05 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
* variable.c (rb_mod_remove_cvar): Module#remove_class_variable
|
* variable.c (rb_mod_remove_cvar): Module#remove_class_variable
|
||||||
|
|
5
ToDo
5
ToDo
|
@ -28,6 +28,7 @@ Language Spec.
|
||||||
+ variables appears within block may have independent values.
|
+ variables appears within block may have independent values.
|
||||||
* Regexp: make /o thread safe.
|
* Regexp: make /o thread safe.
|
||||||
* decide if begin with rescue or ensure make do..while loop.
|
* decide if begin with rescue or ensure make do..while loop.
|
||||||
|
* a +1 to be a+1, not a(+1).
|
||||||
|
|
||||||
Hacking Interpreter
|
Hacking Interpreter
|
||||||
|
|
||||||
|
@ -98,7 +99,9 @@ Standard Libraries
|
||||||
* IO#for_fd in general
|
* IO#for_fd in general
|
||||||
* Array#&, Array#| to allow duplication. ???
|
* Array#&, Array#| to allow duplication. ???
|
||||||
- fork_and_kill_other_threads.
|
- fork_and_kill_other_threads.
|
||||||
* way to specify immortal (fork endurance) thread.
|
* way to specify immortal (fork endurance) thread;
|
||||||
|
* or raise ForkException to every thread but fork caller.
|
||||||
|
* Array#fetch
|
||||||
|
|
||||||
Extension Libraries
|
Extension Libraries
|
||||||
|
|
||||||
|
|
3
array.c
3
array.c
|
@ -1437,9 +1437,8 @@ rb_ary_diff(ary1, ary2)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
ary_make_hash(ary1, ary2, func)
|
ary_make_hash(ary1, ary2)
|
||||||
VALUE ary1, ary2;
|
VALUE ary1, ary2;
|
||||||
int (*func)();
|
|
||||||
{
|
{
|
||||||
VALUE hash = rb_hash_new();
|
VALUE hash = rb_hash_new();
|
||||||
int i, n;
|
int i, n;
|
||||||
|
|
3
eval.c
3
eval.c
|
@ -5635,6 +5635,9 @@ call_end_proc(data)
|
||||||
{
|
{
|
||||||
PUSH_ITER(ITER_NOT);
|
PUSH_ITER(ITER_NOT);
|
||||||
PUSH_FRAME();
|
PUSH_FRAME();
|
||||||
|
ruby_frame->self = ruby_frame->prev->self;
|
||||||
|
ruby_frame->last_func = 0;
|
||||||
|
ruby_frame->last_class = 0;
|
||||||
proc_call(data, Qundef);
|
proc_call(data, Qundef);
|
||||||
POP_FRAME();
|
POP_FRAME();
|
||||||
POP_ITER();
|
POP_ITER();
|
||||||
|
|
20
io.c
20
io.c
|
@ -1013,13 +1013,10 @@ fptr_finalize(fptr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
rb_io_fptr_finalize(fptr)
|
rb_io_fptr_cleanup(fptr)
|
||||||
OpenFile *fptr;
|
OpenFile *fptr;
|
||||||
{
|
{
|
||||||
if (!fptr) return;
|
|
||||||
if (!fptr->f && !fptr->f2) return;
|
|
||||||
|
|
||||||
if (fptr->finalize) {
|
if (fptr->finalize) {
|
||||||
(*fptr->finalize)(fptr);
|
(*fptr->finalize)(fptr);
|
||||||
}
|
}
|
||||||
|
@ -1034,6 +1031,17 @@ rb_io_fptr_finalize(fptr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
rb_io_fptr_finalize(fptr)
|
||||||
|
OpenFile *fptr;
|
||||||
|
{
|
||||||
|
if (!fptr) return;
|
||||||
|
if (!fptr->f && !fptr->f2) return;
|
||||||
|
if (fileno(fptr->f) < 3) return;
|
||||||
|
|
||||||
|
rb_io_fptr_cleanup(fptr);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
rb_io_fptr_close(fptr)
|
rb_io_fptr_close(fptr)
|
||||||
OpenFile *fptr;
|
OpenFile *fptr;
|
||||||
|
@ -1044,7 +1052,7 @@ rb_io_fptr_close(fptr)
|
||||||
if (!fptr->f && !fptr->f2) return;
|
if (!fptr->f && !fptr->f2) return;
|
||||||
|
|
||||||
fd = fileno(fptr->f);
|
fd = fileno(fptr->f);
|
||||||
rb_io_fptr_finalize(fptr);
|
rb_io_fptr_cleanup(fptr);
|
||||||
rb_thread_fd_close(fd);
|
rb_thread_fd_close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
15
parse.y
15
parse.y
|
@ -1914,7 +1914,6 @@ yyerror(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int heredoc_end;
|
static int heredoc_end;
|
||||||
static int last_newline;
|
|
||||||
|
|
||||||
int ruby_in_compile = 0;
|
int ruby_in_compile = 0;
|
||||||
int ruby__end__seen;
|
int ruby__end__seen;
|
||||||
|
@ -1954,7 +1953,6 @@ yycompile(f, line)
|
||||||
ruby__end__seen = 0;
|
ruby__end__seen = 0;
|
||||||
ruby_eval_tree = 0;
|
ruby_eval_tree = 0;
|
||||||
heredoc_end = 0;
|
heredoc_end = 0;
|
||||||
last_newline = 0;
|
|
||||||
ruby_sourcefile = f;
|
ruby_sourcefile = f;
|
||||||
ruby_in_compile = 1;
|
ruby_in_compile = 1;
|
||||||
n = yyparse();
|
n = yyparse();
|
||||||
|
@ -2814,7 +2812,7 @@ yylex()
|
||||||
/* white spaces */
|
/* white spaces */
|
||||||
case ' ': case '\t': case '\f': case '\r':
|
case ' ': case '\t': case '\f': case '\r':
|
||||||
case '\13': /* '\v' */
|
case '\13': /* '\v' */
|
||||||
space_seen = 1;
|
space_seen++;
|
||||||
goto retry;
|
goto retry;
|
||||||
|
|
||||||
case '#': /* it's a comment */
|
case '#': /* it's a comment */
|
||||||
|
@ -2982,6 +2980,10 @@ yylex()
|
||||||
return '?';
|
return '?';
|
||||||
}
|
}
|
||||||
c = nextc();
|
c = nextc();
|
||||||
|
if (c == -1 || c == 10) {
|
||||||
|
rb_compile_error("incomplete character syntax");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if (lex_state == EXPR_ARG && ISSPACE(c)){
|
if (lex_state == EXPR_ARG && ISSPACE(c)){
|
||||||
pushback(c);
|
pushback(c);
|
||||||
lex_state = EXPR_BEG;
|
lex_state = EXPR_BEG;
|
||||||
|
@ -3294,8 +3296,8 @@ yylex()
|
||||||
}
|
}
|
||||||
pushback(c);
|
pushback(c);
|
||||||
if (lex_state == EXPR_ARG && space_seen) {
|
if (lex_state == EXPR_ARG && space_seen) {
|
||||||
arg_ambiguous();
|
|
||||||
if (!ISSPACE(c)) {
|
if (!ISSPACE(c)) {
|
||||||
|
arg_ambiguous();
|
||||||
return parse_regx('/', '/');
|
return parse_regx('/', '/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3847,10 +3849,9 @@ newline_node(node)
|
||||||
{
|
{
|
||||||
NODE *nl = 0;
|
NODE *nl = 0;
|
||||||
if (node) {
|
if (node) {
|
||||||
if (nd_line(node) == last_newline) return node;
|
|
||||||
nl = NEW_NEWLINE(node);
|
nl = NEW_NEWLINE(node);
|
||||||
fixpos(nl, node);
|
fixpos(nl, node);
|
||||||
last_newline = nl->nd_nth = nd_line(node);
|
nl->nd_nth = nd_line(node);
|
||||||
}
|
}
|
||||||
return nl;
|
return nl;
|
||||||
}
|
}
|
||||||
|
@ -4645,7 +4646,7 @@ top_local_setup()
|
||||||
i = ruby_scope->local_tbl?ruby_scope->local_tbl[0]:0;
|
i = ruby_scope->local_tbl?ruby_scope->local_tbl[0]:0;
|
||||||
|
|
||||||
if (i < len) {
|
if (i < len) {
|
||||||
if (i == 0 || ruby_scope->flag == SCOPE_ALLOCA) {
|
if (i == 0 || (ruby_scope->flag & SCOPE_MALLOC) == 0) {
|
||||||
VALUE *vars = ALLOC_N(VALUE, len+1);
|
VALUE *vars = ALLOC_N(VALUE, len+1);
|
||||||
if (ruby_scope->local_vars) {
|
if (ruby_scope->local_vars) {
|
||||||
*vars++ = ruby_scope->local_vars[-1];
|
*vars++ = ruby_scope->local_vars[-1];
|
||||||
|
|
|
@ -320,10 +320,7 @@ rb_f_sprintf(argc, argv)
|
||||||
len = RSTRING(str)->len;
|
len = RSTRING(str)->len;
|
||||||
if (flags&FPREC) {
|
if (flags&FPREC) {
|
||||||
if (prec < len) {
|
if (prec < len) {
|
||||||
CHECK(prec);
|
len = prec;
|
||||||
memcpy(&buf[blen], RSTRING(str)->ptr, prec);
|
|
||||||
blen += prec;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flags&FWIDTH) {
|
if (flags&FWIDTH) {
|
||||||
|
|
6
st.c
6
st.c
|
@ -62,10 +62,10 @@ static void rehash();
|
||||||
#define alloc(type) (type*)xmalloc((unsigned)sizeof(type))
|
#define alloc(type) (type*)xmalloc((unsigned)sizeof(type))
|
||||||
#define Calloc(n,s) (char*)xcalloc((n),(s))
|
#define Calloc(n,s) (char*)xcalloc((n),(s))
|
||||||
|
|
||||||
#define EQUAL(table, x, y) ((*table->type->compare)(x, y) == 0)
|
#define EQUAL(table,x,y) ((x)==(y) || (*table->type->compare)((x),(y)) == 0)
|
||||||
|
|
||||||
#define do_hash(key, table) (unsigned int)(*(table)->type->hash)((key))
|
#define do_hash(key,table) (unsigned int)(*(table)->type->hash)((key))
|
||||||
#define do_hash_bin(key, table) (do_hash(key, table)&(table)->num_bins)
|
#define do_hash_bin(key,table) (do_hash(key, table)&(table)->num_bins)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MINSIZE is the minimum size of a dictionary.
|
* MINSIZE is the minimum size of a dictionary.
|
||||||
|
|
8
time.c
8
time.c
|
@ -469,7 +469,7 @@ time_cmp(time1, time2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rb_obj_is_instance_of(time2, rb_cTime)) {
|
if (rb_obj_is_kind_of(time2, rb_cTime)) {
|
||||||
GetTimeval(time2, tobj2);
|
GetTimeval(time2, tobj2);
|
||||||
if (tobj1->tv.tv_sec == tobj2->tv.tv_sec) {
|
if (tobj1->tv.tv_sec == tobj2->tv.tv_sec) {
|
||||||
if (tobj1->tv.tv_usec == tobj2->tv.tv_usec) return INT2FIX(0);
|
if (tobj1->tv.tv_usec == tobj2->tv.tv_usec) return INT2FIX(0);
|
||||||
|
@ -492,7 +492,7 @@ time_eql(time1, time2)
|
||||||
struct time_object *tobj1, *tobj2;
|
struct time_object *tobj1, *tobj2;
|
||||||
|
|
||||||
GetTimeval(time1, tobj1);
|
GetTimeval(time1, tobj1);
|
||||||
if (rb_obj_is_instance_of(time2, rb_cTime)) {
|
if (rb_obj_is_kind_of(time2, rb_cTime)) {
|
||||||
GetTimeval(time2, tobj2);
|
GetTimeval(time2, tobj2);
|
||||||
if (tobj1->tv.tv_sec == tobj2->tv.tv_sec) {
|
if (tobj1->tv.tv_sec == tobj2->tv.tv_sec) {
|
||||||
if (tobj1->tv.tv_usec == tobj2->tv.tv_usec) return Qtrue;
|
if (tobj1->tv.tv_usec == tobj2->tv.tv_usec) return Qtrue;
|
||||||
|
@ -676,7 +676,7 @@ time_minus(time1, time2)
|
||||||
double f;
|
double f;
|
||||||
|
|
||||||
GetTimeval(time1, tobj);
|
GetTimeval(time1, tobj);
|
||||||
if (rb_obj_is_instance_of(time2, rb_cTime)) {
|
if (rb_obj_is_kind_of(time2, rb_cTime)) {
|
||||||
struct time_object *tobj2;
|
struct time_object *tobj2;
|
||||||
|
|
||||||
GetTimeval(time2, tobj2);
|
GetTimeval(time2, tobj2);
|
||||||
|
@ -945,7 +945,7 @@ static VALUE
|
||||||
time_s_times(obj)
|
time_s_times(obj)
|
||||||
VALUE obj;
|
VALUE obj;
|
||||||
{
|
{
|
||||||
#ifdef HAVE_TIMES
|
#if defined(HAVE_TIMES) && !defined(__CHECKER__)
|
||||||
#ifndef HZ
|
#ifndef HZ
|
||||||
# ifdef CLK_TCK
|
# ifdef CLK_TCK
|
||||||
# define HZ CLK_TCK
|
# define HZ CLK_TCK
|
||||||
|
|
Загрузка…
Ссылка в новой задаче