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

Function unshare_expr

crates/ffi/src/compile.rs:870–944  ·  view source on GitHub ↗
(
  expr: &Arc<IxonExpr>,
  sharing: &[Arc<IxonExpr>],
)

Source from the content-addressed store, hash-verified

868 results.push(e.clone());
869 }
870 },
871 IxonExpr::App(f, a) => {
872 stack.push(UnshareFrame::BuildApp);
873 stack.push(UnshareFrame::Visit(a));
874 stack.push(UnshareFrame::Visit(f));
875 },
876 IxonExpr::Lam(t, b) => {
877 stack.push(UnshareFrame::BuildLam);
878 stack.push(UnshareFrame::Visit(b));
879 stack.push(UnshareFrame::Visit(t));
880 },
881 IxonExpr::All(t, b) => {
882 stack.push(UnshareFrame::BuildAll);
883 stack.push(UnshareFrame::Visit(b));
884 stack.push(UnshareFrame::Visit(t));
885 },
886 IxonExpr::Let(nd, t, v, b) => {
887 stack.push(UnshareFrame::BuildLet(*nd));
888 stack.push(UnshareFrame::Visit(b));
889 stack.push(UnshareFrame::Visit(v));
890 stack.push(UnshareFrame::Visit(t));
891 },
892 IxonExpr::Prj(ti, fi, v) => {
893 stack.push(UnshareFrame::BuildPrj(*ti, *fi));
894 stack.push(UnshareFrame::Visit(v));
895 },
896 // Leaf nodes - no children to unshare
897 _ => results.push(e.clone()),
898 },
899 UnshareFrame::BuildApp => {
900 let a = results.pop().unwrap();
901 let f = results.pop().unwrap();
902 results.push(Arc::new(IxonExpr::App(f, a)));
903 },
904 UnshareFrame::BuildLam => {
905 let b = results.pop().unwrap();
906 let t = results.pop().unwrap();
907 results.push(Arc::new(IxonExpr::Lam(t, b)));
908 },
909 UnshareFrame::BuildAll => {
910 let b = results.pop().unwrap();
911 let t = results.pop().unwrap();
912 results.push(Arc::new(IxonExpr::All(t, b)));
913 },
914 UnshareFrame::BuildLet(nd) => {
915 let b = results.pop().unwrap();
916 let v = results.pop().unwrap();
917 let t = results.pop().unwrap();
918 results.push(Arc::new(IxonExpr::Let(nd, t, v, b)));
919 },
920 UnshareFrame::BuildPrj(ti, fi) => {
921 let v = results.pop().unwrap();
922 results.push(Arc::new(IxonExpr::Prj(ti, fi, v)));
923 },
924 }
925 }
926
927 results.pop().unwrap()

Callers 1

rs_get_pre_sharing_exprsFunction · 0.85

Calls 3

pushMethod · 0.80
lenMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected