Return results from assigned regions

This makes it easier to pass variables out of a region.
This commit is contained in:
Jack Grigg 2021-01-29 00:52:55 +00:00
parent db0477a606
commit 3fc245343e
2 changed files with 10 additions and 10 deletions

View File

@ -154,9 +154,9 @@ pub trait Layouter<C: Chip> {
/// region.assign_advice(self.config.a, offset, || { Some(value)});
/// });
/// ```
fn assign_region<A, N, NR>(&mut self, name: N, assignment: A) -> Result<(), Error>
fn assign_region<A, AR, N, NR>(&mut self, name: N, assignment: A) -> Result<AR, Error>
where
A: FnMut(Region<'_, C>) -> Result<(), Error>,
A: FnMut(Region<'_, C>) -> Result<AR, Error>,
N: Fn() -> NR,
NR: Into<String>;
@ -202,9 +202,9 @@ impl<'a, C: Chip, L: Layouter<C> + 'a> Layouter<C> for NamespacedLayouter<'a, C,
self.0.config()
}
fn assign_region<A, N, NR>(&mut self, name: N, assignment: A) -> Result<(), Error>
fn assign_region<A, AR, N, NR>(&mut self, name: N, assignment: A) -> Result<AR, Error>
where
A: FnMut(Region<'_, C>) -> Result<(), Error>,
A: FnMut(Region<'_, C>) -> Result<AR, Error>,
N: Fn() -> NR,
NR: Into<String>,
{

View File

@ -106,9 +106,9 @@ impl<'a, C: Chip, CS: Assignment<C::Field> + 'a> Layouter<C> for SingleChip<'a,
&self.config
}
fn assign_region<A, N, NR>(&mut self, name: N, mut assignment: A) -> Result<(), Error>
fn assign_region<A, AR, N, NR>(&mut self, name: N, mut assignment: A) -> Result<AR, Error>
where
A: FnMut(Region<'_, C>) -> Result<(), Error>,
A: FnMut(Region<'_, C>) -> Result<AR, Error>,
N: Fn() -> NR,
NR: Into<String>,
{
@ -136,13 +136,13 @@ impl<'a, C: Chip, CS: Assignment<C::Field> + 'a> Layouter<C> for SingleChip<'a,
self.cs.enter_region(name);
let mut region = SingleChipRegion::new(self, region_index);
{
let result = {
let region: &mut dyn RegionLayouter<C> = &mut region;
assignment(region.into())?;
}
assignment(region.into())
}?;
self.cs.exit_region();
Ok(())
Ok(result)
}
fn get_root(&mut self) -> &mut Self::Root {