ruby-changes:6103
From: akr <ko1@a...>
Date: Fri, 27 Jun 2008 21:57:05 +0900 (JST)
Subject: [ruby-changes:6103] Ruby:r17615 (ruby_1_8, trunk): * gc.c: __size__ removed. use the length of __members__ instead.
akr 2008-06-27 21:56:45 +0900 (Fri, 27 Jun 2008)
New Revision: 17615
Modified files:
branches/ruby_1_8/ChangeLog
branches/ruby_1_8/struct.c
trunk/ChangeLog
trunk/struct.c
Log:
* gc.c: __size__ removed. use the length of __members__ instead.
(num_members): new function.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=17615&r2=17614&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=17615&r2=17614&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/struct.c?r1=17615&r2=17614&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/struct.c?r1=17615&r2=17614&diff_format=u
Index: ChangeLog
===================================================================
--- ChangeLog (revision 17614)
+++ ChangeLog (revision 17615)
@@ -1,3 +1,8 @@
+Fri Jun 27 21:38:57 2008 Tanaka Akira <akr@f...>
+
+ * gc.c: __size__ removed. use the length of __members__ instead.
+ (num_members): new function.
+
Fri Jun 27 21:19:08 2008 Nobuyoshi Nakada <nobu@r...>
* test/inlinetest.rb (InlineTest.in_progname): workaround for frozen
Index: struct.c
===================================================================
--- struct.c (revision 17614)
+++ struct.c (revision 17615)
@@ -193,7 +193,6 @@
}
nstr = rb_define_class_under(klass, rb_id2name(id), klass);
}
- rb_iv_set(nstr, "__size__", LONG2NUM(RARRAY_LEN(members)));
rb_iv_set(nstr, "__members__", members);
rb_define_alloc_func(nstr, struct_alloc);
@@ -249,7 +248,6 @@
rb_class_inherited(super, klass);
}
- rb_iv_set(klass, "__size__", LONG2NUM(RARRAY_LEN(members)));
rb_iv_set(klass, "__members__", members);
if (alloc)
@@ -340,6 +338,17 @@
return st;
}
+static size_t
+num_members(VALUE klass)
+{
+ VALUE members;
+ members = rb_struct_iv_get(klass, "__members__");
+ if (TYPE(members) != T_ARRAY) {
+ rb_raise(rb_eTypeError, "broken members");
+ }
+ return RARRAY_LEN(members);
+}
+
/*
*/
@@ -347,12 +356,10 @@
rb_struct_initialize(VALUE self, VALUE values)
{
VALUE klass = rb_obj_class(self);
- VALUE size;
long n;
rb_struct_modify(self);
- size = rb_struct_iv_get(klass, "__size__");
- n = FIX2LONG(size);
+ n = num_members(klass);
if (n < RARRAY_LEN(values)) {
rb_raise(rb_eArgError, "struct size differs");
}
@@ -367,13 +374,11 @@
static VALUE
struct_alloc(VALUE klass)
{
- VALUE size;
long n;
NEWOBJ(st, struct RStruct);
OBJSETUP(st, klass, T_STRUCT);
- size = rb_struct_iv_get(klass, "__size__");
- n = FIX2LONG(size);
+ n = num_members(klass);
if (0 < n && n <= RSTRUCT_EMBED_LEN_MAX) {
RBASIC(st)->flags &= ~RSTRUCT_EMBED_LEN_MASK;
@@ -398,12 +403,11 @@
VALUE
rb_struct_new(VALUE klass, ...)
{
- VALUE sz, *mem;
+ VALUE *mem;
long size, i;
va_list args;
- sz = rb_struct_iv_get(klass, "__size__");
- size = FIX2LONG(sz);
+ size = num_members(klass);
mem = ALLOCA_N(VALUE, size);
va_start(args, klass);
for (i=0; i<size; i++) {
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog (revision 17614)
+++ ruby_1_8/ChangeLog (revision 17615)
@@ -1,3 +1,8 @@
+Fri Jun 27 21:38:57 2008 Tanaka Akira <akr@f...>
+
+ * gc.c: __size__ removed. use the length of __members__ instead.
+ (num_members): new function.
+
Fri Jun 27 15:05:06 2008 Nobuyoshi Nakada <nobu@r...>
* common.mk (-IF-NO-STRING-LITERAL-CONCATENATION-): make description
Index: ruby_1_8/struct.c
===================================================================
--- ruby_1_8/struct.c (revision 17614)
+++ ruby_1_8/struct.c (revision 17615)
@@ -206,7 +206,6 @@
}
nstr = rb_define_class_under(klass, rb_id2name(id), klass);
}
- rb_iv_set(nstr, "__size__", LONG2NUM(RARRAY(members)->len));
rb_iv_set(nstr, "__members__", members);
rb_define_alloc_func(nstr, struct_alloc);
@@ -326,6 +325,17 @@
return st;
}
+static size_t
+num_members(VALUE klass)
+{
+ VALUE members;
+ members = rb_struct_iv_get(klass, "__members__");
+ if (TYPE(members) != T_ARRAY) {
+ rb_raise(rb_eTypeError, "broken members");
+ }
+ return RARRAY_LEN(members);
+}
+
/*
*/
@@ -334,12 +344,10 @@
VALUE self, values;
{
VALUE klass = rb_obj_class(self);
- VALUE size;
long n;
rb_struct_modify(self);
- size = rb_struct_iv_get(klass, "__size__");
- n = FIX2LONG(size);
+ n = num_members(klass);
if (n < RARRAY(values)->len) {
rb_raise(rb_eArgError, "struct size differs");
}
@@ -355,13 +363,11 @@
struct_alloc(klass)
VALUE klass;
{
- VALUE size;
long n;
NEWOBJ(st, struct RStruct);
OBJSETUP(st, klass, T_STRUCT);
- size = rb_struct_iv_get(klass, "__size__");
- n = FIX2LONG(size);
+ n = num_members(klass);
st->ptr = ALLOC_N(VALUE, n);
rb_mem_clear(st->ptr, n);
@@ -386,12 +392,11 @@
va_dcl
#endif
{
- VALUE sz, *mem;
+ VALUE *mem;
long size, i;
va_list args;
- sz = rb_struct_iv_get(klass, "__size__");
- size = FIX2LONG(sz);
+ size = num_members(klass);
mem = ALLOCA_N(VALUE, size);
va_init_list(args, klass);
for (i=0; i<size; i++) {
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/