@grain/stdlib 0.6.5 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -0
- package/LICENSE +1 -1
- package/README.md +2 -2
- package/array.gr +55 -7
- package/array.md +123 -77
- package/bigint.md +30 -30
- package/buffer.gr +20 -53
- package/buffer.md +47 -47
- package/bytes.gr +111 -35
- package/bytes.md +111 -32
- package/char.gr +201 -99
- package/char.md +361 -34
- package/exception.gr +11 -11
- package/exception.md +26 -1
- package/float32.gr +327 -3
- package/float32.md +606 -19
- package/float64.gr +320 -3
- package/float64.md +606 -19
- package/fs.gr +1082 -0
- package/fs.md +630 -0
- package/hash.gr +142 -88
- package/hash.md +102 -14
- package/int16.md +23 -23
- package/int32.gr +25 -4
- package/int32.md +65 -30
- package/int64.gr +26 -1
- package/int64.md +65 -30
- package/int8.md +23 -23
- package/json.gr +366 -51
- package/json.md +418 -2
- package/list.gr +387 -49
- package/list.md +492 -69
- package/map.gr +20 -12
- package/map.md +44 -38
- package/marshal.gr +41 -40
- package/marshal.md +2 -2
- package/number.gr +159 -30
- package/number.md +215 -38
- package/option.md +21 -21
- package/package.json +5 -3
- package/path.gr +48 -0
- package/path.md +103 -12
- package/pervasives.gr +2 -2
- package/pervasives.md +37 -37
- package/priorityqueue.gr +7 -7
- package/priorityqueue.md +19 -19
- package/queue.gr +183 -29
- package/queue.md +296 -40
- package/random.md +6 -6
- package/range.gr +4 -4
- package/range.md +6 -6
- package/rational.md +16 -16
- package/regex.gr +52 -51
- package/regex.md +11 -11
- package/result.md +16 -16
- package/runtime/atof/common.md +39 -39
- package/runtime/atof/decimal.gr +6 -6
- package/runtime/atof/decimal.md +8 -8
- package/runtime/atof/lemire.gr +5 -5
- package/runtime/atof/lemire.md +1 -1
- package/runtime/atof/parse.gr +16 -16
- package/runtime/atof/parse.md +2 -2
- package/runtime/atof/slow.md +1 -1
- package/runtime/atof/table.md +2 -2
- package/runtime/atoi/parse.gr +3 -3
- package/runtime/atoi/parse.md +1 -1
- package/runtime/bigint.gr +15 -47
- package/runtime/bigint.md +54 -60
- package/runtime/compare.gr +2 -2
- package/runtime/compare.md +1 -1
- package/runtime/dataStructures.md +33 -33
- package/runtime/debugPrint.gr +4 -1
- package/runtime/debugPrint.md +9 -9
- package/runtime/equal.gr +99 -77
- package/runtime/equal.md +1 -1
- package/runtime/exception.gr +62 -82
- package/runtime/exception.md +62 -11
- package/runtime/gc.gr +39 -45
- package/runtime/gc.md +4 -4
- package/runtime/malloc.gr +7 -7
- package/runtime/malloc.md +4 -4
- package/runtime/math/kernel/cos.gr +70 -0
- package/runtime/math/kernel/cos.md +14 -0
- package/runtime/math/kernel/sin.gr +65 -0
- package/runtime/math/kernel/sin.md +14 -0
- package/runtime/math/kernel/tan.gr +136 -0
- package/runtime/math/kernel/tan.md +14 -0
- package/runtime/math/rempio2.gr +244 -0
- package/runtime/math/rempio2.md +14 -0
- package/runtime/math/trig.gr +130 -0
- package/runtime/math/trig.md +28 -0
- package/runtime/math/umuldi.gr +26 -0
- package/runtime/math/umuldi.md +14 -0
- package/runtime/numberUtils.gr +29 -29
- package/runtime/numberUtils.md +12 -12
- package/runtime/numbers.gr +373 -381
- package/runtime/numbers.md +79 -73
- package/runtime/string.gr +37 -105
- package/runtime/string.md +3 -9
- package/runtime/unsafe/constants.md +24 -24
- package/runtime/unsafe/conv.md +13 -13
- package/runtime/unsafe/memory.gr +24 -20
- package/runtime/unsafe/memory.md +27 -7
- package/runtime/unsafe/offsets.gr +36 -0
- package/runtime/unsafe/offsets.md +88 -0
- package/runtime/unsafe/panic.gr +28 -0
- package/runtime/unsafe/panic.md +14 -0
- package/runtime/unsafe/tags.md +32 -32
- package/runtime/unsafe/wasmf32.md +28 -28
- package/runtime/unsafe/wasmf64.md +28 -28
- package/runtime/unsafe/wasmi32.md +47 -47
- package/runtime/unsafe/wasmi64.md +50 -50
- package/runtime/utf8.gr +189 -0
- package/runtime/utf8.md +117 -0
- package/runtime/wasi.gr +4 -2
- package/runtime/wasi.md +138 -138
- package/set.gr +18 -11
- package/set.md +42 -36
- package/stack.gr +171 -2
- package/stack.md +297 -15
- package/string.gr +352 -557
- package/string.md +77 -34
- package/uint16.gr +81 -0
- package/uint16.md +183 -22
- package/uint32.gr +25 -4
- package/uint32.md +63 -28
- package/uint64.gr +25 -5
- package/uint64.md +63 -28
- package/uint8.gr +81 -0
- package/uint8.md +183 -22
- package/uri.gr +57 -53
- package/uri.md +11 -12
- package/wasi/file.gr +67 -59
- package/wasi/file.md +39 -39
- package/wasi/process.md +5 -5
- package/wasi/random.md +3 -3
- package/wasi/time.md +4 -4
- package/runtime/utils/printing.gr +0 -60
- package/runtime/utils/printing.md +0 -26
package/wasi/file.gr
CHANGED
|
@@ -567,7 +567,7 @@ provide let pathOpen = (
|
|
|
567
567
|
let pathArg = path
|
|
568
568
|
let rightsInheritingArg = rightsInheriting
|
|
569
569
|
let dirFd = match (dirFd) {
|
|
570
|
-
FileDescriptor(n) =>
|
|
570
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
571
571
|
}
|
|
572
572
|
|
|
573
573
|
let combinedDirFlags = combineLookupFlags(dirFlags)
|
|
@@ -618,10 +618,10 @@ provide let pathOpen = (
|
|
|
618
618
|
provide let fdRead = (fd: FileDescriptor, size: Number) => {
|
|
619
619
|
let fdArg = fd
|
|
620
620
|
let fd = match (fd) {
|
|
621
|
-
FileDescriptor(n) =>
|
|
621
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
622
622
|
}
|
|
623
623
|
|
|
624
|
-
let n =
|
|
624
|
+
let n = untagSimpleNumber(size)
|
|
625
625
|
|
|
626
626
|
let iovs = Memory.malloc(3n * 4n)
|
|
627
627
|
let strPtr = allocateBytes(n)
|
|
@@ -657,12 +657,12 @@ provide let fdPread = (fd: FileDescriptor, offset: Int64, size: Number) => {
|
|
|
657
657
|
let fdArg = fd
|
|
658
658
|
let offsetArg = offset
|
|
659
659
|
let fd = match (fd) {
|
|
660
|
-
FileDescriptor(n) =>
|
|
660
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
661
661
|
}
|
|
662
662
|
|
|
663
663
|
let offset = WasmI64.load(WasmI32.fromGrain(offset), 8n)
|
|
664
664
|
|
|
665
|
-
let n =
|
|
665
|
+
let n = untagSimpleNumber(size)
|
|
666
666
|
|
|
667
667
|
let iovs = Memory.malloc(3n * 4n)
|
|
668
668
|
let strPtr = allocateBytes(n)
|
|
@@ -697,7 +697,7 @@ provide let fdPread = (fd: FileDescriptor, offset: Int64, size: Number) => {
|
|
|
697
697
|
provide let fdPrestatGet = (fd: FileDescriptor) => {
|
|
698
698
|
let fdArg = fd
|
|
699
699
|
let fd = match (fd) {
|
|
700
|
-
FileDescriptor(n) =>
|
|
700
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
701
701
|
}
|
|
702
702
|
|
|
703
703
|
let dir = Memory.malloc(8n)
|
|
@@ -718,8 +718,8 @@ provide let fdPrestatGet = (fd: FileDescriptor) => {
|
|
|
718
718
|
}
|
|
719
719
|
|
|
720
720
|
if (
|
|
721
|
-
prefixLen > 0n
|
|
722
|
-
WasmI32.eqz(WasmI32.load8U(prefix + prefixLen - 1n, 8n))
|
|
721
|
+
prefixLen > 0n
|
|
722
|
+
&& WasmI32.eqz(WasmI32.load8U(prefix + prefixLen - 1n, 8n))
|
|
723
723
|
) {
|
|
724
724
|
// in uvwasi environments the string is null-terminated and the size is reported including it
|
|
725
725
|
// https://github.com/grain-lang/grain/issues/1818
|
|
@@ -743,7 +743,7 @@ provide let fdPrestatGet = (fd: FileDescriptor) => {
|
|
|
743
743
|
provide let fdWrite = (fd: FileDescriptor, data: Bytes) => {
|
|
744
744
|
let fdArg = fd
|
|
745
745
|
let fd = match (fd) {
|
|
746
|
-
FileDescriptor(n) =>
|
|
746
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
747
747
|
}
|
|
748
748
|
|
|
749
749
|
let iovs = Memory.malloc(3n * 4n)
|
|
@@ -780,7 +780,7 @@ provide let fdPwrite = (fd: FileDescriptor, data: Bytes, offset: Int64) => {
|
|
|
780
780
|
let fdArg = fd
|
|
781
781
|
let offsetArg = offset
|
|
782
782
|
let fd = match (fd) {
|
|
783
|
-
FileDescriptor(n) =>
|
|
783
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
784
784
|
}
|
|
785
785
|
|
|
786
786
|
let iovs = Memory.malloc(3n * 4n)
|
|
@@ -821,7 +821,7 @@ provide let fdAllocate = (fd: FileDescriptor, offset: Int64, size: Int64) => {
|
|
|
821
821
|
let offsetArg = offset
|
|
822
822
|
let sizeArg = size
|
|
823
823
|
let fd = match (fd) {
|
|
824
|
-
FileDescriptor(n) =>
|
|
824
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
825
825
|
}
|
|
826
826
|
|
|
827
827
|
let offset = WasmI64.load(WasmI32.fromGrain(offset), 8n)
|
|
@@ -846,7 +846,7 @@ provide let fdAllocate = (fd: FileDescriptor, offset: Int64, size: Int64) => {
|
|
|
846
846
|
provide let fdClose = (fd: FileDescriptor) => {
|
|
847
847
|
let fdArg = fd
|
|
848
848
|
let fd = match (fd) {
|
|
849
|
-
FileDescriptor(n) =>
|
|
849
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
850
850
|
}
|
|
851
851
|
|
|
852
852
|
let err = Wasi.fd_close(fd)
|
|
@@ -867,7 +867,7 @@ provide let fdClose = (fd: FileDescriptor) => {
|
|
|
867
867
|
provide let fdDatasync = (fd: FileDescriptor) => {
|
|
868
868
|
let fdArg = fd
|
|
869
869
|
let fd = match (fd) {
|
|
870
|
-
FileDescriptor(n) =>
|
|
870
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
871
871
|
}
|
|
872
872
|
|
|
873
873
|
let err = Wasi.fd_datasync(fd)
|
|
@@ -888,7 +888,7 @@ provide let fdDatasync = (fd: FileDescriptor) => {
|
|
|
888
888
|
provide let fdSync = (fd: FileDescriptor) => {
|
|
889
889
|
let fdArg = fd
|
|
890
890
|
let fd = match (fd) {
|
|
891
|
-
FileDescriptor(n) =>
|
|
891
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
892
892
|
}
|
|
893
893
|
|
|
894
894
|
let err = Wasi.fd_sync(fd)
|
|
@@ -942,7 +942,7 @@ let orderedRights = [
|
|
|
942
942
|
provide let fdStats = (fd: FileDescriptor) => {
|
|
943
943
|
let fdArg = fd
|
|
944
944
|
let fd = match (fd) {
|
|
945
|
-
FileDescriptor(n) =>
|
|
945
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
946
946
|
}
|
|
947
947
|
|
|
948
948
|
let structPtr = Memory.malloc(24n)
|
|
@@ -956,23 +956,25 @@ provide let fdStats = (fd: FileDescriptor) => {
|
|
|
956
956
|
|
|
957
957
|
let filetype = filetypeFromNumber(filetype)
|
|
958
958
|
|
|
959
|
+
@unsafe
|
|
959
960
|
let flagsToWasmVal = (flag, i) => {
|
|
960
961
|
let fdflags = WasmI32.load16U(structPtr, 4n)
|
|
961
|
-
WasmI32.gtU(fdflags & 1n << (
|
|
962
|
+
WasmI32.gtU(fdflags & 1n << untagSimpleNumber(i), 0n)
|
|
962
963
|
}
|
|
963
964
|
let fdflagsList = List.filteri(flagsToWasmVal, orderedFdflags)
|
|
964
965
|
use WasmI64.{ (&), gtU as (>), (<<) }
|
|
965
966
|
|
|
967
|
+
@unsafe
|
|
966
968
|
let flagsToWasmVal = (flag, i) => {
|
|
967
969
|
let rights = WasmI64.load(structPtr, 8n)
|
|
968
|
-
(rights & 1N << WasmI64.extendI32U(
|
|
970
|
+
(rights & 1N << WasmI64.extendI32U(untagSimpleNumber(i))) > 0N
|
|
969
971
|
}
|
|
970
972
|
let rightsList = List.filteri(flagsToWasmVal, orderedRights)
|
|
971
973
|
|
|
974
|
+
@unsafe
|
|
972
975
|
let flagsToWasmVal = (flag, i) => {
|
|
973
976
|
let rightsInheriting = WasmI64.load(structPtr, 16n)
|
|
974
|
-
(rightsInheriting & 1N << WasmI64.extendI32U(
|
|
975
|
-
0N
|
|
977
|
+
(rightsInheriting & 1N << WasmI64.extendI32U(untagSimpleNumber(i))) > 0N
|
|
976
978
|
}
|
|
977
979
|
let rightsInheritingList = List.filteri(flagsToWasmVal, orderedRights)
|
|
978
980
|
|
|
@@ -1000,7 +1002,7 @@ provide let fdSetFlags = (fd: FileDescriptor, flags: List<FdFlag>) => {
|
|
|
1000
1002
|
let fdArg = fd
|
|
1001
1003
|
let flagsArg = flags
|
|
1002
1004
|
let fd = match (fd) {
|
|
1003
|
-
FileDescriptor(n) =>
|
|
1005
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1004
1006
|
}
|
|
1005
1007
|
|
|
1006
1008
|
let flags = combineFdFlags(flags)
|
|
@@ -1031,7 +1033,7 @@ provide let fdSetRights = (
|
|
|
1031
1033
|
let rightsArg = rights
|
|
1032
1034
|
let rightsInheritingArg = rightsInheriting
|
|
1033
1035
|
let fd = match (fd) {
|
|
1034
|
-
FileDescriptor(n) =>
|
|
1036
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1035
1037
|
}
|
|
1036
1038
|
|
|
1037
1039
|
let rights = combineRights(rights)
|
|
@@ -1055,7 +1057,7 @@ provide let fdSetRights = (
|
|
|
1055
1057
|
provide let fdFilestats = (fd: FileDescriptor) => {
|
|
1056
1058
|
let fdArg = fd
|
|
1057
1059
|
let fd = match (fd) {
|
|
1058
|
-
FileDescriptor(n) =>
|
|
1060
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1059
1061
|
}
|
|
1060
1062
|
|
|
1061
1063
|
let filestats = Memory.malloc(64n)
|
|
@@ -1094,7 +1096,7 @@ provide let fdSetSize = (fd: FileDescriptor, size: Int64) => {
|
|
|
1094
1096
|
let fdArg = fd
|
|
1095
1097
|
let sizeArg = size
|
|
1096
1098
|
let fd = match (fd) {
|
|
1097
|
-
FileDescriptor(n) =>
|
|
1099
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1098
1100
|
}
|
|
1099
1101
|
|
|
1100
1102
|
let size = WasmI64.load(WasmI32.fromGrain(size), 8n)
|
|
@@ -1118,7 +1120,7 @@ provide let fdSetSize = (fd: FileDescriptor, size: Int64) => {
|
|
|
1118
1120
|
provide let fdSetAccessTime = (fd: FileDescriptor, timestamp: Int64) => {
|
|
1119
1121
|
let fdArg = fd
|
|
1120
1122
|
let fd = match (fd) {
|
|
1121
|
-
FileDescriptor(n) =>
|
|
1123
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1122
1124
|
}
|
|
1123
1125
|
|
|
1124
1126
|
let time = WasmI64.load(WasmI32.fromGrain(timestamp), 8n)
|
|
@@ -1141,7 +1143,7 @@ provide let fdSetAccessTime = (fd: FileDescriptor, timestamp: Int64) => {
|
|
|
1141
1143
|
provide let fdSetAccessTimeNow = (fd: FileDescriptor) => {
|
|
1142
1144
|
let fdArg = fd
|
|
1143
1145
|
let fd = match (fd) {
|
|
1144
|
-
FileDescriptor(n) =>
|
|
1146
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1145
1147
|
}
|
|
1146
1148
|
|
|
1147
1149
|
let err = Wasi.fd_filestat_set_times(fd, 0N, 0N, Wasi._TIME_SET_ATIM_NOW)
|
|
@@ -1163,7 +1165,7 @@ provide let fdSetAccessTimeNow = (fd: FileDescriptor) => {
|
|
|
1163
1165
|
provide let fdSetModifiedTime = (fd: FileDescriptor, timestamp: Int64) => {
|
|
1164
1166
|
let fdArg = fd
|
|
1165
1167
|
let fd = match (fd) {
|
|
1166
|
-
FileDescriptor(n) =>
|
|
1168
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1167
1169
|
}
|
|
1168
1170
|
|
|
1169
1171
|
let time = WasmI64.load(WasmI32.fromGrain(timestamp), 8n)
|
|
@@ -1186,7 +1188,7 @@ provide let fdSetModifiedTime = (fd: FileDescriptor, timestamp: Int64) => {
|
|
|
1186
1188
|
provide let fdSetModifiedTimeNow = (fd: FileDescriptor) => {
|
|
1187
1189
|
let fdArg = fd
|
|
1188
1190
|
let fd = match (fd) {
|
|
1189
|
-
FileDescriptor(n) =>
|
|
1191
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1190
1192
|
}
|
|
1191
1193
|
|
|
1192
1194
|
let err = Wasi.fd_filestat_set_times(fd, 0N, 0N, Wasi._TIME_SET_MTIM_NOW)
|
|
@@ -1207,7 +1209,7 @@ provide let fdSetModifiedTimeNow = (fd: FileDescriptor) => {
|
|
|
1207
1209
|
provide let fdReaddir = (fd: FileDescriptor) => {
|
|
1208
1210
|
let fdArg = fd
|
|
1209
1211
|
let fd = match (fd) {
|
|
1210
|
-
FileDescriptor(n) =>
|
|
1212
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1211
1213
|
}
|
|
1212
1214
|
|
|
1213
1215
|
let structWidth = 24n
|
|
@@ -1317,11 +1319,11 @@ provide let fdRenumber = (fromFd: FileDescriptor, toFd: FileDescriptor) => {
|
|
|
1317
1319
|
let fromFdArg = fromFd
|
|
1318
1320
|
let toFdArg = toFd
|
|
1319
1321
|
let fromFd = match (fromFd) {
|
|
1320
|
-
FileDescriptor(n) =>
|
|
1322
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1321
1323
|
}
|
|
1322
1324
|
|
|
1323
1325
|
let toFd = match (toFd) {
|
|
1324
|
-
FileDescriptor(n) =>
|
|
1326
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1325
1327
|
}
|
|
1326
1328
|
|
|
1327
1329
|
let err = Wasi.fd_renumber(fromFd, toFd)
|
|
@@ -1346,7 +1348,7 @@ provide let fdSeek = (fd: FileDescriptor, offset: Int64, whence: Whence) => {
|
|
|
1346
1348
|
let offsetArg = offset
|
|
1347
1349
|
let whenceArg = whence
|
|
1348
1350
|
let fd = match (fd) {
|
|
1349
|
-
FileDescriptor(n) =>
|
|
1351
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1350
1352
|
}
|
|
1351
1353
|
|
|
1352
1354
|
let offset = WasmI64.load(WasmI32.fromGrain(offset), 8n)
|
|
@@ -1379,7 +1381,7 @@ provide let fdSeek = (fd: FileDescriptor, offset: Int64, whence: Whence) => {
|
|
|
1379
1381
|
provide let fdTell = (fd: FileDescriptor) => {
|
|
1380
1382
|
let fdArg = fd
|
|
1381
1383
|
let fd = match (fd) {
|
|
1382
|
-
FileDescriptor(n) =>
|
|
1384
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1383
1385
|
}
|
|
1384
1386
|
|
|
1385
1387
|
let offset = allocateInt64()
|
|
@@ -1405,7 +1407,7 @@ provide let fdTell = (fd: FileDescriptor) => {
|
|
|
1405
1407
|
provide let pathCreateDirectory = (fd: FileDescriptor, path: String) => {
|
|
1406
1408
|
let fdArg = fd
|
|
1407
1409
|
let fd = match (fd) {
|
|
1408
|
-
FileDescriptor(n) =>
|
|
1410
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1409
1411
|
}
|
|
1410
1412
|
|
|
1411
1413
|
let stringPtr = WasmI32.fromGrain(path)
|
|
@@ -1436,7 +1438,7 @@ provide let pathFilestats = (
|
|
|
1436
1438
|
) => {
|
|
1437
1439
|
let fdArg = fd
|
|
1438
1440
|
let fd = match (fd) {
|
|
1439
|
-
FileDescriptor(n) =>
|
|
1441
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1440
1442
|
}
|
|
1441
1443
|
|
|
1442
1444
|
let combinedDirFlags = combineLookupFlags(dirFlags)
|
|
@@ -1493,7 +1495,7 @@ provide let pathSetAccessTime = (
|
|
|
1493
1495
|
) => {
|
|
1494
1496
|
let fdArg = fd
|
|
1495
1497
|
let fd = match (fd) {
|
|
1496
|
-
FileDescriptor(n) =>
|
|
1498
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1497
1499
|
}
|
|
1498
1500
|
|
|
1499
1501
|
let combinedDirFlags = combineLookupFlags(dirFlags)
|
|
@@ -1536,7 +1538,7 @@ provide let pathSetAccessTimeNow = (
|
|
|
1536
1538
|
) => {
|
|
1537
1539
|
let fdArg = fd
|
|
1538
1540
|
let fd = match (fd) {
|
|
1539
|
-
FileDescriptor(n) =>
|
|
1541
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1540
1542
|
}
|
|
1541
1543
|
|
|
1542
1544
|
let combinedDirFlags = combineLookupFlags(dirFlags)
|
|
@@ -1579,7 +1581,7 @@ provide let pathSetModifiedTime = (
|
|
|
1579
1581
|
) => {
|
|
1580
1582
|
let fdArg = fd
|
|
1581
1583
|
let fd = match (fd) {
|
|
1582
|
-
FileDescriptor(n) =>
|
|
1584
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1583
1585
|
}
|
|
1584
1586
|
|
|
1585
1587
|
let combinedDirFlags = combineLookupFlags(dirFlags)
|
|
@@ -1622,7 +1624,7 @@ provide let pathSetModifiedTimeNow = (
|
|
|
1622
1624
|
) => {
|
|
1623
1625
|
let fdArg = fd
|
|
1624
1626
|
let fd = match (fd) {
|
|
1625
|
-
FileDescriptor(n) =>
|
|
1627
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1626
1628
|
}
|
|
1627
1629
|
|
|
1628
1630
|
let combinedDirFlags = combineLookupFlags(dirFlags)
|
|
@@ -1668,11 +1670,11 @@ provide let pathLink = (
|
|
|
1668
1670
|
let sourceFdArg = sourceFd
|
|
1669
1671
|
let targetFdArg = targetFd
|
|
1670
1672
|
let sourceFd = match (sourceFd) {
|
|
1671
|
-
FileDescriptor(n) =>
|
|
1673
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1672
1674
|
}
|
|
1673
1675
|
|
|
1674
1676
|
let targetFd = match (targetFd) {
|
|
1675
|
-
FileDescriptor(n) =>
|
|
1677
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1676
1678
|
}
|
|
1677
1679
|
|
|
1678
1680
|
let combinedDirFlags = combineLookupFlags(dirFlags)
|
|
@@ -1715,7 +1717,7 @@ provide let pathSymlink = (
|
|
|
1715
1717
|
) => {
|
|
1716
1718
|
let fdArg = fd
|
|
1717
1719
|
let fd = match (fd) {
|
|
1718
|
-
FileDescriptor(n) =>
|
|
1720
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1719
1721
|
}
|
|
1720
1722
|
|
|
1721
1723
|
let sourcePtr = WasmI32.fromGrain(sourcePath)
|
|
@@ -1724,13 +1726,19 @@ provide let pathSymlink = (
|
|
|
1724
1726
|
let sourceSize = WasmI32.load(sourcePtr, 4n)
|
|
1725
1727
|
let targetSize = WasmI32.load(targetPtr, 4n)
|
|
1726
1728
|
|
|
1729
|
+
// TODO this workaround can be deleted once a uvwasi release with PR https://github.com/nodejs/uvwasi/pull/234 is released
|
|
1730
|
+
let sourceBuf = Memory.malloc(sourceSize + 1n)
|
|
1731
|
+
Memory.copy(sourceBuf, sourcePtr + 8n, sourceSize)
|
|
1732
|
+
WasmI32.store8(sourceBuf + sourceSize, 0n, 0n)
|
|
1733
|
+
|
|
1727
1734
|
let err = Wasi.path_symlink(
|
|
1728
|
-
|
|
1735
|
+
sourceBuf,
|
|
1729
1736
|
sourceSize,
|
|
1730
1737
|
fd,
|
|
1731
1738
|
targetPtr + 8n,
|
|
1732
1739
|
targetSize
|
|
1733
1740
|
)
|
|
1741
|
+
Memory.free(sourceBuf)
|
|
1734
1742
|
if (err != Wasi._ESUCCESS) {
|
|
1735
1743
|
return Err(Wasi.SystemError(tagSimpleNumber(err)))
|
|
1736
1744
|
}
|
|
@@ -1749,7 +1757,7 @@ provide let pathSymlink = (
|
|
|
1749
1757
|
provide let pathUnlink = (fd: FileDescriptor, path: String) => {
|
|
1750
1758
|
let fdArg = fd
|
|
1751
1759
|
let fd = match (fd) {
|
|
1752
|
-
FileDescriptor(n) =>
|
|
1760
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1753
1761
|
}
|
|
1754
1762
|
|
|
1755
1763
|
let pathPtr = WasmI32.fromGrain(path)
|
|
@@ -1776,20 +1784,20 @@ provide let pathReadlink = (fd: FileDescriptor, path: String, size: Number) => {
|
|
|
1776
1784
|
let fdArg = fd
|
|
1777
1785
|
let sizeArg = size
|
|
1778
1786
|
let fd = match (fd) {
|
|
1779
|
-
FileDescriptor(n) =>
|
|
1787
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1780
1788
|
}
|
|
1781
1789
|
|
|
1782
1790
|
let pathPtr = WasmI32.fromGrain(path)
|
|
1783
1791
|
let pathSize = WasmI32.load(pathPtr, 4n)
|
|
1784
1792
|
|
|
1785
|
-
let size =
|
|
1793
|
+
let size = untagSimpleNumber(size)
|
|
1786
1794
|
|
|
1787
1795
|
let grainStrPtr = allocateString(size)
|
|
1788
1796
|
let strPtr = grainStrPtr + 8n
|
|
1789
1797
|
|
|
1790
1798
|
let nread = Memory.malloc(4n)
|
|
1791
1799
|
|
|
1792
|
-
let err = Wasi.path_readlink(fd, pathPtr
|
|
1800
|
+
let err = Wasi.path_readlink(fd, pathPtr + 8n, pathSize, strPtr, size, nread)
|
|
1793
1801
|
if (err != Wasi._ESUCCESS) {
|
|
1794
1802
|
Memory.free(grainStrPtr)
|
|
1795
1803
|
Memory.free(nread)
|
|
@@ -1813,7 +1821,7 @@ provide let pathReadlink = (fd: FileDescriptor, path: String, size: Number) => {
|
|
|
1813
1821
|
provide let pathRemoveDirectory = (fd: FileDescriptor, path: String) => {
|
|
1814
1822
|
let fdArg = fd
|
|
1815
1823
|
let fd = match (fd) {
|
|
1816
|
-
FileDescriptor(n) =>
|
|
1824
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1817
1825
|
}
|
|
1818
1826
|
|
|
1819
1827
|
let pathPtr = WasmI32.fromGrain(path)
|
|
@@ -1846,7 +1854,7 @@ provide let pathRename = (
|
|
|
1846
1854
|
let sourceFdArg = sourceFd
|
|
1847
1855
|
let targetFdArg = targetFd
|
|
1848
1856
|
let sourceFd = match (sourceFd) {
|
|
1849
|
-
FileDescriptor(n) =>
|
|
1857
|
+
FileDescriptor(n) => untagSimpleNumber(n),
|
|
1850
1858
|
}
|
|
1851
1859
|
|
|
1852
1860
|
let targetFd = match (targetFd) {
|
|
@@ -1891,8 +1899,8 @@ let stripPrefixes = (path: String) => {
|
|
|
1891
1899
|
pathPtr += 1n
|
|
1892
1900
|
pathLen -= 1n
|
|
1893
1901
|
} else if (
|
|
1894
|
-
WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT
|
|
1895
|
-
WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH
|
|
1902
|
+
WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT
|
|
1903
|
+
&& WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH
|
|
1896
1904
|
) {
|
|
1897
1905
|
pathPtr += 2n
|
|
1898
1906
|
pathLen -= 2n
|
|
@@ -1975,8 +1983,8 @@ let rec findPath = (path, pathLen, preopens, bestMatch) => {
|
|
|
1975
1983
|
}
|
|
1976
1984
|
|
|
1977
1985
|
let bestMatch = if (
|
|
1978
|
-
(!hasBestMatch || pathLen > untagSimpleNumber(matchLen))
|
|
1979
|
-
prefixMatches(prefix, prefixLen, path, pathLen)
|
|
1986
|
+
(!hasBestMatch || pathLen > untagSimpleNumber(matchLen))
|
|
1987
|
+
&& prefixMatches(prefix, prefixLen, path, pathLen)
|
|
1980
1988
|
) {
|
|
1981
1989
|
Some(preopen)
|
|
1982
1990
|
} else {
|
|
@@ -2048,19 +2056,19 @@ let makeAbsolute = (path: String) => {
|
|
|
2048
2056
|
|
|
2049
2057
|
// pointing at the current dirextory
|
|
2050
2058
|
if (
|
|
2051
|
-
pathLen == 0n
|
|
2052
|
-
pathLen == 1n && WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT
|
|
2053
|
-
pathLen == 2n
|
|
2054
|
-
WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT
|
|
2055
|
-
WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH
|
|
2059
|
+
pathLen == 0n
|
|
2060
|
+
|| pathLen == 1n && WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT
|
|
2061
|
+
|| pathLen == 2n
|
|
2062
|
+
&& WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT
|
|
2063
|
+
&& WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH
|
|
2056
2064
|
) {
|
|
2057
2065
|
return cwd
|
|
2058
2066
|
}
|
|
2059
2067
|
|
|
2060
2068
|
// strip leading ./
|
|
2061
2069
|
if (
|
|
2062
|
-
WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT
|
|
2063
|
-
WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH
|
|
2070
|
+
WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT
|
|
2071
|
+
&& WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH
|
|
2064
2072
|
) {
|
|
2065
2073
|
pathPtr += 2n
|
|
2066
2074
|
pathLen -= 2n
|