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
@@ -106,7 +106,7 @@ class Arg {
106
106
  // Overloads for string-y things
107
107
  //
108
108
  // Explicitly overload `const char*` so the compiler doesn't cast to `bool`.
109
- Arg(absl::Nullable<const char*> value) // NOLINT(google-explicit-constructor)
109
+ Arg(const char* absl_nullable value) // NOLINT(google-explicit-constructor)
110
110
  : piece_(absl::NullSafeStringView(value)) {}
111
111
  template <typename Allocator>
112
112
  Arg( // NOLINT
@@ -187,19 +187,20 @@ class Arg {
187
187
 
188
188
  // vector<bool>::reference and const_reference require special help to convert
189
189
  // to `Arg` because it requires two user defined conversions.
190
- template <typename T,
191
- absl::enable_if_t<
192
- std::is_class<T>::value &&
193
- (std::is_same<T, std::vector<bool>::reference>::value ||
194
- std::is_same<T, std::vector<bool>::const_reference>::value)>* =
195
- nullptr>
190
+ template <
191
+ typename T,
192
+ std::enable_if_t<
193
+ std::is_class<T>::value &&
194
+ (std::is_same<T, std::vector<bool>::reference>::value ||
195
+ std::is_same<T, std::vector<bool>::const_reference>::value),
196
+ bool> = true>
196
197
  Arg(T value) // NOLINT(google-explicit-constructor)
197
198
  : Arg(static_cast<bool>(value)) {}
198
199
 
199
200
  // `void*` values, with the exception of `char*`, are printed as
200
201
  // "0x<hex value>". However, in the case of `nullptr`, "NULL" is printed.
201
202
  Arg( // NOLINT(google-explicit-constructor)
202
- absl::Nullable<const void*> value);
203
+ const void* absl_nullable value);
203
204
 
204
205
  // Normal enums are already handled by the integer formatters.
205
206
  // This overload matches only scoped enums.
@@ -222,12 +223,13 @@ class Arg {
222
223
 
223
224
  // Internal helper function. Don't call this from outside this implementation.
224
225
  // This interface may change without notice.
225
- void SubstituteAndAppendArray(
226
- absl::Nonnull<std::string*> output, absl::string_view format,
227
- absl::Nullable<const absl::string_view*> args_array, size_t num_args);
226
+ void SubstituteAndAppendArray(std::string* absl_nonnull output,
227
+ absl::string_view format,
228
+ const absl::string_view* absl_nullable args_array,
229
+ size_t num_args);
228
230
 
229
231
  #if defined(ABSL_BAD_CALL_IF)
230
- constexpr int CalculateOneBit(absl::Nonnull<const char*> format) {
232
+ constexpr int CalculateOneBit(const char* absl_nonnull format) {
231
233
  // Returns:
232
234
  // * 2^N for '$N' when N is in [0-9]
233
235
  // * 0 for correct '$' escaping: '$$'.
@@ -236,11 +238,11 @@ constexpr int CalculateOneBit(absl::Nonnull<const char*> format) {
236
238
  : (1 << (*format - '0'));
237
239
  }
238
240
 
239
- constexpr const char* SkipNumber(absl::Nonnull<const char*> format) {
241
+ constexpr const char* absl_nonnull SkipNumber(const char* absl_nonnull format) {
240
242
  return !*format ? format : (format + 1);
241
243
  }
242
244
 
243
- constexpr int PlaceholderBitmask(absl::Nonnull<const char*> format) {
245
+ constexpr int PlaceholderBitmask(const char* absl_nonnull format) {
244
246
  return !*format
245
247
  ? 0
246
248
  : *format != '$' ? PlaceholderBitmask(format + 1)
@@ -273,12 +275,12 @@ constexpr int PlaceholderBitmask(absl::Nonnull<const char*> format) {
273
275
  // absl::SubstituteAndAppend(boilerplate, format, args...);
274
276
  // }
275
277
  //
276
- inline void SubstituteAndAppend(absl::Nonnull<std::string*> output,
278
+ inline void SubstituteAndAppend(std::string* absl_nonnull output,
277
279
  absl::string_view format) {
278
280
  substitute_internal::SubstituteAndAppendArray(output, format, nullptr, 0);
279
281
  }
280
282
 
281
- inline void SubstituteAndAppend(absl::Nonnull<std::string*> output,
283
+ inline void SubstituteAndAppend(std::string* absl_nonnull output,
282
284
  absl::string_view format,
283
285
  const substitute_internal::Arg& a0) {
284
286
  const absl::string_view args[] = {a0.piece()};
@@ -286,7 +288,7 @@ inline void SubstituteAndAppend(absl::Nonnull<std::string*> output,
286
288
  ABSL_ARRAYSIZE(args));
287
289
  }
288
290
 
289
- inline void SubstituteAndAppend(absl::Nonnull<std::string*> output,
291
+ inline void SubstituteAndAppend(std::string* absl_nonnull output,
290
292
  absl::string_view format,
291
293
  const substitute_internal::Arg& a0,
292
294
  const substitute_internal::Arg& a1) {
@@ -295,7 +297,7 @@ inline void SubstituteAndAppend(absl::Nonnull<std::string*> output,
295
297
  ABSL_ARRAYSIZE(args));
296
298
  }
297
299
 
298
- inline void SubstituteAndAppend(absl::Nonnull<std::string*> output,
300
+ inline void SubstituteAndAppend(std::string* absl_nonnull output,
299
301
  absl::string_view format,
300
302
  const substitute_internal::Arg& a0,
301
303
  const substitute_internal::Arg& a1,
@@ -305,7 +307,7 @@ inline void SubstituteAndAppend(absl::Nonnull<std::string*> output,
305
307
  ABSL_ARRAYSIZE(args));
306
308
  }
307
309
 
308
- inline void SubstituteAndAppend(absl::Nonnull<std::string*> output,
310
+ inline void SubstituteAndAppend(std::string* absl_nonnull output,
309
311
  absl::string_view format,
310
312
  const substitute_internal::Arg& a0,
311
313
  const substitute_internal::Arg& a1,
@@ -317,7 +319,7 @@ inline void SubstituteAndAppend(absl::Nonnull<std::string*> output,
317
319
  ABSL_ARRAYSIZE(args));
318
320
  }
319
321
 
320
- inline void SubstituteAndAppend(absl::Nonnull<std::string*> output,
322
+ inline void SubstituteAndAppend(std::string* absl_nonnull output,
321
323
  absl::string_view format,
322
324
  const substitute_internal::Arg& a0,
323
325
  const substitute_internal::Arg& a1,
@@ -331,7 +333,7 @@ inline void SubstituteAndAppend(absl::Nonnull<std::string*> output,
331
333
  }
332
334
 
333
335
  inline void SubstituteAndAppend(
334
- absl::Nonnull<std::string*> output, absl::string_view format,
336
+ std::string* absl_nonnull output, absl::string_view format,
335
337
  const substitute_internal::Arg& a0, const substitute_internal::Arg& a1,
336
338
  const substitute_internal::Arg& a2, const substitute_internal::Arg& a3,
337
339
  const substitute_internal::Arg& a4, const substitute_internal::Arg& a5) {
@@ -342,7 +344,7 @@ inline void SubstituteAndAppend(
342
344
  }
343
345
 
344
346
  inline void SubstituteAndAppend(
345
- absl::Nonnull<std::string*> output, absl::string_view format,
347
+ std::string* absl_nonnull output, absl::string_view format,
346
348
  const substitute_internal::Arg& a0, const substitute_internal::Arg& a1,
347
349
  const substitute_internal::Arg& a2, const substitute_internal::Arg& a3,
348
350
  const substitute_internal::Arg& a4, const substitute_internal::Arg& a5,
@@ -355,7 +357,7 @@ inline void SubstituteAndAppend(
355
357
  }
356
358
 
357
359
  inline void SubstituteAndAppend(
358
- absl::Nonnull<std::string*> output, absl::string_view format,
360
+ std::string* absl_nonnull output, absl::string_view format,
359
361
  const substitute_internal::Arg& a0, const substitute_internal::Arg& a1,
360
362
  const substitute_internal::Arg& a2, const substitute_internal::Arg& a3,
361
363
  const substitute_internal::Arg& a4, const substitute_internal::Arg& a5,
@@ -368,7 +370,7 @@ inline void SubstituteAndAppend(
368
370
  }
369
371
 
370
372
  inline void SubstituteAndAppend(
371
- absl::Nonnull<std::string*> output, absl::string_view format,
373
+ std::string* absl_nonnull output, absl::string_view format,
372
374
  const substitute_internal::Arg& a0, const substitute_internal::Arg& a1,
373
375
  const substitute_internal::Arg& a2, const substitute_internal::Arg& a3,
374
376
  const substitute_internal::Arg& a4, const substitute_internal::Arg& a5,
@@ -382,7 +384,7 @@ inline void SubstituteAndAppend(
382
384
  }
383
385
 
384
386
  inline void SubstituteAndAppend(
385
- absl::Nonnull<std::string*> output, absl::string_view format,
387
+ std::string* absl_nonnull output, absl::string_view format,
386
388
  const substitute_internal::Arg& a0, const substitute_internal::Arg& a1,
387
389
  const substitute_internal::Arg& a2, const substitute_internal::Arg& a3,
388
390
  const substitute_internal::Arg& a4, const substitute_internal::Arg& a5,
@@ -398,16 +400,16 @@ inline void SubstituteAndAppend(
398
400
  #if defined(ABSL_BAD_CALL_IF)
399
401
  // This body of functions catches cases where the number of placeholders
400
402
  // doesn't match the number of data arguments.
401
- void SubstituteAndAppend(absl::Nonnull<std::string*> output,
402
- absl::Nonnull<const char*> format)
403
+ void SubstituteAndAppend(std::string* absl_nonnull output,
404
+ const char* absl_nonnull format)
403
405
  ABSL_BAD_CALL_IF(
404
406
  substitute_internal::PlaceholderBitmask(format) != 0,
405
407
  "There were no substitution arguments "
406
408
  "but this format string either has a $[0-9] in it or contains "
407
409
  "an unescaped $ character (use $$ instead)");
408
410
 
409
- void SubstituteAndAppend(absl::Nonnull<std::string*> output,
410
- absl::Nonnull<const char*> format,
411
+ void SubstituteAndAppend(std::string* absl_nonnull output,
412
+ const char* absl_nonnull format,
411
413
  const substitute_internal::Arg& a0)
412
414
  ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 1,
413
415
  "There was 1 substitution argument given, but "
@@ -415,8 +417,8 @@ void SubstituteAndAppend(absl::Nonnull<std::string*> output,
415
417
  "one of $1-$9, or contains an unescaped $ character (use "
416
418
  "$$ instead)");
417
419
 
418
- void SubstituteAndAppend(absl::Nonnull<std::string*> output,
419
- absl::Nonnull<const char*> format,
420
+ void SubstituteAndAppend(std::string* absl_nonnull output,
421
+ const char* absl_nonnull format,
420
422
  const substitute_internal::Arg& a0,
421
423
  const substitute_internal::Arg& a1)
422
424
  ABSL_BAD_CALL_IF(
@@ -425,8 +427,8 @@ void SubstituteAndAppend(absl::Nonnull<std::string*> output,
425
427
  "missing its $0/$1, contains one of $2-$9, or contains an "
426
428
  "unescaped $ character (use $$ instead)");
427
429
 
428
- void SubstituteAndAppend(absl::Nonnull<std::string*> output,
429
- absl::Nonnull<const char*> format,
430
+ void SubstituteAndAppend(std::string* absl_nonnull output,
431
+ const char* absl_nonnull format,
430
432
  const substitute_internal::Arg& a0,
431
433
  const substitute_internal::Arg& a1,
432
434
  const substitute_internal::Arg& a2)
@@ -436,8 +438,8 @@ void SubstituteAndAppend(absl::Nonnull<std::string*> output,
436
438
  "this format string is missing its $0/$1/$2, contains one of "
437
439
  "$3-$9, or contains an unescaped $ character (use $$ instead)");
438
440
 
439
- void SubstituteAndAppend(absl::Nonnull<std::string*> output,
440
- absl::Nonnull<const char*> format,
441
+ void SubstituteAndAppend(std::string* absl_nonnull output,
442
+ const char* absl_nonnull format,
441
443
  const substitute_internal::Arg& a0,
442
444
  const substitute_internal::Arg& a1,
443
445
  const substitute_internal::Arg& a2,
@@ -448,8 +450,8 @@ void SubstituteAndAppend(absl::Nonnull<std::string*> output,
448
450
  "this format string is missing its $0-$3, contains one of "
449
451
  "$4-$9, or contains an unescaped $ character (use $$ instead)");
450
452
 
451
- void SubstituteAndAppend(absl::Nonnull<std::string*> output,
452
- absl::Nonnull<const char*> format,
453
+ void SubstituteAndAppend(std::string* absl_nonnull output,
454
+ const char* absl_nonnull format,
453
455
  const substitute_internal::Arg& a0,
454
456
  const substitute_internal::Arg& a1,
455
457
  const substitute_internal::Arg& a2,
@@ -462,7 +464,7 @@ void SubstituteAndAppend(absl::Nonnull<std::string*> output,
462
464
  "$5-$9, or contains an unescaped $ character (use $$ instead)");
463
465
 
464
466
  void SubstituteAndAppend(
465
- absl::Nonnull<std::string*> output, absl::Nonnull<const char*> format,
467
+ std::string* absl_nonnull output, const char* absl_nonnull format,
466
468
  const substitute_internal::Arg& a0, const substitute_internal::Arg& a1,
467
469
  const substitute_internal::Arg& a2, const substitute_internal::Arg& a3,
468
470
  const substitute_internal::Arg& a4, const substitute_internal::Arg& a5)
@@ -473,7 +475,7 @@ void SubstituteAndAppend(
473
475
  "$6-$9, or contains an unescaped $ character (use $$ instead)");
474
476
 
475
477
  void SubstituteAndAppend(
476
- absl::Nonnull<std::string*> output, absl::Nonnull<const char*> format,
478
+ std::string* absl_nonnull output, const char* absl_nonnull format,
477
479
  const substitute_internal::Arg& a0, const substitute_internal::Arg& a1,
478
480
  const substitute_internal::Arg& a2, const substitute_internal::Arg& a3,
479
481
  const substitute_internal::Arg& a4, const substitute_internal::Arg& a5,
@@ -485,7 +487,7 @@ void SubstituteAndAppend(
485
487
  "$7-$9, or contains an unescaped $ character (use $$ instead)");
486
488
 
487
489
  void SubstituteAndAppend(
488
- absl::Nonnull<std::string*> output, absl::Nonnull<const char*> format,
490
+ std::string* absl_nonnull output, const char* absl_nonnull format,
489
491
  const substitute_internal::Arg& a0, const substitute_internal::Arg& a1,
490
492
  const substitute_internal::Arg& a2, const substitute_internal::Arg& a3,
491
493
  const substitute_internal::Arg& a4, const substitute_internal::Arg& a5,
@@ -497,7 +499,7 @@ void SubstituteAndAppend(
497
499
  "$8-$9, or contains an unescaped $ character (use $$ instead)");
498
500
 
499
501
  void SubstituteAndAppend(
500
- absl::Nonnull<std::string*> output, absl::Nonnull<const char*> format,
502
+ std::string* absl_nonnull output, const char* absl_nonnull format,
501
503
  const substitute_internal::Arg& a0, const substitute_internal::Arg& a1,
502
504
  const substitute_internal::Arg& a2, const substitute_internal::Arg& a3,
503
505
  const substitute_internal::Arg& a4, const substitute_internal::Arg& a5,
@@ -510,7 +512,7 @@ void SubstituteAndAppend(
510
512
  "contains an unescaped $ character (use $$ instead)");
511
513
 
512
514
  void SubstituteAndAppend(
513
- absl::Nonnull<std::string*> output, absl::Nonnull<const char*> format,
515
+ std::string* absl_nonnull output, const char* absl_nonnull format,
514
516
  const substitute_internal::Arg& a0, const substitute_internal::Arg& a1,
515
517
  const substitute_internal::Arg& a2, const substitute_internal::Arg& a3,
516
518
  const substitute_internal::Arg& a4, const substitute_internal::Arg& a5,
@@ -539,20 +541,20 @@ void SubstituteAndAppend(
539
541
  // void VarMsg(absl::string_view format, const Args&... args) {
540
542
  // std::string s = absl::Substitute(format, args...);
541
543
 
542
- ABSL_MUST_USE_RESULT inline std::string Substitute(absl::string_view format) {
544
+ [[nodiscard]] inline std::string Substitute(absl::string_view format) {
543
545
  std::string result;
544
546
  SubstituteAndAppend(&result, format);
545
547
  return result;
546
548
  }
547
549
 
548
- ABSL_MUST_USE_RESULT inline std::string Substitute(
550
+ [[nodiscard]] inline std::string Substitute(
549
551
  absl::string_view format, const substitute_internal::Arg& a0) {
550
552
  std::string result;
551
553
  SubstituteAndAppend(&result, format, a0);
552
554
  return result;
553
555
  }
554
556
 
555
- ABSL_MUST_USE_RESULT inline std::string Substitute(
557
+ [[nodiscard]] inline std::string Substitute(
556
558
  absl::string_view format, const substitute_internal::Arg& a0,
557
559
  const substitute_internal::Arg& a1) {
558
560
  std::string result;
@@ -560,7 +562,7 @@ ABSL_MUST_USE_RESULT inline std::string Substitute(
560
562
  return result;
561
563
  }
562
564
 
563
- ABSL_MUST_USE_RESULT inline std::string Substitute(
565
+ [[nodiscard]] inline std::string Substitute(
564
566
  absl::string_view format, const substitute_internal::Arg& a0,
565
567
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2) {
566
568
  std::string result;
@@ -568,7 +570,7 @@ ABSL_MUST_USE_RESULT inline std::string Substitute(
568
570
  return result;
569
571
  }
570
572
 
571
- ABSL_MUST_USE_RESULT inline std::string Substitute(
573
+ [[nodiscard]] inline std::string Substitute(
572
574
  absl::string_view format, const substitute_internal::Arg& a0,
573
575
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2,
574
576
  const substitute_internal::Arg& a3) {
@@ -577,7 +579,7 @@ ABSL_MUST_USE_RESULT inline std::string Substitute(
577
579
  return result;
578
580
  }
579
581
 
580
- ABSL_MUST_USE_RESULT inline std::string Substitute(
582
+ [[nodiscard]] inline std::string Substitute(
581
583
  absl::string_view format, const substitute_internal::Arg& a0,
582
584
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2,
583
585
  const substitute_internal::Arg& a3, const substitute_internal::Arg& a4) {
@@ -586,7 +588,7 @@ ABSL_MUST_USE_RESULT inline std::string Substitute(
586
588
  return result;
587
589
  }
588
590
 
589
- ABSL_MUST_USE_RESULT inline std::string Substitute(
591
+ [[nodiscard]] inline std::string Substitute(
590
592
  absl::string_view format, const substitute_internal::Arg& a0,
591
593
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2,
592
594
  const substitute_internal::Arg& a3, const substitute_internal::Arg& a4,
@@ -596,7 +598,7 @@ ABSL_MUST_USE_RESULT inline std::string Substitute(
596
598
  return result;
597
599
  }
598
600
 
599
- ABSL_MUST_USE_RESULT inline std::string Substitute(
601
+ [[nodiscard]] inline std::string Substitute(
600
602
  absl::string_view format, const substitute_internal::Arg& a0,
601
603
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2,
602
604
  const substitute_internal::Arg& a3, const substitute_internal::Arg& a4,
@@ -606,7 +608,7 @@ ABSL_MUST_USE_RESULT inline std::string Substitute(
606
608
  return result;
607
609
  }
608
610
 
609
- ABSL_MUST_USE_RESULT inline std::string Substitute(
611
+ [[nodiscard]] inline std::string Substitute(
610
612
  absl::string_view format, const substitute_internal::Arg& a0,
611
613
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2,
612
614
  const substitute_internal::Arg& a3, const substitute_internal::Arg& a4,
@@ -617,7 +619,7 @@ ABSL_MUST_USE_RESULT inline std::string Substitute(
617
619
  return result;
618
620
  }
619
621
 
620
- ABSL_MUST_USE_RESULT inline std::string Substitute(
622
+ [[nodiscard]] inline std::string Substitute(
621
623
  absl::string_view format, const substitute_internal::Arg& a0,
622
624
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2,
623
625
  const substitute_internal::Arg& a3, const substitute_internal::Arg& a4,
@@ -628,7 +630,7 @@ ABSL_MUST_USE_RESULT inline std::string Substitute(
628
630
  return result;
629
631
  }
630
632
 
631
- ABSL_MUST_USE_RESULT inline std::string Substitute(
633
+ [[nodiscard]] inline std::string Substitute(
632
634
  absl::string_view format, const substitute_internal::Arg& a0,
633
635
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2,
634
636
  const substitute_internal::Arg& a3, const substitute_internal::Arg& a4,
@@ -643,13 +645,13 @@ ABSL_MUST_USE_RESULT inline std::string Substitute(
643
645
  #if defined(ABSL_BAD_CALL_IF)
644
646
  // This body of functions catches cases where the number of placeholders
645
647
  // doesn't match the number of data arguments.
646
- std::string Substitute(absl::Nonnull<const char*> format)
648
+ std::string Substitute(const char* absl_nonnull format)
647
649
  ABSL_BAD_CALL_IF(substitute_internal::PlaceholderBitmask(format) != 0,
648
650
  "There were no substitution arguments "
649
651
  "but this format string either has a $[0-9] in it or "
650
652
  "contains an unescaped $ character (use $$ instead)");
651
653
 
652
- std::string Substitute(absl::Nonnull<const char*> format,
654
+ std::string Substitute(const char* absl_nonnull format,
653
655
  const substitute_internal::Arg& a0)
654
656
  ABSL_BAD_CALL_IF(
655
657
  substitute_internal::PlaceholderBitmask(format) != 1,
@@ -657,7 +659,7 @@ std::string Substitute(absl::Nonnull<const char*> format,
657
659
  "this format string is missing its $0, contains one of $1-$9, "
658
660
  "or contains an unescaped $ character (use $$ instead)");
659
661
 
660
- std::string Substitute(absl::Nonnull<const char*> format,
662
+ std::string Substitute(const char* absl_nonnull format,
661
663
  const substitute_internal::Arg& a0,
662
664
  const substitute_internal::Arg& a1)
663
665
  ABSL_BAD_CALL_IF(
@@ -666,7 +668,7 @@ std::string Substitute(absl::Nonnull<const char*> format,
666
668
  "this format string is missing its $0/$1, contains one of "
667
669
  "$2-$9, or contains an unescaped $ character (use $$ instead)");
668
670
 
669
- std::string Substitute(absl::Nonnull<const char*> format,
671
+ std::string Substitute(const char* absl_nonnull format,
670
672
  const substitute_internal::Arg& a0,
671
673
  const substitute_internal::Arg& a1,
672
674
  const substitute_internal::Arg& a2)
@@ -676,7 +678,7 @@ std::string Substitute(absl::Nonnull<const char*> format,
676
678
  "this format string is missing its $0/$1/$2, contains one of "
677
679
  "$3-$9, or contains an unescaped $ character (use $$ instead)");
678
680
 
679
- std::string Substitute(absl::Nonnull<const char*> format,
681
+ std::string Substitute(const char* absl_nonnull format,
680
682
  const substitute_internal::Arg& a0,
681
683
  const substitute_internal::Arg& a1,
682
684
  const substitute_internal::Arg& a2,
@@ -687,7 +689,7 @@ std::string Substitute(absl::Nonnull<const char*> format,
687
689
  "this format string is missing its $0-$3, contains one of "
688
690
  "$4-$9, or contains an unescaped $ character (use $$ instead)");
689
691
 
690
- std::string Substitute(absl::Nonnull<const char*> format,
692
+ std::string Substitute(const char* absl_nonnull format,
691
693
  const substitute_internal::Arg& a0,
692
694
  const substitute_internal::Arg& a1,
693
695
  const substitute_internal::Arg& a2,
@@ -699,7 +701,7 @@ std::string Substitute(absl::Nonnull<const char*> format,
699
701
  "this format string is missing its $0-$4, contains one of "
700
702
  "$5-$9, or contains an unescaped $ character (use $$ instead)");
701
703
 
702
- std::string Substitute(absl::Nonnull<const char*> format,
704
+ std::string Substitute(const char* absl_nonnull format,
703
705
  const substitute_internal::Arg& a0,
704
706
  const substitute_internal::Arg& a1,
705
707
  const substitute_internal::Arg& a2,
@@ -713,7 +715,7 @@ std::string Substitute(absl::Nonnull<const char*> format,
713
715
  "$6-$9, or contains an unescaped $ character (use $$ instead)");
714
716
 
715
717
  std::string Substitute(
716
- absl::Nonnull<const char*> format, const substitute_internal::Arg& a0,
718
+ const char* absl_nonnull format, const substitute_internal::Arg& a0,
717
719
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2,
718
720
  const substitute_internal::Arg& a3, const substitute_internal::Arg& a4,
719
721
  const substitute_internal::Arg& a5, const substitute_internal::Arg& a6)
@@ -724,7 +726,7 @@ std::string Substitute(
724
726
  "$7-$9, or contains an unescaped $ character (use $$ instead)");
725
727
 
726
728
  std::string Substitute(
727
- absl::Nonnull<const char*> format, const substitute_internal::Arg& a0,
729
+ const char* absl_nonnull format, const substitute_internal::Arg& a0,
728
730
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2,
729
731
  const substitute_internal::Arg& a3, const substitute_internal::Arg& a4,
730
732
  const substitute_internal::Arg& a5, const substitute_internal::Arg& a6,
@@ -736,7 +738,7 @@ std::string Substitute(
736
738
  "$8-$9, or contains an unescaped $ character (use $$ instead)");
737
739
 
738
740
  std::string Substitute(
739
- absl::Nonnull<const char*> format, const substitute_internal::Arg& a0,
741
+ const char* absl_nonnull format, const substitute_internal::Arg& a0,
740
742
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2,
741
743
  const substitute_internal::Arg& a3, const substitute_internal::Arg& a4,
742
744
  const substitute_internal::Arg& a5, const substitute_internal::Arg& a6,
@@ -748,7 +750,7 @@ std::string Substitute(
748
750
  "contains an unescaped $ character (use $$ instead)");
749
751
 
750
752
  std::string Substitute(
751
- absl::Nonnull<const char*> format, const substitute_internal::Arg& a0,
753
+ const char* absl_nonnull format, const substitute_internal::Arg& a0,
752
754
  const substitute_internal::Arg& a1, const substitute_internal::Arg& a2,
753
755
  const substitute_internal::Arg& a3, const substitute_internal::Arg& a4,
754
756
  const substitute_internal::Arg& a5, const substitute_internal::Arg& a6,
@@ -31,10 +31,6 @@ namespace absl {
31
31
  ABSL_NAMESPACE_BEGIN
32
32
  namespace synchronization_internal {
33
33
 
34
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
35
- constexpr char FutexWaiter::kName[];
36
- #endif
37
-
38
34
  int FutexWaiter::WaitUntil(std::atomic<int32_t>* v, int32_t val,
39
35
  KernelTimeout t) {
40
36
  #ifdef CLOCK_MONOTONIC
@@ -35,11 +35,6 @@ namespace absl {
35
35
  ABSL_NAMESPACE_BEGIN
36
36
  namespace synchronization_internal {
37
37
 
38
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
39
- constexpr uint64_t KernelTimeout::kNoTimeout;
40
- constexpr int64_t KernelTimeout::kMaxNanos;
41
- #endif
42
-
43
38
  int64_t KernelTimeout::SteadyClockNow() {
44
39
  if (!SupportsSteadyClock()) {
45
40
  return absl::GetCurrentTimeNanos();
@@ -58,10 +58,6 @@ class PthreadMutexHolder {
58
58
  };
59
59
  } // namespace
60
60
 
61
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
62
- constexpr char PthreadWaiter::kName[];
63
- #endif
64
-
65
61
  PthreadWaiter::PthreadWaiter() : waiter_count_(0), wakeup_count_(0) {
66
62
  const int err = pthread_mutex_init(&mu_, 0);
67
63
  if (err != 0) {
@@ -33,10 +33,6 @@ namespace absl {
33
33
  ABSL_NAMESPACE_BEGIN
34
34
  namespace synchronization_internal {
35
35
 
36
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
37
- constexpr char SemWaiter::kName[];
38
- #endif
39
-
40
36
  SemWaiter::SemWaiter() : wakeups_(0) {
41
37
  if (sem_init(&sem_, 0, 0) != 0) {
42
38
  ABSL_RAW_LOG(FATAL, "sem_init failed with errno %d\n", errno);
@@ -30,10 +30,6 @@ namespace absl {
30
30
  ABSL_NAMESPACE_BEGIN
31
31
  namespace synchronization_internal {
32
32
 
33
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
34
- constexpr char StdcppWaiter::kName[];
35
- #endif
36
-
37
33
  StdcppWaiter::StdcppWaiter() : waiter_count_(0), wakeup_count_(0) {}
38
34
 
39
35
  bool StdcppWaiter::Wait(KernelTimeout t) {
@@ -21,10 +21,6 @@ namespace absl {
21
21
  ABSL_NAMESPACE_BEGIN
22
22
  namespace synchronization_internal {
23
23
 
24
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
25
- constexpr int WaiterBase::kIdlePeriods;
26
- #endif
27
-
28
24
  void WaiterBase::MaybeBecomeIdle() {
29
25
  base_internal::ThreadIdentity *identity =
30
26
  base_internal::CurrentThreadIdentityIfPresent();
@@ -28,10 +28,6 @@ namespace absl {
28
28
  ABSL_NAMESPACE_BEGIN
29
29
  namespace synchronization_internal {
30
30
 
31
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
32
- constexpr char Win32Waiter::kName[];
33
- #endif
34
-
35
31
  class Win32Waiter::WinHelper {
36
32
  public:
37
33
  static SRWLOCK *GetLock(Win32Waiter *w) {
@@ -1339,7 +1339,7 @@ static char* StackString(void** pcs, int n, char* buf, int maxlen,
1339
1339
  } else {
1340
1340
  snprintf(buf + len, count, " %p", pcs[i]);
1341
1341
  }
1342
- len += strlen(&buf[len]);
1342
+ len += static_cast<int>(strlen(&buf[len]));
1343
1343
  }
1344
1344
  return buf;
1345
1345
  }