grpc 1.43.1 → 1.46.2

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