grpc 1.73.0 → 1.74.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 (499) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +38 -17
  3. data/include/grpc/create_channel_from_endpoint.h +54 -0
  4. data/include/grpc/credentials.h +11 -5
  5. data/include/grpc/event_engine/event_engine.h +74 -17
  6. data/include/grpc/grpc_posix.h +20 -1
  7. data/include/grpc/impl/channel_arg_names.h +2 -4
  8. data/include/grpc/module.modulemap +1 -0
  9. data/include/grpc/support/json.h +24 -0
  10. data/src/core/call/interception_chain.h +7 -11
  11. data/src/core/channelz/channel_trace.cc +213 -115
  12. data/src/core/channelz/channel_trace.h +380 -86
  13. data/src/core/channelz/channelz.cc +270 -181
  14. data/src/core/channelz/channelz.h +168 -55
  15. data/src/core/channelz/channelz_registry.cc +2 -1
  16. data/src/core/channelz/channelz_registry.h +24 -0
  17. data/src/core/channelz/property_list.cc +357 -0
  18. data/src/core/channelz/property_list.h +202 -0
  19. data/src/core/channelz/ztrace_collector.h +3 -2
  20. data/src/core/client_channel/backup_poller.cc +17 -2
  21. data/src/core/client_channel/client_channel.cc +17 -28
  22. data/src/core/client_channel/client_channel_filter.cc +19 -29
  23. data/src/core/client_channel/config_selector.h +8 -2
  24. data/src/core/client_channel/dynamic_filters.cc +5 -6
  25. data/src/core/client_channel/dynamic_filters.h +1 -1
  26. data/src/core/client_channel/global_subchannel_pool.cc +4 -1
  27. data/src/core/client_channel/retry_filter.cc +21 -27
  28. data/src/core/client_channel/retry_filter.h +10 -7
  29. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  30. data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
  31. data/src/core/client_channel/retry_interceptor.cc +30 -44
  32. data/src/core/client_channel/retry_interceptor.h +18 -17
  33. data/src/core/client_channel/retry_throttle.cc +46 -61
  34. data/src/core/client_channel/retry_throttle.h +17 -39
  35. data/src/core/client_channel/subchannel.cc +43 -19
  36. data/src/core/client_channel/subchannel.h +8 -0
  37. data/src/core/config/config_vars.cc +2 -0
  38. data/src/core/config/core_configuration.cc +1 -0
  39. data/src/core/config/core_configuration.h +11 -0
  40. data/src/core/credentials/call/call_creds_registry.h +125 -0
  41. data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
  42. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
  43. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
  44. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
  45. data/src/core/credentials/call/jwt_util.cc +70 -0
  46. data/src/core/credentials/call/jwt_util.h +32 -0
  47. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  48. data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
  49. data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
  50. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
  51. data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
  52. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
  53. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
  54. data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
  55. data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
  56. data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
  57. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
  58. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
  59. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
  60. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
  61. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
  62. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
  63. data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
  64. data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
  65. data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
  67. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
  69. data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
  70. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
  71. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
  72. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
  73. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
  74. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
  75. data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
  76. data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
  77. data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
  78. data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
  79. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
  80. data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
  81. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
  82. data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
  83. data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
  84. data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
  85. data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
  86. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
  87. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
  88. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
  89. data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
  93. data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
  94. data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
  95. data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
  96. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
  97. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
  98. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
  99. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
  100. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
  101. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
  102. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
  103. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
  104. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
  105. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
  106. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
  107. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
  108. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
  109. data/src/core/filter/auth/auth_filters.h +0 -25
  110. data/src/core/filter/auth/client_auth_filter.cc +0 -118
  111. data/src/core/filter/filter_args.h +9 -23
  112. data/src/core/handshaker/handshaker.cc +23 -14
  113. data/src/core/handshaker/handshaker.h +3 -0
  114. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
  115. data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
  116. data/src/core/handshaker/security/secure_endpoint.cc +70 -25
  117. data/src/core/handshaker/security/security_handshaker.cc +4 -1
  118. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
  119. data/src/core/lib/channel/channel_args.cc +15 -0
  120. data/src/core/lib/channel/channel_args.h +3 -0
  121. data/src/core/lib/channel/channel_stack.cc +22 -23
  122. data/src/core/lib/channel/channel_stack.h +9 -7
  123. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  124. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
  125. data/src/core/lib/channel/promise_based_filter.h +5 -5
  126. data/src/core/lib/debug/trace_impl.h +0 -1
  127. data/src/core/lib/event_engine/ares_resolver.cc +165 -46
  128. data/src/core/lib/event_engine/ares_resolver.h +48 -2
  129. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
  130. data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
  131. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
  132. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
  133. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
  134. data/src/core/lib/event_engine/event_engine.cc +7 -0
  135. data/src/core/lib/event_engine/extensions/channelz.h +10 -6
  136. data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
  137. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
  139. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
  140. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
  141. data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
  142. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
  143. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
  144. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
  145. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
  146. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
  147. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
  148. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
  149. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
  150. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
  151. data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
  152. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
  153. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
  154. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
  155. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
  156. data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
  157. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
  158. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
  159. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
  160. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
  161. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
  162. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
  163. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
  164. data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
  165. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
  166. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
  167. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
  168. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
  169. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
  170. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
  171. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
  172. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
  173. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
  174. data/src/core/lib/event_engine/shim.cc +9 -0
  175. data/src/core/lib/event_engine/shim.h +3 -0
  176. data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
  177. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
  178. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
  179. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
  180. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
  181. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
  182. data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
  183. data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
  184. data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
  185. data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
  186. data/src/core/lib/experiments/experiments.cc +45 -93
  187. data/src/core/lib/experiments/experiments.h +21 -51
  188. data/src/core/lib/iomgr/endpoint.cc +4 -3
  189. data/src/core/lib/iomgr/endpoint.h +7 -4
  190. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
  191. data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
  192. data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
  193. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
  194. data/src/core/lib/iomgr/tcp_posix.cc +12 -6
  195. data/src/core/lib/iomgr/tcp_windows.cc +3 -2
  196. data/src/core/lib/promise/activity.h +1 -0
  197. data/src/core/lib/promise/arena_promise.h +23 -7
  198. data/src/core/lib/promise/detail/promise_factory.h +10 -0
  199. data/src/core/lib/promise/detail/promise_like.h +118 -11
  200. data/src/core/lib/promise/detail/promise_variant.h +50 -0
  201. data/src/core/lib/promise/detail/seq_state.h +687 -548
  202. data/src/core/lib/promise/if.h +20 -0
  203. data/src/core/lib/promise/inter_activity_latch.h +147 -0
  204. data/src/core/lib/promise/inter_activity_mutex.h +547 -0
  205. data/src/core/lib/promise/loop.h +65 -3
  206. data/src/core/lib/promise/map.h +24 -0
  207. data/src/core/lib/promise/match_promise.h +103 -0
  208. data/src/core/lib/promise/mpsc.cc +425 -0
  209. data/src/core/lib/promise/mpsc.h +490 -0
  210. data/src/core/lib/promise/party.cc +50 -1
  211. data/src/core/lib/promise/party.h +66 -1
  212. data/src/core/lib/promise/race.h +31 -0
  213. data/src/core/lib/promise/seq.h +4 -1
  214. data/src/core/lib/promise/status_flag.h +7 -0
  215. data/src/core/lib/promise/try_seq.h +4 -1
  216. data/src/core/lib/promise/wait_set.cc +28 -0
  217. data/src/core/lib/promise/wait_set.h +86 -0
  218. data/src/core/lib/resource_quota/arena.h +19 -0
  219. data/src/core/lib/slice/slice.h +5 -0
  220. data/src/core/lib/surface/channel_create.cc +88 -13
  221. data/src/core/lib/surface/channel_create.h +4 -0
  222. data/src/core/lib/surface/channel_init.cc +164 -47
  223. data/src/core/lib/surface/channel_init.h +64 -1
  224. data/src/core/lib/surface/filter_stack_call.cc +18 -9
  225. data/src/core/lib/surface/init.cc +6 -15
  226. data/src/core/lib/surface/legacy_channel.cc +3 -5
  227. data/src/core/lib/surface/legacy_channel.h +3 -1
  228. data/src/core/lib/surface/version.cc +2 -2
  229. data/src/core/lib/transport/promise_endpoint.cc +110 -0
  230. data/src/core/lib/transport/promise_endpoint.h +307 -0
  231. data/src/core/load_balancing/child_policy_handler.cc +2 -4
  232. data/src/core/load_balancing/delegating_helper.h +2 -3
  233. data/src/core/load_balancing/health_check_client.cc +1 -5
  234. data/src/core/load_balancing/lb_policy.h +1 -3
  235. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  236. data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
  237. data/src/core/load_balancing/xds/cds.cc +10 -1
  238. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  239. data/src/core/resolver/xds/xds_config.cc +6 -3
  240. data/src/core/resolver/xds/xds_config.h +9 -4
  241. data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
  242. data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
  243. data/src/core/resolver/xds/xds_resolver.cc +31 -11
  244. data/src/core/server/server.cc +83 -12
  245. data/src/core/server/server.h +21 -2
  246. data/src/core/server/xds_server_config_fetcher.cc +63 -25
  247. data/src/core/service_config/service_config.h +1 -1
  248. data/src/core/service_config/service_config_impl.h +1 -1
  249. data/src/core/telemetry/context_list_entry.cc +38 -0
  250. data/src/core/telemetry/context_list_entry.h +42 -12
  251. data/src/core/telemetry/stats_data.cc +233 -207
  252. data/src/core/telemetry/stats_data.h +250 -153
  253. data/src/core/telemetry/tcp_tracer.h +1 -1
  254. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
  255. data/src/core/tsi/fake_transport_security.cc +17 -0
  256. data/src/core/tsi/ssl_transport_security.cc +2 -0
  257. data/src/core/tsi/transport_security_grpc.cc +8 -0
  258. data/src/core/tsi/transport_security_grpc.h +15 -0
  259. data/src/core/util/backoff.cc +1 -5
  260. data/src/core/util/backoff.h +1 -0
  261. data/src/core/util/down_cast.h +1 -1
  262. data/src/core/util/function_signature.h +15 -1
  263. data/src/core/util/http_client/httpcli.cc +12 -5
  264. data/src/core/util/http_client/httpcli.h +4 -1
  265. data/src/core/util/latent_see.h +8 -5
  266. data/src/core/util/log.cc +4 -0
  267. data/src/core/util/memory_usage.h +268 -0
  268. data/src/core/util/per_cpu.cc +2 -0
  269. data/src/core/util/per_cpu.h +7 -0
  270. data/src/core/util/shared_bit_gen.h +20 -0
  271. data/src/core/util/single_set_ptr.h +2 -2
  272. data/src/core/util/upb_utils.h +42 -0
  273. data/src/core/util/uri.cc +3 -2
  274. data/src/core/util/useful.h +53 -2
  275. data/src/core/util/wait_for_single_owner.cc +31 -0
  276. data/src/core/util/wait_for_single_owner.h +24 -0
  277. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
  278. data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
  279. data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
  280. data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
  281. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  282. data/src/core/xds/grpc/xds_http_filter.h +7 -0
  283. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
  284. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
  285. data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
  286. data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
  287. data/src/core/xds/grpc/xds_server_grpc.h +10 -2
  288. data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
  289. data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
  290. data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
  291. data/src/core/xds/xds_client/xds_client.cc +26 -5
  292. data/src/ruby/ext/grpc/extconf.rb +2 -0
  293. data/src/ruby/ext/grpc/rb_call.c +1 -8
  294. data/src/ruby/ext/grpc/rb_channel.c +72 -568
  295. data/src/ruby/ext/grpc/rb_channel.h +0 -3
  296. data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
  297. data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
  298. data/src/ruby/ext/grpc/rb_grpc.c +9 -5
  299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  300. data/src/ruby/ext/grpc/rb_loader.c +0 -4
  301. data/src/ruby/ext/grpc/rb_server.c +31 -50
  302. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
  303. data/src/ruby/lib/grpc/version.rb +1 -1
  304. data/src/ruby/spec/core_spec.rb +22 -0
  305. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  306. data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
  307. data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
  308. data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
  309. data/third_party/abseil-cpp/absl/base/config.h +20 -129
  310. data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  311. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  312. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  313. data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
  314. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  315. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
  316. data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
  317. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
  318. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
  319. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  320. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  321. data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
  322. data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
  323. data/third_party/abseil-cpp/absl/base/options.h +3 -80
  324. data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
  325. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  326. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  327. data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
  328. data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
  329. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
  330. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
  331. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
  332. data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
  333. data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
  334. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  335. data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
  336. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  337. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
  338. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
  339. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
  340. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  341. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
  342. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
  343. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  344. data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
  345. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  346. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
  347. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
  348. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
  349. data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
  350. data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
  351. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  352. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
  353. data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  354. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  355. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  356. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  357. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  358. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  359. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  360. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  361. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  362. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  363. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  364. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  365. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  366. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
  367. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
  368. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  369. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
  370. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  371. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  372. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  373. data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
  374. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  375. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
  376. data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
  377. data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
  378. data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
  379. data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
  380. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
  381. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
  382. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  383. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  384. data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
  385. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
  387. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
  388. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
  389. data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  390. data/third_party/abseil-cpp/absl/log/check.h +2 -1
  391. data/third_party/abseil-cpp/absl/log/globals.h +4 -5
  392. data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  393. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
  394. data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
  395. data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  396. data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
  397. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  398. data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
  399. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  400. data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
  401. data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
  402. data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
  403. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  404. data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
  405. data/third_party/abseil-cpp/absl/log/log.h +48 -35
  406. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  407. data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
  408. data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
  409. data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
  410. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
  411. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  412. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  413. data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
  414. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  415. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  416. data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
  417. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  418. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  419. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  420. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  421. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  422. data/third_party/abseil-cpp/absl/random/random.h +88 -53
  423. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  424. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  425. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  426. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
  427. data/third_party/abseil-cpp/absl/status/status.cc +4 -8
  428. data/third_party/abseil-cpp/absl/status/status.h +8 -8
  429. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  430. data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
  431. data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
  432. data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
  433. data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
  434. data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
  435. data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
  436. data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
  437. data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
  438. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  439. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  440. data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
  441. data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
  442. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  443. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
  444. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  445. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  451. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  452. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  453. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  454. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  455. data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
  456. data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
  457. data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
  458. data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
  459. data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
  460. data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
  461. data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
  462. data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
  463. data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
  464. data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
  465. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
  466. data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
  467. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  468. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  469. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  470. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  471. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  472. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  473. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  474. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
  475. data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
  476. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  477. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
  478. data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  481. data/third_party/abseil-cpp/absl/time/time.h +20 -15
  482. data/third_party/abseil-cpp/absl/types/optional.h +7 -747
  483. data/third_party/abseil-cpp/absl/types/span.h +13 -11
  484. data/third_party/abseil-cpp/absl/types/variant.h +5 -784
  485. data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
  486. metadata +72 -20
  487. data/src/core/lib/event_engine/forkable.cc +0 -105
  488. data/src/core/lib/event_engine/forkable.h +0 -67
  489. data/src/core/lib/iomgr/python_util.h +0 -46
  490. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  491. data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
  492. data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
  493. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  494. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  495. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  496. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  497. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  498. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
  499. data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -59,7 +59,7 @@ inline unsigned int hex_digit_to_int(char c) {
59
59
  }
60
60
 
61
61
  inline bool IsSurrogate(char32_t c, absl::string_view src,
62
- absl::Nullable<std::string*> error) {
62
+ std::string* absl_nullable error) {
63
63
  if (c >= 0xD800 && c <= 0xDFFF) {
64
64
  if (error) {
65
65
  *error = absl::StrCat("invalid surrogate character (0xD800-DFFF): \\",
@@ -76,49 +76,49 @@ inline bool IsSurrogate(char32_t c, absl::string_view src,
76
76
  //
77
77
  // Unescapes C escape sequences and is the reverse of CEscape().
78
78
  //
79
- // If 'source' is valid, stores the unescaped string and its size in
80
- // 'dest' and 'dest_len' respectively, and returns true. Otherwise
81
- // returns false and optionally stores the error description in
82
- // 'error'. Set 'error' to nullptr to disable error reporting.
79
+ // If `src` is valid, stores the unescaped string `dst`, and returns
80
+ // true. Otherwise returns false and optionally stores the error
81
+ // description in `error`. Set `error` to nullptr to disable error
82
+ // reporting.
83
83
  //
84
- // 'dest' should point to a buffer that is at least as big as 'source'.
85
- // 'source' and 'dest' may be the same.
86
- //
87
- // NOTE: any changes to this function must also be reflected in the older
88
- // UnescapeCEscapeSequences().
84
+ // `src` and `dst` may use the same underlying buffer.
89
85
  // ----------------------------------------------------------------------
90
- bool CUnescapeInternal(absl::string_view source, bool leave_nulls_escaped,
91
- absl::Nonnull<char*> dest,
92
- absl::Nonnull<ptrdiff_t*> dest_len,
93
- absl::Nullable<std::string*> error) {
94
- char* d = dest;
95
- const char* p = source.data();
96
- const char* end = p + source.size();
97
- const char* last_byte = end - 1;
98
-
99
- // Small optimization for case where source = dest and there's no escaping
100
- while (p == d && p < end && *p != '\\') p++, d++;
101
-
102
- while (p < end) {
103
- if (*p != '\\') {
104
- *d++ = *p++;
86
+
87
+ bool CUnescapeInternal(absl::string_view src, bool leave_nulls_escaped,
88
+ std::string* absl_nonnull dst,
89
+ std::string* absl_nullable error) {
90
+ strings_internal::STLStringResizeUninitialized(dst, src.size());
91
+
92
+ absl::string_view::size_type p = 0; // Current src position.
93
+ std::string::size_type d = 0; // Current dst position.
94
+
95
+ // When unescaping in-place, skip any prefix that does not have escaping.
96
+ if (src.data() == dst->data()) {
97
+ while (p < src.size() && src[p] != '\\') p++, d++;
98
+ }
99
+
100
+ while (p < src.size()) {
101
+ if (src[p] != '\\') {
102
+ (*dst)[d++] = src[p++];
105
103
  } else {
106
- if (++p > last_byte) { // skip past the '\\'
107
- if (error) *error = "String cannot end with \\";
104
+ if (++p >= src.size()) { // skip past the '\\'
105
+ if (error != nullptr) {
106
+ *error = "String cannot end with \\";
107
+ }
108
108
  return false;
109
109
  }
110
- switch (*p) {
111
- case 'a': *d++ = '\a'; break;
112
- case 'b': *d++ = '\b'; break;
113
- case 'f': *d++ = '\f'; break;
114
- case 'n': *d++ = '\n'; break;
115
- case 'r': *d++ = '\r'; break;
116
- case 't': *d++ = '\t'; break;
117
- case 'v': *d++ = '\v'; break;
118
- case '\\': *d++ = '\\'; break;
119
- case '?': *d++ = '\?'; break; // \? Who knew?
120
- case '\'': *d++ = '\''; break;
121
- case '"': *d++ = '\"'; break;
110
+ switch (src[p]) {
111
+ case 'a': (*dst)[d++] = '\a'; break;
112
+ case 'b': (*dst)[d++] = '\b'; break;
113
+ case 'f': (*dst)[d++] = '\f'; break;
114
+ case 'n': (*dst)[d++] = '\n'; break;
115
+ case 'r': (*dst)[d++] = '\r'; break;
116
+ case 't': (*dst)[d++] = '\t'; break;
117
+ case 'v': (*dst)[d++] = '\v'; break;
118
+ case '\\': (*dst)[d++] = '\\'; break;
119
+ case '?': (*dst)[d++] = '\?'; break;
120
+ case '\'': (*dst)[d++] = '\''; break;
121
+ case '"': (*dst)[d++] = '\"'; break;
122
122
  case '0':
123
123
  case '1':
124
124
  case '2':
@@ -128,188 +128,170 @@ bool CUnescapeInternal(absl::string_view source, bool leave_nulls_escaped,
128
128
  case '6':
129
129
  case '7': {
130
130
  // octal digit: 1 to 3 digits
131
- const char* octal_start = p;
132
- unsigned int ch = static_cast<unsigned int>(*p - '0'); // digit 1
133
- if (p < last_byte && is_octal_digit(p[1]))
134
- ch = ch * 8 + static_cast<unsigned int>(*++p - '0'); // digit 2
135
- if (p < last_byte && is_octal_digit(p[1]))
136
- ch = ch * 8 + static_cast<unsigned int>(*++p - '0'); // digit 3
131
+ auto octal_start = p;
132
+ unsigned int ch = static_cast<unsigned int>(src[p] - '0'); // digit 1
133
+ if (p + 1 < src.size() && is_octal_digit(src[p + 1]))
134
+ ch = ch * 8 + static_cast<unsigned int>(src[++p] - '0'); // digit 2
135
+ if (p + 1 < src.size() && is_octal_digit(src[p + 1]))
136
+ ch = ch * 8 + static_cast<unsigned int>(src[++p] - '0'); // digit 3
137
137
  if (ch > 0xff) {
138
- if (error) {
139
- *error = "Value of \\" +
140
- std::string(octal_start,
141
- static_cast<size_t>(p + 1 - octal_start)) +
142
- " exceeds 0xff";
138
+ if (error != nullptr) {
139
+ *error =
140
+ "Value of \\" +
141
+ std::string(src.substr(octal_start, p + 1 - octal_start)) +
142
+ " exceeds 0xff";
143
143
  }
144
144
  return false;
145
145
  }
146
146
  if ((ch == 0) && leave_nulls_escaped) {
147
147
  // Copy the escape sequence for the null character
148
- const size_t octal_size = static_cast<size_t>(p + 1 - octal_start);
149
- *d++ = '\\';
150
- memmove(d, octal_start, octal_size);
151
- d += octal_size;
148
+ (*dst)[d++] = '\\';
149
+ while (octal_start <= p) {
150
+ (*dst)[d++] = src[octal_start++];
151
+ }
152
152
  break;
153
153
  }
154
- *d++ = static_cast<char>(ch);
154
+ (*dst)[d++] = static_cast<char>(ch);
155
155
  break;
156
156
  }
157
157
  case 'x':
158
158
  case 'X': {
159
- if (p >= last_byte) {
160
- if (error) *error = "String cannot end with \\x";
159
+ if (p + 1 >= src.size()) {
160
+ if (error != nullptr) {
161
+ *error = "String cannot end with \\x";
162
+ }
161
163
  return false;
162
- } else if (!absl::ascii_isxdigit(static_cast<unsigned char>(p[1]))) {
163
- if (error) *error = "\\x cannot be followed by a non-hex digit";
164
+ } else if (!absl::ascii_isxdigit(
165
+ static_cast<unsigned char>(src[p + 1]))) {
166
+ if (error != nullptr) {
167
+ *error = "\\x cannot be followed by a non-hex digit";
168
+ }
164
169
  return false;
165
170
  }
166
171
  unsigned int ch = 0;
167
- const char* hex_start = p;
168
- while (p < last_byte &&
169
- absl::ascii_isxdigit(static_cast<unsigned char>(p[1])))
172
+ auto hex_start = p;
173
+ while (p + 1 < src.size() &&
174
+ absl::ascii_isxdigit(static_cast<unsigned char>(src[p + 1]))) {
170
175
  // Arbitrarily many hex digits
171
- ch = (ch << 4) + hex_digit_to_int(*++p);
176
+ ch = (ch << 4) + hex_digit_to_int(src[++p]);
177
+ }
172
178
  if (ch > 0xFF) {
173
- if (error) {
179
+ if (error != nullptr) {
174
180
  *error = "Value of \\" +
175
- std::string(hex_start,
176
- static_cast<size_t>(p + 1 - hex_start)) +
181
+ std::string(src.substr(hex_start, p + 1 - hex_start)) +
177
182
  " exceeds 0xff";
178
183
  }
179
184
  return false;
180
185
  }
181
186
  if ((ch == 0) && leave_nulls_escaped) {
182
187
  // Copy the escape sequence for the null character
183
- const size_t hex_size = static_cast<size_t>(p + 1 - hex_start);
184
- *d++ = '\\';
185
- memmove(d, hex_start, hex_size);
186
- d += hex_size;
188
+ (*dst)[d++] = '\\';
189
+ while (hex_start <= p) {
190
+ (*dst)[d++] = src[hex_start++];
191
+ }
187
192
  break;
188
193
  }
189
- *d++ = static_cast<char>(ch);
194
+ (*dst)[d++] = static_cast<char>(ch);
190
195
  break;
191
196
  }
192
197
  case 'u': {
193
198
  // \uhhhh => convert 4 hex digits to UTF-8
194
199
  char32_t rune = 0;
195
- const char* hex_start = p;
196
- if (p + 4 >= end) {
197
- if (error) {
198
- *error = "\\u must be followed by 4 hex digits: \\" +
199
- std::string(hex_start,
200
- static_cast<size_t>(p + 1 - hex_start));
200
+ auto hex_start = p;
201
+ if (p + 4 >= src.size()) {
202
+ if (error != nullptr) {
203
+ *error = "\\u must be followed by 4 hex digits";
201
204
  }
202
205
  return false;
203
206
  }
204
207
  for (int i = 0; i < 4; ++i) {
205
208
  // Look one char ahead.
206
- if (absl::ascii_isxdigit(static_cast<unsigned char>(p[1]))) {
207
- rune = (rune << 4) + hex_digit_to_int(*++p); // Advance p.
209
+ if (absl::ascii_isxdigit(static_cast<unsigned char>(src[p + 1]))) {
210
+ rune = (rune << 4) + hex_digit_to_int(src[++p]);
208
211
  } else {
209
- if (error) {
212
+ if (error != nullptr) {
210
213
  *error = "\\u must be followed by 4 hex digits: \\" +
211
- std::string(hex_start,
212
- static_cast<size_t>(p + 1 - hex_start));
214
+ std::string(src.substr(hex_start, p + 1 - hex_start));
213
215
  }
214
216
  return false;
215
217
  }
216
218
  }
217
219
  if ((rune == 0) && leave_nulls_escaped) {
218
220
  // Copy the escape sequence for the null character
219
- *d++ = '\\';
220
- memmove(d, hex_start, 5); // u0000
221
- d += 5;
221
+ (*dst)[d++] = '\\';
222
+ while (hex_start <= p) {
223
+ (*dst)[d++] = src[hex_start++];
224
+ }
222
225
  break;
223
226
  }
224
- if (IsSurrogate(rune, absl::string_view(hex_start, 5), error)) {
227
+ if (IsSurrogate(rune, src.substr(hex_start, 5), error)) {
225
228
  return false;
226
229
  }
227
- d += strings_internal::EncodeUTF8Char(d, rune);
230
+ d += strings_internal::EncodeUTF8Char(dst->data() + d, rune);
228
231
  break;
229
232
  }
230
233
  case 'U': {
231
234
  // \Uhhhhhhhh => convert 8 hex digits to UTF-8
232
235
  char32_t rune = 0;
233
- const char* hex_start = p;
234
- if (p + 8 >= end) {
235
- if (error) {
236
- *error = "\\U must be followed by 8 hex digits: \\" +
237
- std::string(hex_start,
238
- static_cast<size_t>(p + 1 - hex_start));
236
+ auto hex_start = p;
237
+ if (p + 8 >= src.size()) {
238
+ if (error != nullptr) {
239
+ *error = "\\U must be followed by 8 hex digits";
239
240
  }
240
241
  return false;
241
242
  }
242
243
  for (int i = 0; i < 8; ++i) {
243
244
  // Look one char ahead.
244
- if (absl::ascii_isxdigit(static_cast<unsigned char>(p[1]))) {
245
+ if (absl::ascii_isxdigit(static_cast<unsigned char>(src[p + 1]))) {
245
246
  // Don't change rune until we're sure this
246
247
  // is within the Unicode limit, but do advance p.
247
- uint32_t newrune = (rune << 4) + hex_digit_to_int(*++p);
248
+ uint32_t newrune = (rune << 4) + hex_digit_to_int(src[++p]);
248
249
  if (newrune > 0x10FFFF) {
249
- if (error) {
250
- *error = "Value of \\" +
251
- std::string(hex_start,
252
- static_cast<size_t>(p + 1 - hex_start)) +
253
- " exceeds Unicode limit (0x10FFFF)";
250
+ if (error != nullptr) {
251
+ *error =
252
+ "Value of \\" +
253
+ std::string(src.substr(hex_start, p + 1 - hex_start)) +
254
+ " exceeds Unicode limit (0x10FFFF)";
254
255
  }
255
256
  return false;
256
257
  } else {
257
258
  rune = newrune;
258
259
  }
259
260
  } else {
260
- if (error) {
261
+ if (error != nullptr) {
261
262
  *error = "\\U must be followed by 8 hex digits: \\" +
262
- std::string(hex_start,
263
- static_cast<size_t>(p + 1 - hex_start));
263
+ std::string(src.substr(hex_start, p + 1 - hex_start));
264
264
  }
265
265
  return false;
266
266
  }
267
267
  }
268
268
  if ((rune == 0) && leave_nulls_escaped) {
269
269
  // Copy the escape sequence for the null character
270
- *d++ = '\\';
271
- memmove(d, hex_start, 9); // U00000000
272
- d += 9;
270
+ (*dst)[d++] = '\\';
271
+ // U00000000
272
+ while (hex_start <= p) {
273
+ (*dst)[d++] = src[hex_start++];
274
+ }
273
275
  break;
274
276
  }
275
- if (IsSurrogate(rune, absl::string_view(hex_start, 9), error)) {
277
+ if (IsSurrogate(rune, src.substr(hex_start, 9), error)) {
276
278
  return false;
277
279
  }
278
- d += strings_internal::EncodeUTF8Char(d, rune);
280
+ d += strings_internal::EncodeUTF8Char(dst->data() + d, rune);
279
281
  break;
280
282
  }
281
283
  default: {
282
- if (error) *error = std::string("Unknown escape sequence: \\") + *p;
284
+ if (error != nullptr) {
285
+ *error = std::string("Unknown escape sequence: \\") + src[p];
286
+ }
283
287
  return false;
284
288
  }
285
289
  }
286
- p++; // read past letter we escaped
290
+ p++; // Read past letter we escaped.
287
291
  }
288
292
  }
289
- *dest_len = d - dest;
290
- return true;
291
- }
292
293
 
293
- // ----------------------------------------------------------------------
294
- // CUnescapeInternal()
295
- //
296
- // Same as above but uses a std::string for output. 'source' and 'dest'
297
- // may be the same.
298
- // ----------------------------------------------------------------------
299
- bool CUnescapeInternal(absl::string_view source, bool leave_nulls_escaped,
300
- absl::Nonnull<std::string*> dest,
301
- absl::Nullable<std::string*> error) {
302
- strings_internal::STLStringResizeUninitialized(dest, source.size());
303
-
304
- ptrdiff_t dest_size;
305
- if (!CUnescapeInternal(source,
306
- leave_nulls_escaped,
307
- &(*dest)[0],
308
- &dest_size,
309
- error)) {
310
- return false;
311
- }
312
- dest->erase(static_cast<size_t>(dest_size));
294
+ dst->erase(d);
313
295
  return true;
314
296
  }
315
297
 
@@ -450,7 +432,7 @@ inline size_t CEscapedLength(absl::string_view src) {
450
432
  }
451
433
 
452
434
  void CEscapeAndAppendInternal(absl::string_view src,
453
- absl::Nonnull<std::string*> dest) {
435
+ std::string* absl_nonnull dest) {
454
436
  size_t escaped_len = CEscapedLength(src);
455
437
  if (escaped_len == src.size()) {
456
438
  dest->append(src.data(), src.size());
@@ -479,10 +461,10 @@ void CEscapeAndAppendInternal(absl::string_view src,
479
461
 
480
462
  // Reverses the mapping in Base64EscapeInternal; see that method's
481
463
  // documentation for details of the mapping.
482
- bool Base64UnescapeInternal(absl::Nullable<const char*> src_param, size_t szsrc,
483
- absl::Nullable<char*> dest, size_t szdest,
464
+ bool Base64UnescapeInternal(const char* absl_nullable src_param, size_t szsrc,
465
+ char* absl_nullable dest, size_t szdest,
484
466
  const std::array<signed char, 256>& unbase64,
485
- absl::Nonnull<size_t*> len) {
467
+ size_t* absl_nonnull len) {
486
468
  static const char kPad64Equals = '=';
487
469
  static const char kPad64Dot = '.';
488
470
 
@@ -818,8 +800,8 @@ constexpr std::array<signed char, 256> kUnWebSafeBase64 = {
818
800
  /* clang-format on */
819
801
 
820
802
  template <typename String>
821
- bool Base64UnescapeInternal(absl::Nullable<const char*> src, size_t slen,
822
- absl::Nonnull<String*> dest,
803
+ bool Base64UnescapeInternal(const char* absl_nullable src, size_t slen,
804
+ String* absl_nonnull dest,
823
805
  const std::array<signed char, 256>& unbase64) {
824
806
  // Determine the size of the output string. Base64 encodes every 3 bytes into
825
807
  // 4 characters. Any leftover chars are added directly for good measure.
@@ -888,7 +870,7 @@ constexpr std::array<signed char, 256> kHexValueStrict = {
888
870
  // or a string. This works because we use the [] operator to access
889
871
  // individual characters at a time.
890
872
  template <typename T>
891
- void HexStringToBytesInternal(absl::Nullable<const char*> from, T to,
873
+ void HexStringToBytesInternal(const char* absl_nullable from, T to,
892
874
  size_t num) {
893
875
  for (size_t i = 0; i < num; i++) {
894
876
  to[i] = static_cast<char>(kHexValueLenient[from[i * 2] & 0xFF] << 4) +
@@ -899,7 +881,7 @@ void HexStringToBytesInternal(absl::Nullable<const char*> from, T to,
899
881
  // This is a templated function so that T can be either a char* or a
900
882
  // std::string.
901
883
  template <typename T>
902
- void BytesToHexStringInternal(absl::Nullable<const unsigned char*> src, T dest,
884
+ void BytesToHexStringInternal(const unsigned char* absl_nullable src, T dest,
903
885
  size_t num) {
904
886
  auto dest_ptr = &dest[0];
905
887
  for (auto src_ptr = src; src_ptr != (src + num); ++src_ptr, dest_ptr += 2) {
@@ -915,8 +897,8 @@ void BytesToHexStringInternal(absl::Nullable<const unsigned char*> src, T dest,
915
897
  //
916
898
  // See CUnescapeInternal() for implementation details.
917
899
  // ----------------------------------------------------------------------
918
- bool CUnescape(absl::string_view source, absl::Nonnull<std::string*> dest,
919
- absl::Nullable<std::string*> error) {
900
+ bool CUnescape(absl::string_view source, std::string* absl_nonnull dest,
901
+ std::string* absl_nullable error) {
920
902
  return CUnescapeInternal(source, kUnescapeNulls, dest, error);
921
903
  }
922
904
 
@@ -938,23 +920,23 @@ std::string Utf8SafeCHexEscape(absl::string_view src) {
938
920
  return CEscapeInternal(src, true, true);
939
921
  }
940
922
 
941
- bool Base64Unescape(absl::string_view src, absl::Nonnull<std::string*> dest) {
923
+ bool Base64Unescape(absl::string_view src, std::string* absl_nonnull dest) {
942
924
  return Base64UnescapeInternal(src.data(), src.size(), dest, kUnBase64);
943
925
  }
944
926
 
945
927
  bool WebSafeBase64Unescape(absl::string_view src,
946
- absl::Nonnull<std::string*> dest) {
928
+ std::string* absl_nonnull dest) {
947
929
  return Base64UnescapeInternal(src.data(), src.size(), dest, kUnWebSafeBase64);
948
930
  }
949
931
 
950
- void Base64Escape(absl::string_view src, absl::Nonnull<std::string*> dest) {
932
+ void Base64Escape(absl::string_view src, std::string* absl_nonnull dest) {
951
933
  strings_internal::Base64EscapeInternal(
952
934
  reinterpret_cast<const unsigned char*>(src.data()), src.size(), dest,
953
935
  true, strings_internal::kBase64Chars);
954
936
  }
955
937
 
956
938
  void WebSafeBase64Escape(absl::string_view src,
957
- absl::Nonnull<std::string*> dest) {
939
+ std::string* absl_nonnull dest) {
958
940
  strings_internal::Base64EscapeInternal(
959
941
  reinterpret_cast<const unsigned char*>(src.data()), src.size(), dest,
960
942
  false, strings_internal::kWebSafeBase64Chars);
@@ -976,8 +958,7 @@ std::string WebSafeBase64Escape(absl::string_view src) {
976
958
  return dest;
977
959
  }
978
960
 
979
- bool HexStringToBytes(absl::string_view hex,
980
- absl::Nonnull<std::string*> bytes) {
961
+ bool HexStringToBytes(absl::string_view hex, std::string* absl_nonnull bytes) {
981
962
  std::string output;
982
963
 
983
964
  size_t num_bytes = hex.size() / 2;
@@ -71,12 +71,12 @@ ABSL_NAMESPACE_BEGIN
71
71
  // ...
72
72
  // }
73
73
  // EXPECT_EQ(unescaped_s, "foo\rbar\nbaz\t");
74
- bool CUnescape(absl::string_view source, absl::Nonnull<std::string*> dest,
75
- absl::Nullable<std::string*> error);
74
+ bool CUnescape(absl::string_view source, std::string* absl_nonnull dest,
75
+ std::string* absl_nullable error);
76
76
 
77
77
  // Overload of `CUnescape()` with no error reporting.
78
78
  inline bool CUnescape(absl::string_view source,
79
- absl::Nonnull<std::string*> dest) {
79
+ std::string* absl_nonnull dest) {
80
80
  return CUnescape(source, dest, nullptr);
81
81
  }
82
82
 
@@ -126,7 +126,7 @@ std::string Utf8SafeCHexEscape(absl::string_view src);
126
126
  // Encodes a `src` string into a base64-encoded 'dest' string with padding
127
127
  // characters. This function conforms with RFC 4648 section 4 (base64) and RFC
128
128
  // 2045.
129
- void Base64Escape(absl::string_view src, absl::Nonnull<std::string*> dest);
129
+ void Base64Escape(absl::string_view src, std::string* absl_nonnull dest);
130
130
  std::string Base64Escape(absl::string_view src);
131
131
 
132
132
  // WebSafeBase64Escape()
@@ -134,8 +134,7 @@ std::string Base64Escape(absl::string_view src);
134
134
  // Encodes a `src` string into a base64 string, like Base64Escape() does, but
135
135
  // outputs '-' instead of '+' and '_' instead of '/', and does not pad 'dest'.
136
136
  // This function conforms with RFC 4648 section 5 (base64url).
137
- void WebSafeBase64Escape(absl::string_view src,
138
- absl::Nonnull<std::string*> dest);
137
+ void WebSafeBase64Escape(absl::string_view src, std::string* absl_nonnull dest);
139
138
  std::string WebSafeBase64Escape(absl::string_view src);
140
139
 
141
140
  // Base64Unescape()
@@ -145,7 +144,7 @@ std::string WebSafeBase64Escape(absl::string_view src);
145
144
  // `src` contains invalid characters, `dest` is cleared and returns `false`.
146
145
  // If padding is included (note that `Base64Escape()` does produce it), it must
147
146
  // be correct. In the padding, '=' and '.' are treated identically.
148
- bool Base64Unescape(absl::string_view src, absl::Nonnull<std::string*> dest);
147
+ bool Base64Unescape(absl::string_view src, std::string* absl_nonnull dest);
149
148
 
150
149
  // WebSafeBase64Unescape()
151
150
  //
@@ -155,7 +154,7 @@ bool Base64Unescape(absl::string_view src, absl::Nonnull<std::string*> dest);
155
154
  // included (note that `WebSafeBase64Escape()` does not produce it), it must be
156
155
  // correct. In the padding, '=' and '.' are treated identically.
157
156
  bool WebSafeBase64Unescape(absl::string_view src,
158
- absl::Nonnull<std::string*> dest);
157
+ std::string* absl_nonnull dest);
159
158
 
160
159
  // HexStringToBytes()
161
160
  //
@@ -163,8 +162,8 @@ bool WebSafeBase64Unescape(absl::string_view src,
163
162
  // output string. If `hex` does not consist of valid hexadecimal data, this
164
163
  // function returns false and leaves `bytes` in an unspecified state. Returns
165
164
  // true on success.
166
- ABSL_MUST_USE_RESULT bool HexStringToBytes(absl::string_view hex,
167
- absl::Nonnull<std::string*> bytes);
165
+ [[nodiscard]] bool HexStringToBytes(absl::string_view hex,
166
+ std::string* absl_nonnull bytes);
168
167
 
169
168
  // HexStringToBytes()
170
169
  //
@@ -279,7 +279,7 @@ int BigUnsigned<max_words>::ReadDigits(const char* begin, const char* end,
279
279
  // Either way, [begin, decimal_point) will contain the set of dropped digits
280
280
  // that require an exponent adjustment.
281
281
  const char* decimal_point = std::find(begin, end, '.');
282
- exponent_adjust += (decimal_point - begin);
282
+ exponent_adjust += static_cast<int>(decimal_point - begin);
283
283
  }
284
284
  return exponent_adjust;
285
285
  }
@@ -25,7 +25,6 @@
25
25
  #include "absl/base/attributes.h"
26
26
  #include "absl/base/config.h"
27
27
  #include "absl/base/internal/endian.h"
28
- #include "absl/base/internal/invoke.h"
29
28
  #include "absl/base/macros.h"
30
29
  #include "absl/base/nullability.h"
31
30
  #include "absl/base/optimization.h"
@@ -358,16 +357,15 @@ struct CordRepExternal : public CordRep {
358
357
  struct Rank0 {};
359
358
  struct Rank1 : Rank0 {};
360
359
 
361
- template <typename Releaser, typename = ::absl::base_internal::invoke_result_t<
362
- Releaser, absl::string_view>>
360
+ template <typename Releaser,
361
+ typename = ::std::invoke_result_t<Releaser, absl::string_view>>
363
362
  void InvokeReleaser(Rank1, Releaser&& releaser, absl::string_view data) {
364
- ::absl::base_internal::invoke(std::forward<Releaser>(releaser), data);
363
+ ::std::invoke(std::forward<Releaser>(releaser), data);
365
364
  }
366
365
 
367
- template <typename Releaser,
368
- typename = ::absl::base_internal::invoke_result_t<Releaser>>
366
+ template <typename Releaser, typename = ::std::invoke_result_t<Releaser>>
369
367
  void InvokeReleaser(Rank0, Releaser&& releaser, absl::string_view) {
370
- ::absl::base_internal::invoke(std::forward<Releaser>(releaser));
368
+ ::std::invoke(std::forward<Releaser>(releaser));
371
369
  }
372
370
 
373
371
  // We use CompressedTuple so that we can benefit from EBCO.
@@ -637,7 +635,7 @@ class InlineData {
637
635
  poison();
638
636
  }
639
637
 
640
- void CopyInlineToString(absl::Nonnull<std::string*> dst) const {
638
+ void CopyInlineToString(std::string* dst) const {
641
639
  assert(!is_tree());
642
640
  // As Cord can store only 15 bytes it is smaller than std::string's
643
641
  // small string optimization buffer size. Therefore we will always trigger
@@ -36,10 +36,6 @@ namespace absl {
36
36
  ABSL_NAMESPACE_BEGIN
37
37
  namespace cord_internal {
38
38
 
39
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
40
- constexpr size_t CordRepBtree::kMaxCapacity;
41
- #endif
42
-
43
39
  namespace {
44
40
 
45
41
  using NodeStack = CordRepBtree * [CordRepBtree::kMaxDepth];
@@ -34,10 +34,6 @@ namespace absl {
34
34
  ABSL_NAMESPACE_BEGIN
35
35
  namespace cord_internal {
36
36
 
37
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
38
- constexpr size_t CordzInfo::kMaxStackDepth;
39
- #endif
40
-
41
37
  ABSL_CONST_INIT CordzInfo::List CordzInfo::global_list_{absl::kConstInit};
42
38
 
43
39
  namespace {