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

* class.c (rb_make_metaclass): obj.meta.super.meta should be equal

to obj.meta.meta.super (ruby-bugs-ja:PR#324).

* parse.y (yylex): the warning message "invalid
  character syntax" was never issued.

* marshal.c (r_bytes): do not use alloca (ruby-bugs:PR#382).


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2787 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2002-09-04 06:37:39 +00:00
parent 056817564e
commit 64901cd69b
8 changed files with 68 additions and 66 deletions

View file

@ -1,3 +1,17 @@
Wed Sep 4 15:23:23 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
* class.c (rb_make_metaclass): obj.meta.super.meta should be equal
to obj.meta.meta.super (ruby-bugs-ja:PR#324).
Wed Sep 04 05:10:16 2002 Koji Arai <jca02266@nifty.ne.jp>
* parse.y (yylex): the warning message "invalid
character syntax" was never issued.
Wed Sep 4 01:08:45 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
* marshal.c (r_bytes): do not use alloca (ruby-bugs:PR#382).
Tue Sep 3 17:12:59 2002 WATANABE Hirofumi <eban@ruby-lang.org> Tue Sep 3 17:12:59 2002 WATANABE Hirofumi <eban@ruby-lang.org>
* extmk.rb: require mkmf.rb. remove duplicate methods. * extmk.rb: require mkmf.rb. remove duplicate methods.

View file

@ -149,6 +149,9 @@ rb_make_metaclass(obj, super)
rb_singleton_class_attached(klass, obj); rb_singleton_class_attached(klass, obj);
if (BUILTIN_TYPE(obj) == T_CLASS) { if (BUILTIN_TYPE(obj) == T_CLASS) {
RBASIC(klass)->klass = klass; RBASIC(klass)->klass = klass;
if (FL_TEST(obj, FL_SINGLETON)) {
RCLASS(klass)->super = RBASIC(RCLASS(obj)->super)->klass;
}
} }
return klass; return klass;

View file

@ -149,7 +149,6 @@ rb_digest_base_become(copy, obj)
void *pctx1, *pctx2; void *pctx1, *pctx2;
VALUE klass; VALUE klass;
printf("Digest::Base::bacome\n");
if (copy = obj) return copy; if (copy = obj) return copy;
rb_check_frozen(copy); rb_check_frozen(copy);
algo = get_digest_base_metadata(CLASS_OF(klass)); algo = get_digest_base_metadata(CLASS_OF(klass));
@ -302,7 +301,6 @@ Init_digest()
cDigest_Base = rb_define_class_under(mDigest, "Base", rb_cObject); cDigest_Base = rb_define_class_under(mDigest, "Base", rb_cObject);
printf("Init_digest\n");
rb_define_singleton_method(cDigest_Base, "allocate", rb_digest_base_alloc, 0); rb_define_singleton_method(cDigest_Base, "allocate", rb_digest_base_alloc, 0);
rb_define_singleton_method(cDigest_Base, "digest", rb_digest_base_s_digest, 1); rb_define_singleton_method(cDigest_Base, "digest", rb_digest_base_s_digest, 1);
rb_define_singleton_method(cDigest_Base, "hexdigest", rb_digest_base_s_hexdigest, 1); rb_define_singleton_method(cDigest_Base, "hexdigest", rb_digest_base_s_hexdigest, 1);

View file

@ -26,6 +26,6 @@ Init_md5()
cDigest_MD5 = rb_define_class_under(mDigest, "MD5", cDigest_Base); cDigest_MD5 = rb_define_class_under(mDigest, "MD5", cDigest_Base);
rb_cvar_declare(cDigest_MD5, rb_intern("metadata"), rb_cvar_set(cDigest_MD5, rb_intern("metadata"),
Data_Wrap_Struct(rb_cObject, 0, 0, &md5)); Data_Wrap_Struct(rb_cObject, 0, 0, &md5), Qtrue);
} }

View file

@ -702,25 +702,18 @@ r_long(arg)
return x; return x;
} }
#define r_bytes2(s, len, arg) do { \ #define r_bytes(arg) r_bytes0(r_long(arg), (arg))
(len) = r_long(arg); \
(s) = ALLOCA_N(char,(len)+1); \
r_bytes0((s),(len),(arg)); \
} while (0)
#define r_bytes(s, arg) do { \ static VALUE
long r_bytes_len; \ r_bytes0(len, arg)
r_bytes2((s), r_bytes_len, (arg)); \
} while (0)
static void
r_bytes0(s, len, arg)
char *s;
long len; long len;
struct load_arg *arg; struct load_arg *arg;
{ {
VALUE str;
if (arg->fp) { if (arg->fp) {
if (rb_io_fread(s, len, arg->fp) != len) { str = rb_str_new(0, len);
if (rb_io_fread(RSTRING(str)->ptr, len, arg->fp) != len) {
too_short: too_short:
rb_raise(rb_eArgError, "marshal data too short"); rb_raise(rb_eArgError, "marshal data too short");
} }
@ -729,10 +722,10 @@ r_bytes0(s, len, arg)
if (arg->ptr + len > arg->end) { if (arg->ptr + len > arg->end) {
goto too_short; goto too_short;
} }
memcpy(s, arg->ptr, len); str = rb_str_new(arg->ptr, len);
arg->ptr += len; arg->ptr += len;
} }
s[len] = '\0'; return str;
} }
static ID static ID
@ -752,11 +745,9 @@ static ID
r_symreal(arg) r_symreal(arg)
struct load_arg *arg; struct load_arg *arg;
{ {
char *buf;
ID id; ID id;
r_bytes(buf, arg); id = rb_intern(RSTRING(r_bytes(arg))->ptr);
id = rb_intern(buf);
st_insert(arg->symbol, arg->symbol->num_entries, id); st_insert(arg->symbol, arg->symbol->num_entries, id);
return id; return id;
@ -783,11 +774,7 @@ static VALUE
r_string(arg) r_string(arg)
struct load_arg *arg; struct load_arg *arg;
{ {
char *buf; return r_bytes(arg);
long len;
r_bytes2(buf, len, arg);
return rb_str_new(buf, len);
} }
static VALUE static VALUE
@ -879,21 +866,20 @@ r_object0(arg, proc)
case TYPE_FLOAT: case TYPE_FLOAT:
{ {
char *buf;
double d, t = 0.0; double d, t = 0.0;
VALUE str = r_bytes(arg);
r_bytes(buf, arg); if (strcmp(RSTRING(str)->ptr, "nan") == 0) {
if (strcmp(buf, "nan") == 0) {
d = t / t; d = t / t;
} }
else if (strcmp(buf, "inf") == 0) { else if (strcmp(RSTRING(str)->ptr, "inf") == 0) {
d = 1.0 / t; d = 1.0 / t;
} }
else if (strcmp(buf, "-inf") == 0) { else if (strcmp(RSTRING(str)->ptr, "-inf") == 0) {
d = -1.0 / t; d = -1.0 / t;
} }
else { else {
d = strtod(buf, 0); d = strtod(RSTRING(str)->ptr, 0);
} }
v = rb_float_new(d); v = rb_float_new(d);
r_regist(v, arg); r_regist(v, arg);
@ -944,13 +930,9 @@ r_object0(arg, proc)
case TYPE_REGEXP: case TYPE_REGEXP:
{ {
char *buf; volatile VALUE str = r_bytes(arg);
long len; int options = r_byte(arg);
int options; v = r_regist(rb_reg_new(RSTRING(str)->ptr, RSTRING(str)->len, options), arg);
r_bytes2(buf, len, arg);
options = r_byte(arg);
v = r_regist(rb_reg_new(buf, len, options), arg);
} }
break; break;
@ -1077,19 +1059,17 @@ r_object0(arg, proc)
case TYPE_MODULE_OLD: case TYPE_MODULE_OLD:
{ {
char *buf; volatile VALUE str = r_bytes(arg);
r_bytes(buf, arg); v = r_regist(rb_path2class(RSTRING(str)->ptr), arg);
v = r_regist(rb_path2class(buf), arg);
} }
break; break;
case TYPE_CLASS: case TYPE_CLASS:
{ {
char *buf; volatile VALUE str = r_bytes(arg);
r_bytes(buf, arg); v = rb_path2class(RSTRING(str)->ptr);
v = rb_path2class(buf);
if (TYPE(v) != T_CLASS) { if (TYPE(v) != T_CLASS) {
rb_raise(rb_eTypeError, "%s is not a class", buf); rb_raise(rb_eTypeError, "%s is not a class", RSTRING(str)->ptr);
} }
r_regist(v, arg); r_regist(v, arg);
} }
@ -1097,11 +1077,10 @@ r_object0(arg, proc)
case TYPE_MODULE: case TYPE_MODULE:
{ {
char *buf; volatile VALUE str = r_bytes(arg);
r_bytes(buf, arg); v = rb_path2class(RSTRING(str)->ptr);
v = rb_path2class(buf);
if (TYPE(v) != T_MODULE) { if (TYPE(v) != T_MODULE) {
rb_raise(rb_eTypeError, "%s is not a module", buf); rb_raise(rb_eTypeError, "%s is not a module", RSTRING(str)->ptr);
} }
r_regist(v, arg); r_regist(v, arg);
} }

View file

@ -94,8 +94,12 @@ static void
copy_object(dest, obj) copy_object(dest, obj)
VALUE dest, obj; VALUE dest, obj;
{ {
RBASIC(dest)->flags &= ~(T_MASK|FL_EXIVAR|FL_TAINT); if (OBJ_FROZEN(dest)) {
rb_raise(rb_eTypeError, "[bug] frozen object (%s) allocated", rb_class2name(CLASS_OF(dest)));
}
RBASIC(dest)->flags &= ~(T_MASK|FL_EXIVAR);
RBASIC(dest)->flags |= RBASIC(obj)->flags & (T_MASK|FL_EXIVAR|FL_TAINT); RBASIC(dest)->flags |= RBASIC(obj)->flags & (T_MASK|FL_EXIVAR|FL_TAINT);
rb_funcall(dest, become, 1, obj);
if (FL_TEST(obj, FL_EXIVAR)) { if (FL_TEST(obj, FL_EXIVAR)) {
rb_copy_generic_ivar(dest, obj); rb_copy_generic_ivar(dest, obj);
} }
@ -123,10 +127,9 @@ rb_obj_clone(obj)
rb_raise(rb_eTypeError, "can't clone %s", rb_class2name(CLASS_OF(obj))); rb_raise(rb_eTypeError, "can't clone %s", rb_class2name(CLASS_OF(obj)));
} }
clone = rb_obj_alloc(rb_obj_class(obj)); clone = rb_obj_alloc(rb_obj_class(obj));
RBASIC(clone)->klass = rb_singleton_class_clone(obj);
copy_object(clone, obj); copy_object(clone, obj);
rb_funcall(clone, become, 1, obj); RBASIC(clone)->klass = rb_singleton_class_clone(obj);
RBASIC(clone)->flags = RBASIC(obj)->flags; RBASIC(clone)->flags = RBASIC(obj)->flags | FL_TEST(clone, FL_TAINT);
return clone; return clone;
} }
@ -142,7 +145,6 @@ rb_obj_dup(obj)
} }
dup = rb_obj_alloc(rb_obj_class(obj)); dup = rb_obj_alloc(rb_obj_class(obj));
copy_object(dup, obj); copy_object(dup, obj);
rb_funcall(dup, become, 1, obj);
return dup; return dup;
} }

20
parse.y
View file

@ -3345,23 +3345,29 @@ yylex()
} }
if (ISSPACE(c)){ if (ISSPACE(c)){
if (!IS_ARG()){ if (!IS_ARG()){
int c = 0; int c2 = 0;
switch (c) { switch (c) {
case ' ': case ' ':
c = 's'; c2 = 's';
break; break;
case '\n': case '\n':
c = 'n'; c2 = 'n';
break; break;
case '\t': case '\t':
c = 't'; c2 = 't';
break; break;
case '\v': case '\v':
c = 'v'; c2 = 'v';
break;
case '\r':
c2 = 'r';
break;
case '\f':
c2 = 'f';
break; break;
} }
if (c) { if (c2) {
rb_warn("invalid character syntax; use ?\\%c", c); rb_warn("invalid character syntax; use ?\\%c", c2);
} }
} }
ternary: ternary:

View file

@ -1,4 +1,4 @@
#define RUBY_VERSION "1.7.3" #define RUBY_VERSION "1.7.3"
#define RUBY_RELEASE_DATE "2002-09-03" #define RUBY_RELEASE_DATE "2002-09-04"
#define RUBY_VERSION_CODE 173 #define RUBY_VERSION_CODE 173
#define RUBY_RELEASE_CODE 20020903 #define RUBY_RELEASE_CODE 20020904