[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) -> 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, name: Token) -> Result; [INFO] [stdout] | -------------------------------------------------------------------------------- `visit_get_expr` from trait [INFO] [stdout] 110 | fn visit_set_expr(&mut self, get: Box, name: Token, value: Box) -> Result; [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) -> 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, name: Token) -> Result; [INFO] [stdout] | -------------------------------------------------------------------------------- `visit_get_expr` from trait [INFO] [stdout] 110 | fn visit_set_expr(&mut self, get: Box, name: Token, value: Box) -> Result; [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, paren: Token, args: Vec) -> Value { [INFO] [stdout] | ---- move occurs because `args` has type `Vec`, 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`'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) -> 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 { [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 { [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 { [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 { [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) { [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, body: Vec) { [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, body: Vec) { [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, body: Vec) { [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, body: Vec) { [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, body: Vec) { [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, paren: Token, args: Vec) -> Value { [INFO] [stdout] | ---- move occurs because `args` has type `Vec`, 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`'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) -> 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, op: Token, r: Box) -> () { [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, paren: Token, args: Vec) -> () { [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, op: Token, r: Box) -> () { [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) -> () { [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) -> 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 { [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 { [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 { [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 { [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) { [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, body: Vec) { [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, body: Vec) { [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, body: Vec) { [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, body: Vec) { [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, body: Vec) { [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) -> 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, op: Token, r: Box) -> () { [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, paren: Token, args: Vec) -> () { [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, op: Token, r: Box) -> () { [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) -> () { [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