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
@@ -6,6 +6,57 @@ export function New(text: string): $.GoError {
6
6
  return $.newError(text)
7
7
  }
8
8
 
9
+ export function Errorf(format: string, ...args: any[]): $.GoError {
10
+ return New(formatText(format, args))
11
+ }
12
+
13
+ export function Wrap(err: $.GoError, message: string): $.GoError {
14
+ if (err === null) {
15
+ return null
16
+ }
17
+ return wrapError(err, message)
18
+ }
19
+
20
+ export function Wrapf(
21
+ err: $.GoError,
22
+ format: string,
23
+ ...args: any[]
24
+ ): $.GoError {
25
+ if (err === null) {
26
+ return null
27
+ }
28
+ return wrapError(err, formatText(format, args))
29
+ }
30
+
31
+ function wrapError(err: Exclude<$.GoError, null>, message: string): $.GoError {
32
+ const wrapped = $.newError(`${message}: ${err.Error()}`)
33
+ ;(wrapped as any).Unwrap = function (): $.GoError {
34
+ return err
35
+ }
36
+ return wrapped
37
+ }
38
+
39
+ function formatText(format: string, args: any[]): string {
40
+ let argIndex = 0
41
+ return format.replace(/%[sdqv%]/g, (match) => {
42
+ if (match === '%%') {
43
+ return '%'
44
+ }
45
+ if (argIndex >= args.length) {
46
+ return match
47
+ }
48
+ const arg = args[argIndex++]
49
+ switch (match) {
50
+ case '%d':
51
+ return String(Number(arg))
52
+ case '%q':
53
+ return JSON.stringify(String(arg))
54
+ default:
55
+ return String(arg)
56
+ }
57
+ })
58
+ }
59
+
9
60
  // ErrUnsupported indicates that a requested operation cannot be performed,
10
61
  // because it is unsupported. For example, a call to os.Link when using a
11
62
  // file system that does not support hard links.
@@ -179,6 +230,59 @@ export function As(err: $.GoError, target: any): boolean {
179
230
  return false
180
231
  }
181
232
 
233
+ // AsType finds the first error in err's tree that matches the generic error
234
+ // type E, returning the matching error and true. Otherwise it returns E's zero
235
+ // value and false.
236
+ export function AsType(
237
+ typeArgs: $.GenericTypeArgs | undefined,
238
+ err: $.GoError,
239
+ ): [any, boolean] {
240
+ const descriptor = typeArgs?.E
241
+ const zero = (): any => descriptor?.zero?.() ?? null
242
+ if (err === null || descriptor?.type === undefined) {
243
+ return [zero(), false]
244
+ }
245
+ return asType(err, descriptor.type, zero)
246
+ }
247
+
248
+ function asType(
249
+ err: $.GoError,
250
+ typeInfo: $.TypeInfo | string,
251
+ zero: () => any,
252
+ ): [any, boolean] {
253
+ if (err === null) {
254
+ return [zero(), false]
255
+ }
256
+
257
+ const [asserted, ok] = $.typeAssertTuple<any>(err, typeInfo)
258
+ if (ok) {
259
+ return [asserted, true]
260
+ }
261
+
262
+ if (typeof (err as any).Unwrap === 'function') {
263
+ const result = (err as any).Unwrap()
264
+ if (Array.isArray(result)) {
265
+ for (const wrappedErr of result) {
266
+ if (
267
+ wrappedErr &&
268
+ typeof wrappedErr.Error === 'function'
269
+ ) {
270
+ const [matched, matchedOK] = asType(wrappedErr, typeInfo, zero)
271
+ if (matchedOK) {
272
+ return [matched, true]
273
+ }
274
+ }
275
+ }
276
+ return [zero(), false]
277
+ }
278
+ if (result && typeof result.Error === 'function') {
279
+ return asType(result, typeInfo, zero)
280
+ }
281
+ }
282
+
283
+ return [zero(), false]
284
+ }
285
+
182
286
  // Join returns an error that wraps the given errors.
183
287
  // Any nil error values are discarded.
184
288
  // Join returns nil if every value in errs is nil.
package/gs/fmt/fmt.ts CHANGED
@@ -22,7 +22,7 @@ export interface State {
22
22
  Flag(c: number): boolean
23
23
  Precision(): [number, boolean]
24
24
  Width(): [number, boolean]
25
- Write(b: Uint8Array): [number, $.GoError | null]
25
+ Write(b: $.Bytes): [number, $.GoError | null]
26
26
  }
27
27
 
28
28
  // Simple printf-style formatting implementation
@@ -199,7 +199,11 @@ function parseFormat(format: string, args: any[]): string {
199
199
  const verb = format[j]
200
200
 
201
201
  if (argIndex < args.length) {
202
- let formatted = formatValue(args[argIndex], verb)
202
+ const arg = args[argIndex]
203
+ let formatted = formatWithState(arg, verb, flags, width, precision)
204
+ if (formatted === null) {
205
+ formatted = formatValue(arg, verb)
206
+ }
203
207
 
204
208
  // Apply width and precision formatting
205
209
  if (width && !precision) {
@@ -217,7 +221,7 @@ function parseFormat(format: string, args: any[]): string {
217
221
  (verb === 'f' || verb === 'e' || verb === 'g')
218
222
  ) {
219
223
  const p = parseInt(precision)
220
- const num = Number(args[argIndex])
224
+ const num = Number(arg)
221
225
  if (verb === 'f') {
222
226
  formatted = num.toFixed(p)
223
227
  } else if (verb === 'e') {
@@ -257,6 +261,39 @@ function parseFormat(format: string, args: any[]): string {
257
261
  return result
258
262
  }
259
263
 
264
+ function formatWithState(
265
+ value: any,
266
+ verb: string,
267
+ flags: string,
268
+ width: string,
269
+ precision: string,
270
+ ): string | null {
271
+ if (!value || typeof value.Format !== 'function') {
272
+ return null
273
+ }
274
+
275
+ let out = ''
276
+ const state: State = {
277
+ Flag(c: number): boolean {
278
+ return flags.includes(String.fromCharCode(c))
279
+ },
280
+ Precision(): [number, boolean] {
281
+ return precision === '' ? [0, false] : [parseInt(precision), true]
282
+ },
283
+ Width(): [number, boolean] {
284
+ return width === '' ? [0, false] : [parseInt(width), true]
285
+ },
286
+ Write(b: $.Bytes): [number, $.GoError | null] {
287
+ const text = $.bytesToString(b)
288
+ out += text
289
+ return [text.length, null]
290
+ },
291
+ }
292
+
293
+ value.Format(state, verb.codePointAt(0) ?? 0)
294
+ return out
295
+ }
296
+
260
297
  // Global stdout simulation for Print functions
261
298
  let stdout = {
262
299
  write: (data: string) => {
@@ -361,34 +398,37 @@ export function Fprintln(w: any, ...a: any[]): [number, $.GoError | null] {
361
398
  }
362
399
 
363
400
  // Append functions (append to byte slice)
364
- export function Append(b: Uint8Array, ...a: any[]): Uint8Array {
401
+ export function Append(b: $.Bytes, ...a: any[]): $.Bytes {
365
402
  const result = a.map(defaultFormat).join(' ')
366
403
  const encoded = new TextEncoder().encode(result)
367
- const newArray = new Uint8Array(b.length + encoded.length)
368
- newArray.set(b)
369
- newArray.set(encoded, b.length)
404
+ const base = $.bytesToUint8Array(b)
405
+ const newArray = new Uint8Array(base.length + encoded.length)
406
+ newArray.set(base)
407
+ newArray.set(encoded, base.length)
370
408
  return newArray
371
409
  }
372
410
 
373
411
  export function Appendf(
374
- b: Uint8Array,
412
+ b: $.Bytes,
375
413
  format: string,
376
414
  ...a: any[]
377
- ): Uint8Array {
415
+ ): $.Bytes {
378
416
  const result = parseFormat(format, a)
379
417
  const encoded = new TextEncoder().encode(result)
380
- const newArray = new Uint8Array(b.length + encoded.length)
381
- newArray.set(b)
382
- newArray.set(encoded, b.length)
418
+ const base = $.bytesToUint8Array(b)
419
+ const newArray = new Uint8Array(base.length + encoded.length)
420
+ newArray.set(base)
421
+ newArray.set(encoded, base.length)
383
422
  return newArray
384
423
  }
385
424
 
386
- export function Appendln(b: Uint8Array, ...a: any[]): Uint8Array {
425
+ export function Appendln(b: $.Bytes, ...a: any[]): $.Bytes {
387
426
  const result = a.map(defaultFormat).join(' ') + '\n'
388
427
  const encoded = new TextEncoder().encode(result)
389
- const newArray = new Uint8Array(b.length + encoded.length)
390
- newArray.set(b)
391
- newArray.set(encoded, b.length)
428
+ const base = $.bytesToUint8Array(b)
429
+ const newArray = new Uint8Array(base.length + encoded.length)
430
+ newArray.set(base)
431
+ newArray.set(encoded, base.length)
392
432
  return newArray
393
433
  }
394
434
 
@@ -0,0 +1,95 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
3
+ import {
4
+ AppendVarint,
5
+ CompareEqualVT,
6
+ DecodeFixed32,
7
+ DecodeFixed64,
8
+ DecodeVarint,
9
+ DecodeVarintInt32,
10
+ DecodeVarintInt64,
11
+ DecodeVarintUint32,
12
+ EncodeVarint,
13
+ ErrIntOverflow,
14
+ ErrInvalidLength,
15
+ ErrUnexpectedEndOfGroup,
16
+ SizeOfVarint,
17
+ Skip,
18
+ } from './index.js'
19
+
20
+ class TestValue {
21
+ constructor(private readonly value: string) {}
22
+
23
+ EqualVT(other: TestValue): boolean {
24
+ return this.value == other.value
25
+ }
26
+ }
27
+
28
+ describe('protobuf-go-lite EqualVT helpers', () => {
29
+ it('accepts compiler-emitted runtime type arguments', () => {
30
+ const equal = CompareEqualVT<TestValue>({
31
+ T: { zero: () => null },
32
+ })
33
+
34
+ expect(equal(new TestValue('a'), new TestValue('a'))).toBe(true)
35
+ expect(equal(new TestValue('a'), new TestValue('b'))).toBe(false)
36
+ expect(equal(null, null)).toBe(true)
37
+ })
38
+ })
39
+
40
+ describe('protobuf-go-lite wire helpers', () => {
41
+ it('encodes and decodes varints', () => {
42
+ const buf = new Uint8Array(4)
43
+
44
+ const offset = EncodeVarint(buf, 4, 300)
45
+
46
+ expect(offset).toBe(2)
47
+ expect(Array.from(buf.slice(offset))).toEqual([0xac, 0x02])
48
+ expect(SizeOfVarint(300)).toBe(2)
49
+ expect(DecodeVarint(buf, offset)).toEqual([300, 4, null])
50
+ expect(DecodeVarintInt32(buf, offset)).toEqual([300, 4, null])
51
+ expect(DecodeVarintInt64(buf, offset)).toEqual([300, 4, null])
52
+ expect(DecodeVarintUint32(buf, offset)).toEqual([300, 4, null])
53
+ expect(Array.from(AppendVarint([], 300) as number[])).toEqual([
54
+ 0xac,
55
+ 0x02,
56
+ ])
57
+ })
58
+
59
+ it('decodes fixed64 values', () => {
60
+ expect(DecodeFixed32(new Uint8Array([0x44, 0x33, 0x22, 0x11]), 0)).toEqual([
61
+ 0x11223344,
62
+ 4,
63
+ null,
64
+ ])
65
+
66
+ expect(
67
+ DecodeFixed64(
68
+ new Uint8Array([0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11]),
69
+ 0,
70
+ ),
71
+ ).toEqual([0x1122334455667800, 8, null])
72
+
73
+ const [, , err] = DecodeFixed64(new Uint8Array([1, 2, 3]), 0)
74
+ expect(err?.Error()).toBe('unexpected EOF')
75
+ })
76
+
77
+ it('skips protobuf records', () => {
78
+ expect(Skip(new Uint8Array([0x08, 0x96, 0x01]))).toEqual([3, null])
79
+ expect(Skip(new Uint8Array([0x12, 0x03, 0x61, 0x62, 0x63]))).toEqual([
80
+ 5,
81
+ null,
82
+ ])
83
+ expect(Skip(new Uint8Array([0x0c]))).toEqual([
84
+ 0,
85
+ ErrUnexpectedEndOfGroup,
86
+ ])
87
+ })
88
+
89
+ it('reports protobuf wire errors as Go errors', () => {
90
+ expect(ErrInvalidLength?.Error()).toContain('negative length')
91
+ expect(ErrIntOverflow?.Error()).toContain('integer overflow')
92
+ const [, eof] = Skip(new Uint8Array([0x08, 0x80]))
93
+ expect(eof?.Error()).toBe('unexpected EOF')
94
+ })
95
+ })
@@ -1,14 +1,312 @@
1
+ import * as $ from '../../../builtin/index.js'
2
+
3
+ export const ErrInvalidLength = $.newError(
4
+ 'proto: negative length found during unmarshaling',
5
+ )
6
+ export const ErrIntOverflow = $.newError('proto: integer overflow')
7
+ export const ErrUnexpectedEndOfGroup = $.newError(
8
+ 'proto: unexpected end of group',
9
+ )
10
+
11
+ export interface Message {
12
+ SizeVT(): number
13
+ MarshalToSizedBufferVT(dAtA: $.Slice<number>): [number, $.GoError]
14
+ MarshalVT(): [$.Slice<number>, $.GoError]
15
+ UnmarshalVT(data: $.Slice<number>): $.GoError
16
+ Reset(): void
17
+ }
18
+
19
+ export interface JSONMessage {
20
+ MarshalJSON(): [$.Slice<number>, $.GoError]
21
+ UnmarshalJSON(data: $.Slice<number>): $.GoError
22
+ }
23
+
24
+ export interface CloneMessage extends Message {
25
+ CloneMessageVT(): CloneMessage | null
26
+ }
27
+
28
+ export interface CloneVT<T> extends CloneMessage {
29
+ CloneVT(): T
30
+ }
31
+
1
32
  export interface EqualVT<T> {
2
33
  EqualVT(other: T): boolean
3
34
  }
4
35
 
5
- export function IsEqualVT<T extends EqualVT<T>>(t1: T | null, t2: T | null): boolean {
36
+ export function CompareComparable<T>(): (t1: T, t2: T) => boolean {
37
+ return (t1, t2) => t1 === t2
38
+ }
39
+
40
+ export function IsEqualVT<T extends EqualVT<T>>(
41
+ t1: T | null,
42
+ t2: T | null,
43
+ ): boolean
44
+ export function IsEqualVT<T extends EqualVT<T>>(
45
+ _typeArgs: unknown,
46
+ t1: T | null,
47
+ t2: T | null,
48
+ ): boolean
49
+ export function IsEqualVT<T extends EqualVT<T>>(
50
+ arg0: unknown,
51
+ arg1: T | null,
52
+ arg2?: T | null,
53
+ ): boolean {
54
+ const t1 = arg2 === undefined ? (arg0 as T | null) : arg1
55
+ const t2 = arg2 === undefined ? arg1 : arg2
6
56
  if (t1 == null || t2 == null) {
7
57
  return t1 == t2
8
58
  }
9
59
  return t1.EqualVT(t2)
10
60
  }
11
61
 
12
- export function CompareEqualVT<T extends EqualVT<T>>(): (t1: T | null, t2: T | null) => boolean {
62
+ export function CompareEqualVT<T extends EqualVT<T>>(
63
+ _typeArgs?: unknown,
64
+ ): (t1: T | null, t2: T | null) => boolean {
13
65
  return (t1, t2) => IsEqualVT(t1, t2)
14
66
  }
67
+
68
+ export function IsEqualVTSlice<T extends EqualVT<T>>(
69
+ s1: $.Slice<T>,
70
+ s2: $.Slice<T>,
71
+ ): boolean {
72
+ if ($.len(s1) !== $.len(s2)) {
73
+ return false
74
+ }
75
+ for (let i = 0; i < $.len(s1); i++) {
76
+ if (!IsEqualVT((s1 as any)[i] as T, (s2 as any)[i] as T)) {
77
+ return false
78
+ }
79
+ }
80
+ return true
81
+ }
82
+
83
+ export function EncodeVarint(
84
+ dAtA: $.Slice<number>,
85
+ offset: number,
86
+ v: number,
87
+ ): number {
88
+ offset -= SizeOfVarint(v)
89
+ const base = offset
90
+ while (v >= 0x80) {
91
+ setByte(dAtA, offset, (v % 0x80) | 0x80)
92
+ v = Math.floor(v / 0x80)
93
+ offset++
94
+ }
95
+ setByte(dAtA, offset, v)
96
+ return base
97
+ }
98
+
99
+ export function AppendVarint(b: $.Slice<number>, v: number): $.Slice<number> {
100
+ const bytes: number[] = []
101
+ while (v >= 0x80) {
102
+ bytes.push((v % 0x80) | 0x80)
103
+ v = Math.floor(v / 0x80)
104
+ }
105
+ bytes.push(v)
106
+ return $.append(b, ...bytes)
107
+ }
108
+
109
+ export function ConsumeVarint(b: $.Slice<number>): [number, number] {
110
+ let v = 0
111
+ let shift = 0
112
+ for (let i = 0; i < 10; i++) {
113
+ if (i >= $.len(b)) {
114
+ return [0, -1]
115
+ }
116
+ const value = byteSliceValue(b, i)
117
+ if (shift === 63 && value > 1) {
118
+ return [0, -2]
119
+ }
120
+ v += (value & 0x7f) * 2 ** shift
121
+ if (value < 0x80) {
122
+ return [v, i + 1]
123
+ }
124
+ shift += 7
125
+ }
126
+ return [0, -2]
127
+ }
128
+
129
+ export function SizeOfVarint(x: number): number {
130
+ let n = 1
131
+ while (x >= 0x80) {
132
+ x = Math.floor(x / 0x80)
133
+ n++
134
+ }
135
+ return n
136
+ }
137
+
138
+ export function DecodeVarint(
139
+ b: $.Slice<number>,
140
+ idx: number,
141
+ ): [number, number, $.GoError] {
142
+ const [v, n] = ConsumeVarint($.goSlice(b, idx, undefined))
143
+ if (n < 0) {
144
+ return [0, 0, n === -1 ? ioUnexpectedEOF() : ErrIntOverflow]
145
+ }
146
+ return [v, idx + n, null]
147
+ }
148
+
149
+ export function DecodeVarintInt32(
150
+ b: $.Slice<number>,
151
+ idx: number,
152
+ ): [number, number, $.GoError] {
153
+ const [v, next, err] = DecodeVarint(b, idx)
154
+ return [toInt32(v), next, err]
155
+ }
156
+
157
+ export function DecodeVarintInt64(
158
+ b: $.Slice<number>,
159
+ idx: number,
160
+ ): [number, number, $.GoError] {
161
+ return DecodeVarint(b, idx)
162
+ }
163
+
164
+ export function DecodeVarintUint32(
165
+ b: $.Slice<number>,
166
+ idx: number,
167
+ ): [number, number, $.GoError] {
168
+ const [v, next, err] = DecodeVarint(b, idx)
169
+ return [v >>> 0, next, err]
170
+ }
171
+
172
+ export function DecodeFixed32(
173
+ b: $.Slice<number>,
174
+ idx: number,
175
+ ): [number, number, $.GoError] {
176
+ if (idx + 4 > $.len(b)) {
177
+ return [0, 0, ioUnexpectedEOF()]
178
+ }
179
+ const value =
180
+ byteSliceValue(b, idx) +
181
+ byteSliceValue(b, idx + 1) * 2 ** 8 +
182
+ byteSliceValue(b, idx + 2) * 2 ** 16 +
183
+ byteSliceValue(b, idx + 3) * 2 ** 24
184
+ return [value >>> 0, idx + 4, null]
185
+ }
186
+
187
+ export function DecodeFixed64(
188
+ b: $.Slice<number>,
189
+ idx: number,
190
+ ): [number, number, $.GoError] {
191
+ if (idx + 8 > $.len(b)) {
192
+ return [0, 0, ioUnexpectedEOF()]
193
+ }
194
+ const low =
195
+ byteSliceValue(b, idx) +
196
+ byteSliceValue(b, idx + 1) * 2 ** 8 +
197
+ byteSliceValue(b, idx + 2) * 2 ** 16 +
198
+ byteSliceValue(b, idx + 3) * 2 ** 24
199
+ const high =
200
+ byteSliceValue(b, idx + 4) +
201
+ byteSliceValue(b, idx + 5) * 2 ** 8 +
202
+ byteSliceValue(b, idx + 6) * 2 ** 16 +
203
+ byteSliceValue(b, idx + 7) * 2 ** 24
204
+ return [low + high * 2 ** 32, idx + 8, null]
205
+ }
206
+
207
+ export function Skip(dAtA: $.Slice<number>): [number, $.GoError] {
208
+ const l = $.len(dAtA)
209
+ let iNdEx = 0
210
+ let depth = 0
211
+ while (iNdEx < l) {
212
+ let wire = 0
213
+ for (let shift = 0; ; shift += 7) {
214
+ if (shift >= 64) {
215
+ return [0, ErrIntOverflow]
216
+ }
217
+ if (iNdEx >= l) {
218
+ return [0, ioUnexpectedEOF()]
219
+ }
220
+ const b = byteSliceValue(dAtA, iNdEx)
221
+ iNdEx++
222
+ wire += (b & 0x7f) * 2 ** shift
223
+ if (b < 0x80) {
224
+ break
225
+ }
226
+ }
227
+
228
+ const wireType = wire & 0x7
229
+ switch (wireType) {
230
+ case 0:
231
+ for (let shift = 0; ; shift += 7) {
232
+ if (shift >= 64) {
233
+ return [0, ErrIntOverflow]
234
+ }
235
+ if (iNdEx >= l) {
236
+ return [0, ioUnexpectedEOF()]
237
+ }
238
+ const b = byteSliceValue(dAtA, iNdEx)
239
+ iNdEx++
240
+ if (b < 0x80) {
241
+ break
242
+ }
243
+ }
244
+ break
245
+ case 1:
246
+ iNdEx += 8
247
+ break
248
+ case 2: {
249
+ let length = 0
250
+ for (let shift = 0; ; shift += 7) {
251
+ if (shift >= 64) {
252
+ return [0, ErrIntOverflow]
253
+ }
254
+ if (iNdEx >= l) {
255
+ return [0, ioUnexpectedEOF()]
256
+ }
257
+ const b = byteSliceValue(dAtA, iNdEx)
258
+ iNdEx++
259
+ length += (b & 0x7f) * 2 ** shift
260
+ if (b < 0x80) {
261
+ break
262
+ }
263
+ }
264
+ if (length < 0) {
265
+ return [0, ErrInvalidLength]
266
+ }
267
+ iNdEx += length
268
+ break
269
+ }
270
+ case 3:
271
+ depth++
272
+ break
273
+ case 4:
274
+ if (depth === 0) {
275
+ return [0, ErrUnexpectedEndOfGroup]
276
+ }
277
+ depth--
278
+ break
279
+ case 5:
280
+ iNdEx += 4
281
+ break
282
+ default:
283
+ return [0, $.newError(`proto: illegal wireType ${wireType}`)]
284
+ }
285
+ if (iNdEx < 0) {
286
+ return [0, ErrInvalidLength]
287
+ }
288
+ if (depth === 0) {
289
+ return [iNdEx, null]
290
+ }
291
+ }
292
+ return [0, ioUnexpectedEOF()]
293
+ }
294
+
295
+ function byteSliceValue(b: $.Slice<number>, idx: number): number {
296
+ return $.indexStringOrBytes(b, idx)
297
+ }
298
+
299
+ function setByte(b: $.Slice<number>, idx: number, value: number): void {
300
+ if (b == null) {
301
+ throw new Error('assignment to nil byte slice')
302
+ }
303
+ b[idx] = value & 0xff
304
+ }
305
+
306
+ function toInt32(v: number): number {
307
+ return v | 0
308
+ }
309
+
310
+ function ioUnexpectedEOF(): $.GoError {
311
+ return $.newError('unexpected EOF')
312
+ }