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