[INFO] cloning repository https://github.com/Byt3Mage/talkscript
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Byt3Mage/talkscript" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FByt3Mage%2Ftalkscript", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FByt3Mage%2Ftalkscript'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 921a327cdadd32a4ecacd821ec0e6f8273839059
[INFO] checking Byt3Mage/talkscript against try#87f2ecc56b5f6032b075c8934ebc77f28d57183c for pr-148190
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FByt3Mage%2Ftalkscript" "/workspace/builds/worker-2-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/Byt3Mage/talkscript
[INFO] finished tweaking git repo https://github.com/Byt3Mage/talkscript
[INFO] tweaked toml for git repo https://github.com/Byt3Mage/talkscript written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Byt3Mage/talkscript on toolchain 87f2ecc56b5f6032b075c8934ebc77f28d57183c
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+87f2ecc56b5f6032b075c8934ebc77f28d57183c" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Byt3Mage/talkscript 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" "+87f2ecc56b5f6032b075c8934ebc77f28d57183c" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:94a0c148923f5b2b52a63ef0eeb1882ad339ab61bce784c8077cbe41c61feb6c" "/opt/rustwide/cargo-home/bin/cargo" "+87f2ecc56b5f6032b075c8934ebc77f28d57183c" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 1bf695824decdf4aeb9ae486b376bfd7eca2aafc72b3bfb7b54f2f6f725f0db6
[INFO] running `Command { std: "docker" "start" "-a" "1bf695824decdf4aeb9ae486b376bfd7eca2aafc72b3bfb7b54f2f6f725f0db6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "1bf695824decdf4aeb9ae486b376bfd7eca2aafc72b3bfb7b54f2f6f725f0db6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "1bf695824decdf4aeb9ae486b376bfd7eca2aafc72b3bfb7b54f2f6f725f0db6", kill_on_drop: false }`
[INFO] [stdout] 1bf695824decdf4aeb9ae486b376bfd7eca2aafc72b3bfb7b54f2f6f725f0db6
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:94a0c148923f5b2b52a63ef0eeb1882ad339ab61bce784c8077cbe41c61feb6c" "/opt/rustwide/cargo-home/bin/cargo" "+87f2ecc56b5f6032b075c8934ebc77f28d57183c" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] f728b84a867f823eb3fe8f1329d38b9d5bb745d105d1f7dbe46611467cf2dd7b
[INFO] running `Command { std: "docker" "start" "-a" "f728b84a867f823eb3fe8f1329d38b9d5bb745d105d1f7dbe46611467cf2dd7b", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde v1.0.219
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling serde_json v1.0.141
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]     Checking plotters-backend v0.3.7
[INFO] [stderr]    Compiling libc v0.2.177
[INFO] [stderr]    Compiling slotmap v1.1.1
[INFO] [stderr]     Checking half v2.6.0
[INFO] [stderr]     Checking ciborium-io v0.2.2
[INFO] [stderr]     Checking regex-syntax v0.8.5
[INFO] [stderr]     Checking foldhash v0.1.5
[INFO] [stderr]     Checking clap_builder v4.5.42
[INFO] [stderr]    Compiling thiserror-impl v2.0.17
[INFO] [stderr]     Checking cast v0.3.0
[INFO] [stderr]    Compiling simple-ternary v0.3.0
[INFO] [stderr]    Compiling const-assert v0.1.0 (https://github.com/aquarius2019/const-assert.git#e46566ba)
[INFO] [stderr]     Checking itertools v0.13.0
[INFO] [stderr]     Checking rayon v1.10.0
[INFO] [stderr]     Checking hashbrown v0.15.5
[INFO] [stderr]     Checking ciborium-ll v0.2.2
[INFO] [stderr]     Checking anes v0.1.6
[INFO] [stderr]     Checking oorandom v11.1.5
[INFO] [stderr]     Checking plotters-svg v0.3.7
[INFO] [stderr]     Checking plotters v0.3.7
[INFO] [stderr]     Checking thiserror v2.0.17
[INFO] [stderr]     Checking regex-automata v0.4.9
[INFO] [stderr]     Checking ahash v0.8.12
[INFO] [stderr]     Checking clap v4.5.42
[INFO] [stderr]     Checking criterion-plot v0.6.0
[INFO] [stderr]     Checking string-interner v0.19.0
[INFO] [stderr]     Checking ciborium v0.2.2
[INFO] [stderr]     Checking regex v1.11.1
[INFO] [stderr]     Checking talkscript v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error: unexpected token: `)`
[INFO] [stdout]    --> src/compiler/type_checker.rs:359:47
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 let ty = self.infer_expr(&ast.)?;
[INFO] [stdout]     |                                               ^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `,`
[INFO] [stdout]    --> src/compiler/type_checker.rs:610:78
[INFO] [stdout]     |
[INFO] [stdout] 610 | ...                   kind: TypeErrorKind::TypeMismatch { exp: , got: () },
[INFO] [stdout]     |                             ---------------------------        ^ expected expression
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             while parsing this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0252]: the name `Type` is defined multiple times
[INFO] [stdout]  --> src/compiler/resolver.rs:8:29
[INFO] [stdout]   |
[INFO] [stdout] 8 |             StmtKind, Type, Type, TypeId,
[INFO] [stdout]   |                       ----  ^^^^--
[INFO] [stdout]   |                       |     |
[INFO] [stdout]   |                       |     `Type` reimported here
[INFO] [stdout]   |                       |     help: remove unnecessary import
[INFO] [stdout]   |                       previous import of the type `Type` here
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Type` must be defined only once in the type namespace of this module
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0252]: the name `Type` is defined multiple times
[INFO] [stdout]  --> src/compiler/type_checker.rs:7:112
[INFO] [stdout]   |
[INFO] [stdout] 7 |             AssignOp, AstArena, BinaryOp, Expr, ExprKind, Ident, Item, ItemKind, Stmt, StmtKind, Type, TypeId, Type, UnaryOp
[INFO] [stdout]   |                                                                                                  ----          ^^^^--
[INFO] [stdout]   |                                                                                                  |             |
[INFO] [stdout]   |                                                                                                  |             `Type` reimported here
[INFO] [stdout]   |                                                                                                  |             help: remove unnecessary import
[INFO] [stdout]   |                                                                                                  previous import of the type `Type` here
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Type` must be defined only once in the type namespace of this module
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0416]: identifier `ty` is bound more than once in the same pattern
[INFO] [stdout]    --> src/compiler/type_checker.rs:695:53
[INFO] [stdout]     |
[INFO] [stdout] 695 |             (Type::Array { ty, len }, Type::Array { ty, len }) => todo!("handle array types"),
[INFO] [stdout]     |                                                     ^^ used in a pattern more than once
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0416]: identifier `len` is bound more than once in the same pattern
[INFO] [stdout]    --> src/compiler/type_checker.rs:695:57
[INFO] [stdout]     |
[INFO] [stdout] 695 |             (Type::Array { ty, len }, Type::Array { ty, len }) => todo!("handle array types"),
[INFO] [stdout]     |                                                         ^^^ used in a pattern more than once
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find type `Bbboo` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:243:55
[INFO] [stdout]     |
[INFO] [stdout] 243 |     fn check_package(&mut self, items: &[Item], span: Bbboo) -> Result<(), TypeError> {
[INFO] [stdout]     |                                                       ^^^^^ not found in this scope
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:357:60
[INFO] [stdout]     |
[INFO] [stdout] 357 |             ExprKind::Group(expr) => self.infer_expr(expr, scope)?,
[INFO] [stdout]     |                                                            ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:370:51
[INFO] [stdout]     |
[INFO] [stdout] 370 |                 let lhs_ty = self.infer_expr(lhs, scope)?;
[INFO] [stdout]     |                                                   ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:371:51
[INFO] [stdout]     |
[INFO] [stdout] 371 |                 let rhs_ty = self.infer_expr(rhs, scope)?;
[INFO] [stdout]     |                                                   ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:375:51
[INFO] [stdout]     |
[INFO] [stdout] 375 |                 let tgt_ty = self.infer_expr(tgt, scope)?;
[INFO] [stdout]     |                                                   ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:376:51
[INFO] [stdout]     |
[INFO] [stdout] 376 |                 let val_ty = self.infer_expr(val, scope)?;
[INFO] [stdout]     |                                                   ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:409:57
[INFO] [stdout]     |
[INFO] [stdout] 409 |                 let callee_ty = self.infer_expr(callee, scope)?;
[INFO] [stdout]     |                                                         ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:422:63
[INFO] [stdout]     |
[INFO] [stdout] 422 | ...                   let arg_ty = self.infer_expr(arg, scope)?;
[INFO] [stdout]     |                                                         ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:436:57
[INFO] [stdout]     |
[INFO] [stdout] 436 |                 let object_ty = self.infer_expr(object, scope)?;
[INFO] [stdout]     |                                                         ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:457:57
[INFO] [stdout]     |
[INFO] [stdout] 457 |                 let object_ty = self.infer_expr(object, scope)?;
[INFO] [stdout]     |                                                         ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:458:55
[INFO] [stdout]     |
[INFO] [stdout] 458 |                 let index_ty = self.infer_expr(index, scope)?;
[INFO] [stdout]     |                                                       ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:480:53
[INFO] [stdout]     |
[INFO] [stdout] 480 |                 let cond_ty = self.infer_expr(cond, scope)?;
[INFO] [stdout]     |                                                     ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:486:60
[INFO] [stdout]     |
[INFO] [stdout] 486 |                 let then_ty = self.infer_expr(then_branch, scope)?;
[INFO] [stdout]     |                                                            ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find value `scope` in this scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:489:62
[INFO] [stdout]     |
[INFO] [stdout] 489 |                     let else_ty = self.infer_expr(else_expr, scope)?;
[INFO] [stdout]     |                                                              ^^^^^ not found in this scope
[INFO] [stdout]     |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]     |
[INFO] [stdout]   1 + use std::thread::scope;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Type`
[INFO] [stdout]  --> src/compiler/resolver.rs:8:29
[INFO] [stdout]   |
[INFO] [stdout] 8 |             StmtKind, Type, Type, TypeId,
[INFO] [stdout]   |                             ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Type`
[INFO] [stdout]  --> src/compiler/type_checker.rs:7:112
[INFO] [stdout]   |
[INFO] [stdout] 7 |             AssignOp, AstArena, BinaryOp, Expr, ExprKind, Ident, Item, ItemKind, Stmt, StmtKind, Type, TypeId, Type, UnaryOp
[INFO] [stdout]   |                                                                                                                ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/compiler/resolver.rs:400:26
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     self.resolve_stmt(&self.ast.stmts[*stmt]);
[INFO] [stdout]     |                          ^^^^^^^^^^^^------------------------ argument #2 of type `&AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:511:8
[INFO] [stdout]     |
[INFO] [stdout] 511 |     fn resolve_stmt(&mut self, stmt: &Stmt, ast: &AstArena) {
[INFO] [stdout]     |        ^^^^^^^^^^^^                         --------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 400 |                     self.resolve_stmt(&self.ast.stmts[*stmt], /* &AstArena */);
[INFO] [stdout]     |                                                             +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:460:35
[INFO] [stdout]     |
[INFO] [stdout] 460 |                 self.resolve_expr(callee);
[INFO] [stdout]     |                      ------------ ^^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:462:39
[INFO] [stdout]     |
[INFO] [stdout] 462 |                     self.resolve_expr(arg);
[INFO] [stdout]     |                          ------------ ^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:466:35
[INFO] [stdout]     |
[INFO] [stdout] 466 |                 self.resolve_expr(object);
[INFO] [stdout]     |                      ------------ ^^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:469:35
[INFO] [stdout]     |
[INFO] [stdout] 469 |                 self.resolve_expr(object);
[INFO] [stdout]     |                      ------------ ^^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:470:35
[INFO] [stdout]     |
[INFO] [stdout] 470 |                 self.resolve_expr(index);
[INFO] [stdout]     |                      ------------ ^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:473:35
[INFO] [stdout]     |
[INFO] [stdout] 473 |                 self.resolve_expr(expr);
[INFO] [stdout]     |                      ------------ ^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:476:35
[INFO] [stdout]     |
[INFO] [stdout] 476 |                 self.resolve_expr(expr);
[INFO] [stdout]     |                      ------------ ^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:479:35
[INFO] [stdout]     |
[INFO] [stdout] 479 |                 self.resolve_expr(expr);
[INFO] [stdout]     |                      ------------ ^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:483:39
[INFO] [stdout]     |
[INFO] [stdout] 483 |                     self.resolve_expr(elem);
[INFO] [stdout]     |                          ------------ ^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:487:35
[INFO] [stdout]     |
[INFO] [stdout] 487 |                 self.resolve_expr(expr);
[INFO] [stdout]     |                      ------------ ^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:494:43
[INFO] [stdout]     |
[INFO] [stdout] 494 |                         self.resolve_expr(guard);
[INFO] [stdout]     |                              ------------ ^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                              |
[INFO] [stdout]     |                              arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:497:39
[INFO] [stdout]     |
[INFO] [stdout] 497 |                     self.resolve_expr(&arm.body);
[INFO] [stdout]     |                          ------------ ^^^^^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:387:8
[INFO] [stdout]     |
[INFO] [stdout] 387 |     fn resolve_expr(&mut self, expr: &Expr) {
[INFO] [stdout]     |        ^^^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Unknown` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/resolver.rs:527:37
[INFO] [stdout]     |
[INFO] [stdout] 527 |                         kind: Type::Unknown,
[INFO] [stdout]     |                                     ^^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Unknown` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `PatternKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/resolver.rs:554:16
[INFO] [stdout]     |
[INFO] [stdout] 554 |         match &*pattern.kind {
[INFO] [stdout]     |                ^^^^^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `SymbolU32` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/resolver.rs:558:27
[INFO] [stdout]     |
[INFO] [stdout] 558 |                     name: *name,
[INFO] [stdout]     |                           ^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Unknown` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/resolver.rs:561:50
[INFO] [stdout]     |
[INFO] [stdout] 561 | ...                   kind: Box::new(Type::Unknown),
[INFO] [stdout]     |                                            ^^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Unknown` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:560:29
[INFO] [stdout]     |
[INFO] [stdout] 560 |                           ty: Type {
[INFO] [stdout]     |  _____________________________^
[INFO] [stdout] 561 | |                             kind: Box::new(Type::Unknown),
[INFO] [stdout] 562 | |                             span: Span::default(),
[INFO] [stdout] 563 | |                         },
[INFO] [stdout]     | |_________________________^ expected `TypeId`, found `Type`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:572:40
[INFO] [stdout]     |
[INFO] [stdout] 572 |                 if self.symbols.lookup(base).is_none() {
[INFO] [stdout]     |                                 ------ ^^^^ expected `&SymbolU32`, found `SymbolU32`
[INFO] [stdout]     |                                 |
[INFO] [stdout]     |                                 arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:186:12
[INFO] [stdout]     |
[INFO] [stdout] 186 |     pub fn lookup(&self, name: &Ident) -> Option<&Symbol> {
[INFO] [stdout]     |            ^^^^^^        ------------
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 572 |                 if self.symbols.lookup(&base).is_none() {
[INFO] [stdout]     |                                        +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `SymbolU32` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/resolver.rs:574:63
[INFO] [stdout]     |
[INFO] [stdout] 574 |                         kind: ResolveErrorKind::UndefinedType(*base),
[INFO] [stdout]     |                                                               ^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:580:42
[INFO] [stdout]     |
[INFO] [stdout] 580 |                     self.resolve_pattern(field_pattern);
[INFO] [stdout]     |                          --------------- ^^^^^^^^^^^^^ expected `&Pattern`, found `Pattern`
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:553:8
[INFO] [stdout]     |
[INFO] [stdout] 553 |     fn resolve_pattern(&mut self, pattern: &Pattern) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^            -----------------
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 580 |                     self.resolve_pattern(&field_pattern);
[INFO] [stdout]     |                                          +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/resolver.rs:585:42
[INFO] [stdout]     |
[INFO] [stdout] 585 |                     self.resolve_pattern(pattern);
[INFO] [stdout]     |                          --------------- ^^^^^^^ expected `&Pattern`, found `Pattern`
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:553:8
[INFO] [stdout]     |
[INFO] [stdout] 553 |     fn resolve_pattern(&mut self, pattern: &Pattern) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^            -----------------
[INFO] [stdout] help: consider borrowing here
[INFO] [stdout]     |
[INFO] [stdout] 585 |                     self.resolve_pattern(&pattern);
[INFO] [stdout]     |                                          +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `ast::TypeId` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:117:61
[INFO] [stdout]     |
[INFO] [stdout] 117 |                 format!("Cannot apply operator {op} to type {operand_ty}")
[INFO] [stdout]     |                                                             ^^^^^^^^^^^^ `ast::TypeId` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `ast::TypeId`
[INFO] [stdout]    --> src/compiler/ast.rs:7:1
[INFO] [stdout]     |
[INFO] [stdout]   7 | / slotmap::new_key_type! {
[INFO] [stdout]   8 | |     pub struct ExprId;
[INFO] [stdout]   9 | |     pub struct StmtId;
[INFO] [stdout]  10 | |     pub struct ItemId;
[INFO] [stdout]  11 | |     pub struct TypeId;
[INFO] [stdout]  12 | |     pub struct PathId;
[INFO] [stdout]  13 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&ast::TypeId` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `slotmap::new_key_type` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `ast::TypeId` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:132:56
[INFO] [stdout]     |
[INFO] [stdout] 132 |                 format!("Argument {arg_index} has type {got}, expected {exp}")
[INFO] [stdout]     |                                                        ^^^^^ `ast::TypeId` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `ast::TypeId`
[INFO] [stdout]    --> src/compiler/ast.rs:7:1
[INFO] [stdout]     |
[INFO] [stdout]   7 | / slotmap::new_key_type! {
[INFO] [stdout]   8 | |     pub struct ExprId;
[INFO] [stdout]   9 | |     pub struct StmtId;
[INFO] [stdout]  10 | |     pub struct ItemId;
[INFO] [stdout]  11 | |     pub struct TypeId;
[INFO] [stdout]  12 | |     pub struct PathId;
[INFO] [stdout]  13 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&ast::TypeId` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `slotmap::new_key_type` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `ast::TypeId` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:135:61
[INFO] [stdout]     |
[INFO] [stdout] 135 |                 format!("Cannot call non-function type {}", ty)
[INFO] [stdout]     |                                                        --   ^^ `ast::TypeId` cannot be formatted with the default formatter
[INFO] [stdout]     |                                                        |
[INFO] [stdout]     |                                                        required by this formatting parameter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `ast::TypeId`
[INFO] [stdout]    --> src/compiler/ast.rs:7:1
[INFO] [stdout]     |
[INFO] [stdout]   7 | / slotmap::new_key_type! {
[INFO] [stdout]   8 | |     pub struct ExprId;
[INFO] [stdout]   9 | |     pub struct StmtId;
[INFO] [stdout]  10 | |     pub struct ItemId;
[INFO] [stdout]  11 | |     pub struct TypeId;
[INFO] [stdout]  12 | |     pub struct PathId;
[INFO] [stdout]  13 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&ast::TypeId` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `slotmap::new_key_type` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `ast::TypeId` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:146:31
[INFO] [stdout]     |
[INFO] [stdout] 146 |                 format!("Type {ty} has no fields")
[INFO] [stdout]     |                               ^^^^ `ast::TypeId` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `ast::TypeId`
[INFO] [stdout]    --> src/compiler/ast.rs:7:1
[INFO] [stdout]     |
[INFO] [stdout]   7 | / slotmap::new_key_type! {
[INFO] [stdout]   8 | |     pub struct ExprId;
[INFO] [stdout]   9 | |     pub struct StmtId;
[INFO] [stdout]  10 | |     pub struct ItemId;
[INFO] [stdout]  11 | |     pub struct TypeId;
[INFO] [stdout]  12 | |     pub struct PathId;
[INFO] [stdout]  13 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&ast::TypeId` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `slotmap::new_key_type` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `ast::TypeId` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:149:44
[INFO] [stdout]     |
[INFO] [stdout] 149 |                 format!("Cannot index type {ty}")
[INFO] [stdout]     |                                            ^^^^ `ast::TypeId` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `ast::TypeId`
[INFO] [stdout]    --> src/compiler/ast.rs:7:1
[INFO] [stdout]     |
[INFO] [stdout]   7 | / slotmap::new_key_type! {
[INFO] [stdout]   8 | |     pub struct ExprId;
[INFO] [stdout]   9 | |     pub struct StmtId;
[INFO] [stdout]  10 | |     pub struct ItemId;
[INFO] [stdout]  11 | |     pub struct TypeId;
[INFO] [stdout]  12 | |     pub struct PathId;
[INFO] [stdout]  13 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&ast::TypeId` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `slotmap::new_key_type` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `ast::TypeId` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:152:51
[INFO] [stdout]     |
[INFO] [stdout] 152 |                 format!("Index must be int, found {found}",)
[INFO] [stdout]     |                                                   ^^^^^^^ `ast::TypeId` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `ast::TypeId`
[INFO] [stdout]    --> src/compiler/ast.rs:7:1
[INFO] [stdout]     |
[INFO] [stdout]   7 | / slotmap::new_key_type! {
[INFO] [stdout]   8 | |     pub struct ExprId;
[INFO] [stdout]   9 | |     pub struct StmtId;
[INFO] [stdout]  10 | |     pub struct ItemId;
[INFO] [stdout]  11 | |     pub struct TypeId;
[INFO] [stdout]  12 | |     pub struct PathId;
[INFO] [stdout]  13 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&ast::TypeId` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `slotmap::new_key_type` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `ast::TypeId` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:161:57
[INFO] [stdout]     |
[INFO] [stdout] 161 |                 format!("Return type mismatch: expected {exp}, found {got}")
[INFO] [stdout]     |                                                         ^^^^^ `ast::TypeId` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `ast::TypeId`
[INFO] [stdout]    --> src/compiler/ast.rs:7:1
[INFO] [stdout]     |
[INFO] [stdout]   7 | / slotmap::new_key_type! {
[INFO] [stdout]   8 | |     pub struct ExprId;
[INFO] [stdout]   9 | |     pub struct StmtId;
[INFO] [stdout]  10 | |     pub struct ItemId;
[INFO] [stdout]  11 | |     pub struct TypeId;
[INFO] [stdout]  12 | |     pub struct PathId;
[INFO] [stdout]  13 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&ast::TypeId` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `slotmap::new_key_type` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `ast::TypeId` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:171:21
[INFO] [stdout]     |
[INFO] [stdout] 170 |                     "If branches have different types: {} and {}",
[INFO] [stdout]     |                                                        -- required by this formatting parameter
[INFO] [stdout] 171 |                     then_ty, else_ty
[INFO] [stdout]     |                     ^^^^^^^ `ast::TypeId` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `ast::TypeId`
[INFO] [stdout]    --> src/compiler/ast.rs:7:1
[INFO] [stdout]     |
[INFO] [stdout]   7 | / slotmap::new_key_type! {
[INFO] [stdout]   8 | |     pub struct ExprId;
[INFO] [stdout]   9 | |     pub struct StmtId;
[INFO] [stdout]  10 | |     pub struct ItemId;
[INFO] [stdout]  11 | |     pub struct TypeId;
[INFO] [stdout]  12 | |     pub struct PathId;
[INFO] [stdout]  13 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&ast::TypeId` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `slotmap::new_key_type` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `ast::TypeId` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:175:69
[INFO] [stdout]     |
[INFO] [stdout] 175 |                 format!("If without else must have void body, found {found}")
[INFO] [stdout]     |                                                                     ^^^^^^^ `ast::TypeId` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `ast::TypeId`
[INFO] [stdout]    --> src/compiler/ast.rs:7:1
[INFO] [stdout]     |
[INFO] [stdout]   7 | / slotmap::new_key_type! {
[INFO] [stdout]   8 | |     pub struct ExprId;
[INFO] [stdout]   9 | |     pub struct StmtId;
[INFO] [stdout]  10 | |     pub struct ItemId;
[INFO] [stdout]  11 | |     pub struct TypeId;
[INFO] [stdout]  12 | |     pub struct PathId;
[INFO] [stdout]  13 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&ast::TypeId` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `slotmap::new_key_type` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `ast::TypeId` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:185:40
[INFO] [stdout]     |
[INFO] [stdout] 185 |                 format!("Cannot assign {val_ty} to {tgt_ty}")
[INFO] [stdout]     |                                        ^^^^^^^^ `ast::TypeId` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `ast::TypeId`
[INFO] [stdout]    --> src/compiler/ast.rs:7:1
[INFO] [stdout]     |
[INFO] [stdout]   7 | / slotmap::new_key_type! {
[INFO] [stdout]   8 | |     pub struct ExprId;
[INFO] [stdout]   9 | |     pub struct StmtId;
[INFO] [stdout]  10 | |     pub struct ItemId;
[INFO] [stdout]  11 | |     pub struct TypeId;
[INFO] [stdout]  12 | |     pub struct PathId;
[INFO] [stdout]  13 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&ast::TypeId` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `slotmap::new_key_type` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:273:37
[INFO] [stdout]     |
[INFO] [stdout] 273 |                     self.check_item(item);
[INFO] [stdout]     |                          ---------- ^^^^ expected `&Item`, found `&ItemId`
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Item`
[INFO] [stdout]                found reference `&ItemId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:265:12
[INFO] [stdout]     |
[INFO] [stdout] 265 |     pub fn check_item(&mut self, item: &Item) {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:288:44
[INFO] [stdout]     |
[INFO] [stdout] 288 |                 self.current_fn_ret = Some(ret.clone());
[INFO] [stdout]     |                                       ---- ^^^^^^^^^^^ expected `Type`, found `TypeId`
[INFO] [stdout]     |                                       |
[INFO] [stdout]     |                                       arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout] help: the type constructed contains `ast::TypeId` due to the type of the argument passed
[INFO] [stdout]    --> src/compiler/type_checker.rs:288:39
[INFO] [stdout]     |
[INFO] [stdout] 288 |                 self.current_fn_ret = Some(ret.clone());
[INFO] [stdout]     |                                       ^^^^^-----------^
[INFO] [stdout]     |                                            |
[INFO] [stdout]     |                                            this argument influences the type of `Some`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> /rustc/87f2ecc56b5f6032b075c8934ebc77f28d57183c/library/core/src/option.rs:608:4
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:292:28
[INFO] [stdout]     |
[INFO] [stdout] 292 |                 match self.infer_expr(body) {
[INFO] [stdout]     |                            ^^^^^^^^^^------
[INFO] [stdout]     |                                      ||
[INFO] [stdout]     |                                      |expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                      argument #2 of type `&mut AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------  ------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 292 -                 match self.infer_expr(body) {
[INFO] [stdout] 292 +                 match self.infer_expr(/* &Expr */, /* &mut AstArena */) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 3 arguments but 2 arguments were supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:294:34
[INFO] [stdout]     |
[INFO] [stdout] 294 |                         if !self.types_compatible(&body_ty, ret) {
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^---------------
[INFO] [stdout]     |                                                  |          |
[INFO] [stdout]     |                                                  |          expected `&Type`, found `&TypeId`
[INFO] [stdout]     |                                                  argument #3 of type `&AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Type`
[INFO] [stdout]                found reference `&ast::TypeId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:681:8
[INFO] [stdout]     |
[INFO] [stdout] 681 |     fn types_compatible(&self, actual: &Type, expected: &Type, ast: &AstArena) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^                       ---------------  --------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 294 -                         if !self.types_compatible(&body_ty, ret) {
[INFO] [stdout] 294 +                         if !self.types_compatible(&body_ty, /* &Type */, /* &AstArena */) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no variant named `ReturnMismatch` found for enum `TypeErrorKind`
[INFO] [stdout]    --> src/compiler/type_checker.rs:295:61
[INFO] [stdout]     |
[INFO] [stdout]  15 | pub enum TypeErrorKind {
[INFO] [stdout]     | ---------------------- variant `ReturnMismatch` not found here
[INFO] [stdout] ...
[INFO] [stdout] 295 |                             self.errors.push(TypeErrorKind::ReturnMismatch {
[INFO] [stdout]     |                                                             ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: there is a variant with a similar name
[INFO] [stdout]     |
[INFO] [stdout] 295 |                             self.errors.push(TypeErrorKind::ReturnTypeMismatch {
[INFO] [stdout]     |                                                                   ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Int` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:314:29
[INFO] [stdout]     |
[INFO] [stdout] 314 |                 kind: Type::Int,
[INFO] [stdout]     |                             ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Int` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Float` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:318:29
[INFO] [stdout]     |
[INFO] [stdout] 318 |                 kind: Type::Float,
[INFO] [stdout]     |                             ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Float` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Bool` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:322:29
[INFO] [stdout]     |
[INFO] [stdout] 322 |                 kind: Type::Bool,
[INFO] [stdout]     |                             ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Bool` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `String` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:326:29
[INFO] [stdout]     |
[INFO] [stdout] 326 |                 kind: Type::String,
[INFO] [stdout]     |                             ^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `String` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Optional` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:330:29
[INFO] [stdout]     |
[INFO] [stdout] 330 |                 kind: Type::Optional(ast.types.insert(Type {
[INFO] [stdout]     |                             ^^^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Optional` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Unknown` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:331:33
[INFO] [stdout]     |
[INFO] [stdout] 331 |                     kind: Type::Unknown,
[INFO] [stdout]     |                                 ^^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Unknown` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Void` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:337:29
[INFO] [stdout]     |
[INFO] [stdout] 337 |                 kind: Type::Void,
[INFO] [stdout]     |                             ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Void` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0223]: ambiguous associated type
[INFO] [stdout]    --> src/compiler/type_checker.rs:345:35
[INFO] [stdout]     |
[INFO] [stdout] 345 | ...                   kind: Type::Function {
[INFO] [stdout]     |                             ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if there were a trait named `Example` with associated type `Function` implemented for `Type`, you could use the fully-qualified path
[INFO] [stdout]     |
[INFO] [stdout] 345 -                             kind: Type::Function {
[INFO] [stdout] 345 +                             kind: <Type as Example>::Function {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `SymbolU32` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:351:51
[INFO] [stdout]     |
[INFO] [stdout] 351 |                         _ => return Err(format!("'{name}' is not a value")),
[INFO] [stdout]     |                                                   ^^^^^^ `SymbolU32` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout]     = help: the trait `std::fmt::Display` is not implemented for `SymbolU32`
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&SymbolU32` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:351:41
[INFO] [stdout]     |
[INFO] [stdout] 351 |                         _ => return Err(format!("'{name}' is not a value")),
[INFO] [stdout]     |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `SymbolU32` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:354:61
[INFO] [stdout]     |
[INFO] [stdout] 354 |                     return Err(format!("Undefined variable '{name}'"));
[INFO] [stdout]     |                                                             ^^^^^^ `SymbolU32` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout]     = help: the trait `std::fmt::Display` is not implemented for `SymbolU32`
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&SymbolU32` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:354:32
[INFO] [stdout]     |
[INFO] [stdout] 354 |                     return Err(format!("Undefined variable '{name}'"));
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:357:54
[INFO] [stdout]     |
[INFO] [stdout] 357 |             ExprKind::Group(expr) => self.infer_expr(expr, scope)?,
[INFO] [stdout]     |                                           ---------- ^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                           |
[INFO] [stdout]     |                                           arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:359:31
[INFO] [stdout]     |
[INFO] [stdout] 359 |                 let ty = self.infer_expr(&ast.)?;
[INFO] [stdout]     |                               ^^^^^^^^^^-------
[INFO] [stdout]     |                                         ||
[INFO] [stdout]     |                                         |expected `&Expr`, found `&&mut AstArena`
[INFO] [stdout]     |                                         argument #2 of type `&mut AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&&mut AstArena`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------  ------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 359 -                 let ty = self.infer_expr(&ast.)?;
[INFO] [stdout] 359 +                 let ty = self.infer_expr(/* &Expr */, /* &mut AstArena */)?;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Int` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:361:42
[INFO] [stdout]     |
[INFO] [stdout] 361 |                     (UnaryOp::Neg, Type::Int | Type::Float) => Ok(ty.clone()),
[INFO] [stdout]     |                                          ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Int` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Float` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:361:54
[INFO] [stdout]     |
[INFO] [stdout] 361 |                     (UnaryOp::Neg, Type::Int | Type::Float) => Ok(ty.clone()),
[INFO] [stdout]     |                                                      ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Float` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Bool` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:362:42
[INFO] [stdout]     |
[INFO] [stdout] 362 |                     (UnaryOp::Not, Type::Bool) => Ok(ty.clone()),
[INFO] [stdout]     |                                          ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Bool` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/compiler/type_checker.rs:365:31
[INFO] [stdout]     |
[INFO] [stdout] 364 |                         kind: todo!(),
[INFO] [stdout]     |                               ------- any code following this expression is unreachable
[INFO] [stdout] 365 |                         span: todo!(),
[INFO] [stdout]     |                               ^^^^^^^ unreachable expression
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout]     = note: this warning originates in the macro `todo` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: `match` arms have incompatible types
[INFO] [stdout]    --> src/compiler/type_checker.rs:360:17
[INFO] [stdout]     |
[INFO] [stdout] 312 |           let ty = match &expr.kind {
[INFO] [stdout]     |                    ---------------- `match` arms have incompatible types
[INFO] [stdout] ...
[INFO] [stdout] 357 |               ExprKind::Group(expr) => self.infer_expr(expr, scope)?,
[INFO] [stdout]     |                                        ----------------------------- this and all prior arms are found to be of type `Type`
[INFO] [stdout] ...
[INFO] [stdout] 360 | /                 match (op, ty.kind) {
[INFO] [stdout] 361 | |                     (UnaryOp::Neg, Type::Int | Type::Float) => Ok(ty.clone()),
[INFO] [stdout] 362 | |                     (UnaryOp::Not, Type::Bool) => Ok(ty.clone()),
[INFO] [stdout] 363 | |                     _ => Err(TypeError {
[INFO] [stdout] ...   |
[INFO] [stdout] 366 | |                     })
[INFO] [stdout] 367 | |                 }
[INFO] [stdout]     | |_________________^ expected `Type`, found `Result<Type, TypeError>`
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected struct `Type`
[INFO] [stdout]                  found enum `Result<Type, TypeError>`
[INFO] [stdout] help: use the `?` operator to extract the `Result<Type, TypeError>` value, propagating a `Result::Err` value to the caller
[INFO] [stdout]     |
[INFO] [stdout] 368 |             }?
[INFO] [stdout]     |              +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:370:46
[INFO] [stdout]     |
[INFO] [stdout] 370 |                 let lhs_ty = self.infer_expr(lhs, scope)?;
[INFO] [stdout]     |                                   ---------- ^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                   |
[INFO] [stdout]     |                                   arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:371:46
[INFO] [stdout]     |
[INFO] [stdout] 371 |                 let rhs_ty = self.infer_expr(rhs, scope)?;
[INFO] [stdout]     |                                   ---------- ^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                   |
[INFO] [stdout]     |                                   arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `TypeError`
[INFO] [stdout]    --> src/compiler/type_checker.rs:372:60
[INFO] [stdout]     |
[INFO] [stdout] 372 |                 self.check_binary_op(*op, &lhs_ty, &rhs_ty)?
[INFO] [stdout]     |                      --------------------------------------^ the trait `From<String>` is not implemented for `TypeError`
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      this can't be annotated with `?` because it has type `Result<_, String>`
[INFO] [stdout]     |
[INFO] [stdout] note: `TypeError` needs to implement `From<String>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:95:1
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct TypeError {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:375:46
[INFO] [stdout]     |
[INFO] [stdout] 375 |                 let tgt_ty = self.infer_expr(tgt, scope)?;
[INFO] [stdout]     |                                   ---------- ^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                   |
[INFO] [stdout]     |                                   arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:376:46
[INFO] [stdout]     |
[INFO] [stdout] 376 |                 let val_ty = self.infer_expr(val, scope)?;
[INFO] [stdout]     |                                   ---------- ^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                   |
[INFO] [stdout]     |                                   arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 3 arguments but 2 arguments were supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:378:26
[INFO] [stdout]     |
[INFO] [stdout] 378 |                 if !self.types_compatible(&val_ty, &tgt_ty) {
[INFO] [stdout]     |                          ^^^^^^^^^^^^^^^^------------------ argument #3 of type `&AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:681:8
[INFO] [stdout]     |
[INFO] [stdout] 681 |     fn types_compatible(&self, actual: &Type, expected: &Type, ast: &AstArena) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^                                        --------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 378 |                 if !self.types_compatible(&val_ty, &tgt_ty, /* &AstArena */) {
[INFO] [stdout]     |                                                           +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:379:55
[INFO] [stdout]     |
[INFO] [stdout] 379 |                     return Err(format!("Cannot assign {val_ty} to {tgt_ty}"));
[INFO] [stdout]     |                                                       ^^^^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:379:32
[INFO] [stdout]     |
[INFO] [stdout] 379 |                     return Err(format!("Cannot assign {val_ty} to {tgt_ty}"));
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `TypeError`
[INFO] [stdout]    --> src/compiler/type_checker.rs:385:82
[INFO] [stdout]     |
[INFO] [stdout] 385 | ...                   self.check_binary_op(BinaryOp::Add, &tgt_ty, &val_ty)?
[INFO] [stdout]     |                            ------------------------------------------------^ the trait `From<String>` is not implemented for `TypeError`
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            this can't be annotated with `?` because it has type `Result<_, String>`
[INFO] [stdout]     |
[INFO] [stdout] note: `TypeError` needs to implement `From<String>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:95:1
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct TypeError {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `TypeError`
[INFO] [stdout]    --> src/compiler/type_checker.rs:388:82
[INFO] [stdout]     |
[INFO] [stdout] 388 | ...                   self.check_binary_op(BinaryOp::Sub, &tgt_ty, &val_ty)?
[INFO] [stdout]     |                            ------------------------------------------------^ the trait `From<String>` is not implemented for `TypeError`
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            this can't be annotated with `?` because it has type `Result<_, String>`
[INFO] [stdout]     |
[INFO] [stdout] note: `TypeError` needs to implement `From<String>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:95:1
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct TypeError {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `TypeError`
[INFO] [stdout]    --> src/compiler/type_checker.rs:391:82
[INFO] [stdout]     |
[INFO] [stdout] 391 | ...                   self.check_binary_op(BinaryOp::Mul, &tgt_ty, &val_ty)?
[INFO] [stdout]     |                            ------------------------------------------------^ the trait `From<String>` is not implemented for `TypeError`
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            this can't be annotated with `?` because it has type `Result<_, String>`
[INFO] [stdout]     |
[INFO] [stdout] note: `TypeError` needs to implement `From<String>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:95:1
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct TypeError {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `TypeError`
[INFO] [stdout]    --> src/compiler/type_checker.rs:394:82
[INFO] [stdout]     |
[INFO] [stdout] 394 | ...                   self.check_binary_op(BinaryOp::Div, &tgt_ty, &val_ty)?
[INFO] [stdout]     |                            ------------------------------------------------^ the trait `From<String>` is not implemented for `TypeError`
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            this can't be annotated with `?` because it has type `Result<_, String>`
[INFO] [stdout]     |
[INFO] [stdout] note: `TypeError` needs to implement `From<String>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:95:1
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct TypeError {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `TypeError`
[INFO] [stdout]    --> src/compiler/type_checker.rs:397:82
[INFO] [stdout]     |
[INFO] [stdout] 397 | ...                   self.check_binary_op(BinaryOp::Mod, &tgt_ty, &val_ty)?
[INFO] [stdout]     |                            ------------------------------------------------^ the trait `From<String>` is not implemented for `TypeError`
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            this can't be annotated with `?` because it has type `Result<_, String>`
[INFO] [stdout]     |
[INFO] [stdout] note: `TypeError` needs to implement `From<String>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:95:1
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct TypeError {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Void` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:404:42
[INFO] [stdout]     |
[INFO] [stdout] 404 |                     kind: Box::new(Type::Void),
[INFO] [stdout]     |                                          ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Void` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:409:49
[INFO] [stdout]     |
[INFO] [stdout] 409 |                 let callee_ty = self.infer_expr(callee, scope)?;
[INFO] [stdout]     |                                      ---------- ^^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                      |
[INFO] [stdout]     |                                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `TypeKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/type_checker.rs:411:24
[INFO] [stdout]     |
[INFO] [stdout] 411 |                 match &*callee_ty.kind {
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0223]: ambiguous associated type
[INFO] [stdout]    --> src/compiler/type_checker.rs:412:21
[INFO] [stdout]     |
[INFO] [stdout] 412 |                     Type::Function { params, ret: return_ty } => {
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if there were a trait named `Example` with associated type `Function` implemented for `Type`, you could use the fully-qualified path
[INFO] [stdout]     |
[INFO] [stdout] 412 -                     Type::Function { params, ret: return_ty } => {
[INFO] [stdout] 412 +                     <Type as Example>::Function { params, ret: return_ty } => {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:414:40
[INFO] [stdout]     |
[INFO] [stdout] 414 |   ...                   return Err(format!(
[INFO] [stdout]     |  __________________________________^
[INFO] [stdout] 415 | | ...                       "Expected {} arguments, got {}",
[INFO] [stdout] 416 | | ...                       params.len(),
[INFO] [stdout] 417 | | ...                       args.len()
[INFO] [stdout] 418 | | ...                   ));
[INFO] [stdout]     | |_______________________^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 3 arguments but 2 arguments were supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:423:38
[INFO] [stdout]     |
[INFO] [stdout] 423 | ...                   if !self.types_compatible(&arg_ty, param_ty) {
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^------------------- argument #3 of type `&AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:681:8
[INFO] [stdout]     |
[INFO] [stdout] 681 |     fn types_compatible(&self, actual: &Type, expected: &Type, ast: &AstArena) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^                                        --------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 423 |                             if !self.types_compatible(&arg_ty, param_ty, /* &AstArena */) {
[INFO] [stdout]     |                                                                        +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:425:60
[INFO] [stdout]     |
[INFO] [stdout] 425 | ...                   "Argument {i} has type {arg_ty}, expected {param_ty}"
[INFO] [stdout]     |                                              ^^^^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:424:44
[INFO] [stdout]     |
[INFO] [stdout] 424 |   ...                   return Err(format!(
[INFO] [stdout]     |  __________________________________^
[INFO] [stdout] 425 | | ...                       "Argument {i} has type {arg_ty}, expected {param_ty}"
[INFO] [stdout] 426 | | ...                   ));
[INFO] [stdout]     | |_______________________^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:432:76
[INFO] [stdout]     |
[INFO] [stdout] 432 |                     _ => return Err(format!("Cannot call non-function type {callee_ty}")),
[INFO] [stdout]     |                                                                            ^^^^^^^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:432:37
[INFO] [stdout]     |
[INFO] [stdout] 432 |                     _ => return Err(format!("Cannot call non-function type {callee_ty}")),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:436:49
[INFO] [stdout]     |
[INFO] [stdout] 436 |                 let object_ty = self.infer_expr(object, scope)?;
[INFO] [stdout]     |                                      ---------- ^^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                      |
[INFO] [stdout]     |                                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `TypeKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/type_checker.rs:438:24
[INFO] [stdout]     |
[INFO] [stdout] 438 |                 match &*object_ty.kind {
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Symbol` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:439:27
[INFO] [stdout]     |
[INFO] [stdout] 439 |                     Type::Symbol(name) => {
[INFO] [stdout]     |                           ^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Symbol` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:444:51
[INFO] [stdout]     |
[INFO] [stdout] 444 | ...                   return Ok(f.ty.clone());
[INFO] [stdout]     |                              -- ^^^^^^^^^^^^ expected `Type`, found `TypeId`
[INFO] [stdout]     |                              |
[INFO] [stdout]     |                              arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout] help: the type constructed contains `ast::TypeId` due to the type of the argument passed
[INFO] [stdout]    --> src/compiler/type_checker.rs:444:48
[INFO] [stdout]     |
[INFO] [stdout] 444 | ...                   return Ok(f.ty.clone());
[INFO] [stdout]     |                              ^^^------------^
[INFO] [stdout]     |                                 |
[INFO] [stdout]     |                                 this argument influences the type of `Ok`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> /rustc/87f2ecc56b5f6032b075c8934ebc77f28d57183c/library/core/src/result.rs:561:4
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:448:44
[INFO] [stdout]     |
[INFO] [stdout] 448 | ...                   return Err(format!("Struct '{name}' has no field '{field}'"));
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:451:36
[INFO] [stdout]     |
[INFO] [stdout] 451 |                         return Err(format!("Unknown struct '{name}'"));
[INFO] [stdout]     |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:453:51
[INFO] [stdout]     |
[INFO] [stdout] 453 |                     _ => return Err(format!("Type {object_ty} has no fields")),
[INFO] [stdout]     |                                                   ^^^^^^^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:453:37
[INFO] [stdout]     |
[INFO] [stdout] 453 |                     _ => return Err(format!("Type {object_ty} has no fields")),
[INFO] [stdout]     |                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:457:49
[INFO] [stdout]     |
[INFO] [stdout] 457 |                 let object_ty = self.infer_expr(object, scope)?;
[INFO] [stdout]     |                                      ---------- ^^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                      |
[INFO] [stdout]     |                                      arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:458:48
[INFO] [stdout]     |
[INFO] [stdout] 458 |                 let index_ty = self.infer_expr(index, scope)?;
[INFO] [stdout]     |                                     ---------- ^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                     |
[INFO] [stdout]     |                                     arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `TypeKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/type_checker.rs:461:30
[INFO] [stdout]     |
[INFO] [stdout] 461 |                 if !matches!(*index_ty.kind, Type::Int) {
[INFO] [stdout]     |                              ^^^^^^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Int` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:461:52
[INFO] [stdout]     |
[INFO] [stdout] 461 |                 if !matches!(*index_ty.kind, Type::Int) {
[INFO] [stdout]     |                                                    ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Int` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:462:64
[INFO] [stdout]     |
[INFO] [stdout] 462 |                     return Err(format!("Index must be int, got {index_ty}"));
[INFO] [stdout]     |                                                                ^^^^^^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:462:32
[INFO] [stdout]     |
[INFO] [stdout] 462 |                     return Err(format!("Index must be int, got {index_ty}"));
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `TypeKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/type_checker.rs:466:24
[INFO] [stdout]     |
[INFO] [stdout] 466 |                 match &*object_ty.kind {
[INFO] [stdout]     |                        ^^^^^^^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0223]: ambiguous associated type
[INFO] [stdout]    --> src/compiler/type_checker.rs:467:21
[INFO] [stdout]     |
[INFO] [stdout] 467 |                     Type::Array { ty, .. } | Type::DynArray(ty) => ty.clone(),
[INFO] [stdout]     |                     ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if there were a trait named `Example` with associated type `Array` implemented for `Type`, you could use the fully-qualified path
[INFO] [stdout]     |
[INFO] [stdout] 467 -                     Type::Array { ty, .. } | Type::DynArray(ty) => ty.clone(),
[INFO] [stdout] 467 +                     <Type as Example>::Array { ty, .. } | Type::DynArray(ty) => ty.clone(),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `DynArray` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:467:52
[INFO] [stdout]     |
[INFO] [stdout] 467 |                     Type::Array { ty, .. } | Type::DynArray(ty) => ty.clone(),
[INFO] [stdout]     |                                                    ^^^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `DynArray` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:469:63
[INFO] [stdout]     |
[INFO] [stdout] 469 |                         return Err(format!("Cannot index type {object_ty}"));
[INFO] [stdout]     |                                                               ^^^^^^^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:469:36
[INFO] [stdout]     |
[INFO] [stdout] 469 |                         return Err(format!("Cannot index type {object_ty}"));
[INFO] [stdout]     |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:474:56
[INFO] [stdout]     |
[INFO] [stdout] 474 |             ExprKind::Block(stmts) => self.check_block(stmts)?,
[INFO] [stdout]     |                                            ----------- ^^^^^ expected `&[Stmt]`, found `&Vec<StmtId>`
[INFO] [stdout]     |                                            |
[INFO] [stdout]     |                                            arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&[Stmt]`
[INFO] [stdout]                found reference `&Vec<StmtId>`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:582:8
[INFO] [stdout]     |
[INFO] [stdout] 582 |     fn check_block(&mut self, stmts: &[Stmt]) -> Result<Type, TypeError> {
[INFO] [stdout]     |        ^^^^^^^^^^^            --------------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:480:47
[INFO] [stdout]     |
[INFO] [stdout] 480 |                 let cond_ty = self.infer_expr(cond, scope)?;
[INFO] [stdout]     |                                    ---------- ^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                    |
[INFO] [stdout]     |                                    arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `TypeKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/type_checker.rs:482:30
[INFO] [stdout]     |
[INFO] [stdout] 482 |                 if !matches!(*cond_ty.kind, Type::Bool) {
[INFO] [stdout]     |                              ^^^^^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Bool` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:482:51
[INFO] [stdout]     |
[INFO] [stdout] 482 |                 if !matches!(*cond_ty.kind, Type::Bool) {
[INFO] [stdout]     |                                                   ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Bool` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:483:72
[INFO] [stdout]     |
[INFO] [stdout] 483 |                     return Err(format!("If condition must be gool, got {cond_ty}"));
[INFO] [stdout]     |                                                                        ^^^^^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:483:32
[INFO] [stdout]     |
[INFO] [stdout] 483 |                     return Err(format!("If condition must be gool, got {cond_ty}"));
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:486:47
[INFO] [stdout]     |
[INFO] [stdout] 486 |                 let then_ty = self.infer_expr(then_branch, scope)?;
[INFO] [stdout]     |                                    ---------- ^^^^^^^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                    |
[INFO] [stdout]     |                                    arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:489:51
[INFO] [stdout]     |
[INFO] [stdout] 489 |                     let else_ty = self.infer_expr(else_expr, scope)?;
[INFO] [stdout]     |                                        ---------- ^^^^^^^^^ expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                        |
[INFO] [stdout]     |                                        arguments to this method are incorrect
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 3 arguments but 2 arguments were supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:491:30
[INFO] [stdout]     |
[INFO] [stdout] 491 |                     if !self.types_compatible(&then_ty, &else_ty) {
[INFO] [stdout]     |                              ^^^^^^^^^^^^^^^^-------------------- argument #3 of type `&AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:681:8
[INFO] [stdout]     |
[INFO] [stdout] 681 |     fn types_compatible(&self, actual: &Type, expected: &Type, ast: &AstArena) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^                                        --------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 491 |                     if !self.types_compatible(&then_ty, &else_ty, /* &AstArena */) {
[INFO] [stdout]     |                                                                 +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:493:64
[INFO] [stdout]     |
[INFO] [stdout] 493 | ...                   "If branches have different types: {then_ty} and {else_ty}"
[INFO] [stdout]     |                                                          ^^^^^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:492:36
[INFO] [stdout]     |
[INFO] [stdout] 492 |                           return Err(format!(
[INFO] [stdout]     |  ____________________________________^
[INFO] [stdout] 493 | |                             "If branches have different types: {then_ty} and {else_ty}"
[INFO] [stdout] 494 | |                         ));
[INFO] [stdout]     | |_________________________^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking tinytemplate v1.2.1
[INFO] [stdout] error[E0614]: type `TypeKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/type_checker.rs:497:34
[INFO] [stdout]     |
[INFO] [stdout] 497 |                     if !matches!(*then_ty.kind, Type::Void) {
[INFO] [stdout]     |                                  ^^^^^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Void` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:497:55
[INFO] [stdout]     |
[INFO] [stdout] 497 |                     if !matches!(*then_ty.kind, Type::Void) {
[INFO] [stdout]     |                                                       ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Void` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:499:71
[INFO] [stdout]     |
[INFO] [stdout] 499 | ...                   "If without else must have void body, got {then_ty}"
[INFO] [stdout]     |                                                                 ^^^^^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:498:36
[INFO] [stdout]     |
[INFO] [stdout] 498 |                           return Err(format!(
[INFO] [stdout]     |  ____________________________________^
[INFO] [stdout] 499 | |                             "If without else must have void body, got {then_ty}"
[INFO] [stdout] 500 | |                         ));
[INFO] [stdout]     | |_________________________^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:507:36
[INFO] [stdout]     |
[INFO] [stdout] 507 |                 let cond_ty = self.infer_expr(cond)?;
[INFO] [stdout]     |                                    ^^^^^^^^^^------
[INFO] [stdout]     |                                              ||
[INFO] [stdout]     |                                              |expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                              argument #2 of type `&mut AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------  ------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 507 -                 let cond_ty = self.infer_expr(cond)?;
[INFO] [stdout] 507 +                 let cond_ty = self.infer_expr(/* &Expr */, /* &mut AstArena */)?;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `TypeKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/type_checker.rs:508:30
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 if !matches!(*cond_ty.kind, Type::Bool) {
[INFO] [stdout]     |                              ^^^^^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Bool` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:508:51
[INFO] [stdout]     |
[INFO] [stdout] 508 |                 if !matches!(*cond_ty.kind, Type::Bool) {
[INFO] [stdout]     |                                                   ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Bool` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:509:32
[INFO] [stdout]     |
[INFO] [stdout] 509 |                       return Err(format!(
[INFO] [stdout]     |  ________________________________^
[INFO] [stdout] 510 | |                         "While condition must be bool, got {:?}",
[INFO] [stdout] 511 | |                         cond_ty.kind
[INFO] [stdout] 512 | |                     ));
[INFO] [stdout]     | |_____________________^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `loop_depth` on type `&mut TypeChecker<'a>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:515:22
[INFO] [stdout]     |
[INFO] [stdout] 515 |                 self.loop_depth += 1;
[INFO] [stdout]     |                      ^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `interner`, `symbols`, `errors`, `expr_types`, `current_fn_ret`, `break_stack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:516:36
[INFO] [stdout]     |
[INFO] [stdout] 516 |                 let body_ty = self.infer_expr(body)?;
[INFO] [stdout]     |                                    ^^^^^^^^^^------
[INFO] [stdout]     |                                              ||
[INFO] [stdout]     |                                              |expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                              argument #2 of type `&mut AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------  ------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 516 -                 let body_ty = self.infer_expr(body)?;
[INFO] [stdout] 516 +                 let body_ty = self.infer_expr(/* &Expr */, /* &mut AstArena */)?;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `loop_depth` on type `&mut TypeChecker<'a>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:517:22
[INFO] [stdout]     |
[INFO] [stdout] 517 |                 self.loop_depth -= 1;
[INFO] [stdout]     |                      ^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `interner`, `symbols`, `errors`, `expr_types`, `current_fn_ret`, `break_stack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Void` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:521:42
[INFO] [stdout]     |
[INFO] [stdout] 521 |                     kind: Box::new(Type::Void),
[INFO] [stdout]     |                                          ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Void` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `loop_depth` on type `&mut TypeChecker<'a>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:527:22
[INFO] [stdout]     |
[INFO] [stdout] 527 |                 self.loop_depth += 1;
[INFO] [stdout]     |                      ^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `interner`, `symbols`, `errors`, `expr_types`, `current_fn_ret`, `break_stack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:528:36
[INFO] [stdout]     |
[INFO] [stdout] 528 |                 let body_ty = self.infer_expr(body)?;
[INFO] [stdout]     |                                    ^^^^^^^^^^------
[INFO] [stdout]     |                                              ||
[INFO] [stdout]     |                                              |expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                              argument #2 of type `&mut AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------  ------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 528 -                 let body_ty = self.infer_expr(body)?;
[INFO] [stdout] 528 +                 let body_ty = self.infer_expr(/* &Expr */, /* &mut AstArena */)?;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `loop_depth` on type `&mut TypeChecker<'a>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:529:22
[INFO] [stdout]     |
[INFO] [stdout] 529 |                 self.loop_depth -= 1;
[INFO] [stdout]     |                      ^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `interner`, `symbols`, `errors`, `expr_types`, `current_fn_ret`, `break_stack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Never` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:533:42
[INFO] [stdout]     |
[INFO] [stdout] 533 |                     kind: Box::new(Type::Never),
[INFO] [stdout]     |                                          ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Never` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:538:35
[INFO] [stdout]     |
[INFO] [stdout] 538 |                 let ret_ty = self.infer_expr(expr)?;
[INFO] [stdout]     |                                   ^^^^^^^^^^------
[INFO] [stdout]     |                                             ||
[INFO] [stdout]     |                                             |expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                             argument #2 of type `&mut AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------  ------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 538 -                 let ret_ty = self.infer_expr(expr)?;
[INFO] [stdout] 538 +                 let ret_ty = self.infer_expr(/* &Expr */, /* &mut AstArena */)?;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 3 arguments but 2 arguments were supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:541:30
[INFO] [stdout]     |
[INFO] [stdout] 541 |                     if !self.types_compatible(&ret_ty, expected) {
[INFO] [stdout]     |                              ^^^^^^^^^^^^^^^^------------------- argument #3 of type `&AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:681:8
[INFO] [stdout]     |
[INFO] [stdout] 681 |     fn types_compatible(&self, actual: &Type, expected: &Type, ast: &AstArena) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^                                        --------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 541 |                     if !self.types_compatible(&ret_ty, expected, /* &AstArena */) {
[INFO] [stdout]     |                                                                +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:543:42
[INFO] [stdout]     |
[INFO] [stdout] 543 | ...                   "Return type {ret_ty} doesn't match function return type {expected}"
[INFO] [stdout]     |                                    ^^^^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:542:36
[INFO] [stdout]     |
[INFO] [stdout] 542 |                           return Err(format!(
[INFO] [stdout]     |  ____________________________________^
[INFO] [stdout] 543 | |                             "Return type {ret_ty} doesn't match function return type {expected}"
[INFO] [stdout] 544 | |                         ));
[INFO] [stdout]     | |_________________________^ expected `TypeError`, found `String`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Never` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:550:42
[INFO] [stdout]     |
[INFO] [stdout] 550 |                     kind: Box::new(Type::Never),
[INFO] [stdout]     |                                          ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Never` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `span` on type `&ExprId`
[INFO] [stdout]    --> src/compiler/type_checker.rs:551:32
[INFO] [stdout]     |
[INFO] [stdout] 551 |                     span: expr.span,
[INFO] [stdout]     |                                ^^^^ unknown field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `loop_depth` on type `&mut TypeChecker<'a>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:555:25
[INFO] [stdout]     |
[INFO] [stdout] 555 |                 if self.loop_depth == 0 {
[INFO] [stdout]     |                         ^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `interner`, `symbols`, `errors`, `expr_types`, `current_fn_ret`, `break_stack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:556:32
[INFO] [stdout]     |
[INFO] [stdout] 556 |                     return Err("Break outside of loop".to_string());
[INFO] [stdout]     |                            --- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout] help: the type constructed contains `String` due to the type of the argument passed
[INFO] [stdout]    --> src/compiler/type_checker.rs:556:28
[INFO] [stdout]     |
[INFO] [stdout] 556 |                     return Err("Break outside of loop".to_string());
[INFO] [stdout]     |                            ^^^^-----------------------------------^
[INFO] [stdout]     |                                |
[INFO] [stdout]     |                                this argument influences the type of `Err`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> /rustc/87f2ecc56b5f6032b075c8934ebc77f28d57183c/library/core/src/result.rs:566:4
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:559:30
[INFO] [stdout]     |
[INFO] [stdout] 559 |                 let _ = self.infer_expr(expr)?;
[INFO] [stdout]     |                              ^^^^^^^^^^------
[INFO] [stdout]     |                                        ||
[INFO] [stdout]     |                                        |expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                        argument #2 of type `&mut AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------  ------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 559 -                 let _ = self.infer_expr(expr)?;
[INFO] [stdout] 559 +                 let _ = self.infer_expr(/* &Expr */, /* &mut AstArena */)?;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Never` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:562:42
[INFO] [stdout]     |
[INFO] [stdout] 562 |                     kind: Box::new(Type::Never),
[INFO] [stdout]     |                                          ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Never` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `span` on type `&ExprId`
[INFO] [stdout]    --> src/compiler/type_checker.rs:563:32
[INFO] [stdout]     |
[INFO] [stdout] 563 |                     span: expr.span,
[INFO] [stdout]     |                                ^^^^ unknown field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0609]: no field `loop_depth` on type `&mut TypeChecker<'a>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:567:25
[INFO] [stdout]     |
[INFO] [stdout] 567 |                 if self.loop_depth == 0 {
[INFO] [stdout]     |                         ^^^^^^^^^^ unknown field
[INFO] [stdout]     |
[INFO] [stdout]     = note: available fields are: `interner`, `symbols`, `errors`, `expr_types`, `current_fn_ret`, `break_stack`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:568:32
[INFO] [stdout]     |
[INFO] [stdout] 568 |                     return Err("Continue outside of loop".to_string());
[INFO] [stdout]     |                            --- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `TypeError`, found `String`
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            arguments to this enum variant are incorrect
[INFO] [stdout]     |
[INFO] [stdout] help: the type constructed contains `String` due to the type of the argument passed
[INFO] [stdout]    --> src/compiler/type_checker.rs:568:28
[INFO] [stdout]     |
[INFO] [stdout] 568 |                     return Err("Continue outside of loop".to_string());
[INFO] [stdout]     |                            ^^^^--------------------------------------^
[INFO] [stdout]     |                                |
[INFO] [stdout]     |                                this argument influences the type of `Err`
[INFO] [stdout] note: tuple variant defined here
[INFO] [stdout]    --> /rustc/87f2ecc56b5f6032b075c8934ebc77f28d57183c/library/core/src/result.rs:566:4
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Never` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:572:42
[INFO] [stdout]     |
[INFO] [stdout] 572 |                     kind: Box::new(Type::Never),
[INFO] [stdout]     |                                          ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Never` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Void` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:584:25
[INFO] [stdout]     |
[INFO] [stdout] 584 |             kind: Type::Void,
[INFO] [stdout]     |                         ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Void` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:605:43
[INFO] [stdout]     |
[INFO] [stdout] 605 |                         let val_ty = self.infer_expr(val_expr)?;
[INFO] [stdout]     |                                           ^^^^^^^^^^----------
[INFO] [stdout]     |                                                     ||
[INFO] [stdout]     |                                                     |expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                                     argument #2 of type `&mut AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------  ------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 605 -                         let val_ty = self.infer_expr(val_expr)?;
[INFO] [stdout] 605 +                         let val_ty = self.infer_expr(/* &Expr */, /* &mut AstArena */)?;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 3 arguments but 2 arguments were supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:608:38
[INFO] [stdout]     |
[INFO] [stdout] 608 | ...                   if !self.types_compatible(&val_ty, annotated_ty) {
[INFO] [stdout]     |                                ^^^^^^^^^^^^^^^^-----------------------
[INFO] [stdout]     |                                                |         |
[INFO] [stdout]     |                                                |         expected `&Type`, found `&TypeId`
[INFO] [stdout]     |                                                argument #3 of type `&AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Type`
[INFO] [stdout]                found reference `&ast::TypeId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:681:8
[INFO] [stdout]     |
[INFO] [stdout] 681 |     fn types_compatible(&self, actual: &Type, expected: &Type, ast: &AstArena) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^                       ---------------  --------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 608 -                             if !self.types_compatible(&val_ty, annotated_ty) {
[INFO] [stdout] 608 +                             if !self.types_compatible(&val_ty, /* &Type */, /* &AstArena */) {
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:610:85
[INFO] [stdout]     |
[INFO] [stdout] 610 | ...                   kind: TypeErrorKind::TypeMismatch { exp: , got: () },
[INFO] [stdout]     |                                                                       ^^ expected `TypeId`, found `()`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable expression
[INFO] [stdout]    --> src/compiler/type_checker.rs:614:33
[INFO] [stdout]     |
[INFO] [stdout] 609 | / ...                   return Err(TypeError {
[INFO] [stdout] 610 | | ...                       kind: TypeErrorKind::TypeMismatch { exp: , got: () },
[INFO] [stdout] 611 | | ...                       span: stmt.span,
[INFO] [stdout] 612 | | ...                   });
[INFO] [stdout]     | |________________________- any code following this expression is unreachable
[INFO] [stdout] 613 |   ...
[INFO] [stdout] 614 | / ...                   format!(
[INFO] [stdout] 615 | | ...                       "Variable '{name}' declared as {annotated_ty} but initialized with {val_ty}"
[INFO] [stdout] 616 | | ...                   )
[INFO] [stdout]     | |_______________________^ unreachable expression
[INFO] [stdout]     |
[INFO] [stdout]     = note: this warning originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `SymbolU32` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:615:48
[INFO] [stdout]     |
[INFO] [stdout] 615 | ...                   "Variable '{name}' declared as {annotated_ty} but initialized with {val_ty}"
[INFO] [stdout]     |                                  ^^^^^^ `SymbolU32` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout]     = help: the trait `std::fmt::Display` is not implemented for `SymbolU32`
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&SymbolU32` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `ast::TypeId` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:615:68
[INFO] [stdout]     |
[INFO] [stdout] 615 | ...                   "Variable '{name}' declared as {annotated_ty} but initialized with {val_ty}"
[INFO] [stdout]     |                                                      ^^^^^^^^^^^^^^ `ast::TypeId` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `ast::TypeId`
[INFO] [stdout]    --> src/compiler/ast.rs:7:1
[INFO] [stdout]     |
[INFO] [stdout]   7 | / slotmap::new_key_type! {
[INFO] [stdout]   8 | |     pub struct ExprId;
[INFO] [stdout]   9 | |     pub struct StmtId;
[INFO] [stdout]  10 | |     pub struct ItemId;
[INFO] [stdout]  11 | |     pub struct TypeId;
[INFO] [stdout]  12 | |     pub struct PathId;
[INFO] [stdout]  13 | | }
[INFO] [stdout]     | |_^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&ast::TypeId` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `slotmap::new_key_type` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:615:104
[INFO] [stdout]     |
[INFO] [stdout] 615 | ...                   "Variable '{name}' declared as {annotated_ty} but initialized with {val_ty}"
[INFO] [stdout]     |                                                                                          ^^^^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]    --> src/compiler/type_checker.rs:614:33
[INFO] [stdout]     |
[INFO] [stdout] 608 | /  ...                   if !self.types_compatible(&val_ty, annotated_ty) {
[INFO] [stdout] 609 | |  ...                       return Err(TypeError {
[INFO] [stdout] 610 | |  ...                           kind: TypeErrorKind::TypeMismatch { exp: , got: () },
[INFO] [stdout] 611 | |  ...                           span: stmt.span,
[INFO] [stdout] ...   |
[INFO] [stdout] 614 | |/ ...                       format!(
[INFO] [stdout] 615 | || ...                           "Variable '{name}' declared as {annotated_ty} but initialized with {val_ty}"
[INFO] [stdout] 616 | || ...                       )
[INFO] [stdout]     | ||___________________________^ expected `()`, found `String`
[INFO] [stdout] 617 | |  ...                   }
[INFO] [stdout]     | |                        -- help: consider using a semicolon here
[INFO] [stdout]     | |________________________|
[INFO] [stdout]     |                          expected this to be `()`
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: arguments to this method are incorrect
[INFO] [stdout]    --> src/compiler/type_checker.rs:619:42
[INFO] [stdout]     |
[INFO] [stdout] 619 | ...                   self.symbols.set_var_type(name, val_ty)?;
[INFO] [stdout]     |                                    ^^^^^^^^^^^^ ----  ------ expected `TypeId`, found `Type`
[INFO] [stdout]     |                                                 |
[INFO] [stdout]     |                                                 expected `SymbolU32`, found `&SymbolU32`
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/resolver.rs:223:12
[INFO] [stdout]     |
[INFO] [stdout] 223 |     pub fn set_var_type(&mut self, name: Ident, new_ty: TypeId) -> Result<(), ResolveError> {
[INFO] [stdout]     |            ^^^^^^^^^^^^            -----------  --------------
[INFO] [stdout] help: consider dereferencing the borrow
[INFO] [stdout]     |
[INFO] [stdout] 619 |                             self.symbols.set_var_type(*name, val_ty)?;
[INFO] [stdout]     |                                                       +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `?` couldn't convert the error to `TypeError`
[INFO] [stdout]    --> src/compiler/type_checker.rs:619:68
[INFO] [stdout]     |
[INFO] [stdout] 619 | ...                   self.symbols.set_var_type(name, val_ty)?;
[INFO] [stdout]     |                                    --------------------------^ the trait `From<ResolveError>` is not implemented for `TypeError`
[INFO] [stdout]     |                                    |
[INFO] [stdout]     |                                    this can't be annotated with `?` because it has type `Result<_, ResolveError>`
[INFO] [stdout]     |
[INFO] [stdout] note: `TypeError` needs to implement `From<ResolveError>`
[INFO] [stdout]    --> src/compiler/type_checker.rs:95:1
[INFO] [stdout]     |
[INFO] [stdout]  95 | pub struct TypeError {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] note: alternatively, `ResolveError` needs to implement `Into<TypeError>`
[INFO] [stdout]    --> src/compiler/resolver.rs:31:1
[INFO] [stdout]     |
[INFO] [stdout]  31 | pub struct ResolveError {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: the question mark operation (`?`) implicitly performs a conversion on the error value using the `From` trait
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 2 arguments but 1 argument was supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:624:38
[INFO] [stdout]     |
[INFO] [stdout] 624 |                     last_type = self.infer_expr(expr)?;
[INFO] [stdout]     |                                      ^^^^^^^^^^------
[INFO] [stdout]     |                                                ||
[INFO] [stdout]     |                                                |expected `&Expr`, found `&ExprId`
[INFO] [stdout]     |                                                argument #2 of type `&mut AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected reference `&Expr`
[INFO] [stdout]                found reference `&ExprId`
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:311:12
[INFO] [stdout]     |
[INFO] [stdout] 311 |     pub fn infer_expr(&mut self, expr: &Expr, ast: &mut AstArena) -> Result<Type, TypeError> {
[INFO] [stdout]     |            ^^^^^^^^^^            -----------  ------------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 624 -                     last_type = self.infer_expr(expr)?;
[INFO] [stdout] 624 +                     last_type = self.infer_expr(/* &Expr */, /* &mut AstArena */)?;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Void` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:628:50
[INFO] [stdout]     |
[INFO] [stdout] 628 | ...                   kind: Box::new(Type::Void),
[INFO] [stdout]     |                                            ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Void` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `TypeKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/type_checker.rs:642:25
[INFO] [stdout]     |
[INFO] [stdout] 642 |                 match (&*lhs.kind, &*rhs.kind) {
[INFO] [stdout]     |                         ^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `TypeKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/type_checker.rs:642:37
[INFO] [stdout]     |
[INFO] [stdout] 642 |                 match (&*lhs.kind, &*rhs.kind) {
[INFO] [stdout]     |                                     ^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Int` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:643:28
[INFO] [stdout]     |
[INFO] [stdout] 643 |                     (Type::Int, Type::Int) => Ok(Type {
[INFO] [stdout]     |                            ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Int` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Int` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:643:39
[INFO] [stdout]     |
[INFO] [stdout] 643 |                     (Type::Int, Type::Int) => Ok(Type {
[INFO] [stdout]     |                                       ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Int` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Float` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:647:28
[INFO] [stdout]     |
[INFO] [stdout] 647 |                     (Type::Float, Type::Float) => Ok(Type {
[INFO] [stdout]     |                            ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Float` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Float` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:647:41
[INFO] [stdout]     |
[INFO] [stdout] 647 |                     (Type::Float, Type::Float) => Ok(Type {
[INFO] [stdout]     |                                         ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Float` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Int` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:644:46
[INFO] [stdout]     |
[INFO] [stdout] 644 |                         kind: Box::new(Type::Int),
[INFO] [stdout]     |                                              ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Int` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Float` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:648:46
[INFO] [stdout]     |
[INFO] [stdout] 648 |                         kind: Box::new(Type::Float),
[INFO] [stdout]     |                                              ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Float` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:651:66
[INFO] [stdout]     |
[INFO] [stdout] 651 |                     _ => Err(format!("Cannot apply {op} to types {lhs} and {rhs}")),
[INFO] [stdout]     |                                                                  ^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&Type` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 3 arguments but 2 arguments were supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:656:25
[INFO] [stdout]     |
[INFO] [stdout] 656 |                 if self.types_compatible(lhs, rhs) {
[INFO] [stdout]     |                         ^^^^^^^^^^^^^^^^---------- argument #3 of type `&AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:681:8
[INFO] [stdout]     |
[INFO] [stdout] 681 |     fn types_compatible(&self, actual: &Type, expected: &Type, ast: &AstArena) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^                                        --------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 656 |                 if self.types_compatible(lhs, rhs, /* &AstArena */) {
[INFO] [stdout]     |                                                  +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Bool` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:659:46
[INFO] [stdout]     |
[INFO] [stdout] 659 |                         kind: Box::new(Type::Bool),
[INFO] [stdout]     |                                              ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Bool` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:663:55
[INFO] [stdout]     |
[INFO] [stdout] 663 |                     Err(format!("Cannot compare types {lhs} and {rhs}"))
[INFO] [stdout]     |                                                       ^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&Type` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `TypeKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/type_checker.rs:668:25
[INFO] [stdout]     |
[INFO] [stdout] 668 |                 match (&*lhs.kind, &*rhs.kind) {
[INFO] [stdout]     |                         ^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0614]: type `TypeKind` cannot be dereferenced
[INFO] [stdout]    --> src/compiler/type_checker.rs:668:37
[INFO] [stdout]     |
[INFO] [stdout] 668 |                 match (&*lhs.kind, &*rhs.kind) {
[INFO] [stdout]     |                                     ^^^^^^^^^ can't be dereferenced
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Int` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:669:28
[INFO] [stdout]     |
[INFO] [stdout] 669 |                     (Type::Int, Type::Int) | (Type::Float, Type::Float) => {
[INFO] [stdout]     |                            ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Int` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Int` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:669:39
[INFO] [stdout]     |
[INFO] [stdout] 669 |                     (Type::Int, Type::Int) | (Type::Float, Type::Float) => {
[INFO] [stdout]     |                                       ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Int` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Float` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:669:53
[INFO] [stdout]     |
[INFO] [stdout] 669 |                     (Type::Int, Type::Int) | (Type::Float, Type::Float) => {
[INFO] [stdout]     |                                                     ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Float` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Float` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:669:66
[INFO] [stdout]     |
[INFO] [stdout] 669 |                     (Type::Int, Type::Int) | (Type::Float, Type::Float) => {
[INFO] [stdout]     |                                                                  ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Float` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Bool` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:671:50
[INFO] [stdout]     |
[INFO] [stdout] 671 | ...                   kind: Box::new(Type::Bool),
[INFO] [stdout]     |                                            ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Bool` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0277]: `Type` doesn't implement `std::fmt::Display`
[INFO] [stdout]    --> src/compiler/type_checker.rs:675:60
[INFO] [stdout]     |
[INFO] [stdout] 675 |                     _ => Err(format!("Cannot compare types {lhs} and {rhs}")),
[INFO] [stdout]     |                                                            ^^^^^ `Type` cannot be formatted with the default formatter
[INFO] [stdout]     |
[INFO] [stdout] help: the trait `std::fmt::Display` is not implemented for `Type`
[INFO] [stdout]    --> src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
[INFO] [stdout]     = note: required for `&Type` to implement `std::fmt::Display`
[INFO] [stdout]     = note: this error originates in the macro `$crate::__export::format_args` which comes from the expansion of the macro `format` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Unknown` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:683:20
[INFO] [stdout]     |
[INFO] [stdout] 683 |             (Type::Unknown, _) | (_, Type::Unknown) => todo!("handle unknown type"),
[INFO] [stdout]     |                    ^^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Unknown` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Unknown` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:683:44
[INFO] [stdout]     |
[INFO] [stdout] 683 |             (Type::Unknown, _) | (_, Type::Unknown) => todo!("handle unknown type"),
[INFO] [stdout]     |                                            ^^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Unknown` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Any` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:684:20
[INFO] [stdout]     |
[INFO] [stdout] 684 |             (Type::Any, _) | (_, Type::Any) => true,
[INFO] [stdout]     |                    ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Any` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Any` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:684:40
[INFO] [stdout]     |
[INFO] [stdout] 684 |             (Type::Any, _) | (_, Type::Any) => true,
[INFO] [stdout]     |                                        ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Any` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Never` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:685:20
[INFO] [stdout]     |
[INFO] [stdout] 685 |             (Type::Never, _) => true,
[INFO] [stdout]     |                    ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Never` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Int` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:686:20
[INFO] [stdout]     |
[INFO] [stdout] 686 |             (Type::Int, Type::Int) => true,
[INFO] [stdout]     |                    ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Int` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Int` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:686:31
[INFO] [stdout]     |
[INFO] [stdout] 686 |             (Type::Int, Type::Int) => true,
[INFO] [stdout]     |                               ^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Int` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Float` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:687:20
[INFO] [stdout]     |
[INFO] [stdout] 687 |             (Type::Float, Type::Float) => true,
[INFO] [stdout]     |                    ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Float` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Float` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:687:33
[INFO] [stdout]     |
[INFO] [stdout] 687 |             (Type::Float, Type::Float) => true,
[INFO] [stdout]     |                                 ^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Float` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Bool` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:688:20
[INFO] [stdout]     |
[INFO] [stdout] 688 |             (Type::Bool, Type::Bool) => true,
[INFO] [stdout]     |                    ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Bool` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Bool` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:688:32
[INFO] [stdout]     |
[INFO] [stdout] 688 |             (Type::Bool, Type::Bool) => true,
[INFO] [stdout]     |                                ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Bool` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `String` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:689:20
[INFO] [stdout]     |
[INFO] [stdout] 689 |             (Type::String, Type::String) => true,
[INFO] [stdout]     |                    ^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `String` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `String` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:689:34
[INFO] [stdout]     |
[INFO] [stdout] 689 |             (Type::String, Type::String) => true,
[INFO] [stdout]     |                                  ^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `String` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Void` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:690:20
[INFO] [stdout]     |
[INFO] [stdout] 690 |             (Type::Void, Type::Void) => true,
[INFO] [stdout]     |                    ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Void` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Void` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:690:32
[INFO] [stdout]     |
[INFO] [stdout] 690 |             (Type::Void, Type::Void) => true,
[INFO] [stdout]     |                                ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Void` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Path` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:691:20
[INFO] [stdout]     |
[INFO] [stdout] 691 |             (Type::Path(a), Type::Path(b)) => todo!("resolve paths"),
[INFO] [stdout]     |                    ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Path` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Path` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:691:35
[INFO] [stdout]     |
[INFO] [stdout] 691 |             (Type::Path(a), Type::Path(b)) => todo!("resolve paths"),
[INFO] [stdout]     |                                   ^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Path` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Optional` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:692:20
[INFO] [stdout]     |
[INFO] [stdout] 692 |             (Type::Optional(a), Type::Optional(b)) => {
[INFO] [stdout]     |                    ^^^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Optional` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `Optional` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:692:39
[INFO] [stdout]     |
[INFO] [stdout] 692 |             (Type::Optional(a), Type::Optional(b)) => {
[INFO] [stdout]     |                                       ^^^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `Optional` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0223]: ambiguous associated type
[INFO] [stdout]    --> src/compiler/type_checker.rs:695:14
[INFO] [stdout]     |
[INFO] [stdout] 695 |             (Type::Array { ty, len }, Type::Array { ty, len }) => todo!("handle array types"),
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if there were a trait named `Example` with associated type `Array` implemented for `Type`, you could use the fully-qualified path
[INFO] [stdout]     |
[INFO] [stdout] 695 -             (Type::Array { ty, len }, Type::Array { ty, len }) => todo!("handle array types"),
[INFO] [stdout] 695 +             (<Type as Example>::Array { ty, len }, Type::Array { ty, len }) => todo!("handle array types"),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0223]: ambiguous associated type
[INFO] [stdout]    --> src/compiler/type_checker.rs:695:39
[INFO] [stdout]     |
[INFO] [stdout] 695 |             (Type::Array { ty, len }, Type::Array { ty, len }) => todo!("handle array types"),
[INFO] [stdout]     |                                       ^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: if there were a trait named `Example` with associated type `Array` implemented for `Type`, you could use the fully-qualified path
[INFO] [stdout]     |
[INFO] [stdout] 695 -             (Type::Array { ty, len }, Type::Array { ty, len }) => todo!("handle array types"),
[INFO] [stdout] 695 +             (Type::Array { ty, len }, <Type as Example>::Array { ty, len }) => todo!("handle array types"),
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `DynArray` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:696:20
[INFO] [stdout]     |
[INFO] [stdout] 696 |             (Type::DynArray(a), Type::DynArray(b)) => self.types_compatible(a, b),
[INFO] [stdout]     |                    ^^^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `DynArray` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no associated item named `DynArray` found for struct `Type` in the current scope
[INFO] [stdout]    --> src/compiler/type_checker.rs:696:39
[INFO] [stdout]     |
[INFO] [stdout] 696 |             (Type::DynArray(a), Type::DynArray(b)) => self.types_compatible(a, b),
[INFO] [stdout]     |                                       ^^^^^^^^ associated item not found in `Type`
[INFO] [stdout]     |
[INFO] [stdout]    ::: src/compiler/ast.rs:249:1
[INFO] [stdout]     |
[INFO] [stdout] 249 | pub struct Type {
[INFO] [stdout]     | --------------- associated item `DynArray` not found for this struct
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0061]: this method takes 3 arguments but 2 arguments were supplied
[INFO] [stdout]    --> src/compiler/type_checker.rs:696:60
[INFO] [stdout]     |
[INFO] [stdout] 696 |             (Type::DynArray(a), Type::DynArray(b)) => self.types_compatible(a, b),
[INFO] [stdout]     |                                                            ^^^^^^^^^^^^^^^^------ argument #3 of type `&AstArena` is missing
[INFO] [stdout]     |
[INFO] [stdout] note: method defined here
[INFO] [stdout]    --> src/compiler/type_checker.rs:681:8
[INFO] [stdout]     |
[INFO] [stdout] 681 |     fn types_compatible(&self, actual: &Type, expected: &Type, ast: &AstArena) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^                                        --------------
[INFO] [stdout] help: provide the argument
[INFO] [stdout]     |
[INFO] [stdout] 696 |             (Type::DynArray(a), Type::DynArray(b)) => self.types_compatible(a, b, /* &AstArena */),
[INFO] [stdout]     |                                                                                 +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking criterion v0.7.0
[INFO] [stdout] Some errors have detailed explanations: E0061, E0223, E0252, E0277, E0308, E0416, E0425, E0599, E0609...
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0061`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `talkscript` (lib) due to 214 previous errors; 4 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] running `Command { std: "docker" "inspect" "f728b84a867f823eb3fe8f1329d38b9d5bb745d105d1f7dbe46611467cf2dd7b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f728b84a867f823eb3fe8f1329d38b9d5bb745d105d1f7dbe46611467cf2dd7b", kill_on_drop: false }`
[INFO] [stdout] f728b84a867f823eb3fe8f1329d38b9d5bb745d105d1f7dbe46611467cf2dd7b
