Merge two sorted sequences of mutual constants into one sorted sequence.
( left: Vec<&'a MutConst>, right: Vec<&'a MutConst>, ctx: &MutCtx, cache: &mut BlockCache, stt: &CompileState, )
| 2875 | match (x.as_data(), y.as_data()) { |
| 2876 | (ExprData::Mvar(..), _) | (_, ExprData::Mvar(..)) => { |
| 2877 | Err(CompileError::UnsupportedExpr { |
| 2878 | desc: "metavariable in comparison".into(), |
| 2879 | }) |
| 2880 | }, |
| 2881 | (ExprData::Fvar(..), _) | (_, ExprData::Fvar(..)) => { |
| 2882 | Err(CompileError::UnsupportedExpr { desc: "fvar in comparison".into() }) |
| 2883 | }, |
| 2884 | (ExprData::Mdata(_, x, _), ExprData::Mdata(_, y, _)) => { |
| 2885 | compare_expr(x, y, mut_ctx, x_lvls, y_lvls, stt) |
| 2886 | }, |
| 2887 | (ExprData::Mdata(_, x, _), _) => { |
| 2888 | compare_expr(x, y, mut_ctx, x_lvls, y_lvls, stt) |
| 2889 | }, |
| 2890 | (_, ExprData::Mdata(_, y, _)) => { |
| 2891 | compare_expr(x, y, mut_ctx, x_lvls, y_lvls, stt) |
| 2892 | }, |
| 2893 | (ExprData::Bvar(x, _), ExprData::Bvar(y, _)) => Ok(SOrd::cmp(x, y)), |
| 2894 | (ExprData::Bvar(..), _) => Ok(SOrd::lt(true)), |
| 2895 | (_, ExprData::Bvar(..)) => Ok(SOrd::gt(true)), |
| 2896 | (ExprData::Sort(x, _), ExprData::Sort(y, _)) => { |
| 2897 | compare_level(x, y, x_lvls, y_lvls) |
| 2898 | }, |
| 2899 | (ExprData::Sort(..), _) => Ok(SOrd::lt(true)), |
| 2900 | (_, ExprData::Sort(..)) => Ok(SOrd::gt(true)), |
| 2901 | (ExprData::Const(x, xls, _), ExprData::Const(y, yls, _)) => { |
| 2902 | let us = |
| 2903 | SOrd::try_zip(|a, b| compare_level(a, b, x_lvls, y_lvls), xls, yls)?; |
| 2904 | if us.ordering != Ordering::Equal { |
| 2905 | Ok(us) |
| 2906 | } else if x == y { |
| 2907 | Ok(SOrd::eq(true)) |
| 2908 | } else { |
| 2909 | match (mut_ctx.get(x), mut_ctx.get(y)) { |
| 2910 | (Some(nx), Some(ny)) => Ok(SOrd::weak_cmp(nx, ny)), |
| 2911 | (Some(..), _) => Ok(SOrd::lt(true)), |
| 2912 | (None, Some(..)) => Ok(SOrd::gt(true)), |
| 2913 | (None, None) => { |
| 2914 | compare_external_refs(x, y, stt, "compare_expr(Const)") |
no test coverage detected