+ a_map_delete(o);
+
+ return o;
+}
+
+/* ... ck_rv2xv (rv2av,rv2hv) .............................................. */
+
+/* Those ops also appear both inisde and at the root, hence the caveats for
+ * a_ck_deref() still apply here. Since a padsv/rv2sv must appear before a
+ * rv2[ah]v, resolution is handled by the first call to a_pp_deref() in the
+ * expression. */
+
+STATIC OP *(*a_old_ck_rv2av)(pTHX_ OP *) = 0;
+STATIC OP *(*a_old_ck_rv2hv)(pTHX_ OP *) = 0;
+
+STATIC OP *a_ck_rv2xv(pTHX_ OP *o) {
+ OP * (*old_ck)(pTHX_ OP *o) = 0;
+ OP * (*new_pp)(pTHX) = 0;
+ UV hint;
+
+ switch (o->op_type) {
+ case OP_RV2AV: old_ck = a_old_ck_rv2av; new_pp = a_pp_rv2av; break;
+ case OP_RV2HV: old_ck = a_old_ck_rv2hv; new_pp = a_pp_rv2hv; break;
+ }
+ o = CALL_FPTR(old_ck)(aTHX_ o);
+
+ if (cUNOPo->op_first->op_type == OP_GV)
+ return o;
+
+ hint = a_hint();
+ if (hint & A_HINT_DO && !(hint & A_HINT_STRICT)) {
+ a_map_store_root(o, o->op_ppaddr, hint);
+ o->op_ppaddr = new_pp;
+ } else
+ a_map_delete(o);