grpc 1.42.0 → 1.46.3
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.
- checksums.yaml +4 -4
- data/Makefile +425 -234
- data/include/grpc/event_engine/event_engine.h +37 -13
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
- data/include/grpc/event_engine/memory_allocator.h +27 -11
- data/include/grpc/event_engine/memory_request.h +57 -0
- data/include/grpc/grpc.h +40 -14
- data/include/grpc/grpc_posix.h +20 -19
- data/include/grpc/grpc_security.h +312 -195
- data/include/grpc/grpc_security_constants.h +1 -14
- data/include/grpc/impl/codegen/compression_types.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +24 -21
- data/include/grpc/impl/codegen/port_platform.h +7 -3
- data/include/grpc/impl/codegen/slice.h +4 -1
- data/include/grpc/slice.h +0 -11
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +5 -5
- data/src/core/ext/filters/client_channel/backend_metric.cc +9 -10
- data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +12 -8
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +5 -5
- data/src/core/ext/filters/client_channel/client_channel.cc +367 -243
- data/src/core/ext/filters/client_channel/client_channel.h +45 -41
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +6 -13
- data/src/core/ext/filters/client_channel/config_selector.h +4 -4
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +5 -6
- data/src/core/ext/filters/client_channel/dynamic_filters.h +2 -2
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -22
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -15
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +126 -582
- data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -160
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +22 -27
- data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
- data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +4 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +100 -81
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +50 -32
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +199 -150
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +123 -76
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +162 -122
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +98 -63
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +104 -145
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +147 -70
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +19 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +323 -470
- data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
- data/src/core/ext/filters/client_channel/lb_policy.h +94 -62
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +10 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +287 -313
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +31 -50
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +136 -226
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +92 -255
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -17
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +84 -68
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +201 -0
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +40 -39
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +476 -412
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +8 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +13 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +253 -171
- data/src/core/ext/filters/client_channel/retry_service_config.cc +16 -18
- data/src/core/ext/filters/client_channel/retry_service_config.h +18 -12
- data/src/core/ext/filters/client_channel/retry_throttle.cc +9 -23
- data/src/core/ext/filters/client_channel/retry_throttle.h +11 -5
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +8 -7
- data/src/core/ext/filters/client_channel/subchannel.cc +52 -59
- data/src/core/ext/filters/client_channel/subchannel.h +7 -7
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +15 -14
- data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +155 -400
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +11 -13
- data/src/core/ext/filters/fault_injection/service_config_parser.h +10 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +81 -544
- data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
- data/src/core/ext/filters/http/client_authority_filter.cc +31 -95
- data/src/core/ext/filters/http/client_authority_filter.h +24 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +22 -22
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +43 -140
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +15 -27
- data/src/core/ext/filters/http/server/http_server_filter.cc +36 -251
- data/src/core/ext/filters/message_size/message_size_filter.cc +27 -35
- data/src/core/ext/filters/message_size/message_size_filter.h +10 -3
- data/src/core/ext/filters/rbac/rbac_filter.cc +162 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +61 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +143 -0
- data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → filters/server_config_selector/server_config_selector_filter.h} +9 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +239 -20
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +286 -108
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +327 -303
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +9 -4
- data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -10
- data/src/core/ext/transport/chttp2/transport/flow_control.h +5 -5
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +361 -240
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +87 -145
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +74 -149
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
- data/src/core/ext/transport/chttp2/transport/internal.h +16 -43
- data/src/core/ext/transport/chttp2/transport/parsing.cc +11 -9
- data/src/core/ext/transport/chttp2/transport/writing.cc +81 -136
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +42 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +482 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +553 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +247 -209
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1249 -684
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +151 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +124 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +102 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +97 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +605 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +103 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +51 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +50 -17
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +670 -385
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +239 -199
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1270 -663
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +49 -28
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +201 -90
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +320 -271
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1671 -826
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +43 -23
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +60 -27
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +273 -98
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1381 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +74 -53
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +355 -189
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +46 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +213 -176
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1069 -581
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +105 -45
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +526 -166
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +39 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +16 -22
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +42 -100
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +151 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +145 -117
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +769 -409
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +141 -92
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +737 -348
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +58 -30
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +203 -125
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +993 -396
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +17 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +29 -16
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +27 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +84 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +76 -33
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +94 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +47 -25
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +195 -108
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +74 -55
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +350 -189
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +358 -187
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +35 -20
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +98 -71
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +504 -258
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +104 -79
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +561 -300
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +31 -16
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +105 -48
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +24 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +66 -39
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -61
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +414 -234
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +407 -236
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +127 -103
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +563 -293
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +53 -34
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +272 -141
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +663 -572
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3643 -1900
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +38 -19
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +149 -71
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +222 -0
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1052 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +103 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +27 -13
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +78 -45
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +134 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +250 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +94 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +213 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +218 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +146 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +17 -4
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +35 -23
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +188 -111
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +261 -131
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +183 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +87 -42
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +283 -223
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1554 -733
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +9 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +6 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +105 -60
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +555 -234
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +157 -86
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +126 -83
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +623 -262
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +160 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +15 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +22 -14
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +91 -72
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +475 -255
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +108 -61
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +73 -56
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +348 -185
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +112 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +34 -18
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +124 -80
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +214 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +28 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +100 -56
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +51 -30
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +49 -26
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +39 -23
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +118 -68
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +124 -64
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +86 -52
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +151 -82
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +230 -144
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +236 -130
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +201 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +9 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +3 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +139 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +23 -9
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +63 -35
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +99 -51
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +41 -18
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +127 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +22 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +23 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +154 -125
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +721 -381
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +158 -126
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +796 -401
- data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
- data/src/core/ext/upb-generated/google/api/http.upb.h +217 -114
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +111 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +39 -21
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +373 -282
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2077 -1029
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +37 -19
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +22 -14
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +47 -31
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +178 -92
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +37 -19
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +241 -148
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +21 -8
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +53 -29
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +319 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +32 -18
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +104 -47
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +135 -107
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +686 -358
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +77 -40
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +57 -34
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +81 -61
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +399 -237
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +116 -62
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +194 -56
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +55 -17
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +16 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +57 -19
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +50 -17
- data/src/core/ext/upb-generated/validate/validate.upb.c +406 -310
- data/src/core/ext/upb-generated/validate/validate.upb.h +2730 -1164
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +278 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +108 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +175 -67
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +99 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +17 -4
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +31 -18
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +30 -16
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +99 -54
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +54 -29
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +103 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +22 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +56 -29
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +131 -69
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +59 -29
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +102 -45
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +878 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +143 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +218 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +20 -7
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +43 -23
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +16 -61
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +67 -67
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +22 -52
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +250 -281
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +387 -426
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +87 -133
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -187
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +252 -254
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +20 -22
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +21 -33
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +54 -62
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +19 -19
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +17 -21
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +19 -37
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +38 -38
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +828 -914
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +160 -160
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +199 -215
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +171 -157
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -216
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +19 -33
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +22 -32
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +17 -21
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +17 -23
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +5 -62
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +6 -15
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +6 -17
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +7 -12
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +9 -16
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +6 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +8 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +8 -15
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +8 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +7 -12
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
- data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
- data/src/core/ext/xds/certificate_provider_store.cc +8 -0
- data/src/core/ext/xds/certificate_provider_store.h +10 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/upb_utils.h +67 -0
- data/src/core/ext/xds/xds_api.cc +182 -3417
- data/src/core/ext/xds/xds_api.h +60 -613
- data/src/core/ext/xds/xds_bootstrap.cc +222 -123
- data/src/core/ext/xds/xds_bootstrap.h +33 -15
- data/src/core/ext/xds/xds_certificate_provider.cc +2 -0
- data/src/core/ext/xds/xds_certificate_provider.h +10 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +16 -20
- data/src/core/ext/xds/xds_channel_stack_modifier.h +4 -3
- data/src/core/ext/xds/xds_client.cc +805 -1084
- data/src/core/ext/xds/xds_client.h +118 -150
- data/src/core/ext/xds/xds_client_stats.cc +15 -15
- data/src/core/ext/xds/xds_client_stats.h +5 -4
- data/src/core/ext/xds/xds_cluster.cc +453 -0
- data/src/core/ext/xds/xds_cluster.h +108 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
- data/src/core/ext/xds/xds_common_types.cc +388 -0
- data/src/core/ext/xds/xds_common_types.h +95 -0
- data/src/core/ext/xds/xds_endpoint.cc +371 -0
- data/src/core/ext/xds/xds_endpoint.h +135 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -7
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
- data/src/core/ext/xds/xds_http_filters.cc +11 -5
- data/src/core/ext/xds/xds_http_filters.h +4 -4
- data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
- data/src/core/ext/xds/xds_listener.cc +1039 -0
- data/src/core/ext/xds/xds_listener.h +220 -0
- data/src/core/ext/xds/xds_resource_type.cc +33 -0
- data/src/core/ext/xds/xds_resource_type.h +98 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
- data/src/core/ext/xds/xds_route_config.cc +1122 -0
- data/src/core/ext/xds/xds_route_config.h +218 -0
- data/src/core/ext/xds/xds_routing.cc +250 -0
- data/src/core/ext/xds/xds_routing.h +101 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +1056 -286
- data/src/core/lib/address_utils/parse_address.cc +20 -0
- data/src/core/lib/address_utils/parse_address.h +5 -0
- data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
- data/src/core/lib/avl/avl.h +452 -88
- data/src/core/lib/backoff/backoff.cc +9 -38
- data/src/core/lib/backoff/backoff.h +11 -11
- data/src/core/lib/channel/call_finalization.h +86 -0
- data/src/core/lib/channel/call_tracer.h +4 -1
- data/src/core/lib/channel/channel_args.cc +166 -28
- data/src/core/lib/channel/channel_args.h +214 -10
- data/src/core/lib/channel/channel_args_preconditioning.cc +42 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +61 -0
- data/src/core/lib/channel/channel_stack.cc +10 -3
- data/src/core/lib/channel/channel_stack.h +39 -6
- data/src/core/lib/channel/channel_stack_builder.cc +23 -272
- data/src/core/lib/channel/channel_stack_builder.h +118 -149
- data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
- data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
- data/src/core/lib/channel/channel_trace.cc +3 -6
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/connected_channel.cc +9 -4
- data/src/core/lib/channel/connected_channel.h +2 -1
- data/src/core/lib/channel/context.h +11 -0
- data/src/core/lib/channel/handshaker.cc +1 -1
- data/src/core/lib/channel/handshaker.h +1 -1
- data/src/core/lib/channel/promise_based_filter.cc +1002 -0
- data/src/core/lib/channel/promise_based_filter.h +437 -0
- data/src/core/lib/compression/compression.cc +20 -112
- data/src/core/lib/compression/compression_internal.cc +137 -203
- data/src/core/lib/compression/compression_internal.h +64 -69
- data/src/core/lib/compression/message_compress.cc +11 -11
- data/src/core/lib/compression/message_compress.h +2 -2
- data/src/core/lib/config/core_configuration.cc +11 -3
- data/src/core/lib/config/core_configuration.h +50 -0
- data/src/core/lib/debug/stats_data.cc +2 -6
- data/src/core/lib/debug/stats_data.h +18 -21
- data/src/core/lib/debug/trace.h +2 -2
- data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
- data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
- data/src/core/lib/event_engine/default_event_engine_factory.cc +27 -0
- data/src/core/lib/event_engine/event_engine.cc +21 -19
- data/src/core/lib/event_engine/event_engine_factory.h +36 -0
- data/src/core/lib/event_engine/memory_allocator.cc +66 -0
- data/src/core/lib/event_engine/resolved_address.cc +39 -0
- data/src/core/lib/gpr/sync_posix.cc +1 -0
- data/src/core/lib/gpr/time.cc +2 -1
- data/src/core/lib/gpr/tls.h +7 -0
- data/src/core/lib/gpr/useful.h +18 -0
- data/src/core/lib/gprpp/bitset.h +19 -0
- data/src/core/lib/gprpp/capture.h +76 -0
- data/src/core/lib/gprpp/chunked_vector.h +45 -3
- data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
- data/src/core/lib/gprpp/debug_location.h +2 -0
- data/src/core/lib/gprpp/global_config_env.cc +7 -7
- data/src/core/lib/gprpp/global_config_env.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +2 -3
- data/src/core/lib/gprpp/orphanable.h +1 -1
- data/src/core/lib/gprpp/ref_counted.h +3 -1
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
- data/src/core/lib/gprpp/single_set_ptr.h +87 -0
- data/src/core/lib/gprpp/status_helper.cc +48 -40
- data/src/core/lib/gprpp/status_helper.h +6 -19
- data/src/core/lib/gprpp/table.h +24 -1
- data/src/core/lib/gprpp/time.cc +198 -0
- data/src/core/lib/gprpp/time.h +292 -0
- data/src/core/lib/http/format_request.cc +28 -25
- data/src/core/lib/http/format_request.h +7 -6
- data/src/core/lib/http/httpcli.cc +310 -238
- data/src/core/lib/http/httpcli.h +183 -88
- data/src/core/lib/http/httpcli_security_connector.cc +64 -75
- data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
- data/src/core/lib/http/parser.cc +80 -9
- data/src/core/lib/http/parser.h +15 -2
- data/src/core/lib/iomgr/buffer_list.cc +9 -9
- data/src/core/lib/iomgr/buffer_list.h +18 -18
- data/src/core/lib/iomgr/call_combiner.cc +17 -7
- data/src/core/lib/iomgr/closure.h +29 -9
- data/src/core/lib/iomgr/combiner.cc +25 -3
- data/src/core/lib/iomgr/endpoint.h +0 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -24
- data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
- data/src/core/lib/iomgr/error.cc +13 -10
- data/src/core/lib/iomgr/error.h +0 -2
- data/src/core/lib/iomgr/ev_apple.cc +6 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +8 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -7
- data/src/core/lib/iomgr/ev_posix.cc +9 -10
- data/src/core/lib/iomgr/ev_posix.h +1 -1
- data/src/core/lib/iomgr/event_engine/endpoint.cc +2 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +8 -27
- data/src/core/lib/iomgr/event_engine/pollset.cc +2 -3
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +68 -49
- data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +11 -8
- data/src/core/lib/iomgr/event_engine/timer.cc +7 -7
- data/src/core/lib/iomgr/exec_ctx.cc +25 -97
- data/src/core/lib/iomgr/exec_ctx.h +18 -34
- data/src/core/lib/iomgr/executor.cc +22 -16
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +2 -1
- data/src/core/lib/iomgr/iocp_windows.cc +9 -9
- data/src/core/lib/iomgr/iocp_windows.h +1 -1
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
- data/src/core/lib/iomgr/polling_entity.h +6 -0
- data/src/core/lib/iomgr/pollset.cc +1 -1
- data/src/core/lib/iomgr/pollset.h +4 -4
- data/src/core/lib/iomgr/pollset_windows.cc +2 -2
- data/src/core/lib/iomgr/port.h +6 -11
- data/src/core/lib/iomgr/resolve_address.cc +5 -24
- data/src/core/lib/iomgr/resolve_address.h +47 -44
- data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +83 -67
- data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
- data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
- data/src/core/lib/iomgr/resolved_address.h +39 -0
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +0 -17
- data/src/core/lib/iomgr/tcp_client.cc +3 -5
- data/src/core/lib/iomgr/tcp_client.h +4 -5
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +2 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +10 -26
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -11
- data/src/core/lib/iomgr/tcp_posix.cc +120 -66
- data/src/core/lib/iomgr/tcp_posix.h +1 -3
- data/src/core/lib/iomgr/tcp_server.cc +4 -6
- data/src/core/lib/iomgr/tcp_server.h +6 -8
- data/src/core/lib/iomgr/tcp_server_posix.cc +43 -38
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
- data/src/core/lib/iomgr/tcp_server_windows.cc +5 -12
- data/src/core/lib/iomgr/tcp_windows.cc +19 -17
- data/src/core/lib/iomgr/tcp_windows.h +1 -2
- data/src/core/lib/iomgr/timer.cc +2 -2
- data/src/core/lib/iomgr/timer.h +11 -6
- data/src/core/lib/iomgr/timer_generic.cc +96 -77
- data/src/core/lib/iomgr/timer_manager.cc +15 -14
- data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
- data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
- data/src/core/lib/iomgr/work_serializer.cc +120 -44
- data/src/core/lib/iomgr/work_serializer.h +16 -4
- data/src/core/lib/json/json_reader.cc +83 -35
- data/src/core/lib/json/json_util.cc +5 -5
- data/src/core/lib/json/json_util.h +5 -5
- data/src/core/lib/matchers/matchers.cc +1 -1
- data/src/core/lib/promise/activity.cc +121 -0
- data/src/core/lib/promise/activity.h +540 -0
- data/src/core/lib/promise/arena_promise.h +188 -0
- data/src/core/lib/promise/call_push_pull.h +144 -0
- data/src/core/lib/promise/context.h +86 -0
- data/src/core/lib/promise/detail/basic_seq.h +496 -0
- data/src/core/lib/promise/detail/promise_factory.h +189 -0
- data/src/core/lib/promise/detail/promise_like.h +85 -0
- data/src/core/lib/promise/detail/status.h +50 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
- data/src/core/lib/promise/intra_activity_waiter.h +49 -0
- data/src/core/lib/promise/latch.h +104 -0
- data/src/core/lib/promise/loop.h +134 -0
- data/src/core/lib/promise/map.h +88 -0
- data/src/core/lib/promise/poll.h +66 -0
- data/src/core/lib/promise/promise.h +95 -0
- data/src/core/lib/promise/race.h +84 -0
- data/src/core/lib/promise/seq.h +89 -0
- data/src/core/lib/promise/sleep.cc +74 -0
- data/src/core/lib/promise/sleep.h +66 -0
- data/src/core/lib/promise/try_seq.h +157 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +32 -31
- data/src/core/lib/resolver/resolver_registry.cc +156 -0
- data/src/core/lib/resolver/resolver_registry.h +113 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.cc +83 -0
- data/src/core/lib/resource_quota/api.h +40 -0
- data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
- data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
- data/src/core/lib/resource_quota/memory_quota.cc +478 -0
- data/src/core/lib/resource_quota/memory_quota.h +457 -0
- data/src/core/lib/resource_quota/resource_quota.cc +33 -0
- data/src/core/lib/resource_quota/resource_quota.h +66 -0
- data/src/core/lib/resource_quota/thread_quota.cc +43 -0
- data/src/core/lib/resource_quota/thread_quota.h +57 -0
- data/src/core/lib/resource_quota/trace.cc +19 -0
- data/src/core/{ext/filters/max_age/max_age_filter.h → lib/resource_quota/trace.h} +6 -8
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +37 -38
- data/src/core/lib/security/authorization/evaluate_args.h +3 -2
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +106 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +50 -0
- data/src/core/lib/security/authorization/matchers.cc +227 -0
- data/src/core/lib/security/authorization/matchers.h +211 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
- data/src/core/lib/security/authorization/rbac_policy.h +171 -0
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/context/security_context.h +9 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
- data/src/core/lib/security/credentials/alts/alts_credentials.h +10 -0
- data/src/core/lib/security/credentials/call_creds_util.cc +87 -0
- data/src/core/lib/security/credentials/call_creds_util.h +42 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +97 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +24 -83
- data/src/core/lib/security/credentials/composite/composite_credentials.h +23 -10
- data/src/core/lib/security/credentials/credentials.cc +2 -3
- data/src/core/lib/security/credentials/credentials.h +74 -80
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +48 -33
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +52 -35
- data/src/core/lib/security/credentials/external/external_account_credentials.h +5 -9
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +0 -1
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +33 -14
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +23 -27
- data/src/core/lib/security/credentials/fake/fake_credentials.h +22 -21
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +21 -16
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +21 -28
- data/src/core/lib/security/credentials/iam/iam_credentials.h +15 -9
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +25 -26
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +33 -45
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +16 -12
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +54 -43
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
- data/src/core/lib/security/credentials/local/local_credentials.cc +6 -6
- data/src/core/lib/security/credentials/local/local_credentials.h +10 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +157 -174
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +60 -33
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +96 -152
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +56 -27
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +7 -14
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +14 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +56 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +209 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +145 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +33 -87
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +73 -149
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +30 -16
- data/src/core/lib/security/credentials/tls/tls_credentials.h +6 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +51 -58
- data/src/core/lib/security/credentials/xds/xds_credentials.h +37 -6
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +11 -17
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -16
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +0 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +8 -18
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +11 -16
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -19
- data/src/core/lib/security/security_connector/security_connector.cc +3 -15
- data/src/core/lib/security/security_connector/security_connector.h +25 -21
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +10 -13
- data/src/core/lib/security/security_connector/ssl_utils.cc +38 -32
- data/src/core/lib/security/security_connector/ssl_utils.h +14 -18
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +365 -206
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +70 -47
- data/src/core/lib/security/transport/auth_filters.h +38 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +97 -360
- data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
- data/src/core/lib/security/transport/secure_endpoint.h +1 -1
- data/src/core/lib/security/transport/security_handshaker.cc +22 -12
- data/src/core/lib/security/transport/server_auth_filter.cc +41 -35
- data/src/core/lib/service_config/service_config.h +82 -0
- data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
- data/src/core/{ext/service_config/service_config.cc → lib/service_config/service_config_impl.cc} +20 -17
- data/src/core/{ext/service_config/service_config.h → lib/service_config/service_config_impl.h} +16 -18
- data/src/core/{ext → lib}/service_config/service_config_parser.cc +31 -27
- data/src/core/{ext → lib}/service_config/service_config_parser.h +39 -30
- data/src/core/lib/slice/percent_encoding.cc +30 -86
- data/src/core/lib/slice/percent_encoding.h +5 -11
- data/src/core/lib/slice/slice.cc +78 -181
- data/src/core/lib/slice/slice.h +384 -0
- data/src/core/lib/slice/slice_buffer.cc +4 -0
- data/src/core/lib/slice/slice_internal.h +12 -31
- data/src/core/lib/slice/slice_refcount.cc +18 -0
- data/src/core/lib/slice/slice_refcount.h +8 -83
- data/src/core/lib/slice/slice_refcount_base.h +21 -133
- data/src/core/lib/surface/builtins.cc +6 -6
- data/src/core/lib/surface/call.cc +1132 -1221
- data/src/core/lib/surface/call.h +5 -19
- data/src/core/lib/surface/channel.cc +68 -99
- data/src/core/lib/surface/channel.h +12 -23
- data/src/core/lib/surface/channel_init.cc +2 -3
- data/src/core/lib/surface/channel_init.h +3 -7
- data/src/core/lib/surface/completion_queue.cc +12 -11
- data/src/core/lib/surface/init.cc +78 -10
- data/src/core/lib/surface/init.h +0 -2
- data/src/core/lib/surface/lame_client.cc +26 -19
- data/src/core/lib/surface/server.cc +46 -85
- data/src/core/lib/surface/server.h +14 -16
- data/src/core/lib/surface/validate_metadata.cc +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +10 -11
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/byte_stream.cc +6 -0
- data/src/core/lib/transport/error_utils.cc +5 -3
- data/src/core/lib/transport/error_utils.h +2 -1
- data/src/core/lib/transport/metadata_batch.h +1131 -792
- data/src/core/lib/transport/parsed_metadata.cc +37 -0
- data/src/core/lib/transport/parsed_metadata.h +228 -90
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/status_conversion.cc +2 -2
- data/src/core/lib/transport/status_conversion.h +1 -1
- data/src/core/lib/transport/timeout_encoding.cc +204 -67
- data/src/core/lib/transport/timeout_encoding.h +40 -10
- data/src/core/lib/transport/transport.cc +7 -27
- data/src/core/lib/transport/transport.h +103 -4
- data/src/core/lib/transport/transport_impl.h +14 -0
- data/src/core/lib/transport/transport_op_string.cc +5 -47
- data/src/core/lib/uri/uri_parser.cc +237 -63
- data/src/core/lib/uri/uri_parser.h +39 -23
- data/src/core/plugin_registry/grpc_plugin_registry.cc +24 -92
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +28 -23
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +21 -13
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
- data/src/core/tsi/local_transport_security.cc +16 -24
- data/src/core/tsi/local_transport_security.h +1 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
- data/src/core/tsi/ssl_transport_security.cc +210 -53
- data/src/core/tsi/ssl_transport_security.h +47 -8
- data/src/core/tsi/transport_security_interface.h +2 -0
- data/src/ruby/ext/grpc/extconf.rb +10 -3
- data/src/ruby/ext/grpc/rb_channel.c +5 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -34
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +39 -51
- data/src/ruby/ext/grpc/rb_server.c +7 -4
- data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
- data/src/ruby/pb/test/client.rb +769 -0
- data/src/ruby/pb/test/server.rb +252 -0
- data/src/ruby/pb/test/xds_client.rb +415 -0
- data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
- data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
- data/third_party/abseil-cpp/absl/base/config.h +67 -37
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
- data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
- data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
- data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
- data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
- data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
- data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
- data/third_party/abseil-cpp/absl/random/random.h +189 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
- data/third_party/abseil-cpp/absl/status/status.cc +9 -17
- data/third_party/abseil-cpp/absl/status/status.h +19 -15
- data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
- data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
- data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
- data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
- data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
- data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
- data/third_party/abseil-cpp/absl/time/time.h +67 -36
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
- data/third_party/abseil-cpp/absl/types/span.h +3 -3
- data/third_party/boringssl-with-bazel/err_data.c +681 -677
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +29 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
- data/third_party/cares/cares/{ares.h → include/ares.h} +73 -1
- data/third_party/cares/cares/{ares_dns.h → include/ares_dns.h} +9 -0
- data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
- data/third_party/cares/cares/{ares_version.h → include/ares_version.h} +3 -3
- data/third_party/cares/cares/{ares__close_sockets.c → src/lib/ares__close_sockets.c} +2 -2
- data/third_party/cares/cares/{ares__get_hostent.c → src/lib/ares__get_hostent.c} +1 -2
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
- data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
- data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_android.c +444 -0
- data/third_party/cares/cares/src/lib/ares_android.h +27 -0
- data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
- data/third_party/cares/cares/{ares_create_query.c → src/lib/ares_create_query.c} +8 -17
- data/third_party/cares/cares/{ares_data.c → src/lib/ares_data.c} +18 -0
- data/third_party/cares/cares/{ares_data.h → src/lib/ares_data.h} +2 -0
- data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
- data/third_party/cares/cares/{ares_expand_name.c → src/lib/ares_expand_name.c} +114 -23
- data/third_party/cares/cares/{ares_expand_string.c → src/lib/ares_expand_string.c} +2 -5
- data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
- data/third_party/cares/cares/{ares_free_hostent.c → src/lib/ares_free_hostent.c} +6 -4
- data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
- data/third_party/cares/cares/{ares_getenv.c → src/lib/ares_getenv.c} +0 -2
- data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
- data/third_party/cares/cares/{ares_gethostbyaddr.c → src/lib/ares_gethostbyaddr.c} +2 -9
- data/third_party/cares/cares/{ares_gethostbyname.c → src/lib/ares_gethostbyname.c} +25 -20
- data/third_party/cares/cares/{ares_getnameinfo.c → src/lib/ares_getnameinfo.c} +4 -10
- data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
- data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
- data/third_party/cares/cares/{ares_init.c → src/lib/ares_init.c} +79 -40
- data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
- data/third_party/cares/cares/{ares_ipv6.h → src/lib/ares_ipv6.h} +7 -0
- data/third_party/cares/cares/{ares_library_init.c → src/lib/ares_library_init.c} +7 -2
- data/third_party/cares/cares/{ares_library_init.h → src/lib/ares_library_init.h} +1 -1
- data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
- data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
- data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
- data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
- data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
- data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
- data/third_party/cares/cares/{ares_parse_mx_reply.c → src/lib/ares_parse_mx_reply.c} +2 -8
- data/third_party/cares/cares/{ares_parse_naptr_reply.c → src/lib/ares_parse_naptr_reply.c} +2 -13
- data/third_party/cares/cares/{ares_parse_ns_reply.c → src/lib/ares_parse_ns_reply.c} +5 -11
- data/third_party/cares/cares/{ares_parse_ptr_reply.c → src/lib/ares_parse_ptr_reply.c} +53 -46
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
- data/third_party/cares/cares/{ares_parse_srv_reply.c → src/lib/ares_parse_srv_reply.c} +2 -13
- data/third_party/cares/cares/{ares_parse_txt_reply.c → src/lib/ares_parse_txt_reply.c} +3 -9
- data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
- data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
- data/third_party/cares/cares/{ares_private.h → src/lib/ares_private.h} +52 -11
- data/third_party/cares/cares/{ares_process.c → src/lib/ares_process.c} +127 -52
- data/third_party/cares/cares/{ares_query.c → src/lib/ares_query.c} +3 -9
- data/third_party/cares/cares/{ares_search.c → src/lib/ares_search.c} +5 -7
- data/third_party/cares/cares/{ares_send.c → src/lib/ares_send.c} +2 -8
- data/third_party/cares/cares/{ares_setup.h → src/lib/ares_setup.h} +4 -1
- data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
- data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
- data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
- data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
- data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
- data/third_party/cares/cares/{ares_strsplit.c → src/lib/ares_strsplit.c} +4 -0
- data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
- data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
- data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
- data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
- data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
- data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
- data/third_party/cares/cares/src/lib/config-dos.h +115 -0
- data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
- data/third_party/cares/cares/{inet_net_pton.c → src/lib/inet_net_pton.c} +2 -8
- data/third_party/cares/cares/{inet_ntop.c → src/lib/inet_ntop.c} +2 -8
- data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
- data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
- data/third_party/upb/third_party/utf8_range/naive.c +92 -0
- data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
- data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
- data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
- data/third_party/upb/upb/decode.c +732 -378
- data/third_party/upb/upb/decode.h +43 -17
- data/third_party/upb/upb/decode_fast.c +303 -301
- data/third_party/upb/upb/decode_fast.h +18 -18
- data/third_party/upb/upb/decode_internal.h +73 -55
- data/third_party/upb/upb/def.c +2074 -981
- data/third_party/upb/upb/def.h +332 -260
- data/third_party/upb/upb/def.hpp +139 -169
- data/third_party/upb/upb/encode.c +267 -174
- data/third_party/upb/upb/encode.h +15 -17
- data/third_party/upb/upb/json_encode.c +776 -0
- data/third_party/upb/upb/json_encode.h +62 -0
- data/third_party/upb/upb/msg.c +152 -121
- data/third_party/upb/upb/msg.h +39 -33
- data/third_party/upb/upb/msg_internal.h +395 -251
- data/third_party/upb/upb/port_def.inc +8 -0
- data/third_party/upb/upb/port_undef.inc +1 -0
- data/third_party/upb/upb/reflection.c +292 -212
- data/third_party/upb/upb/reflection.h +91 -67
- data/third_party/upb/upb/reflection.hpp +6 -6
- data/third_party/upb/upb/table.c +231 -147
- data/third_party/upb/upb/table_internal.h +129 -95
- data/third_party/upb/upb/text_encode.c +114 -91
- data/third_party/upb/upb/text_encode.h +10 -10
- data/third_party/upb/upb/upb.c +118 -71
- data/third_party/upb/upb/upb.h +157 -151
- data/third_party/upb/upb/upb.hpp +31 -28
- data/third_party/upb/upb/upb_internal.h +21 -11
- data/third_party/xxhash/xxhash.h +607 -352
- data/third_party/zlib/crc32.c +966 -292
- data/third_party/zlib/crc32.h +9441 -436
- data/third_party/zlib/deflate.c +78 -30
- data/third_party/zlib/deflate.h +12 -15
- data/third_party/zlib/gzguts.h +3 -2
- data/third_party/zlib/gzlib.c +5 -3
- data/third_party/zlib/gzread.c +5 -7
- data/third_party/zlib/gzwrite.c +25 -13
- data/third_party/zlib/infback.c +2 -1
- data/third_party/zlib/inffast.c +14 -14
- data/third_party/zlib/inflate.c +39 -8
- data/third_party/zlib/inflate.h +3 -2
- data/third_party/zlib/inftrees.c +3 -3
- data/third_party/zlib/trees.c +27 -48
- data/third_party/zlib/zlib.h +123 -100
- data/third_party/zlib/zutil.c +2 -2
- data/third_party/zlib/zutil.h +12 -9
- metadata +505 -221
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
- data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -195
- data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -264
- data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -119
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -95
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -189
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -53
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -83
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -62
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
- data/src/core/lib/avl/avl.cc +0 -306
- data/src/core/lib/compression/algorithm_metadata.h +0 -62
- data/src/core/lib/compression/compression_args.cc +0 -138
- data/src/core/lib/compression/compression_args.h +0 -56
- data/src/core/lib/compression/stream_compression.cc +0 -81
- data/src/core/lib/compression/stream_compression.h +0 -117
- data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
- data/src/core/lib/compression/stream_compression_gzip.h +0 -28
- data/src/core/lib/compression/stream_compression_identity.cc +0 -91
- data/src/core/lib/compression/stream_compression_identity.h +0 -29
- data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1654
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
- data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
- data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
- data/src/core/lib/iomgr/iomgr_custom.h +0 -49
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
- data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
- data/src/core/lib/iomgr/pollset_custom.cc +0 -105
- data/src/core/lib/iomgr/pollset_custom.h +0 -37
- data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
- data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
- data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
- data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
- data/src/core/lib/iomgr/resource_quota.cc +0 -1106
- data/src/core/lib/iomgr/resource_quota.h +0 -226
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
- data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
- data/src/core/lib/iomgr/tcp_custom.cc +0 -377
- data/src/core/lib/iomgr/tcp_custom.h +0 -86
- data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
- data/src/core/lib/iomgr/timer_custom.cc +0 -96
- data/src/core/lib/iomgr/timer_custom.h +0 -43
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +0 -171
- data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
- data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
- data/src/core/lib/slice/slice_intern.cc +0 -367
- data/src/core/lib/slice/slice_utils.h +0 -200
- data/src/core/lib/slice/static_slice.cc +0 -529
- data/src/core/lib/slice/static_slice.h +0 -331
- data/src/core/lib/surface/init_secure.cc +0 -103
- data/src/core/lib/transport/metadata.cc +0 -714
- data/src/core/lib/transport/metadata.h +0 -449
- data/src/core/lib/transport/metadata_batch.cc +0 -94
- data/src/core/lib/transport/static_metadata.cc +0 -1117
- data/src/core/lib/transport/static_metadata.h +0 -340
- data/src/core/lib/transport/status_metadata.cc +0 -63
- data/src/core/lib/transport/status_metadata.h +0 -48
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
- data/third_party/cares/cares/ares_getopt.c +0 -122
- data/third_party/cares/cares/ares_getopt.h +0 -53
- data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
- data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
- data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
data/third_party/upb/upb/def.c
CHANGED
@@ -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"
|
17
|
-
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
18
|
-
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
19
|
-
* DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY
|
20
|
-
*
|
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,143 +41,267 @@
|
|
41
41
|
|
42
42
|
typedef struct {
|
43
43
|
size_t len;
|
44
|
-
char str[1];
|
44
|
+
char str[1]; /* Null-terminated string data follows. */
|
45
45
|
} str_t;
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
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
|
68
|
+
str_t* str;
|
59
69
|
} defaultval;
|
60
|
-
const upb_oneofdef *oneof;
|
61
70
|
union {
|
62
|
-
const
|
63
|
-
const
|
64
|
-
|
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
|
-
|
74
|
-
|
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
|
92
|
+
};
|
93
|
+
|
94
|
+
struct upb_ExtensionRange {
|
95
|
+
const google_protobuf_ExtensionRangeOptions* opts;
|
96
|
+
int32_t start;
|
97
|
+
int32_t end;
|
75
98
|
};
|
76
99
|
|
77
|
-
struct
|
78
|
-
const
|
79
|
-
const
|
80
|
-
const
|
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;
|
81
106
|
|
82
107
|
/* Tables for looking up fields by number and name. */
|
83
108
|
upb_inttable itof;
|
84
109
|
upb_strtable ntof;
|
85
110
|
|
86
|
-
|
87
|
-
|
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;
|
88
120
|
int field_count;
|
89
|
-
int oneof_count;
|
90
121
|
int real_oneof_count;
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
122
|
+
int oneof_count;
|
123
|
+
int ext_range_count;
|
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
|
97
132
|
};
|
98
133
|
|
99
|
-
struct
|
100
|
-
const
|
101
|
-
const
|
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;
|
102
140
|
upb_strtable ntoi;
|
103
141
|
upb_inttable iton;
|
142
|
+
const upb_EnumValueDef* values;
|
143
|
+
int value_count;
|
104
144
|
int32_t defaultval;
|
145
|
+
#if UINTPTR_MAX == 0xffffffff
|
146
|
+
uint32_t padding; // Increase size to a multiple of 8.
|
147
|
+
#endif
|
105
148
|
};
|
106
149
|
|
107
|
-
struct
|
108
|
-
const
|
109
|
-
const
|
150
|
+
struct upb_EnumValueDef {
|
151
|
+
const google_protobuf_EnumValueOptions* opts;
|
152
|
+
const upb_EnumDef* parent;
|
153
|
+
const char* full_name;
|
154
|
+
int32_t number;
|
155
|
+
};
|
156
|
+
|
157
|
+
struct upb_OneofDef {
|
158
|
+
const google_protobuf_OneofOptions* opts;
|
159
|
+
const upb_MessageDef* parent;
|
160
|
+
const char* full_name;
|
110
161
|
int field_count;
|
111
162
|
bool synthetic;
|
112
|
-
const
|
163
|
+
const upb_FieldDef** fields;
|
113
164
|
upb_strtable ntof;
|
114
165
|
upb_inttable itof;
|
166
|
+
#if UINTPTR_MAX == 0xffffffff
|
167
|
+
uint32_t padding; // Increase size to a multiple of 8.
|
168
|
+
#endif
|
115
169
|
};
|
116
170
|
|
117
|
-
struct
|
118
|
-
const
|
119
|
-
const char
|
120
|
-
const char
|
121
|
-
|
122
|
-
|
123
|
-
const
|
124
|
-
const
|
125
|
-
const
|
126
|
-
const
|
127
|
-
const
|
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;
|
128
185
|
|
129
186
|
int dep_count;
|
130
|
-
int
|
131
|
-
int
|
132
|
-
int
|
133
|
-
|
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;
|
206
|
+
};
|
207
|
+
|
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;
|
134
215
|
};
|
135
216
|
|
136
|
-
struct
|
137
|
-
|
217
|
+
struct upb_DefPool {
|
218
|
+
upb_Arena* arena;
|
138
219
|
upb_strtable syms; /* full_name -> packed def ptr */
|
139
|
-
upb_strtable files;
|
220
|
+
upb_strtable files; /* file_name -> upb_FileDef* */
|
221
|
+
upb_inttable exts; /* upb_MiniTable_Extension* -> upb_FieldDef* */
|
222
|
+
upb_ExtensionRegistry* extreg;
|
140
223
|
size_t bytes_loaded;
|
141
224
|
};
|
142
225
|
|
143
226
|
/* Inside a symtab we store tagged pointers to specific def types. */
|
144
227
|
typedef enum {
|
145
|
-
|
228
|
+
UPB_DEFTYPE_MASK = 7,
|
146
229
|
|
147
230
|
/* Only inside symtab table. */
|
231
|
+
UPB_DEFTYPE_EXT = 0,
|
148
232
|
UPB_DEFTYPE_MSG = 1,
|
149
233
|
UPB_DEFTYPE_ENUM = 2,
|
234
|
+
UPB_DEFTYPE_ENUMVAL = 3,
|
235
|
+
UPB_DEFTYPE_SERVICE = 4,
|
150
236
|
|
151
237
|
/* Only inside message table. */
|
238
|
+
UPB_DEFTYPE_FIELD = 0,
|
152
239
|
UPB_DEFTYPE_ONEOF = 1,
|
153
|
-
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
|
154
245
|
} upb_deftype_t;
|
155
246
|
|
156
|
-
|
247
|
+
#define FIELD_TYPE_UNSPECIFIED 0
|
248
|
+
|
249
|
+
static upb_deftype_t deftype(upb_value v) {
|
157
250
|
uintptr_t num = (uintptr_t)upb_value_getconstptr(v);
|
158
|
-
return
|
251
|
+
return num & UPB_DEFTYPE_MASK;
|
159
252
|
}
|
160
253
|
|
161
|
-
static
|
162
|
-
uintptr_t num = (uintptr_t)
|
254
|
+
static const void* unpack_def(upb_value v, upb_deftype_t type) {
|
255
|
+
uintptr_t num = (uintptr_t)upb_value_getconstptr(v);
|
256
|
+
return (num & UPB_DEFTYPE_MASK) == type
|
257
|
+
? (const void*)(num & ~UPB_DEFTYPE_MASK)
|
258
|
+
: NULL;
|
259
|
+
}
|
260
|
+
|
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);
|
276
|
+
uintptr_t num = (uintptr_t)ptr;
|
277
|
+
UPB_ASSERT((num & UPB_DEFTYPE_MASK) == 0);
|
278
|
+
num |= type;
|
163
279
|
return upb_value_constptr((const void*)num);
|
164
280
|
}
|
165
281
|
|
166
282
|
/* isalpha() etc. from <ctype.h> are locale-dependent, which we don't want. */
|
167
|
-
static bool upb_isbetween(
|
283
|
+
static bool upb_isbetween(uint8_t c, uint8_t low, uint8_t high) {
|
168
284
|
return c >= low && c <= high;
|
169
285
|
}
|
170
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
|
+
|
171
294
|
static bool upb_isletter(char c) {
|
172
|
-
|
295
|
+
char lower = upb_ascii_lower(c);
|
296
|
+
return upb_isbetween(lower, 'a', 'z') || c == '_';
|
173
297
|
}
|
174
298
|
|
175
299
|
static bool upb_isalphanum(char c) {
|
176
300
|
return upb_isletter(c) || upb_isbetween(c, '0', '9');
|
177
301
|
}
|
178
302
|
|
179
|
-
static const char
|
180
|
-
const char
|
303
|
+
static const char* shortdefname(const char* fullname) {
|
304
|
+
const char* p;
|
181
305
|
|
182
306
|
if (fullname == NULL) {
|
183
307
|
return NULL;
|
@@ -192,371 +316,417 @@ static const char *shortdefname(const char *fullname) {
|
|
192
316
|
|
193
317
|
/* All submessage fields are lower than all other fields.
|
194
318
|
* Secondly, fields are increasing in order. */
|
195
|
-
uint32_t field_rank(const
|
196
|
-
uint32_t ret =
|
319
|
+
uint32_t field_rank(const upb_FieldDef* f) {
|
320
|
+
uint32_t ret = upb_FieldDef_Number(f);
|
197
321
|
const uint32_t high_bit = 1 << 30;
|
198
322
|
UPB_ASSERT(ret < high_bit);
|
199
|
-
if (!
|
200
|
-
ret |= high_bit;
|
323
|
+
if (!upb_FieldDef_IsSubMessage(f)) ret |= high_bit;
|
201
324
|
return ret;
|
202
325
|
}
|
203
326
|
|
204
|
-
int cmp_fields(const void
|
205
|
-
const
|
206
|
-
const
|
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;
|
207
330
|
return field_rank(f1) - field_rank(f2);
|
208
331
|
}
|
209
332
|
|
210
|
-
static void
|
211
|
-
|
333
|
+
static void upb_Status_setoom(upb_Status* status) {
|
334
|
+
upb_Status_SetErrorMessage(status, "out of memory");
|
212
335
|
}
|
213
336
|
|
214
|
-
static void assign_msg_wellknowntype(
|
215
|
-
const char
|
337
|
+
static void assign_msg_wellknowntype(upb_MessageDef* m) {
|
338
|
+
const char* name = upb_MessageDef_FullName(m);
|
216
339
|
if (name == NULL) {
|
217
|
-
m->well_known_type =
|
340
|
+
m->well_known_type = kUpb_WellKnown_Unspecified;
|
218
341
|
return;
|
219
342
|
}
|
220
343
|
if (!strcmp(name, "google.protobuf.Any")) {
|
221
|
-
m->well_known_type =
|
344
|
+
m->well_known_type = kUpb_WellKnown_Any;
|
222
345
|
} else if (!strcmp(name, "google.protobuf.FieldMask")) {
|
223
|
-
m->well_known_type =
|
346
|
+
m->well_known_type = kUpb_WellKnown_FieldMask;
|
224
347
|
} else if (!strcmp(name, "google.protobuf.Duration")) {
|
225
|
-
m->well_known_type =
|
348
|
+
m->well_known_type = kUpb_WellKnown_Duration;
|
226
349
|
} else if (!strcmp(name, "google.protobuf.Timestamp")) {
|
227
|
-
m->well_known_type =
|
350
|
+
m->well_known_type = kUpb_WellKnown_Timestamp;
|
228
351
|
} else if (!strcmp(name, "google.protobuf.DoubleValue")) {
|
229
|
-
m->well_known_type =
|
352
|
+
m->well_known_type = kUpb_WellKnown_DoubleValue;
|
230
353
|
} else if (!strcmp(name, "google.protobuf.FloatValue")) {
|
231
|
-
m->well_known_type =
|
354
|
+
m->well_known_type = kUpb_WellKnown_FloatValue;
|
232
355
|
} else if (!strcmp(name, "google.protobuf.Int64Value")) {
|
233
|
-
m->well_known_type =
|
356
|
+
m->well_known_type = kUpb_WellKnown_Int64Value;
|
234
357
|
} else if (!strcmp(name, "google.protobuf.UInt64Value")) {
|
235
|
-
m->well_known_type =
|
358
|
+
m->well_known_type = kUpb_WellKnown_UInt64Value;
|
236
359
|
} else if (!strcmp(name, "google.protobuf.Int32Value")) {
|
237
|
-
m->well_known_type =
|
360
|
+
m->well_known_type = kUpb_WellKnown_Int32Value;
|
238
361
|
} else if (!strcmp(name, "google.protobuf.UInt32Value")) {
|
239
|
-
m->well_known_type =
|
362
|
+
m->well_known_type = kUpb_WellKnown_UInt32Value;
|
240
363
|
} else if (!strcmp(name, "google.protobuf.BoolValue")) {
|
241
|
-
m->well_known_type =
|
364
|
+
m->well_known_type = kUpb_WellKnown_BoolValue;
|
242
365
|
} else if (!strcmp(name, "google.protobuf.StringValue")) {
|
243
|
-
m->well_known_type =
|
366
|
+
m->well_known_type = kUpb_WellKnown_StringValue;
|
244
367
|
} else if (!strcmp(name, "google.protobuf.BytesValue")) {
|
245
|
-
m->well_known_type =
|
368
|
+
m->well_known_type = kUpb_WellKnown_BytesValue;
|
246
369
|
} else if (!strcmp(name, "google.protobuf.Value")) {
|
247
|
-
m->well_known_type =
|
370
|
+
m->well_known_type = kUpb_WellKnown_Value;
|
248
371
|
} else if (!strcmp(name, "google.protobuf.ListValue")) {
|
249
|
-
m->well_known_type =
|
372
|
+
m->well_known_type = kUpb_WellKnown_ListValue;
|
250
373
|
} else if (!strcmp(name, "google.protobuf.Struct")) {
|
251
|
-
m->well_known_type =
|
374
|
+
m->well_known_type = kUpb_WellKnown_Struct;
|
252
375
|
} else {
|
253
|
-
m->well_known_type =
|
376
|
+
m->well_known_type = kUpb_WellKnown_Unspecified;
|
254
377
|
}
|
255
378
|
}
|
256
379
|
|
380
|
+
/* upb_EnumDef ****************************************************************/
|
257
381
|
|
258
|
-
|
259
|
-
|
260
|
-
const char *upb_enumdef_fullname(const upb_enumdef *e) {
|
261
|
-
return e->full_name;
|
382
|
+
const google_protobuf_EnumOptions* upb_EnumDef_Options(const upb_EnumDef* e) {
|
383
|
+
return e->opts;
|
262
384
|
}
|
263
385
|
|
264
|
-
|
265
|
-
return
|
386
|
+
bool upb_EnumDef_HasOptions(const upb_EnumDef* e) {
|
387
|
+
return e->opts != (void*)opt_default;
|
266
388
|
}
|
267
389
|
|
268
|
-
const
|
269
|
-
return e->file;
|
270
|
-
}
|
390
|
+
const char* upb_EnumDef_FullName(const upb_EnumDef* e) { return e->full_name; }
|
271
391
|
|
272
|
-
|
273
|
-
|
274
|
-
return e->defaultval;
|
392
|
+
const char* upb_EnumDef_Name(const upb_EnumDef* e) {
|
393
|
+
return shortdefname(e->full_name);
|
275
394
|
}
|
276
395
|
|
277
|
-
|
278
|
-
|
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;
|
279
400
|
}
|
280
401
|
|
281
|
-
|
282
|
-
|
283
|
-
|
402
|
+
int32_t upb_EnumDef_Default(const upb_EnumDef* e) {
|
403
|
+
UPB_ASSERT(upb_EnumDef_FindValueByNumber(e, e->defaultval));
|
404
|
+
return e->defaultval;
|
284
405
|
}
|
285
406
|
|
286
|
-
|
287
|
-
bool upb_enum_done(upb_enum_iter *iter) { return upb_strtable_done(iter); }
|
407
|
+
int upb_EnumDef_ValueCount(const upb_EnumDef* e) { return e->value_count; }
|
288
408
|
|
289
|
-
|
290
|
-
|
409
|
+
const upb_EnumValueDef* upb_EnumDef_FindValueByNameWithSize(
|
410
|
+
const upb_EnumDef* def, const char* name, size_t len) {
|
291
411
|
upb_value v;
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
if (num) *num = upb_value_getint32(v);
|
296
|
-
return true;
|
412
|
+
return upb_strtable_lookup2(&def->ntoi, name, len, &v)
|
413
|
+
? upb_value_getconstptr(v)
|
414
|
+
: NULL;
|
297
415
|
}
|
298
416
|
|
299
|
-
const
|
417
|
+
const upb_EnumValueDef* upb_EnumDef_FindValueByNumber(const upb_EnumDef* def,
|
418
|
+
int32_t num) {
|
300
419
|
upb_value v;
|
301
|
-
return upb_inttable_lookup(&def->iton, num, &v) ?
|
420
|
+
return upb_inttable_lookup(&def->iton, num, &v) ? upb_value_getconstptr(v)
|
421
|
+
: NULL;
|
302
422
|
}
|
303
423
|
|
304
|
-
const
|
305
|
-
|
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);
|
306
428
|
}
|
307
429
|
|
308
|
-
|
309
|
-
|
430
|
+
const upb_EnumValueDef* upb_EnumDef_Value(const upb_EnumDef* e, int i) {
|
431
|
+
UPB_ASSERT(0 <= i && i < e->value_count);
|
432
|
+
return &e->values[i];
|
310
433
|
}
|
311
434
|
|
435
|
+
/* upb_EnumValueDef ***********************************************************/
|
312
436
|
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
return f->full_name;
|
437
|
+
const google_protobuf_EnumValueOptions* upb_EnumValueDef_Options(
|
438
|
+
const upb_EnumValueDef* e) {
|
439
|
+
return e->opts;
|
317
440
|
}
|
318
441
|
|
319
|
-
|
320
|
-
|
321
|
-
case UPB_DESCRIPTOR_TYPE_DOUBLE:
|
322
|
-
return UPB_TYPE_DOUBLE;
|
323
|
-
case UPB_DESCRIPTOR_TYPE_FLOAT:
|
324
|
-
return UPB_TYPE_FLOAT;
|
325
|
-
case UPB_DESCRIPTOR_TYPE_INT64:
|
326
|
-
case UPB_DESCRIPTOR_TYPE_SINT64:
|
327
|
-
case UPB_DESCRIPTOR_TYPE_SFIXED64:
|
328
|
-
return UPB_TYPE_INT64;
|
329
|
-
case UPB_DESCRIPTOR_TYPE_INT32:
|
330
|
-
case UPB_DESCRIPTOR_TYPE_SFIXED32:
|
331
|
-
case UPB_DESCRIPTOR_TYPE_SINT32:
|
332
|
-
return UPB_TYPE_INT32;
|
333
|
-
case UPB_DESCRIPTOR_TYPE_UINT64:
|
334
|
-
case UPB_DESCRIPTOR_TYPE_FIXED64:
|
335
|
-
return UPB_TYPE_UINT64;
|
336
|
-
case UPB_DESCRIPTOR_TYPE_UINT32:
|
337
|
-
case UPB_DESCRIPTOR_TYPE_FIXED32:
|
338
|
-
return UPB_TYPE_UINT32;
|
339
|
-
case UPB_DESCRIPTOR_TYPE_ENUM:
|
340
|
-
return UPB_TYPE_ENUM;
|
341
|
-
case UPB_DESCRIPTOR_TYPE_BOOL:
|
342
|
-
return UPB_TYPE_BOOL;
|
343
|
-
case UPB_DESCRIPTOR_TYPE_STRING:
|
344
|
-
return UPB_TYPE_STRING;
|
345
|
-
case UPB_DESCRIPTOR_TYPE_BYTES:
|
346
|
-
return UPB_TYPE_BYTES;
|
347
|
-
case UPB_DESCRIPTOR_TYPE_GROUP:
|
348
|
-
case UPB_DESCRIPTOR_TYPE_MESSAGE:
|
349
|
-
return UPB_TYPE_MESSAGE;
|
350
|
-
}
|
351
|
-
UPB_UNREACHABLE();
|
442
|
+
bool upb_EnumValueDef_HasOptions(const upb_EnumValueDef* e) {
|
443
|
+
return e->opts != (void*)opt_default;
|
352
444
|
}
|
353
445
|
|
354
|
-
|
355
|
-
return
|
446
|
+
const upb_EnumDef* upb_EnumValueDef_Enum(const upb_EnumValueDef* ev) {
|
447
|
+
return ev->parent;
|
356
448
|
}
|
357
449
|
|
358
|
-
|
359
|
-
return
|
450
|
+
const char* upb_EnumValueDef_FullName(const upb_EnumValueDef* ev) {
|
451
|
+
return ev->full_name;
|
360
452
|
}
|
361
453
|
|
362
|
-
|
363
|
-
return
|
454
|
+
const char* upb_EnumValueDef_Name(const upb_EnumValueDef* ev) {
|
455
|
+
return shortdefname(ev->full_name);
|
364
456
|
}
|
365
457
|
|
366
|
-
|
367
|
-
return
|
458
|
+
int32_t upb_EnumValueDef_Number(const upb_EnumValueDef* ev) {
|
459
|
+
return ev->number;
|
368
460
|
}
|
369
461
|
|
370
|
-
|
371
|
-
|
462
|
+
uint32_t upb_EnumValueDef_Index(const upb_EnumValueDef* ev) {
|
463
|
+
// Compute index in our parent's array.
|
464
|
+
return ev - ev->parent->values;
|
372
465
|
}
|
373
466
|
|
374
|
-
|
375
|
-
|
376
|
-
}
|
467
|
+
/* upb_ExtensionRange
|
468
|
+
* ***************************************************************/
|
377
469
|
|
378
|
-
|
379
|
-
|
470
|
+
const google_protobuf_ExtensionRangeOptions* upb_ExtensionRange_Options(
|
471
|
+
const upb_ExtensionRange* r) {
|
472
|
+
return r->opts;
|
380
473
|
}
|
381
474
|
|
382
|
-
|
383
|
-
return
|
475
|
+
bool upb_ExtensionRange_HasOptions(const upb_ExtensionRange* r) {
|
476
|
+
return r->opts != (void*)opt_default;
|
384
477
|
}
|
385
478
|
|
386
|
-
|
387
|
-
return
|
479
|
+
int32_t upb_ExtensionRange_Start(const upb_ExtensionRange* e) {
|
480
|
+
return e->start;
|
388
481
|
}
|
389
482
|
|
390
|
-
|
391
|
-
return f->file;
|
392
|
-
}
|
483
|
+
int32_t upb_ExtensionRange_End(const upb_ExtensionRange* e) { return e->end; }
|
393
484
|
|
394
|
-
|
395
|
-
|
485
|
+
/* upb_FieldDef ***************************************************************/
|
486
|
+
|
487
|
+
const google_protobuf_FieldOptions* upb_FieldDef_Options(
|
488
|
+
const upb_FieldDef* f) {
|
489
|
+
return f->opts;
|
396
490
|
}
|
397
491
|
|
398
|
-
|
399
|
-
return f->
|
492
|
+
bool upb_FieldDef_HasOptions(const upb_FieldDef* f) {
|
493
|
+
return f->opts != (void*)opt_default;
|
400
494
|
}
|
401
495
|
|
402
|
-
const
|
403
|
-
|
404
|
-
return f->oneof;
|
496
|
+
const char* upb_FieldDef_FullName(const upb_FieldDef* f) {
|
497
|
+
return f->full_name;
|
405
498
|
}
|
406
499
|
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
500
|
+
upb_CType upb_FieldDef_CType(const upb_FieldDef* f) {
|
501
|
+
switch (f->type_) {
|
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;
|
420
531
|
}
|
421
|
-
|
532
|
+
UPB_UNREACHABLE();
|
422
533
|
}
|
423
534
|
|
424
|
-
|
425
|
-
UPB_UNUSED(f);
|
426
|
-
UPB_UNUSED(ctype);
|
427
|
-
}
|
535
|
+
upb_FieldType upb_FieldDef_Type(const upb_FieldDef* f) { return f->type_; }
|
428
536
|
|
429
|
-
|
430
|
-
chkdefaulttype(f, UPB_TYPE_INT64);
|
431
|
-
return f->defaultval.sint;
|
432
|
-
}
|
537
|
+
uint32_t upb_FieldDef_Index(const upb_FieldDef* f) { return f->index_; }
|
433
538
|
|
434
|
-
|
435
|
-
chkdefaulttype(f, UPB_TYPE_INT32);
|
436
|
-
return (int32_t)f->defaultval.sint;
|
437
|
-
}
|
539
|
+
upb_Label upb_FieldDef_Label(const upb_FieldDef* f) { return f->label_; }
|
438
540
|
|
439
|
-
|
440
|
-
|
441
|
-
|
541
|
+
uint32_t upb_FieldDef_Number(const upb_FieldDef* f) { return f->number_; }
|
542
|
+
|
543
|
+
bool upb_FieldDef_IsExtension(const upb_FieldDef* f) {
|
544
|
+
return f->is_extension_;
|
442
545
|
}
|
443
546
|
|
444
|
-
|
445
|
-
|
446
|
-
|
547
|
+
bool upb_FieldDef_IsPacked(const upb_FieldDef* f) { return f->packed_; }
|
548
|
+
|
549
|
+
const char* upb_FieldDef_Name(const upb_FieldDef* f) {
|
550
|
+
return shortdefname(f->full_name);
|
447
551
|
}
|
448
552
|
|
449
|
-
|
450
|
-
|
451
|
-
return f->defaultval.boolean;
|
553
|
+
const char* upb_FieldDef_JsonName(const upb_FieldDef* f) {
|
554
|
+
return f->json_name;
|
452
555
|
}
|
453
556
|
|
454
|
-
|
455
|
-
|
456
|
-
return f->defaultval.flt;
|
557
|
+
bool upb_FieldDef_HasJsonName(const upb_FieldDef* f) {
|
558
|
+
return f->has_json_name_;
|
457
559
|
}
|
458
560
|
|
459
|
-
|
460
|
-
|
461
|
-
|
561
|
+
const upb_FileDef* upb_FieldDef_File(const upb_FieldDef* f) { return f->file; }
|
562
|
+
|
563
|
+
const upb_MessageDef* upb_FieldDef_ContainingType(const upb_FieldDef* f) {
|
564
|
+
return f->msgdef;
|
462
565
|
}
|
463
566
|
|
464
|
-
const
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
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
|
+
}
|
611
|
+
}
|
612
|
+
default:
|
613
|
+
UPB_UNREACHABLE();
|
475
614
|
}
|
615
|
+
|
616
|
+
return ret;
|
476
617
|
}
|
477
618
|
|
478
|
-
const
|
479
|
-
return
|
619
|
+
const upb_MessageDef* upb_FieldDef_MessageSubDef(const upb_FieldDef* f) {
|
620
|
+
return upb_FieldDef_CType(f) == kUpb_CType_Message ? f->sub.msgdef : NULL;
|
480
621
|
}
|
481
622
|
|
482
|
-
const
|
483
|
-
return
|
623
|
+
const upb_EnumDef* upb_FieldDef_EnumSubDef(const upb_FieldDef* f) {
|
624
|
+
return upb_FieldDef_CType(f) == kUpb_CType_Enum ? f->sub.enumdef : NULL;
|
484
625
|
}
|
485
626
|
|
486
|
-
const
|
627
|
+
const upb_MiniTable_Field* upb_FieldDef_MiniTable(const upb_FieldDef* f) {
|
628
|
+
UPB_ASSERT(!upb_FieldDef_IsExtension(f));
|
487
629
|
return &f->msgdef->layout->fields[f->layout_index];
|
488
630
|
}
|
489
631
|
|
490
|
-
|
491
|
-
|
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];
|
636
|
+
}
|
637
|
+
|
638
|
+
bool _upb_FieldDef_IsProto3Optional(const upb_FieldDef* f) {
|
639
|
+
return f->proto3_optional_;
|
492
640
|
}
|
493
641
|
|
494
|
-
bool
|
495
|
-
return
|
496
|
-
upb_fielddef_type(f) == UPB_TYPE_BYTES;
|
642
|
+
bool upb_FieldDef_IsSubMessage(const upb_FieldDef* f) {
|
643
|
+
return upb_FieldDef_CType(f) == kUpb_CType_Message;
|
497
644
|
}
|
498
645
|
|
499
|
-
bool
|
500
|
-
return
|
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;
|
501
649
|
}
|
502
650
|
|
503
|
-
bool
|
504
|
-
return
|
651
|
+
bool upb_FieldDef_IsRepeated(const upb_FieldDef* f) {
|
652
|
+
return upb_FieldDef_Label(f) == kUpb_Label_Repeated;
|
505
653
|
}
|
506
654
|
|
507
|
-
bool
|
508
|
-
return
|
509
|
-
upb_msgdef_mapentry(upb_fielddef_msgsubdef(f));
|
655
|
+
bool upb_FieldDef_IsPrimitive(const upb_FieldDef* f) {
|
656
|
+
return !upb_FieldDef_IsString(f) && !upb_FieldDef_IsSubMessage(f);
|
510
657
|
}
|
511
658
|
|
512
|
-
bool
|
513
|
-
return
|
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));
|
662
|
+
}
|
663
|
+
|
664
|
+
bool upb_FieldDef_HasDefault(const upb_FieldDef* f) { return f->has_default; }
|
665
|
+
|
666
|
+
bool upb_FieldDef_HasSubDef(const upb_FieldDef* f) {
|
667
|
+
return upb_FieldDef_IsSubMessage(f) ||
|
668
|
+
upb_FieldDef_CType(f) == kUpb_CType_Enum;
|
514
669
|
}
|
515
670
|
|
516
|
-
bool
|
517
|
-
if (
|
518
|
-
return
|
519
|
-
f->file->syntax ==
|
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;
|
520
675
|
}
|
521
676
|
|
522
677
|
static bool between(int32_t x, int32_t low, int32_t high) {
|
523
678
|
return x >= low && x <= high;
|
524
679
|
}
|
525
680
|
|
526
|
-
bool
|
527
|
-
bool
|
528
|
-
bool
|
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); }
|
529
684
|
|
530
|
-
bool
|
685
|
+
bool upb_FieldDef_checkdescriptortype(int32_t type) {
|
531
686
|
return between(type, 1, 18);
|
532
687
|
}
|
533
688
|
|
534
|
-
/*
|
689
|
+
/* upb_MessageDef
|
690
|
+
* *****************************************************************/
|
535
691
|
|
536
|
-
const
|
692
|
+
const google_protobuf_MessageOptions* upb_MessageDef_Options(
|
693
|
+
const upb_MessageDef* m) {
|
694
|
+
return m->opts;
|
695
|
+
}
|
696
|
+
|
697
|
+
bool upb_MessageDef_HasOptions(const upb_MessageDef* m) {
|
698
|
+
return m->opts != (void*)opt_default;
|
699
|
+
}
|
700
|
+
|
701
|
+
const char* upb_MessageDef_FullName(const upb_MessageDef* m) {
|
537
702
|
return m->full_name;
|
538
703
|
}
|
539
704
|
|
540
|
-
const
|
705
|
+
const upb_FileDef* upb_MessageDef_File(const upb_MessageDef* m) {
|
541
706
|
return m->file;
|
542
707
|
}
|
543
708
|
|
544
|
-
const
|
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) {
|
545
714
|
return shortdefname(m->full_name);
|
546
715
|
}
|
547
716
|
|
548
|
-
|
717
|
+
upb_Syntax upb_MessageDef_Syntax(const upb_MessageDef* m) {
|
549
718
|
return m->file->syntax;
|
550
719
|
}
|
551
720
|
|
552
|
-
const
|
721
|
+
const upb_FieldDef* upb_MessageDef_FindFieldByNumber(const upb_MessageDef* m,
|
722
|
+
uint32_t i) {
|
553
723
|
upb_value val;
|
554
724
|
return upb_inttable_lookup(&m->itof, i, &val) ? upb_value_getconstptr(val)
|
555
725
|
: NULL;
|
556
726
|
}
|
557
727
|
|
558
|
-
const
|
559
|
-
|
728
|
+
const upb_FieldDef* upb_MessageDef_FindFieldByNameWithSize(
|
729
|
+
const upb_MessageDef* m, const char* name, size_t len) {
|
560
730
|
upb_value val;
|
561
731
|
|
562
732
|
if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
|
@@ -566,8 +736,8 @@ const upb_fielddef *upb_msgdef_ntof(const upb_msgdef *m, const char *name,
|
|
566
736
|
return unpack_def(val, UPB_DEFTYPE_FIELD);
|
567
737
|
}
|
568
738
|
|
569
|
-
const
|
570
|
-
|
739
|
+
const upb_OneofDef* upb_MessageDef_FindOneofByNameWithSize(
|
740
|
+
const upb_MessageDef* m, const char* name, size_t len) {
|
571
741
|
upb_value val;
|
572
742
|
|
573
743
|
if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
|
@@ -577,23 +747,27 @@ const upb_oneofdef *upb_msgdef_ntoo(const upb_msgdef *m, const char *name,
|
|
577
747
|
return unpack_def(val, UPB_DEFTYPE_ONEOF);
|
578
748
|
}
|
579
749
|
|
580
|
-
bool
|
581
|
-
|
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) {
|
582
754
|
upb_value val;
|
583
755
|
|
584
756
|
if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
|
585
757
|
return false;
|
586
758
|
}
|
587
759
|
|
588
|
-
*
|
589
|
-
*
|
590
|
-
|
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. */
|
591
765
|
}
|
592
766
|
|
593
|
-
const
|
594
|
-
|
767
|
+
const upb_FieldDef* upb_MessageDef_FindByJsonNameWithSize(
|
768
|
+
const upb_MessageDef* m, const char* name, size_t len) {
|
595
769
|
upb_value val;
|
596
|
-
const
|
770
|
+
const upb_FieldDef* f;
|
597
771
|
|
598
772
|
if (!upb_strtable_lookup2(&m->ntof, name, len, &val)) {
|
599
773
|
return NULL;
|
@@ -605,293 +779,465 @@ const upb_fielddef *upb_msgdef_lookupjsonname(const upb_msgdef *m,
|
|
605
779
|
return f;
|
606
780
|
}
|
607
781
|
|
608
|
-
int
|
782
|
+
int upb_MessageDef_numfields(const upb_MessageDef* m) { return m->field_count; }
|
783
|
+
|
784
|
+
int upb_MessageDef_numoneofs(const upb_MessageDef* m) { return m->oneof_count; }
|
785
|
+
|
786
|
+
int upb_MessageDef_numrealoneofs(const upb_MessageDef* m) {
|
787
|
+
return m->real_oneof_count;
|
788
|
+
}
|
789
|
+
|
790
|
+
int upb_MessageDef_ExtensionRangeCount(const upb_MessageDef* m) {
|
791
|
+
return m->ext_range_count;
|
792
|
+
}
|
793
|
+
|
794
|
+
int upb_MessageDef_FieldCount(const upb_MessageDef* m) {
|
609
795
|
return m->field_count;
|
610
796
|
}
|
611
797
|
|
612
|
-
int
|
798
|
+
int upb_MessageDef_OneofCount(const upb_MessageDef* m) {
|
613
799
|
return m->oneof_count;
|
614
800
|
}
|
615
801
|
|
616
|
-
int
|
617
|
-
return m->
|
802
|
+
int upb_MessageDef_NestedMessageCount(const upb_MessageDef* m) {
|
803
|
+
return m->nested_msg_count;
|
618
804
|
}
|
619
805
|
|
620
|
-
int
|
621
|
-
return m->
|
806
|
+
int upb_MessageDef_NestedEnumCount(const upb_MessageDef* m) {
|
807
|
+
return m->nested_enum_count;
|
622
808
|
}
|
623
809
|
|
624
|
-
int
|
625
|
-
return m->
|
810
|
+
int upb_MessageDef_NestedExtensionCount(const upb_MessageDef* m) {
|
811
|
+
return m->nested_ext_count;
|
626
812
|
}
|
627
813
|
|
628
|
-
int
|
814
|
+
int upb_MessageDef_realoneofcount(const upb_MessageDef* m) {
|
629
815
|
return m->real_oneof_count;
|
630
816
|
}
|
631
817
|
|
632
|
-
const
|
818
|
+
const upb_MiniTable* upb_MessageDef_MiniTable(const upb_MessageDef* m) {
|
633
819
|
return m->layout;
|
634
820
|
}
|
635
821
|
|
636
|
-
const
|
637
|
-
|
822
|
+
const upb_ExtensionRange* upb_MessageDef_ExtensionRange(const upb_MessageDef* m,
|
823
|
+
int i) {
|
824
|
+
UPB_ASSERT(0 <= i && i < m->ext_range_count);
|
825
|
+
return &m->ext_ranges[i];
|
826
|
+
}
|
827
|
+
|
828
|
+
const upb_FieldDef* upb_MessageDef_Field(const upb_MessageDef* m, int i) {
|
829
|
+
UPB_ASSERT(0 <= i && i < m->field_count);
|
638
830
|
return &m->fields[i];
|
639
831
|
}
|
640
832
|
|
641
|
-
const
|
642
|
-
UPB_ASSERT(
|
833
|
+
const upb_OneofDef* upb_MessageDef_Oneof(const upb_MessageDef* m, int i) {
|
834
|
+
UPB_ASSERT(0 <= i && i < m->oneof_count);
|
643
835
|
return &m->oneofs[i];
|
644
836
|
}
|
645
837
|
|
646
|
-
|
647
|
-
|
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];
|
648
842
|
}
|
649
843
|
|
650
|
-
|
651
|
-
|
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];
|
652
847
|
}
|
653
848
|
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
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];
|
658
853
|
}
|
659
854
|
|
660
|
-
|
661
|
-
|
662
|
-
return type >= UPB_WELLKNOWN_DOUBLEVALUE &&
|
663
|
-
type <= UPB_WELLKNOWN_BOOLVALUE;
|
855
|
+
upb_WellKnown upb_MessageDef_WellKnownType(const upb_MessageDef* m) {
|
856
|
+
return m->well_known_type;
|
664
857
|
}
|
665
858
|
|
666
|
-
|
667
|
-
|
859
|
+
/* upb_OneofDef ***************************************************************/
|
860
|
+
|
861
|
+
const google_protobuf_OneofOptions* upb_OneofDef_Options(
|
862
|
+
const upb_OneofDef* o) {
|
863
|
+
return o->opts;
|
668
864
|
}
|
669
865
|
|
670
|
-
|
866
|
+
bool upb_OneofDef_HasOptions(const upb_OneofDef* o) {
|
867
|
+
return o->opts != (void*)opt_default;
|
868
|
+
}
|
671
869
|
|
672
|
-
|
673
|
-
return
|
870
|
+
const char* upb_OneofDef_Name(const upb_OneofDef* o) {
|
871
|
+
return shortdefname(o->full_name);
|
674
872
|
}
|
675
873
|
|
676
|
-
|
677
|
-
return
|
874
|
+
const upb_MessageDef* upb_OneofDef_ContainingType(const upb_OneofDef* o) {
|
875
|
+
return o->parent;
|
678
876
|
}
|
679
877
|
|
680
|
-
|
681
|
-
|
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];
|
682
883
|
}
|
683
884
|
|
684
|
-
|
685
|
-
|
686
|
-
|
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;
|
687
890
|
}
|
688
891
|
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
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;
|
696
901
|
}
|
697
902
|
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
!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;
|
704
908
|
}
|
705
909
|
|
706
|
-
|
707
|
-
|
910
|
+
/* upb_FileDef ****************************************************************/
|
911
|
+
|
912
|
+
const google_protobuf_FileOptions* upb_FileDef_Options(const upb_FileDef* f) {
|
913
|
+
return f->opts;
|
708
914
|
}
|
709
915
|
|
710
|
-
|
711
|
-
return
|
916
|
+
bool upb_FileDef_HasOptions(const upb_FileDef* f) {
|
917
|
+
return f->opts != (void*)opt_default;
|
712
918
|
}
|
713
919
|
|
714
|
-
|
715
|
-
|
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;
|
716
928
|
}
|
717
929
|
|
718
|
-
|
719
|
-
|
720
|
-
|
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;
|
721
934
|
}
|
722
935
|
|
723
|
-
|
936
|
+
int upb_FileDef_WeakDependencyCount(const upb_FileDef* f) {
|
937
|
+
return f->weak_dep_count;
|
938
|
+
}
|
724
939
|
|
725
|
-
const
|
726
|
-
return
|
940
|
+
const int32_t* _upb_FileDef_PublicDependencyIndexes(const upb_FileDef* f) {
|
941
|
+
return f->public_deps;
|
727
942
|
}
|
728
943
|
|
729
|
-
const
|
730
|
-
return
|
944
|
+
const int32_t* _upb_FileDef_WeakDependencyIndexes(const upb_FileDef* f) {
|
945
|
+
return f->weak_deps;
|
731
946
|
}
|
732
947
|
|
733
|
-
int
|
734
|
-
return
|
948
|
+
int upb_FileDef_TopLevelEnumCount(const upb_FileDef* f) {
|
949
|
+
return f->top_lvl_enum_count;
|
735
950
|
}
|
736
951
|
|
737
|
-
|
738
|
-
|
739
|
-
return o->fields[i];
|
952
|
+
int upb_FileDef_TopLevelExtensionCount(const upb_FileDef* f) {
|
953
|
+
return f->top_lvl_ext_count;
|
740
954
|
}
|
741
955
|
|
742
|
-
int
|
743
|
-
|
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];
|
744
961
|
}
|
745
962
|
|
746
|
-
|
747
|
-
|
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]];
|
748
966
|
}
|
749
967
|
|
750
|
-
|
751
|
-
|
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]];
|
752
971
|
}
|
753
972
|
|
754
|
-
const
|
755
|
-
|
756
|
-
|
757
|
-
return upb_strtable_lookup2(&o->ntof, name, length, &val) ?
|
758
|
-
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];
|
759
976
|
}
|
760
977
|
|
761
|
-
const
|
762
|
-
|
763
|
-
return
|
764
|
-
: 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];
|
765
981
|
}
|
766
982
|
|
767
|
-
|
768
|
-
|
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];
|
769
986
|
}
|
770
987
|
|
771
|
-
|
772
|
-
|
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];
|
773
991
|
}
|
774
992
|
|
775
|
-
|
776
|
-
|
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;
|
777
1000
|
}
|
778
1001
|
|
779
|
-
|
780
|
-
return (
|
1002
|
+
bool upb_MethodDef_HasOptions(const upb_MethodDef* m) {
|
1003
|
+
return m->opts != (void*)opt_default;
|
781
1004
|
}
|
782
1005
|
|
783
|
-
|
784
|
-
|
1006
|
+
const char* upb_MethodDef_FullName(const upb_MethodDef* m) {
|
1007
|
+
return m->full_name;
|
785
1008
|
}
|
786
1009
|
|
787
|
-
|
1010
|
+
int upb_MethodDef_Index(const upb_MethodDef* m) { return m->index; }
|
1011
|
+
|
1012
|
+
const char* upb_MethodDef_Name(const upb_MethodDef* m) {
|
1013
|
+
return shortdefname(m->full_name);
|
1014
|
+
}
|
788
1015
|
|
789
|
-
const
|
790
|
-
return
|
1016
|
+
const upb_ServiceDef* upb_MethodDef_Service(const upb_MethodDef* m) {
|
1017
|
+
return m->service;
|
791
1018
|
}
|
792
1019
|
|
793
|
-
const
|
794
|
-
return
|
1020
|
+
const upb_MessageDef* upb_MethodDef_InputType(const upb_MethodDef* m) {
|
1021
|
+
return m->input_type;
|
795
1022
|
}
|
796
1023
|
|
797
|
-
const
|
798
|
-
return
|
1024
|
+
const upb_MessageDef* upb_MethodDef_OutputType(const upb_MethodDef* m) {
|
1025
|
+
return m->output_type;
|
799
1026
|
}
|
800
1027
|
|
801
|
-
|
802
|
-
return
|
1028
|
+
bool upb_MethodDef_ClientStreaming(const upb_MethodDef* m) {
|
1029
|
+
return m->client_streaming;
|
803
1030
|
}
|
804
1031
|
|
805
|
-
|
806
|
-
return
|
1032
|
+
bool upb_MethodDef_ServerStreaming(const upb_MethodDef* m) {
|
1033
|
+
return m->server_streaming;
|
1034
|
+
}
|
1035
|
+
|
1036
|
+
/* upb_ServiceDef *************************************************************/
|
1037
|
+
|
1038
|
+
const google_protobuf_ServiceOptions* upb_ServiceDef_Options(
|
1039
|
+
const upb_ServiceDef* s) {
|
1040
|
+
return s->opts;
|
807
1041
|
}
|
808
1042
|
|
809
|
-
|
810
|
-
return
|
1043
|
+
bool upb_ServiceDef_HasOptions(const upb_ServiceDef* s) {
|
1044
|
+
return s->opts != (void*)opt_default;
|
811
1045
|
}
|
812
1046
|
|
813
|
-
|
814
|
-
return
|
1047
|
+
const char* upb_ServiceDef_FullName(const upb_ServiceDef* s) {
|
1048
|
+
return s->full_name;
|
815
1049
|
}
|
816
1050
|
|
817
|
-
|
818
|
-
return
|
1051
|
+
const char* upb_ServiceDef_Name(const upb_ServiceDef* s) {
|
1052
|
+
return shortdefname(s->full_name);
|
819
1053
|
}
|
820
1054
|
|
821
|
-
|
822
|
-
|
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;
|
823
1059
|
}
|
824
1060
|
|
825
|
-
|
826
|
-
return
|
1061
|
+
int upb_ServiceDef_MethodCount(const upb_ServiceDef* s) {
|
1062
|
+
return s->method_count;
|
827
1063
|
}
|
828
1064
|
|
829
|
-
const
|
830
|
-
return i < 0 || i >=
|
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];
|
831
1067
|
}
|
832
1068
|
|
833
|
-
const
|
834
|
-
|
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;
|
835
1077
|
}
|
836
1078
|
|
837
|
-
|
838
|
-
|
1079
|
+
/* upb_DefPool ****************************************************************/
|
1080
|
+
|
1081
|
+
void upb_DefPool_Free(upb_DefPool* s) {
|
1082
|
+
upb_Arena_Free(s->arena);
|
839
1083
|
upb_gfree(s);
|
840
1084
|
}
|
841
1085
|
|
842
|
-
|
843
|
-
|
1086
|
+
upb_DefPool* upb_DefPool_New(void) {
|
1087
|
+
upb_DefPool* s = upb_gmalloc(sizeof(*s));
|
844
1088
|
|
845
1089
|
if (!s) {
|
846
1090
|
return NULL;
|
847
1091
|
}
|
848
1092
|
|
849
|
-
s->arena =
|
1093
|
+
s->arena = upb_Arena_New();
|
850
1094
|
s->bytes_loaded = 0;
|
851
1095
|
|
852
1096
|
if (!upb_strtable_init(&s->syms, 32, s->arena) ||
|
853
|
-
!upb_strtable_init(&s->files, 4, s->arena)
|
854
|
-
|
855
|
-
|
856
|
-
s = NULL;
|
1097
|
+
!upb_strtable_init(&s->files, 4, s->arena) ||
|
1098
|
+
!upb_inttable_init(&s->exts, s->arena)) {
|
1099
|
+
goto err;
|
857
1100
|
}
|
1101
|
+
|
1102
|
+
s->extreg = upb_ExtensionRegistry_New(s->arena);
|
1103
|
+
if (!s->extreg) goto err;
|
858
1104
|
return s;
|
1105
|
+
|
1106
|
+
err:
|
1107
|
+
upb_Arena_Free(s->arena);
|
1108
|
+
upb_gfree(s);
|
1109
|
+
return NULL;
|
859
1110
|
}
|
860
1111
|
|
861
|
-
const
|
1112
|
+
static const void* symtab_lookup(const upb_DefPool* s, const char* sym,
|
1113
|
+
upb_deftype_t type) {
|
862
1114
|
upb_value v;
|
863
|
-
return upb_strtable_lookup(&s->syms, sym, &v) ?
|
864
|
-
unpack_def(v, UPB_DEFTYPE_MSG) : NULL;
|
1115
|
+
return upb_strtable_lookup(&s->syms, sym, &v) ? unpack_def(v, type) : NULL;
|
865
1116
|
}
|
866
1117
|
|
867
|
-
const
|
868
|
-
|
1118
|
+
static const void* symtab_lookup2(const upb_DefPool* s, const char* sym,
|
1119
|
+
size_t size, upb_deftype_t type) {
|
869
1120
|
upb_value v;
|
870
|
-
return upb_strtable_lookup2(&s->syms, sym,
|
871
|
-
|
1121
|
+
return upb_strtable_lookup2(&s->syms, sym, size, &v) ? unpack_def(v, type)
|
1122
|
+
: NULL;
|
1123
|
+
}
|
1124
|
+
|
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) {
|
1132
|
+
return symtab_lookup2(s, sym, len, UPB_DEFTYPE_MSG);
|
1133
|
+
}
|
1134
|
+
|
1135
|
+
const upb_EnumDef* upb_DefPool_FindEnumByName(const upb_DefPool* s,
|
1136
|
+
const char* sym) {
|
1137
|
+
return symtab_lookup(s, sym, UPB_DEFTYPE_ENUM);
|
872
1138
|
}
|
873
1139
|
|
874
|
-
const
|
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) {
|
875
1147
|
upb_value v;
|
876
|
-
return upb_strtable_lookup(&s->
|
877
|
-
|
1148
|
+
return upb_strtable_lookup(&s->files, name, &v)
|
1149
|
+
? unpack_def(v, UPB_DEFTYPE_FILE)
|
1150
|
+
: NULL;
|
878
1151
|
}
|
879
1152
|
|
880
|
-
const
|
1153
|
+
const upb_FileDef* upb_DefPool_FindFileByNameWithSize(const upb_DefPool* s,
|
1154
|
+
const char* name,
|
1155
|
+
size_t len) {
|
881
1156
|
upb_value v;
|
882
|
-
return
|
883
|
-
|
1157
|
+
return upb_strtable_lookup2(&s->files, name, len, &v)
|
1158
|
+
? unpack_def(v, UPB_DEFTYPE_FILE)
|
1159
|
+
: NULL;
|
884
1160
|
}
|
885
1161
|
|
886
|
-
const
|
887
|
-
const
|
1162
|
+
const upb_FieldDef* upb_DefPool_FindExtensionByNameWithSize(
|
1163
|
+
const upb_DefPool* s, const char* name, size_t size) {
|
888
1164
|
upb_value v;
|
889
|
-
|
890
|
-
|
1165
|
+
if (!upb_strtable_lookup2(&s->syms, name, size, &v)) return NULL;
|
1166
|
+
|
1167
|
+
switch (deftype(v)) {
|
1168
|
+
case UPB_DEFTYPE_FIELD:
|
1169
|
+
return unpack_def(v, UPB_DEFTYPE_FIELD);
|
1170
|
+
case UPB_DEFTYPE_MSG: {
|
1171
|
+
const upb_MessageDef* m = unpack_def(v, UPB_DEFTYPE_MSG);
|
1172
|
+
return m->in_message_set ? &m->nested_exts[0] : NULL;
|
1173
|
+
}
|
1174
|
+
default:
|
1175
|
+
break;
|
1176
|
+
}
|
1177
|
+
|
1178
|
+
return NULL;
|
891
1179
|
}
|
892
1180
|
|
893
|
-
|
894
|
-
|
1181
|
+
const upb_FieldDef* upb_DefPool_FindExtensionByName(const upb_DefPool* s,
|
1182
|
+
const char* sym) {
|
1183
|
+
return upb_DefPool_FindExtensionByNameWithSize(s, sym, strlen(sym));
|
1184
|
+
}
|
1185
|
+
|
1186
|
+
const upb_ServiceDef* upb_DefPool_FindServiceByName(const upb_DefPool* s,
|
1187
|
+
const char* name) {
|
1188
|
+
return symtab_lookup(s, name, UPB_DEFTYPE_SERVICE);
|
1189
|
+
}
|
1190
|
+
|
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);
|
1194
|
+
}
|
1195
|
+
|
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;
|
895
1241
|
}
|
896
1242
|
|
897
1243
|
/* Code to build defs from descriptor protos. *********************************/
|
@@ -901,40 +1247,61 @@ int upb_symtab_filecount(const upb_symtab *s) {
|
|
901
1247
|
* this code is used to directly build defs from Ruby (for example) we do need
|
902
1248
|
* to validate important constraints like uniqueness of names and numbers. */
|
903
1249
|
|
904
|
-
#define CHK_OOM(x)
|
1250
|
+
#define CHK_OOM(x) \
|
1251
|
+
if (!(x)) { \
|
1252
|
+
symtab_oomerr(ctx); \
|
1253
|
+
}
|
905
1254
|
|
906
1255
|
typedef struct {
|
907
|
-
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
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. */
|
913
1266
|
} symtab_addctx;
|
914
1267
|
|
915
|
-
UPB_NORETURN UPB_NOINLINE UPB_PRINTF(2, 3)
|
916
|
-
|
1268
|
+
UPB_NORETURN UPB_NOINLINE UPB_PRINTF(2, 3) static void symtab_errf(
|
1269
|
+
symtab_addctx* ctx, const char* fmt, ...) {
|
917
1270
|
va_list argp;
|
918
1271
|
va_start(argp, fmt);
|
919
|
-
|
1272
|
+
upb_Status_VSetErrorFormat(ctx->status, fmt, argp);
|
920
1273
|
va_end(argp);
|
921
1274
|
UPB_LONGJMP(ctx->err, 1);
|
922
1275
|
}
|
923
1276
|
|
924
|
-
UPB_NORETURN UPB_NOINLINE
|
925
|
-
|
926
|
-
upb_status_setoom(ctx->status);
|
1277
|
+
UPB_NORETURN UPB_NOINLINE static void symtab_oomerr(symtab_addctx* ctx) {
|
1278
|
+
upb_Status_setoom(ctx->status);
|
927
1279
|
UPB_LONGJMP(ctx->err, 1);
|
928
1280
|
}
|
929
1281
|
|
930
|
-
void
|
931
|
-
|
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);
|
932
1285
|
if (!ret) symtab_oomerr(ctx);
|
933
1286
|
return ret;
|
934
1287
|
}
|
935
1288
|
|
936
|
-
|
937
|
-
|
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;
|
938
1305
|
size_t len = name.size;
|
939
1306
|
bool start = true;
|
940
1307
|
size_t i;
|
@@ -965,158 +1332,223 @@ static void check_ident(symtab_addctx *ctx, upb_strview name, bool full) {
|
|
965
1332
|
}
|
966
1333
|
}
|
967
1334
|
|
968
|
-
static size_t div_round_up(size_t n, size_t d) {
|
969
|
-
return (n + d - 1) / d;
|
970
|
-
}
|
1335
|
+
static size_t div_round_up(size_t n, size_t d) { return (n + d - 1) / d; }
|
971
1336
|
|
972
|
-
static size_t
|
1337
|
+
static size_t upb_MessageValue_sizeof(upb_CType type) {
|
973
1338
|
switch (type) {
|
974
|
-
case
|
975
|
-
case
|
976
|
-
case
|
1339
|
+
case kUpb_CType_Double:
|
1340
|
+
case kUpb_CType_Int64:
|
1341
|
+
case kUpb_CType_UInt64:
|
977
1342
|
return 8;
|
978
|
-
case
|
979
|
-
case
|
980
|
-
case
|
981
|
-
case
|
1343
|
+
case kUpb_CType_Enum:
|
1344
|
+
case kUpb_CType_Int32:
|
1345
|
+
case kUpb_CType_UInt32:
|
1346
|
+
case kUpb_CType_Float:
|
982
1347
|
return 4;
|
983
|
-
case
|
1348
|
+
case kUpb_CType_Bool:
|
984
1349
|
return 1;
|
985
|
-
case
|
1350
|
+
case kUpb_CType_Message:
|
986
1351
|
return sizeof(void*);
|
987
|
-
case
|
988
|
-
case
|
989
|
-
return sizeof(
|
1352
|
+
case kUpb_CType_Bytes:
|
1353
|
+
case kUpb_CType_String:
|
1354
|
+
return sizeof(upb_StringView);
|
990
1355
|
}
|
991
1356
|
UPB_UNREACHABLE();
|
992
1357
|
}
|
993
1358
|
|
994
|
-
static uint8_t upb_msg_fielddefsize(const
|
995
|
-
if (
|
996
|
-
|
1359
|
+
static uint8_t upb_msg_fielddefsize(const upb_FieldDef* f) {
|
1360
|
+
if (upb_MessageDef_IsMapEntry(upb_FieldDef_ContainingType(f))) {
|
1361
|
+
upb_MapEntry ent;
|
997
1362
|
UPB_ASSERT(sizeof(ent.k) == sizeof(ent.v));
|
998
1363
|
return sizeof(ent.k);
|
999
|
-
} else if (
|
1364
|
+
} else if (upb_FieldDef_IsRepeated(f)) {
|
1000
1365
|
return sizeof(void*);
|
1001
1366
|
} else {
|
1002
|
-
return
|
1367
|
+
return upb_MessageValue_sizeof(upb_FieldDef_CType(f));
|
1003
1368
|
}
|
1004
1369
|
}
|
1005
1370
|
|
1006
|
-
static uint32_t
|
1007
|
-
|
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;
|
1008
1375
|
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
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;
|
1013
1383
|
}
|
1014
1384
|
|
1015
|
-
static int field_number_cmp(const void
|
1016
|
-
const
|
1017
|
-
const
|
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;
|
1018
1388
|
return f1->number - f2->number;
|
1019
1389
|
}
|
1020
1390
|
|
1021
|
-
static void assign_layout_indices(const
|
1022
|
-
|
1391
|
+
static void assign_layout_indices(const upb_MessageDef* m, upb_MiniTable* l,
|
1392
|
+
upb_MiniTable_Field* fields) {
|
1023
1393
|
int i;
|
1024
|
-
int n =
|
1394
|
+
int n = upb_MessageDef_numfields(m);
|
1025
1395
|
int dense_below = 0;
|
1026
1396
|
for (i = 0; i < n; i++) {
|
1027
|
-
|
1397
|
+
upb_FieldDef* f =
|
1398
|
+
(upb_FieldDef*)upb_MessageDef_FindFieldByNumber(m, fields[i].number);
|
1028
1399
|
UPB_ASSERT(f);
|
1029
1400
|
f->layout_index = i;
|
1030
1401
|
if (i < UINT8_MAX && fields[i].number == i + 1 &&
|
1031
|
-
(i == 0 || fields[i-1].number == i)) {
|
1402
|
+
(i == 0 || fields[i - 1].number == i)) {
|
1032
1403
|
dense_below = i + 1;
|
1033
1404
|
}
|
1034
1405
|
}
|
1035
1406
|
l->dense_below = dense_below;
|
1036
1407
|
}
|
1037
1408
|
|
1038
|
-
static
|
1039
|
-
|
1040
|
-
|
1041
|
-
|
1042
|
-
if (
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
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;
|
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);
|
1431
|
+
|
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);
|
1053
1438
|
} else {
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1439
|
+
/* Maps descriptor type -> elem_size_lg2. */
|
1440
|
+
static const uint8_t sizes[] = {
|
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 */
|
1460
|
+
};
|
1461
|
+
field->mode = kUpb_FieldMode_Scalar |
|
1462
|
+
(sizes[field->descriptortype] << kUpb_FieldRep_Shift);
|
1463
|
+
}
|
1464
|
+
|
1465
|
+
if (upb_FieldDef_IsPacked(f)) {
|
1466
|
+
field->mode |= kUpb_LabelFlags_IsPacked;
|
1467
|
+
}
|
1468
|
+
|
1469
|
+
if (upb_FieldDef_IsExtension(f)) {
|
1470
|
+
field->mode |= kUpb_LabelFlags_IsExtension;
|
1059
1471
|
}
|
1060
1472
|
}
|
1061
1473
|
|
1062
1474
|
/* This function is the dynamic equivalent of message_layout.{cc,h} in upbc.
|
1063
1475
|
* It computes a dynamic layout for all of the fields in |m|. */
|
1064
|
-
static void make_layout(symtab_addctx
|
1065
|
-
|
1066
|
-
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
|
1071
|
-
|
1072
|
-
upb_msglayout_field *fields;
|
1073
|
-
|
1074
|
-
memset(l, 0, sizeof(*l) + sizeof(_upb_fasttable_entry));
|
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);
|
1479
|
+
size_t sublayout_count = 0;
|
1480
|
+
upb_MiniTable_Sub* subs;
|
1481
|
+
upb_MiniTable_Field* fields;
|
1482
|
+
|
1483
|
+
memset(l, 0, sizeof(*l) + sizeof(_upb_FastTable_Entry));
|
1075
1484
|
|
1076
1485
|
/* Count sub-messages. */
|
1077
1486
|
for (size_t i = 0; i < field_count; i++) {
|
1078
|
-
|
1079
|
-
|
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) {
|
1493
|
+
sublayout_count++;
|
1080
1494
|
}
|
1081
1495
|
}
|
1082
1496
|
|
1083
1497
|
fields = symtab_alloc(ctx, field_count * sizeof(*fields));
|
1084
|
-
|
1498
|
+
subs = symtab_alloc(ctx, sublayout_count * sizeof(*subs));
|
1085
1499
|
|
1086
|
-
l->field_count =
|
1500
|
+
l->field_count = upb_MessageDef_numfields(m);
|
1087
1501
|
l->fields = fields;
|
1088
|
-
l->
|
1502
|
+
l->subs = subs;
|
1089
1503
|
l->table_mask = 0;
|
1504
|
+
l->required_count = 0;
|
1505
|
+
|
1506
|
+
if (upb_MessageDef_ExtensionRangeCount(m) > 0) {
|
1507
|
+
if (google_protobuf_MessageOptions_message_set_wire_format(m->opts)) {
|
1508
|
+
l->ext = kUpb_ExtMode_IsMessageSet;
|
1509
|
+
} else {
|
1510
|
+
l->ext = kUpb_ExtMode_Extendable;
|
1511
|
+
}
|
1512
|
+
} else {
|
1513
|
+
l->ext = kUpb_ExtMode_NonExtendable;
|
1514
|
+
}
|
1090
1515
|
|
1091
1516
|
/* TODO(haberman): initialize fast tables so that reflection-based parsing
|
1092
1517
|
* can get the same speeds as linked-in types. */
|
1093
1518
|
l->fasttable[0].field_parser = &fastdecode_generic;
|
1094
1519
|
l->fasttable[0].field_data = 0;
|
1095
1520
|
|
1096
|
-
if (
|
1521
|
+
if (upb_MessageDef_IsMapEntry(m)) {
|
1097
1522
|
/* TODO(haberman): refactor this method so this special case is more
|
1098
1523
|
* elegant. */
|
1099
|
-
const
|
1100
|
-
const
|
1524
|
+
const upb_FieldDef* key = upb_MessageDef_FindFieldByNumber(m, 1);
|
1525
|
+
const upb_FieldDef* val = upb_MessageDef_FindFieldByNumber(m, 2);
|
1101
1526
|
fields[0].number = 1;
|
1102
1527
|
fields[1].number = 2;
|
1103
|
-
fields[0].mode =
|
1104
|
-
fields[1].mode =
|
1528
|
+
fields[0].mode = kUpb_FieldMode_Scalar;
|
1529
|
+
fields[1].mode = kUpb_FieldMode_Scalar;
|
1105
1530
|
fields[0].presence = 0;
|
1106
1531
|
fields[1].presence = 0;
|
1107
|
-
fields[0].descriptortype =
|
1108
|
-
fields[1].descriptortype =
|
1532
|
+
fields[0].descriptortype = map_descriptortype(key);
|
1533
|
+
fields[1].descriptortype = map_descriptortype(val);
|
1109
1534
|
fields[0].offset = 0;
|
1110
|
-
fields[1].offset = sizeof(
|
1535
|
+
fields[1].offset = sizeof(upb_StringView);
|
1111
1536
|
fields[1].submsg_index = 0;
|
1112
1537
|
|
1113
|
-
if (
|
1114
|
-
|
1538
|
+
if (upb_FieldDef_CType(val) == kUpb_CType_Message) {
|
1539
|
+
subs[0].submsg = upb_FieldDef_MessageSubDef(val)->layout;
|
1115
1540
|
}
|
1116
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
|
+
|
1117
1548
|
l->field_count = 2;
|
1118
|
-
l->size = 2 * sizeof(
|
1549
|
+
l->size = 2 * sizeof(upb_StringView);
|
1119
1550
|
l->size = UPB_ALIGN_UP(l->size, 8);
|
1551
|
+
l->dense_below = 2;
|
1120
1552
|
return;
|
1121
1553
|
}
|
1122
1554
|
|
@@ -1129,23 +1561,44 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
|
|
1129
1561
|
* OPT: There is a lot of room for optimization here to minimize the size.
|
1130
1562
|
*/
|
1131
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
|
+
|
1132
1580
|
/* Allocate hasbits and set basic field attributes. */
|
1133
|
-
|
1134
|
-
for (
|
1135
|
-
|
1136
|
-
|
1137
|
-
upb_fielddef* f = upb_msg_iter_field(&it);
|
1138
|
-
upb_msglayout_field *field = &fields[upb_fielddef_index(f)];
|
1581
|
+
sublayout_count = 0;
|
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)];
|
1139
1585
|
|
1140
1586
|
fill_fieldlayout(field, f);
|
1141
1587
|
|
1142
|
-
if (
|
1143
|
-
|
1144
|
-
field->submsg_index =
|
1145
|
-
|
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) {
|
1593
|
+
field->submsg_index = sublayout_count++;
|
1594
|
+
subs[field->submsg_index].subenum = upb_FieldDef_EnumSubDef(f)->layout;
|
1595
|
+
UPB_ASSERT(subs[field->submsg_index].subenum);
|
1146
1596
|
}
|
1147
1597
|
|
1148
|
-
if (
|
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)) {
|
1149
1602
|
/* We don't use hasbit 0, so that 0 can indicate "no presence" in the
|
1150
1603
|
* table. This wastes one hasbit, but we don't worry about it for now. */
|
1151
1604
|
field->presence = ++hasbit;
|
@@ -1155,55 +1608,51 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
|
|
1155
1608
|
}
|
1156
1609
|
|
1157
1610
|
/* Account for space used by hasbits. */
|
1158
|
-
l->size = div_round_up(hasbit, 8);
|
1611
|
+
l->size = hasbit ? div_round_up(hasbit + 1, 8) : 0;
|
1159
1612
|
|
1160
1613
|
/* Allocate non-oneof fields. */
|
1161
|
-
for (
|
1162
|
-
|
1163
|
-
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];
|
1164
1616
|
size_t field_size = upb_msg_fielddefsize(f);
|
1165
|
-
size_t index =
|
1617
|
+
size_t index = upb_FieldDef_Index(f);
|
1166
1618
|
|
1167
|
-
if (
|
1619
|
+
if (upb_FieldDef_RealContainingOneof(f)) {
|
1168
1620
|
/* Oneofs are handled separately below. */
|
1169
1621
|
continue;
|
1170
1622
|
}
|
1171
1623
|
|
1172
|
-
fields[index].offset =
|
1624
|
+
fields[index].offset = upb_MiniTable_place(ctx, l, field_size, m);
|
1173
1625
|
}
|
1174
1626
|
|
1175
1627
|
/* Allocate oneof fields. Each oneof field consists of a uint32 for the case
|
1176
1628
|
* and space for the actual data. */
|
1177
|
-
for (
|
1178
|
-
|
1179
|
-
|
1180
|
-
upb_oneof_iter fit;
|
1181
|
-
|
1182
|
-
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. */
|
1183
1632
|
size_t field_size = 0;
|
1184
1633
|
uint32_t case_offset;
|
1185
1634
|
uint32_t data_offset;
|
1186
1635
|
|
1187
|
-
if (
|
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
|
+
}
|
1188
1641
|
|
1189
1642
|
/* Calculate field size: the max of all field sizes. */
|
1190
|
-
for (
|
1191
|
-
|
1192
|
-
upb_oneof_next(&fit)) {
|
1193
|
-
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];
|
1194
1645
|
field_size = UPB_MAX(field_size, upb_msg_fielddefsize(f));
|
1195
1646
|
}
|
1196
1647
|
|
1197
1648
|
/* Align and allocate case offset. */
|
1198
|
-
case_offset =
|
1199
|
-
data_offset =
|
1649
|
+
case_offset = upb_MiniTable_place(ctx, l, case_size, m);
|
1650
|
+
data_offset = upb_MiniTable_place(ctx, l, field_size, m);
|
1200
1651
|
|
1201
|
-
for (
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
fields[upb_fielddef_index(f)].offset = data_offset;
|
1206
|
-
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;
|
1207
1656
|
}
|
1208
1657
|
}
|
1209
1658
|
|
@@ -1212,28 +1661,33 @@ static void make_layout(symtab_addctx *ctx, const upb_msgdef *m) {
|
|
1212
1661
|
l->size = UPB_ALIGN_UP(l->size, 8);
|
1213
1662
|
|
1214
1663
|
/* Sort fields by number. */
|
1215
|
-
|
1664
|
+
if (fields) {
|
1665
|
+
qsort(fields, upb_MessageDef_numfields(m), sizeof(*fields),
|
1666
|
+
field_number_cmp);
|
1667
|
+
}
|
1216
1668
|
assign_layout_indices(m, l, fields);
|
1217
1669
|
}
|
1218
1670
|
|
1219
|
-
static char
|
1220
|
-
|
1671
|
+
static char* strviewdup(symtab_addctx* ctx, upb_StringView view) {
|
1672
|
+
char* ret = upb_strdup2(view.data, view.size, ctx->arena);
|
1673
|
+
CHK_OOM(ret);
|
1674
|
+
return ret;
|
1221
1675
|
}
|
1222
1676
|
|
1223
|
-
static bool streql2(const char
|
1677
|
+
static bool streql2(const char* a, size_t n, const char* b) {
|
1224
1678
|
return n == strlen(b) && memcmp(a, b, n) == 0;
|
1225
1679
|
}
|
1226
1680
|
|
1227
|
-
static bool streql_view(
|
1681
|
+
static bool streql_view(upb_StringView view, const char* b) {
|
1228
1682
|
return streql2(view.data, view.size, b);
|
1229
1683
|
}
|
1230
1684
|
|
1231
|
-
static const char
|
1232
|
-
|
1685
|
+
static const char* makefullname(symtab_addctx* ctx, const char* prefix,
|
1686
|
+
upb_StringView name) {
|
1233
1687
|
if (prefix) {
|
1234
1688
|
/* ret = prefix + '.' + name; */
|
1235
1689
|
size_t n = strlen(prefix);
|
1236
|
-
char
|
1690
|
+
char* ret = symtab_alloc(ctx, n + name.size + 2);
|
1237
1691
|
strcpy(ret, prefix);
|
1238
1692
|
ret[n] = '.';
|
1239
1693
|
memcpy(&ret[n + 1], name.data, name.size);
|
@@ -1244,33 +1698,33 @@ static const char *makefullname(symtab_addctx *ctx, const char *prefix,
|
|
1244
1698
|
}
|
1245
1699
|
}
|
1246
1700
|
|
1247
|
-
static void finalize_oneofs(symtab_addctx
|
1701
|
+
static void finalize_oneofs(symtab_addctx* ctx, upb_MessageDef* m) {
|
1248
1702
|
int i;
|
1249
1703
|
int synthetic_count = 0;
|
1250
|
-
|
1704
|
+
upb_OneofDef* mutable_oneofs = (upb_OneofDef*)m->oneofs;
|
1251
1705
|
|
1252
1706
|
for (i = 0; i < m->oneof_count; i++) {
|
1253
|
-
|
1707
|
+
upb_OneofDef* o = &mutable_oneofs[i];
|
1254
1708
|
|
1255
1709
|
if (o->synthetic && o->field_count != 1) {
|
1256
1710
|
symtab_errf(ctx, "Synthetic oneofs must have one field, not %d: %s",
|
1257
|
-
o->field_count,
|
1711
|
+
o->field_count, upb_OneofDef_Name(o));
|
1258
1712
|
}
|
1259
1713
|
|
1260
1714
|
if (o->synthetic) {
|
1261
1715
|
synthetic_count++;
|
1262
1716
|
} else if (synthetic_count != 0) {
|
1263
1717
|
symtab_errf(ctx, "Synthetic oneofs must be after all other oneofs: %s",
|
1264
|
-
|
1718
|
+
upb_OneofDef_Name(o));
|
1265
1719
|
}
|
1266
1720
|
|
1267
|
-
o->fields = symtab_alloc(ctx, sizeof(
|
1721
|
+
o->fields = symtab_alloc(ctx, sizeof(upb_FieldDef*) * o->field_count);
|
1268
1722
|
o->field_count = 0;
|
1269
1723
|
}
|
1270
1724
|
|
1271
1725
|
for (i = 0; i < m->field_count; i++) {
|
1272
|
-
const
|
1273
|
-
|
1726
|
+
const upb_FieldDef* f = &m->fields[i];
|
1727
|
+
upb_OneofDef* o = (upb_OneofDef*)upb_FieldDef_ContainingOneof(f);
|
1274
1728
|
if (o) {
|
1275
1729
|
o->fields[o->field_count++] = f;
|
1276
1730
|
}
|
@@ -1279,14 +1733,16 @@ static void finalize_oneofs(symtab_addctx *ctx, upb_msgdef *m) {
|
|
1279
1733
|
m->real_oneof_count = m->oneof_count - synthetic_count;
|
1280
1734
|
}
|
1281
1735
|
|
1282
|
-
size_t getjsonname(const char
|
1736
|
+
size_t getjsonname(const char* name, char* buf, size_t len) {
|
1283
1737
|
size_t src, dst = 0;
|
1284
1738
|
bool ucase_next = false;
|
1285
1739
|
|
1286
|
-
#define WRITE(byte)
|
1287
|
-
++dst;
|
1288
|
-
if (dst < len)
|
1289
|
-
|
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'
|
1290
1746
|
|
1291
1747
|
if (!name) {
|
1292
1748
|
WRITE('\0');
|
@@ -1317,14 +1773,19 @@ size_t getjsonname(const char *name, char *buf, size_t len) {
|
|
1317
1773
|
#undef WRITE
|
1318
1774
|
}
|
1319
1775
|
|
1320
|
-
static char* makejsonname(symtab_addctx
|
1776
|
+
static char* makejsonname(symtab_addctx* ctx, const char* name) {
|
1321
1777
|
size_t size = getjsonname(name, NULL, 0);
|
1322
1778
|
char* json_name = symtab_alloc(ctx, size);
|
1323
1779
|
getjsonname(name, json_name, size);
|
1324
1780
|
return json_name;
|
1325
1781
|
}
|
1326
1782
|
|
1327
|
-
|
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) {
|
1787
|
+
// TODO: table should support an operation "tryinsert" to avoid the double
|
1788
|
+
// lookup.
|
1328
1789
|
if (upb_strtable_lookup(&ctx->symtab->syms, name, NULL)) {
|
1329
1790
|
symtab_errf(ctx, "duplicate symbol '%s'", name);
|
1330
1791
|
}
|
@@ -1333,83 +1794,269 @@ static void symtab_add(symtab_addctx *ctx, const char *name, upb_value v) {
|
|
1333
1794
|
ctx->symtab->arena));
|
1334
1795
|
}
|
1335
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
|
+
|
1336
1811
|
/* Given a symbol and the base symbol inside which it is defined, find the
|
1337
1812
|
* symbol's definition in t. */
|
1338
|
-
static const void
|
1339
|
-
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
1343
|
-
if(sym.
|
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] == '.') {
|
1344
1821
|
/* Symbols starting with '.' are absolute, so we do a single lookup.
|
1345
1822
|
* Slice to omit the leading '.' */
|
1346
|
-
upb_value v;
|
1347
1823
|
if (!upb_strtable_lookup2(t, sym.data + 1, sym.size - 1, &v)) {
|
1348
1824
|
goto notfound;
|
1349
1825
|
}
|
1350
|
-
|
1351
|
-
const void *ret = unpack_def(v, type);
|
1352
|
-
if (!ret) {
|
1353
|
-
symtab_errf(ctx, "type mismatch when resolving field %s, name %s",
|
1354
|
-
f->full_name, sym.data);
|
1355
|
-
}
|
1356
|
-
return ret;
|
1357
1826
|
} else {
|
1358
|
-
/* Remove components from base until we find an entry or run out.
|
1359
|
-
|
1360
|
-
(
|
1361
|
-
|
1362
|
-
|
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);
|
1363
1848
|
}
|
1364
1849
|
|
1850
|
+
*type = deftype(v);
|
1851
|
+
return unpack_def(v, *type);
|
1852
|
+
|
1365
1853
|
notfound:
|
1366
|
-
symtab_errf(ctx, "couldn't resolve name '"
|
1367
|
-
|
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;
|
1368
1871
|
}
|
1369
1872
|
|
1370
1873
|
static void create_oneofdef(
|
1371
|
-
symtab_addctx
|
1372
|
-
const google_protobuf_OneofDescriptorProto
|
1373
|
-
|
1374
|
-
|
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);
|
1375
1879
|
upb_value v;
|
1376
1880
|
|
1377
|
-
o = (upb_oneofdef*)&m->oneofs[m->oneof_count++];
|
1378
1881
|
o->parent = m;
|
1379
1882
|
o->full_name = makefullname(ctx, m->full_name, name);
|
1380
1883
|
o->field_count = 0;
|
1381
1884
|
o->synthetic = false;
|
1382
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
|
+
|
1383
1893
|
v = pack_def(o, UPB_DEFTYPE_ONEOF);
|
1384
|
-
symtab_add(ctx, o->full_name, v);
|
1385
1894
|
CHK_OOM(upb_strtable_insert(&m->ntof, name.data, name.size, v, ctx->arena));
|
1386
1895
|
|
1387
1896
|
CHK_OOM(upb_inttable_init(&o->itof, ctx->arena));
|
1388
1897
|
CHK_OOM(upb_strtable_init(&o->ntof, 4, ctx->arena));
|
1389
1898
|
}
|
1390
1899
|
|
1391
|
-
static str_t
|
1392
|
-
str_t
|
1393
|
-
|
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);
|
1394
1903
|
ret->len = len;
|
1395
1904
|
if (len) memcpy(ret->str, data, len);
|
1396
1905
|
ret->str[len] = '\0';
|
1397
1906
|
return ret;
|
1398
1907
|
}
|
1399
1908
|
|
1400
|
-
static
|
1401
|
-
|
1402
|
-
|
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;
|
1403
2050
|
char nullz[64];
|
1404
2051
|
errno = 0;
|
1405
2052
|
|
1406
|
-
switch (
|
1407
|
-
case
|
1408
|
-
case
|
1409
|
-
case
|
1410
|
-
case
|
1411
|
-
case
|
1412
|
-
case
|
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:
|
1413
2060
|
/* Standard C number parsing functions expect null-terminated strings. */
|
1414
2061
|
if (len >= sizeof(nullz) - 1) {
|
1415
2062
|
symtab_errf(ctx, "Default too long: %.*s", (int)len, str);
|
@@ -1422,8 +2069,8 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
|
|
1422
2069
|
break;
|
1423
2070
|
}
|
1424
2071
|
|
1425
|
-
switch (
|
1426
|
-
case
|
2072
|
+
switch (upb_FieldDef_CType(f)) {
|
2073
|
+
case kUpb_CType_Int32: {
|
1427
2074
|
long val = strtol(str, &end, 0);
|
1428
2075
|
if (val > INT32_MAX || val < INT32_MIN || errno == ERANGE || *end) {
|
1429
2076
|
goto invalid;
|
@@ -1431,16 +2078,17 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
|
|
1431
2078
|
f->defaultval.sint = val;
|
1432
2079
|
break;
|
1433
2080
|
}
|
1434
|
-
case
|
1435
|
-
const
|
1436
|
-
|
1437
|
-
|
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);
|
2085
|
+
if (!ev) {
|
1438
2086
|
goto invalid;
|
1439
2087
|
}
|
1440
|
-
f->defaultval.sint =
|
2088
|
+
f->defaultval.sint = ev->number;
|
1441
2089
|
break;
|
1442
2090
|
}
|
1443
|
-
case
|
2091
|
+
case kUpb_CType_Int64: {
|
1444
2092
|
long long val = strtoll(str, &end, 0);
|
1445
2093
|
if (val > INT64_MAX || val < INT64_MIN || errno == ERANGE || *end) {
|
1446
2094
|
goto invalid;
|
@@ -1448,7 +2096,7 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
|
|
1448
2096
|
f->defaultval.sint = val;
|
1449
2097
|
break;
|
1450
2098
|
}
|
1451
|
-
case
|
2099
|
+
case kUpb_CType_UInt32: {
|
1452
2100
|
unsigned long val = strtoul(str, &end, 0);
|
1453
2101
|
if (val > UINT32_MAX || errno == ERANGE || *end) {
|
1454
2102
|
goto invalid;
|
@@ -1456,7 +2104,7 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
|
|
1456
2104
|
f->defaultval.uint = val;
|
1457
2105
|
break;
|
1458
2106
|
}
|
1459
|
-
case
|
2107
|
+
case kUpb_CType_UInt64: {
|
1460
2108
|
unsigned long long val = strtoull(str, &end, 0);
|
1461
2109
|
if (val > UINT64_MAX || errno == ERANGE || *end) {
|
1462
2110
|
goto invalid;
|
@@ -1464,7 +2112,7 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
|
|
1464
2112
|
f->defaultval.uint = val;
|
1465
2113
|
break;
|
1466
2114
|
}
|
1467
|
-
case
|
2115
|
+
case kUpb_CType_Double: {
|
1468
2116
|
double val = strtod(str, &end);
|
1469
2117
|
if (errno == ERANGE || *end) {
|
1470
2118
|
goto invalid;
|
@@ -1472,7 +2120,7 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
|
|
1472
2120
|
f->defaultval.dbl = val;
|
1473
2121
|
break;
|
1474
2122
|
}
|
1475
|
-
case
|
2123
|
+
case kUpb_CType_Float: {
|
1476
2124
|
float val = strtof(str, &end);
|
1477
2125
|
if (errno == ERANGE || *end) {
|
1478
2126
|
goto invalid;
|
@@ -1480,75 +2128,78 @@ static void parse_default(symtab_addctx *ctx, const char *str, size_t len,
|
|
1480
2128
|
f->defaultval.flt = val;
|
1481
2129
|
break;
|
1482
2130
|
}
|
1483
|
-
case
|
2131
|
+
case kUpb_CType_Bool: {
|
1484
2132
|
if (streql2(str, len, "false")) {
|
1485
2133
|
f->defaultval.boolean = false;
|
1486
2134
|
} else if (streql2(str, len, "true")) {
|
1487
2135
|
f->defaultval.boolean = true;
|
1488
2136
|
} else {
|
2137
|
+
goto invalid;
|
1489
2138
|
}
|
1490
2139
|
break;
|
1491
2140
|
}
|
1492
|
-
case
|
2141
|
+
case kUpb_CType_String:
|
1493
2142
|
f->defaultval.str = newstr(ctx, str, len);
|
1494
2143
|
break;
|
1495
|
-
case
|
1496
|
-
|
1497
|
-
f->defaultval.str = newstr(ctx, str, len);
|
2144
|
+
case kUpb_CType_Bytes:
|
2145
|
+
f->defaultval.str = unescape(ctx, f, str, len);
|
1498
2146
|
break;
|
1499
|
-
case
|
2147
|
+
case kUpb_CType_Message:
|
1500
2148
|
/* Should not have a default value. */
|
1501
2149
|
symtab_errf(ctx, "Message should not have a default (%s)",
|
1502
|
-
|
2150
|
+
upb_FieldDef_FullName(f));
|
1503
2151
|
}
|
1504
2152
|
|
1505
2153
|
return;
|
1506
2154
|
|
1507
2155
|
invalid:
|
1508
|
-
symtab_errf(ctx, "Invalid default '%.*s' for field %s", (int)len,
|
1509
|
-
|
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));
|
1510
2158
|
}
|
1511
2159
|
|
1512
|
-
static void set_default_default(symtab_addctx
|
1513
|
-
switch (
|
1514
|
-
case
|
1515
|
-
case
|
1516
|
-
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:
|
1517
2164
|
f->defaultval.sint = 0;
|
1518
2165
|
break;
|
1519
|
-
case
|
1520
|
-
case
|
2166
|
+
case kUpb_CType_UInt64:
|
2167
|
+
case kUpb_CType_UInt32:
|
1521
2168
|
f->defaultval.uint = 0;
|
1522
2169
|
break;
|
1523
|
-
case
|
1524
|
-
case
|
2170
|
+
case kUpb_CType_Double:
|
2171
|
+
case kUpb_CType_Float:
|
1525
2172
|
f->defaultval.dbl = 0;
|
1526
2173
|
break;
|
1527
|
-
case
|
1528
|
-
case
|
2174
|
+
case kUpb_CType_String:
|
2175
|
+
case kUpb_CType_Bytes:
|
1529
2176
|
f->defaultval.str = newstr(ctx, NULL, 0);
|
1530
2177
|
break;
|
1531
|
-
case
|
2178
|
+
case kUpb_CType_Bool:
|
1532
2179
|
f->defaultval.boolean = false;
|
1533
2180
|
break;
|
1534
|
-
case
|
2181
|
+
case kUpb_CType_Enum:
|
2182
|
+
f->defaultval.sint = f->sub.enumdef->values[0].number;
|
2183
|
+
case kUpb_CType_Message:
|
1535
2184
|
break;
|
1536
2185
|
}
|
1537
2186
|
}
|
1538
2187
|
|
1539
2188
|
static void create_fielddef(
|
1540
|
-
symtab_addctx
|
1541
|
-
const google_protobuf_FieldDescriptorProto
|
1542
|
-
|
1543
|
-
|
1544
|
-
|
1545
|
-
const char
|
1546
|
-
const char
|
1547
|
-
const char
|
1548
|
-
|
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(). */
|
1549
2200
|
|
1550
2201
|
if (!google_protobuf_FieldDescriptorProto_has_name(field_proto)) {
|
1551
|
-
symtab_errf(ctx, "field has no name
|
2202
|
+
symtab_errf(ctx, "field has no name");
|
1552
2203
|
}
|
1553
2204
|
|
1554
2205
|
name = google_protobuf_FieldDescriptorProto_name(field_proto);
|
@@ -1559,57 +2210,94 @@ static void create_fielddef(
|
|
1559
2210
|
if (google_protobuf_FieldDescriptorProto_has_json_name(field_proto)) {
|
1560
2211
|
json_name = strviewdup(
|
1561
2212
|
ctx, google_protobuf_FieldDescriptorProto_json_name(field_proto));
|
2213
|
+
f->has_json_name_ = true;
|
1562
2214
|
} else {
|
1563
2215
|
json_name = makejsonname(ctx, shortname);
|
2216
|
+
f->has_json_name_ = false;
|
1564
2217
|
}
|
1565
2218
|
|
1566
2219
|
field_number = google_protobuf_FieldDescriptorProto_number(field_proto);
|
1567
2220
|
|
1568
|
-
|
1569
|
-
|
1570
|
-
|
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);
|
1571
2228
|
|
1572
|
-
|
1573
|
-
|
1574
|
-
|
1575
|
-
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);
|
1576
2232
|
|
1577
|
-
|
1578
|
-
f->index_ = m->field_count++;
|
1579
|
-
f->msgdef = m;
|
1580
|
-
f->is_extension_ = false;
|
2233
|
+
f->type_ = (int)google_protobuf_FieldDescriptorProto_type(field_proto);
|
1581
2234
|
|
1582
|
-
|
1583
|
-
|
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
|
+
}
|
1584
2250
|
}
|
2251
|
+
} else if (has_type_name) {
|
2252
|
+
f->type_ =
|
2253
|
+
FIELD_TYPE_UNSPECIFIED; // We'll fill this in in resolve_fielddef().
|
2254
|
+
}
|
1585
2255
|
|
1586
|
-
|
1587
|
-
|
1588
|
-
|
2256
|
+
if (!is_extension) {
|
2257
|
+
/* direct message field. */
|
2258
|
+
upb_value v, field_v, json_v, existing_v;
|
2259
|
+
size_t json_size;
|
1589
2260
|
|
1590
|
-
if (
|
1591
|
-
symtab_errf(ctx, "
|
2261
|
+
if (field_number <= 0 || field_number > kUpb_MaxFieldNumber) {
|
2262
|
+
symtab_errf(ctx, "invalid field number (%u)", field_number);
|
1592
2263
|
}
|
1593
2264
|
|
2265
|
+
f->index_ = f - m->fields;
|
2266
|
+
f->msgdef = m;
|
2267
|
+
f->is_extension_ = false;
|
2268
|
+
|
1594
2269
|
field_v = pack_def(f, UPB_DEFTYPE_FIELD);
|
1595
2270
|
json_v = pack_def(f, UPB_DEFTYPE_FIELD_JSONNAME);
|
1596
2271
|
v = upb_value_constptr(f);
|
1597
2272
|
json_size = strlen(json_name);
|
1598
2273
|
|
2274
|
+
if (upb_strtable_lookup(&m->ntof, shortname, &existing_v)) {
|
2275
|
+
symtab_errf(ctx, "duplicate field name (%s)", shortname);
|
2276
|
+
}
|
2277
|
+
|
1599
2278
|
CHK_OOM(upb_strtable_insert(&m->ntof, name.data, name.size, field_v,
|
1600
2279
|
ctx->arena));
|
1601
|
-
CHK_OOM(upb_inttable_insert(&m->itof, field_number, v, ctx->arena));
|
1602
2280
|
|
1603
2281
|
if (strcmp(shortname, json_name) != 0) {
|
1604
|
-
|
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);
|
1605
2292
|
}
|
1606
2293
|
|
1607
|
-
|
1608
|
-
|
2294
|
+
CHK_OOM(upb_inttable_insert(&m->itof, field_number, v, ctx->arena));
|
2295
|
+
|
2296
|
+
if (ctx->layout) {
|
2297
|
+
const upb_MiniTable_Field* fields = m->layout->fields;
|
1609
2298
|
int count = m->layout->field_count;
|
1610
2299
|
bool found = false;
|
1611
|
-
int i;
|
1612
|
-
for (i = 0; i < count; i++) {
|
2300
|
+
for (int i = 0; i < count; i++) {
|
1613
2301
|
if (fields[i].number == field_number) {
|
1614
2302
|
f->layout_index = i;
|
1615
2303
|
found = true;
|
@@ -1620,37 +2308,42 @@ static void create_fielddef(
|
|
1620
2308
|
}
|
1621
2309
|
} else {
|
1622
2310
|
/* extension field. */
|
1623
|
-
f = (upb_fielddef*)&ctx->file->exts[ctx->file->ext_count++];
|
1624
2311
|
f->is_extension_ = true;
|
1625
|
-
|
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++;
|
2315
|
+
if (ctx->layout) {
|
2316
|
+
UPB_ASSERT(ctx->file->ext_layouts[f->layout_index]->field.number ==
|
2317
|
+
field_number);
|
2318
|
+
}
|
1626
2319
|
}
|
1627
2320
|
|
1628
|
-
f->
|
1629
|
-
|
1630
|
-
|
1631
|
-
|
1632
|
-
f->label_
|
1633
|
-
|
1634
|
-
|
1635
|
-
|
1636
|
-
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
|
+
}
|
1637
2329
|
|
1638
2330
|
/* We can't resolve the subdef or (in the case of extensions) the containing
|
1639
2331
|
* message yet, because it may not have been defined yet. We stash a pointer
|
1640
2332
|
* to the field_proto until later when we can properly resolve it. */
|
1641
2333
|
f->sub.unresolved = field_proto;
|
1642
2334
|
|
1643
|
-
if (f->label_ ==
|
2335
|
+
if (f->label_ == kUpb_Label_Required &&
|
2336
|
+
f->file->syntax == kUpb_Syntax_Proto3) {
|
1644
2337
|
symtab_errf(ctx, "proto3 fields cannot be required (%s)", f->full_name);
|
1645
2338
|
}
|
1646
2339
|
|
1647
2340
|
if (google_protobuf_FieldDescriptorProto_has_oneof_index(field_proto)) {
|
1648
2341
|
int oneof_index =
|
1649
2342
|
google_protobuf_FieldDescriptorProto_oneof_index(field_proto);
|
1650
|
-
|
2343
|
+
upb_OneofDef* oneof;
|
1651
2344
|
upb_value v = upb_value_constptr(f);
|
1652
2345
|
|
1653
|
-
if (
|
2346
|
+
if (upb_FieldDef_Label(f) != kUpb_Label_Optional) {
|
1654
2347
|
symtab_errf(ctx, "fields in oneof must have OPTIONAL label (%s)",
|
1655
2348
|
f->full_name);
|
1656
2349
|
}
|
@@ -1664,8 +2357,8 @@ static void create_fielddef(
|
|
1664
2357
|
symtab_errf(ctx, "oneof_index out of range (%s)", f->full_name);
|
1665
2358
|
}
|
1666
2359
|
|
1667
|
-
oneof = (
|
1668
|
-
f->oneof = oneof;
|
2360
|
+
oneof = (upb_OneofDef*)&m->oneofs[oneof_index];
|
2361
|
+
f->scope.oneof = oneof;
|
1669
2362
|
|
1670
2363
|
oneof->field_count++;
|
1671
2364
|
if (f->proto3_optional_) {
|
@@ -1675,43 +2368,184 @@ static void create_fielddef(
|
|
1675
2368
|
CHK_OOM(
|
1676
2369
|
upb_strtable_insert(&oneof->ntof, name.data, name.size, v, ctx->arena));
|
1677
2370
|
} else {
|
1678
|
-
f->oneof = NULL;
|
1679
2371
|
if (f->proto3_optional_) {
|
1680
2372
|
symtab_errf(ctx, "field with proto3_optional was not in a oneof (%s)",
|
1681
2373
|
f->full_name);
|
1682
2374
|
}
|
1683
2375
|
}
|
1684
2376
|
|
1685
|
-
|
1686
|
-
google_protobuf_FieldDescriptorProto_options(field_proto) : NULL;
|
2377
|
+
SET_OPTIONS(f->opts, FieldDescriptorProto, FieldOptions, field_proto);
|
1687
2378
|
|
1688
|
-
if (
|
1689
|
-
f->packed_ = google_protobuf_FieldOptions_packed(
|
2379
|
+
if (google_protobuf_FieldOptions_has_packed(f->opts)) {
|
2380
|
+
f->packed_ = google_protobuf_FieldOptions_packed(f->opts);
|
1690
2381
|
} else {
|
1691
2382
|
/* Repeated fields default to packed for proto3 only. */
|
1692
|
-
f->packed_ =
|
1693
|
-
|
2383
|
+
f->packed_ = upb_FieldDef_IsPrimitive(f) &&
|
2384
|
+
f->label_ == kUpb_Label_Repeated &&
|
2385
|
+
f->file->syntax == kUpb_Syntax_Proto3;
|
2386
|
+
}
|
2387
|
+
}
|
2388
|
+
|
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
|
+
}
|
1694
2465
|
}
|
1695
2466
|
|
1696
|
-
|
1697
|
-
|
1698
|
-
|
1699
|
-
|
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));
|
1700
2530
|
}
|
1701
2531
|
}
|
1702
2532
|
|
1703
2533
|
static void create_enumdef(
|
1704
|
-
symtab_addctx
|
1705
|
-
const google_protobuf_EnumDescriptorProto
|
1706
|
-
|
1707
|
-
|
1708
|
-
|
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;
|
1709
2541
|
size_t i, n;
|
1710
2542
|
|
2543
|
+
e->file = ctx->file; /* Must happen prior to symtab_add() */
|
2544
|
+
e->containing_type = containing_type;
|
2545
|
+
|
1711
2546
|
name = google_protobuf_EnumDescriptorProto_name(enum_proto);
|
1712
2547
|
check_ident(ctx, name, false);
|
1713
2548
|
|
1714
|
-
e = (upb_enumdef*)&ctx->file->enums[ctx->file->enum_count++];
|
1715
2549
|
e->full_name = makefullname(ctx, prefix, name);
|
1716
2550
|
symtab_add(ctx, e->full_name, pack_def(e, UPB_DEFTYPE_ENUM));
|
1717
2551
|
|
@@ -1719,225 +2553,371 @@ static void create_enumdef(
|
|
1719
2553
|
CHK_OOM(upb_strtable_init(&e->ntoi, n, ctx->arena));
|
1720
2554
|
CHK_OOM(upb_inttable_init(&e->iton, ctx->arena));
|
1721
2555
|
|
1722
|
-
e->file = ctx->file;
|
1723
2556
|
e->defaultval = 0;
|
2557
|
+
e->value_count = n;
|
2558
|
+
e->values = symtab_alloc(ctx, sizeof(*e->values) * n);
|
1724
2559
|
|
1725
2560
|
if (n == 0) {
|
1726
2561
|
symtab_errf(ctx, "enums must contain at least one value (%s)",
|
1727
2562
|
e->full_name);
|
1728
2563
|
}
|
1729
2564
|
|
1730
|
-
|
1731
|
-
const google_protobuf_EnumValueDescriptorProto *value = values[i];
|
1732
|
-
upb_strview name = google_protobuf_EnumValueDescriptorProto_name(value);
|
1733
|
-
char *name2 = strviewdup(ctx, name);
|
1734
|
-
int32_t num = google_protobuf_EnumValueDescriptorProto_number(value);
|
1735
|
-
upb_value v = upb_value_int32(num);
|
1736
|
-
|
1737
|
-
if (i == 0 && e->file->syntax == UPB_SYNTAX_PROTO3 && num != 0) {
|
1738
|
-
symtab_errf(ctx, "for proto3, the first enum value must be zero (%s)",
|
1739
|
-
e->full_name);
|
1740
|
-
}
|
2565
|
+
SET_OPTIONS(e->opts, EnumDescriptorProto, EnumOptions, enum_proto);
|
1741
2566
|
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
2567
|
+
for (i = 0; i < n; i++) {
|
2568
|
+
create_enumvaldef(ctx, prefix, values[i], e, i);
|
2569
|
+
}
|
1745
2570
|
|
1746
|
-
|
1747
|
-
CHK_OOM(upb_strtable_insert(&e->ntoi, name2, strlen(name2), v, ctx->arena));
|
2571
|
+
upb_inttable_compact(&e->iton, ctx->arena);
|
1748
2572
|
|
1749
|
-
|
1750
|
-
|
1751
|
-
|
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);
|
1752
2581
|
}
|
2582
|
+
} else {
|
2583
|
+
e->layout = NULL;
|
1753
2584
|
}
|
1754
|
-
|
1755
|
-
upb_inttable_compact(&e->iton, ctx->arena);
|
1756
2585
|
}
|
1757
2586
|
|
1758
|
-
static void
|
1759
|
-
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1763
|
-
|
1764
|
-
|
1765
|
-
|
1766
|
-
|
1767
|
-
|
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;
|
1768
2604
|
|
1769
2605
|
name = google_protobuf_DescriptorProto_name(msg_proto);
|
1770
2606
|
check_ident(ctx, name, false);
|
1771
2607
|
|
1772
|
-
m = (upb_msgdef*)&ctx->file->msgs[ctx->file->msg_count++];
|
1773
2608
|
m->full_name = makefullname(ctx, prefix, name);
|
1774
2609
|
symtab_add(ctx, m->full_name, pack_def(m, UPB_DEFTYPE_MSG));
|
1775
2610
|
|
1776
2611
|
oneofs = google_protobuf_DescriptorProto_oneof_decl(msg_proto, &n_oneof);
|
1777
2612
|
fields = google_protobuf_DescriptorProto_field(msg_proto, &n_field);
|
2613
|
+
ext_ranges =
|
2614
|
+
google_protobuf_DescriptorProto_extension_range(msg_proto, &n_ext_range);
|
1778
2615
|
|
1779
2616
|
CHK_OOM(upb_inttable_init(&m->itof, ctx->arena));
|
1780
2617
|
CHK_OOM(upb_strtable_init(&m->ntof, n_oneof + n_field, ctx->arena));
|
1781
2618
|
|
1782
|
-
|
1783
|
-
|
1784
|
-
|
1785
|
-
|
1786
|
-
|
1787
|
-
if (options) {
|
1788
|
-
m->map_entry = google_protobuf_MessageOptions_map_entry(options);
|
1789
|
-
}
|
1790
|
-
|
1791
|
-
if (ctx->layouts) {
|
1792
|
-
m->layout = *ctx->layouts;
|
1793
|
-
ctx->layouts++;
|
2619
|
+
if (ctx->layout) {
|
2620
|
+
/* create_fielddef() below depends on this being set. */
|
2621
|
+
UPB_ASSERT(ctx->msg_count < ctx->layout->msg_count);
|
2622
|
+
m->layout = ctx->layout->msgs[ctx->msg_count++];
|
2623
|
+
UPB_ASSERT(n_field == m->layout->field_count);
|
1794
2624
|
} else {
|
1795
2625
|
/* Allocate now (to allow cross-linking), populate later. */
|
1796
|
-
m->layout =
|
1797
|
-
ctx, sizeof(*m->layout) + sizeof(
|
2626
|
+
m->layout =
|
2627
|
+
symtab_alloc(ctx, sizeof(*m->layout) + sizeof(_upb_FastTable_Entry));
|
1798
2628
|
}
|
1799
2629
|
|
1800
|
-
m->
|
2630
|
+
SET_OPTIONS(m->opts, DescriptorProto, MessageOptions, msg_proto);
|
2631
|
+
|
2632
|
+
m->oneof_count = n_oneof;
|
1801
2633
|
m->oneofs = symtab_alloc(ctx, sizeof(*m->oneofs) * n_oneof);
|
1802
2634
|
for (i = 0; i < n_oneof; i++) {
|
1803
|
-
create_oneofdef(ctx, m, oneofs[i]);
|
2635
|
+
create_oneofdef(ctx, m, oneofs[i], &m->oneofs[i]);
|
1804
2636
|
}
|
1805
2637
|
|
1806
|
-
m->field_count =
|
2638
|
+
m->field_count = n_field;
|
1807
2639
|
m->fields = symtab_alloc(ctx, sizeof(*m->fields) * n_field);
|
1808
2640
|
for (i = 0; i < n_field; i++) {
|
1809
|
-
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);
|
2643
|
+
}
|
2644
|
+
|
2645
|
+
m->ext_range_count = n_ext_range;
|
2646
|
+
m->ext_ranges = symtab_alloc(ctx, sizeof(*m->ext_ranges) * n_ext_range);
|
2647
|
+
for (i = 0; i < n_ext_range; i++) {
|
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);
|
1810
2669
|
}
|
1811
2670
|
|
1812
2671
|
finalize_oneofs(ctx, m);
|
1813
2672
|
assign_msg_wellknowntype(m);
|
1814
2673
|
upb_inttable_compact(&m->itof, ctx->arena);
|
1815
|
-
|
1816
|
-
|
1817
|
-
|
1818
|
-
|
1819
|
-
|
1820
|
-
|
1821
|
-
|
1822
|
-
|
1823
|
-
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
|
1829
|
-
|
1830
|
-
|
1831
|
-
|
1832
|
-
|
1833
|
-
|
1834
|
-
|
1835
|
-
|
1836
|
-
|
1837
|
-
|
1838
|
-
|
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;
|
1839
2753
|
}
|
1840
|
-
|
1841
|
-
google_protobuf_DescriptorProto_enum_type(msg_proto, &n);
|
1842
|
-
file->enum_count += n;
|
1843
|
-
|
1844
|
-
google_protobuf_DescriptorProto_extension(msg_proto, &n);
|
1845
|
-
file->ext_count += n;
|
1846
2754
|
}
|
1847
2755
|
|
1848
|
-
static void
|
1849
|
-
const
|
1850
|
-
|
1851
|
-
|
1852
|
-
|
1853
|
-
|
1854
|
-
msgs = google_protobuf_FileDescriptorProto_message_type(file_proto, &n);
|
1855
|
-
for (i = 0; i < n; i++) {
|
1856
|
-
count_types_in_msg(msgs[i], file);
|
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);
|
1857
2761
|
}
|
1858
2762
|
|
1859
|
-
|
1860
|
-
|
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;
|
1861
2768
|
|
1862
|
-
|
1863
|
-
file->ext_count += n;
|
1864
|
-
}
|
2769
|
+
bool found = false;
|
1865
2770
|
|
1866
|
-
|
1867
|
-
|
1868
|
-
|
1869
|
-
|
1870
|
-
|
1871
|
-
if (f->is_extension_) {
|
1872
|
-
if (!google_protobuf_FieldDescriptorProto_has_extendee(field_proto)) {
|
1873
|
-
symtab_errf(ctx, "extension for field '%s' had no extendee",
|
1874
|
-
f->full_name);
|
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;
|
1875
2776
|
}
|
1876
|
-
|
1877
|
-
name = google_protobuf_FieldDescriptorProto_extendee(field_proto);
|
1878
|
-
f->msgdef = symtab_resolve(ctx, f, prefix, name, UPB_DEFTYPE_MSG);
|
1879
2777
|
}
|
1880
2778
|
|
1881
|
-
if (
|
1882
|
-
|
1883
|
-
|
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);
|
1884
2784
|
}
|
1885
2785
|
|
1886
|
-
|
1887
|
-
|
1888
|
-
|
1889
|
-
|
1890
|
-
|
1891
|
-
|
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;
|
1892
2797
|
}
|
1893
2798
|
|
1894
|
-
|
1895
|
-
|
2799
|
+
CHK_OOM(upb_inttable_insert(&ctx->symtab->exts, (uintptr_t)ext,
|
2800
|
+
upb_value_constptr(f), ctx->arena));
|
2801
|
+
}
|
2802
|
+
|
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.
|
1896
2808
|
if (google_protobuf_FieldDescriptorProto_has_default_value(field_proto)) {
|
1897
|
-
|
2809
|
+
upb_StringView defaultval =
|
1898
2810
|
google_protobuf_FieldDescriptorProto_default_value(field_proto);
|
1899
2811
|
|
1900
|
-
if (f->file->syntax ==
|
2812
|
+
if (f->file->syntax == kUpb_Syntax_Proto3) {
|
1901
2813
|
symtab_errf(ctx, "proto3 fields cannot have explicit defaults (%s)",
|
1902
2814
|
f->full_name);
|
1903
2815
|
}
|
1904
2816
|
|
1905
|
-
if (
|
2817
|
+
if (upb_FieldDef_IsSubMessage(f)) {
|
1906
2818
|
symtab_errf(ctx, "message fields cannot have explicit defaults (%s)",
|
1907
2819
|
f->full_name);
|
1908
2820
|
}
|
1909
2821
|
|
1910
2822
|
parse_default(ctx, defaultval.data, defaultval.size, f);
|
2823
|
+
f->has_default = true;
|
1911
2824
|
} else {
|
1912
2825
|
set_default_default(ctx, f);
|
2826
|
+
f->has_default = false;
|
2827
|
+
}
|
2828
|
+
}
|
2829
|
+
|
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);
|
2840
|
+
}
|
2841
|
+
}
|
2842
|
+
|
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
|
+
}
|
2847
|
+
|
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;
|
2857
|
+
}
|
2858
|
+
}
|
2859
|
+
|
2860
|
+
if (!ctx->layout) make_layout(ctx, m);
|
2861
|
+
|
2862
|
+
for (int i = 0; i < m->nested_msg_count; i++) {
|
2863
|
+
resolve_msgdef(ctx, (upb_MessageDef*)&m->nested_msgs[i]);
|
1913
2864
|
}
|
1914
2865
|
}
|
1915
2866
|
|
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;
|
2871
|
+
|
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]);
|
2876
|
+
}
|
2877
|
+
|
2878
|
+
return ext_count;
|
2879
|
+
}
|
2880
|
+
|
1916
2881
|
static void build_filedef(
|
1917
|
-
symtab_addctx
|
1918
|
-
const google_protobuf_FileDescriptorProto
|
1919
|
-
const
|
1920
|
-
const
|
1921
|
-
const
|
1922
|
-
const
|
1923
|
-
const
|
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;
|
1924
2891
|
size_t i, n;
|
1925
2892
|
|
1926
2893
|
file->symtab = ctx->symtab;
|
1927
2894
|
|
1928
|
-
/*
|
1929
|
-
|
1930
|
-
|
1931
|
-
|
1932
|
-
|
1933
|
-
|
1934
|
-
|
1935
|
-
file->
|
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;
|
1936
2903
|
|
1937
|
-
|
1938
|
-
|
1939
|
-
|
1940
|
-
|
2904
|
+
if (ctx->layout) {
|
2905
|
+
/* We are using the ext layouts that were passed in. */
|
2906
|
+
file->ext_layouts = ctx->layout->exts;
|
2907
|
+
if (ctx->layout->ext_count != file->ext_count) {
|
2908
|
+
symtab_errf(ctx, "Extension count did not match layout (%d vs %d)",
|
2909
|
+
ctx->layout->ext_count, file->ext_count);
|
2910
|
+
}
|
2911
|
+
} else {
|
2912
|
+
/* We are building ext layouts from scratch. */
|
2913
|
+
file->ext_layouts =
|
2914
|
+
symtab_alloc(ctx, sizeof(*file->ext_layouts) * file->ext_count);
|
2915
|
+
upb_MiniTable_Extension* ext =
|
2916
|
+
symtab_alloc(ctx, sizeof(*ext) * file->ext_count);
|
2917
|
+
for (int i = 0; i < file->ext_count; i++) {
|
2918
|
+
file->ext_layouts[i] = &ext[i];
|
2919
|
+
}
|
2920
|
+
}
|
1941
2921
|
|
1942
2922
|
if (!google_protobuf_FileDescriptorProto_has_name(file_proto)) {
|
1943
2923
|
symtab_errf(ctx, "File has no name");
|
@@ -1945,11 +2925,9 @@ static void build_filedef(
|
|
1945
2925
|
|
1946
2926
|
file->name =
|
1947
2927
|
strviewdup(ctx, google_protobuf_FileDescriptorProto_name(file_proto));
|
1948
|
-
file->phpprefix = NULL;
|
1949
|
-
file->phpnamespace = NULL;
|
1950
2928
|
|
1951
2929
|
if (google_protobuf_FileDescriptorProto_has_package(file_proto)) {
|
1952
|
-
|
2930
|
+
upb_StringView package =
|
1953
2931
|
google_protobuf_FileDescriptorProto_package(file_proto);
|
1954
2932
|
check_ident(ctx, package, true);
|
1955
2933
|
file->package = strviewdup(ctx, package);
|
@@ -1958,133 +2936,189 @@ static void build_filedef(
|
|
1958
2936
|
}
|
1959
2937
|
|
1960
2938
|
if (google_protobuf_FileDescriptorProto_has_syntax(file_proto)) {
|
1961
|
-
|
2939
|
+
upb_StringView syntax =
|
1962
2940
|
google_protobuf_FileDescriptorProto_syntax(file_proto);
|
1963
2941
|
|
1964
2942
|
if (streql_view(syntax, "proto2")) {
|
1965
|
-
file->syntax =
|
2943
|
+
file->syntax = kUpb_Syntax_Proto2;
|
1966
2944
|
} else if (streql_view(syntax, "proto3")) {
|
1967
|
-
file->syntax =
|
2945
|
+
file->syntax = kUpb_Syntax_Proto3;
|
1968
2946
|
} else {
|
1969
|
-
symtab_errf(ctx, "Invalid syntax '"
|
1970
|
-
|
2947
|
+
symtab_errf(ctx, "Invalid syntax '" UPB_STRINGVIEW_FORMAT "'",
|
2948
|
+
UPB_STRINGVIEW_ARGS(syntax));
|
1971
2949
|
}
|
1972
2950
|
} else {
|
1973
|
-
file->syntax =
|
2951
|
+
file->syntax = kUpb_Syntax_Proto2;
|
1974
2952
|
}
|
1975
2953
|
|
1976
2954
|
/* Read options. */
|
1977
|
-
|
1978
|
-
if (file_options_proto) {
|
1979
|
-
if (google_protobuf_FileOptions_has_php_class_prefix(file_options_proto)) {
|
1980
|
-
file->phpprefix = strviewdup(
|
1981
|
-
ctx,
|
1982
|
-
google_protobuf_FileOptions_php_class_prefix(file_options_proto));
|
1983
|
-
}
|
1984
|
-
if (google_protobuf_FileOptions_has_php_namespace(file_options_proto)) {
|
1985
|
-
file->phpnamespace = strviewdup(
|
1986
|
-
ctx, google_protobuf_FileOptions_php_namespace(file_options_proto));
|
1987
|
-
}
|
1988
|
-
}
|
2955
|
+
SET_OPTIONS(file->opts, FileDescriptorProto, FileOptions, file_proto);
|
1989
2956
|
|
1990
2957
|
/* Verify dependencies. */
|
1991
2958
|
strs = google_protobuf_FileDescriptorProto_dependency(file_proto, &n);
|
2959
|
+
file->dep_count = n;
|
1992
2960
|
file->deps = symtab_alloc(ctx, sizeof(*file->deps) * n);
|
1993
2961
|
|
1994
2962
|
for (i = 0; i < n; i++) {
|
1995
|
-
|
1996
|
-
|
1997
|
-
|
1998
|
-
|
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]) {
|
1999
2967
|
symtab_errf(ctx,
|
2000
|
-
"Depends on file '"
|
2968
|
+
"Depends on file '" UPB_STRINGVIEW_FORMAT
|
2001
2969
|
"', but it has not been loaded",
|
2002
|
-
|
2970
|
+
UPB_STRINGVIEW_ARGS(str));
|
2003
2971
|
}
|
2004
|
-
file->deps[i] = upb_value_getconstptr(v);
|
2005
2972
|
}
|
2006
2973
|
|
2007
|
-
|
2008
|
-
|
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;
|
2009
2979
|
for (i = 0; i < n; i++) {
|
2010
|
-
|
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];
|
2011
2996
|
}
|
2012
2997
|
|
2013
2998
|
/* Create enums. */
|
2014
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);
|
2015
3002
|
for (i = 0; i < n; i++) {
|
2016
|
-
create_enumdef(ctx, file->package, enums[i]);
|
3003
|
+
create_enumdef(ctx, file->package, enums[i], NULL, &file->top_lvl_enums[i]);
|
2017
3004
|
}
|
2018
3005
|
|
2019
3006
|
/* Create extensions. */
|
2020
3007
|
exts = google_protobuf_FileDescriptorProto_extension(file_proto, &n);
|
2021
|
-
file->
|
3008
|
+
file->top_lvl_ext_count = n;
|
3009
|
+
file->top_lvl_exts = symtab_alloc(ctx, sizeof(*file->top_lvl_exts) * n);
|
2022
3010
|
for (i = 0; i < n; i++) {
|
2023
|
-
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;
|
2024
3014
|
}
|
2025
3015
|
|
2026
|
-
/*
|
2027
|
-
|
2028
|
-
|
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]);
|
2029
3022
|
}
|
2030
3023
|
|
2031
|
-
|
2032
|
-
|
2033
|
-
|
2034
|
-
|
2035
|
-
|
2036
|
-
|
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;
|
2037
3031
|
}
|
2038
3032
|
|
2039
|
-
|
2040
|
-
|
2041
|
-
|
2042
|
-
make_layout(ctx, m);
|
2043
|
-
}
|
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]);
|
2044
3036
|
}
|
2045
|
-
}
|
2046
3037
|
|
2047
|
-
|
2048
|
-
|
2049
|
-
for (i = 0; i < file->msg_count; i++) {
|
2050
|
-
const char *name = file->msgs[i].full_name;
|
2051
|
-
upb_strtable_remove(&s->syms, name, strlen(name), NULL);
|
3038
|
+
for (i = 0; i < (size_t)file->top_lvl_msg_count; i++) {
|
3039
|
+
resolve_msgdef(ctx, (upb_MessageDef*)&file->top_lvl_msgs[i]);
|
2052
3040
|
}
|
2053
|
-
|
2054
|
-
|
2055
|
-
|
3041
|
+
|
3042
|
+
if (file->ext_count) {
|
3043
|
+
CHK_OOM(_upb_extreg_add(ctx->symtab->extreg, file->ext_layouts,
|
3044
|
+
file->ext_count));
|
2056
3045
|
}
|
2057
|
-
|
2058
|
-
|
2059
|
-
|
3046
|
+
}
|
3047
|
+
|
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);
|
2060
3076
|
}
|
2061
3077
|
}
|
2062
3078
|
|
2063
|
-
static const
|
2064
|
-
|
2065
|
-
const
|
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) {
|
2066
3082
|
symtab_addctx ctx;
|
2067
|
-
|
3083
|
+
upb_StringView name = google_protobuf_FileDescriptorProto_name(file_proto);
|
3084
|
+
upb_value v;
|
2068
3085
|
|
2069
|
-
if (upb_strtable_lookup2(&s->files, name.data, name.size,
|
2070
|
-
|
2071
|
-
|
2072
|
-
|
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;
|
2073
3101
|
}
|
2074
3102
|
|
2075
3103
|
ctx.symtab = s;
|
2076
|
-
ctx.
|
3104
|
+
ctx.layout = layout;
|
3105
|
+
ctx.msg_count = 0;
|
3106
|
+
ctx.enum_count = 0;
|
3107
|
+
ctx.ext_count = 0;
|
2077
3108
|
ctx.status = status;
|
2078
3109
|
ctx.file = NULL;
|
2079
|
-
ctx.arena =
|
3110
|
+
ctx.arena = upb_Arena_New();
|
3111
|
+
ctx.tmp_arena = upb_Arena_New();
|
2080
3112
|
|
2081
|
-
if (!ctx.arena) {
|
2082
|
-
|
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);
|
2083
3117
|
return NULL;
|
2084
3118
|
}
|
2085
3119
|
|
2086
3120
|
if (UPB_UNLIKELY(UPB_SETJMP(ctx.err))) {
|
2087
|
-
UPB_ASSERT(!
|
3121
|
+
UPB_ASSERT(!upb_Status_IsOk(status));
|
2088
3122
|
if (ctx.file) {
|
2089
3123
|
remove_filedef(s, ctx.file);
|
2090
3124
|
ctx.file = NULL;
|
@@ -2093,51 +3127,53 @@ static const upb_filedef *_upb_symtab_addfile(
|
|
2093
3127
|
ctx.file = symtab_alloc(&ctx, sizeof(*ctx.file));
|
2094
3128
|
build_filedef(&ctx, ctx.file, file_proto);
|
2095
3129
|
upb_strtable_insert(&s->files, name.data, name.size,
|
2096
|
-
|
2097
|
-
UPB_ASSERT(
|
2098
|
-
|
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);
|
2099
3133
|
}
|
2100
3134
|
|
2101
|
-
|
3135
|
+
upb_Arena_Free(ctx.arena);
|
3136
|
+
upb_Arena_Free(ctx.tmp_arena);
|
2102
3137
|
return ctx.file;
|
2103
3138
|
}
|
2104
3139
|
|
2105
|
-
const
|
2106
|
-
|
2107
|
-
|
2108
|
-
return
|
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);
|
2109
3144
|
}
|
2110
3145
|
|
2111
3146
|
/* Include here since we want most of this file to be stdio-free. */
|
2112
3147
|
#include <stdio.h>
|
2113
3148
|
|
2114
|
-
bool
|
3149
|
+
bool _upb_DefPool_LoadDefInitEx(upb_DefPool* s, const _upb_DefPool_Init* init,
|
3150
|
+
bool rebuild_minitable) {
|
2115
3151
|
/* Since this function should never fail (it would indicate a bug in upb) we
|
2116
3152
|
* print errors to stderr instead of returning error status to the user. */
|
2117
|
-
|
2118
|
-
google_protobuf_FileDescriptorProto
|
2119
|
-
|
2120
|
-
|
3153
|
+
_upb_DefPool_Init** deps = init->deps;
|
3154
|
+
google_protobuf_FileDescriptorProto* file;
|
3155
|
+
upb_Arena* arena;
|
3156
|
+
upb_Status status;
|
2121
3157
|
|
2122
|
-
|
3158
|
+
upb_Status_Clear(&status);
|
2123
3159
|
|
2124
|
-
if (
|
3160
|
+
if (upb_DefPool_FindFileByName(s, init->filename)) {
|
2125
3161
|
return true;
|
2126
3162
|
}
|
2127
3163
|
|
2128
|
-
arena =
|
3164
|
+
arena = upb_Arena_New();
|
2129
3165
|
|
2130
3166
|
for (; *deps; deps++) {
|
2131
|
-
if (!
|
3167
|
+
if (!_upb_DefPool_LoadDefInitEx(s, *deps, rebuild_minitable)) goto err;
|
2132
3168
|
}
|
2133
3169
|
|
2134
3170
|
file = google_protobuf_FileDescriptorProto_parse_ex(
|
2135
|
-
init->descriptor.data, init->descriptor.size, NULL,
|
2136
|
-
arena);
|
3171
|
+
init->descriptor.data, init->descriptor.size, NULL,
|
3172
|
+
kUpb_DecodeOption_AliasString, arena);
|
2137
3173
|
s->bytes_loaded += init->descriptor.size;
|
2138
3174
|
|
2139
3175
|
if (!file) {
|
2140
|
-
|
3176
|
+
upb_Status_SetErrorFormat(
|
2141
3177
|
&status,
|
2142
3178
|
"Failed to parse compiled-in descriptor for file '%s'. This should "
|
2143
3179
|
"never happen.",
|
@@ -2145,24 +3181,81 @@ bool _upb_symtab_loaddefinit(upb_symtab *s, const upb_def_init *init) {
|
|
2145
3181
|
goto err;
|
2146
3182
|
}
|
2147
3183
|
|
2148
|
-
|
3184
|
+
const upb_MiniTable_File* mt = rebuild_minitable ? NULL : init->layout;
|
3185
|
+
if (!_upb_DefPool_AddFile(s, file, mt, &status)) {
|
3186
|
+
goto err;
|
3187
|
+
}
|
2149
3188
|
|
2150
|
-
|
3189
|
+
upb_Arena_Free(arena);
|
2151
3190
|
return true;
|
2152
3191
|
|
2153
3192
|
err:
|
2154
|
-
fprintf(stderr,
|
2155
|
-
|
2156
|
-
|
3193
|
+
fprintf(stderr,
|
3194
|
+
"Error loading compiled-in descriptor for file '%s' (this should "
|
3195
|
+
"never happen): %s\n",
|
3196
|
+
init->filename, upb_Status_ErrorMessage(&status));
|
3197
|
+
upb_Arena_Free(arena);
|
2157
3198
|
return false;
|
2158
3199
|
}
|
2159
3200
|
|
2160
|
-
size_t
|
3201
|
+
size_t _upb_DefPool_BytesLoaded(const upb_DefPool* s) {
|
2161
3202
|
return s->bytes_loaded;
|
2162
3203
|
}
|
2163
3204
|
|
2164
|
-
|
2165
|
-
|
3205
|
+
upb_Arena* _upb_DefPool_Arena(const upb_DefPool* s) { return s->arena; }
|
3206
|
+
|
3207
|
+
const upb_FieldDef* _upb_DefPool_FindExtensionByMiniTable(
|
3208
|
+
const upb_DefPool* s, const upb_MiniTable_Extension* ext) {
|
3209
|
+
upb_value v;
|
3210
|
+
bool ok = upb_inttable_lookup(&s->exts, (uintptr_t)ext, &v);
|
3211
|
+
UPB_ASSERT(ok);
|
3212
|
+
return upb_value_getconstptr(v);
|
3213
|
+
}
|
3214
|
+
|
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) {
|
3233
|
+
return s->extreg;
|
3234
|
+
}
|
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;
|
2166
3259
|
}
|
2167
3260
|
|
2168
3261
|
#undef CHK_OOM
|