diff --git a/selfhost/cmd/w6l/main.combined.ww b/selfhost/cmd/w6l/main.combined.ww
index c2625725..9b20aa00 100644
--- a/selfhost/cmd/w6l/main.combined.ww
+++ b/selfhost/cmd/w6l/main.combined.ww
@@ -3203,30 +3203,30 @@ fn resolvelib(a: *arena, name: *u8, libdirs: **u8, nlibdirs: i32) *u8 = {
let _l1: u64 = buildpath(bufp.ptr, dir, name, ".so");
if (islinkable(bufp.ptr)) {
let pl: u64 = cstrlen(bufp.ptr);
- let p: *u8 = amalloc(a, pl + 1u64): *u8;
+ let p: []u8 = alloc([], pl + 1u64)!;
let k: u64 = 0u64;
for (k <= pl) { p[k] = bufp[k]; k += 1u64; };
- return p;
+ return p.ptr;
};
let v: u64 = 0u64;
for (v <= 8u64) {
let _l2: u64 = buildpathv(bufp.ptr, dir, name, v);
if (islinkable(bufp.ptr)) {
let pl2: u64 = cstrlen(bufp.ptr);
- let p2: *u8 = amalloc(a, pl2 + 1u64): *u8;
+ let p2: []u8 = alloc([], pl2 + 1u64)!;
let k2: u64 = 0u64;
for (k2 <= pl2) { p2[k2] = bufp[k2]; k2 += 1u64; };
- return p2;
+ return p2.ptr;
};
v += 1u64;
};
let _l3: u64 = buildpath(bufp.ptr, dir, name, ".a");
if (islinkable(bufp.ptr)) {
let pl3: u64 = cstrlen(bufp.ptr);
- let p3: *u8 = amalloc(a, pl3 + 1u64): *u8;
+ let p3: []u8 = alloc([], pl3 + 1u64)!;
let k3: u64 = 0u64;
for (k3 <= pl3) { p3[k3] = bufp[k3]; k3 += 1u64; };
- return p3;
+ return p3.ptr;
};
i += 1;
};
diff --git a/selfhost/cmd/w6l/main.ww b/selfhost/cmd/w6l/main.ww
index efbe0978..797b00c6 100644
--- a/selfhost/cmd/w6l/main.ww
+++ b/selfhost/cmd/w6l/main.ww
@@ -139,30 +139,30 @@ fn resolvelib(a: *arena, name: *u8, libdirs: **u8, nlibdirs: i32) *u8 = {
let _l1: u64 = buildpath(bufp.ptr, dir, name, ".so");
if (islinkable(bufp.ptr)) {
let pl: u64 = cstrlen(bufp.ptr);
- let p: *u8 = amalloc(a, pl + 1u64): *u8;
+ let p: []u8 = alloc([], pl + 1u64)!;
let k: u64 = 0u64;
for (k <= pl) { p[k] = bufp[k]; k += 1u64; };
- return p;
+ return p.ptr;
};
let v: u64 = 0u64;
for (v <= 8u64) {
let _l2: u64 = buildpathv(bufp.ptr, dir, name, v);
if (islinkable(bufp.ptr)) {
let pl2: u64 = cstrlen(bufp.ptr);
- let p2: *u8 = amalloc(a, pl2 + 1u64): *u8;
+ let p2: []u8 = alloc([], pl2 + 1u64)!;
let k2: u64 = 0u64;
for (k2 <= pl2) { p2[k2] = bufp[k2]; k2 += 1u64; };
- return p2;
+ return p2.ptr;
};
v += 1u64;
};
let _l3: u64 = buildpath(bufp.ptr, dir, name, ".a");
if (islinkable(bufp.ptr)) {
let pl3: u64 = cstrlen(bufp.ptr);
- let p3: *u8 = amalloc(a, pl3 + 1u64): *u8;
+ let p3: []u8 = alloc([], pl3 + 1u64)!;
let k3: u64 = 0u64;
for (k3 <= pl3) { p3[k3] = bufp[k3]; k3 += 1u64; };
- return p3;
+ return p3.ptr;
};
i += 1;
};
diff --git a/selfhost/cmd/ww/main.combined.ww b/selfhost/cmd/ww/main.combined.ww
index 6582a901..96242139 100644
--- a/selfhost/cmd/ww/main.combined.ww
+++ b/selfhost/cmd/ww/main.combined.ww
@@ -1098,7 +1098,7 @@ fn visitadd(c: *expctx, path: str) void = {
// (ref/hare/hare/module/srcs.ha:78 builds the same shape via
// path::push per ident part).
fn importpathform(a: *arena, name: *u8, namelen: u64) *u8 = {
- let buf: *u8 = amalloc(a, namelen + 1u64): *u8;
+ let buf: []u8 = alloc([], namelen + 1u64)!;
let i: u64 = 0u64;
for (i < namelen) {
if (name[i] == 46u8) { buf[i] = 47u8; } // '.' -> '/'
@@ -1106,7 +1106,7 @@ fn importpathform(a: *arena, name: *u8, namelen: u64) *u8 = {
i += 1u64;
};
buf[namelen] = 0u8;
- return buf;
+ return buf.ptr;
};
// Try
// as a directory, then /.ww as a file.
@@ -1117,7 +1117,7 @@ fn importpathform(a: *arena, name: *u8, namelen: u64) *u8 = {
// `foo/foo.ha` fallback; a module IS the directory).
fn locatein(a: *arena, dir: *u8, dirlen: u64,
pathform: *u8, pflen: u64, isdir: *i32) *u8 = {
- let buf: *u8 = amalloc(a, PATH_MAX): *u8;
+ let buf: []u8 = alloc([], PATH_MAX)!;
let off: u64 = 0u64;
let i: u64 = 0u64;
for (i < dirlen) { buf[off + i] = dir[i]; i += 1u64; };
@@ -1128,7 +1128,7 @@ fn locatein(a: *arena, dir: *u8, dirlen: u64,
off += pflen;
buf[off] = 0u8;
let fi: os.filestat;
- let r: (void | os.oserror) = os.stat(&fi, pathstr(buf));
+ let r: (void | os.oserror) = os.stat(&fi, pathstr(buf.ptr));
let isdirhit: bool = false;
match (r) {
case void => {
@@ -1139,10 +1139,10 @@ fn locatein(a: *arena, dir: *u8, dirlen: u64,
};
if (isdirhit) {
*isdir = 1;
- return buf;
+ return buf.ptr;
};
- let buf2: *u8 = amalloc(a, PATH_MAX): *u8;
+ let buf2: []u8 = alloc([], PATH_MAX)!;
off = 0u64;
i = 0u64;
for (i < dirlen) { buf2[off + i] = dir[i]; i += 1u64; };
@@ -1155,9 +1155,9 @@ fn locatein(a: *arena, dir: *u8, dirlen: u64,
buf2[off] = 119u8; off += 1u64; // 'w'
buf2[off] = 119u8; off += 1u64; // 'w'
buf2[off] = 0u8;
- if (os.access(pathstr(buf2), 0i32) == 0) {
+ if (os.access(pathstr(buf2.ptr), 0i32) == 0) {
*isdir = 0;
- return buf2;
+ return buf2.ptr;
};
return nil;
};
@@ -1261,8 +1261,8 @@ fn enumeratedir(a: *arena, dirpath: *u8) (**u8, i32) = {
let fd: i32 = os.open(pathstr(dirpath), os.flag.RDONLY, 0i32);
if (fd < 0) { return nil: **u8, 0; };
let maxnames: i32 = 256;
- let names: **u8 = amalloc(a, (maxnames: u64) * 8u64): **u8;
- let nlens: *u64 = amalloc(a, (maxnames: u64) * 8u64): *u64;
+ let names: []*u8 = alloc([], maxnames: u64)!;
+ let nlens: []u64 = alloc([], maxnames: u64)!;
let n: i32 = 0;
let buf: []u8 = alloc([], 8192u64)!;
buf.len = 8192;
@@ -1278,11 +1278,11 @@ fn enumeratedir(a: *arena, dirpath: *u8) (**u8, i32) = {
let nl: u64 = cstrlen(nm);
if (dirfilekeep(nm, nl)) {
if (n < maxnames) {
- let cp: *u8 = amalloc(a, nl + 1u64): *u8;
+ let cp: []u8 = alloc([], nl + 1u64)!;
let i: u64 = 0u64;
for (i < nl) { cp[i] = nm[i]; i += 1u64; };
cp[nl] = 0u8;
- names[n] = cp;
+ names[n] = cp.ptr;
nlens[n] = nl;
n += 1;
};
@@ -1312,7 +1312,7 @@ fn enumeratedir(a: *arena, dirpath: *u8) (**u8, i32) = {
};
i += 1;
};
- return names, n;
+ return names.ptr, n;
};
// ---- file slurp -------------------------------------------------------
@@ -1495,11 +1495,11 @@ fn peekpackage(a: *arena, pathcs: *u8) *u8 = {
};
let plen: u64 = t - start;
if (plen == 0u64) { return nil; };
- let r: *u8 = amalloc(a, plen + 1u64): *u8;
+ let r: []u8 = alloc([], plen + 1u64)!;
let k: u64 = 0u64;
for (k < plen) { r[k] = buf[start + k]; k += 1u64; };
r[plen] = 0u8;
- return r;
+ return r.ptr;
}; }; }; }; }; }; };
};
return nil;
@@ -1540,21 +1540,21 @@ fn expanddir(c: *expctx, dirpath: *u8) void = {
let i: i32 = 0;
for (i < n) {
let nlen: u64 = cstrlen(names[i]);
- let fp: *u8 = amalloc(c.a, dlen + 1u64 + nlen + 1u64): *u8;
+ let fp: []u8 = alloc([], dlen + 1u64 + nlen + 1u64)!;
let k: u64 = 0u64;
for (k < dlen) { fp[k] = dirpath[k]; k += 1u64; };
fp[dlen] = 47u8; // '/'
k = 0u64;
for (k < nlen) { fp[dlen + 1u64 + k] = names[i][k]; k += 1u64; };
fp[dlen + 1u64 + nlen] = 0u8;
- let pkg: *u8 = peekpackage(c.a, fp);
+ let pkg: *u8 = peekpackage(c.a, fp.ptr);
if (pkg != nil) {
if (dirpkg == nil) { dirpkg = pkg; }
else { if (!cstreq(dirpkg, pkg)) {
- strictpkgmismatch(fp, pkg, dirpkg, dirpath);
+ strictpkgmismatch(fp.ptr, pkg, dirpkg, dirpath);
}; };
};
- expand(c, fp);
+ expand(c, fp.ptr);
i += 1;
};
};
@@ -1847,18 +1847,18 @@ fn basenameoff(p: *u8, plen: u64) u64 = {
// arenadupcstr — copy `plen` bytes from `src` into a fresh NUL-sealed
// arena buffer.
fn arenadupcstr(a: *arena, src: *u8, plen: u64) *u8 = {
- let buf: *u8 = amalloc(a, plen + 1u64): *u8;
+ let buf: []u8 = alloc([], plen + 1u64)!;
let i: u64 = 0u64;
for (i < plen) { buf[i] = src[i]; i += 1u64; };
buf[plen] = 0u8;
- return buf;
+ return buf.ptr;
};
// builddirmodulepath — alloc /.ww, NUL-terminated, in `a`.
fn builddirmodulepath(a: *arena, dir: *u8, dlen: u64,
base: *u8, blen: u64) *u8 = {
let need: u64 = dlen + 1u64 + blen + 3u64 + 1u64;
- let buf: *u8 = amalloc(a, need): *u8;
+ let buf: []u8 = alloc([], need)!;
let off: u64 = 0u64;
let i: u64 = 0u64;
for (i < dlen) { buf[off] = dir[i]; off += 1u64; i += 1u64; };
@@ -1869,26 +1869,26 @@ fn builddirmodulepath(a: *arena, dir: *u8, dlen: u64,
buf[off] = 119u8; off += 1u64; // 'w'
buf[off] = 119u8; off += 1u64; // 'w'
buf[off] = 0u8;
- return buf;
+ return buf.ptr;
};
// buildsearchpath — compose the colon-separated lookup path used by
// resolvemodule's case (4). Order: "." : : /../../lib
fn buildsearchpath(a: *arena, selfdir: *u8, incs: *u8) *u8 = {
- let buf: *u8 = amalloc(a, PATH_MAX * 2u64): *u8;
+ let buf: []u8 = alloc([], PATH_MAX * 2u64)!;
let off: u64 = 0u64;
buf[off] = 46u8; off += 1u64; // '.'
if (incs != nil) {
if (incs[0u64] != 0u8) {
buf[off] = 58u8; off += 1u64; // ':'
- off = cstrinto(buf, off, incs);
+ off = cstrinto(buf.ptr, off, incs);
};
};
buf[off] = 58u8; off += 1u64;
- off = cstrinto(buf, off, selfdir);
- off = strinto(buf, off, "/../../lib");
- cstrseal(buf, off);
- return buf;
+ off = cstrinto(buf.ptr, off, selfdir);
+ off = strinto(buf.ptr, off, "/../../lib");
+ cstrseal(buf.ptr, off);
+ return buf.ptr;
};
// resolvemodule — map a name like "foo", "lib/foo", "foo.ww", or
diff --git a/selfhost/cmd/ww/main.ww b/selfhost/cmd/ww/main.ww
index b5ca912c..7c521932 100644
--- a/selfhost/cmd/ww/main.ww
+++ b/selfhost/cmd/ww/main.ww
@@ -236,7 +236,7 @@ fn visitadd(c: *expctx, path: str) void = {
// (ref/hare/hare/module/srcs.ha:78 builds the same shape via
// path::push per ident part).
fn importpathform(a: *arena, name: *u8, namelen: u64) *u8 = {
- let buf: *u8 = amalloc(a, namelen + 1u64): *u8;
+ let buf: []u8 = alloc([], namelen + 1u64)!;
let i: u64 = 0u64;
for (i < namelen) {
if (name[i] == 46u8) { buf[i] = 47u8; } // '.' -> '/'
@@ -244,7 +244,7 @@ fn importpathform(a: *arena, name: *u8, namelen: u64) *u8 = {
i += 1u64;
};
buf[namelen] = 0u8;
- return buf;
+ return buf.ptr;
};
// Try // as a directory, then /.ww as a file.
@@ -255,7 +255,7 @@ fn importpathform(a: *arena, name: *u8, namelen: u64) *u8 = {
// `foo/foo.ha` fallback; a module IS the directory).
fn locatein(a: *arena, dir: *u8, dirlen: u64,
pathform: *u8, pflen: u64, isdir: *i32) *u8 = {
- let buf: *u8 = amalloc(a, PATH_MAX): *u8;
+ let buf: []u8 = alloc([], PATH_MAX)!;
let off: u64 = 0u64;
let i: u64 = 0u64;
for (i < dirlen) { buf[off + i] = dir[i]; i += 1u64; };
@@ -266,7 +266,7 @@ fn locatein(a: *arena, dir: *u8, dirlen: u64,
off += pflen;
buf[off] = 0u8;
let fi: os.filestat;
- let r: (void | os.oserror) = os.stat(&fi, pathstr(buf));
+ let r: (void | os.oserror) = os.stat(&fi, pathstr(buf.ptr));
let isdirhit: bool = false;
match (r) {
case void => {
@@ -277,10 +277,10 @@ fn locatein(a: *arena, dir: *u8, dirlen: u64,
};
if (isdirhit) {
*isdir = 1;
- return buf;
+ return buf.ptr;
};
- let buf2: *u8 = amalloc(a, PATH_MAX): *u8;
+ let buf2: []u8 = alloc([], PATH_MAX)!;
off = 0u64;
i = 0u64;
for (i < dirlen) { buf2[off + i] = dir[i]; i += 1u64; };
@@ -293,9 +293,9 @@ fn locatein(a: *arena, dir: *u8, dirlen: u64,
buf2[off] = 119u8; off += 1u64; // 'w'
buf2[off] = 119u8; off += 1u64; // 'w'
buf2[off] = 0u8;
- if (os.access(pathstr(buf2), 0i32) == 0) {
+ if (os.access(pathstr(buf2.ptr), 0i32) == 0) {
*isdir = 0;
- return buf2;
+ return buf2.ptr;
};
return nil;
};
@@ -399,8 +399,8 @@ fn enumeratedir(a: *arena, dirpath: *u8) (**u8, i32) = {
let fd: i32 = os.open(pathstr(dirpath), os.flag.RDONLY, 0i32);
if (fd < 0) { return nil: **u8, 0; };
let maxnames: i32 = 256;
- let names: **u8 = amalloc(a, (maxnames: u64) * 8u64): **u8;
- let nlens: *u64 = amalloc(a, (maxnames: u64) * 8u64): *u64;
+ let names: []*u8 = alloc([], maxnames: u64)!;
+ let nlens: []u64 = alloc([], maxnames: u64)!;
let n: i32 = 0;
let buf: []u8 = alloc([], 8192u64)!;
buf.len = 8192;
@@ -416,11 +416,11 @@ fn enumeratedir(a: *arena, dirpath: *u8) (**u8, i32) = {
let nl: u64 = cstrlen(nm);
if (dirfilekeep(nm, nl)) {
if (n < maxnames) {
- let cp: *u8 = amalloc(a, nl + 1u64): *u8;
+ let cp: []u8 = alloc([], nl + 1u64)!;
let i: u64 = 0u64;
for (i < nl) { cp[i] = nm[i]; i += 1u64; };
cp[nl] = 0u8;
- names[n] = cp;
+ names[n] = cp.ptr;
nlens[n] = nl;
n += 1;
};
@@ -450,7 +450,7 @@ fn enumeratedir(a: *arena, dirpath: *u8) (**u8, i32) = {
};
i += 1;
};
- return names, n;
+ return names.ptr, n;
};
// ---- file slurp -------------------------------------------------------
@@ -633,11 +633,11 @@ fn peekpackage(a: *arena, pathcs: *u8) *u8 = {
};
let plen: u64 = t - start;
if (plen == 0u64) { return nil; };
- let r: *u8 = amalloc(a, plen + 1u64): *u8;
+ let r: []u8 = alloc([], plen + 1u64)!;
let k: u64 = 0u64;
for (k < plen) { r[k] = buf[start + k]; k += 1u64; };
r[plen] = 0u8;
- return r;
+ return r.ptr;
}; }; }; }; }; }; };
};
return nil;
@@ -678,21 +678,21 @@ fn expanddir(c: *expctx, dirpath: *u8) void = {
let i: i32 = 0;
for (i < n) {
let nlen: u64 = cstrlen(names[i]);
- let fp: *u8 = amalloc(c.a, dlen + 1u64 + nlen + 1u64): *u8;
+ let fp: []u8 = alloc([], dlen + 1u64 + nlen + 1u64)!;
let k: u64 = 0u64;
for (k < dlen) { fp[k] = dirpath[k]; k += 1u64; };
fp[dlen] = 47u8; // '/'
k = 0u64;
for (k < nlen) { fp[dlen + 1u64 + k] = names[i][k]; k += 1u64; };
fp[dlen + 1u64 + nlen] = 0u8;
- let pkg: *u8 = peekpackage(c.a, fp);
+ let pkg: *u8 = peekpackage(c.a, fp.ptr);
if (pkg != nil) {
if (dirpkg == nil) { dirpkg = pkg; }
else { if (!cstreq(dirpkg, pkg)) {
- strictpkgmismatch(fp, pkg, dirpkg, dirpath);
+ strictpkgmismatch(fp.ptr, pkg, dirpkg, dirpath);
}; };
};
- expand(c, fp);
+ expand(c, fp.ptr);
i += 1;
};
};
@@ -985,18 +985,18 @@ fn basenameoff(p: *u8, plen: u64) u64 = {
// arenadupcstr — copy `plen` bytes from `src` into a fresh NUL-sealed
// arena buffer.
fn arenadupcstr(a: *arena, src: *u8, plen: u64) *u8 = {
- let buf: *u8 = amalloc(a, plen + 1u64): *u8;
+ let buf: []u8 = alloc([], plen + 1u64)!;
let i: u64 = 0u64;
for (i < plen) { buf[i] = src[i]; i += 1u64; };
buf[plen] = 0u8;
- return buf;
+ return buf.ptr;
};
// builddirmodulepath — alloc /.ww, NUL-terminated, in `a`.
fn builddirmodulepath(a: *arena, dir: *u8, dlen: u64,
base: *u8, blen: u64) *u8 = {
let need: u64 = dlen + 1u64 + blen + 3u64 + 1u64;
- let buf: *u8 = amalloc(a, need): *u8;
+ let buf: []u8 = alloc([], need)!;
let off: u64 = 0u64;
let i: u64 = 0u64;
for (i < dlen) { buf[off] = dir[i]; off += 1u64; i += 1u64; };
@@ -1007,26 +1007,26 @@ fn builddirmodulepath(a: *arena, dir: *u8, dlen: u64,
buf[off] = 119u8; off += 1u64; // 'w'
buf[off] = 119u8; off += 1u64; // 'w'
buf[off] = 0u8;
- return buf;
+ return buf.ptr;
};
// buildsearchpath — compose the colon-separated lookup path used by
// resolvemodule's case (4). Order: "." : : /../../lib
fn buildsearchpath(a: *arena, selfdir: *u8, incs: *u8) *u8 = {
- let buf: *u8 = amalloc(a, PATH_MAX * 2u64): *u8;
+ let buf: []u8 = alloc([], PATH_MAX * 2u64)!;
let off: u64 = 0u64;
buf[off] = 46u8; off += 1u64; // '.'
if (incs != nil) {
if (incs[0u64] != 0u8) {
buf[off] = 58u8; off += 1u64; // ':'
- off = cstrinto(buf, off, incs);
+ off = cstrinto(buf.ptr, off, incs);
};
};
buf[off] = 58u8; off += 1u64;
- off = cstrinto(buf, off, selfdir);
- off = strinto(buf, off, "/../../lib");
- cstrseal(buf, off);
- return buf;
+ off = cstrinto(buf.ptr, off, selfdir);
+ off = strinto(buf.ptr, off, "/../../lib");
+ cstrseal(buf.ptr, off);
+ return buf.ptr;
};
// resolvemodule — map a name like "foo", "lib/foo", "foo.ww", or