diff options
author | Christian Vallentin <mail@vallentin.dev> | 2020-12-01 17:01:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-01 17:01:05 +0100 |
commit | a199defeca2dfc6aa3e972acca82c96db07f99e9 (patch) | |
tree | 737d61c5e0766244e992e4f79d0311b515d1c6ec /askama_shared | |
parent | 266c606e39402a7c0cd357cdda8881e8f2ea417f (diff) | |
download | askama-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.rs | 7 |
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()?; |