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