@ttsc/win32-arm64 0.33.1 → 0.34.0

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 (1062) hide show
  1. package/bin/go/VERSION +2 -2
  2. package/bin/go/bin/go.exe +0 -0
  3. package/bin/go/bin/gofmt.exe +0 -0
  4. package/bin/go/lib/time/update.bash +2 -2
  5. package/bin/go/lib/time/zoneinfo.zip +0 -0
  6. package/bin/go/pkg/include/asm_ppc64x.h +0 -16
  7. package/bin/go/pkg/tool/windows_arm64/asm.exe +0 -0
  8. package/bin/go/pkg/tool/windows_arm64/cgo.exe +0 -0
  9. package/bin/go/pkg/tool/windows_arm64/compile.exe +0 -0
  10. package/bin/go/pkg/tool/windows_arm64/cover.exe +0 -0
  11. package/bin/go/pkg/tool/windows_arm64/fix.exe +0 -0
  12. package/bin/go/pkg/tool/windows_arm64/link.exe +0 -0
  13. package/bin/go/pkg/tool/windows_arm64/preprofile.exe +0 -0
  14. package/bin/go/pkg/tool/windows_arm64/vet.exe +0 -0
  15. package/bin/go/src/archive/tar/reader.go +2 -1
  16. package/bin/go/src/archive/zip/reader.go +5 -29
  17. package/bin/go/src/archive/zip/struct.go +5 -6
  18. package/bin/go/src/archive/zip/writer.go +120 -60
  19. package/bin/go/src/bufio/bufio.go +1 -1
  20. package/bin/go/src/bytes/buffer.go +3 -3
  21. package/bin/go/src/bytes/bytes.go +45 -25
  22. package/bin/go/src/compress/flate/deflate.go +512 -363
  23. package/bin/go/src/compress/flate/deflatefast.go +156 -262
  24. package/bin/go/src/compress/flate/dict_decoder.go +1 -4
  25. package/bin/go/src/compress/flate/huffman_bit_writer.go +673 -250
  26. package/bin/go/src/compress/flate/huffman_code.go +164 -92
  27. package/bin/go/src/compress/flate/level1.go +195 -0
  28. package/bin/go/src/compress/flate/level2.go +190 -0
  29. package/bin/go/src/compress/flate/level3.go +228 -0
  30. package/bin/go/src/compress/flate/level4.go +200 -0
  31. package/bin/go/src/compress/flate/level5.go +287 -0
  32. package/bin/go/src/compress/flate/level6.go +297 -0
  33. package/bin/go/src/compress/flate/load_store.go +43 -0
  34. package/bin/go/src/compress/flate/regmask_amd64.go +9 -0
  35. package/bin/go/src/compress/flate/regmask_other.go +11 -0
  36. package/bin/go/src/compress/flate/token.go +238 -26
  37. package/bin/go/src/compress/gzip/gzip.go +8 -0
  38. package/bin/go/src/compress/zlib/writer.go +12 -0
  39. package/bin/go/src/context/context.go +6 -5
  40. package/bin/go/src/crypto/cipher/gcm.go +0 -4
  41. package/bin/go/src/crypto/crypto.go +27 -4
  42. package/bin/go/src/crypto/des/const.go +1 -1
  43. package/bin/go/src/crypto/ecdsa/ecdsa.go +21 -4
  44. package/bin/go/src/crypto/ed25519/ed25519.go +13 -0
  45. package/bin/go/src/crypto/internal/boring/aes.go +2 -3
  46. package/bin/go/src/crypto/internal/cryptotest/aead.go +53 -0
  47. package/bin/go/src/crypto/internal/cryptotest/boundary.go +34 -0
  48. package/bin/go/src/crypto/internal/cryptotest/boundary_compat.go +16 -0
  49. package/bin/go/src/crypto/internal/cryptotest/fetchmodule.go +9 -3
  50. package/bin/go/src/crypto/internal/cryptotest/fips140.go +62 -3
  51. package/bin/go/src/crypto/internal/cryptotest/hash.go +14 -0
  52. package/bin/go/src/crypto/internal/cryptotest/wycheproof/_schema/go.mod +19 -0
  53. package/bin/go/src/crypto/internal/cryptotest/wycheproof/_schema/go.sum +27 -0
  54. package/bin/go/src/crypto/internal/cryptotest/wycheproof/_schema/schema_gen.go +151 -0
  55. package/bin/go/src/crypto/internal/cryptotest/wycheproof/schema.go +9792 -0
  56. package/bin/go/src/crypto/internal/cryptotest/wycheproof/schemaversion.go +11 -0
  57. package/bin/go/src/crypto/internal/cryptotest/wycheproof/wycheproof.go +165 -0
  58. package/bin/go/src/crypto/internal/cryptotest/x509limbo/_schema/go.mod +14 -0
  59. package/bin/go/src/crypto/internal/cryptotest/x509limbo/_schema/go.sum +25 -0
  60. package/bin/go/src/crypto/internal/cryptotest/x509limbo/_schema/schema_gen.go +125 -0
  61. package/bin/go/src/crypto/internal/cryptotest/x509limbo/schema.go +591 -0
  62. package/bin/go/src/crypto/internal/cryptotest/x509limbo/schemaversion.go +14 -0
  63. package/bin/go/src/crypto/internal/fips140/aes/_asm/ctr/go.mod +1 -1
  64. package/bin/go/src/crypto/internal/fips140/aes/_asm/standard/go.mod +1 -1
  65. package/bin/go/src/crypto/internal/fips140/aes/gcm/_asm/gcm/gcm_amd64_asm.go +36 -32
  66. package/bin/go/src/crypto/internal/fips140/aes/gcm/_asm/gcm/go.mod +5 -5
  67. package/bin/go/src/crypto/internal/fips140/aes/gcm/_asm/gcm/go.sum +8 -6
  68. package/bin/go/src/crypto/internal/fips140/aes/gcm/gcm_amd64.s +29 -17
  69. package/bin/go/src/crypto/internal/fips140/aes/gcm/gcm_arm64.s +73 -72
  70. package/bin/go/src/crypto/internal/fips140/aes/gcm/ghash.go +140 -124
  71. package/bin/go/src/crypto/internal/fips140/bigmod/nat.go +18 -0
  72. package/bin/go/src/crypto/internal/fips140/check/checktest/asm_loong64.s +23 -0
  73. package/bin/go/src/crypto/internal/fips140/check/checktest/asm_none.go +1 -1
  74. package/bin/go/src/crypto/internal/fips140/check/checktest/asm_stub.go +1 -1
  75. package/bin/go/src/crypto/internal/fips140/drbg/rand.go +12 -4
  76. package/bin/go/src/crypto/internal/fips140/ecdsa/ecdsa.go +17 -10
  77. package/bin/go/src/crypto/internal/fips140/edwards25519/field/_asm/fe_amd64_asm.go +0 -90
  78. package/bin/go/src/crypto/internal/fips140/edwards25519/field/fe.go +64 -97
  79. package/bin/go/src/crypto/internal/fips140/edwards25519/field/fe_amd64.go +0 -5
  80. package/bin/go/src/crypto/internal/fips140/edwards25519/field/fe_amd64.s +0 -167
  81. package/bin/go/src/crypto/internal/fips140/edwards25519/field/fe_amd64_noasm.go +0 -2
  82. package/bin/go/src/crypto/internal/fips140/edwards25519/field/fe_generic.go +57 -1
  83. package/bin/go/src/crypto/internal/fips140/edwards25519/scalarmult.go +3 -2
  84. package/bin/go/src/crypto/internal/fips140/mldsa/mldsa.go +31 -25
  85. package/bin/go/src/crypto/internal/fips140/mldsa/semiexpanded.go +2 -2
  86. package/bin/go/src/crypto/internal/fips140/nistec/_asm/go.mod +4 -4
  87. package/bin/go/src/crypto/internal/fips140/nistec/_asm/go.sum +6 -0
  88. package/bin/go/src/crypto/internal/fips140/nistec/_asm/p256_asm.go +1 -613
  89. package/bin/go/src/crypto/internal/fips140/nistec/p256.go +2 -2
  90. package/bin/go/src/crypto/internal/fips140/nistec/p256_asm.go +7 -6
  91. package/bin/go/src/crypto/internal/fips140/nistec/p256_asm_amd64.s +0 -503
  92. package/bin/go/src/crypto/internal/fips140/nistec/p256_asm_arm64.s +4 -429
  93. package/bin/go/src/crypto/internal/fips140/nistec/p256_ordinv.go +511 -47
  94. package/bin/go/src/crypto/internal/fips140/pbkdf2/pbkdf2.go +1 -1
  95. package/bin/go/src/crypto/internal/fips140/rsa/keygen.go +48 -46
  96. package/bin/go/src/crypto/internal/fips140/rsa/largeexponent.go +365 -0
  97. package/bin/go/src/crypto/internal/fips140/rsa/pkcs1v15.go +27 -0
  98. package/bin/go/src/crypto/internal/fips140/sha256/_asm/go.mod +1 -1
  99. package/bin/go/src/crypto/internal/fips140/sha3/_asm/go.mod +1 -1
  100. package/bin/go/src/crypto/internal/fips140/sha512/_asm/go.mod +1 -1
  101. package/bin/go/src/crypto/internal/fips140/subtle/constant_time.go +1 -1
  102. package/bin/go/src/crypto/internal/fips140/subtle/xor_asm.go +1 -1
  103. package/bin/go/src/crypto/internal/fips140/subtle/xor_riscv64.go +18 -0
  104. package/bin/go/src/crypto/internal/fips140/subtle/xor_riscv64.s +33 -2
  105. package/bin/go/src/crypto/internal/fips140deps/cpu/cpu.go +2 -0
  106. package/bin/go/src/crypto/internal/fips140deps/time/time.go +7 -4
  107. package/bin/go/src/crypto/internal/fips140only/fips140only.go +0 -7
  108. package/bin/go/src/crypto/internal/fips140only/random_fips140v1.0.go +17 -0
  109. package/bin/go/src/crypto/internal/fips140only/random_fips140v1.28.go +16 -0
  110. package/bin/go/src/crypto/internal/fips140test/acvp_capabilities_fips140v1.28.json +86 -0
  111. package/bin/go/src/crypto/internal/fips140test/acvp_test_fips140v1.28.config.json +58 -0
  112. package/bin/go/src/crypto/internal/rand/rand.go +14 -14
  113. package/bin/go/src/crypto/internal/rand/random_fips140v1.0.go +20 -0
  114. package/bin/go/src/crypto/internal/rand/random_fips140v1.28.go +19 -0
  115. package/bin/go/src/crypto/mldsa/mldsa.go +97 -0
  116. package/bin/go/src/crypto/mldsa/mldsa_fips140v1.0.go +116 -0
  117. package/bin/go/src/crypto/mldsa/mldsa_fips140v1.26.go +226 -0
  118. package/bin/go/src/crypto/mlkem/mlkem.go +8 -2
  119. package/bin/go/src/crypto/rsa/fips.go +26 -8
  120. package/bin/go/src/crypto/rsa/pkcs1v15.go +2 -2
  121. package/bin/go/src/crypto/rsa/rsa.go +25 -2
  122. package/bin/go/src/crypto/sha1/sha1block_decl.go +1 -1
  123. package/bin/go/src/crypto/sha1/sha1block_generic.go +1 -1
  124. package/bin/go/src/crypto/sha1/sha1block_loong64.s +24 -8
  125. package/bin/go/src/crypto/sha1/sha1block_riscv64.s +225 -0
  126. package/bin/go/src/crypto/sha3/sha3.go +3 -2
  127. package/bin/go/src/crypto/tls/alert.go +2 -0
  128. package/bin/go/src/crypto/tls/auth.go +31 -0
  129. package/bin/go/src/crypto/tls/bogo_config.json +12 -23
  130. package/bin/go/src/crypto/tls/cipher_suites.go +3 -11
  131. package/bin/go/src/crypto/tls/common.go +106 -59
  132. package/bin/go/src/crypto/tls/common_string.go +18 -5
  133. package/bin/go/src/crypto/tls/conn.go +33 -35
  134. package/bin/go/src/crypto/tls/defaults.go +26 -20
  135. package/bin/go/src/crypto/tls/defaults_fips140.go +9 -0
  136. package/bin/go/src/crypto/tls/ech.go +9 -4
  137. package/bin/go/src/crypto/tls/generate_cert.go +8 -2
  138. package/bin/go/src/crypto/tls/handshake_client.go +17 -17
  139. package/bin/go/src/crypto/tls/handshake_client_tls13.go +8 -3
  140. package/bin/go/src/crypto/tls/handshake_server.go +26 -19
  141. package/bin/go/src/crypto/tls/handshake_server_tls13.go +8 -5
  142. package/bin/go/src/crypto/tls/key_agreement.go +5 -1
  143. package/bin/go/src/crypto/tls/key_schedule.go +42 -17
  144. package/bin/go/src/crypto/tls/prf.go +1 -1
  145. package/bin/go/src/crypto/tls/quic.go +6 -7
  146. package/bin/go/src/crypto/tls/tls.go +25 -29
  147. package/bin/go/src/crypto/x509/cert_pool.go +8 -4
  148. package/bin/go/src/crypto/x509/constraints.go +5 -0
  149. package/bin/go/src/crypto/x509/parser.go +101 -15
  150. package/bin/go/src/crypto/x509/pkcs8.go +45 -4
  151. package/bin/go/src/crypto/x509/pkix/pkix.go +33 -9
  152. package/bin/go/src/crypto/x509/root.go +113 -0
  153. package/bin/go/src/crypto/x509/root_darwin.go +8 -4
  154. package/bin/go/src/crypto/x509/root_plan9.go +2 -23
  155. package/bin/go/src/crypto/x509/root_unix.go +0 -97
  156. package/bin/go/src/crypto/x509/root_windows.go +8 -3
  157. package/bin/go/src/crypto/x509/verify.go +43 -4
  158. package/bin/go/src/crypto/x509/x509.go +169 -30
  159. package/bin/go/src/database/sql/closemu.go +119 -0
  160. package/bin/go/src/database/sql/convert.go +63 -4
  161. package/bin/go/src/database/sql/driver/driver.go +26 -0
  162. package/bin/go/src/database/sql/driver/types.go +4 -0
  163. package/bin/go/src/database/sql/internal/sql.go +22 -0
  164. package/bin/go/src/database/sql/sql.go +89 -40
  165. package/bin/go/src/debug/buildinfo/buildinfo.go +0 -13
  166. package/bin/go/src/debug/dwarf/buf.go +7 -1
  167. package/bin/go/src/debug/dwarf/class_string.go +3 -2
  168. package/bin/go/src/debug/elf/file.go +80 -50
  169. package/bin/go/src/debug/elf/reader.go +1 -1
  170. package/bin/go/src/debug/gosym/symtab.go +26 -30
  171. package/bin/go/src/debug/macho/file.go +2 -2
  172. package/bin/go/src/debug/macho/reloctype_string.go +12 -8
  173. package/bin/go/src/debug/pe/file.go +6 -3
  174. package/bin/go/src/encoding/base32/base32.go +29 -31
  175. package/bin/go/src/encoding/base64/base64.go +24 -29
  176. package/bin/go/src/encoding/gob/decode.go +7 -1
  177. package/bin/go/src/encoding/gob/type.go +6 -6
  178. package/bin/go/src/encoding/hex/hex.go +6 -6
  179. package/bin/go/src/encoding/json/decode.go +4 -3
  180. package/bin/go/src/encoding/json/encode.go +1 -2
  181. package/bin/go/src/encoding/json/fold.go +1 -1
  182. package/bin/go/src/encoding/json/internal/internal.go +11 -1
  183. package/bin/go/src/encoding/json/internal/jsonflags/flags.go +17 -9
  184. package/bin/go/src/encoding/json/internal/jsonopts/options.go +52 -37
  185. package/bin/go/src/encoding/json/internal/jsonopts/options_format.go +124 -0
  186. package/bin/go/src/encoding/json/internal/jsontest/_embed/canada_geometry.json.zst +0 -0
  187. package/bin/go/src/encoding/json/internal/jsontest/_embed/citm_catalog.json.zst +0 -0
  188. package/bin/go/src/encoding/json/internal/jsontest/_embed/golang_source.json.zst +0 -0
  189. package/bin/go/src/encoding/json/internal/jsontest/_embed/string_escaped.json.zst +0 -0
  190. package/bin/go/src/encoding/json/internal/jsontest/_embed/string_unicode.json.zst +0 -0
  191. package/bin/go/src/encoding/json/internal/jsontest/_embed/synthea_fhir.json.zst +0 -0
  192. package/bin/go/src/encoding/json/internal/jsontest/_embed/twitter_status.json.zst +0 -0
  193. package/bin/go/src/encoding/json/internal/jsontest/testdata.go +10 -4
  194. package/bin/go/src/encoding/json/internal/jsonwire/decode.go +13 -36
  195. package/bin/go/src/encoding/json/internal/jsonwire/encode.go +7 -7
  196. package/bin/go/src/encoding/json/internal/jsonwire/wire.go +30 -38
  197. package/bin/go/src/encoding/json/jsontext/decode.go +49 -14
  198. package/bin/go/src/encoding/json/jsontext/doc.go +6 -11
  199. package/bin/go/src/encoding/json/jsontext/encode.go +55 -39
  200. package/bin/go/src/encoding/json/jsontext/errors.go +34 -3
  201. package/bin/go/src/encoding/json/jsontext/export.go +14 -0
  202. package/bin/go/src/encoding/json/jsontext/options.go +8 -8
  203. package/bin/go/src/encoding/json/jsontext/quote.go +2 -2
  204. package/bin/go/src/encoding/json/jsontext/state.go +14 -14
  205. package/bin/go/src/encoding/json/jsontext/token.go +246 -101
  206. package/bin/go/src/encoding/json/jsontext/value.go +31 -16
  207. package/bin/go/src/encoding/json/stream.go +14 -2
  208. package/bin/go/src/encoding/json/v2/arshal.go +100 -114
  209. package/bin/go/src/encoding/json/v2/arshal_any.go +6 -5
  210. package/bin/go/src/encoding/json/v2/arshal_default.go +292 -189
  211. package/bin/go/src/encoding/json/v2/{arshal_inlined.go → arshal_embedded.go} +14 -14
  212. package/bin/go/src/encoding/json/v2/arshal_funcs.go +28 -47
  213. package/bin/go/src/encoding/json/v2/arshal_methods.go +98 -29
  214. package/bin/go/src/encoding/json/v2/arshal_time.go +33 -13
  215. package/bin/go/src/encoding/json/v2/doc.go +40 -55
  216. package/bin/go/src/encoding/json/v2/errors.go +29 -9
  217. package/bin/go/src/encoding/json/v2/fields.go +83 -81
  218. package/bin/go/src/encoding/json/v2/intern.go +2 -2
  219. package/bin/go/src/encoding/json/v2/options.go +57 -41
  220. package/bin/go/src/encoding/json/v2_decode.go +21 -9
  221. package/bin/go/src/encoding/json/v2_encode.go +21 -10
  222. package/bin/go/src/encoding/json/v2_indent.go +2 -0
  223. package/bin/go/src/encoding/json/v2_inject.go +7 -4
  224. package/bin/go/src/encoding/json/v2_options.go +37 -30
  225. package/bin/go/src/encoding/json/v2_scanner.go +6 -1
  226. package/bin/go/src/encoding/json/v2_stream.go +49 -14
  227. package/bin/go/src/encoding/pem/pem.go +6 -2
  228. package/bin/go/src/fmt/doc.go +11 -1
  229. package/bin/go/src/fmt/print.go +69 -82
  230. package/bin/go/src/go/ast/ast.go +4 -4
  231. package/bin/go/src/go/ast/filter.go +1 -1
  232. package/bin/go/src/go/ast/scope.go +2 -2
  233. package/bin/go/src/go/build/build.go +1 -1
  234. package/bin/go/src/go/build/constraint/vers.go +4 -1
  235. package/bin/go/src/go/build/read.go +2 -2
  236. package/bin/go/src/go/constant/kind_string.go +3 -2
  237. package/bin/go/src/go/constant/value.go +26 -4
  238. package/bin/go/src/go/doc/comment/std.go +1 -0
  239. package/bin/go/src/go/importer/importer.go +4 -3
  240. package/bin/go/src/go/internal/gccgoimporter/parser.go +2 -0
  241. package/bin/go/src/go/internal/gcimporter/ureader.go +141 -56
  242. package/bin/go/src/go/parser/parser.go +11 -22
  243. package/bin/go/src/go/printer/math.go +28 -0
  244. package/bin/go/src/go/printer/nodes.go +28 -11
  245. package/bin/go/src/go/printer/printer.go +3 -1
  246. package/bin/go/src/go/scanner/errors.go +2 -0
  247. package/bin/go/src/go/scanner/scanner.go +40 -28
  248. package/bin/go/src/go/token/position.go +7 -16
  249. package/bin/go/src/go/types/alias.go +0 -18
  250. package/bin/go/src/go/types/api.go +4 -10
  251. package/bin/go/src/go/types/api_predicates.go +2 -2
  252. package/bin/go/src/go/types/assignments.go +44 -38
  253. package/bin/go/src/go/types/builtins.go +199 -168
  254. package/bin/go/src/go/types/call.go +155 -138
  255. package/bin/go/src/go/types/check.go +0 -83
  256. package/bin/go/src/go/types/const.go +22 -10
  257. package/bin/go/src/go/types/conversions.go +19 -19
  258. package/bin/go/src/go/types/cycles.go +29 -42
  259. package/bin/go/src/go/types/decl.go +33 -81
  260. package/bin/go/src/go/types/expr.go +191 -183
  261. package/bin/go/src/go/types/gotype.go +1 -0
  262. package/bin/go/src/go/types/hash.go +309 -0
  263. package/bin/go/src/go/types/index.go +91 -61
  264. package/bin/go/src/go/types/infer.go +11 -11
  265. package/bin/go/src/go/types/instantiate.go +27 -15
  266. package/bin/go/src/go/types/interface.go +2 -2
  267. package/bin/go/src/go/types/literals.go +56 -32
  268. package/bin/go/src/go/types/lookup.go +31 -14
  269. package/bin/go/src/go/types/named.go +58 -54
  270. package/bin/go/src/go/types/object.go +4 -3
  271. package/bin/go/src/go/types/operand.go +50 -34
  272. package/bin/go/src/go/types/range.go +19 -16
  273. package/bin/go/src/go/types/recording.go +24 -7
  274. package/bin/go/src/go/types/resolver.go +16 -18
  275. package/bin/go/src/go/types/scope.go +1 -15
  276. package/bin/go/src/go/types/selection.go +3 -1
  277. package/bin/go/src/go/types/signature.go +10 -11
  278. package/bin/go/src/go/types/stmt.go +34 -28
  279. package/bin/go/src/go/types/subst.go +82 -5
  280. package/bin/go/src/go/types/trie.go +93 -0
  281. package/bin/go/src/go/types/typelists.go +28 -0
  282. package/bin/go/src/go/types/typestring.go +5 -9
  283. package/bin/go/src/go/types/typexpr.go +17 -28
  284. package/bin/go/src/go/types/unify.go +12 -3
  285. package/bin/go/src/go/types/universe.go +12 -40
  286. package/bin/go/src/go/types/version.go +4 -0
  287. package/bin/go/src/go.mod +5 -5
  288. package/bin/go/src/go.sum +8 -8
  289. package/bin/go/src/hash/maphash/hasher.go +139 -0
  290. package/bin/go/src/hash/maphash/maphash.go +59 -4
  291. package/bin/go/src/html/template/attr_string.go +3 -2
  292. package/bin/go/src/html/template/delim_string.go +3 -2
  293. package/bin/go/src/html/template/element_string.go +3 -2
  294. package/bin/go/src/html/template/jsctx_string.go +3 -2
  295. package/bin/go/src/html/template/state_string.go +3 -2
  296. package/bin/go/src/html/template/template.go +7 -4
  297. package/bin/go/src/html/template/transition.go +1 -1
  298. package/bin/go/src/html/template/urlpart_string.go +3 -2
  299. package/bin/go/src/image/format.go +9 -0
  300. package/bin/go/src/image/gif/reader.go +18 -0
  301. package/bin/go/src/image/jpeg/huffman.go +22 -3
  302. package/bin/go/src/image/jpeg/reader.go +54 -29
  303. package/bin/go/src/image/jpeg/scan.go +68 -38
  304. package/bin/go/src/image/png/writer.go +8 -0
  305. package/bin/go/src/index/suffixarray/suffixarray.go +14 -6
  306. package/bin/go/src/internal/abi/abi_generic.go +1 -1
  307. package/bin/go/src/internal/abi/abi_s390x.go +0 -2
  308. package/bin/go/src/internal/abi/compiletype.go +30 -0
  309. package/bin/go/src/internal/abi/iface.go +13 -1
  310. package/bin/go/src/internal/abi/map.go +21 -3
  311. package/bin/go/src/internal/abi/type.go +136 -27
  312. package/bin/go/src/internal/buildcfg/exp.go +8 -8
  313. package/bin/go/src/internal/buildcfg/zbootstrap.go +1 -1
  314. package/bin/go/src/internal/bytealg/bytealg.go +16 -16
  315. package/bin/go/src/internal/bytealg/compare_s390x.s +0 -24
  316. package/bin/go/src/internal/bytealg/equal_s390x.s +0 -18
  317. package/bin/go/src/internal/bytealg/indexbyte_arm64.s +28 -0
  318. package/bin/go/src/internal/bytealg/indexbyte_s390x.s +0 -33
  319. package/bin/go/src/internal/coverage/encodemeta/encode.go +1 -1
  320. package/bin/go/src/internal/cpu/cpu.go +22 -7
  321. package/bin/go/src/internal/cpu/cpu_arm64.go +8 -1
  322. package/bin/go/src/internal/cpu/cpu_arm64.s +7 -0
  323. package/bin/go/src/internal/cpu/cpu_arm64_darwin.go +2 -0
  324. package/bin/go/src/internal/cpu/cpu_arm64_freebsd.go +2 -1
  325. package/bin/go/src/internal/cpu/cpu_arm64_hwcap.go +2 -0
  326. package/bin/go/src/internal/cpu/cpu_arm64_openbsd.go +6 -1
  327. package/bin/go/src/internal/cpu/cpu_arm64_other.go +1 -1
  328. package/bin/go/src/internal/cpu/cpu_arm64_windows.go +26 -0
  329. package/bin/go/src/internal/cpu/cpu_loong64.go +14 -2
  330. package/bin/go/src/internal/cpu/cpu_riscv64.go +10 -0
  331. package/bin/go/src/internal/cpu/cpu_riscv64_linux.go +21 -0
  332. package/bin/go/src/internal/cpu/cpu_windows.go +20 -0
  333. package/bin/go/src/internal/cpu/cpu_x86.go +2 -0
  334. package/bin/go/src/internal/filepathlite/path_windows.go +30 -17
  335. package/bin/go/src/internal/fuzz/fuzz.go +5 -1
  336. package/bin/go/src/internal/fuzz/mutator.go +2 -2
  337. package/bin/go/src/internal/fuzz/worker.go +1 -1
  338. package/bin/go/src/internal/gate/gate.go +76 -0
  339. package/bin/go/src/internal/godebugs/table.go +29 -10
  340. package/bin/go/src/internal/goexperiment/exp_mapsplitgroup_off.go +8 -0
  341. package/bin/go/src/internal/goexperiment/exp_mapsplitgroup_on.go +8 -0
  342. package/bin/go/src/internal/goexperiment/flags.go +5 -3
  343. package/bin/go/src/internal/goversion/goversion.go +1 -1
  344. package/bin/go/src/internal/lazyregexp/lazyre.go +4 -0
  345. package/bin/go/src/internal/nettest/conn.go +437 -0
  346. package/bin/go/src/internal/nettest/listener.go +148 -0
  347. package/bin/go/src/internal/nettest/packetconn.go +250 -0
  348. package/bin/go/src/internal/nettest/queue.go +33 -0
  349. package/bin/go/src/internal/pkgbits/syncmarker_string.go +4 -4
  350. package/bin/go/src/internal/pkgbits/version.go +27 -1
  351. package/bin/go/src/internal/platform/supported.go +8 -10
  352. package/bin/go/src/internal/platform/zosarch.go +1 -3
  353. package/bin/go/src/internal/poll/fd_mutex.go +49 -10
  354. package/bin/go/src/internal/poll/fd_unix.go +6 -1
  355. package/bin/go/src/internal/poll/fd_windows.go +175 -191
  356. package/bin/go/src/internal/poll/fd_writev_libc.go +1 -1
  357. package/bin/go/src/internal/poll/fd_writev_unix.go +1 -1
  358. package/bin/go/src/internal/poll/file_plan9.go +4 -4
  359. package/bin/go/src/internal/poll/sendfile_windows.go +1 -3
  360. package/bin/go/src/internal/poll/splice_linux.go +1 -1
  361. package/bin/go/src/internal/profile/encode.go +1 -1
  362. package/bin/go/src/internal/profile/profile.go +5 -3
  363. package/bin/go/src/internal/profilerecord/profilerecord.go +2 -2
  364. package/bin/go/src/internal/reflectlite/value.go +1 -15
  365. package/bin/go/src/internal/runtime/atomic/atomic_386.go +0 -6
  366. package/bin/go/src/internal/runtime/atomic/atomic_amd64.go +0 -6
  367. package/bin/go/src/internal/runtime/atomic/atomic_andor_generic.go +0 -11
  368. package/bin/go/src/internal/runtime/atomic/atomic_arm.go +0 -6
  369. package/bin/go/src/internal/runtime/atomic/atomic_loong64.go +2 -2
  370. package/bin/go/src/internal/runtime/atomic/atomic_loong64.s +22 -11
  371. package/bin/go/src/internal/runtime/atomic/atomic_mipsx.go +0 -10
  372. package/bin/go/src/internal/runtime/atomic/atomic_riscv64.s +4 -4
  373. package/bin/go/src/internal/runtime/atomic/atomic_s390x.go +0 -6
  374. package/bin/go/src/internal/runtime/atomic/atomic_wasm.go +0 -31
  375. package/bin/go/src/internal/runtime/atomic/linkname.go +34 -0
  376. package/bin/go/src/internal/runtime/exithook/hooks.go +0 -4
  377. package/bin/go/src/internal/runtime/gc/scan/expand_amd64.s +2285 -2285
  378. package/bin/go/src/internal/runtime/gc/scan/mkasm.go +1 -1
  379. package/bin/go/src/internal/runtime/gc/scan/scan_amd64.go +2 -1
  380. package/bin/go/src/internal/runtime/gc/scan/scan_amd64.s +4 -2
  381. package/bin/go/src/internal/runtime/maps/group.go +22 -13
  382. package/bin/go/src/internal/runtime/maps/map.go +35 -14
  383. package/bin/go/src/internal/runtime/maps/memhash_386.s +408 -0
  384. package/bin/go/src/internal/runtime/maps/memhash_aes.go +38 -0
  385. package/bin/go/src/internal/runtime/maps/memhash_aes_asm.go +24 -0
  386. package/bin/go/src/internal/runtime/maps/memhash_aes_simd.go +49 -0
  387. package/bin/go/src/internal/runtime/maps/memhash_align_check.go +10 -0
  388. package/bin/go/src/internal/runtime/maps/memhash_align_nocheck.go +16 -0
  389. package/bin/go/src/internal/runtime/maps/memhash_amd64.s +426 -0
  390. package/bin/go/src/internal/runtime/maps/memhash_arm64.s +366 -0
  391. package/bin/go/src/internal/runtime/maps/memhash_noaes.go +43 -0
  392. package/bin/go/src/internal/runtime/maps/memhash_nosimd_amd64.s +33 -0
  393. package/bin/go/src/internal/runtime/maps/runtime.go +37 -88
  394. package/bin/go/src/internal/runtime/maps/runtime_alg.go +93 -0
  395. package/bin/go/src/internal/runtime/maps/runtime_fast32.go +111 -97
  396. package/bin/go/src/internal/runtime/maps/runtime_fast64.go +137 -98
  397. package/bin/go/src/internal/runtime/maps/runtime_faststr.go +96 -89
  398. package/bin/go/src/{runtime/hash32.go → internal/runtime/maps/runtime_hash32.go} +8 -10
  399. package/bin/go/src/{runtime/hash64.go → internal/runtime/maps/runtime_hash64.go} +8 -8
  400. package/bin/go/src/internal/runtime/maps/table.go +66 -3
  401. package/bin/go/src/internal/runtime/math/math.go +0 -21
  402. package/bin/go/src/internal/runtime/startlinetest/func_amd64.s +2 -1
  403. package/bin/go/src/internal/runtime/sys/dit_arm64.go +3 -0
  404. package/bin/go/src/internal/runtime/sys/dit_arm64.s +16 -3
  405. package/bin/go/src/internal/runtime/syscall/linux/asm_linux_s390x.s +0 -23
  406. package/bin/go/src/internal/runtime/syscall/windows/asm_windows_386.s +7 -4
  407. package/bin/go/src/internal/runtime/syscall/windows/asm_windows_amd64.s +10 -8
  408. package/bin/go/src/internal/runtime/syscall/windows/asm_windows_arm64.s +0 -1
  409. package/bin/go/src/internal/runtime/syscall/windows/defs_windows.go +4 -0
  410. package/bin/go/src/internal/runtime/syscall/windows/syscall_windows.go +7 -9
  411. package/bin/go/src/internal/strconv/atof.go +69 -42
  412. package/bin/go/src/internal/strconv/atoi.go +1 -0
  413. package/bin/go/src/internal/strconv/ftoa.go +329 -357
  414. package/bin/go/src/internal/strconv/itoa.go +53 -59
  415. package/bin/go/src/internal/strconv/pow10gen.go +15 -3
  416. package/bin/go/src/internal/strconv/pow10tab.go +670 -670
  417. package/bin/go/src/internal/strconv/uscale.go +290 -0
  418. package/bin/go/src/internal/stringslite/strings.go +14 -42
  419. package/bin/go/src/internal/syscall/unix/asm_openbsd.s +0 -2
  420. package/bin/go/src/internal/syscall/unix/at.go +1 -1
  421. package/bin/go/src/internal/syscall/unix/at_fstatat.go +1 -1
  422. package/bin/go/src/internal/syscall/unix/at_libc2.go +1 -1
  423. package/bin/go/src/internal/syscall/unix/at_openbsd.go +0 -2
  424. package/bin/go/src/internal/syscall/unix/faccessat_bsd.go +1 -1
  425. package/bin/go/src/internal/syscall/unix/faccessat_openbsd.go +0 -2
  426. package/bin/go/src/internal/syscall/windows/at_windows.go +5 -5
  427. package/bin/go/src/internal/syscall/windows/net_windows.go +1 -0
  428. package/bin/go/src/internal/syscall/windows/string_windows.go +6 -3
  429. package/bin/go/src/internal/syscall/windows/syscall_windows.go +2 -0
  430. package/bin/go/src/internal/syscall/windows/types_windows.go +89 -4
  431. package/bin/go/src/internal/syscall/windows/zsyscall_windows.go +7 -0
  432. package/bin/go/src/internal/testenv/testenv.go +24 -1
  433. package/bin/go/src/internal/trace/event.go +1 -1
  434. package/bin/go/src/internal/trace/tracev2/events.go +2 -0
  435. package/bin/go/src/internal/trace/traceviewer/pprof.go +1 -0
  436. package/bin/go/src/internal/types/errors/generrordocs.go +1 -1
  437. package/bin/go/src/io/fs/fs.go +4 -1
  438. package/bin/go/src/io/fs/glob.go +1 -1
  439. package/bin/go/src/io/fs/readdir.go +3 -3
  440. package/bin/go/src/io/fs/readfile.go +3 -3
  441. package/bin/go/src/io/fs/stat.go +1 -1
  442. package/bin/go/src/io/fs/sub.go +4 -2
  443. package/bin/go/src/iter/iter.go +2 -2
  444. package/bin/go/src/log/slog/handler.go +0 -1
  445. package/bin/go/src/log/slog/json_handler.go +7 -1
  446. package/bin/go/src/log/slog/logger.go +16 -0
  447. package/bin/go/src/log/slog/text_handler.go +10 -1
  448. package/bin/go/src/log/slog/value.go +1 -1
  449. package/bin/go/src/log/syslog/doc.go +5 -0
  450. package/bin/go/src/math/abs.go +1 -1
  451. package/bin/go/src/math/big/accuracy_string.go +4 -4
  452. package/bin/go/src/math/big/arith.go +1 -1
  453. package/bin/go/src/math/big/arith_loong64.s +2 -4
  454. package/bin/go/src/math/big/float.go +2 -0
  455. package/bin/go/src/math/big/ftoa.go +11 -5
  456. package/bin/go/src/math/big/int.go +84 -1
  457. package/bin/go/src/math/big/intconv.go +19 -4
  458. package/bin/go/src/math/big/internal/asmgen/loong64.go +2 -0
  459. package/bin/go/src/math/big/nat.go +68 -17
  460. package/bin/go/src/math/big/natdiv.go +8 -5
  461. package/bin/go/src/math/big/roundingmode_string.go +3 -2
  462. package/bin/go/src/math/copysign.go +1 -2
  463. package/bin/go/src/math/exp2_asm.go +1 -1
  464. package/bin/go/src/math/exp2_noasm.go +1 -1
  465. package/bin/go/src/math/exp_asm.go +1 -1
  466. package/bin/go/src/math/exp_loong64.s +4 -12
  467. package/bin/go/src/math/exp_noasm.go +1 -1
  468. package/bin/go/src/math/exp_riscv64.s +236 -0
  469. package/bin/go/src/math/nextafter.go +4 -2
  470. package/bin/go/src/math/pow10.go +1 -1
  471. package/bin/go/src/math/rand/v2/rand.go +14 -4
  472. package/bin/go/src/mime/type.go +3 -2
  473. package/bin/go/src/net/dial.go +10 -6
  474. package/bin/go/src/net/dnsclient_unix.go +37 -8
  475. package/bin/go/src/net/dnsconfig.go +6 -0
  476. package/bin/go/src/net/fd_plan9.go +13 -6
  477. package/bin/go/src/net/fd_unix.go +3 -7
  478. package/bin/go/src/net/fd_windows.go +4 -9
  479. package/bin/go/src/net/file_plan9.go +1 -1
  480. package/bin/go/src/net/file_posix.go +1 -5
  481. package/bin/go/src/net/http/client.go +21 -4
  482. package/bin/go/src/net/http/clientconn.go +20 -1
  483. package/bin/go/src/net/http/clone.go +1 -10
  484. package/bin/go/src/net/http/cookie.go +5 -6
  485. package/bin/go/src/net/http/cookiejar/jar.go +6 -4
  486. package/bin/go/src/net/http/fcgi/fcgi.go +1 -2
  487. package/bin/go/src/net/http/fs.go +8 -1
  488. package/bin/go/src/net/http/http.go +29 -12
  489. package/bin/go/src/net/http/http2.go +561 -0
  490. package/bin/go/src/net/http/httptest/server.go +305 -60
  491. package/bin/go/src/net/http/httptrace/trace.go +78 -27
  492. package/bin/go/src/net/http/httputil/reverseproxy.go +0 -30
  493. package/bin/go/src/net/http/internal/common.go +14 -0
  494. package/bin/go/src/net/http/internal/http2/api.go +161 -0
  495. package/bin/go/src/net/http/internal/http2/ascii.go +53 -0
  496. package/bin/go/src/net/http/internal/http2/ciphers.go +641 -0
  497. package/bin/go/src/net/http/internal/http2/client_conn_pool.go +285 -0
  498. package/bin/go/src/net/http/internal/http2/config.go +118 -0
  499. package/bin/go/src/net/http/internal/http2/databuffer.go +146 -0
  500. package/bin/go/src/net/http/internal/http2/errors.go +173 -0
  501. package/bin/go/src/net/http/internal/http2/flow.go +175 -0
  502. package/bin/go/src/net/http/internal/http2/frame.go +1905 -0
  503. package/bin/go/src/net/http/internal/http2/gotrack.go +181 -0
  504. package/bin/go/src/net/http/internal/http2/http2.go +403 -0
  505. package/bin/go/src/net/http/internal/http2/pipe.go +184 -0
  506. package/bin/go/src/net/http/internal/http2/server.go +3238 -0
  507. package/bin/go/src/net/http/internal/http2/transport.go +3267 -0
  508. package/bin/go/src/net/http/internal/http2/write.go +380 -0
  509. package/bin/go/src/net/http/internal/http2/writesched.go +289 -0
  510. package/bin/go/src/net/http/internal/http2/writesched_priority_rfc9218.go +224 -0
  511. package/bin/go/src/net/http/internal/http2/writesched_roundrobin.go +119 -0
  512. package/bin/go/src/net/http/internal/httpcommon/httpcommon.go +8 -0
  513. package/bin/go/src/net/http/internal/httpsfv/httpsfv.go +666 -0
  514. package/bin/go/src/net/http/internal/sniff.go +304 -0
  515. package/bin/go/src/net/http/omithttp2.go +28 -49
  516. package/bin/go/src/net/http/pprof/pprof.go +11 -17
  517. package/bin/go/src/net/http/request.go +30 -3
  518. package/bin/go/src/net/http/response.go +6 -2
  519. package/bin/go/src/net/http/server.go +366 -144
  520. package/bin/go/src/net/http/sniff.go +2 -289
  521. package/bin/go/src/net/http/transfer.go +64 -21
  522. package/bin/go/src/net/http/transport.go +288 -83
  523. package/bin/go/src/net/ip.go +4 -0
  524. package/bin/go/src/net/ipsock_plan9.go +4 -4
  525. package/bin/go/src/net/ipsock_posix.go +8 -2
  526. package/bin/go/src/net/lookup.go +10 -0
  527. package/bin/go/src/net/lookup_windows.go +1 -1
  528. package/bin/go/src/net/mail/message.go +8 -3
  529. package/bin/go/src/net/net.go +2 -0
  530. package/bin/go/src/net/netip/netip.go +68 -61
  531. package/bin/go/src/net/sock_posix.go +1 -4
  532. package/bin/go/src/net/textproto/reader.go +11 -3
  533. package/bin/go/src/net/udpsock_plan9.go +2 -7
  534. package/bin/go/src/net/unixsock.go +11 -3
  535. package/bin/go/src/net/url/url.go +33 -0
  536. package/bin/go/src/os/dir_darwin.go +7 -0
  537. package/bin/go/src/os/exec/exec.go +16 -2
  538. package/bin/go/src/os/exec.go +1 -0
  539. package/bin/go/src/os/file.go +8 -1
  540. package/bin/go/src/os/root_windows.go +5 -1
  541. package/bin/go/src/os/signal/doc.go +3 -2
  542. package/bin/go/src/os/signal/signal.go +18 -6
  543. package/bin/go/src/os/statat_unix.go +5 -1
  544. package/bin/go/src/path/filepath/path.go +4 -0
  545. package/bin/go/src/reflect/asm_s390x.s +0 -10
  546. package/bin/go/src/reflect/iter.go +13 -13
  547. package/bin/go/src/reflect/makefunc.go +2 -1
  548. package/bin/go/src/reflect/map.go +61 -18
  549. package/bin/go/src/reflect/type.go +63 -46
  550. package/bin/go/src/reflect/value.go +59 -16
  551. package/bin/go/src/regexp/exec.go +5 -5
  552. package/bin/go/src/regexp/regexp.go +382 -319
  553. package/bin/go/src/regexp/syntax/parse.go +19 -10
  554. package/bin/go/src/runtime/HACKING.md +19 -0
  555. package/bin/go/src/runtime/_mkmalloc/constants.go +6 -4
  556. package/bin/go/src/runtime/_mkmalloc/go.mod +1 -1
  557. package/bin/go/src/runtime/_mkmalloc/mkmalloc.go +405 -64
  558. package/bin/go/src/runtime/alg.go +21 -53
  559. package/bin/go/src/runtime/asm_386.s +11 -461
  560. package/bin/go/src/runtime/asm_amd64.s +30 -537
  561. package/bin/go/src/runtime/asm_arm.s +4 -39
  562. package/bin/go/src/runtime/asm_arm64.s +15 -428
  563. package/bin/go/src/runtime/asm_loong64.s +37 -47
  564. package/bin/go/src/runtime/asm_mips64x.s +15 -15
  565. package/bin/go/src/runtime/asm_mipsx.s +0 -15
  566. package/bin/go/src/runtime/asm_ppc64x.h +0 -16
  567. package/bin/go/src/runtime/asm_ppc64x.s +13 -59
  568. package/bin/go/src/runtime/asm_riscv64.s +30 -91
  569. package/bin/go/src/runtime/asm_s390x.s +49 -49
  570. package/bin/go/src/runtime/asm_wasm.s +0 -15
  571. package/bin/go/src/runtime/atomic_riscv64.s +1 -1
  572. package/bin/go/src/runtime/cgo/abi_riscv64.h +72 -0
  573. package/bin/go/src/runtime/cgo/asm_riscv64.s +7 -48
  574. package/bin/go/src/runtime/cgo/callbacks.go +0 -42
  575. package/bin/go/src/runtime/cgo/callbacks_unix.go +58 -0
  576. package/bin/go/src/runtime/cgo/cgo.go +6 -3
  577. package/bin/go/src/runtime/cgo/gcc_aix_ppc64.S +21 -9
  578. package/bin/go/src/runtime/cgo/gcc_android.c +0 -26
  579. package/bin/go/src/runtime/cgo/gcc_clearenv.c +1 -1
  580. package/bin/go/src/runtime/cgo/gcc_fatalf.c +14 -3
  581. package/bin/go/src/runtime/cgo/{gcc_libinit.c → gcc_libinit_unix.c} +18 -65
  582. package/bin/go/src/runtime/cgo/gcc_libinit_windows.c +23 -35
  583. package/bin/go/src/runtime/cgo/gcc_linux_ppc64x.S +16 -7
  584. package/bin/go/src/runtime/cgo/gcc_netbsd.c +8 -56
  585. package/bin/go/src/runtime/cgo/gcc_s390x.S +13 -4
  586. package/bin/go/src/runtime/cgo/gcc_sigaction.c +1 -1
  587. package/bin/go/src/runtime/cgo/gcc_unix.c +63 -0
  588. package/bin/go/src/runtime/cgo/gcc_util.c +0 -19
  589. package/bin/go/src/runtime/cgo/handle.go +3 -0
  590. package/bin/go/src/runtime/cgo/libcgo.h +7 -10
  591. package/bin/go/src/runtime/cgo/libcgo_unix.h +2 -10
  592. package/bin/go/src/runtime/cgo/pthread_unix.c +138 -0
  593. package/bin/go/src/runtime/cgo/sigaction.go +1 -1
  594. package/bin/go/src/runtime/cgo/windows.go +18 -1
  595. package/bin/go/src/runtime/cgo_ppc64x.go +1 -1
  596. package/bin/go/src/runtime/cgo_sigaction.go +1 -1
  597. package/bin/go/src/runtime/cgocall.go +10 -2
  598. package/bin/go/src/runtime/chan.go +2 -16
  599. package/bin/go/src/runtime/coro.go +2 -2
  600. package/bin/go/src/runtime/cpuflags.go +4 -3
  601. package/bin/go/src/runtime/debug/garbage.go +6 -6
  602. package/bin/go/src/runtime/debug/mod.go +1 -1
  603. package/bin/go/src/runtime/debug/stack.go +1 -1
  604. package/bin/go/src/runtime/debugcall.go +0 -3
  605. package/bin/go/src/runtime/error.go +6 -0
  606. package/bin/go/src/runtime/extern.go +5 -3
  607. package/bin/go/src/runtime/heapdump.go +1 -1
  608. package/bin/go/src/runtime/iface.go +20 -10
  609. package/bin/go/src/runtime/libinit.go +48 -0
  610. package/bin/go/src/runtime/lock_js.go +4 -2
  611. package/bin/go/src/runtime/lock_spinbit.go +13 -12
  612. package/bin/go/src/runtime/lock_wasip1.go +4 -2
  613. package/bin/go/src/runtime/lockrank.go +24 -21
  614. package/bin/go/src/runtime/lockrank_off.go +5 -2
  615. package/bin/go/src/runtime/lockrank_on.go +8 -7
  616. package/bin/go/src/runtime/malloc.go +10 -26
  617. package/bin/go/src/runtime/malloc_generated.go +819 -8628
  618. package/bin/go/src/runtime/malloc_stubs.go +187 -197
  619. package/bin/go/src/runtime/malloc_tables_generated.go +16 -882
  620. package/bin/go/src/runtime/map.go +4 -4
  621. package/bin/go/src/runtime/mbitmap.go +3 -1
  622. package/bin/go/src/runtime/mem.go +2 -6
  623. package/bin/go/src/runtime/mem_sbrk.go +4 -0
  624. package/bin/go/src/runtime/memclr_s390x.s +0 -5
  625. package/bin/go/src/runtime/memmove_s390x.s +0 -7
  626. package/bin/go/src/runtime/metrics/doc.go +5 -29
  627. package/bin/go/src/runtime/metrics/sample.go +3 -0
  628. package/bin/go/src/runtime/metrics.go +3 -2
  629. package/bin/go/src/runtime/mgc.go +41 -25
  630. package/bin/go/src/runtime/mgcmark.go +5 -0
  631. package/bin/go/src/runtime/mgcmark_greenteagc.go +1 -1
  632. package/bin/go/src/runtime/mgcpacer.go +1 -3
  633. package/bin/go/src/runtime/mgcscavenge.go +1 -1
  634. package/bin/go/src/runtime/mheap.go +1 -10
  635. package/bin/go/src/runtime/mklockrank.go +6 -1
  636. package/bin/go/src/runtime/mkpreempt.go +7 -0
  637. package/bin/go/src/runtime/mprof.go +12 -23
  638. package/bin/go/src/runtime/os2_aix.go +3 -3
  639. package/bin/go/src/runtime/os3_solaris.go +10 -0
  640. package/bin/go/src/runtime/os_aix.go +9 -2
  641. package/bin/go/src/runtime/os_darwin.go +3 -8
  642. package/bin/go/src/runtime/os_dragonfly.go +10 -0
  643. package/bin/go/src/runtime/os_js.go +10 -0
  644. package/bin/go/src/runtime/os_linux32.go +19 -6
  645. package/bin/go/src/runtime/os_netbsd.go +10 -0
  646. package/bin/go/src/runtime/os_openbsd.go +10 -0
  647. package/bin/go/src/runtime/os_plan9.go +10 -0
  648. package/bin/go/src/runtime/os_wasip1.go +10 -0
  649. package/bin/go/src/runtime/os_windows.go +45 -12
  650. package/bin/go/src/runtime/os_workdir_ios_arm64.go +98 -0
  651. package/bin/go/src/runtime/os_workdir_stub.go +9 -0
  652. package/bin/go/src/runtime/panic.go +93 -8
  653. package/bin/go/src/runtime/plugin.go +1 -3
  654. package/bin/go/src/runtime/pprof/pprof.go +11 -14
  655. package/bin/go/src/runtime/pprof/protomem.go +8 -15
  656. package/bin/go/src/runtime/preempt_loong64.s +8 -4
  657. package/bin/go/src/runtime/preempt_noxreg.go +2 -0
  658. package/bin/go/src/runtime/preempt_xreg.go +29 -2
  659. package/bin/go/src/runtime/print.go +9 -1
  660. package/bin/go/src/runtime/proc.go +68 -17
  661. package/bin/go/src/runtime/race_riscv64.s +40 -83
  662. package/bin/go/src/runtime/race_s390x.s +0 -16
  663. package/bin/go/src/runtime/rand.go +40 -12
  664. package/bin/go/src/runtime/{rt0_linux_ppc64le.s → rt0_linux_ppc64x.s} +12 -2
  665. package/bin/go/src/runtime/runtime-gdb.py +13 -2
  666. package/bin/go/src/runtime/runtime1.go +69 -18
  667. package/bin/go/src/runtime/runtime2.go +23 -22
  668. package/bin/go/src/runtime/secret/secret.go +7 -2
  669. package/bin/go/src/runtime/secret.go +27 -9
  670. package/bin/go/src/runtime/secret_nosecret.go +1 -1
  671. package/bin/go/src/runtime/sigaction.go +1 -1
  672. package/bin/go/src/runtime/signal_unix.go +5 -3
  673. package/bin/go/src/runtime/softfloat64.go +7 -2
  674. package/bin/go/src/runtime/string.go +4 -1
  675. package/bin/go/src/runtime/stubs.go +14 -4
  676. package/bin/go/src/runtime/stubs_amd64.go +4 -0
  677. package/bin/go/src/runtime/stubs_arm.go +10 -1
  678. package/bin/go/src/runtime/stubs_arm64.go +13 -0
  679. package/bin/go/src/runtime/stubs_loong64.go +18 -0
  680. package/bin/go/src/runtime/stubs_mips64x.go +9 -0
  681. package/bin/go/src/runtime/stubs_mipsx.go +11 -0
  682. package/bin/go/src/runtime/stubs_ppc64x.go +15 -0
  683. package/bin/go/src/runtime/stubs_riscv64.go +13 -0
  684. package/bin/go/src/runtime/stubs_s390x.go +18 -0
  685. package/bin/go/src/runtime/symtab.go +15 -16
  686. package/bin/go/src/runtime/synctest.go +2 -4
  687. package/bin/go/src/runtime/sys_aix_ppc64.s +9 -0
  688. package/bin/go/src/runtime/sys_darwin.go +2 -20
  689. package/bin/go/src/runtime/sys_darwin_amd64.s +1 -4
  690. package/bin/go/src/runtime/sys_darwin_arm64.s +3 -6
  691. package/bin/go/src/runtime/sys_freebsd_riscv64.s +2 -2
  692. package/bin/go/src/runtime/sys_ios_arm64.go +151 -0
  693. package/bin/go/src/runtime/sys_ios_arm64.s +78 -0
  694. package/bin/go/src/runtime/sys_linux_amd64.s +7 -1
  695. package/bin/go/src/runtime/sys_linux_loong64.s +8 -14
  696. package/bin/go/src/runtime/sys_linux_ppc64x.s +0 -12
  697. package/bin/go/src/runtime/sys_linux_riscv64.s +2 -2
  698. package/bin/go/src/runtime/sys_openbsd.go +1 -1
  699. package/bin/go/src/runtime/sys_openbsd_riscv64.s +16 -16
  700. package/bin/go/src/runtime/syscall_windows.go +2 -6
  701. package/bin/go/src/runtime/time.go +19 -57
  702. package/bin/go/src/runtime/trace/subscribe.go +0 -3
  703. package/bin/go/src/runtime/traceback.go +90 -13
  704. package/bin/go/src/runtime/traceregion.go +3 -3
  705. package/bin/go/src/runtime/tracestring.go +5 -0
  706. package/bin/go/src/runtime/type.go +85 -15
  707. package/bin/go/src/runtime/utf8.go +2 -2
  708. package/bin/go/src/simd/archsimd/_gen/go.mod +2 -2
  709. package/bin/go/src/simd/archsimd/_gen/go.sum +2 -2
  710. package/bin/go/src/simd/archsimd/_gen/main.go +106 -15
  711. package/bin/go/src/simd/archsimd/_gen/midway/comments.yaml +151 -0
  712. package/bin/go/src/simd/archsimd/_gen/midway/intersect_simd_ops.go +836 -0
  713. package/bin/go/src/simd/archsimd/_gen/sgutil/asbits.go +139 -0
  714. package/bin/go/src/simd/archsimd/_gen/sgutil/compare_natural.go +73 -0
  715. package/bin/go/src/simd/archsimd/_gen/sgutil/formatted_files.go +66 -0
  716. package/bin/go/src/simd/archsimd/_gen/sgutil/insert_ordered_map.go +159 -0
  717. package/bin/go/src/simd/archsimd/_gen/sgutil/merge_generic_ops.go +245 -0
  718. package/bin/go/src/simd/archsimd/_gen/simdgen/arch.go +173 -0
  719. package/bin/go/src/simd/archsimd/_gen/simdgen/arm64/emit.go +166 -0
  720. package/bin/go/src/simd/archsimd/_gen/simdgen/arm64/instruction.go +642 -0
  721. package/bin/go/src/simd/archsimd/_gen/simdgen/arm64/load.go +54 -0
  722. package/bin/go/src/simd/archsimd/_gen/simdgen/arm64/operands.go +406 -0
  723. package/bin/go/src/simd/archsimd/_gen/simdgen/etetest.sh +1 -1
  724. package/bin/go/src/simd/archsimd/_gen/simdgen/gen_simdGenericOps.go +19 -52
  725. package/bin/go/src/simd/archsimd/_gen/simdgen/gen_simdIntrinsics.go +162 -98
  726. package/bin/go/src/simd/archsimd/_gen/simdgen/gen_simdMachineOps.go +50 -19
  727. package/bin/go/src/simd/archsimd/_gen/simdgen/gen_simdTypes.go +198 -140
  728. package/bin/go/src/simd/archsimd/_gen/simdgen/gen_simdrules.go +278 -57
  729. package/bin/go/src/simd/archsimd/_gen/simdgen/gen_simdssa.go +133 -68
  730. package/bin/go/src/simd/archsimd/_gen/simdgen/gen_utility.go +163 -30
  731. package/bin/go/src/simd/archsimd/_gen/simdgen/go_amd64.yaml +1 -0
  732. package/bin/go/src/simd/archsimd/_gen/simdgen/go_arm64.yaml +1 -0
  733. package/bin/go/src/simd/archsimd/_gen/simdgen/godefs.go +113 -15
  734. package/bin/go/src/simd/archsimd/_gen/simdgen/main.go +62 -17
  735. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/AddSub/categories.yaml +12 -12
  736. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/AddSub/{go.yaml → go_amd64.yaml} +12 -12
  737. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/AddSub/go_arm64.yaml +91 -0
  738. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/BitwiseLogic/categories.yaml +11 -3
  739. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/BitwiseLogic/go_arm64.yaml +43 -0
  740. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Compares/go_arm64.yaml +81 -0
  741. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Converts/categories.yaml +11 -6
  742. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Converts/{go.yaml → go_amd64.yaml} +8 -8
  743. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Converts/go_arm64.yaml +358 -0
  744. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/FPonlyArith/categories.yaml +5 -5
  745. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/FPonlyArith/{go.yaml → go_amd64.yaml} +4 -4
  746. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/FPonlyArith/go_arm64.yaml +52 -0
  747. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/GaloisField/categories.yaml +29 -11
  748. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/GaloisField/{go.yaml → go_amd64.yaml} +1 -0
  749. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/GaloisField/go_arm64.yaml +10 -0
  750. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/IntOnlyArith/categories.yaml +2 -5
  751. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/IntOnlyArith/{go.yaml → go_amd64.yaml} +2 -3
  752. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/IntOnlyArith/go_arm64.yaml +35 -0
  753. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/MLOps/categories.yaml +5 -8
  754. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/MLOps/{go.yaml → go_amd64.yaml} +7 -5
  755. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/MLOps/go_arm64.yaml +31 -0
  756. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/MinMax/go_arm64.yaml +61 -0
  757. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Moves/categories.yaml +79 -23
  758. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Moves/{go.yaml → go_amd64.yaml} +213 -104
  759. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Moves/go_arm64.yaml +264 -0
  760. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Mul/categories.yaml +6 -2
  761. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Mul/{go.yaml → go_amd64.yaml} +3 -3
  762. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Mul/go_arm64.yaml +38 -0
  763. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/NegAbs/categories.yaml +7 -0
  764. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/NegAbs/go_arm64.yaml +36 -0
  765. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Others/categories.yaml +5 -1
  766. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Others/go_arm64.yaml +19 -0
  767. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Reduce/categories.yaml +16 -0
  768. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Reduce/go_arm64.yaml +71 -0
  769. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/ShiftRotate/categories.yaml +156 -41
  770. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/ShiftRotate/go_amd64.yaml +299 -0
  771. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/ShiftRotate/go_arm64.yaml +202 -0
  772. package/bin/go/src/simd/archsimd/_gen/simdgen/types.yaml +2 -0
  773. package/bin/go/src/simd/archsimd/_gen/simdgen/xed.go +44 -11
  774. package/bin/go/src/simd/archsimd/_gen/tmplgen/main.go +668 -123
  775. package/bin/go/src/simd/archsimd/_gen/unify/closure.go +1 -1
  776. package/bin/go/src/simd/archsimd/_gen/unify/env.go +35 -3
  777. package/bin/go/src/simd/archsimd/_gen/unify/yaml.go +4 -4
  778. package/bin/go/src/simd/archsimd/_gen/wasmgen/main.go +2064 -0
  779. package/bin/go/src/simd/archsimd/clmul_arm64.go +79 -0
  780. package/bin/go/src/simd/archsimd/clmul_emulated.go +103 -0
  781. package/bin/go/src/simd/archsimd/compare_gen_arm64.go +155 -0
  782. package/bin/go/src/simd/archsimd/cpu.go +1 -1
  783. package/bin/go/src/simd/archsimd/cpu_other.go +21 -0
  784. package/bin/go/src/simd/archsimd/doc.go +0 -2
  785. package/bin/go/src/simd/archsimd/dummy.s +1 -1
  786. package/bin/go/src/simd/archsimd/generate.go +1 -1
  787. package/bin/go/src/simd/archsimd/internal/test_helpers/checkslices.go +2 -2
  788. package/bin/go/src/simd/archsimd/maskmerge_gen_amd64.go +330 -0
  789. package/bin/go/src/simd/archsimd/maskmerge_gen_arm64.go +167 -0
  790. package/bin/go/src/simd/archsimd/ops_amd64.go +4210 -2475
  791. package/bin/go/src/simd/archsimd/ops_arm64.go +2186 -0
  792. package/bin/go/src/simd/archsimd/ops_emulated_amd64.go +205 -0
  793. package/bin/go/src/simd/archsimd/ops_emulated_wasm.go +212 -0
  794. package/bin/go/src/simd/archsimd/ops_internal_amd64.go +500 -56
  795. package/bin/go/src/simd/archsimd/ops_internal_arm64.go +234 -0
  796. package/bin/go/src/simd/archsimd/ops_wasm.go +1795 -0
  797. package/bin/go/src/simd/archsimd/other_gen_amd64.go +576 -72
  798. package/bin/go/src/simd/archsimd/other_gen_arm64.go +519 -0
  799. package/bin/go/src/simd/archsimd/shuffles_amd64.go +217 -76
  800. package/bin/go/src/simd/archsimd/slice_gen_amd64.go +594 -532
  801. package/bin/go/src/simd/archsimd/slice_gen_arm64.go +125 -0
  802. package/bin/go/src/simd/archsimd/slicepart_128.go +302 -0
  803. package/bin/go/src/simd/archsimd/slicepart_amd64.go +36 -235
  804. package/bin/go/src/simd/archsimd/slicepart_arm64.go +217 -0
  805. package/bin/go/src/simd/archsimd/slicepart_wasm.go +217 -0
  806. package/bin/go/src/simd/archsimd/string.go +1 -1
  807. package/bin/go/src/simd/archsimd/types_amd64.go +165 -341
  808. package/bin/go/src/simd/archsimd/types_arm64.go +224 -0
  809. package/bin/go/src/simd/archsimd/types_wasm.go +354 -0
  810. package/bin/go/src/simd/archsimd/unsafe_helpers.go +60 -0
  811. package/bin/go/src/simd/doc.go +91 -0
  812. package/bin/go/src/simd/dummy.s +7 -0
  813. package/bin/go/src/simd/internal/bridge/decls_amd64.go +4085 -0
  814. package/bin/go/src/simd/internal/bridge/decls_arm64.go +1369 -0
  815. package/bin/go/src/simd/internal/bridge/decls_wasm.go +1369 -0
  816. package/bin/go/src/simd/internal/bridge/import_hook.go +13 -0
  817. package/bin/go/src/simd/internal/bridge/simd_emulated.go +3275 -0
  818. package/bin/go/src/simd/internal/bridge/simd_types_emulated.go +95 -0
  819. package/bin/go/src/simd/internal/bridge/tofrom_128.go +65 -0
  820. package/bin/go/src/simd/internal/bridge/tofrom_amd64.go +123 -0
  821. package/bin/go/src/simd/internal/bridge/tofrom_emulated.go +63 -0
  822. package/bin/go/src/simd/midway_amd64.go +34 -0
  823. package/bin/go/src/simd/midway_arm64.go +22 -0
  824. package/bin/go/src/simd/midway_common.go +138 -0
  825. package/bin/go/src/simd/midway_wasm.go +13 -0
  826. package/bin/go/src/simd/simd_emulated.go +3275 -0
  827. package/bin/go/src/simd/simd_stubs.go +1041 -0
  828. package/bin/go/src/simd/simd_types.go +96 -0
  829. package/bin/go/src/simd/tofrom_amd64.go +374 -0
  830. package/bin/go/src/simd/tofrom_arm64.go +290 -0
  831. package/bin/go/src/simd/tofrom_wasm.go +290 -0
  832. package/bin/go/src/slices/slices.go +9 -7
  833. package/bin/go/src/strconv/isprint.go +81 -51
  834. package/bin/go/src/strings/builder.go +1 -1
  835. package/bin/go/src/strings/strings.go +44 -35
  836. package/bin/go/src/sync/atomic/doc.go +7 -0
  837. package/bin/go/src/sync/cond.go +4 -2
  838. package/bin/go/src/sync/pool.go +6 -15
  839. package/bin/go/src/sync/runtime2_lockrank.go +1 -2
  840. package/bin/go/src/syscall/exec_bsd.go +3 -3
  841. package/bin/go/src/syscall/exec_libc2.go +1 -1
  842. package/bin/go/src/syscall/exec_linux.go +7 -2
  843. package/bin/go/src/syscall/fs_js.go +9 -4
  844. package/bin/go/src/syscall/fs_wasip1.go +6 -0
  845. package/bin/go/src/syscall/js/js.go +2 -2
  846. package/bin/go/src/syscall/linkname_bsd.go +8 -0
  847. package/bin/go/src/syscall/linkname_libc.go +1 -1
  848. package/bin/go/src/syscall/linkname_openbsd.go +0 -2
  849. package/bin/go/src/syscall/mkall.sh +6 -17
  850. package/bin/go/src/syscall/syscall_aix.go +5 -0
  851. package/bin/go/src/syscall/syscall_linux_386.go +9 -0
  852. package/bin/go/src/syscall/syscall_linux_amd64.go +5 -0
  853. package/bin/go/src/syscall/syscall_linux_arm.go +4 -0
  854. package/bin/go/src/syscall/syscall_linux_arm64.go +3 -0
  855. package/bin/go/src/syscall/syscall_linux_loong64.go +3 -0
  856. package/bin/go/src/syscall/syscall_linux_mipsx.go +4 -0
  857. package/bin/go/src/syscall/syscall_linux_riscv64.go +3 -0
  858. package/bin/go/src/syscall/syscall_linux_s390x.go +5 -0
  859. package/bin/go/src/syscall/syscall_openbsd.go +77 -2
  860. package/bin/go/src/syscall/syscall_plan9.go +25 -0
  861. package/bin/go/src/syscall/syscall_solaris.go +11 -0
  862. package/bin/go/src/syscall/syscall_unix.go +19 -0
  863. package/bin/go/src/syscall/syscall_windows.go +1 -1
  864. package/bin/go/src/testing/synctest/synctest.go +21 -0
  865. package/bin/go/src/testing/testing.go +211 -52
  866. package/bin/go/src/text/template/parse/lex.go +6 -6
  867. package/bin/go/src/text/template/parse/node.go +21 -16
  868. package/bin/go/src/text/template/parse/parse.go +23 -6
  869. package/bin/go/src/text/template/template.go +5 -3
  870. package/bin/go/src/time/format.go +3 -0
  871. package/bin/go/src/time/sleep.go +0 -33
  872. package/bin/go/src/time/tick.go +3 -2
  873. package/bin/go/src/time/time.go +2 -2
  874. package/bin/go/src/time/tzdata/zzipdata.go +1 -1
  875. package/bin/go/src/time/zoneinfo.go +5 -4
  876. package/bin/go/src/time/zoneinfo_read.go +1 -1
  877. package/bin/go/src/unicode/tables.go +898 -417
  878. package/bin/go/src/uuid/uuid.go +273 -0
  879. package/bin/go/src/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go +3 -3
  880. package/bin/go/src/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s +2066 -6598
  881. package/bin/go/src/vendor/golang.org/x/crypto/hkdf/hkdf.go +100 -0
  882. package/bin/go/src/vendor/golang.org/x/net/dns/dnsmessage/message.go +5 -4
  883. package/bin/go/src/vendor/golang.org/x/net/http/httpproxy/proxy.go +4 -4
  884. package/bin/go/src/vendor/golang.org/x/net/http3/http3.go +46 -0
  885. package/bin/go/src/vendor/golang.org/x/net/idna/{idna10.0.0.go → idna.go} +133 -35
  886. package/bin/go/src/vendor/golang.org/x/net/idna/punycode.go +4 -1
  887. package/bin/go/src/vendor/golang.org/x/net/idna/tables15.0.0.go +1 -1
  888. package/bin/go/src/vendor/golang.org/x/net/idna/tables17.0.0.go +5302 -0
  889. package/bin/go/src/vendor/golang.org/x/net/internal/http3/body.go +231 -0
  890. package/bin/go/src/vendor/golang.org/x/net/internal/http3/conn.go +131 -0
  891. package/bin/go/src/vendor/golang.org/x/net/internal/http3/doc.go +10 -0
  892. package/bin/go/src/vendor/golang.org/x/net/internal/http3/errors.go +102 -0
  893. package/bin/go/src/vendor/golang.org/x/net/internal/http3/http3.go +95 -0
  894. package/bin/go/src/vendor/golang.org/x/net/internal/http3/qpack.go +356 -0
  895. package/bin/go/src/vendor/golang.org/x/net/internal/http3/qpack_decode.go +81 -0
  896. package/bin/go/src/vendor/golang.org/x/net/internal/http3/qpack_encode.go +61 -0
  897. package/bin/go/src/vendor/golang.org/x/net/internal/http3/qpack_static.go +142 -0
  898. package/bin/go/src/vendor/golang.org/x/net/internal/http3/quic.go +40 -0
  899. package/bin/go/src/vendor/golang.org/x/net/internal/http3/roundtrip.go +423 -0
  900. package/bin/go/src/vendor/golang.org/x/net/internal/http3/server.go +866 -0
  901. package/bin/go/src/vendor/golang.org/x/net/internal/http3/settings.go +66 -0
  902. package/bin/go/src/vendor/golang.org/x/net/internal/http3/stream.go +260 -0
  903. package/bin/go/src/vendor/golang.org/x/net/internal/http3/transport.go +333 -0
  904. package/bin/go/src/vendor/golang.org/x/net/internal/http3/varint.go +23 -0
  905. package/bin/go/src/vendor/golang.org/x/net/internal/httpcommon/ascii.go +53 -0
  906. package/bin/go/src/vendor/golang.org/x/net/internal/httpcommon/headermap.go +115 -0
  907. package/bin/go/src/vendor/golang.org/x/net/internal/httpcommon/request.go +475 -0
  908. package/bin/go/src/vendor/golang.org/x/net/internal/quic/quicwire/wire.go +150 -0
  909. package/bin/go/src/vendor/golang.org/x/net/quic/ack_delay.go +26 -0
  910. package/bin/go/src/vendor/golang.org/x/net/quic/acks.go +213 -0
  911. package/bin/go/src/vendor/golang.org/x/net/quic/atomic_bits.go +31 -0
  912. package/bin/go/src/vendor/golang.org/x/net/quic/config.go +158 -0
  913. package/bin/go/src/vendor/golang.org/x/net/quic/congestion_reno.go +306 -0
  914. package/bin/go/src/vendor/golang.org/x/net/quic/conn.go +434 -0
  915. package/bin/go/src/vendor/golang.org/x/net/quic/conn_close.go +340 -0
  916. package/bin/go/src/vendor/golang.org/x/net/quic/conn_flow.go +142 -0
  917. package/bin/go/src/vendor/golang.org/x/net/quic/conn_id.go +502 -0
  918. package/bin/go/src/vendor/golang.org/x/net/quic/conn_loss.go +85 -0
  919. package/bin/go/src/vendor/golang.org/x/net/quic/conn_recv.go +631 -0
  920. package/bin/go/src/vendor/golang.org/x/net/quic/conn_send.go +407 -0
  921. package/bin/go/src/vendor/golang.org/x/net/quic/conn_streams.go +483 -0
  922. package/bin/go/src/vendor/golang.org/x/net/quic/crypto_stream.go +157 -0
  923. package/bin/go/src/vendor/golang.org/x/net/quic/dgram.go +53 -0
  924. package/bin/go/src/vendor/golang.org/x/net/quic/doc.go +50 -0
  925. package/bin/go/src/vendor/golang.org/x/net/quic/endpoint.go +478 -0
  926. package/bin/go/src/vendor/golang.org/x/net/quic/errors.go +129 -0
  927. package/bin/go/src/vendor/golang.org/x/net/quic/frame_debug.go +730 -0
  928. package/bin/go/src/vendor/golang.org/x/net/quic/gate.go +86 -0
  929. package/bin/go/src/vendor/golang.org/x/net/quic/idle.go +168 -0
  930. package/bin/go/src/vendor/golang.org/x/net/quic/log.go +67 -0
  931. package/bin/go/src/vendor/golang.org/x/net/quic/loss.go +521 -0
  932. package/bin/go/src/{runtime/cgo/gcc_stack_windows.c → vendor/golang.org/x/net/quic/math.go} +7 -2
  933. package/bin/go/src/vendor/golang.org/x/net/quic/pacer.go +129 -0
  934. package/bin/go/src/vendor/golang.org/x/net/quic/packet.go +267 -0
  935. package/bin/go/src/vendor/golang.org/x/net/quic/packet_number.go +72 -0
  936. package/bin/go/src/vendor/golang.org/x/net/quic/packet_parser.go +519 -0
  937. package/bin/go/src/vendor/golang.org/x/net/quic/packet_protection.go +539 -0
  938. package/bin/go/src/vendor/golang.org/x/net/quic/packet_writer.go +566 -0
  939. package/bin/go/src/vendor/golang.org/x/net/quic/path.go +87 -0
  940. package/bin/go/src/vendor/golang.org/x/net/quic/ping.go +14 -0
  941. package/bin/go/src/vendor/golang.org/x/net/quic/pipe.go +173 -0
  942. package/bin/go/src/vendor/golang.org/x/net/quic/qlog.go +272 -0
  943. package/bin/go/src/vendor/golang.org/x/net/quic/queue.go +63 -0
  944. package/bin/go/src/vendor/golang.org/x/net/quic/quic.go +221 -0
  945. package/bin/go/src/vendor/golang.org/x/net/quic/race_disabled.go +10 -0
  946. package/bin/go/src/vendor/golang.org/x/net/quic/race_enabled.go +27 -0
  947. package/bin/go/src/vendor/golang.org/x/net/quic/rangeset.go +193 -0
  948. package/bin/go/src/vendor/golang.org/x/net/quic/retry.go +240 -0
  949. package/bin/go/src/vendor/golang.org/x/net/quic/rtt.go +71 -0
  950. package/bin/go/src/vendor/golang.org/x/net/quic/sent_packet.go +119 -0
  951. package/bin/go/src/vendor/golang.org/x/net/quic/sent_packet_list.go +93 -0
  952. package/bin/go/src/vendor/golang.org/x/net/quic/sent_val.go +103 -0
  953. package/bin/go/src/vendor/golang.org/x/net/quic/skip.go +62 -0
  954. package/bin/go/src/vendor/golang.org/x/net/quic/stateless_reset.go +59 -0
  955. package/bin/go/src/vendor/golang.org/x/net/quic/stream.go +1106 -0
  956. package/bin/go/src/vendor/golang.org/x/net/quic/stream_limits.go +138 -0
  957. package/bin/go/src/vendor/golang.org/x/net/quic/tls.go +123 -0
  958. package/bin/go/src/vendor/golang.org/x/net/quic/transport_params.go +283 -0
  959. package/bin/go/src/vendor/golang.org/x/net/quic/udp.go +28 -0
  960. package/bin/go/src/vendor/golang.org/x/net/quic/udp_darwin.go +45 -0
  961. package/bin/go/src/vendor/golang.org/x/net/quic/udp_linux.go +39 -0
  962. package/bin/go/src/vendor/golang.org/x/net/quic/udp_msg.go +245 -0
  963. package/bin/go/src/vendor/golang.org/x/net/quic/udp_other.go +62 -0
  964. package/bin/go/src/vendor/golang.org/x/net/quic/udp_packetconn.go +67 -0
  965. package/bin/go/src/vendor/golang.org/x/sys/cpu/asm_darwin_arm64_gc.s +12 -0
  966. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu.go +12 -7
  967. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu_arm64.go +3 -6
  968. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64.go +67 -0
  969. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go +31 -0
  970. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu_gccgo_arm64.go +1 -0
  971. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go +2 -0
  972. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu_loong64.go +14 -2
  973. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go +4 -2
  974. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu_riscv64.go +1 -0
  975. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu_windows.go +26 -0
  976. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go +38 -0
  977. package/bin/go/src/vendor/golang.org/x/sys/cpu/cpu_x86.go +124 -50
  978. package/bin/go/src/vendor/golang.org/x/sys/cpu/syscall_darwin_arm64_gc.go +54 -0
  979. package/bin/go/src/vendor/golang.org/x/sys/cpu/zcpu_windows.go +48 -0
  980. package/bin/go/src/vendor/golang.org/x/text/secure/bidirule/bidirule.go +4 -0
  981. package/bin/go/src/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go +1 -1
  982. package/bin/go/src/vendor/golang.org/x/text/unicode/bidi/tables17.0.0.go +2135 -0
  983. package/bin/go/src/vendor/golang.org/x/text/unicode/norm/forminfo.go +18 -8
  984. package/bin/go/src/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go +1410 -1410
  985. package/bin/go/src/vendor/golang.org/x/text/unicode/norm/{tables13.0.0.go → tables17.0.0.go} +3530 -3186
  986. package/bin/go/src/vendor/modules.txt +14 -8
  987. package/bin/ttsc-cache.exe +0 -0
  988. package/bin/ttsc.exe +0 -0
  989. package/bin/ttscserver.exe +0 -0
  990. package/package.json +1 -1
  991. package/bin/go/src/crypto/internal/fips140/nistec/p256_ordinv_noasm.go +0 -13
  992. package/bin/go/src/go/internal/scannerhooks/hooks.go +0 -11
  993. package/bin/go/src/hash/maphash/maphash_purego.go +0 -200
  994. package/bin/go/src/hash/maphash/maphash_runtime.go +0 -64
  995. package/bin/go/src/internal/goexperiment/exp_goroutineleakprofile_off.go +0 -8
  996. package/bin/go/src/internal/goexperiment/exp_goroutineleakprofile_on.go +0 -8
  997. package/bin/go/src/internal/strconv/atofeisel.go +0 -166
  998. package/bin/go/src/internal/strconv/ftoadbox.go +0 -349
  999. package/bin/go/src/internal/strconv/ftoafixed.go +0 -184
  1000. package/bin/go/src/internal/strconv/math.go +0 -179
  1001. package/bin/go/src/net/http/h2_bundle.go +0 -12371
  1002. package/bin/go/src/net/http/h2_error.go +0 -37
  1003. package/bin/go/src/runtime/cgo/gcc_darwin_amd64.c +0 -61
  1004. package/bin/go/src/runtime/cgo/gcc_darwin_arm64.c +0 -148
  1005. package/bin/go/src/runtime/cgo/gcc_dragonfly_amd64.c +0 -61
  1006. package/bin/go/src/runtime/cgo/gcc_freebsd.c +0 -72
  1007. package/bin/go/src/runtime/cgo/gcc_freebsd_amd64.c +0 -72
  1008. package/bin/go/src/runtime/cgo/gcc_linux.c +0 -67
  1009. package/bin/go/src/runtime/cgo/gcc_linux_amd64.c +0 -92
  1010. package/bin/go/src/runtime/cgo/gcc_linux_arm64.c +0 -88
  1011. package/bin/go/src/runtime/cgo/gcc_linux_s390x.c +0 -64
  1012. package/bin/go/src/runtime/cgo/gcc_openbsd.c +0 -62
  1013. package/bin/go/src/runtime/cgo/gcc_ppc64x.c +0 -68
  1014. package/bin/go/src/runtime/cgo/gcc_signal2_ios_arm64.c +0 -11
  1015. package/bin/go/src/runtime/cgo/gcc_signal_ios_arm64.c +0 -213
  1016. package/bin/go/src/runtime/cgo/gcc_signal_ios_nolldb.c +0 -10
  1017. package/bin/go/src/runtime/cgo/gcc_solaris_amd64.c +0 -83
  1018. package/bin/go/src/runtime/cgo/gcc_stack_darwin.c +0 -25
  1019. package/bin/go/src/runtime/cgo/gcc_stack_unix.c +0 -48
  1020. package/bin/go/src/runtime/cgo/gcc_windows_386.c +0 -55
  1021. package/bin/go/src/runtime/cgo/gcc_windows_amd64.c +0 -54
  1022. package/bin/go/src/runtime/cgo/gcc_windows_arm64.c +0 -42
  1023. package/bin/go/src/runtime/cgo/libcgo_windows.h +0 -6
  1024. package/bin/go/src/runtime/cgo/signal_ios_arm64.go +0 -10
  1025. package/bin/go/src/runtime/cgo/signal_ios_arm64.s +0 -56
  1026. package/bin/go/src/runtime/rt0_linux_ppc64.s +0 -28
  1027. package/bin/go/src/runtime/stubs_ppc64.go +0 -12
  1028. package/bin/go/src/simd/archsimd/_gen/simdgen/go.yaml +0 -1
  1029. package/bin/go/src/simd/archsimd/_gen/simdgen/ops/ShiftRotate/go.yaml +0 -172
  1030. package/bin/go/src/syscall/asm_openbsd_mips64.s +0 -129
  1031. package/bin/go/src/syscall/syscall_openbsd1.go +0 -12
  1032. package/bin/go/src/syscall/syscall_openbsd_libc.go +0 -84
  1033. package/bin/go/src/syscall/syscall_openbsd_mips64.go +0 -43
  1034. package/bin/go/src/syscall/zerrors_openbsd_mips64.go +0 -1682
  1035. package/bin/go/src/syscall/zsyscall_openbsd_mips64.go +0 -1289
  1036. package/bin/go/src/syscall/zsysnum_openbsd_mips64.go +0 -218
  1037. package/bin/go/src/syscall/ztypes_openbsd_mips64.go +0 -443
  1038. package/bin/go/src/vendor/golang.org/x/net/idna/go118.go +0 -13
  1039. package/bin/go/src/vendor/golang.org/x/net/idna/idna9.0.0.go +0 -717
  1040. package/bin/go/src/vendor/golang.org/x/net/idna/pre_go118.go +0 -11
  1041. package/bin/go/src/vendor/golang.org/x/net/idna/tables10.0.0.go +0 -4559
  1042. package/bin/go/src/vendor/golang.org/x/net/idna/tables11.0.0.go +0 -4653
  1043. package/bin/go/src/vendor/golang.org/x/net/idna/tables12.0.0.go +0 -4733
  1044. package/bin/go/src/vendor/golang.org/x/net/idna/tables13.0.0.go +0 -4959
  1045. package/bin/go/src/vendor/golang.org/x/net/idna/tables9.0.0.go +0 -4486
  1046. package/bin/go/src/vendor/golang.org/x/net/idna/trie12.0.0.go +0 -30
  1047. package/bin/go/src/vendor/golang.org/x/net/idna/trie13.0.0.go +0 -30
  1048. package/bin/go/src/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go +0 -11
  1049. package/bin/go/src/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go +0 -14
  1050. package/bin/go/src/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go +0 -1815
  1051. package/bin/go/src/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go +0 -1887
  1052. package/bin/go/src/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go +0 -1923
  1053. package/bin/go/src/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go +0 -1955
  1054. package/bin/go/src/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go +0 -1781
  1055. package/bin/go/src/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go +0 -7657
  1056. package/bin/go/src/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go +0 -7693
  1057. package/bin/go/src/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go +0 -7710
  1058. package/bin/go/src/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go +0 -7637
  1059. /package/bin/go/src/simd/archsimd/_gen/simdgen/ops/BitwiseLogic/{go.yaml → go_amd64.yaml} +0 -0
  1060. /package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Compares/{go.yaml → go_amd64.yaml} +0 -0
  1061. /package/bin/go/src/simd/archsimd/_gen/simdgen/ops/MinMax/{go.yaml → go_amd64.yaml} +0 -0
  1062. /package/bin/go/src/simd/archsimd/_gen/simdgen/ops/Others/{go.yaml → go_amd64.yaml} +0 -0
@@ -0,0 +1,1106 @@
1
+ // Copyright 2023 The Go Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+
5
+ package quic
6
+
7
+ import (
8
+ "context"
9
+ "errors"
10
+ "fmt"
11
+ "io"
12
+ "math"
13
+ "sync"
14
+
15
+ "golang.org/x/net/internal/quic/quicwire"
16
+ )
17
+
18
+ // A Stream is an ordered byte stream.
19
+ //
20
+ // Streams may be bidirectional, read-only, or write-only.
21
+ // Methods inappropriate for a stream's direction
22
+ // (for example, [Write] to a read-only stream)
23
+ // return errors.
24
+ //
25
+ // It is not safe to perform concurrent reads from or writes to a stream.
26
+ // It is safe, however, to read and write at the same time.
27
+ //
28
+ // Reads and writes are buffered.
29
+ // It is generally not necessary to wrap a stream in a [bufio.ReadWriter]
30
+ // or otherwise apply additional buffering.
31
+ //
32
+ // To cancel reads or writes, use the [SetReadContext] and [SetWriteContext] methods.
33
+ type Stream struct {
34
+ id streamID
35
+ conn *Conn
36
+
37
+ // Contexts used for read/write operations.
38
+ // Intentionally not mutex-guarded, to allow the race detector to catch concurrent access.
39
+ inctx context.Context
40
+ outctx context.Context
41
+
42
+ // ingate's lock guards receive-related state.
43
+ //
44
+ // The gate condition is set if a read from the stream will not block,
45
+ // either because the stream has available data or because the read will fail.
46
+ ingate gate
47
+ in pipe // received data
48
+ inwin int64 // last MAX_STREAM_DATA sent to the peer
49
+ insendmax sentVal // set when we should send MAX_STREAM_DATA to the peer
50
+ inmaxbuf int64 // maximum amount of data we will buffer
51
+ insize int64 // stream final size; -1 before this is known
52
+ inset rangeset[int64] // received ranges
53
+ inclosed sentVal // set by CloseRead
54
+ inresetcode int64 // RESET_STREAM code received from the peer; -1 if not reset
55
+
56
+ // outgate's lock guards send-related state.
57
+ //
58
+ // The gate condition is set if a write to the stream will not block,
59
+ // either because the stream has available flow control or because
60
+ // the write will fail.
61
+ outgate gate
62
+ out pipe // buffered data to send
63
+ outflushed int64 // offset of last flush call
64
+ outwin int64 // maximum MAX_STREAM_DATA received from the peer
65
+ outmaxsent int64 // maximum data offset we've sent to the peer
66
+ outmaxbuf int64 // maximum amount of data we will buffer
67
+ outunsent rangeset[int64] // ranges buffered but not yet sent (only flushed data)
68
+ outacked rangeset[int64] // ranges sent and acknowledged
69
+ outopened sentVal // set if we should open the stream
70
+ outclosed sentVal // set by CloseWrite
71
+ outblocked sentVal // set when a write to the stream is blocked by flow control
72
+ outreset sentVal // set by Reset
73
+ outresetcode uint64 // reset code to send in RESET_STREAM
74
+ outdone chan struct{} // closed when all data sent
75
+
76
+ // Buffers used for fast path; mutex-guarded, but uncontended in normal operations.
77
+ inbufmu sync.Mutex
78
+ inbuf []byte // received data
79
+ inbufoff int // bytes of inbuf which have been consumed
80
+
81
+ outbufmu sync.Mutex
82
+ outbuf []byte // written data
83
+ outbufoff int // bytes of outbuf which contain data to write
84
+
85
+ // Atomic stream state bits.
86
+ //
87
+ // These bits provide a fast way to coordinate between the
88
+ // send and receive sides of the stream, and the conn's loop.
89
+ //
90
+ // streamIn* bits must be set with ingate held.
91
+ // streamOut* bits must be set with outgate held.
92
+ // streamConn* bits are set by the conn's loop.
93
+ // streamQueue* bits must be set with streamsState.sendMu held.
94
+ state atomicBits[streamState]
95
+
96
+ prev, next *Stream // guarded by streamsState.sendMu
97
+ }
98
+
99
+ type streamState uint32
100
+
101
+ const (
102
+ // streamInSendMeta is set when there are frames to send for the
103
+ // inbound side of the stream. For example, MAX_STREAM_DATA.
104
+ // Inbound frames are never flow-controlled.
105
+ streamInSendMeta = streamState(1 << iota)
106
+
107
+ // streamOutSendMeta is set when there are non-flow-controlled frames
108
+ // to send for the outbound side of the stream. For example, STREAM_DATA_BLOCKED.
109
+ // streamOutSendData is set when there are no non-flow-controlled outbound frames
110
+ // and the stream has data to send.
111
+ //
112
+ // At most one of streamOutSendMeta and streamOutSendData is set at any time.
113
+ streamOutSendMeta
114
+ streamOutSendData
115
+
116
+ // streamInDone and streamOutDone are set when the inbound or outbound
117
+ // sides of the stream are finished. When both are set, the stream
118
+ // can be removed from the Conn and forgotten.
119
+ streamInDone
120
+ streamOutDone
121
+
122
+ // streamConnRemoved is set when the stream has been removed from the conn.
123
+ streamConnRemoved
124
+
125
+ // streamQueueMeta and streamQueueData indicate which of the streamsState
126
+ // send queues the conn is currently on.
127
+ streamQueueMeta
128
+ streamQueueData
129
+ )
130
+
131
+ type streamQueue int
132
+
133
+ const (
134
+ noQueue = streamQueue(iota)
135
+ metaQueue // streamsState.queueMeta
136
+ dataQueue // streamsState.queueData
137
+ )
138
+
139
+ // streamResetByConnClose is assigned to Stream.inresetcode to indicate that a stream
140
+ // was implicitly reset when the connection closed. It's out of the range of
141
+ // possible reset codes the peer can send.
142
+ const streamResetByConnClose = math.MaxInt64
143
+
144
+ // wantQueue returns the send queue the stream should be on.
145
+ func (s streamState) wantQueue() streamQueue {
146
+ switch {
147
+ case s&(streamInSendMeta|streamOutSendMeta) != 0:
148
+ return metaQueue
149
+ case s&(streamInDone|streamOutDone|streamConnRemoved) == streamInDone|streamOutDone:
150
+ return metaQueue
151
+ case s&streamOutSendData != 0:
152
+ // The stream has no non-flow-controlled frames to send,
153
+ // but does have data. Put it on the data queue, which is only
154
+ // processed when flow control is available.
155
+ return dataQueue
156
+ }
157
+ return noQueue
158
+ }
159
+
160
+ // inQueue returns the send queue the stream is currently on.
161
+ func (s streamState) inQueue() streamQueue {
162
+ switch {
163
+ case s&streamQueueMeta != 0:
164
+ return metaQueue
165
+ case s&streamQueueData != 0:
166
+ return dataQueue
167
+ }
168
+ return noQueue
169
+ }
170
+
171
+ // newStream returns a new stream.
172
+ //
173
+ // The stream's ingate and outgate are locked.
174
+ // (We create the stream with locked gates so after the caller
175
+ // initializes the flow control window,
176
+ // unlocking outgate will set the stream writability state.)
177
+ func newStream(c *Conn, id streamID) *Stream {
178
+ s := &Stream{
179
+ conn: c,
180
+ id: id,
181
+ insize: -1, // -1 indicates the stream size is unknown
182
+ inresetcode: -1, // -1 indicates no RESET_STREAM received
183
+ ingate: newLockedGate(),
184
+ outgate: newLockedGate(),
185
+ inctx: context.Background(),
186
+ outctx: context.Background(),
187
+ }
188
+ if !s.IsReadOnly() {
189
+ s.outdone = make(chan struct{})
190
+ }
191
+ return s
192
+ }
193
+
194
+ // ID returns the QUIC stream ID of s.
195
+ //
196
+ // As specified in RFC 9000, the two least significant bits of a stream ID
197
+ // indicate the initiator and directionality of the stream. The upper bits are
198
+ // the stream number.
199
+ func (s *Stream) ID() int64 {
200
+ return int64(s.id)
201
+ }
202
+
203
+ // SetReadContext sets the context used for reads from the stream.
204
+ //
205
+ // It is not safe to call SetReadContext concurrently.
206
+ func (s *Stream) SetReadContext(ctx context.Context) {
207
+ s.inctx = ctx
208
+ }
209
+
210
+ // SetWriteContext sets the context used for writes to the stream.
211
+ // The write context is also used by Close when waiting for writes to be
212
+ // received by the peer.
213
+ //
214
+ // It is not safe to call SetWriteContext concurrently.
215
+ func (s *Stream) SetWriteContext(ctx context.Context) {
216
+ s.outctx = ctx
217
+ }
218
+
219
+ // IsReadOnly reports whether the stream is read-only
220
+ // (a unidirectional stream created by the peer).
221
+ func (s *Stream) IsReadOnly() bool {
222
+ return s.id.streamType() == uniStream && s.id.initiator() != s.conn.side
223
+ }
224
+
225
+ // IsWriteOnly reports whether the stream is write-only
226
+ // (a unidirectional stream created locally).
227
+ func (s *Stream) IsWriteOnly() bool {
228
+ return s.id.streamType() == uniStream && s.id.initiator() == s.conn.side
229
+ }
230
+
231
+ // Read reads data from the stream.
232
+ //
233
+ // Read returns as soon as at least one byte of data is available.
234
+ //
235
+ // If the peer closes the stream cleanly, Read returns io.EOF after
236
+ // returning all data sent by the peer.
237
+ // If the peer aborts reads on the stream, Read returns
238
+ // an error wrapping StreamResetCode.
239
+ //
240
+ // It is not safe to call Read concurrently.
241
+ func (s *Stream) Read(b []byte) (n int, err error) {
242
+ if s.IsWriteOnly() {
243
+ return 0, errors.New("read from write-only stream")
244
+ }
245
+
246
+ fastPath := false
247
+ s.inbufmu.Lock()
248
+ if len(s.inbuf) > s.inbufoff {
249
+ // Fast path: If s.inbuf contains unread bytes, return them
250
+ // immediately.
251
+ n = copy(b, s.inbuf[s.inbufoff:])
252
+ s.inbufoff += n
253
+ fastPath = true
254
+ }
255
+ s.inbufmu.Unlock()
256
+ if fastPath {
257
+ return n, nil
258
+ }
259
+
260
+ if err := s.ingate.waitAndLock(s.inctx); err != nil {
261
+ return 0, err
262
+ }
263
+
264
+ if s.inbufoff > 0 {
265
+ // Discard bytes consumed by the fast path above.
266
+ s.in.discardBefore(s.in.start + int64(s.inbufoff))
267
+ s.inbufmu.Lock()
268
+ s.inbufoff = 0
269
+ s.inbuf = nil
270
+ s.inbufmu.Unlock()
271
+ }
272
+
273
+ // bytesRead contains the number of bytes of connection-level flow control to return.
274
+ // We return flow control for bytes read by this Read call, as well as bytes moved
275
+ // to the fast-path read buffer (s.inbuf).
276
+ var bytesRead int64
277
+ defer func() {
278
+ s.inUnlock()
279
+ s.conn.handleStreamBytesReadOffLoop(bytesRead) // must be done with ingate unlocked
280
+ }()
281
+ if s.inresetcode != -1 {
282
+ if s.inresetcode == streamResetByConnClose {
283
+ if err := s.conn.finalError(); err != nil {
284
+ return 0, err
285
+ }
286
+ }
287
+ return 0, fmt.Errorf("stream reset by peer: %w", StreamErrorCode(s.inresetcode))
288
+ }
289
+ if s.inclosed.isSet() {
290
+ return 0, errors.New("read from closed stream")
291
+ }
292
+ if s.insize == s.in.start {
293
+ return 0, io.EOF
294
+ }
295
+ // Getting here indicates the stream contains data to be read.
296
+ if len(s.inset) < 1 || s.inset[0].start != 0 || s.inset[0].end <= s.in.start {
297
+ panic("BUG: inconsistent input stream state")
298
+ }
299
+ if size := int(s.inset[0].end - s.in.start); size < len(b) {
300
+ b = b[:size]
301
+ }
302
+ bytesRead = int64(len(b))
303
+ start := s.in.start
304
+ end := start + int64(len(b))
305
+ raceAcquire()
306
+ s.in.copy(start, b)
307
+ s.in.discardBefore(end)
308
+ if end == s.insize {
309
+ // We have read up to the end of the stream.
310
+ // No need to update stream flow control.
311
+ return len(b), io.EOF
312
+ }
313
+
314
+ if len(s.inset) > 0 && s.inset[0].start <= s.in.start && s.inset[0].end > s.in.start {
315
+ // If we have more readable bytes available, put the next chunk of data
316
+ // in s.inbuf for lock-free reads.
317
+ s.inbufmu.Lock()
318
+ s.inbuf = s.in.peek(s.inset[0].end - s.in.start)
319
+ s.inbufmu.Unlock()
320
+ bytesRead += int64(len(s.inbuf))
321
+ }
322
+ if s.insize == -1 || s.insize > s.inwin {
323
+ newWindow := s.in.start + int64(len(s.inbuf)) + s.inmaxbuf
324
+ addedWindow := newWindow - s.inwin
325
+ if shouldUpdateFlowControl(s.inmaxbuf, addedWindow) {
326
+ // Update stream flow control with a STREAM_MAX_DATA frame.
327
+ s.insendmax.setUnsent()
328
+ }
329
+ }
330
+
331
+ return len(b), nil
332
+ }
333
+
334
+ // ReadByte reads and returns a single byte from the stream.
335
+ //
336
+ // It is not safe to call ReadByte concurrently.
337
+ func (s *Stream) ReadByte() (byte, error) {
338
+ fastPath := false
339
+ s.inbufmu.Lock()
340
+ var readByte byte
341
+ if len(s.inbuf) > s.inbufoff {
342
+ readByte = s.inbuf[s.inbufoff]
343
+ s.inbufoff++
344
+ fastPath = true
345
+ }
346
+ s.inbufmu.Unlock()
347
+ if fastPath {
348
+ return readByte, nil
349
+ }
350
+
351
+ var b [1]byte
352
+ n, err := s.Read(b[:])
353
+ if n > 0 {
354
+ return b[0], nil
355
+ }
356
+ return 0, err
357
+ }
358
+
359
+ // shouldUpdateFlowControl determines whether to send a flow control window update.
360
+ //
361
+ // We want to balance keeping the peer well-supplied with flow control with not sending
362
+ // many small updates.
363
+ func shouldUpdateFlowControl(maxWindow, addedWindow int64) bool {
364
+ return addedWindow >= maxWindow/8
365
+ }
366
+
367
+ // Write writes data to the stream.
368
+ //
369
+ // Write writes data to the stream write buffer.
370
+ // Buffered data is only sent when the buffer is sufficiently full.
371
+ // Call the Flush method to ensure buffered data is sent.
372
+ func (s *Stream) Write(b []byte) (n int, err error) {
373
+ if s.IsReadOnly() {
374
+ return 0, errors.New("write to read-only stream")
375
+ }
376
+
377
+ fastPath := false
378
+ s.outbufmu.Lock()
379
+ if len(b) > 0 && len(s.outbuf)-s.outbufoff >= len(b) {
380
+ // Fast path: The data to write fits in s.outbuf.
381
+ copy(s.outbuf[s.outbufoff:], b)
382
+ s.outbufoff += len(b)
383
+ fastPath = true
384
+ }
385
+ s.outbufmu.Unlock()
386
+ if fastPath {
387
+ return len(b), nil
388
+ }
389
+
390
+ canWrite := s.outgate.lock()
391
+ s.flushFastOutputBuffer()
392
+ for {
393
+ // The first time through this loop, we may or may not be write blocked.
394
+ // We exit the loop after writing all data, so on subsequent passes through
395
+ // the loop we are always write blocked.
396
+ if len(b) > 0 && !canWrite {
397
+ // Our send buffer is full. Wait for the peer to ack some data.
398
+ s.outUnlock()
399
+ if err := s.outgate.waitAndLock(s.outctx); err != nil {
400
+ return n, err
401
+ }
402
+ // Successfully returning from waitAndLockGate means we are no longer
403
+ // write blocked. (Unlike traditional condition variables, gates do not
404
+ // have spurious wakeups.)
405
+ }
406
+ if err := s.writeErrorLocked(); err != nil {
407
+ s.outUnlock()
408
+ return n, err
409
+ }
410
+ if len(b) == 0 {
411
+ break
412
+ }
413
+ // Write limit is our send buffer limit.
414
+ // This is a stream offset.
415
+ lim := s.out.start + s.outmaxbuf
416
+ // Amount to write is min(the full buffer, data up to the write limit).
417
+ // This is a number of bytes.
418
+ nn := min(int64(len(b)), lim-s.out.end)
419
+ // Copy the data into the output buffer.
420
+ s.out.writeAt(b[:nn], s.out.end)
421
+ b = b[nn:]
422
+ n += int(nn)
423
+ // Possibly flush the output buffer.
424
+ // We automatically flush if:
425
+ // - We have enough data to consume the send window.
426
+ // Sending this data may cause the peer to extend the window.
427
+ // - We have buffered as much data as we're willing do.
428
+ // We need to send data to clear out buffer space.
429
+ // - We have enough data to fill a 1-RTT packet using the smallest
430
+ // possible maximum datagram size (1200 bytes, less header byte,
431
+ // connection ID, packet number, and AEAD overhead).
432
+ const autoFlushSize = smallestMaxDatagramSize - 1 - connIDLen - 1 - aeadOverhead
433
+ shouldFlush := s.out.end >= s.outwin || // peer send window is full
434
+ s.out.end >= lim || // local send buffer is full
435
+ (s.out.end-s.outflushed) >= autoFlushSize // enough data buffered
436
+ if shouldFlush {
437
+ s.flushLocked()
438
+ }
439
+ if s.out.end > s.outwin {
440
+ // We're blocked by flow control.
441
+ // Send a STREAM_DATA_BLOCKED frame to let the peer know.
442
+ s.outblocked.set()
443
+ }
444
+ // If we have bytes left to send, we're blocked.
445
+ canWrite = false
446
+ }
447
+ if lim := s.out.start + s.outmaxbuf - s.out.end - 1; lim > 0 {
448
+ // If s.out has space allocated and available to be written into,
449
+ // then reference it in s.outbuf for fast-path writes.
450
+ //
451
+ // It's perhaps a bit pointless to limit s.outbuf to the send buffer limit.
452
+ // We've already allocated this buffer so we aren't saving any memory
453
+ // by not using it.
454
+ // For now, we limit it anyway to make it easier to reason about limits.
455
+ //
456
+ // We set the limit to one less than the send buffer limit (the -1 above)
457
+ // so that a write which completely fills the buffer will overflow
458
+ // s.outbuf and trigger a flush.
459
+ s.outbufmu.Lock()
460
+ s.outbuf = s.out.availableBuffer()
461
+ if int64(len(s.outbuf)) > lim {
462
+ s.outbuf = s.outbuf[:lim]
463
+ }
464
+ s.outbufmu.Unlock()
465
+ }
466
+ raceReleaseMerge()
467
+ s.outUnlock()
468
+ return n, nil
469
+ }
470
+
471
+ // WriteByte writes a single byte to the stream.
472
+ func (s *Stream) WriteByte(c byte) error {
473
+ fastPath := false
474
+ s.outbufmu.Lock()
475
+ if s.outbufoff < len(s.outbuf) {
476
+ s.outbuf[s.outbufoff] = c
477
+ s.outbufoff++
478
+ fastPath = true
479
+ }
480
+ s.outbufmu.Unlock()
481
+ if fastPath {
482
+ return nil
483
+ }
484
+
485
+ b := [1]byte{c}
486
+ _, err := s.Write(b[:])
487
+ return err
488
+ }
489
+
490
+ func (s *Stream) flushFastOutputBuffer() {
491
+ s.outbufmu.Lock()
492
+ defer s.outbufmu.Unlock()
493
+ if s.outbuf == nil {
494
+ return
495
+ }
496
+ // Commit data previously written to s.outbuf.
497
+ // s.outbuf is a reference to a buffer in s.out, so we just need to record
498
+ // that the output buffer has been extended.
499
+ s.out.end += int64(s.outbufoff)
500
+ s.outbuf = nil
501
+ s.outbufoff = 0
502
+ }
503
+
504
+ // Flush flushes data written to the stream.
505
+ // It does not wait for the peer to acknowledge receipt of the data.
506
+ // Use Close to wait for the peer's acknowledgement.
507
+ func (s *Stream) Flush() error {
508
+ if s.IsReadOnly() {
509
+ return errors.New("flush of read-only stream")
510
+ }
511
+ s.outgate.lock()
512
+ defer s.outUnlock()
513
+ if err := s.writeErrorLocked(); err != nil {
514
+ return err
515
+ }
516
+ s.flushLocked()
517
+ return nil
518
+ }
519
+
520
+ // writeErrorLocked returns the error (if any) which should be returned by write operations
521
+ // due to the stream being reset or closed.
522
+ func (s *Stream) writeErrorLocked() error {
523
+ if s.outreset.isSet() {
524
+ if s.outresetcode == streamResetByConnClose {
525
+ if err := s.conn.finalError(); err != nil {
526
+ return err
527
+ }
528
+ }
529
+ return errors.New("write to reset stream")
530
+ }
531
+ if s.outclosed.isSet() {
532
+ return errors.New("write to closed stream")
533
+ }
534
+ return nil
535
+ }
536
+
537
+ func (s *Stream) flushLocked() {
538
+ s.flushFastOutputBuffer()
539
+ s.outopened.set()
540
+ if s.outflushed < s.outwin {
541
+ s.outunsent.add(s.outflushed, min(s.outwin, s.out.end))
542
+ }
543
+ s.outflushed = s.out.end
544
+ }
545
+
546
+ // Close closes the stream.
547
+ // Any blocked stream operations will be unblocked and return errors.
548
+ //
549
+ // Close flushes any data in the stream write buffer and waits for the peer to
550
+ // acknowledge receipt of the data.
551
+ // If the stream has been reset, it waits for the peer to acknowledge the reset.
552
+ // If the context expires before the peer receives the stream's data,
553
+ // Close discards the buffer and returns the context error.
554
+ func (s *Stream) Close() error {
555
+ s.CloseRead()
556
+ if s.IsReadOnly() {
557
+ return nil
558
+ }
559
+ s.CloseWrite()
560
+ // TODO: Return code from peer's RESET_STREAM frame?
561
+ if err := s.conn.waitOnDone(s.outctx, s.outdone); err != nil {
562
+ return err
563
+ }
564
+ s.outgate.lock()
565
+ defer s.outUnlock()
566
+ if s.outclosed.isReceived() && s.outacked.isrange(0, s.out.end) {
567
+ return nil
568
+ }
569
+ return errors.New("stream reset")
570
+ }
571
+
572
+ // CloseRead aborts reads on the stream.
573
+ // Any blocked reads will be unblocked and return errors.
574
+ //
575
+ // CloseRead notifies the peer that the stream has been closed for reading.
576
+ // It does not wait for the peer to acknowledge the closure.
577
+ // Use Close to wait for the peer's acknowledgement.
578
+ func (s *Stream) CloseRead() {
579
+ if s.IsWriteOnly() {
580
+ return
581
+ }
582
+ s.ingate.lock()
583
+ if s.inset.isrange(0, s.insize) || s.inresetcode != -1 {
584
+ // We've already received all data from the peer,
585
+ // so there's no need to send STOP_SENDING.
586
+ // This is the same as saying we sent one and they got it.
587
+ s.inclosed.setReceived()
588
+ } else {
589
+ s.inclosed.set()
590
+ }
591
+ discarded := s.in.end - s.in.start
592
+ s.in.discardBefore(s.in.end)
593
+ s.inUnlock()
594
+ s.conn.handleStreamBytesReadOffLoop(discarded) // must be done with ingate unlocked
595
+ }
596
+
597
+ // CloseWrite aborts writes on the stream.
598
+ // Any blocked writes will be unblocked and return errors.
599
+ //
600
+ // CloseWrite sends any data in the stream write buffer to the peer.
601
+ // It does not wait for the peer to acknowledge receipt of the data.
602
+ // Use Close to wait for the peer's acknowledgement.
603
+ func (s *Stream) CloseWrite() {
604
+ if s.IsReadOnly() {
605
+ return
606
+ }
607
+ s.outgate.lock()
608
+ defer s.outUnlock()
609
+ s.outclosed.set()
610
+ s.flushLocked()
611
+ }
612
+
613
+ // Reset aborts writes on the stream and notifies the peer
614
+ // that the stream was terminated abruptly.
615
+ // Any blocked writes will be unblocked and return errors.
616
+ //
617
+ // Reset sends the application protocol error code, which must be
618
+ // less than 2^62, to the peer.
619
+ // It does not wait for the peer to acknowledge receipt of the error.
620
+ // Use Close to wait for the peer's acknowledgement.
621
+ //
622
+ // Reset does not affect reads.
623
+ // Use CloseRead to abort reads on the stream.
624
+ func (s *Stream) Reset(code uint64) {
625
+ const userClosed = true
626
+ s.resetInternal(code, userClosed)
627
+ }
628
+
629
+ // resetInternal resets the send side of the stream.
630
+ //
631
+ // If userClosed is true, this is s.Reset.
632
+ // If userClosed is false, this is a reaction to a STOP_SENDING frame.
633
+ func (s *Stream) resetInternal(code uint64, userClosed bool) {
634
+ s.outgate.lock()
635
+ defer s.outUnlock()
636
+ if s.IsReadOnly() {
637
+ return
638
+ }
639
+ if userClosed {
640
+ // Mark that the user closed the stream.
641
+ s.outclosed.set()
642
+ }
643
+ if s.outreset.isSet() {
644
+ return
645
+ }
646
+ if code > quicwire.MaxVarint {
647
+ code = quicwire.MaxVarint
648
+ }
649
+ // We could check here to see if the stream is closed and the
650
+ // peer has acked all the data and the FIN, but sending an
651
+ // extra RESET_STREAM in this case is harmless.
652
+ s.outreset.set()
653
+ s.outresetcode = code
654
+ s.outbufmu.Lock()
655
+ s.outbuf = nil
656
+ s.outbufoff = 0
657
+ s.outbufmu.Unlock()
658
+ s.out.discardBefore(s.out.end)
659
+ s.outunsent = rangeset[int64]{}
660
+ s.outblocked.clear()
661
+ }
662
+
663
+ // connHasClosed indicates the stream's conn has closed.
664
+ func (s *Stream) connHasClosed() {
665
+ // If we're in the closing state, the user closed the conn.
666
+ // Otherwise, we the peer initiated the close.
667
+ // This only matters for the error we're going to return from stream operations.
668
+ localClose := s.conn.lifetime.state == connStateClosing
669
+
670
+ s.ingate.lock()
671
+ if !s.inset.isrange(0, s.insize) && s.inresetcode == -1 {
672
+ if localClose {
673
+ s.inclosed.set()
674
+ } else {
675
+ s.inresetcode = streamResetByConnClose
676
+ }
677
+ }
678
+ s.inUnlock()
679
+
680
+ s.outgate.lock()
681
+ if localClose {
682
+ s.outclosed.set()
683
+ s.outreset.set()
684
+ } else {
685
+ s.outresetcode = streamResetByConnClose
686
+ s.outreset.setReceived()
687
+ }
688
+ s.outUnlock()
689
+ }
690
+
691
+ // inUnlock unlocks s.ingate.
692
+ // It sets the gate condition if reads from s will not block.
693
+ // If s has receive-related frames to write or if both directions
694
+ // are done and the stream should be removed, it notifies the Conn.
695
+ func (s *Stream) inUnlock() {
696
+ state := s.inUnlockNoQueue()
697
+ s.conn.maybeQueueStreamForSend(s, state)
698
+ }
699
+
700
+ // inUnlockNoQueue is inUnlock,
701
+ // but reports whether s has frames to write rather than notifying the Conn.
702
+ func (s *Stream) inUnlockNoQueue() streamState {
703
+ nextByte := s.in.start + int64(len(s.inbuf))
704
+ canRead := s.inset.contains(nextByte) || // data available to read
705
+ s.insize == s.in.start+int64(len(s.inbuf)) || // at EOF
706
+ s.inresetcode != -1 || // reset by peer
707
+ s.inclosed.isSet() // closed locally
708
+ defer s.ingate.unlock(canRead)
709
+ var state streamState
710
+ switch {
711
+ case s.IsWriteOnly():
712
+ state = streamInDone
713
+ case s.inresetcode != -1: // reset by peer
714
+ fallthrough
715
+ case s.in.start == s.insize: // all data received and read
716
+ // We don't increase MAX_STREAMS until the user calls ReadClose or Close,
717
+ // so the receive side is not finished until inclosed is set.
718
+ if s.inclosed.isSet() {
719
+ state = streamInDone
720
+ }
721
+ case s.insendmax.shouldSend(): // STREAM_MAX_DATA
722
+ state = streamInSendMeta
723
+ case s.inclosed.shouldSend(): // STOP_SENDING
724
+ state = streamInSendMeta
725
+ }
726
+ const mask = streamInDone | streamInSendMeta
727
+ return s.state.set(state, mask)
728
+ }
729
+
730
+ // outUnlock unlocks s.outgate.
731
+ // It sets the gate condition if writes to s will not block.
732
+ // If s has send-related frames to write or if both directions
733
+ // are done and the stream should be removed, it notifies the Conn.
734
+ func (s *Stream) outUnlock() {
735
+ state := s.outUnlockNoQueue()
736
+ s.conn.maybeQueueStreamForSend(s, state)
737
+ }
738
+
739
+ // outUnlockNoQueue is outUnlock,
740
+ // but reports whether s has frames to write rather than notifying the Conn.
741
+ func (s *Stream) outUnlockNoQueue() streamState {
742
+ isDone := s.outclosed.isReceived() && s.outacked.isrange(0, s.out.end) || // all data acked
743
+ s.outreset.isSet() // reset locally
744
+ if isDone {
745
+ select {
746
+ case <-s.outdone:
747
+ default:
748
+ if !s.IsReadOnly() {
749
+ close(s.outdone)
750
+ }
751
+ }
752
+ }
753
+ lim := s.out.start + s.outmaxbuf
754
+ canWrite := lim > s.out.end || // available send buffer
755
+ s.outclosed.isSet() || // closed locally
756
+ s.outreset.isSet() // reset locally
757
+ defer s.outgate.unlock(canWrite)
758
+ var state streamState
759
+ switch {
760
+ case s.IsReadOnly():
761
+ state = streamOutDone
762
+ case s.outclosed.isReceived() && s.outacked.isrange(0, s.out.end): // all data sent and acked
763
+ fallthrough
764
+ case s.outreset.isReceived(): // RESET_STREAM sent and acked
765
+ // We don't increase MAX_STREAMS until the user calls WriteClose or Close,
766
+ // so the send side is not finished until outclosed is set.
767
+ if s.outclosed.isSet() {
768
+ state = streamOutDone
769
+ }
770
+ case s.outreset.shouldSend(): // RESET_STREAM
771
+ state = streamOutSendMeta
772
+ case s.outreset.isSet(): // RESET_STREAM sent but not acknowledged
773
+ case s.outblocked.shouldSend(): // STREAM_DATA_BLOCKED
774
+ state = streamOutSendMeta
775
+ case len(s.outunsent) > 0: // STREAM frame with data
776
+ if s.outunsent.min() < s.outmaxsent {
777
+ state = streamOutSendMeta // resent data, will not consume flow control
778
+ } else {
779
+ state = streamOutSendData // new data, requires flow control
780
+ }
781
+ case s.outclosed.shouldSend() && s.out.end == s.outmaxsent: // empty STREAM frame with FIN bit
782
+ state = streamOutSendMeta
783
+ case s.outopened.shouldSend(): // STREAM frame with no data
784
+ state = streamOutSendMeta
785
+ }
786
+ const mask = streamOutDone | streamOutSendMeta | streamOutSendData
787
+ return s.state.set(state, mask)
788
+ }
789
+
790
+ // handleData handles data received in a STREAM frame.
791
+ func (s *Stream) handleData(off int64, b []byte, fin bool) error {
792
+ s.ingate.lock()
793
+ defer s.inUnlock()
794
+ end := off + int64(len(b))
795
+ if err := s.checkStreamBounds(end, fin); err != nil {
796
+ return err
797
+ }
798
+ if s.inclosed.isSet() || s.inresetcode != -1 {
799
+ // The user read-closed the stream, or the peer reset it.
800
+ // Either way, we can discard this frame.
801
+ return nil
802
+ }
803
+ if s.insize == -1 && end > s.in.end {
804
+ added := end - s.in.end
805
+ if err := s.conn.handleStreamBytesReceived(added); err != nil {
806
+ return err
807
+ }
808
+ }
809
+ if len(s.inset) > 0 && s.inset[0].contains(off) {
810
+ // We've received at least some of this data,
811
+ // and potentially moved it into s.inbuf
812
+ // (since it's part of the first range of received data).
813
+ // Avoid rewriting this data into s.in, since doing so could race
814
+ // with a reader reading the same data.
815
+ //
816
+ // (Note: We could apply additional checks here, to detect the peer
817
+ // sending us different data than we received the first time.
818
+ // We currently don't bother.)
819
+ newOff := min(end, s.inset[0].end)
820
+ b = b[newOff-off:]
821
+ off = newOff
822
+ }
823
+ s.in.writeAt(b, off)
824
+ s.inset.add(off, end)
825
+ if fin {
826
+ s.insize = end
827
+ // The peer has enough flow control window to send the entire stream.
828
+ s.insendmax.clear()
829
+ }
830
+ return nil
831
+ }
832
+
833
+ // handleReset handles a RESET_STREAM frame.
834
+ func (s *Stream) handleReset(code uint64, finalSize int64) error {
835
+ s.ingate.lock()
836
+ defer s.inUnlock()
837
+ const fin = true
838
+ if err := s.checkStreamBounds(finalSize, fin); err != nil {
839
+ return err
840
+ }
841
+ if s.inresetcode != -1 {
842
+ // The stream was already reset.
843
+ return nil
844
+ }
845
+ if s.insize == -1 {
846
+ added := finalSize - s.in.end
847
+ if err := s.conn.handleStreamBytesReceived(added); err != nil {
848
+ return err
849
+ }
850
+ }
851
+ s.conn.handleStreamBytesReadOnLoop(finalSize - s.in.start)
852
+ s.in.discardBefore(s.in.end)
853
+ s.inresetcode = int64(code)
854
+ s.insize = finalSize
855
+ return nil
856
+ }
857
+
858
+ // checkStreamBounds validates the stream offset in a STREAM or RESET_STREAM frame.
859
+ func (s *Stream) checkStreamBounds(end int64, fin bool) error {
860
+ if end > s.inwin {
861
+ // The peer sent us data past the maximum flow control window we gave them.
862
+ return localTransportError{
863
+ code: errFlowControl,
864
+ reason: "stream flow control window exceeded",
865
+ }
866
+ }
867
+ if s.insize != -1 && end > s.insize {
868
+ // The peer sent us data past the final size of the stream they previously gave us.
869
+ return localTransportError{
870
+ code: errFinalSize,
871
+ reason: "data received past end of stream",
872
+ }
873
+ }
874
+ if fin && s.insize != -1 && end != s.insize {
875
+ // The peer changed the final size of the stream.
876
+ return localTransportError{
877
+ code: errFinalSize,
878
+ reason: "final size of stream changed",
879
+ }
880
+ }
881
+ if fin && end < s.in.end {
882
+ // The peer has previously sent us data past the final size.
883
+ return localTransportError{
884
+ code: errFinalSize,
885
+ reason: "end of stream occurs before prior data",
886
+ }
887
+ }
888
+ return nil
889
+ }
890
+
891
+ // handleStopSending handles a STOP_SENDING frame.
892
+ func (s *Stream) handleStopSending(code uint64) error {
893
+ // Peer requests that we reset this stream.
894
+ // https://www.rfc-editor.org/rfc/rfc9000#section-3.5-4
895
+ const userReset = false
896
+ s.resetInternal(code, userReset)
897
+ return nil
898
+ }
899
+
900
+ // handleMaxStreamData handles an update received in a MAX_STREAM_DATA frame.
901
+ func (s *Stream) handleMaxStreamData(maxStreamData int64) error {
902
+ s.outgate.lock()
903
+ defer s.outUnlock()
904
+ if maxStreamData <= s.outwin {
905
+ return nil
906
+ }
907
+ if s.outflushed > s.outwin {
908
+ s.outunsent.add(s.outwin, min(maxStreamData, s.outflushed))
909
+ }
910
+ s.outwin = maxStreamData
911
+ if s.out.end > s.outwin {
912
+ // We've still got more data than flow control window.
913
+ s.outblocked.setUnsent()
914
+ } else {
915
+ s.outblocked.clear()
916
+ }
917
+ return nil
918
+ }
919
+
920
+ // ackOrLoss handles the fate of stream frames other than STREAM.
921
+ func (s *Stream) ackOrLoss(pnum packetNumber, ftype byte, fate packetFate) {
922
+ // Frames which carry new information each time they are sent
923
+ // (MAX_STREAM_DATA, STREAM_DATA_BLOCKED) must only be marked
924
+ // as received if the most recent packet carrying this frame is acked.
925
+ //
926
+ // Frames which are always the same (STOP_SENDING, RESET_STREAM)
927
+ // can be marked as received if any packet carrying this frame is acked.
928
+ switch ftype {
929
+ case frameTypeResetStream:
930
+ s.outgate.lock()
931
+ s.outreset.ackOrLoss(pnum, fate)
932
+ s.outUnlock()
933
+ case frameTypeStopSending:
934
+ s.ingate.lock()
935
+ s.inclosed.ackOrLoss(pnum, fate)
936
+ s.inUnlock()
937
+ case frameTypeMaxStreamData:
938
+ s.ingate.lock()
939
+ s.insendmax.ackLatestOrLoss(pnum, fate)
940
+ s.inUnlock()
941
+ case frameTypeStreamDataBlocked:
942
+ s.outgate.lock()
943
+ s.outblocked.ackLatestOrLoss(pnum, fate)
944
+ s.outUnlock()
945
+ default:
946
+ panic("unhandled frame type")
947
+ }
948
+ }
949
+
950
+ // ackOrLossData handles the fate of a STREAM frame.
951
+ func (s *Stream) ackOrLossData(pnum packetNumber, start, end int64, fin bool, fate packetFate) {
952
+ s.outgate.lock()
953
+ defer s.outUnlock()
954
+ s.outopened.ackOrLoss(pnum, fate)
955
+ if fin {
956
+ s.outclosed.ackOrLoss(pnum, fate)
957
+ }
958
+ if s.outreset.isSet() {
959
+ // If the stream has been reset, we don't care any more.
960
+ return
961
+ }
962
+ switch fate {
963
+ case packetAcked:
964
+ s.outacked.add(start, end)
965
+ s.outunsent.sub(start, end)
966
+ // If this ack is for data at the start of the send buffer, we can now discard it.
967
+ if s.outacked.contains(s.out.start) {
968
+ s.out.discardBefore(s.outacked[0].end)
969
+ }
970
+ case packetLost:
971
+ // Mark everything lost, but not previously acked, as needing retransmission.
972
+ // We do this by adding all the lost bytes to outunsent, and then
973
+ // removing everything already acked.
974
+ s.outunsent.add(start, end)
975
+ for _, a := range s.outacked {
976
+ s.outunsent.sub(a.start, a.end)
977
+ }
978
+ }
979
+ }
980
+
981
+ // appendInFramesLocked appends STOP_SENDING and MAX_STREAM_DATA frames
982
+ // to the current packet.
983
+ //
984
+ // It returns true if no more frames need appending,
985
+ // false if not everything fit in the current packet.
986
+ func (s *Stream) appendInFramesLocked(w *packetWriter, pnum packetNumber, pto bool) bool {
987
+ if s.inclosed.shouldSendPTO(pto) {
988
+ // We don't currently have an API for setting the error code.
989
+ // Just send zero.
990
+ code := uint64(0)
991
+ if !w.appendStopSendingFrame(s.id, code) {
992
+ return false
993
+ }
994
+ s.inclosed.setSent(pnum)
995
+ }
996
+ // TODO: STOP_SENDING
997
+ if s.insendmax.shouldSendPTO(pto) {
998
+ // MAX_STREAM_DATA
999
+ maxStreamData := s.in.start + s.inmaxbuf
1000
+ if !w.appendMaxStreamDataFrame(s.id, maxStreamData) {
1001
+ return false
1002
+ }
1003
+ s.inwin = maxStreamData
1004
+ s.insendmax.setSent(pnum)
1005
+ }
1006
+ return true
1007
+ }
1008
+
1009
+ // appendOutFramesLocked appends RESET_STREAM, STREAM_DATA_BLOCKED, and STREAM frames
1010
+ // to the current packet.
1011
+ //
1012
+ // It returns true if no more frames need appending,
1013
+ // false if not everything fit in the current packet.
1014
+ func (s *Stream) appendOutFramesLocked(w *packetWriter, pnum packetNumber, pto bool) bool {
1015
+ if s.outreset.isSet() {
1016
+ // RESET_STREAM
1017
+ if s.outreset.shouldSendPTO(pto) {
1018
+ if !w.appendResetStreamFrame(s.id, s.outresetcode, s.outmaxsent) {
1019
+ return false
1020
+ }
1021
+ s.outreset.setSent(pnum)
1022
+ s.frameOpensStream(pnum)
1023
+ }
1024
+ return true
1025
+ }
1026
+ if s.outblocked.shouldSendPTO(pto) {
1027
+ // STREAM_DATA_BLOCKED
1028
+ if !w.appendStreamDataBlockedFrame(s.id, s.outwin) {
1029
+ return false
1030
+ }
1031
+ s.outblocked.setSent(pnum)
1032
+ s.frameOpensStream(pnum)
1033
+ }
1034
+ for {
1035
+ // STREAM
1036
+ off, size := dataToSend(min(s.out.start, s.outwin), min(s.outflushed, s.outwin), s.outunsent, s.outacked, pto)
1037
+ if end := off + size; end > s.outmaxsent {
1038
+ // This will require connection-level flow control to send.
1039
+ end = min(end, s.outmaxsent+s.conn.streams.outflow.avail())
1040
+ end = max(end, off)
1041
+ size = end - off
1042
+ }
1043
+ fin := s.outclosed.isSet() && off+size == s.out.end
1044
+ shouldSend := size > 0 || // have data to send
1045
+ s.outopened.shouldSendPTO(pto) || // should open the stream
1046
+ (fin && s.outclosed.shouldSendPTO(pto)) // should close the stream
1047
+ if !shouldSend {
1048
+ return true
1049
+ }
1050
+ b, added := w.appendStreamFrame(s.id, off, int(size), fin)
1051
+ if !added {
1052
+ return false
1053
+ }
1054
+ s.out.copy(off, b)
1055
+ end := off + int64(len(b))
1056
+ if end > s.outmaxsent {
1057
+ s.conn.streams.outflow.consume(end - s.outmaxsent)
1058
+ s.outmaxsent = end
1059
+ }
1060
+ s.outunsent.sub(off, end)
1061
+ s.frameOpensStream(pnum)
1062
+ if fin {
1063
+ s.outclosed.setSent(pnum)
1064
+ }
1065
+ if pto {
1066
+ return true
1067
+ }
1068
+ if int64(len(b)) < size {
1069
+ return false
1070
+ }
1071
+ }
1072
+ }
1073
+
1074
+ // frameOpensStream records that we're sending a frame that will open the stream.
1075
+ //
1076
+ // If we don't have an acknowledgement from the peer for a previous frame opening the stream,
1077
+ // record this packet as being the latest one to open it.
1078
+ func (s *Stream) frameOpensStream(pnum packetNumber) {
1079
+ if !s.outopened.isReceived() {
1080
+ s.outopened.setSent(pnum)
1081
+ }
1082
+ }
1083
+
1084
+ // dataToSend returns the next range of data to send in a STREAM or CRYPTO_STREAM.
1085
+ func dataToSend(start, end int64, outunsent, outacked rangeset[int64], pto bool) (sendStart, size int64) {
1086
+ switch {
1087
+ case pto:
1088
+ // On PTO, resend unacked data that fits in the probe packet.
1089
+ // For simplicity, we send the range starting at s.out.start
1090
+ // (which is definitely unacked, or else we would have discarded it)
1091
+ // up to the next acked byte (if any).
1092
+ //
1093
+ // This may miss unacked data starting after that acked byte,
1094
+ // but avoids resending data the peer has acked.
1095
+ for _, r := range outacked {
1096
+ if r.start > start {
1097
+ return start, r.start - start
1098
+ }
1099
+ }
1100
+ return start, end - start
1101
+ case outunsent.numRanges() > 0:
1102
+ return outunsent.min(), outunsent[0].size()
1103
+ default:
1104
+ return end, 0
1105
+ }
1106
+ }