[INFO] cloning repository https://github.com/arbaregni/BasicTranspilation
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/arbaregni/BasicTranspilation" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Farbaregni%2FBasicTranspilation", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Farbaregni%2FBasicTranspilation'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] a2f184f37868b378a5bbe94e4e7888dcf393d089
[INFO] testing arbaregni/BasicTranspilation against beta-2026-03-05 for beta-1.95-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Farbaregni%2FBasicTranspilation" "/workspace/builds/worker-0-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/arbaregni/BasicTranspilation
[INFO] finished tweaking git repo https://github.com/arbaregni/BasicTranspilation
[INFO] tweaked toml for git repo https://github.com/arbaregni/BasicTranspilation written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/arbaregni/BasicTranspilation on toolchain beta-2026-03-05
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2026-03-05" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/arbaregni/BasicTranspilation already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2026-03-05" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: no edition set: defaulting to the 2015 edition while the latest is 2024
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-03-05" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 09579126f889de9ea423b907745eed30da1dcf2bda02005227bb6750ecff1f45
[INFO] running `Command { std: "docker" "start" "-a" "09579126f889de9ea423b907745eed30da1dcf2bda02005227bb6750ecff1f45", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "09579126f889de9ea423b907745eed30da1dcf2bda02005227bb6750ecff1f45", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "09579126f889de9ea423b907745eed30da1dcf2bda02005227bb6750ecff1f45", kill_on_drop: false }`
[INFO] [stdout] 09579126f889de9ea423b907745eed30da1dcf2bda02005227bb6750ecff1f45
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2026-03-05" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 1f5c638cece060191c5ae69a5f0633edcefce3be5edd810e023d395cf5241ad4
[INFO] running `Command { std: "docker" "start" "-a" "1f5c638cece060191c5ae69a5f0633edcefce3be5edd810e023d395cf5241ad4", kill_on_drop: false }`
[INFO] [stderr] warning: no edition set: defaulting to the 2015 edition while the latest is 2024
[INFO] [stderr]    Compiling take_mut v0.2.2
[INFO] [stderr]    Compiling BasicTranspilation v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error[E0425]: cannot find value `at` in this scope
[INFO] [stdout]   --> src/mir.rs:33:50
[INFO] [stdout]    |
[INFO] [stdout] 33 |                 mir.push(MirStmnt::WriteAtFixed {at, expr});
[INFO] [stdout]    |                                                  ^^
[INFO] [stdout]    |
[INFO] [stdout] help: the binding `at` is available in a different scope in the same function
[INFO] [stdout]   --> src/mir.rs:26:21
[INFO] [stdout]    |
[INFO] [stdout] 26 |                 let at = self.prealloc();
[INFO] [stdout]    |                     ^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find type `MirSymbol` in this scope
[INFO] [stdout]   --> src/mir.rs:96:52
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub fn make_all_mir(m: &mut Manager) -> Result<Vec<MirSymbol>, Error> {
[INFO] [stdout]    |                                                    ^^^^^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: you might be missing a type parameter
[INFO] [stdout]    |
[INFO] [stdout] 96 | pub fn make_all_mir<MirSymbol>(m: &mut Manager) -> Result<Vec<MirSymbol>, Error> {
[INFO] [stdout]    |                    +++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sexpr`
[INFO] [stdout]  --> src/mir.rs:1:13
[INFO] [stdout]   |
[INFO] [stdout] 1 | use sexpr::{Sexpr, SexprId, SexprKind};
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no variant named `Builtin` found for enum `sexpr::SexprKind`
[INFO] [stdout]   --> src/mir.rs:76:24
[INFO] [stdout]    |
[INFO] [stdout] 76 |             SexprKind::Builtin {..} => {
[INFO] [stdout]    |                        ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/sexpr.rs:13:1
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub enum SexprKind {
[INFO] [stdout]    | ------------------ variant `Builtin` not found here
[INFO] [stdout]    |
[INFO] [stdout] help: there is a variant with a similar name (notice the capitalization)
[INFO] [stdout]    |
[INFO] [stdout] 76 -             SexprKind::Builtin {..} => {
[INFO] [stdout] 76 +             SexprKind::BuiltIn {..} => {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `prealloc` found for reference `&Manager` in the current scope
[INFO] [stdout]   --> src/mir.rs:26:31
[INFO] [stdout]    |
[INFO] [stdout] 26 |                 let at = self.prealloc();
[INFO] [stdout]    |                               ^^^^^^^^ method not found in `&Manager`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `sexpr::SexprId` cannot be dereferenced
[INFO] [stdout]   --> src/mir.rs:27:42
[INFO] [stdout]    |
[INFO] [stdout] 27 |                 let expr = self.make_mir(*expr, mir);
[INFO] [stdout]    |                                          ^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/mir.rs:28:54
[INFO] [stdout]    |
[INFO] [stdout] 28 |                 mir.push(MirStmnt::WriteAtFixed {at, expr});
[INFO] [stdout]    |                                                      ^^^^ expected `MirExpr`, found `Result<MirExpr, Error>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected struct `MirExpr`
[INFO] [stdout]                 found enum `Result<MirExpr, util::Error>`
[INFO] [stdout] help: use the `?` operator to extract the `Result<MirExpr, util::Error>` value, propagating a `Result::Err` value to the caller
[INFO] [stdout]    |
[INFO] [stdout] 28 |                 mir.push(MirStmnt::WriteAtFixed {at, expr: expr?});
[INFO] [stdout]    |                                                          +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `sexpr::SexprId` cannot be dereferenced
[INFO] [stdout]   --> src/mir.rs:29:31
[INFO] [stdout]    |
[INFO] [stdout] 29 |                 self.make_mir(*body, mir);
[INFO] [stdout]    |                               ^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `sexpr::SexprId` cannot be dereferenced
[INFO] [stdout]   --> src/mir.rs:32:42
[INFO] [stdout]    |
[INFO] [stdout] 32 |                 let expr = self.make_mir(*expr, mir);
[INFO] [stdout]    |                                          ^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/mir.rs:33:54
[INFO] [stdout]    |
[INFO] [stdout] 33 |                 mir.push(MirStmnt::WriteAtFixed {at, expr});
[INFO] [stdout]    |                                                      ^^^^ expected `MirExpr`, found `Result<MirExpr, Error>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected struct `MirExpr`
[INFO] [stdout]                 found enum `Result<MirExpr, util::Error>`
[INFO] [stdout] help: use the `?` operator to extract the `Result<MirExpr, util::Error>` value, propagating a `Result::Err` value to the caller
[INFO] [stdout]    |
[INFO] [stdout] 33 |                 mir.push(MirStmnt::WriteAtFixed {at, expr: expr?});
[INFO] [stdout]    |                                                          +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `sexpr::SexprId` cannot be dereferenced
[INFO] [stdout]   --> src/mir.rs:36:47
[INFO] [stdout]    |
[INFO] [stdout] 36 |                 let predicate = self.make_mir(*predicate, mir);
[INFO] [stdout]    |                                               ^^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `sexpr::SexprId` cannot be dereferenced
[INFO] [stdout]   --> src/mir.rs:38:45
[INFO] [stdout]    |
[INFO] [stdout] 38 |                 let if_expr = self.make_mir(*if_branch, &mut if_stmnts);
[INFO] [stdout]    |                                             ^^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `sexpr::SexprId` cannot be dereferenced
[INFO] [stdout]   --> src/mir.rs:40:47
[INFO] [stdout]    |
[INFO] [stdout] 40 |                 let else_expr = self.make_mir(*else_branch, &mut else_stmnts);
[INFO] [stdout]    |                                               ^^^^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/mir.rs:41:44
[INFO] [stdout]    |
[INFO] [stdout] 41 |                 mir.push(MirStmnt::IfBlock{predicate, if_stmnts, if_expr, else_stmnts, else_expr});
[INFO] [stdout]    |                                            ^^^^^^^^^ expected `MirExpr`, found `Result<MirExpr, Error>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected struct `MirExpr`
[INFO] [stdout]                 found enum `Result<MirExpr, util::Error>`
[INFO] [stdout] help: use the `?` operator to extract the `Result<MirExpr, util::Error>` value, propagating a `Result::Err` value to the caller
[INFO] [stdout]    |
[INFO] [stdout] 41 |                 mir.push(MirStmnt::IfBlock{predicate: predicate?, if_stmnts, if_expr, else_stmnts, else_expr});
[INFO] [stdout]    |                                                     ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/mir.rs:41:66
[INFO] [stdout]    |
[INFO] [stdout] 41 |                 mir.push(MirStmnt::IfBlock{predicate, if_stmnts, if_expr, else_stmnts, else_expr});
[INFO] [stdout]    |                                                                  ^^^^^^^ expected `MirExpr`, found `Result<MirExpr, Error>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected struct `MirExpr`
[INFO] [stdout]                 found enum `Result<MirExpr, util::Error>`
[INFO] [stdout] help: use the `?` operator to extract the `Result<MirExpr, util::Error>` value, propagating a `Result::Err` value to the caller
[INFO] [stdout]    |
[INFO] [stdout] 41 |                 mir.push(MirStmnt::IfBlock{predicate, if_stmnts, if_expr: if_expr?, else_stmnts, else_expr});
[INFO] [stdout]    |                                                                         ++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/mir.rs:41:88
[INFO] [stdout]    |
[INFO] [stdout] 41 |                 mir.push(MirStmnt::IfBlock{predicate, if_stmnts, if_expr, else_stmnts, else_expr});
[INFO] [stdout]    |                                                                                        ^^^^^^^^^ expected `MirExpr`, found `Result<MirExpr, Error>`
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected struct `MirExpr`
[INFO] [stdout]                 found enum `Result<MirExpr, util::Error>`
[INFO] [stdout] help: use the `?` operator to extract the `Result<MirExpr, util::Error>` value, propagating a `Result::Err` value to the caller
[INFO] [stdout]    |
[INFO] [stdout] 41 |                 mir.push(MirStmnt::IfBlock{predicate, if_stmnts, if_expr, else_stmnts, else_expr: else_expr?});
[INFO] [stdout]    |                                                                                                 ++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 2 arguments but 1 argument was supplied
[INFO] [stdout]   --> src/mir.rs:48:26
[INFO] [stdout]    |
[INFO] [stdout] 48 |                     self.make_mir(**statement)?;
[INFO] [stdout]    |                          ^^^^^^^^------------- argument #2 of type `&mut Vec<MirStmnt>` is missing
[INFO] [stdout]    |
[INFO] [stdout] note: method defined here
[INFO] [stdout]   --> src/mir.rs:22:8
[INFO] [stdout]    |
[INFO] [stdout] 22 |     fn make_mir(&self, sexpr_id: SexprId, mir: &mut Vec<MirStmnt>) -> Result<MirExpr, Error> {
[INFO] [stdout]    |        ^^^^^^^^                           -----------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]    |
[INFO] [stdout] 48 |                     self.make_mir(**statement, /* &mut Vec<MirStmnt> */)?;
[INFO] [stdout]    |                                              ++++++++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0223]: ambiguous associated type
[INFO] [stdout]   --> src/mir.rs:80:24
[INFO] [stdout]    |
[INFO] [stdout] 80 |                 return MirExpr::ReadAtFixed{};
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if there were a trait named `Example` with associated type `ReadAtFixed` implemented for `MirExpr`, you could use the fully-qualified path
[INFO] [stdout]    |
[INFO] [stdout] 80 -                 return MirExpr::ReadAtFixed{};
[INFO] [stdout] 80 +                 return <MirExpr as Example>::ReadAtFixed{};
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated
[INFO] [stdout]   --> src/main.rs:61:29
[INFO] [stdout]    |
[INFO] [stdout] 61 |     let mut out_writer: Box<Write> = match maybe_path {
[INFO] [stdout]    |                             ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2021/warnings-promoted-to-error.html>
[INFO] [stdout]    = note: `#[warn(bare_trait_objects)]` (part of `#[warn(rust_2021_compatibility)]`) on by default
[INFO] [stdout] help: if this is a dyn-compatible trait, use `dyn`
[INFO] [stdout]    |
[INFO] [stdout] 61 |     let mut out_writer: Box<dyn Write> = match maybe_path {
[INFO] [stdout]    |                             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `self.udt_manager` as mutable more than once at a time
[INFO] [stdout]    --> src/parser.rs:209:38
[INFO] [stdout]     |
[INFO] [stdout] 208 |         Ok(self.push_new_sexpr(
[INFO] [stdout]     |            ---- -------------- first borrow later used by call
[INFO] [stdout]     |            |
[INFO] [stdout]     |            first mutable borrow occurs here
[INFO] [stdout] 209 |             SexprKind::StructDef{id: self.udt_manager.declare_type(head, name, arguments, signature)?},
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout]     |
[INFO] [stdout] help: try adding a local storing this argument...
[INFO] [stdout]    --> src/parser.rs:209:38
[INFO] [stdout]     |
[INFO] [stdout] 209 |             SexprKind::StructDef{id: self.udt_manager.declare_type(head, name, arguments, signature)?},
[INFO] [stdout]     |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] help: ...and then using that local as the argument to this call
[INFO] [stdout]    --> src/parser.rs:208:12
[INFO] [stdout]     |
[INFO] [stdout] 208 |           Ok(self.push_new_sexpr(
[INFO] [stdout]     |  ____________^
[INFO] [stdout] 209 | |             SexprKind::StructDef{id: self.udt_manager.declare_type(head, name, arguments, signature)?},
[INFO] [stdout] 210 | |             head
[INFO] [stdout] 211 | |         ))
[INFO] [stdout]     | |_________^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `self.func_manager` as mutable more than once at a time
[INFO] [stdout]    --> src/parser.rs:251:43
[INFO] [stdout]     |
[INFO] [stdout] 250 |         Ok(self.push_new_sexpr(
[INFO] [stdout]     |            ---- -------------- first borrow later used by call
[INFO] [stdout]     |            |
[INFO] [stdout]     |            first mutable borrow occurs here
[INFO] [stdout] 251 |             SexprKind::FuncDef { func_id: self.func_manager.declare_func(name, arguments, signature, out_type, body)? },
[INFO] [stdout]     |                                           ^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout]     |
[INFO] [stdout] help: try adding a local storing this argument...
[INFO] [stdout]    --> src/parser.rs:251:43
[INFO] [stdout]     |
[INFO] [stdout] 251 |             SexprKind::FuncDef { func_id: self.func_manager.declare_func(name, arguments, signature, out_type, body)? },
[INFO] [stdout]     |                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] help: ...and then using that local as the argument to this call
[INFO] [stdout]    --> src/parser.rs:250:12
[INFO] [stdout]     |
[INFO] [stdout] 250 |           Ok(self.push_new_sexpr(
[INFO] [stdout]     |  ____________^
[INFO] [stdout] 251 | |             SexprKind::FuncDef { func_id: self.func_manager.declare_func(name, arguments, signature, out_type, body)? },
[INFO] [stdout] 252 | |             head
[INFO] [stdout] 253 | |         ))
[INFO] [stdout]     | |_________^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:195:37
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] 194 |                 SexprKind::Declare {ref variable_pattern, expr, body} => {
[INFO] [stdout] 195 |                     let expr_type = self.type_check(*expr)?;
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:196:21
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     self.inform_var_type(self.scope_of(*body), variable_pattern, &expr_type);
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:197:21
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 197 |                     self.type_check(*body)?
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:204:37
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 204 |                     let expr_type = self.type_check(*expr)?;
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:211:42
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 211 |                     let predicate_type = self.type_check(*predicate)?;
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:215:34
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 215 |                     let if_type= self.type_check(*if_branch)?;
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:216:37
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 216 |                     let else_type = self.type_check(*else_branch)?;
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:223:42
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 223 |                     let predicate_type = self.type_check(*predicate)?;
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:227:21
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 227 |                     self.type_check(*body)?
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:232:42
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 232 |                         statement_type = self.type_check(statements[i])?;
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:238:37
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 238 |                     let body_type = self.type_check(self.func_manager.body[*func_id])?;
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow data in a `&` reference as mutable
[INFO] [stdout]    --> src/type_checker.rs:253:40
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                   ---------------------------- this cannot be borrowed as mutable
[INFO] [stdout] ...
[INFO] [stdout] 253 |                 SexprKind::StructGet { ref mut id, expr, ref field } => {
[INFO] [stdout]     |                                        ^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:254:37
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 254 |                     let expr_type = self.type_check(*expr)?;
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow data in a `&` reference as mutable
[INFO] [stdout]    --> src/type_checker.rs:267:40
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                   ---------------------------- this cannot be borrowed as mutable
[INFO] [stdout] ...
[INFO] [stdout] 267 |                 SexprKind::StructSet { ref mut id, expr, ref field, value } => {
[INFO] [stdout]     |                                        ^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:268:37
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 268 |                     let expr_type = self.type_check(*expr)?;
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:276:42
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 276 |                         let value_type = self.type_check(*value)?;
[INFO] [stdout]     |                                          ^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow data in a `&` reference as mutable
[INFO] [stdout]    --> src/type_checker.rs:285:37
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                   ---------------------------- this cannot be borrowed as mutable
[INFO] [stdout] ...
[INFO] [stdout] 285 |                 SexprKind::Format { ref mut exprs } => {
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:287:25
[INFO] [stdout]     |
[INFO] [stdout] 193 |             match & *self.sexpr(sexpr_id).kind {
[INFO] [stdout]     |                      --------------------
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      immutable borrow occurs here
[INFO] [stdout]     |                      a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 287 |                         self.type_check(**expr)?;
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 306 |         };
[INFO] [stdout]     |          - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `Ref<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scope_id`
[INFO] [stdout]    --> src/type_checker.rs:299:37
[INFO] [stdout]     |
[INFO] [stdout] 299 |                         .and_then(|(scope_id, v_index)| self.scope(self.scope_of(sexpr_id)).variable_types[v_index].clone())
[INFO] [stdout]     |                                     ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_scope_id`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*m` as mutable because it is also borrowed as immutable
[INFO] [stdout]    --> src/type_checker.rs:315:9
[INFO] [stdout]     |
[INFO] [stdout] 314 |      for ref sexpr_id in &m.top_level_sexprs { // iterate over all sexprs
[INFO] [stdout]     |                          -------------------
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          immutable borrow occurs here
[INFO] [stdout]     |                          immutable borrow later used here
[INFO] [stdout] 315 |         m.type_check(**sexpr_id)?;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:15:29
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 15 |                 let child = self.create_child(self.scope_of(sexpr_id));
[INFO] [stdout]    |                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:16:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 16 |                 self.bind_variable(child, variable_pattern.to_string(), None);
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:17:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 17 |                 self.create_scope(expr, parent)?;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:18:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 18 |                 self.create_scope(body, child)?;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:24:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 24 |                 self.create_scope(expr, parent)?;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:27:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 27 |                 self.create_scope(predicate, parent)?;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:28:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 28 |                 self.create_scope(if_branch, parent)?;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:29:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 29 |                 self.create_scope(else_branch, parent)?;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:32:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 32 |                 self.create_scope(predicate, parent)?;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:33:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 33 |                 self.create_scope(body, parent)?;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:37:21
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 37 |                     self.create_scope(**statement, parent)?;
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:41:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 41 |                 self.create_scope(expr, parent)?;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:44:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 44 |                 self.create_scope(expr, parent)?;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:45:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 45 |                 self.create_scope(value, parent)?;
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:48:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 48 |                 self.bind_func(self.scope_of(sexpr_id), func_id);
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `self.all_scopes` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:50:45
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 50 |                 let new = Scope::new_to_vec(&mut self.all_scopes, None, true);
[INFO] [stdout]    |                                             ^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:51:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 51 |                 self.bind_func(new, func_id); // it is visible inside its own scope for recursion
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:54:21
[INFO] [stdout]    |
[INFO] [stdout] 12 |           match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                  ------------------------
[INFO] [stdout]    |                  |
[INFO] [stdout]    |                  immutable borrow occurs here
[INFO] [stdout]    |                  a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 54 | /                     self.bind_variable(new,
[INFO] [stdout] 55 | |                                       self.func_manager.args[func_id][i].clone(),
[INFO] [stdout] 56 | |                                       Some(&self.func_manager.in_types[func_id][i].unwrap()) // unwrap is for the FutureType nonsense
[INFO] [stdout] 57 | |                     );
[INFO] [stdout]    | |_____________________^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |           }
[INFO] [stdout]    |           - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:59:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 59 |                 self.create_scope(self.func_manager.body[func_id], new);
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:62:17
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 62 |                 self.bind_struct_init(self.scope_of(sexpr_id), id);
[INFO] [stdout]    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:66:21
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 66 |                     self.create_scope(**expr, parent)?;
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*opt_exprs` which is behind a shared reference
[INFO] [stdout]   --> src/scoping.rs:70:37
[INFO] [stdout]    |
[INFO] [stdout] 70 |                 for ref mut expr in opt_exprs.unwrap() {
[INFO] [stdout]    |                                     ^^^^^^^^^ -------- `*opt_exprs` moved due to this method call
[INFO] [stdout]    |                                     |
[INFO] [stdout]    |                                     help: consider calling `.as_ref()` or `.as_mut()` to borrow the type's contents
[INFO] [stdout]    |                                     move occurs because `*opt_exprs` has type `Option<VecDeque<sexpr::SexprId>>`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] note: `Option::<T>::unwrap` takes ownership of the receiver `self`, which moves `*opt_exprs`
[INFO] [stdout]   --> /rustc/ad726b5063362ec9897ef3d67452fc5606ee70fa/library/core/src/option.rs:1013:24
[INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior
[INFO] [stdout]    |
[INFO] [stdout] 70 |                 for ref mut expr in <Option<VecDeque<sexpr::SexprId>> as Clone>::clone(&opt_exprs).unwrap() {
[INFO] [stdout]    |                                     ++++++++++++++++++++++++++++++++++++++++++++++++++++         +
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 70 |                 for ref mut expr in opt_exprs.clone().unwrap() {
[INFO] [stdout]    |                                              ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
[INFO] [stdout]   --> src/scoping.rs:71:21
[INFO] [stdout]    |
[INFO] [stdout] 12 |         match *self.sexpr_mut(sexpr_id).kind.deref() {
[INFO] [stdout]    |                ------------------------
[INFO] [stdout]    |                |
[INFO] [stdout]    |                immutable borrow occurs here
[INFO] [stdout]    |                a temporary with access to the immutable borrow is created here ...
[INFO] [stdout] ...
[INFO] [stdout] 71 |                     self.create_scope(*expr, parent)?;
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 82 |         }
[INFO] [stdout]    |         - ... and the immutable borrow might be used here, when that temporary is dropped and runs the destructor for type `RefMut<'_, Sexpr>`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `m.top_level_sexprs` which is behind a mutable reference
[INFO] [stdout]   --> src/scoping.rs:89:21
[INFO] [stdout]    |
[INFO] [stdout] 89 |     for sexpr_id in m.top_level_sexprs {
[INFO] [stdout]    |                     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     `m.top_level_sexprs` moved due to this implicit call to `.into_iter()`
[INFO] [stdout]    |                     move occurs because `m.top_level_sexprs` has type `Vec<sexpr::SexprId>`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] note: `into_iter` takes ownership of the receiver `self`, which moves `m.top_level_sexprs`
[INFO] [stdout]   --> /rustc/ad726b5063362ec9897ef3d67452fc5606ee70fa/library/core/src/iter/traits/collect.rs:312:17
[INFO] [stdout] help: consider iterating over a slice of the `Vec<sexpr::SexprId>`'s content to avoid moving into the `for` loop
[INFO] [stdout]    |
[INFO] [stdout] 89 |     for sexpr_id in &m.top_level_sexprs {
[INFO] [stdout]    |                     +
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 89 |     for sexpr_id in m.top_level_sexprs.clone() {
[INFO] [stdout]    |                                       ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `m`
[INFO] [stdout]  --> src/optimize.rs:4:15
[INFO] [stdout]   |
[INFO] [stdout] 4 | fn const_prop(m: &mut Manager, id: SexprId) {
[INFO] [stdout]   |               ^ help: if this is intentional, prefix it with an underscore: `_m`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `id`
[INFO] [stdout]  --> src/optimize.rs:4:32
[INFO] [stdout]   |
[INFO] [stdout] 4 | fn const_prop(m: &mut Manager, id: SexprId) {
[INFO] [stdout]   |                                ^^ help: if this is intentional, prefix it with an underscore: `_id`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing temporary value
[INFO] [stdout]    --> src/manager.rs:238:9
[INFO] [stdout]     |
[INFO] [stdout] 238 |         &Box::deref(&self.sexpr(sexpr_id).kind)
[INFO] [stdout]     |         ^^^^^^^^^^^^^--------------------^^^^^^
[INFO] [stdout]     |         |            |
[INFO] [stdout]     |         |            temporary value created here
[INFO] [stdout]     |         returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0061, E0223, E0308, E0425, E0499, E0502, E0507, E0515, E0596...
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0061`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `BasicTranspilation` (bin "BasicTranspilation") due to 63 previous errors; 5 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "1f5c638cece060191c5ae69a5f0633edcefce3be5edd810e023d395cf5241ad4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1f5c638cece060191c5ae69a5f0633edcefce3be5edd810e023d395cf5241ad4", kill_on_drop: false }`
[INFO] [stdout] 1f5c638cece060191c5ae69a5f0633edcefce3be5edd810e023d395cf5241ad4
