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