[INFO] cloning repository https://github.com/awwsmm/monkey_rust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/awwsmm/monkey_rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fawwsmm%2Fmonkey_rust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fawwsmm%2Fmonkey_rust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] d229549f755a52f640cc8ef162eb92a62aceede9
[INFO] checking awwsmm/monkey_rust against 5c543b0b8c73c7b72bc8284ced4fb22ead15734d for pr-160186
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fawwsmm%2Fmonkey_rust" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/awwsmm/monkey_rust
[INFO] finished tweaking git repo https://github.com/awwsmm/monkey_rust
[INFO] tweaked toml for git repo https://github.com/awwsmm/monkey_rust written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/awwsmm/monkey_rust on toolchain 5c543b0b8c73c7b72bc8284ced4fb22ead15734d
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5c543b0b8c73c7b72bc8284ced4fb22ead15734d" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/awwsmm/monkey_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" "+5c543b0b8c73c7b72bc8284ced4fb22ead15734d" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/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:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] a861b703b5c59c06f2d682ce7f0b3b8b7913efc923c15ef6542166f7e8254426
[INFO] running `Command { std: "docker" "start" "a861b703b5c59c06f2d682ce7f0b3b8b7913efc923c15ef6542166f7e8254426", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "a861b703b5c59c06f2d682ce7f0b3b8b7913efc923c15ef6542166f7e8254426", 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" "a861b703b5c59c06f2d682ce7f0b3b8b7913efc923c15ef6542166f7e8254426" "/opt/rustwide/cargo-home/bin/cargo" "+5c543b0b8c73c7b72bc8284ced4fb22ead15734d" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "a861b703b5c59c06f2d682ce7f0b3b8b7913efc923c15ef6542166f7e8254426", 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" "a861b703b5c59c06f2d682ce7f0b3b8b7913efc923c15ef6542166f7e8254426" "/opt/rustwide/cargo-home/bin/cargo" "+5c543b0b8c73c7b72bc8284ced4fb22ead15734d" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]     Checking monkey_rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::cmp::PartialEq`
[INFO] [stdout]  --> src/compiler.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::cmp::PartialEq;
[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: `std::cmp::PartialEq`
[INFO] [stdout]  --> src/compiler.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::cmp::PartialEq;
[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: `std::cmp::PartialEq`
[INFO] [stdout]  --> src/compiler.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::cmp::PartialEq;
[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: `std::cmp::PartialEq`
[INFO] [stdout]  --> src/compiler.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::cmp::PartialEq;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/compiler/symbol_table.rs:64:26
[INFO] [stdout]    |
[INFO] [stdout] 64 |                     Some(mut outer) => {
[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: unreachable pattern
[INFO] [stdout]    --> src/compiler.rs:352:13
[INFO] [stdout]     |
[INFO] [stdout] 352 |             _ => ()
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/compiler.rs:352:13
[INFO] [stdout]     |
[INFO] [stdout]  76 |             ast::Node::Program(node) => {
[INFO] [stdout]     |             ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  85 |             ast::Node::Statement(ast::Statement::ExpressionStatement(node)) => {
[INFO] [stdout]     |             --------------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  93 |             ast::Node::Statement(ast::Statement::BlockStatement(node)) => {
[INFO] [stdout]     |             ---------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 102 |             ast::Node::Statement(ast::Statement::LetStatement(node)) => {
[INFO] [stdout]     |             -------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 352 |             _ => ()
[INFO] [stdout]     |             ^ ...and 13 other patterns collectively make this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/compiler/symbol_table.rs:64:26
[INFO] [stdout]    |
[INFO] [stdout] 64 |                     Some(mut outer) => {
[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: unreachable pattern
[INFO] [stdout]    --> src/vm.rs:295:17
[INFO] [stdout]     |
[INFO] [stdout] 295 |                 _ => () // TODO
[INFO] [stdout]     |                 ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/vm.rs:295:17
[INFO] [stdout]     |
[INFO] [stdout]  90 |                 code::Opcode::OpConstant => {
[INFO] [stdout]     |                 ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  98 |                 code::Opcode::OpJump => {
[INFO] [stdout]     |                 -------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 103 |                 code::Opcode::OpJumpNotTruthy => {
[INFO] [stdout]     |                 ----------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 113 |                 code::Opcode::OpAdd | code::Opcode::OpSub | code::Opcode::OpMul | code::Opcode::OpDiv =>
[INFO] [stdout]     |                 ------------------------------------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 295 |                 _ => () // TODO
[INFO] [stdout]     |                 ^ ...and 21 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/compiler.rs:352:13
[INFO] [stdout]     |
[INFO] [stdout] 352 |             _ => ()
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/compiler.rs:352:13
[INFO] [stdout]     |
[INFO] [stdout]  76 |             ast::Node::Program(node) => {
[INFO] [stdout]     |             ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  85 |             ast::Node::Statement(ast::Statement::ExpressionStatement(node)) => {
[INFO] [stdout]     |             --------------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  93 |             ast::Node::Statement(ast::Statement::BlockStatement(node)) => {
[INFO] [stdout]     |             ---------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 102 |             ast::Node::Statement(ast::Statement::LetStatement(node)) => {
[INFO] [stdout]     |             -------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 352 |             _ => ()
[INFO] [stdout]     |             ^ ...and 13 other patterns collectively make this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `errors` is never used
[INFO] [stdout]    --> src/parser.rs:280:8
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl Parser {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 280 |     fn errors(&self) -> &Vec<String> {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `ReturnValueObj` and `FunctionObj` are never constructed
[INFO] [stdout]   --> src/object.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub(crate) enum Object {
[INFO] [stdout]    |                 ------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 32 |     ReturnValueObj(ReturnValueObj),
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 33 |     ErrorObj(ErrorObj),
[INFO] [stdout] 34 |     FunctionObj(FunctionObj),
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Object` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `IsError` is never used
[INFO] [stdout]   --> src/object.rs:76:18
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub(crate) trait IsError {
[INFO] [stdout]    |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get`, and `set` are never used
[INFO] [stdout]   --> src/object/environment.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl Environment {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] 13 |     pub fn new(outer: Option<Rc<RefCell<Environment>>>) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 17 |     pub(crate) fn get(&self, name: &str) -> Option<object::Object> {
[INFO] [stdout]    |                   ^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub(crate) fn set(&mut self, name: &str, val: object::Object) -> Option<object::Object> {
[INFO] [stdout]    |                   ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_builtin_by_name` is never used
[INFO] [stdout]    --> src/object/builtins.rs:191:15
[INFO] [stdout]     |
[INFO] [stdout] 191 | pub(crate) fn get_builtin_by_name(name: &str) -> Option<&BuiltinObj> {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NULL` is never used
[INFO] [stdout]   --> src/evaluator.rs:10:7
[INFO] [stdout]    |
[INFO] [stdout] 10 | const NULL: object::NullObj = object::NullObj {};
[INFO] [stdout]    |       ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TRUE` is never used
[INFO] [stdout]   --> src/evaluator.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | const TRUE: object::BooleanObj = object::BooleanObj { value: true };
[INFO] [stdout]    |       ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FALSE` is never used
[INFO] [stdout]   --> src/evaluator.rs:12:7
[INFO] [stdout]    |
[INFO] [stdout] 12 | const FALSE: object::BooleanObj = object::BooleanObj { value: false };
[INFO] [stdout]    |       ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval` is never used
[INFO] [stdout]   --> src/evaluator.rs:14:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub fn eval(node: Option<ast::Node>, env: Rc<RefCell<object::environment::Environment>>) -> Option<object::Object> {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_hash_literal` is never used
[INFO] [stdout]    --> src/evaluator.rs:137:4
[INFO] [stdout]     |
[INFO] [stdout] 137 | fn eval_hash_literal(node: HashLiteral, env: Rc<RefCell<object::environment::Environment>>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_index_expression` is never used
[INFO] [stdout]    --> src/evaluator.rs:166:4
[INFO] [stdout]     |
[INFO] [stdout] 166 | fn eval_index_expression(left: Option<object::Object>, index: Option<object::Object>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_hash_index_expression` is never used
[INFO] [stdout]    --> src/evaluator.rs:179:4
[INFO] [stdout]     |
[INFO] [stdout] 179 | fn eval_hash_index_expression(hash: Option<object::Object>, index: Option<object::Object>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_array_index_expression` is never used
[INFO] [stdout]    --> src/evaluator.rs:198:4
[INFO] [stdout]     |
[INFO] [stdout] 198 | fn eval_array_index_expression(array: Option<object::Object>, index: Option<object::Object>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_function` is never used
[INFO] [stdout]    --> src/evaluator.rs:218:4
[INFO] [stdout]     |
[INFO] [stdout] 218 | fn apply_function(func: object::Object, args: Vec<object::Object>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `extend_function_env` is never used
[INFO] [stdout]    --> src/evaluator.rs:241:4
[INFO] [stdout]     |
[INFO] [stdout] 241 | fn extend_function_env(func: object::FunctionObj, args: Vec<object::Object>) -> object::environment::Environment {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `unwrap_return_value` is never used
[INFO] [stdout]    --> src/evaluator.rs:251:4
[INFO] [stdout]     |
[INFO] [stdout] 251 | fn unwrap_return_value(obj: object::Object) -> Option<Box<object::Object>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_expressions` is never used
[INFO] [stdout]    --> src/evaluator.rs:259:4
[INFO] [stdout]     |
[INFO] [stdout] 259 | fn eval_expressions(exps: Vec<ast::Expression>, env: Rc<RefCell<object::environment::Environment>>) -> Vec<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_identifier` is never used
[INFO] [stdout]    --> src/evaluator.rs:273:4
[INFO] [stdout]     |
[INFO] [stdout] 273 | fn eval_identifier(node: ast::Identifier, env: Rc<RefCell<object::environment::Environment>>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_program` is never used
[INFO] [stdout]    --> src/evaluator.rs:285:4
[INFO] [stdout]     |
[INFO] [stdout] 285 | fn eval_program(program: ast::Program, env: Rc<RefCell<object::environment::Environment>>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_if_expression` is never used
[INFO] [stdout]    --> src/evaluator.rs:302:4
[INFO] [stdout]     |
[INFO] [stdout] 302 | fn eval_if_expression(ie: ast::IfExpression, env: Rc<RefCell<object::environment::Environment>>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_truthy` is never used
[INFO] [stdout]    --> src/evaluator.rs:317:4
[INFO] [stdout]     |
[INFO] [stdout] 317 | fn is_truthy(obj: Option<object::Object>) -> bool {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `native_bool_to_boolean_object` is never used
[INFO] [stdout]    --> src/evaluator.rs:326:4
[INFO] [stdout]     |
[INFO] [stdout] 326 | fn native_bool_to_boolean_object(input: bool) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_block_statement` is never used
[INFO] [stdout]    --> src/evaluator.rs:333:4
[INFO] [stdout]     |
[INFO] [stdout] 333 | fn eval_block_statement(block: ast::BlockStatement, env: Rc<RefCell<object::environment::Environment>>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_prefix_expression` is never used
[INFO] [stdout]    --> src/evaluator.rs:350:4
[INFO] [stdout]     |
[INFO] [stdout] 350 | fn eval_prefix_expression(operator: &str, right: Option<object::Object>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_bang_operator_expression` is never used
[INFO] [stdout]    --> src/evaluator.rs:358:4
[INFO] [stdout]     |
[INFO] [stdout] 358 | fn eval_bang_operator_expression(right: Option<object::Object>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_minus_prefix_operator_expression` is never used
[INFO] [stdout]    --> src/evaluator.rs:367:4
[INFO] [stdout]     |
[INFO] [stdout] 367 | fn eval_minus_prefix_operator_expression(right: Option<object::Object>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_infix_expression` is never used
[INFO] [stdout]    --> src/evaluator.rs:380:4
[INFO] [stdout]     |
[INFO] [stdout] 380 | fn eval_infix_expression(operator: &str, left: Option<object::Object>, right: Option<object::Object>) -> Option<object::Object> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_string_infix_expression` is never used
[INFO] [stdout]    --> src/evaluator.rs:404:4
[INFO] [stdout]     |
[INFO] [stdout] 404 | fn eval_string_infix_expression(operator: &str, left: Option<object::Object>, right: Option<object::Object>) -> Option<object::Obje...
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `eval_integer_infix_expression` is never used
[INFO] [stdout]    --> src/evaluator.rs:424:4
[INFO] [stdout]     |
[INFO] [stdout] 424 | fn eval_integer_infix_expression(operator: &str, left: Option<object::Object>, right: Option<object::Object>) -> Option<object::Obj...
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Builtin` is never constructed
[INFO] [stdout]  --> src/evaluator/builtins.rs:4:19
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub(crate) struct Builtin{}
[INFO] [stdout]   |                   ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from` is never used
[INFO] [stdout]  --> src/evaluator/builtins.rs:7:19
[INFO] [stdout]   |
[INFO] [stdout] 6 | impl Builtin {
[INFO] [stdout]   | ------------ associated function in this implementation
[INFO] [stdout] 7 |     pub(crate) fn from(string: &str) -> Option<object::BuiltinObj> {
[INFO] [stdout]   |                   ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `stack_top` is never used
[INFO] [stdout]   --> src/vm.rs:70:19
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl VM {
[INFO] [stdout]    | ------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub(crate) fn stack_top(&self) -> Option<&object::Object> {
[INFO] [stdout]    |                   ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/vm.rs:295:17
[INFO] [stdout]     |
[INFO] [stdout] 295 |                 _ => () // TODO
[INFO] [stdout]     |                 ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/vm.rs:295:17
[INFO] [stdout]     |
[INFO] [stdout]  90 |                 code::Opcode::OpConstant => {
[INFO] [stdout]     |                 ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  98 |                 code::Opcode::OpJump => {
[INFO] [stdout]     |                 -------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 103 |                 code::Opcode::OpJumpNotTruthy => {
[INFO] [stdout]     |                 ----------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 113 |                 code::Opcode::OpAdd | code::Opcode::OpSub | code::Opcode::OpMul | code::Opcode::OpDiv =>
[INFO] [stdout]     |                 ------------------------------------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 295 |                 _ => () // TODO
[INFO] [stdout]     |                 ^ ...and 21 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]    --> src/object.rs:223:5
[INFO] [stdout]     |
[INFO] [stdout] 221 | #[derive(Debug, PartialEq, Clone)]
[INFO] [stdout]     |                 --------- in this derive macro expansion
[INFO] [stdout] 222 | pub(crate) struct BuiltinObj {
[INFO] [stdout] 223 |     pub(crate) func: BuiltinFunction,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the address of the same function can vary between different codegen units
[INFO] [stdout]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `args`
[INFO] [stdout]   --> src/benchmark.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let args: Vec<String> = env::args().collect();
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PROMPT` is never used
[INFO] [stdout]  --> src/repl.rs:5:7
[INFO] [stdout]   |
[INFO] [stdout] 5 | const PROMPT: &'static [u8] = ">> ".as_bytes();
[INFO] [stdout]   |       ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start` is never used
[INFO] [stdout]  --> src/repl.rs:7:15
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub(crate) fn start(reader: &mut impl BufRead, writer: &mut impl Write) {
[INFO] [stdout]   |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MONKEY_FACE` is never used
[INFO] [stdout]   --> src/repl.rs:61:7
[INFO] [stdout]    |
[INFO] [stdout] 61 | const MONKEY_FACE: &'static str = r#"            __,__
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_parser_errors` is never used
[INFO] [stdout]   --> src/repl.rs:74:4
[INFO] [stdout]    |
[INFO] [stdout] 74 | fn print_parser_errors(writer: &mut impl Write, errors: Vec<String>) {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `errors` is never used
[INFO] [stdout]    --> src/parser.rs:280:8
[INFO] [stdout]     |
[INFO] [stdout]  18 | impl Parser {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 280 |     fn errors(&self) -> &Vec<String> {
[INFO] [stdout]     |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_with_state` is never used
[INFO] [stdout]   --> src/compiler.rs:67:19
[INFO] [stdout]    |
[INFO] [stdout] 45 | impl Compiler {
[INFO] [stdout]    | ------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub(crate) fn new_with_state(s: SymbolTable, constants: Vec<object::Object>) -> Self {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new_with_globals_store` and `stack_top` are never used
[INFO] [stdout]   --> src/vm.rs:64:19
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl VM {
[INFO] [stdout]    | ------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub(crate) fn new_with_globals_store(bytecode: compiler::Bytecode, s: [Option<object::Object>; GLOBALS_SIZE]) -> Self {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub(crate) fn stack_top(&self) -> Option<&object::Object> {
[INFO] [stdout]    |                   ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]    --> src/object.rs:223:5
[INFO] [stdout]     |
[INFO] [stdout] 221 | #[derive(Debug, PartialEq, Clone)]
[INFO] [stdout]     |                 --------- in this derive macro expansion
[INFO] [stdout] 222 | pub(crate) struct BuiltinObj {
[INFO] [stdout] 223 |     pub(crate) func: BuiltinFunction,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the address of the same function can vary between different codegen units
[INFO] [stdout]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `should_panic` is assigned to, but never used
[INFO] [stdout]    --> src/code.rs:525:13
[INFO] [stdout]     |
[INFO] [stdout] 525 |         let mut should_panic = false;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_should_panic` instead
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `should_panic` is never read
[INFO] [stdout]    --> src/code.rs:539:21
[INFO] [stdout]     |
[INFO] [stdout] 539 |                     should_panic = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/compiler/symbol_table.rs:64:26
[INFO] [stdout]    |
[INFO] [stdout] 64 |                     Some(mut outer) => {
[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: unreachable pattern
[INFO] [stdout]    --> src/compiler.rs:352:13
[INFO] [stdout]     |
[INFO] [stdout] 352 |             _ => ()
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/compiler.rs:352:13
[INFO] [stdout]     |
[INFO] [stdout]  76 |             ast::Node::Program(node) => {
[INFO] [stdout]     |             ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  85 |             ast::Node::Statement(ast::Statement::ExpressionStatement(node)) => {
[INFO] [stdout]     |             --------------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  93 |             ast::Node::Statement(ast::Statement::BlockStatement(node)) => {
[INFO] [stdout]     |             ---------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 102 |             ast::Node::Statement(ast::Statement::LetStatement(node)) => {
[INFO] [stdout]     |             -------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 352 |             _ => ()
[INFO] [stdout]     |             ^ ...and 13 other patterns collectively make this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/vm.rs:295:17
[INFO] [stdout]     |
[INFO] [stdout] 295 |                 _ => () // TODO
[INFO] [stdout]     |                 ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/vm.rs:295:17
[INFO] [stdout]     |
[INFO] [stdout]  90 |                 code::Opcode::OpConstant => {
[INFO] [stdout]     |                 ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  98 |                 code::Opcode::OpJump => {
[INFO] [stdout]     |                 -------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 103 |                 code::Opcode::OpJumpNotTruthy => {
[INFO] [stdout]     |                 ----------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 113 |                 code::Opcode::OpAdd | code::Opcode::OpSub | code::Opcode::OpMul | code::Opcode::OpDiv =>
[INFO] [stdout]     |                 ------------------------------------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 295 |                 _ => () // TODO
[INFO] [stdout]     |                 ^ ...and 21 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/vm.rs:862:13
[INFO] [stdout]     |
[INFO] [stdout] 862 |             _ => () // TODO
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/vm.rs:862:13
[INFO] [stdout]     |
[INFO] [stdout] 753 |             Expected::Integer(ExpectedInteger(expected)) => {
[INFO] [stdout]     |             -------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 761 |             Expected::Boolean(ExpectedBoolean(expected)) => {
[INFO] [stdout]     |             -------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 769 |             Expected::String(ExpectedString(expected)) => {
[INFO] [stdout]     |             ------------------------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 777 |             Expected::Null =>
[INFO] [stdout]     |             -------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 862 |             _ => () // TODO
[INFO] [stdout]     |             ^ ...and 3 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `should_panic` is assigned to, but never used
[INFO] [stdout]    --> src/code.rs:525:13
[INFO] [stdout]     |
[INFO] [stdout] 525 |         let mut should_panic = false;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_should_panic` instead
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `should_panic` is never read
[INFO] [stdout]    --> src/code.rs:539:21
[INFO] [stdout]     |
[INFO] [stdout] 539 |                     should_panic = true;
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/compiler/symbol_table.rs:64:26
[INFO] [stdout]    |
[INFO] [stdout] 64 |                     Some(mut outer) => {
[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: field `0` is never read
[INFO] [stdout]    --> src/compiler.rs:619:17
[INFO] [stdout]     |
[INFO] [stdout] 619 |         Boolean(Boolean),
[INFO] [stdout]     |         ------- ^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         field in this variant
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]     |
[INFO] [stdout] 619 -         Boolean(Boolean),
[INFO] [stdout] 619 +         Boolean(()),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]    --> src/compiler.rs:625:20
[INFO] [stdout]     |
[INFO] [stdout] 625 |     struct Boolean(bool);
[INFO] [stdout]     |            ------- ^^^^
[INFO] [stdout]     |            |
[INFO] [stdout]     |            field in this struct
[INFO] [stdout]     |
[INFO] [stdout]     = help: consider removing this field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `stack_top` is never used
[INFO] [stdout]   --> src/vm.rs:70:19
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl VM {
[INFO] [stdout]    | ------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub(crate) fn stack_top(&self) -> Option<&object::Object> {
[INFO] [stdout]    |                   ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]    --> src/object.rs:223:5
[INFO] [stdout]     |
[INFO] [stdout] 221 | #[derive(Debug, PartialEq, Clone)]
[INFO] [stdout]     |                 --------- in this derive macro expansion
[INFO] [stdout] 222 | pub(crate) struct BuiltinObj {
[INFO] [stdout] 223 |     pub(crate) func: BuiltinFunction,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the address of the same function can vary between different codegen units
[INFO] [stdout]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/compiler.rs:352:13
[INFO] [stdout]     |
[INFO] [stdout] 352 |             _ => ()
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/compiler.rs:352:13
[INFO] [stdout]     |
[INFO] [stdout]  76 |             ast::Node::Program(node) => {
[INFO] [stdout]     |             ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  85 |             ast::Node::Statement(ast::Statement::ExpressionStatement(node)) => {
[INFO] [stdout]     |             --------------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  93 |             ast::Node::Statement(ast::Statement::BlockStatement(node)) => {
[INFO] [stdout]     |             ---------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 102 |             ast::Node::Statement(ast::Statement::LetStatement(node)) => {
[INFO] [stdout]     |             -------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 352 |             _ => ()
[INFO] [stdout]     |             ^ ...and 13 other patterns collectively make this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/vm.rs:295:17
[INFO] [stdout]     |
[INFO] [stdout] 295 |                 _ => () // TODO
[INFO] [stdout]     |                 ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/vm.rs:295:17
[INFO] [stdout]     |
[INFO] [stdout]  90 |                 code::Opcode::OpConstant => {
[INFO] [stdout]     |                 ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout]  98 |                 code::Opcode::OpJump => {
[INFO] [stdout]     |                 -------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 103 |                 code::Opcode::OpJumpNotTruthy => {
[INFO] [stdout]     |                 ----------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 113 |                 code::Opcode::OpAdd | code::Opcode::OpSub | code::Opcode::OpMul | code::Opcode::OpDiv =>
[INFO] [stdout]     |                 ------------------------------------------------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 295 |                 _ => () // TODO
[INFO] [stdout]     |                 ^ ...and 21 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/vm.rs:862:13
[INFO] [stdout]     |
[INFO] [stdout] 862 |             _ => () // TODO
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/vm.rs:862:13
[INFO] [stdout]     |
[INFO] [stdout] 753 |             Expected::Integer(ExpectedInteger(expected)) => {
[INFO] [stdout]     |             -------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 761 |             Expected::Boolean(ExpectedBoolean(expected)) => {
[INFO] [stdout]     |             -------------------------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 769 |             Expected::String(ExpectedString(expected)) => {
[INFO] [stdout]     |             ------------------------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 777 |             Expected::Null =>
[INFO] [stdout]     |             -------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 862 |             _ => () // TODO
[INFO] [stdout]     |             ^ ...and 3 other patterns collectively make this unreachable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `args`
[INFO] [stdout]   --> src/benchmark.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let args: Vec<String> = env::args().collect();
[INFO] [stdout]    |         ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PROMPT` is never used
[INFO] [stdout]  --> src/repl.rs:5:7
[INFO] [stdout]   |
[INFO] [stdout] 5 | const PROMPT: &'static [u8] = ">> ".as_bytes();
[INFO] [stdout]   |       ^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start` is never used
[INFO] [stdout]  --> src/repl.rs:7:15
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub(crate) fn start(reader: &mut impl BufRead, writer: &mut impl Write) {
[INFO] [stdout]   |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MONKEY_FACE` is never used
[INFO] [stdout]   --> src/repl.rs:61:7
[INFO] [stdout]    |
[INFO] [stdout] 61 | const MONKEY_FACE: &'static str = r#"            __,__
[INFO] [stdout]    |       ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `print_parser_errors` is never used
[INFO] [stdout]   --> src/repl.rs:74:4
[INFO] [stdout]    |
[INFO] [stdout] 74 | fn print_parser_errors(writer: &mut impl Write, errors: Vec<String>) {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new_with_state` is never used
[INFO] [stdout]   --> src/compiler.rs:67:19
[INFO] [stdout]    |
[INFO] [stdout] 45 | impl Compiler {
[INFO] [stdout]    | ------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub(crate) fn new_with_state(s: SymbolTable, constants: Vec<object::Object>) -> Self {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]    --> src/compiler.rs:619:17
[INFO] [stdout]     |
[INFO] [stdout] 619 |         Boolean(Boolean),
[INFO] [stdout]     |         ------- ^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         field in this variant
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]     |
[INFO] [stdout] 619 -         Boolean(Boolean),
[INFO] [stdout] 619 +         Boolean(()),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]    --> src/compiler.rs:625:20
[INFO] [stdout]     |
[INFO] [stdout] 625 |     struct Boolean(bool);
[INFO] [stdout]     |            ------- ^^^^
[INFO] [stdout]     |            |
[INFO] [stdout]     |            field in this struct
[INFO] [stdout]     |
[INFO] [stdout]     = help: consider removing this field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new_with_globals_store` and `stack_top` are never used
[INFO] [stdout]   --> src/vm.rs:64:19
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl VM {
[INFO] [stdout]    | ------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 64 |     pub(crate) fn new_with_globals_store(bytecode: compiler::Bytecode, s: [Option<object::Object>; GLOBALS_SIZE]) -> Self {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     pub(crate) fn stack_top(&self) -> Option<&object::Object> {
[INFO] [stdout]    |                   ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]    --> src/object.rs:223:5
[INFO] [stdout]     |
[INFO] [stdout] 221 | #[derive(Debug, PartialEq, Clone)]
[INFO] [stdout]     |                 --------- in this derive macro expansion
[INFO] [stdout] 222 | pub(crate) struct BuiltinObj {
[INFO] [stdout] 223 |     pub(crate) func: BuiltinFunction,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the address of the same function can vary between different codegen units
[INFO] [stdout]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.55s
[INFO] running `Command { std: "docker" "inspect" "a861b703b5c59c06f2d682ce7f0b3b8b7913efc923c15ef6542166f7e8254426", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a861b703b5c59c06f2d682ce7f0b3b8b7913efc923c15ef6542166f7e8254426", kill_on_drop: false }`
[INFO] [stdout] a861b703b5c59c06f2d682ce7f0b3b8b7913efc923c15ef6542166f7e8254426
