eliminate free function

This commit is contained in:
Solomon Ucko 2022-08-09 23:43:58 -04:00
parent 06ce35aa69
commit 96f7b1a5ef

View File

@ -10,28 +10,24 @@ macro_rules! logic_op {
$i:ident, $j:ident, $r:ident, $s:ident; $i:ident, $j:ident, $r:ident, $s:ident;
$inline_heap:tt, $heap_heap:tt $inline_heap:tt, $heap_heap:tt
) => { ) => {
fn $fun(a: &$typ, b: &$typ) -> $typ {
match (&a.0, &b.0) {
(&$typ_inner::Inline($i), &$typ_inner::Inline($j)) => {
$typ($typ_inner::Inline($i.$fun($j)))
}
(&$typ_inner::Inline($i), &$typ_inner::Heap(($r, $s)))
| (&$typ_inner::Heap(($r, $s)), &$typ_inner::Inline($i)) => {
$inline_heap
}
(&$typ_inner::Heap(($r, $s)), &$typ_inner::Heap(($i, $j))) => {
$heap_heap
}
}
}
impl<'a, 'b> $imp<&'a $typ> for &'b $typ { impl<'a, 'b> $imp<&'a $typ> for &'b $typ {
type Output = $typ; type Output = $typ;
fn $fun(self, rhs: &$typ) -> Self::Output { fn $fun(self, rhs: &$typ) -> Self::Output {
$fun(self, rhs) match (&self.0, &rhs.0) {
(&$typ_inner::Inline($i), &$typ_inner::Inline($j)) => {
$typ($typ_inner::Inline($i.$fun($j)))
}
(&$typ_inner::Inline($i), &$typ_inner::Heap(($r, $s)))
| (&$typ_inner::Heap(($r, $s)), &$typ_inner::Inline($i)) => {
$inline_heap
}
(&$typ_inner::Heap(($r, $s)), &$typ_inner::Heap(($i, $j))) => {
$heap_heap
}
}
} }
} }