fix catch handlers / match statements yielding past scope
This commit is contained in:
@@ -59,33 +59,36 @@ via_widen func(value i32) i32 ! BasicOrDetail {
|
||||
|
||||
catch_basic func(value i32) i32 {
|
||||
return maybe(value) catch |e| {
|
||||
if (e == .bad) {
|
||||
result i32 :: if (e == .bad) {
|
||||
yield 21
|
||||
} else {
|
||||
yield 22
|
||||
}
|
||||
yield result
|
||||
}
|
||||
}
|
||||
|
||||
catch_detail func(value i32) i32 {
|
||||
return with_detail(value) catch |e| {
|
||||
match e {
|
||||
.code |n|: yield n + 30
|
||||
.info |info|: yield info.code + info.extra + 30
|
||||
.empty: yield 40
|
||||
result i32 :: match e {
|
||||
.code |n|: n + 30
|
||||
.info |info|: info.code + info.extra + 30
|
||||
.empty: 40
|
||||
}
|
||||
yield result
|
||||
}
|
||||
}
|
||||
|
||||
catch_widen func(value i32) i32 {
|
||||
return via_widen(value) catch |e| {
|
||||
match e {
|
||||
.bad: yield 50
|
||||
.worse: yield 51
|
||||
.code |n|: yield n
|
||||
.info |info|: yield info.code + info.extra
|
||||
.empty: yield 52
|
||||
result i32 :: match e {
|
||||
.bad: 50
|
||||
.worse: 51
|
||||
.code |n|: n
|
||||
.info |info|: info.code + info.extra
|
||||
.empty: 52
|
||||
}
|
||||
yield result
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,24 +141,27 @@ main func() i32 {
|
||||
l :: catch_widen(0)
|
||||
m :: catch_widen(-1)
|
||||
n :: inline_enum(0) catch |e| {
|
||||
if (e == .inline_bad) {
|
||||
result i32 :: if (e == .inline_bad) {
|
||||
yield 60
|
||||
} else {
|
||||
yield 61
|
||||
}
|
||||
yield result
|
||||
}
|
||||
o :: inline_detail(0) catch |e| {
|
||||
match e {
|
||||
.inline_code |value|: yield value + 70
|
||||
.inline_empty: yield 80
|
||||
result i32 :: match e {
|
||||
.inline_code |value|: value + 70
|
||||
.inline_empty: 80
|
||||
}
|
||||
yield result
|
||||
}
|
||||
p :: with_detail(3) catch |e| {
|
||||
match e {
|
||||
.code |value|: yield value
|
||||
.info |info|: yield info.code + info.extra
|
||||
.empty: yield 0
|
||||
result i32 :: match e {
|
||||
.code |value|: value
|
||||
.info |info|: info.code + info.extra
|
||||
.empty: 0
|
||||
}
|
||||
yield result
|
||||
}
|
||||
|
||||
acc = acc + a + b + c + d + e + f + g + h + i + j + k + l + m + n + o + p
|
||||
|
||||
Reference in New Issue
Block a user