diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/vec.fwd | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/examples/vec.fwd b/examples/vec.fwd index f7838f1..22049e0 100644 --- a/examples/vec.fwd +++ b/examples/vec.fwd @@ -45,9 +45,17 @@ set_vec(vec v, i64 i, i64 e, (vec) ok) { v => [n => n, s => s, buf => buf]; buf + (n - 1 as u64) => nbuf; - nil nbuf {fwdpanic("should never happen");} => dst; + nil nbuf { + nil nbuf; + fwdfree(buf); + fwdpanic("should never happen"); + } => dst; + + /* perform actual store */ e => dst*; - ok([n => n, s => s, nbuf => buf] vec); + + nil nbuf; + ok([n => n, s => s, buf => buf] vec); } n_vec(vec v, (vec, u64) ok) @@ -67,9 +75,19 @@ append_vec(vec v, i64 e, (vec) ok) at_vec(vec v, u64 i, (vec, &i64) ok) { v => [n => n, s => s, buf => buf]; - guard(i < n) => {fwdpanic("bounds error")} => ; - fwdptradd(buf, (i * sizeof(i64)) as i64) => *i64 buf; - nil buf {fwdpanic("should never happen");} => &i64 bufr; + guard(i < n) => { + fwdfree(buf); + fwdpanic("bounds error"); + } => ; + + buf + i => *i64 nbuf; + nil nbuf { + nil nbuf; + fwdfree(buf); + fwdpanic("should never happen"); + } => &i64 bufr; + + nil nbuf; ok([n => n, s => s, buf => buf] vec, bufr); } |
