(
&mut self,
e: &KExpr<M>,
aux: &[FlatBlockMember<M>],
aux_ids: &[KId<M>],
block_us: &[KUniv<M>],
n_block_params: u64,
local_depth: u64,
)
| 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()); |
no test coverage detected