Summary

csi2 (0/1)

build (fail)
          {"type"=>"Failed to clone csi2 from https://codeberg.com/TheZoq2/spade-csi2.git", "message"=>""}
        

ecp5stubs (1/1)

build (success)
          
        

ethernet (0/1)

build (fail)
          {"type"=>"Failed to clone ethernet from https://codeberg.com/TheZoq2/ethernet.git", "message"=>""}
        

fixed (1/1)

build (success)
          
        

mcp3002 (0/1)

build (fail)
          {"type"=>"Failed to clone mcp3002 from https://codeberg.com/TheZoq2/mcp3002-spade.git", "message"=>""}
        

playground_blinky (1/1)

build (success)
          
        

playground_floppy_fish (1/1)

build (success)
          
        

playground_tinytapeout (1/1)

build (success)
          
        

playground_vga (1/1)

build (success)
          
        

protocols (2/2)

build (success)
          
        
test (success)
          
        

quickscope (0/1)

build (fail)
          {"type"=>"Failed to clone quickscope from https://codeberg.com/TheZoq2/quickscope.git", "message"=>""}
        

ready_valid (0/1)

build (fail)
          [INFO] Failed to fetch pre-built Spade compiler, building locally.
========
Reason: Did not find a pre-built Spade compiler for git hash "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[INFO] Building Spade Compiler
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on build directory
    Finished `release` profile [optimized] target(s) in 5m 00s
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[INFO] Building spade-surfer-plugin
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on build directory
    Blocking waiting for file lock on build directory
   Compiling serde_core v1.0.228
   Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
  |
  = note: the `wasm32-unknown-unknown` target may not be installed
  = help: consider downloading the target with `rustup target add wasm32-unknown-unknown`

For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
  |
  = note: the `wasm32-unknown-unknown` target may not be installed
  = help: consider downloading the target with `rustup target add wasm32-unknown-unknown`

error: could not compile `num-traits` (lib) due to 1 previous error

[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Cloning "nstd"
[INFO] Building spade code
[ERROR] Failed to build spade code
Cloning into '/builds/spade-lang/trawler/work/ready_valid/build/libs/nstd'...
HEAD is now at b6de7c2 Remove deprecated *
error: [std::array::T; std::array::N] already has a method named all
   ┌─ <compiler dir>/stdlib/array.spade:82:5
   │  
82 │ ╭     fn all(self, f: impl Fn(T) -> bool) -> bool {
83 │ │         gen if N == 0 {
84 │ │             true
85 │ │         } else {
86 │ │             self.map(f).reduce_and()
87 │ │         }
88 │ │     }
   │ ╰─────^ Duplicate method
   │  
   ┌─ build/libs/nstd/src/array.spade:41:9
   │  
41 │       pub fn all<F>(self, f: F) -> bool
   │ ╭─────────'
42 │ │         where F: Fn(T) -> bool
43 │ │     {
44 │ │         self
45 │ │             .map(f)
46 │ │             .fold(true, fn |acc, next| {acc && next})
47 │ │     }
   │ ╰─────' Previous definition here

error: [std::array::T; std::array::N] already has a method named fold
    ┌─ <compiler dir>/stdlib/array.spade:195:5
    │  
195 │ ╭     fn fold<B>(self, init: B, f: impl Fn(B, T) -> B) -> B {
196 │ │         gen if N == 0 {
197 │ │             init
198 │ │         } else {
    · │
201 │ │         }
202 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:29:9
    │  
 29 │       pub fn fold<F, Acc>(self, init: Acc, f: F) -> Acc
    │ ╭─────────'
 30 │ │         where F: Fn(Acc, T) -> Acc
 31 │ │     {
 32 │ │         gen if N == 0 {
    · │
 38 │ │         }
 39 │ │     }
    │ ╰─────' Previous definition here

error: [std::array::T; std::array::N] already has a method named any
    ┌─ <compiler dir>/stdlib/array.spade:103:5
    │  
103 │ ╭     fn any(self, f: impl Fn(T) -> bool) -> bool {
104 │ │         gen if N == 0 {
105 │ │             false
106 │ │         } else {
107 │ │             self.map(f).reduce_or()
108 │ │         }
109 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:49:9
    │  
 49 │       pub fn any<F>(self, f: F) -> bool
    │ ╭─────────'
 50 │ │         where F: Fn(T) -> bool
 51 │ │     {
 52 │ │         self
 53 │ │             .map(f)
 54 │ │             .fold(false, fn |acc, next| {acc || next})
 55 │ │     }
    │ ╰─────' Previous definition here

error: [std::array::T; std::array::N] already has a method named chunks
    ┌─ <compiler dir>/stdlib/array.spade:130:5
    │  
130 │ ╭     fn chunks<#uint ChunkSize>(self) -> [[T; ChunkSize]; {N / ChunkSize}]
131 │ │     where
132 │ │         N == N / ChunkSize * ChunkSize else "The size of the input array must be a multiple of the chunk size"
133 │ │     {
    · │
138 │ │         }
139 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:77:5
    │  
 77 │ ╭     fn chunks<#uint Size>(self) -> [[T; Size]; {N/Size}] {
 78 │ │         gen if N == Size {
 79 │ │             [self]
 80 │ │         } else {
 81 │ │             [self[0..Size]].concat(self[Size..N].chunks())
 82 │ │         }
 83 │ │     }
    │ ╰─────' Previous definition here

error: [[std::array::T; std::array::M]; std::array::N] already has a method named flatten
    ┌─ <compiler dir>/stdlib/array.spade:497:5
    │  
497 │ ╭     fn flatten(self) -> [T; {N * M}] {
498 │ │         gen if N == 0 {
499 │ │             []
500 │ │         } else if N == 1 {
    · │
507 │ │         }
508 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:99:9
    │  
 99 │       pub fn flatten<#uint O>(self) -> [T; O]
    │ ╭─────────'
100 │ │         where O: {N*M}
101 │ │     {
102 │ │         gen if N == 0 {
    · │
106 │ │         }
107 │ │     }
    │ ╰─────' Previous definition here

Error: aborting due to previous error

Location:
    spade-compiler/src/main.rs:169:23
Error: 
   0: Failed to build spade code

Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.

        

spade-v (2/2)

build (success)
          
        
test (success)
          
        

spade-v-hwtest-uart (0/3)

build (fail)
          [WARN] swim.toml contains 1 unknown field:
[WARN]   synthesis.?.extra_verilog
[INFO] Failed to fetch pre-built Spade compiler, building locally.
========
Reason: Did not find a pre-built Spade compiler for git hash "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[INFO] Building Spade Compiler
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on build directory
    Finished `release` profile [optimized] target(s) in 4m 56s
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[INFO] Building spade-surfer-plugin
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on build directory
    Blocking waiting for file lock on build directory
   Compiling serde_core v1.0.228
   Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
  |
  = note: the `wasm32-unknown-unknown` target may not be installed
  = help: consider downloading the target with `rustup target add wasm32-unknown-unknown`

For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
  |
  = note: the `wasm32-unknown-unknown` target may not be installed
  = help: consider downloading the target with `rustup target add wasm32-unknown-unknown`

error: could not compile `num-traits` (lib) due to 1 previous error

[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Cloning "protocols"
[INFO] Cloning "ready_valid"
[INFO] Cloning "nstd"
[INFO] Building spade code
[ERROR] Failed to build spade code
Cloning into '/builds/spade-lang/trawler/work/spade-v-hwtest-uart/hwtest_uart/build/libs/protocols'...
HEAD is now at 3170518 Fix tests
Cloning into '/builds/spade-lang/trawler/work/spade-v-hwtest-uart/hwtest_uart/build/libs/ready_valid'...
HEAD is now at d029c73 Bump Spade again
Cloning into '/builds/spade-lang/trawler/work/spade-v-hwtest-uart/hwtest_uart/build/libs/nstd'...
HEAD is now at 92b6b79 Add pub markers
warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:26:14
   │
26 │     led: inv &bool,
   │              ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:78:20
   │
78 │     reset_led: inv &bool,
   │                    ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:80:24
   │
80 │     load_done_led: inv &bool,
   │                        ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:82:22
   │
82 │     program_led: inv &bool
   │                      ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/ready_valid/src/option_ext.spade:18:25
   │
18 │         write_full: inv &bool,
   │                         ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The port keyword no longer has any effect on structs.
  ┌─ build/libs/ready_valid/src/main.spade:7:12
  │
7 │ pub struct port Rv<T> {
  │            ^^^^ struct port and struct are now the same thing
  │
  = Consider removing `port`
  │
7 │ pub struct port Rv<T> {
  │            ----

warning: The & modifier on types no longer has any effect
  ┌─ build/libs/ready_valid/src/main.spade:8:11
  │
8 │     data: &Option<T>,
  │           ^ Useless &
  │
  = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
  ┌─ build/libs/ready_valid/src/main.spade:9:16
  │
9 │     ready: inv &bool
  │                ^ Useless &
  │
  = help: Spade no longer differentiates types from ports at the individual type level

warning: The port keyword no longer has any effect on structs.
    ┌─ build/libs/ready_valid/src/main.spade:148:8
    │
148 │ struct port FifoOut<T> {
    │        ^^^^ struct port and struct are now the same thing
    │
    = Consider removing `port`
    │
148 │ struct port FifoOut<T> {
    │        ----

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/ready_valid/src/main.spade:149:11
    │
149 │     full: &bool,
    │           ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/ready_valid/src/main.spade:150:12
    │
150 │     empty: &bool,
    │            ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

error: Unexpected `:`, expected `Identifier`
    ┌─ build/libs/ready_valid/src/main.spade:155:33
    │
155 │     pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
    │                                 ^ expected `Identifier`

error: Unexpected `:`, expected `Identifier`
    ┌─ build/libs/ready_valid/src/main.spade:161:32
    │
161 │     pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
    │                                ^ expected `Identifier`

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:14:16
   │
14 │     ready: inv &bool,
   │                ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:16:15
   │
16 │     sclk: inv &bool,
   │               ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:17:15
   │
17 │     mosi: inv &bool,
   │               ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:18:11
   │
18 │     miso: &bool,
   │           ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/uart.spade:117:17
    │
117 │         tx: inv &bool
    │                 ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/i2c.spade:87:16
   │
87 │     ready: inv &bool,
   │                ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/i2c.spade:89:15
   │
89 │     sclk: inv &bool,
   │               ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/i2c.spade:91:24
   │
91 │     sda_drive_low: inv &bool,
   │                        ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/i2c.spade:221:15
    │
221 │     sclk: inv &bool,
    │               ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/i2c.spade:223:24
    │
223 │     sda_drive_low: inv &bool,
    │                        ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/i2c.spade:227:16
    │
227 │     ready: inv &bool
    │                ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: Deprecated type-level function `uint_bits_to_fit`
  ┌─ build/libs/ready_valid/src/option_ext.spade:9:11
  │
9 │ where O: {uint_bits_to_fit(V) - 1},
  │           ^^^^^^^^^^^^^^^^
  │
  = Use `uint::bits_for` instead
  │
9 │ where O: {uint::bits_for(V) - 1},
  │           ~~~~~~~~~~~~~~

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/ready_valid/src/option_ext.spade:10:11
   │
10 │       O: {uint_bits_to_fit(V - 1)}
   │           ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
10 │       O: {uint::bits_for(V - 1)}
   │           ~~~~~~~~~~~~~~

warning: Deprecated type-level function `uint_bits_to_fit`
  ┌─ build/libs/nstd/src/mem.spade:9:15
  │
9 │     where W: {uint_bits_to_fit(C)}
  │               ^^^^^^^^^^^^^^^^
  │
  = Use `uint::bits_for` instead
  │
9 │     where W: {uint::bits_for(C)}
  │               ~~~~~~~~~~~~~~

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:49:27
   │
49 │             range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
   │                           ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:49:48
   │
49 │             range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
   │                                                ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:52:49
   │
52 │         let _ = inst led_driver(clk, LED_RANGE, &data_control_signals, led);
   │                                                 ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:53:59
   │
53 │         let timer_out = inst timer(clk, rst, TIMER_RANGE, &data_control_signals);
   │                                                           ^ Useless operator

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:57:32
   │
57 │             if zext(address) < LOWER_DATA_MEM_RANGE#1 { lower_data_mem_out }
   │                                ^^^^^^^^^^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:58:37
   │
58 │             else if zext(address) < LED_RANGE#1 { 0 }
   │                                     ^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:59:37
   │
59 │             else if zext(address) < TIMER_RANGE#1 { stage(-1).timer_out }
   │                                     ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:63:56
   │
63 │             data: Bus $(control: data_control, result: &read_value),
   │                                                        ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:64:63
   │
64 │             instruction: Bus $(control: insn_control, result: &insn_mem_out),
   │                                                               ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:65:24
   │
65 │             load_done: &load_signals.done,
   │                        ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ src/led_blink.spade:112:23
    │
112 │     set program_led = &inst read_mut_wire(led);
    │                       ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ src/led_blink.spade:113:25
    │
113 │     set load_done_led = &load_port.done;
    │                         ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ src/led_blink.spade:114:21
    │
114 │     set reset_led = &rst;
    │                     ^ Useless operator

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/ready_valid/src/option_ext.spade:25:42
   │
25 │         let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
   │                                          ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
25 │         let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
   │                                          ~~~~~~~~~~~~~~

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/option_ext.spade:32:27
   │
32 │         set write.write = &self;
   │                           ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:22:57
   │
22 │         reg(clk) value reset(rst: None) = match (value, *self.data) {
   │                                                         ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:32:26
   │
32 │         set self.ready = &value.is_none();
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:35:19
   │
35 │             data: &value,
   │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:42:51
   │
42 │         reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
   │                                                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:42:64
   │
42 │         reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
   │                                                                ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:54:34
   │
54 │         set self.ready = &match (*ds, buffer) {
   │                                  ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:54:26
   │
54 │         set self.ready = &match (*ds, buffer) {
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:61:12
   │
61 │         Rv(&buffer, ds_inv)
   │            ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:65:26
   │
65 │         set self.ready = &false;
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:69:26
   │
69 │         set self.ready = &true;
   │                          ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:75:21
   │
75 │             data: &(*self.data).map(f),
   │                     ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:75:19
   │
75 │             data: &(*self.data).map(f),
   │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:83:21
   │
83 │             data: &(*self.data).and_then(f),
   │                     ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:83:19
   │
83 │             data: &(*self.data).and_then(f),
   │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:89:27
   │
89 │         let self_takes = (*self.data).is_some();
   │                           ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:94:44
   │
94 │         set other.ready = &(!self_takes && *ds_ready);
   │                                            ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:94:27
   │
94 │         set other.ready = &(!self_takes && *ds_ready);
   │                           ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:114:48
    │
114 │         set ready = if gate {ds_ready.0} else {&false};
    │                                                ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:116:34
    │
116 │             if gate {data} else {&None},
    │                                  ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:132:29
    │
132 │             match (timeout, *data, *ds_ready.0) {
    │                             ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:132:36
    │
132 │             match (timeout, *data, *ds_ready.0) {
    │                                    ^ Useless operator

warning: Deprecated type-level function `uint_bits_to_fit`
    ┌─ build/libs/ready_valid/src/main.spade:131:33
    │
131 │         reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
    │                                 ^^^^^^^^^^^^^^^^
    │
    = Use `uint::bits_for` instead
    │
131 │         reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
    │                                 ~~~~~~~~~~~~~~

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:139:23
    │
139 │         set ready = &(*ds_ready.0 && timeout == 0);
    │                       ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:139:21
    │
139 │         set ready = &(*ds_ready.0 && timeout == 0);
    │                     ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:140:41
    │
140 │         Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
    │                                         ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:178:28
    │
178 │         set self.ready = &!*write_full.0;
    │                            ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:178:26
    │
178 │         set self.ready = &!*write_full.0;
    │                          ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:179:32
    │
179 │         let Rv(data, ready) = (*self.data)
    │                                ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:187:22
    │
187 │             empty: &(*data).is_none(),
    │                      ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:187:20
    │
187 │             empty: &(*data).is_none(),
    │                    ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:208:51
    │
208 │             match (state, inst read_mut_wire(ds), *self.data) {
    │                                                   ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:218:26
    │
218 │         set self.ready = &match state {
    │                          ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:223:34
    │
223 │         let data = match (state, *self.data) {
    │                                  ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:231:19
    │
231 │             data: &data,
    │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:242:17
    │
242 │          match (*data, num_left, *ds_ready.0) {
    │                 ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:242:34
    │
242 │          match (*data, num_left, *ds_ready.0) {
    │                                  ^ Useless operator

warning: Deprecated type-level function `uint_bits_to_fit`
    ┌─ build/libs/ready_valid/src/main.spade:241:50
    │
241 │       reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
    │                                                  ^^^^^^^^^^^^^^^^
    │
    = Use `uint::bits_for` instead
    │
241 │       reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
    │                                                  ~~~~~~~~~~~~~~

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:250:55
    │
250 │       set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
    │                                                       ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:250:19
    │
250 │       set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
    │                   ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:253:10
    │
253 │          &match num_left {
    │          ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:273:24
    │
273 │     let rv = Rv$(data: &value, ready: inst new_mut_wire());
    │                        ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:276:21
    │
276 │     set out.ready = &ready;
    │                     ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:277:5
    │
277 │     *out.data
    │     ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:286:24
    │
286 │     let rv = Rv$(data: &value, ready: inst new_mut_wire());
    │                        ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:289:21
    │
289 │     set out.ready = &ready;
    │                     ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:290:5
    │
290 │     *out.data
    │     ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
   │
32 │         let (out, next_state) = match (state, (*self.data), *ds_ready) {
   │                                                ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
   │
32 │         let (out, next_state) = match (state, (*self.data), *ds_ready) {
   │                                                             ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
   │
54 │         set self.ready = &match (state, *ds_ready) {
   │                                         ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
   │
54 │         set self.ready = &match (state, *ds_ready) {
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
   │
60 │             &out,
   │             ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:44:17
   │
44 │     set ready = &match state {
   │                 ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:49:16
   │
49 │     set sclk = &match state {
   │                ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:56:16
   │
56 │     set mosi = &match state {
   │                ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:67:18
   │
67 │                 [*miso].concat(captured[0..7])
   │                  ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/test.spade:10:44
   │
10 │     let tx_out = inst uart_tx(clk, rst, Rv(&to_transmit, port.1), config);
   │                                            ^ Useless operator

warning: Use of deprecated unit
  ┌─ build/libs/protocols/src/uart.spade:2:5
  │
2 │ use std::ops::div_pow2;
  │     ^^^^^^^^^^^^^^^^^^
  │
  = note: Use `/` instead

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/protocols/src/uart.spade:34:23
   │
34 │                 match *transmit.data {
   │                       ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/uart.spade:97:26
   │
97 │     set transmit.ready = &match state {
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/uart.spade:119:18
    │
119 │         set tx = &inst uart_tx(clk, rst, self, config);
    │                  ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:143:17
    │
143 │     set ready = &match (state, inst read_mut_wire(emitter_ready)) {
    │                 ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:168:25
    │
168 │     set sda_drive_low = &match state {
    │                         ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:179:16
    │
179 │     set sclk = &match state {
    │                ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:271:16
    │
271 │     set sclk = &sclk_driver_out.sclk;
    │                ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:273:25
    │
273 │     set sda_drive_low = &match state {
    │                         ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:283:17
    │
283 │     set ready = &match state {
    │                 ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/nstd/src/mem.spade:25:77
   │
25 │     (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
   │                                                                             ^ Useless operator

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/nstd/src/array.spade:70:19
   │
70 │     where NSize: {uint_bits_to_fit(N-1)}
   │                   ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
70 │     where NSize: {uint::bits_for(N-1)}
   │                   ~~~~~~~~~~~~~~

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/nstd/src/array.spade:70:19
   │
70 │     where NSize: {uint_bits_to_fit(N-1)}
   │                   ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
70 │     where NSize: {uint::bits_for(N-1)}
   │                   ~~~~~~~~~~~~~~

error: [std::array::T; std::array::N] already has a method named all
   ┌─ <compiler dir>/stdlib/array.spade:82:5
   │  
82 │ ╭     fn all(self, f: impl Fn(T) -> bool) -> bool {
83 │ │         gen if N == 0 {
84 │ │             true
85 │ │         } else {
86 │ │             self.map(f).reduce_and()
87 │ │         }
88 │ │     }
   │ ╰─────^ Duplicate method
   │  
   ┌─ build/libs/nstd/src/array.spade:41:9
   │  
41 │       pub fn all<F>(self, f: F) -> bool
   │ ╭─────────'
42 │ │         where F: Fn(T) -> bool
43 │ │     {
44 │ │         self
45 │ │             .map(f)
46 │ │             .fold(true, fn |acc, next| {acc && next})
47 │ │     }
   │ ╰─────' Previous definition here

error: [std::array::T; std::array::N] already has a method named fold
    ┌─ <compiler dir>/stdlib/array.spade:195:5
    │  
195 │ ╭     fn fold<B>(self, init: B, f: impl Fn(B, T) -> B) -> B {
196 │ │         gen if N == 0 {
197 │ │             init
198 │ │         } else {
    · │
201 │ │         }
202 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:29:9
    │  
 29 │       pub fn fold<F, Acc>(self, init: Acc, f: F) -> Acc
    │ ╭─────────'
 30 │ │         where F: Fn(Acc, T) -> Acc
 31 │ │     {
 32 │ │         gen if N == 0 {
    · │
 38 │ │         }
 39 │ │     }
    │ ╰─────' Previous definition here

error: [std::array::T; std::array::N] already has a method named any
    ┌─ <compiler dir>/stdlib/array.spade:103:5
    │  
103 │ ╭     fn any(self, f: impl Fn(T) -> bool) -> bool {
104 │ │         gen if N == 0 {
105 │ │             false
106 │ │         } else {
107 │ │             self.map(f).reduce_or()
108 │ │         }
109 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:49:9
    │  
 49 │       pub fn any<F>(self, f: F) -> bool
    │ ╭─────────'
 50 │ │         where F: Fn(T) -> bool
 51 │ │     {
 52 │ │         self
 53 │ │             .map(f)
 54 │ │             .fold(false, fn |acc, next| {acc || next})
 55 │ │     }
    │ ╰─────' Previous definition here

error: [[std::array::T; std::array::M]; std::array::N] already has a method named flatten
    ┌─ <compiler dir>/stdlib/array.spade:497:5
    │  
497 │ ╭     fn flatten(self) -> [T; {N * M}] {
498 │ │         gen if N == 0 {
499 │ │             []
500 │ │         } else if N == 1 {
    · │
507 │ │         }
508 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:89:9
    │  
 89 │       pub fn flatten<#uint O>(self) -> [T; O]
    │ ╭─────────'
 90 │ │         where O: {N*M}
 91 │ │     {
 92 │ │         gen if N == 0 {
    · │
 96 │ │         }
 97 │ │     }
    │ ╰─────' Previous definition here

error: Trait bound not satisfied. inv bool does not implement core::marker::Data
   ┌─ src/led_blink.spade:26:5
   │    
26 │         led: inv &bool,
   │         ^^^
   │         │
   │         inv bool does not implement core::marker::Data
   │         The type of this argument is not Data which means it cannot be stored in a register.
27 │     ) -> Buses {
   │ ╭──────────────'
   │ │ ╭────────────'
28 │ │ │         // Build the bus signals
29 │ │ │         let data_control = inst new_mut_wire();
30 │ │ │         let insn_control = inst new_mut_wire();
   · │ │
66 │ │ │         )
67 │ │ │ }
   │ ╰─│─' Required because of the trait bound specified here
   │   ╰─' The value needs to be in a register because it is in this pipeline
   │    
   = help: An value not being Data typically means it contains at least one `inv` type
   = help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
   = Consider making the argument a wire
   │
26 │     wire led: inv &bool,
   │     +++++

error: No such argument: range
    ┌─ src/led_blink.spade:43:13
    │
 43 │             range: LOWER_DATA_MEM_RANGE,
    │             ^^^^^ No such argument
    │
    ┌─ ../src/memory.spade:114:5
    │  
114 │   pub pipeline(1) data_memory<#uint Size>(
    │ ╭─────'
115 │ │     clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │     where Size == 16384 else "Currently the size of the memory has to be 16384"
    · │
155 │ │         )
156 │ │ }
    │ ╰─' pipeline defined here

error: No such argument: range
    ┌─ src/led_blink.spade:49:13
    │
 49 │             range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
    │             ^^^^^ No such argument
    │
    ┌─ ../src/memory.spade:114:5
    │  
114 │   pub pipeline(1) data_memory<#uint Size>(
    │ ╭─────'
115 │ │     clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │     where Size == 16384 else "Currently the size of the memory has to be 16384"
    · │
155 │ │         )
156 │ │ }
    │ ╰─' pipeline defined here

Error: aborting due to previous error

Location:
    spade-compiler/src/main.rs:169:23
Error: 
   0: Failed to build spade code

Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.

        
pnr (fail)
          [WARN] swim.toml contains 1 unknown field:
[WARN]   synthesis.?.extra_verilog
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[INFO] Building spade-surfer-plugin
   Compiling serde_core v1.0.228
   Compiling num-traits v0.2.19
error[E0463]: can't find crate for `std`
  |
  = note: the `wasm32-unknown-unknown` target may not be installed
  = help: consider downloading the target with `rustup target add wasm32-unknown-unknown`

For more information about this error, try `rustc --explain E0463`.
error: could not compile `serde_core` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `core`
  |
  = note: the `wasm32-unknown-unknown` target may not be installed
  = help: consider downloading the target with `rustup target add wasm32-unknown-unknown`

error: could not compile `num-traits` (lib) due to 1 previous error

[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Building spade code
[ERROR] Failed to build spade code
HEAD is now at 3170518 Fix tests
HEAD is now at d029c73 Bump Spade again
HEAD is now at 92b6b79 Add pub markers
warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:26:14
   │
26 │     led: inv &bool,
   │              ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:78:20
   │
78 │     reset_led: inv &bool,
   │                    ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:80:24
   │
80 │     load_done_led: inv &bool,
   │                        ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:82:22
   │
82 │     program_led: inv &bool
   │                      ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:14:16
   │
14 │     ready: inv &bool,
   │                ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:16:15
   │
16 │     sclk: inv &bool,
   │               ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:17:15
   │
17 │     mosi: inv &bool,
   │               ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:18:11
   │
18 │     miso: &bool,
   │           ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/uart.spade:117:17
    │
117 │         tx: inv &bool
    │                 ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/i2c.spade:87:16
   │
87 │     ready: inv &bool,
   │                ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/i2c.spade:89:15
   │
89 │     sclk: inv &bool,
   │               ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/i2c.spade:91:24
   │
91 │     sda_drive_low: inv &bool,
   │                        ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/i2c.spade:221:15
    │
221 │     sclk: inv &bool,
    │               ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/i2c.spade:223:24
    │
223 │     sda_drive_low: inv &bool,
    │                        ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/i2c.spade:227:16
    │
227 │     ready: inv &bool
    │                ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/ready_valid/src/option_ext.spade:18:25
   │
18 │         write_full: inv &bool,
   │                         ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The port keyword no longer has any effect on structs.
  ┌─ build/libs/ready_valid/src/main.spade:7:12
  │
7 │ pub struct port Rv<T> {
  │            ^^^^ struct port and struct are now the same thing
  │
  = Consider removing `port`
  │
7 │ pub struct port Rv<T> {
  │            ----

warning: The & modifier on types no longer has any effect
  ┌─ build/libs/ready_valid/src/main.spade:8:11
  │
8 │     data: &Option<T>,
  │           ^ Useless &
  │
  = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
  ┌─ build/libs/ready_valid/src/main.spade:9:16
  │
9 │     ready: inv &bool
  │                ^ Useless &
  │
  = help: Spade no longer differentiates types from ports at the individual type level

warning: The port keyword no longer has any effect on structs.
    ┌─ build/libs/ready_valid/src/main.spade:148:8
    │
148 │ struct port FifoOut<T> {
    │        ^^^^ struct port and struct are now the same thing
    │
    = Consider removing `port`
    │
148 │ struct port FifoOut<T> {
    │        ----

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/ready_valid/src/main.spade:149:11
    │
149 │     full: &bool,
    │           ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/ready_valid/src/main.spade:150:12
    │
150 │     empty: &bool,
    │            ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

error: Unexpected `:`, expected `Identifier`
    ┌─ build/libs/ready_valid/src/main.spade:155:33
    │
155 │     pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
    │                                 ^ expected `Identifier`

error: Unexpected `:`, expected `Identifier`
    ┌─ build/libs/ready_valid/src/main.spade:161:32
    │
161 │     pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
    │                                ^ expected `Identifier`

warning: Deprecated type-level function `uint_bits_to_fit`
  ┌─ build/libs/nstd/src/mem.spade:9:15
  │
9 │     where W: {uint_bits_to_fit(C)}
  │               ^^^^^^^^^^^^^^^^
  │
  = Use `uint::bits_for` instead
  │
9 │     where W: {uint::bits_for(C)}
  │               ~~~~~~~~~~~~~~

warning: Deprecated type-level function `uint_bits_to_fit`
  ┌─ build/libs/ready_valid/src/option_ext.spade:9:11
  │
9 │ where O: {uint_bits_to_fit(V) - 1},
  │           ^^^^^^^^^^^^^^^^
  │
  = Use `uint::bits_for` instead
  │
9 │ where O: {uint::bits_for(V) - 1},
  │           ~~~~~~~~~~~~~~

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/ready_valid/src/option_ext.spade:10:11
   │
10 │       O: {uint_bits_to_fit(V - 1)}
   │           ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
10 │       O: {uint::bits_for(V - 1)}
   │           ~~~~~~~~~~~~~~

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:49:27
   │
49 │             range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
   │                           ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:49:48
   │
49 │             range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
   │                                                ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:52:49
   │
52 │         let _ = inst led_driver(clk, LED_RANGE, &data_control_signals, led);
   │                                                 ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:53:59
   │
53 │         let timer_out = inst timer(clk, rst, TIMER_RANGE, &data_control_signals);
   │                                                           ^ Useless operator

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:57:32
   │
57 │             if zext(address) < LOWER_DATA_MEM_RANGE#1 { lower_data_mem_out }
   │                                ^^^^^^^^^^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:58:37
   │
58 │             else if zext(address) < LED_RANGE#1 { 0 }
   │                                     ^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:59:37
   │
59 │             else if zext(address) < TIMER_RANGE#1 { stage(-1).timer_out }
   │                                     ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:63:56
   │
63 │             data: Bus $(control: data_control, result: &read_value),
   │                                                        ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:64:63
   │
64 │             instruction: Bus $(control: insn_control, result: &insn_mem_out),
   │                                                               ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:65:24
   │
65 │             load_done: &load_signals.done,
   │                        ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ src/led_blink.spade:112:23
    │
112 │     set program_led = &inst read_mut_wire(led);
    │                       ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ src/led_blink.spade:113:25
    │
113 │     set load_done_led = &load_port.done;
    │                         ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ src/led_blink.spade:114:21
    │
114 │     set reset_led = &rst;
    │                     ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:44:17
   │
44 │     set ready = &match state {
   │                 ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:49:16
   │
49 │     set sclk = &match state {
   │                ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:56:16
   │
56 │     set mosi = &match state {
   │                ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:67:18
   │
67 │                 [*miso].concat(captured[0..7])
   │                  ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/test.spade:10:44
   │
10 │     let tx_out = inst uart_tx(clk, rst, Rv(&to_transmit, port.1), config);
   │                                            ^ Useless operator

warning: Use of deprecated unit
  ┌─ build/libs/protocols/src/uart.spade:2:5
  │
2 │ use std::ops::div_pow2;
  │     ^^^^^^^^^^^^^^^^^^
  │
  = note: Use `/` instead

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/protocols/src/uart.spade:34:23
   │
34 │                 match *transmit.data {
   │                       ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/uart.spade:97:26
   │
97 │     set transmit.ready = &match state {
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/uart.spade:119:18
    │
119 │         set tx = &inst uart_tx(clk, rst, self, config);
    │                  ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:143:17
    │
143 │     set ready = &match (state, inst read_mut_wire(emitter_ready)) {
    │                 ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:168:25
    │
168 │     set sda_drive_low = &match state {
    │                         ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:179:16
    │
179 │     set sclk = &match state {
    │                ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:271:16
    │
271 │     set sclk = &sclk_driver_out.sclk;
    │                ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:273:25
    │
273 │     set sda_drive_low = &match state {
    │                         ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:283:17
    │
283 │     set ready = &match state {
    │                 ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/nstd/src/mem.spade:25:77
   │
25 │     (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
   │                                                                             ^ Useless operator

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/nstd/src/array.spade:70:19
   │
70 │     where NSize: {uint_bits_to_fit(N-1)}
   │                   ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
70 │     where NSize: {uint::bits_for(N-1)}
   │                   ~~~~~~~~~~~~~~

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/nstd/src/array.spade:70:19
   │
70 │     where NSize: {uint_bits_to_fit(N-1)}
   │                   ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
70 │     where NSize: {uint::bits_for(N-1)}
   │                   ~~~~~~~~~~~~~~

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/ready_valid/src/option_ext.spade:25:42
   │
25 │         let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
   │                                          ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
25 │         let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
   │                                          ~~~~~~~~~~~~~~

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/option_ext.spade:32:27
   │
32 │         set write.write = &self;
   │                           ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:22:57
   │
22 │         reg(clk) value reset(rst: None) = match (value, *self.data) {
   │                                                         ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:32:26
   │
32 │         set self.ready = &value.is_none();
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:35:19
   │
35 │             data: &value,
   │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:42:51
   │
42 │         reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
   │                                                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:42:64
   │
42 │         reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
   │                                                                ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:54:34
   │
54 │         set self.ready = &match (*ds, buffer) {
   │                                  ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:54:26
   │
54 │         set self.ready = &match (*ds, buffer) {
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:61:12
   │
61 │         Rv(&buffer, ds_inv)
   │            ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:65:26
   │
65 │         set self.ready = &false;
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:69:26
   │
69 │         set self.ready = &true;
   │                          ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:75:21
   │
75 │             data: &(*self.data).map(f),
   │                     ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:75:19
   │
75 │             data: &(*self.data).map(f),
   │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:83:21
   │
83 │             data: &(*self.data).and_then(f),
   │                     ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:83:19
   │
83 │             data: &(*self.data).and_then(f),
   │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:89:27
   │
89 │         let self_takes = (*self.data).is_some();
   │                           ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:94:44
   │
94 │         set other.ready = &(!self_takes && *ds_ready);
   │                                            ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:94:27
   │
94 │         set other.ready = &(!self_takes && *ds_ready);
   │                           ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:114:48
    │
114 │         set ready = if gate {ds_ready.0} else {&false};
    │                                                ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:116:34
    │
116 │             if gate {data} else {&None},
    │                                  ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:132:29
    │
132 │             match (timeout, *data, *ds_ready.0) {
    │                             ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:132:36
    │
132 │             match (timeout, *data, *ds_ready.0) {
    │                                    ^ Useless operator

warning: Deprecated type-level function `uint_bits_to_fit`
    ┌─ build/libs/ready_valid/src/main.spade:131:33
    │
131 │         reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
    │                                 ^^^^^^^^^^^^^^^^
    │
    = Use `uint::bits_for` instead
    │
131 │         reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
    │                                 ~~~~~~~~~~~~~~

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:139:23
    │
139 │         set ready = &(*ds_ready.0 && timeout == 0);
    │                       ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:139:21
    │
139 │         set ready = &(*ds_ready.0 && timeout == 0);
    │                     ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:140:41
    │
140 │         Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
    │                                         ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:178:28
    │
178 │         set self.ready = &!*write_full.0;
    │                            ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:178:26
    │
178 │         set self.ready = &!*write_full.0;
    │                          ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:179:32
    │
179 │         let Rv(data, ready) = (*self.data)
    │                                ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:187:22
    │
187 │             empty: &(*data).is_none(),
    │                      ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:187:20
    │
187 │             empty: &(*data).is_none(),
    │                    ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:208:51
    │
208 │             match (state, inst read_mut_wire(ds), *self.data) {
    │                                                   ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:218:26
    │
218 │         set self.ready = &match state {
    │                          ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:223:34
    │
223 │         let data = match (state, *self.data) {
    │                                  ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:231:19
    │
231 │             data: &data,
    │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:242:17
    │
242 │          match (*data, num_left, *ds_ready.0) {
    │                 ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:242:34
    │
242 │          match (*data, num_left, *ds_ready.0) {
    │                                  ^ Useless operator

warning: Deprecated type-level function `uint_bits_to_fit`
    ┌─ build/libs/ready_valid/src/main.spade:241:50
    │
241 │       reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
    │                                                  ^^^^^^^^^^^^^^^^
    │
    = Use `uint::bits_for` instead
    │
241 │       reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
    │                                                  ~~~~~~~~~~~~~~

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:250:55
    │
250 │       set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
    │                                                       ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:250:19
    │
250 │       set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
    │                   ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:253:10
    │
253 │          &match num_left {
    │          ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:273:24
    │
273 │     let rv = Rv$(data: &value, ready: inst new_mut_wire());
    │                        ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:276:21
    │
276 │     set out.ready = &ready;
    │                     ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:277:5
    │
277 │     *out.data
    │     ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:286:24
    │
286 │     let rv = Rv$(data: &value, ready: inst new_mut_wire());
    │                        ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:289:21
    │
289 │     set out.ready = &ready;
    │                     ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:290:5
    │
290 │     *out.data
    │     ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
   │
32 │         let (out, next_state) = match (state, (*self.data), *ds_ready) {
   │                                                ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
   │
32 │         let (out, next_state) = match (state, (*self.data), *ds_ready) {
   │                                                             ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
   │
54 │         set self.ready = &match (state, *ds_ready) {
   │                                         ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
   │
54 │         set self.ready = &match (state, *ds_ready) {
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
   │
60 │             &out,
   │             ^ Useless operator

error: [std::array::T; std::array::N] already has a method named fold
    ┌─ <compiler dir>/stdlib/array.spade:195:5
    │  
195 │ ╭     fn fold<B>(self, init: B, f: impl Fn(B, T) -> B) -> B {
196 │ │         gen if N == 0 {
197 │ │             init
198 │ │         } else {
    · │
201 │ │         }
202 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:29:9
    │  
 29 │       pub fn fold<F, Acc>(self, init: Acc, f: F) -> Acc
    │ ╭─────────'
 30 │ │         where F: Fn(Acc, T) -> Acc
 31 │ │     {
 32 │ │         gen if N == 0 {
    · │
 38 │ │         }
 39 │ │     }
    │ ╰─────' Previous definition here

error: [std::array::T; std::array::N] already has a method named any
    ┌─ <compiler dir>/stdlib/array.spade:103:5
    │  
103 │ ╭     fn any(self, f: impl Fn(T) -> bool) -> bool {
104 │ │         gen if N == 0 {
105 │ │             false
106 │ │         } else {
107 │ │             self.map(f).reduce_or()
108 │ │         }
109 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:49:9
    │  
 49 │       pub fn any<F>(self, f: F) -> bool
    │ ╭─────────'
 50 │ │         where F: Fn(T) -> bool
 51 │ │     {
 52 │ │         self
 53 │ │             .map(f)
 54 │ │             .fold(false, fn |acc, next| {acc || next})
 55 │ │     }
    │ ╰─────' Previous definition here

error: [std::array::T; std::array::N] already has a method named all
   ┌─ <compiler dir>/stdlib/array.spade:82:5
   │  
82 │ ╭     fn all(self, f: impl Fn(T) -> bool) -> bool {
83 │ │         gen if N == 0 {
84 │ │             true
85 │ │         } else {
86 │ │             self.map(f).reduce_and()
87 │ │         }
88 │ │     }
   │ ╰─────^ Duplicate method
   │  
   ┌─ build/libs/nstd/src/array.spade:41:9
   │  
41 │       pub fn all<F>(self, f: F) -> bool
   │ ╭─────────'
42 │ │         where F: Fn(T) -> bool
43 │ │     {
44 │ │         self
45 │ │             .map(f)
46 │ │             .fold(true, fn |acc, next| {acc && next})
47 │ │     }
   │ ╰─────' Previous definition here

error: [[std::array::T; std::array::M]; std::array::N] already has a method named flatten
    ┌─ <compiler dir>/stdlib/array.spade:497:5
    │  
497 │ ╭     fn flatten(self) -> [T; {N * M}] {
498 │ │         gen if N == 0 {
499 │ │             []
500 │ │         } else if N == 1 {
    · │
507 │ │         }
508 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:89:9
    │  
 89 │       pub fn flatten<#uint O>(self) -> [T; O]
    │ ╭─────────'
 90 │ │         where O: {N*M}
 91 │ │     {
 92 │ │         gen if N == 0 {
    · │
 96 │ │         }
 97 │ │     }
    │ ╰─────' Previous definition here

error: Trait bound not satisfied. inv bool does not implement core::marker::Data
   ┌─ src/led_blink.spade:26:5
   │    
26 │         led: inv &bool,
   │         ^^^
   │         │
   │         inv bool does not implement core::marker::Data
   │         The type of this argument is not Data which means it cannot be stored in a register.
27 │     ) -> Buses {
   │ ╭──────────────'
   │ │ ╭────────────'
28 │ │ │         // Build the bus signals
29 │ │ │         let data_control = inst new_mut_wire();
30 │ │ │         let insn_control = inst new_mut_wire();
   · │ │
66 │ │ │         )
67 │ │ │ }
   │ ╰─│─' Required because of the trait bound specified here
   │   ╰─' The value needs to be in a register because it is in this pipeline
   │    
   = help: An value not being Data typically means it contains at least one `inv` type
   = help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
   = Consider making the argument a wire
   │
26 │     wire led: inv &bool,
   │     +++++

error: No such argument: range
    ┌─ src/led_blink.spade:43:13
    │
 43 │             range: LOWER_DATA_MEM_RANGE,
    │             ^^^^^ No such argument
    │
    ┌─ ../src/memory.spade:114:5
    │  
114 │   pub pipeline(1) data_memory<#uint Size>(
    │ ╭─────'
115 │ │     clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │     where Size == 16384 else "Currently the size of the memory has to be 16384"
    · │
155 │ │         )
156 │ │ }
    │ ╰─' pipeline defined here

error: No such argument: range
    ┌─ src/led_blink.spade:49:13
    │
 49 │             range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
    │             ^^^^^ No such argument
    │
    ┌─ ../src/memory.spade:114:5
    │  
114 │   pub pipeline(1) data_memory<#uint Size>(
    │ ╭─────'
115 │ │     clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │     where Size == 16384 else "Currently the size of the memory has to be 16384"
    · │
155 │ │         )
156 │ │ }
    │ ╰─' pipeline defined here

Error: aborting due to previous error

Location:
    spade-compiler/src/main.rs:169:23
Error: 
   0: Failed to build spade code

Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.

        
test (fail)
          [WARN] swim.toml contains 1 unknown field:
[WARN]   synthesis.?.extra_verilog
[INFO] Failed to fetch pre-built surfer plugin, building locally.
========
Reason: Did not find a pre-built surfer plugin for git hash "95d5f6511cdb74f8a1c3a254673f9b098a481f74"
========
[INFO] Building spade-surfer-plugin
   Compiling serde_core v1.0.228
   Compiling num-traits v0.2.19
error[E0463]: can't find crate for `core`
  |
  = note: the `wasm32-unknown-unknown` target may not be installed
  = help: consider downloading the target with `rustup target add wasm32-unknown-unknown`

For more information about this error, try `rustc --explain E0463`.
error: could not compile `num-traits` (lib) due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error[E0463]: can't find crate for `std`
  |
  = note: the `wasm32-unknown-unknown` target may not be installed
  = help: consider downloading the target with `rustup target add wasm32-unknown-unknown`

error: could not compile `serde_core` (lib) due to 1 previous error

[WARN] Failed to build surfer plugin. Continuing anyway but Surfer integration will not work
[INFO] Building spade code
[ERROR] Failed to build spade code
HEAD is now at 3170518 Fix tests
HEAD is now at d029c73 Bump Spade again
HEAD is now at 92b6b79 Add pub markers
warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:26:14
   │
26 │     led: inv &bool,
   │              ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:78:20
   │
78 │     reset_led: inv &bool,
   │                    ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:80:24
   │
80 │     load_done_led: inv &bool,
   │                        ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ src/led_blink.spade:82:22
   │
82 │     program_led: inv &bool
   │                      ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:14:16
   │
14 │     ready: inv &bool,
   │                ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:16:15
   │
16 │     sclk: inv &bool,
   │               ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:17:15
   │
17 │     mosi: inv &bool,
   │               ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/spi.spade:18:11
   │
18 │     miso: &bool,
   │           ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/uart.spade:117:17
    │
117 │         tx: inv &bool
    │                 ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/i2c.spade:87:16
   │
87 │     ready: inv &bool,
   │                ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/i2c.spade:89:15
   │
89 │     sclk: inv &bool,
   │               ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/protocols/src/i2c.spade:91:24
   │
91 │     sda_drive_low: inv &bool,
   │                        ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/i2c.spade:221:15
    │
221 │     sclk: inv &bool,
    │               ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/i2c.spade:223:24
    │
223 │     sda_drive_low: inv &bool,
    │                        ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/protocols/src/i2c.spade:227:16
    │
227 │     ready: inv &bool
    │                ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
   ┌─ build/libs/ready_valid/src/option_ext.spade:18:25
   │
18 │         write_full: inv &bool,
   │                         ^ Useless &
   │
   = help: Spade no longer differentiates types from ports at the individual type level

warning: The port keyword no longer has any effect on structs.
  ┌─ build/libs/ready_valid/src/main.spade:7:12
  │
7 │ pub struct port Rv<T> {
  │            ^^^^ struct port and struct are now the same thing
  │
  = Consider removing `port`
  │
7 │ pub struct port Rv<T> {
  │            ----

warning: The & modifier on types no longer has any effect
  ┌─ build/libs/ready_valid/src/main.spade:8:11
  │
8 │     data: &Option<T>,
  │           ^ Useless &
  │
  = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
  ┌─ build/libs/ready_valid/src/main.spade:9:16
  │
9 │     ready: inv &bool
  │                ^ Useless &
  │
  = help: Spade no longer differentiates types from ports at the individual type level

warning: The port keyword no longer has any effect on structs.
    ┌─ build/libs/ready_valid/src/main.spade:148:8
    │
148 │ struct port FifoOut<T> {
    │        ^^^^ struct port and struct are now the same thing
    │
    = Consider removing `port`
    │
148 │ struct port FifoOut<T> {
    │        ----

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/ready_valid/src/main.spade:149:11
    │
149 │     full: &bool,
    │           ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

warning: The & modifier on types no longer has any effect
    ┌─ build/libs/ready_valid/src/main.spade:150:12
    │
150 │     empty: &bool,
    │            ^ Useless &
    │
    = help: Spade no longer differentiates types from ports at the individual type level

error: Unexpected `:`, expected `Identifier`
    ┌─ build/libs/ready_valid/src/main.spade:155:33
    │
155 │     pub fn read_empty(self, wire: inv &bool) -> FifoOut<T> {
    │                                 ^ expected `Identifier`

error: Unexpected `:`, expected `Identifier`
    ┌─ build/libs/ready_valid/src/main.spade:161:32
    │
161 │     pub fn read_full(self, wire: inv &bool) -> FifoOut<T> {
    │                                ^ expected `Identifier`

warning: Deprecated type-level function `uint_bits_to_fit`
  ┌─ build/libs/nstd/src/mem.spade:9:15
  │
9 │     where W: {uint_bits_to_fit(C)}
  │               ^^^^^^^^^^^^^^^^
  │
  = Use `uint::bits_for` instead
  │
9 │     where W: {uint::bits_for(C)}
  │               ~~~~~~~~~~~~~~

warning: Deprecated type-level function `uint_bits_to_fit`
  ┌─ build/libs/ready_valid/src/option_ext.spade:9:11
  │
9 │ where O: {uint_bits_to_fit(V) - 1},
  │           ^^^^^^^^^^^^^^^^
  │
  = Use `uint::bits_for` instead
  │
9 │ where O: {uint::bits_for(V) - 1},
  │           ~~~~~~~~~~~~~~

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/ready_valid/src/option_ext.spade:10:11
   │
10 │       O: {uint_bits_to_fit(V - 1)}
   │           ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
10 │       O: {uint::bits_for(V - 1)}
   │           ~~~~~~~~~~~~~~

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:49:27
   │
49 │             range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
   │                           ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:49:48
   │
49 │             range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
   │                                                ^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:52:49
   │
52 │         let _ = inst led_driver(clk, LED_RANGE, &data_control_signals, led);
   │                                                 ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:53:59
   │
53 │         let timer_out = inst timer(clk, rst, TIMER_RANGE, &data_control_signals);
   │                                                           ^ Useless operator

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:57:32
   │
57 │             if zext(address) < LOWER_DATA_MEM_RANGE#1 { lower_data_mem_out }
   │                                ^^^^^^^^^^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:58:37
   │
58 │             else if zext(address) < LED_RANGE#1 { 0 }
   │                                     ^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: Deprecated tuple syntax indexing
   ┌─ src/led_blink.spade:59:37
   │
59 │             else if zext(address) < TIMER_RANGE#1 { stage(-1).timer_out }
   │                                     ^^^^^^^^^^^^^ `#` syntax for tuple indexing is deprecated
   │
   = note: replace `#` with `.`

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:63:56
   │
63 │             data: Bus $(control: data_control, result: &read_value),
   │                                                        ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:64:63
   │
64 │             instruction: Bus $(control: insn_control, result: &insn_mem_out),
   │                                                               ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ src/led_blink.spade:65:24
   │
65 │             load_done: &load_signals.done,
   │                        ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ src/led_blink.spade:112:23
    │
112 │     set program_led = &inst read_mut_wire(led);
    │                       ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ src/led_blink.spade:113:25
    │
113 │     set load_done_led = &load_port.done;
    │                         ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ src/led_blink.spade:114:21
    │
114 │     set reset_led = &rst;
    │                     ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/nstd/src/mem.spade:25:77
   │
25 │     (WritePort$(addr: w_addr, write: w_write), ReadPort$(addr: r_addr, out: &read_result))
   │                                                                             ^ Useless operator

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/nstd/src/array.spade:70:19
   │
70 │     where NSize: {uint_bits_to_fit(N-1)}
   │                   ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
70 │     where NSize: {uint::bits_for(N-1)}
   │                   ~~~~~~~~~~~~~~

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/nstd/src/array.spade:70:19
   │
70 │     where NSize: {uint_bits_to_fit(N-1)}
   │                   ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
70 │     where NSize: {uint::bits_for(N-1)}
   │                   ~~~~~~~~~~~~~~

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:44:17
   │
44 │     set ready = &match state {
   │                 ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:49:16
   │
49 │     set sclk = &match state {
   │                ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:56:16
   │
56 │     set mosi = &match state {
   │                ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/protocols/src/spi.spade:67:18
   │
67 │                 [*miso].concat(captured[0..7])
   │                  ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/test.spade:10:44
   │
10 │     let tx_out = inst uart_tx(clk, rst, Rv(&to_transmit, port.1), config);
   │                                            ^ Useless operator

warning: Use of deprecated unit
  ┌─ build/libs/protocols/src/uart.spade:2:5
  │
2 │ use std::ops::div_pow2;
  │     ^^^^^^^^^^^^^^^^^^
  │
  = note: Use `/` instead

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/protocols/src/uart.spade:34:23
   │
34 │                 match *transmit.data {
   │                       ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/protocols/src/uart.spade:97:26
   │
97 │     set transmit.ready = &match state {
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/uart.spade:119:18
    │
119 │         set tx = &inst uart_tx(clk, rst, self, config);
    │                  ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:143:17
    │
143 │     set ready = &match (state, inst read_mut_wire(emitter_ready)) {
    │                 ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:168:25
    │
168 │     set sda_drive_low = &match state {
    │                         ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:179:16
    │
179 │     set sclk = &match state {
    │                ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:271:16
    │
271 │     set sclk = &sclk_driver_out.sclk;
    │                ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:273:25
    │
273 │     set sda_drive_low = &match state {
    │                         ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/protocols/src/i2c.spade:283:17
    │
283 │     set ready = &match state {
    │                 ^ Useless operator

warning: Deprecated type-level function `uint_bits_to_fit`
   ┌─ build/libs/ready_valid/src/option_ext.spade:25:42
   │
25 │         let (write, read) = inst fifo::<{uint_bits_to_fit(Depth - 1)}, T, Depth>$(
   │                                          ^^^^^^^^^^^^^^^^
   │
   = Use `uint::bits_for` instead
   │
25 │         let (write, read) = inst fifo::<{uint::bits_for(Depth - 1)}, T, Depth>$(
   │                                          ~~~~~~~~~~~~~~

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/option_ext.spade:32:27
   │
32 │         set write.write = &self;
   │                           ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:22:57
   │
22 │         reg(clk) value reset(rst: None) = match (value, *self.data) {
   │                                                         ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:32:26
   │
32 │         set self.ready = &value.is_none();
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:35:19
   │
35 │             data: &value,
   │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:42:51
   │
42 │         reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
   │                                                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:42:64
   │
42 │         reg(clk) buffer reset(rst: None) = match (*ds, buffer, *self.data) {
   │                                                                ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:54:34
   │
54 │         set self.ready = &match (*ds, buffer) {
   │                                  ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:54:26
   │
54 │         set self.ready = &match (*ds, buffer) {
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:61:12
   │
61 │         Rv(&buffer, ds_inv)
   │            ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:65:26
   │
65 │         set self.ready = &false;
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:69:26
   │
69 │         set self.ready = &true;
   │                          ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:75:21
   │
75 │             data: &(*self.data).map(f),
   │                     ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:75:19
   │
75 │             data: &(*self.data).map(f),
   │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:83:21
   │
83 │             data: &(*self.data).and_then(f),
   │                     ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:83:19
   │
83 │             data: &(*self.data).and_then(f),
   │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:89:27
   │
89 │         let self_takes = (*self.data).is_some();
   │                           ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:94:44
   │
94 │         set other.ready = &(!self_takes && *ds_ready);
   │                                            ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/main.spade:94:27
   │
94 │         set other.ready = &(!self_takes && *ds_ready);
   │                           ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:114:48
    │
114 │         set ready = if gate {ds_ready.0} else {&false};
    │                                                ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:116:34
    │
116 │             if gate {data} else {&None},
    │                                  ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:132:29
    │
132 │             match (timeout, *data, *ds_ready.0) {
    │                             ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:132:36
    │
132 │             match (timeout, *data, *ds_ready.0) {
    │                                    ^ Useless operator

warning: Deprecated type-level function `uint_bits_to_fit`
    ┌─ build/libs/ready_valid/src/main.spade:131:33
    │
131 │         reg(clk) timeout: uint<{uint_bits_to_fit(N)}> reset(rst: 0) =
    │                                 ^^^^^^^^^^^^^^^^
    │
    = Use `uint::bits_for` instead
    │
131 │         reg(clk) timeout: uint<{uint::bits_for(N)}> reset(rst: 0) =
    │                                 ~~~~~~~~~~~~~~

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:139:23
    │
139 │         set ready = &(*ds_ready.0 && timeout == 0);
    │                       ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:139:21
    │
139 │         set ready = &(*ds_ready.0 && timeout == 0);
    │                     ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:140:41
    │
140 │         Rv(if timeout == 0 {data} else {&None}, ds_ready.1)
    │                                         ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:178:28
    │
178 │         set self.ready = &!*write_full.0;
    │                            ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:178:26
    │
178 │         set self.ready = &!*write_full.0;
    │                          ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:179:32
    │
179 │         let Rv(data, ready) = (*self.data)
    │                                ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:187:22
    │
187 │             empty: &(*data).is_none(),
    │                      ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:187:20
    │
187 │             empty: &(*data).is_none(),
    │                    ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:208:51
    │
208 │             match (state, inst read_mut_wire(ds), *self.data) {
    │                                                   ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:218:26
    │
218 │         set self.ready = &match state {
    │                          ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:223:34
    │
223 │         let data = match (state, *self.data) {
    │                                  ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:231:19
    │
231 │             data: &data,
    │                   ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:242:17
    │
242 │          match (*data, num_left, *ds_ready.0) {
    │                 ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:242:34
    │
242 │          match (*data, num_left, *ds_ready.0) {
    │                                  ^ Useless operator

warning: Deprecated type-level function `uint_bits_to_fit`
    ┌─ build/libs/ready_valid/src/main.spade:241:50
    │
241 │       reg(clk) (array, num_left): ([T; N], uint<{uint_bits_to_fit(N)}>) reset(rst: (std::undef::undef(), 0)) =
    │                                                  ^^^^^^^^^^^^^^^^
    │
    = Use `uint::bits_for` instead
    │
241 │       reg(clk) (array, num_left): ([T; N], uint<{uint::bits_for(N)}>) reset(rst: (std::undef::undef(), 0)) =
    │                                                  ~~~~~~~~~~~~~~

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:250:55
    │
250 │       set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
    │                                                       ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:250:19
    │
250 │       set ready = &(num_left == 0 || num_left == 1 && *ds_ready.0);
    │                   ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:253:10
    │
253 │          &match num_left {
    │          ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:273:24
    │
273 │     let rv = Rv$(data: &value, ready: inst new_mut_wire());
    │                        ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:276:21
    │
276 │     set out.ready = &ready;
    │                     ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:277:5
    │
277 │     *out.data
    │     ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:286:24
    │
286 │     let rv = Rv$(data: &value, ready: inst new_mut_wire());
    │                        ^ Useless operator

warning: The reference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:289:21
    │
289 │     set out.ready = &ready;
    │                     ^ Useless operator

warning: The dereference operator no longer has any effect.
    ┌─ build/libs/ready_valid/src/main.spade:290:5
    │
290 │     *out.data
    │     ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:32:48
   │
32 │         let (out, next_state) = match (state, (*self.data), *ds_ready) {
   │                                                ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:32:61
   │
32 │         let (out, next_state) = match (state, (*self.data), *ds_ready) {
   │                                                             ^ Useless operator

warning: The dereference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:54:41
   │
54 │         set self.ready = &match (state, *ds_ready) {
   │                                         ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:54:26
   │
54 │         set self.ready = &match (state, *ds_ready) {
   │                          ^ Useless operator

warning: The reference operator no longer has any effect.
   ┌─ build/libs/ready_valid/src/escape_byte.spade:60:13
   │
60 │             &out,
   │             ^ Useless operator

error: [std::array::T; std::array::N] already has a method named fold
    ┌─ <compiler dir>/stdlib/array.spade:195:5
    │  
195 │ ╭     fn fold<B>(self, init: B, f: impl Fn(B, T) -> B) -> B {
196 │ │         gen if N == 0 {
197 │ │             init
198 │ │         } else {
    · │
201 │ │         }
202 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:29:9
    │  
 29 │       pub fn fold<F, Acc>(self, init: Acc, f: F) -> Acc
    │ ╭─────────'
 30 │ │         where F: Fn(Acc, T) -> Acc
 31 │ │     {
 32 │ │         gen if N == 0 {
    · │
 38 │ │         }
 39 │ │     }
    │ ╰─────' Previous definition here

error: [std::array::T; std::array::N] already has a method named any
    ┌─ <compiler dir>/stdlib/array.spade:103:5
    │  
103 │ ╭     fn any(self, f: impl Fn(T) -> bool) -> bool {
104 │ │         gen if N == 0 {
105 │ │             false
106 │ │         } else {
107 │ │             self.map(f).reduce_or()
108 │ │         }
109 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:49:9
    │  
 49 │       pub fn any<F>(self, f: F) -> bool
    │ ╭─────────'
 50 │ │         where F: Fn(T) -> bool
 51 │ │     {
 52 │ │         self
 53 │ │             .map(f)
 54 │ │             .fold(false, fn |acc, next| {acc || next})
 55 │ │     }
    │ ╰─────' Previous definition here

error: [std::array::T; std::array::N] already has a method named all
   ┌─ <compiler dir>/stdlib/array.spade:82:5
   │  
82 │ ╭     fn all(self, f: impl Fn(T) -> bool) -> bool {
83 │ │         gen if N == 0 {
84 │ │             true
85 │ │         } else {
86 │ │             self.map(f).reduce_and()
87 │ │         }
88 │ │     }
   │ ╰─────^ Duplicate method
   │  
   ┌─ build/libs/nstd/src/array.spade:41:9
   │  
41 │       pub fn all<F>(self, f: F) -> bool
   │ ╭─────────'
42 │ │         where F: Fn(T) -> bool
43 │ │     {
44 │ │         self
45 │ │             .map(f)
46 │ │             .fold(true, fn |acc, next| {acc && next})
47 │ │     }
   │ ╰─────' Previous definition here

error: [[std::array::T; std::array::M]; std::array::N] already has a method named flatten
    ┌─ <compiler dir>/stdlib/array.spade:497:5
    │  
497 │ ╭     fn flatten(self) -> [T; {N * M}] {
498 │ │         gen if N == 0 {
499 │ │             []
500 │ │         } else if N == 1 {
    · │
507 │ │         }
508 │ │     }
    │ ╰─────^ Duplicate method
    │  
    ┌─ build/libs/nstd/src/array.spade:89:9
    │  
 89 │       pub fn flatten<#uint O>(self) -> [T; O]
    │ ╭─────────'
 90 │ │         where O: {N*M}
 91 │ │     {
 92 │ │         gen if N == 0 {
    · │
 96 │ │         }
 97 │ │     }
    │ ╰─────' Previous definition here

error: Trait bound not satisfied. inv bool does not implement core::marker::Data
   ┌─ src/led_blink.spade:26:5
   │    
26 │         led: inv &bool,
   │         ^^^
   │         │
   │         inv bool does not implement core::marker::Data
   │         The type of this argument is not Data which means it cannot be stored in a register.
27 │     ) -> Buses {
   │ ╭──────────────'
   │ │ ╭────────────'
28 │ │ │         // Build the bus signals
29 │ │ │         let data_control = inst new_mut_wire();
30 │ │ │         let insn_control = inst new_mut_wire();
   · │ │
66 │ │ │         )
67 │ │ │ }
   │ ╰─│─' Required because of the trait bound specified here
   │   ╰─' The value needs to be in a register because it is in this pipeline
   │    
   = help: An value not being Data typically means it contains at least one `inv` type
   = help: You can learn more about `Data` here: https://docs.spade-lang.org/typst/wires.html
   = Consider making the argument a wire
   │
26 │     wire led: inv &bool,
   │     +++++

error: No such argument: range
    ┌─ src/led_blink.spade:43:13
    │
 43 │             range: LOWER_DATA_MEM_RANGE,
    │             ^^^^^ No such argument
    │
    ┌─ ../src/memory.spade:114:5
    │  
114 │   pub pipeline(1) data_memory<#uint Size>(
    │ ╭─────'
115 │ │     clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │     where Size == 16384 else "Currently the size of the memory has to be 16384"
    · │
155 │ │         )
156 │ │ }
    │ ╰─' pipeline defined here

error: No such argument: range
    ┌─ src/led_blink.spade:49:13
    │
 49 │             range: (trunc(UPPER_DMEM#0), trunc(UPPER_DMEM#1)),
    │             ^^^^^ No such argument
    │
    ┌─ ../src/memory.spade:114:5
    │  
114 │   pub pipeline(1) data_memory<#uint Size>(
    │ ╭─────'
115 │ │     clk: clock,
116 │ │ ) -> (DataMemoryRW<Size>, DataMemoryR<Size>)
117 │ │     where Size == 16384 else "Currently the size of the memory has to be 16384"
    · │
155 │ │         )
156 │ │ }
    │ ╰─' pipeline defined here

Error: aborting due to previous error

Location:
    spade-compiler/src/main.rs:169:23
Error: 
   0: Failed to build spade code

Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Run with RUST_BACKTRACE=full to include source snippets.

        

templates-alchitry-cu (2/2)

build (success)
          
        
pnr (success)
          
        

templates-ecpix5 (2/2)

build (success)
          
        
pnr (success)
          
        

templates-go-board (2/2)

build (success)
          
        
pnr (success)
          
        

templates-icestick (2/2)

build (success)
          
        
pnr (success)
          
        

templates-icesugar-nano (2/2)

build (success)
          
        
pnr (success)
          
        

templates-pico-ice40up5k (2/2)

build (success)
          
        
pnr (success)
          
        

templates-tangnano20k (2/2)

build (success)
          
        
pnr (success)
          
        

templates-tangnano4k (2/2)

build (success)
          
        
pnr (success)
          
        

templates-tangnano9k (2/2)

build (success)
          
        
pnr (success)
          
        

templates-tinyfpga-bx (2/2)

build (success)
          
        
pnr (success)
          
        

templates-ulx3s_85k (2/2)

build (success)
          
        
pnr (success)
          
        

vga_spade (1/1)

build (success)
          
        

ws2812 (3/3)

build (success)
          
        
pnr (success)
          
        
test (success)
          
        

ws2812-lithekod (3/3)

build (success)
          
        
pnr (success)
          
        
test (success)
          
        

This page was generated at 2026-05-20T18:36:38Z.