diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-11-23 07:00:50 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-11-23 07:00:50 +0000 |
commit | 0d8956725284206788bae5fbd6ed032f186ad366 (patch) | |
tree | 766be5e92103ecf3001063b0ff5a703f95bfc3b9 | |
parent | 2109a52503eb61ef38b25aa2266f0313e7ad56ac (diff) |
* struct.c (rb_struct_alloc_noinit): new function.
(rb_struct_define_without_accessor): add allocator to the arguments.
* range.c (range_alloc): re-introduced using rb_struct_alloc_noinit.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14003 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | include/ruby/intern.h | 3 | ||||
-rw-r--r-- | range.c | 11 | ||||
-rw-r--r-- | struct.c | 13 |
4 files changed, 30 insertions, 4 deletions
@@ -1,3 +1,10 @@ +Fri Nov 23 15:59:04 2007 Tanaka Akira <akr@fsij.org> + + * struct.c (rb_struct_alloc_noinit): new function. + (rb_struct_define_without_accessor): add allocator to the arguments. + + * range.c (range_alloc): re-introduced using rb_struct_alloc_noinit. + Fri Nov 23 15:27:43 2007 Tanaka Akira <akr@fsij.org> * re.c (REG_CASESTATE): unused macro removed. diff --git a/include/ruby/intern.h b/include/ruby/intern.h index 7af65d414f..20ba6ef55b 100644 --- a/include/ruby/intern.h +++ b/include/ruby/intern.h @@ -542,7 +542,8 @@ VALUE rb_struct_getmember(VALUE, ID); VALUE rb_struct_iv_get(VALUE, const char*); VALUE rb_struct_s_members(VALUE); VALUE rb_struct_members(VALUE); -VALUE rb_struct_define_without_accessor(char *, VALUE, ...); +VALUE rb_struct_alloc_noinit(VALUE); +VALUE rb_struct_define_without_accessor(char *, VALUE, rb_alloc_func_t, ...); /* thread.c */ typedef void rb_unblock_function_t(void *); typedef VALUE rb_blocking_function_t(void *); @@ -816,6 +816,14 @@ range_loader(VALUE range, VALUE obj) return range; } +static VALUE +range_alloc(VALUE klass) +{ + /* rb_struct_alloc_noinit itself should not be used because + * rb_marshal_define_compat uses equality of allocaiton function */ + return rb_struct_alloc_noinit(klass); +} + /* A <code>Range</code> represents an interval---a set of values with a * start and an end. Ranges may be constructed using the * <em>s</em><code>..</code><em>e</em> and @@ -879,7 +887,8 @@ Init_Range(void) id_end = rb_intern("end"); id_excl = rb_intern("excl"); - rb_cRange = rb_struct_define_without_accessor("Range", rb_cObject, + rb_cRange = rb_struct_define_without_accessor( + "Range", rb_cObject, range_alloc, "begin", "end", "excl", NULL); rb_include_module(rb_cRange, rb_mEnumerable); @@ -218,7 +218,13 @@ make_struct(VALUE name, VALUE members, VALUE klass) } VALUE -rb_struct_define_without_accessor(char *class_name, VALUE super, ...) +rb_struct_alloc_noinit(VALUE klass) +{ + return struct_alloc(klass); +} + +VALUE +rb_struct_define_without_accessor(char *class_name, VALUE super, rb_alloc_func_t alloc, ...) { VALUE klass; va_list ar; @@ -247,7 +253,10 @@ rb_struct_define_without_accessor(char *class_name, VALUE super, ...) rb_iv_set(klass, "__size__", LONG2NUM(RARRAY_LEN(members))); rb_iv_set(klass, "__members__", members); - rb_define_alloc_func(klass, struct_alloc); + if (alloc) + rb_define_alloc_func(klass, alloc); + else + rb_define_alloc_func(klass, struct_alloc); return klass; } |