ruby-changes:13059
From: nobu <ko1@a...>
Date: Wed, 9 Sep 2009 11:55:25 +0900 (JST)
Subject: [ruby-changes:13059] Ruby:r24806 (trunk): * error.c (name_err_mesg_data_type): typed.
nobu 2009-09-09 11:55:09 +0900 (Wed, 09 Sep 2009) New Revision: 24806 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24806 Log: * error.c (name_err_mesg_data_type): typed. Modified files: trunk/ChangeLog trunk/error.c Index: ChangeLog =================================================================== --- ChangeLog (revision 24805) +++ ChangeLog (revision 24806) @@ -1,10 +1,12 @@ -Wed Sep 9 11:45:58 2009 Nobuyoshi Nakada <nobu@r...> +Wed Sep 9 11:55:07 2009 Nobuyoshi Nakada <nobu@r...> * dir.c (dir_data_type): typed. * enumerator.c (enumerator_data_type): typed. (yielder_data_type, generator_data_type): ditto. + * error.c (name_err_mesg_data_type): typed. + Wed Sep 9 11:11:33 2009 Nobuyoshi Nakada <nobu@r...> * include/ruby/ruby.h (rb_data_type_struct): constified dsize. Index: error.c =================================================================== --- error.c (revision 24805) +++ error.c (revision 24806) @@ -769,22 +769,40 @@ } /* :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 @@ 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<NAME_ERR_MESG_COUNT; i++) { if (!rb_equal(ptr1[i], ptr2[i])) return Qfalse; } @@ -812,13 +830,13 @@ name_err_mesg_to_str(VALUE obj) { VALUE *ptr, mesg; - Data_Get_Struct(obj, VALUE, ptr); + TypedData_Get_Struct(obj, VALUE, &name_err_mesg_data_type, ptr); mesg = ptr[0]; if (NIL_P(mesg)) return Qnil; else { const char *desc = 0; - VALUE d = 0, args[3]; + VALUE d = 0, args[NAME_ERR_MESG_COUNT]; obj = ptr[1]; switch (TYPE(obj)) { @@ -847,7 +865,7 @@ args[0] = mesg; args[1] = ptr[2]; args[2] = d; - mesg = rb_f_sprintf(3, args); + mesg = rb_f_sprintf(NAME_ERR_MESG_COUNT, args); } if (OBJ_TAINTED(obj)) OBJ_TAINT(mesg); return mesg; @@ -1094,7 +1112,7 @@ rb_define_method(rb_eNameError, "name", name_err_name, 0); rb_define_method(rb_eNameError, "to_s", name_err_to_s, 0); rb_cNameErrorMesg = rb_define_class_under(rb_eNameError, "message", rb_cData); - rb_define_singleton_method(rb_cNameErrorMesg, "!", name_err_mesg_new, 3); + rb_define_singleton_method(rb_cNameErrorMesg, "!", name_err_mesg_new, NAME_ERR_MESG_COUNT); rb_define_method(rb_cNameErrorMesg, "==", name_err_mesg_equal, 1); rb_define_method(rb_cNameErrorMesg, "to_str", name_err_mesg_to_str, 0); rb_define_method(rb_cNameErrorMesg, "_dump", name_err_mesg_to_str, 1); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/