aboutsummaryrefslogtreecommitdiffstats
path: root/askama_shared/src/generator.rs
diff options
context:
space:
mode:
authorLibravatar Christian Vallentin <mail@vallentin.dev>2020-12-01 17:01:05 +0100
committerLibravatar GitHub <noreply@github.com>2020-12-01 17:01:05 +0100
commita199defeca2dfc6aa3e972acca82c96db07f99e9 (patch)
tree737d61c5e0766244e992e4f79d0311b515d1c6ec /askama_shared/src/generator.rs
parent266c606e39402a7c0cd357cdda8881e8f2ea417f (diff)
downloadaskama-a199defeca2dfc6aa3e972acca82c96db07f99e9.tar.gz
askama-a199defeca2dfc6aa3e972acca82c96db07f99e9.tar.bz2
askama-a199defeca2dfc6aa3e972acca82c96db07f99e9.zip
Improved if statement generation to avoid issues with implicit borrows (#392)
* Changed to automatically coerce to bool * Added new test case * Updated test case to include else if
Diffstat (limited to '')
-rw-r--r--askama_shared/src/generator.rs7
1 files changed, 7 insertions, 0 deletions
diff --git a/askama_shared/src/generator.rs b/askama_shared/src/generator.rs
index 3a91e3c..ad086a3 100644
--- a/askama_shared/src/generator.rs
+++ b/askama_shared/src/generator.rs
@@ -518,8 +518,15 @@ impl<'a, S: std::hash::BuildHasher> Generator<'a, S> {
buf.dedent()?;
buf.write("} else if ");
}
+ // The following syntax `*(&(...) as &bool)` is used to
+ // trigger Rust's automatic dereferencing, to coerce
+ // e.g. `&&&&&bool` to `bool`. First `&(...) as &bool`
+ // coerces e.g. `&&&bool` to `&bool`. Then `*(&bool)`
+ // finally dereferences it to `bool`.
+ buf.write("*(&(");
let expr_code = self.visit_expr_root(expr)?;
buf.write(&expr_code);
+ buf.write(") as &bool)");
}
None => {
buf.dedent()?;