* struct.c (make_struct): use ID as name.  fixed: [ruby-dev:25249]


Index: struct.c
===================================================================
RCS file: /cvs/ruby/src/ruby/struct.c,v
retrieving revision 1.60
diff -U2 -p -r1.60 struct.c
--- struct.c	27 Sep 2004 04:46:54 -0000	1.60
+++ struct.c	18 Dec 2004 20:40:37 -0000
@@ -176,13 +176,13 @@ rb_struct_set(obj, val)
 
 static VALUE
-make_struct(name, members, klass)
-    VALUE name, members, klass;
+make_struct(id, members, klass)
+    ID id;
+    VALUE members, klass;
 {
     VALUE nstr;
-    ID id;
     long i;
 
     OBJ_FREEZE(members);
-    if (NIL_P(name)) {
+    if (!id) {
 	nstr = rb_class_new(klass);
 	rb_make_metaclass(nstr, RBASIC(klass)->klass);
@@ -190,6 +190,5 @@ make_struct(name, members, klass)
     }
     else {
-	char *cname = StringValuePtr(name);
-	id = rb_intern(cname);
+	char *cname = rb_id2name(id);
 	if (!rb_is_const_id(id)) {
 	    rb_name_error(id, "identifier %s needs to be constant", cname);
@@ -209,5 +208,5 @@ make_struct(name, members, klass)
     rb_define_singleton_method(nstr, "members", rb_struct_s_members_m, 0);
     for (i=0; i< RARRAY(members)->len; i++) {
-	ID id = SYM2ID(RARRAY(members)->ptr[i]);
+	id = SYM2ID(RARRAY(members)->ptr[i]);
 	if (i<10) {
 	    rb_define_method_id(nstr, id, ref_func[i], 0);
@@ -240,9 +239,10 @@ rb_struct_define(name, va_alist)
 {
     va_list ar;
-    VALUE nm, ary;
+    ID nm;
+    VALUE ary;
     char *mem;
 
-    if (!name) nm = Qnil;
-    else nm = rb_str_new2(name);
+    if (!name) nm = 0;
+    else nm = rb_intern(name);
     ary = rb_ary_new();
 
@@ -307,14 +307,15 @@ rb_struct_s_def(argc, argv, klass)
 	RARRAY(rest)->ptr[i] = ID2SYM(id);
     }
+    id = 0;
     if (!NIL_P(name)) {
 	VALUE tmp = rb_check_string_type(name);
 
+	id = rb_to_id(name);
 	if (NIL_P(tmp)) {
-	    id = rb_to_id(name);
 	    rb_ary_unshift(rest, ID2SYM(id));
-	    name = Qnil;
+	    id = 0;
 	}
     }
-    st = make_struct(name, rest, klass);
+    st = make_struct(id, rest, klass);
     if (rb_block_given_p()) {
 	rb_mod_module_eval(0, 0, st);
