struct.c:354
static VALUE
inspect_struct(s)
    VALUE s;
{
    char *cname = rb_class2name(rb_obj_class(s));
    VALUE str, member;
    long i;

    member = rb_struct_iv_get(rb_obj_class(s), "__member__");
    if (NIL_P(member)) {
	rb_bug("non-initialized struct");
    }

    str = rb_str_buf_new2("#<struct ");
    rb_str_cat2(str, cname);
    rb_str_cat2(str, " ");
    for (i=0; i<RSTRUCT(s)->len; i++) {
	VALUE str2, slot;
	char *p;

	if (i > 0) {
	    rb_str_cat2(str, ", ");
	}
	slot = RARRAY(member)->ptr[i];
	p = rb_id2name(SYM2ID(slot));
	rb_str_cat2(str, p);
	rb_str_cat2(str, "=");
	str2 = rb_inspect(RSTRUCT(s)->ptr[i]);
	rb_str_append(str, str2);
    }
    rb_str_cat2(str, ">");
    OBJ_INFECT(str, s);

    return str;
}
