remove dynamic inlining

This commit is contained in:
AF 2023-07-01 14:32:02 +00:00
parent 35a8308e9f
commit f7549c5691

View File

@ -10,88 +10,6 @@ use super::{
*,
};
pub type ResultDyn<A, I> = Result<(A, I), Vec<u8>>;
pub trait InCtxDyn<'a: 'c, 'c, Ctx: Context<'a>>: 'c {
fn idread_n(self, n: usize) -> ResultDyn<Vec<u8>, Box<dyn InCtxDyn<'a, 'c, Ctx>>>;
fn idread_all(self) -> Vec<u8>;
fn idtell(&self) -> usize;
fn idnext_address(self) -> ResultDyn<Address, Box<dyn InCtxDyn<'a, 'c, Ctx>>>;
fn idresolver(&self) -> Rc<dyn Resolver<'a, Ctx>>;
fn iddemote(self) -> Demoted<'a, 'c, Ctx>;
}
impl<'a: 'c, 'c, Ctx: Context<'a>, I: 'c + InCtx<'a, Ctx>> InCtxDyn<'a, 'c, Ctx> for I {
fn idread_n(self, n: usize) -> ResultDyn<Vec<u8>, Box<dyn InCtxDyn<'a, 'c, Ctx>>> {
let (vec, i) = self.iread_n(n, |slice| Vec::from(slice), |slice| Vec::from(slice))?;
Ok((vec, Box::new(i)))
}
fn idread_all(self) -> Vec<u8> {
self.iread_all(|slice| Vec::from(slice))
}
fn idtell(&self) -> usize {
self.itell()
}
fn idnext_address(self) -> ResultDyn<Address, Box<dyn InCtxDyn<'a, 'c, Ctx>>> {
let (address, i) = self.icnext_address(|slice| Vec::from(slice))?;
Ok((address, Box::new(i)))
}
fn idresolver(&self) -> Rc<dyn Resolver<'a, Ctx>> {
self.iresolver()
}
fn iddemote(self) -> Demoted<'a, 'c, Ctx> {
self.demote()
}
}
impl<'a: 'c, 'c, Ctx: Context<'a>> Inlining for Box<dyn InCtxDyn<'a, 'c, Ctx>> {
fn iread_n<A, E>(
self,
n: usize,
ok: impl FnOnce(&[u8]) -> A,
err: impl FnOnce(&[u8]) -> E,
) -> Result<(A, Self), E> {
let (vec, i) = self.idread_n(n).map_err(|vec| err(&vec))?;
Ok((ok(&vec), i))
}
fn iread_all<A>(self, ok: impl FnOnce(&[u8]) -> A) -> A {
ok(&self.idread_all())
}
fn itell(&self) -> usize {
self.idtell()
}
}
impl<'a: 'c, 'c, Ctx: Context<'a>> InCtx<'a, Ctx> for Box<dyn InCtxDyn<'a, 'c, Ctx>> {
fn icnext_address<E>(self, err: impl FnOnce(&[u8]) -> E) -> Result<(Address, Self), E> {
self.idnext_address().map_err(|vec| err(&vec))
}
fn iresolver(&self) -> Rc<dyn Resolver<'a, Ctx>> {
self.idresolver()
}
fn demote<'d>(self) -> Demoted<'a, 'd, Ctx>
where
'a: 'd,
Self: 'd,
{
self.iddemote()
}
}
pub type IParseResult<'a, Ctx, F, I> =
Result<(Mtbl<'a, Ctx, F>, I), <F as Factory<'a, Ctx>>::ParseError>;