goscript 0.1.0 → 0.1.2

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 (495) hide show
  1. package/README.md +267 -255
  2. package/cmd/goscript/cmd-test.go +286 -0
  3. package/cmd/goscript/cmd-test_test.go +76 -0
  4. package/cmd/goscript/cmd_compile.go +9 -0
  5. package/cmd/goscript/main.go +1 -0
  6. package/compiler/build-flags.go +38 -0
  7. package/compiler/compile-request.go +33 -0
  8. package/compiler/compiler.go +1 -1
  9. package/compiler/compliance_test.go +0 -10
  10. package/compiler/config.go +2 -0
  11. package/compiler/gotest/owner.go +24 -0
  12. package/compiler/gotest/package-result.go +69 -0
  13. package/compiler/gotest/request.go +210 -0
  14. package/compiler/gotest/result.go +28 -0
  15. package/compiler/gotest/runner.go +1225 -0
  16. package/compiler/gotest/runner_test.go +1271 -0
  17. package/compiler/gotest/test.go +9 -0
  18. package/compiler/index.test.ts +1 -1
  19. package/compiler/lowered-program.go +80 -21
  20. package/compiler/lowering.go +6754 -602
  21. package/compiler/override-facts.go +357 -0
  22. package/compiler/override-registry.go +52 -190
  23. package/compiler/override-registry_test.go +182 -0
  24. package/compiler/package-graph.go +50 -27
  25. package/compiler/package-graph_test.go +99 -9
  26. package/compiler/package-test-function.go +9 -0
  27. package/compiler/package-test-graph-package.go +40 -0
  28. package/compiler/package-test-graph-variant.go +129 -0
  29. package/compiler/package-test-graph.go +112 -0
  30. package/compiler/package-test-graph_test.go +202 -0
  31. package/compiler/runtime-contract.go +229 -29
  32. package/compiler/runtime-contract_test.go +44 -30
  33. package/compiler/semantic-model-types.go +25 -6
  34. package/compiler/semantic-model.go +819 -74
  35. package/compiler/semantic-model_test.go +104 -0
  36. package/compiler/service.go +10 -4
  37. package/compiler/skeleton_test.go +2777 -524
  38. package/compiler/tsworkspace/owner-process-unix_test.go +72 -0
  39. package/compiler/tsworkspace/owner.go +342 -0
  40. package/compiler/tsworkspace/owner_test.go +93 -0
  41. package/compiler/tsworkspace/result.go +17 -0
  42. package/compiler/tsworkspace/tool-process-other.go +14 -0
  43. package/compiler/tsworkspace/tool-process-unix.go +19 -0
  44. package/compiler/typescript-emitter.go +576 -86
  45. package/compiler/wasm/compile.go +1 -1
  46. package/compiler/wasm/compile_test.go +61 -11
  47. package/compiler/wasm_api.go +172 -7
  48. package/dist/gs/builtin/builtin.d.ts +40 -3
  49. package/dist/gs/builtin/builtin.js +430 -22
  50. package/dist/gs/builtin/builtin.js.map +1 -1
  51. package/dist/gs/builtin/channel.d.ts +32 -10
  52. package/dist/gs/builtin/channel.js +119 -25
  53. package/dist/gs/builtin/channel.js.map +1 -1
  54. package/dist/gs/builtin/defer.d.ts +1 -0
  55. package/dist/gs/builtin/defer.js +12 -2
  56. package/dist/gs/builtin/defer.js.map +1 -1
  57. package/dist/gs/builtin/hostio.d.ts +9 -0
  58. package/dist/gs/builtin/hostio.js +25 -0
  59. package/dist/gs/builtin/hostio.js.map +1 -1
  60. package/dist/gs/builtin/map.js +40 -6
  61. package/dist/gs/builtin/map.js.map +1 -1
  62. package/dist/gs/builtin/print.js.map +1 -1
  63. package/dist/gs/builtin/slice.d.ts +64 -10
  64. package/dist/gs/builtin/slice.js +619 -244
  65. package/dist/gs/builtin/slice.js.map +1 -1
  66. package/dist/gs/builtin/type.d.ts +7 -2
  67. package/dist/gs/builtin/type.js +128 -29
  68. package/dist/gs/builtin/type.js.map +1 -1
  69. package/dist/gs/builtin/varRef.d.ts +7 -0
  70. package/dist/gs/builtin/varRef.js +23 -0
  71. package/dist/gs/builtin/varRef.js.map +1 -1
  72. package/dist/gs/bytes/buffer.gs.js +74 -70
  73. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  74. package/dist/gs/bytes/iter.gs.js +13 -13
  75. package/dist/gs/bytes/iter.gs.js.map +1 -1
  76. package/dist/gs/bytes/reader.gs.js +20 -18
  77. package/dist/gs/bytes/reader.gs.js.map +1 -1
  78. package/dist/gs/compress/zlib/index.d.ts +26 -0
  79. package/dist/gs/compress/zlib/index.js +168 -0
  80. package/dist/gs/compress/zlib/index.js.map +1 -0
  81. package/dist/gs/context/context.d.ts +6 -5
  82. package/dist/gs/context/context.js +17 -12
  83. package/dist/gs/context/context.js.map +1 -1
  84. package/dist/gs/crypto/ecdh/index.d.ts +52 -0
  85. package/dist/gs/crypto/ecdh/index.js +226 -0
  86. package/dist/gs/crypto/ecdh/index.js.map +1 -0
  87. package/dist/gs/crypto/ed25519/index.d.ts +34 -0
  88. package/dist/gs/crypto/ed25519/index.js +160 -0
  89. package/dist/gs/crypto/ed25519/index.js.map +1 -0
  90. package/dist/gs/crypto/internal/constanttime/index.d.ts +4 -0
  91. package/dist/gs/crypto/internal/constanttime/index.js +18 -0
  92. package/dist/gs/crypto/internal/constanttime/index.js.map +1 -0
  93. package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
  94. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
  95. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
  96. package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
  97. package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
  98. package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
  99. package/dist/gs/crypto/rand/index.d.ts +2 -0
  100. package/dist/gs/crypto/rand/index.js +85 -0
  101. package/dist/gs/crypto/rand/index.js.map +1 -1
  102. package/dist/gs/crypto/sha256/index.d.ts +8 -0
  103. package/dist/gs/crypto/sha256/index.js +118 -0
  104. package/dist/gs/crypto/sha256/index.js.map +1 -0
  105. package/dist/gs/crypto/sha512/index.d.ts +14 -0
  106. package/dist/gs/crypto/sha512/index.js +129 -0
  107. package/dist/gs/crypto/sha512/index.js.map +1 -0
  108. package/dist/gs/embed/index.d.ts +7 -0
  109. package/dist/gs/embed/index.js +16 -0
  110. package/dist/gs/embed/index.js.map +1 -0
  111. package/dist/gs/encoding/json/index.d.ts +4 -0
  112. package/dist/gs/encoding/json/index.js +33 -0
  113. package/dist/gs/encoding/json/index.js.map +1 -1
  114. package/dist/gs/errors/errors.d.ts +4 -0
  115. package/dist/gs/errors/errors.js +108 -4
  116. package/dist/gs/errors/errors.js.map +1 -1
  117. package/dist/gs/fmt/fmt.d.ts +4 -4
  118. package/dist/gs/fmt/fmt.js +42 -11
  119. package/dist/gs/fmt/fmt.js.map +1 -1
  120. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +37 -2
  121. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +245 -1
  122. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  123. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +189 -0
  124. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +861 -0
  125. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
  126. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +217 -0
  127. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +814 -0
  128. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
  129. package/dist/gs/github.com/aperturerobotics/util/conc/index.d.ts +20 -0
  130. package/dist/gs/github.com/aperturerobotics/util/conc/index.js +134 -0
  131. package/dist/gs/github.com/aperturerobotics/util/conc/index.js.map +1 -0
  132. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  133. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.d.ts +3 -0
  134. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js +50 -0
  135. package/dist/gs/github.com/hack-pad/safejs/internal/catch/index.js.map +1 -0
  136. package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
  137. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +72 -0
  138. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
  139. package/dist/gs/github.com/mr-tron/base58/base58/index.d.ts +27 -0
  140. package/dist/gs/github.com/mr-tron/base58/base58/index.js +172 -0
  141. package/dist/gs/github.com/mr-tron/base58/base58/index.js.map +1 -0
  142. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.d.ts +21 -0
  143. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js +22 -0
  144. package/dist/gs/github.com/zeebo/blake3/internal/consts/index.js.map +1 -0
  145. package/dist/gs/go/internal/scannerhooks/index.d.ts +3 -0
  146. package/dist/gs/go/internal/scannerhooks/index.js +5 -0
  147. package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
  148. package/dist/gs/go/scanner/index.d.ts +13 -0
  149. package/dist/gs/go/scanner/index.js +35 -0
  150. package/dist/gs/go/scanner/index.js.map +1 -1
  151. package/dist/gs/go/token/index.d.ts +156 -0
  152. package/dist/gs/go/token/index.js +507 -4
  153. package/dist/gs/go/token/index.js.map +1 -1
  154. package/dist/gs/hash/fnv/index.d.ts +57 -0
  155. package/dist/gs/hash/fnv/index.js +299 -0
  156. package/dist/gs/hash/fnv/index.js.map +1 -0
  157. package/dist/gs/hash/index.d.ts +17 -0
  158. package/dist/gs/hash/index.js +94 -0
  159. package/dist/gs/hash/index.js.map +1 -0
  160. package/dist/gs/internal/abi/index.d.ts +4 -0
  161. package/dist/gs/internal/abi/index.js +10 -0
  162. package/dist/gs/internal/abi/index.js.map +1 -1
  163. package/dist/gs/internal/bytealg/index.d.ts +2 -0
  164. package/dist/gs/internal/bytealg/index.js +14 -0
  165. package/dist/gs/internal/bytealg/index.js.map +1 -1
  166. package/dist/gs/internal/byteorder/index.d.ts +8 -2
  167. package/dist/gs/internal/byteorder/index.js +56 -25
  168. package/dist/gs/internal/byteorder/index.js.map +1 -1
  169. package/dist/gs/internal/godebug/index.d.ts +12 -0
  170. package/dist/gs/internal/godebug/index.js +30 -0
  171. package/dist/gs/internal/godebug/index.js.map +1 -0
  172. package/dist/gs/io/fs/index.d.ts +1 -0
  173. package/dist/gs/io/fs/index.js +1 -0
  174. package/dist/gs/io/fs/index.js.map +1 -1
  175. package/dist/gs/io/fs/readlink.d.ts +8 -0
  176. package/dist/gs/io/fs/readlink.js +60 -0
  177. package/dist/gs/io/fs/readlink.js.map +1 -0
  178. package/dist/gs/io/fs/walk.d.ts +3 -3
  179. package/dist/gs/io/fs/walk.js +7 -7
  180. package/dist/gs/io/fs/walk.js.map +1 -1
  181. package/dist/gs/io/io.d.ts +40 -6
  182. package/dist/gs/io/io.js +151 -26
  183. package/dist/gs/io/io.js.map +1 -1
  184. package/dist/gs/iter/iter.d.ts +3 -2
  185. package/dist/gs/iter/iter.js.map +1 -1
  186. package/dist/gs/maps/iter.d.ts +5 -5
  187. package/dist/gs/maps/iter.js +48 -21
  188. package/dist/gs/maps/iter.js.map +1 -1
  189. package/dist/gs/maps/maps.d.ts +6 -6
  190. package/dist/gs/maps/maps.js +1 -1
  191. package/dist/gs/maps/maps.js.map +1 -1
  192. package/dist/gs/math/bits/index.d.ts +13 -4
  193. package/dist/gs/math/bits/index.js +70 -48
  194. package/dist/gs/math/bits/index.js.map +1 -1
  195. package/dist/gs/math/const.gs.d.ts +5 -5
  196. package/dist/gs/math/const.gs.js +4 -4
  197. package/dist/gs/math/const.gs.js.map +1 -1
  198. package/dist/gs/mime/index.d.ts +1 -0
  199. package/dist/gs/mime/index.js +52 -0
  200. package/dist/gs/mime/index.js.map +1 -0
  201. package/dist/gs/net/http/httptest/index.d.ts +30 -0
  202. package/dist/gs/net/http/httptest/index.js +101 -0
  203. package/dist/gs/net/http/httptest/index.js.map +1 -0
  204. package/dist/gs/net/http/index.d.ts +131 -0
  205. package/dist/gs/net/http/index.js +307 -0
  206. package/dist/gs/net/http/index.js.map +1 -0
  207. package/dist/gs/net/http/pprof/index.d.ts +8 -0
  208. package/dist/gs/net/http/pprof/index.js +59 -0
  209. package/dist/gs/net/http/pprof/index.js.map +1 -0
  210. package/dist/gs/os/dir_unix.gs.js +2 -2
  211. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  212. package/dist/gs/os/error.gs.js +9 -7
  213. package/dist/gs/os/error.gs.js.map +1 -1
  214. package/dist/gs/os/types_js.gs.js +95 -15
  215. package/dist/gs/os/types_js.gs.js.map +1 -1
  216. package/dist/gs/path/filepath/match.js +165 -3
  217. package/dist/gs/path/filepath/match.js.map +1 -1
  218. package/dist/gs/path/filepath/path.d.ts +8 -4
  219. package/dist/gs/path/filepath/path.js +192 -8
  220. package/dist/gs/path/filepath/path.js.map +1 -1
  221. package/dist/gs/path/path.d.ts +4 -1
  222. package/dist/gs/path/path.js +16 -4
  223. package/dist/gs/path/path.js.map +1 -1
  224. package/dist/gs/reflect/index.d.ts +4 -3
  225. package/dist/gs/reflect/index.js +3 -2
  226. package/dist/gs/reflect/index.js.map +1 -1
  227. package/dist/gs/reflect/iter.js +2 -2
  228. package/dist/gs/reflect/iter.js.map +1 -1
  229. package/dist/gs/reflect/map.js +29 -0
  230. package/dist/gs/reflect/map.js.map +1 -1
  231. package/dist/gs/reflect/type.d.ts +31 -9
  232. package/dist/gs/reflect/type.js +536 -43
  233. package/dist/gs/reflect/type.js.map +1 -1
  234. package/dist/gs/reflect/types.d.ts +1 -0
  235. package/dist/gs/reflect/types.js +3 -1
  236. package/dist/gs/reflect/types.js.map +1 -1
  237. package/dist/gs/reflect/value.d.ts +4 -1
  238. package/dist/gs/reflect/value.js +39 -1
  239. package/dist/gs/reflect/value.js.map +1 -1
  240. package/dist/gs/reflect/visiblefields.js +1 -1
  241. package/dist/gs/reflect/visiblefields.js.map +1 -1
  242. package/dist/gs/runtime/debug/index.d.ts +41 -0
  243. package/dist/gs/runtime/debug/index.js +66 -0
  244. package/dist/gs/runtime/debug/index.js.map +1 -0
  245. package/dist/gs/runtime/pprof/index.d.ts +20 -0
  246. package/dist/gs/runtime/pprof/index.js +85 -0
  247. package/dist/gs/runtime/pprof/index.js.map +1 -0
  248. package/dist/gs/runtime/runtime.d.ts +35 -3
  249. package/dist/gs/runtime/runtime.js +72 -0
  250. package/dist/gs/runtime/runtime.js.map +1 -1
  251. package/dist/gs/runtime/trace/index.d.ts +19 -0
  252. package/dist/gs/runtime/trace/index.js +64 -0
  253. package/dist/gs/runtime/trace/index.js.map +1 -0
  254. package/dist/gs/slices/slices.d.ts +42 -8
  255. package/dist/gs/slices/slices.js +425 -11
  256. package/dist/gs/slices/slices.js.map +1 -1
  257. package/dist/gs/sort/slice.gs.d.ts +5 -3
  258. package/dist/gs/sort/slice.gs.js +60 -22
  259. package/dist/gs/sort/slice.gs.js.map +1 -1
  260. package/dist/gs/sort/sort.gs.d.ts +4 -4
  261. package/dist/gs/sort/sort.gs.js +11 -8
  262. package/dist/gs/sort/sort.gs.js.map +1 -1
  263. package/dist/gs/strings/builder.d.ts +1 -1
  264. package/dist/gs/strings/builder.js +29 -19
  265. package/dist/gs/strings/builder.js.map +1 -1
  266. package/dist/gs/strings/iter.js +140 -75
  267. package/dist/gs/strings/iter.js.map +1 -1
  268. package/dist/gs/strings/replace.js +2 -2
  269. package/dist/gs/strings/replace.js.map +1 -1
  270. package/dist/gs/strings/strings.js +52 -6
  271. package/dist/gs/strings/strings.js.map +1 -1
  272. package/dist/gs/sync/atomic/type.gs.d.ts +9 -8
  273. package/dist/gs/sync/atomic/type.gs.js +0 -2
  274. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  275. package/dist/gs/sync/sync.d.ts +8 -3
  276. package/dist/gs/sync/sync.js +66 -11
  277. package/dist/gs/sync/sync.js.map +1 -1
  278. package/dist/gs/syscall/constants.d.ts +36 -24
  279. package/dist/gs/syscall/constants.js +12 -0
  280. package/dist/gs/syscall/constants.js.map +1 -1
  281. package/dist/gs/syscall/errors.d.ts +117 -111
  282. package/dist/gs/syscall/errors.js +45 -0
  283. package/dist/gs/syscall/errors.js.map +1 -1
  284. package/dist/gs/syscall/fs.d.ts +37 -0
  285. package/dist/gs/syscall/fs.js +102 -0
  286. package/dist/gs/syscall/fs.js.map +1 -1
  287. package/dist/gs/syscall/js/index.d.ts +90 -0
  288. package/dist/gs/syscall/js/index.js +383 -0
  289. package/dist/gs/syscall/js/index.js.map +1 -0
  290. package/dist/gs/syscall/types.d.ts +26 -1
  291. package/dist/gs/syscall/types.js +45 -1
  292. package/dist/gs/syscall/types.js.map +1 -1
  293. package/dist/gs/testing/index.d.ts +1 -0
  294. package/dist/gs/testing/index.js +2 -0
  295. package/dist/gs/testing/index.js.map +1 -0
  296. package/dist/gs/testing/testing.d.ts +78 -0
  297. package/dist/gs/testing/testing.js +318 -0
  298. package/dist/gs/testing/testing.js.map +1 -0
  299. package/dist/gs/time/time.d.ts +41 -4
  300. package/dist/gs/time/time.js +227 -36
  301. package/dist/gs/time/time.js.map +1 -1
  302. package/dist/gs/unicode/unicode.d.ts +23 -1
  303. package/dist/gs/unicode/unicode.js +79 -10
  304. package/dist/gs/unicode/unicode.js.map +1 -1
  305. package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
  306. package/dist/gs/unicode/utf8/utf8.js +24 -11
  307. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  308. package/dist/gs/unique/index.d.ts +11 -0
  309. package/dist/gs/unique/index.js +76 -0
  310. package/dist/gs/unique/index.js.map +1 -0
  311. package/go.mod +8 -8
  312. package/go.sum +14 -14
  313. package/gs/builtin/builtin.ts +585 -27
  314. package/gs/builtin/channel.ts +183 -29
  315. package/gs/builtin/defer.ts +13 -2
  316. package/gs/builtin/hostio.test.ts +1 -0
  317. package/gs/builtin/hostio.ts +38 -0
  318. package/gs/builtin/map.ts +46 -6
  319. package/gs/builtin/print.ts +12 -3
  320. package/gs/builtin/runtime-contract.test.ts +383 -10
  321. package/gs/builtin/slice.test.ts +70 -0
  322. package/gs/builtin/slice.ts +785 -265
  323. package/gs/builtin/type.ts +160 -41
  324. package/gs/builtin/varRef.ts +40 -1
  325. package/gs/bytes/buffer.gs.ts +74 -70
  326. package/gs/bytes/iter.gs.ts +13 -14
  327. package/gs/bytes/meta.json +8 -3
  328. package/gs/bytes/reader.gs.ts +20 -19
  329. package/gs/compress/zlib/index.test.ts +28 -0
  330. package/gs/compress/zlib/index.ts +200 -0
  331. package/gs/compress/zlib/meta.json +3 -0
  332. package/gs/context/context.test.ts +71 -0
  333. package/gs/context/context.ts +30 -29
  334. package/gs/crypto/ecdh/index.test.ts +43 -0
  335. package/gs/crypto/ecdh/index.ts +274 -0
  336. package/gs/crypto/ed25519/index.test.ts +41 -0
  337. package/gs/crypto/ed25519/index.ts +238 -0
  338. package/gs/crypto/ed25519/meta.json +13 -0
  339. package/gs/crypto/internal/constanttime/index.test.ts +25 -0
  340. package/gs/crypto/internal/constanttime/index.ts +22 -0
  341. package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
  342. package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
  343. package/gs/crypto/rand/index.test.ts +89 -1
  344. package/gs/crypto/rand/index.ts +103 -1
  345. package/gs/crypto/rand/meta.json +4 -1
  346. package/gs/crypto/sha256/index.test.ts +78 -0
  347. package/gs/crypto/sha256/index.ts +150 -0
  348. package/gs/crypto/sha256/meta.json +9 -0
  349. package/gs/crypto/sha512/index.test.ts +31 -0
  350. package/gs/crypto/sha512/index.ts +161 -0
  351. package/gs/crypto/sha512/meta.json +11 -0
  352. package/gs/embed/index.ts +20 -0
  353. package/gs/embed/meta.json +5 -0
  354. package/gs/encoding/json/index.test.ts +39 -3
  355. package/gs/encoding/json/index.ts +45 -3
  356. package/gs/errors/errors.test.ts +85 -0
  357. package/gs/errors/errors.ts +132 -4
  358. package/gs/fmt/fmt.test.ts +3 -1
  359. package/gs/fmt/fmt.ts +55 -19
  360. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +128 -1
  361. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +342 -4
  362. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +180 -0
  363. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1084 -0
  364. package/gs/github.com/aperturerobotics/starpc/srpc/index.test.ts +31 -0
  365. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +1233 -0
  366. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +46 -0
  367. package/gs/github.com/aperturerobotics/util/conc/index.test.ts +30 -0
  368. package/gs/github.com/aperturerobotics/util/conc/index.ts +172 -0
  369. package/gs/github.com/aperturerobotics/util/conc/meta.json +9 -0
  370. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.ts +1 -4
  371. package/gs/github.com/hack-pad/safejs/internal/catch/index.test.ts +35 -0
  372. package/gs/github.com/hack-pad/safejs/internal/catch/index.ts +65 -0
  373. package/gs/github.com/hack-pad/safejs/internal/catch/meta.json +9 -0
  374. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +37 -0
  375. package/gs/github.com/klauspost/compress/internal/le/index.ts +115 -0
  376. package/gs/github.com/mr-tron/base58/base58/index.test.ts +70 -0
  377. package/gs/github.com/mr-tron/base58/base58/index.ts +231 -0
  378. package/gs/github.com/mr-tron/base58/base58/meta.json +3 -0
  379. package/gs/github.com/zeebo/blake3/internal/consts/index.test.ts +46 -0
  380. package/gs/github.com/zeebo/blake3/internal/consts/index.ts +26 -0
  381. package/gs/go/internal/scannerhooks/index.test.ts +14 -0
  382. package/gs/go/internal/scannerhooks/index.ts +9 -0
  383. package/gs/go/scanner/index.test.ts +22 -0
  384. package/gs/go/scanner/index.ts +47 -0
  385. package/gs/go/token/index.test.ts +47 -1
  386. package/gs/go/token/index.ts +583 -4
  387. package/gs/hash/fnv/index.test.ts +67 -0
  388. package/gs/hash/fnv/index.ts +351 -0
  389. package/gs/hash/fnv/meta.json +3 -0
  390. package/gs/hash/index.test.ts +37 -0
  391. package/gs/hash/index.ts +118 -0
  392. package/gs/hash/meta.json +5 -0
  393. package/gs/internal/abi/index.test.ts +18 -0
  394. package/gs/internal/abi/index.ts +14 -0
  395. package/gs/internal/bytealg/index.test.ts +18 -0
  396. package/gs/internal/bytealg/index.ts +16 -0
  397. package/gs/internal/byteorder/index.test.ts +39 -0
  398. package/gs/internal/byteorder/index.ts +100 -27
  399. package/gs/internal/godebug/index.test.ts +16 -0
  400. package/gs/internal/godebug/index.ts +35 -0
  401. package/gs/io/fs/index.ts +1 -0
  402. package/gs/io/fs/meta.json +5 -0
  403. package/gs/io/fs/readlink.test.ts +43 -0
  404. package/gs/io/fs/readlink.ts +69 -0
  405. package/gs/io/fs/walk.test.ts +61 -0
  406. package/gs/io/fs/walk.ts +17 -9
  407. package/gs/io/io.ts +177 -31
  408. package/gs/io/meta.json +10 -2
  409. package/gs/iter/iter.ts +8 -2
  410. package/gs/maps/iter.ts +75 -26
  411. package/gs/maps/maps.test.ts +23 -0
  412. package/gs/maps/maps.ts +13 -11
  413. package/gs/math/bits/index.test.ts +20 -0
  414. package/gs/math/bits/index.ts +107 -64
  415. package/gs/math/const.gs.test.ts +11 -5
  416. package/gs/math/const.gs.ts +5 -6
  417. package/gs/mime/index.ts +60 -0
  418. package/gs/net/http/httptest/index.test.ts +53 -0
  419. package/gs/net/http/httptest/index.ts +120 -0
  420. package/gs/net/http/index.test.ts +148 -0
  421. package/gs/net/http/index.ts +432 -0
  422. package/gs/net/http/meta.json +6 -0
  423. package/gs/net/http/pprof/index.test.ts +47 -0
  424. package/gs/net/http/pprof/index.ts +65 -0
  425. package/gs/os/dir_unix.gs.ts +2 -3
  426. package/gs/os/error.gs.ts +9 -10
  427. package/gs/os/error.test.ts +41 -0
  428. package/gs/os/file_unix_js.test.ts +55 -0
  429. package/gs/os/tempfile.gs.test.ts +37 -10
  430. package/gs/os/types_js.gs.ts +96 -17
  431. package/gs/path/filepath/match.test.ts +31 -12
  432. package/gs/path/filepath/match.ts +181 -3
  433. package/gs/path/filepath/meta.json +6 -0
  434. package/gs/path/filepath/path.test.ts +80 -0
  435. package/gs/path/filepath/path.ts +244 -11
  436. package/gs/path/path.ts +20 -5
  437. package/gs/reflect/field.test.ts +63 -0
  438. package/gs/reflect/index.ts +5 -1
  439. package/gs/reflect/iter.ts +2 -2
  440. package/gs/reflect/map.test.ts +42 -1
  441. package/gs/reflect/map.ts +39 -0
  442. package/gs/reflect/type.ts +728 -65
  443. package/gs/reflect/typefor.test.ts +100 -0
  444. package/gs/reflect/types.ts +3 -1
  445. package/gs/reflect/value.ts +50 -1
  446. package/gs/reflect/visiblefields.ts +1 -1
  447. package/gs/runtime/debug/index.test.ts +45 -0
  448. package/gs/runtime/debug/index.ts +96 -0
  449. package/gs/runtime/pprof/index.test.ts +36 -0
  450. package/gs/runtime/pprof/index.ts +104 -0
  451. package/gs/runtime/pprof/meta.json +6 -0
  452. package/gs/runtime/runtime.test.ts +19 -0
  453. package/gs/runtime/runtime.ts +98 -3
  454. package/gs/runtime/trace/index.test.ts +45 -0
  455. package/gs/runtime/trace/index.ts +97 -0
  456. package/gs/runtime/trace/meta.json +7 -0
  457. package/gs/slices/meta.json +2 -1
  458. package/gs/slices/slices.test.ts +180 -0
  459. package/gs/slices/slices.ts +502 -15
  460. package/gs/sort/meta.json +7 -0
  461. package/gs/sort/slice.gs.ts +85 -26
  462. package/gs/sort/slice.test.ts +40 -0
  463. package/gs/sort/sort.gs.ts +16 -13
  464. package/gs/strings/builder.test.ts +8 -0
  465. package/gs/strings/builder.ts +33 -20
  466. package/gs/strings/iter.test.ts +5 -7
  467. package/gs/strings/iter.ts +146 -71
  468. package/gs/strings/replace.test.ts +1 -4
  469. package/gs/strings/replace.ts +6 -6
  470. package/gs/strings/strings.test.ts +4 -0
  471. package/gs/strings/strings.ts +54 -6
  472. package/gs/sync/atomic/type.gs.ts +13 -14
  473. package/gs/sync/meta.json +3 -1
  474. package/gs/sync/sync.test.ts +69 -1
  475. package/gs/sync/sync.ts +72 -13
  476. package/gs/syscall/constants.ts +39 -24
  477. package/gs/syscall/errors.ts +165 -112
  478. package/gs/syscall/fs.ts +195 -0
  479. package/gs/syscall/js/index.ts +485 -0
  480. package/gs/syscall/js/meta.json +4 -0
  481. package/gs/syscall/net.test.ts +111 -0
  482. package/gs/syscall/types.ts +63 -2
  483. package/gs/testing/index.ts +1 -0
  484. package/gs/testing/meta.json +5 -0
  485. package/gs/testing/testing.test.ts +146 -0
  486. package/gs/testing/testing.ts +399 -0
  487. package/gs/time/meta.json +2 -2
  488. package/gs/time/time.test.ts +110 -0
  489. package/gs/time/time.ts +309 -57
  490. package/gs/unicode/unicode.test.ts +36 -0
  491. package/gs/unicode/unicode.ts +115 -9
  492. package/gs/unicode/utf8/utf8.test.ts +13 -0
  493. package/gs/unicode/utf8/utf8.ts +28 -16
  494. package/gs/unique/index.ts +98 -0
  495. package/package.json +3 -2
@@ -1,9 +1,199 @@
1
1
  import * as $ from '@goscript/builtin/index.js'
2
2
 
3
+ export type Token = number
3
4
  export type Pos = number
4
5
 
6
+ export const ILLEGAL: Token = 0
7
+ export const EOF: Token = 1
8
+ export const COMMENT: Token = 2
9
+ const literal_beg: Token = 3
10
+ export const IDENT: Token = 4
11
+ export const INT: Token = 5
12
+ export const FLOAT: Token = 6
13
+ export const IMAG: Token = 7
14
+ export const CHAR: Token = 8
15
+ export const STRING: Token = 9
16
+ const literal_end: Token = 10
17
+ const operator_beg: Token = 11
18
+ export const ADD: Token = 12
19
+ export const SUB: Token = 13
20
+ export const MUL: Token = 14
21
+ export const QUO: Token = 15
22
+ export const REM: Token = 16
23
+ export const AND: Token = 17
24
+ export const OR: Token = 18
25
+ export const XOR: Token = 19
26
+ export const SHL: Token = 20
27
+ export const SHR: Token = 21
28
+ export const AND_NOT: Token = 22
29
+ export const ADD_ASSIGN: Token = 23
30
+ export const SUB_ASSIGN: Token = 24
31
+ export const MUL_ASSIGN: Token = 25
32
+ export const QUO_ASSIGN: Token = 26
33
+ export const REM_ASSIGN: Token = 27
34
+ export const AND_ASSIGN: Token = 28
35
+ export const OR_ASSIGN: Token = 29
36
+ export const XOR_ASSIGN: Token = 30
37
+ export const SHL_ASSIGN: Token = 31
38
+ export const SHR_ASSIGN: Token = 32
39
+ export const AND_NOT_ASSIGN: Token = 33
40
+ export const LAND: Token = 34
41
+ export const LOR: Token = 35
42
+ export const ARROW: Token = 36
43
+ export const INC: Token = 37
44
+ export const DEC: Token = 38
45
+ export const EQL: Token = 39
46
+ export const LSS: Token = 40
47
+ export const GTR: Token = 41
48
+ export const ASSIGN: Token = 42
49
+ export const NOT: Token = 43
50
+ export const NEQ: Token = 44
51
+ export const LEQ: Token = 45
52
+ export const GEQ: Token = 46
53
+ export const DEFINE: Token = 47
54
+ export const ELLIPSIS: Token = 48
55
+ export const LPAREN: Token = 49
56
+ export const LBRACK: Token = 50
57
+ export const LBRACE: Token = 51
58
+ export const COMMA: Token = 52
59
+ export const PERIOD: Token = 53
60
+ export const RPAREN: Token = 54
61
+ export const RBRACK: Token = 55
62
+ export const RBRACE: Token = 56
63
+ export const SEMICOLON: Token = 57
64
+ export const COLON: Token = 58
65
+ const operator_end: Token = 59
66
+ const keyword_beg: Token = 60
67
+ export const BREAK: Token = 61
68
+ export const CASE: Token = 62
69
+ export const CHAN: Token = 63
70
+ export const CONST: Token = 64
71
+ export const CONTINUE: Token = 65
72
+ export const DEFAULT: Token = 66
73
+ export const DEFER: Token = 67
74
+ export const ELSE: Token = 68
75
+ export const FALLTHROUGH: Token = 69
76
+ export const FOR: Token = 70
77
+ export const FUNC: Token = 71
78
+ export const GO: Token = 72
79
+ export const GOTO: Token = 73
80
+ export const IF: Token = 74
81
+ export const IMPORT: Token = 75
82
+ export const INTERFACE: Token = 76
83
+ export const MAP: Token = 77
84
+ export const PACKAGE: Token = 78
85
+ export const RANGE: Token = 79
86
+ export const RETURN: Token = 80
87
+ export const SELECT: Token = 81
88
+ export const STRUCT: Token = 82
89
+ export const SWITCH: Token = 83
90
+ export const TYPE: Token = 84
91
+ export const VAR: Token = 85
92
+ const keyword_end: Token = 86
93
+ export const TILDE: Token = 88
94
+
95
+ export const LowestPrec = 0
96
+ export const UnaryPrec = 6
97
+ export const HighestPrec = 7
5
98
  export const NoPos: Pos = 0
6
99
 
100
+ const tokenStrings = new Map<Token, string>([
101
+ [ILLEGAL, 'ILLEGAL'],
102
+ [EOF, 'EOF'],
103
+ [COMMENT, 'COMMENT'],
104
+ [IDENT, 'IDENT'],
105
+ [INT, 'INT'],
106
+ [FLOAT, 'FLOAT'],
107
+ [IMAG, 'IMAG'],
108
+ [CHAR, 'CHAR'],
109
+ [STRING, 'STRING'],
110
+ [ADD, '+'],
111
+ [SUB, '-'],
112
+ [MUL, '*'],
113
+ [QUO, '/'],
114
+ [REM, '%'],
115
+ [AND, '&'],
116
+ [OR, '|'],
117
+ [XOR, '^'],
118
+ [SHL, '<<'],
119
+ [SHR, '>>'],
120
+ [AND_NOT, '&^'],
121
+ [ADD_ASSIGN, '+='],
122
+ [SUB_ASSIGN, '-='],
123
+ [MUL_ASSIGN, '*='],
124
+ [QUO_ASSIGN, '/='],
125
+ [REM_ASSIGN, '%='],
126
+ [AND_ASSIGN, '&='],
127
+ [OR_ASSIGN, '|='],
128
+ [XOR_ASSIGN, '^='],
129
+ [SHL_ASSIGN, '<<='],
130
+ [SHR_ASSIGN, '>>='],
131
+ [AND_NOT_ASSIGN, '&^='],
132
+ [LAND, '&&'],
133
+ [LOR, '||'],
134
+ [ARROW, '<-'],
135
+ [INC, '++'],
136
+ [DEC, '--'],
137
+ [EQL, '=='],
138
+ [LSS, '<'],
139
+ [GTR, '>'],
140
+ [ASSIGN, '='],
141
+ [NOT, '!'],
142
+ [NEQ, '!='],
143
+ [LEQ, '<='],
144
+ [GEQ, '>='],
145
+ [DEFINE, ':='],
146
+ [ELLIPSIS, '...'],
147
+ [LPAREN, '('],
148
+ [LBRACK, '['],
149
+ [LBRACE, '{'],
150
+ [COMMA, ','],
151
+ [PERIOD, '.'],
152
+ [RPAREN, ')'],
153
+ [RBRACK, ']'],
154
+ [RBRACE, '}'],
155
+ [SEMICOLON, ';'],
156
+ [COLON, ':'],
157
+ [BREAK, 'break'],
158
+ [CASE, 'case'],
159
+ [CHAN, 'chan'],
160
+ [CONST, 'const'],
161
+ [CONTINUE, 'continue'],
162
+ [DEFAULT, 'default'],
163
+ [DEFER, 'defer'],
164
+ [ELSE, 'else'],
165
+ [FALLTHROUGH, 'fallthrough'],
166
+ [FOR, 'for'],
167
+ [FUNC, 'func'],
168
+ [GO, 'go'],
169
+ [GOTO, 'goto'],
170
+ [IF, 'if'],
171
+ [IMPORT, 'import'],
172
+ [INTERFACE, 'interface'],
173
+ [MAP, 'map'],
174
+ [PACKAGE, 'package'],
175
+ [RANGE, 'range'],
176
+ [RETURN, 'return'],
177
+ [SELECT, 'select'],
178
+ [STRUCT, 'struct'],
179
+ [SWITCH, 'switch'],
180
+ [TYPE, 'type'],
181
+ [VAR, 'var'],
182
+ [TILDE, '~'],
183
+ ])
184
+
185
+ const keywords = new Map<string, Token>()
186
+ for (let tok = keyword_beg + 1; tok < keyword_end; tok++) {
187
+ keywords.set(tokenStrings.get(tok)!, tok)
188
+ }
189
+
190
+ type lineInfo = {
191
+ Offset: number
192
+ Filename: string
193
+ Line: number
194
+ Column: number
195
+ }
196
+
7
197
  export class Position {
8
198
  public get Filename(): string {
9
199
  return this._fields.Filename.value
@@ -109,12 +299,401 @@ export function Position_IsValid(pos: Position): boolean {
109
299
  }
110
300
 
111
301
  export function Position_String(pos: Position): string {
302
+ let text = pos.Filename
112
303
  if (!Position_IsValid(pos)) {
113
- return '-'
304
+ return text === '' ? '-' : text
305
+ }
306
+ if (text !== '') {
307
+ text += ':'
114
308
  }
115
- const filename = pos.Filename === '' ? '<input>' : pos.Filename
309
+ text += `${pos.Line}`
116
310
  if (pos.Column > 0) {
117
- return `${filename}:${pos.Line}:${pos.Column}`
311
+ text += `:${pos.Column}`
312
+ }
313
+ return text
314
+ }
315
+
316
+ export class File {
317
+ private nameValue: string
318
+ private baseValue: number
319
+ private sizeValue: number
320
+ private linesValue: number[]
321
+ private infosValue: lineInfo[]
322
+
323
+ constructor(
324
+ init?: Partial<{
325
+ name: string
326
+ base: number
327
+ size: number
328
+ lines: number[]
329
+ infos: lineInfo[]
330
+ }>,
331
+ ) {
332
+ this.nameValue = init?.name ?? ''
333
+ this.baseValue = init?.base ?? 0
334
+ this.sizeValue = init?.size ?? 0
335
+ this.linesValue = init?.lines?.slice() ?? [0]
336
+ this.infosValue = init?.infos?.slice() ?? []
337
+ }
338
+
339
+ public clone(): File {
340
+ return new File({
341
+ name: this.nameValue,
342
+ base: this.baseValue,
343
+ size: this.sizeValue,
344
+ lines: this.linesValue,
345
+ infos: this.infosValue,
346
+ })
347
+ }
348
+
349
+ public Name(): string {
350
+ return this.nameValue
351
+ }
352
+
353
+ public Base(): number {
354
+ return this.baseValue
355
+ }
356
+
357
+ public Size(): number {
358
+ return this.sizeValue
359
+ }
360
+
361
+ public End(): Pos {
362
+ return this.baseValue + this.sizeValue
363
+ }
364
+
365
+ public LineCount(): number {
366
+ return this.linesValue.length
367
+ }
368
+
369
+ public AddLine(offset: number): void {
370
+ const last = this.linesValue[this.linesValue.length - 1]
371
+ if (
372
+ (this.linesValue.length === 0 || last < offset) &&
373
+ offset < this.sizeValue
374
+ ) {
375
+ this.linesValue.push(offset)
376
+ }
377
+ }
378
+
379
+ public MergeLine(line: number): void {
380
+ if (line < 1 || line >= this.linesValue.length) {
381
+ $.panic(`invalid line number ${line}`)
382
+ }
383
+ this.linesValue.splice(line, 1)
384
+ }
385
+
386
+ public Lines(): $.Slice<number> {
387
+ return $.arrayToSlice(this.linesValue.slice())
388
+ }
389
+
390
+ public SetLines(lines: $.Slice<number>): boolean {
391
+ const next = $.asArray(lines)
392
+ for (let i = 0; i < next.length; i++) {
393
+ if ((i > 0 && next[i] <= next[i - 1]) || this.sizeValue <= next[i]) {
394
+ return false
395
+ }
396
+ }
397
+ this.linesValue = next.slice()
398
+ return true
399
+ }
400
+
401
+ public SetLinesForContent(content: $.Slice<number>): void {
402
+ const lines: number[] = []
403
+ let line = 0
404
+ for (let offset = 0; offset < $.len(content); offset++) {
405
+ if (line >= 0) {
406
+ lines.push(line)
407
+ }
408
+ line = -1
409
+ if (content![offset] === 10) {
410
+ line = offset + 1
411
+ }
412
+ }
413
+ this.linesValue = lines
414
+ }
415
+
416
+ public LineStart(line: number): Pos {
417
+ if (line < 1 || line > this.linesValue.length) {
418
+ $.panic(`invalid line number ${line}`)
419
+ }
420
+ return this.baseValue + this.linesValue[line - 1]
421
+ }
422
+
423
+ public AddLineInfo(offset: number, filename: string, line: number): void {
424
+ this.AddLineColumnInfo(offset, filename, line, 1)
425
+ }
426
+
427
+ public AddLineColumnInfo(
428
+ offset: number,
429
+ filename: string,
430
+ line: number,
431
+ column: number,
432
+ ): void {
433
+ const last = this.infosValue[this.infosValue.length - 1]
434
+ if (
435
+ (this.infosValue.length === 0 || last.Offset < offset) &&
436
+ offset < this.sizeValue
437
+ ) {
438
+ this.infosValue.push({
439
+ Offset: offset,
440
+ Filename: filename,
441
+ Line: line,
442
+ Column: column,
443
+ })
444
+ }
445
+ }
446
+
447
+ public Pos(offset: number): Pos {
448
+ return this.baseValue + this.fixOffset(offset)
449
+ }
450
+
451
+ public Offset(pos: Pos): number {
452
+ return this.fixOffset(pos - this.baseValue)
453
+ }
454
+
455
+ public Line(pos: Pos): number {
456
+ return this.Position(pos).Line
457
+ }
458
+
459
+ public PositionFor(pos: Pos, adjusted: boolean): Position {
460
+ if (pos === NoPos) {
461
+ return new Position()
462
+ }
463
+ return this.position(pos, adjusted)
464
+ }
465
+
466
+ public Position(pos: Pos): Position {
467
+ return this.PositionFor(pos, true)
468
+ }
469
+
470
+ private fixOffset(offset: number): number {
471
+ if (offset < 0) {
472
+ return 0
473
+ }
474
+ if (offset > this.sizeValue) {
475
+ return this.sizeValue
476
+ }
477
+ return offset
478
+ }
479
+
480
+ private position(pos: Pos, adjusted: boolean): Position {
481
+ const offset = this.fixOffset(pos - this.baseValue)
482
+ let filename = this.nameValue
483
+ let line = 0
484
+ let column = 0
485
+ const lineIndex = searchInts(this.linesValue, offset)
486
+ if (lineIndex >= 0) {
487
+ line = lineIndex + 1
488
+ column = offset - this.linesValue[lineIndex] + 1
489
+ }
490
+ if (adjusted && this.infosValue.length > 0) {
491
+ const infoIndex = searchLineInfos(this.infosValue, offset)
492
+ if (infoIndex >= 0) {
493
+ const info = this.infosValue[infoIndex]
494
+ filename = info.Filename
495
+ const baseLineIndex = searchInts(this.linesValue, info.Offset)
496
+ if (baseLineIndex >= 0) {
497
+ const delta = line - (baseLineIndex + 1)
498
+ line = info.Line + delta
499
+ if (info.Column === 0) {
500
+ column = 0
501
+ } else if (delta === 0) {
502
+ column = info.Column + (offset - info.Offset)
503
+ }
504
+ }
505
+ }
506
+ }
507
+ return $.markAsStructValue(
508
+ new Position({
509
+ Filename: filename,
510
+ Offset: offset,
511
+ Line: line,
512
+ Column: column,
513
+ }),
514
+ )
515
+ }
516
+ }
517
+
518
+ export class FileSet {
519
+ private baseValue: number
520
+ private files: File[]
521
+
522
+ constructor(init?: Partial<{ base: number; files: File[] }>) {
523
+ this.baseValue = init?.base ?? 1
524
+ this.files = init?.files?.slice() ?? []
525
+ }
526
+
527
+ public clone(): FileSet {
528
+ return new FileSet({
529
+ base: this.baseValue,
530
+ files: this.files,
531
+ })
532
+ }
533
+
534
+ public Base(): number {
535
+ return this.baseValue
536
+ }
537
+
538
+ public AddFile(filename: string, base: number, size: number): File {
539
+ if (base < 0) {
540
+ base = this.baseValue
541
+ }
542
+ if (base < this.baseValue) {
543
+ $.panic(`invalid base ${base}`)
544
+ }
545
+ if (size < 0) {
546
+ $.panic(`invalid size ${size}`)
547
+ }
548
+ const file = new File({ name: filename, base, size })
549
+ this.files.push(file)
550
+ this.files.sort((left, right) => left.Base() - right.Base())
551
+ this.baseValue = base + size + 1
552
+ return file
553
+ }
554
+
555
+ public AddExistingFiles(...files: File[]): void {
556
+ for (const file of files) {
557
+ if (file != null && !this.files.includes(file)) {
558
+ this.files.push(file)
559
+ this.baseValue = Math.max(this.baseValue, file.Base() + file.Size() + 1)
560
+ }
561
+ }
562
+ this.files.sort((left, right) => left.Base() - right.Base())
563
+ }
564
+
565
+ public RemoveFile(file: File): void {
566
+ this.files = this.files.filter((candidate) => candidate !== file)
567
+ }
568
+
569
+ public Iterate(yieldFile: (file: File) => boolean): void {
570
+ for (const file of this.files.slice()) {
571
+ if (!yieldFile(file)) {
572
+ return
573
+ }
574
+ }
575
+ }
576
+
577
+ public File(pos: Pos): File | null {
578
+ if (pos === NoPos) {
579
+ return null
580
+ }
581
+ return (
582
+ this.files.find((file) => file.Base() <= pos && pos <= file.End()) ?? null
583
+ )
584
+ }
585
+
586
+ public PositionFor(pos: Pos, adjusted: boolean): Position {
587
+ const file = this.File(pos)
588
+ if (file === null) {
589
+ return new Position()
590
+ }
591
+ return file.PositionFor(pos, adjusted)
592
+ }
593
+
594
+ public Position(pos: Pos): Position {
595
+ return this.PositionFor(pos, true)
596
+ }
597
+ }
598
+
599
+ export function NewFileSet(): FileSet {
600
+ return new FileSet()
601
+ }
602
+
603
+ export function Pos_IsValid(pos: Pos): boolean {
604
+ return pos !== NoPos
605
+ }
606
+
607
+ export function Token_String(tok: Token): string {
608
+ return tokenStrings.get(tok) ?? `token(${tok})`
609
+ }
610
+
611
+ export function Token_Precedence(tok: Token): number {
612
+ switch (tok) {
613
+ case LOR:
614
+ return 1
615
+ case LAND:
616
+ return 2
617
+ case EQL:
618
+ case NEQ:
619
+ case LSS:
620
+ case LEQ:
621
+ case GTR:
622
+ case GEQ:
623
+ return 3
624
+ case ADD:
625
+ case SUB:
626
+ case OR:
627
+ case XOR:
628
+ return 4
629
+ case MUL:
630
+ case QUO:
631
+ case REM:
632
+ case SHL:
633
+ case SHR:
634
+ case AND:
635
+ case AND_NOT:
636
+ return 5
637
+ default:
638
+ return LowestPrec
639
+ }
640
+ }
641
+
642
+ export function Token_IsLiteral(tok: Token): boolean {
643
+ return literal_beg < tok && tok < literal_end
644
+ }
645
+
646
+ export function Token_IsOperator(tok: Token): boolean {
647
+ return (operator_beg < tok && tok < operator_end) || tok === TILDE
648
+ }
649
+
650
+ export function Token_IsKeyword(tok: Token): boolean {
651
+ return keyword_beg < tok && tok < keyword_end
652
+ }
653
+
654
+ export function Lookup(ident: string): Token {
655
+ return keywords.get(ident) ?? IDENT
656
+ }
657
+
658
+ export function IsExported(name: string): boolean {
659
+ return /^\p{Lu}/u.test(name)
660
+ }
661
+
662
+ export function IsKeyword(name: string): boolean {
663
+ return keywords.has(name)
664
+ }
665
+
666
+ export function IsIdentifier(name: string): boolean {
667
+ if (name === '' || IsKeyword(name)) {
668
+ return false
669
+ }
670
+ return /^[$_\p{L}][$_\p{L}\p{N}]*$/u.test(name)
671
+ }
672
+
673
+ function searchInts(values: number[], offset: number): number {
674
+ let low = 0
675
+ let high = values.length
676
+ while (low < high) {
677
+ const mid = Math.floor((low + high) / 2)
678
+ if (values[mid] > offset) {
679
+ high = mid
680
+ } else {
681
+ low = mid + 1
682
+ }
683
+ }
684
+ return low - 1
685
+ }
686
+
687
+ function searchLineInfos(values: lineInfo[], offset: number): number {
688
+ let low = 0
689
+ let high = values.length
690
+ while (low < high) {
691
+ const mid = Math.floor((low + high) / 2)
692
+ if (values[mid].Offset > offset) {
693
+ high = mid
694
+ } else {
695
+ low = mid + 1
696
+ }
118
697
  }
119
- return `${filename}:${pos.Line}`
698
+ return low - 1
120
699
  }
@@ -0,0 +1,67 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
3
+ import * as $ from '../../builtin/index.js'
4
+ import {
5
+ New128,
6
+ New128a,
7
+ New32,
8
+ New32a,
9
+ New64,
10
+ New64a,
11
+ } from './index.js'
12
+
13
+ describe('hash/fnv override', () => {
14
+ it('matches Go FNV sums for hello', async () => {
15
+ const h32 = New32()
16
+ h32.Write($.stringToBytes('hello'))
17
+ expect(h32.Sum32()).toBe(0xb6fa7167)
18
+ expect(hex(await h32.Sum($.stringToBytes('prefix')))).toBe(
19
+ '707265666978b6fa7167',
20
+ )
21
+ expect(h32.Size()).toBe(4)
22
+
23
+ const h32a = New32a()
24
+ h32a.Write($.stringToBytes('hello'))
25
+ expect(h32a.Sum32()).toBe(0x4f9f2cab)
26
+ expect(hex(await h32a.Sum(null))).toBe('4f9f2cab')
27
+
28
+ const h64 = New64()
29
+ h64.Write($.stringToBytes('hello'))
30
+ expect(h64.Sum64()).toBe(0x7b495389bdbdd4c7n)
31
+ expect(hex(await h64.Sum(null))).toBe('7b495389bdbdd4c7')
32
+
33
+ const h64a = New64a()
34
+ h64a.Write($.stringToBytes('hello'))
35
+ expect(h64a.Sum64()).toBe(0xa430d84680aabd0bn)
36
+ expect(hex(await h64a.Sum(null))).toBe('a430d84680aabd0b')
37
+
38
+ const h128 = New128()
39
+ h128.Write($.stringToBytes('hello'))
40
+ expect(hex(await h128.Sum(null))).toBe('f14b58486483d94f708038798c29697f')
41
+
42
+ const h128a = New128a()
43
+ h128a.Write($.stringToBytes('hello'))
44
+ expect(hex(await h128a.Sum(null))).toBe('e3e1efd54283d94f7081314b599d31b3')
45
+ })
46
+
47
+ it('marshals and restores state', async () => {
48
+ const hash = New128a()
49
+ hash.Write($.stringToBytes('hello'))
50
+ const [state, marshalErr] = hash.MarshalBinary()
51
+ expect(marshalErr).toBeNull()
52
+
53
+ const restored = New128a()
54
+ expect(restored.UnmarshalBinary(state)).toBeNull()
55
+ restored.Write($.stringToBytes(' world'))
56
+
57
+ const expected = New128a()
58
+ expected.Write($.stringToBytes('hello world'))
59
+ expect(hex(await restored.Sum(null))).toBe(hex(await expected.Sum(null)))
60
+ })
61
+ })
62
+
63
+ function hex(bytes: $.Bytes): string {
64
+ return Array.from($.bytesToUint8Array(bytes), (b) =>
65
+ b.toString(16).padStart(2, '0'),
66
+ ).join('')
67
+ }