@grain/stdlib 0.5.13 → 0.6.1
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 +201 -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 +62 -40
- package/hash.md +27 -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 +2071 -0
- package/json.md +646 -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 +193 -174
- package/runtime/numberUtils.md +29 -9
- package/runtime/numbers.gr +1695 -1021
- package/runtime/numbers.md +1098 -134
- package/runtime/string.gr +543 -245
- 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/atof/common.gr
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/* grainc-flags --no-pervasives */
|
|
2
|
-
|
|
3
1
|
// This module was based on Rust's dec2flt
|
|
4
2
|
// https://github.com/rust-lang/rust/blob/1cbc45942d5c0f6eb5d94e3b10762ba541958035/library/core/src/num/dec2flt/common.rs
|
|
5
3
|
// Rust's MIT license is provided below:
|
|
@@ -13,11 +11,11 @@
|
|
|
13
11
|
* the Software, and to permit persons to whom the Software
|
|
14
12
|
* is furnished to do so, subject to the following
|
|
15
13
|
* conditions:
|
|
16
|
-
*
|
|
14
|
+
*
|
|
17
15
|
* The above copyright notice and this permission notice
|
|
18
16
|
* shall be included in all copies or substantial portions
|
|
19
17
|
* of the Software.
|
|
20
|
-
*
|
|
18
|
+
*
|
|
21
19
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
|
|
22
20
|
* ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
23
21
|
* TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
@@ -28,111 +26,114 @@
|
|
|
28
26
|
* IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
29
27
|
* DEALINGS IN THE SOFTWARE.
|
|
30
28
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
29
|
+
@noPervasives
|
|
30
|
+
module Common
|
|
31
|
+
|
|
32
|
+
from "runtime/unsafe/wasmi32" include WasmI32
|
|
33
|
+
from "runtime/unsafe/wasmi64" include WasmI64
|
|
34
|
+
from "runtime/unsafe/wasmf64" include WasmF64
|
|
35
|
+
from "runtime/dataStructures" include DataStructures
|
|
36
|
+
use DataStructures.{ newInt32, newInt64, newFloat64 }
|
|
37
|
+
from "runtime/numberUtils" include NumberUtils
|
|
38
|
+
use NumberUtils.{ get_POWERS10 }
|
|
39
|
+
from "runtime/atof/table" include Table
|
|
40
|
+
use Table.{ get_F64_POWERS10_FAST_PATH, get_POWERS5 }
|
|
41
|
+
|
|
42
|
+
primitive (&&) = "@and"
|
|
43
|
+
primitive (||) = "@or"
|
|
44
|
+
primitive (!) = "@not"
|
|
45
|
+
|
|
46
|
+
provide record BiasedFp {
|
|
44
47
|
f: Int64,
|
|
45
48
|
mut e: Int32,
|
|
46
49
|
}
|
|
47
50
|
|
|
48
51
|
@unsafe
|
|
49
|
-
|
|
52
|
+
provide let _MINIMUM_EXPONENT = -1023n
|
|
50
53
|
@unsafe
|
|
51
|
-
|
|
54
|
+
provide let _MIN_EXPONENT_ROUND_TO_EVEN = -4N
|
|
52
55
|
@unsafe
|
|
53
|
-
|
|
56
|
+
provide let _MAX_EXPONENT_ROUND_TO_EVEN = 23N
|
|
54
57
|
@unsafe
|
|
55
|
-
|
|
58
|
+
provide let _MIN_EXPONENT_FAST_PATH = -22n
|
|
56
59
|
@unsafe
|
|
57
|
-
|
|
60
|
+
provide let _MAX_EXPONENT_FAST_PATH = 22n
|
|
58
61
|
@unsafe
|
|
59
|
-
|
|
62
|
+
provide let _MAX_EXPONENT_DISGUISED_FAST_PATH = 37n
|
|
60
63
|
@unsafe
|
|
61
|
-
|
|
64
|
+
provide let _MAX_MANTISSA_FAST_PATH = {
|
|
65
|
+
use WasmI64.{ (<<) }
|
|
66
|
+
2N << 52N
|
|
67
|
+
}
|
|
62
68
|
@unsafe
|
|
63
|
-
|
|
69
|
+
provide let _MANTISSA_EXPLICIT_BITS_64 = 52N
|
|
64
70
|
@unsafe
|
|
65
|
-
|
|
71
|
+
provide let _MANTISSA_EXPLICIT_BITS_32 = 52n
|
|
66
72
|
@unsafe
|
|
67
|
-
|
|
73
|
+
provide let _INFINITE_POWER = 0x7FFn
|
|
68
74
|
@unsafe
|
|
69
|
-
|
|
75
|
+
provide let _SMALLEST_POWER_OF_TEN = -342N
|
|
70
76
|
@unsafe
|
|
71
|
-
|
|
77
|
+
provide let _LARGEST_POWER_OF_TEN = 308N
|
|
72
78
|
@unsafe
|
|
73
|
-
|
|
79
|
+
provide let _SMALLEST_POWER_OF_FIVE = -342N
|
|
74
80
|
@unsafe
|
|
75
|
-
|
|
81
|
+
provide let _LARGEST_POWER_OF_FIVE = 308N
|
|
76
82
|
|
|
77
83
|
@unsafe
|
|
78
|
-
|
|
84
|
+
provide let _CHAR_CODE_UNDERSCORE = 0x5fn
|
|
79
85
|
@unsafe
|
|
80
|
-
|
|
86
|
+
provide let _CHAR_CODE_PLUS = 0x2Bn
|
|
81
87
|
@unsafe
|
|
82
|
-
|
|
88
|
+
provide let _CHAR_CODE_MINUS = 0x2Dn
|
|
83
89
|
@unsafe
|
|
84
|
-
|
|
90
|
+
provide let _CHAR_CODE_0 = 0x30n
|
|
85
91
|
@unsafe
|
|
86
|
-
|
|
92
|
+
provide let _CHAR_CODE_e = 0x65n
|
|
87
93
|
@unsafe
|
|
88
|
-
|
|
94
|
+
provide let _CHAR_CODE_E = 0x45n
|
|
89
95
|
@unsafe
|
|
90
|
-
|
|
96
|
+
provide let _CHAR_CODE_DOT = 0x2En
|
|
91
97
|
@unsafe
|
|
92
|
-
|
|
98
|
+
provide let _CHAR_CODE_A = 0x41n
|
|
93
99
|
@unsafe
|
|
94
|
-
|
|
100
|
+
provide let _CHAR_CODE_Z = 0x5an
|
|
95
101
|
@unsafe
|
|
96
|
-
|
|
102
|
+
provide let _CHAR_CODE_a = 0x61n
|
|
97
103
|
@unsafe
|
|
98
|
-
|
|
104
|
+
provide let _CHAR_CODE_f = 0x66n
|
|
99
105
|
@unsafe
|
|
100
|
-
|
|
106
|
+
provide let _CHAR_CODE_i = 0x69n
|
|
101
107
|
@unsafe
|
|
102
|
-
|
|
108
|
+
provide let _CHAR_CODE_n = 0x6en
|
|
103
109
|
@unsafe
|
|
104
|
-
|
|
110
|
+
provide let _CHAR_CODE_t = 0x74n
|
|
105
111
|
@unsafe
|
|
106
|
-
|
|
112
|
+
provide let _CHAR_CODE_y = 0x79n
|
|
107
113
|
|
|
108
|
-
|
|
114
|
+
provide let fpZero = () => { f: 0L, e: 0l }
|
|
109
115
|
@unsafe
|
|
110
|
-
|
|
111
|
-
{
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
export let fpErr = () => { f: 0L, e: -1l }
|
|
116
|
-
export let fpNan = () => { f: 1L, e: -1l }
|
|
116
|
+
provide let fpInf = () =>
|
|
117
|
+
{ f: 0L, e: WasmI32.toGrain(newInt32(_INFINITE_POWER)): Int32 }
|
|
118
|
+
provide let fpErr = () => { f: 0L, e: -1l }
|
|
119
|
+
provide let fpNan = () => { f: 1L, e: -1l }
|
|
117
120
|
|
|
118
121
|
@unsafe
|
|
119
|
-
|
|
120
|
-
WasmI32.
|
|
122
|
+
provide let getPowers10 = (i: WasmI32) => {
|
|
123
|
+
use WasmI32.{ (*) }
|
|
124
|
+
WasmI32.load(get_POWERS10(), 4n * i)
|
|
121
125
|
}
|
|
122
126
|
|
|
123
127
|
@unsafe
|
|
124
|
-
|
|
125
|
-
|
|
128
|
+
provide let getPowers10FastPath = (i: WasmI32) => {
|
|
129
|
+
use WasmI32.{ (*) }
|
|
130
|
+
WasmF64.load(get_F64_POWERS10_FAST_PATH(), 8n * i)
|
|
126
131
|
}
|
|
127
132
|
|
|
128
133
|
// https://stdrs.dev/nightly/x86_64-unknown-linux-gnu/src/core/num/dec2flt/common.rs.html#165
|
|
129
134
|
@unsafe
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
let (-) = WasmI64.sub
|
|
133
|
-
let (|) = WasmI64.or
|
|
134
|
-
let (&) = WasmI64.and
|
|
135
|
-
let (==) = WasmI64.eq
|
|
135
|
+
provide let is8Digits = (value: WasmI64) => {
|
|
136
|
+
use WasmI64.{ (+), (-), (|), (&), (==) }
|
|
136
137
|
|
|
137
138
|
let a = value + 0x4646_4646_4646_4646N
|
|
138
139
|
let b = value - 0x3030_3030_3030_3030N
|
|
@@ -147,37 +148,31 @@ export let is8Digits = (value: WasmI64) => {
|
|
|
147
148
|
// log2(10), where 217706 / 2^16 is accurate for the
|
|
148
149
|
// entire range of non-finite decimal exponents.
|
|
149
150
|
@unsafe
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
let (*) = WasmI32.mul
|
|
153
|
-
let (>>) = WasmI32.shrS
|
|
151
|
+
provide let power = (q: WasmI32) => {
|
|
152
|
+
use WasmI32.{ (+), (*), (>>) }
|
|
154
153
|
|
|
155
154
|
((q * (152_170n + 65536n)) >> 16n) + 63n
|
|
156
155
|
}
|
|
157
156
|
|
|
158
157
|
@unsafe
|
|
159
|
-
|
|
158
|
+
provide let fullMultiplication = (a: WasmI64, b: WasmI64) => {
|
|
160
159
|
// Adapted from https://www.codeproject.com/Tips/618570/UInt-Multiplication-Squaring
|
|
161
|
-
|
|
162
|
-
let (*) = WasmI64.mul
|
|
163
|
-
let (&) = WasmI64.and
|
|
164
|
-
let (>>) = WasmI64.shrU
|
|
165
|
-
let (<<) = WasmI64.shl
|
|
160
|
+
use WasmI64.{ (+), (*), (&), (>>>), (<<) }
|
|
166
161
|
|
|
167
162
|
let aLo = a & 0xffffffffN
|
|
168
163
|
let bLo = b & 0xffffffffN
|
|
169
164
|
let aLoxbLo = aLo * bLo
|
|
170
165
|
let w3 = aLoxbLo & 0xffffffffN
|
|
171
|
-
let k = aLoxbLo
|
|
166
|
+
let k = aLoxbLo >>> 32N
|
|
172
167
|
|
|
173
|
-
let aHi = a
|
|
168
|
+
let aHi = a >>> 32N
|
|
174
169
|
let mid = aHi * bLo + k
|
|
175
170
|
let k = mid & 0xffffffffN
|
|
176
|
-
let w1 = mid
|
|
171
|
+
let w1 = mid >>> 32N
|
|
177
172
|
|
|
178
|
-
let bHi = b
|
|
173
|
+
let bHi = b >>> 32N
|
|
179
174
|
let mid = aLo * bHi + k
|
|
180
|
-
let k = mid
|
|
175
|
+
let k = mid >>> 32N
|
|
181
176
|
|
|
182
177
|
let hi = aHi * bHi + w1 + k
|
|
183
178
|
let lo = (mid << 32N) + w3
|
|
@@ -186,10 +181,11 @@ export let fullMultiplication = (a: WasmI64, b: WasmI64) => {
|
|
|
186
181
|
}
|
|
187
182
|
|
|
188
183
|
@unsafe
|
|
189
|
-
|
|
184
|
+
provide let biasedFpToNumber = (fp, negative) => {
|
|
185
|
+
use WasmI64.{ (|), (<<) }
|
|
190
186
|
let f = WasmI64.load(WasmI32.fromGrain(fp.f), 8n)
|
|
191
|
-
let e = WasmI64.extendI32S(WasmI32.load(WasmI32.fromGrain(fp.e),
|
|
192
|
-
let word =
|
|
187
|
+
let e = WasmI64.extendI32S(WasmI32.load(WasmI32.fromGrain(fp.e), 4n))
|
|
188
|
+
let word = f | e << _MANTISSA_EXPLICIT_BITS_64
|
|
193
189
|
let mut float = WasmF64.reinterpretI64(word)
|
|
194
190
|
if (negative) {
|
|
195
191
|
float = WasmF64.neg(float)
|
package/runtime/atof/common.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Common
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Types
|
|
6
|
+
|
|
7
|
+
Type declarations included in the Common module.
|
|
8
|
+
|
|
1
9
|
### Common.**BiasedFp**
|
|
2
10
|
|
|
3
11
|
```grain
|
|
@@ -7,6 +15,10 @@ record BiasedFp {
|
|
|
7
15
|
}
|
|
8
16
|
```
|
|
9
17
|
|
|
18
|
+
## Values
|
|
19
|
+
|
|
20
|
+
Functions and constants included in the Common module.
|
|
21
|
+
|
|
10
22
|
### Common.**_MINIMUM_EXPONENT**
|
|
11
23
|
|
|
12
24
|
```grain
|
|
@@ -184,60 +196,60 @@ _CHAR_CODE_y : WasmI32
|
|
|
184
196
|
### Common.**fpZero**
|
|
185
197
|
|
|
186
198
|
```grain
|
|
187
|
-
fpZero : ()
|
|
199
|
+
fpZero : () => BiasedFp
|
|
188
200
|
```
|
|
189
201
|
|
|
190
202
|
### Common.**fpInf**
|
|
191
203
|
|
|
192
204
|
```grain
|
|
193
|
-
fpInf : ()
|
|
205
|
+
fpInf : () => BiasedFp
|
|
194
206
|
```
|
|
195
207
|
|
|
196
208
|
### Common.**fpErr**
|
|
197
209
|
|
|
198
210
|
```grain
|
|
199
|
-
fpErr : ()
|
|
211
|
+
fpErr : () => BiasedFp
|
|
200
212
|
```
|
|
201
213
|
|
|
202
214
|
### Common.**fpNan**
|
|
203
215
|
|
|
204
216
|
```grain
|
|
205
|
-
fpNan : ()
|
|
217
|
+
fpNan : () => BiasedFp
|
|
206
218
|
```
|
|
207
219
|
|
|
208
220
|
### Common.**getPowers10**
|
|
209
221
|
|
|
210
222
|
```grain
|
|
211
|
-
getPowers10 : WasmI32
|
|
223
|
+
getPowers10 : (i: WasmI32) => WasmI32
|
|
212
224
|
```
|
|
213
225
|
|
|
214
226
|
### Common.**getPowers10FastPath**
|
|
215
227
|
|
|
216
228
|
```grain
|
|
217
|
-
getPowers10FastPath : WasmI32
|
|
229
|
+
getPowers10FastPath : (i: WasmI32) => WasmF64
|
|
218
230
|
```
|
|
219
231
|
|
|
220
232
|
### Common.**is8Digits**
|
|
221
233
|
|
|
222
234
|
```grain
|
|
223
|
-
is8Digits : WasmI64
|
|
235
|
+
is8Digits : (value: WasmI64) => Bool
|
|
224
236
|
```
|
|
225
237
|
|
|
226
238
|
### Common.**power**
|
|
227
239
|
|
|
228
240
|
```grain
|
|
229
|
-
power : WasmI32
|
|
241
|
+
power : (q: WasmI32) => WasmI32
|
|
230
242
|
```
|
|
231
243
|
|
|
232
244
|
### Common.**fullMultiplication**
|
|
233
245
|
|
|
234
246
|
```grain
|
|
235
|
-
fullMultiplication : (WasmI64, WasmI64)
|
|
247
|
+
fullMultiplication : (a: WasmI64, b: WasmI64) => (Int64, Int64)
|
|
236
248
|
```
|
|
237
249
|
|
|
238
250
|
### Common.**biasedFpToNumber**
|
|
239
251
|
|
|
240
252
|
```grain
|
|
241
|
-
biasedFpToNumber : (BiasedFp, Bool)
|
|
253
|
+
biasedFpToNumber : (fp: BiasedFp, negative: Bool) => Number
|
|
242
254
|
```
|
|
243
255
|
|