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
@@ -3,6 +3,10 @@ package compiler
3
3
  import (
4
4
  "cmp"
5
5
  "slices"
6
+ "strings"
7
+
8
+ gs "github.com/aperturerobotics/goscript"
9
+ "github.com/pkg/errors"
6
10
  )
7
11
 
8
12
  // RuntimeHelperCategory names a runtime helper family owned by the contract.
@@ -25,40 +29,82 @@ const (
25
29
  type RuntimeHelper string
26
30
 
27
31
  const (
28
- RuntimeHelperPrintln RuntimeHelper = "builtin.println"
29
- RuntimeHelperPrint RuntimeHelper = "builtin.print"
30
- RuntimeHelperInt RuntimeHelper = "builtin.int"
31
- RuntimeHelperByte RuntimeHelper = "builtin.byte"
32
- RuntimeHelperLen RuntimeHelper = "builtin.len"
33
- RuntimeHelperCap RuntimeHelper = "builtin.cap"
34
- RuntimeHelperClear RuntimeHelper = "builtin.clear"
35
- RuntimeHelperPanic RuntimeHelper = "builtin.panic"
36
- RuntimeHelperRecover RuntimeHelper = "builtin.recover"
37
- RuntimeHelperMin RuntimeHelper = "builtin.min"
38
- RuntimeHelperMax RuntimeHelper = "builtin.max"
32
+ RuntimeHelperPrintln RuntimeHelper = "builtin.println"
33
+ RuntimeHelperPrint RuntimeHelper = "builtin.print"
34
+ RuntimeHelperInt RuntimeHelper = "builtin.int"
35
+ RuntimeHelperUint RuntimeHelper = "builtin.uint"
36
+ RuntimeHelperByte RuntimeHelper = "builtin.byte"
37
+ RuntimeHelperLen RuntimeHelper = "builtin.len"
38
+ RuntimeHelperCap RuntimeHelper = "builtin.cap"
39
+ RuntimeHelperClear RuntimeHelper = "builtin.clear"
40
+ RuntimeHelperPanic RuntimeHelper = "builtin.panic"
41
+ RuntimeHelperRecover RuntimeHelper = "builtin.recover"
42
+ RuntimeHelperMin RuntimeHelper = "builtin.min"
43
+ RuntimeHelperMax RuntimeHelper = "builtin.max"
44
+ RuntimeHelperComplex RuntimeHelper = "builtin.complex"
45
+ RuntimeHelperReal RuntimeHelper = "builtin.real"
46
+ RuntimeHelperImag RuntimeHelper = "builtin.imag"
47
+ RuntimeHelperUint64Shl RuntimeHelper = "builtin.uint64Shl"
48
+ RuntimeHelperUint64Shr RuntimeHelper = "builtin.uint64Shr"
49
+ RuntimeHelperInt64Shl RuntimeHelper = "builtin.int64Shl"
50
+ RuntimeHelperInt64Shr RuntimeHelper = "builtin.int64Shr"
51
+ RuntimeHelperUintShr RuntimeHelper = "builtin.uintShr"
52
+ RuntimeHelperUint64Div RuntimeHelper = "builtin.uint64Div"
53
+ RuntimeHelperUint64Mod RuntimeHelper = "builtin.uint64Mod"
54
+ RuntimeHelperUint64Mul RuntimeHelper = "builtin.uint64Mul"
55
+ RuntimeHelperUint64Add RuntimeHelper = "builtin.uint64Add"
56
+ RuntimeHelperUint64Sub RuntimeHelper = "builtin.uint64Sub"
57
+ RuntimeHelperUint64And RuntimeHelper = "builtin.uint64And"
58
+ RuntimeHelperUint64Or RuntimeHelper = "builtin.uint64Or"
59
+ RuntimeHelperUint64Xor RuntimeHelper = "builtin.uint64Xor"
60
+ RuntimeHelperInt64Div RuntimeHelper = "builtin.int64Div"
61
+ RuntimeHelperInt64Mod RuntimeHelper = "builtin.int64Mod"
62
+ RuntimeHelperInt64Mul RuntimeHelper = "builtin.int64Mul"
63
+ RuntimeHelperInt64Add RuntimeHelper = "builtin.int64Add"
64
+ RuntimeHelperInt64Sub RuntimeHelper = "builtin.int64Sub"
65
+ RuntimeHelperInt64And RuntimeHelper = "builtin.int64And"
66
+ RuntimeHelperInt64Or RuntimeHelper = "builtin.int64Or"
67
+ RuntimeHelperInt64Xor RuntimeHelper = "builtin.int64Xor"
39
68
 
40
69
  RuntimeHelperAssignStruct RuntimeHelper = "value.assignStruct"
41
70
  RuntimeHelperMarkAsStructValue RuntimeHelper = "value.markAsStructValue"
71
+ RuntimeHelperCloneStructValue RuntimeHelper = "value.cloneStructValue"
72
+ RuntimeHelperCloneArrayValue RuntimeHelper = "value.cloneArrayValue"
42
73
  RuntimeHelperPointerValue RuntimeHelper = "value.pointerValue"
74
+ RuntimeHelperPointerValueOrNil RuntimeHelper = "value.pointerValueOrNil"
75
+ RuntimeHelperArrayEqual RuntimeHelper = "value.arrayEqual"
76
+ RuntimeHelperComparableEqual RuntimeHelper = "value.comparableEqual"
43
77
 
44
- RuntimeHelperVarRef RuntimeHelper = "varref.varRef"
45
- RuntimeHelperUnref RuntimeHelper = "varref.unref"
46
- RuntimeHelperIsVarRef RuntimeHelper = "varref.isVarRef"
78
+ RuntimeHelperVarRef RuntimeHelper = "varref.varRef"
79
+ RuntimeHelperFieldRef RuntimeHelper = "varref.fieldRef"
80
+ RuntimeHelperUnref RuntimeHelper = "varref.unref"
81
+ RuntimeHelperIsVarRef RuntimeHelper = "varref.isVarRef"
82
+ RuntimeHelperUnsupportedPointerRef RuntimeHelper = "varref.unsupportedPointerRef"
47
83
 
48
84
  RuntimeHelperMakeSlice RuntimeHelper = "slice.makeSlice"
49
85
  RuntimeHelperGoSlice RuntimeHelper = "slice.goSlice"
50
86
  RuntimeHelperArrayToSlice RuntimeHelper = "slice.arrayToSlice"
87
+ RuntimeHelperArrayPointerFromIndexRef RuntimeHelper = "slice.arrayPointerFromIndexRef"
88
+ RuntimeHelperSliceToArray RuntimeHelper = "slice.sliceToArray"
89
+ RuntimeHelperSliceToArrayPointer RuntimeHelper = "slice.sliceToArrayPointer"
51
90
  RuntimeHelperAppend RuntimeHelper = "slice.append"
52
91
  RuntimeHelperCopy RuntimeHelper = "slice.copy"
53
92
  RuntimeHelperAsArray RuntimeHelper = "slice.asArray"
54
93
  RuntimeHelperStringToRunes RuntimeHelper = "slice.stringToRunes"
94
+ RuntimeHelperRangeString RuntimeHelper = "slice.rangeString"
55
95
  RuntimeHelperStringToRune RuntimeHelper = "slice.stringToRune"
56
96
  RuntimeHelperRunesToString RuntimeHelper = "slice.runesToString"
57
97
  RuntimeHelperStringToBytes RuntimeHelper = "slice.stringToBytes"
58
98
  RuntimeHelperBytesToString RuntimeHelper = "slice.bytesToString"
99
+ RuntimeHelperStringEqual RuntimeHelper = "slice.stringEqual"
100
+ RuntimeHelperStringCompare RuntimeHelper = "slice.stringCompare"
101
+ RuntimeHelperStringHeaderRef RuntimeHelper = "slice.stringHeaderRef"
102
+ RuntimeHelperSliceHeaderRef RuntimeHelper = "slice.sliceHeaderRef"
59
103
  RuntimeHelperGenericBytesOrStringToString RuntimeHelper = "slice.genericBytesOrStringToString"
60
104
  RuntimeHelperIndexStringOrBytes RuntimeHelper = "slice.indexStringOrBytes"
61
105
  RuntimeHelperSliceStringOrBytes RuntimeHelper = "slice.sliceStringOrBytes"
106
+ RuntimeHelperIndexRef RuntimeHelper = "slice.indexRef"
107
+ RuntimeHelperIndexAddress RuntimeHelper = "slice.indexAddress"
62
108
 
63
109
  RuntimeHelperMakeMap RuntimeHelper = "map.makeMap"
64
110
  RuntimeHelperMapGet RuntimeHelper = "map.mapGet"
@@ -70,21 +116,22 @@ const (
70
116
  RuntimeHelperToGoError RuntimeHelper = "error.toGoError"
71
117
  RuntimeHelperWrapPrimitiveError RuntimeHelper = "error.wrapPrimitiveError"
72
118
 
73
- RuntimeHelperTypeKind RuntimeHelper = "type.TypeKind"
74
- RuntimeHelperRegisterStructType RuntimeHelper = "type.registerStructType"
75
- RuntimeHelperRegisterInterfaceType RuntimeHelper = "type.registerInterfaceType"
76
- RuntimeHelperGetTypeByName RuntimeHelper = "type.getTypeByName"
77
- RuntimeHelperTypeAssert RuntimeHelper = "type.typeAssert"
78
- RuntimeHelperTypeAssertTuple RuntimeHelper = "type.typeAssertTuple"
79
- RuntimeHelperMustTypeAssert RuntimeHelper = "type.mustTypeAssert"
80
- RuntimeHelperIs RuntimeHelper = "type.is"
81
- RuntimeHelperTypeSwitch RuntimeHelper = "type.typeSwitch"
82
- RuntimeHelperTypedNil RuntimeHelper = "type.typedNil"
83
- RuntimeHelperInterfaceValue RuntimeHelper = "type.interfaceValue"
84
- RuntimeHelperFunctionValue RuntimeHelper = "type.functionValue"
85
- RuntimeHelperNamedFunction RuntimeHelper = "type.namedFunction"
86
- RuntimeHelperGenericZero RuntimeHelper = "type.genericZero"
87
- RuntimeHelperCallGenericMethod RuntimeHelper = "type.callGenericMethod"
119
+ RuntimeHelperTypeKind RuntimeHelper = "type.TypeKind"
120
+ RuntimeHelperRegisterStructType RuntimeHelper = "type.registerStructType"
121
+ RuntimeHelperRegisterInterfaceType RuntimeHelper = "type.registerInterfaceType"
122
+ RuntimeHelperGetTypeByName RuntimeHelper = "type.getTypeByName"
123
+ RuntimeHelperTypeAssert RuntimeHelper = "type.typeAssert"
124
+ RuntimeHelperTypeAssertTuple RuntimeHelper = "type.typeAssertTuple"
125
+ RuntimeHelperMustTypeAssert RuntimeHelper = "type.mustTypeAssert"
126
+ RuntimeHelperIs RuntimeHelper = "type.is"
127
+ RuntimeHelperTypeSwitch RuntimeHelper = "type.typeSwitch"
128
+ RuntimeHelperTypedNil RuntimeHelper = "type.typedNil"
129
+ RuntimeHelperInterfaceValue RuntimeHelper = "type.interfaceValue"
130
+ RuntimeHelperNamedValueInterfaceValue RuntimeHelper = "type.namedValueInterfaceValue"
131
+ RuntimeHelperFunctionValue RuntimeHelper = "type.functionValue"
132
+ RuntimeHelperNamedFunction RuntimeHelper = "type.namedFunction"
133
+ RuntimeHelperGenericZero RuntimeHelper = "type.genericZero"
134
+ RuntimeHelperCallGenericMethod RuntimeHelper = "type.callGenericMethod"
88
135
 
89
136
  RuntimeHelperMakeChannel RuntimeHelper = "channel.makeChannel"
90
137
  RuntimeHelperMakeChannelRef RuntimeHelper = "channel.makeChannelRef"
@@ -185,6 +232,22 @@ func (o *RuntimeContractOwner) QualifiedHelper(helper RuntimeHelper) string {
185
232
  return o.BuiltinImport().Alias + "." + name
186
233
  }
187
234
 
235
+ // MissingRuntimeExports returns helper exports absent from the real runtime source.
236
+ func (o *RuntimeContractOwner) MissingRuntimeExports() ([]string, error) {
237
+ exports, err := scanBuiltinRuntimeExports()
238
+ if err != nil {
239
+ return nil, err
240
+ }
241
+ var missing []string
242
+ for _, helper := range o.Helpers() {
243
+ if !exports[helper.Export] {
244
+ missing = append(missing, helper.Export)
245
+ }
246
+ }
247
+ slices.Sort(missing)
248
+ return missing, nil
249
+ }
250
+
188
251
  func compareRuntimeHelperContract(a RuntimeHelperContract, b RuntimeHelperContract) int {
189
252
  if c := cmp.Compare(a.Category, b.Category); c != 0 {
190
253
  return c
@@ -200,6 +263,7 @@ func runtimeHelperContracts() []RuntimeHelperContract {
200
263
  runtimeHelper(RuntimeHelperPrintln, "println", RuntimeHelperCategoryBuiltin),
201
264
  runtimeHelper(RuntimeHelperPrint, "print", RuntimeHelperCategoryBuiltin),
202
265
  runtimeHelper(RuntimeHelperInt, "int", RuntimeHelperCategoryBuiltin),
266
+ runtimeHelper(RuntimeHelperUint, "uint", RuntimeHelperCategoryBuiltin),
203
267
  runtimeHelper(RuntimeHelperByte, "byte", RuntimeHelperCategoryBuiltin),
204
268
  runtimeHelper(RuntimeHelperLen, "len", RuntimeHelperCategoryBuiltin),
205
269
  runtimeHelper(RuntimeHelperCap, "cap", RuntimeHelperCategoryBuiltin),
@@ -208,26 +272,67 @@ func runtimeHelperContracts() []RuntimeHelperContract {
208
272
  runtimeHelper(RuntimeHelperRecover, "recover", RuntimeHelperCategoryBuiltin),
209
273
  runtimeHelper(RuntimeHelperMin, "min", RuntimeHelperCategoryBuiltin),
210
274
  runtimeHelper(RuntimeHelperMax, "max", RuntimeHelperCategoryBuiltin),
275
+ runtimeHelper(RuntimeHelperComplex, "complex", RuntimeHelperCategoryBuiltin),
276
+ runtimeHelper(RuntimeHelperReal, "real", RuntimeHelperCategoryBuiltin),
277
+ runtimeHelper(RuntimeHelperImag, "imag", RuntimeHelperCategoryBuiltin),
278
+ runtimeHelper(RuntimeHelperUint64Shl, "uint64Shl", RuntimeHelperCategoryBuiltin),
279
+ runtimeHelper(RuntimeHelperUint64Shr, "uint64Shr", RuntimeHelperCategoryBuiltin),
280
+ runtimeHelper(RuntimeHelperInt64Shl, "int64Shl", RuntimeHelperCategoryBuiltin),
281
+ runtimeHelper(RuntimeHelperInt64Shr, "int64Shr", RuntimeHelperCategoryBuiltin),
282
+ runtimeHelper(RuntimeHelperUintShr, "uintShr", RuntimeHelperCategoryBuiltin),
283
+ runtimeHelper(RuntimeHelperUint64Div, "uint64Div", RuntimeHelperCategoryBuiltin),
284
+ runtimeHelper(RuntimeHelperUint64Mod, "uint64Mod", RuntimeHelperCategoryBuiltin),
285
+ runtimeHelper(RuntimeHelperUint64Mul, "uint64Mul", RuntimeHelperCategoryBuiltin),
286
+ runtimeHelper(RuntimeHelperUint64Add, "uint64Add", RuntimeHelperCategoryBuiltin),
287
+ runtimeHelper(RuntimeHelperUint64Sub, "uint64Sub", RuntimeHelperCategoryBuiltin),
288
+ runtimeHelper(RuntimeHelperUint64And, "uint64And", RuntimeHelperCategoryBuiltin),
289
+ runtimeHelper(RuntimeHelperUint64Or, "uint64Or", RuntimeHelperCategoryBuiltin),
290
+ runtimeHelper(RuntimeHelperUint64Xor, "uint64Xor", RuntimeHelperCategoryBuiltin),
291
+ runtimeHelper(RuntimeHelperInt64Div, "int64Div", RuntimeHelperCategoryBuiltin),
292
+ runtimeHelper(RuntimeHelperInt64Mod, "int64Mod", RuntimeHelperCategoryBuiltin),
293
+ runtimeHelper(RuntimeHelperInt64Mul, "int64Mul", RuntimeHelperCategoryBuiltin),
294
+ runtimeHelper(RuntimeHelperInt64Add, "int64Add", RuntimeHelperCategoryBuiltin),
295
+ runtimeHelper(RuntimeHelperInt64Sub, "int64Sub", RuntimeHelperCategoryBuiltin),
296
+ runtimeHelper(RuntimeHelperInt64And, "int64And", RuntimeHelperCategoryBuiltin),
297
+ runtimeHelper(RuntimeHelperInt64Or, "int64Or", RuntimeHelperCategoryBuiltin),
298
+ runtimeHelper(RuntimeHelperInt64Xor, "int64Xor", RuntimeHelperCategoryBuiltin),
211
299
  runtimeHelper(RuntimeHelperAssignStruct, "assignStruct", RuntimeHelperCategoryValue),
212
300
  runtimeHelper(RuntimeHelperMarkAsStructValue, "markAsStructValue", RuntimeHelperCategoryValue),
301
+ runtimeHelper(RuntimeHelperCloneStructValue, "cloneStructValue", RuntimeHelperCategoryValue),
302
+ runtimeHelper(RuntimeHelperCloneArrayValue, "cloneArrayValue", RuntimeHelperCategoryValue),
213
303
  runtimeHelper(RuntimeHelperPointerValue, "pointerValue", RuntimeHelperCategoryValue),
304
+ runtimeHelper(RuntimeHelperPointerValueOrNil, "pointerValueOrNil", RuntimeHelperCategoryValue),
305
+ runtimeHelper(RuntimeHelperArrayEqual, "arrayEqual", RuntimeHelperCategoryValue),
306
+ runtimeHelper(RuntimeHelperComparableEqual, "comparableEqual", RuntimeHelperCategoryValue),
214
307
  runtimeHelper(RuntimeHelperVarRef, "varRef", RuntimeHelperCategoryVarRef),
308
+ runtimeHelper(RuntimeHelperFieldRef, "fieldRef", RuntimeHelperCategoryVarRef),
215
309
  runtimeHelper(RuntimeHelperUnref, "unref", RuntimeHelperCategoryVarRef),
216
310
  runtimeHelper(RuntimeHelperIsVarRef, "isVarRef", RuntimeHelperCategoryVarRef),
311
+ runtimeHelper(RuntimeHelperUnsupportedPointerRef, "unsupportedPointerRef", RuntimeHelperCategoryVarRef),
217
312
  runtimeHelper(RuntimeHelperMakeSlice, "makeSlice", RuntimeHelperCategorySlice),
218
313
  runtimeHelper(RuntimeHelperGoSlice, "goSlice", RuntimeHelperCategorySlice),
219
314
  runtimeHelper(RuntimeHelperArrayToSlice, "arrayToSlice", RuntimeHelperCategorySlice),
315
+ runtimeHelper(RuntimeHelperArrayPointerFromIndexRef, "arrayPointerFromIndexRef", RuntimeHelperCategorySlice),
316
+ runtimeHelper(RuntimeHelperSliceToArray, "sliceToArray", RuntimeHelperCategorySlice),
317
+ runtimeHelper(RuntimeHelperSliceToArrayPointer, "sliceToArrayPointer", RuntimeHelperCategorySlice),
220
318
  runtimeHelper(RuntimeHelperAppend, "append", RuntimeHelperCategorySlice),
221
319
  runtimeHelper(RuntimeHelperCopy, "copy", RuntimeHelperCategorySlice),
222
320
  runtimeHelper(RuntimeHelperAsArray, "asArray", RuntimeHelperCategorySlice),
223
321
  runtimeHelper(RuntimeHelperStringToRunes, "stringToRunes", RuntimeHelperCategorySlice),
322
+ runtimeHelper(RuntimeHelperRangeString, "rangeString", RuntimeHelperCategorySlice),
224
323
  runtimeHelper(RuntimeHelperStringToRune, "stringToRune", RuntimeHelperCategorySlice),
225
324
  runtimeHelper(RuntimeHelperRunesToString, "runesToString", RuntimeHelperCategorySlice),
226
325
  runtimeHelper(RuntimeHelperStringToBytes, "stringToBytes", RuntimeHelperCategorySlice),
227
326
  runtimeHelper(RuntimeHelperBytesToString, "bytesToString", RuntimeHelperCategorySlice),
327
+ runtimeHelper(RuntimeHelperStringEqual, "stringEqual", RuntimeHelperCategorySlice),
328
+ runtimeHelper(RuntimeHelperStringCompare, "stringCompare", RuntimeHelperCategorySlice),
329
+ runtimeHelper(RuntimeHelperStringHeaderRef, "stringHeaderRef", RuntimeHelperCategorySlice),
330
+ runtimeHelper(RuntimeHelperSliceHeaderRef, "sliceHeaderRef", RuntimeHelperCategorySlice),
228
331
  runtimeHelper(RuntimeHelperGenericBytesOrStringToString, "genericBytesOrStringToString", RuntimeHelperCategorySlice),
229
332
  runtimeHelper(RuntimeHelperIndexStringOrBytes, "indexStringOrBytes", RuntimeHelperCategorySlice),
230
333
  runtimeHelper(RuntimeHelperSliceStringOrBytes, "sliceStringOrBytes", RuntimeHelperCategorySlice),
334
+ runtimeHelper(RuntimeHelperIndexRef, "indexRef", RuntimeHelperCategorySlice),
335
+ runtimeHelper(RuntimeHelperIndexAddress, "indexAddress", RuntimeHelperCategorySlice),
231
336
  runtimeHelper(RuntimeHelperMakeMap, "makeMap", RuntimeHelperCategoryMap),
232
337
  runtimeHelper(RuntimeHelperMapGet, "mapGet", RuntimeHelperCategoryMap),
233
338
  runtimeHelper(RuntimeHelperMapSet, "mapSet", RuntimeHelperCategoryMap),
@@ -247,6 +352,7 @@ func runtimeHelperContracts() []RuntimeHelperContract {
247
352
  runtimeHelper(RuntimeHelperTypeSwitch, "typeSwitch", RuntimeHelperCategoryType),
248
353
  runtimeHelper(RuntimeHelperTypedNil, "typedNil", RuntimeHelperCategoryType),
249
354
  runtimeHelper(RuntimeHelperInterfaceValue, "interfaceValue", RuntimeHelperCategoryType),
355
+ runtimeHelper(RuntimeHelperNamedValueInterfaceValue, "namedValueInterfaceValue", RuntimeHelperCategoryType),
250
356
  runtimeHelper(RuntimeHelperFunctionValue, "functionValue", RuntimeHelperCategoryType),
251
357
  runtimeHelper(RuntimeHelperNamedFunction, "namedFunction", RuntimeHelperCategoryType),
252
358
  runtimeHelper(RuntimeHelperGenericZero, "genericZero", RuntimeHelperCategoryType),
@@ -277,3 +383,97 @@ func runtimeHelper(
277
383
  Category: category,
278
384
  }
279
385
  }
386
+
387
+ func scanBuiltinRuntimeExports() (map[string]bool, error) {
388
+ index, err := gs.GsOverrides.ReadFile("gs/builtin/index.ts")
389
+ if err != nil {
390
+ return nil, err
391
+ }
392
+ exports := make(map[string]bool)
393
+ for _, module := range builtinReexportModules(string(index)) {
394
+ data, err := gs.GsOverrides.ReadFile("gs/builtin/" + module + ".ts")
395
+ if err != nil {
396
+ return nil, errors.Wrapf(err, "read builtin export module %s", module)
397
+ }
398
+ for _, name := range sourceExportNames(string(data)) {
399
+ exports[name] = true
400
+ }
401
+ }
402
+ return exports, nil
403
+ }
404
+
405
+ func builtinReexportModules(index string) []string {
406
+ var modules []string
407
+ for line := range strings.SplitSeq(index, "\n") {
408
+ line = strings.TrimSpace(line)
409
+ if !strings.HasPrefix(line, "export * from ") {
410
+ continue
411
+ }
412
+ module := quotedModulePath(line)
413
+ module = strings.TrimPrefix(module, "./")
414
+ module = strings.TrimSuffix(module, ".js")
415
+ if module != "" {
416
+ modules = append(modules, module)
417
+ }
418
+ }
419
+ slices.Sort(modules)
420
+ return modules
421
+ }
422
+
423
+ func quotedModulePath(line string) string {
424
+ for _, quote := range []string{"'", "\""} {
425
+ _, remaining, ok := strings.Cut(line, quote)
426
+ if !ok {
427
+ continue
428
+ }
429
+ module, _, ok := strings.Cut(remaining, quote)
430
+ if ok {
431
+ return module
432
+ }
433
+ }
434
+ return ""
435
+ }
436
+
437
+ func sourceExportNames(data string) []string {
438
+ names := make(map[string]bool)
439
+ for line := range strings.SplitSeq(data, "\n") {
440
+ line = strings.TrimSpace(line)
441
+ for _, prefix := range []string{
442
+ "export async function ",
443
+ "export function ",
444
+ "export const ",
445
+ "export class ",
446
+ "export enum ",
447
+ "export type ",
448
+ "export interface ",
449
+ } {
450
+ if !strings.HasPrefix(line, prefix) {
451
+ continue
452
+ }
453
+ name := exportNameAfterPrefix(line, prefix)
454
+ if name != "" {
455
+ names[name] = true
456
+ }
457
+ }
458
+ }
459
+ result := make([]string, 0, len(names))
460
+ for name := range names {
461
+ result = append(result, name)
462
+ }
463
+ slices.Sort(result)
464
+ return result
465
+ }
466
+
467
+ func exportNameAfterPrefix(line, prefix string) string {
468
+ remaining := strings.TrimSpace(strings.TrimPrefix(line, prefix))
469
+ for idx, char := range remaining {
470
+ if char == '_' || char == '$' ||
471
+ (char >= 'a' && char <= 'z') ||
472
+ (char >= 'A' && char <= 'Z') ||
473
+ (idx > 0 && char >= '0' && char <= '9') {
474
+ continue
475
+ }
476
+ return remaining[:idx]
477
+ }
478
+ return remaining
479
+ }
@@ -11,36 +11,40 @@ func TestRuntimeContractOwnsBuiltinImportAndHelpers(t *testing.T) {
11
11
  }
12
12
 
13
13
  wantHelpers := map[RuntimeHelper]RuntimeHelperCategory{
14
- RuntimeHelperPrintln: RuntimeHelperCategoryBuiltin,
15
- RuntimeHelperPrint: RuntimeHelperCategoryBuiltin,
16
- RuntimeHelperInt: RuntimeHelperCategoryBuiltin,
17
- RuntimeHelperByte: RuntimeHelperCategoryBuiltin,
18
- RuntimeHelperVarRef: RuntimeHelperCategoryVarRef,
19
- RuntimeHelperUnref: RuntimeHelperCategoryVarRef,
20
- RuntimeHelperAssignStruct: RuntimeHelperCategoryValue,
21
- RuntimeHelperMarkAsStructValue: RuntimeHelperCategoryValue,
22
- RuntimeHelperPointerValue: RuntimeHelperCategoryValue,
23
- RuntimeHelperMakeSlice: RuntimeHelperCategorySlice,
24
- RuntimeHelperAppend: RuntimeHelperCategorySlice,
25
- RuntimeHelperMakeMap: RuntimeHelperCategoryMap,
26
- RuntimeHelperMapGet: RuntimeHelperCategoryMap,
27
- RuntimeHelperNewError: RuntimeHelperCategoryError,
28
- RuntimeHelperRegisterStructType: RuntimeHelperCategoryType,
29
- RuntimeHelperTypeAssert: RuntimeHelperCategoryType,
30
- RuntimeHelperTypedNil: RuntimeHelperCategoryType,
31
- RuntimeHelperInterfaceValue: RuntimeHelperCategoryType,
32
- RuntimeHelperFunctionValue: RuntimeHelperCategoryType,
33
- RuntimeHelperNamedFunction: RuntimeHelperCategoryType,
34
- RuntimeHelperGenericZero: RuntimeHelperCategoryType,
35
- RuntimeHelperCallGenericMethod: RuntimeHelperCategoryType,
36
- RuntimeHelperMakeChannel: RuntimeHelperCategoryChannel,
37
- RuntimeHelperSelectStatement: RuntimeHelperCategoryChannel,
38
- RuntimeHelperDisposableStack: RuntimeHelperCategoryDefer,
39
- RuntimeHelperAsyncDisposableStack: RuntimeHelperCategoryDefer,
40
- RuntimeHelperGetHostRuntime: RuntimeHelperCategoryHost,
41
- RuntimeHelperWriteHostStdoutText: RuntimeHelperCategoryHost,
42
- RuntimeHelperWriteHostStderrText: RuntimeHelperCategoryHost,
43
- RuntimeHelperIsMainScript: RuntimeHelperCategoryHost,
14
+ RuntimeHelperPrintln: RuntimeHelperCategoryBuiltin,
15
+ RuntimeHelperPrint: RuntimeHelperCategoryBuiltin,
16
+ RuntimeHelperInt: RuntimeHelperCategoryBuiltin,
17
+ RuntimeHelperUint: RuntimeHelperCategoryBuiltin,
18
+ RuntimeHelperByte: RuntimeHelperCategoryBuiltin,
19
+ RuntimeHelperVarRef: RuntimeHelperCategoryVarRef,
20
+ RuntimeHelperUnref: RuntimeHelperCategoryVarRef,
21
+ RuntimeHelperUnsupportedPointerRef: RuntimeHelperCategoryVarRef,
22
+ RuntimeHelperAssignStruct: RuntimeHelperCategoryValue,
23
+ RuntimeHelperMarkAsStructValue: RuntimeHelperCategoryValue,
24
+ RuntimeHelperPointerValue: RuntimeHelperCategoryValue,
25
+ RuntimeHelperMakeSlice: RuntimeHelperCategorySlice,
26
+ RuntimeHelperAppend: RuntimeHelperCategorySlice,
27
+ RuntimeHelperIndexAddress: RuntimeHelperCategorySlice,
28
+ RuntimeHelperMakeMap: RuntimeHelperCategoryMap,
29
+ RuntimeHelperMapGet: RuntimeHelperCategoryMap,
30
+ RuntimeHelperNewError: RuntimeHelperCategoryError,
31
+ RuntimeHelperRegisterStructType: RuntimeHelperCategoryType,
32
+ RuntimeHelperTypeAssert: RuntimeHelperCategoryType,
33
+ RuntimeHelperTypedNil: RuntimeHelperCategoryType,
34
+ RuntimeHelperInterfaceValue: RuntimeHelperCategoryType,
35
+ RuntimeHelperNamedValueInterfaceValue: RuntimeHelperCategoryType,
36
+ RuntimeHelperFunctionValue: RuntimeHelperCategoryType,
37
+ RuntimeHelperNamedFunction: RuntimeHelperCategoryType,
38
+ RuntimeHelperGenericZero: RuntimeHelperCategoryType,
39
+ RuntimeHelperCallGenericMethod: RuntimeHelperCategoryType,
40
+ RuntimeHelperMakeChannel: RuntimeHelperCategoryChannel,
41
+ RuntimeHelperSelectStatement: RuntimeHelperCategoryChannel,
42
+ RuntimeHelperDisposableStack: RuntimeHelperCategoryDefer,
43
+ RuntimeHelperAsyncDisposableStack: RuntimeHelperCategoryDefer,
44
+ RuntimeHelperGetHostRuntime: RuntimeHelperCategoryHost,
45
+ RuntimeHelperWriteHostStdoutText: RuntimeHelperCategoryHost,
46
+ RuntimeHelperWriteHostStderrText: RuntimeHelperCategoryHost,
47
+ RuntimeHelperIsMainScript: RuntimeHelperCategoryHost,
44
48
  }
45
49
  for helper, category := range wantHelpers {
46
50
  contract, ok := owner.Helper(helper)
@@ -88,3 +92,13 @@ func TestCompileServiceSharesRuntimeContractOwner(t *testing.T) {
88
92
  t.Fatalf("qualified println helper = %q, want $.println", got)
89
93
  }
90
94
  }
95
+
96
+ func TestRuntimeContractHelpersAreExportedByBuiltinRuntime(t *testing.T) {
97
+ missing, err := NewRuntimeContractOwner().MissingRuntimeExports()
98
+ if err != nil {
99
+ t.Fatal(err.Error())
100
+ }
101
+ if len(missing) != 0 {
102
+ t.Fatalf("runtime helper exports missing from gs/builtin: %v", missing)
103
+ }
104
+ }
@@ -12,6 +12,8 @@ type SemanticModel struct {
12
12
  addressTaken map[types.Object]bool
13
13
  needsVarRef map[types.Object]bool
14
14
  functions map[*types.Func]*semanticFunction
15
+ functionsByFullName map[string]*semanticFunction
16
+ functionLookupMisses map[*types.Func]bool
15
17
  types map[*types.Named]*semanticType
16
18
  values map[types.Object]*semanticValue
17
19
  generatedImports map[string]map[string]bool
@@ -64,12 +66,13 @@ type semanticField struct {
64
66
  }
65
67
 
66
68
  type semanticValue struct {
67
- name string
68
- object types.Object
69
- typ types.Type
70
- zeroValueKind string
71
- position sourcePosition
72
- topLevel bool
69
+ name string
70
+ object types.Object
71
+ typ types.Type
72
+ zeroValueKind string
73
+ position sourcePosition
74
+ topLevel bool
75
+ asyncCompatibleFunction bool
73
76
  }
74
77
 
75
78
  type semanticFunction struct {
@@ -79,6 +82,7 @@ type semanticFunction struct {
79
82
  receiver *types.Named
80
83
  receiverPointer bool
81
84
  position sourcePosition
85
+ hasBody bool
82
86
  async bool
83
87
  asyncReasons []string
84
88
  calls map[*types.Func]bool
@@ -91,6 +95,21 @@ type semanticInterfaceImplementation struct {
91
95
  asyncMethods map[string]bool
92
96
  }
93
97
 
98
+ type semanticInterfaceImplementationGraphEntry struct {
99
+ typ *types.Named
100
+ iface *types.Named
101
+ pointer bool
102
+ ifaceMethods map[string]*types.Func
103
+ implMethods map[string]*types.Func
104
+ }
105
+
106
+ type semanticImplementationMethodSet struct {
107
+ typ *types.Named
108
+ receiver types.Type
109
+ pointer bool
110
+ methods map[string]*types.Func
111
+ }
112
+
94
113
  type semanticTypeAssertion struct {
95
114
  position sourcePosition
96
115
  source types.Type