#line 2 methmakename(__FILE__)

static void
THIS_OP_NAME(pTHX_ AV *av, const char *p_s, int dim, carray_form format)
{
    const TARG_ELT_TYPE *p = (TARG_ELT_TYPE *)p_s;
    array_stride tstride;
    array_count n;	/* Can't stop by inspecting p: stride may be 0 */

/*    p += mInd2ind(dim, ind, format);	*/
    if (!dim) {
	if (av) {
	  av_push(av, newSV_how(*p));
	} else {
	  dSP;

	  PUSHs(sv_2mortal(newSV_how(*p)));
	  PUTBACK;
	}
        return;
    }
    n = format[dim - 1].count;
    tstride =   format[dim - 1].stride;
  
    if (1 == dim) {
	if (av) {
	    I32 l = av_len(av);

	    av_extend(av, l + n);
            while (n--) {
                av_push(av, newSV_how(*p));
                p += tstride;
            }
	} else {
	    dSP;

	    EXTEND(SP, n);
            while (n--) {
                PUSHs(sv_2mortal(newSV_how(*p)));
                p += tstride;
            }
	    PUTBACK;
	}
    } else {
	if (av) {
            while (n--) {
		AV *av1 = newAV();	/* Will be extended by the callee */

                THIS_OP_NAME(aTHX_ av1, (char*)p, dim-1, format);
                av_push(av, newRV_noinc((SV*)av1));
                p += tstride;
            }
	} else {
	    dSP;
	    EXTEND(SP, n);
            while (n--) {
		AV *av1 = newAV();

                THIS_OP_NAME(aTHX_ av1, (char*)p, dim-1, format);
                PUSHs(sv_2mortal(newRV_noinc((SV*)av1)));
                p += tstride;
            }
	    PUTBACK;
	}
    }
}
