MCPcopy Create free account
hub / github.com/argumentcomputer/ix / merge

Function merge

crates/compile/src/compile.rs:2877–2911  ·  view source on GitHub ↗

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,
)

Source from the content-addressed store, hash-verified

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)")

Callers 2

build_ref_graphFunction · 0.70
sort_by_compareFunction · 0.70

Calls 5

compare_constFunction · 0.85
nextMethod · 0.80
pushMethod · 0.80
lenMethod · 0.45
takeMethod · 0.45

Tested by

no test coverage detected