From ce5f356e7151bacfb9a9b9a6b81ac3fe91a25253 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 9 Sep 2009 02:55:09 +0000 Subject: * error.c (name_err_mesg_data_type): typed. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@24806 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- error.c | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) (limited to 'error.c') diff --git a/error.c b/error.c index aab3d6648..a7342de4e 100644 --- a/error.c +++ b/error.c @@ -769,22 +769,40 @@ nometh_err_initialize(int argc, VALUE *argv, VALUE self) } /* :nodoc: */ +#define NAME_ERR_MESG_COUNT 3 + static void -name_err_mesg_mark(VALUE *ptr) +name_err_mesg_mark(void *p) { - rb_gc_mark_locations(ptr, ptr+3); + VALUE *ptr = p; + rb_gc_mark_locations(ptr, ptr+NAME_ERR_MESG_COUNT); } +#define name_err_mesg_free RUBY_TYPED_DEFAULT_FREE + +static size_t +name_err_mesg_memsize(const void *p) +{ + return p ? (NAME_ERR_MESG_COUNT * sizeof(VALUE)) : 0; +} + +static const rb_data_type_t name_err_mesg_data_type = { + "name_err_mesg", + name_err_mesg_mark, + name_err_mesg_free, + name_err_mesg_memsize, +}; + /* :nodoc: */ static VALUE name_err_mesg_new(VALUE obj, VALUE mesg, VALUE recv, VALUE method) { - VALUE *ptr = ALLOC_N(VALUE, 3); + VALUE *ptr = ALLOC_N(VALUE, NAME_ERR_MESG_COUNT); ptr[0] = mesg; ptr[1] = recv; ptr[2] = method; - return Data_Wrap_Struct(rb_cNameErrorMesg, name_err_mesg_mark, -1, ptr); + return TypedData_Wrap_Struct(rb_cNameErrorMesg, &name_err_mesg_data_type, ptr); } /* :nodoc: */ @@ -798,9 +816,9 @@ name_err_mesg_equal(VALUE obj1, VALUE obj2) if (rb_obj_class(obj2) != rb_cNameErrorMesg) return Qfalse; - Data_Get_Struct(obj1, VALUE, ptr1); - Data_Get_Struct(obj2, VALUE, ptr2); - for (i=0; i<3; i++) { + TypedData_Get_Struct(obj1, VALUE, &name_err_mesg_data_type, ptr1); + TypedData_Get_Struct(obj2, VALUE, &name_err_mesg_data_type, ptr2); + for (i=0; i