mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
53c64abdeb
* Move compiler/ under vlib/compiler/ . * Add a minimal compiler/main.v driver program. * Cleanup compiler/main.v . * Make most compiler tests pass again. * Apply the fix by @joe-conigliaro , so that the rest of the compiler tests are fixed too. * Thanks to @avitkauskas, now the vlib/vcompiler/tests/str_gen_test.v test does not need to be special cased anymore. * Reapply @joe-conigliaro fix for vgen.
52 lines
665 B
V
52 lines
665 B
V
fn foo() string {
|
|
println('foo()')
|
|
return 'foo'
|
|
}
|
|
|
|
fn foo2() string {
|
|
println('start')
|
|
defer { println('defer') }
|
|
defer { println('defer2') }
|
|
println('end')
|
|
return foo()
|
|
}
|
|
|
|
fn test_defer() {
|
|
assert foo2() == 'foo'
|
|
}
|
|
|
|
fn set_num(i int, n mut Num) {
|
|
defer { n.val+=1 }
|
|
println("Hi")
|
|
if i < 5 {
|
|
return
|
|
} else {
|
|
n.val+=1
|
|
}
|
|
}
|
|
|
|
fn set_num_opt(n mut Num) ?int {
|
|
defer { n.val = 1 }
|
|
return 99
|
|
}
|
|
|
|
struct Num {
|
|
mut:
|
|
val int
|
|
}
|
|
|
|
fn test_defer_early_exit() {
|
|
mut sum := Num{0}
|
|
for i in 0..10 {
|
|
set_num(i, mut sum)
|
|
}
|
|
println("sum: $sum.val")
|
|
assert sum.val == 15
|
|
}
|
|
|
|
fn test_defer_option() {
|
|
mut ok := Num{0}
|
|
set_num_opt(mut ok)
|
|
assert ok.val == 1
|
|
}
|