functionalscript 0.2.2 → 0.2.3
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 +4 -0
- package/com/cpp/module.f.mjs +10 -1
- package/com/cs/module.f.mjs +11 -1
- package/com/rust/module.f.mjs +13 -1
- package/issues/lang/3370-type-inference.md +69 -0
- package/issues/lang/3380-promise.md +22 -0
- package/issues/lang/3390-class.md +3 -0
- package/issues/lang/README.md +79 -8
- package/jsr.json +2 -1
- package/out/com/cpp/module.f.d.mts +4 -1
- package/out/com/cpp/module.f.mjs +8 -1
- package/out/com/cs/module.f.d.mts +4 -1
- package/out/com/cs/module.f.mjs +10 -1
- package/out/com/rust/module.f.d.mts +1 -2
- package/out/com/rust/module.f.mjs +12 -1
- package/out/prime_field/module.f.d.mts +28 -2
- package/out/prime_field/module.f.mjs +25 -2
- package/out/prime_field/test.f.d.mts +1 -0
- package/out/prime_field/test.f.mjs +7 -0
- package/out/secp/module.f.d.mts +68 -6
- package/out/secp/module.f.mjs +72 -12
- package/out/secp/test.f.d.mts +1 -0
- package/out/secp/test.f.mjs +18 -3
- package/out/types/bigint/test.f.mjs +7 -0
- package/out/types/bit_vec/module.f.d.mts +72 -0
- package/out/types/bit_vec/module.f.mjs +83 -0
- package/out/types/bit_vec/test.f.d.mts +9 -0
- package/out/types/bit_vec/test.f.mjs +60 -0
- package/package.json +1 -1
- package/prime_field/module.f.mjs +25 -2
- package/prime_field/test.f.mjs +5 -0
- package/secp/module.f.mjs +73 -12
- package/secp/test.f.mjs +18 -3
- package/types/bigint/test.f.mjs +5 -0
- package/types/bit_vec/module.f.mjs +90 -0
- package/types/bit_vec/test.f.mjs +41 -0
- /package/issues/lang/{3310-expression.md → 3410-expression.md} +0 -0
- /package/issues/lang/{3320-one-parameter.md → 3420-one-parameter.md} +0 -0
- /package/issues/lang/{3330-assignments.md → 3430-assignments.md} +0 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// @ts-self-types="./module.f.d.mts"
|
|
2
|
+
import { log2 } from '../bigint/module.f.mjs'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A vector of bits represented as a `bigint`.
|
|
6
|
+
*
|
|
7
|
+
* @typedef {bigint} Vec
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* An empty vector of bits.
|
|
12
|
+
*/
|
|
13
|
+
export const empty = 1n
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Calculates the length of the given vector of bits.
|
|
17
|
+
*/
|
|
18
|
+
export const len = log2
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Extract an unsigned integer of the given `uintLen` from the given vector.
|
|
22
|
+
*
|
|
23
|
+
* @type {(uintLen: bigint) => (v: Vec) => bigint}
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
*
|
|
27
|
+
* ```js
|
|
28
|
+
* const vector = 0b110101n;
|
|
29
|
+
* const extract3Bits = uint(3n);
|
|
30
|
+
* const result = extract3Bits(vector); // result is 0b101n (5n)
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export const uint = uintLen => {
|
|
34
|
+
const mask = (1n << uintLen) - 1n
|
|
35
|
+
return data => data & mask
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Creates a vector of bits of the given `vecLen` from the given unsigned integer.
|
|
40
|
+
*
|
|
41
|
+
* @type {(vecLen: bigint) => (ui: bigint) => Vec}
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
*
|
|
45
|
+
* ```js
|
|
46
|
+
* const createVector = vec(4n);
|
|
47
|
+
* const vector = createVector(5n); // vector is 0b10101n
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export const vec = vecLen => {
|
|
51
|
+
const stop = 1n << vecLen
|
|
52
|
+
const mask = stop - 1n
|
|
53
|
+
return data => (data & mask) | stop
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Appends the vector `b` to the back of the vector `a`.
|
|
58
|
+
*
|
|
59
|
+
* @type {(a: Vec) => (b: Vec) => Vec}
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
*
|
|
63
|
+
* ```js
|
|
64
|
+
* const vec8 = vec(8n)
|
|
65
|
+
* const a = vec8(0x345n)
|
|
66
|
+
* const b = vec8(0x789n)
|
|
67
|
+
* const ab = appendBack(a)(b) // 0x18945n
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export const appendBack = a => {
|
|
71
|
+
const aLen = len(a)
|
|
72
|
+
return b => a | (b << aLen)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Removes the first `len` bits from the given vector.
|
|
77
|
+
*
|
|
78
|
+
* @type {(len: bigint) => (v: Vec) => Vec}
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
*
|
|
82
|
+
* ```js
|
|
83
|
+
* const v = vec(17n)(0x12345n) // v = 0x32345n
|
|
84
|
+
* const r = removeFront(9n)(v) // r = 0x191n
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export const removeFront = len => v => {
|
|
88
|
+
const r = v >> len
|
|
89
|
+
return r === 0n ? empty : r
|
|
90
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { empty, len, appendBack, vec, uint, removeFront } from './module.f.mjs'
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
uintExample: () => {
|
|
5
|
+
const vector = 0b110101n;
|
|
6
|
+
const extract3Bits = uint(3n);
|
|
7
|
+
const result = extract3Bits(vector); // result is 0b101n (5n)
|
|
8
|
+
if (result !== 0b101n) { throw result }
|
|
9
|
+
},
|
|
10
|
+
vecExample: () => {
|
|
11
|
+
const createVector = vec(4n);
|
|
12
|
+
const vector = createVector(5n); // vector is 0b10101n
|
|
13
|
+
if (vector !== 0b10101n) { throw vector }
|
|
14
|
+
},
|
|
15
|
+
length: () => {
|
|
16
|
+
const i = len(empty)
|
|
17
|
+
if (i !== 0n) { throw i}
|
|
18
|
+
},
|
|
19
|
+
bitset: () => {
|
|
20
|
+
const v = vec(8n)(0x5FEn)
|
|
21
|
+
if (v !== 0x1FEn) { throw v }
|
|
22
|
+
if (len(v) !== 8n) { throw 'len' }
|
|
23
|
+
const u = uint(8n)(v)
|
|
24
|
+
if (u !== 0xFEn) { throw v }
|
|
25
|
+
},
|
|
26
|
+
appendBack: () => {
|
|
27
|
+
const vec8 = vec(8n)
|
|
28
|
+
const a = vec8(0x345n)
|
|
29
|
+
const b = vec8(0x789n)
|
|
30
|
+
const ab = appendBack(a)(b)
|
|
31
|
+
if (ab !== 0x18945n) { throw ab }
|
|
32
|
+
const s = len(ab)
|
|
33
|
+
if (s !== 16n) { throw `appendBack: ${s}` }
|
|
34
|
+
},
|
|
35
|
+
removeBack: () => {
|
|
36
|
+
const v = vec(17n)(0x12345n)
|
|
37
|
+
if (v !== 0x32345n) { throw v.toString(16) }
|
|
38
|
+
const r = removeFront(9n)(v)
|
|
39
|
+
if (r !== 0x191n) { throw r.toString(16) }
|
|
40
|
+
}
|
|
41
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|