struct.c:64
VALUE
rb_struct_getmember(obj, id)
    VALUE obj;
    ID id;
{
    VALUE member, slot;
    long i;

    member = rb_struct_iv_get(rb_obj_class(obj), "__member__");
    if (NIL_P(member)) {
	rb_bug("uninitialized struct");
    }
    slot = ID2SYM(id);
    for (i=0; i<RARRAY(member)->len; i++) {
	if (RARRAY(member)->ptr[i] == slot) {
	    return RSTRUCT(obj)->ptr[i];
	}
    }
    rb_name_error(id, "%s is not struct member", rb_id2name(id));
    return Qnil;		/* not reached */
}
