@grain/stdlib 0.5.12 → 0.6.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 +200 -0
- package/LICENSE +1 -1
- package/README.md +25 -2
- package/array.gr +1512 -199
- package/array.md +2032 -94
- package/bigint.gr +239 -140
- package/bigint.md +450 -106
- package/buffer.gr +595 -102
- package/buffer.md +903 -145
- package/bytes.gr +401 -110
- package/bytes.md +551 -63
- package/char.gr +228 -49
- package/char.md +373 -7
- package/exception.gr +26 -12
- package/exception.md +29 -5
- package/float32.gr +130 -109
- package/float32.md +185 -57
- package/float64.gr +112 -99
- package/float64.md +185 -57
- package/hash.gr +47 -37
- package/hash.md +21 -3
- package/int16.gr +430 -0
- package/int16.md +618 -0
- package/int32.gr +200 -269
- package/int32.md +254 -289
- package/int64.gr +142 -225
- package/int64.md +254 -289
- package/int8.gr +511 -0
- package/int8.md +786 -0
- package/json.gr +2084 -0
- package/json.md +608 -0
- package/list.gr +120 -68
- package/list.md +125 -80
- package/map.gr +560 -57
- package/map.md +672 -56
- package/marshal.gr +239 -227
- package/marshal.md +36 -4
- package/number.gr +626 -676
- package/number.md +738 -153
- package/option.gr +33 -35
- package/option.md +58 -42
- package/package.json +2 -2
- package/path.gr +148 -187
- package/path.md +47 -96
- package/pervasives.gr +75 -416
- package/pervasives.md +85 -180
- package/priorityqueue.gr +433 -74
- package/priorityqueue.md +422 -54
- package/queue.gr +362 -80
- package/queue.md +433 -38
- package/random.gr +67 -75
- package/random.md +68 -40
- package/range.gr +135 -63
- package/range.md +198 -43
- package/rational.gr +284 -0
- package/rational.md +545 -0
- package/regex.gr +933 -1066
- package/regex.md +59 -60
- package/result.gr +23 -25
- package/result.md +54 -39
- package/runtime/atof/common.gr +78 -82
- package/runtime/atof/common.md +22 -10
- package/runtime/atof/decimal.gr +102 -127
- package/runtime/atof/decimal.md +28 -7
- package/runtime/atof/lemire.gr +56 -71
- package/runtime/atof/lemire.md +9 -1
- package/runtime/atof/parse.gr +83 -110
- package/runtime/atof/parse.md +12 -2
- package/runtime/atof/slow.gr +28 -35
- package/runtime/atof/slow.md +9 -1
- package/runtime/atof/table.gr +19 -18
- package/runtime/atof/table.md +10 -2
- package/runtime/atoi/parse.gr +153 -136
- package/runtime/atoi/parse.md +50 -1
- package/runtime/bigint.gr +410 -517
- package/runtime/bigint.md +71 -57
- package/runtime/compare.gr +176 -85
- package/runtime/compare.md +31 -1
- package/runtime/dataStructures.gr +144 -32
- package/runtime/dataStructures.md +267 -31
- package/runtime/debugPrint.gr +34 -15
- package/runtime/debugPrint.md +37 -5
- package/runtime/equal.gr +53 -52
- package/runtime/equal.md +30 -1
- package/runtime/exception.gr +38 -47
- package/runtime/exception.md +10 -8
- package/runtime/gc.gr +23 -152
- package/runtime/gc.md +13 -17
- package/runtime/malloc.gr +31 -31
- package/runtime/malloc.md +11 -3
- package/runtime/numberUtils.gr +191 -172
- package/runtime/numberUtils.md +17 -9
- package/runtime/numbers.gr +1695 -1021
- package/runtime/numbers.md +1098 -134
- package/runtime/string.gr +540 -242
- package/runtime/string.md +76 -6
- package/runtime/unsafe/constants.gr +30 -13
- package/runtime/unsafe/constants.md +80 -0
- package/runtime/unsafe/conv.gr +55 -28
- package/runtime/unsafe/conv.md +41 -9
- package/runtime/unsafe/memory.gr +10 -30
- package/runtime/unsafe/memory.md +15 -19
- package/runtime/unsafe/tags.gr +37 -21
- package/runtime/unsafe/tags.md +88 -8
- package/runtime/unsafe/wasmf32.gr +30 -36
- package/runtime/unsafe/wasmf32.md +64 -56
- package/runtime/unsafe/wasmf64.gr +30 -36
- package/runtime/unsafe/wasmf64.md +64 -56
- package/runtime/unsafe/wasmi32.gr +49 -66
- package/runtime/unsafe/wasmi32.md +102 -94
- package/runtime/unsafe/wasmi64.gr +52 -79
- package/runtime/unsafe/wasmi64.md +108 -100
- package/runtime/utils/printing.gr +13 -15
- package/runtime/utils/printing.md +11 -3
- package/runtime/wasi.gr +294 -295
- package/runtime/wasi.md +62 -42
- package/set.gr +574 -64
- package/set.md +634 -54
- package/stack.gr +181 -64
- package/stack.md +271 -42
- package/string.gr +453 -533
- package/string.md +241 -151
- package/uint16.gr +369 -0
- package/uint16.md +585 -0
- package/uint32.gr +470 -0
- package/uint32.md +737 -0
- package/uint64.gr +471 -0
- package/uint64.md +737 -0
- package/uint8.gr +369 -0
- package/uint8.md +585 -0
- package/uri.gr +1093 -0
- package/uri.md +477 -0
- package/{sys → wasi}/file.gr +914 -500
- package/{sys → wasi}/file.md +454 -50
- package/wasi/process.gr +292 -0
- package/{sys → wasi}/process.md +164 -6
- package/wasi/random.gr +77 -0
- package/wasi/random.md +80 -0
- package/{sys → wasi}/time.gr +15 -22
- package/{sys → wasi}/time.md +5 -5
- package/immutablearray.gr +0 -929
- package/immutablearray.md +0 -1038
- package/immutablemap.gr +0 -493
- package/immutablemap.md +0 -479
- package/immutablepriorityqueue.gr +0 -360
- package/immutablepriorityqueue.md +0 -291
- package/immutableset.gr +0 -498
- package/immutableset.md +0 -449
- package/runtime/debug.gr +0 -2
- package/runtime/debug.md +0 -6
- package/runtime/unsafe/errors.gr +0 -36
- package/runtime/unsafe/errors.md +0 -204
- package/sys/process.gr +0 -254
- package/sys/random.gr +0 -79
- package/sys/random.md +0 -66
package/runtime/string.md
CHANGED
|
@@ -1,24 +1,94 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
title: String
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Values
|
|
6
|
+
|
|
7
|
+
Functions and constants included in the String module.
|
|
8
|
+
|
|
9
|
+
### String.**concat**
|
|
10
|
+
|
|
11
|
+
<details disabled>
|
|
12
|
+
<summary tabindex="-1">Added in <code>0.2.0</code></summary>
|
|
13
|
+
No other changes yet.
|
|
14
|
+
</details>
|
|
2
15
|
|
|
3
16
|
```grain
|
|
4
|
-
|
|
17
|
+
concat : (str1: String, str2: String) => String
|
|
5
18
|
```
|
|
6
19
|
|
|
7
|
-
|
|
20
|
+
Concatenate two strings.
|
|
21
|
+
|
|
22
|
+
Parameters:
|
|
23
|
+
|
|
24
|
+
|param|type|description|
|
|
25
|
+
|-----|----|-----------|
|
|
26
|
+
|`str1`|`String`|The beginning string|
|
|
27
|
+
|`str2`|`String`|The ending string|
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
|
|
31
|
+
|type|description|
|
|
32
|
+
|----|-----------|
|
|
33
|
+
|`String`|The combined string|
|
|
34
|
+
|
|
35
|
+
Examples:
|
|
8
36
|
|
|
9
37
|
```grain
|
|
10
|
-
|
|
38
|
+
"Foo" ++ "Bar" == "FooBar"
|
|
11
39
|
```
|
|
12
40
|
|
|
13
41
|
### String.**toString**
|
|
14
42
|
|
|
43
|
+
<details disabled>
|
|
44
|
+
<summary tabindex="-1">Added in <code>0.1.0</code></summary>
|
|
45
|
+
No other changes yet.
|
|
46
|
+
</details>
|
|
47
|
+
|
|
15
48
|
```grain
|
|
16
|
-
toString : a
|
|
49
|
+
toString : (value: a) => String
|
|
17
50
|
```
|
|
18
51
|
|
|
52
|
+
Converts the given operand to a string.
|
|
53
|
+
Provides a better representation of data types if those types are provided from the module.
|
|
54
|
+
|
|
55
|
+
Parameters:
|
|
56
|
+
|
|
57
|
+
|param|type|description|
|
|
58
|
+
|-----|----|-----------|
|
|
59
|
+
|`value`|`a`|The operand|
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
|
|
63
|
+
|type|description|
|
|
64
|
+
|----|-----------|
|
|
65
|
+
|`String`|The operand, as a string|
|
|
66
|
+
|
|
19
67
|
### String.**print**
|
|
20
68
|
|
|
69
|
+
<details disabled>
|
|
70
|
+
<summary tabindex="-1">Added in <code>0.1.0</code></summary>
|
|
71
|
+
No other changes yet.
|
|
72
|
+
</details>
|
|
73
|
+
|
|
74
|
+
```grain
|
|
75
|
+
print : (value: a, ?suffix: String) => Void
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Prints the given operand to the console. Works for any type. Internally, calls `toString`
|
|
79
|
+
on the operand, so a better representation of data type will be printed if those types
|
|
80
|
+
are provided from the module.
|
|
81
|
+
|
|
82
|
+
Parameters:
|
|
83
|
+
|
|
84
|
+
|param|type|description|
|
|
85
|
+
|-----|----|-----------|
|
|
86
|
+
|`value`|`a`|The operand|
|
|
87
|
+
|`?suffix`|`String`|The string to print after the argument|
|
|
88
|
+
|
|
89
|
+
### String.**getCodePoint**
|
|
90
|
+
|
|
21
91
|
```grain
|
|
22
|
-
|
|
92
|
+
getCodePoint : (ptr: WasmI32) => WasmI32
|
|
23
93
|
```
|
|
24
94
|
|
|
@@ -1,17 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
@runtimeMode
|
|
2
|
+
module Constants
|
|
2
3
|
|
|
3
4
|
// Signed/Unsigned Min/Max Constants
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
provide let _SMIN_I32 = 0x80000000n
|
|
6
|
+
provide let _SMAX_I32 = 0x7FFFFFFFn
|
|
7
|
+
provide let _UMIN_I32 = 0x0n
|
|
8
|
+
provide let _UMAX_I32 = 0xFFFFFFFFn
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export let _UMAX_I64 = 0xFFFFFFFFFFFFFFFFN
|
|
10
|
+
provide let _SMIN8_I32 = -0x7Fn
|
|
11
|
+
provide let _SMAX8_I32 = 0x7Fn
|
|
12
|
+
provide let _UMAX8_I32 = 0xFFn
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
provide let _SMIN16_I32 = -0x7FFFn
|
|
15
|
+
provide let _SMAX16_I32 = 0x7FFFn
|
|
16
|
+
provide let _UMAX16_I32 = 0xFFFFn
|
|
17
|
+
|
|
18
|
+
provide let _SMIN_I64 = 0x8000000000000000N
|
|
19
|
+
provide let _SMAX_I64 = 0x7FFFFFFFFFFFFFFFN
|
|
20
|
+
provide let _UMIN_I64 = 0x0N
|
|
21
|
+
provide let _UMAX_I64 = 0xFFFFFFFFFFFFFFFFN
|
|
22
|
+
|
|
23
|
+
provide let _SMIN8_I64 = -0x7FN
|
|
24
|
+
provide let _SMAX8_I64 = 0x7FN
|
|
25
|
+
provide let _UMAX8_I64 = 0xFFN
|
|
26
|
+
|
|
27
|
+
provide let _SMIN16_I64 = -0x7FFFN
|
|
28
|
+
provide let _SMAX16_I64 = 0x7FFFN
|
|
29
|
+
provide let _UMAX16_I64 = 0xFFFFN
|
|
30
|
+
|
|
31
|
+
provide let _SMIN32_I64 = 0xFFFFFFFF80000000N
|
|
32
|
+
provide let _SMAX32_I64 = 0x7FFFFFFFN
|
|
33
|
+
provide let _UMIN32_I64 = 0x0N
|
|
34
|
+
provide let _UMAX32_I64 = 0xFFFFFFFFN
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Constants
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Values
|
|
6
|
+
|
|
7
|
+
Functions and constants included in the Constants module.
|
|
8
|
+
|
|
1
9
|
### Constants.**_SMIN_I32**
|
|
2
10
|
|
|
3
11
|
```grain
|
|
@@ -22,6 +30,42 @@ _UMIN_I32 : WasmI32
|
|
|
22
30
|
_UMAX_I32 : WasmI32
|
|
23
31
|
```
|
|
24
32
|
|
|
33
|
+
### Constants.**_SMIN8_I32**
|
|
34
|
+
|
|
35
|
+
```grain
|
|
36
|
+
_SMIN8_I32 : WasmI32
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Constants.**_SMAX8_I32**
|
|
40
|
+
|
|
41
|
+
```grain
|
|
42
|
+
_SMAX8_I32 : WasmI32
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Constants.**_UMAX8_I32**
|
|
46
|
+
|
|
47
|
+
```grain
|
|
48
|
+
_UMAX8_I32 : WasmI32
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Constants.**_SMIN16_I32**
|
|
52
|
+
|
|
53
|
+
```grain
|
|
54
|
+
_SMIN16_I32 : WasmI32
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Constants.**_SMAX16_I32**
|
|
58
|
+
|
|
59
|
+
```grain
|
|
60
|
+
_SMAX16_I32 : WasmI32
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Constants.**_UMAX16_I32**
|
|
64
|
+
|
|
65
|
+
```grain
|
|
66
|
+
_UMAX16_I32 : WasmI32
|
|
67
|
+
```
|
|
68
|
+
|
|
25
69
|
### Constants.**_SMIN_I64**
|
|
26
70
|
|
|
27
71
|
```grain
|
|
@@ -46,6 +90,42 @@ _UMIN_I64 : WasmI64
|
|
|
46
90
|
_UMAX_I64 : WasmI64
|
|
47
91
|
```
|
|
48
92
|
|
|
93
|
+
### Constants.**_SMIN8_I64**
|
|
94
|
+
|
|
95
|
+
```grain
|
|
96
|
+
_SMIN8_I64 : WasmI64
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Constants.**_SMAX8_I64**
|
|
100
|
+
|
|
101
|
+
```grain
|
|
102
|
+
_SMAX8_I64 : WasmI64
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Constants.**_UMAX8_I64**
|
|
106
|
+
|
|
107
|
+
```grain
|
|
108
|
+
_UMAX8_I64 : WasmI64
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Constants.**_SMIN16_I64**
|
|
112
|
+
|
|
113
|
+
```grain
|
|
114
|
+
_SMIN16_I64 : WasmI64
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Constants.**_SMAX16_I64**
|
|
118
|
+
|
|
119
|
+
```grain
|
|
120
|
+
_SMAX16_I64 : WasmI64
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Constants.**_UMAX16_I64**
|
|
124
|
+
|
|
125
|
+
```grain
|
|
126
|
+
_UMAX16_I64 : WasmI64
|
|
127
|
+
```
|
|
128
|
+
|
|
49
129
|
### Constants.**_SMIN32_I64**
|
|
50
130
|
|
|
51
131
|
```grain
|
package/runtime/unsafe/conv.gr
CHANGED
|
@@ -1,66 +1,94 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
module Conv
|
|
2
|
+
|
|
3
|
+
from "runtime/unsafe/wasmi32" include WasmI32
|
|
4
|
+
from "runtime/unsafe/wasmi64" include WasmI64
|
|
5
|
+
from "runtime/unsafe/wasmf32" include WasmF32
|
|
6
|
+
from "runtime/unsafe/wasmf64" include WasmF64
|
|
7
|
+
from "runtime/dataStructures" include DataStructures
|
|
8
|
+
use DataStructures.{
|
|
6
9
|
newInt32,
|
|
10
|
+
newUint32,
|
|
7
11
|
newInt64,
|
|
12
|
+
newUint64,
|
|
8
13
|
newFloat32,
|
|
9
14
|
newFloat64,
|
|
10
|
-
}
|
|
15
|
+
}
|
|
11
16
|
|
|
12
17
|
@unsafe
|
|
13
|
-
|
|
18
|
+
provide let toInt32 = n => {
|
|
14
19
|
WasmI32.toGrain(newInt32(n)): Int32
|
|
15
20
|
}
|
|
16
21
|
|
|
17
22
|
@unsafe
|
|
18
|
-
|
|
23
|
+
provide let toUint32 = n => {
|
|
24
|
+
WasmI32.toGrain(newUint32(n)): Uint32
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@unsafe
|
|
28
|
+
provide let fromInt32 = (n: Int32) => {
|
|
29
|
+
let ptr = WasmI32.fromGrain(n)
|
|
30
|
+
WasmI32.load(ptr, 4n)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@unsafe
|
|
34
|
+
provide let fromUint32 = (n: Uint32) => {
|
|
19
35
|
let ptr = WasmI32.fromGrain(n)
|
|
20
|
-
WasmI32.load(ptr,
|
|
36
|
+
WasmI32.load(ptr, 4n)
|
|
21
37
|
}
|
|
22
38
|
|
|
23
39
|
@unsafe
|
|
24
|
-
|
|
40
|
+
provide let toInt64 = n => {
|
|
25
41
|
WasmI32.toGrain(newInt64(n)): Int64
|
|
26
42
|
}
|
|
27
43
|
|
|
28
44
|
@unsafe
|
|
29
|
-
|
|
45
|
+
provide let toUint64 = n => {
|
|
46
|
+
WasmI32.toGrain(newUint64(n)): Uint64
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@unsafe
|
|
50
|
+
provide let fromInt64 = (n: Int64) => {
|
|
30
51
|
let ptr = WasmI32.fromGrain(n)
|
|
31
52
|
WasmI64.load(ptr, 8n)
|
|
32
53
|
}
|
|
33
54
|
|
|
34
55
|
@unsafe
|
|
35
|
-
|
|
56
|
+
provide let fromUint64 = (n: Uint64) => {
|
|
57
|
+
let ptr = WasmI32.fromGrain(n)
|
|
58
|
+
WasmI64.load(ptr, 8n)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@unsafe
|
|
62
|
+
provide let toFloat32 = n => {
|
|
36
63
|
WasmI32.toGrain(newFloat32(n)): Float32
|
|
37
64
|
}
|
|
38
65
|
|
|
39
66
|
@unsafe
|
|
40
|
-
|
|
67
|
+
provide let fromFloat32 = (n: Float32) => {
|
|
41
68
|
let ptr = WasmI32.fromGrain(n)
|
|
42
|
-
WasmF32.load(ptr,
|
|
69
|
+
WasmF32.load(ptr, 4n)
|
|
43
70
|
}
|
|
44
71
|
|
|
45
72
|
@unsafe
|
|
46
|
-
|
|
73
|
+
provide let toFloat64 = n => {
|
|
47
74
|
WasmI32.toGrain(newFloat64(n)): Float64
|
|
48
75
|
}
|
|
49
76
|
|
|
50
77
|
@unsafe
|
|
51
|
-
|
|
78
|
+
provide let fromFloat64 = (n: Float64) => {
|
|
52
79
|
let ptr = WasmI32.fromGrain(n)
|
|
53
80
|
WasmF64.load(ptr, 8n)
|
|
54
81
|
}
|
|
55
82
|
|
|
56
83
|
/**
|
|
57
84
|
* Converts a WasmI32 value to Number.
|
|
58
|
-
*
|
|
85
|
+
*
|
|
59
86
|
* @param n: The WasmI32 to convert
|
|
60
87
|
* @returns The value converted to either a simple or a 32 bit heap allocated number.
|
|
61
88
|
*/
|
|
62
89
|
@unsafe
|
|
63
|
-
|
|
90
|
+
provide let wasmI32ToNumber = (n: WasmI32) => {
|
|
91
|
+
use WasmI32.{ (^), (<<), (>>), (==) }
|
|
64
92
|
// Follows a little optimization. Instead of testing if n is range of allowed
|
|
65
93
|
// non heap allocated simple numbers (-1073741824n..1073741823n), actually
|
|
66
94
|
// make a simple number, convert it back to WasmI32, and test if it stayed
|
|
@@ -73,21 +101,20 @@ export let wasmI32ToNumber = (n: WasmI32) => {
|
|
|
73
101
|
|
|
74
102
|
// First step: naively convert to simple number, just like tagSimpleNumber.
|
|
75
103
|
// This will overflow for values not in the range, but it's fine.
|
|
76
|
-
let simple =
|
|
104
|
+
let simple = n << 1n ^ 1n
|
|
77
105
|
|
|
78
106
|
// Untag it, just like numbers.untagSimple.
|
|
79
|
-
let untagged =
|
|
107
|
+
let untagged = simple >> 1n
|
|
80
108
|
|
|
81
|
-
|
|
109
|
+
if (untagged == n) {
|
|
82
110
|
// Just test if the untagged number is the same. If it didn't overflow, then
|
|
83
111
|
// we're good. We just need to cast the raw value into a Number at the type
|
|
84
112
|
// system level.
|
|
85
|
-
WasmI32.toGrain(simple): Number
|
|
86
|
-
} else {
|
|
87
|
-
// If it did overflow, then the value differs and we need to discard it and
|
|
88
|
-
// allocate the number on the heap. A boxed 32 bit number actually is the
|
|
89
|
-
// same thing as an Int32. It only needs to be cast into Number.
|
|
90
|
-
WasmI32.toGrain(newInt32(n)): Number
|
|
113
|
+
return WasmI32.toGrain(simple): Number
|
|
91
114
|
}
|
|
92
|
-
|
|
115
|
+
|
|
116
|
+
// If it did overflow, then the value differs and we need to discard it and
|
|
117
|
+
// allocate the number on the heap. We can do this by extending the 32 bit
|
|
118
|
+
// number to an Int64.
|
|
119
|
+
return WasmI32.toGrain(newInt64(WasmI64.extendI32S(n))): Number
|
|
93
120
|
}
|
package/runtime/unsafe/conv.md
CHANGED
|
@@ -1,55 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Conv
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Values
|
|
6
|
+
|
|
7
|
+
Functions and constants included in the Conv module.
|
|
8
|
+
|
|
1
9
|
### Conv.**toInt32**
|
|
2
10
|
|
|
3
11
|
```grain
|
|
4
|
-
toInt32 : WasmI32
|
|
12
|
+
toInt32 : (n: WasmI32) => Int32
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Conv.**toUint32**
|
|
16
|
+
|
|
17
|
+
```grain
|
|
18
|
+
toUint32 : (n: WasmI32) => Uint32
|
|
5
19
|
```
|
|
6
20
|
|
|
7
21
|
### Conv.**fromInt32**
|
|
8
22
|
|
|
9
23
|
```grain
|
|
10
|
-
fromInt32 : Int32
|
|
24
|
+
fromInt32 : (n: Int32) => WasmI32
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Conv.**fromUint32**
|
|
28
|
+
|
|
29
|
+
```grain
|
|
30
|
+
fromUint32 : (n: Uint32) => WasmI32
|
|
11
31
|
```
|
|
12
32
|
|
|
13
33
|
### Conv.**toInt64**
|
|
14
34
|
|
|
15
35
|
```grain
|
|
16
|
-
toInt64 : WasmI64
|
|
36
|
+
toInt64 : (n: WasmI64) => Int64
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Conv.**toUint64**
|
|
40
|
+
|
|
41
|
+
```grain
|
|
42
|
+
toUint64 : (n: WasmI64) => Uint64
|
|
17
43
|
```
|
|
18
44
|
|
|
19
45
|
### Conv.**fromInt64**
|
|
20
46
|
|
|
21
47
|
```grain
|
|
22
|
-
fromInt64 : Int64
|
|
48
|
+
fromInt64 : (n: Int64) => WasmI64
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Conv.**fromUint64**
|
|
52
|
+
|
|
53
|
+
```grain
|
|
54
|
+
fromUint64 : (n: Uint64) => WasmI64
|
|
23
55
|
```
|
|
24
56
|
|
|
25
57
|
### Conv.**toFloat32**
|
|
26
58
|
|
|
27
59
|
```grain
|
|
28
|
-
toFloat32 : WasmF32
|
|
60
|
+
toFloat32 : (n: WasmF32) => Float32
|
|
29
61
|
```
|
|
30
62
|
|
|
31
63
|
### Conv.**fromFloat32**
|
|
32
64
|
|
|
33
65
|
```grain
|
|
34
|
-
fromFloat32 : Float32
|
|
66
|
+
fromFloat32 : (n: Float32) => WasmF32
|
|
35
67
|
```
|
|
36
68
|
|
|
37
69
|
### Conv.**toFloat64**
|
|
38
70
|
|
|
39
71
|
```grain
|
|
40
|
-
toFloat64 : WasmF64
|
|
72
|
+
toFloat64 : (n: WasmF64) => Float64
|
|
41
73
|
```
|
|
42
74
|
|
|
43
75
|
### Conv.**fromFloat64**
|
|
44
76
|
|
|
45
77
|
```grain
|
|
46
|
-
fromFloat64 : Float64
|
|
78
|
+
fromFloat64 : (n: Float64) => WasmF64
|
|
47
79
|
```
|
|
48
80
|
|
|
49
81
|
### Conv.**wasmI32ToNumber**
|
|
50
82
|
|
|
51
83
|
```grain
|
|
52
|
-
wasmI32ToNumber : WasmI32
|
|
84
|
+
wasmI32ToNumber : (n: WasmI32) => Number
|
|
53
85
|
```
|
|
54
86
|
|
|
55
87
|
Converts a WasmI32 value to Number.
|
package/runtime/unsafe/memory.gr
CHANGED
|
@@ -1,30 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
@runtimeMode
|
|
2
|
+
module Memory
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
decRef,
|
|
8
|
-
utoa32Buffered,
|
|
9
|
-
decimalCount32,
|
|
10
|
-
} from "runtime/gc"
|
|
11
|
-
import WasmI32, {
|
|
12
|
-
add as (+),
|
|
13
|
-
sub as (-),
|
|
14
|
-
shl as (<<),
|
|
15
|
-
eq as (==),
|
|
16
|
-
ne as (!=),
|
|
17
|
-
ltU as (<),
|
|
18
|
-
} from "runtime/unsafe/wasmi32"
|
|
4
|
+
from "runtime/gc" include GC
|
|
5
|
+
use GC.{ malloc, free, incRef, decRef }
|
|
6
|
+
from "runtime/unsafe/wasmi32" include WasmI32
|
|
7
|
+
use WasmI32.{ (+), (-), (<<), (==), (!=), ltU as (<) }
|
|
19
8
|
|
|
20
|
-
|
|
21
|
-
export free
|
|
22
|
-
export incRef
|
|
23
|
-
export decRef
|
|
24
|
-
export utoa32Buffered
|
|
25
|
-
export decimalCount32
|
|
9
|
+
provide { malloc, free, incRef, decRef }
|
|
26
10
|
|
|
27
|
-
|
|
11
|
+
provide let copy = (dest, src, n) => {
|
|
28
12
|
let mut dest = dest
|
|
29
13
|
let mut src = src
|
|
30
14
|
let mut n = n
|
|
@@ -45,7 +29,7 @@ export let copy = (dest, src, n) => {
|
|
|
45
29
|
}
|
|
46
30
|
}
|
|
47
31
|
|
|
48
|
-
|
|
32
|
+
provide let fill = (dest, c, n) => {
|
|
49
33
|
let mut dest = dest
|
|
50
34
|
let mut n = n
|
|
51
35
|
while (n != 0n) {
|
|
@@ -55,8 +39,4 @@ export let fill = (dest, c, n) => {
|
|
|
55
39
|
}
|
|
56
40
|
}
|
|
57
41
|
|
|
58
|
-
|
|
59
|
-
WasmI32,
|
|
60
|
-
WasmI32,
|
|
61
|
-
WasmI32,
|
|
62
|
-
) -> WasmI32 = "@wasm.memory_compare"
|
|
42
|
+
provide primitive compare = "@wasm.memory_compare"
|
package/runtime/unsafe/memory.md
CHANGED
|
@@ -1,54 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Memory
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Values
|
|
6
|
+
|
|
7
|
+
Functions and constants included in the Memory module.
|
|
8
|
+
|
|
1
9
|
### Memory.**malloc**
|
|
2
10
|
|
|
3
11
|
```grain
|
|
4
|
-
malloc : WasmI32
|
|
12
|
+
malloc : (size: WasmI32) => WasmI32
|
|
5
13
|
```
|
|
6
14
|
|
|
7
15
|
### Memory.**free**
|
|
8
16
|
|
|
9
17
|
```grain
|
|
10
|
-
free : WasmI32
|
|
18
|
+
free : (userPtr: WasmI32) => Void
|
|
11
19
|
```
|
|
12
20
|
|
|
13
21
|
### Memory.**incRef**
|
|
14
22
|
|
|
15
23
|
```grain
|
|
16
|
-
incRef : WasmI32
|
|
24
|
+
incRef : (userPtr: WasmI32) => WasmI32
|
|
17
25
|
```
|
|
18
26
|
|
|
19
27
|
### Memory.**decRef**
|
|
20
28
|
|
|
21
29
|
```grain
|
|
22
|
-
decRef : WasmI32
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### Memory.**utoa32Buffered**
|
|
26
|
-
|
|
27
|
-
```grain
|
|
28
|
-
utoa32Buffered : Box<(WasmI32, WasmI32, WasmI32) -> Void>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### Memory.**decimalCount32**
|
|
32
|
-
|
|
33
|
-
```grain
|
|
34
|
-
decimalCount32 : Box<WasmI32 -> WasmI32>
|
|
30
|
+
decRef : (userPtr: WasmI32) => WasmI32
|
|
35
31
|
```
|
|
36
32
|
|
|
37
33
|
### Memory.**copy**
|
|
38
34
|
|
|
39
35
|
```grain
|
|
40
|
-
copy : (WasmI32, WasmI32, WasmI32)
|
|
36
|
+
copy : (dest: WasmI32, src: WasmI32, n: WasmI32) => Void
|
|
41
37
|
```
|
|
42
38
|
|
|
43
39
|
### Memory.**fill**
|
|
44
40
|
|
|
45
41
|
```grain
|
|
46
|
-
fill : (WasmI32, WasmI32, WasmI32)
|
|
42
|
+
fill : (dest: WasmI32, c: WasmI32, n: WasmI32) => Void
|
|
47
43
|
```
|
|
48
44
|
|
|
49
45
|
### Memory.**compare**
|
|
50
46
|
|
|
51
47
|
```grain
|
|
52
|
-
compare : (WasmI32, WasmI32, WasmI32)
|
|
48
|
+
compare : (ptr1: WasmI32, ptr2: WasmI32, length: WasmI32) => WasmI32
|
|
53
49
|
```
|
|
54
50
|
|
package/runtime/unsafe/tags.gr
CHANGED
|
@@ -1,26 +1,42 @@
|
|
|
1
|
-
|
|
1
|
+
@runtimeMode
|
|
2
|
+
module Tags
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
provide let _GRAIN_NUMBER_TAG_TYPE = 0b0001n
|
|
5
|
+
provide let _GRAIN_SHORTVAL_TAG_TYPE = 0b0010n
|
|
6
|
+
provide let _GRAIN_CONST_TAG_TYPE = 0b0110n
|
|
7
|
+
provide let _GRAIN_GENERIC_HEAP_TAG_TYPE = 0b0000n
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
provide let _GRAIN_NUMBER_TAG_MASK = 0b0001n
|
|
10
|
+
provide let _GRAIN_GENERIC_TAG_MASK = 0b0111n
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
// Short val types
|
|
13
|
+
provide let _GRAIN_CHAR_SHORTVAL_TAG = 0n
|
|
14
|
+
provide let _GRAIN_INT8_SHORTVAL_TAG = 1n
|
|
15
|
+
provide let _GRAIN_INT16_SHORTVAL_TAG = 2n
|
|
16
|
+
provide let _GRAIN_UINT8_SHORTVAL_TAG = 3n
|
|
17
|
+
provide let _GRAIN_UINT16_SHORTVAL_TAG = 4n
|
|
18
|
+
|
|
19
|
+
provide let _GRAIN_GENERIC_SHORTVAL_TAG_MASK = 0b11111000n
|
|
20
|
+
provide let _GRAIN_INT8_TAG_MASK = 0b1000n
|
|
21
|
+
provide let _GRAIN_INT16_TAG_MASK = 0b10000n
|
|
22
|
+
provide let _GRAIN_UINT8_TAG_MASK = 0b11000n
|
|
23
|
+
provide let _GRAIN_UINT16_TAG_MASK = 0b100000n
|
|
24
|
+
|
|
25
|
+
provide let _GRAIN_STRING_HEAP_TAG = 1n
|
|
26
|
+
provide let _GRAIN_ADT_HEAP_TAG = 2n
|
|
27
|
+
provide let _GRAIN_RECORD_HEAP_TAG = 3n
|
|
28
|
+
provide let _GRAIN_ARRAY_HEAP_TAG = 4n
|
|
29
|
+
provide let _GRAIN_BOXED_NUM_HEAP_TAG = 5n
|
|
30
|
+
provide let _GRAIN_LAMBDA_HEAP_TAG = 6n
|
|
31
|
+
provide let _GRAIN_TUPLE_HEAP_TAG = 7n
|
|
32
|
+
provide let _GRAIN_BYTES_HEAP_TAG = 8n
|
|
33
|
+
provide let _GRAIN_INT32_HEAP_TAG = 9n
|
|
34
|
+
provide let _GRAIN_FLOAT32_HEAP_TAG = 10n
|
|
35
|
+
provide let _GRAIN_UINT32_HEAP_TAG = 11n
|
|
36
|
+
provide let _GRAIN_UINT64_HEAP_TAG = 12n
|
|
19
37
|
|
|
20
38
|
// Boxed number types
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
export let _GRAIN_RATIONAL_BOXED_NUM_TAG = 5n
|
|
26
|
-
export let _GRAIN_BIGINT_BOXED_NUM_TAG = 6n
|
|
39
|
+
provide let _GRAIN_FLOAT64_BOXED_NUM_TAG = 1n
|
|
40
|
+
provide let _GRAIN_INT64_BOXED_NUM_TAG = 2n
|
|
41
|
+
provide let _GRAIN_RATIONAL_BOXED_NUM_TAG = 3n
|
|
42
|
+
provide let _GRAIN_BIGINT_BOXED_NUM_TAG = 4n
|