From 3fc245343e3dd3eba7572e18213312669dd12101 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Fri, 29 Jan 2021 00:52:55 +0000 Subject: [PATCH] Return results from assigned regions This makes it easier to pass variables out of a region. --- src/circuit.rs | 8 ++++---- src/circuit/layouter.rs | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/circuit.rs b/src/circuit.rs index 562246f..e9ad299 100644 --- a/src/circuit.rs +++ b/src/circuit.rs @@ -154,9 +154,9 @@ pub trait Layouter { /// region.assign_advice(self.config.a, offset, || { Some(value)}); /// }); /// ``` - fn assign_region(&mut self, name: N, assignment: A) -> Result<(), Error> + fn assign_region(&mut self, name: N, assignment: A) -> Result where - A: FnMut(Region<'_, C>) -> Result<(), Error>, + A: FnMut(Region<'_, C>) -> Result, N: Fn() -> NR, NR: Into; @@ -202,9 +202,9 @@ impl<'a, C: Chip, L: Layouter + 'a> Layouter for NamespacedLayouter<'a, C, self.0.config() } - fn assign_region(&mut self, name: N, assignment: A) -> Result<(), Error> + fn assign_region(&mut self, name: N, assignment: A) -> Result where - A: FnMut(Region<'_, C>) -> Result<(), Error>, + A: FnMut(Region<'_, C>) -> Result, N: Fn() -> NR, NR: Into, { diff --git a/src/circuit/layouter.rs b/src/circuit/layouter.rs index 6f1a348..88ad9cc 100644 --- a/src/circuit/layouter.rs +++ b/src/circuit/layouter.rs @@ -106,9 +106,9 @@ impl<'a, C: Chip, CS: Assignment + 'a> Layouter for SingleChip<'a, &self.config } - fn assign_region(&mut self, name: N, mut assignment: A) -> Result<(), Error> + fn assign_region(&mut self, name: N, mut assignment: A) -> Result where - A: FnMut(Region<'_, C>) -> Result<(), Error>, + A: FnMut(Region<'_, C>) -> Result, N: Fn() -> NR, NR: Into, { @@ -136,13 +136,13 @@ impl<'a, C: Chip, CS: Assignment + 'a> Layouter for SingleChip<'a, self.cs.enter_region(name); let mut region = SingleChipRegion::new(self, region_index); - { + let result = { let region: &mut dyn RegionLayouter = &mut region; - assignment(region.into())?; - } + assignment(region.into()) + }?; self.cs.exit_region(); - Ok(()) + Ok(result) } fn get_root(&mut self) -> &mut Self::Root {