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.
Files changed (39) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/com/cpp/module.f.mjs +10 -1
  3. package/com/cs/module.f.mjs +11 -1
  4. package/com/rust/module.f.mjs +13 -1
  5. package/issues/lang/3370-type-inference.md +69 -0
  6. package/issues/lang/3380-promise.md +22 -0
  7. package/issues/lang/3390-class.md +3 -0
  8. package/issues/lang/README.md +79 -8
  9. package/jsr.json +2 -1
  10. package/out/com/cpp/module.f.d.mts +4 -1
  11. package/out/com/cpp/module.f.mjs +8 -1
  12. package/out/com/cs/module.f.d.mts +4 -1
  13. package/out/com/cs/module.f.mjs +10 -1
  14. package/out/com/rust/module.f.d.mts +1 -2
  15. package/out/com/rust/module.f.mjs +12 -1
  16. package/out/prime_field/module.f.d.mts +28 -2
  17. package/out/prime_field/module.f.mjs +25 -2
  18. package/out/prime_field/test.f.d.mts +1 -0
  19. package/out/prime_field/test.f.mjs +7 -0
  20. package/out/secp/module.f.d.mts +68 -6
  21. package/out/secp/module.f.mjs +72 -12
  22. package/out/secp/test.f.d.mts +1 -0
  23. package/out/secp/test.f.mjs +18 -3
  24. package/out/types/bigint/test.f.mjs +7 -0
  25. package/out/types/bit_vec/module.f.d.mts +72 -0
  26. package/out/types/bit_vec/module.f.mjs +83 -0
  27. package/out/types/bit_vec/test.f.d.mts +9 -0
  28. package/out/types/bit_vec/test.f.mjs +60 -0
  29. package/package.json +1 -1
  30. package/prime_field/module.f.mjs +25 -2
  31. package/prime_field/test.f.mjs +5 -0
  32. package/secp/module.f.mjs +73 -12
  33. package/secp/test.f.mjs +18 -3
  34. package/types/bigint/test.f.mjs +5 -0
  35. package/types/bit_vec/module.f.mjs +90 -0
  36. package/types/bit_vec/test.f.mjs +41 -0
  37. /package/issues/lang/{3310-expression.md → 3410-expression.md} +0 -0
  38. /package/issues/lang/{3320-one-parameter.md → 3420-one-parameter.md} +0 -0
  39. /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
+ }