diff options
| author | 2020-12-01 17:01:05 +0100 | |
|---|---|---|
| committer | 2020-12-01 17:01:05 +0100 | |
| commit | a199defeca2dfc6aa3e972acca82c96db07f99e9 (patch) | |
| tree | 737d61c5e0766244e992e4f79d0311b515d1c6ec /askama_shared/src | |
| 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()?;  | 
