[INFO] cloning repository https://github.com/LiemDQ/rucksacc
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/LiemDQ/rucksacc" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLiemDQ%2Frucksacc", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLiemDQ%2Frucksacc'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 55d04a9b5cdac2e9cbae3ce702d6543ed189330b
[INFO] checking LiemDQ/rucksacc against try#987a165cfab916796a8315782b83ac460a651ce2 for pr-145262
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FLiemDQ%2Frucksacc" "/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/LiemDQ/rucksacc
[INFO] finished tweaking git repo https://github.com/LiemDQ/rucksacc
[INFO] tweaked toml for git repo https://github.com/LiemDQ/rucksacc written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/LiemDQ/rucksacc on toolchain 987a165cfab916796a8315782b83ac460a651ce2
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+987a165cfab916796a8315782b83ac460a651ce2" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/LiemDQ/rucksacc 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" "+987a165cfab916796a8315782b83ac460a651ce2" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded cranelift-codegen-shared v0.83.0
[INFO] [stderr]   Downloaded cranelift-entity v0.83.0
[INFO] [stderr]   Downloaded ariadne v0.1.5
[INFO] [stderr]   Downloaded cranelift-bforest v0.83.0
[INFO] [stderr]   Downloaded cranelift-codegen-meta v0.83.0
[INFO] [stderr]   Downloaded regalloc v0.0.34
[INFO] [stderr]   Downloaded clap_derive v3.1.7
[INFO] [stderr]   Downloaded inkwell_internals v0.5.0
[INFO] [stderr]   Downloaded cranelift v0.83.0
[INFO] [stderr]   Downloaded cranelift-frontend v0.83.0
[INFO] [stderr]   Downloaded cranelift-codegen v0.83.0
[INFO] [stderr]   Downloaded llvm-sys v130.0.4
[INFO] [stderr]   Downloaded inkwell v0.1.0-beta.4
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+987a165cfab916796a8315782b83ac460a651ce2" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 8cdcbd550c4ca7702bc579202d0267ae0730bbb6492f5d0df7d5fe788090d2ee
[INFO] running `Command { std: "docker" "start" "-a" "8cdcbd550c4ca7702bc579202d0267ae0730bbb6492f5d0df7d5fe788090d2ee", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "8cdcbd550c4ca7702bc579202d0267ae0730bbb6492f5d0df7d5fe788090d2ee", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "8cdcbd550c4ca7702bc579202d0267ae0730bbb6492f5d0df7d5fe788090d2ee", kill_on_drop: false }`
[INFO] [stdout] 8cdcbd550c4ca7702bc579202d0267ae0730bbb6492f5d0df7d5fe788090d2ee
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:7ad1b28ee6f5f7f699f6cf7015098d6ccdd96d6f2d78dd06228f5b4c9faf309c" "/opt/rustwide/cargo-home/bin/cargo" "+987a165cfab916796a8315782b83ac460a651ce2" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] d39095b9f47c284c6a42f6ab8c1430edbe7c736c8b7227f0bb58e5feb6d4b5eb
[INFO] running `Command { std: "docker" "start" "-a" "d39095b9f47c284c6a42f6ab8c1430edbe7c736c8b7227f0bb58e5feb6d4b5eb", kill_on_drop: false }`
[INFO] [stderr]    Compiling memchr v2.5.0
[INFO] [stderr]    Compiling libc v0.2.125
[INFO] [stderr]    Compiling proc-macro2 v1.0.37
[INFO] [stderr]    Compiling unicode-xid v0.2.3
[INFO] [stderr]    Compiling autocfg v1.1.0
[INFO] [stderr]    Compiling ucd-trie v0.1.3
[INFO] [stderr]    Compiling version_check v0.9.4
[INFO] [stderr]     Checking smallvec v1.8.0
[INFO] [stderr]    Compiling syn v1.0.92
[INFO] [stderr]    Compiling log v0.4.17
[INFO] [stderr]    Compiling regex-syntax v0.6.25
[INFO] [stderr]    Compiling cranelift-codegen-shared v0.83.0
[INFO] [stderr]    Compiling lazy_static v1.4.0
[INFO] [stderr]    Compiling cc v1.0.73
[INFO] [stderr]    Compiling target-lexicon v0.12.3
[INFO] [stderr]    Compiling parking_lot_core v0.8.5
[INFO] [stderr]    Compiling cranelift-codegen-meta v0.83.0
[INFO] [stderr]     Checking rustc-hash v1.1.0
[INFO] [stderr]     Checking cranelift-entity v0.83.0
[INFO] [stderr]     Checking instant v0.1.12
[INFO] [stderr]    Compiling pest v2.1.3
[INFO] [stderr]     Checking scopeguard v1.1.0
[INFO] [stderr]    Compiling inkwell v0.1.0-beta.4
[INFO] [stderr]     Checking os_str_bytes v6.0.0
[INFO] [stderr]    Compiling heck v0.4.0
[INFO] [stderr]     Checking cranelift-bforest v0.83.0
[INFO] [stderr]    Compiling lock_api v0.4.7
[INFO] [stderr]    Compiling indexmap v1.8.1
[INFO] [stderr]     Checking regalloc v0.0.34
[INFO] [stderr]    Compiling proc-macro-error-attr v1.0.4
[INFO] [stderr]    Compiling proc-macro-error v1.0.4
[INFO] [stderr]     Checking ppv-lite86 v0.2.16
[INFO] [stderr]     Checking hashbrown v0.11.2
[INFO] [stderr]     Checking clap_lex v0.2.0
[INFO] [stderr]     Checking bitflags v1.3.2
[INFO] [stderr]     Checking yansi v0.5.1
[INFO] [stderr]     Checking textwrap v0.15.0
[INFO] [stderr]     Checking strsim v0.10.0
[INFO] [stderr]     Checking either v1.6.1
[INFO] [stderr]     Checking termcolor v1.1.3
[INFO] [stderr]     Checking once_cell v1.10.0
[INFO] [stderr]    Compiling aho-corasick v0.7.18
[INFO] [stderr]    Compiling quote v1.0.18
[INFO] [stderr]     Checking ariadne v0.1.5
[INFO] [stderr]     Checking getrandom v0.2.6
[INFO] [stderr]     Checking atty v0.2.14
[INFO] [stderr]     Checking rand_core v0.6.3
[INFO] [stderr]     Checking parking_lot v0.11.2
[INFO] [stderr]    Compiling semver-parser v0.10.2
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking regex v1.5.5
[INFO] [stderr]    Compiling semver v0.11.0
[INFO] [stderr]    Compiling cranelift-codegen v0.83.0
[INFO] [stderr]    Compiling llvm-sys v130.0.4
[INFO] [stderr]    Compiling inkwell_internals v0.5.0
[INFO] [stderr]    Compiling clap_derive v3.1.7
[INFO] [stderr]     Checking clap v3.1.15
[INFO] [stderr]     Checking cranelift-frontend v0.83.0
[INFO] [stderr]     Checking cranelift v0.83.0
[INFO] [stderr]     Checking rucksacc v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::str::Chars`
[INFO] [stdout]  --> src/lex.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::str::Chars;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::cell::Cell`
[INFO] [stdout]  --> src/lex.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::cell::Cell;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PeekNIterator`
[INFO] [stdout]  --> src/lex.rs:8:34
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::utils::{TextPosition, PeekNIterator, PeekN};
[INFO] [stdout]   |                                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AstKind`
[INFO] [stdout]  --> src/ast.rs:1:18
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::lex::{AstKind, Token};
[INFO] [stdout]   |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Qualifiers`
[INFO] [stdout]  --> src/ast.rs:4:54
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::types::{TypeKind, TypeInfo, StorageClass, Qualifiers};
[INFO] [stdout]   |                                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DeclaratorTypes`
[INFO] [stdout]  --> src/ast.rs:6:32
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::parse::{Declarator, DeclaratorTypes};
[INFO] [stdout]   |                                ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::str::Chars`
[INFO] [stdout]  --> src/lex.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::str::Chars;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::cell::Cell`
[INFO] [stdout]  --> src/lex.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::cell::Cell;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `PeekNIterator`
[INFO] [stdout]  --> src/lex.rs:8:34
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::utils::{TextPosition, PeekNIterator, PeekN};
[INFO] [stdout]   |                                  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `AstKind`
[INFO] [stdout]  --> src/ast.rs:1:18
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::lex::{AstKind, Token};
[INFO] [stdout]   |                  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Qualifiers`
[INFO] [stdout]  --> src/ast.rs:4:54
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crate::types::{TypeKind, TypeInfo, StorageClass, Qualifiers};
[INFO] [stdout]   |                                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `DeclaratorTypes`
[INFO] [stdout]  --> src/ast.rs:6:32
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::parse::{Declarator, DeclaratorTypes};
[INFO] [stdout]   |                                ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/parse.rs:761:33
[INFO] [stdout]     |
[INFO] [stdout] 760 | ...                   todo!("Deference var");
[INFO] [stdout]     |                       ---------------------- any code following this expression is unreachable
[INFO] [stdout] 761 | ...                   self.parse_struct_member(iter, &var, &next)?
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable expression
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/parse.rs:761:33
[INFO] [stdout]     |
[INFO] [stdout] 760 | ...                   todo!("Deference var");
[INFO] [stdout]     |                       ---------------------- any code following this expression is unreachable
[INFO] [stdout] 761 | ...                   self.parse_struct_member(iter, &var, &next)?
[INFO] [stdout]     |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unreachable expression
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]     --> src/parse.rs:1839:17
[INFO] [stdout]      |
[INFO] [stdout] 1838 |                   todo!("Handle user defined types");
[INFO] [stdout]      |                   ---------------------------------- any code following this expression is unreachable
[INFO] [stdout] 1839 | /                 match token.token_type {
[INFO] [stdout] 1840 | |                     TokenKind::Ident(name) => {
[INFO] [stdout] 1841 | |                         if let Some(symbol) = self.syms.typedefs.get_symbol(&name)  {
[INFO] [stdout] 1842 | |                             qty.ty.kind = symbol.typeinfo.kind;
[INFO] [stdout] ...    |
[INFO] [stdout] 1854 | |                     _ => (),
[INFO] [stdout] 1855 | |                 }
[INFO] [stdout]      | |_________________^ unreachable statement
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]     --> src/parse.rs:1839:17
[INFO] [stdout]      |
[INFO] [stdout] 1838 |                   todo!("Handle user defined types");
[INFO] [stdout]      |                   ---------------------------------- any code following this expression is unreachable
[INFO] [stdout] 1839 | /                 match token.token_type {
[INFO] [stdout] 1840 | |                     TokenKind::Ident(name) => {
[INFO] [stdout] 1841 | |                         if let Some(symbol) = self.syms.typedefs.get_symbol(&name)  {
[INFO] [stdout] 1842 | |                             qty.ty.kind = symbol.typeinfo.kind;
[INFO] [stdout] ...    |
[INFO] [stdout] 1854 | |                     _ => (),
[INFO] [stdout] 1855 | |                 }
[INFO] [stdout]      | |_________________^ unreachable statement
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `typeinfo` on type `&ast::Symbol`
[INFO] [stdout]     --> src/parse.rs:1842:50
[INFO] [stdout]      |
[INFO] [stdout] 1842 | ...                   qty.ty.kind = symbol.typeinfo.kind;
[INFO] [stdout]      |                                            ^^^^^^^^ unknown field
[INFO] [stdout]      |
[INFO] [stdout]      = note: available fields are: `name`, `position`, `sclass`, `node`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `typeinfo` on type `&ast::Symbol`
[INFO] [stdout]     --> src/parse.rs:1842:50
[INFO] [stdout]      |
[INFO] [stdout] 1842 | ...                   qty.ty.kind = symbol.typeinfo.kind;
[INFO] [stdout]      |                                            ^^^^^^^^ unknown field
[INFO] [stdout]      |
[INFO] [stdout]      = note: available fields are: `name`, `position`, `sclass`, `node`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: `match` arms have incompatible types
[INFO] [stdout]     --> src/parse.rs:1851:44
[INFO] [stdout]      |
[INFO] [stdout] 1847 |                       TokenKind::Keyword(kw) => match kw {
[INFO] [stdout]      |  _______________________________________________-
[INFO] [stdout] 1848 | |                         Keyword::Struct => self.parse_struct_union_specifier(&mut iter), //struct declaration
[INFO] [stdout]      | |                                            -------------------------------------------- this is found to be of type `Result<TypeInfo, ParseErr>`
[INFO] [stdout] 1849 | |                         Keyword::Union => self.parse_struct_union_specifier(&mut iter),
[INFO] [stdout]      | |                                           -------------------------------------------- this is found to be of type `Result<TypeInfo, ParseErr>`
[INFO] [stdout] 1850 | |                         Keyword::Enum => self.parse_enum_specifier(&mut iter),
[INFO] [stdout]      | |                                          ------------------------------------ this is found to be of type `Result<TypeInfo, ParseErr>`
[INFO] [stdout] 1851 | |                         Keyword::Typeof => (),
[INFO] [stdout]      | |                                            ^^ expected `Result<TypeInfo, ParseErr>`, found `()`
[INFO] [stdout] 1852 | |                         _ => (),
[INFO] [stdout] 1853 | |                     },
[INFO] [stdout]      | |_____________________- `match` arms have incompatible types
[INFO] [stdout]      |
[INFO] [stdout]      = note:   expected enum `Result<TypeInfo, ParseErr>`
[INFO] [stdout]              found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: `match` arms have incompatible types
[INFO] [stdout]     --> src/parse.rs:1851:44
[INFO] [stdout]      |
[INFO] [stdout] 1847 |                       TokenKind::Keyword(kw) => match kw {
[INFO] [stdout]      |  _______________________________________________-
[INFO] [stdout] 1848 | |                         Keyword::Struct => self.parse_struct_union_specifier(&mut iter), //struct declaration
[INFO] [stdout]      | |                                            -------------------------------------------- this is found to be of type `Result<TypeInfo, ParseErr>`
[INFO] [stdout] 1849 | |                         Keyword::Union => self.parse_struct_union_specifier(&mut iter),
[INFO] [stdout]      | |                                           -------------------------------------------- this is found to be of type `Result<TypeInfo, ParseErr>`
[INFO] [stdout] 1850 | |                         Keyword::Enum => self.parse_enum_specifier(&mut iter),
[INFO] [stdout]      | |                                          ------------------------------------ this is found to be of type `Result<TypeInfo, ParseErr>`
[INFO] [stdout] 1851 | |                         Keyword::Typeof => (),
[INFO] [stdout]      | |                                            ^^ expected `Result<TypeInfo, ParseErr>`, found `()`
[INFO] [stdout] 1852 | |                         _ => (),
[INFO] [stdout] 1853 | |                     },
[INFO] [stdout]      | |_____________________- `match` arms have incompatible types
[INFO] [stdout]      |
[INFO] [stdout]      = note:   expected enum `Result<TypeInfo, ParseErr>`
[INFO] [stdout]              found unit type `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]     --> src/parse.rs:1890:9
[INFO] [stdout]      |
[INFO] [stdout] 1888 |         todo!("Determine return type of this function");
[INFO] [stdout]      |         ----------------------------------------------- any code following this expression is unreachable
[INFO] [stdout] 1889 |
[INFO] [stdout] 1890 |         Ok(qty)
[INFO] [stdout]      |         ^^^^^^^ unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]     --> src/parse.rs:1890:9
[INFO] [stdout]      |
[INFO] [stdout] 1888 |         todo!("Determine return type of this function");
[INFO] [stdout]      |         ----------------------------------------------- any code following this expression is unreachable
[INFO] [stdout] 1889 |
[INFO] [stdout] 1890 |         Ok(qty)
[INFO] [stdout]      |         ^^^^^^^ unreachable expression
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `filename` on type `&Lexer<'a>`
[INFO] [stdout]    --> src/lex.rs:425:90
[INFO] [stdout]     |
[INFO] [stdout] 425 |             TextPosition { line: self.curr_line, col: self.curr_col, filename: Some(self.filename.to_string()) }, 
[INFO] [stdout]     |                                                                                          ^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `curr_line`, `curr_col`, `prev_line_col`, `body`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `filename` on type `&Lexer<'a>`
[INFO] [stdout]    --> src/lex.rs:426:98
[INFO] [stdout]     |
[INFO] [stdout] 426 |             TextPosition {line: self.curr_line, col: self.curr_col + offset, filename: Some(self.filename.to_string())}, 
[INFO] [stdout]     |                                                                                                  ^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `curr_line`, `curr_col`, `prev_line_col`, `body`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `filename` on type `&Lexer<'a>`
[INFO] [stdout]    --> src/lex.rs:425:90
[INFO] [stdout]     |
[INFO] [stdout] 425 |             TextPosition { line: self.curr_line, col: self.curr_col, filename: Some(self.filename.to_string()) }, 
[INFO] [stdout]     |                                                                                          ^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `curr_line`, `curr_col`, `prev_line_col`, `body`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `filename` on type `&Lexer<'a>`
[INFO] [stdout]    --> src/lex.rs:426:98
[INFO] [stdout]     |
[INFO] [stdout] 426 |             TextPosition {line: self.curr_line, col: self.curr_col + offset, filename: Some(self.filename.to_string())}, 
[INFO] [stdout]     |                                                                                                  ^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `curr_line`, `curr_col`, `prev_line_col`, `body`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `filename` on type `&mut Lexer<'a>`
[INFO] [stdout]    --> src/lex.rs:676:81
[INFO] [stdout]     |
[INFO] [stdout] 676 |                 Token::new(tok, has_space, self.curr_line, self.curr_col, &self.filename)
[INFO] [stdout]     |                                                                                 ^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `curr_line`, `curr_col`, `prev_line_col`, `body`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `filename` on type `&mut Lexer<'a>`
[INFO] [stdout]    --> src/lex.rs:676:81
[INFO] [stdout]     |
[INFO] [stdout] 676 |                 Token::new(tok, has_space, self.curr_line, self.curr_col, &self.filename)
[INFO] [stdout]     |                                                                                 ^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `curr_line`, `curr_col`, `prev_line_col`, `body`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this function takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/lex.rs:690:17
[INFO] [stdout]     |
[INFO] [stdout] 690 |     let token = Lexer::read_identifier_or_keyword(&mut iter).unwrap();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ --------- argument #1 of type `&mut Lexer<'_>` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/lex.rs:311:8
[INFO] [stdout]     |
[INFO] [stdout] 311 |     fn read_identifier_or_keyword(&mut self, iter: &mut impl Iterator<Item = char>) -> ParseRes<TokenKind> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^ ---------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 690 |     let token = Lexer::read_identifier_or_keyword(/* &mut Lexer<'_> */, &mut iter).unwrap();
[INFO] [stdout]     |                                                   +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this function takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/lex.rs:699:16
[INFO] [stdout]     |
[INFO] [stdout] 699 |     assert_eq!(Lexer::read_symbol(&mut iter).unwrap(),TokenKind::Punct(Punct::AssignShr));
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^ --------- argument #1 of type `&mut Lexer<'_>` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/lex.rs:502:8
[INFO] [stdout]     |
[INFO] [stdout] 502 |     fn read_symbol(&mut self, iter: &mut impl Iterator<Item = char>) -> ParseRes<TokenKind> {
[INFO] [stdout]     |        ^^^^^^^^^^^ ---------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 699 |     assert_eq!(Lexer::read_symbol(/* &mut Lexer<'_> */, &mut iter).unwrap(),TokenKind::Punct(Punct::AssignShr));
[INFO] [stdout]     |                                   +++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `node.kind` as enum variant `BinaryOp` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:117:14
[INFO] [stdout]     |
[INFO] [stdout] 117 |     Ok(match node.kind {
[INFO] [stdout]     |              ^^^^^^^^^
[INFO] [stdout] 118 |         ASTKind::Int(_, _) | ASTKind::Float(_, _) => true,
[INFO] [stdout] 119 |         ASTKind::BinaryOp(binop) => is_const_expr(&*binop.rhs)? && is_const_expr(&*binop.lhs)?,
[INFO] [stdout]     |                           ----- data moved here
[INFO] [stdout] 120 |         ASTKind::UnaryOp(unop) => is_const_expr(&*unop.id)?,
[INFO] [stdout]     |                          ---- ...and here
[INFO] [stdout] 121 |         ASTKind::TertiaryOp(tertop) => {
[INFO] [stdout]     |                             ------ ...and here
[INFO] [stdout] ...
[INFO] [stdout] 131 |         ASTKind::Cast(node, _) => {
[INFO] [stdout]     |                       ---- ...and here
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because these variables have types that don't implement the `Copy` trait
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 117 |     Ok(match &node.kind {
[INFO] [stdout]     |              +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `node.kind` as enum variant `BinaryOp` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:117:14
[INFO] [stdout]     |
[INFO] [stdout] 117 |     Ok(match node.kind {
[INFO] [stdout]     |              ^^^^^^^^^
[INFO] [stdout] 118 |         ASTKind::Int(_, _) | ASTKind::Float(_, _) => true,
[INFO] [stdout] 119 |         ASTKind::BinaryOp(binop) => is_const_expr(&*binop.rhs)? && is_const_expr(&*binop.lhs)?,
[INFO] [stdout]     |                           ----- data moved here
[INFO] [stdout] 120 |         ASTKind::UnaryOp(unop) => is_const_expr(&*unop.id)?,
[INFO] [stdout]     |                          ---- ...and here
[INFO] [stdout] 121 |         ASTKind::TertiaryOp(tertop) => {
[INFO] [stdout]     |                             ------ ...and here
[INFO] [stdout] ...
[INFO] [stdout] 131 |         ASTKind::Cast(node, _) => {
[INFO] [stdout]     |                       ---- ...and here
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because these variables have types that don't implement the `Copy` trait
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 117 |     Ok(match &node.kind {
[INFO] [stdout]     |              +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/parse.rs:193:32
[INFO] [stdout]     |
[INFO] [stdout] 193 |             Punct::AssignShl | Punct::AssignShl |
[INFO] [stdout]     |             ----------------   ^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]     |             |
[INFO] [stdout]     |             matches all the relevant values
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/parse.rs:193:32
[INFO] [stdout]     |
[INFO] [stdout] 193 |             Punct::AssignShl | Punct::AssignShl |
[INFO] [stdout]     |             ----------------   ^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]     |             |
[INFO] [stdout]     |             matches all the relevant values
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*iter` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:229:16
[INFO] [stdout]     |
[INFO] [stdout] 229 |     let iter = iter.peekable();
[INFO] [stdout]     |                ^^^^ ---------- `*iter` moved due to this method call
[INFO] [stdout]     |                |
[INFO] [stdout]     |                move occurs because `*iter` has type `impl Iterator<Item = Token>`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `peekable` takes ownership of the receiver `self`, which moves `*iter`
[INFO] [stdout]    --> /rustc/987a165cfab916796a8315782b83ac460a651ce2/library/core/src/iter/traits/iterator.rs:1055:17
[INFO] [stdout] help: if `impl Iterator<Item = Token>` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/parse.rs:228:26
[INFO] [stdout]     |
[INFO] [stdout] 228 | fn check_if_equal(iter: &impl Iterator<Item = Token>, kind: TokenKind) -> bool {
[INFO] [stdout]     |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^ consider constraining this type parameter with `Clone`
[INFO] [stdout] 229 |     let iter = iter.peekable();
[INFO] [stdout]     |                ---- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:230:5
[INFO] [stdout]     |
[INFO] [stdout] 230 |     iter.peek()
[INFO] [stdout]     |     ^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 229 |     let mut iter = iter.peekable();
[INFO] [stdout]     |         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*iter` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:229:16
[INFO] [stdout]     |
[INFO] [stdout] 229 |     let iter = iter.peekable();
[INFO] [stdout]     |                ^^^^ ---------- `*iter` moved due to this method call
[INFO] [stdout]     |                |
[INFO] [stdout]     |                move occurs because `*iter` has type `impl Iterator<Item = Token>`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] note: `peekable` takes ownership of the receiver `self`, which moves `*iter`
[INFO] [stdout]    --> /rustc/987a165cfab916796a8315782b83ac460a651ce2/library/core/src/iter/traits/iterator.rs:1055:17
[INFO] [stdout] help: if `impl Iterator<Item = Token>` implemented `Clone`, you could clone the value
[INFO] [stdout]    --> src/parse.rs:228:26
[INFO] [stdout]     |
[INFO] [stdout] 228 | fn check_if_equal(iter: &impl Iterator<Item = Token>, kind: TokenKind) -> bool {
[INFO] [stdout]     |                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^ consider constraining this type parameter with `Clone`
[INFO] [stdout] 229 |     let iter = iter.peekable();
[INFO] [stdout]     |                ---- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:230:5
[INFO] [stdout]     |
[INFO] [stdout] 230 |     iter.peek()
[INFO] [stdout]     |     ^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 229 |     let mut iter = iter.peekable();
[INFO] [stdout]     |         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:245:66
[INFO] [stdout]     |
[INFO] [stdout] 245 |         .and_then(|tok| Some(if tok.token_type == kind { let _ = iter.next(); true} else {false}))
[INFO] [stdout]     |                                                                  ^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 243 |     let mut iter = iter.peekable();
[INFO] [stdout]     |         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:245:66
[INFO] [stdout]     |
[INFO] [stdout] 245 |         .and_then(|tok| Some(if tok.token_type == kind { let _ = iter.next(); true} else {false}))
[INFO] [stdout]     |                                                                  ^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 243 |     let mut iter = iter.peekable();
[INFO] [stdout]     |         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:244:5
[INFO] [stdout]     |
[INFO] [stdout] 244 |     iter.peek()
[INFO] [stdout]     |     ^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 243 |     let mut iter = iter.peekable();
[INFO] [stdout]     |         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:244:5
[INFO] [stdout]     |
[INFO] [stdout] 244 |     iter.peek()
[INFO] [stdout]     |     ^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 243 |     let mut iter = iter.peekable();
[INFO] [stdout]     |         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0500]: closure requires unique access to `iter` but it is already borrowed
[INFO] [stdout]    --> src/parse.rs:245:19
[INFO] [stdout]     |
[INFO] [stdout] 244 |     iter.peek()
[INFO] [stdout]     |     ---- borrow occurs here
[INFO] [stdout] 245 |         .and_then(|tok| Some(if tok.token_type == kind { let _ = iter.next(); true} else {false}))
[INFO] [stdout]     |          -------- ^^^^^ closure construction occurs here         ---- second borrow occurs due to use of `iter` in closure
[INFO] [stdout]     |          |
[INFO] [stdout]     |          first borrow later used by call
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:253:23
[INFO] [stdout]     |
[INFO] [stdout] 253 |     let token = match iter.peek() {
[INFO] [stdout]     |                       ^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 252 |     let mut iter = iter.peekable();
[INFO] [stdout]     |         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0500]: closure requires unique access to `iter` but it is already borrowed
[INFO] [stdout]    --> src/parse.rs:245:19
[INFO] [stdout]     |
[INFO] [stdout] 244 |     iter.peek()
[INFO] [stdout]     |     ---- borrow occurs here
[INFO] [stdout] 245 |         .and_then(|tok| Some(if tok.token_type == kind { let _ = iter.next(); true} else {false}))
[INFO] [stdout]     |          -------- ^^^^^ closure construction occurs here         ---- second borrow occurs due to use of `iter` in closure
[INFO] [stdout]     |          |
[INFO] [stdout]     |          first borrow later used by call
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:253:23
[INFO] [stdout]     |
[INFO] [stdout] 253 |     let token = match iter.peek() {
[INFO] [stdout]     |                       ^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 252 |     let mut iter = iter.peekable();
[INFO] [stdout]     |         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:258:8
[INFO] [stdout]     |
[INFO] [stdout] 258 |     Ok(token.pos)
[INFO] [stdout]     |        ^^^^^^^^^ move occurs because `token.pos` has type `TextPosition`, 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] 258 |     Ok(token.pos.clone())
[INFO] [stdout]     |                 ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:258:8
[INFO] [stdout]     |
[INFO] [stdout] 258 |     Ok(token.pos)
[INFO] [stdout]     |        ^^^^^^^^^ move occurs because `token.pos` has type `TextPosition`, 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] 258 |     Ok(token.pos.clone())
[INFO] [stdout]     |                 ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tok`
[INFO] [stdout]    --> src/parse.rs:286:24
[INFO] [stdout]     |
[INFO] [stdout] 286 |         while let Some(tok) = iter.peek() {
[INFO] [stdout]     |                        ^^^ help: if this is intentional, prefix it with an underscore: `_tok`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tok`
[INFO] [stdout]    --> src/parse.rs:286:24
[INFO] [stdout]     |
[INFO] [stdout] 286 |         while let Some(tok) = iter.peek() {
[INFO] [stdout]     |                        ^^^ help: if this is intentional, prefix it with an underscore: `_tok`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:285:13
[INFO] [stdout]     |
[INFO] [stdout] 285 |         let mut iter = &mut iter.peekable();
[INFO] [stdout]     |             ----^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:285:13
[INFO] [stdout]     |
[INFO] [stdout] 285 |         let mut iter = &mut iter.peekable();
[INFO] [stdout]     |             ----^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:287:23
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 287 |             let qty = self.parse_declaration_specifier(iter)?; //TODO: determine return type of this function call.
[INFO] [stdout]     |                       ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 290 |                 nodes.push(self.parse_function_definition(iter, qty)?);
[INFO] [stdout]     |                            -----------------------------------------
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            first mutable borrow occurs here
[INFO] [stdout]     |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:287:23
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 287 |             let qty = self.parse_declaration_specifier(iter)?; //TODO: determine return type of this function call.
[INFO] [stdout]     |                       ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 290 |                 nodes.push(self.parse_function_definition(iter, qty)?);
[INFO] [stdout]     |                            -----------------------------------------
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            first mutable borrow occurs here
[INFO] [stdout]     |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:289:16
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 289 |             if self.is_func_def(iter)? {
[INFO] [stdout]     |                ^^^^ second mutable borrow occurs here
[INFO] [stdout] 290 |                 nodes.push(self.parse_function_definition(iter, qty)?);
[INFO] [stdout]     |                            -----------------------------------------
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            first mutable borrow occurs here
[INFO] [stdout]     |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `nodes` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:290:17
[INFO] [stdout]     |
[INFO] [stdout] 290 |                 nodes.push(self.parse_function_definition(iter, qty)?);
[INFO] [stdout]     |                 ^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 284 |         let mut nodes = Vec::new();
[INFO] [stdout]     |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:289:16
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 289 |             if self.is_func_def(iter)? {
[INFO] [stdout]     |                ^^^^ second mutable borrow occurs here
[INFO] [stdout] 290 |                 nodes.push(self.parse_function_definition(iter, qty)?);
[INFO] [stdout]     |                            -----------------------------------------
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            first mutable borrow occurs here
[INFO] [stdout]     |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `nodes` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:290:17
[INFO] [stdout]     |
[INFO] [stdout] 290 |                 nodes.push(self.parse_function_definition(iter, qty)?);
[INFO] [stdout]     |                 ^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 284 |         let mut nodes = Vec::new();
[INFO] [stdout]     |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:290:28
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 290 |                 nodes.push(self.parse_function_definition(iter, qty)?);
[INFO] [stdout]     |                            ^^^^-------------------------------------
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            `*self` was mutably borrowed here in the previous iteration of the loop
[INFO] [stdout]     |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:290:28
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 290 |                 nodes.push(self.parse_function_definition(iter, qty)?);
[INFO] [stdout]     |                            ^^^^-------------------------------------
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            `*self` was mutably borrowed here in the previous iteration of the loop
[INFO] [stdout]     |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:294:13
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 290 |                 nodes.push(self.parse_function_definition(iter, qty)?);
[INFO] [stdout]     |                            -----------------------------------------
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            first mutable borrow occurs here
[INFO] [stdout]     |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 294 |             self.parse_declaration(iter);        
[INFO] [stdout]     |             ^^^^ second mutable borrow occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:302:13
[INFO] [stdout]     |
[INFO] [stdout] 302 |         let mut is_first = true;
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:294:13
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 290 |                 nodes.push(self.parse_function_definition(iter, qty)?);
[INFO] [stdout]     |                            -----------------------------------------
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            first mutable borrow occurs here
[INFO] [stdout]     |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 294 |             self.parse_declaration(iter);        
[INFO] [stdout]     |             ^^^^ second mutable borrow occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ptr`
[INFO] [stdout]    --> src/parse.rs:324:13
[INFO] [stdout]     |
[INFO] [stdout] 324 |         let ptr = self.parse_pointer(iter, qty)?;
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_ptr`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:302:13
[INFO] [stdout]     |
[INFO] [stdout] 302 |         let mut is_first = true;
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ptr`
[INFO] [stdout]    --> src/parse.rs:324:13
[INFO] [stdout]     |
[INFO] [stdout] 324 |         let ptr = self.parse_pointer(iter, qty)?;
[INFO] [stdout]     |             ^^^ help: if this is intentional, prefix it with an underscore: `_ptr`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `qty`
[INFO] [stdout]     --> src/parse.rs:336:22
[INFO] [stdout]      |
[INFO] [stdout]  323 |     fn parse_abstract_declarator(&mut self, iter: &mut impl Iterator<Item = Token>, qty: QualifiedTypeInfo) -> ParseRes<Declarator> {
[INFO] [stdout]      |                                                                                     --- move occurs because `qty` has type `QualifiedTypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout]  324 |         let ptr = self.parse_pointer(iter, qty)?;
[INFO] [stdout]      |                                            --- value moved here
[INFO] [stdout] ...
[INFO] [stdout]  336 |                 qty: qty,
[INFO] [stdout]      |                      ^^^ value used here after move
[INFO] [stdout]      |
[INFO] [stdout] note: consider changing this parameter type in method `parse_pointer` to borrow instead if owning the value isn't necessary
[INFO] [stdout]     --> src/parse.rs:1361:82
[INFO] [stdout]      |
[INFO] [stdout] 1361 |     fn parse_pointer(&mut self, iter: &mut impl Iterator<Item = Token>, mut qty: QualifiedTypeInfo) -> ParseRes<QualifiedTypeInfo> {
[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]  324 |         let ptr = self.parse_pointer(iter, qty.clone())?;
[INFO] [stdout]      |                                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `qty`
[INFO] [stdout]     --> src/parse.rs:336:22
[INFO] [stdout]      |
[INFO] [stdout]  323 |     fn parse_abstract_declarator(&mut self, iter: &mut impl Iterator<Item = Token>, qty: QualifiedTypeInfo) -> ParseRes<Declarator> {
[INFO] [stdout]      |                                                                                     --- move occurs because `qty` has type `QualifiedTypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout]  324 |         let ptr = self.parse_pointer(iter, qty)?;
[INFO] [stdout]      |                                            --- value moved here
[INFO] [stdout] ...
[INFO] [stdout]  336 |                 qty: qty,
[INFO] [stdout]      |                      ^^^ value used here after move
[INFO] [stdout]      |
[INFO] [stdout] note: consider changing this parameter type in method `parse_pointer` to borrow instead if owning the value isn't necessary
[INFO] [stdout]     --> src/parse.rs:1361:82
[INFO] [stdout]      |
[INFO] [stdout] 1361 |     fn parse_pointer(&mut self, iter: &mut impl Iterator<Item = Token>, mut qty: QualifiedTypeInfo) -> ParseRes<QualifiedTypeInfo> {
[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]  324 |         let ptr = self.parse_pointer(iter, qty.clone())?;
[INFO] [stdout]      |                                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `symbol.node` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:357:21
[INFO] [stdout]     |
[INFO] [stdout] 357 |                     symbol.node
[INFO] [stdout]     |                     ^^^^^^^^^^^ move occurs because `symbol.node` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 357 |                     &symbol.node
[INFO] [stdout]     |                     +
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 357 |                     symbol.node.clone()
[INFO] [stdout]     |                                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of partially moved value: `token`
[INFO] [stdout]    --> src/parse.rs:359:87
[INFO] [stdout]     |
[INFO] [stdout] 354 |             TokenKind::Ident(s) => {
[INFO] [stdout]     |                              - value partially moved here
[INFO] [stdout] ...
[INFO] [stdout] 359 |                     return Err(Parser::gen_parser_err(ParseErrMsg::UnknownIdentifier, &token));
[INFO] [stdout]     |                                                                                       ^^^^^^ value borrowed here after partial move
[INFO] [stdout]     |
[INFO] [stdout]     = note: partial move occurs because value has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] help: borrow this binding in the pattern to avoid moving the value
[INFO] [stdout]     |
[INFO] [stdout] 354 |             TokenKind::Ident(ref s) => {
[INFO] [stdout]     |                              +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `symbol.node` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:357:21
[INFO] [stdout]     |
[INFO] [stdout] 357 |                     symbol.node
[INFO] [stdout]     |                     ^^^^^^^^^^^ move occurs because `symbol.node` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 357 |                     &symbol.node
[INFO] [stdout]     |                     +
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 357 |                     symbol.node.clone()
[INFO] [stdout]     |                                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of partially moved value: `token`
[INFO] [stdout]    --> src/parse.rs:359:87
[INFO] [stdout]     |
[INFO] [stdout] 354 |             TokenKind::Ident(s) => {
[INFO] [stdout]     |                              - value partially moved here
[INFO] [stdout] ...
[INFO] [stdout] 359 |                     return Err(Parser::gen_parser_err(ParseErrMsg::UnknownIdentifier, &token));
[INFO] [stdout]     |                                                                                       ^^^^^^ value borrowed here after partial move
[INFO] [stdout]     |
[INFO] [stdout]     = note: partial move occurs because value has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] help: borrow this binding in the pattern to avoid moving the value
[INFO] [stdout]     |
[INFO] [stdout] 354 |             TokenKind::Ident(ref s) => {
[INFO] [stdout]     |                              +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `name.qty.ty` as mutable, as `name` is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:386:63
[INFO] [stdout]     |
[INFO] [stdout] 386 |             let node = self.parse_initializer_list(&mut iter, &mut name.qty.ty)?;
[INFO] [stdout]     |                                                               ^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 381 |             let mut name = self.parse_type_name(&mut iter)?;
[INFO] [stdout]     |                 +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `ty` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:404:82
[INFO] [stdout]     |
[INFO] [stdout] 404 |     fn parse_initializer_list(&mut self, iter: &mut impl Iterator<Item = Token>, ty: &mut TypeInfo) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                                                                  ^^ not mutable
[INFO] [stdout] ...
[INFO] [stdout] 409 |             return self.parse_string_initializer(iter, &mut ty, s);
[INFO] [stdout]     |                                                        ------- cannot borrow as mutable
[INFO] [stdout] ...
[INFO] [stdout] 412 |             TypeKind::Array(_, _) => self.parse_array_initializer(iter, &mut ty),
[INFO] [stdout]     |                                                                         ------- cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] note: the binding is already a mutable borrow
[INFO] [stdout]    --> src/parse.rs:404:86
[INFO] [stdout]     |
[INFO] [stdout] 404 |     fn parse_initializer_list(&mut self, iter: &mut impl Iterator<Item = Token>, ty: &mut TypeInfo) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                                                                      ^^^^^^^^^^^^^
[INFO] [stdout] help: try removing `&mut` here
[INFO] [stdout]     |
[INFO] [stdout] 409 -             return self.parse_string_initializer(iter, &mut ty, s);
[INFO] [stdout] 409 +             return self.parse_string_initializer(iter, ty, s);
[INFO] [stdout]     |
[INFO] [stdout] help: try removing `&mut` here
[INFO] [stdout]     |
[INFO] [stdout] 412 -             TypeKind::Array(_, _) => self.parse_array_initializer(iter, &mut ty),
[INFO] [stdout] 412 +             TypeKind::Array(_, _) => self.parse_array_initializer(iter, ty),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]    --> src/parse.rs:431:17
[INFO] [stdout]     |
[INFO] [stdout] 431 |             let pos = extract_position(iter)?;
[INFO] [stdout]     |                 ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `ty` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:428:47
[INFO] [stdout]     |
[INFO] [stdout] 428 |             self.parse_initializer_list(iter, &mut ty)
[INFO] [stdout]     |                                               ^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] note: the binding is already a mutable borrow
[INFO] [stdout]    --> src/parse.rs:423:81
[INFO] [stdout]     |
[INFO] [stdout] 423 |     fn parse_initializer(&mut self, iter: &mut impl Iterator<Item = Token>, ty: &mut TypeInfo) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                                                                 ^^^^^^^^^^^^^
[INFO] [stdout] help: try removing `&mut` here
[INFO] [stdout]     |
[INFO] [stdout] 428 -             self.parse_initializer_list(iter, &mut ty)
[INFO] [stdout] 428 +             self.parse_initializer_list(iter, ty)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `name.qty.ty` as mutable, as `name` is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:386:63
[INFO] [stdout]     |
[INFO] [stdout] 386 |             let node = self.parse_initializer_list(&mut iter, &mut name.qty.ty)?;
[INFO] [stdout]     |                                                               ^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 381 |             let mut name = self.parse_type_name(&mut iter)?;
[INFO] [stdout]     |                 +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `ty` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:404:82
[INFO] [stdout]     |
[INFO] [stdout] 404 |     fn parse_initializer_list(&mut self, iter: &mut impl Iterator<Item = Token>, ty: &mut TypeInfo) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                                                                  ^^ not mutable
[INFO] [stdout] ...
[INFO] [stdout] 409 |             return self.parse_string_initializer(iter, &mut ty, s);
[INFO] [stdout]     |                                                        ------- cannot borrow as mutable
[INFO] [stdout] ...
[INFO] [stdout] 412 |             TypeKind::Array(_, _) => self.parse_array_initializer(iter, &mut ty),
[INFO] [stdout]     |                                                                         ------- cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] note: the binding is already a mutable borrow
[INFO] [stdout]    --> src/parse.rs:404:86
[INFO] [stdout]     |
[INFO] [stdout] 404 |     fn parse_initializer_list(&mut self, iter: &mut impl Iterator<Item = Token>, ty: &mut TypeInfo) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                                                                      ^^^^^^^^^^^^^
[INFO] [stdout] help: try removing `&mut` here
[INFO] [stdout]     |
[INFO] [stdout] 409 -             return self.parse_string_initializer(iter, &mut ty, s);
[INFO] [stdout] 409 +             return self.parse_string_initializer(iter, ty, s);
[INFO] [stdout]     |
[INFO] [stdout] help: try removing `&mut` here
[INFO] [stdout]     |
[INFO] [stdout] 412 -             TypeKind::Array(_, _) => self.parse_array_initializer(iter, &mut ty),
[INFO] [stdout] 412 +             TypeKind::Array(_, _) => self.parse_array_initializer(iter, ty),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pos`
[INFO] [stdout]    --> src/parse.rs:431:17
[INFO] [stdout]     |
[INFO] [stdout] 431 |             let pos = extract_position(iter)?;
[INFO] [stdout]     |                 ^^^ help: if this is intentional, prefix it with an underscore: `_pos`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `ty` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:428:47
[INFO] [stdout]     |
[INFO] [stdout] 428 |             self.parse_initializer_list(iter, &mut ty)
[INFO] [stdout]     |                                               ^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] note: the binding is already a mutable borrow
[INFO] [stdout]    --> src/parse.rs:423:81
[INFO] [stdout]     |
[INFO] [stdout] 423 |     fn parse_initializer(&mut self, iter: &mut impl Iterator<Item = Token>, ty: &mut TypeInfo) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                                                                 ^^^^^^^^^^^^^
[INFO] [stdout] help: try removing `&mut` here
[INFO] [stdout]     |
[INFO] [stdout] 428 -             self.parse_initializer_list(iter, &mut ty)
[INFO] [stdout] 428 +             self.parse_initializer_list(iter, ty)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `pos`, a captured variable in an `FnMut` closure
[INFO] [stdout]    --> src/parse.rs:450:60
[INFO] [stdout]     |
[INFO] [stdout] 448 |         let pos = extract_position(iter)?;
[INFO] [stdout]     |             ---   ----------------------- move occurs because `pos` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout]     |             |
[INFO] [stdout]     |             captured outer variable
[INFO] [stdout] 449 |         let chars = string.chars()
[INFO] [stdout] 450 |             .map(|c| ASTNode::new(ASTKind::Char(c as i16), pos))
[INFO] [stdout]     |                  --- captured by this `FnMut` closure      ^^^ `pos` is moved here
[INFO] [stdout]     |
[INFO] [stdout] help: `Fn` and `FnMut` closures require captured values to be able to be consumed multiple times, but an `FnOnce` consume them only once
[INFO] [stdout]    --> /rustc/987a165cfab916796a8315782b83ac460a651ce2/library/core/src/iter/traits/iterator.rs:775:12
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 450 |             .map(|c| ASTNode::new(ASTKind::Char(c as i16), pos.clone()))
[INFO] [stdout]     |                                                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `pos`, a captured variable in an `FnMut` closure
[INFO] [stdout]    --> src/parse.rs:450:60
[INFO] [stdout]     |
[INFO] [stdout] 448 |         let pos = extract_position(iter)?;
[INFO] [stdout]     |             ---   ----------------------- move occurs because `pos` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout]     |             |
[INFO] [stdout]     |             captured outer variable
[INFO] [stdout] 449 |         let chars = string.chars()
[INFO] [stdout] 450 |             .map(|c| ASTNode::new(ASTKind::Char(c as i16), pos))
[INFO] [stdout]     |                  --- captured by this `FnMut` closure      ^^^ `pos` is moved here
[INFO] [stdout]     |
[INFO] [stdout] help: `Fn` and `FnMut` closures require captured values to be able to be consumed multiple times, but an `FnOnce` consume them only once
[INFO] [stdout]    --> /rustc/987a165cfab916796a8315782b83ac460a651ce2/library/core/src/iter/traits/iterator.rs:775:12
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 450 |             .map(|c| ASTNode::new(ASTKind::Char(c as i16), pos.clone()))
[INFO] [stdout]     |                                                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `pos`
[INFO] [stdout]    --> src/parse.rs:460:31
[INFO] [stdout]     |
[INFO] [stdout] 448 |         let pos = extract_position(iter)?;
[INFO] [stdout]     |             --- move occurs because `pos` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout] 449 |         let chars = string.chars()
[INFO] [stdout] 450 |             .map(|c| ASTNode::new(ASTKind::Char(c as i16), pos))
[INFO] [stdout]     |                  --- value moved into closure here         --- variable moved due to use in closure
[INFO] [stdout] ...
[INFO] [stdout] 460 |         Ok(ASTNode::new(kind, pos))
[INFO] [stdout]     |                               ^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `new` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/ast.rs:277:36
[INFO] [stdout]     |
[INFO] [stdout] 277 |     pub fn new(kind: ASTKind, pos: TextPosition) -> Self {
[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] 450 |             .map(|c| ASTNode::new(ASTKind::Char(c as i16), pos.clone()))
[INFO] [stdout]     |                                                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `token`
[INFO] [stdout]    --> src/parse.rs:472:21
[INFO] [stdout]     |
[INFO] [stdout] 472 |                 let token = consume_token_or_eof(iter)?;
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_token`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `pos`
[INFO] [stdout]    --> src/parse.rs:460:31
[INFO] [stdout]     |
[INFO] [stdout] 448 |         let pos = extract_position(iter)?;
[INFO] [stdout]     |             --- move occurs because `pos` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout] 449 |         let chars = string.chars()
[INFO] [stdout] 450 |             .map(|c| ASTNode::new(ASTKind::Char(c as i16), pos))
[INFO] [stdout]     |                  --- value moved into closure here         --- variable moved due to use in closure
[INFO] [stdout] ...
[INFO] [stdout] 460 |         Ok(ASTNode::new(kind, pos))
[INFO] [stdout]     |                               ^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `new` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/ast.rs:277:36
[INFO] [stdout]     |
[INFO] [stdout] 277 |     pub fn new(kind: ASTKind, pos: TextPosition) -> Self {
[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] 450 |             .map(|c| ASTNode::new(ASTKind::Char(c as i16), pos.clone()))
[INFO] [stdout]     |                                                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `token`
[INFO] [stdout]    --> src/parse.rs:472:21
[INFO] [stdout]     |
[INFO] [stdout] 472 |                 let token = consume_token_or_eof(iter)?;
[INFO] [stdout]     |                     ^^^^^ help: if this is intentional, prefix it with an underscore: `_token`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `**element_type` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:470:32
[INFO] [stdout]     |
[INFO] [stdout] 470 |             let element_type = **element_type;
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^ move occurs because `**element_type` has type `TypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider removing the dereference here
[INFO] [stdout]     |
[INFO] [stdout] 470 -             let element_type = **element_type;
[INFO] [stdout] 470 +             let element_type = *element_type;
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 470 -             let element_type = **element_type;
[INFO] [stdout] 470 +             let element_type = element_type.clone();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `element_type` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:478:57
[INFO] [stdout]     |
[INFO] [stdout] 478 |                 let elem = self.parse_initializer(iter, &mut element_type)?;
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 470 |             let mut element_type = **element_type;
[INFO] [stdout]     |                 +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tok`
[INFO] [stdout]    --> src/parse.rs:514:24
[INFO] [stdout]     |
[INFO] [stdout] 514 |         while let Some(tok) = iter.peek() {
[INFO] [stdout]     |                        ^^^ help: if this is intentional, prefix it with an underscore: `_tok`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow data in a `&` reference as mutable
[INFO] [stdout]    --> src/parse.rs:518:57
[INFO] [stdout]     |
[INFO] [stdout] 518 |             let mem = self.parse_initializer(&mut iter, &mut member_iter.next().unwrap().clone())?;
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `members` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:519:13
[INFO] [stdout]     |
[INFO] [stdout] 519 |             members.push(mem);
[INFO] [stdout]     |             ^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 512 |         let mut members = Vec::new();
[INFO] [stdout]     |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `**element_type` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:470:32
[INFO] [stdout]     |
[INFO] [stdout] 470 |             let element_type = **element_type;
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^ move occurs because `**element_type` has type `TypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider removing the dereference here
[INFO] [stdout]     |
[INFO] [stdout] 470 -             let element_type = **element_type;
[INFO] [stdout] 470 +             let element_type = *element_type;
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 470 -             let element_type = **element_type;
[INFO] [stdout] 470 +             let element_type = element_type.clone();
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `element_type` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:478:57
[INFO] [stdout]     |
[INFO] [stdout] 478 |                 let elem = self.parse_initializer(iter, &mut element_type)?;
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 470 |             let mut element_type = **element_type;
[INFO] [stdout]     |                 +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tok`
[INFO] [stdout]    --> src/parse.rs:514:24
[INFO] [stdout]     |
[INFO] [stdout] 514 |         while let Some(tok) = iter.peek() {
[INFO] [stdout]     |                        ^^^ help: if this is intentional, prefix it with an underscore: `_tok`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow data in a `&` reference as mutable
[INFO] [stdout]    --> src/parse.rs:518:57
[INFO] [stdout]     |
[INFO] [stdout] 518 |             let mem = self.parse_initializer(&mut iter, &mut member_iter.next().unwrap().clone())?;
[INFO] [stdout]     |                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `members` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:519:13
[INFO] [stdout]     |
[INFO] [stdout] 519 |             members.push(mem);
[INFO] [stdout]     |             ^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 512 |         let mut members = Vec::new();
[INFO] [stdout]     |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tk.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:535:39
[INFO] [stdout]     |
[INFO] [stdout] 535 |         Ok(ASTNode { kind: kind, pos: tk.pos})
[INFO] [stdout]     |                                       ^^^^^^ move occurs because `tk.pos` has type `TextPosition`, 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] 535 |         Ok(ASTNode { kind: kind, pos: tk.pos.clone()})
[INFO] [stdout]     |                                             ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tk.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:535:39
[INFO] [stdout]     |
[INFO] [stdout] 535 |         Ok(ASTNode { kind: kind, pos: tk.pos})
[INFO] [stdout]     |                                       ^^^^^^ move occurs because `tk.pos` has type `TextPosition`, 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] 535 |         Ok(ASTNode { kind: kind, pos: tk.pos.clone()})
[INFO] [stdout]     |                                             ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `params`
[INFO] [stdout]    --> src/parse.rs:549:13
[INFO] [stdout]     |
[INFO] [stdout] 549 |         let params = match dec.qty.ty.kind {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_params`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_vararg`
[INFO] [stdout]    --> src/parse.rs:550:39
[INFO] [stdout]     |
[INFO] [stdout] 550 |             TypeKind::Func(_, params, is_vararg) => params, //TODO: handle varargs
[INFO] [stdout]     |                                       ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_vararg`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `params`
[INFO] [stdout]    --> src/parse.rs:549:13
[INFO] [stdout]     |
[INFO] [stdout] 549 |         let params = match dec.qty.ty.kind {
[INFO] [stdout]     |             ^^^^^^ help: if this is intentional, prefix it with an underscore: `_params`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_vararg`
[INFO] [stdout]    --> src/parse.rs:550:39
[INFO] [stdout]     |
[INFO] [stdout] 550 |             TypeKind::Func(_, params, is_vararg) => params, //TODO: handle varargs
[INFO] [stdout]     |                                       ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_vararg`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:548:41
[INFO] [stdout]     |
[INFO] [stdout] 546 |         let token = iter.peek().unwrap(); // TODO: error handling for this
[INFO] [stdout]     |                     ---- first mutable borrow occurs here
[INFO] [stdout] 547 |
[INFO] [stdout] 548 |         let dec = self.parse_declarator(&mut iter, qty)?; 
[INFO] [stdout]     |                                         ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 559 |         let func_symbol = ASTNode::new(ASTKind::String(dec.name), TextPosition { line: 0, col: 0, filename: token.pos.filename });
[INFO] [stdout]     |                                                                                                             ------------------ first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos.filename` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:559:109
[INFO] [stdout]     |
[INFO] [stdout] 559 |         let func_symbol = ASTNode::new(ASTKind::String(dec.name), TextPosition { line: 0, col: 0, filename: token.pos.filename });
[INFO] [stdout]     |                                                                                                             ^^^^^^^^^^^^^^^^^^ move occurs because `token.pos.filename` has type `Option<String>`, 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] 559 |         let func_symbol = ASTNode::new(ASTKind::String(dec.name), TextPosition { line: 0, col: 0, filename: token.pos.filename.clone() });
[INFO] [stdout]     |                                                                                                                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `dec`
[INFO] [stdout]    --> src/parse.rs:575:25
[INFO] [stdout]     |
[INFO] [stdout] 570 |                 for dec in funcs {
[INFO] [stdout]     |                     --- move occurs because `dec` has type `Declarator`, which does not implement the `Copy` trait
[INFO] [stdout] 571 |                     let node = Parser::make_variable_node_from_declarator(dec, &token)?;
[INFO] [stdout]     |                                                                           --- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 575 |                         dec.qty.storage,
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `make_variable_node_from_declarator` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/parse.rs:529:49
[INFO] [stdout]     |
[INFO] [stdout] 529 |     fn make_variable_node_from_declarator(decl: Declarator, tk: &Token) -> ParseRes<ASTNode> {
[INFO] [stdout]     |        ----------------------------------       ^^^^^^^^^^ this parameter takes ownership of the value
[INFO] [stdout]     |        |
[INFO] [stdout]     |        in this method
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 571 |                     let node = Parser::make_variable_node_from_declarator(dec.clone(), &token)?;
[INFO] [stdout]     |                                                                              ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:548:41
[INFO] [stdout]     |
[INFO] [stdout] 546 |         let token = iter.peek().unwrap(); // TODO: error handling for this
[INFO] [stdout]     |                     ---- first mutable borrow occurs here
[INFO] [stdout] 547 |
[INFO] [stdout] 548 |         let dec = self.parse_declarator(&mut iter, qty)?; 
[INFO] [stdout]     |                                         ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 559 |         let func_symbol = ASTNode::new(ASTKind::String(dec.name), TextPosition { line: 0, col: 0, filename: token.pos.filename });
[INFO] [stdout]     |                                                                                                             ------------------ first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos.filename` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:559:109
[INFO] [stdout]     |
[INFO] [stdout] 559 |         let func_symbol = ASTNode::new(ASTKind::String(dec.name), TextPosition { line: 0, col: 0, filename: token.pos.filename });
[INFO] [stdout]     |                                                                                                             ^^^^^^^^^^^^^^^^^^ move occurs because `token.pos.filename` has type `Option<String>`, 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] 559 |         let func_symbol = ASTNode::new(ASTKind::String(dec.name), TextPosition { line: 0, col: 0, filename: token.pos.filename.clone() });
[INFO] [stdout]     |                                                                                                                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:578:26
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 556 |         let scope = self.syms.identifiers.enter_scope();
[INFO] [stdout]     |                     -----------------------------------
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     first mutable borrow occurs here
[INFO] [stdout]     |                     argument requires that `self.syms.identifiers` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 578 |                 Box::new(self.parse_compound_stmt(&mut iter, Some(scope))?)
[INFO] [stdout]     |                          ^^^^ second mutable borrow occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `dec`
[INFO] [stdout]    --> src/parse.rs:575:25
[INFO] [stdout]     |
[INFO] [stdout] 570 |                 for dec in funcs {
[INFO] [stdout]     |                     --- move occurs because `dec` has type `Declarator`, which does not implement the `Copy` trait
[INFO] [stdout] 571 |                     let node = Parser::make_variable_node_from_declarator(dec, &token)?;
[INFO] [stdout]     |                                                                           --- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 575 |                         dec.qty.storage,
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `make_variable_node_from_declarator` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/parse.rs:529:49
[INFO] [stdout]     |
[INFO] [stdout] 529 |     fn make_variable_node_from_declarator(decl: Declarator, tk: &Token) -> ParseRes<ASTNode> {
[INFO] [stdout]     |        ----------------------------------       ^^^^^^^^^^ this parameter takes ownership of the value
[INFO] [stdout]     |        |
[INFO] [stdout]     |        in this method
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 571 |                     let node = Parser::make_variable_node_from_declarator(dec.clone(), &token)?;
[INFO] [stdout]     |                                                                              ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:578:51
[INFO] [stdout]     |
[INFO] [stdout] 546 |         let token = iter.peek().unwrap(); // TODO: error handling for this
[INFO] [stdout]     |                     ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 578 |                 Box::new(self.parse_compound_stmt(&mut iter, Some(scope))?)
[INFO] [stdout]     |                                                   ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 586 |         let node = ASTNode::new(ASTKind::Func(func),token.pos);
[INFO] [stdout]     |                                                     --------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:578:26
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 556 |         let scope = self.syms.identifiers.enter_scope();
[INFO] [stdout]     |                     -----------------------------------
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     first mutable borrow occurs here
[INFO] [stdout]     |                     argument requires that `self.syms.identifiers` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 578 |                 Box::new(self.parse_compound_stmt(&mut iter, Some(scope))?)
[INFO] [stdout]     |                          ^^^^ second mutable borrow occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:578:51
[INFO] [stdout]     |
[INFO] [stdout] 546 |         let token = iter.peek().unwrap(); // TODO: error handling for this
[INFO] [stdout]     |                     ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 578 |                 Box::new(self.parse_compound_stmt(&mut iter, Some(scope))?)
[INFO] [stdout]     |                                                   ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 586 |         let node = ASTNode::new(ASTKind::Func(func),token.pos);
[INFO] [stdout]     |                                                     --------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `dec.name`
[INFO] [stdout]    --> src/parse.rs:584:36
[INFO] [stdout]     |
[INFO] [stdout] 559 |         let func_symbol = ASTNode::new(ASTKind::String(dec.name), TextPosition { line: 0, col: 0, filename: token.pos.filename });
[INFO] [stdout]     |                                                        -------- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 584 |         let func = Function {name: dec.name, declarator: dec, body: result, stack_size: 0};
[INFO] [stdout]     |                                    ^^^^^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because `dec.name` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `dec.name`
[INFO] [stdout]    --> src/parse.rs:584:36
[INFO] [stdout]     |
[INFO] [stdout] 559 |         let func_symbol = ASTNode::new(ASTKind::String(dec.name), TextPosition { line: 0, col: 0, filename: token.pos.filename });
[INFO] [stdout]     |                                                        -------- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 584 |         let func = Function {name: dec.name, declarator: dec, body: result, stack_size: 0};
[INFO] [stdout]     |                                    ^^^^^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because `dec.name` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of partially moved value: `dec`
[INFO] [stdout]    --> src/parse.rs:584:58
[INFO] [stdout]     |
[INFO] [stdout] 584 |         let func = Function {name: dec.name, declarator: dec, body: result, stack_size: 0};
[INFO] [stdout]     |                                    --------              ^^^ value used here after partial move
[INFO] [stdout]     |                                    |
[INFO] [stdout]     |                                    value partially moved here
[INFO] [stdout]     |
[INFO] [stdout]     = note: partial move occurs because `dec.name` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:586:53
[INFO] [stdout]     |
[INFO] [stdout] 586 |         let node = ASTNode::new(ASTKind::Func(func),token.pos);
[INFO] [stdout]     |                                                     ^^^^^^^^^ move occurs because `token.pos` has type `TextPosition`, 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] 586 |         let node = ASTNode::new(ASTKind::Func(func),token.pos.clone());
[INFO] [stdout]     |                                                              ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `dec.name`
[INFO] [stdout]    --> src/parse.rs:588:38
[INFO] [stdout]     |
[INFO] [stdout] 548 |         let dec = self.parse_declarator(&mut iter, qty)?; 
[INFO] [stdout]     |             --- move occurs because `dec` has type `Declarator`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 584 |         let func = Function {name: dec.name, declarator: dec, body: result, stack_size: 0};
[INFO] [stdout]     |                                                          --- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 588 |         let func = Symbol::new_local(&dec.name, node.clone());
[INFO] [stdout]     |                                      ^^^^^^^^^ value borrowed here after move
[INFO] [stdout]     |
[INFO] [stdout]     = note: borrow occurs due to deref coercion to `str`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `self.syms.identifiers` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:591:9
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 556 |         let scope = self.syms.identifiers.enter_scope();
[INFO] [stdout]     |                     -----------------------------------
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     first mutable borrow occurs here
[INFO] [stdout]     |                     argument requires that `self.syms.identifiers` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 591 |         self.syms.identifiers.push_global_symbol(func)?;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `var`
[INFO] [stdout]    --> src/parse.rs:757:50
[INFO] [stdout]     |
[INFO] [stdout] 757 |                         if let ASTKind::Variable(var) = lhs.kind {
[INFO] [stdout]     |                                                  ^^^ help: if this is intentional, prefix it with an underscore: `_var`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `next`
[INFO] [stdout]    --> src/parse.rs:759:41
[INFO] [stdout]     |
[INFO] [stdout] 759 | ...                   if let Some(next) = iter.next() {
[INFO] [stdout]     |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_next`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of partially moved value: `dec`
[INFO] [stdout]    --> src/parse.rs:584:58
[INFO] [stdout]     |
[INFO] [stdout] 584 |         let func = Function {name: dec.name, declarator: dec, body: result, stack_size: 0};
[INFO] [stdout]     |                                    --------              ^^^ value used here after partial move
[INFO] [stdout]     |                                    |
[INFO] [stdout]     |                                    value partially moved here
[INFO] [stdout]     |
[INFO] [stdout]     = note: partial move occurs because `dec.name` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lhs`
[INFO] [stdout]    --> src/parse.rs:792:21
[INFO] [stdout]     |
[INFO] [stdout] 792 |                 let lhs = if op == TokenKind::Punct(Punct::Question) {
[INFO] [stdout]     |                     ^^^ help: if this is intentional, prefix it with an underscore: `_lhs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:586:53
[INFO] [stdout]     |
[INFO] [stdout] 586 |         let node = ASTNode::new(ASTKind::Func(func),token.pos);
[INFO] [stdout]     |                                                     ^^^^^^^^^ move occurs because `token.pos` has type `TextPosition`, 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] 586 |         let node = ASTNode::new(ASTKind::Func(func),token.pos.clone());
[INFO] [stdout]     |                                                              ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `dec.name`
[INFO] [stdout]    --> src/parse.rs:588:38
[INFO] [stdout]     |
[INFO] [stdout] 548 |         let dec = self.parse_declarator(&mut iter, qty)?; 
[INFO] [stdout]     |             --- move occurs because `dec` has type `Declarator`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 584 |         let func = Function {name: dec.name, declarator: dec, body: result, stack_size: 0};
[INFO] [stdout]     |                                                          --- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 588 |         let func = Symbol::new_local(&dec.name, node.clone());
[INFO] [stdout]     |                                      ^^^^^^^^^ value borrowed here after move
[INFO] [stdout]     |
[INFO] [stdout]     = note: borrow occurs due to deref coercion to `str`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `self.syms.identifiers` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:591:9
[INFO] [stdout]     |
[INFO] [stdout] 272 | impl<'a> Parser<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 556 |         let scope = self.syms.identifiers.enter_scope();
[INFO] [stdout]     |                     -----------------------------------
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     first mutable borrow occurs here
[INFO] [stdout]     |                     argument requires that `self.syms.identifiers` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 591 |         self.syms.identifiers.push_global_symbol(func)?;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `var`
[INFO] [stdout]    --> src/parse.rs:757:50
[INFO] [stdout]     |
[INFO] [stdout] 757 |                         if let ASTKind::Variable(var) = lhs.kind {
[INFO] [stdout]     |                                                  ^^^ help: if this is intentional, prefix it with an underscore: `_var`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `next`
[INFO] [stdout]    --> src/parse.rs:759:41
[INFO] [stdout]     |
[INFO] [stdout] 759 | ...                   if let Some(next) = iter.next() {
[INFO] [stdout]     |                                   ^^^^ help: if this is intentional, prefix it with an underscore: `_next`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lhs`
[INFO] [stdout]    --> src/parse.rs:792:21
[INFO] [stdout]     |
[INFO] [stdout] 792 |                 let lhs = if op == TokenKind::Punct(Punct::Question) {
[INFO] [stdout]     |                     ^^^ help: if this is intentional, prefix it with an underscore: `_lhs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `symbol.node` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:655:25
[INFO] [stdout]     |
[INFO] [stdout] 655 |                         symbol.node
[INFO] [stdout]     |                         ^^^^^^^^^^^ move occurs because `symbol.node` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 655 |                         &symbol.node
[INFO] [stdout]     |                         +
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 655 |                         symbol.node.clone()
[INFO] [stdout]     |                                    ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of partially moved value: `token`
[INFO] [stdout]    --> src/parse.rs:657:91
[INFO] [stdout]     |
[INFO] [stdout] 653 |                 TokenKind::Ident(id) => {
[INFO] [stdout]     |                                  -- value partially moved here
[INFO] [stdout] ...
[INFO] [stdout] 657 |                         return Err(Parser::gen_parser_err(ParseErrMsg::UnknownIdentifier, &token));
[INFO] [stdout]     |                                                                                           ^^^^^^ value borrowed here after partial move
[INFO] [stdout]     |
[INFO] [stdout]     = note: partial move occurs because value has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] help: borrow this binding in the pattern to avoid moving the value
[INFO] [stdout]     |
[INFO] [stdout] 653 |                 TokenKind::Ident(ref id) => {
[INFO] [stdout]     |                                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.token_type` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:708:64
[INFO] [stdout]     |
[INFO] [stdout] 708 |                 TokenKind::Punct(_) | TokenKind::Keyword(_) => tok.token_type,
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^ move occurs because `tok.token_type` has type `TokenKind`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 708 |                 TokenKind::Punct(_) | TokenKind::Keyword(_) => &tok.token_type,
[INFO] [stdout]     |                                                                +
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 708 |                 TokenKind::Punct(_) | TokenKind::Keyword(_) => tok.token_type.clone(),
[INFO] [stdout]     |                                                                              ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:719:17
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 719 |                 iter.next();
[INFO] [stdout]     |                 ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 741 |                             return Err(Parser::gen_parser_err(ParseErrMsg::InvalidFunctionCall, &tok));
[INFO] [stdout]     |                                                                                                 ---- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:727:54
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 727 |                         let rhs = self.parse_expr_bp(iter, MIN_BIND_PRIO)?;
[INFO] [stdout]     |                                                      ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 731 |                             pos: tok.pos,
[INFO] [stdout]     |                                  ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:728:44
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 728 |                         ensure_and_consume(&mut iter, TokenKind::Punct(Punct::CloseBoxBracket))?;
[INFO] [stdout]     |                                            ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 731 |                             pos: tok.pos,
[INFO] [stdout]     |                                  ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:731:34
[INFO] [stdout]     |
[INFO] [stdout] 731 | ...                   pos: tok.pos,
[INFO] [stdout]     |                            ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 731 |                             pos: tok.pos.clone(),
[INFO] [stdout]     |                                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:733:75
[INFO] [stdout]     |
[INFO] [stdout] 733 |                         ASTNode{kind: ASTKind::Load(Box::new(node)), pos: tok.pos}
[INFO] [stdout]     |                                                                           ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 733 |                         ASTNode{kind: ASTKind::Load(Box::new(node)), pos: tok.pos.clone()}
[INFO] [stdout]     |                                                                                  ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value
[INFO] [stdout]    --> src/parse.rs:745:50
[INFO] [stdout]     |
[INFO] [stdout] 642 |         let mut lhs = match iter.next() {
[INFO] [stdout]     |             ------- move occurs because `lhs` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 725 |                 lhs = match op {
[INFO] [stdout]     |                 --- this reinitialization might get skipped
[INFO] [stdout] ...
[INFO] [stdout] 745 |                         if let ASTKind::Variable(var) = lhs.kind {
[INFO] [stdout]     |                                                  ^^^ value used here after move
[INFO] [stdout] ...
[INFO] [stdout] 800 |                             lhs: Box::new(lhs), 
[INFO] [stdout]     |                                           --- value moved here, in previous iteration of loop
[INFO] [stdout] ...
[INFO] [stdout] 834 |                         ASTNode {kind: ASTKind::BinaryOp(BinaryExpr{op: binop, rhs: Box::new(rhs), lhs: Box::new(lhs)}), pos: tok.pos}
[INFO] [stdout]     |                                                                                                                  --- value moved here, in previous iteration of loop
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:772:67
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 772 |                             let rhs = Box::new(self.parse_expr_bp(iter, min_bind_prio)?);
[INFO] [stdout]     |                                                                   ^^^^ second mutable borrow occurs here
[INFO] [stdout] 773 |                             let unary_expr = UnaryExpr{op: unary_op, id: rhs };
[INFO] [stdout] 774 |                             ASTNode::new(ASTKind::UnaryOp(unary_expr), tok.pos)
[INFO] [stdout]     |                                                                        ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:774:72
[INFO] [stdout]     |
[INFO] [stdout] 774 | ...                   ASTNode::new(ASTKind::UnaryOp(unary_expr), tok.pos)
[INFO] [stdout]     |                                                                  ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 774 |                             ASTNode::new(ASTKind::UnaryOp(unary_expr), tok.pos.clone())
[INFO] [stdout]     |                                                                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:789:17
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 789 |                 iter.next();
[INFO] [stdout]     |                 ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 831 |                             _ => return Err(Parser::gen_parser_err(ParseErrMsg::Something, &tok)),
[INFO] [stdout]     |                                                                                            ---- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:793:50
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 793 |                     let mhs = self.parse_expr_bp(&mut iter, MIN_BIND_PRIO)?;
[INFO] [stdout]     |                                                  ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 804 |                     ASTNode {kind: kind, pos: tok.pos}
[INFO] [stdout]     |                                               ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:795:40
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 795 |                     ensure_and_consume(&mut iter, TokenKind::Punct(Punct::Colon))?;
[INFO] [stdout]     |                                        ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 804 |                     ASTNode {kind: kind, pos: tok.pos}
[INFO] [stdout]     |                                               ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:797:50
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 797 |                     let rhs = self.parse_expr_bp(&mut iter, r_bp)?;
[INFO] [stdout]     |                                                  ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 804 |                     ASTNode {kind: kind, pos: tok.pos}
[INFO] [stdout]     |                                               ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:804:47
[INFO] [stdout]     |
[INFO] [stdout] 804 |                     ASTNode {kind: kind, pos: tok.pos}
[INFO] [stdout]     |                                               ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 804 |                     ASTNode {kind: kind, pos: tok.pos.clone()}
[INFO] [stdout]     |                                                      ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:807:50
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 807 |                     let rhs = self.parse_expr_bp(iter, r_bp)?;
[INFO] [stdout]     |                                                  ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 831 |                             _ => return Err(Parser::gen_parser_err(ParseErrMsg::Something, &tok)),
[INFO] [stdout]     |                                                                                            ---- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:834:127
[INFO] [stdout]     |
[INFO] [stdout] 834 |                         ASTNode {kind: ASTKind::BinaryOp(BinaryExpr{op: binop, rhs: Box::new(rhs), lhs: Box::new(lhs)}), pos: tok.pos}
[INFO] [stdout]     |                                                                                                                               ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 834 |                         ASTNode {kind: ASTKind::BinaryOp(BinaryExpr{op: binop, rhs: Box::new(rhs), lhs: Box::new(lhs)}), pos: tok.pos.clone()}
[INFO] [stdout]     |                                                                                                                                      ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `new_rhs` is never read
[INFO] [stdout]    --> src/parse.rs:869:25
[INFO] [stdout]     |
[INFO] [stdout] 869 |                 let mut new_rhs = rhs.clone();
[INFO] [stdout]     |                         ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:870:21
[INFO] [stdout]     |
[INFO] [stdout] 870 |                 let mut node = ASTNode::make_assignment(lhs, rhs);
[INFO] [stdout]     |                     ----^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:857:29
[INFO] [stdout]     |
[INFO] [stdout] 852 |         let token = match iter.peek() {
[INFO] [stdout]     |                           ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 857 |         if consume_if_equal(&mut iter, TokenKind::Punct(Punct::Semicolon)) {
[INFO] [stdout]     |                             ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 861 |             Ok(ASTNode {kind: node_kind, pos: token.pos})
[INFO] [stdout]     |                                               --------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `symbol.node` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:655:25
[INFO] [stdout]     |
[INFO] [stdout] 655 |                         symbol.node
[INFO] [stdout]     |                         ^^^^^^^^^^^ move occurs because `symbol.node` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 655 |                         &symbol.node
[INFO] [stdout]     |                         +
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 655 |                         symbol.node.clone()
[INFO] [stdout]     |                                    ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:861:47
[INFO] [stdout]     |
[INFO] [stdout] 861 |             Ok(ASTNode {kind: node_kind, pos: token.pos})
[INFO] [stdout]     |                                               ^^^^^^^^^ move occurs because `token.pos` has type `TextPosition`, 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] 861 |             Ok(ASTNode {kind: node_kind, pos: token.pos.clone()})
[INFO] [stdout]     |                                                        ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:864:52
[INFO] [stdout]     |
[INFO] [stdout] 852 |         let token = match iter.peek() {
[INFO] [stdout]     |                           ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 864 |             let declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                                                    ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] 865 |             let lhs = ASTNode::make_variable_declaration(declarator, &token);
[INFO] [stdout]     |                                                                      ------ first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of partially moved value: `token`
[INFO] [stdout]    --> src/parse.rs:657:91
[INFO] [stdout]     |
[INFO] [stdout] 653 |                 TokenKind::Ident(id) => {
[INFO] [stdout]     |                                  -- value partially moved here
[INFO] [stdout] ...
[INFO] [stdout] 657 |                         return Err(Parser::gen_parser_err(ParseErrMsg::UnknownIdentifier, &token));
[INFO] [stdout]     |                                                                                           ^^^^^^ value borrowed here after partial move
[INFO] [stdout]     |
[INFO] [stdout]     = note: partial move occurs because value has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] help: borrow this binding in the pattern to avoid moving the value
[INFO] [stdout]     |
[INFO] [stdout] 653 |                 TokenKind::Ident(ref id) => {
[INFO] [stdout]     |                                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `declarator`
[INFO] [stdout]    --> src/parse.rs:868:65
[INFO] [stdout]     |
[INFO] [stdout] 864 |             let declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                 ---------- move occurs because `declarator` has type `Declarator`, which does not implement the `Copy` trait
[INFO] [stdout] 865 |             let lhs = ASTNode::make_variable_declaration(declarator, &token);
[INFO] [stdout]     |                                                          ---------- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 868 |                 let mut rhs = self.parse_initializer(&mut iter, &mut declarator.qty.ty)?;
[INFO] [stdout]     |                                                                 ^^^^^^^^^^^^^^^^^^^^^^ value borrowed here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `make_variable_declaration` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/ast.rs:281:44
[INFO] [stdout]     |
[INFO] [stdout] 281 |     pub fn make_variable_declaration(decl: Declarator, tok: &Token) -> Self {
[INFO] [stdout]     |            -------------------------       ^^^^^^^^^^ this parameter takes ownership of the value
[INFO] [stdout]     |            |
[INFO] [stdout]     |            in this method
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 865 |             let lhs = ASTNode::make_variable_declaration(declarator.clone(), &token);
[INFO] [stdout]     |                                                                    ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `declarator.qty.ty` as mutable, as `declarator` is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:868:65
[INFO] [stdout]     |
[INFO] [stdout] 868 |                 let mut rhs = self.parse_initializer(&mut iter, &mut declarator.qty.ty)?;
[INFO] [stdout]     |                                                                 ^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 864 |             let mut declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                 +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.token_type` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:708:64
[INFO] [stdout]     |
[INFO] [stdout] 708 |                 TokenKind::Punct(_) | TokenKind::Keyword(_) => tok.token_type,
[INFO] [stdout]     |                                                                ^^^^^^^^^^^^^^ move occurs because `tok.token_type` has type `TokenKind`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 708 |                 TokenKind::Punct(_) | TokenKind::Keyword(_) => &tok.token_type,
[INFO] [stdout]     |                                                                +
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 708 |                 TokenKind::Punct(_) | TokenKind::Keyword(_) => tok.token_type.clone(),
[INFO] [stdout]     |                                                                              ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `qty`
[INFO] [stdout]    --> src/parse.rs:873:71
[INFO] [stdout]     |
[INFO] [stdout] 850 |         let qty = self.parse_declaration_specifier(iter)?;
[INFO] [stdout]     |             --- move occurs because `qty` has type `QualifiedTypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 864 |             let declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                                                               --- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 873 |                     let declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                                                                       ^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `parse_declarator` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/parse.rs:935:85
[INFO] [stdout]     |
[INFO] [stdout] 935 |     fn parse_declarator(&mut self, iter: &mut impl Iterator<Item = Token>, mut qty: QualifiedTypeInfo) -> ParseRes<Declarator> {
[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] 864 |             let declarator = self.parse_declarator(&mut iter, qty.clone())?;
[INFO] [stdout]     |                                                                  ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `declarator.qty.ty` as mutable, as `declarator` is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:874:65
[INFO] [stdout]     |
[INFO] [stdout] 874 |                     new_rhs = self.parse_initializer(&mut iter, &mut declarator.qty.ty)?; 
[INFO] [stdout]     |                                                                 ^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 873 |                     let mut declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:719:17
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 719 |                 iter.next();
[INFO] [stdout]     |                 ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 741 |                             return Err(Parser::gen_parser_err(ParseErrMsg::InvalidFunctionCall, &tok));
[INFO] [stdout]     |                                                                                                 ---- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `rhs`
[INFO] [stdout]    --> src/parse.rs:876:52
[INFO] [stdout]     |
[INFO] [stdout] 868 |                 let mut rhs = self.parse_initializer(&mut iter, &mut declarator.qty.ty)?;
[INFO] [stdout]     |                     ------- move occurs because `rhs` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] 869 |                 let mut new_rhs = rhs.clone();
[INFO] [stdout] 870 |                 let mut node = ASTNode::make_assignment(lhs, rhs);
[INFO] [stdout]     |                                                              --- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 876 |                     rhs = ASTNode::make_assignment(rhs, new_rhs);
[INFO] [stdout]     |                                                    ^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `make_assignment` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/ast.rs:289:47
[INFO] [stdout]     |
[INFO] [stdout] 289 |     pub fn make_assignment(lhs: ASTNode, rhs: ASTNode) -> Self {
[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] 870 |                 let mut node = ASTNode::make_assignment(lhs, rhs.clone());
[INFO] [stdout]     |                                                                 ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:727:54
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 727 |                         let rhs = self.parse_expr_bp(iter, MIN_BIND_PRIO)?;
[INFO] [stdout]     |                                                      ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 731 |                             pos: tok.pos,
[INFO] [stdout]     |                                  ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `node`
[INFO] [stdout]    --> src/parse.rs:877:21
[INFO] [stdout]     |
[INFO] [stdout] 870 |                 let mut node = ASTNode::make_assignment(lhs, rhs);
[INFO] [stdout]     |                     -------- move occurs because `node` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] 871 |                 
[INFO] [stdout] 872 |                 while !consume_if_equal(&mut iter, TokenKind::Punct(Punct::Semicolon)) {
[INFO] [stdout]     |                 ---------------------------------------------------------------------- inside of this loop
[INFO] [stdout] ...
[INFO] [stdout] 877 |                     node.reassign_rhs(rhs);
[INFO] [stdout]     |                     ^^^^ ----------------- `node` moved due to this method call, in previous iteration of loop
[INFO] [stdout]     |
[INFO] [stdout] note: `ast::ASTNode::reassign_rhs` takes ownership of the receiver `self`, which moves `node`
[INFO] [stdout]    --> src/ast.rs:295:29
[INFO] [stdout]     |
[INFO] [stdout] 295 |     pub fn reassign_rhs(mut self, rhs: ASTNode) -> ParseRes<Self> {
[INFO] [stdout]     |                             ^^^^
[INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior
[INFO] [stdout]     |
[INFO] [stdout] 877 |                     node.clone().reassign_rhs(rhs);
[INFO] [stdout]     |                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:728:44
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 728 |                         ensure_and_consume(&mut iter, TokenKind::Punct(Punct::CloseBoxBracket))?;
[INFO] [stdout]     |                                            ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 731 |                             pos: tok.pos,
[INFO] [stdout]     |                                  ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `lhs.pos`
[INFO] [stdout]    --> src/parse.rs:909:18
[INFO] [stdout]     |
[INFO] [stdout] 891 |     fn to_assign(lhs: ASTNode, op: &TokenKind, rhs: ASTNode) -> Option<ASTNode> {
[INFO] [stdout]     |                  --- move occurs because `lhs` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 908 |             kind: ASTKind::BinaryOp(BinaryExpr{lhs: Box::new(lhs), op: binop, rhs: Box::new(rhs) }), 
[INFO] [stdout]     |                                                              --- value moved here
[INFO] [stdout] 909 |             pos: lhs.pos,
[INFO] [stdout]     |                  ^^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `lhs.pos`
[INFO] [stdout]    --> src/parse.rs:914:18
[INFO] [stdout]     |
[INFO] [stdout] 891 |     fn to_assign(lhs: ASTNode, op: &TokenKind, rhs: ASTNode) -> Option<ASTNode> {
[INFO] [stdout]     |                  --- move occurs because `lhs` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 913 |             kind: ASTKind::BinaryOp(BinaryExpr {lhs: Box::new(lhs), op: BinaryOps::Assign, rhs: op_node}),
[INFO] [stdout]     |                                                               --- value moved here
[INFO] [stdout] 914 |             pos: lhs.pos,
[INFO] [stdout]     |                  ^^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `iter`
[INFO] [stdout]    --> src/parse.rs:920:39
[INFO] [stdout]     |
[INFO] [stdout] 920 |     fn parse_struct_member(&mut self, iter: &mut impl Iterator<Item = Token>, var: &Var, member: &Token) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                       ^^^^ help: if this is intentional, prefix it with an underscore: `_iter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `var`
[INFO] [stdout]    --> src/parse.rs:920:79
[INFO] [stdout]     |
[INFO] [stdout] 920 |     fn parse_struct_member(&mut self, iter: &mut impl Iterator<Item = Token>, var: &Var, member: &Token) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                                                               ^^^ help: if this is intentional, prefix it with an underscore: `_var`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `member`
[INFO] [stdout]    --> src/parse.rs:920:90
[INFO] [stdout]     |
[INFO] [stdout] 920 |     fn parse_struct_member(&mut self, iter: &mut impl Iterator<Item = Token>, var: &Var, member: &Token) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                                                                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_member`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:731:34
[INFO] [stdout]     |
[INFO] [stdout] 731 | ...                   pos: tok.pos,
[INFO] [stdout]     |                            ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 731 |                             pos: tok.pos.clone(),
[INFO] [stdout]     |                                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:733:75
[INFO] [stdout]     |
[INFO] [stdout] 733 |                         ASTNode{kind: ASTKind::Load(Box::new(node)), pos: tok.pos}
[INFO] [stdout]     |                                                                           ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 733 |                         ASTNode{kind: ASTKind::Load(Box::new(node)), pos: tok.pos.clone()}
[INFO] [stdout]     |                                                                                  ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value
[INFO] [stdout]    --> src/parse.rs:745:50
[INFO] [stdout]     |
[INFO] [stdout] 642 |         let mut lhs = match iter.next() {
[INFO] [stdout]     |             ------- move occurs because `lhs` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 725 |                 lhs = match op {
[INFO] [stdout]     |                 --- this reinitialization might get skipped
[INFO] [stdout] ...
[INFO] [stdout] 745 |                         if let ASTKind::Variable(var) = lhs.kind {
[INFO] [stdout]     |                                                  ^^^ value used here after move
[INFO] [stdout] ...
[INFO] [stdout] 800 |                             lhs: Box::new(lhs), 
[INFO] [stdout]     |                                           --- value moved here, in previous iteration of loop
[INFO] [stdout] ...
[INFO] [stdout] 834 |                         ASTNode {kind: ASTKind::BinaryOp(BinaryExpr{op: binop, rhs: Box::new(rhs), lhs: Box::new(lhs)}), pos: tok.pos}
[INFO] [stdout]     |                                                                                                                  --- value moved here, in previous iteration of loop
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:772:67
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 772 |                             let rhs = Box::new(self.parse_expr_bp(iter, min_bind_prio)?);
[INFO] [stdout]     |                                                                   ^^^^ second mutable borrow occurs here
[INFO] [stdout] 773 |                             let unary_expr = UnaryExpr{op: unary_op, id: rhs };
[INFO] [stdout] 774 |                             ASTNode::new(ASTKind::UnaryOp(unary_expr), tok.pos)
[INFO] [stdout]     |                                                                        ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:774:72
[INFO] [stdout]     |
[INFO] [stdout] 774 | ...                   ASTNode::new(ASTKind::UnaryOp(unary_expr), tok.pos)
[INFO] [stdout]     |                                                                  ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 774 |                             ASTNode::new(ASTKind::UnaryOp(unary_expr), tok.pos.clone())
[INFO] [stdout]     |                                                                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:789:17
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 789 |                 iter.next();
[INFO] [stdout]     |                 ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 831 |                             _ => return Err(Parser::gen_parser_err(ParseErrMsg::Something, &tok)),
[INFO] [stdout]     |                                                                                            ---- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:793:50
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 793 |                     let mhs = self.parse_expr_bp(&mut iter, MIN_BIND_PRIO)?;
[INFO] [stdout]     |                                                  ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 804 |                     ASTNode {kind: kind, pos: tok.pos}
[INFO] [stdout]     |                                               ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:795:40
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 795 |                     ensure_and_consume(&mut iter, TokenKind::Punct(Punct::Colon))?;
[INFO] [stdout]     |                                        ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 804 |                     ASTNode {kind: kind, pos: tok.pos}
[INFO] [stdout]     |                                               ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:797:50
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 797 |                     let rhs = self.parse_expr_bp(&mut iter, r_bp)?;
[INFO] [stdout]     |                                                  ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 804 |                     ASTNode {kind: kind, pos: tok.pos}
[INFO] [stdout]     |                                               ------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:804:47
[INFO] [stdout]     |
[INFO] [stdout] 804 |                     ASTNode {kind: kind, pos: tok.pos}
[INFO] [stdout]     |                                               ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 804 |                     ASTNode {kind: kind, pos: tok.pos.clone()}
[INFO] [stdout]     |                                                      ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:807:50
[INFO] [stdout]     |
[INFO] [stdout] 701 |             let tok = match iter.peek() {
[INFO] [stdout]     |                             ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 807 |                     let rhs = self.parse_expr_bp(iter, r_bp)?;
[INFO] [stdout]     |                                                  ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 831 |                             _ => return Err(Parser::gen_parser_err(ParseErrMsg::Something, &tok)),
[INFO] [stdout]     |                                                                                            ---- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:834:127
[INFO] [stdout]     |
[INFO] [stdout] 834 |                         ASTNode {kind: ASTKind::BinaryOp(BinaryExpr{op: binop, rhs: Box::new(rhs), lhs: Box::new(lhs)}), pos: tok.pos}
[INFO] [stdout]     |                                                                                                                               ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 834 |                         ASTNode {kind: ASTKind::BinaryOp(BinaryExpr{op: binop, rhs: Box::new(rhs), lhs: Box::new(lhs)}), pos: tok.pos.clone()}
[INFO] [stdout]     |                                                                                                                                      ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `new_rhs` is never read
[INFO] [stdout]    --> src/parse.rs:869:25
[INFO] [stdout]     |
[INFO] [stdout] 869 |                 let mut new_rhs = rhs.clone();
[INFO] [stdout]     |                         ^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:870:21
[INFO] [stdout]     |
[INFO] [stdout] 870 |                 let mut node = ASTNode::make_assignment(lhs, rhs);
[INFO] [stdout]     |                     ----^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:857:29
[INFO] [stdout]     |
[INFO] [stdout] 852 |         let token = match iter.peek() {
[INFO] [stdout]     |                           ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 857 |         if consume_if_equal(&mut iter, TokenKind::Punct(Punct::Semicolon)) {
[INFO] [stdout]     |                             ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 861 |             Ok(ASTNode {kind: node_kind, pos: token.pos})
[INFO] [stdout]     |                                               --------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:861:47
[INFO] [stdout]     |
[INFO] [stdout] 861 |             Ok(ASTNode {kind: node_kind, pos: token.pos})
[INFO] [stdout]     |                                               ^^^^^^^^^ move occurs because `token.pos` has type `TextPosition`, 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] 861 |             Ok(ASTNode {kind: node_kind, pos: token.pos.clone()})
[INFO] [stdout]     |                                                        ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]    --> src/parse.rs:864:52
[INFO] [stdout]     |
[INFO] [stdout] 852 |         let token = match iter.peek() {
[INFO] [stdout]     |                           ---- first mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 864 |             let declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                                                    ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] 865 |             let lhs = ASTNode::make_variable_declaration(declarator, &token);
[INFO] [stdout]     |                                                                      ------ first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `declarator`
[INFO] [stdout]    --> src/parse.rs:868:65
[INFO] [stdout]     |
[INFO] [stdout] 864 |             let declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                 ---------- move occurs because `declarator` has type `Declarator`, which does not implement the `Copy` trait
[INFO] [stdout] 865 |             let lhs = ASTNode::make_variable_declaration(declarator, &token);
[INFO] [stdout]     |                                                          ---------- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 868 |                 let mut rhs = self.parse_initializer(&mut iter, &mut declarator.qty.ty)?;
[INFO] [stdout]     |                                                                 ^^^^^^^^^^^^^^^^^^^^^^ value borrowed here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `make_variable_declaration` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/ast.rs:281:44
[INFO] [stdout]     |
[INFO] [stdout] 281 |     pub fn make_variable_declaration(decl: Declarator, tok: &Token) -> Self {
[INFO] [stdout]     |            -------------------------       ^^^^^^^^^^ this parameter takes ownership of the value
[INFO] [stdout]     |            |
[INFO] [stdout]     |            in this method
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 865 |             let lhs = ASTNode::make_variable_declaration(declarator.clone(), &token);
[INFO] [stdout]     |                                                                    ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `declarator.qty.ty` as mutable, as `declarator` is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:868:65
[INFO] [stdout]     |
[INFO] [stdout] 868 |                 let mut rhs = self.parse_initializer(&mut iter, &mut declarator.qty.ty)?;
[INFO] [stdout]     |                                                                 ^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 864 |             let mut declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                 +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `qty`
[INFO] [stdout]    --> src/parse.rs:873:71
[INFO] [stdout]     |
[INFO] [stdout] 850 |         let qty = self.parse_declaration_specifier(iter)?;
[INFO] [stdout]     |             --- move occurs because `qty` has type `QualifiedTypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 864 |             let declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                                                               --- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 873 |                     let declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                                                                       ^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `parse_declarator` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/parse.rs:935:85
[INFO] [stdout]     |
[INFO] [stdout] 935 |     fn parse_declarator(&mut self, iter: &mut impl Iterator<Item = Token>, mut qty: QualifiedTypeInfo) -> ParseRes<Declarator> {
[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] 864 |             let declarator = self.parse_declarator(&mut iter, qty.clone())?;
[INFO] [stdout]     |                                                                  ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `declarator.qty.ty` as mutable, as `declarator` is not declared as mutable
[INFO] [stdout]    --> src/parse.rs:874:65
[INFO] [stdout]     |
[INFO] [stdout] 874 |                     new_rhs = self.parse_initializer(&mut iter, &mut declarator.qty.ty)?; 
[INFO] [stdout]     |                                                                 ^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout] 873 |                     let mut declarator = self.parse_declarator(&mut iter, qty)?;
[INFO] [stdout]     |                         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:935:76
[INFO] [stdout]     |
[INFO] [stdout] 935 |     fn parse_declarator(&mut self, iter: &mut impl Iterator<Item = Token>, mut qty: QualifiedTypeInfo) -> ParseRes<Declarator> {
[INFO] [stdout]     |                                                                            ----^^^
[INFO] [stdout]     |                                                                            |
[INFO] [stdout]     |                                                                            help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:936:13
[INFO] [stdout]     |
[INFO] [stdout] 936 |         let mut qty = self.parse_pointer(iter, qty)?;
[INFO] [stdout]     |             ----^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:949:21
[INFO] [stdout]     |
[INFO] [stdout] 949 |                 let mut declarator = Declarator{ decl_type: DeclaratorTypes::Undetermined, name: id, qty: qty};
[INFO] [stdout]     |                     ----^^^^^^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0716]: temporary value dropped while borrowed
[INFO] [stdout]    --> src/parse.rs:946:21
[INFO] [stdout]     |
[INFO] [stdout] 946 |         let token = iter.peekable().peek().unwrap(); //TODO: proper None handling here
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^                - temporary value is freed at the end of this statement
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     creates a temporary value which is freed while still in use
[INFO] [stdout] 947 |         match token.token_type {
[INFO] [stdout]     |               ---------------- borrow later used here
[INFO] [stdout]     |
[INFO] [stdout] help: consider using a `let` binding to create a longer lived value
[INFO] [stdout]     |
[INFO] [stdout] 946 ~         let mut binding = iter.peekable();
[INFO] [stdout] 947 ~         let token = binding.peek().unwrap(); //TODO: proper None handling here
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.token_type` as enum variant `Ident` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:947:15
[INFO] [stdout]     |
[INFO] [stdout] 947 |         match token.token_type {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 948 |             TokenKind::Ident(id) => {
[INFO] [stdout]     |                              --
[INFO] [stdout]     |                              |
[INFO] [stdout]     |                              data moved here
[INFO] [stdout]     |                              move occurs because `id` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 947 |         match &token.token_type {
[INFO] [stdout]     |               +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `params` as mutable, as it is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1035:13
[INFO] [stdout]      |
[INFO] [stdout] 1035 |             params.push(item_decl);
[INFO] [stdout]      |             ^^^^^^ cannot borrow as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1007 |         let mut params = Vec::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `params`
[INFO] [stdout]     --> src/parse.rs:1042:45
[INFO] [stdout]      |
[INFO] [stdout] 1007 |         let params = Vec::new();
[INFO] [stdout]      |             ------ move occurs because `params` has type `Vec<Declarator>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1039 |         decl.decl_type = DeclaratorTypes::Function(params);
[INFO] [stdout]      |                                                    ------ value moved here
[INFO] [stdout] ...
[INFO] [stdout] 1042 |         decl.qty.ty = decl.qty.ty.make_func(params.into_iter().map(|d| d.qty.ty).collect(), is_vararg);
[INFO] [stdout]      |                                             ^^^^^^ value used here after move
[INFO] [stdout]      |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]      |
[INFO] [stdout] 1039 |         decl.decl_type = DeclaratorTypes::Function(params.clone());
[INFO] [stdout]      |                                                          ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of partially moved value: `decl`
[INFO] [stdout]     --> src/parse.rs:1060:23
[INFO] [stdout]      |
[INFO] [stdout] 1059 |             decl.qty.ty.make_array(-1);
[INFO] [stdout]      |                         -------------- `decl.qty.ty` partially moved due to this method call
[INFO] [stdout] 1060 |             return Ok(decl);
[INFO] [stdout]      |                       ^^^^ value used here after partial move
[INFO] [stdout]      |
[INFO] [stdout] note: `TypeInfo::make_array` takes ownership of the receiver `self`, which moves `decl.qty.ty`
[INFO] [stdout]     --> src/types.rs:140:23
[INFO] [stdout]      |
[INFO] [stdout]  140 |     pub fn make_array(self, len: i64) -> Self {
[INFO] [stdout]      |                       ^^^^
[INFO] [stdout]      = note: partial move occurs because `decl.qty.ty` has type `TypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior
[INFO] [stdout]      |
[INFO] [stdout] 1059 |             decl.qty.ty.clone().make_array(-1);
[INFO] [stdout]      |                        ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1078:39
[INFO] [stdout]      |
[INFO] [stdout] 1077 |         let token = iter.peek().unwrap();
[INFO] [stdout]      |                     ---- first mutable borrow occurs here
[INFO] [stdout] 1078 |         let node = self.parse_expr_bp(&mut iter, 30)?;
[INFO] [stdout]      |                                       ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 1082 |             Err(Parser::gen_parser_err(ParseErrMsg::NotCompileTimeConstant, &token))
[INFO] [stdout]      |                                                                             ------ first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `rhs`
[INFO] [stdout]    --> src/parse.rs:876:52
[INFO] [stdout]     |
[INFO] [stdout] 868 |                 let mut rhs = self.parse_initializer(&mut iter, &mut declarator.qty.ty)?;
[INFO] [stdout]     |                     ------- move occurs because `rhs` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] 869 |                 let mut new_rhs = rhs.clone();
[INFO] [stdout] 870 |                 let mut node = ASTNode::make_assignment(lhs, rhs);
[INFO] [stdout]     |                                                              --- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 876 |                     rhs = ASTNode::make_assignment(rhs, new_rhs);
[INFO] [stdout]     |                                                    ^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] note: consider changing this parameter type in method `make_assignment` to borrow instead if owning the value isn't necessary
[INFO] [stdout]    --> src/ast.rs:289:47
[INFO] [stdout]     |
[INFO] [stdout] 289 |     pub fn make_assignment(lhs: ASTNode, rhs: ASTNode) -> Self {
[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] 870 |                 let mut node = ASTNode::make_assignment(lhs, rhs.clone());
[INFO] [stdout]     |                                                                 ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `node`
[INFO] [stdout]    --> src/parse.rs:877:21
[INFO] [stdout]     |
[INFO] [stdout] 870 |                 let mut node = ASTNode::make_assignment(lhs, rhs);
[INFO] [stdout]     |                     -------- move occurs because `node` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] 871 |                 
[INFO] [stdout] 872 |                 while !consume_if_equal(&mut iter, TokenKind::Punct(Punct::Semicolon)) {
[INFO] [stdout]     |                 ---------------------------------------------------------------------- inside of this loop
[INFO] [stdout] ...
[INFO] [stdout] 877 |                     node.reassign_rhs(rhs);
[INFO] [stdout]     |                     ^^^^ ----------------- `node` moved due to this method call, in previous iteration of loop
[INFO] [stdout]     |
[INFO] [stdout] note: `ast::ASTNode::reassign_rhs` takes ownership of the receiver `self`, which moves `node`
[INFO] [stdout]    --> src/ast.rs:295:29
[INFO] [stdout]     |
[INFO] [stdout] 295 |     pub fn reassign_rhs(mut self, rhs: ASTNode) -> ParseRes<Self> {
[INFO] [stdout]     |                             ^^^^
[INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior
[INFO] [stdout]     |
[INFO] [stdout] 877 |                     node.clone().reassign_rhs(rhs);
[INFO] [stdout]     |                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `lhs.pos`
[INFO] [stdout]    --> src/parse.rs:909:18
[INFO] [stdout]     |
[INFO] [stdout] 891 |     fn to_assign(lhs: ASTNode, op: &TokenKind, rhs: ASTNode) -> Option<ASTNode> {
[INFO] [stdout]     |                  --- move occurs because `lhs` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 908 |             kind: ASTKind::BinaryOp(BinaryExpr{lhs: Box::new(lhs), op: binop, rhs: Box::new(rhs) }), 
[INFO] [stdout]     |                                                              --- value moved here
[INFO] [stdout] 909 |             pos: lhs.pos,
[INFO] [stdout]     |                  ^^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `lhs.pos`
[INFO] [stdout]    --> src/parse.rs:914:18
[INFO] [stdout]     |
[INFO] [stdout] 891 |     fn to_assign(lhs: ASTNode, op: &TokenKind, rhs: ASTNode) -> Option<ASTNode> {
[INFO] [stdout]     |                  --- move occurs because `lhs` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 913 |             kind: ASTKind::BinaryOp(BinaryExpr {lhs: Box::new(lhs), op: BinaryOps::Assign, rhs: op_node}),
[INFO] [stdout]     |                                                               --- value moved here
[INFO] [stdout] 914 |             pos: lhs.pos,
[INFO] [stdout]     |                  ^^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `iter`
[INFO] [stdout]    --> src/parse.rs:920:39
[INFO] [stdout]     |
[INFO] [stdout] 920 |     fn parse_struct_member(&mut self, iter: &mut impl Iterator<Item = Token>, var: &Var, member: &Token) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                       ^^^^ help: if this is intentional, prefix it with an underscore: `_iter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `var`
[INFO] [stdout]    --> src/parse.rs:920:79
[INFO] [stdout]     |
[INFO] [stdout] 920 |     fn parse_struct_member(&mut self, iter: &mut impl Iterator<Item = Token>, var: &Var, member: &Token) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                                                               ^^^ help: if this is intentional, prefix it with an underscore: `_var`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `member`
[INFO] [stdout]    --> src/parse.rs:920:90
[INFO] [stdout]     |
[INFO] [stdout] 920 |     fn parse_struct_member(&mut self, iter: &mut impl Iterator<Item = Token>, var: &Var, member: &Token) -> ParseRes<ASTNode> {
[INFO] [stdout]     |                                                                                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_member`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:935:76
[INFO] [stdout]     |
[INFO] [stdout] 935 |     fn parse_declarator(&mut self, iter: &mut impl Iterator<Item = Token>, mut qty: QualifiedTypeInfo) -> ParseRes<Declarator> {
[INFO] [stdout]     |                                                                            ----^^^
[INFO] [stdout]     |                                                                            |
[INFO] [stdout]     |                                                                            help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:936:13
[INFO] [stdout]     |
[INFO] [stdout] 936 |         let mut qty = self.parse_pointer(iter, qty)?;
[INFO] [stdout]     |             ----^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.token_type` as enum variant `Ident` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1109:34
[INFO] [stdout]      |
[INFO] [stdout] 1109 |             Some(token) => match token.token_type {
[INFO] [stdout]      |                                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 1110 |                 TokenKind::Ident(s) => {
[INFO] [stdout]      |                                  -
[INFO] [stdout]      |                                  |
[INFO] [stdout]      |                                  data moved here
[INFO] [stdout]      |                                  move occurs because `s` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout]      |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]      |
[INFO] [stdout] 1109 |             Some(token) => match &token.token_type {
[INFO] [stdout]      |                                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/parse.rs:949:21
[INFO] [stdout]     |
[INFO] [stdout] 949 |                 let mut declarator = Declarator{ decl_type: DeclaratorTypes::Undetermined, name: id, qty: qty};
[INFO] [stdout]     |                     ----^^^^^^^^^^
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `members`
[INFO] [stdout]     --> src/parse.rs:1160:50
[INFO] [stdout]      |
[INFO] [stdout] 1108 |         let (name, members) = match iter.peek() {
[INFO] [stdout]      |                    ------- move occurs because `members` has type `Vec<RecordMember>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1155 |                 for mem in members {
[INFO] [stdout]      |                            ------- `members` moved due to this implicit call to `.into_iter()`
[INFO] [stdout] ...
[INFO] [stdout] 1160 |                     kind: TypeKind::Struct(name, members),
[INFO] [stdout]      |                                                  ^^^^^^^ value used here after move
[INFO] [stdout]      |
[INFO] [stdout] help: consider iterating over a slice of the `Vec<RecordMember>`'s content to avoid moving into the `for` loop
[INFO] [stdout]      |
[INFO] [stdout] 1155 |                 for mem in &members {
[INFO] [stdout]      |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `members`
[INFO] [stdout]     --> src/parse.rs:1176:49
[INFO] [stdout]      |
[INFO] [stdout] 1108 |         let (name, members) = match iter.peek() {
[INFO] [stdout]      |                    ------- move occurs because `members` has type `Vec<RecordMember>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1166 |                 for (n, mem) in members.into_iter().enumerate() {
[INFO] [stdout]      |                                         ----------- `members` moved due to this method call
[INFO] [stdout] ...
[INFO] [stdout] 1176 |                     kind: TypeKind::Union(name, members, index),
[INFO] [stdout]      |                                                 ^^^^^^^ value used here after move
[INFO] [stdout]      |
[INFO] [stdout] note: `into_iter` takes ownership of the receiver `self`, which moves `members`
[INFO] [stdout]     --> /rustc/987a165cfab916796a8315782b83ac460a651ce2/library/core/src/iter/traits/collect.rs:310:18
[INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior
[INFO] [stdout]      |
[INFO] [stdout] 1166 |                 for (n, mem) in members.clone().into_iter().enumerate() {
[INFO] [stdout]      |                                        ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0716]: temporary value dropped while borrowed
[INFO] [stdout]    --> src/parse.rs:946:21
[INFO] [stdout]     |
[INFO] [stdout] 946 |         let token = iter.peekable().peek().unwrap(); //TODO: proper None handling here
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^                - temporary value is freed at the end of this statement
[INFO] [stdout]     |                     |
[INFO] [stdout]     |                     creates a temporary value which is freed while still in use
[INFO] [stdout] 947 |         match token.token_type {
[INFO] [stdout]     |               ---------------- borrow later used here
[INFO] [stdout]     |
[INFO] [stdout] help: consider using a `let` binding to create a longer lived value
[INFO] [stdout]     |
[INFO] [stdout] 946 ~         let mut binding = iter.peekable();
[INFO] [stdout] 947 ~         let token = binding.peek().unwrap(); //TODO: proper None handling here
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.token_type` as enum variant `Ident` which is behind a shared reference
[INFO] [stdout]    --> src/parse.rs:947:15
[INFO] [stdout]     |
[INFO] [stdout] 947 |         match token.token_type {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 948 |             TokenKind::Ident(id) => {
[INFO] [stdout]     |                              --
[INFO] [stdout]     |                              |
[INFO] [stdout]     |                              data moved here
[INFO] [stdout]     |                              move occurs because `id` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 947 |         match &token.token_type {
[INFO] [stdout]     |               +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `qty.ty`
[INFO] [stdout]     --> src/parse.rs:1210:89
[INFO] [stdout]      |
[INFO] [stdout] 1192 |             let qty = self.parse_declaration_specifier(iter)?;
[INFO] [stdout]      |                 --- move occurs because `qty` has type `QualifiedTypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1208 |                 let decl = self.parse_declarator(iter, qty)?;
[INFO] [stdout]      |                                                        --- value moved here
[INFO] [stdout] 1209 |                 
[INFO] [stdout] 1210 |                 let mut member = RecordMember {name: decl.name, is_bitfield: false, ty: qty.ty};
[INFO] [stdout]      |                                                                                         ^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `members` as mutable, as it is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1217:17
[INFO] [stdout]      |
[INFO] [stdout] 1217 |                 members.push(member);
[INFO] [stdout]      |                 ^^^^^^^ cannot borrow as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1189 |         let mut members = Vec::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `ty`
[INFO] [stdout]     --> src/parse.rs:1257:12
[INFO] [stdout]      |
[INFO] [stdout] 1235 |         let ty = TypeInfo::make_enum();
[INFO] [stdout]      |             -- move occurs because `ty` has type `TypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1247 |                 let node = ASTNode::new(ASTKind::Typedef(ty, name.to_string()), token.pos);
[INFO] [stdout]      |                                                          -- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 1257 |         Ok(ty)
[INFO] [stdout]      |            ^^ value used here after move
[INFO] [stdout]      |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]      |
[INFO] [stdout] 1247 |                 let node = ASTNode::new(ASTKind::Typedef(ty.clone(), name.to_string()), token.pos);
[INFO] [stdout]      |                                                            ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `enum_type`
[INFO] [stdout]     --> src/parse.rs:1266:17
[INFO] [stdout]      |
[INFO] [stdout] 1266 |         let mut enum_type = TypeInfo::make_uint();
[INFO] [stdout]      |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_enum_type`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/parse.rs:1266:13
[INFO] [stdout]      |
[INFO] [stdout] 1266 |         let mut enum_type = TypeInfo::make_uint();
[INFO] [stdout]      |             ----^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `typename`
[INFO] [stdout]     --> src/parse.rs:1300:40
[INFO] [stdout]      |
[INFO] [stdout] 1295 |         let typename = match token.token_type {
[INFO] [stdout]      |             -------- move occurs because `typename` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1299 |         let node = ASTNode::new(ASTKind::Typedef(typeinfo.ty, typename), token.pos);
[INFO] [stdout]      |                                                               -------- value moved here
[INFO] [stdout] 1300 |         let symbol = Symbol::new_local(&typename, node);
[INFO] [stdout]      |                                        ^^^^^^^^^ value borrowed here after move
[INFO] [stdout]      |
[INFO] [stdout]      = note: borrow occurs due to deref coercion to `str`
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]      |
[INFO] [stdout] 1299 |         let node = ASTNode::new(ASTKind::Typedef(typeinfo.ty, typename.clone()), token.pos);
[INFO] [stdout]      |                                                                       ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `params` as mutable, as it is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1035:13
[INFO] [stdout]      |
[INFO] [stdout] 1035 |             params.push(item_decl);
[INFO] [stdout]      |             ^^^^^^ cannot borrow as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1007 |         let mut params = Vec::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `params`
[INFO] [stdout]     --> src/parse.rs:1042:45
[INFO] [stdout]      |
[INFO] [stdout] 1007 |         let params = Vec::new();
[INFO] [stdout]      |             ------ move occurs because `params` has type `Vec<Declarator>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1039 |         decl.decl_type = DeclaratorTypes::Function(params);
[INFO] [stdout]      |                                                    ------ value moved here
[INFO] [stdout] ...
[INFO] [stdout] 1042 |         decl.qty.ty = decl.qty.ty.make_func(params.into_iter().map(|d| d.qty.ty).collect(), is_vararg);
[INFO] [stdout]      |                                             ^^^^^^ value used here after move
[INFO] [stdout]      |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]      |
[INFO] [stdout] 1039 |         decl.decl_type = DeclaratorTypes::Function(params.clone());
[INFO] [stdout]      |                                                          ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rettype`
[INFO] [stdout]     --> src/parse.rs:1316:31
[INFO] [stdout]      |
[INFO] [stdout] 1316 |         if let TypeKind::Func(rettype, argtypes, is_vararg) = f.declarator.qty.ty.kind {
[INFO] [stdout]      |                               ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rettype`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `f.declarator.qty.ty.kind` as enum variant `Func` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1316:63
[INFO] [stdout]      |
[INFO] [stdout] 1316 |         if let TypeKind::Func(rettype, argtypes, is_vararg) = f.declarator.qty.ty.kind {
[INFO] [stdout]      |                               -------  -------- ...and here   ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |                               |
[INFO] [stdout]      |                               data moved here
[INFO] [stdout]      |
[INFO] [stdout]      = note: move occurs because these variables have types that don't implement the `Copy` trait
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]      |
[INFO] [stdout] 1316 |         if let TypeKind::Func(rettype, argtypes, is_vararg) = &f.declarator.qty.ty.kind {
[INFO] [stdout]      |                                                               +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `f.body` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1330:42
[INFO] [stdout]      |
[INFO] [stdout] 1330 |             let kind = ASTKind::FuncCall(f.body, args);
[INFO] [stdout]      |                                          ^^^^^^ move occurs because `f.body` has type `Box<ast::ASTNode>`, 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] 1330 |             let kind = ASTKind::FuncCall(f.body.clone(), args);
[INFO] [stdout]      |                                                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.token_type` as enum variant `Keyword` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1343:19
[INFO] [stdout]      |
[INFO] [stdout] 1343 |             match token.token_type {
[INFO] [stdout]      |                   ^^^^^^^^^^^^^^^^
[INFO] [stdout] 1344 |                 TokenKind::Keyword(kw) => match kw {
[INFO] [stdout]      |                                    --
[INFO] [stdout]      |                                    |
[INFO] [stdout]      |                                    data moved here
[INFO] [stdout]      |                                    move occurs because `kw` has type `Keyword`, which does not implement the `Copy` trait
[INFO] [stdout]      |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]      |
[INFO] [stdout] 1343 |             match &token.token_type {
[INFO] [stdout]      |                   +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0594]: cannot assign to `quals.is_restrict`, as `quals` is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1345:42
[INFO] [stdout]      |
[INFO] [stdout] 1345 |                     Keyword::Restrict => quals.is_restrict = true,
[INFO] [stdout]      |                                          ^^^^^^^^^^^^^^^^^^^^^^^^ cannot assign
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1339 |         let mut quals = Qualifiers::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0594]: cannot assign to `quals.is_const`, as `quals` is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1346:39
[INFO] [stdout]      |
[INFO] [stdout] 1346 |                     Keyword::Const => quals.is_const = true,
[INFO] [stdout]      |                                       ^^^^^^^^^^^^^^^^^^^^^ cannot assign
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1339 |         let mut quals = Qualifiers::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of partially moved value: `decl`
[INFO] [stdout]     --> src/parse.rs:1060:23
[INFO] [stdout]      |
[INFO] [stdout] 1059 |             decl.qty.ty.make_array(-1);
[INFO] [stdout]      |                         -------------- `decl.qty.ty` partially moved due to this method call
[INFO] [stdout] 1060 |             return Ok(decl);
[INFO] [stdout]      |                       ^^^^ value used here after partial move
[INFO] [stdout]      |
[INFO] [stdout] note: `TypeInfo::make_array` takes ownership of the receiver `self`, which moves `decl.qty.ty`
[INFO] [stdout]     --> src/types.rs:140:23
[INFO] [stdout]      |
[INFO] [stdout]  140 |     pub fn make_array(self, len: i64) -> Self {
[INFO] [stdout]      |                       ^^^^
[INFO] [stdout]      = note: partial move occurs because `decl.qty.ty` has type `TypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior
[INFO] [stdout]      |
[INFO] [stdout] 1059 |             decl.qty.ty.clone().make_array(-1);
[INFO] [stdout]      |                        ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0594]: cannot assign to `quals.is_volatile`, as `quals` is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1347:42
[INFO] [stdout]      |
[INFO] [stdout] 1347 |                     Keyword::Volatile => quals.is_volatile = true,
[INFO] [stdout]      |                                          ^^^^^^^^^^^^^^^^^^^^^^^^ cannot assign
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1339 |         let mut quals = Qualifiers::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `iter`
[INFO] [stdout]     --> src/parse.rs:1383:43
[INFO] [stdout]      |
[INFO] [stdout] 1383 |     fn parse_generic_selection(&mut self, iter: &mut impl Iterator<Item = Token>){
[INFO] [stdout]      |                                           ^^^^ help: if this is intentional, prefix it with an underscore: `_iter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1078:39
[INFO] [stdout]      |
[INFO] [stdout] 1077 |         let token = iter.peek().unwrap();
[INFO] [stdout]      |                     ---- first mutable borrow occurs here
[INFO] [stdout] 1078 |         let node = self.parse_expr_bp(&mut iter, 30)?;
[INFO] [stdout]      |                                       ^^^^^^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 1082 |             Err(Parser::gen_parser_err(ParseErrMsg::NotCompileTimeConstant, &token))
[INFO] [stdout]      |                                                                             ------ first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `t.token_type` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1397:37
[INFO] [stdout]      |
[INFO] [stdout] 1397 |         match tok.and_then(|t| Some(t.token_type)).unwrap_or(TokenKind::EOF) {
[INFO] [stdout]      |                                     ^^^^^^^^^^^^ move occurs because `t.token_type` has type `TokenKind`, 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] 1397 |         match tok.and_then(|t| Some(t.token_type.clone())).unwrap_or(TokenKind::EOF) {
[INFO] [stdout]      |                                                 ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stmt`
[INFO] [stdout]     --> src/parse.rs:1449:17
[INFO] [stdout]      |
[INFO] [stdout] 1449 |             let stmt = self.parse_statement(iter)?;
[INFO] [stdout]      |                 ^^^^ help: if this is intentional, prefix it with an underscore: `_stmt`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.token_type` as enum variant `Ident` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1109:34
[INFO] [stdout]      |
[INFO] [stdout] 1109 |             Some(token) => match token.token_type {
[INFO] [stdout]      |                                  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 1110 |                 TokenKind::Ident(s) => {
[INFO] [stdout]      |                                  -
[INFO] [stdout]      |                                  |
[INFO] [stdout]      |                                  data moved here
[INFO] [stdout]      |                                  move occurs because `s` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout]      |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]      |
[INFO] [stdout] 1109 |             Some(token) => match &token.token_type {
[INFO] [stdout]      |                                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1511:37
[INFO] [stdout]      |
[INFO] [stdout]  272 | impl<'a> Parser<'a> {
[INFO] [stdout]      |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 1508 |                 let loop_body = Box::new(self.parse_statement(iter)?);
[INFO] [stdout]      |                                          --------------------------
[INFO] [stdout]      |                                          |
[INFO] [stdout]      |                                          first mutable borrow occurs here
[INFO] [stdout]      |                                          argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 1511 |                 let expr = Box::new(self.parse_expression(iter)?);
[INFO] [stdout]      |                                     ^^^^ second mutable borrow occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `members`
[INFO] [stdout]     --> src/parse.rs:1160:50
[INFO] [stdout]      |
[INFO] [stdout] 1108 |         let (name, members) = match iter.peek() {
[INFO] [stdout]      |                    ------- move occurs because `members` has type `Vec<RecordMember>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1155 |                 for mem in members {
[INFO] [stdout]      |                            ------- `members` moved due to this implicit call to `.into_iter()`
[INFO] [stdout] ...
[INFO] [stdout] 1160 |                     kind: TypeKind::Struct(name, members),
[INFO] [stdout]      |                                                  ^^^^^^^ value used here after move
[INFO] [stdout]      |
[INFO] [stdout] help: consider iterating over a slice of the `Vec<RecordMember>`'s content to avoid moving into the `for` loop
[INFO] [stdout]      |
[INFO] [stdout] 1155 |                 for mem in &members {
[INFO] [stdout]      |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1535:41
[INFO] [stdout]      |
[INFO] [stdout]  272 | impl<'a> Parser<'a> {
[INFO] [stdout]      |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 1531 |                 let then = self.parse_statement(iter)?;
[INFO] [stdout]      |                            --------------------------
[INFO] [stdout]      |                            |
[INFO] [stdout]      |                            first mutable borrow occurs here
[INFO] [stdout]      |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 1535 |                     els = Some(Box::new(self.parse_statement(iter)?));
[INFO] [stdout]      |                                         ^^^^ second mutable borrow occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `members`
[INFO] [stdout]     --> src/parse.rs:1176:49
[INFO] [stdout]      |
[INFO] [stdout] 1108 |         let (name, members) = match iter.peek() {
[INFO] [stdout]      |                    ------- move occurs because `members` has type `Vec<RecordMember>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1166 |                 for (n, mem) in members.into_iter().enumerate() {
[INFO] [stdout]      |                                         ----------- `members` moved due to this method call
[INFO] [stdout] ...
[INFO] [stdout] 1176 |                     kind: TypeKind::Union(name, members, index),
[INFO] [stdout]      |                                                 ^^^^^^^ value used here after move
[INFO] [stdout]      |
[INFO] [stdout] note: `into_iter` takes ownership of the receiver `self`, which moves `members`
[INFO] [stdout]     --> /rustc/987a165cfab916796a8315782b83ac460a651ce2/library/core/src/iter/traits/collect.rs:310:18
[INFO] [stdout] help: you can `clone` the value and consume it, but this might not be your desired behavior
[INFO] [stdout]      |
[INFO] [stdout] 1166 |                 for (n, mem) in members.clone().into_iter().enumerate() {
[INFO] [stdout]      |                                        ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `qty.ty`
[INFO] [stdout]     --> src/parse.rs:1210:89
[INFO] [stdout]      |
[INFO] [stdout] 1192 |             let qty = self.parse_declaration_specifier(iter)?;
[INFO] [stdout]      |                 --- move occurs because `qty` has type `QualifiedTypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1208 |                 let decl = self.parse_declarator(iter, qty)?;
[INFO] [stdout]      |                                                        --- value moved here
[INFO] [stdout] 1209 |                 
[INFO] [stdout] 1210 |                 let mut member = RecordMember {name: decl.name, is_bitfield: false, ty: qty.ty};
[INFO] [stdout]      |                                                                                         ^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `members` as mutable, as it is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1217:17
[INFO] [stdout]      |
[INFO] [stdout] 1217 |                 members.push(member);
[INFO] [stdout]      |                 ^^^^^^^ cannot borrow as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1189 |         let mut members = Vec::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `ty`
[INFO] [stdout]     --> src/parse.rs:1257:12
[INFO] [stdout]      |
[INFO] [stdout] 1235 |         let ty = TypeInfo::make_enum();
[INFO] [stdout]      |             -- move occurs because `ty` has type `TypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1247 |                 let node = ASTNode::new(ASTKind::Typedef(ty, name.to_string()), token.pos);
[INFO] [stdout]      |                                                          -- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 1257 |         Ok(ty)
[INFO] [stdout]      |            ^^ value used here after move
[INFO] [stdout]      |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]      |
[INFO] [stdout] 1247 |                 let node = ASTNode::new(ASTKind::Typedef(ty.clone(), name.to_string()), token.pos);
[INFO] [stdout]      |                                                            ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1612:13
[INFO] [stdout]      |
[INFO] [stdout] 1612 |         let iter = iter.skip_while(
[INFO] [stdout]      |             ^^^^ not mutable
[INFO] [stdout] ...
[INFO] [stdout] 1618 |         ensure_and_consume(&mut iter, TokenKind::Punct(Punct::OpenParen))?;
[INFO] [stdout]      |                            --------- cannot borrow as mutable
[INFO] [stdout] 1619 |         let asm = consume_token_or_eof(&mut iter)?;
[INFO] [stdout]      |                                        --------- cannot borrow as mutable
[INFO] [stdout] ...
[INFO] [stdout] 1627 |         ensure_and_consume(&mut iter, TokenKind::Punct(Punct::CloseParen))?;
[INFO] [stdout]      |                            --------- cannot borrow as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1612 |         let mut iter = iter.skip_while(
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `enum_type`
[INFO] [stdout]     --> src/parse.rs:1266:17
[INFO] [stdout]      |
[INFO] [stdout] 1266 |         let mut enum_type = TypeInfo::make_uint();
[INFO] [stdout]      |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_enum_type`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scope`
[INFO] [stdout]     --> src/parse.rs:1642:13
[INFO] [stdout]      |
[INFO] [stdout] 1642 |         let scope = if scope.is_some() {
[INFO] [stdout]      |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_scope`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable
[INFO] [stdout]     --> src/parse.rs:1655:16
[INFO] [stdout]      |
[INFO] [stdout]  272 | impl<'a> Parser<'a> {
[INFO] [stdout]      |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 1655 |             if self.is_type_specifier(&peek_token.token_type) {
[INFO] [stdout]      |                ^^^^ immutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 1658 |                 stmts.push(self.parse_statement(&mut iter)?); //TODO: more sophisticated error handling. 
[INFO] [stdout]      |                            -------------------------------
[INFO] [stdout]      |                            |
[INFO] [stdout]      |                            mutable borrow occurs here
[INFO] [stdout]      |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1656:28
[INFO] [stdout]      |
[INFO] [stdout]  272 | impl<'a> Parser<'a> {
[INFO] [stdout]      |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 1656 |                 stmts.push(self.parse_declaration(&mut iter)?);
[INFO] [stdout]      |                            ^^^^ second mutable borrow occurs here
[INFO] [stdout] 1657 |             } else {
[INFO] [stdout] 1658 |                 stmts.push(self.parse_statement(&mut iter)?); //TODO: more sophisticated error handling. 
[INFO] [stdout]      |                            -------------------------------
[INFO] [stdout]      |                            |
[INFO] [stdout]      |                            first mutable borrow occurs here
[INFO] [stdout]      |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]     --> src/parse.rs:1266:13
[INFO] [stdout]      |
[INFO] [stdout] 1266 |         let mut enum_type = TypeInfo::make_uint();
[INFO] [stdout]      |             ----^^^^^^^^^
[INFO] [stdout]      |             |
[INFO] [stdout]      |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1658:28
[INFO] [stdout]      |
[INFO] [stdout]  272 | impl<'a> Parser<'a> {
[INFO] [stdout]      |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 1658 |                 stmts.push(self.parse_statement(&mut iter)?); //TODO: more sophisticated error handling. 
[INFO] [stdout]      |                            ^^^^---------------------------
[INFO] [stdout]      |                            |
[INFO] [stdout]      |                            `*self` was mutably borrowed here in the previous iteration of the loop
[INFO] [stdout]      |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1667:23
[INFO] [stdout]      |
[INFO] [stdout] 1667 |         ParseErr::new(token.pos, token.pos, msg)
[INFO] [stdout]      |                       ^^^^^^^^^ move occurs because `token.pos` has type `TextPosition`, 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] 1667 |         ParseErr::new(token.pos.clone(), token.pos, msg)
[INFO] [stdout]      |                                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1667:34
[INFO] [stdout]      |
[INFO] [stdout] 1667 |         ParseErr::new(token.pos, token.pos, msg)
[INFO] [stdout]      |                                  ^^^^^^^^^ move occurs because `token.pos` has type `TextPosition`, 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] 1667 |         ParseErr::new(token.pos, token.pos.clone(), msg)
[INFO] [stdout]      |                                           ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `typename`
[INFO] [stdout]     --> src/parse.rs:1300:40
[INFO] [stdout]      |
[INFO] [stdout] 1295 |         let typename = match token.token_type {
[INFO] [stdout]      |             -------- move occurs because `typename` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 1299 |         let node = ASTNode::new(ASTKind::Typedef(typeinfo.ty, typename), token.pos);
[INFO] [stdout]      |                                                               -------- value moved here
[INFO] [stdout] 1300 |         let symbol = Symbol::new_local(&typename, node);
[INFO] [stdout]      |                                        ^^^^^^^^^ value borrowed here after move
[INFO] [stdout]      |
[INFO] [stdout]      = note: borrow occurs due to deref coercion to `str`
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]      |
[INFO] [stdout] 1299 |         let node = ASTNode::new(ASTKind::Typedef(typeinfo.ty, typename.clone()), token.pos);
[INFO] [stdout]      |                                                                       ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rettype`
[INFO] [stdout]     --> src/parse.rs:1316:31
[INFO] [stdout]      |
[INFO] [stdout] 1316 |         if let TypeKind::Func(rettype, argtypes, is_vararg) = f.declarator.qty.ty.kind {
[INFO] [stdout]      |                               ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_rettype`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `f.declarator.qty.ty.kind` as enum variant `Func` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1316:63
[INFO] [stdout]      |
[INFO] [stdout] 1316 |         if let TypeKind::Func(rettype, argtypes, is_vararg) = f.declarator.qty.ty.kind {
[INFO] [stdout]      |                               -------  -------- ...and here   ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |                               |
[INFO] [stdout]      |                               data moved here
[INFO] [stdout]      |
[INFO] [stdout]      = note: move occurs because these variables have types that don't implement the `Copy` trait
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]      |
[INFO] [stdout] 1316 |         if let TypeKind::Func(rettype, argtypes, is_vararg) = &f.declarator.qty.ty.kind {
[INFO] [stdout]      |                                                               +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `f.body` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1330:42
[INFO] [stdout]      |
[INFO] [stdout] 1330 |             let kind = ASTKind::FuncCall(f.body, args);
[INFO] [stdout]      |                                          ^^^^^^ move occurs because `f.body` has type `Box<ast::ASTNode>`, 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] 1330 |             let kind = ASTKind::FuncCall(f.body.clone(), args);
[INFO] [stdout]      |                                                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1708:17
[INFO] [stdout]      |
[INFO] [stdout] 1706 |         while let Some(token) = iter.peek() {
[INFO] [stdout]      |                                 ---- first mutable borrow occurs here
[INFO] [stdout] 1707 |             if !is_first_loop {
[INFO] [stdout] 1708 |                 iter.advance_cursor();
[INFO] [stdout]      |                 ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 1712 |             if token.token_type == TokenKind::Punct(Punct::Semicolon) {
[INFO] [stdout]      |                ---------------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_funcdef`
[INFO] [stdout]     --> src/parse.rs:1895:52
[INFO] [stdout]      |
[INFO] [stdout] 1895 |     fn read_storage_class_specifier(token: &Token, is_funcdef: bool) -> Option<StorageClass> {
[INFO] [stdout]      |                                                    ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_funcdef`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tok`
[INFO] [stdout]     --> src/parse.rs:1913:24
[INFO] [stdout]      |
[INFO] [stdout] 1913 |         while let Some(tok) = iter.peek() {
[INFO] [stdout]      |                        ^^^ help: if this is intentional, prefix it with an underscore: `_tok`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1911:13
[INFO] [stdout]      |
[INFO] [stdout] 1911 |         let iter = tokens.into_iter().peekable();
[INFO] [stdout]      |             ^^^^ not mutable
[INFO] [stdout] 1912 |         let nodes = Vec::new();
[INFO] [stdout] 1913 |         while let Some(tok) = iter.peek() {
[INFO] [stdout]      |                               ---- cannot borrow as mutable
[INFO] [stdout] 1914 |             nodes.append(&mut self.parse_translation_unit(&mut iter)?);
[INFO] [stdout]      |                                                           --------- cannot borrow as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1911 |         let mut iter = tokens.into_iter().peekable();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `nodes` as mutable, as it is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1914:13
[INFO] [stdout]      |
[INFO] [stdout] 1914 |             nodes.append(&mut self.parse_translation_unit(&mut iter)?);
[INFO] [stdout]      |             ^^^^^ cannot borrow as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1912 |         let mut nodes = Vec::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]     --> src/parse.rs:1914:31
[INFO] [stdout]      |
[INFO] [stdout] 1914 |             nodes.append(&mut self.parse_translation_unit(&mut iter)?);
[INFO] [stdout]      |                               ^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]      |
[INFO] [stdout] 1910 |     pub fn parse(&'a mut self, tokens: Vec<Token>) -> ParseRes<Vec<ASTNode>> {
[INFO] [stdout]      |                      +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.token_type` as enum variant `Keyword` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1343:19
[INFO] [stdout]      |
[INFO] [stdout] 1343 |             match token.token_type {
[INFO] [stdout]      |                   ^^^^^^^^^^^^^^^^
[INFO] [stdout] 1344 |                 TokenKind::Keyword(kw) => match kw {
[INFO] [stdout]      |                                    --
[INFO] [stdout]      |                                    |
[INFO] [stdout]      |                                    data moved here
[INFO] [stdout]      |                                    move occurs because `kw` has type `Keyword`, which does not implement the `Copy` trait
[INFO] [stdout]      |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]      |
[INFO] [stdout] 1343 |             match &token.token_type {
[INFO] [stdout]      |                   +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0594]: cannot assign to `quals.is_restrict`, as `quals` is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1345:42
[INFO] [stdout]      |
[INFO] [stdout] 1345 |                     Keyword::Restrict => quals.is_restrict = true,
[INFO] [stdout]      |                                          ^^^^^^^^^^^^^^^^^^^^^^^^ cannot assign
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1339 |         let mut quals = Qualifiers::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0594]: cannot assign to `quals.is_const`, as `quals` is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1346:39
[INFO] [stdout]      |
[INFO] [stdout] 1346 |                     Keyword::Const => quals.is_const = true,
[INFO] [stdout]      |                                       ^^^^^^^^^^^^^^^^^^^^^ cannot assign
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1339 |         let mut quals = Qualifiers::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0594]: cannot assign to `quals.is_volatile`, as `quals` is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1347:42
[INFO] [stdout]      |
[INFO] [stdout] 1347 |                     Keyword::Volatile => quals.is_volatile = true,
[INFO] [stdout]      |                                          ^^^^^^^^^^^^^^^^^^^^^^^^ cannot assign
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1339 |         let mut quals = Qualifiers::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `iter`
[INFO] [stdout]     --> src/parse.rs:1383:43
[INFO] [stdout]      |
[INFO] [stdout] 1383 |     fn parse_generic_selection(&mut self, iter: &mut impl Iterator<Item = Token>){
[INFO] [stdout]      |                                           ^^^^ help: if this is intentional, prefix it with an underscore: `_iter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `t.token_type` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1397:37
[INFO] [stdout]      |
[INFO] [stdout] 1397 |         match tok.and_then(|t| Some(t.token_type)).unwrap_or(TokenKind::EOF) {
[INFO] [stdout]      |                                     ^^^^^^^^^^^^ move occurs because `t.token_type` has type `TokenKind`, 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] 1397 |         match tok.and_then(|t| Some(t.token_type.clone())).unwrap_or(TokenKind::EOF) {
[INFO] [stdout]      |                                                 ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `stmt`
[INFO] [stdout]     --> src/parse.rs:1449:17
[INFO] [stdout]      |
[INFO] [stdout] 1449 |             let stmt = self.parse_statement(iter)?;
[INFO] [stdout]      |                 ^^^^ help: if this is intentional, prefix it with an underscore: `_stmt`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1511:37
[INFO] [stdout]      |
[INFO] [stdout]  272 | impl<'a> Parser<'a> {
[INFO] [stdout]      |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 1508 |                 let loop_body = Box::new(self.parse_statement(iter)?);
[INFO] [stdout]      |                                          --------------------------
[INFO] [stdout]      |                                          |
[INFO] [stdout]      |                                          first mutable borrow occurs here
[INFO] [stdout]      |                                          argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 1511 |                 let expr = Box::new(self.parse_expression(iter)?);
[INFO] [stdout]      |                                     ^^^^ second mutable borrow occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_space`
[INFO] [stdout]    --> src/lex.rs:166:34
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub fn new(ttype: TokenKind, has_space: bool, line: usize, col: usize, filename: &str) -> Self {
[INFO] [stdout]     |                                  ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_space`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `processed`
[INFO] [stdout]    --> src/lex.rs:212:13
[INFO] [stdout]     |
[INFO] [stdout] 212 |     let mut processed = String::new();
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_processed`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n`
[INFO] [stdout]    --> src/lex.rs:213:13
[INFO] [stdout]     |
[INFO] [stdout] 213 |     let mut n = 0;
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1535:41
[INFO] [stdout]      |
[INFO] [stdout]  272 | impl<'a> Parser<'a> {
[INFO] [stdout]      |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 1531 |                 let then = self.parse_statement(iter)?;
[INFO] [stdout]      |                            --------------------------
[INFO] [stdout]      |                            |
[INFO] [stdout]      |                            first mutable borrow occurs here
[INFO] [stdout]      |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 1535 |                     els = Some(Box::new(self.parse_statement(iter)?));
[INFO] [stdout]      |                                         ^^^^ second mutable borrow occurs here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/lex.rs:212:9
[INFO] [stdout]     |
[INFO] [stdout] 212 |     let mut processed = String::new();
[INFO] [stdout]     |         ----^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/lex.rs:213:9
[INFO] [stdout]     |
[INFO] [stdout] 213 |     let mut n = 0;
[INFO] [stdout]     |         ----^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `iter`
[INFO] [stdout]    --> src/lex.rs:292:13
[INFO] [stdout]     |
[INFO] [stdout] 292 |         let iter = self.body.chars().skip(n);
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_iter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `view`
[INFO] [stdout]    --> src/lex.rs:298:13
[INFO] [stdout]     |
[INFO] [stdout] 298 |         let view = &self.body[n..];
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_view`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_space`
[INFO] [stdout]    --> src/lex.rs:296:36
[INFO] [stdout]     |
[INFO] [stdout] 296 |     fn get_symbol(&self, n: usize, has_space: bool) -> Punct {
[INFO] [stdout]     |                                    ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_space`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/lex.rs:321:12
[INFO] [stdout]     |
[INFO] [stdout] 321 |         if let keyword = self.get_keyword_from_string(identifier.as_str())? {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]     = help: consider replacing the `if let` with a `let`
[INFO] [stdout]     = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1612:13
[INFO] [stdout]      |
[INFO] [stdout] 1612 |         let iter = iter.skip_while(
[INFO] [stdout]      |             ^^^^ not mutable
[INFO] [stdout] ...
[INFO] [stdout] 1618 |         ensure_and_consume(&mut iter, TokenKind::Punct(Punct::OpenParen))?;
[INFO] [stdout]      |                            --------- cannot borrow as mutable
[INFO] [stdout] 1619 |         let asm = consume_token_or_eof(&mut iter)?;
[INFO] [stdout]      |                                        --------- cannot borrow as mutable
[INFO] [stdout] ...
[INFO] [stdout] 1627 |         ensure_and_consume(&mut iter, TokenKind::Punct(Punct::CloseParen))?;
[INFO] [stdout]      |                            --------- cannot borrow as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1612 |         let mut iter = iter.skip_while(
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `scope`
[INFO] [stdout]     --> src/parse.rs:1642:13
[INFO] [stdout]      |
[INFO] [stdout] 1642 |         let scope = if scope.is_some() {
[INFO] [stdout]      |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_scope`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0502]: cannot borrow `*self` as immutable because it is also borrowed as mutable
[INFO] [stdout]     --> src/parse.rs:1655:16
[INFO] [stdout]      |
[INFO] [stdout]  272 | impl<'a> Parser<'a> {
[INFO] [stdout]      |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 1655 |             if self.is_type_specifier(&peek_token.token_type) {
[INFO] [stdout]      |                ^^^^ immutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 1658 |                 stmts.push(self.parse_statement(&mut iter)?); //TODO: more sophisticated error handling. 
[INFO] [stdout]      |                            -------------------------------
[INFO] [stdout]      |                            |
[INFO] [stdout]      |                            mutable borrow occurs here
[INFO] [stdout]      |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1656:28
[INFO] [stdout]      |
[INFO] [stdout]  272 | impl<'a> Parser<'a> {
[INFO] [stdout]      |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 1656 |                 stmts.push(self.parse_declaration(&mut iter)?);
[INFO] [stdout]      |                            ^^^^ second mutable borrow occurs here
[INFO] [stdout] 1657 |             } else {
[INFO] [stdout] 1658 |                 stmts.push(self.parse_statement(&mut iter)?); //TODO: more sophisticated error handling. 
[INFO] [stdout]      |                            -------------------------------
[INFO] [stdout]      |                            |
[INFO] [stdout]      |                            first mutable borrow occurs here
[INFO] [stdout]      |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `*self` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1658:28
[INFO] [stdout]      |
[INFO] [stdout]  272 | impl<'a> Parser<'a> {
[INFO] [stdout]      |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 1658 |                 stmts.push(self.parse_statement(&mut iter)?); //TODO: more sophisticated error handling. 
[INFO] [stdout]      |                            ^^^^---------------------------
[INFO] [stdout]      |                            |
[INFO] [stdout]      |                            `*self` was mutably borrowed here in the previous iteration of the loop
[INFO] [stdout]      |                            argument requires that `*self` is borrowed for `'a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1667:23
[INFO] [stdout]      |
[INFO] [stdout] 1667 |         ParseErr::new(token.pos, token.pos, msg)
[INFO] [stdout]      |                       ^^^^^^^^^ move occurs because `token.pos` has type `TextPosition`, 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] 1667 |         ParseErr::new(token.pos.clone(), token.pos, msg)
[INFO] [stdout]      |                                ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `token.pos` which is behind a shared reference
[INFO] [stdout]     --> src/parse.rs:1667:34
[INFO] [stdout]      |
[INFO] [stdout] 1667 |         ParseErr::new(token.pos, token.pos, msg)
[INFO] [stdout]      |                                  ^^^^^^^^^ move occurs because `token.pos` has type `TextPosition`, 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] 1667 |         ParseErr::new(token.pos, token.pos.clone(), msg)
[INFO] [stdout]      |                                           ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0499]: cannot borrow `iter` as mutable more than once at a time
[INFO] [stdout]     --> src/parse.rs:1708:17
[INFO] [stdout]      |
[INFO] [stdout] 1706 |         while let Some(token) = iter.peek() {
[INFO] [stdout]      |                                 ---- first mutable borrow occurs here
[INFO] [stdout] 1707 |             if !is_first_loop {
[INFO] [stdout] 1708 |                 iter.advance_cursor();
[INFO] [stdout]      |                 ^^^^ second mutable borrow occurs here
[INFO] [stdout] ...
[INFO] [stdout] 1712 |             if token.token_type == TokenKind::Punct(Punct::Semicolon) {
[INFO] [stdout]      |                ---------------- first borrow later used here
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `is_funcdef`
[INFO] [stdout]     --> src/parse.rs:1895:52
[INFO] [stdout]      |
[INFO] [stdout] 1895 |     fn read_storage_class_specifier(token: &Token, is_funcdef: bool) -> Option<StorageClass> {
[INFO] [stdout]      |                                                    ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_is_funcdef`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tok`
[INFO] [stdout]     --> src/parse.rs:1913:24
[INFO] [stdout]      |
[INFO] [stdout] 1913 |         while let Some(tok) = iter.peek() {
[INFO] [stdout]      |                        ^^^ help: if this is intentional, prefix it with an underscore: `_tok`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `iter` as mutable, as it is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1911:13
[INFO] [stdout]      |
[INFO] [stdout] 1911 |         let iter = tokens.into_iter().peekable();
[INFO] [stdout]      |             ^^^^ not mutable
[INFO] [stdout] 1912 |         let nodes = Vec::new();
[INFO] [stdout] 1913 |         while let Some(tok) = iter.peek() {
[INFO] [stdout]      |                               ---- cannot borrow as mutable
[INFO] [stdout] 1914 |             nodes.append(&mut self.parse_translation_unit(&mut iter)?);
[INFO] [stdout]      |                                                           --------- cannot borrow as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1911 |         let mut iter = tokens.into_iter().peekable();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `nodes` as mutable, as it is not declared as mutable
[INFO] [stdout]     --> src/parse.rs:1914:13
[INFO] [stdout]      |
[INFO] [stdout] 1914 |             nodes.append(&mut self.parse_translation_unit(&mut iter)?);
[INFO] [stdout]      |             ^^^^^ cannot borrow as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]      |
[INFO] [stdout] 1912 |         let mut nodes = Vec::new();
[INFO] [stdout]      |             +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self` as mutable, as it is behind a `&` reference
[INFO] [stdout]     --> src/parse.rs:1914:31
[INFO] [stdout]      |
[INFO] [stdout] 1914 |             nodes.append(&mut self.parse_translation_unit(&mut iter)?);
[INFO] [stdout]      |                               ^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout]      |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]      |
[INFO] [stdout] 1910 |     pub fn parse(&'a mut self, tokens: Vec<Token>) -> ParseRes<Vec<ASTNode>> {
[INFO] [stdout]      |                      +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing temporary value
[INFO] [stdout]   --> src/err.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 39 | /         match self {
[INFO] [stdout] 40 | |             ParseErrMsg::Something => "Something happened",
[INFO] [stdout] 41 | |             ParseErrMsg::ExpectedSymbol(tk) => &format!("Expected {:?}", tk),
[INFO] [stdout]    | |                                                 ---------------------------- temporary value created here
[INFO] [stdout] 42 | |             ParseErrMsg::ExpectedOneOfSymbols(v) => &format!("Expected one of: {:?}", v),
[INFO] [stdout] ...  |
[INFO] [stdout] 49 | |             _ => "Unimplemented error",
[INFO] [stdout] 50 | |         }
[INFO] [stdout]    | |_________^ returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_space`
[INFO] [stdout]    --> src/lex.rs:166:34
[INFO] [stdout]     |
[INFO] [stdout] 166 |     pub fn new(ttype: TokenKind, has_space: bool, line: usize, col: usize, filename: &str) -> Self {
[INFO] [stdout]     |                                  ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_space`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `processed`
[INFO] [stdout]    --> src/lex.rs:212:13
[INFO] [stdout]     |
[INFO] [stdout] 212 |     let mut processed = String::new();
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_processed`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing temporary value
[INFO] [stdout]   --> src/err.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 39 | /         match self {
[INFO] [stdout] 40 | |             ParseErrMsg::Something => "Something happened",
[INFO] [stdout] 41 | |             ParseErrMsg::ExpectedSymbol(tk) => &format!("Expected {:?}", tk),
[INFO] [stdout] 42 | |             ParseErrMsg::ExpectedOneOfSymbols(v) => &format!("Expected one of: {:?}", v),
[INFO] [stdout]    | |                                                      ----------------------------------- temporary value created here
[INFO] [stdout] ...  |
[INFO] [stdout] 49 | |             _ => "Unimplemented error",
[INFO] [stdout] 50 | |         }
[INFO] [stdout]    | |_________^ returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing temporary value
[INFO] [stdout]   --> src/err.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 39 | /         match self {
[INFO] [stdout] 40 | |             ParseErrMsg::Something => "Something happened",
[INFO] [stdout] 41 | |             ParseErrMsg::ExpectedSymbol(tk) => &format!("Expected {:?}", tk),
[INFO] [stdout] 42 | |             ParseErrMsg::ExpectedOneOfSymbols(v) => &format!("Expected one of: {:?}", v),
[INFO] [stdout] ...  |
[INFO] [stdout] 47 | |             ParseErrMsg::InternalError(line) => &format!("Internal compiler error at line {}", line),
[INFO] [stdout]    | |                                                  --------------------------------------------------- temporary value created here
[INFO] [stdout] 48 | |             ParseErrMsg::EOF => "End of file reached",
[INFO] [stdout] 49 | |             _ => "Unimplemented error",
[INFO] [stdout] 50 | |         }
[INFO] [stdout]    | |_________^ returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `n`
[INFO] [stdout]    --> src/lex.rs:213:13
[INFO] [stdout]     |
[INFO] [stdout] 213 |     let mut n = 0;
[INFO] [stdout]     |             ^ help: if this is intentional, prefix it with an underscore: `_n`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.position.filename` as enum variant `Some` which is behind a shared reference
[INFO] [stdout]   --> src/err.rs:62:33
[INFO] [stdout]    |
[INFO] [stdout] 62 |         if let Some(filename) = self.position.filename {
[INFO] [stdout]    |                     --------    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     data moved here
[INFO] [stdout]    |                     move occurs because `filename` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]    |
[INFO] [stdout] 62 |         if let Some(filename) = &self.position.filename {
[INFO] [stdout]    |                                 +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.position.filename` as enum variant `Some` which is behind a shared reference
[INFO] [stdout]   --> src/err.rs:79:15
[INFO] [stdout]    |
[INFO] [stdout] 79 |         match self.position.filename {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 80 |             Some(s) => write!(f, "Error in {} at {:?}, message: \n{:?}", s, self.position, self.message),
[INFO] [stdout]    |                  -
[INFO] [stdout]    |                  |
[INFO] [stdout]    |                  data moved here
[INFO] [stdout]    |                  move occurs because `s` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]    |
[INFO] [stdout] 79 |         match &self.position.filename {
[INFO] [stdout]    |               +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of partially moved value: `node`
[INFO] [stdout]   --> src/ast.rs:26:94
[INFO] [stdout]    |
[INFO] [stdout] 26 |         Self { name: name.to_string(), position: node.pos, sclass: StorageClass::Auto, node: node }
[INFO] [stdout]    |                                                  -------- value partially moved here         ^^^^ value used here after partial move
[INFO] [stdout]    |
[INFO] [stdout]    = note: partial move occurs because `node.pos` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self.table` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/ast.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 53 |         self.table.push_symbol(sym)
[INFO] [stdout]    |         ^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub fn push_symbol(&mut self, sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]    |                         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self.table` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/ast.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 59 |         self.table.push_symbol(Symbol {name: name.to_string(), position: ast.pos, node: ast, sclass: storage})
[INFO] [stdout]    |         ^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 58 |     pub fn emplace_symbol(&mut self, name: &str, ast: ASTNode, storage: StorageClass) -> ParseRes<()> {
[INFO] [stdout]    |                            +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of partially moved value: `ast`
[INFO] [stdout]   --> src/ast.rs:59:89
[INFO] [stdout]    |
[INFO] [stdout] 59 |         self.table.push_symbol(Symbol {name: name.to_string(), position: ast.pos, node: ast, sclass: storage})
[INFO] [stdout]    |                                                                          -------        ^^^ value used here after partial move
[INFO] [stdout]    |                                                                          |
[INFO] [stdout]    |                                                                          value partially moved here
[INFO] [stdout]    |
[INFO] [stdout]    = note: partial move occurs because `ast.pos` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self.table` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/ast.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |         self.table.push_global_symbol(sym)
[INFO] [stdout]    |         ^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub fn push_global_symbol(&mut self, sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]    |                                +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*self` which is behind a mutable reference
[INFO] [stdout]   --> src/ast.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 70 |         self.exit_scope();
[INFO] [stdout]    |         ^^^^ ------------ `*self` moved due to this method call
[INFO] [stdout]    |         |
[INFO] [stdout]    |         move occurs because `*self` has type `ast::ActiveScope<'_>`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] note: `ast::ActiveScope::<'a>::exit_scope` takes ownership of the receiver `self`, which moves `*self`
[INFO] [stdout]   --> src/ast.rs:48:23
[INFO] [stdout]    |
[INFO] [stdout] 48 |     pub fn exit_scope(self) {
[INFO] [stdout]    |                       ^^^^
[INFO] [stdout] note: if `ast::ActiveScope<'_>` implemented `Clone`, you could clone the value
[INFO] [stdout]   --> src/ast.rs:38:1
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct ActiveScope<'a> {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout] ...
[INFO] [stdout] 70 |         self.exit_scope();
[INFO] [stdout]    |         ---- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/lex.rs:212:9
[INFO] [stdout]     |
[INFO] [stdout] 212 |     let mut processed = String::new();
[INFO] [stdout]     |         ----^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing local variable `sc`
[INFO] [stdout]   --> src/ast.rs:79:9
[INFO] [stdout]    |
[INFO] [stdout] 79 | /         Self {
[INFO] [stdout] 80 | |             global: sc,
[INFO] [stdout] 81 | |             active_sc: &sc,
[INFO] [stdout]    | |                        --- `sc` is borrowed here
[INFO] [stdout] 82 | |         }
[INFO] [stdout]    | |_________^ returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/lex.rs:213:9
[INFO] [stdout]     |
[INFO] [stdout] 213 |     let mut n = 0;
[INFO] [stdout]     |         ----^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `sc`
[INFO] [stdout]   --> src/ast.rs:81:24
[INFO] [stdout]    |
[INFO] [stdout] 78 |         let sc = SymbolScope::new();
[INFO] [stdout]    |             -- move occurs because `sc` has type `SymbolScope<'_>`, which does not implement the `Copy` trait
[INFO] [stdout] 79 |         Self {
[INFO] [stdout] 80 |             global: sc,
[INFO] [stdout]    |                     -- value moved here
[INFO] [stdout] 81 |             active_sc: &sc,
[INFO] [stdout]    |                        ^^^ value borrowed here after move
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 80 |             global: sc.clone(),
[INFO] [stdout]    |                       ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `self.active_sc.subscopes` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/ast.rs:89:9
[INFO] [stdout]    |
[INFO] [stdout] 89 |         self.active_sc.subscopes.push(sc);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub active_sc: &'a mut SymbolScope<'a>,
[INFO] [stdout]    |                        +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `self.active_sc.subscopes` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/ast.rs:99:9
[INFO] [stdout]    |
[INFO] [stdout] 99 |         self.active_sc.subscopes.push(sc);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub active_sc: &'a mut SymbolScope<'a>,
[INFO] [stdout]    |                        +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `iter`
[INFO] [stdout]    --> src/lex.rs:292:13
[INFO] [stdout]     |
[INFO] [stdout] 292 |         let iter = self.body.chars().skip(n);
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_iter`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing local variable `sc`
[INFO] [stdout]    --> src/ast.rs:102:9
[INFO] [stdout]     |
[INFO] [stdout] 102 |         ActiveScope::new(&mut self, &mut sc)
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^-------^
[INFO] [stdout]     |         |                           |
[INFO] [stdout]     |         |                           `sc` is borrowed here
[INFO] [stdout]     |         returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/ast.rs:102:26
[INFO] [stdout]     |
[INFO] [stdout] 102 |         ActiveScope::new(&mut self, &mut sc)
[INFO] [stdout]     |                          ^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] note: the binding is already a mutable borrow
[INFO] [stdout]    --> src/ast.rs:93:24
[INFO] [stdout]     |
[INFO] [stdout]  93 |     pub fn enter_scope(&'a mut self) -> ActiveScope {
[INFO] [stdout]     |                        ^^^^^^^^^^^^
[INFO] [stdout] help: try removing `&mut` here
[INFO] [stdout]     |
[INFO] [stdout] 102 -         ActiveScope::new(&mut self, &mut sc)
[INFO] [stdout] 102 +         ActiveScope::new(self, &mut sc)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `sc`
[INFO] [stdout]    --> src/ast.rs:102:37
[INFO] [stdout]     |
[INFO] [stdout]  95 |         let mut sc = SymbolScope::new();
[INFO] [stdout]     |             ------ move occurs because `sc` has type `SymbolScope<'_>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout]  99 |         self.active_sc.subscopes.push(sc);
[INFO] [stdout]     |                                       -- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 102 |         ActiveScope::new(&mut self, &mut sc)
[INFO] [stdout]     |                                     ^^^^^^^ value borrowed here after move
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout]  99 |         self.active_sc.subscopes.push(sc.clone());
[INFO] [stdout]     |                                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `view`
[INFO] [stdout]    --> src/lex.rs:298:13
[INFO] [stdout]     |
[INFO] [stdout] 298 |         let view = &self.body[n..];
[INFO] [stdout]     |             ^^^^ help: if this is intentional, prefix it with an underscore: `_view`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `has_space`
[INFO] [stdout]    --> src/lex.rs:296:36
[INFO] [stdout]     |
[INFO] [stdout] 296 |     fn get_symbol(&self, n: usize, has_space: bool) -> Punct {
[INFO] [stdout]     |                                    ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_has_space`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/lex.rs:321:12
[INFO] [stdout]     |
[INFO] [stdout] 321 |         if let keyword = self.get_keyword_from_string(identifier.as_str())? {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]     = help: consider replacing the `if let` with a `let`
[INFO] [stdout]     = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/ast.rs:115:35
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn push_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                   ----^^^
[INFO] [stdout]     |                                   |
[INFO] [stdout]     |                                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `self.active_sc.symbols` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/ast.rs:116:22
[INFO] [stdout]     |
[INFO] [stdout] 116 |         let result = self.active_sc.symbols.insert(&sym.name, sym); 
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout]  33 |     pub active_sc: &'a mut SymbolScope<'a>,
[INFO] [stdout]     |                        +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `sym.name` does not live long enough
[INFO] [stdout]    --> src/ast.rs:116:52
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl<'a> SymbolTable<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn push_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                   ------- binding `sym` declared here
[INFO] [stdout] 116 |         let result = self.active_sc.symbols.insert(&sym.name, sym); 
[INFO] [stdout]     |                      ------------------------------^^^^^^^^^------
[INFO] [stdout]     |                      |                             |
[INFO] [stdout]     |                      |                             borrowed value does not live long enough
[INFO] [stdout]     |                      argument requires that `sym.name` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 122 |     }
[INFO] [stdout]     |     - `sym.name` dropped here while still borrowed
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0505]: cannot move out of `sym` because it is borrowed
[INFO] [stdout]    --> src/ast.rs:116:63
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn push_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                   ------- binding `sym` declared here
[INFO] [stdout] 116 |         let result = self.active_sc.symbols.insert(&sym.name, sym); 
[INFO] [stdout]     |                                             ------ ---------  ^^^ move out of `sym` occurs here
[INFO] [stdout]     |                                             |      |
[INFO] [stdout]     |                                             |      borrow of `sym.name` occurs here
[INFO] [stdout]     |                                             borrow later used by call
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 116 |         let result = self.active_sc.symbols.insert(&sym.name.clone(), sym); 
[INFO] [stdout]     |                                                             ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `sym.position`
[INFO] [stdout]    --> src/ast.rs:118:31
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn push_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                   ------- move occurs because `sym` has type `ast::Symbol`, which does not implement the `Copy` trait
[INFO] [stdout] 116 |         let result = self.active_sc.symbols.insert(&sym.name, sym); 
[INFO] [stdout]     |                                                               --- value moved here
[INFO] [stdout] 117 |         if result.is_some() {
[INFO] [stdout] 118 |             Err(ParseErr::new(sym.position, sym.position, ParseErrMsg::Something))
[INFO] [stdout]     |                               ^^^^^^^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `sym.position`
[INFO] [stdout]    --> src/ast.rs:118:45
[INFO] [stdout]     |
[INFO] [stdout] 118 |             Err(ParseErr::new(sym.position, sym.position, ParseErrMsg::Something))
[INFO] [stdout]     |                               ------------  ^^^^^^^^^^^^ value used here after move
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               value moved here
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because `sym.position` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/ast.rs:125:42
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub fn push_global_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                          ----^^^
[INFO] [stdout]     |                                          |
[INFO] [stdout]     |                                          help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `scope.symbols` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/ast.rs:130:22
[INFO] [stdout]     |
[INFO] [stdout] 130 |         let result = scope.symbols.insert(&sym.name, sym);
[INFO] [stdout]     |                      ^^^^^^^^^^^^^ `scope` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider specifying this binding's type
[INFO] [stdout]     |
[INFO] [stdout] 126 |         let mut scope: &mut SymbolScope<'_> = self.active_sc;
[INFO] [stdout]     |                      ++++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0505]: cannot move out of `sym` because it is borrowed
[INFO] [stdout]    --> src/ast.rs:130:54
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub fn push_global_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                          ------- binding `sym` declared here
[INFO] [stdout] ...
[INFO] [stdout] 130 |         let result = scope.symbols.insert(&sym.name, sym);
[INFO] [stdout]     |                                    ------ ---------  ^^^ move out of `sym` occurs here
[INFO] [stdout]     |                                    |      |
[INFO] [stdout]     |                                    |      borrow of `sym.name` occurs here
[INFO] [stdout]     |                                    borrow later used by call
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 130 |         let result = scope.symbols.insert(&sym.name.clone(), sym);
[INFO] [stdout]     |                                                    ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `sym.position`
[INFO] [stdout]    --> src/ast.rs:132:31
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub fn push_global_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                          ------- move occurs because `sym` has type `ast::Symbol`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 130 |         let result = scope.symbols.insert(&sym.name, sym);
[INFO] [stdout]     |                                                      --- value moved here
[INFO] [stdout] 131 |         if result.is_some() {
[INFO] [stdout] 132 |             Err(ParseErr::new(sym.position, sym.position, ParseErrMsg::Something))
[INFO] [stdout]     |                               ^^^^^^^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `sym.position`
[INFO] [stdout]    --> src/ast.rs:132:45
[INFO] [stdout]     |
[INFO] [stdout] 132 |             Err(ParseErr::new(sym.position, sym.position, ParseErrMsg::Something))
[INFO] [stdout]     |                               ------------  ^^^^^^^^^^^^ value used here after move
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               value moved here
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because `sym.position` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `self.active_sc.symbols` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/ast.rs:158:30
[INFO] [stdout]     |
[INFO] [stdout] 158 |         let mut opt_symbol = self.active_sc.symbols.get_mut(name);
[INFO] [stdout]     |                              ^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout]  33 |     pub active_sc: &'a mut SymbolScope<'a>,
[INFO] [stdout]     |                        +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `scope.symbols` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/ast.rs:165:26
[INFO] [stdout]     |
[INFO] [stdout] 164 |         while let Some(scope) = scope.up {
[INFO] [stdout]     |                        ----- consider changing this binding's type to be: `&mut SymbolScope<'_>`
[INFO] [stdout] 165 |             opt_symbol = scope.symbols.get_mut(name);
[INFO] [stdout]     |                          ^^^^^^^^^^^^^ `scope` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing temporary value
[INFO] [stdout]   --> src/err.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 39 | /         match self {
[INFO] [stdout] 40 | |             ParseErrMsg::Something => "Something happened",
[INFO] [stdout] 41 | |             ParseErrMsg::ExpectedSymbol(tk) => &format!("Expected {:?}", tk),
[INFO] [stdout]    | |                                                 ---------------------------- temporary value created here
[INFO] [stdout] 42 | |             ParseErrMsg::ExpectedOneOfSymbols(v) => &format!("Expected one of: {:?}", v),
[INFO] [stdout] ...  |
[INFO] [stdout] 49 | |             _ => "Unimplemented error",
[INFO] [stdout] 50 | |         }
[INFO] [stdout]    | |_________^ returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:285:18
[INFO] [stdout]     |
[INFO] [stdout] 285 |             pos: tok.pos,
[INFO] [stdout]     |                  ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 285 |             pos: tok.pos.clone(),
[INFO] [stdout]     |                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing temporary value
[INFO] [stdout]   --> src/err.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 39 | /         match self {
[INFO] [stdout] 40 | |             ParseErrMsg::Something => "Something happened",
[INFO] [stdout] 41 | |             ParseErrMsg::ExpectedSymbol(tk) => &format!("Expected {:?}", tk),
[INFO] [stdout] 42 | |             ParseErrMsg::ExpectedOneOfSymbols(v) => &format!("Expected one of: {:?}", v),
[INFO] [stdout]    | |                                                      ----------------------------------- temporary value created here
[INFO] [stdout] ...  |
[INFO] [stdout] 49 | |             _ => "Unimplemented error",
[INFO] [stdout] 50 | |         }
[INFO] [stdout]    | |_________^ returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `lhs.pos`
[INFO] [stdout]    --> src/ast.rs:292:33
[INFO] [stdout]     |
[INFO] [stdout] 289 |     pub fn make_assignment(lhs: ASTNode, rhs: ASTNode) -> Self {
[INFO] [stdout]     |                            --- move occurs because `lhs` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] 290 |         let binexpr = BinaryExpr {lhs: Box::new(lhs), op: BinaryOps::Assign, rhs: Box::new(rhs)};
[INFO] [stdout]     |                                                 --- value moved here
[INFO] [stdout] 291 |         let kind = ASTKind::BinaryOp(binexpr);
[INFO] [stdout] 292 |         Self { kind: kind, pos: lhs.pos }
[INFO] [stdout]     |                                 ^^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing temporary value
[INFO] [stdout]   --> src/err.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 39 | /         match self {
[INFO] [stdout] 40 | |             ParseErrMsg::Something => "Something happened",
[INFO] [stdout] 41 | |             ParseErrMsg::ExpectedSymbol(tk) => &format!("Expected {:?}", tk),
[INFO] [stdout] 42 | |             ParseErrMsg::ExpectedOneOfSymbols(v) => &format!("Expected one of: {:?}", v),
[INFO] [stdout] ...  |
[INFO] [stdout] 47 | |             ParseErrMsg::InternalError(line) => &format!("Internal compiler error at line {}", line),
[INFO] [stdout]    | |                                                  --------------------------------------------------- temporary value created here
[INFO] [stdout] 48 | |             ParseErrMsg::EOF => "End of file reached",
[INFO] [stdout] 49 | |             _ => "Unimplemented error",
[INFO] [stdout] 50 | |         }
[INFO] [stdout]    | |_________^ returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.kind` as enum variant `Cast` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:314:28
[INFO] [stdout]     |
[INFO] [stdout] 314 |         let result = match self.kind {
[INFO] [stdout]     |                            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 317 |             ASTKind::Cast(node, _) => node.eval_int()?,
[INFO] [stdout]     |                           ---- data moved here
[INFO] [stdout] 318 |             ASTKind::UnaryOp(op) => self.eval_unary_op(&op)?,
[INFO] [stdout]     |                              -- ...and here
[INFO] [stdout] 319 |             ASTKind::BinaryOp(op) => self.eval_binary_op_int(&op)?,
[INFO] [stdout]     |                               -- ...and here
[INFO] [stdout] 320 |             ASTKind::TertiaryOp(op) => self.eval_tertiary_op_int(&op)?,
[INFO] [stdout]     |                                 -- ...and here
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because these variables have types that don't implement the `Copy` trait
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 314 |         let result = match &self.kind {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.position.filename` as enum variant `Some` which is behind a shared reference
[INFO] [stdout]   --> src/err.rs:62:33
[INFO] [stdout]    |
[INFO] [stdout] 62 |         if let Some(filename) = self.position.filename {
[INFO] [stdout]    |                     --------    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     data moved here
[INFO] [stdout]    |                     move occurs because `filename` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]    |
[INFO] [stdout] 62 |         if let Some(filename) = &self.position.filename {
[INFO] [stdout]    |                                 +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.position.filename` as enum variant `Some` which is behind a shared reference
[INFO] [stdout]   --> src/err.rs:79:15
[INFO] [stdout]    |
[INFO] [stdout] 79 |         match self.position.filename {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 80 |             Some(s) => write!(f, "Error in {} at {:?}, message: \n{:?}", s, self.position, self.message),
[INFO] [stdout]    |                  -
[INFO] [stdout]    |                  |
[INFO] [stdout]    |                  data moved here
[INFO] [stdout]    |                  move occurs because `s` has type `String`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]    |
[INFO] [stdout] 79 |         match &self.position.filename {
[INFO] [stdout]    |               +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of partially moved value: `node`
[INFO] [stdout]   --> src/ast.rs:26:94
[INFO] [stdout]    |
[INFO] [stdout] 26 |         Self { name: name.to_string(), position: node.pos, sclass: StorageClass::Auto, node: node }
[INFO] [stdout]    |                                                  -------- value partially moved here         ^^^^ value used here after partial move
[INFO] [stdout]    |
[INFO] [stdout]    = note: partial move occurs because `node.pos` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self.table` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/ast.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 53 |         self.table.push_symbol(sym)
[INFO] [stdout]    |         ^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub fn push_symbol(&mut self, sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]    |                         +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self.table` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/ast.rs:59:9
[INFO] [stdout]    |
[INFO] [stdout] 59 |         self.table.push_symbol(Symbol {name: name.to_string(), position: ast.pos, node: ast, sclass: storage})
[INFO] [stdout]    |         ^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 58 |     pub fn emplace_symbol(&mut self, name: &str, ast: ASTNode, storage: StorageClass) -> ParseRes<()> {
[INFO] [stdout]    |                            +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `op`
[INFO] [stdout]    --> src/ast.rs:384:30
[INFO] [stdout]     |
[INFO] [stdout] 384 |             ASTKind::UnaryOp(op) => return Err(self.gen_err(ParseErrMsg::InvalidFloatOperation)),
[INFO] [stdout]     |                              ^^ help: if this is intentional, prefix it with an underscore: `_op`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of partially moved value: `ast`
[INFO] [stdout]   --> src/ast.rs:59:89
[INFO] [stdout]    |
[INFO] [stdout] 59 |         self.table.push_symbol(Symbol {name: name.to_string(), position: ast.pos, node: ast, sclass: storage})
[INFO] [stdout]    |                                                                          -------        ^^^ value used here after partial move
[INFO] [stdout]    |                                                                          |
[INFO] [stdout]    |                                                                          value partially moved here
[INFO] [stdout]    |
[INFO] [stdout]    = note: partial move occurs because `ast.pos` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `*self.table` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/ast.rs:63:9
[INFO] [stdout]    |
[INFO] [stdout] 63 |         self.table.push_global_symbol(sym)
[INFO] [stdout]    |         ^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be a mutable reference
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub fn push_global_symbol(&mut self, sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]    |                                +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.kind` as enum variant `Cast` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:380:28
[INFO] [stdout]     |
[INFO] [stdout] 380 |         let result = match self.kind {
[INFO] [stdout]     |                            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 383 |             ASTKind::Cast(node, _) => node.eval_float()?,
[INFO] [stdout]     |                           ---- data moved here
[INFO] [stdout] 384 |             ASTKind::UnaryOp(op) => return Err(self.gen_err(ParseErrMsg::InvalidFloatOperation)),
[INFO] [stdout]     |                              -- ...and here
[INFO] [stdout] 385 |             ASTKind::BinaryOp(op) => self.eval_binary_op_float(&op)?,
[INFO] [stdout]     |                               -- ...and here
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because these variables have types that don't implement the `Copy` trait
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 380 |         let result = match &self.kind {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `*self` which is behind a mutable reference
[INFO] [stdout]   --> src/ast.rs:70:9
[INFO] [stdout]    |
[INFO] [stdout] 70 |         self.exit_scope();
[INFO] [stdout]    |         ^^^^ ------------ `*self` moved due to this method call
[INFO] [stdout]    |         |
[INFO] [stdout]    |         move occurs because `*self` has type `ast::ActiveScope<'_>`, which does not implement the `Copy` trait
[INFO] [stdout]    |
[INFO] [stdout] note: `ast::ActiveScope::<'a>::exit_scope` takes ownership of the receiver `self`, which moves `*self`
[INFO] [stdout]   --> src/ast.rs:48:23
[INFO] [stdout]    |
[INFO] [stdout] 48 |     pub fn exit_scope(self) {
[INFO] [stdout]    |                       ^^^^
[INFO] [stdout] note: if `ast::ActiveScope<'_>` implemented `Clone`, you could clone the value
[INFO] [stdout]   --> src/ast.rs:38:1
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct ActiveScope<'a> {
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^ consider implementing `Clone` for this type
[INFO] [stdout] ...
[INFO] [stdout] 70 |         self.exit_scope();
[INFO] [stdout]    |         ---- you could clone this value
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing local variable `sc`
[INFO] [stdout]   --> src/ast.rs:79:9
[INFO] [stdout]    |
[INFO] [stdout] 79 | /         Self {
[INFO] [stdout] 80 | |             global: sc,
[INFO] [stdout] 81 | |             active_sc: &sc,
[INFO] [stdout]    | |                        --- `sc` is borrowed here
[INFO] [stdout] 82 | |         }
[INFO] [stdout]    | |_________^ returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.kind` as enum variant `Variable` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:432:18
[INFO] [stdout]     |
[INFO] [stdout] 432 |         Ok(match self.kind {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 436 |             ASTKind::Variable(v) => v.ty.size,
[INFO] [stdout]     |                               -
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               data moved here
[INFO] [stdout]     |                               move occurs because `v` has type `ast::Var`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 432 |         Ok(match &self.kind {
[INFO] [stdout]     |                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.kind` as enum variant `Variable` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:442:18
[INFO] [stdout]     |
[INFO] [stdout] 442 |         Ok(match self.kind {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 446 |             ASTKind::Variable(v) => v.ty.align,
[INFO] [stdout]     |                               -
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               data moved here
[INFO] [stdout]     |                               move occurs because `v` has type `ast::Var`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 442 |         Ok(match &self.kind {
[INFO] [stdout]     |                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.pos` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:452:23
[INFO] [stdout]     |
[INFO] [stdout] 452 |         ParseErr::new(self.pos, self.pos, msg)
[INFO] [stdout]     |                       ^^^^^^^^ move occurs because `self.pos` has type `TextPosition`, 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] 452 |         ParseErr::new(self.pos.clone(), self.pos, msg)
[INFO] [stdout]     |                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.pos` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:452:33
[INFO] [stdout]     |
[INFO] [stdout] 452 |         ParseErr::new(self.pos, self.pos, msg)
[INFO] [stdout]     |                                 ^^^^^^^^ move occurs because `self.pos` has type `TextPosition`, 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] 452 |         ParseErr::new(self.pos, self.pos.clone(), msg)
[INFO] [stdout]     |                                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `sc`
[INFO] [stdout]   --> src/ast.rs:81:24
[INFO] [stdout]    |
[INFO] [stdout] 78 |         let sc = SymbolScope::new();
[INFO] [stdout]    |             -- move occurs because `sc` has type `SymbolScope<'_>`, which does not implement the `Copy` trait
[INFO] [stdout] 79 |         Self {
[INFO] [stdout] 80 |             global: sc,
[INFO] [stdout]    |                     -- value moved here
[INFO] [stdout] 81 |             active_sc: &sc,
[INFO] [stdout]    |                        ^^^ value borrowed here after move
[INFO] [stdout]    |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]    |
[INFO] [stdout] 80 |             global: sc.clone(),
[INFO] [stdout]    |                       ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `self.active_sc.subscopes` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/ast.rs:89:9
[INFO] [stdout]    |
[INFO] [stdout] 89 |         self.active_sc.subscopes.push(sc);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub active_sc: &'a mut SymbolScope<'a>,
[INFO] [stdout]    |                        +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `self.active_sc.subscopes` as mutable, as it is behind a `&` reference
[INFO] [stdout]   --> src/ast.rs:99:9
[INFO] [stdout]    |
[INFO] [stdout] 99 |         self.active_sc.subscopes.push(sc);
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub active_sc: &'a mut SymbolScope<'a>,
[INFO] [stdout]    |                        +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0515]: cannot return value referencing local variable `sc`
[INFO] [stdout]    --> src/ast.rs:102:9
[INFO] [stdout]     |
[INFO] [stdout] 102 |         ActiveScope::new(&mut self, &mut sc)
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^-------^
[INFO] [stdout]     |         |                           |
[INFO] [stdout]     |         |                           `sc` is borrowed here
[INFO] [stdout]     |         returns a value referencing data owned by the current function
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `self` as mutable, as it is not declared as mutable
[INFO] [stdout]    --> src/ast.rs:102:26
[INFO] [stdout]     |
[INFO] [stdout] 102 |         ActiveScope::new(&mut self, &mut sc)
[INFO] [stdout]     |                          ^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] note: the binding is already a mutable borrow
[INFO] [stdout]    --> src/ast.rs:93:24
[INFO] [stdout]     |
[INFO] [stdout]  93 |     pub fn enter_scope(&'a mut self) -> ActiveScope {
[INFO] [stdout]     |                        ^^^^^^^^^^^^
[INFO] [stdout] help: try removing `&mut` here
[INFO] [stdout]     |
[INFO] [stdout] 102 -         ActiveScope::new(&mut self, &mut sc)
[INFO] [stdout] 102 +         ActiveScope::new(self, &mut sc)
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: borrow of moved value: `sc`
[INFO] [stdout]    --> src/ast.rs:102:37
[INFO] [stdout]     |
[INFO] [stdout]  95 |         let mut sc = SymbolScope::new();
[INFO] [stdout]     |             ------ move occurs because `sc` has type `SymbolScope<'_>`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout]  99 |         self.active_sc.subscopes.push(sc);
[INFO] [stdout]     |                                       -- value moved here
[INFO] [stdout] ...
[INFO] [stdout] 102 |         ActiveScope::new(&mut self, &mut sc)
[INFO] [stdout]     |                                     ^^^^^^^ value borrowed here after move
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout]  99 |         self.active_sc.subscopes.push(sc.clone());
[INFO] [stdout]     |                                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/ast.rs:115:35
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn push_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                   ----^^^
[INFO] [stdout]     |                                   |
[INFO] [stdout]     |                                   help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `self.active_sc.symbols` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/ast.rs:116:22
[INFO] [stdout]     |
[INFO] [stdout] 116 |         let result = self.active_sc.symbols.insert(&sym.name, sym); 
[INFO] [stdout]     |                      ^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout]  33 |     pub active_sc: &'a mut SymbolScope<'a>,
[INFO] [stdout]     |                        +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0597]: `sym.name` does not live long enough
[INFO] [stdout]    --> src/ast.rs:116:52
[INFO] [stdout]     |
[INFO] [stdout]  76 | impl<'a> SymbolTable<'a> {
[INFO] [stdout]     |      -- lifetime `'a` defined here
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn push_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                   ------- binding `sym` declared here
[INFO] [stdout] 116 |         let result = self.active_sc.symbols.insert(&sym.name, sym); 
[INFO] [stdout]     |                      ------------------------------^^^^^^^^^------
[INFO] [stdout]     |                      |                             |
[INFO] [stdout]     |                      |                             borrowed value does not live long enough
[INFO] [stdout]     |                      argument requires that `sym.name` is borrowed for `'a`
[INFO] [stdout] ...
[INFO] [stdout] 122 |     }
[INFO] [stdout]     |     - `sym.name` dropped here while still borrowed
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0505]: cannot move out of `sym` because it is borrowed
[INFO] [stdout]    --> src/ast.rs:116:63
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn push_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                   ------- binding `sym` declared here
[INFO] [stdout] 116 |         let result = self.active_sc.symbols.insert(&sym.name, sym); 
[INFO] [stdout]     |                                             ------ ---------  ^^^ move out of `sym` occurs here
[INFO] [stdout]     |                                             |      |
[INFO] [stdout]     |                                             |      borrow of `sym.name` occurs here
[INFO] [stdout]     |                                             borrow later used by call
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 116 |         let result = self.active_sc.symbols.insert(&sym.name.clone(), sym); 
[INFO] [stdout]     |                                                             ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `sym.position`
[INFO] [stdout]    --> src/ast.rs:118:31
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub fn push_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                   ------- move occurs because `sym` has type `ast::Symbol`, which does not implement the `Copy` trait
[INFO] [stdout] 116 |         let result = self.active_sc.symbols.insert(&sym.name, sym); 
[INFO] [stdout]     |                                                               --- value moved here
[INFO] [stdout] 117 |         if result.is_some() {
[INFO] [stdout] 118 |             Err(ParseErr::new(sym.position, sym.position, ParseErrMsg::Something))
[INFO] [stdout]     |                               ^^^^^^^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `sym.position`
[INFO] [stdout]    --> src/ast.rs:118:45
[INFO] [stdout]     |
[INFO] [stdout] 118 |             Err(ParseErr::new(sym.position, sym.position, ParseErrMsg::Something))
[INFO] [stdout]     |                               ------------  ^^^^^^^^^^^^ value used here after move
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               value moved here
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because `sym.position` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/ast.rs:125:42
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub fn push_global_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                          ----^^^
[INFO] [stdout]     |                                          |
[INFO] [stdout]     |                                          help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `scope.symbols` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/ast.rs:130:22
[INFO] [stdout]     |
[INFO] [stdout] 130 |         let result = scope.symbols.insert(&sym.name, sym);
[INFO] [stdout]     |                      ^^^^^^^^^^^^^ `scope` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider specifying this binding's type
[INFO] [stdout]     |
[INFO] [stdout] 126 |         let mut scope: &mut SymbolScope<'_> = self.active_sc;
[INFO] [stdout]     |                      ++++++++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0505]: cannot move out of `sym` because it is borrowed
[INFO] [stdout]    --> src/ast.rs:130:54
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub fn push_global_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                          ------- binding `sym` declared here
[INFO] [stdout] ...
[INFO] [stdout] 130 |         let result = scope.symbols.insert(&sym.name, sym);
[INFO] [stdout]     |                                    ------ ---------  ^^^ move out of `sym` occurs here
[INFO] [stdout]     |                                    |      |
[INFO] [stdout]     |                                    |      borrow of `sym.name` occurs here
[INFO] [stdout]     |                                    borrow later used by call
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 130 |         let result = scope.symbols.insert(&sym.name.clone(), sym);
[INFO] [stdout]     |                                                    ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `sym.position`
[INFO] [stdout]    --> src/ast.rs:132:31
[INFO] [stdout]     |
[INFO] [stdout] 125 |     pub fn push_global_symbol(&mut self, mut sym: Symbol) -> ParseRes<()> {
[INFO] [stdout]     |                                          ------- move occurs because `sym` has type `ast::Symbol`, which does not implement the `Copy` trait
[INFO] [stdout] ...
[INFO] [stdout] 130 |         let result = scope.symbols.insert(&sym.name, sym);
[INFO] [stdout]     |                                                      --- value moved here
[INFO] [stdout] 131 |         if result.is_some() {
[INFO] [stdout] 132 |             Err(ParseErr::new(sym.position, sym.position, ParseErrMsg::Something))
[INFO] [stdout]     |                               ^^^^^^^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `sym.position`
[INFO] [stdout]    --> src/ast.rs:132:45
[INFO] [stdout]     |
[INFO] [stdout] 132 |             Err(ParseErr::new(sym.position, sym.position, ParseErrMsg::Something))
[INFO] [stdout]     |                               ------------  ^^^^^^^^^^^^ value used here after move
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               value moved here
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because `sym.position` has type `TextPosition`, which does not implement the `Copy` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `self.active_sc.symbols` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/ast.rs:158:30
[INFO] [stdout]     |
[INFO] [stdout] 158 |         let mut opt_symbol = self.active_sc.symbols.get_mut(name);
[INFO] [stdout]     |                              ^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
[INFO] [stdout]     |
[INFO] [stdout] help: consider changing this to be mutable
[INFO] [stdout]     |
[INFO] [stdout]  33 |     pub active_sc: &'a mut SymbolScope<'a>,
[INFO] [stdout]     |                        +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0596]: cannot borrow `scope.symbols` as mutable, as it is behind a `&` reference
[INFO] [stdout]    --> src/ast.rs:165:26
[INFO] [stdout]     |
[INFO] [stdout] 164 |         while let Some(scope) = scope.up {
[INFO] [stdout]     |                        ----- consider changing this binding's type to be: `&mut SymbolScope<'_>`
[INFO] [stdout] 165 |             opt_symbol = scope.symbols.get_mut(name);
[INFO] [stdout]     |                          ^^^^^^^^^^^^^ `scope` is a `&` reference, so the data it refers to cannot be borrowed as mutable
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `self`
[INFO] [stdout]    --> src/types.rs:141:88
[INFO] [stdout]     |
[INFO] [stdout] 140 |     pub fn make_array(self, len: i64) -> Self {
[INFO] [stdout]     |                       ---- move occurs because `self` has type `TypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout] 141 |         TypeInfo::make_new_info(TypeKind::Array(Box::new(self), len), self.size * len, self.align)
[INFO] [stdout]     |                                                          ---- value moved here         ^^^^^^^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 141 |         TypeInfo::make_new_info(TypeKind::Array(Box::new(self.clone()), len), self.size * len, self.align)
[INFO] [stdout]     |                                                              ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `len`
[INFO] [stdout]    --> src/types.rs:144:33
[INFO] [stdout]     |
[INFO] [stdout] 144 |     pub fn make_vla_array(self, len: ASTNode) -> Self {
[INFO] [stdout]     |                                 ^^^ help: if this is intentional, prefix it with an underscore: `_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `size`
[INFO] [stdout]    --> src/types.rs:148:32
[INFO] [stdout]     |
[INFO] [stdout] 148 |     pub fn make_bitfield(self, size: i64) -> ParseRes<Self> {
[INFO] [stdout]     |                                ^^^^ help: if this is intentional, prefix it with an underscore: `_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `tok.pos` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:285:18
[INFO] [stdout]     |
[INFO] [stdout] 285 |             pos: tok.pos,
[INFO] [stdout]     |                  ^^^^^^^ move occurs because `tok.pos` has type `TextPosition`, 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] 285 |             pos: tok.pos.clone(),
[INFO] [stdout]     |                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `lhs.pos`
[INFO] [stdout]    --> src/ast.rs:292:33
[INFO] [stdout]     |
[INFO] [stdout] 289 |     pub fn make_assignment(lhs: ASTNode, rhs: ASTNode) -> Self {
[INFO] [stdout]     |                            --- move occurs because `lhs` has type `ast::ASTNode`, which does not implement the `Copy` trait
[INFO] [stdout] 290 |         let binexpr = BinaryExpr {lhs: Box::new(lhs), op: BinaryOps::Assign, rhs: Box::new(rhs)};
[INFO] [stdout]     |                                                 --- value moved here
[INFO] [stdout] 291 |         let kind = ASTKind::BinaryOp(binexpr);
[INFO] [stdout] 292 |         Self { kind: kind, pos: lhs.pos }
[INFO] [stdout]     |                                 ^^^^^^^ value used here after move
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `a`
[INFO] [stdout]    --> src/types.rs:237:23
[INFO] [stdout]     |
[INFO] [stdout] 237 | pub fn is_compatible( a: &TypeInfo, b: &TypeInfo) -> bool {
[INFO] [stdout]     |                       ^ help: if this is intentional, prefix it with an underscore: `_a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `b`
[INFO] [stdout]    --> src/types.rs:237:37
[INFO] [stdout]     |
[INFO] [stdout] 237 | pub fn is_compatible( a: &TypeInfo, b: &TypeInfo) -> bool {
[INFO] [stdout]     |                                     ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.kind` as enum variant `Cast` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:314:28
[INFO] [stdout]     |
[INFO] [stdout] 314 |         let result = match self.kind {
[INFO] [stdout]     |                            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 317 |             ASTKind::Cast(node, _) => node.eval_int()?,
[INFO] [stdout]     |                           ---- data moved here
[INFO] [stdout] 318 |             ASTKind::UnaryOp(op) => self.eval_unary_op(&op)?,
[INFO] [stdout]     |                              -- ...and here
[INFO] [stdout] 319 |             ASTKind::BinaryOp(op) => self.eval_binary_op_int(&op)?,
[INFO] [stdout]     |                               -- ...and here
[INFO] [stdout] 320 |             ASTKind::TertiaryOp(op) => self.eval_tertiary_op_int(&op)?,
[INFO] [stdout]     |                                 -- ...and here
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because these variables have types that don't implement the `Copy` trait
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 314 |         let result = match &self.kind {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rhs`
[INFO] [stdout]    --> src/types.rs:272:24
[INFO] [stdout]     |
[INFO] [stdout] 272 | pub fn get_common_type(rhs: &TypeInfo, lhs: &TypeInfo) -> TypeInfo {
[INFO] [stdout]     |                        ^^^ help: if this is intentional, prefix it with an underscore: `_rhs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lhs`
[INFO] [stdout]    --> src/types.rs:272:40
[INFO] [stdout]     |
[INFO] [stdout] 272 | pub fn get_common_type(rhs: &TypeInfo, lhs: &TypeInfo) -> TypeInfo {
[INFO] [stdout]     |                                        ^^^ help: if this is intentional, prefix it with an underscore: `_lhs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0308, E0382, E0499, E0500, E0502, E0505, E0507, E0515, E0594...
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0308`.
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `op`
[INFO] [stdout]    --> src/ast.rs:384:30
[INFO] [stdout]     |
[INFO] [stdout] 384 |             ASTKind::UnaryOp(op) => return Err(self.gen_err(ParseErrMsg::InvalidFloatOperation)),
[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 `self.kind` as enum variant `Cast` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:380:28
[INFO] [stdout]     |
[INFO] [stdout] 380 |         let result = match self.kind {
[INFO] [stdout]     |                            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 383 |             ASTKind::Cast(node, _) => node.eval_float()?,
[INFO] [stdout]     |                           ---- data moved here
[INFO] [stdout] 384 |             ASTKind::UnaryOp(op) => return Err(self.gen_err(ParseErrMsg::InvalidFloatOperation)),
[INFO] [stdout]     |                              -- ...and here
[INFO] [stdout] 385 |             ASTKind::BinaryOp(op) => self.eval_binary_op_float(&op)?,
[INFO] [stdout]     |                               -- ...and here
[INFO] [stdout]     |
[INFO] [stdout]     = note: move occurs because these variables have types that don't implement the `Copy` trait
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 380 |         let result = match &self.kind {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.kind` as enum variant `Variable` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:432:18
[INFO] [stdout]     |
[INFO] [stdout] 432 |         Ok(match self.kind {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 436 |             ASTKind::Variable(v) => v.ty.size,
[INFO] [stdout]     |                               -
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               data moved here
[INFO] [stdout]     |                               move occurs because `v` has type `ast::Var`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 432 |         Ok(match &self.kind {
[INFO] [stdout]     |                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.kind` as enum variant `Variable` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:442:18
[INFO] [stdout]     |
[INFO] [stdout] 442 |         Ok(match self.kind {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 446 |             ASTKind::Variable(v) => v.ty.align,
[INFO] [stdout]     |                               -
[INFO] [stdout]     |                               |
[INFO] [stdout]     |                               data moved here
[INFO] [stdout]     |                               move occurs because `v` has type `ast::Var`, which does not implement the `Copy` trait
[INFO] [stdout]     |
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 442 |         Ok(match &self.kind {
[INFO] [stdout]     |                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.pos` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:452:23
[INFO] [stdout]     |
[INFO] [stdout] 452 |         ParseErr::new(self.pos, self.pos, msg)
[INFO] [stdout]     |                       ^^^^^^^^ move occurs because `self.pos` has type `TextPosition`, 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] 452 |         ParseErr::new(self.pos.clone(), self.pos, msg)
[INFO] [stdout]     |                               ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0507]: cannot move out of `self.pos` which is behind a shared reference
[INFO] [stdout]    --> src/ast.rs:452:33
[INFO] [stdout]     |
[INFO] [stdout] 452 |         ParseErr::new(self.pos, self.pos, msg)
[INFO] [stdout]     |                                 ^^^^^^^^ move occurs because `self.pos` has type `TextPosition`, 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] 452 |         ParseErr::new(self.pos, self.pos.clone(), msg)
[INFO] [stdout]     |                                         ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0382]: use of moved value: `self`
[INFO] [stdout]    --> src/types.rs:141:88
[INFO] [stdout]     |
[INFO] [stdout] 140 |     pub fn make_array(self, len: i64) -> Self {
[INFO] [stdout]     |                       ---- move occurs because `self` has type `TypeInfo`, which does not implement the `Copy` trait
[INFO] [stdout] 141 |         TypeInfo::make_new_info(TypeKind::Array(Box::new(self), len), self.size * len, self.align)
[INFO] [stdout]     |                                                          ---- value moved here         ^^^^^^^^^^ value used here after move
[INFO] [stdout]     |
[INFO] [stdout] help: consider cloning the value if the performance cost is acceptable
[INFO] [stdout]     |
[INFO] [stdout] 141 |         TypeInfo::make_new_info(TypeKind::Array(Box::new(self.clone()), len), self.size * len, self.align)
[INFO] [stdout]     |                                                              ++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `rucksacc` (lib) due to 140 previous errors; 56 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] warning: unused variable: `len`
[INFO] [stdout]    --> src/types.rs:144:33
[INFO] [stdout]     |
[INFO] [stdout] 144 |     pub fn make_vla_array(self, len: ASTNode) -> Self {
[INFO] [stdout]     |                                 ^^^ help: if this is intentional, prefix it with an underscore: `_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `size`
[INFO] [stdout]    --> src/types.rs:148:32
[INFO] [stdout]     |
[INFO] [stdout] 148 |     pub fn make_bitfield(self, size: i64) -> ParseRes<Self> {
[INFO] [stdout]     |                                ^^^^ help: if this is intentional, prefix it with an underscore: `_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `a`
[INFO] [stdout]    --> src/types.rs:237:23
[INFO] [stdout]     |
[INFO] [stdout] 237 | pub fn is_compatible( a: &TypeInfo, b: &TypeInfo) -> bool {
[INFO] [stdout]     |                       ^ help: if this is intentional, prefix it with an underscore: `_a`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `b`
[INFO] [stdout]    --> src/types.rs:237:37
[INFO] [stdout]     |
[INFO] [stdout] 237 | pub fn is_compatible( a: &TypeInfo, b: &TypeInfo) -> bool {
[INFO] [stdout]     |                                     ^ help: if this is intentional, prefix it with an underscore: `_b`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rhs`
[INFO] [stdout]    --> src/types.rs:272:24
[INFO] [stdout]     |
[INFO] [stdout] 272 | pub fn get_common_type(rhs: &TypeInfo, lhs: &TypeInfo) -> TypeInfo {
[INFO] [stdout]     |                        ^^^ help: if this is intentional, prefix it with an underscore: `_rhs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `lhs`
[INFO] [stdout]    --> src/types.rs:272:40
[INFO] [stdout]     |
[INFO] [stdout] 272 | pub fn get_common_type(rhs: &TypeInfo, lhs: &TypeInfo) -> TypeInfo {
[INFO] [stdout]     |                                        ^^^ help: if this is intentional, prefix it with an underscore: `_lhs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0061, E0308, E0382, E0499, E0500, E0502, E0505, E0507, E0515...
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0061`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `rucksacc` (lib test) due to 142 previous errors; 56 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "d39095b9f47c284c6a42f6ab8c1430edbe7c736c8b7227f0bb58e5feb6d4b5eb", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d39095b9f47c284c6a42f6ab8c1430edbe7c736c8b7227f0bb58e5feb6d4b5eb", kill_on_drop: false }`
[INFO] [stdout] d39095b9f47c284c6a42f6ab8c1430edbe7c736c8b7227f0bb58e5feb6d4b5eb
