Skip to content

Commit 1c53dba

Browse files
authored
Merge pull request AssemblyScript#8 from MaxGraey/update-as-plus-improvments
update AssemblyScript & as-pecr. Fix string comparisions
2 parents 3c575e2 + 37a3a7b commit 1c53dba

File tree

4 files changed

+271
-73
lines changed

4 files changed

+271
-73
lines changed

assembly/index.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
import {
2-
WASAError, Descriptor,
3-
Console, Random, Date, Process, EnvironEntry, Environ, CommandLine, FileSystem, FileStat
4-
} from "./wasa";
5-
61
export {
72
WASAError, Descriptor,
83
Console, Random, Date, Process, EnvironEntry, Environ, CommandLine, FileSystem, FileStat
9-
};
4+
} from "./wasa";

assembly/wasa.ts

Lines changed: 91 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,11 @@ export class FileStat {
6969
creation_time: f64;
7070

7171
constructor(st_buf: usize) {
72-
this.file_type = load<u8>(st_buf + 16);
73-
this.file_size = load<u64>(st_buf + 24);
74-
this.access_time = (load<u64>(st_buf + 32) as f64) / 1e9;
75-
this.modification_time = (load<u64>(st_buf + 40) as f64) / 1e9;
76-
this.creation_time = (load<u64>(st_buf + 48) as f64) / 1e9;
72+
this.file_type = load<u8>(st_buf, 16);
73+
this.file_size = load<u64>(st_buf, 24);
74+
this.access_time = (load<u64>(st_buf, 32) as f64) / 1e9;
75+
this.modification_time = (load<u64>(st_buf, 40) as f64) / 1e9;
76+
this.creation_time = (load<u64>(st_buf, 48) as f64) / 1e9;
7777
}
7878
}
7979

@@ -152,7 +152,7 @@ export class Descriptor {
152152
if (fd_fdstat_get(this.rawfd, changetype<fdstat>(st_buf)) !== errno.SUCCESS) {
153153
throw new WASAError("Unable to get the file type");
154154
}
155-
let file_type: u8 = load<u8>(st_buf);
155+
let file_type = load<u8>(st_buf);
156156

157157
return file_type;
158158
}
@@ -219,8 +219,12 @@ export class Descriptor {
219219
*/
220220
futimes(atime: f64, mtime: f64): bool {
221221
return (
222-
fd_filestat_set_times(this.rawfd, (atime * 1e9) as u64, (mtime * 1e9) as u64,
223-
fstflags.SET_ATIM | fstflags.SET_ATIM) === errno.SUCCESS
222+
fd_filestat_set_times(
223+
this.rawfd,
224+
(atime * 1e9) as u64,
225+
(mtime * 1e9) as u64,
226+
fstflags.SET_ATIM | fstflags.SET_ATIM
227+
) === errno.SUCCESS
224228
);
225229
}
226230

@@ -243,8 +247,8 @@ export class Descriptor {
243247
* Return the directory associated to that descriptor
244248
*/
245249
dirName(): String {
246-
let path_max: usize = 4096;
247-
for (; ;) {
250+
let path_max = 4096 as usize;
251+
while (true) {
248252
let path_buf = changetype<usize>(new ArrayBuffer(path_max));
249253
let ret = fd_prestat_dir_name(this.rawfd, path_buf, path_max);
250254
if (ret === errno.NAMETOOLONG) {
@@ -270,7 +274,7 @@ export class Descriptor {
270274
* Write data to a file descriptor
271275
* @param data data
272276
*/
273-
write(data: Array<u8>): void {
277+
write(data: u8[]): void {
274278
let data_buf_len = data.length;
275279
let data_buf = changetype<usize>(new ArrayBuffer(data_buf_len));
276280
for (let i = 0; i < data_buf_len; i++) {
@@ -327,9 +331,9 @@ export class Descriptor {
327331
* @param chunk_size chunk size (default: 4096)
328332
*/
329333
read(
330-
data: Array<u8> = [],
334+
data: u8[] = [],
331335
chunk_size: usize = 4096
332-
): Array<u8> | null {
336+
): u8[] | null {
333337
let data_partial_len = chunk_size;
334338
let data_partial = changetype<usize>(new ArrayBuffer(data_partial_len));
335339
let iov = changetype<usize>(new ArrayBuffer(2 * sizeof<usize>()));
@@ -343,10 +347,7 @@ export class Descriptor {
343347
data.push(load<u8>(data_partial + i));
344348
}
345349
}
346-
if (read <= 0) {
347-
return null;
348-
}
349-
return data;
350+
return read <= 0 ? null : data;
350351
}
351352

352353
/**
@@ -355,7 +356,7 @@ export class Descriptor {
355356
* @param chunk_size chunk size (default: 4096)
356357
*/
357358
readAll(
358-
data: Array<u8> = [],
359+
data: u8[] = [],
359360
chunk_size: usize = 4096
360361
): Array<u8> | null {
361362
let data_partial_len = chunk_size;
@@ -365,7 +366,7 @@ export class Descriptor {
365366
store<u32>(iov + sizeof<usize>(), data_partial_len);
366367
let read_ptr = changetype<usize>(new ArrayBuffer(sizeof<usize>()));
367368
let read: usize = 0;
368-
for (; ;) {
369+
while (true) {
369370
if (fd_read(this.rawfd, iov, 1, read_ptr) !== errno.SUCCESS) {
370371
break;
371372
}
@@ -397,9 +398,7 @@ export class Descriptor {
397398
for (let i = 0; i < s_utf8_len; i++) {
398399
store<u8>(s_utf8_buf + i, s_utf8[i]);
399400
}
400-
let s = String.UTF8.decodeUnsafe(s_utf8_buf, s_utf8.length);
401-
402-
return s;
401+
return String.UTF8.decodeUnsafe(s_utf8_buf, s_utf8.length);
403402
}
404403

405404
/**
@@ -443,28 +442,37 @@ export class FileSystem {
443442
let fd_lookup_flags = lookupflags.SYMLINK_FOLLOW;
444443
let fd_oflags: u16 = 0;
445444
let fd_rights: u64 = 0;
446-
if (flags === "r") {
447-
fd_rights = rights.FD_READ | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET | rights.FD_READDIR;
448-
} else if (flags === "r+") {
445+
if (flags == "r") {
446+
fd_rights =
447+
rights.FD_READ | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET |
448+
rights.FD_READDIR;
449+
} else if (flags == "r+") {
449450
fd_rights =
450-
rights.FD_READ | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET | rights.FD_WRITE |
451-
rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET | rights.PATH_CREATE_FILE;
452-
} else if (flags === "w") {
451+
rights.FD_WRITE |
452+
rights.FD_READ | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET |
453+
rights.PATH_CREATE_FILE;
454+
} else if (flags == "w") {
453455
fd_oflags = oflags.CREAT | oflags.TRUNC;
454-
fd_rights = rights.FD_WRITE | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET | rights.PATH_CREATE_FILE;
455-
} else if (flags === "wx") {
456+
fd_rights =
457+
rights.FD_WRITE | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET |
458+
rights.PATH_CREATE_FILE;
459+
} else if (flags == "wx") {
456460
fd_oflags = oflags.CREAT | oflags.TRUNC | oflags.EXCL;
457-
fd_rights = rights.FD_WRITE | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET | rights.PATH_CREATE_FILE;
458-
} else if (flags === "w+") {
461+
fd_rights =
462+
rights.FD_WRITE | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET |
463+
rights.PATH_CREATE_FILE;
464+
} else if (flags == "w+") {
459465
fd_oflags = oflags.CREAT | oflags.TRUNC;
460466
fd_rights =
461-
rights.FD_READ | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET | rights.FD_WRITE |
462-
rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET | rights.PATH_CREATE_FILE;
463-
} else if (flags === "xw+") {
467+
rights.FD_WRITE |
468+
rights.FD_READ | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET |
469+
rights.PATH_CREATE_FILE;
470+
} else if (flags == "xw+") {
464471
fd_oflags = oflags.CREAT | oflags.TRUNC | oflags.EXCL;
465472
fd_rights =
466-
rights.FD_READ | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET | rights.FD_WRITE |
467-
rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET | rights.PATH_CREATE_FILE;
473+
rights.FD_WRITE |
474+
rights.FD_READ | rights.FD_SEEK | rights.FD_TELL | rights.FD_FILESTAT_GET |
475+
rights.PATH_CREATE_FILE;
468476
} else {
469477
return null;
470478
}
@@ -476,8 +484,7 @@ export class FileSystem {
476484
let res = path_open(
477485
dirfd as fd,
478486
fd_lookup_flags,
479-
path_utf8,
480-
path_utf8_len,
487+
path_utf8, path_utf8_len,
481488
fd_oflags,
482489
fd_rights,
483490
fd_rights_inherited,
@@ -488,7 +495,6 @@ export class FileSystem {
488495
return null;
489496
}
490497
let fd = load<u32>(fd_buf);
491-
492498
return new Descriptor(fd);
493499
}
494500

@@ -517,8 +523,12 @@ export class FileSystem {
517523
let path_utf8 = changetype<usize>(String.UTF8.encode(path));
518524
let fd_lookup_flags = lookupflags.SYMLINK_FOLLOW;
519525
let st_buf = changetype<usize>(new ArrayBuffer(56));
520-
let res = path_filestat_get(dirfd, fd_lookup_flags, path_utf8, path_utf8_len,
521-
changetype<filestat>(st_buf));
526+
let res = path_filestat_get(
527+
dirfd,
528+
fd_lookup_flags,
529+
path_utf8, path_utf8_len,
530+
changetype<filestat>(st_buf)
531+
);
522532

523533
return res === errno.SUCCESS;
524534
}
@@ -537,8 +547,13 @@ export class FileSystem {
537547
let new_path_utf8_len: usize = String.UTF8.byteLength(new_path);
538548
let new_path_utf8 = changetype<usize>(String.UTF8.encode(new_path));
539549
let fd_lookup_flags = lookupflags.SYMLINK_FOLLOW;
540-
let res = path_link(old_dirfd, fd_lookup_flags, old_path_utf8, old_path_utf8_len,
541-
new_dirfd, new_path_utf8, new_path_utf8_len);
550+
let res = path_link(
551+
old_dirfd,
552+
fd_lookup_flags,
553+
old_path_utf8, old_path_utf8_len,
554+
new_dirfd,
555+
new_path_utf8, new_path_utf8_len
556+
);
542557

543558
return res === errno.SUCCESS;
544559
}
@@ -555,8 +570,11 @@ export class FileSystem {
555570
let new_dirfd = this.dirfdForPath(new_path);
556571
let new_path_utf8_len: usize = String.UTF8.byteLength(new_path);
557572
let new_path_utf8 = changetype<usize>(String.UTF8.encode(new_path));
558-
let res = path_symlink(old_path_utf8, old_path_utf8_len,
559-
new_dirfd, new_path_utf8, new_path_utf8_len);
573+
let res = path_symlink(
574+
old_path_utf8, old_path_utf8_len,
575+
new_dirfd,
576+
new_path_utf8, new_path_utf8_len
577+
);
560578

561579
return res === errno.SUCCESS;
562580
}
@@ -600,7 +618,12 @@ export class FileSystem {
600618
let path_utf8 = changetype<usize>(String.UTF8.encode(path));
601619
let fd_lookup_flags = lookupflags.SYMLINK_FOLLOW;
602620
let st_buf = changetype<usize>(new ArrayBuffer(56));
603-
if (path_filestat_get(dirfd, fd_lookup_flags, path_utf8, path_utf8_len, changetype<filestat>(st_buf)) !== errno.SUCCESS) {
621+
if (path_filestat_get(
622+
dirfd,
623+
fd_lookup_flags,
624+
path_utf8, path_utf8_len,
625+
changetype<filestat>(st_buf)
626+
) !== errno.SUCCESS) {
604627
throw new WASAError("Unable to get the file information");
605628
}
606629
return new FileStat(st_buf);
@@ -617,7 +640,12 @@ export class FileSystem {
617640
let path_utf8 = changetype<usize>(String.UTF8.encode(path));
618641
let fd_lookup_flags = 0;
619642
let st_buf = changetype<usize>(new ArrayBuffer(56));
620-
if (path_filestat_get(dirfd, fd_lookup_flags, path_utf8, path_utf8_len, changetype<filestat>(st_buf)) !== errno.SUCCESS) {
643+
if (path_filestat_get(
644+
dirfd,
645+
fd_lookup_flags,
646+
path_utf8, path_utf8_len,
647+
changetype<filestat>(st_buf)
648+
) !== errno.SUCCESS) {
621649
throw new WASAError("Unable to get the file information");
622650
}
623651
return new FileStat(st_buf);
@@ -636,8 +664,12 @@ export class FileSystem {
636664
let new_dirfd = this.dirfdForPath(new_path);
637665
let new_path_utf8_len: usize = String.UTF8.byteLength(new_path);
638666
let new_path_utf8 = changetype<usize>(String.UTF8.encode(new_path));
639-
let res = path_rename(old_dirfd, old_path_utf8, old_path_utf8_len,
640-
new_dirfd, new_path_utf8, new_path_utf8_len);
667+
let res = path_rename(
668+
old_dirfd,
669+
old_path_utf8, old_path_utf8_len,
670+
new_dirfd,
671+
new_path_utf8, new_path_utf8_len
672+
);
641673

642674
return res === errno.SUCCESS;
643675
}
@@ -836,16 +868,17 @@ export class Environ {
836868
*/
837869
get(key: string): string | null {
838870
for (let i = 0, j = this.env.length; i < j; i++) {
839-
if (this.env[i].key === key) {
840-
return this.env[i].value;
871+
let pair = this.env[i];
872+
if (pair.key == key) {
873+
return pair.value;
841874
}
842875
}
843876
return null;
844877
}
845878
}
846879

847880
export class CommandLine {
848-
args: Array<string>;
881+
args: string[];
849882

850883
constructor() {
851884
this.args = [];
@@ -909,12 +942,13 @@ class StringUtils {
909942

910943
@global
911944
export function wasi_abort(
912-
message: string | null = "",
913-
fileName: string | null = "",
945+
message: string = "",
946+
fileName: string = "",
914947
lineNumber: u32 = 0,
915948
columnNumber: u32 = 0
916949
): void {
917-
Console.error(fileName! + ":" + lineNumber.toString() + ":" + columnNumber.toString() +
918-
": error: " + message!);
950+
Console.error(
951+
fileName + ":" + lineNumber.toString() + ":" + columnNumber.toString() + ": error: " + message
952+
);
919953
proc_exit(255);
920954
}

package.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
2-
"scripts": {
3-
"asbuild:untouched": "asc assembly/index.ts -b build/untouched.wasm -t build/untouched.wat --use abort=wasi_abort --debug",
4-
"asbuild:small": "asc assembly/index.ts -b build/optimized.wasm -t build/optimized.wat --use abort=wasi_abort --validate -O3z ",
5-
"asbuild:optimized": "asc assembly/index.ts -b build/optimized.wasm -t build/optimized.wat --use abort=wasi_abort --validate -O3",
6-
"asbuild": "npm run asbuild:optimized"
7-
},
8-
"devDependencies": {
9-
"@as-pect/cli": "^2.2.0",
10-
"assemblyscript": "github:AssemblyScript/assemblyscript"
11-
}
2+
"scripts": {
3+
"asbuild:untouched": "asc assembly/index.ts -b build/untouched.wasm -t build/untouched.wat --use abort=wasi_abort --debug",
4+
"asbuild:small": "asc assembly/index.ts -b build/optimized.wasm -t build/optimized.wat --use abort=wasi_abort --validate -O3z ",
5+
"asbuild:optimized": "asc assembly/index.ts -b build/optimized.wasm -t build/optimized.wat --use abort=wasi_abort --validate -O3",
6+
"asbuild": "npm run asbuild:optimized"
7+
},
8+
"devDependencies": {
9+
"@as-pect/cli": "^2.6.0",
10+
"assemblyscript": "^0.8.1"
11+
}
1212
}

0 commit comments

Comments
 (0)