goscript 0.1.4 → 0.2.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.
Files changed (270) hide show
  1. package/README.md +5 -2
  2. package/cmd/go_js_wasm_exec/main.go +201 -0
  3. package/cmd/go_js_wasm_exec/main_test.go +83 -0
  4. package/cmd/goscript/{cmd_compile.go → cmd-compile.go} +7 -0
  5. package/cmd/goscript/cmd-test.go +14 -0
  6. package/cmd/goscript/cmd-test_test.go +1 -1
  7. package/compiler/compile-request.go +12 -9
  8. package/compiler/compliance_test.go +0 -1
  9. package/compiler/config.go +2 -0
  10. package/compiler/gotest/request.go +28 -0
  11. package/compiler/gotest/runner.go +353 -27
  12. package/compiler/gotest/runner_test.go +273 -1
  13. package/compiler/gotest/testdata/browserapi/browserapi_test.go +20 -0
  14. package/compiler/gotest/testdata/browserapi/go.mod +3 -0
  15. package/compiler/lowered-program.go +24 -17
  16. package/compiler/lowering.go +392 -127
  17. package/compiler/lowering_bench_test.go +41 -27
  18. package/compiler/override-facts.go +15 -0
  19. package/compiler/override-parity-verifier.go +450 -0
  20. package/compiler/override-parity.go +122 -0
  21. package/compiler/override-registry_test.go +559 -0
  22. package/compiler/protobuf-ts-binding.go +514 -0
  23. package/compiler/protobuf-ts-binding_test.go +172 -0
  24. package/compiler/semantic-model-types.go +9 -4
  25. package/compiler/semantic-model.go +282 -70
  26. package/compiler/semantic-model_test.go +82 -1
  27. package/compiler/service.go +20 -1
  28. package/compiler/skeleton_test.go +62 -8
  29. package/compiler/typescript-emitter.go +128 -13
  30. package/dist/gs/builtin/slice.d.ts +2 -1
  31. package/dist/gs/builtin/slice.js +29 -4
  32. package/dist/gs/builtin/slice.js.map +1 -1
  33. package/dist/gs/builtin/type.d.ts +13 -5
  34. package/dist/gs/builtin/type.js +153 -60
  35. package/dist/gs/builtin/type.js.map +1 -1
  36. package/dist/gs/builtin/varRef.d.ts +11 -0
  37. package/dist/gs/builtin/varRef.js +57 -2
  38. package/dist/gs/builtin/varRef.js.map +1 -1
  39. package/dist/gs/bytes/buffer.gs.js +1 -1
  40. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  41. package/dist/gs/bytes/reader.gs.js +1 -1
  42. package/dist/gs/bytes/reader.gs.js.map +1 -1
  43. package/dist/gs/compress/zlib/index.d.ts +10 -3
  44. package/dist/gs/compress/zlib/index.js +50 -16
  45. package/dist/gs/compress/zlib/index.js.map +1 -1
  46. package/dist/gs/encoding/json/index.d.ts +114 -0
  47. package/dist/gs/encoding/json/index.js +544 -36
  48. package/dist/gs/encoding/json/index.js.map +1 -1
  49. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +100 -0
  50. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +564 -0
  51. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  52. package/dist/gs/github.com/pkg/errors/errors.js +54 -30
  53. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
  54. package/dist/gs/go/scanner/index.d.ts +2 -0
  55. package/dist/gs/go/scanner/index.js +29 -5
  56. package/dist/gs/go/scanner/index.js.map +1 -1
  57. package/dist/gs/go/token/index.js +22 -6
  58. package/dist/gs/go/token/index.js.map +1 -1
  59. package/dist/gs/hash/index.d.ts +6 -0
  60. package/dist/gs/hash/index.js +20 -0
  61. package/dist/gs/hash/index.js.map +1 -1
  62. package/dist/gs/internal/goarch/index.d.ts +43 -3
  63. package/dist/gs/internal/goarch/index.js +42 -10
  64. package/dist/gs/internal/goarch/index.js.map +1 -1
  65. package/dist/gs/io/fs/fs.js +26 -14
  66. package/dist/gs/io/fs/fs.js.map +1 -1
  67. package/dist/gs/io/fs/readdir.js +4 -2
  68. package/dist/gs/io/fs/readdir.js.map +1 -1
  69. package/dist/gs/io/fs/sub.js +8 -1
  70. package/dist/gs/io/fs/sub.js.map +1 -1
  71. package/dist/gs/io/io.d.ts +2 -0
  72. package/dist/gs/io/io.js.map +1 -1
  73. package/dist/gs/math/bits/index.d.ts +5 -0
  74. package/dist/gs/math/bits/index.js +16 -4
  75. package/dist/gs/math/bits/index.js.map +1 -1
  76. package/dist/gs/mime/index.d.ts +16 -0
  77. package/dist/gs/mime/index.js +315 -6
  78. package/dist/gs/mime/index.js.map +1 -1
  79. package/dist/gs/net/http/httptest/index.d.ts +12 -0
  80. package/dist/gs/net/http/httptest/index.js +85 -6
  81. package/dist/gs/net/http/httptest/index.js.map +1 -1
  82. package/dist/gs/net/http/index.d.ts +300 -5
  83. package/dist/gs/net/http/index.js +1598 -58
  84. package/dist/gs/net/http/index.js.map +1 -1
  85. package/dist/gs/os/dir_unix.gs.js +1 -1
  86. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  87. package/dist/gs/os/error.gs.js +1 -1
  88. package/dist/gs/os/error.gs.js.map +1 -1
  89. package/dist/gs/os/exec.gs.d.ts +1 -0
  90. package/dist/gs/os/exec.gs.js +4 -8
  91. package/dist/gs/os/exec.gs.js.map +1 -1
  92. package/dist/gs/os/exec_posix.gs.js +1 -1
  93. package/dist/gs/os/exec_posix.gs.js.map +1 -1
  94. package/dist/gs/os/index.d.ts +1 -1
  95. package/dist/gs/os/index.js +1 -1
  96. package/dist/gs/os/index.js.map +1 -1
  97. package/dist/gs/os/proc.gs.d.ts +4 -0
  98. package/dist/gs/os/proc.gs.js +12 -6
  99. package/dist/gs/os/proc.gs.js.map +1 -1
  100. package/dist/gs/os/root_js.gs.js +1 -1
  101. package/dist/gs/os/root_js.gs.js.map +1 -1
  102. package/dist/gs/os/types.gs.js +1 -1
  103. package/dist/gs/os/types.gs.js.map +1 -1
  104. package/dist/gs/os/types_js.gs.js +1 -1
  105. package/dist/gs/os/types_js.gs.js.map +1 -1
  106. package/dist/gs/os/types_unix.gs.js +1 -1
  107. package/dist/gs/os/types_unix.gs.js.map +1 -1
  108. package/dist/gs/path/path.js +11 -7
  109. package/dist/gs/path/path.js.map +1 -1
  110. package/dist/gs/reflect/index.d.ts +5 -4
  111. package/dist/gs/reflect/index.js +4 -3
  112. package/dist/gs/reflect/index.js.map +1 -1
  113. package/dist/gs/reflect/map.js +15 -0
  114. package/dist/gs/reflect/map.js.map +1 -1
  115. package/dist/gs/reflect/type.d.ts +25 -6
  116. package/dist/gs/reflect/type.js +1418 -228
  117. package/dist/gs/reflect/type.js.map +1 -1
  118. package/dist/gs/reflect/types.d.ts +14 -6
  119. package/dist/gs/reflect/types.js +35 -1
  120. package/dist/gs/reflect/types.js.map +1 -1
  121. package/dist/gs/reflect/value.d.ts +1 -0
  122. package/dist/gs/reflect/value.js +83 -41
  123. package/dist/gs/reflect/value.js.map +1 -1
  124. package/dist/gs/reflect/visiblefields.js +4 -140
  125. package/dist/gs/reflect/visiblefields.js.map +1 -1
  126. package/dist/gs/runtime/pprof/index.d.ts +8 -2
  127. package/dist/gs/runtime/pprof/index.js +50 -30
  128. package/dist/gs/runtime/pprof/index.js.map +1 -1
  129. package/dist/gs/runtime/runtime.js +5 -4
  130. package/dist/gs/runtime/runtime.js.map +1 -1
  131. package/dist/gs/runtime/trace/index.js +5 -19
  132. package/dist/gs/runtime/trace/index.js.map +1 -1
  133. package/dist/gs/strconv/atoi.gs.js +1 -1
  134. package/dist/gs/strconv/atoi.gs.js.map +1 -1
  135. package/dist/gs/strconv/complex.gs.d.ts +3 -0
  136. package/dist/gs/strconv/complex.gs.js +148 -0
  137. package/dist/gs/strconv/complex.gs.js.map +1 -0
  138. package/dist/gs/strconv/index.d.ts +1 -0
  139. package/dist/gs/strconv/index.js +1 -0
  140. package/dist/gs/strconv/index.js.map +1 -1
  141. package/dist/gs/strings/builder.js +1 -1
  142. package/dist/gs/strings/reader.js +9 -5
  143. package/dist/gs/strings/reader.js.map +1 -1
  144. package/dist/gs/strings/replace.js +15 -7
  145. package/dist/gs/strings/replace.js.map +1 -1
  146. package/dist/gs/strings/strings.d.ts +5 -0
  147. package/dist/gs/strings/strings.js +57 -5
  148. package/dist/gs/strings/strings.js.map +1 -1
  149. package/dist/gs/sync/atomic/type.gs.js +9 -9
  150. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  151. package/dist/gs/sync/atomic/value.gs.js +2 -2
  152. package/dist/gs/sync/atomic/value.gs.js.map +1 -1
  153. package/dist/gs/syscall/env.js +22 -14
  154. package/dist/gs/syscall/env.js.map +1 -1
  155. package/dist/gs/testing/testing.js +55 -13
  156. package/dist/gs/testing/testing.js.map +1 -1
  157. package/dist/gs/time/time.d.ts +24 -1
  158. package/dist/gs/time/time.js +43 -3
  159. package/dist/gs/time/time.js.map +1 -1
  160. package/dist/gs/unique/index.js +7 -1
  161. package/dist/gs/unique/index.js.map +1 -1
  162. package/go.mod +3 -3
  163. package/go.sum +16 -0
  164. package/gs/builtin/runtime-contract.test.ts +218 -21
  165. package/gs/builtin/slice.ts +44 -4
  166. package/gs/builtin/type.ts +226 -59
  167. package/gs/builtin/varRef.ts +85 -2
  168. package/gs/bytes/buffer.gs.ts +1 -1
  169. package/gs/bytes/reader.gs.ts +1 -1
  170. package/gs/compress/zlib/index.test.ts +62 -1
  171. package/gs/compress/zlib/index.ts +53 -16
  172. package/gs/compress/zlib/parity.json +51 -0
  173. package/gs/encoding/json/index.test.ts +360 -6
  174. package/gs/encoding/json/index.ts +679 -38
  175. package/gs/encoding/json/parity.json +81 -0
  176. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +211 -3
  177. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +857 -1
  178. package/gs/github.com/pkg/errors/errors.ts +54 -30
  179. package/gs/go/scanner/index.test.ts +39 -56
  180. package/gs/go/scanner/index.ts +33 -5
  181. package/gs/go/scanner/parity.json +27 -0
  182. package/gs/go/token/index.ts +22 -6
  183. package/gs/hash/index.test.ts +20 -33
  184. package/gs/hash/index.ts +28 -0
  185. package/gs/hash/parity.json +21 -0
  186. package/gs/internal/goarch/index.test.ts +32 -0
  187. package/gs/internal/goarch/index.ts +45 -13
  188. package/gs/internal/goarch/parity.json +144 -0
  189. package/gs/io/fs/fs.ts +26 -14
  190. package/gs/io/fs/readdir.ts +4 -4
  191. package/gs/io/fs/sub.ts +8 -1
  192. package/gs/io/io.ts +1 -0
  193. package/gs/io/parity.json +162 -0
  194. package/gs/math/bits/index.test.ts +14 -1
  195. package/gs/math/bits/index.ts +23 -4
  196. package/gs/math/bits/parity.json +156 -0
  197. package/gs/mime/index.test.ts +90 -0
  198. package/gs/mime/index.ts +369 -6
  199. package/gs/mime/parity.json +36 -0
  200. package/gs/net/http/httptest/index.test.ts +98 -2
  201. package/gs/net/http/httptest/index.ts +101 -6
  202. package/gs/net/http/httptest/parity.json +15 -0
  203. package/gs/net/http/index.test.ts +781 -12
  204. package/gs/net/http/index.ts +1860 -139
  205. package/gs/net/http/meta.json +16 -1
  206. package/gs/net/http/parity.json +193 -0
  207. package/gs/os/dir_unix.gs.ts +1 -1
  208. package/gs/os/error.gs.ts +1 -1
  209. package/gs/os/exec.gs.ts +4 -8
  210. package/gs/os/exec_posix.gs.ts +1 -1
  211. package/gs/os/index.test.ts +9 -0
  212. package/gs/os/index.ts +1 -0
  213. package/gs/os/parity.json +9 -0
  214. package/gs/os/proc.gs.ts +18 -5
  215. package/gs/os/proc.test.ts +26 -0
  216. package/gs/os/root_js.gs.ts +1 -1
  217. package/gs/os/types.gs.ts +1 -1
  218. package/gs/os/types_js.gs.ts +1 -1
  219. package/gs/os/types_unix.gs.ts +1 -1
  220. package/gs/path/path.ts +11 -7
  221. package/gs/reflect/field.test.ts +37 -15
  222. package/gs/reflect/function-types.test.ts +518 -22
  223. package/gs/reflect/index.ts +8 -6
  224. package/gs/reflect/map.ts +20 -0
  225. package/gs/reflect/meta.json +6 -4
  226. package/gs/reflect/parity.json +234 -0
  227. package/gs/reflect/sliceat.test.ts +156 -0
  228. package/gs/reflect/structof.test.ts +401 -0
  229. package/gs/reflect/type.ts +1897 -317
  230. package/gs/reflect/typefor.test.ts +510 -10
  231. package/gs/reflect/types.ts +43 -18
  232. package/gs/reflect/value.ts +105 -45
  233. package/gs/reflect/visiblefields.ts +5 -168
  234. package/gs/runtime/parity.json +24 -0
  235. package/gs/runtime/pprof/index.test.ts +29 -7
  236. package/gs/runtime/pprof/index.ts +56 -30
  237. package/gs/runtime/pprof/parity.json +27 -0
  238. package/gs/runtime/runtime.test.ts +3 -1
  239. package/gs/runtime/runtime.ts +4 -3
  240. package/gs/runtime/trace/index.test.ts +5 -3
  241. package/gs/runtime/trace/index.ts +8 -20
  242. package/gs/runtime/trace/parity.json +36 -0
  243. package/gs/strconv/atoi.gs.ts +1 -1
  244. package/gs/strconv/complex.gs.ts +174 -0
  245. package/gs/strconv/complex.test.ts +65 -0
  246. package/gs/strconv/index.ts +1 -0
  247. package/gs/strconv/parity.json +120 -0
  248. package/gs/strings/builder.ts +1 -1
  249. package/gs/strings/parity.json +186 -0
  250. package/gs/strings/reader.ts +9 -5
  251. package/gs/strings/replace.ts +15 -7
  252. package/gs/strings/strings.test.ts +22 -2
  253. package/gs/strings/strings.ts +64 -6
  254. package/gs/sync/atomic/type.gs.ts +9 -9
  255. package/gs/sync/atomic/value.gs.ts +2 -2
  256. package/gs/syscall/env.ts +29 -14
  257. package/gs/testing/testing.test.ts +67 -0
  258. package/gs/testing/testing.ts +87 -19
  259. package/gs/time/parity.json +225 -0
  260. package/gs/time/time.test.ts +20 -2
  261. package/gs/time/time.ts +49 -7
  262. package/gs/unique/index.ts +7 -1
  263. package/package.json +4 -2
  264. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +0 -217
  265. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +0 -926
  266. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +0 -1
  267. package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +0 -38
  268. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +0 -1361
  269. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +0 -46
  270. /package/compiler/{wasm_api.go → wasm-api.go} +0 -0
@@ -0,0 +1,144 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "strict": true,
4
+ "symbols": {
5
+ "AMD64": {
6
+ "status": "real"
7
+ },
8
+ "ArchFamily": {
9
+ "status": "real"
10
+ },
11
+ "ArchFamilyType": {
12
+ "status": "real"
13
+ },
14
+ "ARM": {
15
+ "status": "real"
16
+ },
17
+ "ARM64": {
18
+ "status": "real"
19
+ },
20
+ "BigEndian": {
21
+ "status": "real"
22
+ },
23
+ "DefaultPhysPageSize": {
24
+ "status": "real"
25
+ },
26
+ "GOARCH": {
27
+ "status": "real"
28
+ },
29
+ "I386": {
30
+ "status": "real"
31
+ },
32
+ "Int64Align": {
33
+ "status": "real"
34
+ },
35
+ "Is386": {
36
+ "status": "real"
37
+ },
38
+ "IsAmd64": {
39
+ "status": "real"
40
+ },
41
+ "IsAmd64p32": {
42
+ "status": "real"
43
+ },
44
+ "IsArm": {
45
+ "status": "real"
46
+ },
47
+ "IsArm64": {
48
+ "status": "real"
49
+ },
50
+ "IsArm64be": {
51
+ "status": "real"
52
+ },
53
+ "IsArmbe": {
54
+ "status": "real"
55
+ },
56
+ "IsLoong64": {
57
+ "status": "real"
58
+ },
59
+ "IsMips": {
60
+ "status": "real"
61
+ },
62
+ "IsMips64": {
63
+ "status": "real"
64
+ },
65
+ "IsMips64le": {
66
+ "status": "real"
67
+ },
68
+ "IsMips64p32": {
69
+ "status": "real"
70
+ },
71
+ "IsMips64p32le": {
72
+ "status": "real"
73
+ },
74
+ "IsMipsle": {
75
+ "status": "real"
76
+ },
77
+ "IsPpc": {
78
+ "status": "real"
79
+ },
80
+ "IsPpc64": {
81
+ "status": "real"
82
+ },
83
+ "IsPpc64le": {
84
+ "status": "real"
85
+ },
86
+ "IsRiscv": {
87
+ "status": "real"
88
+ },
89
+ "IsRiscv64": {
90
+ "status": "real"
91
+ },
92
+ "IsS390": {
93
+ "status": "real"
94
+ },
95
+ "IsS390x": {
96
+ "status": "real"
97
+ },
98
+ "IsSparc": {
99
+ "status": "real"
100
+ },
101
+ "IsSparc64": {
102
+ "status": "real"
103
+ },
104
+ "IsWasm": {
105
+ "status": "real"
106
+ },
107
+ "LOONG64": {
108
+ "status": "real"
109
+ },
110
+ "MinFrameSize": {
111
+ "status": "real"
112
+ },
113
+ "MIPS": {
114
+ "status": "real"
115
+ },
116
+ "MIPS64": {
117
+ "status": "real"
118
+ },
119
+ "PCQuantum": {
120
+ "status": "real"
121
+ },
122
+ "PPC64": {
123
+ "status": "real"
124
+ },
125
+ "PtrBits": {
126
+ "status": "real"
127
+ },
128
+ "PtrSize": {
129
+ "status": "real"
130
+ },
131
+ "RISCV64": {
132
+ "status": "real"
133
+ },
134
+ "S390X": {
135
+ "status": "real"
136
+ },
137
+ "StackAlign": {
138
+ "status": "real"
139
+ },
140
+ "WASM": {
141
+ "status": "real"
142
+ }
143
+ }
144
+ }
package/gs/io/fs/fs.ts CHANGED
@@ -618,20 +618,32 @@ export class PathError {
618
618
  },
619
619
  ],
620
620
  PathError,
621
- {
622
- Op: { kind: $.TypeKind.Basic, name: 'string' },
623
- Path: { kind: $.TypeKind.Basic, name: 'string' },
624
- Err: {
625
- kind: $.TypeKind.Interface,
626
- name: 'GoError',
627
- methods: [
628
- {
629
- name: 'Error',
630
- args: [],
631
- returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }],
632
- },
633
- ],
621
+ [
622
+ {
623
+ name: 'Op',
624
+ key: 'Op',
625
+ type: { kind: $.TypeKind.Basic, name: 'string' },
634
626
  },
635
- },
627
+ {
628
+ name: 'Path',
629
+ key: 'Path',
630
+ type: { kind: $.TypeKind.Basic, name: 'string' },
631
+ },
632
+ {
633
+ name: 'Err',
634
+ key: 'Err',
635
+ type: {
636
+ kind: $.TypeKind.Interface,
637
+ name: 'GoError',
638
+ methods: [
639
+ {
640
+ name: 'Error',
641
+ args: [],
642
+ returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }],
643
+ },
644
+ ],
645
+ },
646
+ },
647
+ ],
636
648
  )
637
649
  }
@@ -94,9 +94,9 @@ export function ReadDir(
94
94
  ;[list, err] = dir!.ReadDir(-1)
95
95
  if (list) {
96
96
  list.sort((a: DirEntry, b: DirEntry): number => {
97
- return $.pointerValue<Exclude<DirEntry, null>>(a).Name().localeCompare(
98
- $.pointerValue<Exclude<DirEntry, null>>(b).Name(),
99
- )
97
+ return $.pointerValue<Exclude<DirEntry, null>>(a)
98
+ .Name()
99
+ .localeCompare($.pointerValue<Exclude<DirEntry, null>>(b).Name())
100
100
  })
101
101
  }
102
102
  return [list, err]
@@ -198,7 +198,7 @@ class dirInfo {
198
198
  },
199
199
  ],
200
200
  dirInfo,
201
- { fileInfo: 'FileInfo' },
201
+ [{ name: 'fileInfo', key: 'fileInfo', type: 'FileInfo' }],
202
202
  )
203
203
  }
204
204
 
package/gs/io/fs/sub.ts CHANGED
@@ -444,6 +444,13 @@ class subFS {
444
444
  },
445
445
  ],
446
446
  subFS,
447
- { fsys: 'FS', dir: { kind: $.TypeKind.Basic, name: 'string' } },
447
+ [
448
+ { name: 'fsys', key: 'fsys', type: 'FS' },
449
+ {
450
+ name: 'dir',
451
+ key: 'dir',
452
+ type: { kind: $.TypeKind.Basic, name: 'string' },
453
+ },
454
+ ],
448
455
  )
449
456
  }
package/gs/io/io.ts CHANGED
@@ -68,6 +68,7 @@ export interface ReadCloser extends Reader, Closer {}
68
68
  export interface WriteCloser extends Writer, Closer {}
69
69
  export interface ReadWriteCloser extends Reader, Writer, Closer {}
70
70
  export interface ReadSeeker extends Reader, Seeker {}
71
+ export interface ReadSeekCloser extends Reader, Seeker, Closer {}
71
72
  export interface WriteSeeker extends Writer, Seeker {}
72
73
  export interface ReadWriteSeeker extends Reader, Writer, Seeker {}
73
74
 
@@ -0,0 +1,162 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "strict": true,
4
+ "symbols": {
5
+ "ByteReader": {
6
+ "status": "real"
7
+ },
8
+ "ByteScanner": {
9
+ "status": "real"
10
+ },
11
+ "ByteWriter": {
12
+ "status": "real"
13
+ },
14
+ "Closer": {
15
+ "status": "real"
16
+ },
17
+ "Copy": {
18
+ "status": "real"
19
+ },
20
+ "CopyBuffer": {
21
+ "status": "real"
22
+ },
23
+ "CopyN": {
24
+ "status": "real"
25
+ },
26
+ "Discard": {
27
+ "status": "real"
28
+ },
29
+ "EOF": {
30
+ "status": "real"
31
+ },
32
+ "ErrClosedPipe": {
33
+ "status": "real"
34
+ },
35
+ "ErrNoProgress": {
36
+ "status": "real"
37
+ },
38
+ "ErrShortBuffer": {
39
+ "status": "real"
40
+ },
41
+ "ErrShortWrite": {
42
+ "status": "real"
43
+ },
44
+ "ErrUnexpectedEOF": {
45
+ "status": "real"
46
+ },
47
+ "LimitedReader": {
48
+ "status": "real"
49
+ },
50
+ "LimitReader": {
51
+ "status": "real"
52
+ },
53
+ "MultiReader": {
54
+ "status": "real"
55
+ },
56
+ "MultiWriter": {
57
+ "status": "real"
58
+ },
59
+ "NewOffsetWriter": {
60
+ "status": "real"
61
+ },
62
+ "NewSectionReader": {
63
+ "status": "real"
64
+ },
65
+ "NopCloser": {
66
+ "status": "real"
67
+ },
68
+ "OffsetWriter": {
69
+ "status": "real"
70
+ },
71
+ "Pipe": {
72
+ "status": "real"
73
+ },
74
+ "PipeReader": {
75
+ "status": "real"
76
+ },
77
+ "PipeWriter": {
78
+ "status": "real"
79
+ },
80
+ "ReadAll": {
81
+ "status": "real"
82
+ },
83
+ "ReadAtLeast": {
84
+ "status": "real"
85
+ },
86
+ "ReadCloser": {
87
+ "status": "real"
88
+ },
89
+ "Reader": {
90
+ "status": "real"
91
+ },
92
+ "ReaderAt": {
93
+ "status": "real"
94
+ },
95
+ "ReaderFrom": {
96
+ "status": "real"
97
+ },
98
+ "ReadFull": {
99
+ "status": "real"
100
+ },
101
+ "ReadSeekCloser": {
102
+ "status": "real"
103
+ },
104
+ "ReadSeeker": {
105
+ "status": "real"
106
+ },
107
+ "ReadWriteCloser": {
108
+ "status": "real"
109
+ },
110
+ "ReadWriter": {
111
+ "status": "real"
112
+ },
113
+ "ReadWriteSeeker": {
114
+ "status": "real"
115
+ },
116
+ "RuneReader": {
117
+ "status": "real"
118
+ },
119
+ "RuneScanner": {
120
+ "status": "real"
121
+ },
122
+ "SectionReader": {
123
+ "status": "real"
124
+ },
125
+ "SeekCurrent": {
126
+ "status": "real"
127
+ },
128
+ "SeekEnd": {
129
+ "status": "real"
130
+ },
131
+ "Seeker": {
132
+ "status": "real"
133
+ },
134
+ "SeekStart": {
135
+ "status": "real"
136
+ },
137
+ "StringWriter": {
138
+ "status": "real"
139
+ },
140
+ "TeeReader": {
141
+ "status": "real"
142
+ },
143
+ "WriteCloser": {
144
+ "status": "real"
145
+ },
146
+ "Writer": {
147
+ "status": "real"
148
+ },
149
+ "WriterAt": {
150
+ "status": "real"
151
+ },
152
+ "WriterTo": {
153
+ "status": "real"
154
+ },
155
+ "WriteSeeker": {
156
+ "status": "real"
157
+ },
158
+ "WriteString": {
159
+ "status": "real"
160
+ }
161
+ }
162
+ }
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, it } from 'vitest'
2
2
 
3
- import { Mul64 } from './index.js'
3
+ import { Mul64, Rem, Rem32, Rem64, RotateLeft16, RotateLeft32, RotateLeft64, RotateLeft8 } from './index.js'
4
4
 
5
5
  describe('math/bits override', () => {
6
6
  it('returns the full 128-bit product from Mul64', () => {
@@ -17,4 +17,17 @@ describe('math/bits override', () => {
17
17
  0xffc0000000000001n,
18
18
  ])
19
19
  })
20
+
21
+ it('returns remainders from double-word division helpers', () => {
22
+ expect(Rem32(1, 0, 3)).toBe(1)
23
+ expect(Rem(1n, 0n, 3n)).toBe(1n)
24
+ expect(Rem64(1n, 0n, 3n)).toBe(1n)
25
+ })
26
+
27
+ it('rotates right for negative counts', () => {
28
+ expect(RotateLeft8(1, -1)).toBe(0x80)
29
+ expect(RotateLeft16(1, -1)).toBe(0x8000)
30
+ expect(RotateLeft32(1, -1)).toBe(0x80000000)
31
+ expect(RotateLeft64(1n, -1)).toBe(0x8000000000000000n)
32
+ })
20
33
  })
@@ -22,6 +22,10 @@ function word64Result(value: bigint, useBigInt: boolean): Word64 {
22
22
  : Number(value)
23
23
  }
24
24
 
25
+ function rotateCount(k: number, n: number): number {
26
+ return ((k % n) + n) % n
27
+ }
28
+
25
29
  // --- Leading zeros ---
26
30
  export function LeadingZeros(x: Word64): number {
27
31
  return LeadingZeros64(x)
@@ -132,21 +136,21 @@ export function RotateLeft(x: Word64, k: number): Word64 {
132
136
 
133
137
  export function RotateLeft8(x: number, k: number): number {
134
138
  const n = 8
135
- k = k % n
139
+ k = rotateCount(k, n)
136
140
  x = x & 0xff
137
141
  return ((x << k) | (x >> (n - k))) & 0xff
138
142
  }
139
143
 
140
144
  export function RotateLeft16(x: number, k: number): number {
141
145
  const n = 16
142
- k = k % n
146
+ k = rotateCount(k, n)
143
147
  x = x & 0xffff
144
148
  return ((x << k) | (x >> (n - k))) & 0xffff
145
149
  }
146
150
 
147
151
  export function RotateLeft32(x: number, k: number): number {
148
152
  const n = 32
149
- k = k % n
153
+ k = rotateCount(k, n)
150
154
  x = x >>> 0 // Ensure unsigned
151
155
  return ((x << k) | (x >>> (n - k))) >>> 0
152
156
  }
@@ -156,7 +160,7 @@ export function RotateLeft64(x: bigint, k: number): bigint
156
160
  export function RotateLeft64(x: Word64, k: number): number
157
161
  export function RotateLeft64(x: Word64, k: number): Word64 {
158
162
  const n = 64
159
- k = k % n
163
+ k = rotateCount(k, n)
160
164
  const useBigInt = useBigIntResult(x)
161
165
  const word = toUint64(x)
162
166
  return word64Result(
@@ -371,6 +375,21 @@ export function Div64(hi: Word64, lo: Word64, y: Word64): [Word64, Word64] {
371
375
  return [word64Result(quotient, useBigInt), word64Result(remainder, useBigInt)]
372
376
  }
373
377
 
378
+ export function Rem(hi: Word64, lo: Word64, y: Word64): Word64 {
379
+ return Div(hi, lo, y)[1]
380
+ }
381
+
382
+ export function Rem32(hi: number, lo: number, y: number): number {
383
+ return Div32(hi, lo, y)[1]
384
+ }
385
+
386
+ export function Rem64(hi: number, lo: number, y: number): number
387
+ export function Rem64(hi: bigint, lo: bigint, y: bigint): bigint
388
+ export function Rem64(hi: Word64, lo: Word64, y: Word64): number
389
+ export function Rem64(hi: Word64, lo: Word64, y: Word64): Word64 {
390
+ return Div64(hi, lo, y)[1]
391
+ }
392
+
374
393
  // --- Add and Sub with carry ---
375
394
  export function Add(x: number, y: number, carry: number): [number, number]
376
395
  export function Add(x: bigint, y: bigint, carry: bigint): [bigint, bigint]
@@ -0,0 +1,156 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "strict": true,
4
+ "symbols": {
5
+ "Add": {
6
+ "status": "real"
7
+ },
8
+ "Add32": {
9
+ "status": "real"
10
+ },
11
+ "Add64": {
12
+ "status": "real"
13
+ },
14
+ "Div": {
15
+ "status": "real"
16
+ },
17
+ "Div32": {
18
+ "status": "real"
19
+ },
20
+ "Div64": {
21
+ "status": "real"
22
+ },
23
+ "LeadingZeros": {
24
+ "status": "real"
25
+ },
26
+ "LeadingZeros16": {
27
+ "status": "real"
28
+ },
29
+ "LeadingZeros32": {
30
+ "status": "real"
31
+ },
32
+ "LeadingZeros64": {
33
+ "status": "real"
34
+ },
35
+ "LeadingZeros8": {
36
+ "status": "real"
37
+ },
38
+ "Len": {
39
+ "status": "real"
40
+ },
41
+ "Len16": {
42
+ "status": "real"
43
+ },
44
+ "Len32": {
45
+ "status": "real"
46
+ },
47
+ "Len64": {
48
+ "status": "real"
49
+ },
50
+ "Len8": {
51
+ "status": "real"
52
+ },
53
+ "Mul": {
54
+ "status": "real"
55
+ },
56
+ "Mul32": {
57
+ "status": "real"
58
+ },
59
+ "Mul64": {
60
+ "status": "real"
61
+ },
62
+ "OnesCount": {
63
+ "status": "real"
64
+ },
65
+ "OnesCount16": {
66
+ "status": "real"
67
+ },
68
+ "OnesCount32": {
69
+ "status": "real"
70
+ },
71
+ "OnesCount64": {
72
+ "status": "real"
73
+ },
74
+ "OnesCount8": {
75
+ "status": "real"
76
+ },
77
+ "Rem": {
78
+ "status": "real"
79
+ },
80
+ "Rem32": {
81
+ "status": "real"
82
+ },
83
+ "Rem64": {
84
+ "status": "real"
85
+ },
86
+ "Reverse": {
87
+ "status": "real"
88
+ },
89
+ "Reverse16": {
90
+ "status": "real"
91
+ },
92
+ "Reverse32": {
93
+ "status": "real"
94
+ },
95
+ "Reverse64": {
96
+ "status": "real"
97
+ },
98
+ "Reverse8": {
99
+ "status": "real"
100
+ },
101
+ "ReverseBytes": {
102
+ "status": "real"
103
+ },
104
+ "ReverseBytes16": {
105
+ "status": "real"
106
+ },
107
+ "ReverseBytes32": {
108
+ "status": "real"
109
+ },
110
+ "ReverseBytes64": {
111
+ "status": "real"
112
+ },
113
+ "RotateLeft": {
114
+ "status": "real"
115
+ },
116
+ "RotateLeft16": {
117
+ "status": "real"
118
+ },
119
+ "RotateLeft32": {
120
+ "status": "real"
121
+ },
122
+ "RotateLeft64": {
123
+ "status": "real"
124
+ },
125
+ "RotateLeft8": {
126
+ "status": "real"
127
+ },
128
+ "Sub": {
129
+ "status": "real"
130
+ },
131
+ "Sub32": {
132
+ "status": "real"
133
+ },
134
+ "Sub64": {
135
+ "status": "real"
136
+ },
137
+ "TrailingZeros": {
138
+ "status": "real"
139
+ },
140
+ "TrailingZeros16": {
141
+ "status": "real"
142
+ },
143
+ "TrailingZeros32": {
144
+ "status": "real"
145
+ },
146
+ "TrailingZeros64": {
147
+ "status": "real"
148
+ },
149
+ "TrailingZeros8": {
150
+ "status": "real"
151
+ },
152
+ "UintSize": {
153
+ "status": "real"
154
+ }
155
+ }
156
+ }