zcopy(i_ctx_t *i_ctx_p)
{
    os_ptr op = osp;
    int type = r_type(op);

    if (type == t_integer)
        return zcopy_integer(i_ctx_p);
    check_op(2);
    switch (type) {
        case t_array:
        case t_string:
            return zcopy_interval(i_ctx_p);
        case t_dictionary:
            return zcopy_dict(i_ctx_p);
        default:
            return_op_typecheck(op);
    }
}
zcopy(i_ctx_t *i_ctx_p)
{
    os_ptr op = osp;
    int type = r_type(op);

    if (type == t_integer)
        return zcopy_integer(i_ctx_p);
    check_op(2);
    switch (type) {
        case t_array:
        case t_string:
            return zcopy_interval(i_ctx_p);
        case t_dictionary:
            return zcopy_dict(i_ctx_p);
        default:
            return_op_typecheck(op);
    }
}