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