[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` [INFO] [stdout] 1849 | | Keyword::Union => self.parse_struct_union_specifier(&mut iter), [INFO] [stdout] | | -------------------------------------------- this is found to be of type `Result` [INFO] [stdout] 1850 | | Keyword::Enum => self.parse_enum_specifier(&mut iter), [INFO] [stdout] | | ------------------------------------ this is found to be of type `Result` [INFO] [stdout] 1851 | | Keyword::Typeof => (), [INFO] [stdout] | | ^^ expected `Result`, found `()` [INFO] [stdout] 1852 | | _ => (), [INFO] [stdout] 1853 | | }, [INFO] [stdout] | |_____________________- `match` arms have incompatible types [INFO] [stdout] | [INFO] [stdout] = note: expected enum `Result` [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` [INFO] [stdout] 1849 | | Keyword::Union => self.parse_struct_union_specifier(&mut iter), [INFO] [stdout] | | -------------------------------------------- this is found to be of type `Result` [INFO] [stdout] 1850 | | Keyword::Enum => self.parse_enum_specifier(&mut iter), [INFO] [stdout] | | ------------------------------------ this is found to be of type `Result` [INFO] [stdout] 1851 | | Keyword::Typeof => (), [INFO] [stdout] | | ^^ expected `Result`, found `()` [INFO] [stdout] 1852 | | _ => (), [INFO] [stdout] 1853 | | }, [INFO] [stdout] | |_____________________- `match` arms have incompatible types [INFO] [stdout] | [INFO] [stdout] = note: expected enum `Result` [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) -> ParseRes { [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) -> ParseRes { [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`, 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` 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, 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`, 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` 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, 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, qty: QualifiedTypeInfo) -> ParseRes { [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, mut qty: QualifiedTypeInfo) -> ParseRes { [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, qty: QualifiedTypeInfo) -> ParseRes { [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, mut qty: QualifiedTypeInfo) -> ParseRes { [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, ty: &mut TypeInfo) -> ParseRes { [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, ty: &mut TypeInfo) -> ParseRes { [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, ty: &mut TypeInfo) -> ParseRes { [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, ty: &mut TypeInfo) -> ParseRes { [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, ty: &mut TypeInfo) -> ParseRes { [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, ty: &mut TypeInfo) -> ParseRes { [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`, 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 { [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`, 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 { [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, mut qty: QualifiedTypeInfo) -> ParseRes { [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 { [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 { [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 { [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, var: &Var, member: &Token) -> ParseRes { [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, var: &Var, member: &Token) -> ParseRes { [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, var: &Var, member: &Token) -> ParseRes { [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, mut qty: QualifiedTypeInfo) -> ParseRes { [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, mut qty: QualifiedTypeInfo) -> ParseRes { [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`, 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 { [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 { [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 { [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, var: &Var, member: &Token) -> ParseRes { [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, var: &Var, member: &Token) -> ParseRes { [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, var: &Var, member: &Token) -> ParseRes { [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, mut qty: QualifiedTypeInfo) -> ParseRes { [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`, 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`'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`, 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`, 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`, 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){ [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`, 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`'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`, 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`, 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 { [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) -> ParseRes> { [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){ [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 { [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) -> ParseRes> { [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 { [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 { [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