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

Method try_replace_aux_ref_for_sort

crates/kernel/src/inductive.rs:880–940  ·  view source on GitHub ↗
(
    &mut self,
    e: &KExpr<M>,
    aux: &[FlatBlockMember<M>],
    aux_ids: &[KId<M>],
    block_us: &[KUniv<M>],
    n_block_params: u64,
    local_depth: u64,
  )

Source from the content-addressed store, hash-verified

878 )?;
879 KExpr::let_(n.clone(), ty2, val2, body2, *nd)
880 },
881 ExprData::Prj(id, field, val, _) => {
882 let val2 = self.replace_aux_refs_for_sort(
883 val,
884 aux,
885 aux_ids,
886 block_us,
887 n_block_params,
888 local_depth,
889 )?;
890 KExpr::prj(id.clone(), *field, val2)
891 },
892 _ => return Ok(e.clone()),
893 };
894 Ok(self.env.intern.intern_expr(result))
895 }
896
897 fn try_replace_aux_ref_for_sort(
898 &mut self,
899 e: &KExpr<M>,
900 aux: &[FlatBlockMember<M>],
901 aux_ids: &[KId<M>],
902 block_us: &[KUniv<M>],
903 n_block_params: u64,
904 local_depth: u64,
905 ) -> Result<Option<KExpr<M>>, TcError<M>> {
906 let (head, args) = collect_app_spine(e);
907 let head_id = match head.data() {
908 ExprData::Const(id, _, _) => id,
909 _ => return Ok(None),
910 };
911
912 for (idx, member) in aux.iter().enumerate() {
913 if member.id.addr != head_id.addr {
914 continue;
915 }
916 let own = u64_to_usize::<M>(member.own_params)?;
917 if args.len() < own || member.spec_params.len() != own {
918 continue;
919 }
920
921 let mut matched = true;
922 for (arg, sp) in args.iter().take(own).zip(member.spec_params.iter()) {
923 let sp_lifted = if local_depth > 0 {
924 lift(&mut self.env.intern, sp, local_depth, 0)
925 } else {
926 sp.clone()
927 };
928 if !self.is_def_eq(arg, &sp_lifted).unwrap_or(false) {
929 matched = false;
930 break;
931 }
932 }
933 if !matched {
934 continue;
935 }
936
937 let anon = || M::meta_field(ix_common::env::Name::anon());

Callers 1

Calls 12

collect_app_spineFunction · 0.85
liftFunction · 0.85
intern_exprMethod · 0.80
cnstFunction · 0.70
varFunction · 0.70
appFunction · 0.70
dataMethod · 0.45
iterMethod · 0.45
lenMethod · 0.45
takeMethod · 0.45
cloneMethod · 0.45
is_def_eqMethod · 0.45

Tested by

no test coverage detected