From 880d7af47a66f021712eac17adffac2686d08aad Mon Sep 17 00:00:00 2001 From: matz Date: Fri, 3 Sep 2004 09:00:52 +0000 Subject: * struct.c (make_struct): remove redefining constant when conflict. [ruby-dev:24210] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6854 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- struct.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'struct.c') diff --git a/struct.c b/struct.c index e629f9827d..b47d647490 100644 --- a/struct.c +++ b/struct.c @@ -177,6 +177,10 @@ make_struct(name, member, klass) if (!rb_is_const_id(id)) { rb_name_error(id, "identifier %s needs to be constant", cname); } + if (rb_const_defined_at(klass, id)) { + rb_warn("redefining constant Struct::%s", cname); + rb_mod_remove_const(klass, ID2SYM(id)); + } nstr = rb_define_class_under(klass, cname, klass); } rb_iv_set(nstr, "__size__", LONG2NUM(RARRAY(member)->len)); @@ -455,6 +459,10 @@ inspect_struct(s) if (NIL_P(member)) { rb_bug("non-initialized struct"); } + if (RSTRUCT(s)->len != RARRAY(member)->len) { + rb_raise(rb_eTypeError, "struct size differs (%d required %d given)", + RARRAY(member)->len, RSTRUCT(s)->len); + } str = rb_str_buf_new2("#