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
@@ -1,338 +0,0 @@
1
- package compiler
2
-
3
- import (
4
- "go/ast"
5
- "go/parser"
6
- "go/token"
7
- "go/types"
8
- "os"
9
- "slices"
10
- "testing"
11
-
12
- "golang.org/x/tools/go/packages"
13
- )
14
-
15
- // TestAnalysisVarRefLogic verifies that the analysis correctly identifies
16
- // which variables need variable references based on actual tests test cases
17
- func TestAnalysisVarRefLogic(t *testing.T) {
18
- tests := []struct {
19
- name string
20
- code string
21
- expected map[string]AnalysisExpectation
22
- }{
23
- {
24
- name: "pointer_range_loop",
25
- code: `package main
26
- func main() {
27
- arr := [3]int{1, 2, 3}
28
- arrPtr := &arr
29
- for i, v := range arrPtr {
30
- println("index:", i, "value:", v)
31
- }
32
- }`,
33
- expected: map[string]AnalysisExpectation{
34
- "arr": {NeedsVarRef: true, NeedsVarRefAccess: true}, // varrefed because &arr is taken
35
- "arrPtr": {NeedsVarRef: false, NeedsVarRefAccess: true}, // NOT varrefed, but points to varrefed value
36
- "i": {NeedsVarRef: false, NeedsVarRefAccess: false}, // regular loop variable
37
- "v": {NeedsVarRef: false, NeedsVarRefAccess: false}, // regular loop variable
38
- },
39
- },
40
- {
41
- name: "simple_pointers",
42
- code: `package main
43
- type MyStruct struct {
44
- Val int
45
- }
46
- func main() {
47
- s1 := MyStruct{Val: 1}
48
- p1 := &s1
49
- pp1 := &p1
50
- p4 := &s1
51
- _ = p4
52
- _ = pp1
53
- }`,
54
- expected: map[string]AnalysisExpectation{
55
- "s1": {NeedsVarRef: true, NeedsVarRefAccess: true}, // varrefed because &s1 is taken
56
- "p1": {NeedsVarRef: true, NeedsVarRefAccess: true}, // varrefed because &p1 is taken
57
- "pp1": {NeedsVarRef: false, NeedsVarRefAccess: true}, // NOT varrefed, points to varrefed value
58
- "p4": {NeedsVarRef: false, NeedsVarRefAccess: true}, // NOT varrefed, points to varrefed value
59
- },
60
- },
61
- {
62
- name: "varref_deref_struct",
63
- code: `package main
64
- type MyStruct struct {
65
- MyInt int
66
- }
67
- func main() {
68
- myStruct := &MyStruct{}
69
- (*myStruct).MyInt = 5
70
- println((*myStruct).MyInt)
71
- }`,
72
- expected: map[string]AnalysisExpectation{
73
- "myStruct": {NeedsVarRef: false, NeedsVarRefAccess: false}, // NOT varrefed, direct pointer to struct
74
- },
75
- },
76
- {
77
- name: "pointer_composite_literal_untyped",
78
- code: `package main
79
- func main() {
80
- var ptr *struct{ x int }
81
- ptr = &struct{ x int }{42}
82
- println("Pointer value x:", ptr.x)
83
-
84
- data := []*struct{ x int }{{42}, {43}}
85
- println("First element x:", data[0].x)
86
- println("Second element x:", data[1].x)
87
- }`,
88
- expected: map[string]AnalysisExpectation{
89
- "ptr": {NeedsVarRef: false, NeedsVarRefAccess: false}, // Should NOT be varrefed
90
- "data": {NeedsVarRef: false, NeedsVarRefAccess: false}, // Should NOT be varrefed
91
- },
92
- },
93
- {
94
- name: "var_declaration_composite_literal",
95
- code: `package main
96
- type MockInode struct {
97
- Value int
98
- }
99
- func main() {
100
- var childInode *MockInode = &MockInode{Value: 42}
101
- println("childInode.Value:", childInode.Value)
102
- }`,
103
- expected: map[string]AnalysisExpectation{
104
- "childInode": {NeedsVarRef: false, NeedsVarRefAccess: false}, // Should NOT be varrefed
105
- },
106
- },
107
- }
108
-
109
- for _, tt := range tests {
110
- t.Run(tt.name, func(t *testing.T) {
111
- analysis, objects := parseAndAnalyze(t, tt.code)
112
-
113
- for varName, expected := range tt.expected {
114
- obj, exists := objects[varName]
115
- if !exists {
116
- t.Errorf("Variable %q not found in parsed objects", varName)
117
- continue
118
- }
119
-
120
- actualNeedsVarRef := analysis.NeedsVarRef(obj)
121
- actualNeedsVarRefAccess := analysis.NeedsVarRefAccess(obj)
122
-
123
- if actualNeedsVarRef != expected.NeedsVarRef {
124
- t.Errorf("Variable %q: NeedsVarRef = %v, want %v",
125
- varName, actualNeedsVarRef, expected.NeedsVarRef)
126
- }
127
-
128
- if actualNeedsVarRefAccess != expected.NeedsVarRefAccess {
129
- t.Errorf("Variable %q: NeedsVarRefAccess = %v, want %v",
130
- varName, actualNeedsVarRefAccess, expected.NeedsVarRefAccess)
131
- }
132
-
133
- // Print debug info
134
- t.Logf("Variable %q: NeedsVarRef=%v, NeedsVarRefAccess=%v",
135
- varName, actualNeedsVarRef, actualNeedsVarRefAccess)
136
- }
137
- })
138
- }
139
- }
140
-
141
- // AnalysisExpectation defines what we expect from the analysis for a variable
142
- type AnalysisExpectation struct {
143
- NeedsVarRef bool
144
- NeedsVarRefAccess bool
145
- }
146
-
147
- // parseAndAnalyze parses Go code and runs the analysis, returning the analysis and variable objects
148
- func parseAndAnalyze(t *testing.T, code string) (*Analysis, map[string]types.Object) {
149
- // Parse the code
150
- fset := token.NewFileSet()
151
- file, err := parser.ParseFile(fset, "test.go", code, parser.ParseComments)
152
- if err != nil {
153
- t.Fatalf("Failed to parse code: %v", err)
154
- }
155
-
156
- // Create a minimal package for type checking
157
- pkg := &packages.Package{
158
- Syntax: []*ast.File{file},
159
- TypesInfo: &types.Info{
160
- Types: make(map[ast.Expr]types.TypeAndValue),
161
- Defs: make(map[*ast.Ident]types.Object),
162
- Uses: make(map[*ast.Ident]types.Object),
163
- },
164
- Fset: fset,
165
- }
166
-
167
- // Type check the package
168
- typeConfig := &types.Config{}
169
- typePkg, err := typeConfig.Check("main", fset, pkg.Syntax, pkg.TypesInfo)
170
- if err != nil {
171
- t.Fatalf("Failed to type check: %v", err)
172
- }
173
- pkg.Types = typePkg
174
-
175
- // Run package-level analysis
176
- analysis := AnalyzePackageFiles(pkg, nil)
177
-
178
- // Collect variable objects
179
- objects := make(map[string]types.Object)
180
- for ident, obj := range pkg.TypesInfo.Defs {
181
- if obj != nil && ident.Name != "_" {
182
- if _, isVar := obj.(*types.Var); isVar {
183
- objects[ident.Name] = obj
184
- }
185
- }
186
- }
187
-
188
- return analysis, objects
189
- }
190
-
191
- // TestAnalysisDebugInfo prints debug information about variable usage for manual inspection
192
- func TestAnalysisDebugInfo(t *testing.T) {
193
- code := `package main
194
- func main() {
195
- arr := [3]int{1, 2, 3}
196
- arrPtr := &arr
197
- for i, v := range arrPtr {
198
- println("index:", i, "value:", v)
199
- }
200
- }`
201
-
202
- analysis, objects := parseAndAnalyze(t, code)
203
-
204
- t.Log("=== Analysis Debug Information ===")
205
- for varName, obj := range objects {
206
- needsVarRef := analysis.NeedsVarRef(obj)
207
- needsVarRefAccess := analysis.NeedsVarRefAccess(obj)
208
-
209
- t.Logf("Variable: %s", varName)
210
- t.Logf(" Type: %s", obj.Type())
211
- t.Logf(" NeedsVarRef: %v", needsVarRef)
212
- t.Logf(" NeedsVarRefAccess: %v", needsVarRefAccess)
213
-
214
- // Print usage info if available
215
- if usage, exists := analysis.VariableUsage[obj]; exists {
216
- t.Logf(" Sources: %d", len(usage.Sources))
217
- for i, src := range usage.Sources {
218
- srcName := "nil"
219
- if src.Object != nil {
220
- srcName = src.Object.Name()
221
- }
222
- t.Logf(" [%d] %s (type: %v)", i, srcName, src.Type)
223
- }
224
- t.Logf(" Destinations: %d", len(usage.Destinations))
225
- for i, dst := range usage.Destinations {
226
- dstName := "nil"
227
- if dst.Object != nil {
228
- dstName = dst.Object.Name()
229
- }
230
- t.Logf(" [%d] %s (type: %v)", i, dstName, dst.Type)
231
- }
232
- }
233
- t.Log("")
234
- }
235
- }
236
-
237
- // TestWrapperTypeDetection verifies that the analysis correctly identifies wrapper types
238
- func TestWrapperTypeDetection(t *testing.T) {
239
- // Use the actual tests test case
240
- testPath := "../tests/tests/wrapper_type_args"
241
-
242
- // Load the package using the packages config like the main compiler does
243
- cfg := &packages.Config{
244
- Mode: packages.NeedName |
245
- packages.NeedFiles |
246
- packages.NeedCompiledGoFiles |
247
- packages.NeedImports |
248
- packages.NeedDeps |
249
- packages.NeedExportFile |
250
- packages.NeedTypes |
251
- packages.NeedSyntax |
252
- packages.NeedTypesInfo |
253
- packages.NeedTypesSizes,
254
- Tests: false,
255
- Env: append(os.Environ(), "GOOS=js", "GOARCH=wasm"),
256
- }
257
-
258
- pkgs, err := packages.Load(cfg, testPath)
259
- if err != nil {
260
- t.Fatalf("Failed to load test package: %v", err)
261
- }
262
-
263
- if len(pkgs) != 1 {
264
- t.Fatalf("Expected 1 package, got %d", len(pkgs))
265
- }
266
-
267
- pkg := pkgs[0]
268
- if len(pkg.Errors) > 0 {
269
- t.Fatalf("Package has errors: %v", pkg.Errors[0])
270
- }
271
-
272
- // Run package-level analysis
273
- if len(pkg.Syntax) == 0 {
274
- t.Fatal("No syntax files found")
275
- }
276
-
277
- analysis := AnalyzePackageFiles(pkg, nil)
278
-
279
- // Verify the NamedBasicTypes map was initialized
280
- if analysis.NamedBasicTypes == nil {
281
- t.Error("NamedBasicTypes map was not initialized")
282
- }
283
-
284
- // Test some type lookups to verify wrapper type detection works
285
- // We'll check if MyMode (which has methods) is detected as a wrapper type
286
- scope := pkg.Types.Scope()
287
-
288
- // Check if MyMode is detected as a wrapper type
289
- if obj := scope.Lookup("MyMode"); obj != nil {
290
- if typeName, ok := obj.(*types.TypeName); ok {
291
- isWrapper := analysis.IsNamedBasicType(typeName.Type())
292
- if !isWrapper {
293
- t.Errorf("MyMode should be detected as wrapper type, got %v", isWrapper)
294
- }
295
- t.Logf("MyMode wrapper detection: %v (correct)", isWrapper)
296
- }
297
- }
298
-
299
- // Test that regular struct types are not detected as wrapper types
300
- if obj := scope.Lookup("MyDir"); obj != nil {
301
- if typeName, ok := obj.(*types.TypeName); ok {
302
- isWrapper := analysis.IsNamedBasicType(typeName.Type())
303
- if isWrapper {
304
- t.Errorf("MyDir should not be detected as wrapper type, got %v", isWrapper)
305
- }
306
- t.Logf("MyDir wrapper detection: %v (correct)", isWrapper)
307
- }
308
- }
309
-
310
- t.Logf("Analysis completed successfully with %d named basic types tracked", len(analysis.NamedBasicTypes))
311
- }
312
-
313
- // TestDiscoverGsPackages verifies that the discoverEmbeddedGsPackages function
314
- // can find packages in the embedded gs/ directory
315
- func TestDiscoverGsPackages(t *testing.T) {
316
- analysis := NewAnalysis(nil)
317
-
318
- // Test package discovery using the embedded filesystem
319
- packages := analysis.discoverEmbeddedGsPackages()
320
- t.Logf("Discovered %d packages:", len(packages))
321
- for _, pkg := range packages {
322
- t.Logf(" - %s", pkg)
323
- }
324
-
325
- // We should find at least some packages
326
- if len(packages) == 0 {
327
- t.Errorf("Expected to find at least one package in gs/ directory")
328
- }
329
-
330
- // Check for some known packages that should exist
331
- expectedPackages := []string{"sync", "bytes", "strings"}
332
- for _, expected := range expectedPackages {
333
- found := slices.Contains(packages, expected)
334
- if !found {
335
- t.Logf("Expected package '%s' not found in discovered packages: %v", expected, packages)
336
- }
337
- }
338
- }