struct.c:226
static VALUE
rb_struct_s_def(argc, argv, klass)
    int argc;
    VALUE *argv;
    VALUE klass;
{
    VALUE name, rest;
    long i;
    VALUE st;
    ID id;

    rb_scan_args(argc, argv, "1*", &name, &rest);
    for (i=0; i<RARRAY(rest)->len; i++) {
	id = rb_to_id(RARRAY(rest)->ptr[i]);
	RARRAY(rest)->ptr[i] = ID2SYM(id);
    }
    if (!NIL_P(name) && TYPE(name) != T_STRING) {
	id = rb_to_id(name);
	rb_ary_unshift(rest, ID2SYM(id));
	name = Qnil;
    }
    st = make_struct(name, rest, klass);

    return st;
}
