0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-02-01 20:25:12 -05:00

BREAKING(std/wasi): make implementation details private (#8996)

This makes the implementation details of the Context class private,
making the public interface much more bare-bones and aligns it closer to
what Node exposes.
This commit is contained in:
Casper Beyer 2021-01-06 01:14:42 +08:00 committed by GitHub
parent e192eda913
commit ee9c0c8373
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -332,23 +332,22 @@ export interface ContextOptions {
* structure configured explicitly. * structure configured explicitly.
*/ */
export default class Context { export default class Context {
args: string[]; #args: string[];
env: { [key: string]: string | undefined }; #env: { [key: string]: string | undefined };
exitOnReturn: boolean; #exitOnReturn: boolean;
memory: WebAssembly.Memory; #memory: WebAssembly.Memory;
#fds: FileDescriptor[];
fds: FileDescriptor[];
exports: Record<string, WebAssembly.ImportValue>;
#started: boolean; #started: boolean;
constructor(options: ContextOptions) { exports: Record<string, WebAssembly.ImportValue>;
this.args = options.args ?? [];
this.env = options.env ?? {};
this.exitOnReturn = options.exitOnReturn ?? true;
this.memory = null!;
this.fds = [ constructor(options: ContextOptions) {
this.#args = options.args ?? [];
this.#env = options.env ?? {};
this.#exitOnReturn = options.exitOnReturn ?? true;
this.#memory = null!;
this.#fds = [
{ {
rid: options.stdin ?? Deno.stdin.rid, rid: options.stdin ?? Deno.stdin.rid,
type: FILETYPE_CHARACTER_DEVICE, type: FILETYPE_CHARACTER_DEVICE,
@ -378,7 +377,7 @@ export default class Context {
vpath, vpath,
}; };
this.fds.push(entry); this.#fds.push(entry);
} }
} }
@ -387,10 +386,10 @@ export default class Context {
argvOffset: number, argvOffset: number,
argvBufferOffset: number, argvBufferOffset: number,
): number => { ): number => {
const args = this.args; const args = this.#args;
const textEncoder = new TextEncoder(); const textEncoder = new TextEncoder();
const memoryData = new Uint8Array(this.memory.buffer); const memoryData = new Uint8Array(this.#memory.buffer);
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
for (const arg of args) { for (const arg of args) {
memoryView.setUint32(argvOffset, argvBufferOffset, true); memoryView.setUint32(argvOffset, argvBufferOffset, true);
@ -408,9 +407,9 @@ export default class Context {
argcOffset: number, argcOffset: number,
argvBufferSizeOffset: number, argvBufferSizeOffset: number,
): number => { ): number => {
const args = this.args; const args = this.#args;
const textEncoder = new TextEncoder(); const textEncoder = new TextEncoder();
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
memoryView.setUint32(argcOffset, args.length, true); memoryView.setUint32(argcOffset, args.length, true);
memoryView.setUint32( memoryView.setUint32(
@ -428,10 +427,10 @@ export default class Context {
environOffset: number, environOffset: number,
environBufferOffset: number, environBufferOffset: number,
): number => { ): number => {
const entries = Object.entries(this.env); const entries = Object.entries(this.#env);
const textEncoder = new TextEncoder(); const textEncoder = new TextEncoder();
const memoryData = new Uint8Array(this.memory.buffer); const memoryData = new Uint8Array(this.#memory.buffer);
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
for (const [key, value] of entries) { for (const [key, value] of entries) {
memoryView.setUint32(environOffset, environBufferOffset, true); memoryView.setUint32(environOffset, environBufferOffset, true);
@ -449,9 +448,9 @@ export default class Context {
environcOffset: number, environcOffset: number,
environBufferSizeOffset: number, environBufferSizeOffset: number,
): number => { ): number => {
const entries = Object.entries(this.env); const entries = Object.entries(this.#env);
const textEncoder = new TextEncoder(); const textEncoder = new TextEncoder();
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
memoryView.setUint32(environcOffset, entries.length, true); memoryView.setUint32(environcOffset, entries.length, true);
memoryView.setUint32( memoryView.setUint32(
@ -469,7 +468,7 @@ export default class Context {
id: number, id: number,
resolutionOffset: number, resolutionOffset: number,
): number => { ): number => {
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
switch (id) { switch (id) {
case CLOCKID_REALTIME: { case CLOCKID_REALTIME: {
@ -503,7 +502,7 @@ export default class Context {
precision: bigint, precision: bigint,
timeOffset: number, timeOffset: number,
): number => { ): number => {
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
switch (id) { switch (id) {
case CLOCKID_REALTIME: { case CLOCKID_REALTIME: {
@ -552,7 +551,7 @@ export default class Context {
"fd_close": syscall(( "fd_close": syscall((
fd: number, fd: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -561,7 +560,7 @@ export default class Context {
Deno.close(entry.rid); Deno.close(entry.rid);
} }
delete this.fds[fd]; delete this.#fds[fd];
return ERRNO_SUCCESS; return ERRNO_SUCCESS;
}), }),
@ -569,7 +568,7 @@ export default class Context {
"fd_datasync": syscall(( "fd_datasync": syscall((
fd: number, fd: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -583,12 +582,12 @@ export default class Context {
fd: number, fd: number,
offset: number, offset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
memoryView.setUint8(offset, entry.type!); memoryView.setUint8(offset, entry.type!);
memoryView.setUint16(offset + 2, entry.flags!, true); memoryView.setUint16(offset + 2, entry.flags!, true);
memoryView.setBigUint64(offset + 8, 0n, true); // TODO memoryView.setBigUint64(offset + 8, 0n, true); // TODO
@ -616,12 +615,12 @@ export default class Context {
fd: number, fd: number,
offset: number, offset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
const info = Deno.fstatSync(entry.rid!); const info = Deno.fstatSync(entry.rid!);
@ -688,7 +687,7 @@ export default class Context {
fd: number, fd: number,
size: bigint, size: bigint,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -704,7 +703,7 @@ export default class Context {
mtim: bigint, mtim: bigint,
flags: number, flags: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -733,13 +732,13 @@ export default class Context {
offset: bigint, offset: bigint,
nreadOffset: number, nreadOffset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (entry == null) { if (entry == null) {
return ERRNO_BADF; return ERRNO_BADF;
} }
const seek = Deno.seekSync(entry.rid!, 0, Deno.SeekMode.Current); const seek = Deno.seekSync(entry.rid!, 0, Deno.SeekMode.Current);
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
let nread = 0; let nread = 0;
for (let i = 0; i < iovsLength; i++) { for (let i = 0; i < iovsLength; i++) {
@ -750,7 +749,7 @@ export default class Context {
iovsOffset += 4; iovsOffset += 4;
const data = new Uint8Array( const data = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
dataOffset, dataOffset,
dataLength, dataLength,
); );
@ -767,7 +766,7 @@ export default class Context {
fd: number, fd: number,
prestatOffset: number, prestatOffset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -776,7 +775,7 @@ export default class Context {
return ERRNO_BADF; return ERRNO_BADF;
} }
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
memoryView.setUint8(prestatOffset, PREOPENTYPE_DIR); memoryView.setUint8(prestatOffset, PREOPENTYPE_DIR);
memoryView.setUint32( memoryView.setUint32(
prestatOffset + 4, prestatOffset + 4,
@ -792,7 +791,7 @@ export default class Context {
pathOffset: number, pathOffset: number,
pathLength: number, pathLength: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -801,7 +800,11 @@ export default class Context {
return ERRNO_BADF; return ERRNO_BADF;
} }
const data = new Uint8Array(this.memory.buffer, pathOffset, pathLength); const data = new Uint8Array(
this.#memory.buffer,
pathOffset,
pathLength,
);
data.set(new TextEncoder().encode(entry.vpath)); data.set(new TextEncoder().encode(entry.vpath));
return ERRNO_SUCCESS; return ERRNO_SUCCESS;
@ -814,13 +817,13 @@ export default class Context {
offset: bigint, offset: bigint,
nwrittenOffset: number, nwrittenOffset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
const seek = Deno.seekSync(entry.rid!, 0, Deno.SeekMode.Current); const seek = Deno.seekSync(entry.rid!, 0, Deno.SeekMode.Current);
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
let nwritten = 0; let nwritten = 0;
for (let i = 0; i < iovsLength; i++) { for (let i = 0; i < iovsLength; i++) {
@ -831,7 +834,7 @@ export default class Context {
iovsOffset += 4; iovsOffset += 4;
const data = new Uint8Array( const data = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
dataOffset, dataOffset,
dataLength, dataLength,
); );
@ -850,12 +853,12 @@ export default class Context {
iovsLength: number, iovsLength: number,
nreadOffset: number, nreadOffset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
let nread = 0; let nread = 0;
for (let i = 0; i < iovsLength; i++) { for (let i = 0; i < iovsLength; i++) {
@ -866,7 +869,7 @@ export default class Context {
iovsOffset += 4; iovsOffset += 4;
const data = new Uint8Array( const data = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
dataOffset, dataOffset,
dataLength, dataLength,
); );
@ -885,13 +888,13 @@ export default class Context {
cookie: bigint, cookie: bigint,
bufferUsedOffset: number, bufferUsedOffset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
const memoryData = new Uint8Array(this.memory.buffer); const memoryData = new Uint8Array(this.#memory.buffer);
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
let bufferUsed = 0; let bufferUsed = 0;
@ -952,20 +955,20 @@ export default class Context {
fd: number, fd: number,
to: number, to: number,
): number => { ): number => {
if (!this.fds[fd]) { if (!this.#fds[fd]) {
return ERRNO_BADF; return ERRNO_BADF;
} }
if (!this.fds[to]) { if (!this.#fds[to]) {
return ERRNO_BADF; return ERRNO_BADF;
} }
if (this.fds[to].rid) { if (this.#fds[to].rid) {
Deno.close(this.fds[to].rid!); Deno.close(this.#fds[to].rid!);
} }
this.fds[to] = this.fds[fd]; this.#fds[to] = this.#fds[fd];
delete this.fds[fd]; delete this.#fds[fd];
return ERRNO_SUCCESS; return ERRNO_SUCCESS;
}), }),
@ -976,12 +979,12 @@ export default class Context {
whence: number, whence: number,
newOffsetOffset: number, newOffsetOffset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
// FIXME Deno does not support seeking with big integers // FIXME Deno does not support seeking with big integers
const newOffset = Deno.seekSync(entry.rid!, Number(offset), whence); const newOffset = Deno.seekSync(entry.rid!, Number(offset), whence);
@ -993,7 +996,7 @@ export default class Context {
"fd_sync": syscall(( "fd_sync": syscall((
fd: number, fd: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -1007,12 +1010,12 @@ export default class Context {
fd: number, fd: number,
offsetOffset: number, offsetOffset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
const offset = Deno.seekSync(entry.rid!, 0, Deno.SeekMode.Current); const offset = Deno.seekSync(entry.rid!, 0, Deno.SeekMode.Current);
memoryView.setBigUint64(offsetOffset, BigInt(offset), true); memoryView.setBigUint64(offsetOffset, BigInt(offset), true);
@ -1026,12 +1029,12 @@ export default class Context {
iovsLength: number, iovsLength: number,
nwrittenOffset: number, nwrittenOffset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
let nwritten = 0; let nwritten = 0;
for (let i = 0; i < iovsLength; i++) { for (let i = 0; i < iovsLength; i++) {
@ -1042,7 +1045,7 @@ export default class Context {
iovsOffset += 4; iovsOffset += 4;
const data = new Uint8Array( const data = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
dataOffset, dataOffset,
dataLength, dataLength,
); );
@ -1059,7 +1062,7 @@ export default class Context {
pathOffset: number, pathOffset: number,
pathLength: number, pathLength: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -1069,7 +1072,11 @@ export default class Context {
} }
const textDecoder = new TextDecoder(); const textDecoder = new TextDecoder();
const data = new Uint8Array(this.memory.buffer, pathOffset, pathLength); const data = new Uint8Array(
this.#memory.buffer,
pathOffset,
pathLength,
);
const path = resolve(entry.path!, textDecoder.decode(data)); const path = resolve(entry.path!, textDecoder.decode(data));
Deno.mkdirSync(path); Deno.mkdirSync(path);
@ -1084,7 +1091,7 @@ export default class Context {
pathLength: number, pathLength: number,
bufferOffset: number, bufferOffset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -1094,10 +1101,14 @@ export default class Context {
} }
const textDecoder = new TextDecoder(); const textDecoder = new TextDecoder();
const data = new Uint8Array(this.memory.buffer, pathOffset, pathLength); const data = new Uint8Array(
this.#memory.buffer,
pathOffset,
pathLength,
);
const path = resolve(entry.path!, textDecoder.decode(data)); const path = resolve(entry.path!, textDecoder.decode(data));
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
const info = (flags & LOOKUPFLAGS_SYMLINK_FOLLOW) != 0 const info = (flags & LOOKUPFLAGS_SYMLINK_FOLLOW) != 0
? Deno.statSync(path) ? Deno.statSync(path)
@ -1178,7 +1189,7 @@ export default class Context {
mtim: bigint, mtim: bigint,
fstflags: number, fstflags: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -1188,7 +1199,11 @@ export default class Context {
} }
const textDecoder = new TextDecoder(); const textDecoder = new TextDecoder();
const data = new Uint8Array(this.memory.buffer, pathOffset, pathLength); const data = new Uint8Array(
this.#memory.buffer,
pathOffset,
pathLength,
);
const path = resolve(entry.path!, textDecoder.decode(data)); const path = resolve(entry.path!, textDecoder.decode(data));
if ((fstflags & FSTFLAGS_ATIM_NOW) == FSTFLAGS_ATIM_NOW) { if ((fstflags & FSTFLAGS_ATIM_NOW) == FSTFLAGS_ATIM_NOW) {
@ -1213,8 +1228,8 @@ export default class Context {
newPathOffset: number, newPathOffset: number,
newPathLength: number, newPathLength: number,
): number => { ): number => {
const oldEntry = this.fds[oldFd]; const oldEntry = this.#fds[oldFd];
const newEntry = this.fds[newFd]; const newEntry = this.#fds[newFd];
if (!oldEntry || !newEntry) { if (!oldEntry || !newEntry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -1225,13 +1240,13 @@ export default class Context {
const textDecoder = new TextDecoder(); const textDecoder = new TextDecoder();
const oldData = new Uint8Array( const oldData = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
oldPathOffset, oldPathOffset,
oldPathLength, oldPathLength,
); );
const oldPath = resolve(oldEntry.path!, textDecoder.decode(oldData)); const oldPath = resolve(oldEntry.path!, textDecoder.decode(oldData));
const newData = new Uint8Array( const newData = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
newPathOffset, newPathOffset,
newPathLength, newPathLength,
); );
@ -1253,7 +1268,7 @@ export default class Context {
fdflags: number, fdflags: number,
openedFdOffset: number, openedFdOffset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -1264,7 +1279,7 @@ export default class Context {
const textDecoder = new TextDecoder(); const textDecoder = new TextDecoder();
const pathData = new Uint8Array( const pathData = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
pathOffset, pathOffset,
pathLength, pathLength,
); );
@ -1296,13 +1311,13 @@ export default class Context {
// doesn't work with directories on windows so we'll have to work // doesn't work with directories on windows so we'll have to work
// around it for now. // around it for now.
const entries = Array.from(Deno.readDirSync(path)); const entries = Array.from(Deno.readDirSync(path));
const openedFd = this.fds.push({ const openedFd = this.#fds.push({
flags: fdflags, flags: fdflags,
path, path,
entries, entries,
}) - 1; }) - 1;
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
memoryView.setUint32(openedFdOffset, openedFd, true); memoryView.setUint32(openedFdOffset, openedFd, true);
return ERRNO_SUCCESS; return ERRNO_SUCCESS;
@ -1376,13 +1391,13 @@ export default class Context {
} }
const { rid } = Deno.openSync(path, options); const { rid } = Deno.openSync(path, options);
const openedFd = this.fds.push({ const openedFd = this.#fds.push({
rid, rid,
flags: fdflags, flags: fdflags,
path, path,
}) - 1; }) - 1;
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
memoryView.setUint32(openedFdOffset, openedFd, true); memoryView.setUint32(openedFdOffset, openedFd, true);
return ERRNO_SUCCESS; return ERRNO_SUCCESS;
@ -1396,7 +1411,7 @@ export default class Context {
bufferLength: number, bufferLength: number,
bufferUsedOffset: number, bufferUsedOffset: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -1405,11 +1420,11 @@ export default class Context {
return ERRNO_INVAL; return ERRNO_INVAL;
} }
const memoryData = new Uint8Array(this.memory.buffer); const memoryData = new Uint8Array(this.#memory.buffer);
const memoryView = new DataView(this.memory.buffer); const memoryView = new DataView(this.#memory.buffer);
const pathData = new Uint8Array( const pathData = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
pathOffset, pathOffset,
pathLength, pathLength,
); );
@ -1430,7 +1445,7 @@ export default class Context {
pathOffset: number, pathOffset: number,
pathLength: number, pathLength: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -1440,7 +1455,11 @@ export default class Context {
} }
const textDecoder = new TextDecoder(); const textDecoder = new TextDecoder();
const data = new Uint8Array(this.memory.buffer, pathOffset, pathLength); const data = new Uint8Array(
this.#memory.buffer,
pathOffset,
pathLength,
);
const path = resolve(entry.path!, textDecoder.decode(data)); const path = resolve(entry.path!, textDecoder.decode(data));
if (!Deno.statSync(path).isDirectory) { if (!Deno.statSync(path).isDirectory) {
@ -1460,8 +1479,8 @@ export default class Context {
newPathOffset: number, newPathOffset: number,
newPathLength: number, newPathLength: number,
): number => { ): number => {
const oldEntry = this.fds[fd]; const oldEntry = this.#fds[fd];
const newEntry = this.fds[newFd]; const newEntry = this.#fds[newFd];
if (!oldEntry || !newEntry) { if (!oldEntry || !newEntry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -1472,13 +1491,13 @@ export default class Context {
const textDecoder = new TextDecoder(); const textDecoder = new TextDecoder();
const oldData = new Uint8Array( const oldData = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
oldPathOffset, oldPathOffset,
oldPathLength, oldPathLength,
); );
const oldPath = resolve(oldEntry.path!, textDecoder.decode(oldData)); const oldPath = resolve(oldEntry.path!, textDecoder.decode(oldData));
const newData = new Uint8Array( const newData = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
newPathOffset, newPathOffset,
newPathLength, newPathLength,
); );
@ -1496,7 +1515,7 @@ export default class Context {
newPathOffset: number, newPathOffset: number,
newPathLength: number, newPathLength: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -1507,13 +1526,13 @@ export default class Context {
const textDecoder = new TextDecoder(); const textDecoder = new TextDecoder();
const oldData = new Uint8Array( const oldData = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
oldPathOffset, oldPathOffset,
oldPathLength, oldPathLength,
); );
const oldPath = textDecoder.decode(oldData); const oldPath = textDecoder.decode(oldData);
const newData = new Uint8Array( const newData = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
newPathOffset, newPathOffset,
newPathLength, newPathLength,
); );
@ -1529,7 +1548,7 @@ export default class Context {
pathOffset: number, pathOffset: number,
pathLength: number, pathLength: number,
): number => { ): number => {
const entry = this.fds[fd]; const entry = this.#fds[fd];
if (!entry) { if (!entry) {
return ERRNO_BADF; return ERRNO_BADF;
} }
@ -1539,7 +1558,11 @@ export default class Context {
} }
const textDecoder = new TextDecoder(); const textDecoder = new TextDecoder();
const data = new Uint8Array(this.memory.buffer, pathOffset, pathLength); const data = new Uint8Array(
this.#memory.buffer,
pathOffset,
pathLength,
);
const path = resolve(entry.path!, textDecoder.decode(data)); const path = resolve(entry.path!, textDecoder.decode(data));
Deno.removeSync(path); Deno.removeSync(path);
@ -1559,7 +1582,7 @@ export default class Context {
"proc_exit": syscall(( "proc_exit": syscall((
rval: number, rval: number,
): never => { ): never => {
if (this.exitOnReturn) { if (this.#exitOnReturn) {
Deno.exit(rval); Deno.exit(rval);
} }
@ -1581,7 +1604,7 @@ export default class Context {
bufferLength: number, bufferLength: number,
): number => { ): number => {
const buffer = new Uint8Array( const buffer = new Uint8Array(
this.memory.buffer, this.#memory.buffer,
bufferOffset, bufferOffset,
bufferLength, bufferLength,
); );
@ -1646,7 +1669,7 @@ export default class Context {
throw new TypeError("WebAsembly.instance must provide a memory export"); throw new TypeError("WebAsembly.instance must provide a memory export");
} }
this.memory = memory; this.#memory = memory;
if (typeof _initialize == "function") { if (typeof _initialize == "function") {
throw new TypeError( throw new TypeError(
@ -1685,7 +1708,7 @@ export default class Context {
throw new TypeError("WebAsembly.instance must provide a memory export"); throw new TypeError("WebAsembly.instance must provide a memory export");
} }
this.memory = memory; this.#memory = memory;
if (typeof _start == "function") { if (typeof _start == "function") {
throw new TypeError( throw new TypeError(