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