- if (shift || do_shift) {
- if (!res[n]) {
- res[n] = newHV();
- sv_setiv(temp, shift);
- sn_store_ent(res[n], temp, newSViv(1), 0);
- } else {
- o = 1 - n;
- if (!res[o])
- res[o] = newHV();
- else
- hv_clear(res[o]);
- list1 = hv_delete(res[n], "list", 4, 0);
- hv_iterinit(res[n]);
- while (key = hv_iternext(res[n])) {
- sv_setiv(temp, SvUV(HeSVKEY_force(key)) + shift);
- sn_store_ent(res[o], temp, newSVsv(HeVAL(key)), 0);
- }
- if (list1)
- sn_store(res[o], "list", 4, newSVsv(list1), sn_hash_list);
- n = o;
- }
- } else if (!res[0] && !res[1])
- XSRETURN_UNDEF;
+ SvREFCNT_dec(res[2]);
+ if (pe)
+ sn_store(res[n], "exit", 4, newSVnv(pe), sn_hash_exit);
+ if (pl)
+ sn_store(res[n], "list", 4, newSVnv(pl), sn_hash_list);