[INFO] cloning repository https://github.com/meppsilon/crafting_rust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/meppsilon/crafting_rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmeppsilon%2Fcrafting_rust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmeppsilon%2Fcrafting_rust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] a4721cfda87d437759df86382b17f9a81f872da9
[INFO] checking meppsilon/crafting_rust against e5e97e3ef0ee95d34bea49cdac051ed1bbac01df for pr-158759-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmeppsilon%2Fcrafting_rust" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/meppsilon/crafting_rust
[INFO] finished tweaking git repo https://github.com/meppsilon/crafting_rust
[INFO] tweaked toml for git repo https://github.com/meppsilon/crafting_rust written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/meppsilon/crafting_rust on toolchain e5e97e3ef0ee95d34bea49cdac051ed1bbac01df
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+e5e97e3ef0ee95d34bea49cdac051ed1bbac01df" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/meppsilon/crafting_rust 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" "+e5e97e3ef0ee95d34bea49cdac051ed1bbac01df" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 10f20228f9f9f2bea10ad8fcc6f02b99ba89048afc6e6091de98962b9223e868
[INFO] running `Command { std: "docker" "start" "10f20228f9f9f2bea10ad8fcc6f02b99ba89048afc6e6091de98962b9223e868", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "10f20228f9f9f2bea10ad8fcc6f02b99ba89048afc6e6091de98962b9223e868", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "10f20228f9f9f2bea10ad8fcc6f02b99ba89048afc6e6091de98962b9223e868" "/opt/rustwide/cargo-home/bin/cargo" "+e5e97e3ef0ee95d34bea49cdac051ed1bbac01df" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "10f20228f9f9f2bea10ad8fcc6f02b99ba89048afc6e6091de98962b9223e868", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "10f20228f9f9f2bea10ad8fcc6f02b99ba89048afc6e6091de98962b9223e868" "/opt/rustwide/cargo-home/bin/cargo" "+e5e97e3ef0ee95d34bea49cdac051ed1bbac01df" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]     Checking either v1.9.0
[INFO] [stderr]     Checking itertools v0.12.1
[INFO] [stderr]     Checking crafting_rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error[E0425]: cannot find function, tuple struct or tuple variant `Error` in this scope
[INFO] [stdout]    --> src/resolver.rs:152:21
[INFO] [stdout]     |
[INFO] [stdout] 152 |                     Error("");
[INFO] [stdout]     |                     ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing one of these items
[INFO] [stdout]     |
[INFO] [stdout]   1 + use crate::fs::TryLockError::Error;
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::fmt::Error;
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::fs::TryLockError::Error;
[INFO] [stdout]     |
[INFO] [stdout]   1 + use core::fmt::Error;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `cell::RefCell` and `rc::Rc`
[INFO] [stdout]  --> src/statement.rs:1:11
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{cell::RefCell, rc::Rc};
[INFO] [stdout]   |           ^^^^^^^^^^^^^  ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `environment::Environment`
[INFO] [stdout]  --> src/statement.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 |     environment::Environment, expression::Expr, interpreter::Interpreter, returns::Return,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StmtVisitor`
[INFO] [stdout]  --> src/function.rs:7:23
[INFO] [stdout]   |
[INFO] [stdout] 7 |     statement::{Stmt, StmtVisitor},
[INFO] [stdout]   |                       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `visit_class_stmt`
[INFO] [stdout]   --> src/resolver.rs:74:1
[INFO] [stdout]    |
[INFO] [stdout] 74 | impl StmtVisitor<()> for Resolver {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `visit_class_stmt` in implementation
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/statement.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 |     fn visit_class_stmt(&self, name: Token, methods: Vec<Stmt>) -> Result<(), Return>;
[INFO] [stdout]    |     ---------------------------------------------------------------------------------- `visit_class_stmt` from trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `visit_get_expr`, `visit_set_expr`
[INFO] [stdout]    --> src/resolver.rs:146:1
[INFO] [stdout]     |
[INFO] [stdout] 146 | impl ExprVisitor<()> for Resolver {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `visit_get_expr`, `visit_set_expr` in implementation
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/expression.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     fn visit_get_expr(&mut self, expr: Box<Expr>, name: Token) -> Result<T, String>;
[INFO] [stdout]     |     -------------------------------------------------------------------------------- `visit_get_expr` from trait
[INFO] [stdout] 110 |     fn visit_set_expr(&mut self, get: Box<Expr>, name: Token, value: Box<Expr>) -> Result<T, String>;
[INFO] [stdout]     |     ------------------------------------------------------------------------------------------------- `visit_set_expr` from trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find function, tuple struct or tuple variant `Error` in this scope
[INFO] [stdout]    --> src/resolver.rs:152:21
[INFO] [stdout]     |
[INFO] [stdout] 152 |                     Error("");
[INFO] [stdout]     |                     ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing one of these items
[INFO] [stdout]     |
[INFO] [stdout]   1 + use crate::fs::TryLockError::Error;
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::fmt::Error;
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::fs::TryLockError::Error;
[INFO] [stdout]     |
[INFO] [stdout]   1 + use core::fmt::Error;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `cell::RefCell` and `rc::Rc`
[INFO] [stdout]  --> src/statement.rs:1:11
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{cell::RefCell, rc::Rc};
[INFO] [stdout]   |           ^^^^^^^^^^^^^  ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `environment::Environment`
[INFO] [stdout]  --> src/statement.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 |     environment::Environment, expression::Expr, interpreter::Interpreter, returns::Return,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StmtVisitor`
[INFO] [stdout]  --> src/function.rs:7:23
[INFO] [stdout]   |
[INFO] [stdout] 7 |     statement::{Stmt, StmtVisitor},
[INFO] [stdout]   |                       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `visit_class_stmt`
[INFO] [stdout]   --> src/resolver.rs:74:1
[INFO] [stdout]    |
[INFO] [stdout] 74 | impl StmtVisitor<()> for Resolver {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `visit_class_stmt` in implementation
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/statement.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 |     fn visit_class_stmt(&self, name: Token, methods: Vec<Stmt>) -> Result<(), Return>;
[INFO] [stdout]    |     ---------------------------------------------------------------------------------- `visit_class_stmt` from trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0046]: not all trait items implemented, missing: `visit_get_expr`, `visit_set_expr`
[INFO] [stdout]    --> src/resolver.rs:146:1
[INFO] [stdout]     |
[INFO] [stdout] 146 | impl ExprVisitor<()> for Resolver {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `visit_get_expr`, `visit_set_expr` in implementation
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/expression.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     fn visit_get_expr(&mut self, expr: Box<Expr>, name: Token) -> Result<T, String>;
[INFO] [stdout]     |     -------------------------------------------------------------------------------- `visit_get_expr` from trait
[INFO] [stdout] 110 |     fn visit_set_expr(&mut self, get: Box<Expr>, name: Token, value: Box<Expr>) -> Result<T, String>;
[INFO] [stdout]     |     ------------------------------------------------------------------------------------------------- `visit_set_expr` from trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/resolver.rs:24:21
[INFO] [stdout]    |
[INFO] [stdout] 24 |         stmt.accept(self);
[INFO] [stdout]    |              ------ ^^^^ expected `&mut Interpreter`, found `&mut Resolver`
[INFO] [stdout]    |              |
[INFO] [stdout]    |              arguments to this method are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected mutable reference `&mut Interpreter`
[INFO] [stdout]               found mutable reference `&mut Resolver`
[INFO] [stdout] note: method defined here
[INFO] [stdout]   --> src/statement.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn accept(&self, visitor: &mut Interpreter) -> Result<(), Return> {
[INFO] [stdout]    |            ^^^^^^        -------------------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `resolve` found for struct `Interpreter` in the current scope
[INFO] [stdout]   --> src/resolver.rs:34:34
[INFO] [stdout]    |
[INFO] [stdout] 34 |                 self.interpreter.resolve(name, self.scopes.len() - 1 - i);
[INFO] [stdout]    |                                  ^^^^^^^ method not found in `Interpreter`
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/interpreter.rs:53:1
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct Interpreter {
[INFO] [stdout]    | ---------------------- method `resolve` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `args`
[INFO] [stdout]    --> src/interpreter.rs:272:33
[INFO] [stdout]     |
[INFO] [stdout] 245 |     fn visit_call_expr(&mut self, c: Box<Expr>, paren: Token, args: Vec<Expr>) -> Value {
[INFO] [stdout]     |                                                               ---- move occurs because `args` has type `Vec<expression::Expr>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 249 |         for arg in args {
[INFO] [stdout]     |                    ---- `args` moved due to this implicit call to `.into_iter()`
[INFO] [stdout] ...
[INFO] [stdout] 272 |                 let args_size = args.len();
[INFO] [stdout]     |                                 ^^^^ value borrowed here after move
[INFO] [stdout]     |
[INFO] [stdout] note: `into_iter` takes ownership of the receiver `self`, which moves `args`
[INFO] [stdout]    --> /rustc/e5e97e3ef0ee95d34bea49cdac051ed1bbac01df/library/core/src/iter/traits/collect.rs:312:17
[INFO] [stdout] help: consider iterating over a slice of the `Vec<expression::Expr>`'s content to avoid moving into the `for` loop
[INFO] [stdout]     |
[INFO] [stdout] 249 |         for arg in &args {
[INFO] [stdout]     |                    +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `args_size`
[INFO] [stdout]    --> src/interpreter.rs:272:21
[INFO] [stdout]     |
[INFO] [stdout] 272 |                 let args_size = args.len();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_args_size`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `instance`
[INFO] [stdout]    --> src/interpreter.rs:273:21
[INFO] [stdout]     |
[INFO] [stdout] 273 |                 let instance = LoxInstance { klass: class, fields: HashMap::new() };
[INFO] [stdout]     |                     ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_instance`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `value_value`
[INFO] [stdout]    --> src/interpreter.rs:298:16
[INFO] [stdout]     |
[INFO] [stdout] 296 |             let value_value = self.evaluate(*value);
[INFO] [stdout]     |                 ----------- move occurs because `value_value` has type `Value`, which does not implement the `Copy` trait
[INFO] [stdout] 297 |             instance.set(name, value_value);
[INFO] [stdout]     |                                ----------- value moved here
[INFO] [stdout] 298 |             Ok(value_value)
[INFO] [stdout]     |                ^^^^^^^^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `set` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/lox_class.rs:31:47
[INFO] [stdout]     |
[INFO] [stdout]  31 |     pub fn set(&mut self, name: Token, value: Value) {
[INFO] [stdout]     |            --- in this method                 ^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 297 |             instance.set(name, value_value.clone());
[INFO] [stdout]     |                                           ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `name.lexeme`
[INFO] [stdout]    --> src/interpreter.rs:381:38
[INFO] [stdout]     |
[INFO] [stdout] 380 |             .define(name.lexeme, Value::None);
[INFO] [stdout]     |                     ----------- value moved here
[INFO] [stdout] 381 |         let klass = LoxClass { name: name.lexeme };
[INFO] [stdout]     |                                      ^^^^^^^^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because `name.lexeme` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of partially moved value: `name`
[INFO] [stdout]    --> src/interpreter.rs:384:21
[INFO] [stdout]     |
[INFO] [stdout] 381 |         let klass = LoxClass { name: name.lexeme };
[INFO] [stdout]     |                                      ----------- value partially moved here
[INFO] [stdout] ...
[INFO] [stdout] 384 |             .assign(name, Value::Class(klass));
[INFO] [stdout]     |                     ^^^^ value used here after partial move
[INFO] [stdout]     |
[INFO] [stdout]     = note: partial move occurs because `name.lexeme` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `methods`
[INFO] [stdout]    --> src/interpreter.rs:377:45
[INFO] [stdout]     |
[INFO] [stdout] 377 |     fn visit_class_stmt(&self, name: Token, methods: Vec<Stmt>) -> Result<(), Return> {
[INFO] [stdout]     |                                             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_methods`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/resolver.rs:24:21
[INFO] [stdout]    |
[INFO] [stdout] 24 |         stmt.accept(self);
[INFO] [stdout]    |              ------ ^^^^ expected `&mut Interpreter`, found `&mut Resolver`
[INFO] [stdout]    |              |
[INFO] [stdout]    |              arguments to this method are incorrect
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected mutable reference `&mut Interpreter`
[INFO] [stdout]               found mutable reference `&mut Resolver`
[INFO] [stdout] note: method defined here
[INFO] [stdout]   --> src/statement.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 22 |     pub fn accept(&self, visitor: &mut Interpreter) -> Result<(), Return> {
[INFO] [stdout]    |            ^^^^^^        -------------------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `resolve` found for struct `Interpreter` in the current scope
[INFO] [stdout]   --> src/resolver.rs:34:34
[INFO] [stdout]    |
[INFO] [stdout] 34 |                 self.interpreter.resolve(name, self.scopes.len() - 1 - i);
[INFO] [stdout]    |                                  ^^^^^^^ method not found in `Interpreter`
[INFO] [stdout]    |
[INFO] [stdout]   ::: src/interpreter.rs:53:1
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub struct Interpreter {
[INFO] [stdout]    | ---------------------- method `resolve` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/parser.rs:279:20
[INFO] [stdout]     |
[INFO] [stdout] 279 |         let name = self.consume(TokenType::Identifier, "Expect class name.")?;
[INFO] [stdout]     |                    ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]     |
[INFO] [stdout] 278 |     fn class_declaration(&mut self) -> Result<Stmt, String> {
[INFO] [stdout]     |                           +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/parser.rs:280:9
[INFO] [stdout]     |
[INFO] [stdout] 280 |         self.consume(TokenType::LeftBrace, "Expect '{' before class body.")?;
[INFO] [stdout]     |         ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]     |
[INFO] [stdout] 278 |     fn class_declaration(&mut self) -> Result<Stmt, String> {
[INFO] [stdout]     |                           +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/parser.rs:284:31
[INFO] [stdout]     |
[INFO] [stdout] 284 |             if let Ok(stmt) = self.function("method".to_owned()) {
[INFO] [stdout]     |                               ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]     |
[INFO] [stdout] 278 |     fn class_declaration(&mut self) -> Result<Stmt, String> {
[INFO] [stdout]     |                           +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/parser.rs:289:9
[INFO] [stdout]     |
[INFO] [stdout] 289 |         self.consume(TokenType::RightBrace, "Expect '}' after class body.");
[INFO] [stdout]     |         ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]     |
[INFO] [stdout] 278 |     fn class_declaration(&mut self) -> Result<Stmt, String> {
[INFO] [stdout]     |                           +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]   --> src/statement.rs:40:25
[INFO] [stdout]    |
[INFO] [stdout] 40 |             Self::Class(name, methods) => {
[INFO] [stdout]    |                         ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `methods`
[INFO] [stdout]   --> src/statement.rs:40:31
[INFO] [stdout]    |
[INFO] [stdout] 40 |             Self::Class(name, methods) => {
[INFO] [stdout]    |                               ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_methods`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/resolver.rs:19:13
[INFO] [stdout]    |
[INFO] [stdout] 19 |             self.resolve_stmt(statement);
[INFO] [stdout]    |             ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 17 |     fn resolve_stmts(&mut self, statements: Vec<Stmt>) {
[INFO] [stdout]    |                       +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/resolver.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 40 |         self.begin_scope();
[INFO] [stdout]    |         ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn resolve_function(&mut self, name: Token, params: Vec<Token>, body: Vec<Stmt>) {
[INFO] [stdout]    |                          +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/resolver.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 42 |             self.declare(param);
[INFO] [stdout]    |             ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn resolve_function(&mut self, name: Token, params: Vec<Token>, body: Vec<Stmt>) {
[INFO] [stdout]    |                          +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/resolver.rs:43:13
[INFO] [stdout]    |
[INFO] [stdout] 43 |             self.define(param);
[INFO] [stdout]    |             ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn resolve_function(&mut self, name: Token, params: Vec<Token>, body: Vec<Stmt>) {
[INFO] [stdout]    |                          +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `param`
[INFO] [stdout]   --> src/resolver.rs:43:25
[INFO] [stdout]    |
[INFO] [stdout] 41 |         for param in params {
[INFO] [stdout]    |             ----- move occurs because `param` has type `token::Token`, which does not implement the `Copy` trait
[INFO] [stdout] 42 |             self.declare(param);
[INFO] [stdout]    |                          ----- value moved here
[INFO] [stdout] 43 |             self.define(param);
[INFO] [stdout]    |                         ^^^^^ value used here after move
[INFO] [stdout]    |
[INFO] [stdout] note: consider changing this parameter type in method `declare` to borrow instead if owning the value isn't necessary
[INFO] [stdout]   --> src/resolver.rs:57:33
[INFO] [stdout]    |
[INFO] [stdout] 57 |     fn declare(&mut self, name: Token) {
[INFO] [stdout]    |        ------- in this method   ^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 42 |             self.declare(param.clone());
[INFO] [stdout]    |                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/resolver.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 46 |         self.end_scope();
[INFO] [stdout]    |         ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn resolve_function(&mut self, name: Token, params: Vec<Token>, body: Vec<Stmt>) {
[INFO] [stdout]    |                          +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]   --> src/resolver.rs:39:32
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn resolve_function(&self, name: Token, params: Vec<Token>, body: Vec<Stmt>) {
[INFO] [stdout]    |                                ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `args`
[INFO] [stdout]    --> src/interpreter.rs:272:33
[INFO] [stdout]     |
[INFO] [stdout] 245 |     fn visit_call_expr(&mut self, c: Box<Expr>, paren: Token, args: Vec<Expr>) -> Value {
[INFO] [stdout]     |                                                               ---- move occurs because `args` has type `Vec<expression::Expr>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 249 |         for arg in args {
[INFO] [stdout]     |                    ---- `args` moved due to this implicit call to `.into_iter()`
[INFO] [stdout] ...
[INFO] [stdout] 272 |                 let args_size = args.len();
[INFO] [stdout]     |                                 ^^^^ value borrowed here after move
[INFO] [stdout]     |
[INFO] [stdout] note: `into_iter` takes ownership of the receiver `self`, which moves `args`
[INFO] [stdout]    --> /rustc/e5e97e3ef0ee95d34bea49cdac051ed1bbac01df/library/core/src/iter/traits/collect.rs:312:17
[INFO] [stdout] help: consider iterating over a slice of the `Vec<expression::Expr>`'s content to avoid moving into the `for` loop
[INFO] [stdout]     |
[INFO] [stdout] 249 |         for arg in &args {
[INFO] [stdout]     |                    +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/resolver.rs:59:25
[INFO] [stdout]    |
[INFO] [stdout] 59 |             if let Some(mut scope) = self.scopes.last_mut() {
[INFO] [stdout]    |                         ----^^^^^
[INFO] [stdout]    |                         |
[INFO] [stdout]    |                         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/resolver.rs:67:25
[INFO] [stdout]    |
[INFO] [stdout] 67 |             if let Some(mut scope) = self.scopes.last_mut() {
[INFO] [stdout]    |                         ----^^^^^
[INFO] [stdout]    |                         |
[INFO] [stdout]    |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `args_size`
[INFO] [stdout]    --> src/interpreter.rs:272:21
[INFO] [stdout]     |
[INFO] [stdout] 272 |                 let args_size = args.len();
[INFO] [stdout]     |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_args_size`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `instance`
[INFO] [stdout]    --> src/interpreter.rs:273:21
[INFO] [stdout]     |
[INFO] [stdout] 273 |                 let instance = LoxInstance { klass: class, fields: HashMap::new() };
[INFO] [stdout]     |                     ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_instance`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `value_value`
[INFO] [stdout]    --> src/interpreter.rs:298:16
[INFO] [stdout]     |
[INFO] [stdout] 296 |             let value_value = self.evaluate(*value);
[INFO] [stdout]     |                 ----------- move occurs because `value_value` has type `Value`, which does not implement the `Copy` trait
[INFO] [stdout] 297 |             instance.set(name, value_value);
[INFO] [stdout]     |                                ----------- value moved here
[INFO] [stdout] 298 |             Ok(value_value)
[INFO] [stdout]     |                ^^^^^^^^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `set` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/lox_class.rs:31:47
[INFO] [stdout]     |
[INFO] [stdout]  31 |     pub fn set(&mut self, name: Token, value: Value) {
[INFO] [stdout]     |            --- in this method                 ^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 297 |             instance.set(name, value_value.clone());
[INFO] [stdout]     |                                           ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `name`
[INFO] [stdout]   --> src/resolver.rs:91:21
[INFO] [stdout]    |
[INFO] [stdout] 84 |         name: crate::Token,
[INFO] [stdout]    |         ---- move occurs because `name` has type `token::Token`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 87 |         self.declare(name);
[INFO] [stdout]    |                      ---- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 91 |         self.define(name);
[INFO] [stdout]    |                     ^^^^ value used here after move
[INFO] [stdout]    |
[INFO] [stdout] note: consider changing this parameter type in method `declare` to borrow instead if owning the value isn't necessary
[INFO] [stdout]   --> src/resolver.rs:57:33
[INFO] [stdout]    |
[INFO] [stdout] 57 |     fn declare(&mut self, name: Token) {
[INFO] [stdout]    |        ------- in this method   ^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 87 |         self.declare(name.clone());
[INFO] [stdout]    |                          ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `name`
[INFO] [stdout]    --> src/resolver.rs:102:21
[INFO] [stdout]     |
[INFO] [stdout]  97 |         name: Token,
[INFO] [stdout]     |         ---- move occurs because `name` has type `token::Token`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 101 |         self.declare(name);
[INFO] [stdout]     |                      ---- value moved here
[INFO] [stdout] 102 |         self.define(name);
[INFO] [stdout]     |                     ^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `declare` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/resolver.rs:57:33
[INFO] [stdout]     |
[INFO] [stdout]  57 |     fn declare(&mut self, name: Token) {
[INFO] [stdout]     |        ------- in this method   ^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 101 |         self.declare(name.clone());
[INFO] [stdout]     |                          ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `name`
[INFO] [stdout]    --> src/resolver.rs:104:31
[INFO] [stdout]     |
[INFO] [stdout]  97 |         name: Token,
[INFO] [stdout]     |         ---- move occurs because `name` has type `token::Token`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 102 |         self.define(name);
[INFO] [stdout]     |                     ---- value moved here
[INFO] [stdout] 103 |
[INFO] [stdout] 104 |         self.resolve_function(name, params, body);
[INFO] [stdout]     |                               ^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `define` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/resolver.rs:65:32
[INFO] [stdout]     |
[INFO] [stdout]  65 |     fn define(&mut self, name: Token) {
[INFO] [stdout]     |        ------ in this method   ^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 102 |         self.define(name.clone());
[INFO] [stdout]     |                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `keyword`
[INFO] [stdout]    --> src/resolver.rs:132:37
[INFO] [stdout]     |
[INFO] [stdout] 132 |     fn visit_return_stmt(&mut self, keyword: Token, value: Option<Expr>) -> Result<(), Return> {
[INFO] [stdout]     |                                     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_keyword`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `op`
[INFO] [stdout]    --> src/resolver.rs:167:51
[INFO] [stdout]     |
[INFO] [stdout] 167 |     fn visit_binary_expr(&mut self, l: Box<Expr>, op: Token, r: Box<Expr>) -> () {
[INFO] [stdout]     |                                                   ^^ help: if this is intentional, prefix it with an underscore: `_op`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `paren`
[INFO] [stdout]    --> src/resolver.rs:173:49
[INFO] [stdout]     |
[INFO] [stdout] 173 |     fn visit_call_expr(&mut self, c: Box<Expr>, paren: Token, args: Vec<Expr>) -> () {
[INFO] [stdout]     |                                                 ^^^^^ help: if this is intentional, prefix it with an underscore: `_paren`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `literal`
[INFO] [stdout]    --> src/resolver.rs:188:34
[INFO] [stdout]     |
[INFO] [stdout] 188 |     fn visit_literal_expr(&self, literal: crate::Literal) -> () {
[INFO] [stdout]     |                                  ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_literal`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `op`
[INFO] [stdout]    --> src/resolver.rs:192:52
[INFO] [stdout]     |
[INFO] [stdout] 192 |     fn visit_logical_expr(&mut self, l: Box<Expr>, op: Token, r: Box<Expr>) -> () {
[INFO] [stdout]     |                                                    ^^ help: if this is intentional, prefix it with an underscore: `_op`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `op`
[INFO] [stdout]    --> src/resolver.rs:198:36
[INFO] [stdout]     |
[INFO] [stdout] 198 |     fn visit_unary_expr(&mut self, op: Token, r: Box<Expr>) -> () {
[INFO] [stdout]     |                                    ^^ help: if this is intentional, prefix it with an underscore: `_op`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*value` which is behind a shared reference
[INFO] [stdout]   --> src/lox_class.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |             *value
[INFO] [stdout]    |             ^^^^^^ move occurs because `*value` has type `Value`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 25 -             *value
[INFO] [stdout] 25 +             value.clone()
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `name.lexeme`
[INFO] [stdout]    --> src/interpreter.rs:381:38
[INFO] [stdout]     |
[INFO] [stdout] 380 |             .define(name.lexeme, Value::None);
[INFO] [stdout]     |                     ----------- value moved here
[INFO] [stdout] 381 |         let klass = LoxClass { name: name.lexeme };
[INFO] [stdout]     |                                      ^^^^^^^^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because `name.lexeme` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of partially moved value: `name`
[INFO] [stdout]    --> src/interpreter.rs:384:21
[INFO] [stdout]     |
[INFO] [stdout] 381 |         let klass = LoxClass { name: name.lexeme };
[INFO] [stdout]     |                                      ----------- value partially moved here
[INFO] [stdout] ...
[INFO] [stdout] 384 |             .assign(name, Value::Class(klass));
[INFO] [stdout]     |                     ^^^^ value used here after partial move
[INFO] [stdout]     |
[INFO] [stdout]     = note: partial move occurs because `name.lexeme` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `methods`
[INFO] [stdout]    --> src/interpreter.rs:377:45
[INFO] [stdout]     |
[INFO] [stdout] 377 |     fn visit_class_stmt(&self, name: Token, methods: Vec<Stmt>) -> Result<(), Return> {
[INFO] [stdout]     |                                             ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_methods`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0046, E0308, E0382, E0425, E0507, E0596, E0599.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0046`.
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/parser.rs:279:20
[INFO] [stdout]     |
[INFO] [stdout] 279 |         let name = self.consume(TokenType::Identifier, "Expect class name.")?;
[INFO] [stdout]     |                    ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]     |
[INFO] [stdout] 278 |     fn class_declaration(&mut self) -> Result<Stmt, String> {
[INFO] [stdout]     |                           +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/parser.rs:280:9
[INFO] [stdout]     |
[INFO] [stdout] 280 |         self.consume(TokenType::LeftBrace, "Expect '{' before class body.")?;
[INFO] [stdout]     |         ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]     |
[INFO] [stdout] 278 |     fn class_declaration(&mut self) -> Result<Stmt, String> {
[INFO] [stdout]     |                           +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/parser.rs:284:31
[INFO] [stdout]     |
[INFO] [stdout] 284 |             if let Ok(stmt) = self.function("method".to_owned()) {
[INFO] [stdout]     |                               ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]     |
[INFO] [stdout] 278 |     fn class_declaration(&mut self) -> Result<Stmt, String> {
[INFO] [stdout]     |                           +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/parser.rs:289:9
[INFO] [stdout]     |
[INFO] [stdout] 289 |         self.consume(TokenType::RightBrace, "Expect '}' after class body.");
[INFO] [stdout]     |         ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]     |
[INFO] [stdout] 278 |     fn class_declaration(&mut self) -> Result<Stmt, String> {
[INFO] [stdout]     |                           +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `crafting_rust` (bin "crafting_rust" test) due to 23 previous errors; 17 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]   --> src/statement.rs:40:25
[INFO] [stdout]    |
[INFO] [stdout] 40 |             Self::Class(name, methods) => {
[INFO] [stdout]    |                         ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `methods`
[INFO] [stdout]   --> src/statement.rs:40:31
[INFO] [stdout]    |
[INFO] [stdout] 40 |             Self::Class(name, methods) => {
[INFO] [stdout]    |                               ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_methods`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/resolver.rs:19:13
[INFO] [stdout]    |
[INFO] [stdout] 19 |             self.resolve_stmt(statement);
[INFO] [stdout]    |             ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 17 |     fn resolve_stmts(&mut self, statements: Vec<Stmt>) {
[INFO] [stdout]    |                       +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/resolver.rs:40:9
[INFO] [stdout]    |
[INFO] [stdout] 40 |         self.begin_scope();
[INFO] [stdout]    |         ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn resolve_function(&mut self, name: Token, params: Vec<Token>, body: Vec<Stmt>) {
[INFO] [stdout]    |                          +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/resolver.rs:42:13
[INFO] [stdout]    |
[INFO] [stdout] 42 |             self.declare(param);
[INFO] [stdout]    |             ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn resolve_function(&mut self, name: Token, params: Vec<Token>, body: Vec<Stmt>) {
[INFO] [stdout]    |                          +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/resolver.rs:43:13
[INFO] [stdout]    |
[INFO] [stdout] 43 |             self.define(param);
[INFO] [stdout]    |             ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn resolve_function(&mut self, name: Token, params: Vec<Token>, body: Vec<Stmt>) {
[INFO] [stdout]    |                          +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `param`
[INFO] [stdout]   --> src/resolver.rs:43:25
[INFO] [stdout]    |
[INFO] [stdout] 41 |         for param in params {
[INFO] [stdout]    |             ----- move occurs because `param` has type `token::Token`, which does not implement the `Copy` trait
[INFO] [stdout] 42 |             self.declare(param);
[INFO] [stdout]    |                          ----- value moved here
[INFO] [stdout] 43 |             self.define(param);
[INFO] [stdout]    |                         ^^^^^ value used here after move
[INFO] [stdout]    |
[INFO] [stdout] note: consider changing this parameter type in method `declare` to borrow instead if owning the value isn't necessary
[INFO] [stdout]   --> src/resolver.rs:57:33
[INFO] [stdout]    |
[INFO] [stdout] 57 |     fn declare(&mut self, name: Token) {
[INFO] [stdout]    |        ------- in this method   ^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 42 |             self.declare(param.clone());
[INFO] [stdout]    |                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/resolver.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 46 |         self.end_scope();
[INFO] [stdout]    |         ^^^^ `self` is a `&` reference, so it cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn resolve_function(&mut self, name: Token, params: Vec<Token>, body: Vec<Stmt>) {
[INFO] [stdout]    |                          +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]   --> src/resolver.rs:39:32
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn resolve_function(&self, name: Token, params: Vec<Token>, body: Vec<Stmt>) {
[INFO] [stdout]    |                                ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/resolver.rs:59:25
[INFO] [stdout]    |
[INFO] [stdout] 59 |             if let Some(mut scope) = self.scopes.last_mut() {
[INFO] [stdout]    |                         ----^^^^^
[INFO] [stdout]    |                         |
[INFO] [stdout]    |                         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/resolver.rs:67:25
[INFO] [stdout]    |
[INFO] [stdout] 67 |             if let Some(mut scope) = self.scopes.last_mut() {
[INFO] [stdout]    |                         ----^^^^^
[INFO] [stdout]    |                         |
[INFO] [stdout]    |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `name`
[INFO] [stdout]   --> src/resolver.rs:91:21
[INFO] [stdout]    |
[INFO] [stdout] 84 |         name: crate::Token,
[INFO] [stdout]    |         ---- move occurs because `name` has type `token::Token`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 87 |         self.declare(name);
[INFO] [stdout]    |                      ---- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 91 |         self.define(name);
[INFO] [stdout]    |                     ^^^^ value used here after move
[INFO] [stdout]    |
[INFO] [stdout] note: consider changing this parameter type in method `declare` to borrow instead if owning the value isn't necessary
[INFO] [stdout]   --> src/resolver.rs:57:33
[INFO] [stdout]    |
[INFO] [stdout] 57 |     fn declare(&mut self, name: Token) {
[INFO] [stdout]    |        ------- in this method   ^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 87 |         self.declare(name.clone());
[INFO] [stdout]    |                          ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `name`
[INFO] [stdout]    --> src/resolver.rs:102:21
[INFO] [stdout]     |
[INFO] [stdout]  97 |         name: Token,
[INFO] [stdout]     |         ---- move occurs because `name` has type `token::Token`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 101 |         self.declare(name);
[INFO] [stdout]     |                      ---- value moved here
[INFO] [stdout] 102 |         self.define(name);
[INFO] [stdout]     |                     ^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `declare` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/resolver.rs:57:33
[INFO] [stdout]     |
[INFO] [stdout]  57 |     fn declare(&mut self, name: Token) {
[INFO] [stdout]     |        ------- in this method   ^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 101 |         self.declare(name.clone());
[INFO] [stdout]     |                          ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `name`
[INFO] [stdout]    --> src/resolver.rs:104:31
[INFO] [stdout]     |
[INFO] [stdout]  97 |         name: Token,
[INFO] [stdout]     |         ---- move occurs because `name` has type `token::Token`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 102 |         self.define(name);
[INFO] [stdout]     |                     ---- value moved here
[INFO] [stdout] 103 |
[INFO] [stdout] 104 |         self.resolve_function(name, params, body);
[INFO] [stdout]     |                               ^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `define` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/resolver.rs:65:32
[INFO] [stdout]     |
[INFO] [stdout]  65 |     fn define(&mut self, name: Token) {
[INFO] [stdout]     |        ------ in this method   ^^^^^ this parameter takes ownership of the value
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 102 |         self.define(name.clone());
[INFO] [stdout]     |                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `keyword`
[INFO] [stdout]    --> src/resolver.rs:132:37
[INFO] [stdout]     |
[INFO] [stdout] 132 |     fn visit_return_stmt(&mut self, keyword: Token, value: Option<Expr>) -> Result<(), Return> {
[INFO] [stdout]     |                                     ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_keyword`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `op`
[INFO] [stdout]    --> src/resolver.rs:167:51
[INFO] [stdout]     |
[INFO] [stdout] 167 |     fn visit_binary_expr(&mut self, l: Box<Expr>, op: Token, r: Box<Expr>) -> () {
[INFO] [stdout]     |                                                   ^^ help: if this is intentional, prefix it with an underscore: `_op`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `paren`
[INFO] [stdout]    --> src/resolver.rs:173:49
[INFO] [stdout]     |
[INFO] [stdout] 173 |     fn visit_call_expr(&mut self, c: Box<Expr>, paren: Token, args: Vec<Expr>) -> () {
[INFO] [stdout]     |                                                 ^^^^^ help: if this is intentional, prefix it with an underscore: `_paren`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `literal`
[INFO] [stdout]    --> src/resolver.rs:188:34
[INFO] [stdout]     |
[INFO] [stdout] 188 |     fn visit_literal_expr(&self, literal: crate::Literal) -> () {
[INFO] [stdout]     |                                  ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_literal`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `op`
[INFO] [stdout]    --> src/resolver.rs:192:52
[INFO] [stdout]     |
[INFO] [stdout] 192 |     fn visit_logical_expr(&mut self, l: Box<Expr>, op: Token, r: Box<Expr>) -> () {
[INFO] [stdout]     |                                                    ^^ help: if this is intentional, prefix it with an underscore: `_op`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `op`
[INFO] [stdout]    --> src/resolver.rs:198:36
[INFO] [stdout]     |
[INFO] [stdout] 198 |     fn visit_unary_expr(&mut self, op: Token, r: Box<Expr>) -> () {
[INFO] [stdout]     |                                    ^^ help: if this is intentional, prefix it with an underscore: `_op`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*value` which is behind a shared reference
[INFO] [stdout]   --> src/lox_class.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |             *value
[INFO] [stdout]    |             ^^^^^^ move occurs because `*value` has type `Value`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 25 -             *value
[INFO] [stdout] 25 +             value.clone()
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0046, E0308, E0382, E0425, E0507, E0596, E0599.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0046`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `crafting_rust` (bin "crafting_rust") due to 23 previous errors; 17 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "10f20228f9f9f2bea10ad8fcc6f02b99ba89048afc6e6091de98962b9223e868", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "10f20228f9f9f2bea10ad8fcc6f02b99ba89048afc6e6091de98962b9223e868", kill_on_drop: false }`
[INFO] [stdout] 10f20228f9f9f2bea10ad8fcc6f02b99ba89048afc6e6091de98962b9223e868
