selfhost/cmd/ww+w6l/main.ww: amalloc → alloc([], N)! (α-10)
Phase 0 #8 tenth α/γ-batch. 14 amalloc sites: - ww/main.ww: 11 (path bufs in importpathform/locatein/peekpackage/ expanddir/arenadupcstr/builddirmodulepath/buildsearchpath + γ names/nlens in enumeratedir) - w6l/main.ww: 3 (resolvelib cstr+NUL paths) α: *u8 → []u8 + .ptr at consumer; γ: **u8 / *u64 → []*u8 / []u64 with element-count alloc (was bytes/8). Verified 132/132 + 995_self_rebuild byte-identity. ~27 amalloc sites remain across 5 files; most blocked on #7 (astrndup), #8 (β grow loops in w6a/parse, w6a/obj, w6l/dynout), #10 (cgoutarena).
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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 <dir>/<path>/ as a directory, then <dir>/<path>.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 <dir>/<base>.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: "." : <incs> : <selfdir>/../../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
|
||||
|
||||
@@ -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 <dir>/<path>/ as a directory, then <dir>/<path>.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 <dir>/<base>.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: "." : <incs> : <selfdir>/../../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
|
||||
|
||||
Reference in New Issue
Block a user