array.c:1834
static VALUE
rb_ary_or(ary1, ary2)
    VALUE ary1, ary2;
{
    VALUE hash, ary3;
    VALUE v;
    long i;

    ary2 = to_ary(ary2);
    ary3 = rb_ary_new2(RARRAY(ary1)->len+RARRAY(ary2)->len);
    hash = ary_make_hash(ary1, ary2);

    for (i=0; i<RARRAY(ary1)->len; i++) {
	v = RARRAY(ary1)->ptr[i];
	if (st_delete(RHASH(hash)->tbl, (st_data_t*)&v, 0)) {
	    rb_ary_push(ary3, RARRAY(ary1)->ptr[i]);
	}
    }
    for (i=0; i<RARRAY(ary2)->len; i++) {
	v = RARRAY(ary2)->ptr[i];
	if (st_delete(RHASH(hash)->tbl, (st_data_t*)&v, 0)) {
	    rb_ary_push(ary3, RARRAY(ary2)->ptr[i]);
	}
    }
    return ary3;
}
