diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-10-02 04:25:53 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-10-02 04:25:53 +0000 |
commit | 3ab5d775b737f681225864200c893b68b7b8f546 (patch) | |
tree | a7d8d79fba4dd4bf11bcd80d66ab41679049fec3 | |
parent | e431908527e19099572492a08742c9529f3d32ab (diff) |
* ext/socket/socket.c (unix_addr): getsockname(2) may result len = 0.
* ext/socket/socket.c (unix_peeraddr): getpeername(2) may result
len = 0.
* eval.c (POP_BLOCK): rb_gc_force_recycle() was called too much.
Should not be called if SCOPE_DONT_RECYCLE is set.
* string.c (rb_str_substr): should return an instance of
receiver's class.
* string.c (rb_str_succ): ditto.
* array.c (rb_ary_subseq): ditto.
* string.c (rb_str_reverse): should return an instance of
reciever's class.
* string.c (rb_str_times): ditto.
* array.c (rb_ary_times): ditto
* string.c (str_gsub): ditto.
* string.c (rb_str_ljust): ditto.
* string.c (rb_str_rjust): ditto.
* string.c (rb_str_center): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1760 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 38 | ||||
-rw-r--r-- | array.c | 4 | ||||
-rw-r--r-- | configure.in | 4 | ||||
-rw-r--r-- | eval.c | 25 | ||||
-rw-r--r-- | ext/socket/socket.c | 4 | ||||
-rw-r--r-- | intern.h | 1 | ||||
-rw-r--r-- | lib/mailread.rb | 2 | ||||
-rw-r--r-- | marshal.c | 8 | ||||
-rw-r--r-- | numeric.c | 2 | ||||
-rw-r--r-- | object.c | 44 | ||||
-rw-r--r-- | parse.y | 2 | ||||
-rw-r--r-- | ruby.c | 6 | ||||
-rw-r--r-- | string.c | 13 | ||||
-rw-r--r-- | version.h | 4 |
14 files changed, 91 insertions, 66 deletions
@@ -1,3 +1,15 @@ +Mon Oct 1 19:18:54 2001 Tanaka Akira <akr@m17n.org> + + * ext/socket/socket.c (unix_addr): getsockname(2) may result len = 0. + + * ext/socket/socket.c (unix_peeraddr): getpeername(2) may result + len = 0. + +Sat Sep 29 02:30:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org> + + * eval.c (POP_BLOCK): rb_gc_force_recycle() was called too much. + Should not be called if SCOPE_DONT_RECYCLE is set. + Thu Sep 27 09:04:44 2001 Guy Decoux <ts@moulon.inra.fr> * parse.y: allow 'primary[] += arg' @@ -7,6 +19,32 @@ Tue Sep 25 10:42:46 2001 Usaku Nakamura <usa@ruby-lang.org> * win32/win32.c (isInternalCmd): check return value of NtMakeCmdVector (Tietew <tietew@tietew.net>'s patch). +Mon Sep 24 00:55:06 2001 Yukihiro Matsumoto <matz@ruby-lang.org> + + * string.c (rb_str_substr): should return an instance of + receiver's class. + + * string.c (rb_str_succ): ditto. + + * array.c (rb_ary_subseq): ditto. + +Sat Sep 22 22:16:08 2001 Yukihiro Matsumoto <matz@ruby-lang.org> + + * string.c (rb_str_reverse): should return an instance of + reciever's class. + + * string.c (rb_str_times): ditto. + + * array.c (rb_ary_times): ditto + + * string.c (str_gsub): ditto. + + * string.c (rb_str_ljust): ditto. + + * string.c (rb_str_rjust): ditto. + + * string.c (rb_str_center): ditto. + Wed Sep 19 17:46:42 2001 Yukihiro Matsumoto <matz@ruby-lang.org> * stable version 1.6.5 released. @@ -414,6 +414,7 @@ rb_ary_subseq(ary, beg, len) ary2 = rb_ary_new2(len); MEMCPY(RARRAY(ary2)->ptr, RARRAY(ary)->ptr+beg, VALUE, len); RARRAY(ary2)->len = len; + RBASIC(ary2)->klass = rb_obj_class(ary); return ary2; } @@ -1296,6 +1297,9 @@ rb_ary_times(ary, times) MEMCPY(RARRAY(ary2)->ptr+i, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len); } + OBJ_INFECT(ary2, ary); + RBASIC(ary2)->klass = rb_obj_class(ary); + return ary2; } diff --git a/configure.in b/configure.in index 1e19ca4c7a..1ab6e509d0 100644 --- a/configure.in +++ b/configure.in @@ -582,7 +582,7 @@ if test "$with_dln_a_out" != yes; then LDFLAGS="" DLDFLAGS="$ARCH_FLAG" rb_cv_dlopen=yes ;; - darwin*) LDSHARED='cc -dynamic -bundle -undefined suppress' + darwin*) LDSHARED='cc -dynamic -bundle -undefined suppress -flat_namespace' LDFLAGS="" DLDFLAGS="$ARCH_FLAG" rb_cv_dlopen=yes ;; @@ -864,7 +864,7 @@ if test "$enable_shared" = 'yes'; then ;; darwin*) LIBRUBY_SO='lib$(RUBY_INSTALL_NAME).$(MAJOR).$(MINOR).$(TEENY).dylib' - LIBRUBY_LDSHARED='cc -dynamiclib -undefined suppress' + LIBRUBY_LDSHARED='cc -dynamiclib -undefined suppress -flat_namespace' LIBRUBY_DLDFLAGS='-install_name lib$(RUBY_INSTALL_NAME).dylib -current_version $(MAJOR).$(MINOR).$(TEENY) -compatibility_version $(MAJOR).$(MINOR)' LIBRUBY_ALIASES='lib$(RUBY_INSTALL_NAME).$(MAJOR).$(MINOR).dylib lib$(RUBY_INSTALL_NAME).dylib' ;; @@ -577,15 +577,11 @@ new_blktag() _block.wrapper = ruby_wrapper; \ ruby_block = &_block; -#define POP_BLOCK_TAG(tag) do { \ - if ((tag)->flags & BLOCK_DYNAMIC) \ - (tag)->flags |= BLOCK_ORPHAN; \ - else \ - rb_gc_force_recycle((VALUE)tag); \ -} while (0) - #define POP_BLOCK() \ - POP_BLOCK_TAG(_block.tag); \ + if (_block.tag->flags & (BLOCK_DYNAMIC)) \ + _block.tag->flags |= BLOCK_ORPHAN; \ + else if (!(_block.scope->flag & SCOPE_DONT_RECYCLE)) \ + rb_gc_force_recycle((VALUE)_block.tag); \ ruby_block = _block.prev; \ } @@ -4809,10 +4805,6 @@ eval(self, src, scope, file, line) volatile int iter = ruby_frame->iter; int state; - if (file == 0) { - file = ruby_sourcefile; - line = ruby_sourceline; - } if (!NIL_P(scope)) { if (!rb_obj_is_block(scope)) { rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc/Binding)", @@ -4836,6 +4828,11 @@ eval(self, src, scope, file, line) ruby_cref = (NODE*)ruby_frame->cbase; old_wrapper = ruby_wrapper; ruby_wrapper = data->wrapper; + if ((file == 0 || (line == 1 && strcmp(file, "(eval)") == 0)) && + data->body && data->body->nd_file) { + file = data->body->nd_file; + line = nd_line(data->body); + } self = data->self; ruby_frame->iter = data->iter; @@ -4845,6 +4842,10 @@ eval(self, src, scope, file, line) ruby_frame->iter = ruby_frame->prev->iter; } } + if (file == 0) { + file = ruby_sourcefile; + line = ruby_sourceline; + } PUSH_CLASS(); ruby_class = ruby_cbase; diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 87f2aede8b..02c1096d69 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -1404,6 +1404,8 @@ unix_addr(sock) if (getsockname(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0) rb_sys_fail("getsockname(2)"); + if (len == 0) + addr.sun_path[0] = '\0'; return unixaddr(&addr); } @@ -1419,6 +1421,8 @@ unix_peeraddr(sock) if (getpeername(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0) rb_sys_fail("getsockname(2)"); + if (len == 0) + addr.sun_path[0] = '\0'; return unixaddr(&addr); } #endif @@ -235,6 +235,7 @@ VALUE rb_obj_tainted _((VALUE)); VALUE rb_obj_untaint _((VALUE)); VALUE rb_obj_freeze _((VALUE)); VALUE rb_obj_id _((VALUE)); +VALUE rb_obj_class _((VALUE)); VALUE rb_convert_type _((VALUE,int,const char*,const char*)); VALUE rb_to_int _((VALUE)); VALUE rb_Integer _((VALUE)); diff --git a/lib/mailread.rb b/lib/mailread.rb index ee86d353eb..7573d03ed4 100644 --- a/lib/mailread.rb +++ b/lib/mailread.rb @@ -14,7 +14,7 @@ class Mail next if /^From /=~line # skip From-line break if /^$/=~line # end of header - if /^(\S+):\s*(.*)/=~line + if /^(\S+?):\s*(.*)/=~line (attr = $1).capitalize! @header[attr] = $2 elsif attr @@ -344,6 +344,10 @@ w_object(obj, arg, limit) w_byte(TYPE_CLASS, arg); { VALUE path = rb_class_path(obj); + if (RSTRING(path)->ptr[0] == '#') { + rb_raise(rb_eArgError, "can't dump anonymous class %s", + RSTRING(path)->ptr); + } w_bytes(RSTRING(path)->ptr, RSTRING(path)->len, arg); } break; @@ -353,10 +357,6 @@ w_object(obj, arg, limit) { VALUE path = rb_class_path(obj); if (RSTRING(path)->ptr[0] == '#') { - rb_raise(rb_eArgError, "can't dump anonymous class %s", - RSTRING(path)->ptr); - } - if (RSTRING(path)->ptr[0] == '#') { rb_raise(rb_eArgError, "can't dump anonymous module %s", RSTRING(path)->ptr); } @@ -775,7 +775,7 @@ rb_num2long(val) sprintf(buf, "%-.10g", RFLOAT(val)->value); if (s = strchr(buf, ' ')) *s = '\0'; - rb_raise(rb_eRangeError, "float %s out of rang of integer", buf); + rb_raise(rb_eRangeError, "float %s out of range of integer", buf); } case T_BIGNUM: @@ -72,8 +72,8 @@ rb_obj_id(obj) return (VALUE)((long)obj|FIXNUM_FLAG); } -static VALUE -rb_obj_type(obj) +VALUE +rb_obj_class(obj) VALUE obj; { VALUE cl = CLASS_OF(obj); @@ -113,7 +113,7 @@ rb_obj_dup(obj) rb_raise(rb_eTypeError, "dupulicated object must be same type"); } if (!SPECIAL_CONST_P(dup)) { - OBJSETUP(dup, rb_obj_type(obj), BUILTIN_TYPE(obj)); + OBJSETUP(dup, rb_obj_class(obj), BUILTIN_TYPE(obj)); OBJ_INFECT(dup, obj); if (FL_TEST(obj, FL_EXIVAR)) { FL_SET(dup, FL_EXIVAR); @@ -241,7 +241,7 @@ rb_obj_is_instance_of(obj, c) rb_raise(rb_eTypeError, "class or module required"); } - if (rb_obj_type(obj) == c) return Qtrue; + if (rb_obj_class(obj) == c) return Qtrue; return Qfalse; } @@ -359,13 +359,6 @@ nil_inspect(obj) return rb_str_new2("nil"); } -static VALUE -nil_type(obj) - VALUE obj; -{ - return rb_cNilClass; -} - #ifdef NIL_PLUS static VALUE nil_plus(x, y) @@ -403,13 +396,6 @@ true_to_s(obj) } static VALUE -true_type(obj) - VALUE obj; -{ - return rb_cTrueClass; -} - -static VALUE true_and(obj, obj2) VALUE obj, obj2; { @@ -438,13 +424,6 @@ false_to_s(obj) } static VALUE -false_type(obj) - VALUE obj; -{ - return rb_cFalseClass; -} - -static VALUE false_and(obj, obj2) VALUE obj, obj2; { @@ -490,13 +469,6 @@ rb_obj_alloc(klass) } static VALUE -sym_type(sym) - VALUE sym; -{ - return rb_cSymbol; -} - -static VALUE sym_to_i(sym) VALUE sym; { @@ -1156,8 +1128,8 @@ Init_Object() rb_define_method(rb_mKernel, "hash", rb_obj_id, 0); rb_define_method(rb_mKernel, "id", rb_obj_id, 0); rb_define_method(rb_mKernel, "__id__", rb_obj_id, 0); - rb_define_method(rb_mKernel, "type", rb_obj_type, 0); - rb_define_method(rb_mKernel, "class", rb_obj_type, 0); + rb_define_method(rb_mKernel, "type", rb_obj_class, 0); + rb_define_method(rb_mKernel, "class", rb_obj_class, 0); rb_define_method(rb_mKernel, "clone", rb_obj_clone, 0); rb_define_method(rb_mKernel, "dup", rb_obj_dup, 0); @@ -1196,7 +1168,6 @@ Init_Object() rb_define_global_function("Array", rb_f_array, 1); rb_cNilClass = rb_define_class("NilClass", rb_cObject); - rb_define_method(rb_cNilClass, "type", nil_type, 0); rb_define_method(rb_cNilClass, "to_i", nil_to_i, 0); rb_define_method(rb_cNilClass, "to_s", nil_to_s, 0); rb_define_method(rb_cNilClass, "to_a", nil_to_a, 0); @@ -1211,7 +1182,6 @@ Init_Object() rb_cSymbol = rb_define_class("Symbol", rb_cObject); rb_undef_method(CLASS_OF(rb_cSymbol), "new"); - rb_define_method(rb_cSymbol, "type", sym_type, 0); rb_define_method(rb_cSymbol, "to_i", sym_to_i, 0); rb_define_method(rb_cSymbol, "to_int", sym_to_i, 0); rb_define_method(rb_cSymbol, "inspect", sym_inspect, 0); @@ -1268,7 +1238,6 @@ Init_Object() rb_cTrueClass = rb_define_class("TrueClass", rb_cObject); rb_define_method(rb_cTrueClass, "to_s", true_to_s, 0); - rb_define_method(rb_cTrueClass, "type", true_type, 0); rb_define_method(rb_cTrueClass, "&", true_and, 1); rb_define_method(rb_cTrueClass, "|", true_or, 1); rb_define_method(rb_cTrueClass, "^", true_xor, 1); @@ -1277,7 +1246,6 @@ Init_Object() rb_cFalseClass = rb_define_class("FalseClass", rb_cObject); rb_define_method(rb_cFalseClass, "to_s", false_to_s, 0); - rb_define_method(rb_cFalseClass, "type", false_type, 0); rb_define_method(rb_cFalseClass, "&", false_and, 1); rb_define_method(rb_cFalseClass, "|", false_or, 1); rb_define_method(rb_cFalseClass, "^", false_xor, 1); @@ -690,7 +690,7 @@ arg : lhs '=' arg } | primary '[' aref_args ']' tOP_ASGN arg { - NODE *args = NEW_LIST($6); + NODE *tmp, *args = NEW_LIST($6); $3 = list_append($3, NEW_NIL()); list_concat(args, $3); @@ -597,8 +597,10 @@ proc_options(argc, argv) s++; if (strcmp("copyright", s) == 0) copyright = 1; - else if (strcmp("debug", s) == 0) - ruby_debug = 1; + else if (strcmp("debug", s) == 0) { + ruby_debug = Qtrue; + ruby_verbose = Qtrue; + } else if (strcmp("version", s) == 0) version = 1; else if (strcmp("verbose", s) == 0) { @@ -306,9 +306,8 @@ rb_str_times(str, times) } RSTRING(str2)->ptr[RSTRING(str2)->len] = '\0'; - if (OBJ_TAINTED(str)) { - OBJ_TAINT(str2); - } + OBJ_INFECT(str2, str); + RBASIC(str2)->klass = rb_obj_class(str); return str2; } @@ -354,6 +353,7 @@ rb_str_substr(str, beg, len) if (len == 0) return rb_str_new(0,0); str2 = rb_str_new(RSTRING(str)->ptr+beg, len); + RBASIC(str2)->klass = rb_obj_class(str); if (OBJ_TAINTED(str)) OBJ_TAINT(str2); return str2; @@ -807,6 +807,7 @@ rb_str_succ(orig) int n = 0; str = rb_str_new(RSTRING(orig)->ptr, RSTRING(orig)->len); + RBASIC(str)->klass = rb_obj_class(orig); OBJ_INFECT(str, orig); if (RSTRING(str)->len == 0) return str; @@ -1288,6 +1289,7 @@ str_gsub(argc, argv, str, bang) NEWOBJ(dup, struct RString); OBJSETUP(dup, rb_cString, T_STRING); OBJ_INFECT(dup, str); + RBASIC(dup)->klass = rb_obj_class(str); str = (VALUE)dup; dup->orig = 0; } @@ -1432,6 +1434,8 @@ rb_str_reverse(str) while (e >= s) { *p++ = *e--; } + OBJ_INFECT(obj, str); + RBASIC(obj)->klass = rb_obj_class(str); return obj; } @@ -2718,6 +2722,7 @@ rb_str_ljust(str, w) if (width < 0 || RSTRING(str)->len >= width) return str; res = rb_str_new(0, width); + RBASIC(res)->klass = rb_obj_class(str); 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) { @@ -2738,6 +2743,7 @@ rb_str_rjust(str, w) if (width < 0 || RSTRING(str)->len >= width) return str; res = rb_str_new(0, width); + RBASIC(res)->klass = rb_obj_class(str); p = RSTRING(res)->ptr; pend = p + width - RSTRING(str)->len; while (p < pend) { *p++ = ' '; @@ -2759,6 +2765,7 @@ rb_str_center(str, w) if (width < 0 || RSTRING(str)->len >= width) return str; res = rb_str_new(0, width); + RBASIC(res)->klass = rb_obj_class(str); n = (width - RSTRING(str)->len)/2; p = RSTRING(res)->ptr; pend = p + n; while (p < pend) { @@ -1,4 +1,4 @@ #define RUBY_VERSION "1.6.5" -#define RUBY_RELEASE_DATE "2001-09-19" +#define RUBY_RELEASE_DATE "2001-10-02" #define RUBY_VERSION_CODE 165 -#define RUBY_RELEASE_CODE 20010919 +#define RUBY_RELEASE_CODE 20011002 |