diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2026-01-06 17:17:27 +0200 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2026-01-06 17:19:52 +0200 |
| commit | 99601456e6ad4c86287ba786923c99c5499037e0 (patch) | |
| tree | 7f834f015cfc5c14e695e0521ae31c4262254dba /examples/vec.fwd | |
| parent | 64146b46da45ce69ab380add00459f7b60fe9196 (diff) | |
| download | fwd-99601456e6ad4c86287ba786923c99c5499037e0.tar.gz fwd-99601456e6ad4c86287ba786923c99c5499037e0.zip | |
+ Currently requires a lot of unnecessary `forget` statements,
but at least some can likely be eliminated by doing some
basic origin analysis, kind of like with groups
Diffstat (limited to 'examples/vec.fwd')
| -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); } |
