@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.
Files changed (139) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/LICENSE +1 -1
  3. package/README.md +2 -2
  4. package/array.gr +55 -7
  5. package/array.md +123 -77
  6. package/bigint.md +30 -30
  7. package/buffer.gr +20 -53
  8. package/buffer.md +47 -47
  9. package/bytes.gr +111 -35
  10. package/bytes.md +111 -32
  11. package/char.gr +201 -99
  12. package/char.md +361 -34
  13. package/exception.gr +11 -11
  14. package/exception.md +26 -1
  15. package/float32.gr +327 -3
  16. package/float32.md +606 -19
  17. package/float64.gr +320 -3
  18. package/float64.md +606 -19
  19. package/fs.gr +1082 -0
  20. package/fs.md +630 -0
  21. package/hash.gr +142 -88
  22. package/hash.md +102 -14
  23. package/int16.md +23 -23
  24. package/int32.gr +25 -4
  25. package/int32.md +65 -30
  26. package/int64.gr +26 -1
  27. package/int64.md +65 -30
  28. package/int8.md +23 -23
  29. package/json.gr +366 -51
  30. package/json.md +418 -2
  31. package/list.gr +387 -49
  32. package/list.md +492 -69
  33. package/map.gr +20 -12
  34. package/map.md +44 -38
  35. package/marshal.gr +41 -40
  36. package/marshal.md +2 -2
  37. package/number.gr +159 -30
  38. package/number.md +215 -38
  39. package/option.md +21 -21
  40. package/package.json +5 -3
  41. package/path.gr +48 -0
  42. package/path.md +103 -12
  43. package/pervasives.gr +2 -2
  44. package/pervasives.md +37 -37
  45. package/priorityqueue.gr +7 -7
  46. package/priorityqueue.md +19 -19
  47. package/queue.gr +183 -29
  48. package/queue.md +296 -40
  49. package/random.md +6 -6
  50. package/range.gr +4 -4
  51. package/range.md +6 -6
  52. package/rational.md +16 -16
  53. package/regex.gr +52 -51
  54. package/regex.md +11 -11
  55. package/result.md +16 -16
  56. package/runtime/atof/common.md +39 -39
  57. package/runtime/atof/decimal.gr +6 -6
  58. package/runtime/atof/decimal.md +8 -8
  59. package/runtime/atof/lemire.gr +5 -5
  60. package/runtime/atof/lemire.md +1 -1
  61. package/runtime/atof/parse.gr +16 -16
  62. package/runtime/atof/parse.md +2 -2
  63. package/runtime/atof/slow.md +1 -1
  64. package/runtime/atof/table.md +2 -2
  65. package/runtime/atoi/parse.gr +3 -3
  66. package/runtime/atoi/parse.md +1 -1
  67. package/runtime/bigint.gr +15 -47
  68. package/runtime/bigint.md +54 -60
  69. package/runtime/compare.gr +2 -2
  70. package/runtime/compare.md +1 -1
  71. package/runtime/dataStructures.md +33 -33
  72. package/runtime/debugPrint.gr +4 -1
  73. package/runtime/debugPrint.md +9 -9
  74. package/runtime/equal.gr +99 -77
  75. package/runtime/equal.md +1 -1
  76. package/runtime/exception.gr +62 -82
  77. package/runtime/exception.md +62 -11
  78. package/runtime/gc.gr +39 -45
  79. package/runtime/gc.md +4 -4
  80. package/runtime/malloc.gr +7 -7
  81. package/runtime/malloc.md +4 -4
  82. package/runtime/math/kernel/cos.gr +70 -0
  83. package/runtime/math/kernel/cos.md +14 -0
  84. package/runtime/math/kernel/sin.gr +65 -0
  85. package/runtime/math/kernel/sin.md +14 -0
  86. package/runtime/math/kernel/tan.gr +136 -0
  87. package/runtime/math/kernel/tan.md +14 -0
  88. package/runtime/math/rempio2.gr +244 -0
  89. package/runtime/math/rempio2.md +14 -0
  90. package/runtime/math/trig.gr +130 -0
  91. package/runtime/math/trig.md +28 -0
  92. package/runtime/math/umuldi.gr +26 -0
  93. package/runtime/math/umuldi.md +14 -0
  94. package/runtime/numberUtils.gr +29 -29
  95. package/runtime/numberUtils.md +12 -12
  96. package/runtime/numbers.gr +373 -381
  97. package/runtime/numbers.md +79 -73
  98. package/runtime/string.gr +37 -105
  99. package/runtime/string.md +3 -9
  100. package/runtime/unsafe/constants.md +24 -24
  101. package/runtime/unsafe/conv.md +13 -13
  102. package/runtime/unsafe/memory.gr +24 -20
  103. package/runtime/unsafe/memory.md +27 -7
  104. package/runtime/unsafe/offsets.gr +36 -0
  105. package/runtime/unsafe/offsets.md +88 -0
  106. package/runtime/unsafe/panic.gr +28 -0
  107. package/runtime/unsafe/panic.md +14 -0
  108. package/runtime/unsafe/tags.md +32 -32
  109. package/runtime/unsafe/wasmf32.md +28 -28
  110. package/runtime/unsafe/wasmf64.md +28 -28
  111. package/runtime/unsafe/wasmi32.md +47 -47
  112. package/runtime/unsafe/wasmi64.md +50 -50
  113. package/runtime/utf8.gr +189 -0
  114. package/runtime/utf8.md +117 -0
  115. package/runtime/wasi.gr +4 -2
  116. package/runtime/wasi.md +138 -138
  117. package/set.gr +18 -11
  118. package/set.md +42 -36
  119. package/stack.gr +171 -2
  120. package/stack.md +297 -15
  121. package/string.gr +352 -557
  122. package/string.md +77 -34
  123. package/uint16.gr +81 -0
  124. package/uint16.md +183 -22
  125. package/uint32.gr +25 -4
  126. package/uint32.md +63 -28
  127. package/uint64.gr +25 -5
  128. package/uint64.md +63 -28
  129. package/uint8.gr +81 -0
  130. package/uint8.md +183 -22
  131. package/uri.gr +57 -53
  132. package/uri.md +11 -12
  133. package/wasi/file.gr +67 -59
  134. package/wasi/file.md +39 -39
  135. package/wasi/process.md +5 -5
  136. package/wasi/random.md +3 -3
  137. package/wasi/time.md +4 -4
  138. package/runtime/utils/printing.gr +0 -60
  139. 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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
621
+ FileDescriptor(n) => untagSimpleNumber(n),
622
622
  }
623
623
 
624
- let n = WasmI32.fromGrain(size) >> 1n
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) => WasmI32.fromGrain(n) >> 1n,
660
+ FileDescriptor(n) => untagSimpleNumber(n),
661
661
  }
662
662
 
663
663
  let offset = WasmI64.load(WasmI32.fromGrain(offset), 8n)
664
664
 
665
- let n = WasmI32.fromGrain(size) >> 1n
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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 << (WasmI32.fromGrain(i) >> 1n), 0n)
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(WasmI32.fromGrain(i) >> 1n)) > 0N
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(WasmI32.fromGrain(i) >> 1n)) >
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
1322
+ FileDescriptor(n) => untagSimpleNumber(n),
1321
1323
  }
1322
1324
 
1323
1325
  let toFd = match (toFd) {
1324
- FileDescriptor(n) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
1673
+ FileDescriptor(n) => untagSimpleNumber(n),
1672
1674
  }
1673
1675
 
1674
1676
  let targetFd = match (targetFd) {
1675
- FileDescriptor(n) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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
- sourcePtr + 8n,
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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 = WasmI32.fromGrain(size) >> 1n
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, pathSize + 8n, strPtr, size, nread)
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) => WasmI32.fromGrain(n) >> 1n,
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) => WasmI32.fromGrain(n) >> 1n,
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