From 1875d047ee17320ade9cacd6e0e0ffa33fcde534 Mon Sep 17 00:00:00 2001 From: schaeff Date: Mon, 31 May 2021 13:59:26 +0200 Subject: [PATCH 1/2] visit expression --- zokrates_core/src/static_analysis/variable_write_remover.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zokrates_core/src/static_analysis/variable_write_remover.rs b/zokrates_core/src/static_analysis/variable_write_remover.rs index fba777bf..82cc206e 100644 --- a/zokrates_core/src/static_analysis/variable_write_remover.rs +++ b/zokrates_core/src/static_analysis/variable_write_remover.rs @@ -310,12 +310,13 @@ impl<'ast, T: Field> Folder<'ast, T> for VariableWriteRemover { fn fold_statement(&mut self, s: TypedStatement<'ast, T>) -> Vec> { match s { TypedStatement::Definition(assignee, expr) => { + let expr = self.fold_expression(expr); + if is_constant(&assignee) { vec![TypedStatement::Definition(assignee, expr)] } else { // Note: here we redefine the whole object, ideally we would only redefine some of it // Example: `a[0][i] = 42` we redefine `a` but we could redefine just `a[0]` - let expr = self.fold_expression(expr); let (variable, indices) = linear(assignee); From 1accf7ba644613f16435464ddc65ff90d2e8daab Mon Sep 17 00:00:00 2001 From: schaeff Date: Mon, 31 May 2021 14:01:44 +0200 Subject: [PATCH 2/2] changelog --- changelogs/unreleased/904-schaeff | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelogs/unreleased/904-schaeff diff --git a/changelogs/unreleased/904-schaeff b/changelogs/unreleased/904-schaeff new file mode 100644 index 00000000..52bf85c6 --- /dev/null +++ b/changelogs/unreleased/904-schaeff @@ -0,0 +1 @@ +Fix variable write remover when isolating branches \ No newline at end of file