goscript 0.0.84 → 0.1.1

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 (428) hide show
  1. package/README.md +267 -243
  2. package/cmd/goscript/cmd-test.go +193 -0
  3. package/cmd/goscript/cmd-test_test.go +76 -0
  4. package/cmd/goscript/cmd_compile.go +70 -69
  5. package/cmd/goscript/cmd_compile_test.go +79 -0
  6. package/cmd/goscript/main.go +11 -5
  7. package/compiler/build-flags.go +38 -0
  8. package/compiler/compile-request.go +220 -0
  9. package/compiler/compiler.go +16 -1336
  10. package/compiler/compliance_test.go +188 -0
  11. package/compiler/config.go +6 -13
  12. package/compiler/diagnostic.go +70 -0
  13. package/compiler/gotest/owner.go +24 -0
  14. package/compiler/gotest/package-result.go +67 -0
  15. package/compiler/gotest/request.go +145 -0
  16. package/compiler/gotest/result.go +28 -0
  17. package/compiler/gotest/runner.go +588 -0
  18. package/compiler/gotest/runner_test.go +627 -0
  19. package/compiler/gotest/test.go +9 -0
  20. package/compiler/index.test.ts +28 -28
  21. package/compiler/index.ts +40 -72
  22. package/compiler/lowered-program.go +184 -0
  23. package/compiler/lowering.go +8072 -0
  24. package/compiler/override-facts.go +307 -0
  25. package/compiler/override-registry.go +283 -0
  26. package/compiler/override-registry_test.go +254 -0
  27. package/compiler/package-graph.go +254 -0
  28. package/compiler/package-graph_test.go +316 -0
  29. package/compiler/package-test-function.go +9 -0
  30. package/compiler/package-test-graph-package.go +40 -0
  31. package/compiler/package-test-graph-variant.go +105 -0
  32. package/compiler/package-test-graph.go +117 -0
  33. package/compiler/package-test-graph_test.go +144 -0
  34. package/compiler/result.go +13 -0
  35. package/compiler/runtime-contract.go +439 -0
  36. package/compiler/runtime-contract_test.go +104 -0
  37. package/compiler/semantic-model-types.go +113 -0
  38. package/compiler/semantic-model.go +1422 -0
  39. package/compiler/semantic-model_test.go +471 -0
  40. package/compiler/service.go +133 -0
  41. package/compiler/skeleton_test.go +1775 -0
  42. package/compiler/tsworkspace/owner.go +334 -0
  43. package/compiler/tsworkspace/owner_test.go +93 -0
  44. package/compiler/tsworkspace/result.go +17 -0
  45. package/compiler/typescript-emitter.go +1040 -0
  46. package/compiler/wasm/compile.go +2 -3
  47. package/compiler/wasm/compile_test.go +79 -0
  48. package/compiler/wasm_api.go +140 -124
  49. package/dist/compiler/index.d.ts +1 -3
  50. package/dist/compiler/index.js +31 -55
  51. package/dist/compiler/index.js.map +1 -1
  52. package/dist/gs/builtin/builtin.d.ts +33 -2
  53. package/dist/gs/builtin/builtin.js +217 -6
  54. package/dist/gs/builtin/builtin.js.map +1 -1
  55. package/dist/gs/builtin/channel.d.ts +11 -3
  56. package/dist/gs/builtin/channel.js +12 -0
  57. package/dist/gs/builtin/channel.js.map +1 -1
  58. package/dist/gs/builtin/hostio.d.ts +15 -1
  59. package/dist/gs/builtin/hostio.js +134 -49
  60. package/dist/gs/builtin/hostio.js.map +1 -1
  61. package/dist/gs/builtin/index.d.ts +1 -0
  62. package/dist/gs/builtin/index.js +1 -0
  63. package/dist/gs/builtin/index.js.map +1 -1
  64. package/dist/gs/builtin/slice.d.ts +23 -3
  65. package/dist/gs/builtin/slice.js +216 -44
  66. package/dist/gs/builtin/slice.js.map +1 -1
  67. package/dist/gs/builtin/type.d.ts +16 -2
  68. package/dist/gs/builtin/type.js +134 -21
  69. package/dist/gs/builtin/type.js.map +1 -1
  70. package/dist/gs/builtin/varRef.d.ts +5 -0
  71. package/dist/gs/builtin/varRef.js +23 -0
  72. package/dist/gs/builtin/varRef.js.map +1 -1
  73. package/dist/gs/bytes/buffer.gs.js +48 -44
  74. package/dist/gs/bytes/buffer.gs.js.map +1 -1
  75. package/dist/gs/bytes/bytes.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/context/context.d.ts +5 -4
  79. package/dist/gs/context/context.js +10 -10
  80. package/dist/gs/context/context.js.map +1 -1
  81. package/dist/gs/crypto/internal/fips140deps/byteorder/index.d.ts +1 -0
  82. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js +2 -0
  83. package/dist/gs/crypto/internal/fips140deps/byteorder/index.js.map +1 -0
  84. package/dist/gs/crypto/internal/fips140deps/godebug/index.d.ts +1 -0
  85. package/dist/gs/crypto/internal/fips140deps/godebug/index.js +2 -0
  86. package/dist/gs/crypto/internal/fips140deps/godebug/index.js.map +1 -0
  87. package/dist/gs/crypto/rand/index.d.ts +5 -0
  88. package/dist/gs/crypto/rand/index.js +77 -0
  89. package/dist/gs/crypto/rand/index.js.map +1 -0
  90. package/dist/gs/embed/index.d.ts +7 -0
  91. package/dist/gs/embed/index.js +16 -0
  92. package/dist/gs/embed/index.js.map +1 -0
  93. package/dist/gs/encoding/json/index.d.ts +4 -0
  94. package/dist/gs/encoding/json/index.js +178 -0
  95. package/dist/gs/encoding/json/index.js.map +1 -0
  96. package/dist/gs/errors/errors.d.ts +4 -0
  97. package/dist/gs/errors/errors.js +81 -0
  98. package/dist/gs/errors/errors.js.map +1 -1
  99. package/dist/gs/fmt/fmt.d.ts +4 -4
  100. package/dist/gs/fmt/fmt.js +42 -11
  101. package/dist/gs/fmt/fmt.js.map +1 -1
  102. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.d.ts +36 -1
  103. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js +212 -2
  104. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/index.js.map +1 -1
  105. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.d.ts +189 -0
  106. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js +825 -0
  107. package/dist/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.js.map +1 -0
  108. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.d.ts +163 -0
  109. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js +449 -0
  110. package/dist/gs/github.com/aperturerobotics/starpc/srpc/index.js.map +1 -0
  111. package/dist/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/browser.js.map +1 -1
  112. package/dist/gs/github.com/klauspost/compress/internal/le/index.d.ts +9 -0
  113. package/dist/gs/github.com/klauspost/compress/internal/le/index.js +71 -0
  114. package/dist/gs/github.com/klauspost/compress/internal/le/index.js.map +1 -0
  115. package/dist/gs/github.com/pkg/errors/errors.js.map +1 -1
  116. package/dist/gs/github.com/pkg/errors/stack.js.map +1 -1
  117. package/dist/gs/go/internal/scannerhooks/index.d.ts +3 -0
  118. package/dist/gs/go/internal/scannerhooks/index.js +5 -0
  119. package/dist/gs/go/internal/scannerhooks/index.js.map +1 -0
  120. package/dist/gs/go/scanner/index.d.ts +42 -0
  121. package/dist/gs/go/scanner/index.js +155 -0
  122. package/dist/gs/go/scanner/index.js.map +1 -0
  123. package/dist/gs/go/token/index.d.ts +187 -0
  124. package/dist/gs/go/token/index.js +578 -0
  125. package/dist/gs/go/token/index.js.map +1 -0
  126. package/dist/gs/internal/abi/index.d.ts +4 -0
  127. package/dist/gs/internal/abi/index.js +10 -0
  128. package/dist/gs/internal/abi/index.js.map +1 -1
  129. package/dist/gs/internal/bytealg/index.d.ts +2 -0
  130. package/dist/gs/internal/bytealg/index.js +14 -0
  131. package/dist/gs/internal/bytealg/index.js.map +1 -1
  132. package/dist/gs/internal/byteorder/index.d.ts +8 -2
  133. package/dist/gs/internal/byteorder/index.js +56 -25
  134. package/dist/gs/internal/byteorder/index.js.map +1 -1
  135. package/dist/gs/internal/godebug/index.d.ts +12 -0
  136. package/dist/gs/internal/godebug/index.js +30 -0
  137. package/dist/gs/internal/godebug/index.js.map +1 -0
  138. package/dist/gs/io/fs/fs.js.map +1 -1
  139. package/dist/gs/io/fs/index.d.ts +1 -0
  140. package/dist/gs/io/fs/index.js +1 -0
  141. package/dist/gs/io/fs/index.js.map +1 -1
  142. package/dist/gs/io/fs/readdir.js.map +1 -1
  143. package/dist/gs/io/fs/readfile.js.map +1 -1
  144. package/dist/gs/io/fs/readlink.d.ts +8 -0
  145. package/dist/gs/io/fs/readlink.js +64 -0
  146. package/dist/gs/io/fs/readlink.js.map +1 -0
  147. package/dist/gs/io/fs/stat.js.map +1 -1
  148. package/dist/gs/io/fs/sub.js.map +1 -1
  149. package/dist/gs/io/fs/walk.d.ts +3 -3
  150. package/dist/gs/io/fs/walk.js +7 -7
  151. package/dist/gs/io/fs/walk.js.map +1 -1
  152. package/dist/gs/io/io.d.ts +40 -6
  153. package/dist/gs/io/io.js +151 -26
  154. package/dist/gs/io/io.js.map +1 -1
  155. package/dist/gs/maps/iter.d.ts +3 -3
  156. package/dist/gs/maps/iter.js +3 -3
  157. package/dist/gs/maps/iter.js.map +1 -1
  158. package/dist/gs/maps/maps.d.ts +2 -2
  159. package/dist/gs/maps/maps.js +1 -1
  160. package/dist/gs/maps/maps.js.map +1 -1
  161. package/dist/gs/math/bits/index.d.ts +13 -4
  162. package/dist/gs/math/bits/index.js +66 -34
  163. package/dist/gs/math/bits/index.js.map +1 -1
  164. package/dist/gs/math/const.gs.d.ts +5 -5
  165. package/dist/gs/math/const.gs.js +4 -4
  166. package/dist/gs/math/const.gs.js.map +1 -1
  167. package/dist/gs/mime/index.d.ts +1 -0
  168. package/dist/gs/mime/index.js +50 -0
  169. package/dist/gs/mime/index.js.map +1 -0
  170. package/dist/gs/net/http/httptest/index.d.ts +11 -0
  171. package/dist/gs/net/http/httptest/index.js +21 -0
  172. package/dist/gs/net/http/httptest/index.js.map +1 -0
  173. package/dist/gs/net/http/index.d.ts +27 -0
  174. package/dist/gs/net/http/index.js +61 -0
  175. package/dist/gs/net/http/index.js.map +1 -0
  176. package/dist/gs/os/dir_unix.gs.js +2 -2
  177. package/dist/gs/os/dir_unix.gs.js.map +1 -1
  178. package/dist/gs/os/error.gs.js +2 -4
  179. package/dist/gs/os/error.gs.js.map +1 -1
  180. package/dist/gs/os/exec.gs.js.map +1 -1
  181. package/dist/gs/os/exec_posix.gs.js.map +1 -1
  182. package/dist/gs/os/rawconn_js.gs.js.map +1 -1
  183. package/dist/gs/os/root_js.gs.js.map +1 -1
  184. package/dist/gs/os/tempfile.gs.js +66 -9
  185. package/dist/gs/os/tempfile.gs.js.map +1 -1
  186. package/dist/gs/os/types.gs.js.map +1 -1
  187. package/dist/gs/os/types_js.gs.js +9 -9
  188. package/dist/gs/os/types_js.gs.js.map +1 -1
  189. package/dist/gs/os/types_unix.gs.js.map +1 -1
  190. package/dist/gs/path/filepath/match.js +165 -3
  191. package/dist/gs/path/filepath/match.js.map +1 -1
  192. package/dist/gs/path/filepath/path.d.ts +3 -1
  193. package/dist/gs/path/filepath/path.js +133 -4
  194. package/dist/gs/path/filepath/path.js.map +1 -1
  195. package/dist/gs/path/match.js.map +1 -1
  196. package/dist/gs/path/path.d.ts +4 -1
  197. package/dist/gs/path/path.js +16 -4
  198. package/dist/gs/path/path.js.map +1 -1
  199. package/dist/gs/reflect/index.d.ts +3 -3
  200. package/dist/gs/reflect/index.js +2 -2
  201. package/dist/gs/reflect/index.js.map +1 -1
  202. package/dist/gs/reflect/map.js +3 -0
  203. package/dist/gs/reflect/map.js.map +1 -1
  204. package/dist/gs/reflect/type.d.ts +9 -5
  205. package/dist/gs/reflect/type.js +233 -21
  206. package/dist/gs/reflect/type.js.map +1 -1
  207. package/dist/gs/reflect/types.js.map +1 -1
  208. package/dist/gs/reflect/visiblefields.js.map +1 -1
  209. package/dist/gs/runtime/debug/index.d.ts +2 -0
  210. package/dist/gs/runtime/debug/index.js +8 -0
  211. package/dist/gs/runtime/debug/index.js.map +1 -0
  212. package/dist/gs/runtime/runtime.d.ts +35 -3
  213. package/dist/gs/runtime/runtime.js +72 -0
  214. package/dist/gs/runtime/runtime.js.map +1 -1
  215. package/dist/gs/slices/slices.d.ts +24 -5
  216. package/dist/gs/slices/slices.js +214 -5
  217. package/dist/gs/slices/slices.js.map +1 -1
  218. package/dist/gs/sort/slice.gs.d.ts +3 -3
  219. package/dist/gs/sort/slice.gs.js +6 -6
  220. package/dist/gs/sort/slice.gs.js.map +1 -1
  221. package/dist/gs/sort/sort.gs.d.ts +4 -4
  222. package/dist/gs/sort/sort.gs.js +11 -8
  223. package/dist/gs/sort/sort.gs.js.map +1 -1
  224. package/dist/gs/strconv/atoi.gs.js.map +1 -1
  225. package/dist/gs/strconv/quote.gs.js.map +1 -1
  226. package/dist/gs/strings/builder.d.ts +1 -1
  227. package/dist/gs/strings/builder.js +3 -2
  228. package/dist/gs/strings/builder.js.map +1 -1
  229. package/dist/gs/strings/reader.js.map +1 -1
  230. package/dist/gs/strings/replace.js.map +1 -1
  231. package/dist/gs/sync/atomic/type.gs.d.ts +9 -8
  232. package/dist/gs/sync/atomic/type.gs.js +0 -2
  233. package/dist/gs/sync/atomic/type.gs.js.map +1 -1
  234. package/dist/gs/sync/atomic/value.gs.js.map +1 -1
  235. package/dist/gs/sync/sync.d.ts +3 -0
  236. package/dist/gs/sync/sync.js +39 -0
  237. package/dist/gs/sync/sync.js.map +1 -1
  238. package/dist/gs/syscall/constants.d.ts +36 -24
  239. package/dist/gs/syscall/constants.js +12 -0
  240. package/dist/gs/syscall/constants.js.map +1 -1
  241. package/dist/gs/syscall/errors.d.ts +2 -0
  242. package/dist/gs/syscall/errors.js +8 -0
  243. package/dist/gs/syscall/errors.js.map +1 -1
  244. package/dist/gs/syscall/fs.d.ts +43 -0
  245. package/dist/gs/syscall/fs.js +102 -0
  246. package/dist/gs/syscall/fs.js.map +1 -1
  247. package/dist/gs/syscall/js/index.d.ts +90 -0
  248. package/dist/gs/syscall/js/index.js +375 -0
  249. package/dist/gs/syscall/js/index.js.map +1 -0
  250. package/dist/gs/syscall/types.d.ts +22 -0
  251. package/dist/gs/syscall/types.js +45 -1
  252. package/dist/gs/syscall/types.js.map +1 -1
  253. package/dist/gs/testing/index.d.ts +1 -0
  254. package/dist/gs/testing/index.js +2 -0
  255. package/dist/gs/testing/index.js.map +1 -0
  256. package/dist/gs/testing/testing.d.ts +77 -0
  257. package/dist/gs/testing/testing.js +301 -0
  258. package/dist/gs/testing/testing.js.map +1 -0
  259. package/dist/gs/time/time.d.ts +41 -4
  260. package/dist/gs/time/time.js +205 -36
  261. package/dist/gs/time/time.js.map +1 -1
  262. package/dist/gs/unicode/unicode.d.ts +23 -1
  263. package/dist/gs/unicode/unicode.js +79 -10
  264. package/dist/gs/unicode/unicode.js.map +1 -1
  265. package/dist/gs/unicode/utf8/utf8.d.ts +4 -4
  266. package/dist/gs/unicode/utf8/utf8.js +24 -11
  267. package/dist/gs/unicode/utf8/utf8.js.map +1 -1
  268. package/dist/gs/unique/index.d.ts +11 -0
  269. package/dist/gs/unique/index.js +71 -0
  270. package/dist/gs/unique/index.js.map +1 -0
  271. package/go.mod +2 -2
  272. package/go.sum +9 -0
  273. package/gs/builtin/builtin.ts +266 -8
  274. package/gs/builtin/channel.ts +22 -0
  275. package/gs/builtin/hostio.test.ts +177 -0
  276. package/gs/builtin/hostio.ts +171 -56
  277. package/gs/builtin/index.ts +1 -0
  278. package/gs/builtin/runtime-contract.test.ts +356 -0
  279. package/gs/builtin/slice.ts +259 -50
  280. package/gs/builtin/type.ts +188 -30
  281. package/gs/builtin/varRef.ts +38 -1
  282. package/gs/bytes/buffer.gs.ts +48 -44
  283. package/gs/bytes/meta.json +8 -3
  284. package/gs/bytes/reader.gs.ts +20 -19
  285. package/gs/context/context.test.ts +41 -0
  286. package/gs/context/context.ts +22 -26
  287. package/gs/crypto/internal/fips140deps/byteorder/index.ts +1 -0
  288. package/gs/crypto/internal/fips140deps/godebug/index.ts +1 -0
  289. package/gs/crypto/rand/index.test.ts +32 -0
  290. package/gs/crypto/rand/index.ts +90 -0
  291. package/gs/crypto/rand/meta.json +5 -0
  292. package/gs/embed/index.ts +20 -0
  293. package/gs/embed/meta.json +5 -0
  294. package/gs/encoding/json/index.test.ts +79 -0
  295. package/gs/encoding/json/index.ts +210 -0
  296. package/gs/errors/errors.test.ts +82 -0
  297. package/gs/errors/errors.ts +104 -0
  298. package/gs/fmt/fmt.ts +56 -16
  299. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.test.ts +95 -0
  300. package/gs/github.com/aperturerobotics/protobuf-go-lite/index.ts +300 -2
  301. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.test.ts +159 -0
  302. package/gs/github.com/aperturerobotics/protobuf-go-lite/json/index.ts +1005 -0
  303. package/gs/github.com/aperturerobotics/starpc/srpc/index.ts +719 -0
  304. package/gs/github.com/aperturerobotics/starpc/srpc/meta.json +40 -0
  305. package/gs/github.com/aperturerobotics/wasivm/wazero/kernel/runtime/browser/meta.json +3 -1
  306. package/gs/github.com/klauspost/compress/internal/le/index.test.ts +36 -0
  307. package/gs/github.com/klauspost/compress/internal/le/index.ts +114 -0
  308. package/gs/go/internal/scannerhooks/index.test.ts +14 -0
  309. package/gs/go/internal/scannerhooks/index.ts +9 -0
  310. package/gs/go/scanner/index.test.ts +72 -0
  311. package/gs/go/scanner/index.ts +204 -0
  312. package/gs/go/token/index.test.ts +67 -0
  313. package/gs/go/token/index.ts +686 -0
  314. package/gs/internal/abi/index.test.ts +18 -0
  315. package/gs/internal/abi/index.ts +14 -0
  316. package/gs/internal/bytealg/index.test.ts +18 -0
  317. package/gs/internal/bytealg/index.ts +16 -0
  318. package/gs/internal/byteorder/index.test.ts +39 -0
  319. package/gs/internal/byteorder/index.ts +100 -27
  320. package/gs/internal/godebug/index.test.ts +16 -0
  321. package/gs/internal/godebug/index.ts +35 -0
  322. package/gs/io/fs/index.ts +1 -0
  323. package/gs/io/fs/meta.json +5 -0
  324. package/gs/io/fs/readlink.test.ts +43 -0
  325. package/gs/io/fs/readlink.ts +77 -0
  326. package/gs/io/fs/walk.test.ts +61 -0
  327. package/gs/io/fs/walk.ts +9 -9
  328. package/gs/io/io.ts +174 -31
  329. package/gs/io/meta.json +10 -2
  330. package/gs/maps/iter.ts +12 -6
  331. package/gs/maps/maps.ts +8 -6
  332. package/gs/math/bits/index.ts +103 -47
  333. package/gs/math/const.gs.test.ts +11 -5
  334. package/gs/math/const.gs.ts +5 -6
  335. package/gs/mime/index.ts +54 -0
  336. package/gs/net/http/httptest/index.ts +25 -0
  337. package/gs/net/http/index.test.ts +20 -0
  338. package/gs/net/http/index.ts +81 -0
  339. package/gs/os/dir_unix.gs.ts +2 -3
  340. package/gs/os/file_unix_js.test.ts +50 -0
  341. package/gs/os/meta.json +1 -2
  342. package/gs/os/tempfile.gs.test.ts +85 -0
  343. package/gs/os/tempfile.gs.ts +71 -11
  344. package/gs/os/types_js.gs.ts +11 -11
  345. package/gs/path/filepath/match.test.ts +31 -12
  346. package/gs/path/filepath/match.ts +178 -3
  347. package/gs/path/filepath/path.test.ts +25 -0
  348. package/gs/path/filepath/path.ts +159 -5
  349. package/gs/path/path.ts +20 -5
  350. package/gs/reflect/index.ts +2 -1
  351. package/gs/reflect/map.test.ts +19 -0
  352. package/gs/reflect/map.ts +4 -0
  353. package/gs/reflect/type.ts +298 -29
  354. package/gs/reflect/typefor.test.ts +75 -0
  355. package/gs/runtime/debug/index.test.ts +24 -0
  356. package/gs/runtime/debug/index.ts +8 -0
  357. package/gs/runtime/runtime.test.ts +19 -0
  358. package/gs/runtime/runtime.ts +98 -3
  359. package/gs/slices/slices.test.ts +94 -0
  360. package/gs/slices/slices.ts +245 -5
  361. package/gs/sort/meta.json +7 -0
  362. package/gs/sort/slice.gs.ts +16 -7
  363. package/gs/sort/sort.gs.ts +16 -13
  364. package/gs/strings/builder.ts +4 -3
  365. package/gs/sync/atomic/type.gs.ts +13 -14
  366. package/gs/sync/meta.json +3 -1
  367. package/gs/sync/sync.test.ts +36 -0
  368. package/gs/sync/sync.ts +39 -0
  369. package/gs/syscall/constants.ts +39 -24
  370. package/gs/syscall/errors.ts +10 -0
  371. package/gs/syscall/fs.ts +195 -0
  372. package/gs/syscall/js/index.ts +458 -0
  373. package/gs/syscall/js/meta.json +4 -0
  374. package/gs/syscall/net.test.ts +85 -0
  375. package/gs/syscall/types.ts +56 -0
  376. package/gs/testing/index.ts +1 -0
  377. package/gs/testing/meta.json +5 -0
  378. package/gs/testing/testing.test.ts +90 -0
  379. package/gs/testing/testing.ts +382 -0
  380. package/gs/time/time.test.ts +106 -0
  381. package/gs/time/time.ts +278 -57
  382. package/gs/unicode/unicode.test.ts +25 -0
  383. package/gs/unicode/unicode.ts +119 -9
  384. package/gs/unicode/utf8/utf8.test.ts +13 -0
  385. package/gs/unicode/utf8/utf8.ts +28 -16
  386. package/gs/unique/index.ts +91 -0
  387. package/package.json +14 -13
  388. package/compiler/analysis.go +0 -3475
  389. package/compiler/analysis_test.go +0 -338
  390. package/compiler/assignment.go +0 -580
  391. package/compiler/builtin_test.go +0 -92
  392. package/compiler/code-writer.go +0 -115
  393. package/compiler/compiler_test.go +0 -149
  394. package/compiler/composite-lit.go +0 -779
  395. package/compiler/config_test.go +0 -62
  396. package/compiler/constraint.go +0 -86
  397. package/compiler/decl.go +0 -801
  398. package/compiler/expr-call-async.go +0 -188
  399. package/compiler/expr-call-builtins.go +0 -208
  400. package/compiler/expr-call-helpers.go +0 -382
  401. package/compiler/expr-call-make.go +0 -318
  402. package/compiler/expr-call-type-conversion.go +0 -520
  403. package/compiler/expr-call.go +0 -413
  404. package/compiler/expr-selector.go +0 -343
  405. package/compiler/expr-star.go +0 -82
  406. package/compiler/expr-type.go +0 -442
  407. package/compiler/expr-value.go +0 -89
  408. package/compiler/expr.go +0 -773
  409. package/compiler/field.go +0 -183
  410. package/compiler/gs_dependencies_test.go +0 -298
  411. package/compiler/lit.go +0 -322
  412. package/compiler/output.go +0 -72
  413. package/compiler/primitive.go +0 -149
  414. package/compiler/protobuf.go +0 -697
  415. package/compiler/sanitize.go +0 -100
  416. package/compiler/spec-struct.go +0 -995
  417. package/compiler/spec-value.go +0 -540
  418. package/compiler/spec.go +0 -725
  419. package/compiler/stmt-assign.go +0 -664
  420. package/compiler/stmt-for.go +0 -266
  421. package/compiler/stmt-range.go +0 -475
  422. package/compiler/stmt-select.go +0 -262
  423. package/compiler/stmt-type-switch.go +0 -147
  424. package/compiler/stmt.go +0 -1308
  425. package/compiler/type-assert.go +0 -386
  426. package/compiler/type-info.go +0 -156
  427. package/compiler/type-utils.go +0 -207
  428. package/compiler/type.go +0 -892
@@ -0,0 +1,686 @@
1
+ import * as $ from '@goscript/builtin/index.js'
2
+
3
+ export type Token = number
4
+ export type Pos = number
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
98
+ export const NoPos: Pos = 0
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
+
197
+ export class Position {
198
+ public get Filename(): string {
199
+ return this._fields.Filename.value
200
+ }
201
+
202
+ public set Filename(value: string) {
203
+ this._fields.Filename.value = value
204
+ }
205
+
206
+ public get Offset(): number {
207
+ return this._fields.Offset.value
208
+ }
209
+
210
+ public set Offset(value: number) {
211
+ this._fields.Offset.value = value
212
+ }
213
+
214
+ public get Line(): number {
215
+ return this._fields.Line.value
216
+ }
217
+
218
+ public set Line(value: number) {
219
+ this._fields.Line.value = value
220
+ }
221
+
222
+ public get Column(): number {
223
+ return this._fields.Column.value
224
+ }
225
+
226
+ public set Column(value: number) {
227
+ this._fields.Column.value = value
228
+ }
229
+
230
+ public _fields: {
231
+ Filename: $.VarRef<string>
232
+ Offset: $.VarRef<number>
233
+ Line: $.VarRef<number>
234
+ Column: $.VarRef<number>
235
+ }
236
+
237
+ constructor(
238
+ init?: Partial<{
239
+ Filename: string
240
+ Offset: number
241
+ Line: number
242
+ Column: number
243
+ }>,
244
+ ) {
245
+ this._fields = {
246
+ Filename: $.varRef(init?.Filename ?? ''),
247
+ Offset: $.varRef(init?.Offset ?? 0),
248
+ Line: $.varRef(init?.Line ?? 0),
249
+ Column: $.varRef(init?.Column ?? 0),
250
+ }
251
+ }
252
+
253
+ public clone(): Position {
254
+ return $.markAsStructValue(
255
+ new Position({
256
+ Filename: this.Filename,
257
+ Offset: this.Offset,
258
+ Line: this.Line,
259
+ Column: this.Column,
260
+ }),
261
+ )
262
+ }
263
+
264
+ public IsValid(): boolean {
265
+ return Position_IsValid(this)
266
+ }
267
+
268
+ public String(): string {
269
+ return Position_String(this)
270
+ }
271
+
272
+ static __typeInfo = $.registerStructType(
273
+ 'go/token.Position',
274
+ new Position(),
275
+ [
276
+ {
277
+ name: 'IsValid',
278
+ args: [],
279
+ returns: [{ type: { kind: $.TypeKind.Basic, name: 'bool' } }],
280
+ },
281
+ {
282
+ name: 'String',
283
+ args: [],
284
+ returns: [{ type: { kind: $.TypeKind.Basic, name: 'string' } }],
285
+ },
286
+ ],
287
+ Position,
288
+ {
289
+ Filename: { kind: $.TypeKind.Basic, name: 'string' },
290
+ Offset: { kind: $.TypeKind.Basic, name: 'int' },
291
+ Line: { kind: $.TypeKind.Basic, name: 'int' },
292
+ Column: { kind: $.TypeKind.Basic, name: 'int' },
293
+ },
294
+ )
295
+ }
296
+
297
+ export function Position_IsValid(pos: Position): boolean {
298
+ return pos.Line > 0
299
+ }
300
+
301
+ export function Position_String(pos: Position): string {
302
+ let text = pos.Filename
303
+ if (!Position_IsValid(pos)) {
304
+ return text === '' ? '-' : text
305
+ }
306
+ if (text !== '') {
307
+ text += ':'
308
+ }
309
+ text += `${pos.Line}`
310
+ if (pos.Column > 0) {
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 ((this.linesValue.length === 0 || last < offset) && offset < this.sizeValue) {
372
+ this.linesValue.push(offset)
373
+ }
374
+ }
375
+
376
+ public MergeLine(line: number): void {
377
+ if (line < 1 || line >= this.linesValue.length) {
378
+ $.panic(`invalid line number ${line}`)
379
+ }
380
+ this.linesValue.splice(line, 1)
381
+ }
382
+
383
+ public Lines(): $.Slice<number> {
384
+ return $.arrayToSlice(this.linesValue.slice())
385
+ }
386
+
387
+ public SetLines(lines: $.Slice<number>): boolean {
388
+ const next = $.asArray(lines)
389
+ for (let i = 0; i < next.length; i++) {
390
+ if ((i > 0 && next[i] <= next[i - 1]) || this.sizeValue <= next[i]) {
391
+ return false
392
+ }
393
+ }
394
+ this.linesValue = next.slice()
395
+ return true
396
+ }
397
+
398
+ public SetLinesForContent(content: $.Slice<number>): void {
399
+ const lines: number[] = []
400
+ let line = 0
401
+ for (let offset = 0; offset < $.len(content); offset++) {
402
+ if (line >= 0) {
403
+ lines.push(line)
404
+ }
405
+ line = -1
406
+ if (content![offset] === 10) {
407
+ line = offset + 1
408
+ }
409
+ }
410
+ this.linesValue = lines
411
+ }
412
+
413
+ public LineStart(line: number): Pos {
414
+ if (line < 1 || line > this.linesValue.length) {
415
+ $.panic(`invalid line number ${line}`)
416
+ }
417
+ return this.baseValue + this.linesValue[line - 1]
418
+ }
419
+
420
+ public AddLineInfo(offset: number, filename: string, line: number): void {
421
+ this.AddLineColumnInfo(offset, filename, line, 1)
422
+ }
423
+
424
+ public AddLineColumnInfo(
425
+ offset: number,
426
+ filename: string,
427
+ line: number,
428
+ column: number,
429
+ ): void {
430
+ const last = this.infosValue[this.infosValue.length - 1]
431
+ if ((this.infosValue.length === 0 || last.Offset < offset) && offset < this.sizeValue) {
432
+ this.infosValue.push({ Offset: offset, Filename: filename, Line: line, Column: column })
433
+ }
434
+ }
435
+
436
+ public Pos(offset: number): Pos {
437
+ return this.baseValue + this.fixOffset(offset)
438
+ }
439
+
440
+ public Offset(pos: Pos): number {
441
+ return this.fixOffset(pos - this.baseValue)
442
+ }
443
+
444
+ public Line(pos: Pos): number {
445
+ return this.Position(pos).Line
446
+ }
447
+
448
+ public PositionFor(pos: Pos, adjusted: boolean): Position {
449
+ if (pos === NoPos) {
450
+ return new Position()
451
+ }
452
+ return this.position(pos, adjusted)
453
+ }
454
+
455
+ public Position(pos: Pos): Position {
456
+ return this.PositionFor(pos, true)
457
+ }
458
+
459
+ private fixOffset(offset: number): number {
460
+ if (offset < 0) {
461
+ return 0
462
+ }
463
+ if (offset > this.sizeValue) {
464
+ return this.sizeValue
465
+ }
466
+ return offset
467
+ }
468
+
469
+ private position(pos: Pos, adjusted: boolean): Position {
470
+ const offset = this.fixOffset(pos - this.baseValue)
471
+ let filename = this.nameValue
472
+ let line = 0
473
+ let column = 0
474
+ const lineIndex = searchInts(this.linesValue, offset)
475
+ if (lineIndex >= 0) {
476
+ line = lineIndex + 1
477
+ column = offset - this.linesValue[lineIndex] + 1
478
+ }
479
+ if (adjusted && this.infosValue.length > 0) {
480
+ const infoIndex = searchLineInfos(this.infosValue, offset)
481
+ if (infoIndex >= 0) {
482
+ const info = this.infosValue[infoIndex]
483
+ filename = info.Filename
484
+ const baseLineIndex = searchInts(this.linesValue, info.Offset)
485
+ if (baseLineIndex >= 0) {
486
+ const delta = line - (baseLineIndex + 1)
487
+ line = info.Line + delta
488
+ if (info.Column === 0) {
489
+ column = 0
490
+ } else if (delta === 0) {
491
+ column = info.Column + (offset - info.Offset)
492
+ }
493
+ }
494
+ }
495
+ }
496
+ return $.markAsStructValue(
497
+ new Position({
498
+ Filename: filename,
499
+ Offset: offset,
500
+ Line: line,
501
+ Column: column,
502
+ }),
503
+ )
504
+ }
505
+ }
506
+
507
+ export class FileSet {
508
+ private baseValue: number
509
+ private files: File[]
510
+
511
+ constructor(init?: Partial<{ base: number; files: File[] }>) {
512
+ this.baseValue = init?.base ?? 1
513
+ this.files = init?.files?.slice() ?? []
514
+ }
515
+
516
+ public clone(): FileSet {
517
+ return new FileSet({
518
+ base: this.baseValue,
519
+ files: this.files,
520
+ })
521
+ }
522
+
523
+ public Base(): number {
524
+ return this.baseValue
525
+ }
526
+
527
+ public AddFile(filename: string, base: number, size: number): File {
528
+ if (base < 0) {
529
+ base = this.baseValue
530
+ }
531
+ if (base < this.baseValue) {
532
+ $.panic(`invalid base ${base}`)
533
+ }
534
+ if (size < 0) {
535
+ $.panic(`invalid size ${size}`)
536
+ }
537
+ const file = new File({ name: filename, base, size })
538
+ this.files.push(file)
539
+ this.files.sort((left, right) => left.Base() - right.Base())
540
+ this.baseValue = base + size + 1
541
+ return file
542
+ }
543
+
544
+ public AddExistingFiles(...files: File[]): void {
545
+ for (const file of files) {
546
+ if (file != null && !this.files.includes(file)) {
547
+ this.files.push(file)
548
+ this.baseValue = Math.max(this.baseValue, file.Base() + file.Size() + 1)
549
+ }
550
+ }
551
+ this.files.sort((left, right) => left.Base() - right.Base())
552
+ }
553
+
554
+ public RemoveFile(file: File): void {
555
+ this.files = this.files.filter((candidate) => candidate !== file)
556
+ }
557
+
558
+ public Iterate(yieldFile: (file: File) => boolean): void {
559
+ for (const file of this.files.slice()) {
560
+ if (!yieldFile(file)) {
561
+ return
562
+ }
563
+ }
564
+ }
565
+
566
+ public File(pos: Pos): File | null {
567
+ if (pos === NoPos) {
568
+ return null
569
+ }
570
+ return this.files.find((file) => file.Base() <= pos && pos <= file.End()) ?? null
571
+ }
572
+
573
+ public PositionFor(pos: Pos, adjusted: boolean): Position {
574
+ const file = this.File(pos)
575
+ if (file === null) {
576
+ return new Position()
577
+ }
578
+ return file.PositionFor(pos, adjusted)
579
+ }
580
+
581
+ public Position(pos: Pos): Position {
582
+ return this.PositionFor(pos, true)
583
+ }
584
+ }
585
+
586
+ export function NewFileSet(): FileSet {
587
+ return new FileSet()
588
+ }
589
+
590
+ export function Pos_IsValid(pos: Pos): boolean {
591
+ return pos !== NoPos
592
+ }
593
+
594
+ export function Token_String(tok: Token): string {
595
+ return tokenStrings.get(tok) ?? `token(${tok})`
596
+ }
597
+
598
+ export function Token_Precedence(tok: Token): number {
599
+ switch (tok) {
600
+ case LOR:
601
+ return 1
602
+ case LAND:
603
+ return 2
604
+ case EQL:
605
+ case NEQ:
606
+ case LSS:
607
+ case LEQ:
608
+ case GTR:
609
+ case GEQ:
610
+ return 3
611
+ case ADD:
612
+ case SUB:
613
+ case OR:
614
+ case XOR:
615
+ return 4
616
+ case MUL:
617
+ case QUO:
618
+ case REM:
619
+ case SHL:
620
+ case SHR:
621
+ case AND:
622
+ case AND_NOT:
623
+ return 5
624
+ default:
625
+ return LowestPrec
626
+ }
627
+ }
628
+
629
+ export function Token_IsLiteral(tok: Token): boolean {
630
+ return literal_beg < tok && tok < literal_end
631
+ }
632
+
633
+ export function Token_IsOperator(tok: Token): boolean {
634
+ return (operator_beg < tok && tok < operator_end) || tok === TILDE
635
+ }
636
+
637
+ export function Token_IsKeyword(tok: Token): boolean {
638
+ return keyword_beg < tok && tok < keyword_end
639
+ }
640
+
641
+ export function Lookup(ident: string): Token {
642
+ return keywords.get(ident) ?? IDENT
643
+ }
644
+
645
+ export function IsExported(name: string): boolean {
646
+ return /^\p{Lu}/u.test(name)
647
+ }
648
+
649
+ export function IsKeyword(name: string): boolean {
650
+ return keywords.has(name)
651
+ }
652
+
653
+ export function IsIdentifier(name: string): boolean {
654
+ if (name === '' || IsKeyword(name)) {
655
+ return false
656
+ }
657
+ return /^[$_\p{L}][$_\p{L}\p{N}]*$/u.test(name)
658
+ }
659
+
660
+ function searchInts(values: number[], offset: number): number {
661
+ let low = 0
662
+ let high = values.length
663
+ while (low < high) {
664
+ const mid = Math.floor((low + high) / 2)
665
+ if (values[mid] > offset) {
666
+ high = mid
667
+ } else {
668
+ low = mid + 1
669
+ }
670
+ }
671
+ return low - 1
672
+ }
673
+
674
+ function searchLineInfos(values: lineInfo[], offset: number): number {
675
+ let low = 0
676
+ let high = values.length
677
+ while (low < high) {
678
+ const mid = Math.floor((low + high) / 2)
679
+ if (values[mid].Offset > offset) {
680
+ high = mid
681
+ } else {
682
+ low = mid + 1
683
+ }
684
+ }
685
+ return low - 1
686
+ }
@@ -0,0 +1,18 @@
1
+ import { describe, expect, test } from 'vitest'
2
+
3
+ import {
4
+ Escape,
5
+ EscapeNonString,
6
+ EscapeToResultNonString,
7
+ NoEscape,
8
+ } from './index.js'
9
+
10
+ describe('internal/abi escape intrinsics', () => {
11
+ test('return identity values in the JavaScript target', () => {
12
+ const value = { id: 1 }
13
+ expect(Escape(value)).toBe(value)
14
+ expect(NoEscape(value)).toBe(value)
15
+ expect(EscapeToResultNonString(value)).toBe(value)
16
+ expect(EscapeNonString(value)).toBeUndefined()
17
+ })
18
+ })
@@ -26,6 +26,20 @@ export class IntArgRegBitmap {
26
26
  }
27
27
  }
28
28
 
29
+ export function NoEscape<T>(p: T): T {
30
+ return p
31
+ }
32
+
33
+ export function Escape<T>(x: T): T {
34
+ return x
35
+ }
36
+
37
+ export function EscapeNonString<T>(_v: T): void {}
38
+
39
+ export function EscapeToResultNonString<T>(v: T): T {
40
+ return v
41
+ }
42
+
29
43
  // FuncPCABI0 returns the entry PC of the function f for ABI0
30
44
  export function FuncPCABI0(_f: any): number {
31
45
  return 0 // Placeholder