Skip to content

Commit

Permalink
vine: add break with value (#72)
Browse files Browse the repository at this point in the history
  • Loading branch information
stevenhuyn authored Oct 24, 2024
1 parent 51047e2 commit 6450c21
Show file tree
Hide file tree
Showing 31 changed files with 202 additions and 118 deletions.
12 changes: 12 additions & 0 deletions tests/programs/break_result.vi
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

use std::{io::println, u32};

fn main(io) {
io.println(loop {
break "loop result";
});

io.println(while 1 {
break "while result";
});
}
6 changes: 3 additions & 3 deletions tests/snaps/vine/basic_diverge/compiled.iv
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,17 @@

::std::str::concat { fn(tup(@add(n1 n2) tup(n3 n0)) fn(tup(n1 tup(n0 n4)) tup(n2 tup(n3 n4)))) }

::std::u32::to_string { fn(dup241(?(::std::u32::to_string::5 ::std::u32::to_string::1 x(n1 n0)) n1) n0) }
::std::u32::to_string { fn(dup246(?(::std::u32::to_string::5 ::std::u32::to_string::1 x(n1 n0)) n1) n0) }

::std::u32::to_string::1 {
x(n1 n2)
::std::u32::to_string::2 = x(n1 x(tup(0 tup(n0 n0)) n2))
}

::std::u32::to_string::2 { x(dup241(?(::std::u32::to_string::4 ::std::u32::to_string::3 x(n2 n0)) n2) n0) }
::std::u32::to_string::2 { x(dup246(?(::std::u32::to_string::4 ::std::u32::to_string::3 x(n2 n0)) n2) n0) }

::std::u32::to_string::3 {
x(dup241(@rem(10 n1) @div(10 n5)) x(tup(@add(1 n0) tup(n3 n4)) n6))
x(dup246(@rem(10 n1) @div(10 n5)) x(tup(@add(1 n0) tup(n3 n4)) n6))
48 = @add(n1 n2)
::std::u32::to_string::2 = x(n5 x(tup(n0 tup(tup(n2 n3) n4)) n6))
}
Expand Down
41 changes: 41 additions & 0 deletions tests/snaps/vine/break_result/compiled.iv
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@

::main { ::break_result::main }

::break_result::main {
fn(n0 _)
::std::io::println = fn(ref(n0 n1) fn(::break_result::main::1 _))
::std::io::println = fn(ref(n1 _) fn(::break_result::main::3 _))
}

::break_result::main::1 { tup(11 tup(tup(108 tup(111 tup(111 tup(112 tup(32 tup(114 tup(101 tup(115 tup(117 tup(108 tup(116 n0))))))))))) n0)) }

::break_result::main::3 {
n0
1 = ?(_ ::break_result::main::4 n0)
}

::break_result::main::4 { tup(12 tup(tup(119 tup(104 tup(105 tup(108 tup(101 tup(32 tup(114 tup(101 tup(115 tup(117 tup(108 tup(116 n0)))))))))))) n0)) }

::std::io::println {
fn(ref(n0 n3) fn(n1 _))
::std::io::print = fn(ref(n0 n2) fn(n1 _))
::std::io::print_char = fn(ref(n2 n3) fn(10 _))
}

::std::io::print {
fn(ref(n0 n1) fn(tup(n2 tup(n3 _)) _))
::std::io::print::1 = x(n0 x(n1 x(n2 n3)))
}

::std::io::print::1 { x(n0 x(n1 x(dup14(?(::std::io::print::3 ::std::io::print::2 x(n0 x(n1 x(n3 n2)))) n3) n2))) }

::std::io::print::2 {
x(n1 x(n3 x(@sub(1 n4) tup(n0 n5))))
::std::io::print_char = fn(ref(n1 n2) fn(n0 _))
::std::io::print::1 = x(n2 x(n3 x(n4 n5)))
}

::std::io::print::3 { x(n0 x(n0 _)) }

::std::io::print_char { fn(ref(@io_print_char(char io) io) fn(char _)) }

2 changes: 2 additions & 0 deletions tests/snaps/vine/break_result/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
loop result
while result
15 changes: 15 additions & 0 deletions tests/snaps/vine/break_result/stats.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@

Interactions
Total 535
Annihilate 288
Commute 0
Copy 28
Erase 61
Expand 84
Call 48
Branch 26

Memory
Heap 528 B
Allocated 10_848 B
Freed 10_848 B
30 changes: 15 additions & 15 deletions tests/snaps/vine/cyclist/compiled.iv
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,16 @@
}

::cyclist::cycle {
fn(ref(n0 n2) fn(n3 _))
::std::list::List::len = fn(ref(n0 n1) dup13(?(::cyclist::cycle::5 ::cyclist::cycle::1 x(n1 x(n2 x(n3 n4)))) n4))
fn(ref(n0 n2) fn(n3 n4))
::std::list::List::len = fn(ref(n0 n1) dup15(?(::cyclist::cycle::5 ::cyclist::cycle::1 x(n1 x(n2 x(n3 x(n5 n4))))) n5))
}

::cyclist::cycle::1 {
x(n1 x(n2 x(@rem(n0 n3) n0)))
x(n1 x(n2 x(@rem(n0 n3) x(n0 _))))
::cyclist::cycle::2 = x(n1 x(n2 n3))
}

::cyclist::cycle::2 { x(n0 x(n1 dup12(?(::cyclist::cycle::4 ::cyclist::cycle::3 x(n0 x(n1 n2))) n2))) }
::cyclist::cycle::2 { x(n0 x(n1 dup14(?(::cyclist::cycle::4 ::cyclist::cycle::3 x(n0 x(n1 n2))) n2))) }

::cyclist::cycle::3 {
x(n3 x(n5 @sub(1 n6)))
Expand All @@ -78,7 +78,7 @@
::std::io::print::1 = x(n0 x(n1 x(n2 n3)))
}

::std::io::print::1 { x(n0 x(n1 x(dup26(?(::std::io::print::3 ::std::io::print::2 x(n0 x(n1 x(n3 n2)))) n3) n2))) }
::std::io::print::1 { x(n0 x(n1 x(dup29(?(::std::io::print::3 ::std::io::print::2 x(n0 x(n1 x(n3 n2)))) n3) n2))) }

::std::io::print::2 {
x(n1 x(n3 x(@sub(1 n4) tup(n0 n5))))
Expand All @@ -90,23 +90,23 @@

::std::io::print_char { fn(ref(@io_print_char(char io) io) fn(char _)) }

::std::list::List::len { fn(ref(tup(dup50(n2 n3) n0) tup(n3 n0)) n2) }
::std::list::List::len { fn(ref(tup(dup56(n2 n3) n0) tup(n3 n0)) n2) }

::std::list::List::map {
fn(ref(tup(dup53(n4 n5) tup(n0 _)) _) fn(n1 tup(n4 tup(n2 n3))))
fn(ref(tup(dup59(n4 n5) tup(n0 _)) _) fn(n1 tup(n4 tup(n2 n3))))
::std::list::List::map::1 = x(n5 x(n0 x(n1 x(n2 n3))))
}

::std::list::List::map::1 { x(dup53(?(::std::list::List::map::3 ::std::list::List::map::2 x(n4 n0)) n4) n0) }
::std::list::List::map::1 { x(dup59(?(::std::list::List::map::3 ::std::list::List::map::2 x(n4 n0)) n4) n0) }

::std::list::List::map::2 {
x(@sub(1 n2) x(tup(n0 n3) x(dup55(fn(n0 n1) n6) x(tup(n1 n4) n5))))
x(@sub(1 n2) x(tup(n0 n3) x(dup61(fn(n0 n1) n6) x(tup(n1 n4) n5))))
::std::list::List::map::1 = x(n2 x(n3 x(n6 x(n4 n5))))
}

::std::list::List::map::3 { x(_ x(_ x(_ x(n0 n0)))) }

::std::list::List::pop_front { fn(ref(tup(dup64(?(::std::list::List::pop_front::2 ::std::list::List::pop_front::1 x(n1 x(n2 x(n3 x(n4 n5))))) n1) tup(n3 n0)) tup(n2 tup(n4 n0))) n5) }
::std::list::List::pop_front { fn(ref(tup(dup71(?(::std::list::List::pop_front::2 ::std::list::List::pop_front::1 x(n1 x(n2 x(n3 x(n4 n5))))) n1) tup(n3 n0)) tup(n2 tup(n4 n0))) n5) }

::std::list::List::pop_front::1 {
x(@sub(1 n1) x(n1 x(tup(n0 n2) x(n2 n3))))
Expand Down Expand Up @@ -137,7 +137,7 @@
}

::std::list::List::join::3 {
enum(n0 x(dup80(n6 n7) x(n3 x(n2 n5))))
enum(n0 x(dup87(n6 n7) x(n3 x(n2 n5))))
::std::str::concat = fn(n6 fn(n0 n1))
::std::str::concat = fn(n2 fn(n1 n4))
::std::list::List::join::2 = x(n7 x(n3 x(n4 n5)))
Expand All @@ -157,7 +157,7 @@

::std::list::List::into_iter { fn(ref(tup(n0 tup(n1 _)) _) tup(n0 n1)) }

::std::list::List::into_iter::next { fn(ref(tup(dup110(?(::std::list::List::into_iter::next::2 ::std::list::List::into_iter::next::1 x(n0 x(n1 x(n2 x(n3 n4))))) n0) n2) tup(n1 n3)) n4) }
::std::list::List::into_iter::next { fn(ref(tup(dup118(?(::std::list::List::into_iter::next::2 ::std::list::List::into_iter::next::1 x(n0 x(n1 x(n2 x(n3 n4))))) n0) n2) tup(n1 n3)) n4) }

::std::list::List::into_iter::next::1 {
x(@sub(1 n1) x(n1 x(tup(n0 n2) x(n2 n3))))
Expand All @@ -176,17 +176,17 @@

::std::str::concat { fn(tup(@add(n1 n2) tup(n3 n0)) fn(tup(n1 tup(n0 n4)) tup(n2 tup(n3 n4)))) }

::std::u32::to_string { fn(dup249(?(::std::u32::to_string::5 ::std::u32::to_string::1 x(n1 n0)) n1) n0) }
::std::u32::to_string { fn(dup257(?(::std::u32::to_string::5 ::std::u32::to_string::1 x(n1 n0)) n1) n0) }

::std::u32::to_string::1 {
x(n1 n2)
::std::u32::to_string::2 = x(n1 x(tup(0 tup(n0 n0)) n2))
}

::std::u32::to_string::2 { x(dup249(?(::std::u32::to_string::4 ::std::u32::to_string::3 x(n2 n0)) n2) n0) }
::std::u32::to_string::2 { x(dup257(?(::std::u32::to_string::4 ::std::u32::to_string::3 x(n2 n0)) n2) n0) }

::std::u32::to_string::3 {
x(dup249(@rem(10 n1) @div(10 n5)) x(tup(@add(1 n0) tup(n3 n4)) n6))
x(dup257(@rem(10 n1) @div(10 n5)) x(tup(@add(1 n0) tup(n3 n4)) n6))
48 = @add(n1 n2)
::std::u32::to_string::2 = x(n5 x(tup(n0 tup(tup(n2 n3) n4)) n6))
}
Expand Down
10 changes: 5 additions & 5 deletions tests/snaps/vine/cyclist/stats.txt
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@

Interactions
Total 115_848
Annihilate 60_232
Total 115_880
Annihilate 60_263
Commute 2_523
Copy 9_367
Copy 9_368
Erase 10_056
Expand 17_464
Call 10_558
Branch 5_648

Memory
Heap 7_792 B
Allocated 2_432_128 B
Freed 2_432_128 B
Allocated 2_433_136 B
Freed 2_433_136 B
8 changes: 4 additions & 4 deletions tests/snaps/vine/fib/compiled.iv
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
::std::io::print::1 = x(n0 x(n1 x(n2 n3)))
}

::std::io::print::1 { x(n0 x(n1 x(dup16(?(::std::io::print::3 ::std::io::print::2 x(n0 x(n1 x(n3 n2)))) n3) n2))) }
::std::io::print::1 { x(n0 x(n1 x(dup17(?(::std::io::print::3 ::std::io::print::2 x(n0 x(n1 x(n3 n2)))) n3) n2))) }

::std::io::print::2 {
x(n1 x(n3 x(@sub(1 n4) tup(n0 n5))))
Expand All @@ -45,17 +45,17 @@

::std::str::concat { fn(tup(@add(n1 n2) tup(n3 n0)) fn(tup(n1 tup(n0 n4)) tup(n2 tup(n3 n4)))) }

::std::u32::to_string { fn(dup239(?(::std::u32::to_string::5 ::std::u32::to_string::1 x(n1 n0)) n1) n0) }
::std::u32::to_string { fn(dup245(?(::std::u32::to_string::5 ::std::u32::to_string::1 x(n1 n0)) n1) n0) }

::std::u32::to_string::1 {
x(n1 n2)
::std::u32::to_string::2 = x(n1 x(tup(0 tup(n0 n0)) n2))
}

::std::u32::to_string::2 { x(dup239(?(::std::u32::to_string::4 ::std::u32::to_string::3 x(n2 n0)) n2) n0) }
::std::u32::to_string::2 { x(dup245(?(::std::u32::to_string::4 ::std::u32::to_string::3 x(n2 n0)) n2) n0) }

::std::u32::to_string::3 {
x(dup239(@rem(10 n1) @div(10 n5)) x(tup(@add(1 n0) tup(n3 n4)) n6))
x(dup245(@rem(10 n1) @div(10 n5)) x(tup(@add(1 n0) tup(n3 n4)) n6))
48 = @add(n1 n2)
::std::u32::to_string::2 = x(n5 x(tup(n0 tup(tup(n2 n3) n4)) n6))
}
Expand Down
24 changes: 12 additions & 12 deletions tests/snaps/vine/fib_repl/compiled.iv
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@
::fib_repl::fib::1 = x(n0 x(0 x(n1 1)))
}

::fib_repl::fib::1 { x(dup12(?(::fib_repl::fib::3 ::fib_repl::fib::2 x(n3 n0)) n3) n0) }
::fib_repl::fib::1 { x(dup13(?(::fib_repl::fib::3 ::fib_repl::fib::2 x(n3 n0)) n3) n0) }

::fib_repl::fib::2 {
x(@sub(1 n3) x(@add(n2 n0) x(n5 dup14(n1 n2))))
x(@sub(1 n3) x(@add(n2 n0) x(n5 dup15(n1 n2))))
tup(n1 n0) = tup(n4 n6)
::fib_repl::fib::1 = x(n3 x(n4 x(n5 n6)))
}
Expand All @@ -48,7 +48,7 @@
::std::io::print::1 = x(n0 x(n1 x(n2 n3)))
}

::std::io::print::1 { x(n0 x(n1 x(dup25(?(::std::io::print::3 ::std::io::print::2 x(n0 x(n1 x(n3 n2)))) n3) n2))) }
::std::io::print::1 { x(n0 x(n1 x(dup27(?(::std::io::print::3 ::std::io::print::2 x(n0 x(n1 x(n3 n2)))) n3) n2))) }

::std::io::print::2 {
x(n1 x(n3 x(@sub(1 n4) tup(n0 n5))))
Expand All @@ -71,11 +71,11 @@

::std::io::read_line {
fn(ref(n0 n2) n3)
::std::io::read_byte = fn(ref(n0 n1) fn(0 dup42(?(::std::io::read_line::9 ::std::io::read_line::1 x(n1 x(n2 x(n4 n3)))) n4)))
::std::io::read_byte = fn(ref(n0 n1) fn(0 dup46(?(::std::io::read_line::9 ::std::io::read_line::1 x(n1 x(n2 x(n4 n3)))) n4)))
}

::std::io::read_line::1 {
x(n1 x(n2 x(dup42(@eq(10 ?(::std::io::read_line::3 ::std::io::read_line::2 x(n1 x(n2 x(n4 n3))))) n4) n0)))
x(n1 x(n2 x(dup46(@eq(10 ?(::std::io::read_line::3 ::std::io::read_line::2 x(n1 x(n2 x(n4 n3))))) n4) n0)))
::std::option::Option::Some = fn(n3 n0)
}

Expand All @@ -89,7 +89,7 @@

::std::io::read_line::4 {
x(n0 x(n2 n3))
::std::io::read_byte = fn(ref(n0 n1) fn(10 dup42(@ne(10 ?(::std::io::read_line::6 ::std::io::read_line::5 x(n1 x(n2 x(n5 n3))))) n5)))
::std::io::read_byte = fn(ref(n0 n1) fn(10 dup46(@ne(10 ?(::std::io::read_line::6 ::std::io::read_line::5 x(n1 x(n2 x(n5 n3))))) n5)))
}

::std::io::read_line::5 {
Expand All @@ -113,17 +113,17 @@

::std::str::single { fn(n0 tup(1 tup(tup(n0 n1) n1))) }

::std::u32::to_string { fn(dup248(?(::std::u32::to_string::5 ::std::u32::to_string::1 x(n1 n0)) n1) n0) }
::std::u32::to_string { fn(dup255(?(::std::u32::to_string::5 ::std::u32::to_string::1 x(n1 n0)) n1) n0) }

::std::u32::to_string::1 {
x(n1 n2)
::std::u32::to_string::2 = x(n1 x(tup(0 tup(n0 n0)) n2))
}

::std::u32::to_string::2 { x(dup248(?(::std::u32::to_string::4 ::std::u32::to_string::3 x(n2 n0)) n2) n0) }
::std::u32::to_string::2 { x(dup255(?(::std::u32::to_string::4 ::std::u32::to_string::3 x(n2 n0)) n2) n0) }

::std::u32::to_string::3 {
x(dup248(@rem(10 n1) @div(10 n5)) x(tup(@add(1 n0) tup(n3 n4)) n6))
x(dup255(@rem(10 n1) @div(10 n5)) x(tup(@add(1 n0) tup(n3 n4)) n6))
48 = @add(n1 n2)
::std::u32::to_string::2 = x(n5 x(tup(n0 tup(tup(n2 n3) n4)) n6))
}
Expand All @@ -132,7 +132,7 @@

::std::u32::to_string::5 { x(_ tup(1 tup(tup(48 n0) n0))) }

::std::u32::parse { fn(tup(dup257(@eq(0 ?(::std::u32::parse::2 ::std::u32::parse::1 x(n2 x(n0 n1)))) n2) tup(n0 _)) n1) }
::std::u32::parse { fn(tup(dup265(@eq(0 ?(::std::u32::parse::2 ::std::u32::parse::1 x(n2 x(n0 n1)))) n2) tup(n0 _)) n1) }

::std::u32::parse::1 {
x(_ x(_ n0))
Expand All @@ -144,10 +144,10 @@
::std::u32::parse::3 = x(n0 x(n1 x(0 n2)))
}

::std::u32::parse::3 { x(dup257(?(::std::u32::parse::9 ::std::u32::parse::4 x(n3 n0)) n3) n0) }
::std::u32::parse::3 { x(dup265(?(::std::u32::parse::9 ::std::u32::parse::4 x(n3 n0)) n3) n0) }

::std::u32::parse::4 {
x(n2 x(tup(dup260(dup(n0 @le(57 n1)) n6) n3) x(n4 n5)))
x(n2 x(tup(dup268(dup(n0 @le(57 n1)) n6) n3) x(n4 n5)))
48 = @le(n0 @u32_and(n1 ?(::std::u32::parse::6 ::std::u32::parse::8 x(n2 x(n3 x(n4 x(n6 n5)))))))
}

Expand Down
8 changes: 4 additions & 4 deletions tests/snaps/vine/final_countdown/compiled.iv
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
::std::io::print::1 = x(n0 x(n1 x(n2 n3)))
}

::std::io::print::1 { x(n0 x(n1 x(dup17(?(::std::io::print::3 ::std::io::print::2 x(n0 x(n1 x(n3 n2)))) n3) n2))) }
::std::io::print::1 { x(n0 x(n1 x(dup18(?(::std::io::print::3 ::std::io::print::2 x(n0 x(n1 x(n3 n2)))) n3) n2))) }

::std::io::print::2 {
x(n1 x(n3 x(@sub(1 n4) tup(n0 n5))))
Expand All @@ -46,17 +46,17 @@

::std::str::concat { fn(tup(@add(n1 n2) tup(n3 n0)) fn(tup(n1 tup(n0 n4)) tup(n2 tup(n3 n4)))) }

::std::u32::to_string { fn(dup240(?(::std::u32::to_string::5 ::std::u32::to_string::1 x(n1 n0)) n1) n0) }
::std::u32::to_string { fn(dup246(?(::std::u32::to_string::5 ::std::u32::to_string::1 x(n1 n0)) n1) n0) }

::std::u32::to_string::1 {
x(n1 n2)
::std::u32::to_string::2 = x(n1 x(tup(0 tup(n0 n0)) n2))
}

::std::u32::to_string::2 { x(dup240(?(::std::u32::to_string::4 ::std::u32::to_string::3 x(n2 n0)) n2) n0) }
::std::u32::to_string::2 { x(dup246(?(::std::u32::to_string::4 ::std::u32::to_string::3 x(n2 n0)) n2) n0) }

::std::u32::to_string::3 {
x(dup240(@rem(10 n1) @div(10 n5)) x(tup(@add(1 n0) tup(n3 n4)) n6))
x(dup246(@rem(10 n1) @div(10 n5)) x(tup(@add(1 n0) tup(n3 n4)) n6))
48 = @add(n1 n2)
::std::u32::to_string::2 = x(n5 x(tup(n0 tup(tup(n2 n3) n4)) n6))
}
Expand Down
Loading

0 comments on commit 6450c21

Please sign in to comment.