@grain/stdlib 0.7.0 → 0.7.2
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 +18 -0
- package/array.md +491 -491
- package/bigint.md +198 -198
- package/buffer.gr +66 -1
- package/buffer.md +395 -272
- package/bytes.gr +1 -0
- package/bytes.md +200 -199
- package/char.md +125 -125
- package/exception.md +9 -9
- package/float32.md +195 -195
- package/float64.md +195 -195
- package/fs.md +115 -115
- package/hash.md +16 -16
- package/int16.md +155 -155
- package/int32.gr +1 -1
- package/int32.md +207 -207
- package/int64.gr +1 -1
- package/int64.md +207 -207
- package/int8.md +155 -155
- package/json.md +59 -59
- package/list.md +347 -347
- package/map.md +222 -222
- package/marshal.md +12 -12
- package/number.gr +119 -5
- package/number.md +503 -261
- package/option.md +141 -141
- package/package.json +2 -2
- package/path.gr +82 -65
- package/path.md +210 -141
- package/pervasives.md +238 -238
- package/priorityqueue.md +112 -112
- package/queue.md +117 -117
- package/random.md +37 -37
- package/range.md +36 -36
- package/rational.md +107 -107
- package/regex.md +91 -91
- package/result.md +102 -102
- package/runtime/atof/decimal.md +6 -6
- package/runtime/compare.md +7 -7
- package/runtime/dataStructures.md +178 -178
- package/runtime/equal.md +7 -7
- package/runtime/exception.md +15 -15
- package/runtime/malloc.md +9 -9
- package/runtime/numbers.md +269 -269
- package/runtime/string.md +17 -17
- package/runtime/unsafe/conv.md +6 -6
- package/runtime/unsafe/memory.gr +2 -19
- package/runtime/unsafe/memory.md +10 -10
- package/runtime/utf8.md +31 -31
- package/runtime/wasi.md +9 -9
- package/set.md +211 -211
- package/stack.md +122 -122
- package/string.md +228 -228
- package/uint16.md +148 -148
- package/uint32.md +192 -192
- package/uint64.md +192 -192
- package/uint8.md +148 -148
- package/uri.md +77 -77
- package/wasi/file.md +269 -269
- package/wasi/process.md +21 -21
- package/wasi/random.md +9 -9
- package/wasi/time.md +12 -12
package/buffer.gr
CHANGED
|
@@ -24,7 +24,7 @@ from "char" include Char
|
|
|
24
24
|
from "runtime/numbers" include Numbers
|
|
25
25
|
use Numbers.{ coerceNumberToWasmI32 }
|
|
26
26
|
from "runtime/utf8" include Utf8
|
|
27
|
-
use Utf8.{ usvEncodeLength }
|
|
27
|
+
use Utf8.{ usvEncodeLength, utf8ByteCount, exception MalformedUnicode }
|
|
28
28
|
from "runtime/unsafe/offsets" include Offsets
|
|
29
29
|
use Offsets.{ _BYTES_LEN_OFFSET, _BYTES_DATA_OFFSET }
|
|
30
30
|
|
|
@@ -376,6 +376,41 @@ provide let addString = (string, buffer) => {
|
|
|
376
376
|
buffer.len += bytelen
|
|
377
377
|
}
|
|
378
378
|
|
|
379
|
+
/**
|
|
380
|
+
* Gets the UTF-8 encoded character at the given byte index.
|
|
381
|
+
*
|
|
382
|
+
* @param index: The byte index to access
|
|
383
|
+
* @param buffer: The buffer to access
|
|
384
|
+
* @returns A character starting at the given index
|
|
385
|
+
*
|
|
386
|
+
* @throws IndexOutOfBounds: When `index` is negative
|
|
387
|
+
* @throws IndexOutOfBounds: When `index + 1` is greater than the buffer size
|
|
388
|
+
* @throws MalformedUnicode: When the bytes at the index are not a valid UTF-8 sequence
|
|
389
|
+
*
|
|
390
|
+
* @example
|
|
391
|
+
* let buf = Buffer.make(32)
|
|
392
|
+
* Buffer.addString("Hello World 🌾", buf)
|
|
393
|
+
* assert Buffer.getChar(12, buf) == '🌾'
|
|
394
|
+
*
|
|
395
|
+
* @since v0.7.1
|
|
396
|
+
*/
|
|
397
|
+
@unsafe
|
|
398
|
+
provide let getChar = (index, buffer) => {
|
|
399
|
+
use WasmI32.{ (+), (&), (+), (==), (>) }
|
|
400
|
+
checkIsIndexInBounds(index, 1, buffer)
|
|
401
|
+
// Note: We do a raw check as we need the byte length before reading the full char
|
|
402
|
+
let bytes = buffer.data
|
|
403
|
+
let ptr = WasmI32.fromGrain(bytes)
|
|
404
|
+
let offset = coerceNumberToWasmI32(index)
|
|
405
|
+
let byte = WasmI32.load8U(ptr + offset, _BYTES_DATA_OFFSET)
|
|
406
|
+
let charSize = utf8ByteCount(byte)
|
|
407
|
+
if (offset + charSize > coerceNumberToWasmI32(buffer.len)) {
|
|
408
|
+
throw MalformedUnicode
|
|
409
|
+
}
|
|
410
|
+
ignore(bytes)
|
|
411
|
+
Bytes.getChar(index, bytes)
|
|
412
|
+
}
|
|
413
|
+
|
|
379
414
|
/**
|
|
380
415
|
* Appends the bytes of a character to a buffer.
|
|
381
416
|
*
|
|
@@ -591,8 +626,11 @@ provide let getInt8 = (index, buffer) => {
|
|
|
591
626
|
* Buffer.setInt8(0, 3s, buf)
|
|
592
627
|
* assert Buffer.getInt8(0, buf) == 3s
|
|
593
628
|
*
|
|
629
|
+
* @deprecated Use `Bytes` instead of `Buffer` for set operations.
|
|
630
|
+
*
|
|
594
631
|
* @since v0.4.0
|
|
595
632
|
* @history v0.6.0: `value` argument type changed to `Int8`
|
|
633
|
+
* @history v0.7.1: Deprecated in favor of `Bytes.setInt8`
|
|
596
634
|
*/
|
|
597
635
|
provide let setInt8 = (index, value, buffer) => {
|
|
598
636
|
checkIsIndexInBounds(index, _8BIT_LEN, buffer)
|
|
@@ -658,7 +696,10 @@ provide let getUint8 = (index, buffer) => {
|
|
|
658
696
|
* Buffer.setUint8(4us, buf)
|
|
659
697
|
* assert Buffer.getUint8(0, buf) == 4us
|
|
660
698
|
*
|
|
699
|
+
* @deprecated Use `Bytes` instead of `Buffer` for set operations.
|
|
700
|
+
*
|
|
661
701
|
* @since v0.6.0
|
|
702
|
+
* @history v0.7.1: Deprecated in favor of `Bytes.setUint8`
|
|
662
703
|
*/
|
|
663
704
|
provide let setUint8 = (index, value, buffer) => {
|
|
664
705
|
checkIsIndexInBounds(index, _8BIT_LEN, buffer)
|
|
@@ -723,8 +764,11 @@ provide let getInt16 = (index, buffer) => {
|
|
|
723
764
|
* Buffer.setInt16(5, 1S, buf)
|
|
724
765
|
* assert Buffer.getInt16(5, buf) == 1S
|
|
725
766
|
*
|
|
767
|
+
* @deprecated Use `Bytes` instead of `Buffer` for set operations.
|
|
768
|
+
*
|
|
726
769
|
* @since v0.4.0
|
|
727
770
|
* @history v0.6.0: `value` argument type changed to `Int16`
|
|
771
|
+
* @history v0.7.1: Deprecated in favor of `Bytes.setInt16`
|
|
728
772
|
*/
|
|
729
773
|
provide let setInt16 = (index, value, buffer) => {
|
|
730
774
|
checkIsIndexInBounds(index, _16BIT_LEN, buffer)
|
|
@@ -790,7 +834,10 @@ provide let getUint16 = (index, buffer) => {
|
|
|
790
834
|
* Buffer.setUint16(0, 1uS, buf)
|
|
791
835
|
* assert Buffer.getUint16(0, buf) == 1uS
|
|
792
836
|
*
|
|
837
|
+
* @deprecated Use `Bytes` instead of `Buffer` for set operations.
|
|
838
|
+
*
|
|
793
839
|
* @since v0.6.0
|
|
840
|
+
* @history v0.7.1: Deprecated in favor of `Bytes.setUint16`
|
|
794
841
|
*/
|
|
795
842
|
provide let setUint16 = (index, value, buffer) => {
|
|
796
843
|
checkIsIndexInBounds(index, _16BIT_LEN, buffer)
|
|
@@ -854,7 +901,10 @@ provide let getInt32 = (index, buffer) => {
|
|
|
854
901
|
* Buffer.setInt32(3, 1l, buf)
|
|
855
902
|
* assert Buffer.getInt32(3, buf) == 1l
|
|
856
903
|
*
|
|
904
|
+
* @deprecated Use `Bytes` instead of `Buffer` for set operations.
|
|
905
|
+
*
|
|
857
906
|
* @since v0.4.0
|
|
907
|
+
* @history v0.7.1: Deprecated in favor of `Bytes.setInt32`
|
|
858
908
|
*/
|
|
859
909
|
provide let setInt32 = (index, value, buffer) => {
|
|
860
910
|
checkIsIndexInBounds(index, _32BIT_LEN, buffer)
|
|
@@ -918,7 +968,10 @@ provide let getUint32 = (index, buffer) => {
|
|
|
918
968
|
* Buffer.setUint32(0, 1ul, buf)
|
|
919
969
|
* assert Buffer.getUint32(0, buf) == 1ul
|
|
920
970
|
*
|
|
971
|
+
* @deprecated Use `Bytes` instead of `Buffer` for set operations.
|
|
972
|
+
*
|
|
921
973
|
* @since v0.6.0
|
|
974
|
+
* @history v0.7.1: Deprecated in favor of `Bytes.setUint32`
|
|
922
975
|
*/
|
|
923
976
|
provide let setUint32 = (index, value, buffer) => {
|
|
924
977
|
checkIsIndexInBounds(index, _32BIT_LEN, buffer)
|
|
@@ -982,7 +1035,10 @@ provide let getFloat32 = (index, buffer) => {
|
|
|
982
1035
|
* Buffer.setFloat32(0, 1.0f, buf)
|
|
983
1036
|
* assert Buffer.getFloat32(0, buf) == 1.0f
|
|
984
1037
|
*
|
|
1038
|
+
* @deprecated Use `Bytes` instead of `Buffer` for set operations.
|
|
1039
|
+
*
|
|
985
1040
|
* @since v0.4.0
|
|
1041
|
+
* @history v0.7.1: Deprecated in favor of `Bytes.setFloat32`
|
|
986
1042
|
*/
|
|
987
1043
|
provide let setFloat32 = (index, value, buffer) => {
|
|
988
1044
|
checkIsIndexInBounds(index, _32BIT_LEN, buffer)
|
|
@@ -1049,7 +1105,10 @@ provide let getInt64 = (index, buffer) => {
|
|
|
1049
1105
|
* Buffer.setInt64(0, 1L, buf)
|
|
1050
1106
|
* assert Buffer.getInt64(0, buf) == 1L
|
|
1051
1107
|
*
|
|
1108
|
+
* @deprecated Use `Bytes` instead of `Buffer` for set operations.
|
|
1109
|
+
*
|
|
1052
1110
|
* @since v0.4.0
|
|
1111
|
+
* @history v0.7.1: Deprecated in favor of `Bytes.setInt64
|
|
1053
1112
|
*/
|
|
1054
1113
|
provide let setInt64 = (index, value, buffer) => {
|
|
1055
1114
|
checkIsIndexInBounds(index, _64BIT_LEN, buffer)
|
|
@@ -1116,7 +1175,10 @@ provide let getUint64 = (index, buffer) => {
|
|
|
1116
1175
|
* Buffer.setUint64(0, 1uL, buf)
|
|
1117
1176
|
* assert Buffer.getUint64(0, buf) == 1uL
|
|
1118
1177
|
*
|
|
1178
|
+
* @deprecated Use `Bytes` instead of `Buffer` for set operations.
|
|
1179
|
+
*
|
|
1119
1180
|
* @since v0.6.0
|
|
1181
|
+
* @history v0.7.1: Deprecated in favor of `Bytes.setUint64`
|
|
1120
1182
|
*/
|
|
1121
1183
|
provide let setUint64 = (index, value, buffer) => {
|
|
1122
1184
|
checkIsIndexInBounds(index, _64BIT_LEN, buffer)
|
|
@@ -1183,7 +1245,10 @@ provide let getFloat64 = (index, buffer) => {
|
|
|
1183
1245
|
* Buffer.setFloat64(0, 1.0F, buf)
|
|
1184
1246
|
* assert Buffer.getFloat64(0, buf) == 1.0F
|
|
1185
1247
|
*
|
|
1248
|
+
* @deprecated Use `Bytes` instead of `Buffer` for set operations.
|
|
1249
|
+
*
|
|
1186
1250
|
* @since v0.4.0
|
|
1251
|
+
* @history v0.7.1: Deprecated in favor of `Bytes.setFloat64`
|
|
1187
1252
|
*/
|
|
1188
1253
|
provide let setFloat64 = (index, value, buffer) => {
|
|
1189
1254
|
checkIsIndexInBounds(index, _64BIT_LEN, buffer)
|