grpc 1.42.0 → 1.51.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (2080) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +705 -451
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/endpoint_config.h +11 -5
  5. data/include/grpc/event_engine/event_engine.h +122 -44
  6. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
  7. data/include/grpc/event_engine/memory_allocator.h +27 -26
  8. data/include/grpc/event_engine/memory_request.h +57 -0
  9. data/include/grpc/event_engine/port.h +1 -1
  10. data/include/grpc/event_engine/slice.h +286 -0
  11. data/include/grpc/event_engine/slice_buffer.h +135 -0
  12. data/include/grpc/grpc.h +43 -27
  13. data/include/grpc/grpc_posix.h +20 -19
  14. data/include/grpc/grpc_security.h +323 -195
  15. data/include/grpc/grpc_security_constants.h +1 -14
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
  18. data/include/grpc/impl/codegen/atm_windows.h +0 -2
  19. data/include/grpc/impl/codegen/compression_types.h +2 -3
  20. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  21. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  22. data/include/grpc/impl/codegen/grpc_types.h +31 -30
  23. data/include/grpc/impl/codegen/port_platform.h +107 -47
  24. data/include/grpc/impl/codegen/slice.h +5 -2
  25. data/include/grpc/slice.h +0 -11
  26. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  27. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +315 -0
  28. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
  29. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
  30. data/src/core/ext/filters/channel_idle/idle_filter_state.h +68 -0
  31. data/src/core/ext/filters/client_channel/backend_metric.cc +20 -16
  32. data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
  33. data/src/core/ext/filters/client_channel/backup_poller.cc +23 -19
  34. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  35. data/src/core/ext/filters/client_channel/channel_connectivity.cc +54 -30
  36. data/src/core/ext/filters/client_channel/client_channel.cc +684 -615
  37. data/src/core/ext/filters/client_channel/client_channel.h +103 -58
  38. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -6
  39. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  40. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -26
  41. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -8
  42. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -41
  43. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  44. data/src/core/ext/filters/client_channel/client_channel_service_config.h +111 -0
  45. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  46. data/src/core/ext/filters/client_channel/config_selector.h +21 -11
  47. data/src/core/ext/filters/client_channel/connector.h +13 -8
  48. data/src/core/ext/filters/client_channel/dynamic_filters.cc +36 -51
  49. data/src/core/ext/filters/client_channel/dynamic_filters.h +19 -10
  50. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +4 -22
  51. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +6 -15
  52. data/src/core/ext/filters/client_channel/health/health_check_client.cc +139 -583
  53. data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -160
  54. data/src/core/ext/filters/client_channel/http_proxy.cc +96 -130
  55. data/src/core/ext/filters/client_channel/http_proxy.h +25 -1
  56. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +12 -8
  57. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  58. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  59. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +36 -15
  60. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +15 -9
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +21 -19
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +380 -313
  64. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  65. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
  66. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +6 -2
  67. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -5
  68. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +8 -2
  69. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +26 -16
  70. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +10 -8
  71. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +415 -0
  72. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  73. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1152 -0
  74. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
  75. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +228 -207
  76. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +491 -452
  77. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +523 -391
  78. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +16 -6
  79. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +636 -626
  80. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +280 -254
  81. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +147 -134
  82. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +275 -223
  83. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +266 -249
  84. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  85. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +64 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +288 -277
  87. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +213 -182
  88. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +589 -737
  89. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  90. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  91. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  92. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +43 -33
  93. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +676 -334
  94. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +30 -13
  95. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +29 -24
  96. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +51 -71
  97. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +358 -357
  98. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +55 -40
  99. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +3 -2
  100. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  101. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  102. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +124 -255
  103. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +37 -49
  104. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +18 -3
  105. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +190 -102
  106. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +258 -0
  107. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +123 -0
  108. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +56 -61
  109. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +648 -503
  110. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  111. data/src/core/ext/filters/client_channel/retry_filter.cc +382 -294
  112. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  113. data/src/core/ext/filters/client_channel/retry_service_config.cc +198 -232
  114. data/src/core/ext/filters/client_channel/retry_service_config.h +41 -32
  115. data/src/core/ext/filters/client_channel/retry_throttle.cc +18 -39
  116. data/src/core/ext/filters/client_channel/retry_throttle.h +26 -13
  117. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +37 -19
  118. data/src/core/ext/filters/client_channel/subchannel.cc +272 -319
  119. data/src/core/ext/filters/client_channel/subchannel.h +100 -47
  120. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  121. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  122. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +20 -26
  123. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +470 -0
  124. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
  125. data/src/core/ext/filters/deadline/deadline_filter.cc +48 -39
  126. data/src/core/ext/filters/deadline/deadline_filter.h +11 -4
  127. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +179 -403
  128. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +38 -6
  129. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  130. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +112 -0
  131. data/src/core/ext/filters/http/client/http_client_filter.cc +106 -551
  132. data/src/core/ext/filters/http/client/http_client_filter.h +35 -5
  133. data/src/core/ext/filters/http/client_authority_filter.cc +43 -112
  134. data/src/core/ext/filters/http/client_authority_filter.h +28 -6
  135. data/src/core/ext/filters/http/http_filters_plugin.cc +35 -28
  136. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +112 -333
  137. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  138. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +85 -161
  139. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  140. data/src/core/ext/filters/http/server/http_server_filter.cc +100 -476
  141. data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
  142. data/src/core/ext/filters/message_size/message_size_filter.cc +130 -159
  143. data/src/core/ext/filters/message_size/message_size_filter.h +41 -17
  144. data/src/core/ext/filters/rbac/rbac_filter.cc +174 -0
  145. data/src/core/ext/filters/rbac/rbac_filter.h +84 -0
  146. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +819 -0
  147. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +86 -0
  148. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +62 -0
  149. data/src/core/ext/filters/server_config_selector/server_config_selector.h +85 -0
  150. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +160 -0
  151. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +33 -0
  152. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +268 -110
  153. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -9
  154. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +387 -216
  155. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -5
  156. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  157. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  158. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +2 -1
  159. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  160. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +791 -1179
  161. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -5
  162. data/src/core/ext/transport/chttp2/transport/context_list.cc +6 -3
  163. data/src/core/ext/transport/chttp2/transport/context_list.h +6 -4
  164. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
  165. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
  166. data/src/core/ext/transport/chttp2/transport/flow_control.cc +297 -285
  167. data/src/core/ext/transport/chttp2/transport/flow_control.h +191 -293
  168. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  169. data/src/core/ext/transport/chttp2/transport/frame_data.cc +66 -218
  170. data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
  171. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +16 -13
  172. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  173. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -7
  174. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  175. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +21 -9
  176. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  177. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +27 -59
  178. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  179. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +15 -16
  180. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  181. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  182. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +381 -260
  183. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +106 -147
  184. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +5 -2
  185. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +12 -1
  186. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +157 -229
  187. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -2
  188. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +143 -42
  189. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +50 -50
  190. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  191. data/src/core/ext/transport/chttp2/transport/internal.h +74 -163
  192. data/src/core/ext/transport/chttp2/transport/parsing.cc +170 -91
  193. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
  194. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  195. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  196. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  197. data/src/core/ext/transport/chttp2/transport/varint.h +13 -8
  198. data/src/core/ext/transport/chttp2/transport/writing.cc +150 -183
  199. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -5
  200. data/src/core/ext/transport/inproc/inproc_transport.cc +237 -323
  201. data/src/core/ext/transport/inproc/inproc_transport.h +4 -5
  202. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  203. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +502 -0
  204. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  205. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +569 -0
  206. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +60 -341
  207. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +280 -1355
  208. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  209. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  210. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  211. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +159 -0
  212. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +64 -0
  213. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +189 -0
  214. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  215. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +128 -0
  216. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  217. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +106 -0
  218. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  219. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +101 -0
  220. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  221. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +613 -0
  222. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  223. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +107 -0
  224. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
  225. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +51 -0
  226. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
  227. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -17
  228. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
  229. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +730 -385
  230. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -199
  231. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1360 -663
  232. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +49 -28
  233. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +213 -90
  234. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +321 -271
  235. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1776 -826
  236. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
  237. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +47 -23
  238. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +60 -27
  239. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +277 -98
  240. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  241. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1437 -0
  242. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +74 -53
  243. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +383 -189
  244. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -7
  245. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -24
  246. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +215 -176
  247. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1179 -583
  248. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +105 -45
  249. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +554 -166
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +43 -23
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +16 -22
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +46 -100
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +159 -0
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +145 -117
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +821 -409
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +141 -92
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +773 -348
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +62 -30
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +204 -125
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1068 -398
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +17 -4
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +33 -16
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +27 -13
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +92 -48
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +80 -33
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +98 -48
  272. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
  273. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -25
  274. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
  275. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +207 -108
  276. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +74 -55
  277. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +374 -189
  278. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
  279. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +378 -187
  280. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
  281. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -20
  282. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +122 -71
  283. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +660 -259
  284. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +104 -79
  285. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +589 -300
  286. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +31 -16
  287. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +109 -48
  288. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -10
  289. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +98 -39
  290. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  291. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +140 -0
  292. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -61
  293. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +446 -234
  294. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
  295. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +443 -236
  296. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +139 -103
  297. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +649 -293
  298. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +45 -41
  299. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +255 -165
  300. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +706 -570
  301. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4125 -1898
  302. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +38 -19
  303. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +161 -71
  304. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +241 -0
  305. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1191 -0
  306. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  307. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +92 -0
  308. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  309. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +107 -0
  310. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +27 -13
  311. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +86 -45
  312. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  313. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +138 -0
  314. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  315. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +254 -0
  316. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  317. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  318. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  319. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +98 -0
  320. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  321. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +221 -0
  322. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +33 -0
  323. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +43 -0
  324. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  325. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +226 -0
  326. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  327. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +150 -0
  328. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +17 -4
  329. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +39 -23
  330. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
  331. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +208 -111
  332. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
  333. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +273 -131
  334. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +71 -0
  335. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +237 -0
  336. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +26 -13
  337. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +91 -42
  338. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +292 -224
  339. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1679 -733
  340. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  341. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  342. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  343. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  344. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +9 -0
  345. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +6 -3
  346. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +107 -60
  347. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +607 -234
  348. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
  349. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +169 -86
  350. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +126 -83
  351. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +651 -262
  352. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  353. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +168 -0
  354. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +15 -2
  355. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +26 -14
  356. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +206 -72
  357. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1095 -255
  358. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
  359. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +116 -61
  360. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +74 -57
  361. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +368 -185
  362. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  363. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +116 -0
  364. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +34 -18
  365. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +140 -80
  366. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  367. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +230 -0
  368. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +28 -14
  369. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +108 -56
  370. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
  371. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +55 -30
  372. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
  373. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +53 -26
  374. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
  375. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +43 -23
  376. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
  377. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +130 -68
  378. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
  379. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +132 -64
  380. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
  381. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +94 -52
  382. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
  383. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +163 -82
  384. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
  385. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -144
  386. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
  387. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +256 -130
  388. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  389. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +213 -0
  390. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +9 -0
  391. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +3 -0
  392. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  393. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +143 -0
  394. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +23 -9
  395. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +71 -35
  396. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
  397. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -51
  398. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  399. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  400. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  401. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  402. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +19 -6
  403. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +45 -18
  404. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  405. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +131 -0
  406. data/src/core/ext/upb-generated/google/api/annotations.upb.c +22 -0
  407. data/src/core/ext/upb-generated/google/api/annotations.upb.h +23 -0
  408. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +154 -125
  409. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +765 -381
  410. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +158 -126
  411. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +844 -401
  412. data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
  413. data/src/core/ext/upb-generated/google/api/http.upb.h +229 -114
  414. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  415. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +115 -0
  416. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +18 -5
  417. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +43 -21
  418. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -282
  419. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2199 -1029
  420. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
  421. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +41 -19
  422. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
  423. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +26 -14
  424. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +47 -31
  425. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +190 -92
  426. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
  427. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +41 -19
  428. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
  429. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +277 -148
  430. data/src/core/ext/upb-generated/google/rpc/status.upb.c +21 -8
  431. data/src/core/ext/upb-generated/google/rpc/status.upb.h +57 -29
  432. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  433. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +335 -0
  434. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +32 -18
  435. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +108 -47
  436. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +135 -107
  437. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +726 -358
  438. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -12
  439. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +85 -40
  440. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
  441. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +65 -34
  442. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +81 -61
  443. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +435 -237
  444. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
  445. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +124 -62
  446. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  447. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
  448. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
  449. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +206 -56
  450. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
  451. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -17
  452. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
  453. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +16 -0
  454. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
  455. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +61 -19
  456. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
  457. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +54 -17
  458. data/src/core/ext/upb-generated/validate/validate.upb.c +406 -310
  459. data/src/core/ext/upb-generated/validate/validate.upb.h +2822 -1164
  460. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  461. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +290 -0
  462. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  463. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +112 -0
  464. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  465. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  466. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
  467. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +191 -67
  468. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  469. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +103 -0
  470. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +17 -4
  471. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +35 -18
  472. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +30 -16
  473. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +107 -54
  474. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
  475. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +58 -29
  476. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  477. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +107 -0
  478. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +22 -9
  479. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +60 -29
  480. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
  481. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +139 -69
  482. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
  483. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +63 -29
  484. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
  485. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +106 -45
  486. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  487. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  488. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  489. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +914 -0
  490. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  491. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +151 -0
  492. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  493. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +226 -0
  494. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +20 -7
  495. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +47 -23
  496. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  497. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  498. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  499. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  500. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +75 -327
  501. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +16 -101
  502. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  503. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  504. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  505. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  506. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +56 -0
  507. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  508. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  509. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  511. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  512. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  513. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  514. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  515. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  516. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  517. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  518. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
  519. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  520. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  521. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  522. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +120 -150
  523. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  524. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +253 -280
  525. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
  526. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
  527. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  528. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +387 -424
  529. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
  530. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  531. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  532. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
  533. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  534. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  535. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  536. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  537. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  538. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  539. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  540. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +203 -246
  541. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
  542. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
  543. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
  544. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  545. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  546. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
  547. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -187
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +254 -254
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
  561. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
  562. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  563. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  564. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +26 -28
  565. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  566. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
  567. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
  568. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  569. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  570. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +21 -33
  571. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
  572. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  573. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  574. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  575. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +180 -165
  577. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +24 -19
  578. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
  579. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  580. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
  581. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
  582. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +46 -42
  583. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  584. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  587. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  588. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +19 -37
  589. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
  590. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +194 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +75 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -85
  593. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +7 -12
  594. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +874 -917
  595. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +170 -160
  596. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  597. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  598. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +199 -0
  599. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +90 -0
  600. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  605. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  606. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  615. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  616. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +61 -0
  617. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  618. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  619. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  620. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  621. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +80 -0
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +405 -410
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  636. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +174 -157
  637. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
  638. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  639. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  640. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -216
  641. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
  642. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  643. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  644. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  645. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  646. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +162 -107
  647. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +57 -22
  648. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  649. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  650. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +125 -135
  651. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
  652. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  653. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  654. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
  655. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
  656. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  657. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  658. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +17 -21
  659. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  660. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  661. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  662. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  663. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  664. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  665. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  666. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +38 -43
  667. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  668. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  669. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  670. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  671. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  672. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  673. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  674. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  675. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  676. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  677. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  678. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  679. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  680. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  681. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  682. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  683. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  684. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  685. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  686. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  687. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  688. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  689. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  690. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  691. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  692. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  693. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  694. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  695. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  696. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  697. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  698. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  699. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  700. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  701. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  702. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  703. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  704. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  705. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  706. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  707. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  708. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +96 -151
  709. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  710. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  711. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  712. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  713. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  714. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  715. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  716. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  717. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  718. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  719. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  720. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
  721. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  722. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  723. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  724. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  725. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  726. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +6 -15
  727. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  728. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
  729. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  730. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
  731. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  732. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
  733. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  734. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
  735. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  736. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
  737. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  738. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  739. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  740. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  741. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  742. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  743. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  744. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +6 -17
  745. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
  746. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  747. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  748. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +7 -12
  749. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  750. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +9 -16
  751. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  752. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +6 -13
  753. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  754. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  755. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  756. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +8 -13
  757. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  758. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +8 -15
  759. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  760. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +8 -13
  761. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  762. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  763. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  764. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  765. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  766. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  767. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  768. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +7 -12
  769. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
  770. data/src/core/ext/xds/certificate_provider_store.cc +75 -3
  771. data/src/core/ext/xds/certificate_provider_store.h +28 -2
  772. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +20 -14
  773. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +11 -3
  774. data/src/core/ext/xds/upb_utils.h +45 -0
  775. data/src/core/ext/xds/xds_api.cc +329 -3648
  776. data/src/core/ext/xds/xds_api.h +78 -630
  777. data/src/core/ext/xds/xds_bootstrap.cc +10 -443
  778. data/src/core/ext/xds/xds_bootstrap.h +44 -81
  779. data/src/core/ext/xds/xds_bootstrap_grpc.cc +361 -0
  780. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  781. data/src/core/ext/xds/xds_certificate_provider.cc +36 -25
  782. data/src/core/ext/xds/xds_certificate_provider.h +35 -3
  783. data/src/core/ext/xds/xds_channel_stack_modifier.cc +27 -21
  784. data/src/core/ext/xds/xds_channel_stack_modifier.h +17 -4
  785. data/src/core/ext/xds/xds_client.cc +1278 -2037
  786. data/src/core/ext/xds/xds_client.h +158 -197
  787. data/src/core/ext/xds/xds_client_grpc.cc +210 -0
  788. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  789. data/src/core/ext/xds/xds_client_stats.cc +18 -19
  790. data/src/core/ext/xds/xds_client_stats.h +9 -7
  791. data/src/core/ext/xds/xds_cluster.cc +659 -0
  792. data/src/core/ext/xds/xds_cluster.h +116 -0
  793. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +152 -0
  794. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +92 -0
  795. data/src/core/ext/xds/xds_common_types.cc +501 -0
  796. data/src/core/ext/xds/xds_common_types.h +108 -0
  797. data/src/core/ext/xds/xds_endpoint.cc +468 -0
  798. data/src/core/ext/xds/xds_endpoint.h +139 -0
  799. data/src/core/ext/xds/xds_http_fault_filter.cc +67 -59
  800. data/src/core/ext/xds/xds_http_fault_filter.h +18 -24
  801. data/src/core/ext/xds/xds_http_filters.cc +66 -66
  802. data/src/core/ext/xds/xds_http_filters.h +72 -24
  803. data/src/core/ext/xds/xds_http_rbac_filter.cc +505 -0
  804. data/src/core/ext/xds/xds_http_rbac_filter.h +58 -0
  805. data/src/core/ext/xds/xds_lb_policy_registry.cc +243 -0
  806. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  807. data/src/core/ext/xds/xds_listener.cc +1144 -0
  808. data/src/core/ext/xds/xds_listener.h +224 -0
  809. data/src/core/ext/xds/xds_resource_type.h +104 -0
  810. data/src/core/ext/xds/xds_resource_type_impl.h +86 -0
  811. data/src/core/ext/xds/xds_route_config.cc +1166 -0
  812. data/src/core/ext/xds/xds_route_config.h +241 -0
  813. data/src/core/ext/xds/xds_routing.cc +264 -0
  814. data/src/core/ext/xds/xds_routing.h +106 -0
  815. data/src/core/ext/xds/xds_server_config_fetcher.cc +1155 -324
  816. data/src/core/ext/xds/xds_transport.h +86 -0
  817. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  818. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  819. data/src/core/lib/address_utils/parse_address.cc +36 -16
  820. data/src/core/lib/address_utils/parse_address.h +11 -2
  821. data/src/core/lib/address_utils/sockaddr_utils.cc +82 -51
  822. data/src/core/lib/address_utils/sockaddr_utils.h +9 -19
  823. data/src/core/lib/avl/avl.h +476 -88
  824. data/src/core/lib/backoff/backoff.cc +9 -40
  825. data/src/core/lib/backoff/backoff.h +12 -12
  826. data/src/core/lib/channel/call_finalization.h +88 -0
  827. data/src/core/lib/channel/call_tracer.h +16 -7
  828. data/src/core/lib/channel/channel_args.cc +274 -48
  829. data/src/core/lib/channel/channel_args.h +413 -12
  830. data/src/core/lib/channel/channel_args_preconditioning.cc +43 -0
  831. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  832. data/src/core/lib/channel/channel_fwd.h +26 -0
  833. data/src/core/lib/channel/channel_stack.cc +64 -17
  834. data/src/core/lib/channel/channel_stack.h +96 -14
  835. data/src/core/lib/channel/channel_stack_builder.cc +18 -280
  836. data/src/core/lib/channel/channel_stack_builder.h +112 -150
  837. data/src/core/lib/channel/channel_stack_builder_impl.cc +113 -0
  838. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  839. data/src/core/lib/channel/channel_trace.cc +12 -22
  840. data/src/core/lib/channel/channel_trace.h +6 -3
  841. data/src/core/lib/channel/channelz.cc +36 -49
  842. data/src/core/lib/channel/channelz.h +24 -7
  843. data/src/core/lib/channel/channelz_registry.cc +11 -19
  844. data/src/core/lib/channel/channelz_registry.h +10 -9
  845. data/src/core/lib/channel/connected_channel.cc +704 -48
  846. data/src/core/lib/channel/connected_channel.h +3 -4
  847. data/src/core/lib/channel/context.h +11 -0
  848. data/src/core/lib/channel/promise_based_filter.cc +2126 -0
  849. data/src/core/lib/channel/promise_based_filter.h +848 -0
  850. data/src/core/lib/channel/status_util.cc +29 -0
  851. data/src/core/lib/channel/status_util.h +9 -2
  852. data/src/core/lib/compression/compression.cc +26 -113
  853. data/src/core/lib/compression/compression_internal.cc +170 -204
  854. data/src/core/lib/compression/compression_internal.h +68 -72
  855. data/src/core/lib/compression/message_compress.cc +18 -16
  856. data/src/core/lib/compression/message_compress.h +4 -5
  857. data/src/core/lib/config/core_configuration.cc +18 -3
  858. data/src/core/lib/config/core_configuration.h +133 -36
  859. data/src/core/lib/debug/event_log.cc +88 -0
  860. data/src/core/lib/debug/event_log.h +81 -0
  861. data/src/core/lib/debug/histogram_view.cc +69 -0
  862. data/src/core/lib/debug/histogram_view.h +37 -0
  863. data/src/core/lib/debug/stats.cc +31 -135
  864. data/src/core/lib/debug/stats.h +30 -37
  865. data/src/core/lib/debug/stats_data.cc +290 -638
  866. data/src/core/lib/debug/stats_data.h +263 -527
  867. data/src/core/lib/debug/trace.cc +0 -2
  868. data/src/core/lib/debug/trace.h +15 -14
  869. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +40 -0
  870. data/src/core/lib/event_engine/channel_args_endpoint_config.h +49 -0
  871. data/src/core/lib/event_engine/common_closures.h +71 -0
  872. data/src/core/lib/event_engine/default_event_engine.cc +94 -0
  873. data/src/core/lib/event_engine/default_event_engine.h +49 -0
  874. data/src/core/lib/event_engine/default_event_engine_factory.cc +48 -0
  875. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  876. data/src/core/lib/event_engine/executor/executor.h +38 -0
  877. data/src/core/lib/event_engine/forkable.cc +101 -0
  878. data/src/core/lib/event_engine/forkable.h +61 -0
  879. data/src/core/lib/event_engine/handle_containers.h +67 -0
  880. data/src/core/lib/event_engine/memory_allocator.cc +74 -0
  881. data/src/core/lib/event_engine/poller.h +62 -0
  882. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  883. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  884. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  885. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  886. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  887. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  888. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  889. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  890. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  891. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  892. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  893. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  894. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  895. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +577 -0
  896. data/src/core/lib/event_engine/posix_engine/posix_engine.h +245 -0
  897. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  898. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  899. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  900. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  901. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  902. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  903. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  904. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +174 -0
  905. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  906. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  907. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  908. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  909. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  910. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  911. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  912. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  913. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  914. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  915. data/src/core/lib/event_engine/resolved_address.cc +41 -0
  916. data/src/core/lib/event_engine/slice.cc +103 -0
  917. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  918. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  919. data/src/core/lib/event_engine/thread_pool.cc +276 -0
  920. data/src/core/lib/event_engine/thread_pool.h +137 -0
  921. data/src/core/lib/event_engine/time_util.cc +30 -0
  922. data/src/core/lib/event_engine/time_util.h +32 -0
  923. data/src/core/lib/event_engine/trace.cc +18 -0
  924. data/src/core/lib/event_engine/trace.h +30 -0
  925. data/src/core/lib/event_engine/utils.cc +44 -0
  926. data/src/core/lib/event_engine/utils.h +36 -0
  927. data/src/core/lib/event_engine/windows/iocp.cc +155 -0
  928. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  929. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  930. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  931. data/src/core/lib/event_engine/windows/windows_engine.cc +165 -0
  932. data/src/core/lib/event_engine/windows/windows_engine.h +124 -0
  933. data/src/core/lib/experiments/config.cc +146 -0
  934. data/src/core/lib/experiments/config.h +43 -0
  935. data/src/core/lib/experiments/experiments.cc +86 -0
  936. data/src/core/lib/experiments/experiments.h +63 -0
  937. data/src/core/lib/gpr/alloc.cc +1 -9
  938. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  939. data/src/core/lib/gpr/log.cc +5 -0
  940. data/src/core/lib/gpr/log_linux.cc +3 -4
  941. data/src/core/lib/gpr/log_windows.cc +0 -1
  942. data/src/core/lib/gpr/string.h +1 -1
  943. data/src/core/lib/gpr/string_util_windows.cc +3 -30
  944. data/src/core/lib/gpr/sync_abseil.cc +0 -14
  945. data/src/core/lib/gpr/sync_posix.cc +1 -14
  946. data/src/core/lib/gpr/time.cc +13 -10
  947. data/src/core/lib/gpr/time_posix.cc +6 -15
  948. data/src/core/lib/gpr/time_precise.h +1 -1
  949. data/src/core/lib/gpr/time_windows.cc +10 -7
  950. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  951. data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
  952. data/src/core/lib/gpr/useful.h +58 -0
  953. data/src/core/lib/gprpp/bitset.h +27 -14
  954. data/src/core/lib/gprpp/chunked_vector.h +49 -3
  955. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  956. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  957. data/src/core/lib/gprpp/debug_location.h +41 -7
  958. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  959. data/src/core/lib/gprpp/env.h +53 -0
  960. data/src/core/lib/gprpp/env_linux.cc +80 -0
  961. data/src/core/lib/gprpp/env_posix.cc +47 -0
  962. data/src/core/lib/gprpp/env_windows.cc +56 -0
  963. data/src/core/lib/gprpp/examine_stack.h +0 -1
  964. data/src/core/lib/gprpp/fork.cc +17 -28
  965. data/src/core/lib/gprpp/fork.h +0 -8
  966. data/src/core/lib/gprpp/global_config.h +2 -4
  967. data/src/core/lib/gprpp/global_config_env.cc +16 -14
  968. data/src/core/lib/gprpp/global_config_env.h +5 -3
  969. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  970. data/src/core/lib/gprpp/host_port.cc +2 -0
  971. data/src/core/lib/gprpp/load_file.cc +75 -0
  972. data/src/core/lib/gprpp/load_file.h +33 -0
  973. data/src/core/lib/gprpp/manual_constructor.h +0 -70
  974. data/src/core/lib/gprpp/match.h +2 -0
  975. data/src/core/lib/gprpp/memory.h +1 -5
  976. data/src/core/lib/gprpp/no_destruct.h +94 -0
  977. data/src/core/lib/gprpp/notification.h +67 -0
  978. data/src/core/lib/gprpp/orphanable.h +2 -5
  979. data/src/core/lib/gprpp/packed_table.h +40 -0
  980. data/src/core/lib/gprpp/per_cpu.h +46 -0
  981. data/src/core/lib/gprpp/ref_counted.h +4 -4
  982. data/src/core/lib/gprpp/ref_counted_ptr.h +23 -39
  983. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  984. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  985. data/src/core/lib/gprpp/stat.h +0 -2
  986. data/src/core/lib/gprpp/stat_posix.cc +10 -4
  987. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  988. data/src/core/lib/gprpp/status_helper.cc +75 -48
  989. data/src/core/lib/gprpp/status_helper.h +16 -21
  990. data/src/core/lib/gprpp/strerror.cc +41 -0
  991. data/src/core/lib/gprpp/strerror.h +29 -0
  992. data/src/core/lib/gprpp/sync.h +3 -1
  993. data/src/core/lib/gprpp/table.h +42 -2
  994. data/src/core/lib/gprpp/tchar.cc +49 -0
  995. data/src/core/lib/gprpp/tchar.h +33 -0
  996. data/src/core/lib/gprpp/thd.h +2 -5
  997. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  998. data/src/core/lib/gprpp/thd_windows.cc +3 -2
  999. data/src/core/lib/gprpp/time.cc +234 -0
  1000. data/src/core/lib/gprpp/time.h +367 -0
  1001. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  1002. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  1003. data/src/core/lib/gprpp/time_util.cc +4 -0
  1004. data/src/core/lib/gprpp/time_util.h +1 -1
  1005. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  1006. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  1007. data/src/core/lib/gprpp/validation_errors.h +127 -0
  1008. data/src/core/lib/gprpp/work_serializer.cc +247 -0
  1009. data/src/core/lib/gprpp/work_serializer.h +86 -0
  1010. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  1011. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  1012. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  1013. data/src/core/lib/http/format_request.cc +62 -29
  1014. data/src/core/lib/http/format_request.h +10 -7
  1015. data/src/core/lib/http/httpcli.cc +313 -244
  1016. data/src/core/lib/http/httpcli.h +234 -90
  1017. data/src/core/lib/http/httpcli_security_connector.cc +84 -86
  1018. data/src/core/lib/http/httpcli_ssl_credentials.h +39 -0
  1019. data/src/core/lib/http/parser.cc +124 -65
  1020. data/src/core/lib/http/parser.h +18 -2
  1021. data/src/core/lib/iomgr/buffer_list.cc +110 -121
  1022. data/src/core/lib/iomgr/buffer_list.h +68 -52
  1023. data/src/core/lib/iomgr/call_combiner.cc +17 -40
  1024. data/src/core/lib/iomgr/call_combiner.h +3 -4
  1025. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  1026. data/src/core/lib/iomgr/closure.h +68 -14
  1027. data/src/core/lib/iomgr/combiner.cc +11 -9
  1028. data/src/core/lib/iomgr/endpoint.cc +4 -4
  1029. data/src/core/lib/iomgr/endpoint.h +7 -6
  1030. data/src/core/lib/iomgr/endpoint_cfstream.cc +40 -53
  1031. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  1032. data/src/core/lib/iomgr/endpoint_pair_posix.cc +15 -11
  1033. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  1034. data/src/core/lib/iomgr/error.cc +30 -813
  1035. data/src/core/lib/iomgr/error.h +22 -295
  1036. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  1037. data/src/core/lib/iomgr/ev_apple.cc +10 -9
  1038. data/src/core/lib/iomgr/ev_epoll1_linux.cc +88 -84
  1039. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  1040. data/src/core/lib/iomgr/ev_poll_posix.cc +123 -109
  1041. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  1042. data/src/core/lib/iomgr/ev_posix.cc +58 -100
  1043. data/src/core/lib/iomgr/ev_posix.h +6 -4
  1044. data/src/core/lib/iomgr/exec_ctx.cc +14 -109
  1045. data/src/core/lib/iomgr/exec_ctx.h +24 -66
  1046. data/src/core/lib/iomgr/executor.cc +16 -21
  1047. data/src/core/lib/iomgr/executor.h +1 -4
  1048. data/src/core/lib/iomgr/fork_posix.cc +1 -0
  1049. data/src/core/lib/iomgr/internal_errqueue.cc +40 -47
  1050. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  1051. data/src/core/lib/iomgr/iocp_windows.cc +10 -10
  1052. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  1053. data/src/core/lib/iomgr/iomgr.cc +6 -2
  1054. data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
  1055. data/src/core/lib/iomgr/iomgr_posix.cc +4 -3
  1056. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +4 -2
  1057. data/src/core/lib/iomgr/iomgr_windows.cc +3 -2
  1058. data/src/core/lib/iomgr/load_file.cc +5 -9
  1059. data/src/core/lib/iomgr/lockfree_event.cc +10 -27
  1060. data/src/core/lib/iomgr/polling_entity.h +6 -0
  1061. data/src/core/lib/iomgr/pollset.cc +1 -1
  1062. data/src/core/lib/iomgr/pollset.h +5 -5
  1063. data/src/core/lib/iomgr/pollset_set.h +1 -3
  1064. data/src/core/lib/iomgr/pollset_windows.cc +6 -6
  1065. data/src/core/lib/iomgr/port.h +29 -12
  1066. data/src/core/lib/iomgr/python_util.h +2 -2
  1067. data/src/core/lib/iomgr/resolve_address.cc +16 -22
  1068. data/src/core/lib/iomgr/resolve_address.h +79 -46
  1069. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  1070. data/src/core/lib/iomgr/resolve_address_posix.cc +112 -78
  1071. data/src/core/lib/iomgr/resolve_address_posix.h +63 -0
  1072. data/src/core/lib/iomgr/resolve_address_windows.cc +125 -81
  1073. data/src/core/lib/iomgr/resolve_address_windows.h +63 -0
  1074. data/src/core/lib/iomgr/resolved_address.h +39 -0
  1075. data/src/core/lib/iomgr/sockaddr.h +2 -3
  1076. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  1077. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +63 -0
  1078. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  1079. data/src/core/lib/iomgr/socket_utils_common_posix.cc +44 -81
  1080. data/src/core/lib/iomgr/socket_utils_posix.cc +84 -1
  1081. data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
  1082. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  1083. data/src/core/lib/iomgr/socket_windows.h +0 -2
  1084. data/src/core/lib/iomgr/tcp_client.cc +11 -9
  1085. data/src/core/lib/iomgr/tcp_client.h +25 -15
  1086. data/src/core/lib/iomgr/tcp_client_cfstream.cc +28 -26
  1087. data/src/core/lib/iomgr/tcp_client_posix.cc +194 -85
  1088. data/src/core/lib/iomgr/tcp_client_posix.h +14 -12
  1089. data/src/core/lib/iomgr/tcp_client_windows.cc +33 -35
  1090. data/src/core/lib/iomgr/tcp_posix.cc +465 -254
  1091. data/src/core/lib/iomgr/tcp_posix.h +4 -4
  1092. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  1093. data/src/core/lib/iomgr/tcp_server.h +5 -4
  1094. data/src/core/lib/iomgr/tcp_server_posix.cc +109 -101
  1095. data/src/core/lib/iomgr/tcp_server_utils_posix.h +21 -20
  1096. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +50 -49
  1097. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +19 -16
  1098. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  1099. data/src/core/lib/iomgr/tcp_server_windows.cc +45 -48
  1100. data/src/core/lib/iomgr/tcp_windows.cc +43 -46
  1101. data/src/core/lib/iomgr/tcp_windows.h +1 -3
  1102. data/src/core/lib/iomgr/timer.cc +2 -2
  1103. data/src/core/lib/iomgr/timer.h +18 -13
  1104. data/src/core/lib/iomgr/timer_generic.cc +108 -97
  1105. data/src/core/lib/iomgr/timer_manager.cc +14 -14
  1106. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -34
  1107. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  1108. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  1109. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -5
  1110. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  1111. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  1112. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  1113. data/src/core/lib/json/json.h +20 -24
  1114. data/src/core/lib/json/json_args.h +34 -0
  1115. data/src/core/lib/json/json_channel_args.h +42 -0
  1116. data/src/core/lib/json/json_object_loader.cc +207 -0
  1117. data/src/core/lib/json/json_object_loader.h +620 -0
  1118. data/src/core/lib/json/json_reader.cc +155 -75
  1119. data/src/core/lib/json/json_util.cc +17 -37
  1120. data/src/core/lib/json/json_util.h +18 -9
  1121. data/src/core/lib/json/json_writer.cc +6 -1
  1122. data/src/core/lib/load_balancing/lb_policy.cc +93 -0
  1123. data/src/core/lib/load_balancing/lb_policy.h +439 -0
  1124. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1125. data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -0
  1126. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1127. data/src/core/lib/load_balancing/subchannel_interface.h +133 -0
  1128. data/src/core/lib/matchers/matchers.cc +10 -8
  1129. data/src/core/lib/matchers/matchers.h +2 -0
  1130. data/src/core/lib/promise/activity.cc +134 -0
  1131. data/src/core/lib/promise/activity.h +604 -0
  1132. data/src/core/lib/promise/arena_promise.h +230 -0
  1133. data/src/core/lib/promise/context.h +92 -0
  1134. data/src/core/lib/promise/detail/basic_seq.h +497 -0
  1135. data/src/core/lib/promise/detail/promise_factory.h +235 -0
  1136. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1137. data/src/core/lib/promise/detail/status.h +78 -0
  1138. data/src/core/lib/promise/detail/switch.h +1455 -0
  1139. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +50 -0
  1140. data/src/core/lib/promise/for_each.h +129 -0
  1141. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1142. data/src/core/lib/promise/latch.h +103 -0
  1143. data/src/core/lib/promise/loop.h +138 -0
  1144. data/src/core/lib/promise/map.h +87 -0
  1145. data/src/core/lib/promise/map_pipe.h +87 -0
  1146. data/src/core/lib/promise/pipe.cc +19 -0
  1147. data/src/core/lib/promise/pipe.h +505 -0
  1148. data/src/core/lib/promise/poll.h +79 -0
  1149. data/src/core/lib/promise/promise.h +96 -0
  1150. data/src/core/lib/promise/race.h +83 -0
  1151. data/src/core/lib/promise/seq.h +106 -0
  1152. data/src/core/lib/promise/sleep.cc +90 -0
  1153. data/src/core/lib/promise/sleep.h +84 -0
  1154. data/src/core/lib/promise/try_concurrently.h +341 -0
  1155. data/src/core/lib/promise/try_seq.h +174 -0
  1156. data/src/core/lib/resolver/resolver.cc +37 -0
  1157. data/src/core/lib/resolver/resolver.h +138 -0
  1158. data/src/core/lib/resolver/resolver_factory.h +77 -0
  1159. data/src/core/lib/resolver/resolver_registry.cc +149 -0
  1160. data/src/core/lib/resolver/resolver_registry.h +123 -0
  1161. data/src/core/lib/resolver/server_address.cc +181 -0
  1162. data/src/core/lib/resolver/server_address.h +145 -0
  1163. data/src/core/lib/resource_quota/api.cc +104 -0
  1164. data/src/core/lib/resource_quota/api.h +49 -0
  1165. data/src/core/lib/resource_quota/arena.cc +138 -0
  1166. data/src/core/lib/resource_quota/arena.h +252 -0
  1167. data/src/core/lib/resource_quota/memory_quota.cc +603 -0
  1168. data/src/core/lib/resource_quota/memory_quota.h +530 -0
  1169. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1170. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1171. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1172. data/src/core/lib/resource_quota/resource_quota.h +74 -0
  1173. data/src/core/lib/resource_quota/thread_quota.cc +45 -0
  1174. data/src/core/lib/resource_quota/thread_quota.h +61 -0
  1175. data/src/core/lib/resource_quota/trace.cc +19 -0
  1176. data/src/core/lib/resource_quota/trace.h +24 -0
  1177. data/src/core/lib/security/authorization/authorization_policy_provider.h +14 -0
  1178. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  1179. data/src/core/lib/security/authorization/evaluate_args.cc +53 -45
  1180. data/src/core/lib/security/authorization/evaluate_args.h +9 -5
  1181. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +64 -0
  1182. data/src/core/lib/security/authorization/grpc_authorization_engine.h +69 -0
  1183. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +122 -0
  1184. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +61 -0
  1185. data/src/core/lib/security/authorization/matchers.cc +241 -0
  1186. data/src/core/lib/security/authorization/matchers.h +218 -0
  1187. data/src/core/lib/security/authorization/rbac_policy.cc +445 -0
  1188. data/src/core/lib/security/authorization/rbac_policy.h +178 -0
  1189. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +66 -0
  1190. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1191. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1192. data/src/core/lib/security/context/security_context.cc +9 -4
  1193. data/src/core/lib/security/context/security_context.h +33 -4
  1194. data/src/core/lib/security/credentials/alts/alts_credentials.cc +18 -10
  1195. data/src/core/lib/security/credentials/alts/alts_credentials.h +18 -4
  1196. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  1197. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  1198. data/src/core/lib/security/credentials/call_creds_util.cc +97 -0
  1199. data/src/core/lib/security/credentials/call_creds_util.h +43 -0
  1200. data/src/core/lib/security/credentials/channel_creds_registry.h +103 -0
  1201. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +80 -0
  1202. data/src/core/lib/security/credentials/composite/composite_credentials.cc +32 -91
  1203. data/src/core/lib/security/credentials/composite/composite_credentials.h +42 -16
  1204. data/src/core/lib/security/credentials/credentials.cc +6 -11
  1205. data/src/core/lib/security/credentials/credentials.h +106 -99
  1206. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +249 -107
  1207. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +19 -0
  1208. data/src/core/lib/security/credentials/external/aws_request_signer.cc +13 -3
  1209. data/src/core/lib/security/credentials/external/external_account_credentials.cc +137 -103
  1210. data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -9
  1211. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -27
  1212. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  1213. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +76 -45
  1214. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +11 -0
  1215. data/src/core/lib/security/credentials/fake/fake_credentials.cc +43 -43
  1216. data/src/core/lib/security/credentials/fake/fake_credentials.h +35 -26
  1217. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +6 -8
  1218. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +118 -80
  1219. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +20 -7
  1220. data/src/core/lib/security/credentials/iam/iam_credentials.cc +32 -30
  1221. data/src/core/lib/security/credentials/iam/iam_credentials.h +25 -9
  1222. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +35 -26
  1223. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
  1224. data/src/core/lib/security/credentials/jwt/json_token.cc +21 -12
  1225. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  1226. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +46 -55
  1227. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +30 -12
  1228. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +96 -61
  1229. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +6 -4
  1230. data/src/core/lib/security/credentials/local/local_credentials.cc +19 -13
  1231. data/src/core/lib/security/credentials/local/local_credentials.h +19 -3
  1232. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +214 -222
  1233. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +81 -34
  1234. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +104 -156
  1235. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +80 -27
  1236. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -35
  1237. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +29 -6
  1238. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +21 -29
  1239. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +13 -14
  1240. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +75 -58
  1241. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +73 -14
  1242. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +241 -0
  1243. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +168 -0
  1244. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +37 -92
  1245. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +73 -149
  1246. data/src/core/lib/security/credentials/tls/tls_credentials.cc +59 -42
  1247. data/src/core/lib/security/credentials/tls/tls_credentials.h +13 -4
  1248. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1249. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  1250. data/src/core/lib/security/credentials/xds/xds_credentials.cc +81 -89
  1251. data/src/core/lib/security/credentials/xds/xds_credentials.h +53 -8
  1252. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +46 -45
  1253. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +9 -6
  1254. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +58 -70
  1255. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -5
  1256. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +23 -24
  1257. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +34 -27
  1258. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  1259. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +175 -0
  1260. data/src/core/lib/security/security_connector/load_system_roots_supported.h +46 -0
  1261. data/src/core/lib/security/security_connector/local/local_security_connector.cc +52 -40
  1262. data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
  1263. data/src/core/lib/security/security_connector/security_connector.cc +22 -32
  1264. data/src/core/lib/security/security_connector/security_connector.h +49 -31
  1265. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -34
  1266. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  1267. data/src/core/lib/security/security_connector/ssl_utils.cc +54 -40
  1268. data/src/core/lib/security/security_connector/ssl_utils.h +23 -24
  1269. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  1270. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +391 -230
  1271. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +97 -54
  1272. data/src/core/lib/security/transport/auth_filters.h +45 -5
  1273. data/src/core/lib/security/transport/client_auth_filter.cc +122 -368
  1274. data/src/core/lib/security/transport/secure_endpoint.cc +282 -158
  1275. data/src/core/lib/security/transport/secure_endpoint.h +5 -4
  1276. data/src/core/lib/security/transport/security_handshaker.cc +123 -92
  1277. data/src/core/lib/security/transport/security_handshaker.h +7 -2
  1278. data/src/core/lib/security/transport/server_auth_filter.cc +87 -58
  1279. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  1280. data/src/core/lib/security/util/json_util.cc +7 -7
  1281. data/src/core/lib/security/util/json_util.h +0 -2
  1282. data/src/core/lib/service_config/service_config.h +89 -0
  1283. data/src/core/lib/service_config/service_config_call_data.h +76 -0
  1284. data/src/core/lib/service_config/service_config_impl.cc +191 -0
  1285. data/src/core/lib/service_config/service_config_impl.h +125 -0
  1286. data/src/core/lib/service_config/service_config_parser.cc +81 -0
  1287. data/src/core/lib/service_config/service_config_parser.h +105 -0
  1288. data/src/core/lib/slice/b64.cc +2 -2
  1289. data/src/core/lib/slice/b64.h +2 -0
  1290. data/src/core/lib/slice/percent_encoding.cc +35 -97
  1291. data/src/core/lib/slice/percent_encoding.h +4 -16
  1292. data/src/core/lib/slice/slice.cc +94 -184
  1293. data/src/core/lib/slice/slice.h +402 -0
  1294. data/src/core/lib/slice/slice_buffer.cc +92 -33
  1295. data/src/core/lib/slice/slice_buffer.h +137 -0
  1296. data/src/core/lib/slice/slice_internal.h +22 -48
  1297. data/src/core/lib/slice/slice_refcount.h +32 -93
  1298. data/src/core/lib/slice/slice_string_helpers.cc +0 -16
  1299. data/src/core/lib/slice/slice_string_helpers.h +1 -8
  1300. data/src/core/lib/surface/builtins.cc +11 -6
  1301. data/src/core/lib/surface/byte_buffer.cc +9 -4
  1302. data/src/core/lib/surface/byte_buffer_reader.cc +7 -7
  1303. data/src/core/lib/surface/call.cc +2324 -1337
  1304. data/src/core/lib/surface/call.h +69 -21
  1305. data/src/core/lib/surface/call_details.cc +6 -6
  1306. data/src/core/lib/surface/call_log_batch.cc +7 -1
  1307. data/src/core/lib/surface/call_test_only.h +4 -1
  1308. data/src/core/lib/surface/call_trace.cc +113 -0
  1309. data/src/core/lib/surface/call_trace.h +30 -0
  1310. data/src/core/lib/surface/channel.cc +230 -328
  1311. data/src/core/lib/surface/channel.h +110 -74
  1312. data/src/core/lib/surface/channel_init.cc +2 -3
  1313. data/src/core/lib/surface/channel_init.h +4 -6
  1314. data/src/core/lib/surface/channel_ping.cc +9 -3
  1315. data/src/core/lib/surface/channel_stack_type.cc +4 -2
  1316. data/src/core/lib/surface/channel_stack_type.h +2 -2
  1317. data/src/core/lib/surface/completion_queue.cc +76 -94
  1318. data/src/core/lib/surface/completion_queue.h +8 -6
  1319. data/src/core/lib/surface/completion_queue_factory.cc +6 -0
  1320. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  1321. data/src/core/lib/surface/event_string.cc +1 -7
  1322. data/src/core/lib/surface/event_string.h +1 -1
  1323. data/src/core/lib/surface/init.cc +87 -78
  1324. data/src/core/lib/surface/init.h +0 -10
  1325. data/src/core/lib/surface/init_internally.cc +24 -0
  1326. data/src/core/lib/surface/init_internally.h +36 -0
  1327. data/src/core/lib/surface/lame_client.cc +69 -107
  1328. data/src/core/lib/surface/lame_client.h +41 -3
  1329. data/src/core/lib/surface/metadata_array.cc +2 -0
  1330. data/src/core/lib/surface/server.cc +153 -206
  1331. data/src/core/lib/surface/server.h +64 -36
  1332. data/src/core/lib/surface/validate_metadata.cc +17 -31
  1333. data/src/core/lib/surface/validate_metadata.h +3 -0
  1334. data/src/core/lib/surface/version.cc +2 -2
  1335. data/src/core/lib/transport/bdp_estimator.cc +11 -12
  1336. data/src/core/lib/transport/bdp_estimator.h +4 -5
  1337. data/src/core/lib/transport/connectivity_state.cc +7 -6
  1338. data/src/core/lib/transport/connectivity_state.h +3 -4
  1339. data/src/core/lib/transport/error_utils.cc +45 -65
  1340. data/src/core/lib/transport/error_utils.h +10 -5
  1341. data/src/core/lib/transport/handshaker.cc +225 -0
  1342. data/src/core/lib/transport/handshaker.h +167 -0
  1343. data/src/core/lib/transport/handshaker_factory.h +74 -0
  1344. data/src/core/lib/transport/handshaker_registry.cc +61 -0
  1345. data/src/core/lib/transport/handshaker_registry.h +69 -0
  1346. data/src/core/lib/transport/http_connect_handshaker.cc +400 -0
  1347. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1348. data/src/core/lib/transport/metadata_batch.cc +266 -69
  1349. data/src/core/lib/transport/metadata_batch.h +1108 -837
  1350. data/src/core/lib/transport/parsed_metadata.cc +35 -0
  1351. data/src/core/lib/transport/parsed_metadata.h +239 -93
  1352. data/src/core/lib/transport/pid_controller.cc +4 -4
  1353. data/src/core/lib/transport/status_conversion.cc +3 -3
  1354. data/src/core/lib/transport/status_conversion.h +3 -3
  1355. data/src/core/lib/transport/tcp_connect_handshaker.cc +246 -0
  1356. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1357. data/src/core/lib/transport/timeout_encoding.cc +203 -70
  1358. data/src/core/lib/transport/timeout_encoding.h +44 -10
  1359. data/src/core/lib/transport/transport.cc +82 -58
  1360. data/src/core/lib/transport/transport.h +154 -35
  1361. data/src/core/lib/transport/transport_fwd.h +20 -0
  1362. data/src/core/lib/transport/transport_impl.h +24 -0
  1363. data/src/core/lib/transport/transport_op_string.cc +24 -66
  1364. data/src/core/lib/uri/uri_parser.cc +248 -66
  1365. data/src/core/lib/uri/uri_parser.h +39 -25
  1366. data/src/core/plugin_registry/grpc_plugin_registry.cc +56 -140
  1367. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +61 -0
  1368. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +76 -52
  1369. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  1370. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1371. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +43 -28
  1372. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  1373. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -3
  1374. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1375. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1376. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1377. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  1378. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  1379. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1380. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +14 -6
  1381. data/src/core/tsi/fake_transport_security.cc +69 -34
  1382. data/src/core/tsi/fake_transport_security.h +6 -0
  1383. data/src/core/tsi/local_transport_security.cc +24 -28
  1384. data/src/core/tsi/local_transport_security.h +1 -4
  1385. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +145 -0
  1386. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1387. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -3
  1388. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +3 -1
  1389. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +13 -6
  1390. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +8 -2
  1391. data/src/core/tsi/ssl_transport_security.cc +249 -68
  1392. data/src/core/tsi/ssl_transport_security.h +47 -8
  1393. data/src/core/tsi/transport_security.cc +18 -6
  1394. data/src/core/tsi/transport_security.h +2 -1
  1395. data/src/core/tsi/transport_security_grpc.cc +3 -2
  1396. data/src/core/tsi/transport_security_grpc.h +5 -2
  1397. data/src/core/tsi/transport_security_interface.h +19 -5
  1398. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  1399. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  1400. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  1401. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  1402. data/src/ruby/ext/grpc/extconf.rb +61 -21
  1403. data/src/ruby/ext/grpc/rb_channel.c +5 -2
  1404. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -36
  1405. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +40 -55
  1406. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1407. data/src/ruby/ext/grpc/rb_server.c +7 -4
  1408. data/src/ruby/lib/grpc/errors.rb +1 -1
  1409. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1410. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1411. data/src/ruby/lib/grpc/version.rb +1 -1
  1412. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1413. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1414. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  1415. data/src/ruby/pb/test/client.rb +769 -0
  1416. data/src/ruby/pb/test/server.rb +252 -0
  1417. data/src/ruby/pb/test/xds_client.rb +415 -0
  1418. data/src/ruby/spec/channel_spec.rb +5 -43
  1419. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1420. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1421. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1422. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1423. data/third_party/abseil-cpp/absl/algorithm/container.h +102 -92
  1424. data/third_party/abseil-cpp/absl/base/attributes.h +112 -52
  1425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1426. data/third_party/abseil-cpp/absl/base/config.h +245 -74
  1427. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  1428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1429. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  1430. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  1431. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1432. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +50 -0
  1433. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1434. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  1436. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  1437. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  1438. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +11 -1
  1439. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1440. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  1441. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1442. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1443. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +68 -0
  1444. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1445. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
  1446. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +22 -7
  1447. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +15 -6
  1448. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1449. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1450. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  1451. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1452. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1453. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1454. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1455. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -5
  1456. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1457. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  1458. data/third_party/abseil-cpp/absl/container/inlined_vector.h +118 -99
  1459. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  1460. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  1461. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1462. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +77 -113
  1463. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +62 -85
  1464. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +417 -431
  1465. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1466. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +18 -8
  1467. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +724 -262
  1468. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1469. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  1470. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -11
  1471. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +7 -2
  1472. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  1473. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1474. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +13 -5
  1475. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1476. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1477. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +236 -0
  1478. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -10
  1479. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  1480. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +35 -4
  1481. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1482. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +7 -0
  1483. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +60 -7
  1484. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1485. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  1486. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1487. data/third_party/abseil-cpp/absl/functional/function_ref.h +6 -2
  1488. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  1489. data/third_party/abseil-cpp/absl/hash/hash.h +104 -8
  1490. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  1491. data/third_party/abseil-cpp/absl/hash/internal/hash.h +297 -51
  1492. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
  1493. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
  1494. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1495. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  1496. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  1497. data/third_party/abseil-cpp/absl/numeric/int128.cc +7 -12
  1498. data/third_party/abseil-cpp/absl/numeric/int128.h +148 -75
  1499. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1500. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1501. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  1502. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  1503. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +245 -0
  1504. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1505. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1506. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1507. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1508. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1509. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1510. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1511. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1512. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +95 -0
  1513. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +269 -0
  1514. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1515. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1516. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1517. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +161 -0
  1518. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1519. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1520. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1521. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1522. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1523. data/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
  1524. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +225 -0
  1525. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1526. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +264 -0
  1527. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1528. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1529. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1530. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1531. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1532. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1533. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
  1534. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1535. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1536. data/third_party/abseil-cpp/absl/random/internal/traits.h +149 -0
  1537. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1538. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +96 -0
  1539. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +256 -0
  1540. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +261 -0
  1541. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1542. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1543. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1544. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1545. data/third_party/abseil-cpp/absl/random/seed_sequences.h +111 -0
  1546. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1547. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1548. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +272 -0
  1549. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +22 -5
  1550. data/third_party/abseil-cpp/absl/status/status.cc +183 -19
  1551. data/third_party/abseil-cpp/absl/status/status.h +41 -27
  1552. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1553. data/third_party/abseil-cpp/absl/status/statusor.h +40 -24
  1554. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1555. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  1556. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1557. data/third_party/abseil-cpp/absl/strings/cord.cc +469 -1094
  1558. data/third_party/abseil-cpp/absl/strings/cord.h +392 -144
  1559. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1560. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1561. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1562. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  1563. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  1564. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1565. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +23 -29
  1566. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +208 -96
  1567. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1228 -0
  1568. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +924 -0
  1569. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  1570. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  1571. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  1572. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  1573. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +62 -0
  1574. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1575. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  1576. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  1577. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +60 -19
  1578. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +48 -172
  1579. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  1580. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  1581. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1582. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1583. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1584. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1585. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +418 -0
  1586. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1587. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  1588. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1589. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  1590. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  1591. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  1592. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1593. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  1594. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +9 -1
  1595. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  1596. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +39 -8
  1597. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  1598. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +10 -11
  1599. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +41 -20
  1600. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1601. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  1602. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +28 -18
  1603. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1604. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  1605. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1606. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1607. data/third_party/abseil-cpp/absl/strings/numbers.cc +9 -9
  1608. data/third_party/abseil-cpp/absl/strings/numbers.h +60 -23
  1609. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1610. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  1611. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1612. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1613. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1614. data/third_party/abseil-cpp/absl/strings/string_view.cc +18 -34
  1615. data/third_party/abseil-cpp/absl/strings/string_view.h +123 -41
  1616. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1617. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1618. data/third_party/abseil-cpp/absl/strings/substitute.h +109 -76
  1619. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1620. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1621. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1622. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1623. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1624. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1625. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -26
  1626. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1627. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  1628. data/third_party/abseil-cpp/absl/synchronization/mutex.h +20 -12
  1629. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  1630. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1631. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  1632. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1633. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1634. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1635. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1636. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1637. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1638. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  1639. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1640. data/third_party/abseil-cpp/absl/time/time.h +82 -47
  1641. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1642. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1643. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1644. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  1645. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1646. data/third_party/abseil-cpp/absl/types/span.h +5 -4
  1647. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  1648. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1649. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1650. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1651. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1652. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1653. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1654. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
  1655. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1656. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1657. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1658. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1659. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1660. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1661. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1662. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1663. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1664. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1665. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1666. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1667. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1668. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1669. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1670. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1671. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1672. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1673. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1674. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1675. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1676. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1677. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1678. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1679. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1680. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1681. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1682. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1683. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1684. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1685. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
  1686. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1687. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
  1688. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1689. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1690. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1691. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1692. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1693. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1694. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1695. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1696. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1697. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1698. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1699. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1700. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +29 -11
  1701. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
  1702. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1703. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1704. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1705. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1706. data/third_party/cares/cares/include/ares.h +742 -0
  1707. data/third_party/cares/cares/include/ares_dns.h +112 -0
  1708. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1709. data/third_party/cares/cares/include/ares_version.h +24 -0
  1710. data/third_party/cares/cares/src/lib/ares__close_sockets.c +61 -0
  1711. data/third_party/cares/cares/src/lib/ares__get_hostent.c +260 -0
  1712. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1713. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1714. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1715. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1716. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1717. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1718. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1719. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1720. data/third_party/cares/cares/src/lib/ares_create_query.c +197 -0
  1721. data/third_party/cares/cares/src/lib/ares_data.c +240 -0
  1722. data/third_party/cares/cares/src/lib/ares_data.h +74 -0
  1723. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1724. data/third_party/cares/cares/src/lib/ares_expand_name.c +300 -0
  1725. data/third_party/cares/cares/src/lib/ares_expand_string.c +67 -0
  1726. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1727. data/third_party/cares/cares/src/lib/ares_free_hostent.c +43 -0
  1728. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1729. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1730. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1731. data/third_party/cares/cares/src/lib/ares_getenv.c +28 -0
  1732. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1733. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +287 -0
  1734. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +534 -0
  1735. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +447 -0
  1736. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1737. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1738. data/third_party/cares/cares/src/lib/ares_init.c +2654 -0
  1739. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1740. data/third_party/cares/cares/src/lib/ares_ipv6.h +85 -0
  1741. data/third_party/cares/cares/src/lib/ares_library_init.c +200 -0
  1742. data/third_party/cares/cares/src/lib/ares_library_init.h +43 -0
  1743. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1744. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1745. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1746. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1747. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1748. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1749. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1750. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1751. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1752. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1753. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +164 -0
  1754. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +183 -0
  1755. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +177 -0
  1756. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +228 -0
  1757. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1758. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +168 -0
  1759. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +214 -0
  1760. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1761. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1762. data/third_party/cares/cares/src/lib/ares_private.h +423 -0
  1763. data/third_party/cares/cares/src/lib/ares_process.c +1548 -0
  1764. data/third_party/cares/cares/src/lib/ares_query.c +180 -0
  1765. data/third_party/cares/cares/src/lib/ares_search.c +321 -0
  1766. data/third_party/cares/cares/src/lib/ares_send.c +131 -0
  1767. data/third_party/cares/cares/src/lib/ares_setup.h +220 -0
  1768. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1769. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1770. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1771. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1772. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1773. data/third_party/cares/cares/src/lib/ares_strsplit.c +178 -0
  1774. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1775. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1776. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1777. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1778. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1779. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1780. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1781. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1782. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1783. data/third_party/cares/cares/src/lib/inet_net_pton.c +444 -0
  1784. data/third_party/cares/cares/src/lib/inet_ntop.c +201 -0
  1785. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1786. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1787. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1788. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1789. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1790. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1791. data/third_party/upb/upb/arena.c +277 -0
  1792. data/third_party/upb/upb/arena.h +225 -0
  1793. data/third_party/upb/upb/array.c +114 -0
  1794. data/third_party/upb/upb/array.h +83 -0
  1795. data/third_party/upb/upb/collections.h +36 -0
  1796. data/third_party/upb/upb/decode.c +832 -382
  1797. data/third_party/upb/upb/decode.h +44 -17
  1798. data/third_party/upb/upb/decode_fast.c +304 -302
  1799. data/third_party/upb/upb/decode_fast.h +18 -18
  1800. data/third_party/upb/upb/def.c +2083 -982
  1801. data/third_party/upb/upb/def.h +339 -260
  1802. data/third_party/upb/upb/def.hpp +144 -171
  1803. data/third_party/upb/upb/encode.c +287 -185
  1804. data/third_party/upb/upb/encode.h +24 -16
  1805. data/third_party/upb/upb/extension_registry.c +93 -0
  1806. data/third_party/upb/upb/extension_registry.h +84 -0
  1807. data/third_party/upb/upb/internal/decode.h +211 -0
  1808. data/third_party/upb/upb/internal/table.h +385 -0
  1809. data/third_party/upb/upb/internal/upb.h +68 -0
  1810. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1811. data/third_party/upb/upb/json_decode.c +1512 -0
  1812. data/third_party/upb/upb/json_decode.h +47 -0
  1813. data/third_party/upb/upb/json_encode.c +780 -0
  1814. data/third_party/upb/upb/json_encode.h +65 -0
  1815. data/third_party/upb/upb/map.c +108 -0
  1816. data/third_party/upb/upb/map.h +117 -0
  1817. data/third_party/upb/upb/message_value.h +66 -0
  1818. data/third_party/upb/upb/mini_table.c +1147 -0
  1819. data/third_party/upb/upb/mini_table.h +189 -0
  1820. data/third_party/upb/upb/mini_table.hpp +112 -0
  1821. data/third_party/upb/upb/msg.c +132 -161
  1822. data/third_party/upb/upb/msg.h +18 -55
  1823. data/third_party/upb/upb/msg_internal.h +404 -254
  1824. data/third_party/upb/upb/port_def.inc +10 -1
  1825. data/third_party/upb/upb/port_undef.inc +2 -0
  1826. data/third_party/upb/upb/reflection.c +203 -280
  1827. data/third_party/upb/upb/reflection.h +40 -126
  1828. data/third_party/upb/upb/reflection.hpp +6 -6
  1829. data/third_party/upb/upb/status.c +86 -0
  1830. data/third_party/upb/upb/status.h +66 -0
  1831. data/third_party/upb/upb/table.c +233 -149
  1832. data/third_party/upb/upb/table_internal.h +9 -324
  1833. data/third_party/upb/upb/text_encode.c +116 -92
  1834. data/third_party/upb/upb/text_encode.h +10 -10
  1835. data/third_party/upb/upb/upb.c +34 -273
  1836. data/third_party/upb/upb/upb.h +79 -262
  1837. data/third_party/upb/upb/upb.hpp +31 -28
  1838. data/third_party/xxhash/xxhash.h +607 -352
  1839. data/third_party/zlib/compress.c +3 -3
  1840. data/third_party/zlib/crc32.c +975 -292
  1841. data/third_party/zlib/crc32.h +9441 -436
  1842. data/third_party/zlib/deflate.c +183 -129
  1843. data/third_party/zlib/deflate.h +12 -15
  1844. data/third_party/zlib/gzguts.h +3 -2
  1845. data/third_party/zlib/gzlib.c +6 -4
  1846. data/third_party/zlib/gzread.c +8 -12
  1847. data/third_party/zlib/gzwrite.c +26 -14
  1848. data/third_party/zlib/infback.c +12 -8
  1849. data/third_party/zlib/inffast.c +14 -14
  1850. data/third_party/zlib/inflate.c +44 -10
  1851. data/third_party/zlib/inflate.h +3 -2
  1852. data/third_party/zlib/inftrees.c +3 -3
  1853. data/third_party/zlib/inftrees.h +1 -1
  1854. data/third_party/zlib/trees.c +85 -107
  1855. data/third_party/zlib/uncompr.c +2 -2
  1856. data/third_party/zlib/zconf.h +16 -3
  1857. data/third_party/zlib/zlib.h +129 -106
  1858. data/third_party/zlib/zutil.c +11 -9
  1859. data/third_party/zlib/zutil.h +13 -9
  1860. metadata +713 -295
  1861. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +0 -392
  1862. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
  1863. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1864. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
  1865. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -60
  1866. data/src/core/ext/filters/client_channel/lb_policy.cc +0 -131
  1867. data/src/core/ext/filters/client_channel/lb_policy.h +0 -425
  1868. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1869. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1870. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
  1871. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1872. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
  1873. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
  1874. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  1875. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +0 -28
  1876. data/src/core/ext/filters/client_channel/resolver.cc +0 -87
  1877. data/src/core/ext/filters/client_channel/resolver.h +0 -136
  1878. data/src/core/ext/filters/client_channel/resolver_factory.h +0 -75
  1879. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -195
  1880. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1881. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -189
  1882. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -99
  1883. data/src/core/ext/filters/client_channel/server_address.cc +0 -170
  1884. data/src/core/ext/filters/client_channel/server_address.h +0 -144
  1885. data/src/core/ext/filters/client_channel/subchannel_interface.h +0 -130
  1886. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -264
  1887. data/src/core/ext/filters/client_idle/idle_filter_state.cc +0 -96
  1888. data/src/core/ext/filters/client_idle/idle_filter_state.h +0 -66
  1889. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -181
  1890. data/src/core/ext/filters/fault_injection/service_config_parser.h +0 -85
  1891. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
  1892. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  1893. data/src/core/ext/service_config/service_config.cc +0 -227
  1894. data/src/core/ext/service_config/service_config.h +0 -127
  1895. data/src/core/ext/service_config/service_config_call_data.h +0 -72
  1896. data/src/core/ext/service_config/service_config_parser.cc +0 -89
  1897. data/src/core/ext/service_config/service_config_parser.h +0 -97
  1898. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -119
  1899. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -95
  1900. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -189
  1901. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -53
  1902. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -83
  1903. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
  1904. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1905. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1906. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1907. data/src/core/ext/transport/chttp2/transport/hpack_utils.h +0 -30
  1908. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1909. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1910. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -62
  1911. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1912. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -62
  1913. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1914. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -62
  1915. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1916. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -62
  1917. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1918. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -62
  1919. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1920. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1921. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1922. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1923. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1924. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1925. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1926. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1927. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1928. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1929. data/src/core/ext/xds/certificate_provider_factory.h +0 -61
  1930. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1931. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1932. data/src/core/lib/avl/avl.cc +0 -306
  1933. data/src/core/lib/channel/handshaker.cc +0 -222
  1934. data/src/core/lib/channel/handshaker.h +0 -161
  1935. data/src/core/lib/channel/handshaker_factory.h +0 -50
  1936. data/src/core/lib/channel/handshaker_registry.cc +0 -50
  1937. data/src/core/lib/channel/handshaker_registry.h +0 -71
  1938. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1939. data/src/core/lib/compression/compression_args.cc +0 -138
  1940. data/src/core/lib/compression/compression_args.h +0 -56
  1941. data/src/core/lib/compression/stream_compression.cc +0 -81
  1942. data/src/core/lib/compression/stream_compression.h +0 -117
  1943. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1944. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1945. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1946. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1947. data/src/core/lib/event_engine/endpoint_config.cc +0 -45
  1948. data/src/core/lib/event_engine/endpoint_config_internal.h +0 -42
  1949. data/src/core/lib/event_engine/event_engine.cc +0 -50
  1950. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1951. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1952. data/src/core/lib/gpr/env.h +0 -40
  1953. data/src/core/lib/gpr/env_linux.cc +0 -75
  1954. data/src/core/lib/gpr/env_posix.cc +0 -46
  1955. data/src/core/lib/gpr/env_windows.cc +0 -74
  1956. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1957. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1958. data/src/core/lib/gpr/string_windows.h +0 -32
  1959. data/src/core/lib/gpr/tls.h +0 -151
  1960. data/src/core/lib/gprpp/arena.cc +0 -104
  1961. data/src/core/lib/gprpp/arena.h +0 -131
  1962. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +0 -32
  1963. data/src/core/lib/iomgr/error_internal.h +0 -66
  1964. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1654
  1965. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  1966. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  1967. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  1968. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -173
  1969. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1970. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -104
  1971. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1972. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -88
  1973. data/src/core/lib/iomgr/event_engine/pollset.h +0 -25
  1974. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  1975. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -41
  1976. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -35
  1977. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -114
  1978. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -293
  1979. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1980. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1981. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1982. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1983. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1984. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1985. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1986. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1987. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  1988. data/src/core/lib/iomgr/pollset_custom.cc +0 -105
  1989. data/src/core/lib/iomgr/pollset_custom.h +0 -37
  1990. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
  1991. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1992. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
  1993. data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
  1994. data/src/core/lib/iomgr/resource_quota.cc +0 -1106
  1995. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1996. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1997. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
  1998. data/src/core/lib/iomgr/tcp_custom.cc +0 -377
  1999. data/src/core/lib/iomgr/tcp_custom.h +0 -86
  2000. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
  2001. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  2002. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  2003. data/src/core/lib/iomgr/timer_custom.cc +0 -96
  2004. data/src/core/lib/iomgr/timer_custom.h +0 -43
  2005. data/src/core/lib/iomgr/work_serializer.cc +0 -155
  2006. data/src/core/lib/iomgr/work_serializer.h +0 -81
  2007. data/src/core/lib/profiling/basic_timers.cc +0 -295
  2008. data/src/core/lib/profiling/stap_timers.cc +0 -50
  2009. data/src/core/lib/profiling/timers.h +0 -94
  2010. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +0 -171
  2011. data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
  2012. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  2013. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +0 -171
  2014. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  2015. data/src/core/lib/slice/slice_api.cc +0 -39
  2016. data/src/core/lib/slice/slice_intern.cc +0 -367
  2017. data/src/core/lib/slice/slice_refcount.cc +0 -17
  2018. data/src/core/lib/slice/slice_refcount_base.h +0 -173
  2019. data/src/core/lib/slice/slice_split.cc +0 -100
  2020. data/src/core/lib/slice/slice_split.h +0 -40
  2021. data/src/core/lib/slice/slice_utils.h +0 -200
  2022. data/src/core/lib/slice/static_slice.cc +0 -529
  2023. data/src/core/lib/slice/static_slice.h +0 -331
  2024. data/src/core/lib/surface/init_secure.cc +0 -103
  2025. data/src/core/lib/transport/byte_stream.cc +0 -158
  2026. data/src/core/lib/transport/byte_stream.h +0 -166
  2027. data/src/core/lib/transport/metadata.cc +0 -714
  2028. data/src/core/lib/transport/metadata.h +0 -449
  2029. data/src/core/lib/transport/static_metadata.cc +0 -1117
  2030. data/src/core/lib/transport/static_metadata.h +0 -340
  2031. data/src/core/lib/transport/status_metadata.cc +0 -63
  2032. data/src/core/lib/transport/status_metadata.h +0 -48
  2033. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +0 -93
  2034. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +0 -130
  2035. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
  2036. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +0 -111
  2037. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +0 -48
  2038. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  2039. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  2040. data/third_party/cares/cares/ares.h +0 -670
  2041. data/third_party/cares/cares/ares__close_sockets.c +0 -61
  2042. data/third_party/cares/cares/ares__get_hostent.c +0 -261
  2043. data/third_party/cares/cares/ares_create_query.c +0 -206
  2044. data/third_party/cares/cares/ares_data.c +0 -222
  2045. data/third_party/cares/cares/ares_data.h +0 -72
  2046. data/third_party/cares/cares/ares_dns.h +0 -103
  2047. data/third_party/cares/cares/ares_expand_name.c +0 -209
  2048. data/third_party/cares/cares/ares_expand_string.c +0 -70
  2049. data/third_party/cares/cares/ares_free_hostent.c +0 -41
  2050. data/third_party/cares/cares/ares_getenv.c +0 -30
  2051. data/third_party/cares/cares/ares_gethostbyaddr.c +0 -294
  2052. data/third_party/cares/cares/ares_gethostbyname.c +0 -529
  2053. data/third_party/cares/cares/ares_getnameinfo.c +0 -453
  2054. data/third_party/cares/cares/ares_getopt.c +0 -122
  2055. data/third_party/cares/cares/ares_getopt.h +0 -53
  2056. data/third_party/cares/cares/ares_init.c +0 -2615
  2057. data/third_party/cares/cares/ares_ipv6.h +0 -78
  2058. data/third_party/cares/cares/ares_library_init.c +0 -195
  2059. data/third_party/cares/cares/ares_library_init.h +0 -43
  2060. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  2061. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  2062. data/third_party/cares/cares/ares_parse_mx_reply.c +0 -170
  2063. data/third_party/cares/cares/ares_parse_naptr_reply.c +0 -194
  2064. data/third_party/cares/cares/ares_parse_ns_reply.c +0 -183
  2065. data/third_party/cares/cares/ares_parse_ptr_reply.c +0 -221
  2066. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  2067. data/third_party/cares/cares/ares_parse_srv_reply.c +0 -179
  2068. data/third_party/cares/cares/ares_parse_txt_reply.c +0 -220
  2069. data/third_party/cares/cares/ares_private.h +0 -382
  2070. data/third_party/cares/cares/ares_process.c +0 -1473
  2071. data/third_party/cares/cares/ares_query.c +0 -186
  2072. data/third_party/cares/cares/ares_search.c +0 -323
  2073. data/third_party/cares/cares/ares_send.c +0 -137
  2074. data/third_party/cares/cares/ares_setup.h +0 -217
  2075. data/third_party/cares/cares/ares_strsplit.c +0 -174
  2076. data/third_party/cares/cares/ares_version.h +0 -24
  2077. data/third_party/cares/cares/inet_net_pton.c +0 -450
  2078. data/third_party/cares/cares/inet_ntop.c +0 -207
  2079. data/third_party/upb/upb/decode_internal.h +0 -193
  2080. data/third_party/upb/upb/upb_internal.h +0 -58
@@ -13,11 +13,11 @@
13
13
  * names of its contributors may be used to endorse or promote products
14
14
  * derived from this software without specific prior written permission.
15
15
  *
16
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
- * DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY
20
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
16
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
+ * ARE DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY DIRECT,
20
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
21
  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
22
  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23
23
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
@@ -34,6 +34,7 @@
34
34
  #include <string.h>
35
35
 
36
36
  #include "google/protobuf/descriptor.upb.h"
37
+ #include "upb/mini_table.h"
37
38
  #include "upb/reflection.h"
38
39
 
39
40
  /* Must be last. */
@@ -41,143 +42,267 @@
41
42
 
42
43
  typedef struct {
43
44
  size_t len;
44
- char str[1]; /* Null-terminated string data follows. */
45
+ char str[1]; /* Null-terminated string data follows. */
45
46
  } str_t;
46
47
 
47
- struct upb_fielddef {
48
- const upb_filedef *file;
49
- const upb_msgdef *msgdef;
50
- const char *full_name;
51
- const char *json_name;
48
+ /* The upb core does not generally have a concept of default instances. However
49
+ * for descriptor options we make an exception since the max size is known and
50
+ * modest (<200 bytes). All types can share a default instance since it is
51
+ * initialized to zeroes.
52
+ *
53
+ * We have to allocate an extra pointer for upb's internal metadata. */
54
+ static const char opt_default_buf[_UPB_MAXOPT_SIZE + sizeof(void*)] = {0};
55
+ static const char* opt_default = &opt_default_buf[sizeof(void*)];
56
+
57
+ struct upb_FieldDef {
58
+ const google_protobuf_FieldOptions* opts;
59
+ const upb_FileDef* file;
60
+ const upb_MessageDef* msgdef;
61
+ const char* full_name;
62
+ const char* json_name;
52
63
  union {
53
64
  int64_t sint;
54
65
  uint64_t uint;
55
66
  double dbl;
56
67
  float flt;
57
68
  bool boolean;
58
- str_t *str;
69
+ str_t* str;
59
70
  } defaultval;
60
- const upb_oneofdef *oneof;
61
71
  union {
62
- const upb_msgdef *msgdef;
63
- const upb_enumdef *enumdef;
64
- const google_protobuf_FieldDescriptorProto *unresolved;
72
+ const upb_OneofDef* oneof;
73
+ const upb_MessageDef* extension_scope;
74
+ } scope;
75
+ union {
76
+ const upb_MessageDef* msgdef;
77
+ const upb_EnumDef* enumdef;
78
+ const google_protobuf_FieldDescriptorProto* unresolved;
65
79
  } sub;
66
80
  uint32_t number_;
67
81
  uint16_t index_;
68
- uint16_t layout_index;
82
+ uint16_t layout_index; /* Index into msgdef->layout->fields or file->exts */
83
+ bool has_default;
69
84
  bool is_extension_;
70
- bool lazy_;
71
85
  bool packed_;
72
86
  bool proto3_optional_;
73
- upb_descriptortype_t type_;
74
- upb_label_t label_;
87
+ bool has_json_name_;
88
+ upb_FieldType type_;
89
+ upb_Label label_;
90
+ #if UINTPTR_MAX == 0xffffffff
91
+ uint32_t padding; // Increase size to a multiple of 8.
92
+ #endif
93
+ };
94
+
95
+ struct upb_ExtensionRange {
96
+ const google_protobuf_ExtensionRangeOptions* opts;
97
+ int32_t start;
98
+ int32_t end;
75
99
  };
76
100
 
77
- struct upb_msgdef {
78
- const upb_msglayout *layout;
79
- const upb_filedef *file;
80
- const char *full_name;
101
+ struct upb_MessageDef {
102
+ const google_protobuf_MessageOptions* opts;
103
+ const upb_MiniTable* layout;
104
+ const upb_FileDef* file;
105
+ const upb_MessageDef* containing_type;
106
+ const char* full_name;
81
107
 
82
108
  /* Tables for looking up fields by number and name. */
83
109
  upb_inttable itof;
84
110
  upb_strtable ntof;
85
111
 
86
- const upb_fielddef *fields;
87
- const upb_oneofdef *oneofs;
112
+ /* All nested defs.
113
+ * MEM: We could save some space here by putting nested defs in a contiguous
114
+ * region and calculating counts from offsets or vice-versa. */
115
+ const upb_FieldDef* fields;
116
+ const upb_OneofDef* oneofs;
117
+ const upb_ExtensionRange* ext_ranges;
118
+ const upb_MessageDef* nested_msgs;
119
+ const upb_EnumDef* nested_enums;
120
+ const upb_FieldDef* nested_exts;
88
121
  int field_count;
89
- int oneof_count;
90
122
  int real_oneof_count;
91
-
92
- /* Is this a map-entry message? */
93
- bool map_entry;
94
- upb_wellknowntype_t well_known_type;
95
-
96
- /* TODO(haberman): proper extension ranges (there can be multiple). */
123
+ int oneof_count;
124
+ int ext_range_count;
125
+ int nested_msg_count;
126
+ int nested_enum_count;
127
+ int nested_ext_count;
128
+ bool in_message_set;
129
+ upb_WellKnown well_known_type;
130
+ #if UINTPTR_MAX == 0xffffffff
131
+ uint32_t padding; // Increase size to a multiple of 8.
132
+ #endif
97
133
  };
98
134
 
99
- struct upb_enumdef {
100
- const upb_filedef *file;
101
- const char *full_name;
135
+ struct upb_EnumDef {
136
+ const google_protobuf_EnumOptions* opts;
137
+ const upb_MiniTable_Enum* layout; // Only for proto2.
138
+ const upb_FileDef* file;
139
+ const upb_MessageDef* containing_type; // Could be merged with "file".
140
+ const char* full_name;
102
141
  upb_strtable ntoi;
103
142
  upb_inttable iton;
143
+ const upb_EnumValueDef* values;
144
+ int value_count;
104
145
  int32_t defaultval;
146
+ #if UINTPTR_MAX == 0xffffffff
147
+ uint32_t padding; // Increase size to a multiple of 8.
148
+ #endif
105
149
  };
106
150
 
107
- struct upb_oneofdef {
108
- const upb_msgdef *parent;
109
- const char *full_name;
151
+ struct upb_EnumValueDef {
152
+ const google_protobuf_EnumValueOptions* opts;
153
+ const upb_EnumDef* parent;
154
+ const char* full_name;
155
+ int32_t number;
156
+ };
157
+
158
+ struct upb_OneofDef {
159
+ const google_protobuf_OneofOptions* opts;
160
+ const upb_MessageDef* parent;
161
+ const char* full_name;
110
162
  int field_count;
111
163
  bool synthetic;
112
- const upb_fielddef **fields;
164
+ const upb_FieldDef** fields;
113
165
  upb_strtable ntof;
114
166
  upb_inttable itof;
167
+ #if UINTPTR_MAX == 0xffffffff
168
+ uint32_t padding; // Increase size to a multiple of 8.
169
+ #endif
115
170
  };
116
171
 
117
- struct upb_filedef {
118
- const char *name;
119
- const char *package;
120
- const char *phpprefix;
121
- const char *phpnamespace;
122
-
123
- const upb_filedef **deps;
124
- const upb_msgdef *msgs;
125
- const upb_enumdef *enums;
126
- const upb_fielddef *exts;
127
- const upb_symtab *symtab;
172
+ struct upb_FileDef {
173
+ const google_protobuf_FileOptions* opts;
174
+ const char* name;
175
+ const char* package;
176
+
177
+ const upb_FileDef** deps;
178
+ const int32_t* public_deps;
179
+ const int32_t* weak_deps;
180
+ const upb_MessageDef* top_lvl_msgs;
181
+ const upb_EnumDef* top_lvl_enums;
182
+ const upb_FieldDef* top_lvl_exts;
183
+ const upb_ServiceDef* services;
184
+ const upb_MiniTable_Extension** ext_layouts;
185
+ const upb_DefPool* symtab;
128
186
 
129
187
  int dep_count;
130
- int msg_count;
131
- int enum_count;
132
- int ext_count;
133
- upb_syntax_t syntax;
188
+ int public_dep_count;
189
+ int weak_dep_count;
190
+ int top_lvl_msg_count;
191
+ int top_lvl_enum_count;
192
+ int top_lvl_ext_count;
193
+ int service_count;
194
+ int ext_count; /* All exts in the file. */
195
+ upb_Syntax syntax;
196
+ };
197
+
198
+ struct upb_MethodDef {
199
+ const google_protobuf_MethodOptions* opts;
200
+ upb_ServiceDef* service;
201
+ const char* full_name;
202
+ const upb_MessageDef* input_type;
203
+ const upb_MessageDef* output_type;
204
+ int index;
205
+ bool client_streaming;
206
+ bool server_streaming;
207
+ };
208
+
209
+ struct upb_ServiceDef {
210
+ const google_protobuf_ServiceOptions* opts;
211
+ const upb_FileDef* file;
212
+ const char* full_name;
213
+ upb_MethodDef* methods;
214
+ int method_count;
215
+ int index;
134
216
  };
135
217
 
136
- struct upb_symtab {
137
- upb_arena *arena;
218
+ struct upb_DefPool {
219
+ upb_Arena* arena;
138
220
  upb_strtable syms; /* full_name -> packed def ptr */
139
- upb_strtable files; /* file_name -> upb_filedef* */
221
+ upb_strtable files; /* file_name -> upb_FileDef* */
222
+ upb_inttable exts; /* upb_MiniTable_Extension* -> upb_FieldDef* */
223
+ upb_ExtensionRegistry* extreg;
140
224
  size_t bytes_loaded;
141
225
  };
142
226
 
143
227
  /* Inside a symtab we store tagged pointers to specific def types. */
144
228
  typedef enum {
145
- UPB_DEFTYPE_FIELD = 0,
229
+ UPB_DEFTYPE_MASK = 7,
146
230
 
147
231
  /* Only inside symtab table. */
232
+ UPB_DEFTYPE_EXT = 0,
148
233
  UPB_DEFTYPE_MSG = 1,
149
234
  UPB_DEFTYPE_ENUM = 2,
235
+ UPB_DEFTYPE_ENUMVAL = 3,
236
+ UPB_DEFTYPE_SERVICE = 4,
150
237
 
151
238
  /* Only inside message table. */
239
+ UPB_DEFTYPE_FIELD = 0,
152
240
  UPB_DEFTYPE_ONEOF = 1,
153
- UPB_DEFTYPE_FIELD_JSONNAME = 2
241
+ UPB_DEFTYPE_FIELD_JSONNAME = 2,
242
+
243
+ /* Only inside file table. */
244
+ UPB_DEFTYPE_FILE = 0,
245
+ UPB_DEFTYPE_LAYOUT = 1
154
246
  } upb_deftype_t;
155
247
 
156
- static const void *unpack_def(upb_value v, upb_deftype_t type) {
248
+ #define FIELD_TYPE_UNSPECIFIED 0
249
+
250
+ static upb_deftype_t deftype(upb_value v) {
157
251
  uintptr_t num = (uintptr_t)upb_value_getconstptr(v);
158
- return (num & 3) == type ? (const void*)(num & ~3) : NULL;
252
+ return num & UPB_DEFTYPE_MASK;
159
253
  }
160
254
 
161
- static upb_value pack_def(const void *ptr, upb_deftype_t type) {
162
- uintptr_t num = (uintptr_t)ptr | type;
255
+ static const void* unpack_def(upb_value v, upb_deftype_t type) {
256
+ uintptr_t num = (uintptr_t)upb_value_getconstptr(v);
257
+ return (num & UPB_DEFTYPE_MASK) == type
258
+ ? (const void*)(num & ~UPB_DEFTYPE_MASK)
259
+ : NULL;
260
+ }
261
+
262
+ static upb_value pack_def(const void* ptr, upb_deftype_t type) {
263
+ // Our 3-bit pointer tagging requires all pointers to be multiples of 8.
264
+ // The arena will always yield 8-byte-aligned addresses, however we put
265
+ // the defs into arrays. For each element in the array to be 8-byte-aligned,
266
+ // the sizes of each def type must also be a multiple of 8.
267
+ //
268
+ // If any of these asserts fail, we need to add or remove padding on 32-bit
269
+ // machines (64-bit machines will have 8-byte alignment already due to
270
+ // pointers, which all of these structs have).
271
+ UPB_ASSERT((sizeof(upb_FieldDef) & UPB_DEFTYPE_MASK) == 0);
272
+ UPB_ASSERT((sizeof(upb_MessageDef) & UPB_DEFTYPE_MASK) == 0);
273
+ UPB_ASSERT((sizeof(upb_EnumDef) & UPB_DEFTYPE_MASK) == 0);
274
+ UPB_ASSERT((sizeof(upb_EnumValueDef) & UPB_DEFTYPE_MASK) == 0);
275
+ UPB_ASSERT((sizeof(upb_ServiceDef) & UPB_DEFTYPE_MASK) == 0);
276
+ UPB_ASSERT((sizeof(upb_OneofDef) & UPB_DEFTYPE_MASK) == 0);
277
+ uintptr_t num = (uintptr_t)ptr;
278
+ UPB_ASSERT((num & UPB_DEFTYPE_MASK) == 0);
279
+ num |= type;
163
280
  return upb_value_constptr((const void*)num);
164
281
  }
165
282
 
166
283
  /* isalpha() etc. from <ctype.h> are locale-dependent, which we don't want. */
167
- static bool upb_isbetween(char c, char low, char high) {
284
+ static bool upb_isbetween(uint8_t c, uint8_t low, uint8_t high) {
168
285
  return c >= low && c <= high;
169
286
  }
170
287
 
288
+ static char upb_ascii_lower(char ch) {
289
+ // Per ASCII this will lower-case a letter. If the result is a letter, the
290
+ // input was definitely a letter. If the output is not a letter, this may
291
+ // have transformed the character unpredictably.
292
+ return ch | 0x20;
293
+ }
294
+
171
295
  static bool upb_isletter(char c) {
172
- return upb_isbetween(c, 'A', 'Z') || upb_isbetween(c, 'a', 'z') || c == '_';
296
+ char lower = upb_ascii_lower(c);
297
+ return upb_isbetween(lower, 'a', 'z') || c == '_';
173
298
  }
174
299
 
175
300
  static bool upb_isalphanum(char c) {
176
301
  return upb_isletter(c) || upb_isbetween(c, '0', '9');
177
302
  }
178
303
 
179
- static const char *shortdefname(const char *fullname) {
180
- const char *p;
304
+ static const char* shortdefname(const char* fullname) {
305
+ const char* p;
181
306
 
182
307
  if (fullname == NULL) {
183
308
  return NULL;
@@ -192,371 +317,425 @@ static const char *shortdefname(const char *fullname) {
192
317
 
193
318
  /* All submessage fields are lower than all other fields.
194
319
  * Secondly, fields are increasing in order. */
195
- uint32_t field_rank(const upb_fielddef *f) {
196
- uint32_t ret = upb_fielddef_number(f);
320
+ uint32_t field_rank(const upb_FieldDef* f) {
321
+ uint32_t ret = upb_FieldDef_Number(f);
197
322
  const uint32_t high_bit = 1 << 30;
198
323
  UPB_ASSERT(ret < high_bit);
199
- if (!upb_fielddef_issubmsg(f))
200
- ret |= high_bit;
324
+ if (!upb_FieldDef_IsSubMessage(f)) ret |= high_bit;
201
325
  return ret;
202
326
  }
203
327
 
204
- int cmp_fields(const void *p1, const void *p2) {
205
- const upb_fielddef *f1 = *(upb_fielddef*const*)p1;
206
- const upb_fielddef *f2 = *(upb_fielddef*const*)p2;
328
+ int cmp_fields(const void* p1, const void* p2) {
329
+ const upb_FieldDef* f1 = *(upb_FieldDef* const*)p1;
330
+ const upb_FieldDef* f2 = *(upb_FieldDef* const*)p2;
207
331
  return field_rank(f1) - field_rank(f2);
208
332
  }
209
333
 
210
- static void upb_status_setoom(upb_status *status) {
211
- upb_status_seterrmsg(status, "out of memory");
334
+ static void upb_Status_setoom(upb_Status* status) {
335
+ upb_Status_SetErrorMessage(status, "out of memory");
212
336
  }
213
337
 
214
- static void assign_msg_wellknowntype(upb_msgdef *m) {
215
- const char *name = upb_msgdef_fullname(m);
338
+ static void assign_msg_wellknowntype(upb_MessageDef* m) {
339
+ const char* name = upb_MessageDef_FullName(m);
216
340
  if (name == NULL) {
217
- m->well_known_type = UPB_WELLKNOWN_UNSPECIFIED;
341
+ m->well_known_type = kUpb_WellKnown_Unspecified;
218
342
  return;
219
343
  }
220
344
  if (!strcmp(name, "google.protobuf.Any")) {
221
- m->well_known_type = UPB_WELLKNOWN_ANY;
345
+ m->well_known_type = kUpb_WellKnown_Any;
222
346
  } else if (!strcmp(name, "google.protobuf.FieldMask")) {
223
- m->well_known_type = UPB_WELLKNOWN_FIELDMASK;
347
+ m->well_known_type = kUpb_WellKnown_FieldMask;
224
348
  } else if (!strcmp(name, "google.protobuf.Duration")) {
225
- m->well_known_type = UPB_WELLKNOWN_DURATION;
349
+ m->well_known_type = kUpb_WellKnown_Duration;
226
350
  } else if (!strcmp(name, "google.protobuf.Timestamp")) {
227
- m->well_known_type = UPB_WELLKNOWN_TIMESTAMP;
351
+ m->well_known_type = kUpb_WellKnown_Timestamp;
228
352
  } else if (!strcmp(name, "google.protobuf.DoubleValue")) {
229
- m->well_known_type = UPB_WELLKNOWN_DOUBLEVALUE;
353
+ m->well_known_type = kUpb_WellKnown_DoubleValue;
230
354
  } else if (!strcmp(name, "google.protobuf.FloatValue")) {
231
- m->well_known_type = UPB_WELLKNOWN_FLOATVALUE;
355
+ m->well_known_type = kUpb_WellKnown_FloatValue;
232
356
  } else if (!strcmp(name, "google.protobuf.Int64Value")) {
233
- m->well_known_type = UPB_WELLKNOWN_INT64VALUE;
357
+ m->well_known_type = kUpb_WellKnown_Int64Value;
234
358
  } else if (!strcmp(name, "google.protobuf.UInt64Value")) {
235
- m->well_known_type = UPB_WELLKNOWN_UINT64VALUE;
359
+ m->well_known_type = kUpb_WellKnown_UInt64Value;
236
360
  } else if (!strcmp(name, "google.protobuf.Int32Value")) {
237
- m->well_known_type = UPB_WELLKNOWN_INT32VALUE;
361
+ m->well_known_type = kUpb_WellKnown_Int32Value;
238
362
  } else if (!strcmp(name, "google.protobuf.UInt32Value")) {
239
- m->well_known_type = UPB_WELLKNOWN_UINT32VALUE;
363
+ m->well_known_type = kUpb_WellKnown_UInt32Value;
240
364
  } else if (!strcmp(name, "google.protobuf.BoolValue")) {
241
- m->well_known_type = UPB_WELLKNOWN_BOOLVALUE;
365
+ m->well_known_type = kUpb_WellKnown_BoolValue;
242
366
  } else if (!strcmp(name, "google.protobuf.StringValue")) {
243
- m->well_known_type = UPB_WELLKNOWN_STRINGVALUE;
367
+ m->well_known_type = kUpb_WellKnown_StringValue;
244
368
  } else if (!strcmp(name, "google.protobuf.BytesValue")) {
245
- m->well_known_type = UPB_WELLKNOWN_BYTESVALUE;
369
+ m->well_known_type = kUpb_WellKnown_BytesValue;
246
370
  } else if (!strcmp(name, "google.protobuf.Value")) {
247
- m->well_known_type = UPB_WELLKNOWN_VALUE;
371
+ m->well_known_type = kUpb_WellKnown_Value;
248
372
  } else if (!strcmp(name, "google.protobuf.ListValue")) {
249
- m->well_known_type = UPB_WELLKNOWN_LISTVALUE;
373
+ m->well_known_type = kUpb_WellKnown_ListValue;
250
374
  } else if (!strcmp(name, "google.protobuf.Struct")) {
251
- m->well_known_type = UPB_WELLKNOWN_STRUCT;
375
+ m->well_known_type = kUpb_WellKnown_Struct;
252
376
  } else {
253
- m->well_known_type = UPB_WELLKNOWN_UNSPECIFIED;
377
+ m->well_known_type = kUpb_WellKnown_Unspecified;
254
378
  }
255
379
  }
256
380
 
381
+ /* upb_EnumDef ****************************************************************/
257
382
 
258
- /* upb_enumdef ****************************************************************/
259
-
260
- const char *upb_enumdef_fullname(const upb_enumdef *e) {
261
- return e->full_name;
383
+ const google_protobuf_EnumOptions* upb_EnumDef_Options(const upb_EnumDef* e) {
384
+ return e->opts;
262
385
  }
263
386
 
264
- const char *upb_enumdef_name(const upb_enumdef *e) {
265
- return shortdefname(e->full_name);
387
+ bool upb_EnumDef_HasOptions(const upb_EnumDef* e) {
388
+ return e->opts != (void*)opt_default;
266
389
  }
267
390
 
268
- const upb_filedef *upb_enumdef_file(const upb_enumdef *e) {
269
- return e->file;
270
- }
391
+ const char* upb_EnumDef_FullName(const upb_EnumDef* e) { return e->full_name; }
271
392
 
272
- int32_t upb_enumdef_default(const upb_enumdef *e) {
273
- UPB_ASSERT(upb_enumdef_iton(e, e->defaultval));
274
- return e->defaultval;
393
+ const char* upb_EnumDef_Name(const upb_EnumDef* e) {
394
+ return shortdefname(e->full_name);
275
395
  }
276
396
 
277
- int upb_enumdef_numvals(const upb_enumdef *e) {
278
- return (int)upb_strtable_count(&e->ntoi);
397
+ const upb_FileDef* upb_EnumDef_File(const upb_EnumDef* e) { return e->file; }
398
+
399
+ const upb_MessageDef* upb_EnumDef_ContainingType(const upb_EnumDef* e) {
400
+ return e->containing_type;
279
401
  }
280
402
 
281
- void upb_enum_begin(upb_enum_iter *i, const upb_enumdef *e) {
282
- /* We iterate over the ntoi table, to account for duplicate numbers. */
283
- upb_strtable_begin(i, &e->ntoi);
403
+ int32_t upb_EnumDef_Default(const upb_EnumDef* e) {
404
+ UPB_ASSERT(upb_EnumDef_FindValueByNumber(e, e->defaultval));
405
+ return e->defaultval;
284
406
  }
285
407
 
286
- void upb_enum_next(upb_enum_iter *iter) { upb_strtable_next(iter); }
287
- bool upb_enum_done(upb_enum_iter *iter) { return upb_strtable_done(iter); }
408
+ int upb_EnumDef_ValueCount(const upb_EnumDef* e) { return e->value_count; }
288
409
 
289
- bool upb_enumdef_ntoi(const upb_enumdef *def, const char *name,
290
- size_t len, int32_t *num) {
410
+ const upb_EnumValueDef* upb_EnumDef_FindValueByNameWithSize(
411
+ const upb_EnumDef* def, const char* name, size_t len) {
291
412
  upb_value v;
292
- if (!upb_strtable_lookup2(&def->ntoi, name, len, &v)) {
293
- return false;
294
- }
295
- if (num) *num = upb_value_getint32(v);
296
- return true;
413
+ return upb_strtable_lookup2(&def->ntoi, name, len, &v)
414
+ ? upb_value_getconstptr(v)
415
+ : NULL;
297
416
  }
298
417
 
299
- const char *upb_enumdef_iton(const upb_enumdef *def, int32_t num) {
418
+ const upb_EnumValueDef* upb_EnumDef_FindValueByNumber(const upb_EnumDef* def,
419
+ int32_t num) {
300
420
  upb_value v;
301
- return upb_inttable_lookup(&def->iton, num, &v) ? upb_value_getcstr(v) : NULL;
421
+ return upb_inttable_lookup(&def->iton, num, &v) ? upb_value_getconstptr(v)
422
+ : NULL;
302
423
  }
303
424
 
304
- const char *upb_enum_iter_name(upb_enum_iter *iter) {
305
- return upb_strtable_iter_key(iter).data;
425
+ bool upb_EnumDef_CheckNumber(const upb_EnumDef* e, int32_t num) {
426
+ // We could use upb_EnumDef_FindValueByNumber(e, num) != NULL, but we expect
427
+ // this to be faster (especially for small numbers).
428
+ return upb_MiniTable_Enum_CheckValue(e->layout, num);
306
429
  }
307
430
 
308
- int32_t upb_enum_iter_number(upb_enum_iter *iter) {
309
- return upb_value_getint32(upb_strtable_iter_value(iter));
431
+ const upb_EnumValueDef* upb_EnumDef_Value(const upb_EnumDef* e, int i) {
432
+ UPB_ASSERT(0 <= i && i < e->value_count);
433
+ return &e->values[i];
310
434
  }
311
435
 
436
+ /* upb_EnumValueDef ***********************************************************/
312
437
 
313
- /* upb_fielddef ***************************************************************/
314
-
315
- const char *upb_fielddef_fullname(const upb_fielddef *f) {
316
- return f->full_name;
438
+ const google_protobuf_EnumValueOptions* upb_EnumValueDef_Options(
439
+ const upb_EnumValueDef* e) {
440
+ return e->opts;
317
441
  }
318
442
 
319
- upb_fieldtype_t upb_fielddef_type(const upb_fielddef *f) {
320
- switch (f->type_) {
321
- case UPB_DESCRIPTOR_TYPE_DOUBLE:
322
- return UPB_TYPE_DOUBLE;
323
- case UPB_DESCRIPTOR_TYPE_FLOAT:
324
- return UPB_TYPE_FLOAT;
325
- case UPB_DESCRIPTOR_TYPE_INT64:
326
- case UPB_DESCRIPTOR_TYPE_SINT64:
327
- case UPB_DESCRIPTOR_TYPE_SFIXED64:
328
- return UPB_TYPE_INT64;
329
- case UPB_DESCRIPTOR_TYPE_INT32:
330
- case UPB_DESCRIPTOR_TYPE_SFIXED32:
331
- case UPB_DESCRIPTOR_TYPE_SINT32:
332
- return UPB_TYPE_INT32;
333
- case UPB_DESCRIPTOR_TYPE_UINT64:
334
- case UPB_DESCRIPTOR_TYPE_FIXED64:
335
- return UPB_TYPE_UINT64;
336
- case UPB_DESCRIPTOR_TYPE_UINT32:
337
- case UPB_DESCRIPTOR_TYPE_FIXED32:
338
- return UPB_TYPE_UINT32;
339
- case UPB_DESCRIPTOR_TYPE_ENUM:
340
- return UPB_TYPE_ENUM;
341
- case UPB_DESCRIPTOR_TYPE_BOOL:
342
- return UPB_TYPE_BOOL;
343
- case UPB_DESCRIPTOR_TYPE_STRING:
344
- return UPB_TYPE_STRING;
345
- case UPB_DESCRIPTOR_TYPE_BYTES:
346
- return UPB_TYPE_BYTES;
347
- case UPB_DESCRIPTOR_TYPE_GROUP:
348
- case UPB_DESCRIPTOR_TYPE_MESSAGE:
349
- return UPB_TYPE_MESSAGE;
350
- }
351
- UPB_UNREACHABLE();
443
+ bool upb_EnumValueDef_HasOptions(const upb_EnumValueDef* e) {
444
+ return e->opts != (void*)opt_default;
352
445
  }
353
446
 
354
- upb_descriptortype_t upb_fielddef_descriptortype(const upb_fielddef *f) {
355
- return f->type_;
447
+ const upb_EnumDef* upb_EnumValueDef_Enum(const upb_EnumValueDef* ev) {
448
+ return ev->parent;
356
449
  }
357
450
 
358
- uint32_t upb_fielddef_index(const upb_fielddef *f) {
359
- return f->index_;
451
+ const char* upb_EnumValueDef_FullName(const upb_EnumValueDef* ev) {
452
+ return ev->full_name;
360
453
  }
361
454
 
362
- upb_label_t upb_fielddef_label(const upb_fielddef *f) {
363
- return f->label_;
455
+ const char* upb_EnumValueDef_Name(const upb_EnumValueDef* ev) {
456
+ return shortdefname(ev->full_name);
364
457
  }
365
458
 
366
- uint32_t upb_fielddef_number(const upb_fielddef *f) {
367
- return f->number_;
459
+ int32_t upb_EnumValueDef_Number(const upb_EnumValueDef* ev) {
460
+ return ev->number;
368
461
  }
369
462
 
370
- bool upb_fielddef_isextension(const upb_fielddef *f) {
371
- return f->is_extension_;
463
+ uint32_t upb_EnumValueDef_Index(const upb_EnumValueDef* ev) {
464
+ // Compute index in our parent's array.
465
+ return ev - ev->parent->values;
372
466
  }
373
467
 
374
- bool upb_fielddef_lazy(const upb_fielddef *f) {
375
- return f->lazy_;
376
- }
468
+ /* upb_ExtensionRange
469
+ * ***************************************************************/
377
470
 
378
- bool upb_fielddef_packed(const upb_fielddef *f) {
379
- return f->packed_;
471
+ const google_protobuf_ExtensionRangeOptions* upb_ExtensionRange_Options(
472
+ const upb_ExtensionRange* r) {
473
+ return r->opts;
380
474
  }
381
475
 
382
- const char *upb_fielddef_name(const upb_fielddef *f) {
383
- return shortdefname(f->full_name);
476
+ bool upb_ExtensionRange_HasOptions(const upb_ExtensionRange* r) {
477
+ return r->opts != (void*)opt_default;
384
478
  }
385
479
 
386
- const char *upb_fielddef_jsonname(const upb_fielddef *f) {
387
- return f->json_name;
480
+ int32_t upb_ExtensionRange_Start(const upb_ExtensionRange* e) {
481
+ return e->start;
388
482
  }
389
483
 
390
- const upb_filedef *upb_fielddef_file(const upb_fielddef *f) {
391
- return f->file;
392
- }
484
+ int32_t upb_ExtensionRange_End(const upb_ExtensionRange* e) { return e->end; }
393
485
 
394
- const upb_msgdef *upb_fielddef_containingtype(const upb_fielddef *f) {
395
- return f->msgdef;
486
+ /* upb_FieldDef ***************************************************************/
487
+
488
+ const google_protobuf_FieldOptions* upb_FieldDef_Options(
489
+ const upb_FieldDef* f) {
490
+ return f->opts;
396
491
  }
397
492
 
398
- const upb_oneofdef *upb_fielddef_containingoneof(const upb_fielddef *f) {
399
- return f->oneof;
493
+ bool upb_FieldDef_HasOptions(const upb_FieldDef* f) {
494
+ return f->opts != (void*)opt_default;
400
495
  }
401
496
 
402
- const upb_oneofdef *upb_fielddef_realcontainingoneof(const upb_fielddef *f) {
403
- if (!f->oneof || upb_oneofdef_issynthetic(f->oneof)) return NULL;
404
- return f->oneof;
497
+ const char* upb_FieldDef_FullName(const upb_FieldDef* f) {
498
+ return f->full_name;
405
499
  }
406
500
 
407
- upb_msgval upb_fielddef_default(const upb_fielddef *f) {
408
- UPB_ASSERT(!upb_fielddef_issubmsg(f));
409
- upb_msgval ret;
410
- if (upb_fielddef_isstring(f)) {
411
- str_t *str = f->defaultval.str;
412
- if (str) {
413
- ret.str_val.data = str->str;
414
- ret.str_val.size = str->len;
415
- } else {
416
- ret.str_val.size = 0;
417
- }
418
- } else {
419
- memcpy(&ret, &f->defaultval, 8);
501
+ upb_CType upb_FieldDef_CType(const upb_FieldDef* f) {
502
+ switch (f->type_) {
503
+ case kUpb_FieldType_Double:
504
+ return kUpb_CType_Double;
505
+ case kUpb_FieldType_Float:
506
+ return kUpb_CType_Float;
507
+ case kUpb_FieldType_Int64:
508
+ case kUpb_FieldType_SInt64:
509
+ case kUpb_FieldType_SFixed64:
510
+ return kUpb_CType_Int64;
511
+ case kUpb_FieldType_Int32:
512
+ case kUpb_FieldType_SFixed32:
513
+ case kUpb_FieldType_SInt32:
514
+ return kUpb_CType_Int32;
515
+ case kUpb_FieldType_UInt64:
516
+ case kUpb_FieldType_Fixed64:
517
+ return kUpb_CType_UInt64;
518
+ case kUpb_FieldType_UInt32:
519
+ case kUpb_FieldType_Fixed32:
520
+ return kUpb_CType_UInt32;
521
+ case kUpb_FieldType_Enum:
522
+ return kUpb_CType_Enum;
523
+ case kUpb_FieldType_Bool:
524
+ return kUpb_CType_Bool;
525
+ case kUpb_FieldType_String:
526
+ return kUpb_CType_String;
527
+ case kUpb_FieldType_Bytes:
528
+ return kUpb_CType_Bytes;
529
+ case kUpb_FieldType_Group:
530
+ case kUpb_FieldType_Message:
531
+ return kUpb_CType_Message;
420
532
  }
421
- return ret;
533
+ UPB_UNREACHABLE();
422
534
  }
423
535
 
424
- static void chkdefaulttype(const upb_fielddef *f, int ctype) {
425
- UPB_UNUSED(f);
426
- UPB_UNUSED(ctype);
536
+ upb_FieldType upb_FieldDef_Type(const upb_FieldDef* f) { return f->type_; }
537
+
538
+ uint32_t upb_FieldDef_Index(const upb_FieldDef* f) { return f->index_; }
539
+
540
+ upb_Label upb_FieldDef_Label(const upb_FieldDef* f) { return f->label_; }
541
+
542
+ uint32_t upb_FieldDef_Number(const upb_FieldDef* f) { return f->number_; }
543
+
544
+ bool upb_FieldDef_IsExtension(const upb_FieldDef* f) {
545
+ return f->is_extension_;
427
546
  }
428
547
 
429
- int64_t upb_fielddef_defaultint64(const upb_fielddef *f) {
430
- chkdefaulttype(f, UPB_TYPE_INT64);
431
- return f->defaultval.sint;
548
+ bool upb_FieldDef_IsPacked(const upb_FieldDef* f) { return f->packed_; }
549
+
550
+ const char* upb_FieldDef_Name(const upb_FieldDef* f) {
551
+ return shortdefname(f->full_name);
432
552
  }
433
553
 
434
- int32_t upb_fielddef_defaultint32(const upb_fielddef *f) {
435
- chkdefaulttype(f, UPB_TYPE_INT32);
436
- return (int32_t)f->defaultval.sint;
554
+ const char* upb_FieldDef_JsonName(const upb_FieldDef* f) {
555
+ return f->json_name;
437
556
  }
438
557
 
439
- uint64_t upb_fielddef_defaultuint64(const upb_fielddef *f) {
440
- chkdefaulttype(f, UPB_TYPE_UINT64);
441
- return f->defaultval.uint;
558
+ bool upb_FieldDef_HasJsonName(const upb_FieldDef* f) {
559
+ return f->has_json_name_;
442
560
  }
443
561
 
444
- uint32_t upb_fielddef_defaultuint32(const upb_fielddef *f) {
445
- chkdefaulttype(f, UPB_TYPE_UINT32);
446
- return (uint32_t)f->defaultval.uint;
562
+ const upb_FileDef* upb_FieldDef_File(const upb_FieldDef* f) { return f->file; }
563
+
564
+ const upb_MessageDef* upb_FieldDef_ContainingType(const upb_FieldDef* f) {
565
+ return f->msgdef;
447
566
  }
448
567
 
449
- bool upb_fielddef_defaultbool(const upb_fielddef *f) {
450
- chkdefaulttype(f, UPB_TYPE_BOOL);
451
- return f->defaultval.boolean;
568
+ const upb_MessageDef* upb_FieldDef_ExtensionScope(const upb_FieldDef* f) {
569
+ return f->is_extension_ ? f->scope.extension_scope : NULL;
570
+ }
571
+
572
+ const upb_OneofDef* upb_FieldDef_ContainingOneof(const upb_FieldDef* f) {
573
+ return f->is_extension_ ? NULL : f->scope.oneof;
574
+ }
575
+
576
+ const upb_OneofDef* upb_FieldDef_RealContainingOneof(const upb_FieldDef* f) {
577
+ const upb_OneofDef* oneof = upb_FieldDef_ContainingOneof(f);
578
+ if (!oneof || upb_OneofDef_IsSynthetic(oneof)) return NULL;
579
+ return oneof;
580
+ }
581
+
582
+ upb_MessageValue upb_FieldDef_Default(const upb_FieldDef* f) {
583
+ UPB_ASSERT(!upb_FieldDef_IsSubMessage(f));
584
+ upb_MessageValue ret;
585
+
586
+ switch (upb_FieldDef_CType(f)) {
587
+ case kUpb_CType_Bool:
588
+ return (upb_MessageValue){.bool_val = f->defaultval.boolean};
589
+ case kUpb_CType_Int64:
590
+ return (upb_MessageValue){.int64_val = f->defaultval.sint};
591
+ case kUpb_CType_UInt64:
592
+ return (upb_MessageValue){.uint64_val = f->defaultval.uint};
593
+ case kUpb_CType_Enum:
594
+ case kUpb_CType_Int32:
595
+ return (upb_MessageValue){.int32_val = (int32_t)f->defaultval.sint};
596
+ case kUpb_CType_UInt32:
597
+ return (upb_MessageValue){.uint32_val = (uint32_t)f->defaultval.uint};
598
+ case kUpb_CType_Float:
599
+ return (upb_MessageValue){.float_val = f->defaultval.flt};
600
+ case kUpb_CType_Double:
601
+ return (upb_MessageValue){.double_val = f->defaultval.dbl};
602
+ case kUpb_CType_String:
603
+ case kUpb_CType_Bytes: {
604
+ str_t* str = f->defaultval.str;
605
+ if (str) {
606
+ return (upb_MessageValue){
607
+ .str_val = (upb_StringView){.data = str->str, .size = str->len}};
608
+ } else {
609
+ return (upb_MessageValue){
610
+ .str_val = (upb_StringView){.data = NULL, .size = 0}};
611
+ }
612
+ }
613
+ default:
614
+ UPB_UNREACHABLE();
615
+ }
616
+
617
+ return ret;
452
618
  }
453
619
 
454
- float upb_fielddef_defaultfloat(const upb_fielddef *f) {
455
- chkdefaulttype(f, UPB_TYPE_FLOAT);
456
- return f->defaultval.flt;
620
+ const upb_MessageDef* upb_FieldDef_MessageSubDef(const upb_FieldDef* f) {
621
+ return upb_FieldDef_CType(f) == kUpb_CType_Message ? f->sub.msgdef : NULL;
457
622
  }
458
623
 
459
- double upb_fielddef_defaultdouble(const upb_fielddef *f) {
460
- chkdefaulttype(f, UPB_TYPE_DOUBLE);
461
- return f->defaultval.dbl;
624
+ const upb_EnumDef* upb_FieldDef_EnumSubDef(const upb_FieldDef* f) {
625
+ return upb_FieldDef_CType(f) == kUpb_CType_Enum ? f->sub.enumdef : NULL;
462
626
  }
463
627
 
464
- const char *upb_fielddef_defaultstr(const upb_fielddef *f, size_t *len) {
465
- str_t *str = f->defaultval.str;
466
- UPB_ASSERT(upb_fielddef_type(f) == UPB_TYPE_STRING ||
467
- upb_fielddef_type(f) == UPB_TYPE_BYTES ||
468
- upb_fielddef_type(f) == UPB_TYPE_ENUM);
469
- if (str) {
470
- if (len) *len = str->len;
471
- return str->str;
472
- } else {
473
- if (len) *len = 0;
474
- return NULL;
475
- }
628
+ const upb_MiniTable_Field* upb_FieldDef_MiniTable(const upb_FieldDef* f) {
629
+ UPB_ASSERT(!upb_FieldDef_IsExtension(f));
630
+ return &f->msgdef->layout->fields[f->layout_index];
476
631
  }
477
632
 
478
- const upb_msgdef *upb_fielddef_msgsubdef(const upb_fielddef *f) {
479
- return upb_fielddef_type(f) == UPB_TYPE_MESSAGE ? f->sub.msgdef : NULL;
633
+ const upb_MiniTable_Extension* _upb_FieldDef_ExtensionMiniTable(
634
+ const upb_FieldDef* f) {
635
+ UPB_ASSERT(upb_FieldDef_IsExtension(f));
636
+ return f->file->ext_layouts[f->layout_index];
480
637
  }
481
638
 
482
- const upb_enumdef *upb_fielddef_enumsubdef(const upb_fielddef *f) {
483
- return upb_fielddef_type(f) == UPB_TYPE_ENUM ? f->sub.enumdef : NULL;
639
+ bool _upb_FieldDef_IsProto3Optional(const upb_FieldDef* f) {
640
+ return f->proto3_optional_;
484
641
  }
485
642
 
486
- const upb_msglayout_field *upb_fielddef_layout(const upb_fielddef *f) {
487
- return &f->msgdef->layout->fields[f->layout_index];
643
+ bool upb_FieldDef_IsSubMessage(const upb_FieldDef* f) {
644
+ return upb_FieldDef_CType(f) == kUpb_CType_Message;
645
+ }
646
+
647
+ bool upb_FieldDef_IsString(const upb_FieldDef* f) {
648
+ return upb_FieldDef_CType(f) == kUpb_CType_String ||
649
+ upb_FieldDef_CType(f) == kUpb_CType_Bytes;
488
650
  }
489
651
 
490
- bool upb_fielddef_issubmsg(const upb_fielddef *f) {
491
- return upb_fielddef_type(f) == UPB_TYPE_MESSAGE;
652
+ bool upb_FieldDef_IsOptional(const upb_FieldDef* f) {
653
+ return upb_FieldDef_Label(f) == kUpb_Label_Optional;
492
654
  }
493
655
 
494
- bool upb_fielddef_isstring(const upb_fielddef *f) {
495
- return upb_fielddef_type(f) == UPB_TYPE_STRING ||
496
- upb_fielddef_type(f) == UPB_TYPE_BYTES;
656
+ bool upb_FieldDef_IsRequired(const upb_FieldDef* f) {
657
+ return upb_FieldDef_Label(f) == kUpb_Label_Required;
497
658
  }
498
659
 
499
- bool upb_fielddef_isseq(const upb_fielddef *f) {
500
- return upb_fielddef_label(f) == UPB_LABEL_REPEATED;
660
+ bool upb_FieldDef_IsRepeated(const upb_FieldDef* f) {
661
+ return upb_FieldDef_Label(f) == kUpb_Label_Repeated;
501
662
  }
502
663
 
503
- bool upb_fielddef_isprimitive(const upb_fielddef *f) {
504
- return !upb_fielddef_isstring(f) && !upb_fielddef_issubmsg(f);
664
+ bool upb_FieldDef_IsPrimitive(const upb_FieldDef* f) {
665
+ return !upb_FieldDef_IsString(f) && !upb_FieldDef_IsSubMessage(f);
505
666
  }
506
667
 
507
- bool upb_fielddef_ismap(const upb_fielddef *f) {
508
- return upb_fielddef_isseq(f) && upb_fielddef_issubmsg(f) &&
509
- upb_msgdef_mapentry(upb_fielddef_msgsubdef(f));
668
+ bool upb_FieldDef_IsMap(const upb_FieldDef* f) {
669
+ return upb_FieldDef_IsRepeated(f) && upb_FieldDef_IsSubMessage(f) &&
670
+ upb_MessageDef_IsMapEntry(upb_FieldDef_MessageSubDef(f));
510
671
  }
511
672
 
512
- bool upb_fielddef_hassubdef(const upb_fielddef *f) {
513
- return upb_fielddef_issubmsg(f) || upb_fielddef_type(f) == UPB_TYPE_ENUM;
673
+ bool upb_FieldDef_HasDefault(const upb_FieldDef* f) { return f->has_default; }
674
+
675
+ bool upb_FieldDef_HasSubDef(const upb_FieldDef* f) {
676
+ return upb_FieldDef_IsSubMessage(f) ||
677
+ upb_FieldDef_CType(f) == kUpb_CType_Enum;
514
678
  }
515
679
 
516
- bool upb_fielddef_haspresence(const upb_fielddef *f) {
517
- if (upb_fielddef_isseq(f)) return false;
518
- return upb_fielddef_issubmsg(f) || upb_fielddef_containingoneof(f) ||
519
- f->file->syntax == UPB_SYNTAX_PROTO2;
680
+ bool upb_FieldDef_HasPresence(const upb_FieldDef* f) {
681
+ if (upb_FieldDef_IsRepeated(f)) return false;
682
+ return upb_FieldDef_IsSubMessage(f) || upb_FieldDef_ContainingOneof(f) ||
683
+ f->file->syntax == kUpb_Syntax_Proto2;
520
684
  }
521
685
 
522
686
  static bool between(int32_t x, int32_t low, int32_t high) {
523
687
  return x >= low && x <= high;
524
688
  }
525
689
 
526
- bool upb_fielddef_checklabel(int32_t label) { return between(label, 1, 3); }
527
- bool upb_fielddef_checktype(int32_t type) { return between(type, 1, 11); }
528
- bool upb_fielddef_checkintfmt(int32_t fmt) { return between(fmt, 1, 3); }
690
+ bool upb_FieldDef_checklabel(int32_t label) { return between(label, 1, 3); }
691
+ bool upb_FieldDef_checktype(int32_t type) { return between(type, 1, 11); }
692
+ bool upb_FieldDef_checkintfmt(int32_t fmt) { return between(fmt, 1, 3); }
529
693
 
530
- bool upb_fielddef_checkdescriptortype(int32_t type) {
694
+ bool upb_FieldDef_checkdescriptortype(int32_t type) {
531
695
  return between(type, 1, 18);
532
696
  }
533
697
 
534
- /* upb_msgdef *****************************************************************/
698
+ /* upb_MessageDef
699
+ * *****************************************************************/
700
+
701
+ const google_protobuf_MessageOptions* upb_MessageDef_Options(
702
+ const upb_MessageDef* m) {
703
+ return m->opts;
704
+ }
705
+
706
+ bool upb_MessageDef_HasOptions(const upb_MessageDef* m) {
707
+ return m->opts != (void*)opt_default;
708
+ }
535
709
 
536
- const char *upb_msgdef_fullname(const upb_msgdef *m) {
710
+ const char* upb_MessageDef_FullName(const upb_MessageDef* m) {
537
711
  return m->full_name;
538
712
  }
539
713
 
540
- const upb_filedef *upb_msgdef_file(const upb_msgdef *m) {
714
+ const upb_FileDef* upb_MessageDef_File(const upb_MessageDef* m) {
541
715
  return m->file;
542
716
  }
543
717
 
544
- const char *upb_msgdef_name(const upb_msgdef *m) {
718
+ const upb_MessageDef* upb_MessageDef_ContainingType(const upb_MessageDef* m) {
719
+ return m->containing_type;
720
+ }
721
+
722
+ const char* upb_MessageDef_Name(const upb_MessageDef* m) {
545
723
  return shortdefname(m->full_name);
546
724
  }
547
725
 
548
- upb_syntax_t upb_msgdef_syntax(const upb_msgdef *m) {
726
+ upb_Syntax upb_MessageDef_Syntax(const upb_MessageDef* m) {
549
727
  return m->file->syntax;
550
728
  }
551
729
 
552
- const upb_fielddef *upb_msgdef_itof(const upb_msgdef *m, uint32_t i) {
730
+ const upb_FieldDef* upb_MessageDef_FindFieldByNumber(const upb_MessageDef* m,
731
+ uint32_t i) {
553
732
  upb_value val;
554
733
  return upb_inttable_lookup(&m->itof, i, &val) ? upb_value_getconstptr(val)
555
734
  : NULL;
556
735
  }
557
736
 
558
- const upb_fielddef *upb_msgdef_ntof(const upb_msgdef *m, const char *name,
559
- size_t len) {
737
+ const upb_FieldDef* upb_MessageDef_FindFieldByNameWithSize(
738
+ const upb_MessageDef* m, const char* name, size_t len) {
560
739
  upb_value val;
561
740
 
562
741
  if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
@@ -566,8 +745,8 @@ const upb_fielddef *upb_msgdef_ntof(const upb_msgdef *m, const char *name,
566
745
  return unpack_def(val, UPB_DEFTYPE_FIELD);
567
746
  }
568
747
 
569
- const upb_oneofdef *upb_msgdef_ntoo(const upb_msgdef *m, const char *name,
570
- size_t len) {
748
+ const upb_OneofDef* upb_MessageDef_FindOneofByNameWithSize(
749
+ const upb_MessageDef* m, const char* name, size_t len) {
571
750
  upb_value val;
572
751
 
573
752
  if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
@@ -577,23 +756,27 @@ const upb_oneofdef *upb_msgdef_ntoo(const upb_msgdef *m, const char *name,
577
756
  return unpack_def(val, UPB_DEFTYPE_ONEOF);
578
757
  }
579
758
 
580
- bool upb_msgdef_lookupname(const upb_msgdef *m, const char *name, size_t len,
581
- const upb_fielddef **f, const upb_oneofdef **o) {
759
+ bool upb_MessageDef_FindByNameWithSize(const upb_MessageDef* m,
760
+ const char* name, size_t len,
761
+ const upb_FieldDef** out_f,
762
+ const upb_OneofDef** out_o) {
582
763
  upb_value val;
583
764
 
584
765
  if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
585
766
  return false;
586
767
  }
587
768
 
588
- *o = unpack_def(val, UPB_DEFTYPE_ONEOF);
589
- *f = unpack_def(val, UPB_DEFTYPE_FIELD);
590
- return *o || *f; /* False if this was a JSON name. */
769
+ const upb_FieldDef* f = unpack_def(val, UPB_DEFTYPE_FIELD);
770
+ const upb_OneofDef* o = unpack_def(val, UPB_DEFTYPE_ONEOF);
771
+ if (out_f) *out_f = f;
772
+ if (out_o) *out_o = o;
773
+ return f || o; /* False if this was a JSON name. */
591
774
  }
592
775
 
593
- const upb_fielddef *upb_msgdef_lookupjsonname(const upb_msgdef *m,
594
- const char *name, size_t len) {
776
+ const upb_FieldDef* upb_MessageDef_FindByJsonNameWithSize(
777
+ const upb_MessageDef* m, const char* name, size_t len) {
595
778
  upb_value val;
596
- const upb_fielddef* f;
779
+ const upb_FieldDef* f;
597
780
 
598
781
  if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
599
782
  return NULL;
@@ -605,293 +788,465 @@ const upb_fielddef *upb_msgdef_lookupjsonname(const upb_msgdef *m,
605
788
  return f;
606
789
  }
607
790
 
608
- int upb_msgdef_numfields(const upb_msgdef *m) {
791
+ int upb_MessageDef_numfields(const upb_MessageDef* m) { return m->field_count; }
792
+
793
+ int upb_MessageDef_numoneofs(const upb_MessageDef* m) { return m->oneof_count; }
794
+
795
+ int upb_MessageDef_numrealoneofs(const upb_MessageDef* m) {
796
+ return m->real_oneof_count;
797
+ }
798
+
799
+ int upb_MessageDef_ExtensionRangeCount(const upb_MessageDef* m) {
800
+ return m->ext_range_count;
801
+ }
802
+
803
+ int upb_MessageDef_FieldCount(const upb_MessageDef* m) {
609
804
  return m->field_count;
610
805
  }
611
806
 
612
- int upb_msgdef_numoneofs(const upb_msgdef *m) {
807
+ int upb_MessageDef_OneofCount(const upb_MessageDef* m) {
613
808
  return m->oneof_count;
614
809
  }
615
810
 
616
- int upb_msgdef_numrealoneofs(const upb_msgdef *m) {
617
- return m->real_oneof_count;
811
+ int upb_MessageDef_NestedMessageCount(const upb_MessageDef* m) {
812
+ return m->nested_msg_count;
618
813
  }
619
814
 
620
- int upb_msgdef_fieldcount(const upb_msgdef *m) {
621
- return m->field_count;
815
+ int upb_MessageDef_NestedEnumCount(const upb_MessageDef* m) {
816
+ return m->nested_enum_count;
622
817
  }
623
818
 
624
- int upb_msgdef_oneofcount(const upb_msgdef *m) {
625
- return m->oneof_count;
819
+ int upb_MessageDef_NestedExtensionCount(const upb_MessageDef* m) {
820
+ return m->nested_ext_count;
626
821
  }
627
822
 
628
- int upb_msgdef_realoneofcount(const upb_msgdef *m) {
823
+ int upb_MessageDef_realoneofcount(const upb_MessageDef* m) {
629
824
  return m->real_oneof_count;
630
825
  }
631
826
 
632
- const upb_msglayout *upb_msgdef_layout(const upb_msgdef *m) {
827
+ const upb_MiniTable* upb_MessageDef_MiniTable(const upb_MessageDef* m) {
633
828
  return m->layout;
634
829
  }
635
830
 
636
- const upb_fielddef *upb_msgdef_field(const upb_msgdef *m, int i) {
637
- UPB_ASSERT(i >= 0 && i < m->field_count);
831
+ const upb_ExtensionRange* upb_MessageDef_ExtensionRange(const upb_MessageDef* m,
832
+ int i) {
833
+ UPB_ASSERT(0 <= i && i < m->ext_range_count);
834
+ return &m->ext_ranges[i];
835
+ }
836
+
837
+ const upb_FieldDef* upb_MessageDef_Field(const upb_MessageDef* m, int i) {
838
+ UPB_ASSERT(0 <= i && i < m->field_count);
638
839
  return &m->fields[i];
639
840
  }
640
841
 
641
- const upb_oneofdef *upb_msgdef_oneof(const upb_msgdef *m, int i) {
642
- UPB_ASSERT(i >= 0 && i < m->oneof_count);
842
+ const upb_OneofDef* upb_MessageDef_Oneof(const upb_MessageDef* m, int i) {
843
+ UPB_ASSERT(0 <= i && i < m->oneof_count);
643
844
  return &m->oneofs[i];
644
845
  }
645
846
 
646
- bool upb_msgdef_mapentry(const upb_msgdef *m) {
647
- return m->map_entry;
847
+ const upb_MessageDef* upb_MessageDef_NestedMessage(const upb_MessageDef* m,
848
+ int i) {
849
+ UPB_ASSERT(0 <= i && i < m->nested_msg_count);
850
+ return &m->nested_msgs[i];
648
851
  }
649
852
 
650
- upb_wellknowntype_t upb_msgdef_wellknowntype(const upb_msgdef *m) {
651
- return m->well_known_type;
853
+ const upb_EnumDef* upb_MessageDef_NestedEnum(const upb_MessageDef* m, int i) {
854
+ UPB_ASSERT(0 <= i && i < m->nested_enum_count);
855
+ return &m->nested_enums[i];
652
856
  }
653
857
 
654
- bool upb_msgdef_isnumberwrapper(const upb_msgdef *m) {
655
- upb_wellknowntype_t type = upb_msgdef_wellknowntype(m);
656
- return type >= UPB_WELLKNOWN_DOUBLEVALUE &&
657
- type <= UPB_WELLKNOWN_UINT32VALUE;
858
+ const upb_FieldDef* upb_MessageDef_NestedExtension(const upb_MessageDef* m,
859
+ int i) {
860
+ UPB_ASSERT(0 <= i && i < m->nested_ext_count);
861
+ return &m->nested_exts[i];
658
862
  }
659
863
 
660
- bool upb_msgdef_iswrapper(const upb_msgdef *m) {
661
- upb_wellknowntype_t type = upb_msgdef_wellknowntype(m);
662
- return type >= UPB_WELLKNOWN_DOUBLEVALUE &&
663
- type <= UPB_WELLKNOWN_BOOLVALUE;
864
+ upb_WellKnown upb_MessageDef_WellKnownType(const upb_MessageDef* m) {
865
+ return m->well_known_type;
664
866
  }
665
867
 
666
- void upb_msg_field_begin(upb_msg_field_iter *iter, const upb_msgdef *m) {
667
- upb_inttable_begin(iter, &m->itof);
868
+ /* upb_OneofDef ***************************************************************/
869
+
870
+ const google_protobuf_OneofOptions* upb_OneofDef_Options(
871
+ const upb_OneofDef* o) {
872
+ return o->opts;
668
873
  }
669
874
 
670
- void upb_msg_field_next(upb_msg_field_iter *iter) { upb_inttable_next(iter); }
875
+ bool upb_OneofDef_HasOptions(const upb_OneofDef* o) {
876
+ return o->opts != (void*)opt_default;
877
+ }
671
878
 
672
- bool upb_msg_field_done(const upb_msg_field_iter *iter) {
673
- return upb_inttable_done(iter);
879
+ const char* upb_OneofDef_Name(const upb_OneofDef* o) {
880
+ return shortdefname(o->full_name);
674
881
  }
675
882
 
676
- upb_fielddef *upb_msg_iter_field(const upb_msg_field_iter *iter) {
677
- return (upb_fielddef *)upb_value_getconstptr(upb_inttable_iter_value(iter));
883
+ const upb_MessageDef* upb_OneofDef_ContainingType(const upb_OneofDef* o) {
884
+ return o->parent;
678
885
  }
679
886
 
680
- void upb_msg_field_iter_setdone(upb_msg_field_iter *iter) {
681
- upb_inttable_iter_setdone(iter);
887
+ int upb_OneofDef_FieldCount(const upb_OneofDef* o) { return o->field_count; }
888
+
889
+ const upb_FieldDef* upb_OneofDef_Field(const upb_OneofDef* o, int i) {
890
+ UPB_ASSERT(i < o->field_count);
891
+ return o->fields[i];
682
892
  }
683
893
 
684
- bool upb_msg_field_iter_isequal(const upb_msg_field_iter * iter1,
685
- const upb_msg_field_iter * iter2) {
686
- return upb_inttable_iter_isequal(iter1, iter2);
894
+ int upb_OneofDef_numfields(const upb_OneofDef* o) { return o->field_count; }
895
+
896
+ uint32_t upb_OneofDef_Index(const upb_OneofDef* o) {
897
+ // Compute index in our parent's array.
898
+ return o - o->parent->oneofs;
687
899
  }
688
900
 
689
- void upb_msg_oneof_begin(upb_msg_oneof_iter *iter, const upb_msgdef *m) {
690
- upb_strtable_begin(iter, &m->ntof);
691
- /* We need to skip past any initial fields. */
692
- while (!upb_strtable_done(iter) &&
693
- !unpack_def(upb_strtable_iter_value(iter), UPB_DEFTYPE_ONEOF)) {
694
- upb_strtable_next(iter);
695
- }
901
+ bool upb_OneofDef_IsSynthetic(const upb_OneofDef* o) { return o->synthetic; }
902
+
903
+ const upb_FieldDef* upb_OneofDef_LookupNameWithSize(const upb_OneofDef* o,
904
+ const char* name,
905
+ size_t length) {
906
+ upb_value val;
907
+ return upb_strtable_lookup2(&o->ntof, name, length, &val)
908
+ ? upb_value_getptr(val)
909
+ : NULL;
696
910
  }
697
911
 
698
- void upb_msg_oneof_next(upb_msg_oneof_iter *iter) {
699
- /* We need to skip past fields to return only oneofs. */
700
- do {
701
- upb_strtable_next(iter);
702
- } while (!upb_strtable_done(iter) &&
703
- !unpack_def(upb_strtable_iter_value(iter), UPB_DEFTYPE_ONEOF));
912
+ const upb_FieldDef* upb_OneofDef_LookupNumber(const upb_OneofDef* o,
913
+ uint32_t num) {
914
+ upb_value val;
915
+ return upb_inttable_lookup(&o->itof, num, &val) ? upb_value_getptr(val)
916
+ : NULL;
704
917
  }
705
918
 
706
- bool upb_msg_oneof_done(const upb_msg_oneof_iter *iter) {
707
- return upb_strtable_done(iter);
919
+ /* upb_FileDef ****************************************************************/
920
+
921
+ const google_protobuf_FileOptions* upb_FileDef_Options(const upb_FileDef* f) {
922
+ return f->opts;
708
923
  }
709
924
 
710
- const upb_oneofdef *upb_msg_iter_oneof(const upb_msg_oneof_iter *iter) {
711
- return unpack_def(upb_strtable_iter_value(iter), UPB_DEFTYPE_ONEOF);
925
+ bool upb_FileDef_HasOptions(const upb_FileDef* f) {
926
+ return f->opts != (void*)opt_default;
712
927
  }
713
928
 
714
- void upb_msg_oneof_iter_setdone(upb_msg_oneof_iter *iter) {
715
- upb_strtable_iter_setdone(iter);
929
+ const char* upb_FileDef_Name(const upb_FileDef* f) { return f->name; }
930
+
931
+ const char* upb_FileDef_Package(const upb_FileDef* f) { return f->package; }
932
+
933
+ upb_Syntax upb_FileDef_Syntax(const upb_FileDef* f) { return f->syntax; }
934
+
935
+ int upb_FileDef_TopLevelMessageCount(const upb_FileDef* f) {
936
+ return f->top_lvl_msg_count;
716
937
  }
717
938
 
718
- bool upb_msg_oneof_iter_isequal(const upb_msg_oneof_iter *iter1,
719
- const upb_msg_oneof_iter *iter2) {
720
- return upb_strtable_iter_isequal(iter1, iter2);
939
+ int upb_FileDef_DependencyCount(const upb_FileDef* f) { return f->dep_count; }
940
+
941
+ int upb_FileDef_PublicDependencyCount(const upb_FileDef* f) {
942
+ return f->public_dep_count;
721
943
  }
722
944
 
723
- /* upb_oneofdef ***************************************************************/
945
+ int upb_FileDef_WeakDependencyCount(const upb_FileDef* f) {
946
+ return f->weak_dep_count;
947
+ }
724
948
 
725
- const char *upb_oneofdef_name(const upb_oneofdef *o) {
726
- return shortdefname(o->full_name);
949
+ const int32_t* _upb_FileDef_PublicDependencyIndexes(const upb_FileDef* f) {
950
+ return f->public_deps;
727
951
  }
728
952
 
729
- const upb_msgdef *upb_oneofdef_containingtype(const upb_oneofdef *o) {
730
- return o->parent;
953
+ const int32_t* _upb_FileDef_WeakDependencyIndexes(const upb_FileDef* f) {
954
+ return f->weak_deps;
731
955
  }
732
956
 
733
- int upb_oneofdef_fieldcount(const upb_oneofdef *o) {
734
- return o->field_count;
957
+ int upb_FileDef_TopLevelEnumCount(const upb_FileDef* f) {
958
+ return f->top_lvl_enum_count;
735
959
  }
736
960
 
737
- const upb_fielddef *upb_oneofdef_field(const upb_oneofdef *o, int i) {
738
- UPB_ASSERT(i < o->field_count);
739
- return o->fields[i];
961
+ int upb_FileDef_TopLevelExtensionCount(const upb_FileDef* f) {
962
+ return f->top_lvl_ext_count;
740
963
  }
741
964
 
742
- int upb_oneofdef_numfields(const upb_oneofdef *o) {
743
- return o->field_count;
965
+ int upb_FileDef_ServiceCount(const upb_FileDef* f) { return f->service_count; }
966
+
967
+ const upb_FileDef* upb_FileDef_Dependency(const upb_FileDef* f, int i) {
968
+ UPB_ASSERT(0 <= i && i < f->dep_count);
969
+ return f->deps[i];
744
970
  }
745
971
 
746
- uint32_t upb_oneofdef_index(const upb_oneofdef *o) {
747
- return o - o->parent->oneofs;
972
+ const upb_FileDef* upb_FileDef_PublicDependency(const upb_FileDef* f, int i) {
973
+ UPB_ASSERT(0 <= i && i < f->public_dep_count);
974
+ return f->deps[f->public_deps[i]];
748
975
  }
749
976
 
750
- bool upb_oneofdef_issynthetic(const upb_oneofdef *o) {
751
- return o->synthetic;
977
+ const upb_FileDef* upb_FileDef_WeakDependency(const upb_FileDef* f, int i) {
978
+ UPB_ASSERT(0 <= i && i < f->public_dep_count);
979
+ return f->deps[f->weak_deps[i]];
752
980
  }
753
981
 
754
- const upb_fielddef *upb_oneofdef_ntof(const upb_oneofdef *o,
755
- const char *name, size_t length) {
756
- upb_value val;
757
- return upb_strtable_lookup2(&o->ntof, name, length, &val) ?
758
- upb_value_getptr(val) : NULL;
982
+ const upb_MessageDef* upb_FileDef_TopLevelMessage(const upb_FileDef* f, int i) {
983
+ UPB_ASSERT(0 <= i && i < f->top_lvl_msg_count);
984
+ return &f->top_lvl_msgs[i];
759
985
  }
760
986
 
761
- const upb_fielddef *upb_oneofdef_itof(const upb_oneofdef *o, uint32_t num) {
762
- upb_value val;
763
- return upb_inttable_lookup(&o->itof, num, &val) ? upb_value_getptr(val)
764
- : NULL;
987
+ const upb_EnumDef* upb_FileDef_TopLevelEnum(const upb_FileDef* f, int i) {
988
+ UPB_ASSERT(0 <= i && i < f->top_lvl_enum_count);
989
+ return &f->top_lvl_enums[i];
765
990
  }
766
991
 
767
- void upb_oneof_begin(upb_oneof_iter *iter, const upb_oneofdef *o) {
768
- upb_inttable_begin(iter, &o->itof);
992
+ const upb_FieldDef* upb_FileDef_TopLevelExtension(const upb_FileDef* f, int i) {
993
+ UPB_ASSERT(0 <= i && i < f->top_lvl_ext_count);
994
+ return &f->top_lvl_exts[i];
769
995
  }
770
996
 
771
- void upb_oneof_next(upb_oneof_iter *iter) {
772
- upb_inttable_next(iter);
997
+ const upb_ServiceDef* upb_FileDef_Service(const upb_FileDef* f, int i) {
998
+ UPB_ASSERT(0 <= i && i < f->service_count);
999
+ return &f->services[i];
773
1000
  }
774
1001
 
775
- bool upb_oneof_done(upb_oneof_iter *iter) {
776
- return upb_inttable_done(iter);
1002
+ const upb_DefPool* upb_FileDef_Pool(const upb_FileDef* f) { return f->symtab; }
1003
+
1004
+ /* upb_MethodDef **************************************************************/
1005
+
1006
+ const google_protobuf_MethodOptions* upb_MethodDef_Options(
1007
+ const upb_MethodDef* m) {
1008
+ return m->opts;
777
1009
  }
778
1010
 
779
- upb_fielddef *upb_oneof_iter_field(const upb_oneof_iter *iter) {
780
- return (upb_fielddef *)upb_value_getconstptr(upb_inttable_iter_value(iter));
1011
+ bool upb_MethodDef_HasOptions(const upb_MethodDef* m) {
1012
+ return m->opts != (void*)opt_default;
781
1013
  }
782
1014
 
783
- void upb_oneof_iter_setdone(upb_oneof_iter *iter) {
784
- upb_inttable_iter_setdone(iter);
1015
+ const char* upb_MethodDef_FullName(const upb_MethodDef* m) {
1016
+ return m->full_name;
785
1017
  }
786
1018
 
787
- /* upb_filedef ****************************************************************/
1019
+ int upb_MethodDef_Index(const upb_MethodDef* m) { return m->index; }
1020
+
1021
+ const char* upb_MethodDef_Name(const upb_MethodDef* m) {
1022
+ return shortdefname(m->full_name);
1023
+ }
1024
+
1025
+ const upb_ServiceDef* upb_MethodDef_Service(const upb_MethodDef* m) {
1026
+ return m->service;
1027
+ }
788
1028
 
789
- const char *upb_filedef_name(const upb_filedef *f) {
790
- return f->name;
1029
+ const upb_MessageDef* upb_MethodDef_InputType(const upb_MethodDef* m) {
1030
+ return m->input_type;
791
1031
  }
792
1032
 
793
- const char *upb_filedef_package(const upb_filedef *f) {
794
- return f->package;
1033
+ const upb_MessageDef* upb_MethodDef_OutputType(const upb_MethodDef* m) {
1034
+ return m->output_type;
795
1035
  }
796
1036
 
797
- const char *upb_filedef_phpprefix(const upb_filedef *f) {
798
- return f->phpprefix;
1037
+ bool upb_MethodDef_ClientStreaming(const upb_MethodDef* m) {
1038
+ return m->client_streaming;
799
1039
  }
800
1040
 
801
- const char *upb_filedef_phpnamespace(const upb_filedef *f) {
802
- return f->phpnamespace;
1041
+ bool upb_MethodDef_ServerStreaming(const upb_MethodDef* m) {
1042
+ return m->server_streaming;
803
1043
  }
804
1044
 
805
- upb_syntax_t upb_filedef_syntax(const upb_filedef *f) {
806
- return f->syntax;
1045
+ /* upb_ServiceDef *************************************************************/
1046
+
1047
+ const google_protobuf_ServiceOptions* upb_ServiceDef_Options(
1048
+ const upb_ServiceDef* s) {
1049
+ return s->opts;
807
1050
  }
808
1051
 
809
- int upb_filedef_msgcount(const upb_filedef *f) {
810
- return f->msg_count;
1052
+ bool upb_ServiceDef_HasOptions(const upb_ServiceDef* s) {
1053
+ return s->opts != (void*)opt_default;
811
1054
  }
812
1055
 
813
- int upb_filedef_depcount(const upb_filedef *f) {
814
- return f->dep_count;
1056
+ const char* upb_ServiceDef_FullName(const upb_ServiceDef* s) {
1057
+ return s->full_name;
815
1058
  }
816
1059
 
817
- int upb_filedef_enumcount(const upb_filedef *f) {
818
- return f->enum_count;
1060
+ const char* upb_ServiceDef_Name(const upb_ServiceDef* s) {
1061
+ return shortdefname(s->full_name);
819
1062
  }
820
1063
 
821
- const upb_filedef *upb_filedef_dep(const upb_filedef *f, int i) {
822
- return i < 0 || i >= f->dep_count ? NULL : f->deps[i];
1064
+ int upb_ServiceDef_Index(const upb_ServiceDef* s) { return s->index; }
1065
+
1066
+ const upb_FileDef* upb_ServiceDef_File(const upb_ServiceDef* s) {
1067
+ return s->file;
823
1068
  }
824
1069
 
825
- const upb_msgdef *upb_filedef_msg(const upb_filedef *f, int i) {
826
- return i < 0 || i >= f->msg_count ? NULL : &f->msgs[i];
1070
+ int upb_ServiceDef_MethodCount(const upb_ServiceDef* s) {
1071
+ return s->method_count;
827
1072
  }
828
1073
 
829
- const upb_enumdef *upb_filedef_enum(const upb_filedef *f, int i) {
830
- return i < 0 || i >= f->enum_count ? NULL : &f->enums[i];
1074
+ const upb_MethodDef* upb_ServiceDef_Method(const upb_ServiceDef* s, int i) {
1075
+ return i < 0 || i >= s->method_count ? NULL : &s->methods[i];
831
1076
  }
832
1077
 
833
- const upb_symtab *upb_filedef_symtab(const upb_filedef *f) {
834
- return f->symtab;
1078
+ const upb_MethodDef* upb_ServiceDef_FindMethodByName(const upb_ServiceDef* s,
1079
+ const char* name) {
1080
+ for (int i = 0; i < s->method_count; i++) {
1081
+ if (strcmp(name, upb_MethodDef_Name(&s->methods[i])) == 0) {
1082
+ return &s->methods[i];
1083
+ }
1084
+ }
1085
+ return NULL;
835
1086
  }
836
1087
 
837
- void upb_symtab_free(upb_symtab *s) {
838
- upb_arena_free(s->arena);
1088
+ /* upb_DefPool ****************************************************************/
1089
+
1090
+ void upb_DefPool_Free(upb_DefPool* s) {
1091
+ upb_Arena_Free(s->arena);
839
1092
  upb_gfree(s);
840
1093
  }
841
1094
 
842
- upb_symtab *upb_symtab_new(void) {
843
- upb_symtab *s = upb_gmalloc(sizeof(*s));
1095
+ upb_DefPool* upb_DefPool_New(void) {
1096
+ upb_DefPool* s = upb_gmalloc(sizeof(*s));
844
1097
 
845
1098
  if (!s) {
846
1099
  return NULL;
847
1100
  }
848
1101
 
849
- s->arena = upb_arena_new();
1102
+ s->arena = upb_Arena_New();
850
1103
  s->bytes_loaded = 0;
851
1104
 
852
1105
  if (!upb_strtable_init(&s->syms, 32, s->arena) ||
853
- !upb_strtable_init(&s->files, 4, s->arena)) {
854
- upb_arena_free(s->arena);
855
- upb_gfree(s);
856
- s = NULL;
1106
+ !upb_strtable_init(&s->files, 4, s->arena) ||
1107
+ !upb_inttable_init(&s->exts, s->arena)) {
1108
+ goto err;
857
1109
  }
1110
+
1111
+ s->extreg = upb_ExtensionRegistry_New(s->arena);
1112
+ if (!s->extreg) goto err;
858
1113
  return s;
1114
+
1115
+ err:
1116
+ upb_Arena_Free(s->arena);
1117
+ upb_gfree(s);
1118
+ return NULL;
859
1119
  }
860
1120
 
861
- const upb_msgdef *upb_symtab_lookupmsg(const upb_symtab *s, const char *sym) {
1121
+ static const void* symtab_lookup(const upb_DefPool* s, const char* sym,
1122
+ upb_deftype_t type) {
862
1123
  upb_value v;
863
- return upb_strtable_lookup(&s->syms, sym, &v) ?
864
- unpack_def(v, UPB_DEFTYPE_MSG) : NULL;
1124
+ return upb_strtable_lookup(&s->syms, sym, &v) ? unpack_def(v, type) : NULL;
865
1125
  }
866
1126
 
867
- const upb_msgdef *upb_symtab_lookupmsg2(const upb_symtab *s, const char *sym,
868
- size_t len) {
1127
+ static const void* symtab_lookup2(const upb_DefPool* s, const char* sym,
1128
+ size_t size, upb_deftype_t type) {
869
1129
  upb_value v;
870
- return upb_strtable_lookup2(&s->syms, sym, len, &v) ?
871
- unpack_def(v, UPB_DEFTYPE_MSG) : NULL;
1130
+ return upb_strtable_lookup2(&s->syms, sym, size, &v) ? unpack_def(v, type)
1131
+ : NULL;
1132
+ }
1133
+
1134
+ const upb_MessageDef* upb_DefPool_FindMessageByName(const upb_DefPool* s,
1135
+ const char* sym) {
1136
+ return symtab_lookup(s, sym, UPB_DEFTYPE_MSG);
1137
+ }
1138
+
1139
+ const upb_MessageDef* upb_DefPool_FindMessageByNameWithSize(
1140
+ const upb_DefPool* s, const char* sym, size_t len) {
1141
+ return symtab_lookup2(s, sym, len, UPB_DEFTYPE_MSG);
1142
+ }
1143
+
1144
+ const upb_EnumDef* upb_DefPool_FindEnumByName(const upb_DefPool* s,
1145
+ const char* sym) {
1146
+ return symtab_lookup(s, sym, UPB_DEFTYPE_ENUM);
1147
+ }
1148
+
1149
+ const upb_EnumValueDef* upb_DefPool_FindEnumByNameval(const upb_DefPool* s,
1150
+ const char* sym) {
1151
+ return symtab_lookup(s, sym, UPB_DEFTYPE_ENUMVAL);
872
1152
  }
873
1153
 
874
- const upb_enumdef *upb_symtab_lookupenum(const upb_symtab *s, const char *sym) {
1154
+ const upb_FileDef* upb_DefPool_FindFileByName(const upb_DefPool* s,
1155
+ const char* name) {
875
1156
  upb_value v;
876
- return upb_strtable_lookup(&s->syms, sym, &v) ?
877
- unpack_def(v, UPB_DEFTYPE_ENUM) : NULL;
1157
+ return upb_strtable_lookup(&s->files, name, &v)
1158
+ ? unpack_def(v, UPB_DEFTYPE_FILE)
1159
+ : NULL;
878
1160
  }
879
1161
 
880
- const upb_filedef *upb_symtab_lookupfile(const upb_symtab *s, const char *name) {
1162
+ const upb_FileDef* upb_DefPool_FindFileByNameWithSize(const upb_DefPool* s,
1163
+ const char* name,
1164
+ size_t len) {
881
1165
  upb_value v;
882
- return upb_strtable_lookup(&s->files, name, &v) ? upb_value_getconstptr(v)
883
- : NULL;
1166
+ return upb_strtable_lookup2(&s->files, name, len, &v)
1167
+ ? unpack_def(v, UPB_DEFTYPE_FILE)
1168
+ : NULL;
884
1169
  }
885
1170
 
886
- const upb_filedef *upb_symtab_lookupfile2(
887
- const upb_symtab *s, const char *name, size_t len) {
1171
+ const upb_FieldDef* upb_DefPool_FindExtensionByNameWithSize(
1172
+ const upb_DefPool* s, const char* name, size_t size) {
888
1173
  upb_value v;
889
- return upb_strtable_lookup2(&s->files, name, len, &v) ?
890
- upb_value_getconstptr(v) : NULL;
1174
+ if (!upb_strtable_lookup2(&s->syms, name, size, &v)) return NULL;
1175
+
1176
+ switch (deftype(v)) {
1177
+ case UPB_DEFTYPE_FIELD:
1178
+ return unpack_def(v, UPB_DEFTYPE_FIELD);
1179
+ case UPB_DEFTYPE_MSG: {
1180
+ const upb_MessageDef* m = unpack_def(v, UPB_DEFTYPE_MSG);
1181
+ return m->in_message_set ? &m->nested_exts[0] : NULL;
1182
+ }
1183
+ default:
1184
+ break;
1185
+ }
1186
+
1187
+ return NULL;
1188
+ }
1189
+
1190
+ const upb_FieldDef* upb_DefPool_FindExtensionByName(const upb_DefPool* s,
1191
+ const char* sym) {
1192
+ return upb_DefPool_FindExtensionByNameWithSize(s, sym, strlen(sym));
1193
+ }
1194
+
1195
+ const upb_ServiceDef* upb_DefPool_FindServiceByName(const upb_DefPool* s,
1196
+ const char* name) {
1197
+ return symtab_lookup(s, name, UPB_DEFTYPE_SERVICE);
1198
+ }
1199
+
1200
+ const upb_ServiceDef* upb_DefPool_FindServiceByNameWithSize(
1201
+ const upb_DefPool* s, const char* name, size_t size) {
1202
+ return symtab_lookup2(s, name, size, UPB_DEFTYPE_SERVICE);
891
1203
  }
892
1204
 
893
- int upb_symtab_filecount(const upb_symtab *s) {
894
- return (int)upb_strtable_count(&s->files);
1205
+ const upb_FileDef* upb_DefPool_FindFileContainingSymbol(const upb_DefPool* s,
1206
+ const char* name) {
1207
+ upb_value v;
1208
+ // TODO(haberman): non-extension fields and oneofs.
1209
+ if (upb_strtable_lookup(&s->syms, name, &v)) {
1210
+ switch (deftype(v)) {
1211
+ case UPB_DEFTYPE_EXT: {
1212
+ const upb_FieldDef* f = unpack_def(v, UPB_DEFTYPE_EXT);
1213
+ return upb_FieldDef_File(f);
1214
+ }
1215
+ case UPB_DEFTYPE_MSG: {
1216
+ const upb_MessageDef* m = unpack_def(v, UPB_DEFTYPE_MSG);
1217
+ return upb_MessageDef_File(m);
1218
+ }
1219
+ case UPB_DEFTYPE_ENUM: {
1220
+ const upb_EnumDef* e = unpack_def(v, UPB_DEFTYPE_ENUM);
1221
+ return upb_EnumDef_File(e);
1222
+ }
1223
+ case UPB_DEFTYPE_ENUMVAL: {
1224
+ const upb_EnumValueDef* ev = unpack_def(v, UPB_DEFTYPE_ENUMVAL);
1225
+ return upb_EnumDef_File(upb_EnumValueDef_Enum(ev));
1226
+ }
1227
+ case UPB_DEFTYPE_SERVICE: {
1228
+ const upb_ServiceDef* service = unpack_def(v, UPB_DEFTYPE_SERVICE);
1229
+ return upb_ServiceDef_File(service);
1230
+ }
1231
+ default:
1232
+ UPB_UNREACHABLE();
1233
+ }
1234
+ }
1235
+
1236
+ const char* last_dot = strrchr(name, '.');
1237
+ if (last_dot) {
1238
+ const upb_MessageDef* parent =
1239
+ upb_DefPool_FindMessageByNameWithSize(s, name, last_dot - name);
1240
+ if (parent) {
1241
+ const char* shortname = last_dot + 1;
1242
+ if (upb_MessageDef_FindByNameWithSize(parent, shortname,
1243
+ strlen(shortname), NULL, NULL)) {
1244
+ return upb_MessageDef_File(parent);
1245
+ }
1246
+ }
1247
+ }
1248
+
1249
+ return NULL;
895
1250
  }
896
1251
 
897
1252
  /* Code to build defs from descriptor protos. *********************************/
@@ -901,40 +1256,61 @@ int upb_symtab_filecount(const upb_symtab *s) {
901
1256
  * this code is used to directly build defs from Ruby (for example) we do need
902
1257
  * to validate important constraints like uniqueness of names and numbers. */
903
1258
 
904
- #define CHK_OOM(x) if (!(x)) { symtab_oomerr(ctx); }
1259
+ #define CHK_OOM(x) \
1260
+ if (!(x)) { \
1261
+ symtab_oomerr(ctx); \
1262
+ }
905
1263
 
906
1264
  typedef struct {
907
- upb_symtab *symtab;
908
- upb_filedef *file; /* File we are building. */
909
- upb_arena *arena; /* Allocate defs here. */
910
- const upb_msglayout **layouts; /* NULL if we should build layouts. */
911
- upb_status *status; /* Record errors here. */
912
- jmp_buf err; /* longjmp() on error. */
1265
+ upb_DefPool* symtab;
1266
+ upb_FileDef* file; /* File we are building. */
1267
+ upb_Arena* arena; /* Allocate defs here. */
1268
+ upb_Arena* tmp_arena; /* For temporary allocations. */
1269
+ const upb_MiniTable_File* layout; /* NULL if we should build layouts. */
1270
+ int enum_count; /* Count of enums built so far. */
1271
+ int msg_count; /* Count of messages built so far. */
1272
+ int ext_count; /* Count of extensions built so far. */
1273
+ upb_Status* status; /* Record errors here. */
1274
+ jmp_buf err; /* longjmp() on error. */
913
1275
  } symtab_addctx;
914
1276
 
915
- UPB_NORETURN UPB_NOINLINE UPB_PRINTF(2, 3)
916
- static void symtab_errf(symtab_addctx *ctx, const char *fmt, ...) {
1277
+ UPB_NORETURN UPB_NOINLINE UPB_PRINTF(2, 3) static void symtab_errf(
1278
+ symtab_addctx* ctx, const char* fmt, ...) {
917
1279
  va_list argp;
918
1280
  va_start(argp, fmt);
919
- upb_status_vseterrf(ctx->status, fmt, argp);
1281
+ upb_Status_VSetErrorFormat(ctx->status, fmt, argp);
920
1282
  va_end(argp);
921
1283
  UPB_LONGJMP(ctx->err, 1);
922
1284
  }
923
1285
 
924
- UPB_NORETURN UPB_NOINLINE
925
- static void symtab_oomerr(symtab_addctx *ctx) {
926
- upb_status_setoom(ctx->status);
1286
+ UPB_NORETURN UPB_NOINLINE static void symtab_oomerr(symtab_addctx* ctx) {
1287
+ upb_Status_setoom(ctx->status);
927
1288
  UPB_LONGJMP(ctx->err, 1);
928
1289
  }
929
1290
 
930
- void *symtab_alloc(symtab_addctx *ctx, size_t bytes) {
931
- void *ret = upb_arena_malloc(ctx->arena, bytes);
1291
+ void* symtab_alloc(symtab_addctx* ctx, size_t bytes) {
1292
+ if (bytes == 0) return NULL;
1293
+ void* ret = upb_Arena_Malloc(ctx->arena, bytes);
932
1294
  if (!ret) symtab_oomerr(ctx);
933
1295
  return ret;
934
1296
  }
935
1297
 
936
- static void check_ident(symtab_addctx *ctx, upb_strview name, bool full) {
937
- const char *str = name.data;
1298
+ // We want to copy the options verbatim into the destination options proto.
1299
+ // We use serialize+parse as our deep copy.
1300
+ #define SET_OPTIONS(target, desc_type, options_type, proto) \
1301
+ if (google_protobuf_##desc_type##_has_options(proto)) { \
1302
+ size_t size; \
1303
+ char* pb = google_protobuf_##options_type##_serialize( \
1304
+ google_protobuf_##desc_type##_options(proto), ctx->tmp_arena, &size); \
1305
+ CHK_OOM(pb); \
1306
+ target = google_protobuf_##options_type##_parse(pb, size, ctx->arena); \
1307
+ CHK_OOM(target); \
1308
+ } else { \
1309
+ target = (const google_protobuf_##options_type*)opt_default; \
1310
+ }
1311
+
1312
+ static void check_ident(symtab_addctx* ctx, upb_StringView name, bool full) {
1313
+ const char* str = name.data;
938
1314
  size_t len = name.size;
939
1315
  bool start = true;
940
1316
  size_t i;
@@ -965,158 +1341,223 @@ static void check_ident(symtab_addctx *ctx, upb_strview name, bool full) {
965
1341
  }
966
1342
  }
967
1343
 
968
- static size_t div_round_up(size_t n, size_t d) {
969
- return (n + d - 1) / d;
970
- }
1344
+ static size_t div_round_up(size_t n, size_t d) { return (n + d - 1) / d; }
971
1345
 
972
- static size_t upb_msgval_sizeof(upb_fieldtype_t type) {
1346
+ static size_t upb_MessageValue_sizeof(upb_CType type) {
973
1347
  switch (type) {
974
- case UPB_TYPE_DOUBLE:
975
- case UPB_TYPE_INT64:
976
- case UPB_TYPE_UINT64:
1348
+ case kUpb_CType_Double:
1349
+ case kUpb_CType_Int64:
1350
+ case kUpb_CType_UInt64:
977
1351
  return 8;
978
- case UPB_TYPE_ENUM:
979
- case UPB_TYPE_INT32:
980
- case UPB_TYPE_UINT32:
981
- case UPB_TYPE_FLOAT:
1352
+ case kUpb_CType_Enum:
1353
+ case kUpb_CType_Int32:
1354
+ case kUpb_CType_UInt32:
1355
+ case kUpb_CType_Float:
982
1356
  return 4;
983
- case UPB_TYPE_BOOL:
1357
+ case kUpb_CType_Bool:
984
1358
  return 1;
985
- case UPB_TYPE_MESSAGE:
1359
+ case kUpb_CType_Message:
986
1360
  return sizeof(void*);
987
- case UPB_TYPE_BYTES:
988
- case UPB_TYPE_STRING:
989
- return sizeof(upb_strview);
1361
+ case kUpb_CType_Bytes:
1362
+ case kUpb_CType_String:
1363
+ return sizeof(upb_StringView);
990
1364
  }
991
1365
  UPB_UNREACHABLE();
992
1366
  }
993
1367
 
994
- static uint8_t upb_msg_fielddefsize(const upb_fielddef *f) {
995
- if (upb_msgdef_mapentry(upb_fielddef_containingtype(f))) {
996
- upb_map_entry ent;
1368
+ static uint8_t upb_msg_fielddefsize(const upb_FieldDef* f) {
1369
+ if (upb_MessageDef_IsMapEntry(upb_FieldDef_ContainingType(f))) {
1370
+ upb_MapEntry ent;
997
1371
  UPB_ASSERT(sizeof(ent.k) == sizeof(ent.v));
998
1372
  return sizeof(ent.k);
999
- } else if (upb_fielddef_isseq(f)) {
1373
+ } else if (upb_FieldDef_IsRepeated(f)) {
1000
1374
  return sizeof(void*);
1001
1375
  } else {
1002
- return upb_msgval_sizeof(upb_fielddef_type(f));
1376
+ return upb_MessageValue_sizeof(upb_FieldDef_CType(f));
1003
1377
  }
1004
1378
  }
1005
1379
 
1006
- static uint32_t upb_msglayout_place(upb_msglayout *l, size_t size) {
1007
- uint32_t ret;
1380
+ static uint32_t upb_MiniTable_place(symtab_addctx* ctx, upb_MiniTable* l,
1381
+ size_t size, const upb_MessageDef* m) {
1382
+ size_t ofs = UPB_ALIGN_UP(l->size, size);
1383
+ size_t next = ofs + size;
1008
1384
 
1009
- l->size = UPB_ALIGN_UP(l->size, size);
1010
- ret = l->size;
1011
- l->size += size;
1012
- return ret;
1385
+ if (next > UINT16_MAX) {
1386
+ symtab_errf(ctx, "size of message %s exceeded max size of %zu bytes",
1387
+ upb_MessageDef_FullName(m), (size_t)UINT16_MAX);
1388
+ }
1389
+
1390
+ l->size = next;
1391
+ return ofs;
1013
1392
  }
1014
1393
 
1015
- static int field_number_cmp(const void *p1, const void *p2) {
1016
- const upb_msglayout_field *f1 = p1;
1017
- const upb_msglayout_field *f2 = p2;
1394
+ static int field_number_cmp(const void* p1, const void* p2) {
1395
+ const upb_MiniTable_Field* f1 = p1;
1396
+ const upb_MiniTable_Field* f2 = p2;
1018
1397
  return f1->number - f2->number;
1019
1398
  }
1020
1399
 
1021
- static void assign_layout_indices(const upb_msgdef *m, upb_msglayout *l,
1022
- upb_msglayout_field *fields) {
1400
+ static void assign_layout_indices(const upb_MessageDef* m, upb_MiniTable* l,
1401
+ upb_MiniTable_Field* fields) {
1023
1402
  int i;
1024
- int n = upb_msgdef_numfields(m);
1403
+ int n = upb_MessageDef_numfields(m);
1025
1404
  int dense_below = 0;
1026
1405
  for (i = 0; i < n; i++) {
1027
- upb_fielddef *f = (upb_fielddef*)upb_msgdef_itof(m, fields[i].number);
1406
+ upb_FieldDef* f =
1407
+ (upb_FieldDef*)upb_MessageDef_FindFieldByNumber(m, fields[i].number);
1028
1408
  UPB_ASSERT(f);
1029
1409
  f->layout_index = i;
1030
1410
  if (i < UINT8_MAX && fields[i].number == i + 1 &&
1031
- (i == 0 || fields[i-1].number == i)) {
1411
+ (i == 0 || fields[i - 1].number == i)) {
1032
1412
  dense_below = i + 1;
1033
1413
  }
1034
1414
  }
1035
1415
  l->dense_below = dense_below;
1036
1416
  }
1037
1417
 
1038
- static void fill_fieldlayout(upb_msglayout_field *field, const upb_fielddef *f) {
1039
- field->number = upb_fielddef_number(f);
1040
- field->descriptortype = upb_fielddef_descriptortype(f);
1041
-
1042
- if (field->descriptortype == UPB_DTYPE_STRING &&
1043
- f->file->syntax == UPB_SYNTAX_PROTO2) {
1044
- /* See TableDescriptorType() in upbc/generator.cc for details and
1045
- * rationale. */
1046
- field->descriptortype = UPB_DTYPE_BYTES;
1047
- }
1048
-
1049
- if (upb_fielddef_ismap(f)) {
1050
- field->mode = _UPB_MODE_MAP;
1051
- } else if (upb_fielddef_isseq(f)) {
1052
- field->mode = _UPB_MODE_ARRAY;
1418
+ static uint8_t map_descriptortype(const upb_FieldDef* f) {
1419
+ uint8_t type = upb_FieldDef_Type(f);
1420
+ /* See TableDescriptorType() in upbc/generator.cc for details and
1421
+ * rationale of these exceptions. */
1422
+ if (type == kUpb_FieldType_String && f->file->syntax == kUpb_Syntax_Proto2) {
1423
+ return kUpb_FieldType_Bytes;
1424
+ } else if (type == kUpb_FieldType_Enum &&
1425
+ (f->sub.enumdef->file->syntax == kUpb_Syntax_Proto3 ||
1426
+ UPB_TREAT_PROTO2_ENUMS_LIKE_PROTO3 ||
1427
+ // TODO(https://github.com/protocolbuffers/upb/issues/541):
1428
+ // fix map enum values to check for unknown enum values and put
1429
+ // them in the unknown field set.
1430
+ upb_MessageDef_IsMapEntry(upb_FieldDef_ContainingType(f)))) {
1431
+ return kUpb_FieldType_Int32;
1432
+ }
1433
+ return type;
1434
+ }
1435
+
1436
+ static void fill_fieldlayout(upb_MiniTable_Field* field,
1437
+ const upb_FieldDef* f) {
1438
+ field->number = upb_FieldDef_Number(f);
1439
+ field->descriptortype = map_descriptortype(f);
1440
+
1441
+ if (upb_FieldDef_IsMap(f)) {
1442
+ field->mode =
1443
+ kUpb_FieldMode_Map | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift);
1444
+ } else if (upb_FieldDef_IsRepeated(f)) {
1445
+ field->mode =
1446
+ kUpb_FieldMode_Array | (kUpb_FieldRep_Pointer << kUpb_FieldRep_Shift);
1053
1447
  } else {
1054
- field->mode = _UPB_MODE_SCALAR;
1055
- }
1056
-
1057
- if (upb_fielddef_packed(f)) {
1058
- field->mode |= _UPB_MODE_IS_PACKED;
1448
+ /* Maps descriptor type -> elem_size_lg2. */
1449
+ static const uint8_t sizes[] = {
1450
+ -1, /* invalid descriptor type */
1451
+ kUpb_FieldRep_8Byte, /* DOUBLE */
1452
+ kUpb_FieldRep_4Byte, /* FLOAT */
1453
+ kUpb_FieldRep_8Byte, /* INT64 */
1454
+ kUpb_FieldRep_8Byte, /* UINT64 */
1455
+ kUpb_FieldRep_4Byte, /* INT32 */
1456
+ kUpb_FieldRep_8Byte, /* FIXED64 */
1457
+ kUpb_FieldRep_4Byte, /* FIXED32 */
1458
+ kUpb_FieldRep_1Byte, /* BOOL */
1459
+ kUpb_FieldRep_StringView, /* STRING */
1460
+ kUpb_FieldRep_Pointer, /* GROUP */
1461
+ kUpb_FieldRep_Pointer, /* MESSAGE */
1462
+ kUpb_FieldRep_StringView, /* BYTES */
1463
+ kUpb_FieldRep_4Byte, /* UINT32 */
1464
+ kUpb_FieldRep_4Byte, /* ENUM */
1465
+ kUpb_FieldRep_4Byte, /* SFIXED32 */
1466
+ kUpb_FieldRep_8Byte, /* SFIXED64 */
1467
+ kUpb_FieldRep_4Byte, /* SINT32 */
1468
+ kUpb_FieldRep_8Byte, /* SINT64 */
1469
+ };
1470
+ field->mode = kUpb_FieldMode_Scalar |
1471
+ (sizes[field->descriptortype] << kUpb_FieldRep_Shift);
1472
+ }
1473
+
1474
+ if (upb_FieldDef_IsPacked(f)) {
1475
+ field->mode |= kUpb_LabelFlags_IsPacked;
1476
+ }
1477
+
1478
+ if (upb_FieldDef_IsExtension(f)) {
1479
+ field->mode |= kUpb_LabelFlags_IsExtension;
1059
1480
  }
1060
1481
  }
1061
1482
 
1062
1483
  /* This function is the dynamic equivalent of message_layout.{cc,h} in upbc.
1063
1484
  * It computes a dynamic layout for all of the fields in |m|. */
1064
- static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
1065
- upb_msglayout *l = (upb_msglayout*)m->layout;
1066
- upb_msg_field_iter it;
1067
- upb_msg_oneof_iter oit;
1068
- size_t hasbit;
1069
- size_t field_count = upb_msgdef_numfields(m);
1070
- size_t submsg_count = 0;
1071
- const upb_msglayout **submsgs;
1072
- upb_msglayout_field *fields;
1073
-
1074
- memset(l, 0, sizeof(*l) + sizeof(_upb_fasttable_entry));
1485
+ static void make_layout(symtab_addctx* ctx, const upb_MessageDef* m) {
1486
+ upb_MiniTable* l = (upb_MiniTable*)m->layout;
1487
+ size_t field_count = upb_MessageDef_numfields(m);
1488
+ size_t sublayout_count = 0;
1489
+ upb_MiniTable_Sub* subs;
1490
+ upb_MiniTable_Field* fields;
1491
+
1492
+ memset(l, 0, sizeof(*l) + sizeof(_upb_FastTable_Entry));
1075
1493
 
1076
1494
  /* Count sub-messages. */
1077
1495
  for (size_t i = 0; i < field_count; i++) {
1078
- if (upb_fielddef_issubmsg(&m->fields[i])) {
1079
- submsg_count++;
1496
+ const upb_FieldDef* f = &m->fields[i];
1497
+ if (upb_FieldDef_IsSubMessage(f)) {
1498
+ sublayout_count++;
1499
+ }
1500
+ if (upb_FieldDef_CType(f) == kUpb_CType_Enum &&
1501
+ f->sub.enumdef->file->syntax == kUpb_Syntax_Proto2) {
1502
+ sublayout_count++;
1080
1503
  }
1081
1504
  }
1082
1505
 
1083
1506
  fields = symtab_alloc(ctx, field_count * sizeof(*fields));
1084
- submsgs = symtab_alloc(ctx, submsg_count * sizeof(*submsgs));
1507
+ subs = symtab_alloc(ctx, sublayout_count * sizeof(*subs));
1085
1508
 
1086
- l->field_count = upb_msgdef_numfields(m);
1509
+ l->field_count = upb_MessageDef_numfields(m);
1087
1510
  l->fields = fields;
1088
- l->submsgs = submsgs;
1511
+ l->subs = subs;
1089
1512
  l->table_mask = 0;
1513
+ l->required_count = 0;
1514
+
1515
+ if (upb_MessageDef_ExtensionRangeCount(m) > 0) {
1516
+ if (google_protobuf_MessageOptions_message_set_wire_format(m->opts)) {
1517
+ l->ext = kUpb_ExtMode_IsMessageSet;
1518
+ } else {
1519
+ l->ext = kUpb_ExtMode_Extendable;
1520
+ }
1521
+ } else {
1522
+ l->ext = kUpb_ExtMode_NonExtendable;
1523
+ }
1090
1524
 
1091
1525
  /* TODO(haberman): initialize fast tables so that reflection-based parsing
1092
1526
  * can get the same speeds as linked-in types. */
1093
1527
  l->fasttable[0].field_parser = &fastdecode_generic;
1094
1528
  l->fasttable[0].field_data = 0;
1095
1529
 
1096
- if (upb_msgdef_mapentry(m)) {
1530
+ if (upb_MessageDef_IsMapEntry(m)) {
1097
1531
  /* TODO(haberman): refactor this method so this special case is more
1098
1532
  * elegant. */
1099
- const upb_fielddef *key = upb_msgdef_itof(m, 1);
1100
- const upb_fielddef *val = upb_msgdef_itof(m, 2);
1533
+ const upb_FieldDef* key = upb_MessageDef_FindFieldByNumber(m, 1);
1534
+ const upb_FieldDef* val = upb_MessageDef_FindFieldByNumber(m, 2);
1101
1535
  fields[0].number = 1;
1102
1536
  fields[1].number = 2;
1103
- fields[0].mode = _UPB_MODE_SCALAR;
1104
- fields[1].mode = _UPB_MODE_SCALAR;
1537
+ fields[0].mode = kUpb_FieldMode_Scalar;
1538
+ fields[1].mode = kUpb_FieldMode_Scalar;
1105
1539
  fields[0].presence = 0;
1106
1540
  fields[1].presence = 0;
1107
- fields[0].descriptortype = upb_fielddef_descriptortype(key);
1108
- fields[1].descriptortype = upb_fielddef_descriptortype(val);
1541
+ fields[0].descriptortype = map_descriptortype(key);
1542
+ fields[1].descriptortype = map_descriptortype(val);
1109
1543
  fields[0].offset = 0;
1110
- fields[1].offset = sizeof(upb_strview);
1544
+ fields[1].offset = sizeof(upb_StringView);
1111
1545
  fields[1].submsg_index = 0;
1112
1546
 
1113
- if (upb_fielddef_type(val) == UPB_TYPE_MESSAGE) {
1114
- submsgs[0] = upb_fielddef_msgsubdef(val)->layout;
1547
+ if (upb_FieldDef_CType(val) == kUpb_CType_Message) {
1548
+ subs[0].submsg = upb_FieldDef_MessageSubDef(val)->layout;
1115
1549
  }
1116
1550
 
1551
+ upb_FieldDef* fielddefs = (upb_FieldDef*)&m->fields[0];
1552
+ UPB_ASSERT(fielddefs[0].number_ == 1);
1553
+ UPB_ASSERT(fielddefs[1].number_ == 2);
1554
+ fielddefs[0].layout_index = 0;
1555
+ fielddefs[1].layout_index = 1;
1556
+
1117
1557
  l->field_count = 2;
1118
- l->size = 2 * sizeof(upb_strview);
1558
+ l->size = 2 * sizeof(upb_StringView);
1119
1559
  l->size = UPB_ALIGN_UP(l->size, 8);
1560
+ l->dense_below = 2;
1120
1561
  return;
1121
1562
  }
1122
1563
 
@@ -1129,23 +1570,44 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
1129
1570
  * OPT: There is a lot of room for optimization here to minimize the size.
1130
1571
  */
1131
1572
 
1573
+ /* Assign hasbits for required fields first. */
1574
+ size_t hasbit = 0;
1575
+
1576
+ for (int i = 0; i < m->field_count; i++) {
1577
+ const upb_FieldDef* f = &m->fields[i];
1578
+ upb_MiniTable_Field* field = &fields[upb_FieldDef_Index(f)];
1579
+ if (upb_FieldDef_Label(f) == kUpb_Label_Required) {
1580
+ field->presence = ++hasbit;
1581
+ if (hasbit >= 63) {
1582
+ symtab_errf(ctx, "Message with >=63 required fields: %s",
1583
+ upb_MessageDef_FullName(m));
1584
+ }
1585
+ l->required_count++;
1586
+ }
1587
+ }
1588
+
1132
1589
  /* Allocate hasbits and set basic field attributes. */
1133
- submsg_count = 0;
1134
- for (upb_msg_field_begin(&it, m), hasbit = 0;
1135
- !upb_msg_field_done(&it);
1136
- upb_msg_field_next(&it)) {
1137
- upb_fielddef* f = upb_msg_iter_field(&it);
1138
- upb_msglayout_field *field = &fields[upb_fielddef_index(f)];
1590
+ sublayout_count = 0;
1591
+ for (int i = 0; i < m->field_count; i++) {
1592
+ const upb_FieldDef* f = &m->fields[i];
1593
+ upb_MiniTable_Field* field = &fields[upb_FieldDef_Index(f)];
1139
1594
 
1140
1595
  fill_fieldlayout(field, f);
1141
1596
 
1142
- if (upb_fielddef_issubmsg(f)) {
1143
- const upb_msgdef *subm = upb_fielddef_msgsubdef(f);
1144
- field->submsg_index = submsg_count++;
1145
- submsgs[field->submsg_index] = subm->layout;
1597
+ if (field->descriptortype == kUpb_FieldType_Message ||
1598
+ field->descriptortype == kUpb_FieldType_Group) {
1599
+ field->submsg_index = sublayout_count++;
1600
+ subs[field->submsg_index].submsg = upb_FieldDef_MessageSubDef(f)->layout;
1601
+ } else if (field->descriptortype == kUpb_FieldType_Enum) {
1602
+ field->submsg_index = sublayout_count++;
1603
+ subs[field->submsg_index].subenum = upb_FieldDef_EnumSubDef(f)->layout;
1604
+ UPB_ASSERT(subs[field->submsg_index].subenum);
1146
1605
  }
1147
1606
 
1148
- if (upb_fielddef_haspresence(f) && !upb_fielddef_realcontainingoneof(f)) {
1607
+ if (upb_FieldDef_Label(f) == kUpb_Label_Required) {
1608
+ /* Hasbit was already assigned. */
1609
+ } else if (upb_FieldDef_HasPresence(f) &&
1610
+ !upb_FieldDef_RealContainingOneof(f)) {
1149
1611
  /* We don't use hasbit 0, so that 0 can indicate "no presence" in the
1150
1612
  * table. This wastes one hasbit, but we don't worry about it for now. */
1151
1613
  field->presence = ++hasbit;
@@ -1155,55 +1617,51 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
1155
1617
  }
1156
1618
 
1157
1619
  /* Account for space used by hasbits. */
1158
- l->size = div_round_up(hasbit, 8);
1620
+ l->size = hasbit ? div_round_up(hasbit + 1, 8) : 0;
1159
1621
 
1160
1622
  /* Allocate non-oneof fields. */
1161
- for (upb_msg_field_begin(&it, m); !upb_msg_field_done(&it);
1162
- upb_msg_field_next(&it)) {
1163
- const upb_fielddef* f = upb_msg_iter_field(&it);
1623
+ for (int i = 0; i < m->field_count; i++) {
1624
+ const upb_FieldDef* f = &m->fields[i];
1164
1625
  size_t field_size = upb_msg_fielddefsize(f);
1165
- size_t index = upb_fielddef_index(f);
1626
+ size_t index = upb_FieldDef_Index(f);
1166
1627
 
1167
- if (upb_fielddef_realcontainingoneof(f)) {
1628
+ if (upb_FieldDef_RealContainingOneof(f)) {
1168
1629
  /* Oneofs are handled separately below. */
1169
1630
  continue;
1170
1631
  }
1171
1632
 
1172
- fields[index].offset = upb_msglayout_place(l, field_size);
1633
+ fields[index].offset = upb_MiniTable_place(ctx, l, field_size, m);
1173
1634
  }
1174
1635
 
1175
1636
  /* Allocate oneof fields. Each oneof field consists of a uint32 for the case
1176
1637
  * and space for the actual data. */
1177
- for (upb_msg_oneof_begin(&oit, m); !upb_msg_oneof_done(&oit);
1178
- upb_msg_oneof_next(&oit)) {
1179
- const upb_oneofdef* o = upb_msg_iter_oneof(&oit);
1180
- upb_oneof_iter fit;
1181
-
1182
- size_t case_size = sizeof(uint32_t); /* Could potentially optimize this. */
1638
+ for (int i = 0; i < m->oneof_count; i++) {
1639
+ const upb_OneofDef* o = &m->oneofs[i];
1640
+ size_t case_size = sizeof(uint32_t); /* Could potentially optimize this. */
1183
1641
  size_t field_size = 0;
1184
1642
  uint32_t case_offset;
1185
1643
  uint32_t data_offset;
1186
1644
 
1187
- if (upb_oneofdef_issynthetic(o)) continue;
1645
+ if (upb_OneofDef_IsSynthetic(o)) continue;
1646
+
1647
+ if (o->field_count == 0) {
1648
+ symtab_errf(ctx, "Oneof must have at least one field (%s)", o->full_name);
1649
+ }
1188
1650
 
1189
1651
  /* Calculate field size: the max of all field sizes. */
1190
- for (upb_oneof_begin(&fit, o);
1191
- !upb_oneof_done(&fit);
1192
- upb_oneof_next(&fit)) {
1193
- const upb_fielddef* f = upb_oneof_iter_field(&fit);
1652
+ for (int j = 0; j < o->field_count; j++) {
1653
+ const upb_FieldDef* f = o->fields[j];
1194
1654
  field_size = UPB_MAX(field_size, upb_msg_fielddefsize(f));
1195
1655
  }
1196
1656
 
1197
1657
  /* Align and allocate case offset. */
1198
- case_offset = upb_msglayout_place(l, case_size);
1199
- data_offset = upb_msglayout_place(l, field_size);
1658
+ case_offset = upb_MiniTable_place(ctx, l, case_size, m);
1659
+ data_offset = upb_MiniTable_place(ctx, l, field_size, m);
1200
1660
 
1201
- for (upb_oneof_begin(&fit, o);
1202
- !upb_oneof_done(&fit);
1203
- upb_oneof_next(&fit)) {
1204
- const upb_fielddef* f = upb_oneof_iter_field(&fit);
1205
- fields[upb_fielddef_index(f)].offset = data_offset;
1206
- fields[upb_fielddef_index(f)].presence = ~case_offset;
1661
+ for (int i = 0; i < o->field_count; i++) {
1662
+ const upb_FieldDef* f = o->fields[i];
1663
+ fields[upb_FieldDef_Index(f)].offset = data_offset;
1664
+ fields[upb_FieldDef_Index(f)].presence = ~case_offset;
1207
1665
  }
1208
1666
  }
1209
1667
 
@@ -1212,28 +1670,33 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
1212
1670
  l->size = UPB_ALIGN_UP(l->size, 8);
1213
1671
 
1214
1672
  /* Sort fields by number. */
1215
- qsort(fields, upb_msgdef_numfields(m), sizeof(*fields), field_number_cmp);
1673
+ if (fields) {
1674
+ qsort(fields, upb_MessageDef_numfields(m), sizeof(*fields),
1675
+ field_number_cmp);
1676
+ }
1216
1677
  assign_layout_indices(m, l, fields);
1217
1678
  }
1218
1679
 
1219
- static char *strviewdup(symtab_addctx *ctx, upb_strview view) {
1220
- return upb_strdup2(view.data, view.size, ctx->arena);
1680
+ static char* strviewdup(symtab_addctx* ctx, upb_StringView view) {
1681
+ char* ret = upb_strdup2(view.data, view.size, ctx->arena);
1682
+ CHK_OOM(ret);
1683
+ return ret;
1221
1684
  }
1222
1685
 
1223
- static bool streql2(const char *a, size_t n, const char *b) {
1686
+ static bool streql2(const char* a, size_t n, const char* b) {
1224
1687
  return n == strlen(b) && memcmp(a, b, n) == 0;
1225
1688
  }
1226
1689
 
1227
- static bool streql_view(upb_strview view, const char *b) {
1690
+ static bool streql_view(upb_StringView view, const char* b) {
1228
1691
  return streql2(view.data, view.size, b);
1229
1692
  }
1230
1693
 
1231
- static const char *makefullname(symtab_addctx *ctx, const char *prefix,
1232
- upb_strview name) {
1694
+ static const char* makefullname(symtab_addctx* ctx, const char* prefix,
1695
+ upb_StringView name) {
1233
1696
  if (prefix) {
1234
1697
  /* ret = prefix + '.' + name; */
1235
1698
  size_t n = strlen(prefix);
1236
- char *ret = symtab_alloc(ctx, n + name.size + 2);
1699
+ char* ret = symtab_alloc(ctx, n + name.size + 2);
1237
1700
  strcpy(ret, prefix);
1238
1701
  ret[n] = '.';
1239
1702
  memcpy(&ret[n + 1], name.data, name.size);
@@ -1244,33 +1707,33 @@ static const char *makefullname(symtab_addctx *ctx, const char *prefix,
1244
1707
  }
1245
1708
  }
1246
1709
 
1247
- static void finalize_oneofs(symtab_addctx *ctx, upb_msgdef *m) {
1710
+ static void finalize_oneofs(symtab_addctx* ctx, upb_MessageDef* m) {
1248
1711
  int i;
1249
1712
  int synthetic_count = 0;
1250
- upb_oneofdef *mutable_oneofs = (upb_oneofdef*)m->oneofs;
1713
+ upb_OneofDef* mutable_oneofs = (upb_OneofDef*)m->oneofs;
1251
1714
 
1252
1715
  for (i = 0; i < m->oneof_count; i++) {
1253
- upb_oneofdef *o = &mutable_oneofs[i];
1716
+ upb_OneofDef* o = &mutable_oneofs[i];
1254
1717
 
1255
1718
  if (o->synthetic && o->field_count != 1) {
1256
1719
  symtab_errf(ctx, "Synthetic oneofs must have one field, not %d: %s",
1257
- o->field_count, upb_oneofdef_name(o));
1720
+ o->field_count, upb_OneofDef_Name(o));
1258
1721
  }
1259
1722
 
1260
1723
  if (o->synthetic) {
1261
1724
  synthetic_count++;
1262
1725
  } else if (synthetic_count != 0) {
1263
1726
  symtab_errf(ctx, "Synthetic oneofs must be after all other oneofs: %s",
1264
- upb_oneofdef_name(o));
1727
+ upb_OneofDef_Name(o));
1265
1728
  }
1266
1729
 
1267
- o->fields = symtab_alloc(ctx, sizeof(upb_fielddef *) * o->field_count);
1730
+ o->fields = symtab_alloc(ctx, sizeof(upb_FieldDef*) * o->field_count);
1268
1731
  o->field_count = 0;
1269
1732
  }
1270
1733
 
1271
1734
  for (i = 0; i < m->field_count; i++) {
1272
- const upb_fielddef *f = &m->fields[i];
1273
- upb_oneofdef *o = (upb_oneofdef*)f->oneof;
1735
+ const upb_FieldDef* f = &m->fields[i];
1736
+ upb_OneofDef* o = (upb_OneofDef*)upb_FieldDef_ContainingOneof(f);
1274
1737
  if (o) {
1275
1738
  o->fields[o->field_count++] = f;
1276
1739
  }
@@ -1279,14 +1742,16 @@ static void finalize_oneofs(symtab_addctx *ctx, upb_msgdef *m) {
1279
1742
  m->real_oneof_count = m->oneof_count - synthetic_count;
1280
1743
  }
1281
1744
 
1282
- size_t getjsonname(const char *name, char *buf, size_t len) {
1745
+ size_t getjsonname(const char* name, char* buf, size_t len) {
1283
1746
  size_t src, dst = 0;
1284
1747
  bool ucase_next = false;
1285
1748
 
1286
- #define WRITE(byte) \
1287
- ++dst; \
1288
- if (dst < len) buf[dst - 1] = byte; \
1289
- else if (dst == len) buf[dst - 1] = '\0'
1749
+ #define WRITE(byte) \
1750
+ ++dst; \
1751
+ if (dst < len) \
1752
+ buf[dst - 1] = byte; \
1753
+ else if (dst == len) \
1754
+ buf[dst - 1] = '\0'
1290
1755
 
1291
1756
  if (!name) {
1292
1757
  WRITE('\0');
@@ -1317,14 +1782,19 @@ size_t getjsonname(const char *name, char *buf, size_t len) {
1317
1782
  #undef WRITE
1318
1783
  }
1319
1784
 
1320
- static char* makejsonname(symtab_addctx *ctx, const char* name) {
1785
+ static char* makejsonname(symtab_addctx* ctx, const char* name) {
1321
1786
  size_t size = getjsonname(name, NULL, 0);
1322
1787
  char* json_name = symtab_alloc(ctx, size);
1323
1788
  getjsonname(name, json_name, size);
1324
1789
  return json_name;
1325
1790
  }
1326
1791
 
1327
- static void symtab_add(symtab_addctx *ctx, const char *name, upb_value v) {
1792
+ /* Adds a symbol |v| to the symtab, which must be a def pointer previously
1793
+ * packed with pack_def(). The def's pointer to upb_FileDef* must be set before
1794
+ * adding, so we know which entries to remove if building this file fails. */
1795
+ static void symtab_add(symtab_addctx* ctx, const char* name, upb_value v) {
1796
+ // TODO: table should support an operation "tryinsert" to avoid the double
1797
+ // lookup.
1328
1798
  if (upb_strtable_lookup(&ctx->symtab->syms, name, NULL)) {
1329
1799
  symtab_errf(ctx, "duplicate symbol '%s'", name);
1330
1800
  }
@@ -1333,83 +1803,269 @@ static void symtab_add(symtab_addctx *ctx, const char *name, upb_value v) {
1333
1803
  ctx->symtab->arena));
1334
1804
  }
1335
1805
 
1806
+ static bool remove_component(char* base, size_t* len) {
1807
+ if (*len == 0) return false;
1808
+
1809
+ for (size_t i = *len - 1; i > 0; i--) {
1810
+ if (base[i] == '.') {
1811
+ *len = i;
1812
+ return true;
1813
+ }
1814
+ }
1815
+
1816
+ *len = 0;
1817
+ return true;
1818
+ }
1819
+
1336
1820
  /* Given a symbol and the base symbol inside which it is defined, find the
1337
1821
  * symbol's definition in t. */
1338
- static const void *symtab_resolve(symtab_addctx *ctx, const upb_fielddef *f,
1339
- const char *base, upb_strview sym,
1340
- upb_deftype_t type) {
1341
- const upb_strtable *t = &ctx->symtab->syms;
1342
- if(sym.size == 0) goto notfound;
1343
- if(sym.data[0] == '.') {
1822
+ static const void* symtab_resolveany(symtab_addctx* ctx,
1823
+ const char* from_name_dbg,
1824
+ const char* base, upb_StringView sym,
1825
+ upb_deftype_t* type) {
1826
+ const upb_strtable* t = &ctx->symtab->syms;
1827
+ if (sym.size == 0) goto notfound;
1828
+ upb_value v;
1829
+ if (sym.data[0] == '.') {
1344
1830
  /* Symbols starting with '.' are absolute, so we do a single lookup.
1345
1831
  * Slice to omit the leading '.' */
1346
- upb_value v;
1347
1832
  if (!upb_strtable_lookup2(t, sym.data + 1, sym.size - 1, &v)) {
1348
1833
  goto notfound;
1349
1834
  }
1350
-
1351
- const void *ret = unpack_def(v, type);
1352
- if (!ret) {
1353
- symtab_errf(ctx, "type mismatch when resolving field %s, name %s",
1354
- f->full_name, sym.data);
1355
- }
1356
- return ret;
1357
1835
  } else {
1358
- /* Remove components from base until we find an entry or run out.
1359
- * TODO: This branch is totally broken, but currently not used. */
1360
- (void)base;
1361
- UPB_ASSERT(false);
1362
- goto notfound;
1836
+ /* Remove components from base until we find an entry or run out. */
1837
+ size_t baselen = base ? strlen(base) : 0;
1838
+ char* tmp = malloc(sym.size + baselen + 1);
1839
+ while (1) {
1840
+ char* p = tmp;
1841
+ if (baselen) {
1842
+ memcpy(p, base, baselen);
1843
+ p[baselen] = '.';
1844
+ p += baselen + 1;
1845
+ }
1846
+ memcpy(p, sym.data, sym.size);
1847
+ p += sym.size;
1848
+ if (upb_strtable_lookup2(t, tmp, p - tmp, &v)) {
1849
+ break;
1850
+ }
1851
+ if (!remove_component(tmp, &baselen)) {
1852
+ free(tmp);
1853
+ goto notfound;
1854
+ }
1855
+ }
1856
+ free(tmp);
1363
1857
  }
1364
1858
 
1859
+ *type = deftype(v);
1860
+ return unpack_def(v, *type);
1861
+
1365
1862
  notfound:
1366
- symtab_errf(ctx, "couldn't resolve name '" UPB_STRVIEW_FORMAT "'",
1367
- UPB_STRVIEW_ARGS(sym));
1863
+ symtab_errf(ctx, "couldn't resolve name '" UPB_STRINGVIEW_FORMAT "'",
1864
+ UPB_STRINGVIEW_ARGS(sym));
1865
+ }
1866
+
1867
+ static const void* symtab_resolve(symtab_addctx* ctx, const char* from_name_dbg,
1868
+ const char* base, upb_StringView sym,
1869
+ upb_deftype_t type) {
1870
+ upb_deftype_t found_type;
1871
+ const void* ret =
1872
+ symtab_resolveany(ctx, from_name_dbg, base, sym, &found_type);
1873
+ if (ret && found_type != type) {
1874
+ symtab_errf(ctx,
1875
+ "type mismatch when resolving %s: couldn't find "
1876
+ "name " UPB_STRINGVIEW_FORMAT " with type=%d",
1877
+ from_name_dbg, UPB_STRINGVIEW_ARGS(sym), (int)type);
1878
+ }
1879
+ return ret;
1368
1880
  }
1369
1881
 
1370
1882
  static void create_oneofdef(
1371
- symtab_addctx *ctx, upb_msgdef *m,
1372
- const google_protobuf_OneofDescriptorProto *oneof_proto) {
1373
- upb_oneofdef *o;
1374
- upb_strview name = google_protobuf_OneofDescriptorProto_name(oneof_proto);
1883
+ symtab_addctx* ctx, upb_MessageDef* m,
1884
+ const google_protobuf_OneofDescriptorProto* oneof_proto,
1885
+ const upb_OneofDef* _o) {
1886
+ upb_OneofDef* o = (upb_OneofDef*)_o;
1887
+ upb_StringView name = google_protobuf_OneofDescriptorProto_name(oneof_proto);
1375
1888
  upb_value v;
1376
1889
 
1377
- o = (upb_oneofdef*)&m->oneofs[m->oneof_count++];
1378
1890
  o->parent = m;
1379
1891
  o->full_name = makefullname(ctx, m->full_name, name);
1380
1892
  o->field_count = 0;
1381
1893
  o->synthetic = false;
1382
1894
 
1895
+ SET_OPTIONS(o->opts, OneofDescriptorProto, OneofOptions, oneof_proto);
1896
+
1897
+ upb_value existing_v;
1898
+ if (upb_strtable_lookup2(&m->ntof, name.data, name.size, &existing_v)) {
1899
+ symtab_errf(ctx, "duplicate oneof name (%s)", o->full_name);
1900
+ }
1901
+
1383
1902
  v = pack_def(o, UPB_DEFTYPE_ONEOF);
1384
- symtab_add(ctx, o->full_name, v);
1385
1903
  CHK_OOM(upb_strtable_insert(&m->ntof, name.data, name.size, v, ctx->arena));
1386
1904
 
1387
1905
  CHK_OOM(upb_inttable_init(&o->itof, ctx->arena));
1388
1906
  CHK_OOM(upb_strtable_init(&o->ntof, 4, ctx->arena));
1389
1907
  }
1390
1908
 
1391
- static str_t *newstr(symtab_addctx *ctx, const char *data, size_t len) {
1392
- str_t *ret = symtab_alloc(ctx, sizeof(*ret) + len);
1393
- if (!ret) return NULL;
1909
+ static str_t* newstr(symtab_addctx* ctx, const char* data, size_t len) {
1910
+ str_t* ret = symtab_alloc(ctx, sizeof(*ret) + len);
1911
+ CHK_OOM(ret);
1394
1912
  ret->len = len;
1395
1913
  if (len) memcpy(ret->str, data, len);
1396
1914
  ret->str[len] = '\0';
1397
1915
  return ret;
1398
1916
  }
1399
1917
 
1400
- static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
1401
- upb_fielddef *f) {
1402
- char *end;
1918
+ static bool upb_DefPool_TryGetChar(const char** src, const char* end,
1919
+ char* ch) {
1920
+ if (*src == end) return false;
1921
+ *ch = **src;
1922
+ *src += 1;
1923
+ return true;
1924
+ }
1925
+
1926
+ static char upb_DefPool_TryGetHexDigit(symtab_addctx* ctx,
1927
+ const upb_FieldDef* f, const char** src,
1928
+ const char* end) {
1929
+ char ch;
1930
+ if (!upb_DefPool_TryGetChar(src, end, &ch)) return -1;
1931
+ if ('0' <= ch && ch <= '9') {
1932
+ return ch - '0';
1933
+ }
1934
+ ch = upb_ascii_lower(ch);
1935
+ if ('a' <= ch && ch <= 'f') {
1936
+ return ch - 'a' + 0xa;
1937
+ }
1938
+ *src -= 1; // Char wasn't actually a hex digit.
1939
+ return -1;
1940
+ }
1941
+
1942
+ static char upb_DefPool_ParseHexEscape(symtab_addctx* ctx,
1943
+ const upb_FieldDef* f, const char** src,
1944
+ const char* end) {
1945
+ char hex_digit = upb_DefPool_TryGetHexDigit(ctx, f, src, end);
1946
+ if (hex_digit < 0) {
1947
+ symtab_errf(ctx,
1948
+ "\\x cannot be followed by non-hex digit in field '%s' default",
1949
+ upb_FieldDef_FullName(f));
1950
+ return 0;
1951
+ }
1952
+ unsigned int ret = hex_digit;
1953
+ while ((hex_digit = upb_DefPool_TryGetHexDigit(ctx, f, src, end)) >= 0) {
1954
+ ret = (ret << 4) | hex_digit;
1955
+ }
1956
+ if (ret > 0xff) {
1957
+ symtab_errf(ctx, "Value of hex escape in field %s exceeds 8 bits",
1958
+ upb_FieldDef_FullName(f));
1959
+ return 0;
1960
+ }
1961
+ return ret;
1962
+ }
1963
+
1964
+ char upb_DefPool_TryGetOctalDigit(const char** src, const char* end) {
1965
+ char ch;
1966
+ if (!upb_DefPool_TryGetChar(src, end, &ch)) return -1;
1967
+ if ('0' <= ch && ch <= '7') {
1968
+ return ch - '0';
1969
+ }
1970
+ *src -= 1; // Char wasn't actually an octal digit.
1971
+ return -1;
1972
+ }
1973
+
1974
+ static char upb_DefPool_ParseOctalEscape(symtab_addctx* ctx,
1975
+ const upb_FieldDef* f,
1976
+ const char** src, const char* end) {
1977
+ char ch = 0;
1978
+ for (int i = 0; i < 3; i++) {
1979
+ char digit;
1980
+ if ((digit = upb_DefPool_TryGetOctalDigit(src, end)) >= 0) {
1981
+ ch = (ch << 3) | digit;
1982
+ }
1983
+ }
1984
+ return ch;
1985
+ }
1986
+
1987
+ static char upb_DefPool_ParseEscape(symtab_addctx* ctx, const upb_FieldDef* f,
1988
+ const char** src, const char* end) {
1989
+ char ch;
1990
+ if (!upb_DefPool_TryGetChar(src, end, &ch)) {
1991
+ symtab_errf(ctx, "unterminated escape sequence in field %s",
1992
+ upb_FieldDef_FullName(f));
1993
+ return 0;
1994
+ }
1995
+ switch (ch) {
1996
+ case 'a':
1997
+ return '\a';
1998
+ case 'b':
1999
+ return '\b';
2000
+ case 'f':
2001
+ return '\f';
2002
+ case 'n':
2003
+ return '\n';
2004
+ case 'r':
2005
+ return '\r';
2006
+ case 't':
2007
+ return '\t';
2008
+ case 'v':
2009
+ return '\v';
2010
+ case '\\':
2011
+ return '\\';
2012
+ case '\'':
2013
+ return '\'';
2014
+ case '\"':
2015
+ return '\"';
2016
+ case '?':
2017
+ return '\?';
2018
+ case 'x':
2019
+ case 'X':
2020
+ return upb_DefPool_ParseHexEscape(ctx, f, src, end);
2021
+ case '0':
2022
+ case '1':
2023
+ case '2':
2024
+ case '3':
2025
+ case '4':
2026
+ case '5':
2027
+ case '6':
2028
+ case '7':
2029
+ *src -= 1;
2030
+ return upb_DefPool_ParseOctalEscape(ctx, f, src, end);
2031
+ }
2032
+ symtab_errf(ctx, "Unknown escape sequence: \\%c", ch);
2033
+ }
2034
+
2035
+ static str_t* unescape(symtab_addctx* ctx, const upb_FieldDef* f,
2036
+ const char* data, size_t len) {
2037
+ // Size here is an upper bound; escape sequences could ultimately shrink it.
2038
+ str_t* ret = symtab_alloc(ctx, sizeof(*ret) + len);
2039
+ char* dst = &ret->str[0];
2040
+ const char* src = data;
2041
+ const char* end = data + len;
2042
+
2043
+ while (src < end) {
2044
+ if (*src == '\\') {
2045
+ src++;
2046
+ *dst++ = upb_DefPool_ParseEscape(ctx, f, &src, end);
2047
+ } else {
2048
+ *dst++ = *src++;
2049
+ }
2050
+ }
2051
+
2052
+ ret->len = dst - &ret->str[0];
2053
+ return ret;
2054
+ }
2055
+
2056
+ static void parse_default(symtab_addctx* ctx, const char* str, size_t len,
2057
+ upb_FieldDef* f) {
2058
+ char* end;
1403
2059
  char nullz[64];
1404
2060
  errno = 0;
1405
2061
 
1406
- switch (upb_fielddef_type(f)) {
1407
- case UPB_TYPE_INT32:
1408
- case UPB_TYPE_INT64:
1409
- case UPB_TYPE_UINT32:
1410
- case UPB_TYPE_UINT64:
1411
- case UPB_TYPE_DOUBLE:
1412
- case UPB_TYPE_FLOAT:
2062
+ switch (upb_FieldDef_CType(f)) {
2063
+ case kUpb_CType_Int32:
2064
+ case kUpb_CType_Int64:
2065
+ case kUpb_CType_UInt32:
2066
+ case kUpb_CType_UInt64:
2067
+ case kUpb_CType_Double:
2068
+ case kUpb_CType_Float:
1413
2069
  /* Standard C number parsing functions expect null-terminated strings. */
1414
2070
  if (len >= sizeof(nullz) - 1) {
1415
2071
  symtab_errf(ctx, "Default too long: %.*s", (int)len, str);
@@ -1422,8 +2078,8 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
1422
2078
  break;
1423
2079
  }
1424
2080
 
1425
- switch (upb_fielddef_type(f)) {
1426
- case UPB_TYPE_INT32: {
2081
+ switch (upb_FieldDef_CType(f)) {
2082
+ case kUpb_CType_Int32: {
1427
2083
  long val = strtol(str, &end, 0);
1428
2084
  if (val > INT32_MAX || val < INT32_MIN || errno == ERANGE || *end) {
1429
2085
  goto invalid;
@@ -1431,16 +2087,17 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
1431
2087
  f->defaultval.sint = val;
1432
2088
  break;
1433
2089
  }
1434
- case UPB_TYPE_ENUM: {
1435
- const upb_enumdef *e = f->sub.enumdef;
1436
- int32_t val;
1437
- if (!upb_enumdef_ntoi(e, str, len, &val)) {
2090
+ case kUpb_CType_Enum: {
2091
+ const upb_EnumDef* e = f->sub.enumdef;
2092
+ const upb_EnumValueDef* ev =
2093
+ upb_EnumDef_FindValueByNameWithSize(e, str, len);
2094
+ if (!ev) {
1438
2095
  goto invalid;
1439
2096
  }
1440
- f->defaultval.sint = val;
2097
+ f->defaultval.sint = ev->number;
1441
2098
  break;
1442
2099
  }
1443
- case UPB_TYPE_INT64: {
2100
+ case kUpb_CType_Int64: {
1444
2101
  long long val = strtoll(str, &end, 0);
1445
2102
  if (val > INT64_MAX || val < INT64_MIN || errno == ERANGE || *end) {
1446
2103
  goto invalid;
@@ -1448,7 +2105,7 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
1448
2105
  f->defaultval.sint = val;
1449
2106
  break;
1450
2107
  }
1451
- case UPB_TYPE_UINT32: {
2108
+ case kUpb_CType_UInt32: {
1452
2109
  unsigned long val = strtoul(str, &end, 0);
1453
2110
  if (val > UINT32_MAX || errno == ERANGE || *end) {
1454
2111
  goto invalid;
@@ -1456,7 +2113,7 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
1456
2113
  f->defaultval.uint = val;
1457
2114
  break;
1458
2115
  }
1459
- case UPB_TYPE_UINT64: {
2116
+ case kUpb_CType_UInt64: {
1460
2117
  unsigned long long val = strtoull(str, &end, 0);
1461
2118
  if (val > UINT64_MAX || errno == ERANGE || *end) {
1462
2119
  goto invalid;
@@ -1464,7 +2121,7 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
1464
2121
  f->defaultval.uint = val;
1465
2122
  break;
1466
2123
  }
1467
- case UPB_TYPE_DOUBLE: {
2124
+ case kUpb_CType_Double: {
1468
2125
  double val = strtod(str, &end);
1469
2126
  if (errno == ERANGE || *end) {
1470
2127
  goto invalid;
@@ -1472,7 +2129,7 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
1472
2129
  f->defaultval.dbl = val;
1473
2130
  break;
1474
2131
  }
1475
- case UPB_TYPE_FLOAT: {
2132
+ case kUpb_CType_Float: {
1476
2133
  float val = strtof(str, &end);
1477
2134
  if (errno == ERANGE || *end) {
1478
2135
  goto invalid;
@@ -1480,75 +2137,78 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
1480
2137
  f->defaultval.flt = val;
1481
2138
  break;
1482
2139
  }
1483
- case UPB_TYPE_BOOL: {
2140
+ case kUpb_CType_Bool: {
1484
2141
  if (streql2(str, len, "false")) {
1485
2142
  f->defaultval.boolean = false;
1486
2143
  } else if (streql2(str, len, "true")) {
1487
2144
  f->defaultval.boolean = true;
1488
2145
  } else {
2146
+ goto invalid;
1489
2147
  }
1490
2148
  break;
1491
2149
  }
1492
- case UPB_TYPE_STRING:
2150
+ case kUpb_CType_String:
1493
2151
  f->defaultval.str = newstr(ctx, str, len);
1494
2152
  break;
1495
- case UPB_TYPE_BYTES:
1496
- /* XXX: need to interpret the C-escaped value. */
1497
- f->defaultval.str = newstr(ctx, str, len);
2153
+ case kUpb_CType_Bytes:
2154
+ f->defaultval.str = unescape(ctx, f, str, len);
1498
2155
  break;
1499
- case UPB_TYPE_MESSAGE:
2156
+ case kUpb_CType_Message:
1500
2157
  /* Should not have a default value. */
1501
2158
  symtab_errf(ctx, "Message should not have a default (%s)",
1502
- upb_fielddef_fullname(f));
2159
+ upb_FieldDef_FullName(f));
1503
2160
  }
1504
2161
 
1505
2162
  return;
1506
2163
 
1507
2164
  invalid:
1508
- symtab_errf(ctx, "Invalid default '%.*s' for field %s", (int)len, str,
1509
- upb_fielddef_fullname(f));
2165
+ symtab_errf(ctx, "Invalid default '%.*s' for field %s of type %d", (int)len,
2166
+ str, upb_FieldDef_FullName(f), (int)upb_FieldDef_Type(f));
1510
2167
  }
1511
2168
 
1512
- static void set_default_default(symtab_addctx *ctx, upb_fielddef *f) {
1513
- switch (upb_fielddef_type(f)) {
1514
- case UPB_TYPE_INT32:
1515
- case UPB_TYPE_INT64:
1516
- case UPB_TYPE_ENUM:
2169
+ static void set_default_default(symtab_addctx* ctx, upb_FieldDef* f) {
2170
+ switch (upb_FieldDef_CType(f)) {
2171
+ case kUpb_CType_Int32:
2172
+ case kUpb_CType_Int64:
1517
2173
  f->defaultval.sint = 0;
1518
2174
  break;
1519
- case UPB_TYPE_UINT64:
1520
- case UPB_TYPE_UINT32:
2175
+ case kUpb_CType_UInt64:
2176
+ case kUpb_CType_UInt32:
1521
2177
  f->defaultval.uint = 0;
1522
2178
  break;
1523
- case UPB_TYPE_DOUBLE:
1524
- case UPB_TYPE_FLOAT:
2179
+ case kUpb_CType_Double:
2180
+ case kUpb_CType_Float:
1525
2181
  f->defaultval.dbl = 0;
1526
2182
  break;
1527
- case UPB_TYPE_STRING:
1528
- case UPB_TYPE_BYTES:
2183
+ case kUpb_CType_String:
2184
+ case kUpb_CType_Bytes:
1529
2185
  f->defaultval.str = newstr(ctx, NULL, 0);
1530
2186
  break;
1531
- case UPB_TYPE_BOOL:
2187
+ case kUpb_CType_Bool:
1532
2188
  f->defaultval.boolean = false;
1533
2189
  break;
1534
- case UPB_TYPE_MESSAGE:
2190
+ case kUpb_CType_Enum:
2191
+ f->defaultval.sint = f->sub.enumdef->values[0].number;
2192
+ case kUpb_CType_Message:
1535
2193
  break;
1536
2194
  }
1537
2195
  }
1538
2196
 
1539
2197
  static void create_fielddef(
1540
- symtab_addctx *ctx, const char *prefix, upb_msgdef *m,
1541
- const google_protobuf_FieldDescriptorProto *field_proto) {
1542
- upb_fielddef *f;
1543
- const google_protobuf_FieldOptions *options;
1544
- upb_strview name;
1545
- const char *full_name;
1546
- const char *json_name;
1547
- const char *shortname;
1548
- uint32_t field_number;
2198
+ symtab_addctx* ctx, const char* prefix, upb_MessageDef* m,
2199
+ const google_protobuf_FieldDescriptorProto* field_proto,
2200
+ const upb_FieldDef* _f, bool is_extension) {
2201
+ upb_FieldDef* f = (upb_FieldDef*)_f;
2202
+ upb_StringView name;
2203
+ const char* full_name;
2204
+ const char* json_name;
2205
+ const char* shortname;
2206
+ int32_t field_number;
2207
+
2208
+ f->file = ctx->file; /* Must happen prior to symtab_add(). */
1549
2209
 
1550
2210
  if (!google_protobuf_FieldDescriptorProto_has_name(field_proto)) {
1551
- symtab_errf(ctx, "field has no name (%s)", upb_msgdef_fullname(m));
2211
+ symtab_errf(ctx, "field has no name");
1552
2212
  }
1553
2213
 
1554
2214
  name = google_protobuf_FieldDescriptorProto_name(field_proto);
@@ -1559,57 +2219,94 @@ static void create_fielddef(
1559
2219
  if (google_protobuf_FieldDescriptorProto_has_json_name(field_proto)) {
1560
2220
  json_name = strviewdup(
1561
2221
  ctx, google_protobuf_FieldDescriptorProto_json_name(field_proto));
2222
+ f->has_json_name_ = true;
1562
2223
  } else {
1563
2224
  json_name = makejsonname(ctx, shortname);
2225
+ f->has_json_name_ = false;
1564
2226
  }
1565
2227
 
1566
2228
  field_number = google_protobuf_FieldDescriptorProto_number(field_proto);
1567
2229
 
1568
- if (field_number == 0 || field_number > UPB_MAX_FIELDNUMBER) {
1569
- symtab_errf(ctx, "invalid field number (%u)", field_number);
1570
- }
2230
+ f->full_name = full_name;
2231
+ f->json_name = json_name;
2232
+ f->label_ = (int)google_protobuf_FieldDescriptorProto_label(field_proto);
2233
+ f->number_ = field_number;
2234
+ f->scope.oneof = NULL;
2235
+ f->proto3_optional_ =
2236
+ google_protobuf_FieldDescriptorProto_proto3_optional(field_proto);
1571
2237
 
1572
- if (m) {
1573
- /* direct message field. */
1574
- upb_value v, field_v, json_v;
1575
- size_t json_size;
2238
+ bool has_type = google_protobuf_FieldDescriptorProto_has_type(field_proto);
2239
+ bool has_type_name =
2240
+ google_protobuf_FieldDescriptorProto_has_type_name(field_proto);
1576
2241
 
1577
- f = (upb_fielddef*)&m->fields[m->field_count];
1578
- f->index_ = m->field_count++;
1579
- f->msgdef = m;
1580
- f->is_extension_ = false;
2242
+ f->type_ = (int)google_protobuf_FieldDescriptorProto_type(field_proto);
1581
2243
 
1582
- if (upb_strtable_lookup(&m->ntof, shortname, NULL)) {
1583
- symtab_errf(ctx, "duplicate field name (%s)", shortname);
2244
+ if (has_type) {
2245
+ switch (f->type_) {
2246
+ case kUpb_FieldType_Message:
2247
+ case kUpb_FieldType_Group:
2248
+ case kUpb_FieldType_Enum:
2249
+ if (!has_type_name) {
2250
+ symtab_errf(ctx, "field of type %d requires type name (%s)",
2251
+ (int)f->type_, full_name);
2252
+ }
2253
+ break;
2254
+ default:
2255
+ if (has_type_name) {
2256
+ symtab_errf(ctx, "invalid type for field with type_name set (%s, %d)",
2257
+ full_name, (int)f->type_);
2258
+ }
1584
2259
  }
2260
+ } else if (has_type_name) {
2261
+ f->type_ =
2262
+ FIELD_TYPE_UNSPECIFIED; // We'll fill this in in resolve_fielddef().
2263
+ }
1585
2264
 
1586
- if (upb_strtable_lookup(&m->ntof, json_name, NULL)) {
1587
- symtab_errf(ctx, "duplicate json_name (%s)", json_name);
1588
- }
2265
+ if (!is_extension) {
2266
+ /* direct message field. */
2267
+ upb_value v, field_v, json_v, existing_v;
2268
+ size_t json_size;
1589
2269
 
1590
- if (upb_inttable_lookup(&m->itof, field_number, NULL)) {
1591
- symtab_errf(ctx, "duplicate field number (%u)", field_number);
2270
+ if (field_number <= 0 || field_number > kUpb_MaxFieldNumber) {
2271
+ symtab_errf(ctx, "invalid field number (%u)", field_number);
1592
2272
  }
1593
2273
 
2274
+ f->index_ = f - m->fields;
2275
+ f->msgdef = m;
2276
+ f->is_extension_ = false;
2277
+
1594
2278
  field_v = pack_def(f, UPB_DEFTYPE_FIELD);
1595
2279
  json_v = pack_def(f, UPB_DEFTYPE_FIELD_JSONNAME);
1596
2280
  v = upb_value_constptr(f);
1597
2281
  json_size = strlen(json_name);
1598
2282
 
2283
+ if (upb_strtable_lookup(&m->ntof, shortname, &existing_v)) {
2284
+ symtab_errf(ctx, "duplicate field name (%s)", shortname);
2285
+ }
2286
+
1599
2287
  CHK_OOM(upb_strtable_insert(&m->ntof, name.data, name.size, field_v,
1600
2288
  ctx->arena));
1601
- CHK_OOM(upb_inttable_insert(&m->itof, field_number, v, ctx->arena));
1602
2289
 
1603
2290
  if (strcmp(shortname, json_name) != 0) {
1604
- upb_strtable_insert(&m->ntof, json_name, json_size, json_v, ctx->arena);
2291
+ if (upb_strtable_lookup(&m->ntof, json_name, &v)) {
2292
+ symtab_errf(ctx, "duplicate json_name (%s)", json_name);
2293
+ } else {
2294
+ CHK_OOM(upb_strtable_insert(&m->ntof, json_name, json_size, json_v,
2295
+ ctx->arena));
2296
+ }
1605
2297
  }
1606
2298
 
1607
- if (ctx->layouts) {
1608
- const upb_msglayout_field *fields = m->layout->fields;
2299
+ if (upb_inttable_lookup(&m->itof, field_number, NULL)) {
2300
+ symtab_errf(ctx, "duplicate field number (%u)", field_number);
2301
+ }
2302
+
2303
+ CHK_OOM(upb_inttable_insert(&m->itof, field_number, v, ctx->arena));
2304
+
2305
+ if (ctx->layout) {
2306
+ const upb_MiniTable_Field* fields = m->layout->fields;
1609
2307
  int count = m->layout->field_count;
1610
2308
  bool found = false;
1611
- int i;
1612
- for (i = 0; i < count; i++) {
2309
+ for (int i = 0; i < count; i++) {
1613
2310
  if (fields[i].number == field_number) {
1614
2311
  f->layout_index = i;
1615
2312
  found = true;
@@ -1620,37 +2317,41 @@ static void create_fielddef(
1620
2317
  }
1621
2318
  } else {
1622
2319
  /* extension field. */
1623
- f = (upb_fielddef*)&ctx->file->exts[ctx->file->ext_count++];
1624
2320
  f->is_extension_ = true;
1625
- symtab_add(ctx, full_name, pack_def(f, UPB_DEFTYPE_FIELD));
2321
+ f->scope.extension_scope = m;
2322
+ symtab_add(ctx, full_name, pack_def(f, UPB_DEFTYPE_EXT));
2323
+ f->layout_index = ctx->ext_count++;
2324
+ if (ctx->layout) {
2325
+ UPB_ASSERT(ctx->file->ext_layouts[f->layout_index]->field.number ==
2326
+ field_number);
2327
+ }
1626
2328
  }
1627
2329
 
1628
- f->full_name = full_name;
1629
- f->json_name = json_name;
1630
- f->file = ctx->file;
1631
- f->type_ = (int)google_protobuf_FieldDescriptorProto_type(field_proto);
1632
- f->label_ = (int)google_protobuf_FieldDescriptorProto_label(field_proto);
1633
- f->number_ = field_number;
1634
- f->oneof = NULL;
1635
- f->proto3_optional_ =
1636
- google_protobuf_FieldDescriptorProto_proto3_optional(field_proto);
2330
+ if (f->type_ < kUpb_FieldType_Double || f->type_ > kUpb_FieldType_SInt64) {
2331
+ symtab_errf(ctx, "invalid type for field %s (%d)", f->full_name, f->type_);
2332
+ }
2333
+
2334
+ if (f->label_ < kUpb_Label_Optional || f->label_ > kUpb_Label_Repeated) {
2335
+ symtab_errf(ctx, "invalid label for field %s (%d)", f->full_name,
2336
+ f->label_);
2337
+ }
1637
2338
 
1638
2339
  /* We can't resolve the subdef or (in the case of extensions) the containing
1639
2340
  * message yet, because it may not have been defined yet. We stash a pointer
1640
2341
  * to the field_proto until later when we can properly resolve it. */
1641
2342
  f->sub.unresolved = field_proto;
1642
2343
 
1643
- if (f->label_ == UPB_LABEL_REQUIRED && f->file->syntax == UPB_SYNTAX_PROTO3) {
2344
+ if (f->label_ == kUpb_Label_Required &&
2345
+ f->file->syntax == kUpb_Syntax_Proto3) {
1644
2346
  symtab_errf(ctx, "proto3 fields cannot be required (%s)", f->full_name);
1645
2347
  }
1646
2348
 
1647
2349
  if (google_protobuf_FieldDescriptorProto_has_oneof_index(field_proto)) {
1648
- int oneof_index =
1649
- google_protobuf_FieldDescriptorProto_oneof_index(field_proto);
1650
- upb_oneofdef *oneof;
2350
+ uint32_t oneof_index = google_protobuf_FieldDescriptorProto_oneof_index(field_proto);
2351
+ upb_OneofDef* oneof;
1651
2352
  upb_value v = upb_value_constptr(f);
1652
2353
 
1653
- if (upb_fielddef_label(f) != UPB_LABEL_OPTIONAL) {
2354
+ if (upb_FieldDef_Label(f) != kUpb_Label_Optional) {
1654
2355
  symtab_errf(ctx, "fields in oneof must have OPTIONAL label (%s)",
1655
2356
  f->full_name);
1656
2357
  }
@@ -1664,8 +2365,8 @@ static void create_fielddef(
1664
2365
  symtab_errf(ctx, "oneof_index out of range (%s)", f->full_name);
1665
2366
  }
1666
2367
 
1667
- oneof = (upb_oneofdef *)&m->oneofs[oneof_index];
1668
- f->oneof = oneof;
2368
+ oneof = (upb_OneofDef*)&m->oneofs[oneof_index];
2369
+ f->scope.oneof = oneof;
1669
2370
 
1670
2371
  oneof->field_count++;
1671
2372
  if (f->proto3_optional_) {
@@ -1675,43 +2376,184 @@ static void create_fielddef(
1675
2376
  CHK_OOM(
1676
2377
  upb_strtable_insert(&oneof->ntof, name.data, name.size, v, ctx->arena));
1677
2378
  } else {
1678
- f->oneof = NULL;
1679
2379
  if (f->proto3_optional_) {
1680
2380
  symtab_errf(ctx, "field with proto3_optional was not in a oneof (%s)",
1681
2381
  f->full_name);
1682
2382
  }
1683
2383
  }
1684
2384
 
1685
- options = google_protobuf_FieldDescriptorProto_has_options(field_proto) ?
1686
- google_protobuf_FieldDescriptorProto_options(field_proto) : NULL;
2385
+ SET_OPTIONS(f->opts, FieldDescriptorProto, FieldOptions, field_proto);
1687
2386
 
1688
- if (options && google_protobuf_FieldOptions_has_packed(options)) {
1689
- f->packed_ = google_protobuf_FieldOptions_packed(options);
2387
+ if (google_protobuf_FieldOptions_has_packed(f->opts)) {
2388
+ f->packed_ = google_protobuf_FieldOptions_packed(f->opts);
1690
2389
  } else {
1691
2390
  /* Repeated fields default to packed for proto3 only. */
1692
- f->packed_ = upb_fielddef_isprimitive(f) &&
1693
- f->label_ == UPB_LABEL_REPEATED && f->file->syntax == UPB_SYNTAX_PROTO3;
2391
+ f->packed_ = upb_FieldDef_IsPrimitive(f) &&
2392
+ f->label_ == kUpb_Label_Repeated &&
2393
+ f->file->syntax == kUpb_Syntax_Proto3;
2394
+ }
2395
+ }
2396
+
2397
+ static void create_service(
2398
+ symtab_addctx* ctx, const google_protobuf_ServiceDescriptorProto* svc_proto,
2399
+ const upb_ServiceDef* _s) {
2400
+ upb_ServiceDef* s = (upb_ServiceDef*)_s;
2401
+ upb_StringView name;
2402
+ const google_protobuf_MethodDescriptorProto* const* methods;
2403
+ size_t i, n;
2404
+
2405
+ s->file = ctx->file; /* Must happen prior to symtab_add. */
2406
+
2407
+ name = google_protobuf_ServiceDescriptorProto_name(svc_proto);
2408
+ check_ident(ctx, name, false);
2409
+ s->full_name = makefullname(ctx, ctx->file->package, name);
2410
+ symtab_add(ctx, s->full_name, pack_def(s, UPB_DEFTYPE_SERVICE));
2411
+
2412
+ methods = google_protobuf_ServiceDescriptorProto_method(svc_proto, &n);
2413
+
2414
+ s->method_count = n;
2415
+ s->methods = symtab_alloc(ctx, sizeof(*s->methods) * n);
2416
+
2417
+ SET_OPTIONS(s->opts, ServiceDescriptorProto, ServiceOptions, svc_proto);
2418
+
2419
+ for (i = 0; i < n; i++) {
2420
+ const google_protobuf_MethodDescriptorProto* method_proto = methods[i];
2421
+ upb_MethodDef* m = (upb_MethodDef*)&s->methods[i];
2422
+ upb_StringView name =
2423
+ google_protobuf_MethodDescriptorProto_name(method_proto);
2424
+
2425
+ m->service = s;
2426
+ m->full_name = makefullname(ctx, s->full_name, name);
2427
+ m->index = i;
2428
+ m->client_streaming =
2429
+ google_protobuf_MethodDescriptorProto_client_streaming(method_proto);
2430
+ m->server_streaming =
2431
+ google_protobuf_MethodDescriptorProto_server_streaming(method_proto);
2432
+ m->input_type = symtab_resolve(
2433
+ ctx, m->full_name, m->full_name,
2434
+ google_protobuf_MethodDescriptorProto_input_type(method_proto),
2435
+ UPB_DEFTYPE_MSG);
2436
+ m->output_type = symtab_resolve(
2437
+ ctx, m->full_name, m->full_name,
2438
+ google_protobuf_MethodDescriptorProto_output_type(method_proto),
2439
+ UPB_DEFTYPE_MSG);
2440
+
2441
+ SET_OPTIONS(m->opts, MethodDescriptorProto, MethodOptions, method_proto);
2442
+ }
2443
+ }
2444
+
2445
+ static int count_bits_debug(uint64_t x) {
2446
+ // For assertions only, speed does not matter.
2447
+ int n = 0;
2448
+ while (x) {
2449
+ if (x & 1) n++;
2450
+ x >>= 1;
2451
+ }
2452
+ return n;
2453
+ }
2454
+
2455
+ static int compare_int32(const void* a_ptr, const void* b_ptr) {
2456
+ int32_t a = *(int32_t*)a_ptr;
2457
+ int32_t b = *(int32_t*)b_ptr;
2458
+ return a < b ? -1 : (a == b ? 0 : 1);
2459
+ }
2460
+
2461
+ upb_MiniTable_Enum* create_enumlayout(symtab_addctx* ctx,
2462
+ const upb_EnumDef* e) {
2463
+ int n = 0;
2464
+ uint64_t mask = 0;
2465
+
2466
+ for (int i = 0; i < e->value_count; i++) {
2467
+ uint32_t val = (uint32_t)e->values[i].number;
2468
+ if (val < 64) {
2469
+ mask |= 1ULL << val;
2470
+ } else {
2471
+ n++;
2472
+ }
1694
2473
  }
1695
2474
 
1696
- if (options) {
1697
- f->lazy_ = google_protobuf_FieldOptions_lazy(options);
1698
- } else {
1699
- f->lazy_ = false;
2475
+ int32_t* values = symtab_alloc(ctx, sizeof(*values) * n);
2476
+
2477
+ if (n) {
2478
+ int32_t* p = values;
2479
+
2480
+ // Add values outside the bitmask range to the list, as described in the
2481
+ // comments for upb_MiniTable_Enum.
2482
+ for (int i = 0; i < e->value_count; i++) {
2483
+ int32_t val = e->values[i].number;
2484
+ if ((uint32_t)val >= 64) {
2485
+ *p++ = val;
2486
+ }
2487
+ }
2488
+ UPB_ASSERT(p == values + n);
2489
+ }
2490
+
2491
+ // Enums can have duplicate values; we must sort+uniq them.
2492
+ if (values) qsort(values, n, sizeof(*values), &compare_int32);
2493
+
2494
+ int dst = 0;
2495
+ for (int i = 0; i < n; dst++) {
2496
+ int32_t val = values[i];
2497
+ while (i < n && values[i] == val) i++; // Skip duplicates.
2498
+ values[dst] = val;
2499
+ }
2500
+ n = dst;
2501
+
2502
+ UPB_ASSERT(upb_inttable_count(&e->iton) == n + count_bits_debug(mask));
2503
+
2504
+ upb_MiniTable_Enum* layout = symtab_alloc(ctx, sizeof(*layout));
2505
+ layout->value_count = n;
2506
+ layout->mask = mask;
2507
+ layout->values = values;
2508
+
2509
+ return layout;
2510
+ }
2511
+
2512
+ static void create_enumvaldef(
2513
+ symtab_addctx* ctx, const char* prefix,
2514
+ const google_protobuf_EnumValueDescriptorProto* val_proto, upb_EnumDef* e,
2515
+ int i) {
2516
+ upb_EnumValueDef* val = (upb_EnumValueDef*)&e->values[i];
2517
+ upb_StringView name =
2518
+ google_protobuf_EnumValueDescriptorProto_name(val_proto);
2519
+ upb_value v = upb_value_constptr(val);
2520
+
2521
+ val->parent = e; /* Must happen prior to symtab_add(). */
2522
+ val->full_name = makefullname(ctx, prefix, name);
2523
+ val->number = google_protobuf_EnumValueDescriptorProto_number(val_proto);
2524
+ symtab_add(ctx, val->full_name, pack_def(val, UPB_DEFTYPE_ENUMVAL));
2525
+
2526
+ SET_OPTIONS(val->opts, EnumValueDescriptorProto, EnumValueOptions, val_proto);
2527
+
2528
+ if (i == 0 && e->file->syntax == kUpb_Syntax_Proto3 && val->number != 0) {
2529
+ symtab_errf(ctx, "for proto3, the first enum value must be zero (%s)",
2530
+ e->full_name);
2531
+ }
2532
+
2533
+ CHK_OOM(upb_strtable_insert(&e->ntoi, name.data, name.size, v, ctx->arena));
2534
+
2535
+ // Multiple enumerators can have the same number, first one wins.
2536
+ if (!upb_inttable_lookup(&e->iton, val->number, NULL)) {
2537
+ CHK_OOM(upb_inttable_insert(&e->iton, val->number, v, ctx->arena));
1700
2538
  }
1701
2539
  }
1702
2540
 
1703
2541
  static void create_enumdef(
1704
- symtab_addctx *ctx, const char *prefix,
1705
- const google_protobuf_EnumDescriptorProto *enum_proto) {
1706
- upb_enumdef *e;
1707
- const google_protobuf_EnumValueDescriptorProto *const *values;
1708
- upb_strview name;
2542
+ symtab_addctx* ctx, const char* prefix,
2543
+ const google_protobuf_EnumDescriptorProto* enum_proto,
2544
+ const upb_MessageDef* containing_type, const upb_EnumDef* _e) {
2545
+ upb_EnumDef* e = (upb_EnumDef*)_e;
2546
+ ;
2547
+ const google_protobuf_EnumValueDescriptorProto* const* values;
2548
+ upb_StringView name;
1709
2549
  size_t i, n;
1710
2550
 
2551
+ e->file = ctx->file; /* Must happen prior to symtab_add() */
2552
+ e->containing_type = containing_type;
2553
+
1711
2554
  name = google_protobuf_EnumDescriptorProto_name(enum_proto);
1712
2555
  check_ident(ctx, name, false);
1713
2556
 
1714
- e = (upb_enumdef*)&ctx->file->enums[ctx->file->enum_count++];
1715
2557
  e->full_name = makefullname(ctx, prefix, name);
1716
2558
  symtab_add(ctx, e->full_name, pack_def(e, UPB_DEFTYPE_ENUM));
1717
2559
 
@@ -1719,225 +2561,371 @@ static void create_enumdef(
1719
2561
  CHK_OOM(upb_strtable_init(&e->ntoi, n, ctx->arena));
1720
2562
  CHK_OOM(upb_inttable_init(&e->iton, ctx->arena));
1721
2563
 
1722
- e->file = ctx->file;
1723
2564
  e->defaultval = 0;
2565
+ e->value_count = n;
2566
+ e->values = symtab_alloc(ctx, sizeof(*e->values) * n);
1724
2567
 
1725
2568
  if (n == 0) {
1726
2569
  symtab_errf(ctx, "enums must contain at least one value (%s)",
1727
2570
  e->full_name);
1728
2571
  }
1729
2572
 
1730
- for (i = 0; i < n; i++) {
1731
- const google_protobuf_EnumValueDescriptorProto *value = values[i];
1732
- upb_strview name = google_protobuf_EnumValueDescriptorProto_name(value);
1733
- char *name2 = strviewdup(ctx, name);
1734
- int32_t num = google_protobuf_EnumValueDescriptorProto_number(value);
1735
- upb_value v = upb_value_int32(num);
1736
-
1737
- if (i == 0 && e->file->syntax == UPB_SYNTAX_PROTO3 && num != 0) {
1738
- symtab_errf(ctx, "for proto3, the first enum value must be zero (%s)",
1739
- e->full_name);
1740
- }
2573
+ SET_OPTIONS(e->opts, EnumDescriptorProto, EnumOptions, enum_proto);
1741
2574
 
1742
- if (upb_strtable_lookup(&e->ntoi, name2, NULL)) {
1743
- symtab_errf(ctx, "duplicate enum label '%s'", name2);
1744
- }
2575
+ for (i = 0; i < n; i++) {
2576
+ create_enumvaldef(ctx, prefix, values[i], e, i);
2577
+ }
1745
2578
 
1746
- CHK_OOM(name2)
1747
- CHK_OOM(upb_strtable_insert(&e->ntoi, name2, strlen(name2), v, ctx->arena));
2579
+ upb_inttable_compact(&e->iton, ctx->arena);
1748
2580
 
1749
- if (!upb_inttable_lookup(&e->iton, num, NULL)) {
1750
- upb_value v = upb_value_cstr(name2);
1751
- CHK_OOM(upb_inttable_insert(&e->iton, num, v, ctx->arena));
2581
+ if (e->file->syntax == kUpb_Syntax_Proto2) {
2582
+ if (ctx->layout) {
2583
+ UPB_ASSERT(ctx->enum_count < ctx->layout->enum_count);
2584
+ e->layout = ctx->layout->enums[ctx->enum_count++];
2585
+ UPB_ASSERT(upb_inttable_count(&e->iton) ==
2586
+ e->layout->value_count + count_bits_debug(e->layout->mask));
2587
+ } else {
2588
+ e->layout = create_enumlayout(ctx, e);
1752
2589
  }
2590
+ } else {
2591
+ e->layout = NULL;
1753
2592
  }
1754
-
1755
- upb_inttable_compact(&e->iton, ctx->arena);
1756
2593
  }
1757
2594
 
1758
- static void create_msgdef(symtab_addctx *ctx, const char *prefix,
1759
- const google_protobuf_DescriptorProto *msg_proto) {
1760
- upb_msgdef *m;
1761
- const google_protobuf_MessageOptions *options;
1762
- const google_protobuf_OneofDescriptorProto *const *oneofs;
1763
- const google_protobuf_FieldDescriptorProto *const *fields;
1764
- const google_protobuf_EnumDescriptorProto *const *enums;
1765
- const google_protobuf_DescriptorProto *const *msgs;
1766
- size_t i, n_oneof, n_field, n;
1767
- upb_strview name;
2595
+ static void msgdef_create_nested(
2596
+ symtab_addctx* ctx, const google_protobuf_DescriptorProto* msg_proto,
2597
+ upb_MessageDef* m);
2598
+
2599
+ static void create_msgdef(symtab_addctx* ctx, const char* prefix,
2600
+ const google_protobuf_DescriptorProto* msg_proto,
2601
+ const upb_MessageDef* containing_type,
2602
+ const upb_MessageDef* _m) {
2603
+ upb_MessageDef* m = (upb_MessageDef*)_m;
2604
+ const google_protobuf_OneofDescriptorProto* const* oneofs;
2605
+ const google_protobuf_FieldDescriptorProto* const* fields;
2606
+ const google_protobuf_DescriptorProto_ExtensionRange* const* ext_ranges;
2607
+ size_t i, n_oneof, n_field, n_ext_range;
2608
+ upb_StringView name;
2609
+
2610
+ m->file = ctx->file; /* Must happen prior to symtab_add(). */
2611
+ m->containing_type = containing_type;
1768
2612
 
1769
2613
  name = google_protobuf_DescriptorProto_name(msg_proto);
1770
2614
  check_ident(ctx, name, false);
1771
2615
 
1772
- m = (upb_msgdef*)&ctx->file->msgs[ctx->file->msg_count++];
1773
2616
  m->full_name = makefullname(ctx, prefix, name);
1774
2617
  symtab_add(ctx, m->full_name, pack_def(m, UPB_DEFTYPE_MSG));
1775
2618
 
1776
2619
  oneofs = google_protobuf_DescriptorProto_oneof_decl(msg_proto, &n_oneof);
1777
2620
  fields = google_protobuf_DescriptorProto_field(msg_proto, &n_field);
2621
+ ext_ranges =
2622
+ google_protobuf_DescriptorProto_extension_range(msg_proto, &n_ext_range);
1778
2623
 
1779
2624
  CHK_OOM(upb_inttable_init(&m->itof, ctx->arena));
1780
2625
  CHK_OOM(upb_strtable_init(&m->ntof, n_oneof + n_field, ctx->arena));
1781
2626
 
1782
- m->file = ctx->file;
1783
- m->map_entry = false;
1784
-
1785
- options = google_protobuf_DescriptorProto_options(msg_proto);
1786
-
1787
- if (options) {
1788
- m->map_entry = google_protobuf_MessageOptions_map_entry(options);
1789
- }
1790
-
1791
- if (ctx->layouts) {
1792
- m->layout = *ctx->layouts;
1793
- ctx->layouts++;
2627
+ if (ctx->layout) {
2628
+ /* create_fielddef() below depends on this being set. */
2629
+ UPB_ASSERT(ctx->msg_count < ctx->layout->msg_count);
2630
+ m->layout = ctx->layout->msgs[ctx->msg_count++];
2631
+ UPB_ASSERT(n_field == m->layout->field_count);
1794
2632
  } else {
1795
2633
  /* Allocate now (to allow cross-linking), populate later. */
1796
- m->layout = symtab_alloc(
1797
- ctx, sizeof(*m->layout) + sizeof(_upb_fasttable_entry));
2634
+ m->layout =
2635
+ symtab_alloc(ctx, sizeof(*m->layout) + sizeof(_upb_FastTable_Entry));
1798
2636
  }
1799
2637
 
1800
- m->oneof_count = 0;
2638
+ SET_OPTIONS(m->opts, DescriptorProto, MessageOptions, msg_proto);
2639
+
2640
+ m->oneof_count = n_oneof;
1801
2641
  m->oneofs = symtab_alloc(ctx, sizeof(*m->oneofs) * n_oneof);
1802
2642
  for (i = 0; i < n_oneof; i++) {
1803
- create_oneofdef(ctx, m, oneofs[i]);
2643
+ create_oneofdef(ctx, m, oneofs[i], &m->oneofs[i]);
1804
2644
  }
1805
2645
 
1806
- m->field_count = 0;
2646
+ m->field_count = n_field;
1807
2647
  m->fields = symtab_alloc(ctx, sizeof(*m->fields) * n_field);
1808
2648
  for (i = 0; i < n_field; i++) {
1809
- create_fielddef(ctx, m->full_name, m, fields[i]);
2649
+ create_fielddef(ctx, m->full_name, m, fields[i], &m->fields[i],
2650
+ /* is_extension= */ false);
2651
+ }
2652
+
2653
+ m->ext_range_count = n_ext_range;
2654
+ m->ext_ranges = symtab_alloc(ctx, sizeof(*m->ext_ranges) * n_ext_range);
2655
+ for (i = 0; i < n_ext_range; i++) {
2656
+ const google_protobuf_DescriptorProto_ExtensionRange* r = ext_ranges[i];
2657
+ upb_ExtensionRange* r_def = (upb_ExtensionRange*)&m->ext_ranges[i];
2658
+ int32_t start = google_protobuf_DescriptorProto_ExtensionRange_start(r);
2659
+ int32_t end = google_protobuf_DescriptorProto_ExtensionRange_end(r);
2660
+ int32_t max =
2661
+ google_protobuf_MessageOptions_message_set_wire_format(m->opts)
2662
+ ? INT32_MAX
2663
+ : kUpb_MaxFieldNumber + 1;
2664
+
2665
+ // A full validation would also check that each range is disjoint, and that
2666
+ // none of the fields overlap with the extension ranges, but we are just
2667
+ // sanity checking here.
2668
+ if (start < 1 || end <= start || end > max) {
2669
+ symtab_errf(ctx, "Extension range (%d, %d) is invalid, message=%s\n",
2670
+ (int)start, (int)end, m->full_name);
2671
+ }
2672
+
2673
+ r_def->start = start;
2674
+ r_def->end = end;
2675
+ SET_OPTIONS(r_def->opts, DescriptorProto_ExtensionRange,
2676
+ ExtensionRangeOptions, r);
1810
2677
  }
1811
2678
 
1812
2679
  finalize_oneofs(ctx, m);
1813
2680
  assign_msg_wellknowntype(m);
1814
2681
  upb_inttable_compact(&m->itof, ctx->arena);
1815
-
1816
- /* This message is built. Now build nested messages and enums. */
1817
-
1818
- enums = google_protobuf_DescriptorProto_enum_type(msg_proto, &n);
1819
- for (i = 0; i < n; i++) {
1820
- create_enumdef(ctx, m->full_name, enums[i]);
1821
- }
1822
-
1823
- msgs = google_protobuf_DescriptorProto_nested_type(msg_proto, &n);
1824
- for (i = 0; i < n; i++) {
1825
- create_msgdef(ctx, m->full_name, msgs[i]);
1826
- }
1827
- }
1828
-
1829
- static void count_types_in_msg(const google_protobuf_DescriptorProto *msg_proto,
1830
- upb_filedef *file) {
1831
- const google_protobuf_DescriptorProto *const *msgs;
1832
- size_t i, n;
1833
-
1834
- file->msg_count++;
1835
-
1836
- msgs = google_protobuf_DescriptorProto_nested_type(msg_proto, &n);
1837
- for (i = 0; i < n; i++) {
1838
- count_types_in_msg(msgs[i], file);
2682
+ msgdef_create_nested(ctx, msg_proto, m);
2683
+ }
2684
+
2685
+ static void msgdef_create_nested(
2686
+ symtab_addctx* ctx, const google_protobuf_DescriptorProto* msg_proto,
2687
+ upb_MessageDef* m) {
2688
+ size_t n;
2689
+
2690
+ const google_protobuf_EnumDescriptorProto* const* enums =
2691
+ google_protobuf_DescriptorProto_enum_type(msg_proto, &n);
2692
+ m->nested_enum_count = n;
2693
+ m->nested_enums = symtab_alloc(ctx, sizeof(*m->nested_enums) * n);
2694
+ for (size_t i = 0; i < n; i++) {
2695
+ m->nested_enum_count = i + 1;
2696
+ create_enumdef(ctx, m->full_name, enums[i], m, &m->nested_enums[i]);
2697
+ }
2698
+
2699
+ const google_protobuf_FieldDescriptorProto* const* exts =
2700
+ google_protobuf_DescriptorProto_extension(msg_proto, &n);
2701
+ m->nested_ext_count = n;
2702
+ m->nested_exts = symtab_alloc(ctx, sizeof(*m->nested_exts) * n);
2703
+ for (size_t i = 0; i < n; i++) {
2704
+ create_fielddef(ctx, m->full_name, m, exts[i], &m->nested_exts[i],
2705
+ /* is_extension= */ true);
2706
+ ((upb_FieldDef*)&m->nested_exts[i])->index_ = i;
2707
+ }
2708
+
2709
+ const google_protobuf_DescriptorProto* const* msgs =
2710
+ google_protobuf_DescriptorProto_nested_type(msg_proto, &n);
2711
+ m->nested_msg_count = n;
2712
+ m->nested_msgs = symtab_alloc(ctx, sizeof(*m->nested_msgs) * n);
2713
+ for (size_t i = 0; i < n; i++) {
2714
+ create_msgdef(ctx, m->full_name, msgs[i], m, &m->nested_msgs[i]);
2715
+ }
2716
+ }
2717
+
2718
+ static void resolve_subdef(symtab_addctx* ctx, const char* prefix,
2719
+ upb_FieldDef* f) {
2720
+ const google_protobuf_FieldDescriptorProto* field_proto = f->sub.unresolved;
2721
+ upb_StringView name =
2722
+ google_protobuf_FieldDescriptorProto_type_name(field_proto);
2723
+ bool has_name =
2724
+ google_protobuf_FieldDescriptorProto_has_type_name(field_proto);
2725
+ switch ((int)f->type_) {
2726
+ case FIELD_TYPE_UNSPECIFIED: {
2727
+ // Type was not specified and must be inferred.
2728
+ UPB_ASSERT(has_name);
2729
+ upb_deftype_t type;
2730
+ const void* def =
2731
+ symtab_resolveany(ctx, f->full_name, prefix, name, &type);
2732
+ switch (type) {
2733
+ case UPB_DEFTYPE_ENUM:
2734
+ f->sub.enumdef = def;
2735
+ f->type_ = kUpb_FieldType_Enum;
2736
+ break;
2737
+ case UPB_DEFTYPE_MSG:
2738
+ f->sub.msgdef = def;
2739
+ f->type_ = kUpb_FieldType_Message; // It appears there is no way of
2740
+ // this being a group.
2741
+ break;
2742
+ default:
2743
+ symtab_errf(ctx, "Couldn't resolve type name for field %s",
2744
+ f->full_name);
2745
+ }
2746
+ }
2747
+ case kUpb_FieldType_Message:
2748
+ case kUpb_FieldType_Group:
2749
+ UPB_ASSERT(has_name);
2750
+ f->sub.msgdef =
2751
+ symtab_resolve(ctx, f->full_name, prefix, name, UPB_DEFTYPE_MSG);
2752
+ break;
2753
+ case kUpb_FieldType_Enum:
2754
+ UPB_ASSERT(has_name);
2755
+ f->sub.enumdef =
2756
+ symtab_resolve(ctx, f->full_name, prefix, name, UPB_DEFTYPE_ENUM);
2757
+ break;
2758
+ default:
2759
+ // No resolution necessary.
2760
+ break;
1839
2761
  }
1840
-
1841
- google_protobuf_DescriptorProto_enum_type(msg_proto, &n);
1842
- file->enum_count += n;
1843
-
1844
- google_protobuf_DescriptorProto_extension(msg_proto, &n);
1845
- file->ext_count += n;
1846
2762
  }
1847
2763
 
1848
- static void count_types_in_file(
1849
- const google_protobuf_FileDescriptorProto *file_proto,
1850
- upb_filedef *file) {
1851
- const google_protobuf_DescriptorProto *const *msgs;
1852
- size_t i, n;
1853
-
1854
- msgs = google_protobuf_FileDescriptorProto_message_type(file_proto, &n);
1855
- for (i = 0; i < n; i++) {
1856
- count_types_in_msg(msgs[i], file);
2764
+ static void resolve_extension(
2765
+ symtab_addctx* ctx, const char* prefix, upb_FieldDef* f,
2766
+ const google_protobuf_FieldDescriptorProto* field_proto) {
2767
+ if (!google_protobuf_FieldDescriptorProto_has_extendee(field_proto)) {
2768
+ symtab_errf(ctx, "extension for field '%s' had no extendee", f->full_name);
1857
2769
  }
1858
2770
 
1859
- google_protobuf_FileDescriptorProto_enum_type(file_proto, &n);
1860
- file->enum_count += n;
2771
+ upb_StringView name =
2772
+ google_protobuf_FieldDescriptorProto_extendee(field_proto);
2773
+ const upb_MessageDef* m =
2774
+ symtab_resolve(ctx, f->full_name, prefix, name, UPB_DEFTYPE_MSG);
2775
+ f->msgdef = m;
1861
2776
 
1862
- google_protobuf_FileDescriptorProto_extension(file_proto, &n);
1863
- file->ext_count += n;
1864
- }
2777
+ bool found = false;
1865
2778
 
1866
- static void resolve_fielddef(symtab_addctx *ctx, const char *prefix,
1867
- upb_fielddef *f) {
1868
- upb_strview name;
1869
- const google_protobuf_FieldDescriptorProto *field_proto = f->sub.unresolved;
1870
-
1871
- if (f->is_extension_) {
1872
- if (!google_protobuf_FieldDescriptorProto_has_extendee(field_proto)) {
1873
- symtab_errf(ctx, "extension for field '%s' had no extendee",
1874
- f->full_name);
2779
+ for (int i = 0, n = m->ext_range_count; i < n; i++) {
2780
+ const upb_ExtensionRange* r = &m->ext_ranges[i];
2781
+ if (r->start <= f->number_ && f->number_ < r->end) {
2782
+ found = true;
2783
+ break;
1875
2784
  }
1876
-
1877
- name = google_protobuf_FieldDescriptorProto_extendee(field_proto);
1878
- f->msgdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_MSG);
1879
2785
  }
1880
2786
 
1881
- if ((upb_fielddef_issubmsg(f) || f->type_ == UPB_DESCRIPTOR_TYPE_ENUM) &&
1882
- !google_protobuf_FieldDescriptorProto_has_type_name(field_proto)) {
1883
- symtab_errf(ctx, "field '%s' is missing type name", f->full_name);
2787
+ if (!found) {
2788
+ symtab_errf(ctx,
2789
+ "field number %u in extension %s has no extension range in "
2790
+ "message %s",
2791
+ (unsigned)f->number_, f->full_name, f->msgdef->full_name);
1884
2792
  }
1885
2793
 
1886
- name = google_protobuf_FieldDescriptorProto_type_name(field_proto);
1887
-
1888
- if (upb_fielddef_issubmsg(f)) {
1889
- f->sub.msgdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_MSG);
1890
- } else if (f->type_ == UPB_DESCRIPTOR_TYPE_ENUM) {
1891
- f->sub.enumdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_ENUM);
2794
+ const upb_MiniTable_Extension* ext = ctx->file->ext_layouts[f->layout_index];
2795
+ if (ctx->layout) {
2796
+ UPB_ASSERT(upb_FieldDef_Number(f) == ext->field.number);
2797
+ } else {
2798
+ upb_MiniTable_Extension* mut_ext = (upb_MiniTable_Extension*)ext;
2799
+ fill_fieldlayout(&mut_ext->field, f);
2800
+ mut_ext->field.presence = 0;
2801
+ mut_ext->field.offset = 0;
2802
+ mut_ext->field.submsg_index = 0;
2803
+ mut_ext->extendee = f->msgdef->layout;
2804
+ mut_ext->sub.submsg = f->sub.msgdef->layout;
1892
2805
  }
1893
2806
 
1894
- /* Have to delay resolving of the default value until now because of the enum
1895
- * case, since enum defaults are specified with a label. */
2807
+ CHK_OOM(upb_inttable_insert(&ctx->symtab->exts, (uintptr_t)ext,
2808
+ upb_value_constptr(f), ctx->arena));
2809
+ }
2810
+
2811
+ static void resolve_default(
2812
+ symtab_addctx* ctx, upb_FieldDef* f,
2813
+ const google_protobuf_FieldDescriptorProto* field_proto) {
2814
+ // Have to delay resolving of the default value until now because of the enum
2815
+ // case, since enum defaults are specified with a label.
1896
2816
  if (google_protobuf_FieldDescriptorProto_has_default_value(field_proto)) {
1897
- upb_strview defaultval =
2817
+ upb_StringView defaultval =
1898
2818
  google_protobuf_FieldDescriptorProto_default_value(field_proto);
1899
2819
 
1900
- if (f->file->syntax == UPB_SYNTAX_PROTO3) {
2820
+ if (f->file->syntax == kUpb_Syntax_Proto3) {
1901
2821
  symtab_errf(ctx, "proto3 fields cannot have explicit defaults (%s)",
1902
2822
  f->full_name);
1903
2823
  }
1904
2824
 
1905
- if (upb_fielddef_issubmsg(f)) {
2825
+ if (upb_FieldDef_IsSubMessage(f)) {
1906
2826
  symtab_errf(ctx, "message fields cannot have explicit defaults (%s)",
1907
2827
  f->full_name);
1908
2828
  }
1909
2829
 
1910
2830
  parse_default(ctx, defaultval.data, defaultval.size, f);
2831
+ f->has_default = true;
1911
2832
  } else {
1912
2833
  set_default_default(ctx, f);
2834
+ f->has_default = false;
2835
+ }
2836
+ }
2837
+
2838
+ static void resolve_fielddef(symtab_addctx* ctx, const char* prefix,
2839
+ upb_FieldDef* f) {
2840
+ // We have to stash this away since resolve_subdef() may overwrite it.
2841
+ const google_protobuf_FieldDescriptorProto* field_proto = f->sub.unresolved;
2842
+
2843
+ resolve_subdef(ctx, prefix, f);
2844
+ resolve_default(ctx, f, field_proto);
2845
+
2846
+ if (f->is_extension_) {
2847
+ resolve_extension(ctx, prefix, f, field_proto);
2848
+ }
2849
+ }
2850
+
2851
+ static void resolve_msgdef(symtab_addctx* ctx, upb_MessageDef* m) {
2852
+ for (int i = 0; i < m->field_count; i++) {
2853
+ resolve_fielddef(ctx, m->full_name, (upb_FieldDef*)&m->fields[i]);
2854
+ }
2855
+
2856
+ m->in_message_set = false;
2857
+ for (int i = 0; i < m->nested_ext_count; i++) {
2858
+ upb_FieldDef* ext = (upb_FieldDef*)&m->nested_exts[i];
2859
+ resolve_fielddef(ctx, m->full_name, ext);
2860
+ if (ext->type_ == kUpb_FieldType_Message &&
2861
+ ext->label_ == kUpb_Label_Optional && ext->sub.msgdef == m &&
2862
+ google_protobuf_MessageOptions_message_set_wire_format(
2863
+ ext->msgdef->opts)) {
2864
+ m->in_message_set = true;
2865
+ }
2866
+ }
2867
+
2868
+ if (!ctx->layout) make_layout(ctx, m);
2869
+
2870
+ for (int i = 0; i < m->nested_msg_count; i++) {
2871
+ resolve_msgdef(ctx, (upb_MessageDef*)&m->nested_msgs[i]);
1913
2872
  }
1914
2873
  }
1915
2874
 
2875
+ static int count_exts_in_msg(const google_protobuf_DescriptorProto* msg_proto) {
2876
+ size_t n;
2877
+ google_protobuf_DescriptorProto_extension(msg_proto, &n);
2878
+ int ext_count = n;
2879
+
2880
+ const google_protobuf_DescriptorProto* const* nested_msgs =
2881
+ google_protobuf_DescriptorProto_nested_type(msg_proto, &n);
2882
+ for (size_t i = 0; i < n; i++) {
2883
+ ext_count += count_exts_in_msg(nested_msgs[i]);
2884
+ }
2885
+
2886
+ return ext_count;
2887
+ }
2888
+
1916
2889
  static void build_filedef(
1917
- symtab_addctx *ctx, upb_filedef *file,
1918
- const google_protobuf_FileDescriptorProto *file_proto) {
1919
- const google_protobuf_FileOptions *file_options_proto;
1920
- const google_protobuf_DescriptorProto *const *msgs;
1921
- const google_protobuf_EnumDescriptorProto *const *enums;
1922
- const google_protobuf_FieldDescriptorProto *const *exts;
1923
- const upb_strview* strs;
2890
+ symtab_addctx* ctx, upb_FileDef* file,
2891
+ const google_protobuf_FileDescriptorProto* file_proto) {
2892
+ const google_protobuf_DescriptorProto* const* msgs;
2893
+ const google_protobuf_EnumDescriptorProto* const* enums;
2894
+ const google_protobuf_FieldDescriptorProto* const* exts;
2895
+ const google_protobuf_ServiceDescriptorProto* const* services;
2896
+ const upb_StringView* strs;
2897
+ const int32_t* public_deps;
2898
+ const int32_t* weak_deps;
1924
2899
  size_t i, n;
1925
2900
 
1926
2901
  file->symtab = ctx->symtab;
1927
2902
 
1928
- /* One pass to count and allocate. */
1929
- file->msg_count = 0;
1930
- file->enum_count = 0;
1931
- file->ext_count = 0;
1932
- count_types_in_file(file_proto, file);
1933
- file->msgs = symtab_alloc(ctx, sizeof(*file->msgs) * file->msg_count);
1934
- file->enums = symtab_alloc(ctx, sizeof(*file->enums) * file->enum_count);
1935
- file->exts = symtab_alloc(ctx, sizeof(*file->exts) * file->ext_count);
2903
+ /* Count all extensions in the file, to build a flat array of layouts. */
2904
+ google_protobuf_FileDescriptorProto_extension(file_proto, &n);
2905
+ int ext_count = n;
2906
+ msgs = google_protobuf_FileDescriptorProto_message_type(file_proto, &n);
2907
+ for (int i = 0; i < n; i++) {
2908
+ ext_count += count_exts_in_msg(msgs[i]);
2909
+ }
2910
+ file->ext_count = ext_count;
1936
2911
 
1937
- /* In the second pass we increment these as defs are added. */
1938
- file->msg_count = 0;
1939
- file->enum_count = 0;
1940
- file->ext_count = 0;
2912
+ if (ctx->layout) {
2913
+ /* We are using the ext layouts that were passed in. */
2914
+ file->ext_layouts = ctx->layout->exts;
2915
+ if (ctx->layout->ext_count != file->ext_count) {
2916
+ symtab_errf(ctx, "Extension count did not match layout (%d vs %d)",
2917
+ ctx->layout->ext_count, file->ext_count);
2918
+ }
2919
+ } else {
2920
+ /* We are building ext layouts from scratch. */
2921
+ file->ext_layouts =
2922
+ symtab_alloc(ctx, sizeof(*file->ext_layouts) * file->ext_count);
2923
+ upb_MiniTable_Extension* ext =
2924
+ symtab_alloc(ctx, sizeof(*ext) * file->ext_count);
2925
+ for (int i = 0; i < file->ext_count; i++) {
2926
+ file->ext_layouts[i] = &ext[i];
2927
+ }
2928
+ }
1941
2929
 
1942
2930
  if (!google_protobuf_FileDescriptorProto_has_name(file_proto)) {
1943
2931
  symtab_errf(ctx, "File has no name");
@@ -1945,11 +2933,9 @@ static void build_filedef(
1945
2933
 
1946
2934
  file->name =
1947
2935
  strviewdup(ctx, google_protobuf_FileDescriptorProto_name(file_proto));
1948
- file->phpprefix = NULL;
1949
- file->phpnamespace = NULL;
1950
2936
 
1951
2937
  if (google_protobuf_FileDescriptorProto_has_package(file_proto)) {
1952
- upb_strview package =
2938
+ upb_StringView package =
1953
2939
  google_protobuf_FileDescriptorProto_package(file_proto);
1954
2940
  check_ident(ctx, package, true);
1955
2941
  file->package = strviewdup(ctx, package);
@@ -1958,133 +2944,189 @@ static void build_filedef(
1958
2944
  }
1959
2945
 
1960
2946
  if (google_protobuf_FileDescriptorProto_has_syntax(file_proto)) {
1961
- upb_strview syntax =
2947
+ upb_StringView syntax =
1962
2948
  google_protobuf_FileDescriptorProto_syntax(file_proto);
1963
2949
 
1964
2950
  if (streql_view(syntax, "proto2")) {
1965
- file->syntax = UPB_SYNTAX_PROTO2;
2951
+ file->syntax = kUpb_Syntax_Proto2;
1966
2952
  } else if (streql_view(syntax, "proto3")) {
1967
- file->syntax = UPB_SYNTAX_PROTO3;
2953
+ file->syntax = kUpb_Syntax_Proto3;
1968
2954
  } else {
1969
- symtab_errf(ctx, "Invalid syntax '" UPB_STRVIEW_FORMAT "'",
1970
- UPB_STRVIEW_ARGS(syntax));
2955
+ symtab_errf(ctx, "Invalid syntax '" UPB_STRINGVIEW_FORMAT "'",
2956
+ UPB_STRINGVIEW_ARGS(syntax));
1971
2957
  }
1972
2958
  } else {
1973
- file->syntax = UPB_SYNTAX_PROTO2;
2959
+ file->syntax = kUpb_Syntax_Proto2;
1974
2960
  }
1975
2961
 
1976
2962
  /* Read options. */
1977
- file_options_proto = google_protobuf_FileDescriptorProto_options(file_proto);
1978
- if (file_options_proto) {
1979
- if (google_protobuf_FileOptions_has_php_class_prefix(file_options_proto)) {
1980
- file->phpprefix = strviewdup(
1981
- ctx,
1982
- google_protobuf_FileOptions_php_class_prefix(file_options_proto));
1983
- }
1984
- if (google_protobuf_FileOptions_has_php_namespace(file_options_proto)) {
1985
- file->phpnamespace = strviewdup(
1986
- ctx, google_protobuf_FileOptions_php_namespace(file_options_proto));
1987
- }
1988
- }
2963
+ SET_OPTIONS(file->opts, FileDescriptorProto, FileOptions, file_proto);
1989
2964
 
1990
2965
  /* Verify dependencies. */
1991
2966
  strs = google_protobuf_FileDescriptorProto_dependency(file_proto, &n);
2967
+ file->dep_count = n;
1992
2968
  file->deps = symtab_alloc(ctx, sizeof(*file->deps) * n);
1993
2969
 
1994
2970
  for (i = 0; i < n; i++) {
1995
- upb_strview dep_name = strs[i];
1996
- upb_value v;
1997
- if (!upb_strtable_lookup2(&ctx->symtab->files, dep_name.data,
1998
- dep_name.size, &v)) {
2971
+ upb_StringView str = strs[i];
2972
+ file->deps[i] =
2973
+ upb_DefPool_FindFileByNameWithSize(ctx->symtab, str.data, str.size);
2974
+ if (!file->deps[i]) {
1999
2975
  symtab_errf(ctx,
2000
- "Depends on file '" UPB_STRVIEW_FORMAT
2976
+ "Depends on file '" UPB_STRINGVIEW_FORMAT
2001
2977
  "', but it has not been loaded",
2002
- UPB_STRVIEW_ARGS(dep_name));
2978
+ UPB_STRINGVIEW_ARGS(str));
2003
2979
  }
2004
- file->deps[i] = upb_value_getconstptr(v);
2005
2980
  }
2006
2981
 
2007
- /* Create messages. */
2008
- msgs = google_protobuf_FileDescriptorProto_message_type(file_proto, &n);
2982
+ public_deps =
2983
+ google_protobuf_FileDescriptorProto_public_dependency(file_proto, &n);
2984
+ file->public_dep_count = n;
2985
+ file->public_deps = symtab_alloc(ctx, sizeof(*file->public_deps) * n);
2986
+ int32_t* mutable_public_deps = (int32_t*)file->public_deps;
2009
2987
  for (i = 0; i < n; i++) {
2010
- create_msgdef(ctx, file->package, msgs[i]);
2988
+ if (public_deps[i] >= file->dep_count) {
2989
+ symtab_errf(ctx, "public_dep %d is out of range", (int)public_deps[i]);
2990
+ }
2991
+ mutable_public_deps[i] = public_deps[i];
2992
+ }
2993
+
2994
+ weak_deps =
2995
+ google_protobuf_FileDescriptorProto_weak_dependency(file_proto, &n);
2996
+ file->weak_dep_count = n;
2997
+ file->weak_deps = symtab_alloc(ctx, sizeof(*file->weak_deps) * n);
2998
+ int32_t* mutable_weak_deps = (int32_t*)file->weak_deps;
2999
+ for (i = 0; i < n; i++) {
3000
+ if (weak_deps[i] >= file->dep_count) {
3001
+ symtab_errf(ctx, "weak_dep %d is out of range", (int)weak_deps[i]);
3002
+ }
3003
+ mutable_weak_deps[i] = weak_deps[i];
2011
3004
  }
2012
3005
 
2013
3006
  /* Create enums. */
2014
3007
  enums = google_protobuf_FileDescriptorProto_enum_type(file_proto, &n);
3008
+ file->top_lvl_enum_count = n;
3009
+ file->top_lvl_enums = symtab_alloc(ctx, sizeof(*file->top_lvl_enums) * n);
2015
3010
  for (i = 0; i < n; i++) {
2016
- create_enumdef(ctx, file->package, enums[i]);
3011
+ create_enumdef(ctx, file->package, enums[i], NULL, &file->top_lvl_enums[i]);
2017
3012
  }
2018
3013
 
2019
3014
  /* Create extensions. */
2020
3015
  exts = google_protobuf_FileDescriptorProto_extension(file_proto, &n);
2021
- file->exts = symtab_alloc(ctx, sizeof(*file->exts) * n);
3016
+ file->top_lvl_ext_count = n;
3017
+ file->top_lvl_exts = symtab_alloc(ctx, sizeof(*file->top_lvl_exts) * n);
2022
3018
  for (i = 0; i < n; i++) {
2023
- create_fielddef(ctx, file->package, NULL, exts[i]);
3019
+ create_fielddef(ctx, file->package, NULL, exts[i], &file->top_lvl_exts[i],
3020
+ /* is_extension= */ true);
3021
+ ((upb_FieldDef*)&file->top_lvl_exts[i])->index_ = i;
2024
3022
  }
2025
3023
 
2026
- /* Now that all names are in the table, build layouts and resolve refs. */
2027
- for (i = 0; i < (size_t)file->ext_count; i++) {
2028
- resolve_fielddef(ctx, file->package, (upb_fielddef*)&file->exts[i]);
3024
+ /* Create messages. */
3025
+ msgs = google_protobuf_FileDescriptorProto_message_type(file_proto, &n);
3026
+ file->top_lvl_msg_count = n;
3027
+ file->top_lvl_msgs = symtab_alloc(ctx, sizeof(*file->top_lvl_msgs) * n);
3028
+ for (i = 0; i < n; i++) {
3029
+ create_msgdef(ctx, file->package, msgs[i], NULL, &file->top_lvl_msgs[i]);
2029
3030
  }
2030
3031
 
2031
- for (i = 0; i < (size_t)file->msg_count; i++) {
2032
- const upb_msgdef *m = &file->msgs[i];
2033
- int j;
2034
- for (j = 0; j < m->field_count; j++) {
2035
- resolve_fielddef(ctx, m->full_name, (upb_fielddef*)&m->fields[j]);
2036
- }
3032
+ /* Create services. */
3033
+ services = google_protobuf_FileDescriptorProto_service(file_proto, &n);
3034
+ file->service_count = n;
3035
+ file->services = symtab_alloc(ctx, sizeof(*file->services) * n);
3036
+ for (i = 0; i < n; i++) {
3037
+ create_service(ctx, services[i], &file->services[i]);
3038
+ ((upb_ServiceDef*)&file->services[i])->index = i;
2037
3039
  }
2038
3040
 
2039
- if (!ctx->layouts) {
2040
- for (i = 0; i < (size_t)file->msg_count; i++) {
2041
- const upb_msgdef *m = &file->msgs[i];
2042
- make_layout(ctx, m);
2043
- }
3041
+ /* Now that all names are in the table, build layouts and resolve refs. */
3042
+ for (i = 0; i < (size_t)file->top_lvl_ext_count; i++) {
3043
+ resolve_fielddef(ctx, file->package, (upb_FieldDef*)&file->top_lvl_exts[i]);
2044
3044
  }
2045
- }
2046
3045
 
2047
- static void remove_filedef(upb_symtab *s, upb_filedef *file) {
2048
- int i;
2049
- for (i = 0; i < file->msg_count; i++) {
2050
- const char *name = file->msgs[i].full_name;
2051
- upb_strtable_remove(&s->syms, name, strlen(name), NULL);
3046
+ for (i = 0; i < (size_t)file->top_lvl_msg_count; i++) {
3047
+ resolve_msgdef(ctx, (upb_MessageDef*)&file->top_lvl_msgs[i]);
2052
3048
  }
2053
- for (i = 0; i < file->enum_count; i++) {
2054
- const char *name = file->enums[i].full_name;
2055
- upb_strtable_remove(&s->syms, name, strlen(name), NULL);
3049
+
3050
+ if (file->ext_count) {
3051
+ CHK_OOM(_upb_extreg_add(ctx->symtab->extreg, file->ext_layouts,
3052
+ file->ext_count));
2056
3053
  }
2057
- for (i = 0; i < file->ext_count; i++) {
2058
- const char *name = file->exts[i].full_name;
2059
- upb_strtable_remove(&s->syms, name, strlen(name), NULL);
3054
+ }
3055
+
3056
+ static void remove_filedef(upb_DefPool* s, upb_FileDef* file) {
3057
+ intptr_t iter = UPB_INTTABLE_BEGIN;
3058
+ upb_StringView key;
3059
+ upb_value val;
3060
+ while (upb_strtable_next2(&s->syms, &key, &val, &iter)) {
3061
+ const upb_FileDef* f;
3062
+ switch (deftype(val)) {
3063
+ case UPB_DEFTYPE_EXT:
3064
+ f = upb_FieldDef_File(unpack_def(val, UPB_DEFTYPE_EXT));
3065
+ break;
3066
+ case UPB_DEFTYPE_MSG:
3067
+ f = upb_MessageDef_File(unpack_def(val, UPB_DEFTYPE_MSG));
3068
+ break;
3069
+ case UPB_DEFTYPE_ENUM:
3070
+ f = upb_EnumDef_File(unpack_def(val, UPB_DEFTYPE_ENUM));
3071
+ break;
3072
+ case UPB_DEFTYPE_ENUMVAL:
3073
+ f = upb_EnumDef_File(
3074
+ upb_EnumValueDef_Enum(unpack_def(val, UPB_DEFTYPE_ENUMVAL)));
3075
+ break;
3076
+ case UPB_DEFTYPE_SERVICE:
3077
+ f = upb_ServiceDef_File(unpack_def(val, UPB_DEFTYPE_SERVICE));
3078
+ break;
3079
+ default:
3080
+ UPB_UNREACHABLE();
3081
+ }
3082
+
3083
+ if (f == file) upb_strtable_removeiter(&s->syms, &iter);
2060
3084
  }
2061
3085
  }
2062
3086
 
2063
- static const upb_filedef *_upb_symtab_addfile(
2064
- upb_symtab *s, const google_protobuf_FileDescriptorProto *file_proto,
2065
- const upb_msglayout **layouts, upb_status *status) {
3087
+ static const upb_FileDef* _upb_DefPool_AddFile(
3088
+ upb_DefPool* s, const google_protobuf_FileDescriptorProto* file_proto,
3089
+ const upb_MiniTable_File* layout, upb_Status* status) {
2066
3090
  symtab_addctx ctx;
2067
- upb_strview name = google_protobuf_FileDescriptorProto_name(file_proto);
3091
+ upb_StringView name = google_protobuf_FileDescriptorProto_name(file_proto);
3092
+ upb_value v;
2068
3093
 
2069
- if (upb_strtable_lookup2(&s->files, name.data, name.size, NULL)) {
2070
- upb_status_seterrf(status, "duplicate file name (%.*s)",
2071
- UPB_STRVIEW_ARGS(name));
2072
- return NULL;
3094
+ if (upb_strtable_lookup2(&s->files, name.data, name.size, &v)) {
3095
+ if (unpack_def(v, UPB_DEFTYPE_FILE)) {
3096
+ upb_Status_SetErrorFormat(status, "duplicate file name (%.*s)",
3097
+ UPB_STRINGVIEW_ARGS(name));
3098
+ return NULL;
3099
+ }
3100
+ const upb_MiniTable_File* registered = unpack_def(v, UPB_DEFTYPE_LAYOUT);
3101
+ UPB_ASSERT(registered);
3102
+ if (layout && layout != registered) {
3103
+ upb_Status_SetErrorFormat(
3104
+ status, "tried to build with a different layout (filename=%.*s)",
3105
+ UPB_STRINGVIEW_ARGS(name));
3106
+ return NULL;
3107
+ }
3108
+ layout = registered;
2073
3109
  }
2074
3110
 
2075
3111
  ctx.symtab = s;
2076
- ctx.layouts = layouts;
3112
+ ctx.layout = layout;
3113
+ ctx.msg_count = 0;
3114
+ ctx.enum_count = 0;
3115
+ ctx.ext_count = 0;
2077
3116
  ctx.status = status;
2078
3117
  ctx.file = NULL;
2079
- ctx.arena = upb_arena_new();
3118
+ ctx.arena = upb_Arena_New();
3119
+ ctx.tmp_arena = upb_Arena_New();
2080
3120
 
2081
- if (!ctx.arena) {
2082
- upb_status_setoom(status);
3121
+ if (!ctx.arena || !ctx.tmp_arena) {
3122
+ if (ctx.arena) upb_Arena_Free(ctx.arena);
3123
+ if (ctx.tmp_arena) upb_Arena_Free(ctx.tmp_arena);
3124
+ upb_Status_setoom(status);
2083
3125
  return NULL;
2084
3126
  }
2085
3127
 
2086
3128
  if (UPB_UNLIKELY(UPB_SETJMP(ctx.err))) {
2087
- UPB_ASSERT(!upb_ok(status));
3129
+ UPB_ASSERT(!upb_Status_IsOk(status));
2088
3130
  if (ctx.file) {
2089
3131
  remove_filedef(s, ctx.file);
2090
3132
  ctx.file = NULL;
@@ -2093,51 +3135,53 @@ static const upb_filedef *_upb_symtab_addfile(
2093
3135
  ctx.file = symtab_alloc(&ctx, sizeof(*ctx.file));
2094
3136
  build_filedef(&ctx, ctx.file, file_proto);
2095
3137
  upb_strtable_insert(&s->files, name.data, name.size,
2096
- upb_value_constptr(ctx.file), ctx.arena);
2097
- UPB_ASSERT(upb_ok(status));
2098
- upb_arena_fuse(s->arena, ctx.arena);
3138
+ pack_def(ctx.file, UPB_DEFTYPE_FILE), ctx.arena);
3139
+ UPB_ASSERT(upb_Status_IsOk(status));
3140
+ upb_Arena_Fuse(s->arena, ctx.arena);
2099
3141
  }
2100
3142
 
2101
- upb_arena_free(ctx.arena);
3143
+ upb_Arena_Free(ctx.arena);
3144
+ upb_Arena_Free(ctx.tmp_arena);
2102
3145
  return ctx.file;
2103
3146
  }
2104
3147
 
2105
- const upb_filedef *upb_symtab_addfile(
2106
- upb_symtab *s, const google_protobuf_FileDescriptorProto *file_proto,
2107
- upb_status *status) {
2108
- return _upb_symtab_addfile(s, file_proto, NULL, status);
3148
+ const upb_FileDef* upb_DefPool_AddFile(
3149
+ upb_DefPool* s, const google_protobuf_FileDescriptorProto* file_proto,
3150
+ upb_Status* status) {
3151
+ return _upb_DefPool_AddFile(s, file_proto, NULL, status);
2109
3152
  }
2110
3153
 
2111
3154
  /* Include here since we want most of this file to be stdio-free. */
2112
3155
  #include <stdio.h>
2113
3156
 
2114
- bool _upb_symtab_loaddefinit(upb_symtab *s, const upb_def_init *init) {
3157
+ bool _upb_DefPool_LoadDefInitEx(upb_DefPool* s, const _upb_DefPool_Init* init,
3158
+ bool rebuild_minitable) {
2115
3159
  /* Since this function should never fail (it would indicate a bug in upb) we
2116
3160
  * print errors to stderr instead of returning error status to the user. */
2117
- upb_def_init **deps = init->deps;
2118
- google_protobuf_FileDescriptorProto *file;
2119
- upb_arena *arena;
2120
- upb_status status;
3161
+ _upb_DefPool_Init** deps = init->deps;
3162
+ google_protobuf_FileDescriptorProto* file;
3163
+ upb_Arena* arena;
3164
+ upb_Status status;
2121
3165
 
2122
- upb_status_clear(&status);
3166
+ upb_Status_Clear(&status);
2123
3167
 
2124
- if (upb_strtable_lookup(&s->files, init->filename, NULL)) {
3168
+ if (upb_DefPool_FindFileByName(s, init->filename)) {
2125
3169
  return true;
2126
3170
  }
2127
3171
 
2128
- arena = upb_arena_new();
3172
+ arena = upb_Arena_New();
2129
3173
 
2130
3174
  for (; *deps; deps++) {
2131
- if (!_upb_symtab_loaddefinit(s, *deps)) goto err;
3175
+ if (!_upb_DefPool_LoadDefInitEx(s, *deps, rebuild_minitable)) goto err;
2132
3176
  }
2133
3177
 
2134
3178
  file = google_protobuf_FileDescriptorProto_parse_ex(
2135
- init->descriptor.data, init->descriptor.size, NULL, UPB_DECODE_ALIAS,
2136
- arena);
3179
+ init->descriptor.data, init->descriptor.size, NULL,
3180
+ kUpb_DecodeOption_AliasString, arena);
2137
3181
  s->bytes_loaded += init->descriptor.size;
2138
3182
 
2139
3183
  if (!file) {
2140
- upb_status_seterrf(
3184
+ upb_Status_SetErrorFormat(
2141
3185
  &status,
2142
3186
  "Failed to parse compiled-in descriptor for file '%s'. This should "
2143
3187
  "never happen.",
@@ -2145,24 +3189,81 @@ bool _upb_symtab_loaddefinit(upb_symtab *s, const upb_def_init *init) {
2145
3189
  goto err;
2146
3190
  }
2147
3191
 
2148
- if (!_upb_symtab_addfile(s, file, init->layouts, &status)) goto err;
3192
+ const upb_MiniTable_File* mt = rebuild_minitable ? NULL : init->layout;
3193
+ if (!_upb_DefPool_AddFile(s, file, mt, &status)) {
3194
+ goto err;
3195
+ }
2149
3196
 
2150
- upb_arena_free(arena);
3197
+ upb_Arena_Free(arena);
2151
3198
  return true;
2152
3199
 
2153
3200
  err:
2154
- fprintf(stderr, "Error loading compiled-in descriptor: %s\n",
2155
- upb_status_errmsg(&status));
2156
- upb_arena_free(arena);
3201
+ fprintf(stderr,
3202
+ "Error loading compiled-in descriptor for file '%s' (this should "
3203
+ "never happen): %s\n",
3204
+ init->filename, upb_Status_ErrorMessage(&status));
3205
+ upb_Arena_Free(arena);
2157
3206
  return false;
2158
3207
  }
2159
3208
 
2160
- size_t _upb_symtab_bytesloaded(const upb_symtab *s) {
3209
+ size_t _upb_DefPool_BytesLoaded(const upb_DefPool* s) {
2161
3210
  return s->bytes_loaded;
2162
3211
  }
2163
3212
 
2164
- upb_arena *_upb_symtab_arena(const upb_symtab *s) {
2165
- return s->arena;
3213
+ upb_Arena* _upb_DefPool_Arena(const upb_DefPool* s) { return s->arena; }
3214
+
3215
+ const upb_FieldDef* _upb_DefPool_FindExtensionByMiniTable(
3216
+ const upb_DefPool* s, const upb_MiniTable_Extension* ext) {
3217
+ upb_value v;
3218
+ bool ok = upb_inttable_lookup(&s->exts, (uintptr_t)ext, &v);
3219
+ UPB_ASSERT(ok);
3220
+ return upb_value_getconstptr(v);
3221
+ }
3222
+
3223
+ const upb_FieldDef* upb_DefPool_FindExtensionByNumber(const upb_DefPool* s,
3224
+ const upb_MessageDef* m,
3225
+ int32_t fieldnum) {
3226
+ const upb_MiniTable* l = upb_MessageDef_MiniTable(m);
3227
+ const upb_MiniTable_Extension* ext = _upb_extreg_get(s->extreg, l, fieldnum);
3228
+ return ext ? _upb_DefPool_FindExtensionByMiniTable(s, ext) : NULL;
3229
+ }
3230
+
3231
+ bool _upb_DefPool_registerlayout(upb_DefPool* s, const char* filename,
3232
+ const upb_MiniTable_File* file) {
3233
+ if (upb_DefPool_FindFileByName(s, filename)) return false;
3234
+ upb_value v = pack_def(file, UPB_DEFTYPE_LAYOUT);
3235
+ return upb_strtable_insert(&s->files, filename, strlen(filename), v,
3236
+ s->arena);
3237
+ }
3238
+
3239
+ const upb_ExtensionRegistry* upb_DefPool_ExtensionRegistry(
3240
+ const upb_DefPool* s) {
3241
+ return s->extreg;
3242
+ }
3243
+
3244
+ const upb_FieldDef** upb_DefPool_GetAllExtensions(const upb_DefPool* s,
3245
+ const upb_MessageDef* m,
3246
+ size_t* count) {
3247
+ size_t n = 0;
3248
+ intptr_t iter = UPB_INTTABLE_BEGIN;
3249
+ uintptr_t key;
3250
+ upb_value val;
3251
+ // This is O(all exts) instead of O(exts for m). If we need this to be
3252
+ // efficient we may need to make extreg into a two-level table, or have a
3253
+ // second per-message index.
3254
+ while (upb_inttable_next2(&s->exts, &key, &val, &iter)) {
3255
+ const upb_FieldDef* f = upb_value_getconstptr(val);
3256
+ if (upb_FieldDef_ContainingType(f) == m) n++;
3257
+ }
3258
+ const upb_FieldDef** exts = malloc(n * sizeof(*exts));
3259
+ iter = UPB_INTTABLE_BEGIN;
3260
+ size_t i = 0;
3261
+ while (upb_inttable_next2(&s->exts, &key, &val, &iter)) {
3262
+ const upb_FieldDef* f = upb_value_getconstptr(val);
3263
+ if (upb_FieldDef_ContainingType(f) == m) exts[i++] = f;
3264
+ }
3265
+ *count = n;
3266
+ return exts;
2166
3267
  }
2167
3268
 
2168
3269
  #undef CHK_OOM