aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/vec.fwd28
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);
}