struct.c:472
static VALUE
rb_struct_aset_id(s, id, val)
    VALUE s, val;
    ID id;
{
    VALUE member;
    long i, len;

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

    rb_struct_modify(s);
    len = RARRAY(member)->len;
    for (i=0; i<len; i++) {
	if (SYM2ID(RARRAY(member)->ptr[i]) == id) {
	    RSTRUCT(s)->ptr[i] = val;
	    return val;
	}
    }
    rb_name_error(id, "no member '%s' in struct", rb_id2name(id));
}
